summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2007-01-17 22:22:31 +0000
committerBill Wendling <isanbard@gmail.com>2007-01-17 22:22:31 +0000
commitcd9c1f035a0cfd90176178d7f00ec89a518443c6 (patch)
tree2579c4e2216a1044149e0ba7ac4aa72e9d7b97c7 /llvm/lib/Target
parentcbb5501c5de05b6905e250b35ef8782e333982d5 (diff)
downloadbcm5719-llvm-cd9c1f035a0cfd90176178d7f00ec89a518443c6.tar.gz
bcm5719-llvm-cd9c1f035a0cfd90176178d7f00ec89a518443c6.zip
Changed to use the OutputBuffer instead of the methods in MachO and ELF
writers. llvm-svn: 33311
Diffstat (limited to 'llvm/lib/Target')
-rw-r--r--llvm/lib/Target/PowerPC/PPCMachOWriter.cpp81
1 files changed, 51 insertions, 30 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCMachOWriter.cpp b/llvm/lib/Target/PowerPC/PPCMachOWriter.cpp
index ccf2e97a732..5208060749a 100644
--- a/llvm/lib/Target/PowerPC/PPCMachOWriter.cpp
+++ b/llvm/lib/Target/PowerPC/PPCMachOWriter.cpp
@@ -17,6 +17,7 @@
#include "llvm/PassManager.h"
#include "llvm/CodeGen/MachOWriter.h"
#include "llvm/Support/Compiler.h"
+#include "llvm/Support/OutputBuffer.h"
using namespace llvm;
namespace {
@@ -91,24 +92,36 @@ void PPCMachOWriter::GetTargetRelocation(MachineRelocation &MR,
MachORelocation VANILLA(MR.getMachineCodeOffset(), To.Index, false, 2,
isExtern, PPC_RELOC_VANILLA);
++From.nreloc;
- outword(From.RelocBuffer, VANILLA.r_address);
- outword(From.RelocBuffer, VANILLA.getPackedFields());
+
+ OutputBuffer RelocOut(TM, From.RelocBuffer);
+ RelocOut.outword(VANILLA.r_address);
+ RelocOut.outword(VANILLA.getPackedFields());
+
+ OutputBuffer SecOut(TM, From.SectionData);
+ SecOut.fixword(Addr, MR.getMachineCodeOffset());
+ break;
}
- fixword(From.SectionData, Addr, MR.getMachineCodeOffset());
- break;
case PPC::reloc_pcrel_bx:
- Addr -= MR.getMachineCodeOffset();
- Addr >>= 2;
- Addr &= 0xFFFFFF;
- Addr <<= 2;
- Addr |= (From.SectionData[MR.getMachineCodeOffset()] << 24);
- fixword(From.SectionData, Addr, MR.getMachineCodeOffset());
- break;
+ {
+ Addr -= MR.getMachineCodeOffset();
+ Addr >>= 2;
+ Addr &= 0xFFFFFF;
+ Addr <<= 2;
+ Addr |= (From.SectionData[MR.getMachineCodeOffset()] << 24);
+
+ OutputBuffer SecOut(TM, From.SectionData);
+ SecOut.fixword(Addr, MR.getMachineCodeOffset());
+ break;
+ }
case PPC::reloc_pcrel_bcx:
- Addr -= MR.getMachineCodeOffset();
- Addr &= 0xFFFC;
- fixhalf(From.SectionData, Addr, MR.getMachineCodeOffset() + 2);
- break;
+ {
+ Addr -= MR.getMachineCodeOffset();
+ Addr &= 0xFFFC;
+
+ OutputBuffer SecOut(TM, From.SectionData);
+ SecOut.fixhalf(Addr, MR.getMachineCodeOffset() + 2);
+ break;
+ }
case PPC::reloc_absolute_high:
{
MachORelocation HA16(MR.getMachineCodeOffset(), To.Index, false, 2,
@@ -117,15 +130,19 @@ void PPCMachOWriter::GetTargetRelocation(MachineRelocation &MR,
PPC_RELOC_PAIR);
++From.nreloc;
++From.nreloc;
- outword(From.RelocBuffer, HA16.r_address);
- outword(From.RelocBuffer, HA16.getPackedFields());
- outword(From.RelocBuffer, PAIR.r_address);
- outword(From.RelocBuffer, PAIR.getPackedFields());
+
+ OutputBuffer RelocOut(TM, From.RelocBuffer);
+ RelocOut.outword(HA16.r_address);
+ RelocOut.outword(HA16.getPackedFields());
+ RelocOut.outword(PAIR.r_address);
+ RelocOut.outword(PAIR.getPackedFields());
+ printf("ha16: %x\n", (unsigned)Addr);
+ Addr += 0x8000;
+
+ OutputBuffer SecOut(TM, From.SectionData);
+ SecOut.fixhalf(Addr >> 16, MR.getMachineCodeOffset() + 2);
+ break;
}
- printf("ha16: %x\n", (unsigned)Addr);
- Addr += 0x8000;
- fixhalf(From.SectionData, Addr >> 16, MR.getMachineCodeOffset() + 2);
- break;
case PPC::reloc_absolute_low:
{
MachORelocation LO16(MR.getMachineCodeOffset(), To.Index, false, 2,
@@ -134,14 +151,18 @@ void PPCMachOWriter::GetTargetRelocation(MachineRelocation &MR,
PPC_RELOC_PAIR);
++From.nreloc;
++From.nreloc;
- outword(From.RelocBuffer, LO16.r_address);
- outword(From.RelocBuffer, LO16.getPackedFields());
- outword(From.RelocBuffer, PAIR.r_address);
- outword(From.RelocBuffer, PAIR.getPackedFields());
+
+ OutputBuffer RelocOut(TM, From.RelocBuffer);
+ RelocOut.outword(LO16.r_address);
+ RelocOut.outword(LO16.getPackedFields());
+ RelocOut.outword(PAIR.r_address);
+ RelocOut.outword(PAIR.getPackedFields());
+ printf("lo16: %x\n", (unsigned)Addr);
+
+ OutputBuffer SecOut(TM, From.SectionData);
+ SecOut.fixhalf(Addr, MR.getMachineCodeOffset() + 2);
+ break;
}
- printf("lo16: %x\n", (unsigned)Addr);
- fixhalf(From.SectionData, Addr, MR.getMachineCodeOffset() + 2);
- break;
}
}
OpenPOWER on IntegriCloud