Message ID | 20191101205416.17599-1-hauke@hauke-m.de |
---|---|
State | Accepted |
Delegated to: | Hauke Mehrtens |
Headers | show |
Series | [OpenWrt-Devel,1/4] dnsmasq: Activate LTO | expand |
On Fri, Nov 1, 2019 at 1:55 PM Hauke Mehrtens <hauke@hauke-m.de> wrote: > > This decreases the binary size when PIE ASLR is activated by 8% on MIPS BE. A small note on LTO: These packages do not generate libraries, but sometimes, LTO messes up dynamic linking (static even more so). For example: https://github.com/openwrt/packages/blob/master/libs/libwangle/Makefile#L31 is missing -flto specifically because a package that depends on it (openr, not in the packages feed yet) fails to link libwangle when -flto is specified for libwangle (a specific function was optimized out of the library). > > old: > 202,020 /usr/sbin/dnsmasq > > new: > 185,676 /usr/sbin/dnsmasq > > Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> > --- > package/network/services/dnsmasq/Makefile | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/package/network/services/dnsmasq/Makefile b/package/network/services/dnsmasq/Makefile > index 5c114eb1c6..e86b031e3f 100644 > --- a/package/network/services/dnsmasq/Makefile > +++ b/package/network/services/dnsmasq/Makefile > @@ -127,8 +127,8 @@ endef > Package/dnsmasq-dhcpv6/conffiles = $(Package/dnsmasq/conffiles) > Package/dnsmasq-full/conffiles = $(Package/dnsmasq/conffiles) > > -TARGET_CFLAGS += -ffunction-sections -fdata-sections > -TARGET_LDFLAGS += -Wl,--gc-sections I am curious why these were removed. > +TARGET_CFLAGS += -flto > +TARGET_LDFLAGS += -flto=jobserver > > COPTS = -DHAVE_UBUS \ > $(if $(CONFIG_IPV6),,-DNO_IPV6) > -- > 2.20.1 > > > _______________________________________________ > openwrt-devel mailing list > openwrt-devel@lists.openwrt.org > https://lists.openwrt.org/mailman/listinfo/openwrt-devel
On 11/1/19 10:08 PM, Rosen Penev wrote: > On Fri, Nov 1, 2019 at 1:55 PM Hauke Mehrtens <hauke@hauke-m.de> wrote: >> >> This decreases the binary size when PIE ASLR is activated by 8% on MIPS BE. > A small note on LTO: > > These packages do not generate libraries, but sometimes, LTO messes up > dynamic linking (static even more so). > > For example: https://github.com/openwrt/packages/blob/master/libs/libwangle/Makefile#L31 > is missing -flto specifically because a package that depends on it > (openr, not in the packages feed yet) fails to link libwangle when > -flto is specified for libwangle (a specific function was optimized > out of the library). I activated LTO globally and also saw multiple link problems, but I think it was mostly related to static linking. If a function is optimized out it was probably not correctly declared as needed. >> >> old: >> 202,020 /usr/sbin/dnsmasq >> >> new: >> 185,676 /usr/sbin/dnsmasq >> >> Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> >> --- >> package/network/services/dnsmasq/Makefile | 4 ++-- >> 1 file changed, 2 insertions(+), 2 deletions(-) >> >> diff --git a/package/network/services/dnsmasq/Makefile b/package/network/services/dnsmasq/Makefile >> index 5c114eb1c6..e86b031e3f 100644 >> --- a/package/network/services/dnsmasq/Makefile >> +++ b/package/network/services/dnsmasq/Makefile >> @@ -127,8 +127,8 @@ endef >> Package/dnsmasq-dhcpv6/conffiles = $(Package/dnsmasq/conffiles) >> Package/dnsmasq-full/conffiles = $(Package/dnsmasq/conffiles) >> >> -TARGET_CFLAGS += -ffunction-sections -fdata-sections >> -TARGET_LDFLAGS += -Wl,--gc-sections > I am curious why these were removed. I saw no size differences. These options are also used to allow the linker to remove unused functions and data sections and with LTO the compiler does the same just more so this should not be needed any more. >> +TARGET_CFLAGS += -flto >> +TARGET_LDFLAGS += -flto=jobserver >> >> COPTS = -DHAVE_UBUS \ >> $(if $(CONFIG_IPV6),,-DNO_IPV6) >> -- >> 2.20.1
On Fri, 1 Nov 2019 at 21:55, Hauke Mehrtens <hauke@hauke-m.de> wrote: > > This decreases the binary size when PIE ASLR is activated by 8% on MIPS BE. > > old: > 202,020 /usr/sbin/dnsmasq > > new: > 185,676 /usr/sbin/dnsmasq Nice reduction. > > Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> > --- > package/network/services/dnsmasq/Makefile | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/package/network/services/dnsmasq/Makefile b/package/network/services/dnsmasq/Makefile > index 5c114eb1c6..e86b031e3f 100644 > --- a/package/network/services/dnsmasq/Makefile > +++ b/package/network/services/dnsmasq/Makefile > @@ -127,8 +127,8 @@ endef > Package/dnsmasq-dhcpv6/conffiles = $(Package/dnsmasq/conffiles) > Package/dnsmasq-full/conffiles = $(Package/dnsmasq/conffiles) > > -TARGET_CFLAGS += -ffunction-sections -fdata-sections > -TARGET_LDFLAGS += -Wl,--gc-sections > +TARGET_CFLAGS += -flto > +TARGET_LDFLAGS += -flto=jobserver Maybe add a PKG_LTO (or so) flag packages can set, and add these flags then automatically? Less code churn per package. Regards Jonas
On Sun, Nov 3, 2019 at 11:23 AM Jonas Gorski <jonas.gorski@gmail.com> wrote: > > On Fri, 1 Nov 2019 at 21:55, Hauke Mehrtens <hauke@hauke-m.de> wrote: > > > > This decreases the binary size when PIE ASLR is activated by 8% on MIPS BE. > > > > old: > > 202,020 /usr/sbin/dnsmasq > > > > new: > > 185,676 /usr/sbin/dnsmasq > > Nice reduction. > > > > > Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> > > --- > > package/network/services/dnsmasq/Makefile | 4 ++-- > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > diff --git a/package/network/services/dnsmasq/Makefile b/package/network/services/dnsmasq/Makefile > > index 5c114eb1c6..e86b031e3f 100644 > > --- a/package/network/services/dnsmasq/Makefile > > +++ b/package/network/services/dnsmasq/Makefile > > @@ -127,8 +127,8 @@ endef > > Package/dnsmasq-dhcpv6/conffiles = $(Package/dnsmasq/conffiles) > > Package/dnsmasq-full/conffiles = $(Package/dnsmasq/conffiles) > > > > -TARGET_CFLAGS += -ffunction-sections -fdata-sections > > -TARGET_LDFLAGS += -Wl,--gc-sections > > +TARGET_CFLAGS += -flto > > +TARGET_LDFLAGS += -flto=jobserver > > Maybe add a PKG_LTO (or so) flag packages can set, and add these flags > then automatically? Less code churn per package. Second > > > Regards > Jonas > > _______________________________________________ > openwrt-devel mailing list > openwrt-devel@lists.openwrt.org > https://lists.openwrt.org/mailman/listinfo/openwrt-devel
diff --git a/package/network/services/dnsmasq/Makefile b/package/network/services/dnsmasq/Makefile index 5c114eb1c6..e86b031e3f 100644 --- a/package/network/services/dnsmasq/Makefile +++ b/package/network/services/dnsmasq/Makefile @@ -127,8 +127,8 @@ endef Package/dnsmasq-dhcpv6/conffiles = $(Package/dnsmasq/conffiles) Package/dnsmasq-full/conffiles = $(Package/dnsmasq/conffiles) -TARGET_CFLAGS += -ffunction-sections -fdata-sections -TARGET_LDFLAGS += -Wl,--gc-sections +TARGET_CFLAGS += -flto +TARGET_LDFLAGS += -flto=jobserver COPTS = -DHAVE_UBUS \ $(if $(CONFIG_IPV6),,-DNO_IPV6)
This decreases the binary size when PIE ASLR is activated by 8% on MIPS BE. old: 202,020 /usr/sbin/dnsmasq new: 185,676 /usr/sbin/dnsmasq Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> --- package/network/services/dnsmasq/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)