Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 27 Nov 2012 16:00:05 +0800
From:      pete <petechou@gmail.com>
To:        freebsd-toolchain@freebsd.org
Subject:   crunchide breaks object files when using mclinker to do base system linking
Message-ID:  <CANWS6neEevzNZjcr%2Bgkk1xw1cG3%2Bc%2BJ6O6SK-43m5S%2BWMDrB7g@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
Hi,

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.

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.)

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

----gnu ld------------
+ elf header         +
----------------------
+                    +
+                    +
----------------------
+ elf section header +
----------------------
+ symbol table       +
----------------------
+ string table       +
----------------------

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)

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*".

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?

Any idea?

Thanks,
Pete



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CANWS6neEevzNZjcr%2Bgkk1xw1cG3%2Bc%2BJ6O6SK-43m5S%2BWMDrB7g>