[PATCH] D33978: MC, Object: Reserve a section type, SHT_LLVM_ODRTAB, for the ODR table.
Rafael Avila de Espindola via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 7 20:02:07 PDT 2017
LGTM if the reservation idea works.
Cheers,
Rafael
Peter Collingbourne via Phabricator <reviews at reviews.llvm.org> writes:
> pcc created this revision.
> Herald added a subscriber: emaste.
> Herald added a reviewer: hiraditya.
>
> This is part of the ODR checker proposal:
> http://lists.llvm.org/pipermail/llvm-dev/2017-June/113820.html
>
> It appears [1] that binutils' most recent section type number
> allocations in the OS-specific range have been of the form 0x6fff47XX,
> where 0x47 ('G') presumably stands for GNU. So I have taken the
> bold step of using 0x6fff4c00, where 0x4c ('L') stands for LLVM. If
> this seems reasonable I will contact gnu-gabi to reserve the entire
> 0x6fff4cXX range for LLVM.
>
> [1] https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=elfcpp/elfcpp.h;h=cce40d41dedb281c2d8f41135250c2cc39162469;hb=HEAD#l369
>
>
> https://reviews.llvm.org/D33978
>
> Files:
> llvm/include/llvm/BinaryFormat/ELF.h
> llvm/lib/MC/MCParser/ELFAsmParser.cpp
> llvm/lib/MC/MCSectionELF.cpp
> llvm/lib/Object/ELF.cpp
> llvm/lib/ObjectYAML/ELFYAML.cpp
> llvm/test/MC/ELF/section.s
> llvm/tools/llvm-readobj/ELFDumper.cpp
>
>
> Index: llvm/tools/llvm-readobj/ELFDumper.cpp
> ===================================================================
> --- llvm/tools/llvm-readobj/ELFDumper.cpp
> +++ llvm/tools/llvm-readobj/ELFDumper.cpp
> @@ -2592,6 +2592,8 @@
> return "GROUP";
> case SHT_SYMTAB_SHNDX:
> return "SYMTAB SECTION INDICES";
> + case SHT_LLVM_ODRTAB:
> + return "LLVM_ODRTAB";
> // FIXME: Parse processor specific GNU attributes
> case SHT_GNU_ATTRIBUTES:
> return "ATTRIBUTES";
> Index: llvm/test/MC/ELF/section.s
> ===================================================================
> --- llvm/test/MC/ELF/section.s
> +++ llvm/test/MC/ELF/section.s
> @@ -267,3 +267,15 @@
> // CHECK-NEXT: SHF_TLS
> // CHECK-NEXT: SHF_WRITE
> // CHECK-NEXT: ]
> +
> +// Test SHT_LLVM_ODRTAB
> +
> +.section .odrtab,"e", at llvm_odrtab
> +// ASM: .section .odrtab,"e", at llvm_odrtab
> +
> +// CHECK: Section {
> +// CHECK: Name: .odrtab
> +// CHECK-NEXT: Type: SHT_LLVM_ODRTAB
> +// CHECK-NEXT: Flags [
> +// CHECK-NEXT: SHF_EXCLUDE
> +// CHECK-NEXT: ]
> Index: llvm/lib/ObjectYAML/ELFYAML.cpp
> ===================================================================
> --- llvm/lib/ObjectYAML/ELFYAML.cpp
> +++ llvm/lib/ObjectYAML/ELFYAML.cpp
> @@ -372,6 +372,7 @@
> ECase(SHT_GROUP);
> ECase(SHT_SYMTAB_SHNDX);
> ECase(SHT_LOOS);
> + ECase(SHT_LLVM_ODRTAB);
> ECase(SHT_GNU_ATTRIBUTES);
> ECase(SHT_GNU_HASH);
> ECase(SHT_GNU_verdef);
> Index: llvm/lib/Object/ELF.cpp
> ===================================================================
> --- llvm/lib/Object/ELF.cpp
> +++ llvm/lib/Object/ELF.cpp
> @@ -192,6 +192,7 @@
> STRINGIFY_ENUM_CASE(ELF, SHT_PREINIT_ARRAY);
> STRINGIFY_ENUM_CASE(ELF, SHT_GROUP);
> 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_HASH);
> STRINGIFY_ENUM_CASE(ELF, SHT_GNU_verdef);
> Index: llvm/lib/MC/MCSectionELF.cpp
> ===================================================================
> --- llvm/lib/MC/MCSectionELF.cpp
> +++ llvm/lib/MC/MCSectionELF.cpp
> @@ -147,6 +147,8 @@
> // Print hex value of the flag while we do not have
> // any standard symbolic representation of the flag.
> OS << "0x7000001e";
> + else if (Type == ELF::SHT_LLVM_ODRTAB)
> + OS << "llvm_odrtab";
> else
> report_fatal_error("unsupported type 0x" + Twine::utohexstr(Type) +
> " for section " + getSectionName());
> Index: llvm/lib/MC/MCParser/ELFAsmParser.cpp
> ===================================================================
> --- llvm/lib/MC/MCParser/ELFAsmParser.cpp
> +++ llvm/lib/MC/MCParser/ELFAsmParser.cpp
> @@ -603,6 +603,8 @@
> Type = ELF::SHT_NOTE;
> else if (TypeName == "unwind")
> Type = ELF::SHT_X86_64_UNWIND;
> + else if (TypeName == "llvm_odrtab")
> + Type = ELF::SHT_LLVM_ODRTAB;
> else if (TypeName.getAsInteger(0, Type))
> return TokError("unknown section type");
> }
> Index: llvm/include/llvm/BinaryFormat/ELF.h
> ===================================================================
> --- llvm/include/llvm/BinaryFormat/ELF.h
> +++ llvm/include/llvm/BinaryFormat/ELF.h
> @@ -683,6 +683,7 @@
> SHT_GROUP = 17, // Section group.
> SHT_SYMTAB_SHNDX = 18, // Indices for SHN_XINDEX entries.
> SHT_LOOS = 0x60000000, // Lowest operating system-specific type.
> + SHT_LLVM_ODRTAB = 0x6fff4c00, // LLVM ODR table.
> SHT_GNU_ATTRIBUTES = 0x6ffffff5, // Object attributes.
> SHT_GNU_HASH = 0x6ffffff6, // GNU-style hash table.
> SHT_GNU_verdef = 0x6ffffffd, // GNU version definitions.
>
>
> Index: llvm/tools/llvm-readobj/ELFDumper.cpp
> ===================================================================
> --- llvm/tools/llvm-readobj/ELFDumper.cpp
> +++ llvm/tools/llvm-readobj/ELFDumper.cpp
> @@ -2592,6 +2592,8 @@
> return "GROUP";
> case SHT_SYMTAB_SHNDX:
> return "SYMTAB SECTION INDICES";
> + case SHT_LLVM_ODRTAB:
> + return "LLVM_ODRTAB";
> // FIXME: Parse processor specific GNU attributes
> case SHT_GNU_ATTRIBUTES:
> return "ATTRIBUTES";
> Index: llvm/test/MC/ELF/section.s
> ===================================================================
> --- llvm/test/MC/ELF/section.s
> +++ llvm/test/MC/ELF/section.s
> @@ -267,3 +267,15 @@
> // CHECK-NEXT: SHF_TLS
> // CHECK-NEXT: SHF_WRITE
> // CHECK-NEXT: ]
> +
> +// Test SHT_LLVM_ODRTAB
> +
> +.section .odrtab,"e", at llvm_odrtab
> +// ASM: .section .odrtab,"e", at llvm_odrtab
> +
> +// CHECK: Section {
> +// CHECK: Name: .odrtab
> +// CHECK-NEXT: Type: SHT_LLVM_ODRTAB
> +// CHECK-NEXT: Flags [
> +// CHECK-NEXT: SHF_EXCLUDE
> +// CHECK-NEXT: ]
> Index: llvm/lib/ObjectYAML/ELFYAML.cpp
> ===================================================================
> --- llvm/lib/ObjectYAML/ELFYAML.cpp
> +++ llvm/lib/ObjectYAML/ELFYAML.cpp
> @@ -372,6 +372,7 @@
> ECase(SHT_GROUP);
> ECase(SHT_SYMTAB_SHNDX);
> ECase(SHT_LOOS);
> + ECase(SHT_LLVM_ODRTAB);
> ECase(SHT_GNU_ATTRIBUTES);
> ECase(SHT_GNU_HASH);
> ECase(SHT_GNU_verdef);
> Index: llvm/lib/Object/ELF.cpp
> ===================================================================
> --- llvm/lib/Object/ELF.cpp
> +++ llvm/lib/Object/ELF.cpp
> @@ -192,6 +192,7 @@
> STRINGIFY_ENUM_CASE(ELF, SHT_PREINIT_ARRAY);
> STRINGIFY_ENUM_CASE(ELF, SHT_GROUP);
> 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_HASH);
> STRINGIFY_ENUM_CASE(ELF, SHT_GNU_verdef);
> Index: llvm/lib/MC/MCSectionELF.cpp
> ===================================================================
> --- llvm/lib/MC/MCSectionELF.cpp
> +++ llvm/lib/MC/MCSectionELF.cpp
> @@ -147,6 +147,8 @@
> // Print hex value of the flag while we do not have
> // any standard symbolic representation of the flag.
> OS << "0x7000001e";
> + else if (Type == ELF::SHT_LLVM_ODRTAB)
> + OS << "llvm_odrtab";
> else
> report_fatal_error("unsupported type 0x" + Twine::utohexstr(Type) +
> " for section " + getSectionName());
> Index: llvm/lib/MC/MCParser/ELFAsmParser.cpp
> ===================================================================
> --- llvm/lib/MC/MCParser/ELFAsmParser.cpp
> +++ llvm/lib/MC/MCParser/ELFAsmParser.cpp
> @@ -603,6 +603,8 @@
> Type = ELF::SHT_NOTE;
> else if (TypeName == "unwind")
> Type = ELF::SHT_X86_64_UNWIND;
> + else if (TypeName == "llvm_odrtab")
> + Type = ELF::SHT_LLVM_ODRTAB;
> else if (TypeName.getAsInteger(0, Type))
> return TokError("unknown section type");
> }
> Index: llvm/include/llvm/BinaryFormat/ELF.h
> ===================================================================
> --- llvm/include/llvm/BinaryFormat/ELF.h
> +++ llvm/include/llvm/BinaryFormat/ELF.h
> @@ -683,6 +683,7 @@
> SHT_GROUP = 17, // Section group.
> SHT_SYMTAB_SHNDX = 18, // Indices for SHN_XINDEX entries.
> SHT_LOOS = 0x60000000, // Lowest operating system-specific type.
> + SHT_LLVM_ODRTAB = 0x6fff4c00, // LLVM ODR table.
> SHT_GNU_ATTRIBUTES = 0x6ffffff5, // Object attributes.
> SHT_GNU_HASH = 0x6ffffff6, // GNU-style hash table.
> SHT_GNU_verdef = 0x6ffffffd, // GNU version definitions.
More information about the llvm-commits
mailing list