// Just use 64, since it can hold 32-bit values too.
LLVM_YAML_STRONG_TYPEDEF(uint64_t, ELF_SHF)
LLVM_YAML_STRONG_TYPEDEF(uint16_t, ELF_SHN)
+LLVM_YAML_STRONG_TYPEDEF(uint8_t, ELF_STB)
LLVM_YAML_STRONG_TYPEDEF(uint8_t, ELF_STT)
LLVM_YAML_STRONG_TYPEDEF(uint8_t, ELF_STV)
LLVM_YAML_STRONG_TYPEDEF(uint8_t, ELF_STO)
ELF_STT Type;
StringRef Section;
Optional<ELF_SHN> Index;
+ ELF_STB Binding;
llvm::yaml::Hex64 Value;
llvm::yaml::Hex64 Size;
uint8_t Other;
};
-struct SymbolsDef {
- std::vector<Symbol> Local;
- std::vector<Symbol> Global;
- std::vector<Symbol> Weak;
- std::vector<Symbol> GNUUnique;
-};
-
struct SectionOrType {
StringRef sectionNameOrType;
};
// cleaner and nicer if we read them from the YAML as a separate
// top-level key, which automatically ensures that invariants like there
// being a single SHT_SYMTAB section are upheld.
- SymbolsDef Symbols;
- SymbolsDef DynamicSymbols;
+ std::vector<Symbol> Symbols;
+ std::vector<Symbol> DynamicSymbols;
};
} // end namespace ELFYAML
static void enumeration(IO &IO, ELFYAML::ELF_SHN &Value);
};
+template <> struct ScalarEnumerationTraits<ELFYAML::ELF_STB> {
+ static void enumeration(IO &IO, ELFYAML::ELF_STB &Value);
+};
+
template <>
struct ScalarEnumerationTraits<ELFYAML::ELF_STT> {
static void enumeration(IO &IO, ELFYAML::ELF_STT &Value);
static StringRef validate(IO &IO, ELFYAML::Symbol &Symbol);
};
-template <> struct MappingTraits<ELFYAML::SymbolsDef> {
- static void mapping(IO &IO, ELFYAML::SymbolsDef &Symbols);
-};
-
template <> struct MappingTraits<ELFYAML::DynamicEntry> {
static void mapping(IO &IO, ELFYAML::DynamicEntry &Rel);
};
IO.enumFallback<Hex32>(Value);
}
+void ScalarEnumerationTraits<ELFYAML::ELF_STB>::enumeration(
+ IO &IO, ELFYAML::ELF_STB &Value) {
+#define ECase(X) IO.enumCase(Value, #X, ELF::X)
+ ECase(STB_LOCAL);
+ ECase(STB_GLOBAL);
+ ECase(STB_WEAK);
+ ECase(STB_GNU_UNIQUE);
+#undef ECase
+ IO.enumFallback<Hex8>(Value);
+}
+
void ScalarEnumerationTraits<ELFYAML::ELF_STT>::enumeration(
IO &IO, ELFYAML::ELF_STT &Value) {
#define ECase(X) IO.enumCase(Value, #X, ELF::X)
IO.mapOptional("Type", Symbol.Type, ELFYAML::ELF_STT(0));
IO.mapOptional("Section", Symbol.Section, StringRef());
IO.mapOptional("Index", Symbol.Index);
+ IO.mapOptional("Binding", Symbol.Binding, ELFYAML::ELF_STB(0));
IO.mapOptional("Value", Symbol.Value, Hex64(0));
IO.mapOptional("Size", Symbol.Size, Hex64(0));
-
MappingNormalization<NormalizedOther, uint8_t> Keys(IO, Symbol.Other);
IO.mapOptional("Visibility", Keys->Visibility, ELFYAML::ELF_STV(0));
IO.mapOptional("Other", Keys->Other, ELFYAML::ELF_STO(0));
return StringRef();
}
-void MappingTraits<ELFYAML::SymbolsDef>::mapping(IO &IO,
- ELFYAML::SymbolsDef &Symbols) {
- IO.mapOptional("Local", Symbols.Local);
- IO.mapOptional("Global", Symbols.Global);
- IO.mapOptional("Weak", Symbols.Weak);
- IO.mapOptional("GNUUnique", Symbols.GNUUnique);
-}
-
static void commonSectionMapping(IO &IO, ELFYAML::Section &Section) {
IO.mapOptional("Name", Section.Name, StringRef());
IO.mapRequired("Type", Section.Type);
Symbol: _start
Type: 0xFF
Symbols:
- Global:
- - Name: _start
- Type: STT_FUNC
- Section: .text
- Value: 0x0
+ - Name: _start
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0
+ Binding: STB_GLOBAL
Addend: 0
Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
-
- Global:
- - Name: main
- Type: STT_FUNC
- Section: .text
- Size: 0x08
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x08
+ Binding: STB_GLOBAL
Type: R_AMDGPU_RELATIVE64
Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
-
- Global:
- - Name: main
- Type: STT_FUNC
- Section: .text
- Size: 0x08
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x08
+ Binding: STB_GLOBAL
Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
-
- Global:
- - Name: main
- Type: STT_FUNC
- Section: .text
- Size: 0x08
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x08
+ Binding: STB_GLOBAL
Flags2: 0x0
Symbols:
- Local:
- - Name: .MIPS.abiflags
- Type: STT_SECTION
- Section: .MIPS.abiflags
+ - Name: .MIPS.abiflags
+ Type: STT_SECTION
+ Section: .MIPS.abiflags
Size: 4
Symbols:
- Global:
- - Name: T1
- Section: .text
- Value: 0
- Size: 4
+ - Name: T1
+ Section: .text
+ Value: 0
+ Size: 4
+ Binding: STB_GLOBAL
# o64
--- !ELF
Size: 4
Symbols:
- Global:
- - Name: T1
- Section: .text
- Value: 0
- Size: 4
+ - Name: T1
+ Section: .text
+ Value: 0
+ Size: 4
+ Binding: STB_GLOBAL
# eabio32
--- !ELF
Size: 4
Symbols:
- Global:
- - Name: T1
- Section: .text
- Value: 0
- Size: 4
+ - Name: T1
+ Section: .text
+ Value: 0
+ Size: 4
+ Binding: STB_GLOBAL
# eabi64
--- !ELF
Size: 4
Symbols:
- Global:
- - Name: T1
- Section: .text
- Value: 0
- Size: 4
+ - Name: T1
+ Section: .text
+ Value: 0
+ Size: 4
+ Binding: STB_GLOBAL
...
Size: 4
Symbols:
- Global:
- - Name: T1
- Section: .text
- Value: 0
- Size: 4
+ - Name: T1
+ Section: .text
+ Value: 0
+ Size: 4
+ Binding: STB_GLOBAL
...
Size: 0x0F
Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .rodata
- Type: STT_SECTION
- Section: .rodata
- Global:
- - Name: main
- Type: STT_FUNC
- Section: .text
- Size: 0x58
- - Name: printf
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .rodata
+ Type: STT_SECTION
+ Section: .rodata
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x58
+ Binding: STB_GLOBAL
+ - Name: printf
+ Binding: STB_GLOBAL
...
Symbol: main
Type: 0xFF
Symbols:
- Global:
- - Name: main
+ - Name: main
+ Binding: STB_GLOBAL
Type: R_386_32
Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
-
- Global:
- - Name: main
- Type: STT_FUNC
- Section: .text
- Size: 0x08
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x08
+ Binding: STB_GLOBAL
CHECK-NEXT: Symbol: ''
CHECK-NEXT: Type: R_X86_64_NONE
CHECK-NEXT: Symbols:
-CHECK-NEXT: Local:
CHECK-NEXT: - Name: rb_ary_new_capa
CHECK-NEXT: Type: STT_FUNC
CHECK-NEXT: Section: .text
CHECK-NEXT: Size: 0x0000000000000005
-CHECK-NEXT: Global:
CHECK-NEXT: - Name: __dtraceenabled_ruby___array-create
CHECK-NEXT: Index: SHN_ABS
+CHECK-NEXT: Binding: STB_GLOBAL
CHECK-NEXT: - Name: '$dtrace1316529.rb_ary_new_capa'
CHECK-NEXT: Type: STT_FUNC
CHECK-NEXT: Section: .text
+CHECK-NEXT: Binding: STB_GLOBAL
CHECK-NEXT: Size: 0x0000000000000005
CHECK-NEXT: Visibility: STV_HIDDEN
ELF-MIPSEL-NEXT: CPR1Size: REG_32
ELF-MIPSEL-NEXT: Flags1: [ ODDSPREG ]
ELF-MIPSEL-NEXT: Symbols:
-ELF-MIPSEL-NEXT: Local:
ELF-MIPSEL-NEXT: - Name: trivial.ll
ELF-MIPSEL-NEXT: Type: STT_FILE
ELF-MIPSEL-NEXT: Index: SHN_ABS
ELF-MIPSEL-NEXT: - Name: .MIPS.abiflags
ELF-MIPSEL-NEXT: Type: STT_SECTION
ELF-MIPSEL-NEXT: Section: .MIPS.abiflags
-ELF-MIPSEL-NEXT: Global:
ELF-MIPSEL-NEXT: - Name: main
ELF-MIPSEL-NEXT: Type: STT_FUNC
ELF-MIPSEL-NEXT: Section: .text
+ELF-MIPSEL-NEXT: Binding: STB_GLOBAL
ELF-MIPSEL-NEXT: Size: 0x000000000000004C
ELF-MIPSEL-NEXT: - Name: var
ELF-MIPSEL-NEXT: Type: STT_OBJECT
ELF-MIPSEL-NEXT: Section: .bss
+ELF-MIPSEL-NEXT: Binding: STB_GLOBAL
ELF-MIPSEL-NEXT: Size: 0x0000000000000004
ELF-MIPSEL-NEXT: - Name: SomeOtherFunction
+ELF-MIPSEL-NEXT: Binding: STB_GLOBAL
ELF-MIPSEL-NEXT: - Name: _gp_disp
+ELF-MIPSEL-NEXT: Binding: STB_GLOBAL
ELF-MIPSEL-NEXT: - Name: puts
+ELF-MIPSEL-NEXT: Binding: STB_GLOBAL
ELF-MIPS64EL: FileHeader:
ELF-MIPS64EL-NEXT: Class: ELFCLASS64
ELF-MIPS64EL-NEXT: AddressAlign: 0x0000000000000004
ELF-MIPS64EL-NEXT: Content: ''
ELF-MIPS64EL-NEXT: Symbols:
-ELF-MIPS64EL-NEXT: Local:
ELF-MIPS64EL-NEXT: - Name: .text
ELF-MIPS64EL-NEXT: Type: STT_SECTION
ELF-MIPS64EL-NEXT: Section: .text
ELF-MIPS64EL-NEXT: - Name: .pdr
ELF-MIPS64EL-NEXT: Type: STT_SECTION
ELF-MIPS64EL-NEXT: Section: .pdr
-ELF-MIPS64EL-NEXT: Global:
ELF-MIPS64EL-NEXT: - Name: zed
+ELF-MIPS64EL-NEXT: Binding: STB_GLOBAL
ELF-X86-64: FileHeader:
ELF-X86-64-NEXT: Class: ELFCLASS64
ELF-X86-64-NEXT: Type: R_X86_64_PC32
ELF-X86-64-NEXT: Addend: -4
ELF-X86-64-NEXT: Symbols:
-ELF-X86-64-NEXT: Local:
ELF-X86-64-NEXT: - Name: trivial-object-test.s
ELF-X86-64-NEXT: Type: STT_FILE
ELF-X86-64-NEXT: Index: SHN_ABS
ELF-X86-64-NEXT: - Name: .note.GNU-stack
ELF-X86-64-NEXT: Type: STT_SECTION
ELF-X86-64-NEXT: Section: .note.GNU-stack
-ELF-X86-64-NEXT: Global:
ELF-X86-64-NEXT: - Name: main
ELF-X86-64-NEXT: Type: STT_FUNC
ELF-X86-64-NEXT: Section: .text
+ELF-X86-64-NEXT: Binding: STB_GLOBAL
ELF-X86-64-NEXT: Size: 0x0000000000000026
ELF-X86-64-NEXT: - Name: SomeOtherFunction
+ELF-X86-64-NEXT: Binding: STB_GLOBAL
ELF-X86-64-NEXT: - Name: puts
-
+ELF-X86-64-NEXT: Binding: STB_GLOBAL
ELF-AVR: FileHeader:
ELF-AVR-NEXT: Class: ELFCLASS32
ELF-AVR-NEXT: AddressAlign: 0x0000000000000001
ELF-AVR-NEXT: Content: ''
ELF-AVR-NEXT: Symbols:
-ELF-AVR-NEXT: Local:
ELF-AVR-NEXT: - Name: .text
ELF-AVR-NEXT: Type: STT_SECTION
ELF-AVR-NEXT: Section: .text
ELF-AVR-NEXT: Index: SHN_ABS
ELF-AVR-NEXT: - Name: main
ELF-AVR-NEXT: Section: .text
-ELF-AVR-NEXT: Global:
ELF-AVR-NEXT: - Name: __trampolines_start
ELF-AVR-NEXT: Section: .text
+ELF-AVR-NEXT: Binding: STB_GLOBAL
ELF-AVR-NEXT: - Name: _etext
ELF-AVR-NEXT: Section: .text
+ELF-AVR-NEXT: Binding: STB_GLOBAL
ELF-AVR-NEXT: Value: 0x0000000000000004
ELF-AVR-NEXT: - Name: __data_load_end
ELF-AVR-NEXT: Index: SHN_ABS
+ELF-AVR-NEXT: Binding: STB_GLOBAL
ELF-AVR-NEXT: Value: 0x0000000000000004
ELF-AVR-NEXT: - Name: __trampolines_end
ELF-AVR-NEXT: Section: .text
+ELF-AVR-NEXT: Binding: STB_GLOBAL
ELF-AVR-NEXT: - Name: __data_load_start
ELF-AVR-NEXT: Index: SHN_ABS
+ELF-AVR-NEXT: Binding: STB_GLOBAL
ELF-AVR-NEXT: Value: 0x0000000000000004
ELF-AVR-NEXT: - Name: __dtors_end
ELF-AVR-NEXT: Section: .text
+ELF-AVR-NEXT: Binding: STB_GLOBAL
ELF-AVR-NEXT: - Name: __eeprom_end
ELF-AVR-NEXT: Section: .data
+ELF-AVR-NEXT: Binding: STB_GLOBAL
ELF-AVR-NEXT: Value: 0x0000000000810000
ELF-AVR-NEXT: - Name: __ctors_start
ELF-AVR-NEXT: Section: .text
+ELF-AVR-NEXT: Binding: STB_GLOBAL
ELF-AVR-NEXT: - Name: __dtors_start
ELF-AVR-NEXT: Section: .text
+ELF-AVR-NEXT: Binding: STB_GLOBAL
ELF-AVR-NEXT: - Name: __ctors_end
ELF-AVR-NEXT: Section: .text
+ELF-AVR-NEXT: Binding: STB_GLOBAL
ELF-AVR-NEXT: - Name: _edata
ELF-AVR-NEXT: Section: .data
+ELF-AVR-NEXT: Binding: STB_GLOBAL
ELF-AVR-NEXT: Value: 0x0000000000800060
ELF-AVR-NEXT: - Name: _end
ELF-AVR-NEXT: Section: .data
+ELF-AVR-NEXT: Binding: STB_GLOBAL
ELF-AVR-NEXT: Value: 0x0000000000800060
-
WASM: --- !WASM
WASM-NEXT: FileHeader:
WASM-NEXT: Version: 0x00000001
Size: 4
Symbols:
- Global:
- - Name: T0
- Type: STT_FUNC
- Section: .text
- Size: 4
- - Name: D0
- Type: STT_OBJECT
- Section: .data
- Size: 4
+ - Name: T0
+ Type: STT_FUNC
+ Section: .text
+ Size: 4
+ Binding: STB_GLOBAL
+ - Name: D0
+ Type: STT_OBJECT
+ Section: .data
+ Size: 4
+ Binding: STB_GLOBAL
...
Flags: [SHF_EXECINSTR, SHF_ALLOC]
Symbols:
- Global:
- - Name: T1
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 8
+- Name: T1
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 8
+ Binding: STB_GLOBAL
--- !ELF
FileHeader: !FileHeader
Flags: [SHF_EXECINSTR, SHF_ALLOC]
Symbols:
- Global:
- - Name: T2
- Section: .text
- Type: STT_FUNC
- Value: 0x0
- Size: 4
+- Name: T2
+ Section: .text
+ Type: STT_FUNC
+ Value: 0x0
+ Size: 4
+ Binding: STB_GLOBAL
...
Type: SHT_ARM_ATTRIBUTES
AddressAlign: 0x0000000000000001
Content: 4115000000616561626900010B000000060208010901
-Symbols:
- Local:
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: .data
- Type: STT_SECTION
- Section: .data
- - Name: .bss
- Type: STT_SECTION
- Section: .bss
- - Name: '$a'
- Section: .text
- - Name: call_weak_fn
- Type: STT_FUNC
- Section: .text
- - Name: .ARM.attributes
- Type: STT_SECTION
- Section: .ARM.attributes
+Symbols:
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ - Name: .data
+ Type: STT_SECTION
+ Section: .data
+ - Name: .bss
+ Type: STT_SECTION
+ Section: .bss
+ - Name: '$a'
+ Section: .text
+ - Name: call_weak_fn
+ Type: STT_FUNC
+ Section: .text
+ - Name: .ARM.attributes
+ Type: STT_SECTION
+ Section: .ARM.attributes
# CHECK: Section {
# CHECK-NEXT: Index: 0
Type: R_MIPS_LO16
Symbols:
- Local:
- - Name: loc1
- - Name: loc2
- Global:
- - Name: glob1
- Section: .text
- Value: 0x0
- Size: 4
- - Name: glob2
- Weak:
- - Name: weak1
+ - Name: loc1
+ - Name: loc2
+ - Name: glob1
+ Section: .text
+ Value: 0x0
+ Size: 4
+ Binding: STB_GLOBAL
+ - Name: glob2
+ Binding: STB_GLOBAL
+ - Name: weak1
+ Binding: STB_WEAK
# CHECK: Section {
# CHECK-NEXT: Index: 0
Flags: [ SHF_ALLOC, SHF_WRITE ]
Content: "DEADBEEF"
Symbols:
- Local:
- - Name: local_symbol
- Type: STT_OBJECT
- Section: .data
- Global:
- - Name: global_symbol
- Type: STT_OBJECT
- Section: .data
- Weak:
- - Name: weak_symbol
- Type: STT_OBJECT
- Section: .data
+ - Name: local_symbol
+ Type: STT_OBJECT
+ Section: .data
+ - Name: global_symbol
+ Type: STT_OBJECT
+ Section: .data
+ Binding: STB_GLOBAL
+ - Name: weak_symbol
+ Type: STT_OBJECT
+ Section: .data
+ Binding: STB_WEAK
# CHECK: Symbol {
# CHECK: Name: (0)
# when linked and run on x86_64, will go into an
# infloop.
Symbols:
- Global:
- - Name: main
- Type: STT_FUNC
- Section: .text
- Value: 0x1
- Size: 2
- - Name: undefined_symbol
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1
+ Size: 2
+ Binding: STB_GLOBAL
+ - Name: undefined_symbol
+ Binding: STB_GLOBAL
# CHECK: Symbols [
# CHECK-NEXT: Symbol {
# OBJ-NEXT: }
# YAML: Symbols:
-# YAML-NEXT: Global:
-# YAML-NEXT: - Name: default1
-# YAML-NEXT: Type: STT_OBJECT
-# YAML-NEXT: Section: .data
-# YAML-NEXT: Size: 0x0000000000000004
-# YAML-NEXT: - Name: default2
-# YAML-NEXT: Type: STT_OBJECT
-# YAML-NEXT: Section: .data
-# YAML-NEXT: Value: 0x0000000000000004
-# YAML-NEXT: Size: 0x0000000000000004
-# YAML-NEXT: - Name: internal
-# YAML-NEXT: Type: STT_OBJECT
-# YAML-NEXT: Section: .data
-# YAML-NEXT: Value: 0x0000000000000008
-# YAML-NEXT: Size: 0x0000000000000004
-# YAML-NEXT: Visibility: STV_INTERNAL
-# YAML-NEXT: - Name: hidden
-# YAML-NEXT: Type: STT_OBJECT
-# YAML-NEXT: Section: .data
-# YAML-NEXT: Value: 0x000000000000000C
-# YAML-NEXT: Size: 0x0000000000000004
-# YAML-NEXT: Visibility: STV_HIDDEN
-# YAML-NEXT: - Name: protected
-# YAML-NEXT: Type: STT_OBJECT
-# YAML-NEXT: Section: .data
-# YAML-NEXT: Value: 0x0000000000000010
-# YAML-NEXT: Size: 0x0000000000000004
-# YAML-NEXT: Visibility: STV_PROTECTED
-# YAML-NEXT: Other: [ STO_MIPS_PIC, STO_MIPS_MICROMIPS ]
+# YAML-NEXT: - Name: default1
+# YAML-NEXT: Type: STT_OBJECT
+# YAML-NEXT: Section: .data
+# YAML-NEXT: Binding: STB_GLOBAL
+# YAML-NEXT: Size: 0x0000000000000004
+# YAML-NEXT: - Name: default2
+# YAML-NEXT: Type: STT_OBJECT
+# YAML-NEXT: Section: .data
+# YAML-NEXT: Binding: STB_GLOBAL
+# YAML-NEXT: Value: 0x0000000000000004
+# YAML-NEXT: Size: 0x0000000000000004
+# YAML-NEXT: - Name: internal
+# YAML-NEXT: Type: STT_OBJECT
+# YAML-NEXT: Section: .data
+# YAML-NEXT: Binding: STB_GLOBAL
+# YAML-NEXT: Value: 0x0000000000000008
+# YAML-NEXT: Size: 0x0000000000000004
+# YAML-NEXT: Visibility: STV_INTERNAL
+# YAML-NEXT: - Name: hidden
+# YAML-NEXT: Type: STT_OBJECT
+# YAML-NEXT: Section: .data
+# YAML-NEXT: Binding: STB_GLOBAL
+# YAML-NEXT: Value: 0x000000000000000C
+# YAML-NEXT: Size: 0x0000000000000004
+# YAML-NEXT: Visibility: STV_HIDDEN
+# YAML-NEXT: - Name: protected
+# YAML-NEXT: Type: STT_OBJECT
+# YAML-NEXT: Section: .data
+# YAML-NEXT: Binding: STB_GLOBAL
+# YAML-NEXT: Value: 0x0000000000000010
+# YAML-NEXT: Size: 0x0000000000000004
+# YAML-NEXT: Visibility: STV_PROTECTED
+# YAML-NEXT: Other: [ STO_MIPS_PIC, STO_MIPS_MICROMIPS ]
--- !ELF
FileHeader:
Size: 0x14
Symbols:
- Global:
- - Name: default1
- Type: STT_OBJECT
- Visibility: STV_DEFAULT
- Section: .data
- Value: 0x00
- Size: 0x04
- - Name: default2
- Type: STT_OBJECT
- Section: .data
- Value: 0x04
- Size: 0x04
- - Name: internal
- Type: STT_OBJECT
- Visibility: STV_INTERNAL
- Section: .data
- Value: 0x08
- Size: 0x04
- - Name: hidden
- Type: STT_OBJECT
- Visibility: STV_HIDDEN
- Section: .data
- Value: 0x0C
- Size: 0x04
- - Name: protected
- Type: STT_OBJECT
- Visibility: STV_PROTECTED
- Other: [ STO_MIPS_MICROMIPS, STO_MIPS_PIC ]
- Section: .data
- Value: 0x10
- Size: 0x04
+ - Name: default1
+ Type: STT_OBJECT
+ Visibility: STV_DEFAULT
+ Section: .data
+ Value: 0x00
+ Size: 0x04
+ Binding: STB_GLOBAL
+ - Name: default2
+ Type: STT_OBJECT
+ Section: .data
+ Value: 0x04
+ Size: 0x04
+ Binding: STB_GLOBAL
+ - Name: internal
+ Type: STT_OBJECT
+ Visibility: STV_INTERNAL
+ Section: .data
+ Value: 0x08
+ Size: 0x04
+ Binding: STB_GLOBAL
+ - Name: hidden
+ Type: STT_OBJECT
+ Visibility: STV_HIDDEN
+ Section: .data
+ Value: 0x0C
+ Size: 0x04
+ Binding: STB_GLOBAL
+ - Name: protected
+ Type: STT_OBJECT
+ Visibility: STV_PROTECTED
+ Other: [ STO_MIPS_MICROMIPS, STO_MIPS_PIC ]
+ Section: .data
+ Value: 0x10
+ Size: 0x04
+ Binding: STB_GLOBAL
AddressAlign: 0x0000000000000001
Content: ''
Symbols:
- Global:
- - Name: lib1
- Index: SHN_ABS
- Value: 0x1234
- Local:
- - Name: '-'
- Type: STT_FILE
+ - Name: '-'
+ Type: STT_FILE
+ - Name: lib1
+ Index: SHN_ABS
+ Value: 0x1234
+ Binding: STB_GLOBAL
...
AddressAlign: 0x0000000000000001
Content: ''
Symbols:
- Global:
- - Name: lib2
- Index: SHN_ABS
- Value: 0x1234
- Local:
- - Name: '-'
- Type: STT_FILE
+ - Name: '-'
+ Type: STT_FILE
+ - Name: lib2
+ Index: SHN_ABS
+ Value: 0x1234
+ Binding: STB_GLOBAL
...
AddressAlign: 0x0000000000000001
Content: ''
Symbols:
- Global:
- - Name: lib3
- Index: SHN_ABS
- Value: 0x1234
- Local:
- - Name: '-'
- Type: STT_FILE
+ - Name: '-'
+ Type: STT_FILE
+ - Name: lib3
+ Index: SHN_ABS
+ Value: 0x1234
+ Binding: STB_GLOBAL
...
AddressAlign: 0x0000000000000001
Content: ''
Symbols:
- Local:
- - Name: '-'
- Type: STT_FILE
+ - Name: '-'
+ Type: STT_FILE
...
Flags: [ SHF_GROUP ]
Content: '00'
Symbols:
- Global:
- - Name: .debug_foo
- Type: STT_SECTION
- Section: .debug_foo
- - Name: .notdebug_foo
- Type: STT_SECTION
- Section: .notdebug_foo
- - Name: .Linfo_string0
- Section: .debug_bar
- - Name: groupname
- Section: .group
+ - Name: .debug_foo
+ Type: STT_SECTION
+ Section: .debug_foo
+ Binding: STB_GLOBAL
+ - Name: .notdebug_foo
+ Type: STT_SECTION
+ Section: .notdebug_foo
+ Binding: STB_GLOBAL
+ - Name: .Linfo_string0
+ Section: .debug_bar
+ Binding: STB_GLOBAL
+ - Name: groupname
+ Section: .group
+ Binding: STB_GLOBAL
...
Type: ET_EXEC
Machine: EM_X86_64
Symbols:
- Global:
- - Name: test
- Index: SHN_ABS
- Value: 0x1234
+ - Name: test
+ Index: SHN_ABS
+ Value: 0x1234
+ Binding: STB_GLOBAL
#CHECK: Symbols [
#CHECK-NEXT: Symbol {
AddressAlign: 0x0000000000000004
Content: ''
Symbols:
- Local:
- - Name: .text.bar
- Type: STT_SECTION
- Section: .text.bar
- - Name: .text.foo
- Type: STT_SECTION
- Section: .text.foo
- - Name: .ARM.exidx.text.foo
- Type: STT_SECTION
- Section: .ARM.exidx.text.foo
+ - Name: .text.bar
+ Type: STT_SECTION
+ Section: .text.bar
+ - Name: .text.foo
+ Type: STT_SECTION
+ Section: .text.foo
+ - Name: .ARM.exidx.text.foo
+ Type: STT_SECTION
+ Section: .ARM.exidx.text.foo
AddressAlign: 0x0000000000000010
Content: "00000000"
Symbols:
- Global:
- - Name: foo
- Type: STT_FUNC
- Section: .text
- Value: 0x1004
+ - Name: foo
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1004
+ Binding: STB_GLOBAL
# CHECK: Type: SHT_NULL
Type: R_X86_64_PC32
Addend: 0x13
Symbols:
- Global:
- - Name: _start
- Type: STT_FUNC
- Section: .text
- Value: 0x1000
- Size: 4
- - Name: foo
- Type: STT_FUNC
- Size: 4
- - Name: fooA
- Type: STT_FUNC
- Size: 4
- - Name: bar
- Type: STT_OBJECT
- Size: 4
- - Name: barA
- Type: STT_OBJECT
- Size: 4
+ - Name: _start
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1000
+ Size: 4
+ Binding: STB_GLOBAL
+ - Name: foo
+ Type: STT_FUNC
+ Size: 4
+ Binding: STB_GLOBAL
+ - Name: fooA
+ Type: STT_FUNC
+ Size: 4
+ Binding: STB_GLOBAL
+ - Name: bar
+ Type: STT_OBJECT
+ Size: 4
+ Binding: STB_GLOBAL
+ - Name: barA
+ Type: STT_OBJECT
+ Size: 4
+ Binding: STB_GLOBAL
# CHECK: Relocations [
# CHECK-NEXT: Section (2) .rel.text {
Type: ET_EXEC
Machine: EM_HEXAGON
Symbols:
- Global:
- - Name: test
- Index: SHN_COMMON
- Value: 0x1234
- - Name: test2
- Index: SHN_HEXAGON_SCOMMON
- Value: 0x1235
- - Name: test3
- Index: SHN_HEXAGON_SCOMMON_2
- Value: 0x1236
- - Name: test4
- Index: SHN_HEXAGON_SCOMMON_4
- Value: 0x1237
- - Name: test5
- Index: SHN_HEXAGON_SCOMMON_8
- Value: 0x1238
+ - Name: test
+ Index: SHN_COMMON
+ Value: 0x1234
+ Binding: STB_GLOBAL
+ - Name: test2
+ Index: SHN_HEXAGON_SCOMMON
+ Value: 0x1235
+ Binding: STB_GLOBAL
+ - Name: test3
+ Index: SHN_HEXAGON_SCOMMON_2
+ Value: 0x1236
+ Binding: STB_GLOBAL
+ - Name: test4
+ Index: SHN_HEXAGON_SCOMMON_4
+ Value: 0x1237
+ Binding: STB_GLOBAL
+ - Name: test5
+ Index: SHN_HEXAGON_SCOMMON_8
+ Value: 0x1238
+ Binding: STB_GLOBAL
#CHECK: Symbols [
#CHECK-NEXT: Symbol {
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC ]
Symbols:
- Global:
- - Name: foo
- Type: STT_FUNC
- Section: .text
- Value: 0x1234
- - Name: bar
- Type: STT_OBJECT
- Section: .data
- Value: 0xabcd
+ - Name: foo
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1234
+ Binding: STB_GLOBAL
+ - Name: bar
+ Type: STT_OBJECT
+ Section: .data
+ Value: 0xabcd
+ Binding: STB_GLOBAL
# CHECK: Format:
# 32-SAME: ELF32-
Content: DEADBEEF
Size: 16
Symbols:
- Global:
- - Name: foo
- Type: STT_FUNC
- Section: .text
- Value: 16
- Size: 8
- - Name: bar
- Type: STT_OBJECT
- Section: .data
- Size: 16
+ - Name: foo
+ Type: STT_FUNC
+ Section: .text
+ Value: 16
+ Size: 8
+ Binding: STB_GLOBAL
+ - Name: bar
+ Type: STT_OBJECT
+ Section: .data
+ Size: 16
+ Binding: STB_GLOBAL
# CHECK: Sections [
# CHECK-NEXT: Section {
AddressAlign: 0x0000000000000010
Size: 64
Symbols:
- Local:
- - Name: Local
- Type: STT_FUNC
- Section: .text
- Value: 0x1000
- Size: 8
- - Name: LocalSection
- Type: STT_SECTION
- Section: .text
- - Name: LocalFile
- Type: STT_FILE
- Weak:
- - Name: Weak
- Type: STT_FUNC
- Size: 8
- Section: .text
- Value: 0x1008
- Global:
- - Name: Global
- Type: STT_FUNC
- Size: 8
- Section: .text
- Value: 0x1010
+ - Name: Local
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1000
+ Size: 8
+ - Name: LocalSection
+ Type: STT_SECTION
+ Section: .text
+ - Name: LocalFile
+ Type: STT_FILE
+ - Name: Global
+ Type: STT_FUNC
+ Size: 8
+ Section: .text
+ Value: 0x1010
+ Binding: STB_GLOBAL
+ - Name: Weak
+ Type: STT_FUNC
+ Size: 8
+ Section: .text
+ Value: 0x1008
+ Binding: STB_WEAK
#CHECK: Symbols [
#CHECK-NEXT: Symbol {
Symbol: .L.rel
Type: R_X86_64_PC32
Symbols:
- Local:
- - Name: .L.rel
- Type: STT_FUNC
- Section: .text
+ - Name: .L.rel
+ Type: STT_FUNC
+ Section: .text
# CHECK: not stripping symbol '.L.rel' because it is named in a relocation.
- Name: .LLVM.Custom.Section
Type: SHT_PROGBITS
Symbols:
- Local:
- - Name: Local
- Type: STT_FUNC
- Section: .text
- - Name: .L.LocalSection
- Type: STT_SECTION
- Section: .text
- - Type: STT_SECTION
- Section: .LLVM.Custom.Section
- - Name: .L.LocalFile
- Type: STT_FILE
- - Name: .L.str
- Type: STT_OBJECT
- Section: .text
- - Name: .L.undefined
- - Name: .L.abs
- Index: SHN_ABS
- Global:
- - Name: .L.Global
- Type: STT_FUNC
- Section: .text
+ - Name: Local
+ Type: STT_FUNC
+ Section: .text
+ - Name: .L.LocalSection
+ Type: STT_SECTION
+ Section: .text
+ - Type: STT_SECTION
+ Section: .LLVM.Custom.Section
+ - Name: .L.LocalFile
+ Type: STT_FILE
+ - Name: .L.str
+ Type: STT_OBJECT
+ Section: .text
+ - Name: .L.undefined
+ - Name: .L.abs
+ Index: SHN_ABS
+ - Name: .L.Global
+ Type: STT_FUNC
+ Section: .text
+ Binding: STB_GLOBAL
# CHECK: Symbols [
# CHECK-NEXT: Symbol {
- Name: .text
Type: SHT_PROGBITS
Symbols:
- Local:
- - Name: Local
- Type: STT_FUNC
- Section: .text
- - Name: .L.str
- Type: STT_OBJECT
- Section: .text
- Global:
- - Name: Global
- Type: STT_FUNC
- Section: .text
+ - Name: Local
+ Type: STT_FUNC
+ Section: .text
+ - Name: .L.str
+ Type: STT_OBJECT
+ Section: .text
+ - Name: Global
+ Type: STT_FUNC
+ Section: .text
+ Binding: STB_GLOBAL
# CHECK: Symbols [
# CHECK-NEXT: Symbol {
AddressAlign: 0x0000000000000010
Size: 64
Symbols:
- Local:
- - Name: Local
- Type: STT_FUNC
- Section: .text
- Value: 0x1000
- Size: 8
- Weak:
- - Name: Weak
- Type: STT_FUNC
- Size: 8
- Section: .text
- Value: 0x1008
- - Name: WeakUndef
- Global:
- - Name: Global
- Type: STT_FUNC
- Size: 8
- Section: .text
- Value: 0x1010
+ - Name: Local
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1000
+ Size: 8
+ - Name: Global
+ Type: STT_FUNC
+ Size: 8
+ Section: .text
+ Value: 0x1010
+ Binding: STB_GLOBAL
+ - Name: Weak
+ Type: STT_FUNC
+ Size: 8
+ Section: .text
+ Value: 0x1008
+ Binding: STB_WEAK
+ - Name: WeakUndef
+ Binding: STB_WEAK
#CHECK: Symbols [
#CHECK-NEXT: Symbol {
Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
AddressAlign: 0x0000000000000001
Symbols:
- Local:
- - Name: foo
- Section: .group
+ - Name: foo
+ Section: .group
Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
AddressAlign: 0x0000000000000010
Symbols:
- Local:
- - Name: .text.bar
- Type: STT_SECTION
- Section: .text.bar
- - Name: .text.foo
- Type: STT_SECTION
- Section: .text.foo
- Weak:
- - Name: bar
- Type: STT_FUNC
- Section: .text.bar
- Size: 0x0000000000000000
- - Name: foo
- Type: STT_FUNC
- Section: .text.foo
- Size: 0x0000000000000000
+ - Name: .text.bar
+ Type: STT_SECTION
+ Section: .text.bar
+ - Name: .text.foo
+ Type: STT_SECTION
+ Section: .text.foo
+ - Name: bar
+ Type: STT_FUNC
+ Section: .text.bar
+ Size: 0x0000000000000000
+ Binding: STB_WEAK
+ - Name: foo
+ Type: STT_FUNC
+ Section: .text.foo
+ Size: 0x0000000000000000
+ Binding: STB_WEAK
Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
AddressAlign: 0x0000000000000010
Symbols:
- Local:
- - Name: .text.foo
- Type: STT_SECTION
- Section: .text.foo
- - Name: .text.bar
- Type: STT_SECTION
- Section: .text.bar
- Weak:
- - Name: foo
- Type: STT_FUNC
- Section: .text.foo
- Size: 0x0000000000000000
- - Name: bar
- Type: STT_FUNC
- Section: .text.bar
- Size: 0x0000000000000000
+ - Name: .text.foo
+ Type: STT_SECTION
+ Section: .text.foo
+ - Name: .text.bar
+ Type: STT_SECTION
+ Section: .text.bar
+ - Name: foo
+ Type: STT_FUNC
+ Section: .text.foo
+ Size: 0x0000000000000000
+ Binding: STB_WEAK
+ - Name: bar
+ Type: STT_FUNC
+ Section: .text.bar
+ Size: 0x0000000000000000
+ Binding: STB_WEAK
Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
AddressAlign: 0x0000000000000010
Symbols:
- Local:
- - Name: .text.bar
- Type: STT_SECTION
- Section: .text.bar
- - Name: .text.foo
- Type: STT_SECTION
- Section: .text.foo
- Weak:
- - Name: bar
- Type: STT_FUNC
- Section: .text.bar
- Size: 0x0000000000000000
- - Name: foo
- Type: STT_FUNC
- Section: .text.foo
- Size: 0x0000000000000000
+ - Name: .text.bar
+ Type: STT_SECTION
+ Section: .text.bar
+ - Name: .text.foo
+ Type: STT_SECTION
+ Section: .text.foo
+ - Name: bar
+ Type: STT_FUNC
+ Section: .text.bar
+ Size: 0x0000000000000000
+ Binding: STB_WEAK
+ - Name: foo
+ Type: STT_FUNC
+ Section: .text.foo
+ Size: 0x0000000000000000
+ Binding: STB_WEAK
Type: ET_EXEC
Machine: EM_X86_64
Symbols:
- Global:
- - Name: test
- Index: SHN_HEXAGON_SCOMMON
+ - Name: test
+ Index: SHN_HEXAGON_SCOMMON
+ Binding: STB_GLOBAL
# CHECK: Symbol 'test' has unsupported value greater than or equal to SHN_LORESERVE: 65280
AddressAlign: 0x0000000000000010
Size: 64
Symbols:
- Local:
- - Name: foo
- Type: STT_FILE
- Section: .text
- Global:
- - Name: bar
- Type: STT_FUNC
- Section: .text
+ - Name: foo
+ Type: STT_FILE
+ Section: .text
+ - Name: bar
+ Type: STT_FUNC
+ Section: .text
+ Binding: STB_GLOBAL
#STRIPALL: Symbols [
#STRIPALL-NEXT: Symbol {
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
Symbols:
- Local:
- - Name: Local1
- Section: .text
- - Name: Local2
- Section: .text
- Weak:
- - Name: Weak1
- Section: .text
- - Name: Weak2
- Section: .text
- Global:
- - Name: Global1
- Section: .text
- - Name: Global2
- Section: .text
+ - Name: Local1
+ Section: .text
+ - Name: Local2
+ Section: .text
+ - Name: Global1
+ Section: .text
+ Binding: STB_GLOBAL
+ - Name: Global2
+ Section: .text
+ Binding: STB_GLOBAL
+ - Name: Weak1
+ Section: .text
+ Binding: STB_WEAK
+ - Name: Weak2
+ Section: .text
+ Binding: STB_WEAK
# CHECK: Symbol table '.symtab' contains 7 entries:
# CHECK-NEXT: Num: Value Size Type Bind Vis Ndx Name
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
Symbols:
- Local:
- - Name: Local1
- Section: .text
- - Name: Local2
- Section: .text
- Weak:
- - Name: Weak1
- Section: .text
- - Name: Weak2
- Section: .text
- - Name: Weak3
- Section: .text
- Global:
- - Name: Global1
- Section: .text
- - Name: Global2
- Section: .text
- - Name: Global3
- Section: .text
- - Name: Global4
- Section: .text
- - Name: Global5
- Section: .text
- - Name: Global6
- Section: .text
- - Name: "Global5 Global6"
- Section: .text
- - Name: Global7
+ - Name: Local1
+ Section: .text
+ - Name: Local2
+ Section: .text
+ - Name: Global1
+ Section: .text
+ Binding: STB_GLOBAL
+ - Name: Global2
+ Section: .text
+ Binding: STB_GLOBAL
+ - Name: Global3
+ Section: .text
+ Binding: STB_GLOBAL
+ - Name: Global4
+ Section: .text
+ Binding: STB_GLOBAL
+ - Name: Global5
+ Section: .text
+ Binding: STB_GLOBAL
+ - Name: Global6
+ Section: .text
+ Binding: STB_GLOBAL
+ - Name: "Global5 Global6"
+ Section: .text
+ Binding: STB_GLOBAL
+ - Name: Global7
+ Binding: STB_GLOBAL
+ - Name: Weak1
+ Section: .text
+ Binding: STB_WEAK
+ - Name: Weak2
+ Section: .text
+ Binding: STB_WEAK
+ - Name: Weak3
+ Section: .text
+ Binding: STB_WEAK
# CHECK: Symbol table '.symtab' contains 14 entries:
# CHECK-NEXT: Num: Value Size Type Bind Vis Ndx Name
AddressAlign: 0x0000000000000010
Size: 64
Symbols:
- Local:
- - Name: foo
- Type: STT_FUNC
- Section: .text
- Value: 0x1000
- Size: 8
+ - Name: foo
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1000
+ Size: 8
#CHECK: Symbols [
#CHECK-NEXT: Symbol {
AddressAlign: 0x0000000000000010
Size: 64
Symbols:
- Local:
- - Name: foo
- Type: STT_FUNC
- Section: .text
- Value: 0x1000
- Size: 8
- - Name: bar
- Type: STT_FUNC
- Section: .text
- Value: 0x1008
- Size: 8
- - Name: baz
- Type: STT_FUNC
- Section: .text
- Value: 0x1010
- Size: 8
+ - Name: foo
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1000
+ Size: 8
+ - Name: bar
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1008
+ Size: 8
+ - Name: baz
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1010
+ Size: 8
#CHECK: Symbols [
#CHECK-NEXT: Symbol {
Symbol: undefGlobal
Type: R_X86_64_PC32
Symbols:
- Local:
- - Name: hiddenLocal
- Type: STT_FUNC
- Section: .text
- Value: 0x1008
- Size: 8
- Visibility: STV_HIDDEN
- Weak:
- - Name: hiddenWeak
- Type: STT_FUNC
- Section: .text
- Value: 0x1010
- Size: 8
- Visibility: STV_HIDDEN
- Global:
- - Name: defaultGlobal
- Type: STT_FUNC
- Size: 8
- Section: .text
- Value: 0x1000
- - Name: hiddenGlobal
- Type: STT_OBJECT
- Section: .data
- Value: 0x2006
- Size: 2
- Visibility: STV_HIDDEN
- - Name: hiddenGlobalCommon
- Type: STT_OBJECT
- Index: SHN_COMMON
- Value: 0x2006
- Size: 2
- Visibility: STV_HIDDEN
- - Name: undefGlobal
- Type: STT_FUNC
- Size: 8
- - Name: internalGlobal
- Type: STT_OBJECT
- Section: .data
- Value: 0x2002
- Size: 2
- Visibility: STV_INTERNAL
- - Name: protectedGlobal
- Type: STT_OBJECT
- Section: .data
- Value: 0x2000
- Size: 4
- Visibility: STV_PROTECTED
+ - Name: hiddenLocal
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1008
+ Size: 8
+ Visibility: STV_HIDDEN
+ - Name: defaultGlobal
+ Type: STT_FUNC
+ Size: 8
+ Section: .text
+ Value: 0x1000
+ Binding: STB_GLOBAL
+ - Name: hiddenGlobal
+ Type: STT_OBJECT
+ Section: .data
+ Value: 0x2006
+ Size: 2
+ Visibility: STV_HIDDEN
+ Binding: STB_GLOBAL
+ - Name: hiddenGlobalCommon
+ Type: STT_OBJECT
+ Index: SHN_COMMON
+ Value: 0x2006
+ Size: 2
+ Visibility: STV_HIDDEN
+ Binding: STB_GLOBAL
+ - Name: undefGlobal
+ Type: STT_FUNC
+ Size: 8
+ Binding: STB_GLOBAL
+ - Name: internalGlobal
+ Type: STT_OBJECT
+ Section: .data
+ Value: 0x2002
+ Size: 2
+ Visibility: STV_INTERNAL
+ Binding: STB_GLOBAL
+ - Name: protectedGlobal
+ Type: STT_OBJECT
+ Section: .data
+ Value: 0x2000
+ Size: 4
+ Visibility: STV_PROTECTED
+ Binding: STB_GLOBAL
+ - Name: hiddenWeak
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1010
+ Size: 8
+ Visibility: STV_HIDDEN
+ Binding: STB_WEAK
#CHECK: Relocations [
#CHECK-NEXT: Section (3) .rel.text {
AddressAlign: 0x0000000000000010
Content: "0000000000000000"
Symbols:
- Local:
- - Name: Local
- Type: STT_FUNC
- Section: .text
- Value: 0x1000
- Size: 8
- Weak:
- - Name: Weak
- Type: STT_FUNC
- Size: 8
- Section: .text
- Value: 0x1008
- Global:
- - Name: Global
- Type: STT_FUNC
- Size: 8
- Section: .text
- Value: 0x1010
- - Name: GlobalUndef
- Type: STT_FUNC
- - Name: GlobalCommon
- Type: STT_OBJECT
- Index: SHN_COMMON
- Value: 0x2006
- Size: 2
+ - Name: Local
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1000
+ Size: 8
+ - Name: Global
+ Type: STT_FUNC
+ Size: 8
+ Section: .text
+ Value: 0x1010
+ Binding: STB_GLOBAL
+ - Name: GlobalUndef
+ Type: STT_FUNC
+ Binding: STB_GLOBAL
+ - Name: GlobalCommon
+ Type: STT_OBJECT
+ Index: SHN_COMMON
+ Value: 0x2006
+ Size: 2
+ Binding: STB_GLOBAL
+ - Name: Weak
+ Type: STT_FUNC
+ Size: 8
+ Section: .text
+ Value: 0x1008
+ Binding: STB_WEAK
#CHECK: Symbols [
#CHECK-NEXT: Symbol {
AddressAlign: 0x0000000000000010
Size: 64
Symbols:
- Local:
- - Name: foo
- Type: STT_SECTION
- Section: .text
- - Name: bar
- Type: STT_FILE
- Section: .text
- Global:
- - Name: foobar
- Type: STT_FUNC
- Section: .text
+ - Name: foo
+ Type: STT_SECTION
+ Section: .text
+ - Name: bar
+ Type: STT_FILE
+ Section: .text
+ - Name: foobar
+ Type: STT_FUNC
+ Section: .text
+ Binding: STB_GLOBAL
# COMMON: Symbols [
# COMMON-NEXT: Symbol {
AddressAlign: 0x0000000000000010
Content: "0000000000000000"
Symbols:
- Global:
- - Name: foo
- Type: STT_FUNC
- Section: .text
- Value: 0x1004
- - Name: bar
- Type: STT_OBJECT
- Section: .data
- Value: 0x2000
- Size: 4
- - Name: empty
- Type: STT_FUNC
- Section: .text
- Value: 0x1008
+ - Name: foo
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1004
+ Binding: STB_GLOBAL
+ - Name: bar
+ Type: STT_OBJECT
+ Section: .data
+ Value: 0x2000
+ Size: 4
+ Binding: STB_GLOBAL
+ - Name: empty
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1008
+ Binding: STB_GLOBAL
#CHECK: Symbols [
#CHECK-NEXT: Symbol {
AddressAlign: 0x0000000000000010
Size: 64
Symbols:
- Local:
- - Name: foobaz
- Type: STT_FUNC
- Section: .text
- Value: 0x1000
- Size: 8
- - Name: bar
- Type: STT_FUNC
- Section: .text
- Value: 0x1008
- Size: 8
- - Name: rebar
- Type: STT_FUNC
- Section: .text
- Value: 0x1010
- Size: 8
+ - Name: foobaz
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1000
+ Size: 8
+ - Name: bar
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1008
+ Size: 8
+ - Name: rebar
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1010
+ Size: 8
#REGEX1-NOT: foobaz
#REGEX1-NOT: bar
Type: R_X86_64_PC32
Symbols:
- Global:
- - Name: foo
- Type: STT_FUNC
- Size: 4
+ - Name: foo
+ Type: STT_FUNC
+ Size: 4
+ Binding: STB_GLOBAL
# CHECK: Symbol table .symtab cannot be removed because it is referenced by the relocation section .rel.text.
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC ]
Symbols:
- Global:
- - Name: test
- Type: STT_FUNC
- Section: .test
- Value: 0x1000
- Size: 4
- - Name: test2
- Type: STT_FUNC
- Section: .test2
- Value: 0x1000
- Size: 4
+ - Name: test
+ Type: STT_FUNC
+ Section: .test
+ Value: 0x1000
+ Size: 4
+ Binding: STB_GLOBAL
+ - Name: test2
+ Type: STT_FUNC
+ Section: .test2
+ Value: 0x1000
+ Size: 4
+ Binding: STB_GLOBAL
# The sections counted here should be .test, .symtab, .strtab, and .shstrtab.
# The 5th section is the null section.
SHF_OS_NONCONFORMING, SHF_STRINGS, SHF_TLS, SHF_WRITE ]
Content: "a4a4a4a4"
Symbols:
- Local:
- Name: dummy
Section: .group
Type: ET_EXEC
Machine: EM_X86_64
Symbols:
- Global:
- - Name: test
- Index: 0xff05
+ - Name: test
+ Index: 0xff05
+ Binding: STB_GLOBAL
# CHECK: Symbol 'test' has unsupported value greater than or equal to SHN_LORESERVE: 65285
- Name: .debug_bar
Type: SHT_PROGBITS
Symbols:
- Local:
- - Name: foo
- Type: STT_FUNC
- Section: .text
- Value: 0x1000
- Size: 8
- - Name: bar
- Type: STT_FUNC
- Section: .text
- Value: 0x1008
- Size: 8
- - Name: baz
- Type: STT_FUNC
- Section: .text
- Value: 0x1010
- Size: 8
+ - Name: foo
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1000
+ Size: 8
+ - Name: bar
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1008
+ Size: 8
+ - Name: baz
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1010
+ Size: 8
# CHECK: Name: .text
# CHECK: Name: .gnu.warning.foo
AddressAlign: 0x0000000000000010
Content: "00000000"
Symbols:
- Global:
- - Name: debugfoo
- Section: .debug_foo
- - Name: foo
- Section: .text
- - Name: bar
- Section: .text.bar
-
+ - Name: debugfoo
+ Section: .debug_foo
+ Binding: STB_GLOBAL
+ - Name: foo
+ Section: .text
+ Binding: STB_GLOBAL
+ - Name: bar
+ Section: .text.bar
+ Binding: STB_GLOBAL
+
# CHECK: SectionHeaderCount: 3
# CHECK: Name: .text
AddressAlign: 0x0000000000000010
Content: "00000000"
Symbols:
- Global:
- - Name: debugfoo
- Section: .debug_foo
- - Name: foo
- Section: .text
- - Name: bar
- Section: .text.bar
-
+ - Name: debugfoo
+ Section: .debug_foo
+ Binding: STB_GLOBAL
+ - Name: foo
+ Section: .text
+ Binding: STB_GLOBAL
+ - Name: bar
+ Section: .text.bar
+ Binding: STB_GLOBAL
+
# CHECK: SectionHeaderCount: 5
# CHECK: Name: .text
AddressAlign: 0x0000000000000010
Content: "00000000"
Symbols:
- Global:
- - Name: foo
- Section: .text
- - Name: debugfoo
- Section: .debugfoo
+ - Name: foo
+ Section: .text
+ Binding: STB_GLOBAL
+ - Name: debugfoo
+ Section: .debugfoo
+ Binding: STB_GLOBAL
# CHECK: SectionHeaderCount: 5
AddressAlign: 0x0000000000000010
Size: 64
Symbols:
- Weak:
- - Name: foo
- Type: STT_FUNC
- Section: .text
+ - Name: foo
+ Type: STT_FUNC
+ Section: .text
+ Binding: STB_WEAK
#CHECK: Symbol foo cannot be removed because it is referenced by the section .group[1].
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
Symbols:
- Local:
- - Name: foo
- Type: STT_FUNC
- Section: .text
- Value: 0x1234
- Size: 8
- - Name: bar
- Type: STT_FUNC
- Section: .text
- Value: 0x5678
- Size: 8
+ - Name: foo
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1234
+ Size: 8
+ - Name: bar
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x5678
+ Size: 8
# CHECK: Symbols [
# CHECK-NEXT: Symbol {
Symbol: foo
Type: R_X86_64_PC32
Symbols:
- Local:
- - Name: foo
- Type: STT_FUNC
- Section: .text
- Value: 0x1000
- Size: 8
+ - Name: foo
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1000
+ Size: 8
#CHECK: not stripping symbol 'foo' because it is named in a relocation.
AddressAlign: 0x0000000000000001
Content: '0102'
Symbols:
- Local:
- - Name: foo
- Section: .data
- Value: 0x0000000000000001
-DynamicSymbols: {}
+ - Name: foo
+ Section: .data
+ Value: 0x0000000000000001
...
Symbol: bar
Type: R_X86_64_32S
Symbols:
- Global:
- - Name: bar
- Section: .text
+ - Name: bar
+ Section: .text
+ Binding: STB_GLOBAL
AddressAlign: 0x0000000000000010
Size: 64
Symbols:
- Local:
- - Name: foo
- Type: STT_FUNC
- Section: .text
- Value: 0x1000
- Size: 8
- Weak:
- - Name: bar
- Type: STT_FUNC
- Size: 8
- Section: .text
- Value: 0x1008
- Global:
- - Name: baz
- Type: STT_FUNC
- Size: 8
- Section: .text
- Value: 0x1010
+ - Name: foo
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1000
+ Size: 8
+ - Name: bar
+ Type: STT_FUNC
+ Size: 8
+ Section: .text
+ Value: 0x1008
+ Binding: STB_WEAK
+ - Name: baz
+ Type: STT_FUNC
+ Size: 8
+ Section: .text
+ Value: 0x1010
+ Binding: STB_GLOBAL
#CHECK: Symbols [
#CHECK-NEXT: Symbol {
Symbol: foo
Type: R_X86_64_PC32
Symbols:
- Local:
- - Name: foo
- Type: STT_FUNC
- Section: .text
- Value: 0x1000
- Size: 8
- - Name: bar
- Type: STT_FUNC
- Size: 8
- Section: .text
- Value: 0x1008
- - Name: barfoo
- Type: STT_FUNC
- Size: 8
- Section: .text
- Value: 0x1010
- - Name: fileSymbol
- Type: STT_FILE
- - Name: sectionSymbol
- Type: STT_SECTION
- Weak:
- - Name: baz
- Type: STT_FUNC
- Size: 8
- Section: .text
- Value: 0x1018
- - Name: foobaz
- Type: STT_FUNC
- Global:
- - Name: foobar
- Type: STT_FUNC
- - Name: barbaz
- Type: STT_FUNC
- Size: 8
- Section: .text
- Value: 0x1020
+ - Name: foo
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1000
+ Size: 8
+ - Name: bar
+ Type: STT_FUNC
+ Size: 8
+ Section: .text
+ Value: 0x1008
+ - Name: barfoo
+ Type: STT_FUNC
+ Size: 8
+ Section: .text
+ Value: 0x1010
+ - Name: fileSymbol
+ Type: STT_FILE
+ - Name: sectionSymbol
+ Type: STT_SECTION
+ - Name: foobar
+ Type: STT_FUNC
+ Binding: STB_GLOBAL
+ - Name: barbaz
+ Type: STT_FUNC
+ Size: 8
+ Section: .text
+ Value: 0x1020
+ Binding: STB_GLOBAL
+ - Name: baz
+ Type: STT_FUNC
+ Size: 8
+ Section: .text
+ Value: 0x1018
+ Binding: STB_WEAK
+ - Name: foobaz
+ Type: STT_FUNC
+ Binding: STB_WEAK
#CHECK: Symbols [
#CHECK-NEXT: Symbol {
AddressAlign: 0x0000000000000010
Content: "0000000000000000"
Symbols:
- Global:
- - Name: _start
- Type: STT_FUNC
- Section: .text
- Value: 0x1000
- Size: 4
- - Name: bam
- Type: STT_FUNC
- Section: .text
- Value: 0x1001
- Size: 4
- Visibility: STV_HIDDEN
- - Name: foo
- Type: STT_FUNC
- Section: .text
- Value: 0x1004
- - Name: faz
- Type: STT_OBJECT
- Section: .data
- Value: 0x2002
- Size: 2
- Visibility: STV_INTERNAL
- - Name: bar
- Type: STT_OBJECT
- Section: .data
- Value: 0x2000
- Size: 4
- - Name: baz
- Type: STT_OBJECT
- Section: .data
- Value: 0x2004
- Size: 4
+ - Name: _start
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1000
+ Size: 4
+ Binding: STB_GLOBAL
+ - Name: bam
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1001
+ Size: 4
+ Visibility: STV_HIDDEN
+ Binding: STB_GLOBAL
+ - Name: foo
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1004
+ Binding: STB_GLOBAL
+ - Name: faz
+ Type: STT_OBJECT
+ Section: .data
+ Value: 0x2002
+ Size: 2
+ Visibility: STV_INTERNAL
+ Binding: STB_GLOBAL
+ - Name: bar
+ Type: STT_OBJECT
+ Section: .data
+ Value: 0x2000
+ Size: 4
+ Binding: STB_GLOBAL
+ - Name: baz
+ Type: STT_OBJECT
+ Section: .data
+ Value: 0x2004
+ Size: 4
+ Binding: STB_GLOBAL
#CHECK: Symbols [
#CHECK-NEXT: Symbol {
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
Symbols:
- Local:
- - Name: ""
- Type: STT_SECTION
- Section: .text
- Global:
- # We need to have a named symbol, otherwise the original
- # issue that was fixed is not reproduced by this test.
- - Name: foo
+ - Name: ""
+ Type: STT_SECTION
+ Section: .text
+# We need to have a named symbol, otherwise the original
+# issue that was fixed is not reproduced by this test.
+ - Name: foo
+ Binding: STB_GLOBAL
Symbol: undefGlobal
Type: R_X86_64_PC32
Symbols:
- Local:
- - Name: Local
- Type: STT_FUNC
- Section: .text
- Value: 0x1008
- Size: 8
- Weak:
- - Name: Weak
- Type: STT_FUNC
- Size: 8
- Section: .text
- Value: 0x1010
- Global:
- - Name: Global
- Type: STT_FUNC
- Size: 8
- Section: .text
- Value: 0x1018
- - Name: undefGlobal
- Type: STT_FUNC
- Size: 8
+ - Name: Local
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1008
+ Size: 8
+ - Name: Global
+ Type: STT_FUNC
+ Size: 8
+ Section: .text
+ Value: 0x1018
+ Binding: STB_GLOBAL
+ - Name: undefGlobal
+ Type: STT_FUNC
+ Size: 8
+ Binding: STB_GLOBAL
+ - Name: Weak
+ Type: STT_FUNC
+ Size: 8
+ Section: .text
+ Value: 0x1010
+ Binding: STB_WEAK
#CHECK: Symbols [
#CHECK-NEXT: Symbol {
AddressAlign: 0x0000000000000010
Size: 64
Symbols:
- Local:
- - Name: Local
- Type: STT_FUNC
- Section: .text
- Value: 0x1000
- Size: 8
- Weak:
- - Name: Weak
- Type: STT_FUNC
- Size: 8
- Section: .text
- Value: 0x1008
- Global:
- - Name: Global
- Type: STT_FUNC
- Size: 8
- Section: .text
- Value: 0x1010
+ - Name: Local
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1000
+ Size: 8
+ - Name: Global
+ Type: STT_FUNC
+ Size: 8
+ Section: .text
+ Value: 0x1010
+ Binding: STB_GLOBAL
+ - Name: Weak
+ Type: STT_FUNC
+ Size: 8
+ Section: .text
+ Value: 0x1008
+ Binding: STB_WEAK
#CHECK: Symbols [
#CHECK-NEXT: Symbol {
Flags: [ SHF_MERGE, SHF_STRINGS ]
AddressAlign: 0x0000000000000001
Content: 5562756E747520636C616E672076657273696F6E20332E352D317562756E74753120287472756E6B2920286261736564206F6E204C4C564D20332E352900
-Symbols:
- Local:
- - Type: STT_SECTION
- Section: .text
- - Type: STT_SECTION
- Section: .anothertext
- Value: 0x0000000000000010
- - Type: STT_SECTION
- Section: .eh_frame
- Value: 0x0000000000000050
- - Type: STT_SECTION
- Section: .data
- Value: 0x00000000000000A8
- - Type: STT_SECTION
- Section: .comment
- - Name: /tmp/a.c
- Type: STT_FILE
- - Type: STT_FILE
- Global:
- - Name: somedata
- Type: STT_OBJECT
- Section: .anothertext
- Value: 0x0000000000000045
- - Name: main
- Type: STT_FUNC
- Section: .anothertext
- Value: 0x0000000000000010
- Size: 0x000000000000003F
- - Name: foo
- Type: STT_FUNC
- Section: .text
- Size: 0x000000000000000D
- - Name: a
- Type: STT_OBJECT
- Section: .data
- Value: 0x00000000000000A8
- Size: 0x0000000000000004
+Symbols:
+ - Type: STT_SECTION
+ Section: .text
+ - Type: STT_SECTION
+ Section: .anothertext
+ Value: 0x0000000000000010
+ - Type: STT_SECTION
+ Section: .eh_frame
+ Value: 0x0000000000000050
+ - Type: STT_SECTION
+ Section: .data
+ Value: 0x00000000000000A8
+ - Type: STT_SECTION
+ Section: .comment
+ - Name: /tmp/a.c
+ Type: STT_FILE
+ - Type: STT_FILE
+ - Name: somedata
+ Type: STT_OBJECT
+ Section: .anothertext
+ Value: 0x0000000000000045
+ Binding: STB_GLOBAL
+ - Name: main
+ Type: STT_FUNC
+ Section: .anothertext
+ Value: 0x0000000000000010
+ Size: 0x000000000000003F
+ Binding: STB_GLOBAL
+ - Name: foo
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x000000000000000D
+ Binding: STB_GLOBAL
+ - Name: a
+ Type: STT_OBJECT
+ Section: .data
+ Value: 0x00000000000000A8
+ Size: 0x0000000000000004
+ Binding: STB_GLOBAL
...
Symbol: .text
Type: R_X86_64_32
Symbols:
- Local:
- - Name: func
- Type: STT_FUNC
- Section: .text
- Value: 0x0000000000000001
- - Name: sym
- Section: .text
- - Name: .text
- Type: STT_SECTION
- Section: .text
+ - Name: func
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000001
+ - Name: sym
+ Section: .text
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
Symbol: x
Type: R_X86_64_64
Symbols:
- Global:
- - Name: x
+ - Name: x
+ Binding: STB_GLOBAL
AddressAlign: 0x0000000000000010
Content: "0000000000000000"
Symbols:
- Local:
- - Name: _Z3fooi
- Type: STT_FUNC
- Section: .text1
- Value: 0x1000
- - Name: _Z3foov
- Type: STT_FUNC
- Section: .text2
- Value: 0x1010
+ - Name: _Z3fooi
+ Type: STT_FUNC
+ Section: .text1
+ Value: 0x1000
+ - Name: _Z3foov
+ Type: STT_FUNC
+ Section: .text2
+ Value: 0x1010
# We just want to check that the symbols are demangled
# DEMANGLE: foo(int)
Type: R_X86_64_64
Symbols:
- Local:
- - Name: loc1
- - Name: loc2
- Global:
- - Name: glob1
- Section: .text
- Value: 0x0
- Size: 4
- - Name: glob2
-
+ - Name: loc1
+ - Name: loc2
+ - Name: glob1
+ Section: .text
+ Value: 0x0
+ Size: 4
+ Binding: STB_GLOBAL
+ - Name: glob2
+ Binding: STB_GLOBAL
AddressAlign: 0x0000000000000010
Content: "00000000"
Symbols:
- Global:
- - Name: foo
- Type: STT_FUNC
- Section: .text
- Value: 0x1004
- - Name: bar
- Type: STT_OBJECT
- Section: .text
- Value: 0x1008
- Local:
- - Name: lfoo
- Type: STT_FUNC
- Section: .text
- Value: 0x1004
- - Name: lbar
- Type: STT_OBJECT
- Section: .text
- Value: 0x1008
+ - Name: lfoo
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1004
+ - Name: lbar
+ Type: STT_OBJECT
+ Section: .text
+ Value: 0x1008
+ - Name: foo
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x1004
+ Binding: STB_GLOBAL
+ - Name: bar
+ Type: STT_OBJECT
+ Section: .text
+ Value: 0x1008
+ Binding: STB_GLOBAL
- VERSION_1
- VERSION_2
DynamicSymbols:
- Global:
- - Name: bar
+ - Name: bar
+ Binding: STB_GLOBAL
...
Flags: 12
Other: 2
DynamicSymbols:
- Global:
- - Name: f1
+ - Name: f1
+ Binding: STB_GLOBAL
Flags: 12
Other: 2
DynamicSymbols:
- Global:
- - Name: f1
+ - Name: f1
+ Binding: STB_GLOBAL
AddressAlign: 8
Content: 1400000000000000017A5200017810011B0C070890010710140000001C000000B0F0FFFF2A00000000000000000000001400000000000000017A5200017810011B0C070890010000240000001C00000050F0FFFF20000000000E10460E184A0F0B770880003F1A3B2A332422000000001C000000440000003EF1FFFF1000000000410E108602430D064B0C07080000002C0000006400000038F1FFFF7F0C000000450C0A00491006027600450F0376780603660C0C0A00450C070800000000002C0000009400000088FDFFFF6600000000410E108602430D06428F03458E04478D058C06488307024B0C07080000000014000000C4000000C8FDFFFF01000000000000000000000000000000
Symbols:
- Global:
- - Name: myfunc
- Type: STT_FUNC
- Section: .text
- Value: 0x0000000000400000
+ - Name: myfunc
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000400000
+ Binding: STB_GLOBAL
ProgramHeaders:
- Type: PT_LOAD
Flags: [ PF_X, PF_R ]
Members:
- SectionOrType: GRP_COMDAT
- SectionOrType: .foo
-Symbols:
- Local:
- - Name: bar
- Section: .group
- - Name: zed
- Section: .group1
+Symbols:
+ - Name: bar
+ Section: .group
+ - Name: zed
+ Section: .group1
Link: .symtab
Content: "0102"
Symbols:
- Global:
- - Name: _Z3fooc
- Type: STT_FUNC
- Section: .text.foo
- - Name: _Z4blahf
- Type: STT_FUNC
- Section: .text.foo
+ - Name: _Z3fooc
+ Type: STT_FUNC
+ Section: .text.foo
+ Binding: STB_GLOBAL
+ - Name: _Z4blahf
+ Type: STT_FUNC
+ Section: .text.foo
+ Binding: STB_GLOBAL
ProgramHeaders:
- Type: PT_LOAD
Flags: [ PF_R, PF_X ]
- Name: .text
Type: SHT_PROGBITS
Symbols:
- Global:
- - Name: foobar
- Section: .text
+ - Name: foobar
+ Section: .text
+ Binding: STB_GLOBAL
AddressAlign: 0x0000000000000001
Content: 41505332088020020108800280010202088180808010818080802002080181808080100802818080802004020C7E048180808010088180808020
Symbols:
- Global:
- - Name: sym1
- - Name: sym2
+ - Name: sym1
+ Binding: STB_GLOBAL
+ - Name: sym2
+ Binding: STB_GLOBAL
...
# RUN: yaml2obj -docnum 2 %s | llvm-readobj -elf-output-style=LLVM -relocations - | FileCheck --check-prefix=LLVM2 %s
AddressAlign: 0x0000000000000001
Content: 415053320A80200202088102830408037C08
Symbols:
- Global:
- - Name: sym1
- - Name: sym2
+ - Name: sym1
+ Binding: STB_GLOBAL
+ - Name: sym2
+ Binding: STB_GLOBAL
...
# RUN: yaml2obj -docnum 3 %s | llvm-readobj -elf-output-style=LLVM -relocations - | FileCheck --check-prefix=LLVM3 %s
AddressAlign: 0x0000000000000001
Content: 415053320680200208800208008001080802008001818080801008818080802002080881808080100008818080802008
Symbols:
- Global:
- - Name: sym1
- - Name: sym2
+ - Name: sym1
+ Binding: STB_GLOBAL
+ - Name: sym2
+ Binding: STB_GLOBAL
...
Type: R_X86_64_NONE
Addend: -1
DynamicSymbols:
- Global:
- - Name: force_dynsym
+ - Name: force_dynsym
+ Binding: STB_GLOBAL
ProgramHeaders:
- Type: PT_LOAD
VAddr: 0x1000
Symbol: f3
Type: R_X86_64_JUMP_SLOT
Symbols:
- Global:
- - Name: f1
- - Name: f2
- - Name: g1
- - Name: _Z2f1v
- - Name: f3
+ - Name: f1
+ Binding: STB_GLOBAL
+ - Name: f2
+ Binding: STB_GLOBAL
+ - Name: g1
+ Binding: STB_GLOBAL
+ - Name: _Z2f1v
+ Binding: STB_GLOBAL
+ - Name: f3
+ Binding: STB_GLOBAL
DynamicSymbols:
- Global:
- - Name: f1
- - Name: f2
- - Name: g1
- - Name: _Z2f1v
- - Name: f3
+ - Name: f1
+ Binding: STB_GLOBAL
+ - Name: f2
+ Binding: STB_GLOBAL
+ - Name: g1
+ Binding: STB_GLOBAL
+ - Name: _Z2f1v
+ Binding: STB_GLOBAL
+ - Name: f3
+ Binding: STB_GLOBAL
...
Addend: 1
Symbol: sym
Symbols:
- Global:
- - Name: sym
- Value: 0
- Section: .text
+ - Name: sym
+ Value: 0
+ Section: .text
+ Binding: STB_GLOBAL
DynamicSymbols:
- Global:
- - Name: sym
- Value: 0
- Section: .text
+ - Name: sym
+ Value: 0
+ Section: .text
+ Binding: STB_GLOBAL
ProgramHeaders:
- Type: PT_LOAD
VAddr: 0x1000
- Name: hiuser
Type: 0xffffffff
Symbols:
- Global:
- - Name: foo
+ - Name: foo
+ Binding: STB_GLOBAL
Type: ET_REL
Machine: EM_X86_64
Symbols:
- Local:
- - Name: a_sym
- Value: 0xfedcba9876543210
- Size: 0x0123456789abcdef
+ - Name: a_sym
+ Value: 0xfedcba9876543210
+ Size: 0x0123456789abcdef
# Symbol with st_name = 19, binding = 0xf
Content: "0000000000000000000000000000000001000000000000000000000030000000090000000000000000000000a0000000100000000000000000000000b0000000130000000000000000000000f0000000"
Symbols:
- Local:
- - Name: local
- Global:
- - Name: global
- Weak:
- - Name: weak
+ - Name: local
+ - Name: global
+ Binding: STB_GLOBAL
+ - Name: weak
+ Binding: STB_WEAK
EntSize: 4
Content: "0000000001000000"
Symbols:
- Global:
- - Name: undef
- - Name: normal
- Section: .text
- - Name: common
- Index: SHN_COMMON
- - Name: absolute
- Index: SHN_ABS
- - Name: proc
- Index: 0xff01
- - Name: os
- Index: 0xff21
- - Name: reserved
- Index: 0xfffe
+ - Name: undef
+ Binding: STB_GLOBAL
+ - Name: normal
+ Section: .text
+ Binding: STB_GLOBAL
+ - Name: common
+ Index: SHN_COMMON
+ Binding: STB_GLOBAL
+ - Name: absolute
+ Index: SHN_ABS
+ Binding: STB_GLOBAL
+ - Name: proc
+ Index: 0xff01
+ Binding: STB_GLOBAL
+ - Name: os
+ Index: 0xff21
+ Binding: STB_GLOBAL
+ - Name: reserved
+ Index: 0xfffe
+ Binding: STB_GLOBAL
--- !ELF
FileHeader:
Type: ET_REL
Machine: EM_386
Symbols:
- Global:
- - Name: bad
- Index: 0x42
+ - Name: bad
+ Index: 0x42
+ Binding: STB_GLOBAL
- Name: .text
Type: SHT_PROGBITS
Symbols:
- Global:
- - Name: notype
- Type: STT_NOTYPE
- - Name: object
- Type: STT_OBJECT
- - Name: func
- Type: STT_FUNC
- - Name: .text
- Type: STT_SECTION
- Section: .text
- - Name: file
- Type: STT_FILE
- - Name: common
- Type: STT_COMMON
- - Name: tls
- Type: STT_TLS
- - Name: gnu_ifunc
- Type: STT_GNU_IFUNC
- - Name: os_specific
- Type: 11
- - Name: proc_specific
- Type: 13
- - Name: unknown
- Type: 7
+ - Name: notype
+ Type: STT_NOTYPE
+ Binding: STB_GLOBAL
+ - Name: object
+ Type: STT_OBJECT
+ Binding: STB_GLOBAL
+ - Name: func
+ Type: STT_FUNC
+ Binding: STB_GLOBAL
+ - Name: .text
+ Type: STT_SECTION
+ Section: .text
+ Binding: STB_GLOBAL
+ - Name: file
+ Type: STT_FILE
+ Binding: STB_GLOBAL
+ - Name: common
+ Type: STT_COMMON
+ Binding: STB_GLOBAL
+ - Name: tls
+ Type: STT_TLS
+ Binding: STB_GLOBAL
+ - Name: gnu_ifunc
+ Type: STT_GNU_IFUNC
+ Binding: STB_GLOBAL
+ - Name: os_specific
+ Type: 11
+ Binding: STB_GLOBAL
+ - Name: proc_specific
+ Type: 13
+ Binding: STB_GLOBAL
+ - Name: unknown
+ Type: 7
+ Binding: STB_GLOBAL
# Symbol with st_name = 1, st_other = 0x4
Content: "0000000000000000000000000000000001000000000000000000000000040000"
Symbols:
- Global:
- - Name: default
- Visibility: STV_DEFAULT
- - Name: internal
- Visibility: STV_INTERNAL
- - Name: hidden
- Visibility: STV_HIDDEN
- - Name: protected
- Visibility: STV_PROTECTED
+ - Name: default
+ Visibility: STV_DEFAULT
+ Binding: STB_GLOBAL
+ - Name: internal
+ Visibility: STV_INTERNAL
+ Binding: STB_GLOBAL
+ - Name: hidden
+ Visibility: STV_HIDDEN
+ Binding: STB_GLOBAL
+ - Name: protected
+ Visibility: STV_PROTECTED
+ Binding: STB_GLOBAL
AddressAlign: 0x0000000000000004
Content: 040000000900000004000000474E5500676F6C6420312E3131000000
Symbols:
- Local:
- - Name: reduced.c
- Type: STT_FILE
- - Type: STT_FILE
- Global:
- - Name: main
- Type: STT_FUNC
- Section: .text
- Value: 0x0000000000400140
- Size: 0x0000000000000003
- - Name: _edata
- Value: 0x0000000000401000
- - Name: __bss_start
- Value: 0x0000000000401000
- - Name: _end
- Value: 0x0000000000401000
+ - Name: reduced.c
+ Type: STT_FILE
+ - Type: STT_FILE
+ - Name: main
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000400140
+ Size: 0x0000000000000003
+ Binding: STB_GLOBAL
+ - Name: _edata
+ Value: 0x0000000000401000
+ Binding: STB_GLOBAL
+ - Name: __bss_start
+ Value: 0x0000000000401000
+ Binding: STB_GLOBAL
+ - Name: _end
+ Value: 0x0000000000401000
+ Binding: STB_GLOBAL
...
# CHECK-NEXT: Type: ET_REL
# CHECK-NEXT: Machine: EM_X86_64
# CHECK-NEXT: Symbols:
-# CHECK-NEXT: GNUUnique:
-# CHECK-NEXT: - Name: foo
-# CHECK-NEXT: Type: STT_OBJECT
-# CHECK-NEXT: DynamicSymbols: {}
+# CHECK-NEXT: - Name: foo
+# CHECK-NEXT: Type: STT_OBJECT
+# CHECK-NEXT: Binding: STB_GNU_UNIQUE
# CHECK-NEXT: ...
--- !ELF
Type: ET_REL
Machine: EM_X86_64
Symbols:
- GNUUnique:
- - Name: foo
- Type: STT_OBJECT
+ - Name: foo
+ Type: STT_OBJECT
+ Binding: STB_GNU_UNIQUE
# test that we don't crash when passed object files without a symbol table
# CHECK-LABEL: FileHeader:
# CHECK-LABEL: Sections:
-# CHECK-LABEL: Symbols:
+# CHECK-NOT: Symbols:
## Test checks that we are able to handle symbols with special/reserved indices.
# CHECK: Symbols:
-# CHECK-NEXT: Global:
-# CHECK-NEXT: - Name: absolute
-# CHECK-NEXT: Index: SHN_ABS
-# CHECK-NEXT: Value: 0x0000000000001234
-# CHECK-NEXT: - Name: common
-# CHECK-NEXT: Index: SHN_COMMON
-# CHECK-NEXT: - Name: valid_index
-# CHECK-NEXT: Section: .text
-# CHECK-NEXT: - Name: processor_specific_index
-# CHECK-NEXT: Index: SHN_HEXAGON_SCOMMON_1
-# CHECK-NEXT: - Name: unknown_index
-# CHECK-NEXT: Index: 0x0000FFFE
+# CHECK-NEXT: - Name: absolute
+# CHECK-NEXT: Index: SHN_ABS
+# CHECK-NEXT: Binding: STB_GLOBAL
+# CHECK-NEXT: Value: 0x0000000000001234
+# CHECK-NEXT: - Name: common
+# CHECK-NEXT: Index: SHN_COMMON
+# CHECK-NEXT: Binding: STB_GLOBAL
+# CHECK-NEXT: - Name: valid_index
+# CHECK-NEXT: Section: .text
+# CHECK-NEXT: Binding: STB_GLOBAL
+# CHECK-NEXT: - Name: processor_specific_index
+# CHECK-NEXT: Index: SHN_HEXAGON_SCOMMON_1
+# CHECK-NEXT: Binding: STB_GLOBAL
+# CHECK-NEXT: - Name: unknown_index
+# CHECK-NEXT: Index: 0x0000FFFE
+# CHECK-NEXT: Binding: STB_GLOBAL
!ELF
FileHeader:
- Name: .text
Type: SHT_PROGBITS
Symbols:
- Global:
- - Name: absolute
- Index: SHN_ABS
- Value: 0x1234
- - Name: common
- Index: SHN_COMMON
- - Name: valid_index
- Index: 0x1
- - Name: processor_specific_index
- Index: SHN_HEXAGON_SCOMMON_1
- - Name: unknown_index
- Index: 0xfffe
+ - Name: absolute
+ Index: SHN_ABS
+ Value: 0x1234
+ Binding: STB_GLOBAL
+ - Name: common
+ Index: SHN_COMMON
+ Binding: STB_GLOBAL
+ - Name: valid_index
+ Index: 0x1
+ Binding: STB_GLOBAL
+ - Name: processor_specific_index
+ Index: SHN_HEXAGON_SCOMMON_1
+ Binding: STB_GLOBAL
+ - Name: unknown_index
+ Index: 0xfffe
+ Binding: STB_GLOBAL
## shn_xindex.o contains a symbol with st_shndx == SHN_XINDEX.
## We do not support it at this moment.
# RUN: obj2yaml %t | FileCheck %s
# CHECK: Symbols:
-# CHECK-NEXT: Global:
-# CHECK-NEXT: - Name: a_known_type
-# CHECK-NEXT: Type: STT_OBJECT
-# CHECK-NEXT: - Name: an_unknown_type
-# CHECK-NEXT: Type: 0x07
+# CHECK-NEXT: - Name: a_known_type
+# CHECK-NEXT: Type: STT_OBJECT
+# CHECK-NEXT: Binding: STB_GLOBAL
+# CHECK-NEXT: - Name: an_unknown_type
+# CHECK-NEXT: Type: 0x07
+# CHECK-NEXT: Binding: STB_GLOBAL
!ELF
FileHeader:
Type: ET_REL
Machine: EM_X86_64
Symbols:
- Global:
- - Name: a_known_type
- Type: STT_OBJECT
- - Name: an_unknown_type
- Type: 0x7
+ - Name: a_known_type
+ Type: STT_OBJECT
+ Binding: STB_GLOBAL
+ - Name: an_unknown_type
+ Type: 0x7
+ Binding: STB_GLOBAL
- VERSION_2
- VERSION_3
DynamicSymbols:
- Global:
- - Name: foo
+ - Name: foo
+ Binding: STB_GLOBAL
...
Flags: 12
Other: 2
DynamicSymbols:
- Global:
- - Name: f1
+ - Name: f1
+ Binding: STB_GLOBAL
# CHECK-NEXT: AddressAlign: 0x0000000000000002
# CHECK-NEXT: EntSize: 0x0000000000000002
# CHECK-NEXT: Entries: [ 0, 3, 4 ]
-# CHECK-NEXT: Symbols: {}
# CHECK-NEXT: DynamicSymbols:
-# CHECK-NEXT: Global:
-# CHECK-NEXT: - Name: f1
-# CHECK-NEXT: - Name: f2
+# CHECK-NEXT: - Name: f1
+# CHECK-NEXT: Binding: STB_GLOBAL
+# CHECK-NEXT: - Name: f2
+# CHECK-NEXT: Binding: STB_GLOBAL
--- !ELF
FileHeader:
EntSize: 0x0000000000000002
Entries: [ 0, 3, 4 ]
DynamicSymbols:
- Global:
- - Name: f1
- - Name: f2
+ - Name: f1
+ Binding: STB_GLOBAL
+ - Name: f2
+ Binding: STB_GLOBAL
...
Relocations:
- Offset: 0x0000000000000027
Type: R_X86_64_64
-Symbols:
- Local:
- - Name: f.c
- Type: STT_FILE
- - Type: STT_SECTION
- Section: .text
- - Type: STT_SECTION
- Section: .debug_str
- - Type: STT_SECTION
- Section: .debug_abbrev
- - Type: STT_SECTION
- Section: .debug_info
- - Type: STT_SECTION
- Section: .debug_line
- Global:
- - Name: f1
- Type: STT_FUNC
- Section: .text
- Size: 0x0000000000000006
- - Name: f2
- Type: STT_FUNC
- Section: .text
- Value: 0x0000000000000010
- Size: 0x0000000000000006
- - Name: f3
- Type: STT_FUNC
- Section: .text
- Value: 0x0000000000000020
- Size: 0x0000000000000006
+Symbols:
+ - Name: f.c
+ Type: STT_FILE
+ - Type: STT_SECTION
+ Section: .text
+ - Type: STT_SECTION
+ Section: .debug_str
+ - Type: STT_SECTION
+ Section: .debug_abbrev
+ - Type: STT_SECTION
+ Section: .debug_info
+ - Type: STT_SECTION
+ Section: .debug_line
+ - Name: f1
+ Type: STT_FUNC
+ Section: .text
+ Size: 0x0000000000000006
+ Binding: STB_GLOBAL
+ - Name: f2
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000010
+ Size: 0x0000000000000006
+ Binding: STB_GLOBAL
+ - Name: f3
+ Type: STT_FUNC
+ Section: .text
+ Value: 0x0000000000000020
+ Size: 0x0000000000000006
+ Binding: STB_GLOBAL
...
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC, SHF_WRITE ]
DynamicSymbols:
- Global:
- - Name: dynglobal
- Type: STT_OBJECT
- Section: .data
- Weak:
- - Name: dynweak
- Type: STT_OBJECT
- Section: .data
- Local:
- - Name: dynlocal
- Type: STT_OBJECT
- Section: .data
+ - Name: dynglobal
+ Type: STT_OBJECT
+ Section: .data
+ Binding: STB_GLOBAL
+ - Name: dynweak
+ Type: STT_OBJECT
+ Section: .data
+ Binding: STB_WEAK
+ - Name: dynlocal
+ Type: STT_OBJECT
+ Section: .data
+ Binding: STB_LOCAL
# SECTION: Name: .dynsym
# SECTION-NEXT: Type: SHT_DYNSYM
Address: 0x2000
EntSize: 0x18
DynamicSymbols:
- Global:
- - Name: foo
+ - Name: foo
+ Binding: STB_GLOBAL
- SectionOrType: 0xFF
- SectionOrType: 3
Symbols:
- Global:
- - Name: foo
+ - Name: foo
+ - Binding: STB_GLOBAL
## Check we are able to produce SHT_GROUP section with a custom Type (0xFF).
# CHECK: Groups {
Type: ET_REL
Machine: EM_X86_64
Symbols:
- GNUUnique:
- - Name: foo
- Type: STT_OBJECT
+ - Name: foo
+ Type: STT_OBJECT
+ Binding: STB_GNU_UNIQUE
--- /dev/null
+## Check we restrict placing local symbols after global in .symtab
+## We might want to change it later to allow doing that
+## for producing broken outputs.
+
+# RUN: not yaml2obj %s -o %t 2>&1 | FileCheck %s
+# CHECK: error: Local symbol 'bar' after global in Symbols list.
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+Symbols:
+ - Name: foo
+ Binding: STB_GLOBAL
+ - Name: bar
+ Binding: STB_LOCAL
Info: 26
Type: SHT_SYMTAB
Symbols:
- Global:
- - Name: foo
+ - Name: foo
+ Binding: STB_GLOBAL
DynamicSymbols:
- Global:
- - Name: bar
+ - Name: bar
+ Binding: STB_GLOBAL
- Name: .symtab
Type: SHT_DYNAMIC
Symbols:
- Global:
- - Name: foo
+ - Name: foo
+ Binding: STB_GLOBAL
Offset: 0
Symbol: 0x1
Symbols:
- Global:
- - Name: foo
+ - Name: foo
+ Binding: STB_GLOBAL
- Name: .text
Type: SHT_PROGBITS
Symbols:
- Global:
- - Name: absolute1
- Index: SHN_ABS
- Value: 0x1234
- - Name: absolute2
- Index: 0xfff1
- Value: 0x4321
- - Name: common1
- Index: SHN_COMMON
- - Name: common2
- Index: 0xfff2
- - Name: good
- Index: 0x1
- - Name: bad
- Index: 0x42
- - Name: undef1
- Index: SHN_UNDEF
- - Name: undef2
- Index: 0
+ - Name: absolute1
+ Index: SHN_ABS
+ Value: 0x1234
+ Binding: STB_GLOBAL
+ - Name: absolute2
+ Index: 0xfff1
+ Value: 0x4321
+ Binding: STB_GLOBAL
+ - Name: common1
+ Index: SHN_COMMON
+ Binding: STB_GLOBAL
+ - Name: common2
+ Index: 0xfff2
+ Binding: STB_GLOBAL
+ - Name: good
+ Index: 0x1
+ Binding: STB_GLOBAL
+ - Name: bad
+ Index: 0x42
+ Binding: STB_GLOBAL
+ - Name: undef1
+ Index: SHN_UNDEF
+ Binding: STB_GLOBAL
+ - Name: undef2
+ Index: 0
+ Binding: STB_GLOBAL
# CHECK: Symbol table '.symtab' contains 9 entries
# CHECK-NEXT: Num: {{.*}} Ndx Name
- Name: .text
Type: SHT_PROGBITS
Symbols:
- Global:
- - Name: notype
- Type: STT_NOTYPE
- - Name: normal_type
- Type: STT_OBJECT
- - Name: .text
- Type: STT_SECTION
- - Name: known_hex
- Type: 0x1
- - Name: unknown_hex
- Type: 0xb
- - Name: known_int
- Type: 1
- - Name: unknown_int
- Type: 11
+ - Name: notype
+ Type: STT_NOTYPE
+ Binding: STB_GLOBAL
+ - Name: normal_type
+ Type: STT_OBJECT
+ Binding: STB_GLOBAL
+ - Name: .text
+ Type: STT_SECTION
+ Binding: STB_GLOBAL
+ - Name: known_hex
+ Type: 0x1
+ Binding: STB_GLOBAL
+ - Name: unknown_hex
+ Type: 0xb
+ Binding: STB_GLOBAL
+ - Name: known_int
+ Type: 1
+ Binding: STB_GLOBAL
+ - Name: unknown_int
+ Type: 11
+ Binding: STB_GLOBAL
- VERSION_2
- VERSION_3
DynamicSymbols:
- Global:
- - Name: foo
+ - Name: foo
+ Binding: STB_GLOBAL
...
Flags: 12
Other: 2
DynamicSymbols:
- Global:
- - Name: f1
+ - Name: f1
+ Binding: STB_GLOBAL
Flags: 0
Other: 4
DynamicSymbols:
- Global:
- - Name: f1
- - Name: f2
+ - Name: f1
+ Binding: STB_GLOBAL
+ - Name: f2
+ Binding: STB_GLOBAL
...
ArrayRef<Elf_Word> ShndxTable;
std::error_code dumpSymbols(const Elf_Shdr *Symtab,
- ELFYAML::SymbolsDef &Symbols);
+ std::vector<ELFYAML::Symbol> &Symbols);
std::error_code dumpSymbol(const Elf_Sym *Sym, const Elf_Shdr *SymTab,
StringRef StrTable, ELFYAML::Symbol &S);
std::error_code dumpCommonSection(const Elf_Shdr *Shdr, ELFYAML::Section &S);
}
template <class ELFT>
-std::error_code ELFDumper<ELFT>::dumpSymbols(const Elf_Shdr *Symtab,
- ELFYAML::SymbolsDef &Symbols) {
+std::error_code
+ELFDumper<ELFT>::dumpSymbols(const Elf_Shdr *Symtab,
+ std::vector<ELFYAML::Symbol> &Symbols) {
if (!Symtab)
return std::error_code();
if (!SymtabOrErr)
return errorToErrorCode(SymtabOrErr.takeError());
- bool IsFirstSym = true;
- for (const auto &Sym : *SymtabOrErr) {
- if (IsFirstSym) {
- IsFirstSym = false;
- continue;
- }
-
+ for (const auto &Sym : (*SymtabOrErr).drop_front()) {
ELFYAML::Symbol S;
if (auto EC = dumpSymbol(&Sym, Symtab, StrTable, S))
return EC;
-
- switch (Sym.getBinding()) {
- case ELF::STB_LOCAL:
- Symbols.Local.push_back(S);
- break;
- case ELF::STB_GLOBAL:
- Symbols.Global.push_back(S);
- break;
- case ELF::STB_WEAK:
- Symbols.Weak.push_back(S);
- break;
- case ELF::STB_GNU_UNIQUE:
- Symbols.GNUUnique.push_back(S);
- break;
- default:
- llvm_unreachable("Unknown ELF symbol binding");
- }
+ Symbols.push_back(S);
}
return std::error_code();
S.Value = Sym->st_value;
S.Size = Sym->st_size;
S.Other = Sym->st_other;
+ S.Binding = Sym->getBinding();
Expected<StringRef> SymbolNameOrErr = getSymbolName(Sym, StrTable, SymTab);
if (!SymbolNameOrErr)
const ELFYAML::Object &Doc;
bool buildSectionIndex();
- bool buildSymbolIndex(const ELFYAML::SymbolsDef &);
+ bool buildSymbolIndex(ArrayRef<ELFYAML::Symbol> Symbols);
void initELFHeader(Elf_Ehdr &Header);
void initProgramHeaders(std::vector<Elf_Phdr> &PHeaders);
bool initSectionHeaders(std::vector<Elf_Shdr> &SHeaders,
ContiguousBlobAccumulator &CBA);
void setProgramHeaderLayout(std::vector<Elf_Phdr> &PHeaders,
std::vector<Elf_Shdr> &SHeaders);
- void addSymbols(const std::vector<ELFYAML::Symbol> &Symbols,
- std::vector<Elf_Sym> &Syms, unsigned SymbolBinding,
+ void addSymbols(ArrayRef<ELFYAML::Symbol> Symbols, std::vector<Elf_Sym> &Syms,
const StringTableBuilder &Strtab);
void writeSectionContent(Elf_Shdr &SHeader,
const ELFYAML::RawContentSection &Section,
bool writeSectionContent(Elf_Shdr &SHeader,
const ELFYAML::DynamicSection &Section,
ContiguousBlobAccumulator &CBA);
- bool hasDynamicSymbols() const;
SmallVector<const char *, 5> implicitSectionNames() const;
// - SHT_NULL entry (placed first, i.e. 0'th entry)
return true;
}
+static size_t findFirstNonGlobal(ArrayRef<ELFYAML::Symbol> Symbols) {
+ for (size_t I = 0; I < Symbols.size(); ++I)
+ if (Symbols[I].Binding.value != ELF::STB_LOCAL)
+ return I;
+ return Symbols.size();
+}
+
template <class ELFT>
void ELFState<ELFT>::initSymtabSectionHeader(Elf_Shdr &SHeader,
SymtabType STType,
const auto &Symbols = IsStatic ? Doc.Symbols : Doc.DynamicSymbols;
auto &Strtab = IsStatic ? DotStrtab : DotDynstr;
// One greater than symbol table index of the last local symbol.
- SHeader.sh_info = Symbols.Local.size() + 1;
+ SHeader.sh_info = findFirstNonGlobal(Symbols) + 1;
SHeader.sh_entsize = sizeof(Elf_Sym);
SHeader.sh_addralign = 8;
Syms.push_back(Sym);
}
- addSymbols(Symbols.Local, Syms, ELF::STB_LOCAL, Strtab);
- addSymbols(Symbols.Global, Syms, ELF::STB_GLOBAL, Strtab);
- addSymbols(Symbols.Weak, Syms, ELF::STB_WEAK, Strtab);
- addSymbols(Symbols.GNUUnique, Syms, ELF::STB_GNU_UNIQUE, Strtab);
+ addSymbols(Symbols, Syms, Strtab);
writeArrayData(
CBA.getOSAndAlignedOffset(SHeader.sh_offset, SHeader.sh_addralign),
}
template <class ELFT>
-void ELFState<ELFT>::addSymbols(const std::vector<ELFYAML::Symbol> &Symbols,
+void ELFState<ELFT>::addSymbols(ArrayRef<ELFYAML::Symbol> Symbols,
std::vector<Elf_Sym> &Syms,
- unsigned SymbolBinding,
const StringTableBuilder &Strtab) {
for (const auto &Sym : Symbols) {
Elf_Sym Symbol;
zero(Symbol);
if (!Sym.Name.empty())
Symbol.st_name = Strtab.getOffset(Sym.Name);
- Symbol.setBindingAndType(SymbolBinding, Sym.Type);
+ Symbol.setBindingAndType(Sym.Binding, Sym.Type);
if (!Sym.Section.empty()) {
unsigned Index;
if (SN2I.lookup(Sym.Section, Index)) {
}
template <class ELFT>
-bool ELFState<ELFT>::buildSymbolIndex(const ELFYAML::SymbolsDef &Symbols) {
+bool ELFState<ELFT>::buildSymbolIndex(ArrayRef<ELFYAML::Symbol> Symbols) {
+ bool GlobalSymbolSeen = false;
std::size_t I = 0;
- for (const std::vector<ELFYAML::Symbol> &V :
- {Symbols.Local, Symbols.Global, Symbols.Weak, Symbols.GNUUnique}) {
- for (const auto &Sym : V) {
- ++I;
- if (Sym.Name.empty())
- continue;
- if (SymN2I.addName(Sym.Name, I)) {
- WithColor::error() << "Repeated symbol name: '" << Sym.Name << "'.\n";
- return false;
- }
+ for (const auto &Sym : Symbols) {
+ ++I;
+
+ StringRef Name = Sym.Name;
+ if (Sym.Binding.value == ELF::STB_LOCAL && GlobalSymbolSeen) {
+ WithColor::error() << "Local symbol '" + Name +
+ "' after global in Symbols list.\n";
+ return false;
+ }
+ if (Sym.Binding.value != ELF::STB_LOCAL)
+ GlobalSymbolSeen = true;
+
+ if (!Name.empty() && SymN2I.addName(Name, I)) {
+ WithColor::error() << "Repeated symbol name: '" << Name << "'.\n";
+ return false;
}
}
return true;
}
template <class ELFT> void ELFState<ELFT>::finalizeStrings() {
- auto AddSymbols = [](StringTableBuilder &StrTab,
- const ELFYAML::SymbolsDef &Symbols) {
- for (const auto &Sym : Symbols.Local)
- StrTab.add(Sym.Name);
- for (const auto &Sym : Symbols.Global)
- StrTab.add(Sym.Name);
- for (const auto &Sym : Symbols.Weak)
- StrTab.add(Sym.Name);
- for (const auto &Sym : Symbols.GNUUnique)
- StrTab.add(Sym.Name);
- };
-
// Add the regular symbol names to .strtab section.
- AddSymbols(DotStrtab, Doc.Symbols);
+ for (const ELFYAML::Symbol &Sym : Doc.Symbols)
+ DotStrtab.add(Sym.Name);
DotStrtab.finalize();
- if (!hasDynamicSymbols())
+ if (Doc.DynamicSymbols.empty())
return;
// Add the dynamic symbol names to .dynstr section.
- AddSymbols(DotDynstr, Doc.DynamicSymbols);
+ for (const ELFYAML::Symbol &Sym : Doc.DynamicSymbols)
+ DotDynstr.add(Sym.Name);
// SHT_GNU_verdef and SHT_GNU_verneed sections might also
// add strings to .dynstr section.
State.initStrtabSectionHeader(SHeaders[Index], ".strtab", State.DotStrtab, CBA);
Index = State.SN2I.get(".shstrtab");
State.initStrtabSectionHeader(SHeaders[Index], ".shstrtab", State.DotShStrtab, CBA);
- if (State.hasDynamicSymbols()) {
+ if (!Doc.DynamicSymbols.empty()) {
Index = State.SN2I.get(".dynsym");
State.initSymtabSectionHeader(SHeaders[Index], SymtabType::Dynamic, CBA);
SHeaders[Index].sh_flags |= ELF::SHF_ALLOC;
return 0;
}
-template <class ELFT> bool ELFState<ELFT>::hasDynamicSymbols() const {
- return !Doc.DynamicSymbols.Global.empty() ||
- !Doc.DynamicSymbols.Weak.empty() ||
- !Doc.DynamicSymbols.Local.empty() ||
- !Doc.DynamicSymbols.GNUUnique.empty();
-}
-
template <class ELFT>
SmallVector<const char *, 5> ELFState<ELFT>::implicitSectionNames() const {
- if (!hasDynamicSymbols())
+ if (Doc.DynamicSymbols.empty())
return {".symtab", ".strtab", ".shstrtab"};
return {".symtab", ".strtab", ".shstrtab", ".dynsym", ".dynstr"};
}