Search Linux Wireless

Re: iw 5.0.1 broken when compiled with lto

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2/26/19 9:59 PM, Hauke Mehrtens wrote:
> Hi Johannes,
> 
> When I compile iw 5.0.1 with link time optimization for MIPS32r2 big
> endian all commands are removed, it looks like this:
> ------------------------------------------------------------------------
> root@OpenWrt:/# iw
> Usage:  iw [options] command
> Options:
>         --debug         enable netlink debugging
>         --version       show version (5.0.1)
> Commands:
> 
> Commands that use the netdev ('dev') can also be given the
> 'wdev' instead to identify the device.
> 
> You can omit the 'phy' or 'dev' if the identification is unique,
> e.g. "iw wlan0 info" or "iw phy0 info". (Don't when scripting.)
> 
> Do NOT screenscrape this tool, we don't consider its output stable.
> 
> root@OpenWrt:/#
> ------------------------------------------------------------------------
> 
> When I compile it without LTO it works like expected.
> This was seen in OpenWrt in the iw-full version and when I remove all
> the OpenWrt specific patches to iw. The iw-tiny version from OpenWrt
> works like expected. iw 4.14 also works in both versions.
> 
> This was report to OpenWrt here:
> https://github.com/openwrt/openwrt/pull/1865
> http://lists.infradead.org/pipermail/openwrt-devel/2018-October/014220.html
> 
> With GCC 8.2 this also happens with iw 4.14.
> 
> 
> The binary with lto is even bigger and they have the same number of
> functions starting with __cmd:
> 
> $ ls -al iw-full-*
> -rwxr-xr-x 1 hauke hauke 180164 Feb 26 21:55 iw-full-lto
> -rwxr-xr-x 1 hauke hauke 179016 Feb 26 21:57 iw-full-wo-lto
> $ nm iw-full-lto |fgrep __cmd |wc
>      96     288    7259
> $ nm iw-full-wo-lto |fgrep __cmd |wc
>      96     288    7259
> 
> Hauke

Paul Fertser did some further analysis of this problem and we can now
reproduce it also on normal x86 systems when the binary is compiled like
this:
CFLAGS=" -Os -flto" LDFLAGS=" -flto" make

-O3 or -Os and link time optimization is needed to see this problem.

With LTO the compiler randomly reorders the __section_* variables
including __section_set and __section_get and that leads to wrong offset
used to traverse the __cmd section.

Hauke



[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Wireless Regulations]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux