## 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