Bug 10996 - bogus musl ARM toolchain
Summary: bogus musl ARM toolchain
Status: RESOLVED WONTFIX
Alias: None
Product: buildroot
Classification: Unclassified
Component: Other (show other bugs)
Version: unspecified
Hardware: All Linux
: P5 normal
Target Milestone: ---
Assignee: unassigned
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2018-05-08 12:41 UTC by Thomas Petazzoni
Modified: 2018-08-15 11:38 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Thomas Petazzoni 2018-05-08 12:41:04 UTC
The following defconfig doesn't build:

BR2_arm=y
BR2_cortex_a8=y
BR2_STATIC_LIBS=y
BR2_TOOLCHAIN_BUILDROOT_MUSL=y
BR2_TOOLCHAIN_BUILDROOT_CXX=y
BR2_INIT_NONE=y
BR2_SYSTEM_BIN_SH_NONE=y
BR2_PACKAGE_ZIP=y
# BR2_TARGET_ROOTFS_TAR is not set

It doesn't build because the toolchain is broken, and doesn't manage to link a simple program like this:

$ cat foo.c 
int main(void) { mktime(); return 0; }

 ./output/host/bin/arm-linux-gcc -o foo foo.c
foo.c: In function ‘main’:
foo.c:1:18: warning: implicit declaration of function ‘mktime’ [-Wimplicit-function-declaration]
 int main(void) { mktime(); return 0; }
                  ^~~~~~
/home/thomas/projets/buildroot/output/host/lib/gcc/arm-buildroot-linux-musleabihf/6.4.0/libgcc.a(_dvmd_lnx.o): In function `__aeabi_idiv0':
/home/thomas/projets/buildroot/output/build/host-gcc-final-6.4.0/build/arm-buildroot-linux-musleabihf/libgcc/../../../libgcc/config/arm/lib1funcs.S:1354: undefined reference to `raise'
collect2: error: ld returned 1 exit status

This is causing the following build issues in our autobuilders: http://autobuild.buildroot.net/?reason=zip%&libc=musl.
Comment 1 Thomas Petazzoni 2018-05-11 15:53:19 UTC
After discussing with the musl maintainers, this happens because we don't pass -static. However, a similar setup works with uClibc.
Comment 2 Yann E. MORIN 2018-05-13 20:05:59 UTC
(In reply to Thomas Petazzoni from comment #1)
> this happens because we don't pass -static.

But the autobuild failure that is referenced does use -static (with \ and
newlines added for readability):

    home/peko/autobuild/instance-1/output/host/bin/arm-buildroot-linux-musleabihf-gcc \
        -c -D_FILE_OFFSET_BITS=64 -Os \
        -static \
        -I. -DUNIX -DUIDGID_NOT_16BIT -DLARGE_FILE_SUPPORT -DUNICODE_SUPPORT -DNO_MKTIME \
        -DNO_DIR -DHAVE_DIRENT_H -DHAVE_TERMIOS_H util.c

Regards,
Yann E. MORIN.
Comment 3 Thomas Petazzoni 2018-05-13 20:16:32 UTC
(In reply to Yann E. MORIN from comment #2)
Nope, because you're looking at the wrong place. The reason why the build fail is because the "configuration" step which detects if mktime() is available or not fails and concludes that mktime() is not available. See the string "
Check for mktime". Due to this, NO_MKTIME is defined, and this code path is broken in util.c/timezone.c.

So there are really two problems:

 (1) That is doesn't detect the availability of mktime() because -static is not passed during the detection test.

 (2) That the NO_MKTIME case is broken.

However, I believe (2) is not really relevant for Buildroot, as all three C libraries provide mktime(). So all we need to fix is (1).
Comment 4 Thomas Petazzoni 2018-08-14 20:25:10 UTC
Closing this bug: the musl developers said that -static must be passed when linking statically, even if the C library was built with static linking support only.
Comment 5 Arnout Vandecappelle 2018-08-14 22:31:39 UTC
(In reply to Thomas Petazzoni from comment #4)
There is still a bug though... I guess we should make sure that -static is always passed under BR2_STATIC_LIBS=y.
Comment 6 Thomas Petazzoni 2018-08-15 11:38:52 UTC
(In reply to Arnout Vandecappelle from comment #5)
True, but what do you want to do about this, other than fixing each package? You want to include -static in the toolchain wrapper?