From: Joerg Sonnenberger Date: Sat, 16 Feb 2013 00:32:53 +0000 (+0000) Subject: Derive ELF section type from the name in some cases where GNU as does X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=42edeb1ba8aabcbe0e5cc846d9e5f2a9e2261292;p=oota-llvm.git Derive ELF section type from the name in some cases where GNU as does so. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@175327 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/MC/MCParser/ELFAsmParser.cpp b/lib/MC/MCParser/ELFAsmParser.cpp index eb394150dda..7921abb22ee 100644 --- a/lib/MC/MCParser/ELFAsmParser.cpp +++ b/lib/MC/MCParser/ELFAsmParser.cpp @@ -413,7 +413,16 @@ bool ELFAsmParser::ParseDirectiveSection(StringRef, SMLoc) { unsigned Type = ELF::SHT_PROGBITS; - if (!TypeName.empty()) { + if (TypeName.empty()) { + if (SectionName.startswith(".note")) + Type = ELF::SHT_NOTE; + else if (SectionName == ".init_array") + Type = ELF::SHT_INIT_ARRAY; + else if (SectionName == ".fini_array") + Type = ELF::SHT_FINI_ARRAY; + else if (SectionName == ".preinit_array") + Type = ELF::SHT_PREINIT_ARRAY; + } else { if (TypeName == "init_array") Type = ELF::SHT_INIT_ARRAY; else if (TypeName == "fini_array") diff --git a/test/MC/AsmParser/section_names.s b/test/MC/AsmParser/section_names.s new file mode 100644 index 00000000000..332cdbe3fed --- /dev/null +++ b/test/MC/AsmParser/section_names.s @@ -0,0 +1,62 @@ +# RUN: llvm-mc -triple i386-pc-linux-gnu -filetype=obj -o %t %s +# RUN: elf-dump --dump-section-data < %t | FileCheck %s +.section .nobits +.byte 1 +.section .nobits2 +.byte 1 +.section .nobitsfoo +.byte 1 +.section .init_array +.byte 1 +.section .init_array2 +.byte 1 +.section .init_arrayfoo +.byte 1 +.section .fini_array +.byte 1 +.section .fini_array2 +.byte 1 +.section .fini_arrayfoo +.byte 1 +.section .preinit_array +.byte 1 +.section .preinit_array2 +.byte 1 +.section .preinit_arrayfoo +.byte 1 +.section .note +.byte 1 +.section .note2 +.byte 1 +.section .notefoo +.byte 1 +# CHECK: (('sh_name', 0x00000{{...}}) # '.nobits' +# CHECK-NEXT: ('sh_type', 0x00000001) +# CHECK: (('sh_name', 0x00000{{...}}) # '.nobits2' +# CHECK-NEXT: ('sh_type', 0x00000001) +# CHECK: (('sh_name', 0x00000{{...}}) # '.nobitsfoo' +# CHECK-NEXT: ('sh_type', 0x00000001) +# CHECK: (('sh_name', 0x00000{{...}}) # '.init_array' +# CHECK-NEXT: ('sh_type', 0x0000000e) +# CHECK: (('sh_name', 0x00000{{...}}) # '.init_array2' +# CHECK-NEXT: ('sh_type', 0x00000001) +# CHECK: (('sh_name', 0x00000{{...}}) # '.init_arrayfoo' +# CHECK-NEXT: ('sh_type', 0x00000001) +# CHECK: (('sh_name', 0x00000{{...}}) # '.fini_array' +# CHECK-NEXT: ('sh_type', 0x0000000f) +# CHECK: (('sh_name', 0x00000{{...}}) # '.fini_array2' +# CHECK-NEXT: ('sh_type', 0x00000001) +# CHECK: (('sh_name', 0x00000{{...}}) # '.fini_arrayfoo' +# CHECK-NEXT: ('sh_type', 0x00000001) +# CHECK: (('sh_name', 0x00000{{...}}) # '.preinit_array' +# CHECK-NEXT: ('sh_type', 0x00000010) +# CHECK: (('sh_name', 0x00000{{...}}) # '.preinit_array2' +# CHECK-NEXT: ('sh_type', 0x00000001) +# CHECK: (('sh_name', 0x00000{{...}}) # '.preinit_arrayfoo' +# CHECK-NEXT: ('sh_type', 0x00000001) +# CHECK: (('sh_name', 0x00000{{...}}) # '.note' +# CHECK-NEXT: ('sh_type', 0x00000007) +# CHECK: (('sh_name', 0x00000{{...}}) # '.note2' +# CHECK-NEXT: ('sh_type', 0x00000007) +#CHECK: (('sh_name', 0x00000{{...}}) # '.notefoo' +# CHECK-NEXT: ('sh_type', 0x00000007)