diff options
author | Jan Wen Voung <jvoung@google.com> | 2010-09-30 02:41:46 +0000 |
---|---|---|
committer | Jan Wen Voung <jvoung@google.com> | 2010-09-30 02:41:46 +0000 |
commit | 12ad94e03c46c3bba44756bc052e08d6c4341b3d (patch) | |
tree | 4b21313a655fa45b76b4b9664ee7ffb11ff655f4 | |
parent | 7070387f08f7dc797b554ed8013cba9f8b74121a (diff) |
Have ELFAsmParser.cpp use the already parsed "Size" (entry size) when
constructing a section. Test for a few cases also included.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115132 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/MC/MCParser/ELFAsmParser.cpp | 3 | ||||
-rw-r--r-- | test/MC/ELF/entsize.s | 69 |
2 files changed, 71 insertions, 1 deletions
diff --git a/lib/MC/MCParser/ELFAsmParser.cpp b/lib/MC/MCParser/ELFAsmParser.cpp index 7d8f68f1b0..b63d623b67 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 0000000000..0a30fde6a8 --- /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) |