Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 7 Dec 2012 14:41:16 -0500
From:      Kurt Lidl <lidl@pix.net>
To:        pete <petechou@gmail.com>
Cc:        FreeBSD Hackers <hackers@freebsd.org>, Erik Cederstrand <erik@cederstrand.dk>
Subject:   Re: [CFT/RFC] Make crunched compatible with external linkers
Message-ID:  <20121207194115.GA94794@pix.net>
In-Reply-To: <CANWS6nc7t0=78v0nOtoFfcsukaiBnEeQsTj-bwqC3JEYHQ_Cxg@mail.gmail.com>
References:  <779286D2-F710-45FF-8C38-59513B5C1B7D@cederstrand.dk> <20121204191140.GA56790@pix.net> <CANWS6nc7t0=78v0nOtoFfcsukaiBnEeQsTj-bwqC3JEYHQ_Cxg@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, Dec 06, 2012 at 10:39:27AM +0800, pete wrote:
> On Wed, Dec 5, 2012 at 3:11 AM, Kurt Lidl <lidl@pix.net> wrote:
> 
> > On Tue, Dec 04, 2012 at 11:06:56AM +0100, Erik Cederstrand wrote:
> > > Hello hackers,
> > >
> > > The following PR patches crunchide(1) to accept object files produced by
> > the gold and mclinker linkers:
> > http://www.freebsd.org/cgi/query-pr.cgi?pr=bin%2F174011
> > >
> > > On behalf of the submitter, I'd like to request a review of the patch,
> > and testing of crunchide/crunchgen especially on SPARC and ARM.
> >
> > I applied this patch to a 9/stable source tree, and was able to
> > "buildworld" with it in place, on my sparc64 machine.
> >
> > I know that's not a great test case, but the patched binary
> > is good enough to generate the objects that are needed for the
> > 'rescue' binary.  And that binary runs at least a trivial test
> > of '/usr/obj/usr/src/rescue/rescue/rescue ifconfig -a' and
> > produces correct output.
> >
> > -Kurt
> >
> 
> Really thanks for your help!
> 
> This patch is for crunchide to handle ELF object file in a more general
> way, but not be limited to the custom section layout (i.e., section
> headers, .symtab, and then .strtab are @EOF). And if we are still using
> ld(1), I think the patched crunchide should produce exactly the same output
> as before. Then the rescue binary would also be the same.
> 
> I checked and verified the intermediate object files and rescue binary (via
> binary diff) on X86 FreeBSD 9.0. If you can also kindly help check this on
> different archs and feedback, I think the result will be very helpful.

Well, I updated my sparc64 machine's source tree to the latest
stable/9 code, and then did two complete buildworld runs, one without
the changes to the crunchide code, and second with the crunchide changes.

Diffing the obj tree (selectively) shows:

root@spork-143: diff -r usr.modified/src/rescue usr/src/rescue
Files usr.modified/src/rescue/librescue/librescue.a and usr/src/rescue/librescue/librescue.a differ
root@spork-144: md5 usr.modified/src/rescue/rescue/rescue usr/src/rescue/rescue/rescue
MD5 (usr.modified/src/rescue/rescue/rescue) = 75fc2a1b06ae38df2be668eff7cec72e
MD5 (usr/src/rescue/rescue/rescue) = 75fc2a1b06ae38df2be668eff7cec72e

And:
root@spork-143: diff -r  usr.modified/src/usr.sbin/crunch usr/src/usr.sbin/crunch
diff -r usr.modified/src/usr.sbin/crunch/crunchide/.depend usr/src/usr.sbin/crunch/crunchide/.depend
65,68d64
<   /usr/obj/usr/src/tmp/usr/include/limits.h \
<   /usr/obj/usr/src/tmp/usr/include/sys/limits.h \
<   /usr/obj/usr/src/tmp/usr/include/machine/_limits.h \
<   /usr/obj/usr/src/tmp/usr/include/sys/syslimits.h \
Files usr.modified/src/usr.sbin/crunch/crunchide/crunchide and usr/src/usr.sbin/crunch/crunchide/crunchide differ
Files usr.modified/src/usr.sbin/crunch/crunchide/exec_elf64.o and usr/src/usr.sbin/crunch/crunchide/exec_elf64.o differ

So, the crunchide binaries are different (as expected) and the resulting
'rescue' binary is identical.

-Kurt



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20121207194115.GA94794>