This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [GOLD][PATCH] Added support for the ARM relocations: R_ARM_THM_PC8/PC12, R_ARM_THM_ALU_PREL_11_0
- From: =?big5?b?RG91ZyBLd2FuICjD9q62vHcp?= <dougkwan at google dot com>
- To: Viktor Kutuzov <vkutuzov at accesssoftek dot com>
- Cc: Ian Lance Taylor <iant at google dot com>, "binutils at sourceware dot org" <binutils at sourceware dot org>
- Date: Fri, 29 Jan 2010 14:27:08 -0800
- Subject: Re: [GOLD][PATCH] Added support for the ARM relocations: R_ARM_THM_PC8/PC12, R_ARM_THM_ALU_PREL_11_0
- References: <6AE1604EE3EC5F4296C096518C6B77EE0194D87873@mail.accesssoftek.com>
+ int32_t x = (psymval->value(object, addend) - (address & 0xfffffffc));
+ Reltype val = abs(x) & 0x03fc;
+ insn = (insn & 0xff00) | (val >> 2);
+
+ elfcpp::Swap<16, big_endian>::writeval(wv, insn);
+ return ((x > 0x03fc)
+ ? This::STATUS_OVERFLOW
+ : This::STATUS_OKAY);
Please not that x is signed. Your overflow check fails if x is
negative. The same problem happens in the R_ARM_THM_PC12 as well.
-Doug
2010/1/29 Viktor Kutuzov <vkutuzov@accesssoftek.com>:
> Hello everyone,
>
> Please find attached patch that adds a support for the ARM relocations: R_ARM_THM_PC8, R_ARM_THM_PC12 and R_ARM_THM_ALU_PREL_11_0.
>
> Best regards,
> Viktor.
>
> * gold/arm.cc: Added support for the ARM relocations: R_ARM_THM_PC8, R_ARM_THM_PC12, R_ARM_THM_ALU_PREL_11_0.
> (Arm_relocate_functions::thm_alu11): New Method.
> (Arm_relocate_functions::thm_pc8): New Method.
> (Arm_relocate_functions::thm_pc12): New Method.
> (Target_arm<big_endian>::Scan::local): Handle the relocations.
> (Target_arm<big_endian>::Scan::global): Likewise.
> (Target_arm<big_endian>::Relocate::relocate): Likewise.
> (Target_arm<big_endian>::Relocatable_size_for_reloc::get_size_for_reloc): Likewise.