diff options
author | Jan Beulich <jbeulich@suse.com> | 2025-04-04 10:20:14 +0200 |
---|---|---|
committer | Jan Beulich <jbeulich@suse.com> | 2025-04-04 10:20:14 +0200 |
commit | 25a0668a95ea5fac9393149205aa8f137da1c362 (patch) | |
tree | 5c342256c8aececa3ff4b60c334ba13d87c028bf | |
parent | 2fb3d389d83f0ea1ac9a8d346884ffdb41e4fbb8 (diff) | |
download | binutils-25a0668a95ea5fac9393149205aa8f137da1c362.zip binutils-25a0668a95ea5fac9393149205aa8f137da1c362.tar.gz binutils-25a0668a95ea5fac9393149205aa8f137da1c362.tar.bz2 |
binutils: properly split ar and ranlib
By not linking the exact same object file twice, in particular ranlib can
benefit quite a bit from the compiler eliminating dead code.
-rw-r--r-- | binutils/Makefile.am | 6 | ||||
-rw-r--r-- | binutils/Makefile.in | 16 | ||||
-rw-r--r-- | binutils/ar.c | 4 | ||||
-rw-r--r-- | binutils/is-ranlib.c | 5 | ||||
-rw-r--r-- | binutils/not-ranlib.c | 5 |
5 files changed, 19 insertions, 17 deletions
diff --git a/binutils/Makefile.am b/binutils/Makefile.am index 243b38c..1528302 100644 --- a/binutils/Makefile.am +++ b/binutils/Makefile.am @@ -287,13 +287,13 @@ endif cxxfilt_SOURCES = cxxfilt.c $(BULIBS) -ar_SOURCES = arparse.y arlex.l ar.c not-ranlib.c arsup.c rename.c binemul.c \ +ar_SOURCES = arparse.y arlex.l not-ranlib.c arsup.c rename.c binemul.c \ emul_$(EMULATION).c $(BULIBS) EXTRA_ar_SOURCES = $(CFILES) ar_LDADD = $(BFDLIB) $(LIBIBERTY) $(LEXLIB) $(LIBINTL) -ranlib_SOURCES = ar.c is-ranlib.c arparse.y arlex.l arsup.c rename.c \ - binemul.c emul_$(EMULATION).c $(BULIBS) +ranlib_SOURCES = arparse.y arlex.l is-ranlib.c arsup.c rename.c binemul.c \ + emul_$(EMULATION).c $(BULIBS) ranlib_LDADD = $(BFDLIB) $(LIBIBERTY) $(LEXLIB) $(LIBINTL) addr2line_SOURCES = addr2line.c $(BULIBS) diff --git a/binutils/Makefile.in b/binutils/Makefile.in index c2c31bf..549b5a3 100644 --- a/binutils/Makefile.in +++ b/binutils/Makefile.in @@ -208,9 +208,9 @@ AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = -am_ar_OBJECTS = arparse.$(OBJEXT) arlex.$(OBJEXT) ar.$(OBJEXT) \ - not-ranlib.$(OBJEXT) arsup.$(OBJEXT) rename.$(OBJEXT) \ - binemul.$(OBJEXT) emul_$(EMULATION).$(OBJEXT) $(am__objects_1) +am_ar_OBJECTS = arparse.$(OBJEXT) arlex.$(OBJEXT) not-ranlib.$(OBJEXT) \ + arsup.$(OBJEXT) rename.$(OBJEXT) binemul.$(OBJEXT) \ + emul_$(EMULATION).$(OBJEXT) $(am__objects_1) ar_OBJECTS = $(am_ar_OBJECTS) bfdtest1_SOURCES = bfdtest1.c bfdtest1_OBJECTS = bfdtest1.$(OBJEXT) @@ -249,8 +249,8 @@ am_objdump_OBJECTS = objdump.$(OBJEXT) dwarf.$(OBJEXT) prdbg.$(OBJEXT) \ $(am__objects_2) objdump_OBJECTS = $(am_objdump_OBJECTS) @ENABLE_LIBCTF_TRUE@am__DEPENDENCIES_2 = ../libctf/libctf.la -am_ranlib_OBJECTS = ar.$(OBJEXT) is-ranlib.$(OBJEXT) arparse.$(OBJEXT) \ - arlex.$(OBJEXT) arsup.$(OBJEXT) rename.$(OBJEXT) \ +am_ranlib_OBJECTS = arparse.$(OBJEXT) arlex.$(OBJEXT) \ + is-ranlib.$(OBJEXT) arsup.$(OBJEXT) rename.$(OBJEXT) \ binemul.$(OBJEXT) emul_$(EMULATION).$(OBJEXT) $(am__objects_1) ranlib_OBJECTS = $(am_ranlib_OBJECTS) am_readelf_OBJECTS = readelf.$(OBJEXT) version.$(OBJEXT) \ @@ -805,13 +805,13 @@ objdump_SOURCES = objdump.c dwarf.c prdbg.c demanguse.c $(DEBUG_SRCS) $(BULIBS) EXTRA_objdump_SOURCES = od-elf32_avr.c od-macho.c od-xcoff.c od-pe.c objdump_LDADD = $(OBJDUMP_PRIVATE_OFILES) $(OPCODES) $(LIBCTF) $(BFDLIB) $(LIBIBERTY) $(LIBINTL) $(DEBUGINFOD_LIBS) $(LIBSFRAME) cxxfilt_SOURCES = cxxfilt.c $(BULIBS) -ar_SOURCES = arparse.y arlex.l ar.c not-ranlib.c arsup.c rename.c binemul.c \ +ar_SOURCES = arparse.y arlex.l not-ranlib.c arsup.c rename.c binemul.c \ emul_$(EMULATION).c $(BULIBS) EXTRA_ar_SOURCES = $(CFILES) ar_LDADD = $(BFDLIB) $(LIBIBERTY) $(LEXLIB) $(LIBINTL) -ranlib_SOURCES = ar.c is-ranlib.c arparse.y arlex.l arsup.c rename.c \ - binemul.c emul_$(EMULATION).c $(BULIBS) +ranlib_SOURCES = arparse.y arlex.l is-ranlib.c arsup.c rename.c binemul.c \ + emul_$(EMULATION).c $(BULIBS) ranlib_LDADD = $(BFDLIB) $(LIBIBERTY) $(LEXLIB) $(LIBINTL) addr2line_SOURCES = addr2line.c $(BULIBS) diff --git a/binutils/ar.c b/binutils/ar.c index 40cad57..a61d572 100644 --- a/binutils/ar.c +++ b/binutils/ar.c @@ -67,7 +67,9 @@ static int mri_mode; /* This flag distinguishes between ar and ranlib: 1 means this is 'ranlib'; 0 means this is 'ar'. -1 means if we should use argv[0] to decide. */ +#ifndef is_ranlib extern int is_ranlib; +#endif /* Nonzero means don't warn about creating the archive file if necessary. */ int silent_create = 0; @@ -735,6 +737,7 @@ main (int argc, char **argv) expandargv (&argc, &argv); +#ifndef is_ranlib if (is_ranlib < 0) { const char *temp = lbasename (program_name); @@ -745,6 +748,7 @@ main (int argc, char **argv) else is_ranlib = 0; } +#endif if (bfd_init () != BFD_INIT_MAGIC) fatal (_("fatal error: libbfd ABI mismatch")); diff --git a/binutils/is-ranlib.c b/binutils/is-ranlib.c index 4a04adb..47296eb 100644 --- a/binutils/is-ranlib.c +++ b/binutils/is-ranlib.c @@ -17,6 +17,5 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ -/* Linked with ar.o to flag that this program is 'ranlib' (not 'ar'). */ - -int is_ranlib = 1; +#define is_ranlib 1 +#include "ar.c" diff --git a/binutils/not-ranlib.c b/binutils/not-ranlib.c index 5fc0d6a..17da296 100644 --- a/binutils/not-ranlib.c +++ b/binutils/not-ranlib.c @@ -17,6 +17,5 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ -/* Linked with ar.o to flag that this program is 'ar' (not 'ranlib'). */ - -int is_ranlib = 0; +#define is_ranlib 0 +#include "ar.c" |