Section relative fixups are a coff concept, not a x86 one. Replace the
authorRafael Espindola <rafael.espindola@gmail.com>
Sat, 24 Dec 2011 14:47:52 +0000 (14:47 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Sat, 24 Dec 2011 14:47:52 +0000 (14:47 +0000)
x86 specific reloc_coff_secrel32 with a generic FK_SecRel_4.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@147252 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/MC/MCFixup.h
lib/MC/MCAsmBackend.cpp
lib/MC/WinCOFFStreamer.cpp
lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp
lib/Target/X86/MCTargetDesc/X86FixupKinds.h
lib/Target/X86/MCTargetDesc/X86WinCOFFObjectWriter.cpp

index 740427083d54141177aeabfd1a3b63b517069db3..4aa361b2df90165d031dc0d6b63cc7e604af3920 100644 (file)
@@ -30,6 +30,10 @@ enum MCFixupKind {
   FK_GPRel_2,    ///< A two-byte gp relative fixup.
   FK_GPRel_4,    ///< A four-byte gp relative fixup.
   FK_GPRel_8,    ///< A eight-byte gp relative fixup.
+  FK_SecRel_1,   ///< A one-byte section relative fixup.
+  FK_SecRel_2,   ///< A two-byte section relative fixup.
+  FK_SecRel_4,   ///< A four-byte section relative fixup.
+  FK_SecRel_8,   ///< A eight-byte section relative fixup.
 
   FirstTargetFixupKind = 128,
 
index 936ed55e54d3cbdd55d75ec718e40e0dc6857084..51c397734bbefd5c28c4278b1f6a48106da4c2b3 100644 (file)
@@ -32,7 +32,11 @@ MCAsmBackend::getFixupKindInfo(MCFixupKind Kind) const {
     { "FK_GPRel_1", 0,  8, 0 },
     { "FK_GPRel_2", 0, 16, 0 },
     { "FK_GPRel_4", 0, 32, 0 },
-    { "FK_GPRel_8", 0, 64, 0 }
+    { "FK_GPRel_8", 0, 64, 0 },
+    { "FK_SecRel_1", 0,  8, 0 },
+    { "FK_SecRel_2", 0, 16, 0 },
+    { "FK_SecRel_4", 0, 32, 0 },
+    { "FK_SecRel_8", 0, 64, 0 }
   };
   
   assert((size_t)Kind <= sizeof(Builtins) / sizeof(Builtins[0]) &&
index 3678a589f4ee3bf72c005cd31ade39d22f52b250..f2fecae79c842e9757fd1e01287d0f8c3a41f12f 100644 (file)
@@ -33,8 +33,6 @@
 #include "llvm/Support/TargetRegistry.h"
 #include "llvm/Support/raw_ostream.h"
 
-#include "../Target/X86/MCTargetDesc/X86FixupKinds.h"
-
 using namespace llvm;
 
 namespace {
@@ -303,7 +301,7 @@ void WinCOFFStreamer::EmitCOFFSecRel32(MCSymbol const *Symbol)
 
   DF->addFixup(MCFixup::Create(DF->getContents().size(),
                                MCSymbolRefExpr::Create (Symbol, getContext ()),
-                               (MCFixupKind)X86::reloc_coff_secrel32));
+                               FK_SecRel_4));
   DF->getContents().resize(DF->getContents().size() + 4, 0);
 }
 
index 5278fa01d9bf2c29d4b973bf8898b76291026ff5..e241cc0f93e7a52c5e8c5e9ef71f335f25356948 100644 (file)
@@ -39,17 +39,20 @@ static unsigned getFixupKindLog2Size(unsigned Kind) {
   switch (Kind) {
   default: assert(0 && "invalid fixup kind!");
   case FK_PCRel_1:
+  case FK_SecRel_1:
   case FK_Data_1: return 0;
   case FK_PCRel_2:
+  case FK_SecRel_2:
   case FK_Data_2: return 1;
   case FK_PCRel_4:
   case X86::reloc_riprel_4byte:
   case X86::reloc_riprel_4byte_movq_load:
   case X86::reloc_signed_4byte:
   case X86::reloc_global_offset_table:
-  case X86::reloc_coff_secrel32:
+  case FK_SecRel_4:
   case FK_Data_4: return 2;
   case FK_PCRel_8:
+  case FK_SecRel_8:
   case FK_Data_8: return 3;
   }
 }
@@ -77,8 +80,7 @@ public:
       { "reloc_riprel_4byte", 0, 4 * 8, MCFixupKindInfo::FKF_IsPCRel },
       { "reloc_riprel_4byte_movq_load", 0, 4 * 8, MCFixupKindInfo::FKF_IsPCRel},
       { "reloc_signed_4byte", 0, 4 * 8, 0},
-      { "reloc_global_offset_table", 0, 4 * 8, 0},
-      { "reloc_coff_secrel32", 0, 4 * 8, 0}
+      { "reloc_global_offset_table", 0, 4 * 8, 0}
     };
 
     if (Kind < FirstTargetFixupKind)
index d6cb39ae9a736307e206bc458a9e20df4758c43c..17d242ab761e3579a834a1ac653a640df1b39e35 100644 (file)
@@ -23,8 +23,6 @@ enum Fixups {
   reloc_global_offset_table,                 // 32-bit, relative to the start
                                              // of the instruction. Used only
                                              // for _GLOBAL_OFFSET_TABLE_.
-  reloc_coff_secrel32,                       // PE-COFF section relative 32
-                                             // (only valid for win32 COFF)
   // Marker
   LastTargetFixupKind,
   NumTargetFixupKinds = LastTargetFixupKind - FirstTargetFixupKind
index 9cdfa52aee02099914635aeefdf7fe0b233a82cc..2123acd884296ef17d744c10849d68ce3992e010 100644 (file)
@@ -55,7 +55,7 @@ unsigned X86WinCOFFObjectWriter::getRelocType(unsigned FixupKind) const {
     else
       llvm_unreachable("unsupported relocation type");
     break;
-  case X86::reloc_coff_secrel32:
+  case FK_SecRel_4:
     return Is64Bit ? COFF::IMAGE_REL_AMD64_SREL32 : COFF::IMAGE_REL_I386_SECREL;
     break;
   default: