# 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