From: Jakub Jelinek Date: Tue, 30 May 2017 07:48:57 +0000 (+0200) Subject: backport: re PR target/78796 (TLS fails to link on aarch64 with -mcmodel=large) X-Git-Tag: releases/gcc-5.5.0~279 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6c23e2707005af80663979cd16222b643f50f000;p=thirdparty%2Fgcc.git backport: re PR target/78796 (TLS fails to link on aarch64 with -mcmodel=large) Backported from mainline 2016-12-14 Wilco Dijkstra Jakub Jelinek PR target/78796 * config/aarch64/aarch64.c (aarch64_classify_symbol): Merge large model checks into switch. * gcc.dg/tls/pr78796.c: New test. From-SVN: r248632 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 43786fa65e23..1a43a0e96d22 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,6 +1,13 @@ 2017-05-30 Jakub Jelinek Backported from mainline + 2016-12-14 Wilco Dijkstra + Jakub Jelinek + + PR target/78796 + * config/aarch64/aarch64.c (aarch64_classify_symbol): Merge large + model checks into switch. + 2016-11-28 Jakub Jelinek PR fortran/78298 diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index 4113609d470f..a918e679c2e3 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -7069,9 +7069,6 @@ aarch64_classify_symbol (rtx x, rtx offset, if (GET_CODE (x) == SYMBOL_REF) { - if (aarch64_cmodel == AARCH64_CMODEL_LARGE) - return SYMBOL_FORCE_TO_MEM; - if (aarch64_tls_symbol_p (x)) return aarch64_classify_tls_symbol (x); @@ -7110,6 +7107,9 @@ aarch64_classify_symbol (rtx x, rtx offset, return SYMBOL_SMALL_GOT; return SYMBOL_SMALL_ABSOLUTE; + case AARCH64_CMODEL_LARGE: + return SYMBOL_FORCE_TO_MEM; + default: gcc_unreachable (); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 303b4ab40254..4734c07d052a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,11 @@ 2017-05-30 Jakub Jelinek Backported from mainline + 2016-12-14 Jakub Jelinek + + PR target/78796 + * gcc.dg/tls/pr78796.c: New test. + 2016-12-02 Jakub Jelinek PR c++/78649 diff --git a/gcc/testsuite/gcc.dg/tls/pr78796.c b/gcc/testsuite/gcc.dg/tls/pr78796.c new file mode 100644 index 000000000000..12263da9bb42 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tls/pr78796.c @@ -0,0 +1,32 @@ +/* PR target/78796 */ +/* { dg-do run } */ +/* { dg-options "-O2" } */ +/* { dg-additional-options "-mcmodel=large" { target aarch64-*-* } } */ +/* { dg-require-effective-target tls } */ + +struct S { int a, b, c, d, e; }; +struct S t; +__thread struct S s; + +__attribute__((used, noinline, noclone)) void +foo (int *x, int *y) +{ + asm volatile ("" : : "g" (x), "g" (y) : "memory"); + if (*x != 1 || *y != 2) + __builtin_abort (); +} + +__attribute__((used, noinline, noclone)) void +bar (void) +{ + foo (&t.c, &s.c); +} + +int +main () +{ + t.c = 1; + s.c = 2; + bar (); + return 0; +}