diff options
author | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-05-23 21:55:30 +0000 |
---|---|---|
committer | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-05-23 21:55:30 +0000 |
commit | 2d6788fec3c05a3d5cb0133a5faedea13a9724c5 (patch) | |
tree | c1b2e00bd4d42f8bb8685ead98e7da60c3f0d7f2 /gcc/configure.in | |
parent | f1c96ec2f219881bfad4adcc6ee7efd7983e9c58 (diff) | |
download | gcc-2d6788fec3c05a3d5cb0133a5faedea13a9724c5.tar.gz |
* configure.in (HAVE_AS_TLS): New test.
* config.in, configure: Rebuild.
* config/i386/i386.c (TARGET_HAVE_TLS): Set if HAVE_AS_TLS.
(ix86_tls_dialect_string, ix86_tls_dialect): New.
(override_options): Set it.
(tls_model_chars, tls_symbolic_operand): New.
(tls_symbolic_operand_1, global_dynamic_symbolic_operand): New.
(local_dynamic_symbolic_operand, initial_exec_symbolic_operand): New.
(local_exec_symbolic_operand): New.
(get_pic_label_name): Merge into output_set_got.
(ix86_asm_file_end): Emit pic_label_name if defined.
(legitimate_constant_p, constant_address_p): New.
(legitimate_pic_operand_p): New.
(legitimate_pic_address_disp_p): Handle GOTTPOFF, NTPOFF, DTPOFF.
(legitimate_address_p): Likewise.
(ix86_encode_section_info): Rename from i386_; handle tls decls.
(ix86_strip_name_encoding): New.
(get_thread_pointer): New.
(legitimize_address): Handle tls symbols.
(output_pic_addr_const): Handle GOTTPOFF, TPOFF, NTPOFF, DTPOFF.
Remove UNSPEC_PLT.
(struct machine_function): Add some_ld_name.
(get_some_local_dynamic_name, get_some_local_dynamic_name_1): Set it.
(print_operand) [&]: Use it. Handle UNSPEC_TP.
(output_addr_const_extra): New.
(maybe_get_pool_constant): New.
(ix86_split_to_parts): Use it.
(ix86_expand_move): Handle tls symbols.
(ix86_tls_get_addr): New.
* config/i386/i386.h (TARGET_GNU_TLS, TARGET_SUN_TLS): New.
(TARGET_OPTIONS): Add tls-dialect.
(CONSTANT_ADDRESS_P): Use new out-of-line function.
(LEGITIMATE_CONSTANT_P): Likewise.
(LEGITIMATE_PIC_OPERAND_P): Likewise.
(TARGET_STRIP_NAME_ENCODING): New.
(ASM_OUTPUT_LABELREF): New.
(PRINT_OPERAND_PUNCT_VALID_P): Add '&'.
(OUTPUT_ADDR_CONST_EXTRA): New.
(PREDICATE_CODES): Update.
(ix86_tls_dialect, ix86_tls_dialect_string): New.
* config/i386/i386.md: Regroup and renumber unspec constants.
(tls_global_dynamic_gnu, tls_global_dynamic_sun): New.
(tls_local_dynamic_base_gnu, tls_local_dynamic_base_sun): New.
(tls_global_dynamic, tls_local_dynamic_base): New.
(tls_local_dynamic_once): New.
* config/i386/i386-protos.h: Update.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@53812 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/configure.in')
-rw-r--r-- | gcc/configure.in | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/gcc/configure.in b/gcc/configure.in index 71bfca708f9..8dcb671cf32 100644 --- a/gcc/configure.in +++ b/gcc/configure.in @@ -1718,6 +1718,55 @@ if test x"$gcc_cv_as_shf_merge" = xyes; then fi AC_MSG_RESULT($gcc_cv_as_shf_merge) +AC_MSG_CHECKING(assembler thread-local storage support) +gcc_cv_as_tls=no +conftest_s= +tls_first_major= +tls_first_minor= +case "$target" in +changequote(,)dnl + i[34567]86-*-*) +changequote([,])dnl + conftest_s=' + .section ".tdata","awT",@progbits +foo: .long 25 + .text + movl %gs:0, %eax + leal foo@TLSGD(,%ebx,1), %eax + leal foo@TLSLDM(%ebx), %eax + leal foo@DTPOFF(%eax), %edx + movl foo@GOTTPOFF(%ebx), %eax + subl foo@GOTTPOFF(%ebx), %eax + movl $foo@TPOFF, %eax + subl $foo@TPOFF, %eax + leal foo@NTPOFF(%ecx), %eax' + tls_first_major=2 + tls_first_minor=13 + ;; +esac +if test -z "$tls_first_major"; then + : +elif 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 "$tls_first_major" \ + -a "$gcc_cv_gas_minor_version" -ge "$tls_first_minor" \ + -o "$gcc_cv_gas_major_version" -gt "$tls_first_major"; then + gcc_cv_as_tls=yes + fi +elif test x$gcc_cv_as != x; then + echo "$conftest_s" > conftest.s + if $gcc_cv_as --fatal-warnings -o conftest.o conftest.s > /dev/null 2>&1 + then + gcc_cv_as_tls=yes + fi + rm -f conftest.s conftest.o +fi +if test "$gcc_cv_as_tls" = yes; then + AC_DEFINE(HAVE_AS_TLS, 1, + [Define if your assembler supports thread-local storage.]) +fi +AC_MSG_RESULT($gcc_cv_as_tls) + case "$target" in # All TARGET_ABI_OSF targets. alpha*-*-osf* | alpha*-*-linux* | alpha*-*-*bsd*) |