[llvm-commits] lld update to add support for some hexagon relocations.
Sid Manning
sidneym at codeaurora.org
Fri Oct 5 19:06:23 PDT 2012
On 10/02/12 14:17, Michael Spencer wrote:
> On Tue, Oct 2, 2012 at 11:09 AM, Sid Manning<sidneym at codeaurora.org> wrote:
>> On 09/28/12 12:22, Sid Manning wrote:
...
>> +
>> +/// \brief Word32_B22: 0x01ff3ffe : (S + A - P)>> 2 : Verify
>> +int reloc_B22_PCREL(uint8_t *location, uint64_t P, uint64_t S, uint64_t A) {
>> + int32_t result = (uint32_t)(((S + A) - P)>>2);
>> + if ((result< 0x200000)&& (result> -0x200000)) {
>> + result = ((result<<1)& 0x3ffe) | ((result<<3)& 0x01ff0000);
>> + *(uint32_t *)location |= result;
>
> This assumes the target and host have the same endianess. Use somthing
> equivelent to:
>
> *reinterpret_cast<u{little,big}32_t*>(location) = result |
> *reinterpret_cast<const u{little,big}32_t*>(location);
>
Hexagon is always little endian, so:
*reinterpret_cast<llvm::support::ulittle32_t *>(location) = result |
*reinterpret_cast<llvm::support::ulittle32_t *>(location);
is what I did. I will also update make kindHandler pass
llvm::support::endianness down.
To better allow testing of target/host endian differences I added
support for PowerPC and did one relocation, R_PPC_REL24.
llvm-objdump doesn't support Hexagon or PPC so the testing is not
awesome but I did confirm the output was correct using binutils objdump.
I also added a, -endian to lld-core.
I took care of the rest of the comments.
Thanks,
>
> - Michael Spencer
--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
hosted by The Linux Foundation
-------------- next part --------------
A non-text attachment was scrubbed...
Name: References.diff
Type: text/x-patch
Size: 25466 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20121005/c6947f83/attachment.bin>
More information about the llvm-commits
mailing list