[PATCH] D29719: [MC] Accept a numeric value as an ELF section header's type
Simon Atanasyan via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Mar 10 00:34:21 PST 2017
This revision was automatically updated to reflect the committed changes.
Closed by commit rL297446: [MC] Accept a numeric value as an ELF section header's type (authored by atanasyan).
Changed prior to commit:
https://reviews.llvm.org/D29719?vs=91216&id=91277#toc
Repository:
rL LLVM
https://reviews.llvm.org/D29719
Files:
llvm/trunk/lib/MC/MCParser/ELFAsmParser.cpp
llvm/trunk/lib/MC/MCSectionELF.cpp
llvm/trunk/test/MC/ELF/section-numeric-invalid-type.s
llvm/trunk/test/MC/ELF/section-numeric-type.s
Index: llvm/trunk/test/MC/ELF/section-numeric-type.s
===================================================================
--- llvm/trunk/test/MC/ELF/section-numeric-type.s
+++ llvm/trunk/test/MC/ELF/section-numeric-type.s
@@ -0,0 +1,20 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux-gnu %s -o - \
+// RUN: | llvm-readobj -s -t | FileCheck --check-prefix=OBJ %s
+
+// RUN: llvm-mc -filetype=asm -triple=x86_64-pc-linux-gnu %s -o - \
+// RUN: | FileCheck --check-prefix=ASM %s
+
+ .section .sec1,"a", at 0x70000001
+ .section .sec2,"a", at 1879048193
+
+// OBJ: Section {
+// OBJ: Name: .sec1
+// OBJ-NEXT: Type: SHT_X86_64_UNWIND (0x70000001)
+// OBJ: }
+// OBJ: Section {
+// OBJ: Name: .sec2
+// OBJ-NEXT: Type: SHT_X86_64_UNWIND (0x70000001)
+// OBJ: }
+
+// ASM: .section .sec1,"a", at unwind
+// ASM: .section .sec2,"a", at unwind
Index: llvm/trunk/test/MC/ELF/section-numeric-invalid-type.s
===================================================================
--- llvm/trunk/test/MC/ELF/section-numeric-invalid-type.s
+++ llvm/trunk/test/MC/ELF/section-numeric-invalid-type.s
@@ -0,0 +1,14 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux-gnu %s -o - \
+// RUN: | llvm-readobj -s -t | FileCheck --check-prefix=OBJ %s
+
+// RUN: not llvm-mc -filetype=asm -triple=x86_64-pc-linux-gnu %s -o - 2>&1 \
+// RUN: | FileCheck --check-prefix=ASM %s
+
+ .section .sec,"a", at 0x7fffffff
+
+// OBJ: Section {
+// OBJ: Name: .sec
+// OBJ-NEXT: Type: (0x7FFFFFFF)
+// OBJ: }
+
+// ASM: unsupported type 0x7fffffff for section .sec
Index: llvm/trunk/lib/MC/MCParser/ELFAsmParser.cpp
===================================================================
--- llvm/trunk/lib/MC/MCParser/ELFAsmParser.cpp
+++ llvm/trunk/lib/MC/MCParser/ELFAsmParser.cpp
@@ -395,7 +395,10 @@
return TokError("expected '@<type>', '%<type>' or \"<type>\"");
if (!L.is(AsmToken::String))
Lex();
- if (getParser().parseIdentifier(TypeName))
+ if (L.is(AsmToken::Integer)) {
+ TypeName = getTok().getString();
+ Lex();
+ } else if (getParser().parseIdentifier(TypeName))
return TokError("expected identifier in directive");
return false;
}
@@ -580,7 +583,7 @@
Type = ELF::SHT_NOTE;
else if (TypeName == "unwind")
Type = ELF::SHT_X86_64_UNWIND;
- else
+ else if (TypeName.getAsInteger(0, Type))
return TokError("unknown section type");
}
Index: llvm/trunk/lib/MC/MCSectionELF.cpp
===================================================================
--- llvm/trunk/lib/MC/MCSectionELF.cpp
+++ llvm/trunk/lib/MC/MCSectionELF.cpp
@@ -12,6 +12,7 @@
#include "llvm/MC/MCExpr.h"
#include "llvm/MC/MCSectionELF.h"
#include "llvm/Support/ELF.h"
+#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/raw_ostream.h"
#include <cassert>
@@ -140,6 +141,9 @@
OS << "progbits";
else if (Type == ELF::SHT_X86_64_UNWIND)
OS << "unwind";
+ else
+ report_fatal_error("unsupported type 0x" + Twine::utohexstr(Type) +
+ " for section " + getSectionName());
if (EntrySize) {
assert(Flags & ELF::SHF_MERGE);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D29719.91277.patch
Type: text/x-patch
Size: 3152 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170310/1253a3eb/attachment.bin>
More information about the llvm-commits
mailing list