1
0
mirror of https://github.com/c64scene-ar/llvm-6502.git synced 2025-03-20 11:32:33 +00:00

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
This commit is contained in:
Joerg Sonnenberger 2013-02-16 00:32:53 +00:00
parent abbf9df7f4
commit 42edeb1ba8
2 changed files with 72 additions and 1 deletions
lib/MC/MCParser
test/MC/AsmParser

@ -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")

@ -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)