crunchgen: remove -dc from linker invocation
In GNU ld and ld.lld, -dc is used with -r to allocate space to COMMON symbols. It is presumably to work around legacy code which cannot handle COMMON symbols in relocatable output. ld.lld may remove -dc or make it a no-op for the 15.0.0 release. As of 7420b323a014 crunch/crunchide does not require -dc, as the symbol hiding technique no longer relied on making symbols local. In addition -fno-common is now the default in Clang and GCC, so -dc serves no purpose as the compiler does not generate COMMON symbols anyway. See https://maskray.me/blog/2022-02-06-all-about-common-symbols for more detail on common symbols. Reviewed by: emaste MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D34215
This commit is contained in:
parent
d73d40c17f
commit
ec81497cc7
@ -1123,7 +1123,7 @@ prog_makefile_rules(FILE *outmk, prog_t *p)
|
||||
fprintf(outmk, " $(%s_LIBS)", p->ident);
|
||||
|
||||
fprintf(outmk, "\n");
|
||||
fprintf(outmk, "\t$(CC) -nostdlib -Wl,-dc -r -o %s.lo %s_stub.o $(%s_OBJPATHS)",
|
||||
fprintf(outmk, "\t$(CC) -nostdlib -r -o %s.lo %s_stub.o $(%s_OBJPATHS)",
|
||||
p->name, p->name, p->ident);
|
||||
if (p->libs)
|
||||
fprintf(outmk, " $(%s_LIBS)", p->ident);
|
||||
|
@ -28,9 +28,7 @@
|
||||
/*
|
||||
* crunchide.c - tiptoes through a symbol table, hiding all defined
|
||||
* global symbols. Allows the user to supply a "keep list" of symbols
|
||||
* that are not to be hidden. This program relies on the use of the
|
||||
* linker's -dc flag to actually put global bss data into the file's
|
||||
* bss segment (rather than leaving it as undefined "common" data).
|
||||
* that are not to be hidden.
|
||||
*
|
||||
* The point of all this is to allow multiple programs to be linked
|
||||
* together without getting multiple-defined errors.
|
||||
@ -40,7 +38,7 @@
|
||||
* int foo_main(int argc, char **argv){ return main(argc, argv); }
|
||||
* like so:
|
||||
* cc -c foo.c foostub.c
|
||||
* ld -dc -r foo.o foostub.o -o foo.combined.o
|
||||
* ld -r foo.o foostub.o -o foo.combined.o
|
||||
* crunchide -k _foo_main foo.combined.o
|
||||
* at this point, foo.combined.o can be linked with another program
|
||||
* and invoked with "foo_main(argc, argv)". foo's main() and any
|
||||
|
Loading…
x
Reference in New Issue
Block a user