RISC-V: Disable use of TLS copy relocs.

Message ID 20200109010521.17507-1-jimw@sifive.com
State New
Headers show
Series
  • RISC-V: Disable use of TLS copy relocs.
Related show

Commit Message

Jim Wilson Jan. 9, 2020, 1:05 a.m.
Musl and lld don't support TLS copy relocs, and don't want to add support
for this feature which is unique to RISC-V.  Only GNU ld and glibc support
them.  In the pasbi discussion, people have pointed out various problems
with using them, so we are deprecating them.  There doesn't seem to be an
ABI break from dropping them so this patch modifies gcc to stop creating
them.  I'm using an ifdef for now in case a problem turns up and the code
has to be re-enabled.  The plan is to add an initial to local exec
relaxation as a replacement, though this has not been defined or
implemented yet.

This was tested with native gcc and glibc builds and checks with no
regressions.

Committed.

Jim

	gcc/
	* config/riscv/riscv.c (riscv_legitimize_tls_address): Ifdef out
	use of TLS_MODEL_LOCAL_EXEC when not pic.
---
 gcc/config/riscv/riscv.c | 3 +++
 1 file changed, 3 insertions(+)

-- 
2.17.1

Comments

Jakub Jelinek via Gcc-patches Jan. 9, 2020, 1:30 a.m. | #1
On Wed, 08 Jan 2020 17:05:21 PST (-0800), Jim Wilson wrote:
> Musl and lld don't support TLS copy relocs, and don't want to add support

> for this feature which is unique to RISC-V.  Only GNU ld and glibc support

> them.  In the pasbi discussion, people have pointed out various problems

> with using them, so we are deprecating them.  There doesn't seem to be an

> ABI break from dropping them so this patch modifies gcc to stop creating

> them.  I'm using an ifdef for now in case a problem turns up and the code

> has to be re-enabled.  The plan is to add an initial to local exec

> relaxation as a replacement, though this has not been defined or

> implemented yet.

>

> This was tested with native gcc and glibc builds and checks with no

> regressions.

>

> Committed.

>

> Jim

>

> 	gcc/

> 	* config/riscv/riscv.c (riscv_legitimize_tls_address): Ifdef out

> 	use of TLS_MODEL_LOCAL_EXEC when not pic.

> ---

>  gcc/config/riscv/riscv.c | 3 +++

>  1 file changed, 3 insertions(+)

>

> diff --git a/gcc/config/riscv/riscv.c b/gcc/config/riscv/riscv.c

> index 3e0bedaf145..4ba811126fe 100644

> --- a/gcc/config/riscv/riscv.c

> +++ b/gcc/config/riscv/riscv.c

> @@ -1257,9 +1257,12 @@ riscv_legitimize_tls_address (rtx loc)

>    rtx dest, tp, tmp;

>    enum tls_model model = SYMBOL_REF_TLS_MODEL (loc);

>

> +#if 0

> +  /* TLS copy relocs are now deprecated and should not be used.  */

>    /* Since we support TLS copy relocs, non-PIC TLS accesses may all use LE.  */

>    if (!flag_pic)

>      model = TLS_MODEL_LOCAL_EXEC;

> +#endif

>

>    switch (model)

>      {


Thanks!

Patch

diff --git a/gcc/config/riscv/riscv.c b/gcc/config/riscv/riscv.c
index 3e0bedaf145..4ba811126fe 100644
--- a/gcc/config/riscv/riscv.c
+++ b/gcc/config/riscv/riscv.c
@@ -1257,9 +1257,12 @@  riscv_legitimize_tls_address (rtx loc)
   rtx dest, tp, tmp;
   enum tls_model model = SYMBOL_REF_TLS_MODEL (loc);
 
+#if 0
+  /* TLS copy relocs are now deprecated and should not be used.  */
   /* Since we support TLS copy relocs, non-PIC TLS accesses may all use LE.  */
   if (!flag_pic)
     model = TLS_MODEL_LOCAL_EXEC;
+#endif
 
   switch (model)
     {