Add fprintf to show relocation information at first compile time.
diff --git a/bcc.cpp b/bcc.cpp
index f883106..8641a0a 100644
--- a/bcc.cpp
+++ b/bcc.cpp
@@ -220,7 +220,7 @@
uint32_t relocOffset; // offset of hole (holeAddr - codeAddr)
uint32_t cachedResultAddr; // address resolved at compile time
- oBCCRelocEntry(uintptr_t off, uint32_t ty, void *addr)
+ oBCCRelocEntry(uint32_t ty, uintptr_t off, void *addr)
: relocType(ty),
relocOffset(static_cast<uint32_t>(off)),
cachedResultAddr(reinterpret_cast<uint32_t>(addr)) {
@@ -2153,6 +2153,13 @@
if (MR.mayNeedFarStub()) {
ResultPtr = GetExternalFunctionStub(ResultPtr);
+ fprintf(stderr, "reloc: external sym + far\t\toff=%d\taddr=%p\n",
+ MR.getMachineCodeOffset() + BufferOffset,
+ ResultPtr);
+ } else {
+ fprintf(stderr, "reloc: external sym\t\toff=%d\taddr=%p\n",
+ MR.getMachineCodeOffset() + BufferOffset,
+ ResultPtr);
}
} else if (MR.isGlobalValue()) {
@@ -2160,21 +2167,36 @@
BufferBegin
+ MR.getMachineCodeOffset(),
MR.mayNeedFarStub());
+ fprintf(stderr, "reloc: is global var\t\toff=%d\taddr=%p\n",
+ MR.getMachineCodeOffset() + BufferOffset,
+ ResultPtr);
} else if (MR.isIndirectSymbol()) {
ResultPtr =
GetPointerToGVIndirectSym(
MR.getGlobalValue(),
BufferBegin + MR.getMachineCodeOffset());
+ fprintf(stderr, "reloc: is indirect symbol\t\toff=%d\taddr=%p\n",
+ MR.getMachineCodeOffset() + BufferOffset,
+ ResultPtr);
} else if (MR.isBasicBlock()) {
ResultPtr =
(void*) getMachineBasicBlockAddress(MR.getBasicBlock());
+ fprintf(stderr, "reloc: is basic block\t\toff=%d\taddr=%p\n",
+ MR.getMachineCodeOffset() + BufferOffset,
+ ResultPtr);
} else if (MR.isConstantPoolIndex()) {
ResultPtr =
(void*) getConstantPoolEntryAddress(MR.getConstantPoolIndex());
+ fprintf(stderr, "reloc: is const pool entry\t\toff=%d\taddr=%p\n",
+ MR.getMachineCodeOffset() + BufferOffset,
+ ResultPtr);
} else {
assert(MR.isJumpTableIndex() && "Unknown type of relocation");
ResultPtr =
(void*) getJumpTableEntryAddress(MR.getJumpTableIndex());
+ fprintf(stderr, "reloc: is jump table\t\toff=%d\taddr=%p\n",
+ MR.getMachineCodeOffset() + BufferOffset,
+ ResultPtr);
}
if (!MR.isExternalSymbol() || MR.mayNeedFarStub()) {
@@ -2184,8 +2206,8 @@
// Cache the relocation result address
mCachingRelocations.push_back(
- oBCCRelocEntry(MR.getMachineCodeOffset() + BufferOffset,
- MR.getRelocationType(),
+ oBCCRelocEntry(MR.getRelocationType(),
+ MR.getMachineCodeOffset() + BufferOffset,
ResultPtr));
}