forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			173 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			173 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
## Show that llvm-readobj/llvm-readelf tools can dump the .dynamic section which
 | 
						|
## is not alone in PT_DYNAMIC segment.
 | 
						|
 | 
						|
## In the first case .text is placed before .dynamic.
 | 
						|
## We check that we warn about this case.
 | 
						|
 | 
						|
# RUN: yaml2obj --docnum=1 %s -o %t1.o
 | 
						|
# RUN: llvm-readobj --dynamic-table %t1.o 2>&1 \
 | 
						|
# RUN:   | FileCheck %s --DFILE=%t1.o --check-prefixes=WARNING,LLVM
 | 
						|
# RUN: llvm-readelf --dynamic-table %t1.o 2>&1 \
 | 
						|
# RUN:   | FileCheck %s --DFILE=%t1.o --check-prefixes=WARNING,GNU
 | 
						|
 | 
						|
# WARNING: warning: '[[FILE]]': The SHT_DYNAMIC section '.dynamic' is not at the start of PT_DYNAMIC segment
 | 
						|
# WARNING: warning: '[[FILE]]': invalid PT_DYNAMIC size (0x21){{$}}
 | 
						|
# WARNING: warning: '[[FILE]]': SHT_DYNAMIC section header and PT_DYNAMIC program header disagree about the location of the dynamic table
 | 
						|
# WARNING: warning: '[[FILE]]': PT_DYNAMIC dynamic table is invalid: SHT_DYNAMIC will be used
 | 
						|
 | 
						|
# LLVM:      DynamicSection [ (2 entries)
 | 
						|
# LLVM-NEXT:   Tag                Type     Name/Value
 | 
						|
# LLVM-NEXT:   0x0000000000000018 BIND_NOW 0x1
 | 
						|
# LLVM-NEXT:   0x0000000000000000 NULL     0x0
 | 
						|
# LLVM-NEXT: ]
 | 
						|
 | 
						|
# GNU:      Dynamic section at offset 0x{{.*}} contains 2 entries:
 | 
						|
# GNU-NEXT:   Tag                Type       Name/Value
 | 
						|
# GNU-NEXT:   0x0000000000000018 (BIND_NOW) 0x1
 | 
						|
# GNU-NEXT:   0x0000000000000000 (NULL)     0x0
 | 
						|
 | 
						|
--- !ELF
 | 
						|
FileHeader:
 | 
						|
  Class:   ELFCLASS64
 | 
						|
  Data:    ELFDATA2LSB
 | 
						|
  Type:    ET_EXEC
 | 
						|
  Machine: EM_X86_64
 | 
						|
Sections:
 | 
						|
  - Name: .text
 | 
						|
    Type: SHT_PROGBITS
 | 
						|
    Flags: [SHF_ALLOC]
 | 
						|
    Address: 0x1000
 | 
						|
    AddressAlign: 0x100
 | 
						|
    Content: "00"
 | 
						|
  - Name: .dynamic
 | 
						|
    Type: SHT_DYNAMIC
 | 
						|
    Flags: [SHF_ALLOC]
 | 
						|
    Address: 0x1001
 | 
						|
    Entries:
 | 
						|
      - Tag:   DT_BIND_NOW
 | 
						|
        Value: 0x1
 | 
						|
      - Tag:   DT_NULL
 | 
						|
        Value: 0x0
 | 
						|
ProgramHeaders:
 | 
						|
  - Type: PT_LOAD
 | 
						|
    VAddr: 0x1000
 | 
						|
    Sections:
 | 
						|
      - Section: .text
 | 
						|
      - Section: .dynamic
 | 
						|
  - Type: PT_DYNAMIC
 | 
						|
    VAddr: 0x1000
 | 
						|
    Sections:
 | 
						|
      - Section: .text
 | 
						|
      - Section: .dynamic
 | 
						|
 | 
						|
## In this case .text goes after .dynamic and we don't display any warnings,
 | 
						|
## though the content of the .text is used for dumping the dynamic table.
 | 
						|
 | 
						|
# RUN: yaml2obj --docnum=2 %s -o %t2.o
 | 
						|
# RUN: llvm-readobj --dynamic-table %t2.o 2>&1 | FileCheck %s --check-prefix=LLVM2
 | 
						|
# RUN: llvm-readelf --dynamic-table %t2.o 2>&1 | FileCheck %s --check-prefix=GNU2
 | 
						|
 | 
						|
# LLVM2:      DynamicSection [ (3 entries)
 | 
						|
# LLVM2-NEXT:   Tag                Type     Name/Value
 | 
						|
# LLVM2-NEXT:   0x0000000000000018 BIND_NOW 0x1
 | 
						|
# LLVM2-NEXT:   0x0000000000000018 BIND_NOW 0x2
 | 
						|
# LLVM2-NEXT:   0x0000000000000000 NULL     0x0
 | 
						|
# LLVM2-NEXT: ]
 | 
						|
 | 
						|
# GNU2:      Dynamic section at offset 0x{{.*}} contains 3 entries:
 | 
						|
# GNU2-NEXT:   Tag                Type       Name/Value
 | 
						|
# GNU2-NEXT:   0x0000000000000018 (BIND_NOW) 0x1
 | 
						|
# GNU2-NEXT:   0x0000000000000018 (BIND_NOW) 0x2
 | 
						|
# GNU2-NEXT:   0x0000000000000000 (NULL)     0x0
 | 
						|
 | 
						|
--- !ELF
 | 
						|
FileHeader:
 | 
						|
  Class:   ELFCLASS64
 | 
						|
  Data:    ELFDATA2LSB
 | 
						|
  Type:    ET_EXEC
 | 
						|
  Machine: EM_X86_64
 | 
						|
Sections:
 | 
						|
  - Name: .dynamic
 | 
						|
    Type: SHT_DYNAMIC
 | 
						|
    Flags: [SHF_ALLOC]
 | 
						|
    Address: 0x1000
 | 
						|
    AddressAlign: 0x1000
 | 
						|
    Entries:
 | 
						|
      - Tag:   DT_BIND_NOW
 | 
						|
        Value: 0x1
 | 
						|
      - Tag:   DT_BIND_NOW
 | 
						|
        Value: 0x2
 | 
						|
  - Name: .text
 | 
						|
    Type: SHT_PROGBITS
 | 
						|
    Flags: [SHF_ALLOC]
 | 
						|
    Address: 0x1100
 | 
						|
    AddressAlign: 0x100
 | 
						|
    Content: "00000000000000000000000000000000"
 | 
						|
ProgramHeaders:
 | 
						|
  - Type: PT_LOAD
 | 
						|
    VAddr: 0x1000
 | 
						|
    Sections:
 | 
						|
      - Section: .dynamic
 | 
						|
      - Section: .text
 | 
						|
  - Type: PT_DYNAMIC
 | 
						|
    VAddr: 0x1000
 | 
						|
    Sections:
 | 
						|
      - Section: .dynamic
 | 
						|
      - Section: .text
 | 
						|
 | 
						|
## In this case .text goes after .dynamic, but (PT_DYNAMIC segment size % dynamic entry size != 0)
 | 
						|
## and we have to use the information from the section header instead.
 | 
						|
 | 
						|
# RUN: yaml2obj --docnum=3 %s -o %t3.o
 | 
						|
# RUN: llvm-readobj --dynamic-table %t3.o 2>&1 | FileCheck %s --DFILE=%t3.o --check-prefixes=WARNING2,LLVM3
 | 
						|
# RUN: llvm-readelf --dynamic-table %t3.o 2>&1 | FileCheck %s --DFILE=%t3.o --check-prefixes=WARNING2,GNU3
 | 
						|
 | 
						|
# WARNING2: warning: '[[FILE]]': invalid PT_DYNAMIC size (0x101){{$}}
 | 
						|
# WARNING2: warning: '[[FILE]]': PT_DYNAMIC dynamic table is invalid: SHT_DYNAMIC will be used
 | 
						|
 | 
						|
# LLVM3:      DynamicSection [ (2 entries)
 | 
						|
# LLVM3-NEXT:   Tag                Type     Name/Value
 | 
						|
# LLVM3-NEXT:   0x0000000000000018 BIND_NOW 0x1
 | 
						|
# LLVM3-NEXT:   0x0000000000000000 NULL     0x0
 | 
						|
# LLVM3-NEXT: ]
 | 
						|
 | 
						|
# GNU3:      Dynamic section at offset 0x{{.*}} contains 2 entries:
 | 
						|
# GNU3-NEXT:   Tag                Type       Name/Value
 | 
						|
# GNU3-NEXT:   0x0000000000000018 (BIND_NOW) 0x1
 | 
						|
# GNU3-NEXT:   0x0000000000000000 (NULL)     0x0
 | 
						|
 | 
						|
--- !ELF
 | 
						|
FileHeader:
 | 
						|
  Class:   ELFCLASS64
 | 
						|
  Data:    ELFDATA2LSB
 | 
						|
  Type:    ET_EXEC
 | 
						|
  Machine: EM_X86_64
 | 
						|
Sections:
 | 
						|
  - Name: .dynamic
 | 
						|
    Type: SHT_DYNAMIC
 | 
						|
    Flags: [SHF_ALLOC]
 | 
						|
    Address: 0x1000
 | 
						|
    AddressAlign: 0x1000
 | 
						|
    Entries:
 | 
						|
      - Tag:   DT_BIND_NOW
 | 
						|
        Value: 0x1
 | 
						|
      - Tag:   DT_NULL
 | 
						|
        Value: 0x0
 | 
						|
  - Name: .text
 | 
						|
    Type: SHT_PROGBITS
 | 
						|
    Flags: [SHF_ALLOC]
 | 
						|
    Address: 0x1100
 | 
						|
    AddressAlign: 0x100
 | 
						|
    Content: "00"
 | 
						|
ProgramHeaders:
 | 
						|
  - Type: PT_LOAD
 | 
						|
    VAddr: 0x1000
 | 
						|
    Sections:
 | 
						|
      - Section: .dynamic
 | 
						|
      - Section: .text
 | 
						|
  - Type: PT_DYNAMIC
 | 
						|
    VAddr: 0x1000
 | 
						|
    Sections:
 | 
						|
      - Section: .dynamic
 | 
						|
      - Section: .text
 |