On Sun, Dec 01, 2013 at 07:06:32AM +0100, Vladimir 'φ-coder/phcoder' Serbinenko
wrote:
> Current ARM relocation doesn't handle the cases when the relocation cant
> be satisfied directly (like thumb call over 1M of distance or jump24 to
> thumb mode. Attached patch adds missing tampoline and missing relocation
> handling to EFI code (it didn't allow to use ARM (no-Thumb) binary with
> EFI).
> I couldn't test it on either arm-efi or ARM64
Amusingly, I wrote the attached on Saturday, based on a bug report
from Jon Masters @ Red Hat. Although an unlikely corner case, it does
probably need the addition of grub_arch_dl_get_tramp_got_size() from
your implementation in order to ensure the "veneers"[1] don't end up
in a heap region different to and too far away from the one the module
is loaded into.
I'll have a look and a poke on both 32- and 64-bit stuff and respond..
I would say the modifications to grub-mkimage for arm64 are probably
unnessecary: AArch64 relative branch range is +-128MB, and I don't
think we'll see grub kernel images that big.
/
Leif
[1]
ARM terminology - "trampolines" for ARM refers to something generated
on the stack, which we don't see anymore since the nested functions were
removed.
_______________________________________________
Grub-devel mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/grub-devel