grub-devel
[Top][All Lists]
Advanced

[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 15:14:50 +0100
User-agent: Mutt/1.5.21 (2010-09-15)

On Mon, Dec 02, 2013 at 02:30:51PM +0100, Leif Lindholm wrote:
> > >>> 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.
> > > 
> > I've uploaded current work to phcoder/reloc
> 
> Ok, so I've tested this on arm64, and it works on the commercial FVP
> Base model (which does not trigger veneer generation due to its runtime
> memory map), but crashes on the Foundation model (which does).
> So the generic dl refactoring seems correct, but somehing about the
> veneers is fishy.

Well, this one seems to be because mod->trampptr is never initilised
(which should be a problem also on the other archs?).

With
diff --git a/grub-core/kern/dl.c b/grub-core/kern/dl.c
index 33ccc98..92027e0 100644
--- a/grub-core/kern/dl.c
+++ b/grub-core/kern/dl.c
@@ -317,6 +317,7 @@ grub_dl_load_segments (grub_dl_t mod, const Elf_Ehdr *e)
 #if !defined (__i386__) && !defined (__x86_64__) && !defined (__sparc__)
   ptr = (char *) ALIGN_UP ((grub_addr_t) ptr, GRUB_ARCH_DL_TRAMP_ALIGN);
   mod->tramp = ptr;
+  mod->trampptr = (ptr + tramp);
   ptr += tramp;
   ptr = (char *) ALIGN_UP ((grub_addr_t) ptr, GRUB_ARCH_DL_GOT_ALIGN);
   mod->got = ptr;

This runs successfully on my foundation model.

Presumably, on other architectures a similar thing for mod->gotptr is
required?

/
    Leif



reply via email to

[Prev in Thread] Current Thread [Next in Thread]