mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
MC, Object: Reserve a section type, SHT_LLVM_ODRTAB, for the ODR table.
This is part of the ODR checker proposal: http://lists.llvm.org/pipermail/llvm-dev/2017-June/113820.html Per discussion on the gnu-gabi mailing list [1] the section type range 0x6fff4c00..0x6fff4cff is reserved for LLVM. [1] https://sourceware.org/ml/gnu-gabi/2017-q2/msg00030.html Differential Revision: https://reviews.llvm.org/D33978 llvm-svn: 305407
This commit is contained in:
parent
47799b1106
commit
176f7790ec
@ -683,6 +683,7 @@ enum : unsigned {
|
|||||||
SHT_GROUP = 17, // Section group.
|
SHT_GROUP = 17, // Section group.
|
||||||
SHT_SYMTAB_SHNDX = 18, // Indices for SHN_XINDEX entries.
|
SHT_SYMTAB_SHNDX = 18, // Indices for SHN_XINDEX entries.
|
||||||
SHT_LOOS = 0x60000000, // Lowest operating system-specific type.
|
SHT_LOOS = 0x60000000, // Lowest operating system-specific type.
|
||||||
|
SHT_LLVM_ODRTAB = 0x6fff4c00, // LLVM ODR table.
|
||||||
SHT_GNU_ATTRIBUTES = 0x6ffffff5, // Object attributes.
|
SHT_GNU_ATTRIBUTES = 0x6ffffff5, // Object attributes.
|
||||||
SHT_GNU_HASH = 0x6ffffff6, // GNU-style hash table.
|
SHT_GNU_HASH = 0x6ffffff6, // GNU-style hash table.
|
||||||
SHT_GNU_verdef = 0x6ffffffd, // GNU version definitions.
|
SHT_GNU_verdef = 0x6ffffffd, // GNU version definitions.
|
||||||
|
@ -603,6 +603,8 @@ EndStmt:
|
|||||||
Type = ELF::SHT_NOTE;
|
Type = ELF::SHT_NOTE;
|
||||||
else if (TypeName == "unwind")
|
else if (TypeName == "unwind")
|
||||||
Type = ELF::SHT_X86_64_UNWIND;
|
Type = ELF::SHT_X86_64_UNWIND;
|
||||||
|
else if (TypeName == "llvm_odrtab")
|
||||||
|
Type = ELF::SHT_LLVM_ODRTAB;
|
||||||
else if (TypeName.getAsInteger(0, Type))
|
else if (TypeName.getAsInteger(0, Type))
|
||||||
return TokError("unknown section type");
|
return TokError("unknown section type");
|
||||||
}
|
}
|
||||||
|
@ -147,6 +147,8 @@ void MCSectionELF::PrintSwitchToSection(const MCAsmInfo &MAI, const Triple &T,
|
|||||||
// Print hex value of the flag while we do not have
|
// Print hex value of the flag while we do not have
|
||||||
// any standard symbolic representation of the flag.
|
// any standard symbolic representation of the flag.
|
||||||
OS << "0x7000001e";
|
OS << "0x7000001e";
|
||||||
|
else if (Type == ELF::SHT_LLVM_ODRTAB)
|
||||||
|
OS << "llvm_odrtab";
|
||||||
else
|
else
|
||||||
report_fatal_error("unsupported type 0x" + Twine::utohexstr(Type) +
|
report_fatal_error("unsupported type 0x" + Twine::utohexstr(Type) +
|
||||||
" for section " + getSectionName());
|
" for section " + getSectionName());
|
||||||
|
@ -192,6 +192,7 @@ StringRef llvm::object::getELFSectionTypeName(uint32_t Machine, unsigned Type) {
|
|||||||
STRINGIFY_ENUM_CASE(ELF, SHT_PREINIT_ARRAY);
|
STRINGIFY_ENUM_CASE(ELF, SHT_PREINIT_ARRAY);
|
||||||
STRINGIFY_ENUM_CASE(ELF, SHT_GROUP);
|
STRINGIFY_ENUM_CASE(ELF, SHT_GROUP);
|
||||||
STRINGIFY_ENUM_CASE(ELF, SHT_SYMTAB_SHNDX);
|
STRINGIFY_ENUM_CASE(ELF, SHT_SYMTAB_SHNDX);
|
||||||
|
STRINGIFY_ENUM_CASE(ELF, SHT_LLVM_ODRTAB);
|
||||||
STRINGIFY_ENUM_CASE(ELF, SHT_GNU_ATTRIBUTES);
|
STRINGIFY_ENUM_CASE(ELF, SHT_GNU_ATTRIBUTES);
|
||||||
STRINGIFY_ENUM_CASE(ELF, SHT_GNU_HASH);
|
STRINGIFY_ENUM_CASE(ELF, SHT_GNU_HASH);
|
||||||
STRINGIFY_ENUM_CASE(ELF, SHT_GNU_verdef);
|
STRINGIFY_ENUM_CASE(ELF, SHT_GNU_verdef);
|
||||||
|
@ -372,6 +372,7 @@ void ScalarEnumerationTraits<ELFYAML::ELF_SHT>::enumeration(
|
|||||||
ECase(SHT_GROUP);
|
ECase(SHT_GROUP);
|
||||||
ECase(SHT_SYMTAB_SHNDX);
|
ECase(SHT_SYMTAB_SHNDX);
|
||||||
ECase(SHT_LOOS);
|
ECase(SHT_LOOS);
|
||||||
|
ECase(SHT_LLVM_ODRTAB);
|
||||||
ECase(SHT_GNU_ATTRIBUTES);
|
ECase(SHT_GNU_ATTRIBUTES);
|
||||||
ECase(SHT_GNU_HASH);
|
ECase(SHT_GNU_HASH);
|
||||||
ECase(SHT_GNU_verdef);
|
ECase(SHT_GNU_verdef);
|
||||||
|
@ -267,3 +267,15 @@ bar:
|
|||||||
// CHECK-NEXT: SHF_TLS
|
// CHECK-NEXT: SHF_TLS
|
||||||
// CHECK-NEXT: SHF_WRITE
|
// CHECK-NEXT: SHF_WRITE
|
||||||
// CHECK-NEXT: ]
|
// CHECK-NEXT: ]
|
||||||
|
|
||||||
|
// Test SHT_LLVM_ODRTAB
|
||||||
|
|
||||||
|
.section .odrtab,"e",@llvm_odrtab
|
||||||
|
// ASM: .section .odrtab,"e",@llvm_odrtab
|
||||||
|
|
||||||
|
// CHECK: Section {
|
||||||
|
// CHECK: Name: .odrtab
|
||||||
|
// CHECK-NEXT: Type: SHT_LLVM_ODRTAB
|
||||||
|
// CHECK-NEXT: Flags [
|
||||||
|
// CHECK-NEXT: SHF_EXCLUDE
|
||||||
|
// CHECK-NEXT: ]
|
||||||
|
@ -2629,6 +2629,8 @@ std::string getSectionTypeString(unsigned Arch, unsigned Type) {
|
|||||||
return "GROUP";
|
return "GROUP";
|
||||||
case SHT_SYMTAB_SHNDX:
|
case SHT_SYMTAB_SHNDX:
|
||||||
return "SYMTAB SECTION INDICES";
|
return "SYMTAB SECTION INDICES";
|
||||||
|
case SHT_LLVM_ODRTAB:
|
||||||
|
return "LLVM_ODRTAB";
|
||||||
// FIXME: Parse processor specific GNU attributes
|
// FIXME: Parse processor specific GNU attributes
|
||||||
case SHT_GNU_ATTRIBUTES:
|
case SHT_GNU_ATTRIBUTES:
|
||||||
return "ATTRIBUTES";
|
return "ATTRIBUTES";
|
||||||
|
Loading…
Reference in New Issue
Block a user