This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [patch] ARM support for long calls


Thanks for your feedback.


On 01.04.2008 16:10, Paul Brook wrote:
There are several issues with this implementation:

- ARMv4t arm->thumb interworking is broken (You have to use bx to switch modes, ldr pc does not work). You also get stray __foo_from_arm symbols

- ARMv4t thumb->arm interworking is broken. It generates blx instructions, which arm ARMv5 only.

I didn't really focus on ARMv4t because we use only more recent variants. Would a patch doing nothing for ARMv4t be acceptable?


- You can't use ARM code unless the object already does so (it won't work on M profile devices).
OK. What is the appropriate query to check M variants? From what I see, in the linker we can only check Tag_CPU_arch whose value TAG_CPU_ARCH_V7 is not precise enough.

- You aren't obeying --pic-veneer
I missed this one because I first worked on a 2.17 based branched.
BTW, I took me a little while to find the corresponding doc: why is it listed in the "Motorola 68HC11" section?


- Mapping symbols for long call veneers are incorrect.
I was not aware of these. I'll fix elf32_arm_output_arch_local_syms()

- Thumb-2 b.w calling a far away arm function is silently generates broken code.
I'll check that.

- BE8 mode is broken.
I wasn't aware of this mode either. From what I understand, I should just call
put_arm_insn() rather than bfd_put_32() ?



Regards,


Christophe.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]