]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
binutils: properly split ar and ranlib
authorJan Beulich <jbeulich@suse.com>
Fri, 4 Apr 2025 08:20:14 +0000 (10:20 +0200)
committerJan Beulich <jbeulich@suse.com>
Fri, 4 Apr 2025 08:20:14 +0000 (10:20 +0200)
By not linking the exact same object file twice, in particular ranlib can
benefit quite a bit from the compiler eliminating dead code.

binutils/Makefile.am
binutils/Makefile.in
binutils/ar.c
binutils/is-ranlib.c
binutils/not-ranlib.c

index 243b38c145bcf132426d2efaacad7b2527197017..1528302ea6179d3f38f684dc72a7f890bdb412d8 100644 (file)
@@ -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)
index c2c31bf2ae22c46d622c0ebdaf3c44c3562940a8..549b5a361c87d0415f88e8717100c0dcd01520dd 100644 (file)
@@ -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)
index 40cad576b46c37da75872d0b9adfaa8db850d36b..a61d572c0e00e09703a47edcc324df3efc39858a 100644 (file)
@@ -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"));
index 4a04adbd984d00457bdb355faac19ce077335ef0..47296eb9cf63d347f21e40f48e84c132a89524b4 100644 (file)
@@ -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"
index 5fc0d6a19d39282cb79d9bd1408a727c81a3afe0..17da2964625b685e6df73eea57876e168139dad5 100644 (file)
@@ -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"