899 lines
34 KiB
Plaintext
899 lines
34 KiB
Plaintext
## Check that we correctly display the contents of the .stack_sizes section
|
|
## in a relocatable object file.
|
|
|
|
# RUN: yaml2obj --docnum=1 %s -o %t01
|
|
# RUN: llvm-readelf --stack-sizes %t01 \
|
|
# RUN: | FileCheck %s --check-prefix=RELOC-GNU --strict-whitespace --match-full-lines
|
|
# RUN: llvm-readobj --stack-sizes %t01 | FileCheck %s --check-prefix=RELOC-LLVM
|
|
|
|
# RELOC-GNU: Size Function
|
|
# RELOC-GNU-NEXT: 16 referenced_by_symbol_foo
|
|
# RELOC-GNU-NEXT: 32 referenced_via_section_bar
|
|
# RELOC-GNU-NEXT: 8 separate_text_section_baz
|
|
# RELOC-GNU-NOT:{{.}}
|
|
|
|
# RELOC-LLVM: StackSizes [
|
|
# RELOC-LLVM-NEXT: Entry {
|
|
# RELOC-LLVM-NEXT: Function: referenced_by_symbol_foo
|
|
# RELOC-LLVM-NEXT: Size: 0x10
|
|
# RELOC-LLVM-NEXT: }
|
|
# RELOC-LLVM-NEXT: Entry {
|
|
# RELOC-LLVM-NEXT: Function: referenced_via_section_bar
|
|
# RELOC-LLVM-NEXT: Size: 0x20
|
|
# RELOC-LLVM-NEXT: }
|
|
# RELOC-LLVM-NEXT: Entry {
|
|
# RELOC-LLVM-NEXT: Function: separate_text_section_baz
|
|
# RELOC-LLVM-NEXT: Size: 0x8
|
|
# RELOC-LLVM-NEXT: }
|
|
# RELOC-LLVM-NEXT: ]
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_REL
|
|
Machine: EM_X86_64
|
|
Sections:
|
|
- Name: .text
|
|
Type: SHT_PROGBITS
|
|
Flags: [SHF_ALLOC]
|
|
Size: 16
|
|
- Name: .text.baz
|
|
Type: SHT_PROGBITS
|
|
Flags: [SHF_ALLOC]
|
|
Size: 16
|
|
- Name: .stack_sizes
|
|
Type: SHT_PROGBITS
|
|
Entries:
|
|
- Size: 0x10
|
|
- Size: 0x20
|
|
Link: .text
|
|
- Name: '.stack_sizes (1)'
|
|
Type: SHT_PROGBITS
|
|
Entries:
|
|
- Address: 0x20
|
|
Size: 0x8
|
|
Link: .text.baz
|
|
- Name: .rela.stack_sizes
|
|
Type: SHT_RELA
|
|
Info: .stack_sizes
|
|
Relocations:
|
|
## A symbol relative reference.
|
|
- Offset: 0
|
|
Symbol: referenced_by_symbol_foo
|
|
Type: R_X86_64_64
|
|
## A section relative reference.
|
|
- Offset: 9
|
|
Addend: 16
|
|
Symbol: .text
|
|
Type: R_X86_64_64
|
|
- Name: '.rela.stack_sizes (1)'
|
|
Type: SHT_RELA
|
|
Info: '.stack_sizes (1)'
|
|
Relocations:
|
|
- Offset: 0
|
|
Symbol: separate_text_section_baz
|
|
Type: R_X86_64_64
|
|
- Name: .symtab
|
|
Type: SHT_SYMTAB
|
|
ShOffset: [[SYMTABOFFSET=<none>]]
|
|
Symbols:
|
|
- Name: separate_text_section_baz
|
|
Section: [[SEC1=.text.baz]]
|
|
Type: STT_FUNC
|
|
Index: [[SEC1INDEX=<none>]]
|
|
- Name: .text
|
|
Section: .text
|
|
Type: STT_SECTION
|
|
- Name: referenced_by_symbol_foo
|
|
Section: .text
|
|
Type: STT_FUNC
|
|
Binding: STB_GLOBAL
|
|
- Name: referenced_via_section_bar
|
|
Section: .text
|
|
Value: 0x10
|
|
Type: STT_FUNC
|
|
Binding: STB_GLOBAL
|
|
|
|
## Check that we report a warning when we are unable to read
|
|
## the symbol table when dumping stack sizes.
|
|
|
|
# RUN: yaml2obj --docnum=1 %s -DSYMTABOFFSET=0xffffeeee -o %t01.broken.symtab
|
|
# RUN: llvm-readelf --stack-sizes %t01.broken.symtab 2>&1 | \
|
|
# RUN: FileCheck %s -DFILE=%t01.broken.symtab --check-prefix=SYMTAB-GNU --implicit-check-not=warning:
|
|
# RUN: llvm-readobj --stack-sizes %t01.broken.symtab 2>&1 | \
|
|
# RUN: FileCheck %s -DFILE=%t01.broken.symtab --check-prefix=SYMTAB-LLVM --implicit-check-not=warning:
|
|
|
|
# SYMTAB-GNU: Stack Sizes:
|
|
# SYMTAB-GNU-NEXT: Size Function
|
|
# SYMTAB-GNU-NEXT: warning: '[[FILE]]': unable to get the target of relocation with index 0 in SHT_RELA section with index 5: unable to read an entry with index 3 from SHT_SYMTAB section with index 7: section [index 7] has a sh_offset (0xffffeeee) + sh_size (0x78) that is greater than the file size (0x450)
|
|
# SYMTAB-GNU-NEXT: warning: '[[FILE]]': unable to read the symbol table: section [index 7] has a sh_offset (0xffffeeee) + sh_size (0x78) that is greater than the file size (0x450)
|
|
# SYMTAB-GNU-NEXT: warning: '[[FILE]]': could not identify function symbol for stack size entry in SHT_PROGBITS section with index 3
|
|
# SYMTAB-GNU-NEXT: 16 ?
|
|
# SYMTAB-GNU-NEXT: warning: '[[FILE]]': unable to get the target of relocation with index 1 in SHT_RELA section with index 5: unable to read an entry with index 2 from SHT_SYMTAB section with index 7: section [index 7] has a sh_offset (0xffffeeee) + sh_size (0x78) that is greater than the file size (0x450)
|
|
# SYMTAB-GNU-NEXT: 32 ?
|
|
# SYMTAB-GNU-NEXT: warning: '[[FILE]]': unable to get the target of relocation with index 0 in SHT_RELA section with index 6: unable to read an entry with index 1 from SHT_SYMTAB section with index 7: section [index 7] has a sh_offset (0xffffeeee) + sh_size (0x78) that is greater than the file size (0x450)
|
|
# SYMTAB-GNU-NEXT: warning: '[[FILE]]': could not identify function symbol for stack size entry in SHT_PROGBITS section with index 4
|
|
# SYMTAB-GNU-NEXT: 8 ?
|
|
|
|
# SYMTAB-LLVM: StackSizes [
|
|
# SYMTAB-LLVM-NEXT: warning: '[[FILE]]': unable to get the target of relocation with index 0 in SHT_RELA section with index 5: unable to read an entry with index 3 from SHT_SYMTAB section with index 7: section [index 7] has a sh_offset (0xffffeeee) + sh_size (0x78) that is greater than the file size (0x450)
|
|
# SYMTAB-LLVM-NEXT: warning: '[[FILE]]': unable to read the symbol table: section [index 7] has a sh_offset (0xffffeeee) + sh_size (0x78) that is greater than the file size (0x450)
|
|
# SYMTAB-LLVM-NEXT: warning: '[[FILE]]': could not identify function symbol for stack size entry in SHT_PROGBITS section with index 3
|
|
# SYMTAB-LLVM-NEXT: Entry {
|
|
# SYMTAB-LLVM-NEXT: Function: ?
|
|
# SYMTAB-LLVM-NEXT: Size: 0x10
|
|
# SYMTAB-LLVM-NEXT: }
|
|
# SYMTAB-LLVM-NEXT: warning: '[[FILE]]': unable to get the target of relocation with index 1 in SHT_RELA section with index 5: unable to read an entry with index 2 from SHT_SYMTAB section with index 7: section [index 7] has a sh_offset (0xffffeeee) + sh_size (0x78) that is greater than the file size (0x450)
|
|
# SYMTAB-LLVM-NEXT: Entry {
|
|
# SYMTAB-LLVM-NEXT: Function: ?
|
|
# SYMTAB-LLVM-NEXT: Size: 0x20
|
|
# SYMTAB-LLVM-NEXT: }
|
|
# SYMTAB-LLVM-NEXT: warning: '[[FILE]]': unable to get the target of relocation with index 0 in SHT_RELA section with index 6: unable to read an entry with index 1 from SHT_SYMTAB section with index 7: section [index 7] has a sh_offset (0xffffeeee) + sh_size (0x78) that is greater than the file size (0x450)
|
|
# SYMTAB-LLVM-NEXT: warning: '[[FILE]]': could not identify function symbol for stack size entry in SHT_PROGBITS section with index 4
|
|
# SYMTAB-LLVM-NEXT: Entry {
|
|
# SYMTAB-LLVM-NEXT: Function: ?
|
|
# SYMTAB-LLVM-NEXT: Size: 0x8
|
|
# SYMTAB-LLVM-NEXT: }
|
|
# SYMTAB-LLVM-NEXT: ]
|
|
|
|
## In this case we have a function symbol with an invalid section index.
|
|
## Document what we dump.
|
|
|
|
# RUN: yaml2obj --docnum=1 %s -DSEC1="<none>" -DSEC1INDEX=0xFF -o %t01.broken.sym
|
|
# RUN: llvm-readelf --stack-sizes %t01.broken.sym 2>&1 | \
|
|
# RUN: FileCheck %s -DFILE=%t01.broken.sym --check-prefix=SYM-GNU --implicit-check-not=warning:
|
|
# RUN: llvm-readobj --stack-sizes %t01.broken.sym 2>&1 | \
|
|
# RUN: FileCheck %s -DFILE=%t01.broken.sym --check-prefix=SYM-LLVM --implicit-check-not=warning:
|
|
|
|
# SYM-GNU: Stack Sizes:
|
|
# SYM-GNU-NEXT: Size Function
|
|
# SYM-GNU-NEXT: warning: '[[FILE]]': unable to get address of symbol 'separate_text_section_baz': invalid section index: 255
|
|
# SYM-GNU-NEXT: warning: '[[FILE]]': could not identify function symbol for stack size entry in SHT_PROGBITS section with index 3
|
|
# SYM-GNU-NEXT: 16 ?
|
|
# SYM-GNU-NEXT: 32 ?
|
|
# SYM-GNU-NEXT: warning: '[[FILE]]': cannot identify the section for relocation symbol 'separate_text_section_baz': invalid section index: 255
|
|
# SYM-GNU-NEXT: warning: '[[FILE]]': could not identify function symbol for stack size entry in SHT_PROGBITS section with index 4
|
|
# SYM-GNU-NEXT: 8 ?
|
|
|
|
# SYM-LLVM: StackSizes [
|
|
# SYM-LLVM-NEXT: warning: '[[FILE]]': unable to get address of symbol 'separate_text_section_baz': invalid section index: 255
|
|
# SYM-LLVM-NEXT: warning: '[[FILE]]': could not identify function symbol for stack size entry in SHT_PROGBITS section with index 3
|
|
# SYM-LLVM-NEXT: Entry {
|
|
# SYM-LLVM-NEXT: Function: ?
|
|
# SYM-LLVM-NEXT: Size: 0x10
|
|
# SYM-LLVM-NEXT: }
|
|
# SYM-LLVM-NEXT: Entry {
|
|
# SYM-LLVM-NEXT: Function: ?
|
|
# SYM-LLVM-NEXT: Size: 0x20
|
|
# SYM-LLVM-NEXT: }
|
|
# SYM-LLVM-NEXT: warning: '[[FILE]]': cannot identify the section for relocation symbol 'separate_text_section_baz': invalid section index: 255
|
|
# SYM-LLVM-NEXT: warning: '[[FILE]]': could not identify function symbol for stack size entry in SHT_PROGBITS section with index 4
|
|
# SYM-LLVM-NEXT: Entry {
|
|
# SYM-LLVM-NEXT: Function: ?
|
|
# SYM-LLVM-NEXT: Size: 0x8
|
|
# SYM-LLVM-NEXT: }
|
|
# SYM-LLVM-NEXT: ]
|
|
|
|
## Check that we correctly report the stack sizes in an executable (non-relocatable)
|
|
## object file. This also shows that the sh_link field is ignored in this situation
|
|
## without warning.
|
|
|
|
# RUN: yaml2obj --docnum=2 %s -o %t02
|
|
# RUN: llvm-readelf --stack-sizes %t02 2>&1 \
|
|
# RUN: | FileCheck %s --check-prefix=EXEC-GNU --strict-whitespace \
|
|
# RUN: --match-full-lines --implicit-check-not=warning:
|
|
# RUN: llvm-readobj --stack-sizes %t02 2>&1 \
|
|
# RUN: | FileCheck %s --check-prefix=EXEC-LLVM --implicit-check-not=warning:
|
|
|
|
# EXEC-GNU: Size Function
|
|
# EXEC-GNU-NEXT: 16 other
|
|
# EXEC-GNU-NEXT: 32 other_end
|
|
# EXEC-GNU-NEXT: 48 bar
|
|
# EXEC-GNU-NOT:{{.}}
|
|
|
|
# EXEC-LLVM: StackSizes [
|
|
# EXEC-LLVM-NEXT: Entry {
|
|
# EXEC-LLVM-NEXT: Function: other
|
|
# EXEC-LLVM-NEXT: Size: 0x10
|
|
# EXEC-LLVM-NEXT: }
|
|
# EXEC-LLVM-NEXT: Entry {
|
|
# EXEC-LLVM-NEXT: Function: other_end
|
|
# EXEC-LLVM-NEXT: Size: 0x20
|
|
# EXEC-LLVM-NEXT: }
|
|
# EXEC-LLVM-NEXT: Entry {
|
|
# EXEC-LLVM-NEXT: Function: bar
|
|
# EXEC-LLVM-NEXT: Size: 0x30
|
|
# EXEC-LLVM-NEXT: }
|
|
# EXEC-LLVM-NEXT: ]
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_EXEC
|
|
Sections:
|
|
- Name: .text
|
|
Type: SHT_PROGBITS
|
|
Flags: [SHF_ALLOC]
|
|
Size: 16
|
|
- Name: .text2
|
|
Type: SHT_PROGBITS
|
|
Flags: [SHF_ALLOC]
|
|
Size: 16
|
|
- Name: .stack_sizes
|
|
Type: SHT_PROGBITS
|
|
Entries:
|
|
- Address: 0x0
|
|
Size: 0x10
|
|
- Address: 0x10
|
|
Size: 0x20
|
|
- Address: 0x20
|
|
Size: 0x30
|
|
Link: .text2
|
|
Symbols:
|
|
## Undefined symbols are ignored.
|
|
- Name: undefined
|
|
Type: STT_FUNC
|
|
Binding: STB_GLOBAL
|
|
## sh_link of .stack_sizes is ignored for non-reloctable objects.
|
|
- Name: other
|
|
Section: .text
|
|
Value: 0
|
|
Type: STT_FUNC
|
|
Binding: STB_GLOBAL
|
|
## If two symbols have the same value, the first is picked, regardless of
|
|
## the sh_link value of the .stack_sizes section.
|
|
- Name: other_end
|
|
Section: .text
|
|
Value: 0x10
|
|
Type: STT_FUNC
|
|
Binding: STB_GLOBAL
|
|
- Name: foo
|
|
Section: .text2
|
|
Value: 0x10
|
|
Type: STT_FUNC
|
|
Binding: STB_GLOBAL
|
|
- Name: bar
|
|
Section: .text2
|
|
Value: 0x20
|
|
Type: STT_FUNC
|
|
Binding: STB_GLOBAL
|
|
|
|
## Check that we report a warning when we find relocations whose offsets point outside
|
|
## of the .stack_sizes section.
|
|
|
|
# RUN: yaml2obj --docnum=3 %s -o %t03
|
|
# RUN: llvm-readelf --stack-sizes %t03 2>&1 | FileCheck %s --check-prefix=SHORT-GNU -DFILE=%t03
|
|
# RUN: llvm-readobj --stack-sizes %t03 2>&1 | FileCheck %s --check-prefix=SHORT-LLVM -DFILE=%t03
|
|
|
|
# SHORT-GNU: Stack Sizes:
|
|
# SHORT-GNU-NEXT: Size Function
|
|
# SHORT-GNU-NEXT: 8 foo
|
|
# SHORT-GNU-NEXT: warning: '[[FILE]]': found invalid relocation offset (0x1) into SHT_PROGBITS section with index 2 while trying to extract a stack size entry
|
|
# SHORT-GNU-NEXT: 8 foo
|
|
|
|
# SHORT-LLVM: StackSizes [
|
|
# SHORT-LLVM-NEXT: Entry {
|
|
# SHORT-LLVM-NEXT: Function: foo
|
|
# SHORT-LLVM-NEXT: Size: 0x8
|
|
# SHORT-LLVM-NEXT: }
|
|
# SHORT-LLVM-NEXT: warning: '[[FILE]]': found invalid relocation offset (0x1) into SHT_PROGBITS section with index 2 while trying to extract a stack size entry
|
|
# SHORT-LLVM-NEXT: Entry {
|
|
# SHORT-LLVM-NEXT: Function: foo
|
|
# SHORT-LLVM-NEXT: Size: 0x8
|
|
# SHORT-LLVM-NEXT: }
|
|
# SHORT-LLVM-NEXT: ]
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_REL
|
|
Machine: EM_X86_64
|
|
Sections:
|
|
- Name: .text
|
|
Type: SHT_PROGBITS
|
|
Flags: [SHF_ALLOC]
|
|
Size: 16
|
|
- Name: .stack_sizes
|
|
Type: SHT_PROGBITS
|
|
Link: .text
|
|
Entries:
|
|
- Size: 0x8
|
|
- Name: .rela.stack_sizes
|
|
Type: SHT_RELA
|
|
Info: .stack_sizes
|
|
Relocations:
|
|
- Offset: 0x0
|
|
Symbol: foo
|
|
Type: R_X86_64_64
|
|
- Offset: 0x1
|
|
Symbol: foo
|
|
Type: R_X86_64_64
|
|
- Offset: 0x1
|
|
Symbol: foo
|
|
Type: R_X86_64_64
|
|
- Offset: 0x0
|
|
Symbol: foo
|
|
Type: R_X86_64_64
|
|
Symbols:
|
|
- Name: foo
|
|
Section: .text
|
|
Type: STT_FUNC
|
|
Binding: STB_GLOBAL
|
|
|
|
## Check that we warn about a function symbol that is not in the section
|
|
## that is referenced by the stack sizes section's sh_link, for relocatable
|
|
## output.
|
|
|
|
# RUN: yaml2obj --docnum=4 %s -o %t04
|
|
# RUN: llvm-readelf --stack-sizes %t04 2> %t04-gnu.err | FileCheck %s --check-prefix=WRONGSECTION-GNU
|
|
# RUN: FileCheck %s < %t04-gnu.err --check-prefix=WRONGSECTION-ERR -DFILE=%t04
|
|
# RUN: llvm-readobj --stack-sizes %t04 2> %t04-llvm.err | FileCheck %s --check-prefix=WRONGSECTION-LLVM
|
|
# RUN: FileCheck %s < %t04-llvm.err --check-prefix=WRONGSECTION-ERR -DFILE=%t04
|
|
|
|
# RUN: llvm-readelf --stack-sizes --demangle %t04 2>&1 | FileCheck %s --check-prefix=WRONGSECTION-DEMANGLE-ERR -DFILE=%t04
|
|
# RUN: llvm-readobj --stack-sizes --demangle %t04 2>&1 | FileCheck %s --check-prefix=WRONGSECTION-DEMANGLE-ERR -DFILE=%t04
|
|
|
|
# WRONGSECTION-GNU: Size Function
|
|
# WRONGSECTION-GNU-NEXT: 8 _Z3foof
|
|
|
|
# WRONGSECTION-LLVM: StackSizes [
|
|
# WRONGSECTION-LLVM-NEXT: Entry {
|
|
# WRONGSECTION-LLVM-NEXT: Function: _Z3foof
|
|
# WRONGSECTION-LLVM-NEXT: Size: 0x8
|
|
# WRONGSECTION-LLVM-NEXT: }
|
|
# WRONGSECTION-LLVM-NEXT: ]
|
|
|
|
# WRONGSECTION-ERR: warning: '[[FILE]]': relocation symbol '_Z3foof' is not in the expected section
|
|
# WRONGSECTION-DEMANGLE-ERR: warning: '[[FILE]]': relocation symbol 'foo(float)' is not in the expected section
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_REL
|
|
Machine: EM_X86_64
|
|
Sections:
|
|
- Name: .text
|
|
Type: SHT_PROGBITS
|
|
Size: 8
|
|
- Name: .text2
|
|
Type: SHT_PROGBITS
|
|
Size: 8
|
|
Flags: [SHF_ALLOC]
|
|
- Name: .stack_sizes
|
|
Type: SHT_PROGBITS
|
|
Entries:
|
|
- Size: 0x8
|
|
Link: .text2
|
|
- Name: .rela.stack_sizes
|
|
Type: SHT_RELA
|
|
Info: .stack_sizes
|
|
Relocations:
|
|
- Offset: 0
|
|
Symbol: _Z3foof
|
|
Type: R_X86_64_64
|
|
Symbols:
|
|
- Name: _Z3foof
|
|
Section: .text
|
|
Type: STT_FUNC
|
|
Binding: STB_GLOBAL
|
|
|
|
## Check that we report a warning when a stack sizes section ends with an incomplete stack size entry.
|
|
|
|
# RUN: yaml2obj --docnum=5 %s -o %t05
|
|
# RUN: llvm-readelf --stack-sizes %t05 2>&1 | \
|
|
# RUN: FileCheck %s --check-prefix=SUDDENEND-GNU -DFILE=%t05
|
|
# RUN: llvm-readobj --stack-sizes %t05 2>&1 | \
|
|
# RUN: FileCheck %s --check-prefix=SUDDENEND-LLVM -DFILE=%t05
|
|
|
|
# SUDDENEND-GNU: Stack Sizes:
|
|
# SUDDENEND-GNU-NEXT: Size Function
|
|
# SUDDENEND-GNU-NEXT: 8 foo
|
|
# SUDDENEND-GNU-NEXT: warning: '[[FILE]]': SHT_PROGBITS section with index 2 ended while trying to extract a stack size entry
|
|
# SUDDENEND-GNU-NEXT: 8 foo
|
|
# SUDDENEND-GNU-NEXT: warning: '[[FILE]]': SHT_PROGBITS section with index 3 ended while trying to extract a stack size entry
|
|
|
|
# SUDDENEND-LLVM: StackSizes [
|
|
# SUDDENEND-LLVM-NEXT: Entry {
|
|
# SUDDENEND-LLVM-NEXT: Function: foo
|
|
# SUDDENEND-LLVM-NEXT: Size: 0x8
|
|
# SUDDENEND-LLVM-NEXT: }
|
|
# SUDDENEND-LLVM-NEXT: warning: '[[FILE]]': SHT_PROGBITS section with index 2 ended while trying to extract a stack size entry
|
|
# SUDDENEND-LLVM-NEXT: Entry {
|
|
# SUDDENEND-LLVM-NEXT: Function: foo
|
|
# SUDDENEND-LLVM-NEXT: Size: 0x8
|
|
# SUDDENEND-LLVM-NEXT: }
|
|
# SUDDENEND-LLVM-NEXT: warning: '[[FILE]]': SHT_PROGBITS section with index 3 ended while trying to extract a stack size entry
|
|
# SUDDENEND-LLVM-NEXT: ]
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_EXEC
|
|
Machine: EM_X86_64
|
|
Sections:
|
|
- Name: .text
|
|
Type: SHT_PROGBITS
|
|
- Name: .stack_sizes
|
|
Type: SHT_PROGBITS
|
|
Link: .text
|
|
Entries:
|
|
- Size: 0x8
|
|
- Size: 0x10
|
|
## 0x11 == the normal size minus 1.
|
|
ShSize: 0x11
|
|
- Name: .stack_sizes (1)
|
|
Type: SHT_PROGBITS
|
|
Link: .text
|
|
Entries:
|
|
- Size: 0x8
|
|
- Size: 0x10
|
|
ShSize: 0x11
|
|
Symbols:
|
|
- Name: foo
|
|
Section: .text
|
|
Type: STT_FUNC
|
|
|
|
## Check that we report an invalid stack size, which is represented by a ULEB that
|
|
## ends in a byte with the high bit set.
|
|
|
|
# RUN: yaml2obj --docnum=6 %s -o %t06
|
|
# RUN: llvm-readelf --stack-sizes %t06 2>&1 | \
|
|
# RUN: FileCheck %s --check-prefix=BADSIZE -DFILE=%t06 --implicit-check-not=warning:
|
|
# RUN: llvm-readobj --stack-sizes %t06 2>&1 | \
|
|
# RUN: FileCheck %s --check-prefix=BADSIZE -DFILE=%t06 --implicit-check-not=warning:
|
|
|
|
# BADSIZE: warning: '[[FILE]]': could not extract a valid stack size from SHT_PROGBITS section with index 2: unable to decode LEB128 at offset 0x00000008: malformed uleb128, extends past end
|
|
# BADSIZE: warning: '[[FILE]]': could not extract a valid stack size from SHT_PROGBITS section with index 3: unable to decode LEB128 at offset 0x00000008: malformed uleb128, extends past end
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_EXEC
|
|
Sections:
|
|
- Name: .text
|
|
Type: SHT_PROGBITS
|
|
Flags: [SHF_ALLOC]
|
|
Size: 16
|
|
- Name: .stack_sizes
|
|
Type: SHT_PROGBITS
|
|
Content: "100000000000000080"
|
|
Link: .text
|
|
- Name: .stack_sizes (1)
|
|
Type: SHT_PROGBITS
|
|
Content: "100000000000000080"
|
|
Link: .text
|
|
Symbols:
|
|
- Name: foo
|
|
Section: .text
|
|
Value: 0x10
|
|
Type: STT_FUNC
|
|
Binding: STB_GLOBAL
|
|
|
|
## Check that we report a warning when a relocation symbol does not belong to a
|
|
## valid section or when it has an invalid index. We expect a stack size entry
|
|
## with an unknown symbol in the output.
|
|
|
|
# RUN: yaml2obj --docnum=7 %s -o %t07
|
|
# RUN: llvm-readelf --stack-sizes %t07 2>&1 | \
|
|
# RUN: FileCheck %s -DFILE=%t07 --check-prefix=BADSECTION-OUT-GNU --implicit-check-not=warning:
|
|
# RUN: llvm-readobj --stack-sizes %t07 2>&1 | \
|
|
# RUN: FileCheck %s -DFILE=%t07 --check-prefix=BADSECTION-OUT-LLVM --implicit-check-not=warning:
|
|
|
|
# BADSECTION-OUT-GNU: Stack Sizes:
|
|
# BADSECTION-OUT-GNU-NEXT: Size Function
|
|
# BADSECTION-OUT-GNU-NEXT: warning: '[[FILE]]': cannot identify the section for relocation symbol '_Z3foof': invalid section index: 10
|
|
# BADSECTION-OUT-GNU-NEXT: warning: '[[FILE]]': unable to get address of symbol '_Z3foof': invalid section index: 10
|
|
# BADSECTION-OUT-GNU-NEXT: warning: '[[FILE]]': could not identify function symbol for stack size entry in SHT_PROGBITS section with index 2
|
|
# BADSECTION-OUT-GNU-NEXT: 8 ?
|
|
# BADSECTION-OUT-GNU-NEXT: warning: '[[FILE]]': unable to get the target of relocation with index 1 in SHT_RELA section with index 3: unable to read an entry with index 255 from SHT_SYMTAB section with index 4: can't read an entry at 0x17e8: it goes past the end of the section (0x30)
|
|
# BADSECTION-OUT-GNU-NEXT: 22 ?
|
|
# BADSECTION-OUT-GNU-NEXT: warning: '[[FILE]]': unable to get the target of relocation with index 2 in SHT_RELA section with index 3: unable to read an entry with index 255 from SHT_SYMTAB section with index 4: can't read an entry at 0x17e8: it goes past the end of the section (0x30)
|
|
# BADSECTION-OUT-GNU-NEXT: 36 ?
|
|
|
|
# BADSECTION-OUT-LLVM: StackSizes [
|
|
# BADSECTION-OUT-LLVM-NEXT: warning: '[[FILE]]': cannot identify the section for relocation symbol '_Z3foof': invalid section index: 10
|
|
# BADSECTION-OUT-LLVM-NEXT: warning: '[[FILE]]': unable to get address of symbol '_Z3foof': invalid section index: 10
|
|
# BADSECTION-OUT-LLVM-NEXT: warning: '[[FILE]]': could not identify function symbol for stack size entry in SHT_PROGBITS section with index 2
|
|
# BADSECTION-OUT-LLVM-NEXT: Entry {
|
|
# BADSECTION-OUT-LLVM-NEXT: Function: ?
|
|
# BADSECTION-OUT-LLVM-NEXT: Size: 0x8
|
|
# BADSECTION-OUT-LLVM-NEXT: }
|
|
# BADSECTION-OUT-LLVM-NEXT: warning: '[[FILE]]': unable to get the target of relocation with index 1 in SHT_RELA section with index 3: unable to read an entry with index 255 from SHT_SYMTAB section with index 4: can't read an entry at 0x17e8: it goes past the end of the section (0x30)
|
|
# BADSECTION-OUT-LLVM-NEXT: Entry {
|
|
# BADSECTION-OUT-LLVM-NEXT: Function: ?
|
|
# BADSECTION-OUT-LLVM-NEXT: Size: 0x16
|
|
# BADSECTION-OUT-LLVM-NEXT: }
|
|
# BADSECTION-OUT-LLVM-NEXT: warning: '[[FILE]]': unable to get the target of relocation with index 2 in SHT_RELA section with index 3: unable to read an entry with index 255 from SHT_SYMTAB section with index 4: can't read an entry at 0x17e8: it goes past the end of the section (0x30)
|
|
# BADSECTION-OUT-LLVM-NEXT: Entry {
|
|
# BADSECTION-OUT-LLVM-NEXT: Function: ?
|
|
# BADSECTION-OUT-LLVM-NEXT: Size: 0x24
|
|
# BADSECTION-OUT-LLVM-NEXT: }
|
|
# BADSECTION-OUT-LLVM-NEXT: ]
|
|
|
|
# RUN: llvm-readelf --stack-sizes --demangle %t07 2>&1 | FileCheck %s --check-prefix=BADSECTION-DEMANGLE-ERR -DFILE=%t07
|
|
# RUN: llvm-readobj --stack-sizes --demangle %t07 2>&1 | FileCheck %s --check-prefix=BADSECTION-DEMANGLE-ERR -DFILE=%t07
|
|
|
|
# BADSECTION-DEMANGLE-ERR: warning: '[[FILE]]': cannot identify the section for relocation symbol 'foo(float)'
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_REL
|
|
Machine: EM_X86_64
|
|
Sections:
|
|
- Name: .text
|
|
Type: SHT_PROGBITS
|
|
Size: 16
|
|
- Name: .stack_sizes
|
|
Type: SHT_PROGBITS
|
|
Link: .text
|
|
Entries:
|
|
- Size: 0x8
|
|
- Size: 0x16
|
|
- Size: 0x24
|
|
- Name: .rela.stack_sizes
|
|
Type: SHT_RELA
|
|
Info: .stack_sizes
|
|
Relocations:
|
|
- Offset: 0
|
|
Symbol: _Z3foof
|
|
Type: R_X86_64_64
|
|
- Offset: 9
|
|
## An invalid symbol index.
|
|
Symbol: 0xff
|
|
Type: R_X86_64_64
|
|
## One more invalid symbol index with the same symbol value (0xff).
|
|
- Offset: 0x12
|
|
Symbol: 0xff
|
|
Type: R_X86_64_64
|
|
Symbols:
|
|
- Name: _Z3foof
|
|
## An invalid section index.
|
|
Index: 10
|
|
Type: STT_FUNC
|
|
Binding: STB_GLOBAL
|
|
|
|
## Check that we report a warning when a stack sizes section does not come with
|
|
## a corresponding relocation section.
|
|
|
|
# RUN: yaml2obj --docnum=8 %s -o %t08
|
|
# RUN: llvm-readelf --stack-sizes %t08 2> %t08-gnu.err | FileCheck %s --check-prefix=NORELOCSECTION-OUT-GNU
|
|
# RUN: FileCheck %s < %t08-gnu.err --check-prefix=NORELOCSECTION-ERR -DFILE=%t08
|
|
# RUN: llvm-readobj --stack-sizes %t08 2> %t08-llvm.err | FileCheck %s --check-prefix=NORELOCSECTION-OUT-LLVM
|
|
# RUN: FileCheck %s < %t08-llvm.err --check-prefix=NORELOCSECTION-ERR -DFILE=%t08
|
|
|
|
# NORELOCSECTION-OUT-GNU: Size Function
|
|
# NORELOCSECTION-OUT-GNU-NOT: {{.}}
|
|
|
|
# NORELOCSECTION-OUT-LLVM: StackSizes [
|
|
# NORELOCSECTION-OUT-LLVM-NEXT: ]
|
|
|
|
# NORELOCSECTION-ERR: warning: '[[FILE]]': .stack_sizes (SHT_PROGBITS section with index 2) does not have a corresponding relocation section
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_REL
|
|
Sections:
|
|
- Name: .text
|
|
Type: SHT_PROGBITS
|
|
Size: 8
|
|
- Name: .stack_sizes
|
|
Type: SHT_PROGBITS
|
|
Link: .text
|
|
Entries:
|
|
- Size: 0x1
|
|
|
|
## Check that we handle multiple object files, separately and when they
|
|
## are in an archive. This also checks whether we have blank lines between the
|
|
## tables.
|
|
|
|
# RUN: llvm-ar rc %t1.a %t01 %t02
|
|
# RUN: llvm-readelf --stack-sizes %t01 %t02 \
|
|
# RUN: | FileCheck %s --check-prefixes=MULTIPLE-GNU,OBJECT -DFILE1=%t01 -DFILE2=%t02
|
|
# RUN: llvm-readelf --stack-sizes %t1.a \
|
|
# RUN: | FileCheck %s --check-prefixes=MULTIPLE-GNU,ARCHIVE --strict-whitespace\
|
|
# RUN: --match-full-lines -DFILE=%t1.a
|
|
# RUN: llvm-readobj --stack-sizes %t01 %t02 \
|
|
# RUN: | FileCheck %s --check-prefixes=MULTIPLE-LLVM,OBJECT -DFILE1=%t01 -DFILE2=%t02
|
|
# RUN: llvm-readobj --stack-sizes %t1.a \
|
|
# RUN: | FileCheck %s --check-prefixes=MULTIPLE-LLVM,ARCHIVE -DFILE=%t1.a
|
|
|
|
# OBJECT:File: [[FILE1]]
|
|
# ARCHIVE:File: [[FILE]]({{.*01}})
|
|
|
|
# MULTIPLE-GNU:Stack Sizes:
|
|
# MULTIPLE-GNU-NEXT: Size Function
|
|
# MULTIPLE-GNU-NEXT: 16 referenced_by_symbol_foo
|
|
# MULTIPLE-GNU-NEXT: 32 referenced_via_section_bar
|
|
# MULTIPLE-GNU-NEXT: 8 separate_text_section_baz
|
|
# MULTIPLE-GNU-EMPTY:
|
|
|
|
# MULTIPLE-LLVM: StackSizes [
|
|
# MULTIPLE-LLVM-NEXT: Entry {
|
|
# MULTIPLE-LLVM-NEXT: Function: referenced_by_symbol_foo
|
|
# MULTIPLE-LLVM-NEXT: Size: 0x10
|
|
# MULTIPLE-LLVM-NEXT: }
|
|
# MULTIPLE-LLVM-NEXT: Entry {
|
|
# MULTIPLE-LLVM-NEXT: Function: referenced_via_section_bar
|
|
# MULTIPLE-LLVM-NEXT: Size: 0x20
|
|
# MULTIPLE-LLVM-NEXT: }
|
|
# MULTIPLE-LLVM-NEXT: Entry {
|
|
# MULTIPLE-LLVM-NEXT: Function: separate_text_section_baz
|
|
# MULTIPLE-LLVM-NEXT: Size: 0x8
|
|
# MULTIPLE-LLVM-NEXT: }
|
|
# MULTIPLE-LLVM-NEXT: ]
|
|
|
|
# OBJECT:File: [[FILE2]]
|
|
# ARCHIVE:File: [[FILE]]({{.*02}})
|
|
|
|
# MULTIPLE-GNU-EMPTY:
|
|
# MULTIPLE-GNU-NEXT:Stack Sizes:
|
|
# MULTIPLE-GNU-NEXT: Size Function
|
|
# MULTIPLE-GNU-NEXT: 16 other
|
|
# MULTIPLE-GNU-NEXT: 32 other_end
|
|
# MULTIPLE-GNU-NEXT: 48 bar
|
|
|
|
# MULTIPLE-LLVM: StackSizes [
|
|
# MULTIPLE-LLVM-NEXT: Entry {
|
|
# MULTIPLE-LLVM-NEXT: Function: other
|
|
# MULTIPLE-LLVM-NEXT: Size: 0x10
|
|
# MULTIPLE-LLVM-NEXT: }
|
|
# MULTIPLE-LLVM-NEXT: Entry {
|
|
# MULTIPLE-LLVM-NEXT: Function: other_end
|
|
# MULTIPLE-LLVM-NEXT: Size: 0x20
|
|
# MULTIPLE-LLVM-NEXT: }
|
|
# MULTIPLE-LLVM-NEXT: Entry {
|
|
# MULTIPLE-LLVM-NEXT: Function: bar
|
|
# MULTIPLE-LLVM-NEXT: Size: 0x30
|
|
# MULTIPLE-LLVM-NEXT: }
|
|
# MULTIPLE-LLVM-NEXT: ]
|
|
|
|
## Check that we do not consider symbols that are not function symbols, even though
|
|
## a relocation references them.
|
|
|
|
# RUN: yaml2obj --docnum=9 %s -o %t14
|
|
# RUN: llvm-readelf --stack-sizes %t14 2> %t14-gnu.err | FileCheck %s --check-prefix=NONFUNCTIONSYM-GNU
|
|
# RUN: FileCheck %s < %t14-gnu.err --check-prefix=NONFUNCTIONSYM-ERR -DFILE=%t14
|
|
# RUN: llvm-readobj --stack-sizes %t14 2> %t14-llvm.err | FileCheck %s --check-prefix=NONFUNCTIONSYM-LLVM
|
|
# RUN: FileCheck %s < %t14-llvm.err --check-prefix=NONFUNCTIONSYM-ERR -DFILE=%t14
|
|
|
|
# NONFUNCTIONSYM-GNU: Stack Sizes:
|
|
# NONFUNCTIONSYM-GNU: 0 ?
|
|
|
|
# NONFUNCTIONSYM-LLVM: StackSizes [
|
|
# NONFUNCTIONSYM-LLVM-NEXT: Entry {
|
|
# NONFUNCTIONSYM-LLVM-NEXT: Function: ?
|
|
# NONFUNCTIONSYM-LLVM-NEXT: Size: 0x0
|
|
# NONFUNCTIONSYM-LLVM-NEXT: }
|
|
# NONFUNCTIONSYM-LLVM-NEXT: ]
|
|
|
|
# NONFUNCTIONSYM-ERR: warning: '[[FILE]]': could not identify function symbol for stack size entry in SHT_PROGBITS section with index 2
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_REL
|
|
Machine: EM_X86_64
|
|
Sections:
|
|
- Name: .text
|
|
Type: SHT_PROGBITS
|
|
Size: 16
|
|
- Name: .stack_sizes
|
|
Type: SHT_PROGBITS
|
|
Entries:
|
|
- Size: 0
|
|
Link: .text
|
|
- Name: .rela.stack_sizes
|
|
Type: SHT_RELA
|
|
Info: .stack_sizes
|
|
Relocations:
|
|
- Offset: 0
|
|
Symbol: foo
|
|
Type: R_X86_64_64
|
|
Symbols:
|
|
- Name: foo
|
|
Section: .text
|
|
Type: STT_OBJECT
|
|
Binding: STB_GLOBAL
|
|
|
|
## Check that we report a warning when we find an unsupported relocation
|
|
## in the section that contains the stack size entries' relocations.
|
|
|
|
# RUN: yaml2obj --docnum=10 %s -o %t15
|
|
# RUN: llvm-readelf --stack-sizes %t15 2>&1 | FileCheck %s --check-prefix=UNSUPPRELOC-GNU -DFILE=%t15
|
|
# RUN: llvm-readobj --stack-sizes %t15 2>&1 | FileCheck %s --check-prefix=UNSUPPRELOC-LLVM -DFILE=%t15
|
|
|
|
# UNSUPPRELOC-GNU: Stack Sizes:
|
|
# UNSUPPRELOC-GNU-NEXT: Size Function
|
|
# UNSUPPRELOC-GNU-NEXT: warning: '[[FILE]]': SHT_RELA section with index 3 contains an unsupported relocation with index 0: R_X86_64_RELATIVE
|
|
# UNSUPPRELOC-GNU-NEXT: 0 foo
|
|
# UNSUPPRELOC-GNU-NEXT: warning: '[[FILE]]': SHT_RELA section with index 3 contains an unsupported relocation with index 2: R_X86_64_RELATIVE
|
|
|
|
# UNSUPPRELOC-LLVM: StackSizes [
|
|
# UNSUPPRELOC-LLVM-NEXT: warning: '[[FILE]]': SHT_RELA section with index 3 contains an unsupported relocation with index 0: R_X86_64_RELATIVE
|
|
# UNSUPPRELOC-LLVM-NEXT: Entry {
|
|
# UNSUPPRELOC-LLVM-NEXT: Function: foo
|
|
# UNSUPPRELOC-LLVM-NEXT: Size: 0x0
|
|
# UNSUPPRELOC-LLVM-NEXT: }
|
|
# UNSUPPRELOC-LLVM-NEXT: warning: '[[FILE]]': SHT_RELA section with index 3 contains an unsupported relocation with index 2: R_X86_64_RELATIVE
|
|
# UNSUPPRELOC-LLVM-NEXT: ]
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_REL
|
|
Machine: EM_X86_64
|
|
Sections:
|
|
- Name: .text
|
|
Type: SHT_PROGBITS
|
|
Size: 8
|
|
- Name: .stack_sizes
|
|
Type: SHT_PROGBITS
|
|
Link: .text
|
|
Entries:
|
|
- Size: 0
|
|
- Name: .rela.stack_sizes
|
|
Type: SHT_RELA
|
|
Info: .stack_sizes
|
|
Relocations:
|
|
- Offset: 0
|
|
Symbol: foo
|
|
Type: R_X86_64_RELATIVE
|
|
- Offset: 0
|
|
Symbol: foo
|
|
Type: R_X86_64_64
|
|
- Offset: 0
|
|
Symbol: foo
|
|
Type: R_X86_64_RELATIVE
|
|
Symbols:
|
|
- Name: foo
|
|
Section: .text
|
|
Type: STT_FUNC
|
|
Binding: STB_GLOBAL
|
|
|
|
## Check that warning messages in archives do not impact other members. In the following
|
|
## test, the first archive member generates a warning and we make sure all the information
|
|
## is still dumped.
|
|
|
|
# RUN: llvm-ar rc %t2.a %t04 %t01
|
|
# RUN: llvm-readelf --stack-sizes %t2.a 2>&1 | FileCheck %s --check-prefix=ARCHIVEWARN-GNU \
|
|
# RUN: -DFILE=%t2.a --strict-whitespace --match-full-lines
|
|
# RUN: llvm-readobj --stack-sizes %t2.a 2>&1 | FileCheck %s --check-prefix=ARCHIVEWARN-LLVM -DFILE=%t2.a
|
|
|
|
# ARCHIVEWARN-GNU:File: [[FILE]]({{.*04}})
|
|
# ARCHIVEWARN-GNU:Stack Sizes:
|
|
# ARCHIVEWARN-GNU-NEXT: Size Function
|
|
# ARCHIVEWARN-GNU:{{.*}}: warning: '{{.*04}}': relocation symbol '_Z3foof' is not in the expected section
|
|
# ARCHIVEWARN-GNU: 8 _Z3foof
|
|
# ARCHIVEWARN-GNU:File: [[FILE]]({{.*01}})
|
|
# ARCHIVEWARN-GNU:Stack Sizes:
|
|
# ARCHIVEWARN-GNU-NEXT: Size Function
|
|
# ARCHIVEWARN-GNU-NEXT: 16 referenced_by_symbol_foo
|
|
# ARCHIVEWARN-GNU-NEXT: 32 referenced_via_section_bar
|
|
# ARCHIVEWARN-GNU-NEXT: 8 separate_text_section_baz
|
|
# ARCHIVEWARN-GNU-NOT:{{.}}
|
|
|
|
|
|
# ARCHIVEWARN-LLVM: File: [[FILE]]({{.*04}})
|
|
# ARCHIVEWARN-LLVM: StackSizes [
|
|
# ARCHIVEWARN-LLVM: warning: '{{.*04}}': relocation symbol '_Z3foof' is not in the expected section
|
|
# ARCHIVEWARN-LLVM-NEXT: Entry {
|
|
# ARCHIVEWARN-LLVM-NEXT: Function: _Z3foof
|
|
# ARCHIVEWARN-LLVM-NEXT: Size: 0x8
|
|
# ARCHIVEWARN-LLVM-NEXT: }
|
|
# ARCHIVEWARN-LLVM-NEXT: ]
|
|
# ARCHIVEWARN-LLVM: File: [[FILE]]({{.*01}})
|
|
# ARCHIVEWARN-LLVM: StackSizes [
|
|
# ARCHIVEWARN-LLVM-NEXT: Entry {
|
|
# ARCHIVEWARN-LLVM-NEXT: Function: referenced_by_symbol_foo
|
|
# ARCHIVEWARN-LLVM-NEXT: Size: 0x10
|
|
# ARCHIVEWARN-LLVM-NEXT: }
|
|
# ARCHIVEWARN-LLVM-NEXT: Entry {
|
|
# ARCHIVEWARN-LLVM-NEXT: Function: referenced_via_section_bar
|
|
# ARCHIVEWARN-LLVM-NEXT: Size: 0x20
|
|
# ARCHIVEWARN-LLVM-NEXT: }
|
|
# ARCHIVEWARN-LLVM-NEXT: Entry {
|
|
# ARCHIVEWARN-LLVM-NEXT: Function: separate_text_section_baz
|
|
# ARCHIVEWARN-LLVM-NEXT: Size: 0x8
|
|
# ARCHIVEWARN-LLVM-NEXT: }
|
|
# ARCHIVEWARN-LLVM-NEXT: ]
|
|
|
|
## Check that we demangle function names when requested.
|
|
|
|
# RUN: yaml2obj --docnum=11 %s -o %t16
|
|
# RUN: llvm-readelf --stack-sizes --demangle %t16 | FileCheck %s --check-prefix=DEMANGLE-GNU
|
|
# RUN: llvm-readobj --stack-sizes --demangle %t16 | FileCheck %s --check-prefix=DEMANGLE-LLVM
|
|
|
|
# DEMANGLE-GNU: 16 foo(float)
|
|
# DEMANGLE-LLVM: Function: foo(float)
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_EXEC
|
|
Sections:
|
|
- Name: .text
|
|
Type: SHT_PROGBITS
|
|
Flags: [SHF_ALLOC]
|
|
Size: 16
|
|
- Name: .stack_sizes
|
|
Type: SHT_PROGBITS
|
|
Entries:
|
|
- Address: 0x10
|
|
Size: 0x10
|
|
Link: .text
|
|
Symbols:
|
|
- Name: _Z3foof
|
|
Section: .text
|
|
Value: 0x10
|
|
Type: STT_FUNC
|
|
Binding: STB_GLOBAL
|
|
|
|
## Check that we report a warning when we are unable to resolve a relocation for a given ELF architecture.
|
|
## Here we have a 64-bit relocation used in a 32-bit object.
|
|
|
|
# RUN: yaml2obj --docnum=12 %s -o %t17
|
|
# RUN: llvm-readelf --stack-sizes %t17 2>&1 | FileCheck %s -DFILE=%t17 --check-prefix=UNSUPPRELOC2
|
|
# RUN: llvm-readobj --stack-sizes %t17 2>&1 | FileCheck %s -DFILE=%t17 --check-prefix=UNSUPPRELOC2
|
|
|
|
# UNSUPPRELOC2: warning: '[[FILE]]': SHT_RELA section with index 2 contains an unsupported relocation with index 0: R_X86_64_64
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS32
|
|
Data: ELFDATA2MSB
|
|
Type: ET_REL
|
|
Machine: EM_X86_64
|
|
Sections:
|
|
- Name: .stack_sizes
|
|
Type: SHT_PROGBITS
|
|
Content: "00"
|
|
- Name: .rela.stack_sizes
|
|
Type: SHT_RELA
|
|
Info: .stack_sizes
|
|
Relocations:
|
|
- Offset: 0
|
|
Type: R_X86_64_64
|
|
|
|
## Check we report a warning when dumping stack sizes if the relocated section
|
|
## identified by the sh_info field is invalid. Here the sh_info value is larger than
|
|
## the number of sections.
|
|
|
|
# RUN: yaml2obj --docnum=13 %s -o %t18
|
|
# RUN: llvm-readelf --stack-sizes %t18 2>&1 | \
|
|
# RUN: FileCheck %s --implicit-check-not="warning:" -DFILE=%t18 --check-prefix=INVALID-TARGET
|
|
# RUN: llvm-readobj --stack-sizes %t18 2>&1 | \
|
|
# RUN: FileCheck %s --implicit-check-not="warning:" -DFILE=%t18 --check-prefix=INVALID-TARGET
|
|
|
|
# INVALID-TARGET: warning: '[[FILE]]': SHT_RELA section with index 1: failed to get a relocated section: invalid section index: 255
|
|
# INVALID-TARGET: warning: '[[FILE]]': SHT_RELA section with index 2: failed to get a relocated section: invalid section index: 255
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS32
|
|
Data: ELFDATA2MSB
|
|
Type: ET_REL
|
|
Sections:
|
|
- Name: .rela.stack_sizes
|
|
Type: SHT_RELA
|
|
Link: 0
|
|
Info: 0xFF
|
|
Relocations: []
|
|
- Name: .rela.stack_sizes (1)
|
|
Type: SHT_RELA
|
|
Link: 0
|
|
Info: 0xFF
|
|
Relocations: []
|