[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH, RFC, RFT] ARM relocation fixes
From: |
Leif Lindholm |
Subject: |
Re: [PATCH, RFC, RFT] ARM relocation fixes |
Date: |
Mon, 2 Dec 2013 12:28:46 +0100 |
User-agent: |
Mutt/1.5.21 (2010-09-15) |
On Mon, Dec 02, 2013 at 11:59:44AM +0100, Vladimir 'φ-coder/phcoder' Serbinenko
wrote:
> On 02.12.2013 11:53, Leif Lindholm wrote:
> > 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
> Nothing is attached to your mail. Right now could you pause work on
> */dl.c: I'm reorganising them to declare more of it as platform
> independent and unify handling (ARM dl.c is unnecessarily different from
> other versions and forget some of ELF handling)
Ok, I'll hold off.
> > 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.
>
> There are no changes of this kind to mkimage. I only added missing ARM
> handling and the functions which now became mkimage-specific were moved
> to it.
Well, I was referring specifically to:
--- a/util/grub-mkimagexx.c
+++ b/util/grub-mkimagexx.c
@@ -731,13 +731,13 @@ SUFFIX (relocate_addresses) (Elf_Ehdr *e, Elf_Shdr
*sections,
case R_AARCH64_JUMP26:
case R_AARCH64_CALL26:
{
- grub_err_t err;
sym_addr -= offset;
sym_addr -= SUFFIX (entry_point);
- err = grub_arm64_reloc_xxxx26((grub_uint32_t *)target,
+ if (!grub_arm_64_check_xxxx26_offset (sym_addr))
+ grub_util_error ("%s", _("CALL26 Relocation out of
range"));
+
+ grub_arm64_set_xxxx26_offset((grub_uint32_t *)target,
sym_addr);
- if (err)
- grub_util_error ("%s", grub_errmsg);
}
break;
default:
which isn't wrong, but that offset test can only fail when your GRUB
kernel is greater than 128MB in size.
/
Leif
- [PATCH, RFC, RFT] ARM relocation fixes, Vladimir 'φ-coder/phcoder' Serbinenko, 2013/12/01
- Re: [PATCH, RFC, RFT] ARM relocation fixes, Leif Lindholm, 2013/12/02
- Re: [PATCH, RFC, RFT] ARM relocation fixes, Leif Lindholm, 2013/12/02
- Re: [PATCH, RFC, RFT] ARM relocation fixes, Vladimir 'φ-coder/phcoder' Serbinenko, 2013/12/02
- Re: [PATCH, RFC, RFT] ARM relocation fixes,
Leif Lindholm <=
- Re: [PATCH, RFC, RFT] ARM relocation fixes, Vladimir 'φ-coder/phcoder' Serbinenko, 2013/12/02
- Re: [PATCH, RFC, RFT] ARM relocation fixes, Vladimir 'φ-coder/phcoder' Serbinenko, 2013/12/02
- Re: [PATCH, RFC, RFT] ARM relocation fixes, Leif Lindholm, 2013/12/02
- Re: [PATCH, RFC, RFT] ARM relocation fixes, Leif Lindholm, 2013/12/02
- Re: [PATCH, RFC, RFT] ARM relocation fixes, Leif Lindholm, 2013/12/02
- Re: [PATCH, RFC, RFT] ARM relocation fixes, Leif Lindholm, 2013/12/02
- Re: [PATCH, RFC, RFT] ARM relocation fixes, Vladimir 'φ-coder/phcoder' Serbinenko, 2013/12/02
- Re: [PATCH, RFC, RFT] ARM relocation fixes, Vladimir 'φ-coder/phcoder' Serbinenko, 2013/12/02
- Re: [PATCH, RFC, RFT] ARM relocation fixes, Vladimir 'φ-coder/phcoder' Serbinenko, 2013/12/02
- Re: [PATCH, RFC, RFT] ARM relocation fixes, Leif Lindholm, 2013/12/02