| # Overlapping PT_LOAD and PT_TLS segments in an object file should be able to |
| # exist side by side. |
| |
| # When an ELF file contains both PT_LOAD and PT_TLS segments where the PT_TLS |
| # segment has the same p_vaddr and p_paddr as a PT_LOAD segment, this |
| # was causing LLDB, when loading a ELF object file at an address, to overwrite |
| # the section load address for a PT_LOAD that shares the same p_vaddr value in |
| # the section load list's addr to section map for this code. This test ensures |
| # that no PT_TLS segments get loaded and can't interfere with real segments we |
| # need to resolved as all access to thread specific memory is only done via |
| # DWARF location expressions. We also don't have any code that loads any thread |
| # specific segments at a different address for different threads, so there is |
| # no reason currently to try and load thread specific segments. |
| |
| # RUN: yaml2obj %s -o %t |
| # RUN: lldb-test object-file %t | FileCheck %s |
| |
| |
| # CHECK: Index: 0 |
| # CHECK-NEXT: ID: 0xffffffffffffffff |
| # CHECK-NEXT: Name: PT_LOAD[0] |
| # CHECK-NEXT: Type: container |
| # CHECK-NEXT: Permissions: rw- |
| # CHECK-NEXT: Thread specific: no |
| # CHECK-NEXT: VM address: 0x1000 |
| # CHECK-NEXT: VM size: 16 |
| # CHECK-NEXT: File size: 16 |
| # CHECK-NEXT: Showing 1 subsections |
| |
| # CHECK: Index: 1 |
| # CHECK-NEXT: ID: 0xfffffffffffffffe |
| # CHECK-NEXT: Name: PT_TLS[0] |
| # CHECK-NEXT: Type: container |
| # CHECK-NEXT: Permissions: rw- |
| # CHECK-NEXT: Thread specific: yes |
| # CHECK-NEXT: VM address: 0x1000 |
| # CHECK-NEXT: VM size: 16 |
| # CHECK-NEXT: File size: 0 |
| # CHECK-NEXT: Showing 1 subsections |
| |
| # RUN: %lldb %t -b \ |
| # RUN: -o "image lookup -a 0x1000" \ |
| # RUN: -o "target modules load --file %t --slide 0" \ |
| # RUN: -o "image lookup -a 0x1000" \ |
| # RUN: -o "target dump section-load-list" \ |
| # RUN: | FileCheck --check-prefix=LOOKUP %s |
| |
| # LOOKUP-LABEL: image lookup -a 0x1000 |
| # LOOKUP: Address: {{.*}}.PT_LOAD[0]..data + 0) |
| # LOOKUP: target modules load |
| # LOOKUP: image lookup -a 0x1000 |
| # LOOKUP: Address: {{.*}}.PT_LOAD[0]..data + 0) |
| # LOOKUP: target dump section-load-list |
| # LOOKUP: PT_TLS-overlap-PT_LOAD.yaml.tmp.PT_LOAD[0] |
| # LOOKUP-NOT: PT_TLS-overlap-PT_LOAD.yaml.tmp.PT_TLS[0] |
| |
| !ELF |
| FileHeader: |
| Class: ELFCLASS32 |
| Data: ELFDATA2LSB |
| Type: ET_EXEC |
| Machine: EM_ARM |
| Sections: |
| - Name: .data |
| Type: SHT_PROGBITS |
| Flags: [ SHF_ALLOC, SHF_WRITE ] |
| Address: 0x1000 |
| AddressAlign: 0x4 |
| Size: 0x10 |
| - Name: .tbss |
| Type: SHT_NOBITS |
| Flags: [ SHF_ALLOC, SHF_WRITE, SHF_TLS ] |
| Address: 0x1000 |
| AddressAlign: 0x4 |
| Size: 0x10 |
| ProgramHeaders: |
| - Type: PT_LOAD |
| Flags: [ PF_W, PF_R ] |
| VAddr: 0x1000 |
| Align: 0x4 |
| FirstSec: .data |
| LastSec: .data |
| - Type: PT_TLS |
| Flags: [ PF_R, PF_W ] |
| VAddr: 0x1000 |
| Align: 0x4 |
| FirstSec: .tbss |
| LastSec: .tbss |