aboutsummaryrefslogtreecommitdiff
path: root/usr.sbin/crunch/crunchide
diff options
context:
space:
mode:
authorFangrui Song <i@maskray.me>2022-02-09 00:59:53 +0000
committerEd Maste <emaste@FreeBSD.org>2022-02-17 01:03:53 +0000
commit31ec0c5834b051a512508ba3291e6b848d4643e5 (patch)
treee498aae7e57924fe19e409c5b2b2172109572480 /usr.sbin/crunch/crunchide
parent1fa9903bee3b642049d1705a714bd775b7d4e678 (diff)
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 (cherry picked from commit ec81497cc7260b26c2af615c54aa80f515d6c539)
Diffstat (limited to 'usr.sbin/crunch/crunchide')
-rw-r--r--usr.sbin/crunch/crunchide/crunchide.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/usr.sbin/crunch/crunchide/crunchide.c b/usr.sbin/crunch/crunchide/crunchide.c
index 1f2f98893bac..bd663e1d57bd 100644
--- a/usr.sbin/crunch/crunchide/crunchide.c
+++ b/usr.sbin/crunch/crunchide/crunchide.c
@@ -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