dropbear: compile with LTO enabled
authorFelix Fietkau <nbd@nbd.name>
Wed, 11 Jul 2018 17:28:54 +0000 (19:28 +0200)
committerJo-Philipp Wich <jo@mein.io>
Tue, 18 Dec 2018 16:32:20 +0000 (17:32 +0100)
Reduces size of the .ipk on MIPS from 87k to 84k

Signed-off-by: Felix Fietkau <nbd@nbd.name>
(backported from 47b42137ce1e931ae5871952b1f98438396f5e07)
(rebased patches)
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
package/network/services/dropbear/Makefile
package/network/services/dropbear/patches/010-runtime-maxauthtries.patch
package/network/services/dropbear/patches/160-lto-jobserver.patch [new file with mode: 0644]

index 182552f6ea41f743ec2b102d1f1c3e32b2445f94..61136606ad93dd5abbfab516cebf8f1340c19605 100644 (file)
@@ -86,8 +86,8 @@ CONFIGURE_ARGS += \
        $(if $(CONFIG_DROPBEAR_ZLIB),,--disable-zlib) \
        --enable-bundled-libtom
 
-TARGET_CFLAGS += -DARGTYPE=3 -ffunction-sections -fdata-sections
-TARGET_LDFLAGS += -Wl,--gc-sections
+TARGET_CFLAGS += -DARGTYPE=3 -ffunction-sections -fdata-sections -flto
+TARGET_LDFLAGS += -Wl,--gc-sections -flto=jobserver
 
 define Build/Configure
        $(Build/Configure/Default)
index 26db3181f2d8bbbf5a73256e5ad6f39bb62f92b9..6952e81f0577dfcd24170c794f3870bdfbe2832b 100644 (file)
@@ -19,11 +19,9 @@ Signed-off-by: Kevin Darbyshire-Bryant <kevin@darbyshire-bryant.me.uk>
  svr-runopts.c | 17 +++++++++++++++++
  4 files changed, 26 insertions(+), 1 deletion(-)
 
-diff --git a/options.h b/options.h
-index 0c51bb1..4d22704 100644
 --- a/options.h
 +++ b/options.h
-@@ -284,6 +284,13 @@ Homedir is prepended unless path begins with / */
+@@ -284,6 +284,13 @@ Homedir is prepended unless path begins
  #define MAX_AUTH_TRIES 10
  #endif
  
@@ -37,8 +35,6 @@ index 0c51bb1..4d22704 100644
  /* The default file to store the daemon's process ID, for shutdown
     scripts etc. This can be overridden with the -P flag */
  #ifndef DROPBEAR_PIDFILE
-diff --git a/runopts.h b/runopts.h
-index f7c869d..2f7da63 100644
 --- a/runopts.h
 +++ b/runopts.h
 @@ -96,6 +96,7 @@ typedef struct svr_runopts {
@@ -49,11 +45,9 @@ index f7c869d..2f7da63 100644
  
  #ifdef ENABLE_SVR_REMOTETCPFWD
        int noremotetcp;
-diff --git a/svr-auth.c b/svr-auth.c
-index 577ea88..6a7ce0b 100644
 --- a/svr-auth.c
 +++ b/svr-auth.c
-@@ -362,7 +362,7 @@ void send_msg_userauth_failure(int partial, int incrfail) {
+@@ -362,7 +362,7 @@ void send_msg_userauth_failure(int parti
                ses.authstate.failcount++;
        }
  
@@ -62,11 +56,9 @@ index 577ea88..6a7ce0b 100644
                char * userstr;
                /* XXX - send disconnect ? */
                TRACE(("Max auth tries reached, exiting"))
-diff --git a/svr-runopts.c b/svr-runopts.c
-index 8f60059..1e7440f 100644
 --- a/svr-runopts.c
 +++ b/svr-runopts.c
-@@ -73,6 +73,7 @@ static void printhelp(const char * progname) {
+@@ -73,6 +73,7 @@ static void printhelp(const char * progn
                                        "-g             Disable password logins for root\n"
                                        "-B             Allow blank password logins\n"
  #endif
@@ -74,7 +66,7 @@ index 8f60059..1e7440f 100644
  #ifdef ENABLE_SVR_LOCALTCPFWD
                                        "-j             Disable local port forwarding\n"
  #endif
-@@ -106,6 +107,7 @@ static void printhelp(const char * progname) {
+@@ -106,6 +107,7 @@ static void printhelp(const char * progn
  #ifdef DROPBEAR_ECDSA
                                        ECDSA_PRIV_FILENAME,
  #endif
@@ -82,7 +74,7 @@ index 8f60059..1e7440f 100644
                                        DROPBEAR_MAX_PORTS, DROPBEAR_DEFPORT, DROPBEAR_PIDFILE,
                                        DEFAULT_RECV_WINDOW, DEFAULT_KEEPALIVE, DEFAULT_IDLE_TIMEOUT);
  }
-@@ -118,6 +120,7 @@ void svr_getopts(int argc, char ** argv) {
+@@ -118,6 +120,7 @@ void svr_getopts(int argc, char ** argv)
        char* recv_window_arg = NULL;
        char* keepalive_arg = NULL;
        char* idle_timeout_arg = NULL;
@@ -90,7 +82,7 @@ index 8f60059..1e7440f 100644
        char* keyfile = NULL;
        char c;
  
-@@ -130,6 +133,7 @@ void svr_getopts(int argc, char ** argv) {
+@@ -130,6 +133,7 @@ void svr_getopts(int argc, char ** argv)
        svr_opts.noauthpass = 0;
        svr_opts.norootpass = 0;
        svr_opts.allowblankpass = 0;
@@ -98,7 +90,7 @@ index 8f60059..1e7440f 100644
        svr_opts.inetdmode = 0;
        svr_opts.portcount = 0;
        svr_opts.hostkey = NULL;
-@@ -234,6 +238,9 @@ void svr_getopts(int argc, char ** argv) {
+@@ -234,6 +238,9 @@ void svr_getopts(int argc, char ** argv)
                                case 'I':
                                        next = &idle_timeout_arg;
                                        break;
@@ -108,7 +100,7 @@ index 8f60059..1e7440f 100644
  #if defined(ENABLE_SVR_PASSWORD_AUTH) || defined(ENABLE_SVR_PAM_AUTH)
                                case 's':
                                        svr_opts.noauthpass = 1;
-@@ -330,6 +337,16 @@ void svr_getopts(int argc, char ** argv) {
+@@ -330,6 +337,16 @@ void svr_getopts(int argc, char ** argv)
                        dropbear_exit("Bad recv window '%s'", recv_window_arg);
                }
        }
@@ -125,6 +117,3 @@ index 8f60059..1e7440f 100644
        
        if (keepalive_arg) {
                unsigned int val;
--- 
-2.7.4
-
diff --git a/package/network/services/dropbear/patches/160-lto-jobserver.patch b/package/network/services/dropbear/patches/160-lto-jobserver.patch
new file mode 100644 (file)
index 0000000..bb94492
--- /dev/null
@@ -0,0 +1,33 @@
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -163,17 +163,17 @@ dropbearkey: $(dropbearkeyobjs)
+ dropbearconvert: $(dropbearconvertobjs)
+ dropbear: $(HEADERS) $(LIBTOM_DEPS) Makefile
+-      $(CC) $(LDFLAGS) -o $@$(EXEEXT) $($@objs) $(LIBTOM_LIBS) $(LIBS) @CRYPTLIB@
++      +$(CC) $(LDFLAGS) -o $@$(EXEEXT) $($@objs) $(LIBTOM_LIBS) $(LIBS) @CRYPTLIB@
+ dbclient: $(HEADERS) $(LIBTOM_DEPS) Makefile
+-      $(CC) $(LDFLAGS) -o $@$(EXEEXT) $($@objs) $(LIBTOM_LIBS) $(LIBS)
++      +$(CC) $(LDFLAGS) -o $@$(EXEEXT) $($@objs) $(LIBTOM_LIBS) $(LIBS)
+ dropbearkey dropbearconvert: $(HEADERS) $(LIBTOM_DEPS) Makefile
+-      $(CC) $(LDFLAGS) -o $@$(EXEEXT) $($@objs) $(LIBTOM_LIBS)
++      +$(CC) $(LDFLAGS) -o $@$(EXEEXT) $($@objs) $(LIBTOM_LIBS)
+ # scp doesn't use the libs so is special.
+ scp: $(SCPOBJS)  $(HEADERS) Makefile
+-      $(CC) $(LDFLAGS) -o $@$(EXEEXT) $(SCPOBJS)
++      +$(CC) $(LDFLAGS) -o $@$(EXEEXT) $(SCPOBJS)
+ # multi-binary compilation.
+@@ -184,7 +184,7 @@ ifeq ($(MULTI),1)
+ endif
+ dropbearmulti$(EXEEXT): $(HEADERS) $(MULTIOBJS) $(LIBTOM_DEPS) Makefile
+-      $(CC) $(LDFLAGS) -o $@ $(MULTIOBJS) $(LIBTOM_LIBS) $(LIBS) @CRYPTLIB@
++      +$(CC) $(LDFLAGS) -o $@ $(MULTIOBJS) $(LIBTOM_LIBS) $(LIBS) @CRYPTLIB@
+ multibinary: dropbearmulti$(EXEEXT)