diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2011-12-24 14:47:52 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2011-12-24 14:47:52 +0000 |
commit | ce618af3e880ae0ec0ddd81aca8ed5bbd4096ae4 (patch) | |
tree | 530df93d0d95848206ed0772a92dd8aed3d18a26 | |
parent | 7782102c70fdfd48776f05099eb67dd268cfc222 (diff) | |
download | external_llvm-ce618af3e880ae0ec0ddd81aca8ed5bbd4096ae4.zip external_llvm-ce618af3e880ae0ec0ddd81aca8ed5bbd4096ae4.tar.gz external_llvm-ce618af3e880ae0ec0ddd81aca8ed5bbd4096ae4.tar.bz2 |
Section relative fixups are a coff concept, not a x86 one. Replace the
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
-rw-r--r-- | include/llvm/MC/MCFixup.h | 4 | ||||
-rw-r--r-- | lib/MC/MCAsmBackend.cpp | 6 | ||||
-rw-r--r-- | lib/MC/WinCOFFStreamer.cpp | 4 | ||||
-rw-r--r-- | lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp | 8 | ||||
-rw-r--r-- | lib/Target/X86/MCTargetDesc/X86FixupKinds.h | 2 | ||||
-rw-r--r-- | lib/Target/X86/MCTargetDesc/X86WinCOFFObjectWriter.cpp | 2 |
6 files changed, 16 insertions, 10 deletions
diff --git a/include/llvm/MC/MCFixup.h b/include/llvm/MC/MCFixup.h index 7404270..4aa361b 100644 --- a/include/llvm/MC/MCFixup.h +++ b/include/llvm/MC/MCFixup.h @@ -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, diff --git a/lib/MC/MCAsmBackend.cpp b/lib/MC/MCAsmBackend.cpp index 936ed55..51c3977 100644 --- a/lib/MC/MCAsmBackend.cpp +++ b/lib/MC/MCAsmBackend.cpp @@ -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]) && diff --git a/lib/MC/WinCOFFStreamer.cpp b/lib/MC/WinCOFFStreamer.cpp index 3678a58..f2fecae 100644 --- a/lib/MC/WinCOFFStreamer.cpp +++ b/lib/MC/WinCOFFStreamer.cpp @@ -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); } diff --git a/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp b/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp index 5278fa0..e241cc0 100644 --- a/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp +++ b/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp @@ -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) diff --git a/lib/Target/X86/MCTargetDesc/X86FixupKinds.h b/lib/Target/X86/MCTargetDesc/X86FixupKinds.h index d6cb39a..17d242a 100644 --- a/lib/Target/X86/MCTargetDesc/X86FixupKinds.h +++ b/lib/Target/X86/MCTargetDesc/X86FixupKinds.h @@ -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 diff --git a/lib/Target/X86/MCTargetDesc/X86WinCOFFObjectWriter.cpp b/lib/Target/X86/MCTargetDesc/X86WinCOFFObjectWriter.cpp index 9cdfa52..2123acd 100644 --- a/lib/Target/X86/MCTargetDesc/X86WinCOFFObjectWriter.cpp +++ b/lib/Target/X86/MCTargetDesc/X86WinCOFFObjectWriter.cpp @@ -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: |