| From 43593d65827f4e7f848fc410321b0b2deed986fc Mon Sep 17 00:00:00 2001 |
| From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> |
| Date: Fri, 14 Jul 2017 21:54:37 +0200 |
| Subject: [PATCH] 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> |
| --- |
| arch/sparc/Makefile | 1 + |
| arch/sparc64/Makefile | 1 + |
| 2 files changed, 2 insertions(+) |
| create mode 100644 arch/sparc/Makefile |
| create mode 100644 arch/sparc64/Makefile |
| |
| diff --git a/arch/sparc/Makefile b/arch/sparc/Makefile |
| new file mode 100644 |
| index 0000000..4d6c5fb |
| --- /dev/null |
| +++ b/arch/sparc/Makefile |
| @@ -0,0 +1 @@ |
| +ARCH_FPIC = -fPIC |
| diff --git a/arch/sparc64/Makefile b/arch/sparc64/Makefile |
| new file mode 100644 |
| index 0000000..4d6c5fb |
| --- /dev/null |
| +++ b/arch/sparc64/Makefile |
| @@ -0,0 +1 @@ |
| +ARCH_FPIC = -fPIC |
| -- |
| 2.9.4 |
| |