[llvm] r231216 - [MC][Target] Implement support for R_X86_64_SIZE{32, 64}.

Davide Italiano davide at freebsd.org
Tue Mar 3 22:49:39 PST 2015


Author: davide
Date: Wed Mar  4 00:49:39 2015
New Revision: 231216

URL: http://llvm.org/viewvc/llvm-project?rev=231216&view=rev
Log:
[MC][Target] Implement support for R_X86_64_SIZE{32,64}.

Differential Revision:	D7990
Reviewed by:	rafael, majnemer

Modified:
    llvm/trunk/include/llvm/MC/MCExpr.h
    llvm/trunk/lib/MC/MCExpr.cpp
    llvm/trunk/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp
    llvm/trunk/test/MC/ELF/relocation.s

Modified: llvm/trunk/include/llvm/MC/MCExpr.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCExpr.h?rev=231216&r1=231215&r2=231216&view=diff
==============================================================================
--- llvm/trunk/include/llvm/MC/MCExpr.h (original)
+++ llvm/trunk/include/llvm/MC/MCExpr.h Wed Mar  4 00:49:39 2015
@@ -188,6 +188,7 @@ public:
     VK_GOTPAGE,
     VK_GOTPAGEOFF,
     VK_SECREL,
+    VK_SIZE,      // symbol at SIZE
     VK_WEAKREF,   // The link between the symbols in .weakref foo, bar
 
     VK_ARM_NONE,

Modified: llvm/trunk/lib/MC/MCExpr.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCExpr.cpp?rev=231216&r1=231215&r2=231216&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCExpr.cpp (original)
+++ llvm/trunk/lib/MC/MCExpr.cpp Wed Mar  4 00:49:39 2015
@@ -192,6 +192,7 @@ StringRef MCSymbolRefExpr::getVariantKin
   case VK_GOTPAGE: return "GOTPAGE";
   case VK_GOTPAGEOFF: return "GOTPAGEOFF";
   case VK_SECREL: return "SECREL32";
+  case VK_SIZE: return "SIZE";
   case VK_WEAKREF: return "WEAKREF";
   case VK_ARM_NONE: return "none";
   case VK_ARM_TARGET1: return "target1";
@@ -311,6 +312,7 @@ MCSymbolRefExpr::getVariantKindForName(S
     .Case("gotpageoff", VK_GOTPAGEOFF)
     .Case("imgrel", VK_COFF_IMGREL32)
     .Case("secrel32", VK_SECREL)
+    .Case("size", VK_SIZE)
     .Case("l", VK_PPC_LO)
     .Case("h", VK_PPC_HI)
     .Case("ha", VK_PPC_HA)

Modified: llvm/trunk/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp?rev=231216&r1=231215&r2=231216&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp (original)
+++ llvm/trunk/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp Wed Mar  4 00:49:39 2015
@@ -123,6 +123,9 @@ unsigned X86ELFObjectWriter::GetRelocTyp
         case MCSymbolRefExpr::VK_DTPOFF:
           Type = ELF::R_X86_64_DTPOFF64;
           break;
+        case MCSymbolRefExpr::VK_SIZE:
+          Type = ELF::R_X86_64_SIZE64;
+          break;
         }
         break;
       case X86::reloc_signed_4byte:
@@ -144,6 +147,9 @@ unsigned X86ELFObjectWriter::GetRelocTyp
         case MCSymbolRefExpr::VK_DTPOFF:
           Type = ELF::R_X86_64_DTPOFF32;
           break;
+        case MCSymbolRefExpr::VK_SIZE:
+          Type = ELF::R_X86_64_SIZE32;
+          break;
         }
         break;
       case FK_Data_4:

Modified: llvm/trunk/test/MC/ELF/relocation.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/relocation.s?rev=231216&r1=231215&r2=231216&view=diff
==============================================================================
--- llvm/trunk/test/MC/ELF/relocation.s (original)
+++ llvm/trunk/test/MC/ELF/relocation.s Wed Mar  4 00:49:39 2015
@@ -34,6 +34,13 @@ bar:
         movl  $_GLOBAL_OFFSET_TABLE_, %eax
         movabs  $_GLOBAL_OFFSET_TABLE_, %rax
 
+        .quad    blah at SIZE                        # R_X86_64_SIZE64
+        .quad    blah at SIZE + 32                   # R_X86_64_SIZE64
+        .quad    blah at SIZE - 32                   # R_X86_64_SIZE64
+         movl    blah at SIZE, %eax                  # R_X86_64_SIZE32
+         movl    blah at SIZE + 32, %eax             # R_X86_64_SIZE32
+         movl    blah at SIZE - 32, %eax             # R_X86_64_SIZE32
+
 // CHECK:        Section {
 // CHECK:          Name: .rela.text
 // CHECK:          Relocations [
@@ -62,6 +69,12 @@ bar:
 // CHECK-NEXT:       0x98 R_X86_64_PC32 foo 0xFFFFFFFFFFFFFFFB
 // CHECK-NEXT:       0x9D R_X86_64_GOTPC32 _GLOBAL_OFFSET_TABLE_ 0x1
 // CHECK-NEXT:       0xA3 R_X86_64_GOTPC64 _GLOBAL_OFFSET_TABLE_ 0x2
+// CHECK-NEXT:       0xAB R_X86_64_SIZE64 blah 0x0
+// CHECK-NEXT:       0xB3 R_X86_64_SIZE64 blah 0x20
+// CHECK-NEXT:       0xBB R_X86_64_SIZE64 blah 0xFFFFFFFFFFFFFFE0
+// CHECK-NEXT:       0xC6 R_X86_64_SIZE32 blah 0x0
+// CHECK-NEXT:       0xCD R_X86_64_SIZE32 blah 0x20
+// CHECK-NEXT:       0xD4 R_X86_64_SIZE32 blah 0xFFFFFFFFFFFFFFE0
 // CHECK-NEXT:     ]
 // CHECK-NEXT:   }
 





More information about the llvm-commits mailing list