[llvm] r205031 - Map ELf flags back to more specific section kinds.

Rafael Espindola rafael.espindola at gmail.com
Fri Mar 28 12:14:08 PDT 2014


Author: rafael
Date: Fri Mar 28 14:14:08 2014
New Revision: 205031

URL: http://llvm.org/viewvc/llvm-project?rev=205031&view=rev
Log:
Map ELf flags back to more specific section kinds.

With that, convert another llc -filetype=obj test.

Added:
    llvm/trunk/test/MC/Mips/elf-relsym.s
Removed:
    llvm/trunk/test/MC/Mips/elf-relsym.ll
Modified:
    llvm/trunk/lib/MC/MCParser/ELFAsmParser.cpp

Modified: llvm/trunk/lib/MC/MCParser/ELFAsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCParser/ELFAsmParser.cpp?rev=205031&r1=205030&r2=205031&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCParser/ELFAsmParser.cpp (original)
+++ llvm/trunk/lib/MC/MCParser/ELFAsmParser.cpp Fri Mar 28 14:14:08 2014
@@ -269,11 +269,37 @@ bool ELFAsmParser::ParseSectionName(Stri
   return false;
 }
 
-static SectionKind computeSectionKind(unsigned Flags) {
+static SectionKind computeSectionKind(unsigned Flags, unsigned ElemSize) {
   if (Flags & ELF::SHF_EXECINSTR)
     return SectionKind::getText();
   if (Flags & ELF::SHF_TLS)
     return SectionKind::getThreadData();
+  if (Flags & ELF::SHF_MERGE) {
+    if (Flags & ELF::SHF_STRINGS) {
+      switch (ElemSize) {
+      default:
+        break;
+      case 1:
+        return SectionKind::getMergeable1ByteCString();
+      case 2:
+        return SectionKind::getMergeable2ByteCString();
+      case 4:
+        return SectionKind::getMergeable4ByteCString();
+      }
+    } else {
+      switch (ElemSize) {
+      default:
+        break;
+      case 4:
+        return SectionKind::getMergeableConst4();
+      case 8:
+        return SectionKind::getMergeableConst8();
+      case 16:
+        return SectionKind::getMergeableConst16();
+      }
+    }
+  }
+
   return SectionKind::getDataRel();
 }
 
@@ -518,7 +544,7 @@ EndStmt:
       }
   }
 
-  SectionKind Kind = computeSectionKind(Flags);
+  SectionKind Kind = computeSectionKind(Flags, Size);
   getStreamer().SwitchSection(getContext().getELFSection(SectionName, Type,
                                                          Flags, Kind, Size,
                                                          GroupName),

Removed: llvm/trunk/test/MC/Mips/elf-relsym.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/Mips/elf-relsym.ll?rev=205030&view=auto
==============================================================================
--- llvm/trunk/test/MC/Mips/elf-relsym.ll (original)
+++ llvm/trunk/test/MC/Mips/elf-relsym.ll (removed)
@@ -1,39 +0,0 @@
-; RUN: llc -filetype=obj -mtriple mipsel-unknown-linux %s -o - | llvm-readobj -t | FileCheck %s
-
-; Check that the appropriate symbols were created.
-
-; CHECK: Symbols [
-; CHECK:   Symbol {
-; CHECK:     Name: $.str
-; CHECK:   }
-; CHECK:   Symbol {
-; CHECK:     Name: $.str1
-; CHECK:   }
-; CHECK:   Symbol {
-; CHECK:     Name: $CPI0_0
-; CHECK:   }
-; CHECK:   Symbol {
-; CHECK:     Name: $CPI0_1
-; CHECK:   }
-; CHECK: ]
-
- at .str = private unnamed_addr constant [6 x i8] c"abcde\00", align 1
- at gc1 = external global i8*
- at .str1 = private unnamed_addr constant [5 x i8] c"fghi\00", align 1
- at gc2 = external global i8*
- at gd1 = external global double
- at gd2 = external global double
-
-define void @foo1() nounwind {
-entry:
-  store i8* getelementptr inbounds ([6 x i8]* @.str, i32 0, i32 0), i8** @gc1, align 4
-  store i8* getelementptr inbounds ([5 x i8]* @.str1, i32 0, i32 0), i8** @gc2, align 4
-  %0 = load double* @gd1, align 8
-  %add = fadd double %0, 2.500000e+00
-  store double %add, double* @gd1, align 8
-  %1 = load double* @gd2, align 8
-  %add1 = fadd double %1, 4.500000e+00
-  store double %add1, double* @gd2, align 8
-  ret void
-}
-

Added: llvm/trunk/test/MC/Mips/elf-relsym.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/Mips/elf-relsym.s?rev=205031&view=auto
==============================================================================
--- llvm/trunk/test/MC/Mips/elf-relsym.s (added)
+++ llvm/trunk/test/MC/Mips/elf-relsym.s Fri Mar 28 14:14:08 2014
@@ -0,0 +1,87 @@
+// RUN: llvm-mc -filetype=obj -triple mipsel-unknown-linux %s -o - | llvm-readobj -t | FileCheck %s
+
+// Check that the appropriate symbols were created.
+
+// CHECK: Symbols [
+// CHECK:   Symbol {
+// CHECK:     Name: $.str
+// CHECK:   }
+// CHECK:   Symbol {
+// CHECK:     Name: $.str1
+// CHECK:   }
+// CHECK:   Symbol {
+// CHECK:     Name: $CPI0_0
+// CHECK:   }
+// CHECK:   Symbol {
+// CHECK:     Name: $CPI0_1
+// CHECK:   }
+// CHECK: ]
+
+	.text
+	.abicalls
+	.section	.mdebug.abi32,"", at progbits
+	.file	"/home/espindola/llvm/llvm/test/MC/Mips/elf-relsym.ll"
+	.section	.rodata.cst8,"aM", at progbits,8
+	.align	3
+$CPI0_0:
+	.8byte	4612811918334230528     # double 2.5
+$CPI0_1:
+	.8byte	4616752568008179712     # double 4.5
+	.text
+	.globl	foo1
+	.align	2
+	.type	foo1, at function
+	.set	nomips16
+	.ent	foo1
+foo1:                                   # @foo1
+	.frame	$sp,0,$ra
+	.mask 	0x00000000,0
+	.fmask	0x00000000,0
+	.set	noreorder
+	.set	nomacro
+	.set	noat
+# BB#0:                                 # %entry
+	lui	$2, %hi(_gp_disp)
+	addiu	$2, $2, %lo(_gp_disp)
+	addu	$1, $2, $25
+	lw	$2, %got($.str)($1)
+	addiu	$2, $2, %lo($.str)
+	lw	$3, %got(gc1)($1)
+	sw	$2, 0($3)
+	lw	$2, %got($.str1)($1)
+	addiu	$2, $2, %lo($.str1)
+	lw	$3, %got(gc2)($1)
+	sw	$2, 0($3)
+	lw	$2, %got($CPI0_0)($1)
+	ldc1	$f0, %lo($CPI0_0)($2)
+	lw	$2, %got(gd1)($1)
+	ldc1	$f2, 0($2)
+	lw	$3, %got($CPI0_1)($1)
+	ldc1	$f4, %lo($CPI0_1)($3)
+	lw	$1, %got(gd2)($1)
+	add.d	$f0, $f2, $f0
+	sdc1	$f0, 0($2)
+	ldc1	$f0, 0($1)
+	add.d	$f0, $f0, $f4
+	jr	$ra
+	sdc1	$f0, 0($1)
+	.set	at
+	.set	macro
+	.set	reorder
+	.end	foo1
+$tmp0:
+	.size	foo1, ($tmp0)-foo1
+
+	.type	$.str, at object           # @.str
+	.section	.rodata.str1.1,"aMS", at progbits,1
+$.str:
+	.asciz	"abcde"
+	.size	$.str, 6
+
+	.type	$.str1, at object          # @.str1
+$.str1:
+	.asciz	"fghi"
+	.size	$.str1, 5
+
+
+	.text





More information about the llvm-commits mailing list