Fix lttng-tools build issue
cover Fix lttng-tools build issue
Hello,
This set of patches fix the lttng-tools build issue with gcc 4.7.x and gcc 4.8.x, by:
* Adding appropriate patches to gcc 4.7 and gcc 4.8 in the internal toolchain backend.
* Allowing external toolchains to indicate whether they are affected by the bug. For now, one toolchain known to be affected is marked as such, the other toolchains will have to be tested progressively.
* Making the lttng-tools depend on toolchains not affected by the bug.
Thomas Petazzoni (4):
gcc: add fix for PR 58595 to gcc 4.8.2
gcc: add fix for PR 58595 to gcc 4.7.3
toolchain: add option to declare toolchains affected by gcc PR 58595
lttng-tools: mark as affected by gcc bug 58595
.../4.7.3/843-gcc-4.7.3-Fix-PR-target-58595.patch | 102 +++++++++++++++++++++ .../4.8.2/843-gcc-4.8.2-Fix-PR-target-58595.patch | 101 ++++++++++++++++++++ package/lttng-tools/Config.in | 6 +- toolchain/toolchain-common.in | 3 + toolchain/toolchain-external/Config.in | 1 + 5 files changed, 211 insertions(+), 2 deletions(-) create mode 100644 package/gcc/4.7.3/843-gcc-4.7.3-Fix-PR-target-58595.patch create mode 100644 package/gcc/4.8.2/843-gcc-4.8.2-Fix-PR-target-58595.patch
Signature · 1 line
1.8.3.2
PATCH 1/4 gcc: add fix for PR 58595 to gcc 4.8.2
--- .../4.8.2/843-gcc-4.8.2-Fix-PR-target-58595.patch | 101 +++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 package/gcc/4.8.2/843-gcc-4.8.2-Fix-PR-target-58595.patch
package/gcc/4.8.2/843-gcc-4.8.2-Fix-PR-target-58595.patch new file +101 -0
@@ -0,0 +1,101 @@ +Backport fix for PR target/58595 + +From: jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> +Date: Thu, 6 Mar 2014 12:07:07 +0000 +Subject: [PATCH] PR target/58595 * config/arm/arm.c + (arm_tls_symbol_p): Remove. (arm_legitimize_address): Call + legitimize_tls_address for any arm_tls_referenced_p expression, + handle constant addend. Call it before testing for !TARGET_ARM. + (thumb_legitimize_address): Don't handle arm_tls_symbol_p here. + + * gcc.dg/tls/pr58595.c: New test. + + +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk at 208380 138bc75d-0d04-0410-961f-82ee72b054a4 + +Index: gcc-4.8.2/gcc/config/arm/arm.c +=================================================================== +--- gcc-4.8.2.orig/gcc/config/arm/arm.c ++++ gcc-4.8.2/gcc/config/arm/arm.c +@@ -230,7 +230,6 @@ static tree arm_gimplify_va_arg_expr (tr + static void arm_option_override (void); + static unsigned HOST_WIDE_INT arm_shift_truncation_mask (enum machine_mode); + static bool arm_cannot_copy_insn_p (rtx); +-static bool arm_tls_symbol_p (rtx x); + static int arm_issue_rate (void); + static void arm_output_dwarf_dtprel (FILE *, int, rtx) ATTRIBUTE_UNUSED; + static bool arm_output_addr_const_extra (FILE *, rtx); +@@ -6573,6 +6572,32 @@ legitimize_tls_address (rtx x, rtx reg) + rtx + arm_legitimize_address (rtx x, rtx orig_x, enum machine_mode mode) + { ++ if (arm_tls_referenced_p (x)) ++ { ++ rtx addend = NULL; ++ ++ if (GET_CODE (x) == CONST && GET_CODE (XEXP (x, 0)) == PLUS) ++ { ++ addend = XEXP (XEXP (x, 0), 1); ++ x = XEXP (XEXP (x, 0), 0); ++ } ++ ++ if (GET_CODE (x) != SYMBOL_REF) ++ return x; ++ ++ gcc_assert (SYMBOL_REF_TLS_MODEL (x) != 0); ++ ++ x = legitimize_tls_address (x, NULL_RTX); ++ ++ if (addend) ++ { ++ x = gen_rtx_PLUS (SImode, x, addend); ++ orig_x = x; ++ } ++ else ++ return x; ++ } ++ + if (!TARGET_ARM) + { + /* TODO: legitimize_address for Thumb2. */ +@@ -6581,9 +6606,6 @@ arm_legitimize_address (rtx x, rtx orig_ + return thumb_legitimize_address (x, orig_x, mode); + } + +- if (arm_tls_symbol_p (x)) +- return legitimize_tls_address (x, NULL_RTX); +- + if (GET_CODE (x) == PLUS) + { + rtx xop0 = XEXP (x, 0); +@@ -6695,9 +6717,6 @@ arm_legitimize_address (rtx x, rtx orig_ + rtx + thumb_legitimize_address (rtx x, rtx orig_x, enum machine_mode mode) + { +- if (arm_tls_symbol_p (x)) +- return legitimize_tls_address (x, NULL_RTX); +- + if (GET_CODE (x) == PLUS + && CONST_INT_P (XEXP (x, 1)) + && (INTVAL (XEXP (x, 1)) >= 32 * GET_MODE_SIZE (mode) +@@ -6988,20 +7007,6 @@ thumb_legitimize_reload_address (rtx *x_ + + /* Test for various thread-local symbols. */ + +-/* Return TRUE if X is a thread-local symbol. */ +- +-static bool +-arm_tls_symbol_p (rtx x) +-{ +- if (! TARGET_HAVE_TLS) +- return false; +- +- if (GET_CODE (x) != SYMBOL_REF) +- return false; +- +- return SYMBOL_REF_TLS_MODEL (x) != 0; +-} +- + /* Helper for arm_tls_referenced_p. */ + + static int
Signature · 1 line
1.8.3.2
PATCH 2/4 gcc: add fix for PR 58595 to gcc 4.7.3
In reply to Thomas Petazzoni--- .../4.7.3/843-gcc-4.7.3-Fix-PR-target-58595.patch | 102 +++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 package/gcc/4.7.3/843-gcc-4.7.3-Fix-PR-target-58595.patch
package/gcc/4.7.3/843-gcc-4.7.3-Fix-PR-target-58595.patch new file +102 -0
@@ -0,0 +1,102 @@ +commit 4fa1f8926227d4e79975b674dc4292b9bec4b137 +Author: jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> +Date: Thu Mar 6 12:07:07 2014 +0000 + + PR target/58595 + * config/arm/arm.c (arm_tls_symbol_p): Remove. + (arm_legitimize_address): Call legitimize_tls_address for any + arm_tls_referenced_p expression, handle constant addend. Call it + before testing for !TARGET_ARM. + (thumb_legitimize_address): Don't handle arm_tls_symbol_p here. + + * gcc.dg/tls/pr58595.c: New test. + + + git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk at 208380 138bc75d-0d04-0410-961f-82ee72b054a4 + +diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c +index ce24bfe..af5666b 100644 +--- a/gcc/config/arm/arm.c ++++ b/gcc/config/arm/arm.c +@@ -235,7 +235,6 @@ static tree arm_gimplify_va_arg_expr (tree, tree, gimple_seq *, gimple_seq *); + static void arm_option_override (void); + static unsigned HOST_WIDE_INT arm_shift_truncation_mask (enum machine_mode); + static bool arm_cannot_copy_insn_p (rtx); +-static bool arm_tls_symbol_p (rtx x); + static int arm_issue_rate (void); + static void arm_output_dwarf_dtprel (FILE *, int, rtx) ATTRIBUTE_UNUSED; + static bool arm_output_addr_const_extra (FILE *, rtx); +@@ -7336,6 +7335,32 @@ legitimize_tls_address (rtx x, rtx reg) + rtx + arm_legitimize_address (rtx x, rtx orig_x, enum machine_mode mode) + { ++ if (arm_tls_referenced_p (x)) ++ { ++ rtx addend = NULL; ++ ++ if (GET_CODE (x) == CONST && GET_CODE (XEXP (x, 0)) == PLUS) ++ { ++ addend = XEXP (XEXP (x, 0), 1); ++ x = XEXP (XEXP (x, 0), 0); ++ } ++ ++ if (GET_CODE (x) != SYMBOL_REF) ++ return x; ++ ++ gcc_assert (SYMBOL_REF_TLS_MODEL (x) != 0); ++ ++ x = legitimize_tls_address (x, NULL_RTX); ++ ++ if (addend) ++ { ++ x = gen_rtx_PLUS (SImode, x, addend); ++ orig_x = x; ++ } ++ else ++ return x; ++ } ++ + if (!TARGET_ARM) + { + /* TODO: legitimize_address for Thumb2. */ +@@ -7344,9 +7369,6 @@ arm_legitimize_address (rtx x, rtx orig_x, enum machine_mode mode) + return thumb_legitimize_address (x, orig_x, mode); + } + +- if (arm_tls_symbol_p (x)) +- return legitimize_tls_address (x, NULL_RTX); +- + if (GET_CODE (x) == PLUS) + { + rtx xop0 = XEXP (x, 0); +@@ -7459,9 +7481,6 @@ arm_legitimize_address (rtx x, rtx orig_x, enum machine_mode mode) + rtx + thumb_legitimize_address (rtx x, rtx orig_x, enum machine_mode mode) + { +- if (arm_tls_symbol_p (x)) +- return legitimize_tls_address (x, NULL_RTX); +- + if (GET_CODE (x) == PLUS + && CONST_INT_P (XEXP (x, 1)) + && (INTVAL (XEXP (x, 1)) >= 32 * GET_MODE_SIZE (mode) +@@ -7756,20 +7775,6 @@ thumb_legitimize_reload_address (rtx *x_p, + + /* Test for various thread-local symbols. */ + +-/* Return TRUE if X is a thread-local symbol. */ +- +-static bool +-arm_tls_symbol_p (rtx x) +-{ +- if (! TARGET_HAVE_TLS) +- return false; +- +- if (GET_CODE (x) != SYMBOL_REF) +- return false; +- +- return SYMBOL_REF_TLS_MODEL (x) != 0; +-} +- + /* Helper for arm_tls_referenced_p. */ + + static int
Signature · 1 line
1.8.3.2
PATCH 3/4 toolchain: add option to declare toolchains affected by gcc PR 58595
In reply to Thomas Petazzoni--- toolchain/toolchain-common.in | 3 +++ toolchain/toolchain-external/Config.in | 1 + 2 files changed, 4 insertions(+)
toolchain/toolchain-common.in +3 -0
@@ -11,6 +11,9 @@ config BR2_LARGEFILE config BR2_INET_IPV6 bool +config BR2_TOOLCHAIN_HAS_GCC_BUG_58595 + bool + config BR2_TOOLCHAIN_HAS_GCC_BUG_58854 bool
toolchain/toolchain-external/Config.in +1 -0
@@ -89,6 +89,7 @@ config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM201311 depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86" depends on BR2_ARM_EABI depends on !BR2_PREFER_STATIC_LIB + select BR2_TOOLCHAIN_HAS_GCC_BUG_58595 # based-on gcc-4.8.1 select BR2_TOOLCHAIN_HAS_GCC_BUG_58854 # based-on gcc-4.8.1 select BR2_TOOLCHAIN_EXTERNAL_GLIBC select BR2_TOOLCHAIN_HAS_NATIVE_RPC
Signature · 1 line
1.8.3.2
PATCH 4/4 lttng-tools: mark as affected by gcc bug 58595
In reply to Thomas PetazzoniFixes:
http://autobuild.buildroot.org/results/6a6/6a66a389035939af542e172dbe2027ffa671e28a/
--- package/lttng-tools/Config.in | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
package/lttng-tools/Config.in +4 -2
@@ -6,6 +6,7 @@ config BR2_PACKAGE_LTTNG_TOOLS select BR2_PACKAGE_UTIL_LINUX_LIBUUID # liburcu only works on some architectures and requires thread support depends on BR2_arm || BR2_armeb || BR2_i386 || BR2_powerpc || BR2_x86_64 + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_58595 # lttng-tools/gcc-4.{7,8}.x bug depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_58854 # liburcu/gcc-4.8.x bug depends on BR2_LARGEFILE depends on BR2_USE_WCHAR # util-linux
@@ -32,7 +33,8 @@ comment "lttng-tools needs a toolchain w/ largefile, threads, wchar" depends on BR2_arm || BR2_armeb || BR2_i386 || BR2_powerpc || BR2_x86_64 depends on !BR2_LARGEFILE || !BR2_TOOLCHAIN_HAS_THREADS || \ !BR2_USE_WCHAR + depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_58595 # lttng-tools/gcc-4.{7,8}.x bug depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_58854 # liburcu/gcc-4.8.x bug -comment "lttng-tools needs a toolchain not affected by GCC bug 58854" - depends on BR2_TOOLCHAIN_HAS_GCC_BUG_58854 +comment "lttng-tools needs a toolchain not affected by GCC bug 58854 and 58595" + depends on BR2_TOOLCHAIN_HAS_GCC_BUG_58854 || BR2_TOOLCHAIN_HAS_GCC_BUG_58595
Signature · 1 line
1.8.3.2
Thomas Petazzoni
Appliedcover Fix lttng-tools build issue
In reply to Thomas PetazzoniDear Thomas Petazzoni,
Quoted 12 lines · Thomas Petazzoni
Hello,
This set of patches fix the lttng-tools build issue with gcc 4.7.x and gcc 4.8.x, by:
* Adding appropriate patches to gcc 4.7 and gcc 4.8 in the internal toolchain backend.
* Allowing external toolchains to indicate whether they are affected by the bug. For now, one toolchain known to be affected is marked as such, the other toolchains will have to be tested progressively.
Quoted 8 lines
* Making the lttng-tools depend on toolchains not affected by the bug.
Thomas Petazzoni (4):
gcc: add fix for PR 58595 to gcc 4.8.2
gcc: add fix for PR 58595 to gcc 4.7.3
toolchain: add option to declare toolchains affected by gcc PR 58595
lttng-tools: mark as affected by gcc bug 58595
Applied.
Thomas
Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com