llvm-project/llvm/test/tools/llvm-nm/linker-synthesized.test
Fangrui Song bc1c6a0b44 [llvm-nm] Fix handling of symbol types 't' 'd' 'r'
This restores part of r359311 that was reverted by r359830.

Rewrite the symbol types to fix several issues.

Notable difference is that the type of __init_array_start changes from
't' to 'd'.

GNU nm used to mark ELF symbols relative to .init_array as 't'
https://sourceware.org/bugzilla/show_bug.cgi?id=24505 (before 2.33)
because ".init" is the prefix. The bug was copied by r287803.

Reviewed By: jhenderson

Differential Revision: https://reviews.llvm.org/D61551

llvm-svn: 360339
2019-05-09 12:43:37 +00:00

58 lines
1.4 KiB
Plaintext

# RUN: yaml2obj %s -o %t
# RUN: llvm-nm --no-sort %t | FileCheck %s
## We used to be wrong with some linker synthesized symbols.
## We mark __init_array_start as 'd', as consistent with GNU nm >= 2.33 (older GNU
## nm marks it as 't'). See https://sourceware.org/bugzilla/show_bug.cgi?id=24511
# CHECK: d __fini_array_start
# CHECK: d __init_array_start
# CHECK: d __preinit_array_start
# CHECK: B __bss_start
# CHECK: D _edata
# CHECK: B _end
!ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_EXEC
Machine: EM_X86_64
Sections:
- Name: .text
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
- Name: .fini_array
Type: SHT_FINI_ARRAY
Flags: [ SHF_ALLOC, SHF_WRITE ]
- Name: .init_array
Type: SHT_INIT_ARRAY
Flags: [ SHF_ALLOC, SHF_WRITE ]
- Name: .preinit_array
Type: SHT_PREINIT_ARRAY
Flags: [ SHF_ALLOC, SHF_WRITE ]
- Name: .data
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC, SHF_WRITE ]
- Name: .bss
Type: SHT_NOBITS
Flags: [ SHF_ALLOC, SHF_WRITE ]
Symbols:
- Name: __fini_array_start
Section: .fini_array
- Name: __init_array_start
Section: .init_array
- Name: __preinit_array_start
Section: .preinit_array
- Name: __bss_start
Section: .bss
Binding: STB_GLOBAL
- Name: _edata
Section: .data
Binding: STB_GLOBAL
- Name: _end
Section: .bss
Binding: STB_GLOBAL