| ## 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 Functions |
| # 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: Functions: [referenced_by_symbol_foo] |
| # RELOC-LLVM-NEXT: Size: 0x10 |
| # RELOC-LLVM-NEXT: } |
| # RELOC-LLVM-NEXT: Entry { |
| # RELOC-LLVM-NEXT: Functions: [referenced_via_section_bar] |
| # RELOC-LLVM-NEXT: Size: 0x20 |
| # RELOC-LLVM-NEXT: } |
| # RELOC-LLVM-NEXT: Entry { |
| # RELOC-LLVM-NEXT: Functions: [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 Functions |
| # 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: Functions: [?] |
| # 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: Functions: [?] |
| # 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: Functions: [?] |
| # 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 Functions |
| # 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: Functions: [?] |
| # SYM-LLVM-NEXT: Size: 0x10 |
| # SYM-LLVM-NEXT: } |
| # SYM-LLVM-NEXT: Entry { |
| # SYM-LLVM-NEXT: Functions: [?] |
| # 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: Functions: [?] |
| # 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 Functions |
| # 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: Functions: [other] |
| # EXEC-LLVM-NEXT: Size: 0x10 |
| # EXEC-LLVM-NEXT: } |
| # EXEC-LLVM-NEXT: Entry { |
| # EXEC-LLVM-NEXT: Functions: [other_end] |
| # EXEC-LLVM-NEXT: Size: 0x20 |
| # EXEC-LLVM-NEXT: } |
| # EXEC-LLVM-NEXT: Entry { |
| # EXEC-LLVM-NEXT: Functions: [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 |
| - Name: other_end |
| Section: .text |
| 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 Functions |
| # 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: Functions: [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: Functions: [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 Functions |
| # WRONGSECTION-GNU-NEXT: 8 _Z3foof |
| |
| # WRONGSECTION-LLVM: StackSizes [ |
| # WRONGSECTION-LLVM-NEXT: Entry { |
| # WRONGSECTION-LLVM-NEXT: Functions: [_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 Functions |
| # 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: Functions: [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: Functions: [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 Functions |
| # 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: Functions: [?] |
| # 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: Functions: [?] |
| # 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: Functions: [?] |
| # 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 Functions |
| # 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 Functions |
| # 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: Functions: [referenced_by_symbol_foo] |
| # MULTIPLE-LLVM-NEXT: Size: 0x10 |
| # MULTIPLE-LLVM-NEXT: } |
| # MULTIPLE-LLVM-NEXT: Entry { |
| # MULTIPLE-LLVM-NEXT: Functions: [referenced_via_section_bar] |
| # MULTIPLE-LLVM-NEXT: Size: 0x20 |
| # MULTIPLE-LLVM-NEXT: } |
| # MULTIPLE-LLVM-NEXT: Entry { |
| # MULTIPLE-LLVM-NEXT: Functions: [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 Functions |
| # 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: Functions: [other] |
| # MULTIPLE-LLVM-NEXT: Size: 0x10 |
| # MULTIPLE-LLVM-NEXT: } |
| # MULTIPLE-LLVM-NEXT: Entry { |
| # MULTIPLE-LLVM-NEXT: Functions: [other_end] |
| # MULTIPLE-LLVM-NEXT: Size: 0x20 |
| # MULTIPLE-LLVM-NEXT: } |
| # MULTIPLE-LLVM-NEXT: Entry { |
| # MULTIPLE-LLVM-NEXT: Functions: [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: Functions: [?] |
| # 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 Functions |
| # 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: Functions: [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 Functions |
| # 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 Functions |
| # 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: Functions: [_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: Functions: [referenced_by_symbol_foo] |
| # ARCHIVEWARN-LLVM-NEXT: Size: 0x10 |
| # ARCHIVEWARN-LLVM-NEXT: } |
| # ARCHIVEWARN-LLVM-NEXT: Entry { |
| # ARCHIVEWARN-LLVM-NEXT: Functions: [referenced_via_section_bar] |
| # ARCHIVEWARN-LLVM-NEXT: Size: 0x20 |
| # ARCHIVEWARN-LLVM-NEXT: } |
| # ARCHIVEWARN-LLVM-NEXT: Entry { |
| # ARCHIVEWARN-LLVM-NEXT: Functions: [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: Functions: [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: [] |
| |
| ## Check that that we see multiple symbols output in cases when multiple symbols |
| ## share the same stack size entry, for example when use of ICF means two functions |
| ## are represented by the same code. |
| |
| # RUN: yaml2obj --docnum=14 %s -o %t19 |
| # RUN: llvm-readelf --stack-sizes %t19 2>&1 \ |
| # RUN: | FileCheck %s --check-prefix=MULTIPLE-SYMBOLS-GNU |
| # RUN: llvm-readobj --stack-sizes %t19 2>&1 \ |
| # RUN: | FileCheck %s --check-prefix=MULTIPLE-SYMBOLS-LLVM |
| |
| # MULTIPLE-SYMBOLS-GNU: Size Functions |
| # MULTIPLE-SYMBOLS-GNU: 16 foo, bar |
| # MULTIPLE-SYMBOLS-GNU-NOT:{{.}} |
| |
| # MULTIPLE-SYMBOLS-LLVM: StackSizes [ |
| # MULTIPLE-SYMBOLS-LLVM-NEXT: Entry { |
| # MULTIPLE-SYMBOLS-LLVM-NEXT: Functions: [foo, bar] |
| # MULTIPLE-SYMBOLS-LLVM-NEXT: Size: 0x10 |
| # MULTIPLE-SYMBOLS-LLVM-NEXT: } |
| # MULTIPLE-SYMBOLS-LLVM-NEXT: ] |
| # MULTIPLE-SYMBOLS-LLVM-NOT:{{.}} |
| |
| --- !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: 0x0 |
| Size: 0x10 |
| Link: .text |
| Symbols: |
| - Name: foo |
| Section: .text |
| Value: 0x0 |
| Type: STT_FUNC |
| Binding: STB_GLOBAL |
| - Name: bar |
| Section: .text |
| Value: 0x0 |
| Type: STT_FUNC |
| Binding: STB_GLOBAL |