[LLVMbugs] [Bug 16002] New: RuntimeDyld generates incorrect Stub Functions on Arm
bugzilla-daemon at llvm.org
bugzilla-daemon at llvm.org
Tue May 14 13:32:49 PDT 2013
http://llvm.org/bugs/show_bug.cgi?id=16002
Bug ID: 16002
Summary: RuntimeDyld generates incorrect Stub Functions on Arm
Product: new-bugs
Version: trunk
Hardware: Other
OS: other
Status: NEW
Severity: normal
Priority: P
Component: new bugs
Assignee: unassignedbugs at nondot.org
Reporter: andrew.woloszyn at gmail.com
CC: llvmbugs at cs.uiuc.edu
Classification: Unclassified
On arm (tested on android) when generating stub functions for relocation.
RuntimeDyldImpl::createStubFunction the ldr instruction is generated, and then
the next instruction is designed to be the address in question.
So the intent is to have something like this (if my debugging is correct)
ldr [pc, pc+4]
0xdeadbeef //Address in question
So that we jump to the location
But when we actually go to resolve that address "resolveARMRelocation" we get
into ELF::R_ARM_ABS32 and simple Add Value to this address.
Since it was never initialized (unless your memory allocator did it), we are
just adding Value to some unknown value
I think this is the correct solution, although you could also have
resolveARMRelocation just set the value (since I do not think there are any
valid ARM instructions that you could add a 32-bit value to, and get a
legitimate instruction)
Index: RuntimeDyld.cpp
===================================================================
--- RuntimeDyld.cpp (revision 181708)
+++ RuntimeDyld.cpp (working copy)
@@ -363,7 +363,9 @@
// and stubs for branches Thumb - ARM and ARM - Thumb.
uint32_t *StubAddr = (uint32_t*)Addr;
*StubAddr = 0xe51ff004; // ldr pc,<label>
- return (uint8_t*)++StubAddr;
+ StubAddr++;
+ *StubAddr=0;
+ return (uint8_t*)StubAddr;
} else if (Arch == Triple::mipsel || Arch == Triple::mips) {
uint32_t *StubAddr = (uint32_t*)Addr;
// 0: 3c190000 lui t9,%hi(addr).
--
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20130514/7b7851ed/attachment.html>
More information about the llvm-bugs
mailing list