Commits

Thomas Petazzoni committed ce15e7b7d24
arch/{sparc,sparc64}/Makefile: define ARCH_FPIC Building Busybox on SPARC or SPARC64 with CONFIG_BUILD_LIBBUSYBOX=y currently fails with: miscutils/lib.a(i2c_tools.o): In function `i2c_dev_open': i2c_tools.c:(.text.i2c_dev_open+0x14): relocation truncated to fit: R_SPARC_GOT13 against `.LC0' i2c_tools.c:(.text.i2c_dev_open+0x38): relocation truncated to fit: R_SPARC_GOT13 against symbol `bb_errno' defined in COMMON section in libbb/lib.a(ptr_to_globals.o) i2c_tools.c:(.text.i2c_dev_open+0x6c): relocation truncated to fit: R_SPARC_GOT13 against `.LC1' miscutils/lib.a(i2c_tools.o): In function `check_funcs_test_end': i2c_tools.c:(.text.check_funcs_test_end+0x24): relocation truncated to fit: R_SPARC_GOT13 against `.LC2' i2c_tools.c:(.text.check_funcs_test_end+0x2c): relocation truncated to fit: R_SPARC_GOT13 against `.LC3' miscutils/lib.a(i2c_tools.o): In function `check_read_funcs': i2c_tools.c:(.text.check_read_funcs+0x30): relocation truncated to fit: R_SPARC_GOT13 against `.LC10' i2c_tools.c:(.text.check_read_funcs+0x80): relocation truncated to fit: R_SPARC_GOT13 against `.LC4' i2c_tools.c:(.text.check_read_funcs+0x98): relocation truncated to fit: R_SPARC_GOT13 against `.LC5' i2c_tools.c:(.text.check_read_funcs+0xc0): relocation truncated to fit: R_SPARC_GOT13 against `.LC6' i2c_tools.c:(.text.check_read_funcs+0xe0): relocation truncated to fit: R_SPARC_GOT13 against `.LC7' i2c_tools.c:(.text.check_read_funcs+0xf8): additional relocation overflows omitted from the output As stated by the gcc documentation, the SPARC architecture has a limited GOT size, which prevents moderately large binaries to be built with -fpic, and -fPIC is necessary. From gcc's documentation: '-fpic' Generate position-independent code (PIC) suitable for use in a shared library, if supported for the target machine. Such code accesses all constant addresses through a global offset table (GOT). The dynamic loader resolves the GOT entries when the program starts (the dynamic loader is not part of GCC; it is part of the operating system). If the GOT size for the linked executable exceeds a machine-specific maximum size, you get an error message from the linker indicating that '-fpic' does not work; in that case, recompile with '-fPIC' instead. (These maximums are 8k on the SPARC, 28k on AArch64 and 32k on the m68k and RS/6000. The x86 has no such limit.) '-fPIC' If supported for the target machine, emit position-independent code, suitable for dynamic linking and avoiding any limit on the size of the global offset table. This option makes a difference on AArch64, m68k, PowerPC and SPARC. With a limit of 8KB on SPARC, we quickly reach this limit, and we hit it when building Busybox on SPARC/SPARC64 with the CONFIG_BUILD_LIBBUSYBOX=y option enabled. Therefore, this commit redefines ARCH_FPIC as -fPIC on sparc and sparc64 to solve this issue. [Submitted upstream: http://lists.busybox.net/pipermail/busybox/2017-July/085633.html] Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>