diff --git a/lib/MC/MCParser/ELFAsmParser.cpp b/lib/MC/MCParser/ELFAsmParser.cpp index 7d8f68f1b0c..b63d623b67e 100644 --- a/lib/MC/MCParser/ELFAsmParser.cpp +++ b/lib/MC/MCParser/ELFAsmParser.cpp @@ -284,7 +284,8 @@ bool ELFAsmParser::ParseDirectiveSection(StringRef, SMLoc) { ? SectionKind::getText() : SectionKind::getDataRel(); getStreamer().SwitchSection(getContext().getELFSection(SectionName, Type, - Flags, Kind, false)); + Flags, Kind, false, + Size)); return false; } diff --git a/test/MC/ELF/entsize.s b/test/MC/ELF/entsize.s new file mode 100644 index 00000000000..0a30fde6a86 --- /dev/null +++ b/test/MC/ELF/entsize.s @@ -0,0 +1,69 @@ +// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | elf-dump --dump-section-data | FileCheck %s + +// Test that mergeable constants have sh_entsize set. + +// 1 byte strings + .section .rodata.str1.1,"aMS",@progbits,1 + + .type .L.str1,@object # @.str1 +.L.str1: + .asciz "tring" + .size .L.str1, 6 + + .type .L.str2,@object # @.str2 +.L.str2: + .asciz "String" + .size .L.str2, 7 + +// 2 byte strings + .section .rodata.str2.1,"aMS",@progbits,2 + .type .L.str3,@object # @.str3 +.L.str3: + .asciz "L\000o\000n\000g\000" + .size .L.str3, 9 + + .type .L.str4,@object # @.str4 +.L.str4: + .asciz "o\000n\000g\000" + .size .L.str4, 7 + + // 8 byte constants + .section .rodata.cst8,"aM",@progbits,8 + .quad 42 + .quad 42 + +// CHECK: # Section 4 +// CHECK-NEXT: ('sh_name', 18) # '.rodata.str1.1' +// CHECK-NEXT: ('sh_type', 1) +// CHECK-NEXT: ('sh_flags', 50) +// CHECK-NEXT: ('sh_addr', +// CHECK-NEXT: ('sh_offset', +// CHECK-NEXT: ('sh_size', 13) +// CHECK-NEXT: ('sh_link', +// CHECK-NEXT: ('sh_info', +// CHECK-NEXT: ('sh_addralign', 1) +// CHECK-NEXT: ('sh_entsize', 1) + +// CHECK: # Section 5 +// CHECK-NEXT: ('sh_name', 33) # '.rodata.str2.1' +// CHECK-NEXT: ('sh_type', 1) +// CHECK-NEXT: ('sh_flags', 50) +// CHECK-NEXT: ('sh_addr', +// CHECK-NEXT: ('sh_offset', +// CHECK-NEXT: ('sh_size', 16) +// CHECK-NEXT: ('sh_link', +// CHECK-NEXT: ('sh_info', +// CHECK-NEXT: ('sh_addralign', 1) +// CHECK-NEXT: ('sh_entsize', 2) + +// CHECK: # Section 6 +// CHECK-NEXT: ('sh_name', 48) # '.rodata.cst8 +// CHECK-NEXT: ('sh_type', 1) +// CHECK-NEXT: ('sh_flags', 18) +// CHECK-NEXT: ('sh_addr', +// CHECK-NEXT: ('sh_offset', +// CHECK-NEXT: ('sh_size', 16) +// CHECK-NEXT: ('sh_link', +// CHECK-NEXT: ('sh_info', +// CHECK-NEXT: ('sh_addralign', 1) +// CHECK-NEXT: ('sh_entsize', 8)