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 '@', '%' or \"\""); 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 @@ -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); 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",@0x7fffffff + +// OBJ: Section { +// OBJ: Name: .sec +// OBJ-NEXT: Type: (0x7FFFFFFF) +// OBJ: } + +// ASM: unsupported type 0x7fffffff for section .sec 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",@0x70000001 + .section .sec2,"a",@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",@unwind +// ASM: .section .sec2,"a",@unwind