Commit fd3cd001 by Ulrich Weigand Committed by Ulrich Weigand

configure.in (HAVE_AS_TLS): Add s390-*-* and s390x-*-* cases.

	* configure.in (HAVE_AS_TLS): Add s390-*-* and s390x-*-* cases.
	* configure: Regenerate.

	* config/s390/s390-protos.h (tls_symbolic_operand): Add prototype.
	(tls_symbolic_reference_mentioned_p): Add prototype.
	(s390_tls_get_offset): Add prototype.
	(emit_pic_move): Remove prototype, replace by ...
	(emit_symbolic_move): .. this new prototype.

	* config/s390/s390.c (TARGET_HAVE_TLS): Conditionally define.
	(tls_model_chars): New global variable.
	(s390_encode_section_info): Encode TLS model.
	Use targetm.binds_local_p to check for local symbols.
	(s390_strip_name_encoding): New function.
	(TARGET_STRIP_NAME_ENCODING): Define.

	(get_thread_pointer): New function.
	(legitimize_tls_address): New function.
	(legitimize_address): Call it.
	(emit_pic_move): Remove, replace by ...
	(emit_symbolic_move): ... this new function.

	(larl_operand): Handle TLS operands.
	(legitimate_constant_p): Likewise.
	(s390_decompose_address): Likewise.
	(s390_cannot_force_const_mem): New function.
	(TARGET_CANNOT_FORCE_CONST_MEM): Define.

	(s390_output_symbolic_const): Handle TLS unspecs.
	(print_operand): New code 'J'.
	(machine_function): Add struct member 'some_ld_name'.
	(get_some_local_dynamic_name, get_some_local_dynamic_name_1): New.

	(enum s390_builtin): New type.
	(code_for_builtin_64, code_for_builtin_31): New global variables.
	(s390_init_builtins, s390_expand_builtin): New functions.
	(TARGET_INIT_BUILTINS, TARGET_EXPAND_BUILTIN): Define.

	* config/s390/s390.h (TLS_SYMBOLIC_CONST): New macro.
	(ASM_OUTPUT_LABELREF): Define.
	(ASM_OUTPUT_SPECIAL_POOL_ENTRY): Handle TLS constants.

	* config/s390/s390.md: Define TLS UNSPEC constants.
	("movdi", "movsi"): Handle TLS operands.
	("get_tp_64", "get_tp_31", "set_tp_64", "set_tp_31"): New insns.
	("*tls_load_64", "*tls_load_31"): New insns.
	("call_value_tls", "call_value_tls_exp"): New expanders.
	("brasl_tls", "bras_tls", "basr_tls_64", "basr_tls_31",
	"bas_tls_64", "bas_tls_31"): New insns.

From-SVN: r61714
parent 475c1d09
2003-01-24 Ulrich Weigand <uweigand@de.ibm.com>
* configure.in (HAVE_AS_TLS): Add s390-*-* and s390x-*-* cases.
* configure: Regenerate.
* config/s390/s390-protos.h (tls_symbolic_operand): Add prototype.
(tls_symbolic_reference_mentioned_p): Add prototype.
(s390_tls_get_offset): Add prototype.
(emit_pic_move): Remove prototype, replace by ...
(emit_symbolic_move): .. this new prototype.
* config/s390/s390.c (TARGET_HAVE_TLS): Conditionally define.
(tls_model_chars): New global variable.
(s390_encode_section_info): Encode TLS model.
Use targetm.binds_local_p to check for local symbols.
(s390_strip_name_encoding): New function.
(TARGET_STRIP_NAME_ENCODING): Define.
(get_thread_pointer): New function.
(legitimize_tls_address): New function.
(legitimize_address): Call it.
(emit_pic_move): Remove, replace by ...
(emit_symbolic_move): ... this new function.
(larl_operand): Handle TLS operands.
(legitimate_constant_p): Likewise.
(s390_decompose_address): Likewise.
(s390_cannot_force_const_mem): New function.
(TARGET_CANNOT_FORCE_CONST_MEM): Define.
(s390_output_symbolic_const): Handle TLS unspecs.
(print_operand): New code 'J'.
(machine_function): Add struct member 'some_ld_name'.
(get_some_local_dynamic_name, get_some_local_dynamic_name_1): New.
(enum s390_builtin): New type.
(code_for_builtin_64, code_for_builtin_31): New global variables.
(s390_init_builtins, s390_expand_builtin): New functions.
(TARGET_INIT_BUILTINS, TARGET_EXPAND_BUILTIN): Define.
* config/s390/s390.h (TLS_SYMBOLIC_CONST): New macro.
(ASM_OUTPUT_LABELREF): Define.
(ASM_OUTPUT_SPECIAL_POOL_ENTRY): Handle TLS constants.
* config/s390/s390.md: Define TLS UNSPEC constants.
("movdi", "movsi"): Handle TLS operands.
("get_tp_64", "get_tp_31", "set_tp_64", "set_tp_31"): New insns.
("*tls_load_64", "*tls_load_31"): New insns.
("call_value_tls", "call_value_tls_exp"): New expanders.
("brasl_tls", "bras_tls", "basr_tls_64", "basr_tls_31",
"bas_tls_64", "bas_tls_31"): New insns.
2003-01-24 Nathan Sidwell <nathan@codesourcery.com> 2003-01-24 Nathan Sidwell <nathan@codesourcery.com>
* config/rs6000/rs6000.c (rs6000_parse_abi_options): Make sure * config/rs6000/rs6000.c (rs6000_parse_abi_options): Make sure
......
...@@ -43,11 +43,14 @@ extern int s390_single_hi PARAMS ((rtx, enum machine_mode, int)); ...@@ -43,11 +43,14 @@ extern int s390_single_hi PARAMS ((rtx, enum machine_mode, int));
extern int s390_extract_hi PARAMS ((rtx, enum machine_mode, int)); extern int s390_extract_hi PARAMS ((rtx, enum machine_mode, int));
extern int s390_single_qi PARAMS ((rtx, enum machine_mode, int)); extern int s390_single_qi PARAMS ((rtx, enum machine_mode, int));
extern int s390_extract_qi PARAMS ((rtx, enum machine_mode, int)); extern int s390_extract_qi PARAMS ((rtx, enum machine_mode, int));
extern int tls_symbolic_operand PARAMS ((rtx));
extern int s390_match_ccmode PARAMS ((rtx, enum machine_mode)); extern int s390_match_ccmode PARAMS ((rtx, enum machine_mode));
extern enum machine_mode s390_tm_ccmode PARAMS ((rtx, rtx, int)); extern enum machine_mode s390_tm_ccmode PARAMS ((rtx, rtx, int));
extern enum machine_mode s390_select_ccmode PARAMS ((enum rtx_code, rtx, rtx)); extern enum machine_mode s390_select_ccmode PARAMS ((enum rtx_code, rtx, rtx));
extern int symbolic_reference_mentioned_p PARAMS ((rtx)); extern int symbolic_reference_mentioned_p PARAMS ((rtx));
extern int tls_symbolic_reference_mentioned_p PARAMS ((rtx));
extern rtx s390_tls_get_offset PARAMS ((void));
extern int legitimate_la_operand_p PARAMS ((rtx)); extern int legitimate_la_operand_p PARAMS ((rtx));
extern int preferred_la_operand_p PARAMS ((rtx)); extern int preferred_la_operand_p PARAMS ((rtx));
extern int legitimate_pic_operand_p PARAMS ((rtx)); extern int legitimate_pic_operand_p PARAMS ((rtx));
...@@ -60,7 +63,7 @@ extern enum reg_class s390_preferred_reload_class PARAMS ((rtx, enum reg_class)) ...@@ -60,7 +63,7 @@ extern enum reg_class s390_preferred_reload_class PARAMS ((rtx, enum reg_class))
extern enum reg_class s390_secondary_input_reload_class PARAMS ((enum reg_class, enum machine_mode, rtx)); extern enum reg_class s390_secondary_input_reload_class PARAMS ((enum reg_class, enum machine_mode, rtx));
extern int s390_plus_operand PARAMS ((rtx, enum machine_mode)); extern int s390_plus_operand PARAMS ((rtx, enum machine_mode));
extern void s390_expand_plus_operand PARAMS ((rtx, rtx, rtx)); extern void s390_expand_plus_operand PARAMS ((rtx, rtx, rtx));
extern void emit_pic_move PARAMS ((rtx *, enum machine_mode)); extern void emit_symbolic_move PARAMS ((rtx *));
extern void s390_load_address PARAMS ((rtx, rtx)); extern void s390_load_address PARAMS ((rtx, rtx));
extern void s390_expand_movstr PARAMS ((rtx, rtx, rtx)); extern void s390_expand_movstr PARAMS ((rtx, rtx, rtx));
extern void s390_expand_clrstr PARAMS ((rtx, rtx)); extern void s390_expand_clrstr PARAMS ((rtx, rtx));
......
...@@ -793,6 +793,10 @@ CUMULATIVE_ARGS; ...@@ -793,6 +793,10 @@ CUMULATIVE_ARGS;
|| GET_CODE (X) == LABEL_REF \ || GET_CODE (X) == LABEL_REF \
|| (GET_CODE (X) == CONST && symbolic_reference_mentioned_p (X))) || (GET_CODE (X) == CONST && symbolic_reference_mentioned_p (X)))
#define TLS_SYMBOLIC_CONST(X) \
((GET_CODE (X) == SYMBOL_REF && tls_symbolic_operand (X)) \
|| (GET_CODE (X) == CONST && tls_symbolic_reference_mentioned_p (X)))
/* Condition codes. */ /* Condition codes. */
...@@ -970,6 +974,10 @@ extern int flag_pic; ...@@ -970,6 +974,10 @@ extern int flag_pic;
#define ASM_OUTPUT_SKIP(FILE, SIZE) \ #define ASM_OUTPUT_SKIP(FILE, SIZE) \
fprintf ((FILE), "\t.set\t.,.+%u\n", (SIZE)) fprintf ((FILE), "\t.set\t.,.+%u\n", (SIZE))
/* Output a reference to a user-level label named NAME. */
#define ASM_OUTPUT_LABELREF(FILE, NAME) \
asm_fprintf ((FILE), "%U%s", (*targetm.strip_name_encoding) (NAME))
/* The LOCAL_LABEL_PREFIX variable is used by dbxelf.h. */ /* The LOCAL_LABEL_PREFIX variable is used by dbxelf.h. */
#define LOCAL_LABEL_PREFIX "." #define LOCAL_LABEL_PREFIX "."
...@@ -1051,10 +1059,9 @@ extern int s390_nr_constants; ...@@ -1051,10 +1059,9 @@ extern int s390_nr_constants;
\ \
case MODE_INT: \ case MODE_INT: \
case MODE_PARTIAL_INT: \ case MODE_PARTIAL_INT: \
if (flag_pic \ if (GET_CODE (EXP) == CONST \
&& (GET_CODE (EXP) == CONST \ || GET_CODE (EXP) == SYMBOL_REF \
|| GET_CODE (EXP) == SYMBOL_REF \ || GET_CODE (EXP) == LABEL_REF) \
|| GET_CODE (EXP) == LABEL_REF )) \
{ \ { \
fputs (integer_asm_op (UNITS_PER_WORD, TRUE), FILE); \ fputs (integer_asm_op (UNITS_PER_WORD, TRUE), FILE); \
s390_output_symbolic_const (FILE, EXP); \ s390_output_symbolic_const (FILE, EXP); \
......
...@@ -44,6 +44,35 @@ ...@@ -44,6 +44,35 @@
;; s_operand -- Matches a valid S operand in a RS, SI or SS type instruction. ;; s_operand -- Matches a valid S operand in a RS, SI or SS type instruction.
;; ;;
;;
;; UNSPEC usage
;;
(define_constants
[; TLS relocation specifiers
(UNSPEC_TLSGD 500)
(UNSPEC_TLSLDM 501)
(UNSPEC_NTPOFF 502)
(UNSPEC_DTPOFF 503)
(UNSPEC_GOTNTPOFF 504)
(UNSPEC_INDNTPOFF 505)
; TLS support
(UNSPEC_TP 510)
(UNSPEC_TLSLDM_NTPOFF 511)
(UNSPEC_TLS_LOAD 512)
])
;;
;; UNSPEC_VOLATILE usage
;;
(define_constants
[; TLS support
(UNSPECV_SET_TP 500)
])
;; Processor type. This attribute must exactly match the processor_type ;; Processor type. This attribute must exactly match the processor_type
;; enumeration in s390.h. ;; enumeration in s390.h.
...@@ -938,18 +967,15 @@ ...@@ -938,18 +967,15 @@
; movdi instruction pattern(s). ; movdi instruction pattern(s).
; ;
;; If generating PIC code and operands[1] is a symbolic CONST, emit a
;; move to get the address of the symbolic object from the GOT.
(define_expand "movdi" (define_expand "movdi"
[(set (match_operand:DI 0 "general_operand" "") [(set (match_operand:DI 0 "general_operand" "")
(match_operand:DI 1 "general_operand" ""))] (match_operand:DI 1 "general_operand" ""))]
"" ""
" "
{ {
/* Handle PIC symbolic constants. */ /* Handle symbolic constants. */
if (TARGET_64BIT && flag_pic && SYMBOLIC_CONST (operands[1])) if (TARGET_64BIT && SYMBOLIC_CONST (operands[1]))
emit_pic_move (operands, DImode); emit_symbolic_move (operands);
/* During and after reload, we need to force constants /* During and after reload, we need to force constants
to the literal pool ourselves, if necessary. */ to the literal pool ourselves, if necessary. */
...@@ -1099,18 +1125,15 @@ ...@@ -1099,18 +1125,15 @@
; movsi instruction pattern(s). ; movsi instruction pattern(s).
; ;
;; If generating PIC code and operands[1] is a symbolic CONST, emit a
;; move to get the address of the symbolic object from the GOT.
(define_expand "movsi" (define_expand "movsi"
[(set (match_operand:SI 0 "general_operand" "") [(set (match_operand:SI 0 "general_operand" "")
(match_operand:SI 1 "general_operand" ""))] (match_operand:SI 1 "general_operand" ""))]
"" ""
" "
{ {
/* Handle PIC symbolic constants. */ /* Handle symbolic constants. */
if (!TARGET_64BIT && flag_pic && SYMBOLIC_CONST (operands[1])) if (!TARGET_64BIT && SYMBOLIC_CONST (operands[1]))
emit_pic_move (operands, SImode); emit_symbolic_move (operands);
/* expr.c tries to load an effective address using /* expr.c tries to load an effective address using
force_reg. This fails because we don't have a force_reg. This fails because we don't have a
...@@ -6462,6 +6485,189 @@ ...@@ -6462,6 +6485,189 @@
;; ;;
;;- Thread-local storage support.
;;
(define_insn "get_tp_64"
[(set (match_operand:DI 0 "nonimmediate_operand" "=??d,Q")
(unspec:DI [(const_int 0)] UNSPEC_TP))]
"TARGET_64BIT"
"@
ear\\t%0,%%a0\;sllg\\t%0,%0,32\;ear\\t%0,%%a1
stam\\t%%a0,%%a1,%0"
[(set_attr "op_type" "NN,RS")
(set_attr "atype" "reg,*")
(set_attr "type" "o3,*")
(set_attr "length" "14,*")])
(define_insn "get_tp_31"
[(set (match_operand:SI 0 "nonimmediate_operand" "=d,Q")
(unspec:SI [(const_int 0)] UNSPEC_TP))]
"!TARGET_64BIT"
"@
ear\\t%0,%%a0
stam\\t%%a0,%%a0,%0"
[(set_attr "op_type" "RRE,RS")])
(define_insn "set_tp_64"
[(unspec_volatile [(match_operand:DI 0 "general_operand" "??d,Q")] UNSPECV_SET_TP)
(clobber (match_scratch:SI 1 "=d,X"))]
"TARGET_64BIT"
"@
sar\\t%%a1,%0\;srlg\\t%1,%0,32\;sar\\t%%a0,%1
lam\\t%%a0,%%a1,%0"
[(set_attr "op_type" "NN,RS")
(set_attr "atype" "reg,*")
(set_attr "type" "o3,*")
(set_attr "length" "14,*")])
(define_insn "set_tp_31"
[(unspec_volatile [(match_operand:SI 0 "general_operand" "d,Q")] UNSPECV_SET_TP)]
"!TARGET_64BIT"
"@
sar\\t%%a0,%0
lam\\t%%a0,%%a0,%0"
[(set_attr "op_type" "RRE,RS")])
(define_insn "*tls_load_64"
[(set (match_operand:DI 0 "register_operand" "=d")
(unspec:DI [(match_operand:DI 1 "memory_operand" "m")
(match_operand:DI 2 "" "")]
UNSPEC_TLS_LOAD))]
"TARGET_64BIT"
"lg\\t%0,%1%J2"
[(set_attr "op_type" "RXE")])
(define_insn "*tls_load_31"
[(set (match_operand:SI 0 "register_operand" "=d")
(unspec:SI [(match_operand:SI 1 "memory_operand" "m")
(match_operand:SI 2 "" "")]
UNSPEC_TLS_LOAD))]
"!TARGET_64BIT"
"l\\t%0,%1%J2"
[(set_attr "op_type" "RX")])
(define_expand "call_value_tls"
[(set (match_operand 0 "" "")
(call (const_int 0) (const_int 0)))
(use (match_operand 1 "" ""))]
""
"
{
rtx insn, sym;
if (!flag_pic)
abort ();
sym = s390_tls_get_offset ();
sym = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, sym), 113);
sym = gen_rtx_CONST (Pmode, sym);
/* Unless we can use the bras(l) insn, force the
routine address into a register. */
if (!TARGET_SMALL_EXEC && !TARGET_64BIT)
{
rtx target = gen_reg_rtx (Pmode);
emit_move_insn (target, sym);
sym = target;
}
sym = gen_rtx_MEM (QImode, sym);
/* Emit insn. */
insn = emit_call_insn (
gen_call_value_tls_exp (operands[0], sym, const0_rtx,
gen_rtx_REG (Pmode, RETURN_REGNUM),
operands[1]));
/* The calling convention of __tls_get_offset uses the
GOT register implicitly. */
use_reg (&CALL_INSN_FUNCTION_USAGE (insn), pic_offset_table_rtx);
use_reg (&CALL_INSN_FUNCTION_USAGE (insn), operands[0]);
CONST_OR_PURE_CALL_P (insn) = 1;
DONE;
}")
(define_expand "call_value_tls_exp"
[(parallel [(set (match_operand 0 "" "")
(call (match_operand 1 "" "")
(match_operand 2 "" "")))
(clobber (match_operand 3 "" ""))
(use (match_operand 4 "" ""))])]
""
"")
(define_insn "brasl_tls"
[(set (match_operand 0 "register_operand" "=df")
(call (mem:QI (match_operand:DI 1 "bras_sym_operand" "X"))
(match_operand:SI 2 "const_int_operand" "n")))
(clobber (match_operand:DI 3 "register_operand" "=r"))
(use (match_operand:DI 4 "" ""))]
"TARGET_64BIT"
"brasl\\t%3,%1%J4"
[(set_attr "op_type" "RIL")
(set_attr "type" "jsr")])
(define_insn "bras_tls"
[(set (match_operand 0 "register_operand" "=df")
(call (mem:QI (match_operand:SI 1 "bras_sym_operand" "X"))
(match_operand:SI 2 "const_int_operand" "n")))
(clobber (match_operand:SI 3 "register_operand" "=r"))
(use (match_operand:SI 4 "" ""))]
"TARGET_SMALL_EXEC"
"bras\\t%3,%1%J4"
[(set_attr "op_type" "RI")
(set_attr "type" "jsr")])
(define_insn "basr_tls_64"
[(set (match_operand 0 "register_operand" "=df")
(call (mem:QI (match_operand:DI 1 "register_operand" "a"))
(match_operand:SI 2 "const_int_operand" "n")))
(clobber (match_operand:DI 3 "register_operand" "=r"))
(use (match_operand:DI 4 "" ""))]
"TARGET_64BIT"
"basr\\t%3,%1%J4"
[(set_attr "op_type" "RR")
(set_attr "type" "jsr")])
(define_insn "basr_tls_31"
[(set (match_operand 0 "register_operand" "=df")
(call (mem:QI (match_operand:SI 1 "register_operand" "a"))
(match_operand:SI 2 "const_int_operand" "n")))
(clobber (match_operand:SI 3 "register_operand" "=r"))
(use (match_operand:SI 4 "" ""))]
"!TARGET_64BIT"
"basr\\t%3,%1%J4"
[(set_attr "op_type" "RR")
(set_attr "type" "jsr")
(set_attr "atype" "agen")])
(define_insn "bas_tls_64"
[(set (match_operand 0 "register_operand" "=df")
(call (mem:QI (match_operand:QI 1 "address_operand" "p"))
(match_operand:SI 2 "const_int_operand" "n")))
(clobber (match_operand:DI 3 "register_operand" "=r"))
(use (match_operand:DI 4 "" ""))]
"TARGET_64BIT"
"bas\\t%3,%a1%J4"
[(set_attr "op_type" "RX")
(set_attr "type" "jsr")
(set_attr "atype" "agen")])
(define_insn "bas_tls_31"
[(set (match_operand 0 "register_operand" "=df")
(call (mem:QI (match_operand:QI 1 "address_operand" "p"))
(match_operand:SI 2 "const_int_operand" "n")))
(clobber (match_operand:SI 3 "register_operand" "=r"))
(use (match_operand:SI 4 "" ""))]
"!TARGET_64BIT"
"bas\\t%3,%a1%J4"
[(set_attr "op_type" "RX")
(set_attr "type" "jsr")
(set_attr "atype" "agen")])
;;
;;- Miscellaneous instructions. ;;- Miscellaneous instructions.
;; ;;
......
...@@ -7942,6 +7942,41 @@ foo: data8 25 ...@@ -7942,6 +7942,41 @@ foo: data8 25
tls_first_major=2 tls_first_major=2
tls_first_minor=13 tls_first_minor=13
;; ;;
s390-*-*)
conftest_s='
.section ".tdata","awT",@progbits
foo: .long 25
.text
.long foo@TLSGD
.long foo@TLSLDM
.long foo@DTPOFF
.long foo@NTPOFF
.long foo@GOTNTPOFF
.long foo@INDNTPOFF
l %r1,foo@GOTNTPOFF(%r12)
l %r1,0(%r1):tls_load:foo
bas %r14,0(%r1,%r13):tls_gdcall:foo
bas %r14,0(%r1,%r13):tls_ldcall:foo'
tls_first_major=2
tls_first_minor=14
;;
s390x-*-*)
conftest_s='
.section ".tdata","awT",@progbits
foo: .long 25
.text
.quad foo@TLSGD
.quad foo@TLSLDM
.quad foo@DTPOFF
.quad foo@NTPOFF
.quad foo@GOTNTPOFF
lg %r1,foo@GOTNTPOFF(%r12)
larl %r1,foo@INDNTPOFF
brasl %r14,__tls_get_offset@PLT:tls_gdcall:foo
brasl %r14,__tls_get_offset@PLT:tls_ldcall:foo'
tls_first_major=2
tls_first_minor=14
;;
esac esac
if test -z "$tls_first_major"; then if test -z "$tls_first_major"; then
: :
...@@ -7972,7 +8007,7 @@ case "$target" in ...@@ -7972,7 +8007,7 @@ case "$target" in
# All TARGET_ABI_OSF targets. # All TARGET_ABI_OSF targets.
alpha*-*-osf* | alpha*-*-linux* | alpha*-*-*bsd*) alpha*-*-osf* | alpha*-*-linux* | alpha*-*-*bsd*)
echo $ac_n "checking assembler supports explicit relocations""... $ac_c" 1>&6 echo $ac_n "checking assembler supports explicit relocations""... $ac_c" 1>&6
echo "configure:7976: checking assembler supports explicit relocations" >&5 echo "configure:8011: checking assembler supports explicit relocations" >&5
if eval "test \"`echo '$''{'gcc_cv_as_explicit_relocs'+set}'`\" = set"; then if eval "test \"`echo '$''{'gcc_cv_as_explicit_relocs'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
...@@ -8022,7 +8057,7 @@ EOF ...@@ -8022,7 +8057,7 @@ EOF
;; ;;
sparc*-*-*) sparc*-*-*)
echo $ac_n "checking assembler .register pseudo-op support""... $ac_c" 1>&6 echo $ac_n "checking assembler .register pseudo-op support""... $ac_c" 1>&6
echo "configure:8026: checking assembler .register pseudo-op support" >&5 echo "configure:8061: checking assembler .register pseudo-op support" >&5
if eval "test \"`echo '$''{'gcc_cv_as_register_pseudo_op'+set}'`\" = set"; then if eval "test \"`echo '$''{'gcc_cv_as_register_pseudo_op'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
...@@ -8050,7 +8085,7 @@ EOF ...@@ -8050,7 +8085,7 @@ EOF
fi fi
echo $ac_n "checking assembler supports -relax""... $ac_c" 1>&6 echo $ac_n "checking assembler supports -relax""... $ac_c" 1>&6
echo "configure:8054: checking assembler supports -relax" >&5 echo "configure:8089: checking assembler supports -relax" >&5
if eval "test \"`echo '$''{'gcc_cv_as_relax_opt'+set}'`\" = set"; then if eval "test \"`echo '$''{'gcc_cv_as_relax_opt'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
...@@ -8078,7 +8113,7 @@ EOF ...@@ -8078,7 +8113,7 @@ EOF
fi fi
echo $ac_n "checking assembler and linker support unaligned pc related relocs""... $ac_c" 1>&6 echo $ac_n "checking assembler and linker support unaligned pc related relocs""... $ac_c" 1>&6
echo "configure:8082: checking assembler and linker support unaligned pc related relocs" >&5 echo "configure:8117: checking assembler and linker support unaligned pc related relocs" >&5
if eval "test \"`echo '$''{'gcc_cv_as_sparc_ua_pcrel'+set}'`\" = set"; then if eval "test \"`echo '$''{'gcc_cv_as_sparc_ua_pcrel'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
...@@ -8105,7 +8140,7 @@ EOF ...@@ -8105,7 +8140,7 @@ EOF
fi fi
echo $ac_n "checking assembler and linker support unaligned pc related relocs against hidden symbols""... $ac_c" 1>&6 echo $ac_n "checking assembler and linker support unaligned pc related relocs against hidden symbols""... $ac_c" 1>&6
echo "configure:8109: checking assembler and linker support unaligned pc related relocs against hidden symbols" >&5 echo "configure:8144: checking assembler and linker support unaligned pc related relocs against hidden symbols" >&5
if eval "test \"`echo '$''{'gcc_cv_as_sparc_ua_pcrel_hidden'+set}'`\" = set"; then if eval "test \"`echo '$''{'gcc_cv_as_sparc_ua_pcrel_hidden'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
...@@ -8145,7 +8180,7 @@ EOF ...@@ -8145,7 +8180,7 @@ EOF
fi fi
echo $ac_n "checking for assembler offsetable %lo() support""... $ac_c" 1>&6 echo $ac_n "checking for assembler offsetable %lo() support""... $ac_c" 1>&6
echo "configure:8149: checking for assembler offsetable %lo() support" >&5 echo "configure:8184: checking for assembler offsetable %lo() support" >&5
if eval "test \"`echo '$''{'gcc_cv_as_offsetable_lo10'+set}'`\" = set"; then if eval "test \"`echo '$''{'gcc_cv_as_offsetable_lo10'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
...@@ -8184,7 +8219,7 @@ EOF ...@@ -8184,7 +8219,7 @@ EOF
i[34567]86-*-* | x86_64-*-*) i[34567]86-*-* | x86_64-*-*)
echo $ac_n "checking assembler instructions""... $ac_c" 1>&6 echo $ac_n "checking assembler instructions""... $ac_c" 1>&6
echo "configure:8188: checking assembler instructions" >&5 echo "configure:8223: checking assembler instructions" >&5
gcc_cv_as_instructions= gcc_cv_as_instructions=
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 9 -o "$gcc_cv_gas_major_version" -gt 2; then if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 9 -o "$gcc_cv_gas_major_version" -gt 2; then
...@@ -8211,7 +8246,7 @@ EOF ...@@ -8211,7 +8246,7 @@ EOF
echo "$ac_t""$gcc_cv_as_instructions" 1>&6 echo "$ac_t""$gcc_cv_as_instructions" 1>&6
echo $ac_n "checking assembler GOTOFF in data directives""... $ac_c" 1>&6 echo $ac_n "checking assembler GOTOFF in data directives""... $ac_c" 1>&6
echo "configure:8215: checking assembler GOTOFF in data directives" >&5 echo "configure:8250: checking assembler GOTOFF in data directives" >&5
gcc_cv_as_gotoff_in_data=no gcc_cv_as_gotoff_in_data=no
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x
then then
...@@ -8241,7 +8276,7 @@ EOF ...@@ -8241,7 +8276,7 @@ EOF
esac esac
echo $ac_n "checking assembler dwarf2 debug_line support""... $ac_c" 1>&6 echo $ac_n "checking assembler dwarf2 debug_line support""... $ac_c" 1>&6
echo "configure:8245: checking assembler dwarf2 debug_line support" >&5 echo "configure:8280: checking assembler dwarf2 debug_line support" >&5
gcc_cv_as_dwarf2_debug_line=no gcc_cv_as_dwarf2_debug_line=no
# ??? Not all targets support dwarf2 debug_line, even within a version # ??? Not all targets support dwarf2 debug_line, even within a version
# of gas. Moreover, we need to emit a valid instruction to trigger any # of gas. Moreover, we need to emit a valid instruction to trigger any
...@@ -8298,7 +8333,7 @@ fi ...@@ -8298,7 +8333,7 @@ fi
echo "$ac_t""$gcc_cv_as_dwarf2_debug_line" 1>&6 echo "$ac_t""$gcc_cv_as_dwarf2_debug_line" 1>&6
echo $ac_n "checking assembler --gdwarf2 support""... $ac_c" 1>&6 echo $ac_n "checking assembler --gdwarf2 support""... $ac_c" 1>&6
echo "configure:8302: checking assembler --gdwarf2 support" >&5 echo "configure:8337: checking assembler --gdwarf2 support" >&5
gcc_cv_as_gdwarf2_flag=no gcc_cv_as_gdwarf2_flag=no
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x;
then then
...@@ -8327,7 +8362,7 @@ fi ...@@ -8327,7 +8362,7 @@ fi
echo "$ac_t""$gcc_cv_as_gdwarf2_flag" 1>&6 echo "$ac_t""$gcc_cv_as_gdwarf2_flag" 1>&6
echo $ac_n "checking assembler --gstabs support""... $ac_c" 1>&6 echo $ac_n "checking assembler --gstabs support""... $ac_c" 1>&6
echo "configure:8331: checking assembler --gstabs support" >&5 echo "configure:8366: checking assembler --gstabs support" >&5
gcc_cv_as_gstabs_flag=no gcc_cv_as_gstabs_flag=no
if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x;
then then
...@@ -8355,7 +8390,7 @@ fi ...@@ -8355,7 +8390,7 @@ fi
echo "$ac_t""$gcc_cv_as_gstabs_flag" 1>&6 echo "$ac_t""$gcc_cv_as_gstabs_flag" 1>&6
echo $ac_n "checking linker read-only and read-write section mixing""... $ac_c" 1>&6 echo $ac_n "checking linker read-only and read-write section mixing""... $ac_c" 1>&6
echo "configure:8359: checking linker read-only and read-write section mixing" >&5 echo "configure:8394: checking linker read-only and read-write section mixing" >&5
gcc_cv_ld_ro_rw_mix=unknown gcc_cv_ld_ro_rw_mix=unknown
if test x$gcc_cv_gld_major_version != x -a x$gcc_cv_gld_minor_version != x; then if test x$gcc_cv_gld_major_version != x -a x$gcc_cv_gld_minor_version != x; then
if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 10 -o "$gcc_cv_gld_major_version" -gt 2 && grep 'EMUL = elf' ../ld/Makefile > /dev/null; then if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 10 -o "$gcc_cv_gld_major_version" -gt 2 && grep 'EMUL = elf' ../ld/Makefile > /dev/null; then
...@@ -8393,7 +8428,7 @@ fi ...@@ -8393,7 +8428,7 @@ fi
echo "$ac_t""$gcc_cv_ld_ro_rw_mix" 1>&6 echo "$ac_t""$gcc_cv_ld_ro_rw_mix" 1>&6
echo $ac_n "checking linker PT_GNU_EH_FRAME support""... $ac_c" 1>&6 echo $ac_n "checking linker PT_GNU_EH_FRAME support""... $ac_c" 1>&6
echo "configure:8397: checking linker PT_GNU_EH_FRAME support" >&5 echo "configure:8432: checking linker PT_GNU_EH_FRAME support" >&5
gcc_cv_ld_eh_frame_hdr=no gcc_cv_ld_eh_frame_hdr=no
if test x$gcc_cv_gld_major_version != x -a x$gcc_cv_gld_minor_version != x; then if test x$gcc_cv_gld_major_version != x -a x$gcc_cv_gld_minor_version != x; then
if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 12 -o "$gcc_cv_gld_major_version" -gt 2 && grep 'EMUL = elf' ../ld/Makefile > /dev/null; then if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 12 -o "$gcc_cv_gld_major_version" -gt 2 && grep 'EMUL = elf' ../ld/Makefile > /dev/null; then
...@@ -8417,7 +8452,7 @@ echo "$ac_t""$gcc_cv_ld_eh_frame_hdr" 1>&6 ...@@ -8417,7 +8452,7 @@ echo "$ac_t""$gcc_cv_ld_eh_frame_hdr" 1>&6
case "$target" in case "$target" in
mips*-*-*) mips*-*-*)
echo $ac_n "checking whether libgloss uses STARTUP directives consistently""... $ac_c" 1>&6 echo $ac_n "checking whether libgloss uses STARTUP directives consistently""... $ac_c" 1>&6
echo "configure:8421: checking whether libgloss uses STARTUP directives consistently" >&5 echo "configure:8456: checking whether libgloss uses STARTUP directives consistently" >&5
gcc_cv_mips_libgloss_startup=no gcc_cv_mips_libgloss_startup=no
gcc_cv_libgloss_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/libgloss gcc_cv_libgloss_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/libgloss
if test "x$exec_prefix" = xNONE; then if test "x$exec_prefix" = xNONE; then
...@@ -8621,7 +8656,7 @@ fi ...@@ -8621,7 +8656,7 @@ fi
echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6 echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
echo "configure:8625: checking whether to enable maintainer-specific portions of Makefiles" >&5 echo "configure:8660: checking whether to enable maintainer-specific portions of Makefiles" >&5
# Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
if test "${enable_maintainer_mode+set}" = set; then if test "${enable_maintainer_mode+set}" = set; then
enableval="$enable_maintainer_mode" enableval="$enable_maintainer_mode"
......
...@@ -1944,6 +1944,41 @@ foo: data8 25 ...@@ -1944,6 +1944,41 @@ foo: data8 25
tls_first_major=2 tls_first_major=2
tls_first_minor=13 tls_first_minor=13
;; ;;
s390-*-*)
conftest_s='
.section ".tdata","awT",@progbits
foo: .long 25
.text
.long foo@TLSGD
.long foo@TLSLDM
.long foo@DTPOFF
.long foo@NTPOFF
.long foo@GOTNTPOFF
.long foo@INDNTPOFF
l %r1,foo@GOTNTPOFF(%r12)
l %r1,0(%r1):tls_load:foo
bas %r14,0(%r1,%r13):tls_gdcall:foo
bas %r14,0(%r1,%r13):tls_ldcall:foo'
tls_first_major=2
tls_first_minor=14
;;
s390x-*-*)
conftest_s='
.section ".tdata","awT",@progbits
foo: .long 25
.text
.quad foo@TLSGD
.quad foo@TLSLDM
.quad foo@DTPOFF
.quad foo@NTPOFF
.quad foo@GOTNTPOFF
lg %r1,foo@GOTNTPOFF(%r12)
larl %r1,foo@INDNTPOFF
brasl %r14,__tls_get_offset@PLT:tls_gdcall:foo
brasl %r14,__tls_get_offset@PLT:tls_ldcall:foo'
tls_first_major=2
tls_first_minor=14
;;
esac esac
if test -z "$tls_first_major"; then if test -z "$tls_first_major"; then
: :
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment