blob: 8cedd2e2040074de2c3912b5e73e78e815548b24 [file] [log] [blame]
## Test the "--export-symbols" option.
## The option merges all the output of input files, sorts and prints out unique symbols from the input files.
# RUN: yaml2obj --docnum=1 -DFLAG=0x0002 %s -o %t1.o
# RUN: yaml2obj --docnum=2 -DFLAG=0x0002 %s -o %t2.o
# RUN: yaml2obj --docnum=2 -DFLAG=0x0002 -DSECT=26 %s -o %t2_invalid.o
## Test the following cases:
## Do not export global symbols beginning with "__sinit" , "__sterm" , "." , "(". or regular expression "^__[0-9]+__".
## Do not export hidden and internal symbols.
## Remove name prefixes of global symbols beginning with "__tf1" and "__tf9".
# RUN: llvm-nm --export-symbols %t1.o | FileCheck %s --check-prefixes=COMMON,WEAK,RSRC --implicit-check-not={{.}}
## Show that weak symbols are not exported when using the "--no-weak" option.
# RUN: llvm-nm --export-symbols --no-weak %t1.o | FileCheck --check-prefixes=COMMON,RSRC %s --implicit-check-not={{.}}
## Show that only unique symbols (with a different name or visibility) are exported.
## RUN: llvm-nm --export-symbols %t1.o %t2.o | FileCheck --check-prefixes=COMMON,WEAK,OBJ2,RSRC %s --implicit-check-not={{.}}
## Show that __rsrc symbols are not exported when using the "--no-rsrc" option.
# RUN: llvm-nm --export-symbols --no-rsrc %t1.o | FileCheck --check-prefixes=COMMON,WEAK %s --implicit-check-not={{.}}
# COMMON: 023__
# COMMON-NEXT: __023
# COMMON-NEXT: __02er02__
# COMMON-NEXT: ____
# RSRC-NEXT: __rsrc
# COMMON-NEXT: __rsrc export
# COMMON-NEXT: __tf2value
# COMMON-NEXT: export_protected_var export
# COMMON-NEXT: export_protected_var protected
# OBJ2-NEXT: export_var_in_sec_obj export
# COMMON-NEXT: protected_var protected
# OBJ2-NEXT: protected_var_in_sec_obj protected
# COMMON-NEXT: tf1value
# COMMON-NEXT: tf9value
# OBJ2-NEXT: var1_in_sec_obj
# WEAK-NEXT: weak_func
## Test the behavior of the symbol reference section.
# RUN: llvm-nm --export-symbols --no-rsrc %t2_invalid.o 2>&1 | \
# RUN: FileCheck -DFILE=%t2_invalid.o --check-prefixes=INVALID %s
# INVALID: llvm-nm{{(\.exe)?}}: warning: [[FILE]]: for symbol with index 8: the section index (26) is invalid
# INVALID-NEXT: export_protected_var export
# INVALID-NEXT: export_protected_var protected
# INVALID-NEXT: protected_var_in_sec_obj protected
# INVALID-NEXT: var1_in_sec_obj
## Show that symbols in shared object files are not exported.
## Generate XCOFF shared object file.
# RUN: yaml2obj -DFLAG=0x2000 --docnum=2 %s -o %t_shared.o
# RUN: llvm-nm --export-symbols %t_shared.o | count 0
--- !XCOFF
FileHeader:
MagicNumber: 0x1DF
Flags: [[FLAG]]
AuxiliaryHeader:
Magic: 0x10B
Version: 0x2
Sections:
- Name: .text
Flags: [ STYP_TEXT ]
- Name: .data
Flags: [ STYP_DATA ]
- Name: .bss
Flags: [ STYP_DATA ]
- Name: .debug
Flags: [ STYP_DEBUG ]
Symbols:
- Name: export_protected_var
Section: .data
## Exported visibility.
Type: 0x4000
StorageClass: C_EXT
AuxEntries:
- Type: AUX_CSECT
SymbolAlignmentAndType: 0x09
StorageMappingClass: XMC_RW
- Name: export_protected_var
Section: .data
## Protected visibility.
Type: 0x3000
StorageClass: C_EXT
AuxEntries:
- Type: AUX_CSECT
SymbolAlignmentAndType: 0x09
StorageMappingClass: XMC_RW
- Name: __rsrc
Section: .data
## No visibility.
Type: 0x0
StorageClass: C_EXT
AuxEntries:
- Type: AUX_CSECT
SymbolAlignmentAndType: 0x09
StorageMappingClass: XMC_RW
SectionOrLength: 0x4
- Name: __sinit
Section: .data
Type: 0x0
StorageClass: C_EXT
AuxEntries:
- Type: AUX_CSECT
SymbolAlignmentAndType: 0x9
StorageMappingClass: XMC_RW
SectionOrLength: 0xC
- Name: __sterm
Section: .data
Type: 0x0
StorageClass: C_EXT
AuxEntries:
- Type: AUX_CSECT
SymbolAlignmentAndType: 0x09
StorageMappingClass: XMC_RW
SectionOrLength: 0xC
- Name: .func
Section: .text
Type: 0x20
StorageClass: C_EXT
AuxEntries:
- Type: AUX_CSECT
SymbolAlignmentAndType: 0x02
StorageMappingClass: XMC_PR
- Name: (func)
Section: .data
Type: 0x0
StorageClass: C_EXT
AuxEntries:
- Type: AUX_CSECT
SymbolAlignmentAndType: 0x09
StorageMappingClass: XMC_RW
SectionOrLength: 0xC
- Name: __023__
Section: .data
Type: 0x0
StorageClass: C_EXT
AuxEntries:
- Type: AUX_CSECT
SymbolAlignmentAndType: 0x09
StorageMappingClass: XMC_RW
SectionOrLength: 0x4
- Name: __tf1_tf1value
Section: .text
Type: 0x00
StorageClass: C_EXT
AuxEntries:
- Type: AUX_CSECT
SymbolAlignmentAndType: 0x09
StorageMappingClass: XMC_RO
- Name: __tf9_12345678tf9value
Section: .data
Type: 0x0
StorageClass: C_EXT
AuxEntries:
- Type: AUX_CSECT
SymbolAlignmentAndType: 0x09
StorageMappingClass: XMC_RW
- Name: __tf2value
Section: .data
Type: 0x0
StorageClass: C_HIDEXT
AuxEntries:
- Type: AUX_CSECT
SymbolAlignmentAndType: 0x21
StorageMappingClass: XMC_TC
- Name: __tf2value
Section: .data
Type: 0x0
StorageClass: C_EXT
AuxEntries:
- Type: AUX_CSECT
SymbolAlignmentAndType: 0x09
StorageMappingClass: XMC_RW
- Name: weak_func
Section: .data
Type: 0x0
StorageClass: C_WEAKEXT
AuxEntries:
- Type: AUX_CSECT
SymbolAlignmentAndType: 0x09
StorageMappingClass: XMC_RW
- Name: protected_var
Section: .bss
Type: 0x3000
StorageClass: C_EXT
AuxEntries:
- Type: AUX_CSECT
SymbolAlignmentAndType: 0x02
StorageMappingClass: XMC_RW
- Name: hidden_var
Section: .data
## Hidden visibility.
Type: 0x2000
StorageClass: C_EXT
AuxEntries:
- Type: AUX_CSECT
SymbolAlignmentAndType: 0x09
StorageMappingClass: XMC_RW
- Name: internal_var
Section: .data
## Internal visibility.
Type: 0x1000
StorageClass: C_EXT
AuxEntries:
- Type: AUX_CSECT
SymbolAlignmentAndType: 0x09
StorageMappingClass: XMC_RW
## A symbol that is neither text, nor data, nor bss.
- Name: debug
Section: .debug
## Empty symbol name.
- Name: ""
Section: .data
StorageClass: C_EXT
AuxEntries:
- Type: AUX_CSECT
SymbolAlignmentAndType: 0x09
StorageMappingClass: XMC_TC
- Name: undef_var
SectionIndex: 0
AuxEntries:
- Type: AUX_CSECT
SymbolAlignmentAndType: 0x20
StorageMappingClass: XMC_UA
## Do not export not global symbol.
- Name: hidext_var
Section: .data
## Protected visibility.
Type: 0x3000
StorageClass: C_HIDEXT
AuxEntries:
- Type: AUX_CSECT
SymbolAlignmentAndType: 0x09
StorageMappingClass: XMC_RW
## Symbol should not be filtered out by option --no-rsrc.
- Name: __tf1___rsrc
Section: .data
Type: 0x4000
StorageClass: C_EXT
AuxEntries:
- Type: AUX_CSECT
SymbolAlignmentAndType: 0x09
StorageMappingClass: XMC_RW
SectionOrLength: 0x4
## Following symbols should not be filtered out by regular expression "^__[0-9]+__".
- Name: __023
Section: .data
Type: 0x0
StorageClass: C_EXT
AuxEntries:
- Type: AUX_CSECT
SymbolAlignmentAndType: 0x09
StorageMappingClass: XMC_RW
SectionOrLength: 0x4
- Name: 023__
Section: .data
Type: 0x0
StorageClass: C_EXT
AuxEntries:
- Type: AUX_CSECT
SymbolAlignmentAndType: 0x09
StorageMappingClass: XMC_RW
SectionOrLength: 0x4
- Name: ____
Section: .data
Type: 0x0
StorageClass: C_EXT
AuxEntries:
- Type: AUX_CSECT
SymbolAlignmentAndType: 0x09
StorageMappingClass: XMC_RW
SectionOrLength: 0x4
- Name: __02er02__
Section: .data
Type: 0x0
StorageClass: C_EXT
AuxEntries:
- Type: AUX_CSECT
SymbolAlignmentAndType: 0x09
StorageMappingClass: XMC_RW
SectionOrLength: 0x4
--- !XCOFF
FileHeader:
MagicNumber: 0x1DF
Flags: [[FLAG]]
AuxiliaryHeader:
Magic: 0x10B
Version: 0x2
TextSectionSize: 0x280
DataSectionSize: 0x90
Sections:
- Name: .text
Flags: [ STYP_TEXT ]
- Name: .data
Flags: [ STYP_DATA ]
Symbols:
- Name: export_protected_var
Section: .data
Type: 0x4000
StorageClass: C_EXT
AuxEntries:
- Type: AUX_CSECT
SymbolAlignmentAndType: 0x09
StorageMappingClass: XMC_RW
- Name: export_protected_var
Section: .data
Type: 0x3000
StorageClass: C_EXT
AuxEntries:
- Type: AUX_CSECT
SymbolAlignmentAndType: 0x09
StorageMappingClass: XMC_RW
- Name: var1_in_sec_obj
Section: .data
Type: 0x0
StorageClass: C_EXT
AuxEntries:
- Type: AUX_CSECT
SymbolAlignmentAndType: 0x09
StorageMappingClass: XMC_RW
SectionOrLength: 0x4
- Name: protected_var_in_sec_obj
Section: .data
Type: 0x3000
StorageClass: C_EXT
AuxEntries:
- Type: AUX_CSECT
SymbolAlignmentAndType: 0x09
StorageMappingClass: XMC_RW
- Name: export_var_in_sec_obj
SectionIndex: [[SECT=2]]
Type: 0x4000
StorageClass: C_EXT
AuxEntries:
- Type: AUX_CSECT
SymbolAlignmentAndType: 0x09
StorageMappingClass: XMC_RW