[oe] [PATCH] prelink: Added prelink-20100106, which works on ARM.

James Limbouris james at digitalmatter.com.au
Wed Jun 15 01:16:22 UTC 2011


On Tuesday, 14 June 2011 5:17 PM, Phil Blundell wrote:
> On Tue, 2011-06-14 at 15:49 +0800, James Limbouris wrote:
> > This version of prelink, together with a patch by Carsten Munk
> > <carsten at maemo.org>, taken from MeeGo, fixes an ARM incompatibility
> > with 20090925.
> >
> > Signed-off-by: James Limbouris <james at digitalmatter.com.au>
> > ---
> >  .../prelink-20100106-arm-fix.patch                 |   86 ++++++++++++++++++++
> >  recipes/prelink/prelink_20100106.bb                |   53 ++++++++++++
> >  2 files changed, 139 insertions(+), 0 deletions(-)  create mode
> > 100755 recipes/prelink/prelink-20100106/prelink-20100106-arm-fix.patch
> >  create mode 100644 recipes/prelink/prelink_20100106.bb
> >
> > diff --git
> > a/recipes/prelink/prelink-20100106/prelink-20100106-arm-fix.patch
> > b/recipes/prelink/prelink-20100106/prelink-20100106-arm-fix.patch
> > new file mode 100755
> > index 0000000..a694541
> > --- /dev/null
> > +++ b/recipes/prelink/prelink-20100106/prelink-20100106-arm-fix.patch
> > @@ -0,0 +1,86 @@
> > +diff -ru prelink-old/src/arch-arm.c prelink/src/arch-arm.c
> > +--- prelink-old/src/arch-arm.c	2009-06-15 07:37:50.000000000 -0400
> > ++++ prelink/src/arch-arm.c	2010-08-17 03:35:05.000000000 -0400
> > +@@ -832,7 +832,7 @@
> > +   .R_COPY = R_ARM_COPY,
> > +   .R_RELATIVE = R_ARM_RELATIVE,
> > +   .rtype_class_valid = RTYPE_CLASS_VALID,
> > +-  .dynamic_linker = "/lib/ld-linux.so.2",
> > ++  .dynamic_linker = "/lib/ld-linux.so.3",
> 
> That looks like it's going to break OABI binaries.  I'm not sure to what extent
> we care about those anymore, but I'm not sure I would describe this as a
> "fix" exactly.
> 
> > +-  switch (vfork ())
> > ++  switch (pid=fork ())
> > +     {
> > +     case -1:
> > +       error (0, errno, "Could not run %s", path); @@ -63,7 +65,9 @@
> > + 	  close (p[1]);
> > + 	}
> > +       dup2 (1, 2);
> > +-      execve (path, argv, envp);
> > ++      while (*envp)
> > ++        putenv(*envp++);
> > ++      execv (path, argv);
> > +       _exit (127);
> 
> What's that about?
> 
> p.

Hi,

I believe the vfork() changes are for qemu compatibility - I don't know what the issue was exactly.

I didn't realise the linker version was for EABI/OABI compatibility - I guess prelink should determine the ABI and choose accordingly... 
But I don't have any OABI binaries on my system at all...
So we can:
	1. Fix it properly
	2. Switch from OABI only to EABI only
	3. Make a prelink-eabi recipe.

I don't really have the patience for 1., since I have no OABI binaries. Does anyone have any preferences here?

Regards,
James




More information about the Openembedded-devel mailing list