1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
|
## 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]]': SHT_DYNAMIC section with index 2 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
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
FirstSec: .text
LastSec: .dynamic
- Type: PT_DYNAMIC
VAddr: 0x1000
FirstSec: .text
LastSec: .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
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
FirstSec: .dynamic
LastSec: .text
- Type: PT_DYNAMIC
VAddr: 0x1000
FirstSec: .dynamic
LastSec: .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
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
FirstSec: .dynamic
LastSec: .text
- Type: PT_DYNAMIC
VAddr: 0x1000
FirstSec: .dynamic
LastSec: .text
|