|
@@ -0,0 +1,61 @@
|
|
|
+From a971faaf8fb48acbf48ca800634fc78a27581517 Mon Sep 17 00:00:00 2001
|
|
|
+From: Claudiu Zissulescu <claziss@synopsys.com>
|
|
|
+Date: Wed, 26 Jun 2019 17:53:51 +0300
|
|
|
+Subject: [PATCH] [ARC] Fix emitting TLS symbols.
|
|
|
+
|
|
|
+When storing a TLS symbol to memory, always use an intermediate register
|
|
|
+to load it. Otherwise compiler generates instruction which couldn't be
|
|
|
+encoded and we see:
|
|
|
+----------------------------->8---------------------------
|
|
|
+In file included from gethstent_r.c:34:
|
|
|
+../nss/getXXent_r.c: In function '__gethostent_r':
|
|
|
+../nss/getXXent_r.c:168:1: error: unrecognizable insn:
|
|
|
+ }
|
|
|
+ ^
|
|
|
+(insn 25 24 26 5 (set (mem:SI (plus:SI (reg/f:SI 149 virtual-outgoing-args)
|
|
|
+ (const_int 16 [0x10])) [0 S4 A32])
|
|
|
+ (plus:SI (reg:SI 25 r25)
|
|
|
+ (reg:SI 174))) "../nss/getXXent_r.c":160 -1
|
|
|
+ (nil))
|
|
|
+during RTL pass: vregs
|
|
|
+../nss/getXXent_r.c:168:1: internal compiler error: in extract_insn, at recog.c:2304
|
|
|
+In file included from getnetent_r.c:34:
|
|
|
+../nss/getXXent_r.c: In function '__getnetent_r':
|
|
|
+../nss/getXXent_r.c:168:1: error: unrecognizable insn:
|
|
|
+ }
|
|
|
+ ^
|
|
|
+(insn 25 24 26 5 (set (mem:SI (plus:SI (reg/f:SI 149 virtual-outgoing-args)
|
|
|
+ (const_int 16 [0x10])) [0 S4 A32])
|
|
|
+ (plus:SI (reg:SI 25 r25)
|
|
|
+ (reg:SI 174))) "../nss/getXXent_r.c":160 -1
|
|
|
+ (nil))
|
|
|
+during RTL pass: vregs
|
|
|
+../nss/getXXent_r.c:168:1: internal compiler error: in extract_insn, at recog.c:2304
|
|
|
+----------------------------->8---------------------------
|
|
|
+
|
|
|
+Note this patch is not yet submitted to the GCC's master and gcc-9-branch but
|
|
|
+will be submitted soon. That said with bump of GCC for ARC this patch won't be
|
|
|
+needed any longer.
|
|
|
+
|
|
|
+Signed-off-by: Claudiu Zissulescu <claziss@synopsys.com>
|
|
|
+Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
|
|
|
+---
|
|
|
+ gcc/config/arc/arc.c | 2 +-
|
|
|
+ 1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
+
|
|
|
+diff --git a/gcc/config/arc/arc.c b/gcc/config/arc/arc.c
|
|
|
+index 8b544efaa11..989bec703df 100644
|
|
|
+--- a/gcc/config/arc/arc.c
|
|
|
++++ b/gcc/config/arc/arc.c
|
|
|
+@@ -9068,7 +9068,7 @@ prepare_move_operands (rtx *operands, machine_mode mode)
|
|
|
+ if (GET_CODE (operands[1]) == SYMBOL_REF)
|
|
|
+ {
|
|
|
+ enum tls_model model = SYMBOL_REF_TLS_MODEL (operands[1]);
|
|
|
+- if (MEM_P (operands[0]) && flag_pic)
|
|
|
++ if (MEM_P (operands[0]))
|
|
|
+ operands[1] = force_reg (mode, operands[1]);
|
|
|
+ else if (model)
|
|
|
+ operands[1] = arc_legitimize_tls_address (operands[1], model);
|
|
|
+--
|
|
|
+2.16.2
|
|
|
+
|