Date: Tue, 27 Nov 2012 09:16:49 +0100 From: Erik Cederstrand <erik@cederstrand.dk> To: pete <petechou@gmail.com> Cc: freebsd-toolchain@freebsd.org Subject: Re: crunchide breaks object files when using mclinker to do base system linking Message-ID: <AE74F0D1-483A-4BAB-B7FA-5DD657C94E7A@cederstrand.dk> In-Reply-To: <CANWS6neEevzNZjcr%2Bgkk1xw1cG3%2Bc%2BJ6O6SK-43m5S%2BWMDrB7g@mail.gmail.com> References: <CANWS6neEevzNZjcr%2Bgkk1xw1cG3%2Bc%2BJ6O6SK-43m5S%2BWMDrB7g@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Den 27/11/2012 kl. 09.00 skrev pete <petechou@gmail.com>: > Hi, >=20 > I meet a problem when using mclinker to do base system linking. And = the > problem is crunchide is gnu ld specific. it presumes the section = layout of > a object file is like what gnu ld generates. >=20 > To make it clear, gnu ld would generate the following layout. And = crunchide > will update elf section header, symbol table, and then string table. = (The > string table is likely enlarged.) >=20 > ld -dc -r -o cat.lo cat_stub.o > /usr/obj/usr/src/rescue/rescue//usr/src/bin/cat/cat.o > crunchide -k _crunched_cat_stub cat.lo >=20 > ----gnu ld------------ > + elf header + > ---------------------- > + + > + + > ---------------------- > + elf section header + > ---------------------- > + symbol table + > ---------------------- > + string table + > ---------------------- >=20 > However, mclinker does not produce this layout, but put elf section = header > in the end of file. And then crunchide will break the object file = generated > by mclinker. (elf section header is overwritten by new strings) >=20 > I know the layout generated by gold linker is also different to gnu = ld. On > the other hand, we can find only ELF header is required to be fixed in = *"System > V Application Binary Interface*". >=20 > For mclinker, I think it's not difficult to add the change to be = compatible > with gnu ld. But do you think if it will be better to modify crunchide > utility to support more elf linkers? Unless you have compelling technical reasons to keep your layout, I = think it's better for mclinker to be as compatible with GNU ld as = possible, even though your layout also adheres to the standards. If = other tools in FreeBSD or other platforms also make assumptions about = the header layout, you'll end up patching lots of tools instead of = working on mclinker. With that in mind, I also think it's worthwhile to patch our crunchide = to be more permissive. If you have the resources, please send patches. Thanks, Erik=
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AE74F0D1-483A-4BAB-B7FA-5DD657C94E7A>