]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
configure.in (HAVE_SPARC_UA_PCREL_HIDDEN): Test whether %r_disp32() works properly...
authorJakub Jelinek <jakub@redhat.com>
Wed, 3 Apr 2002 22:21:12 +0000 (00:21 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 3 Apr 2002 22:21:12 +0000 (00:21 +0200)
* configure.in (HAVE_SPARC_UA_PCREL_HIDDEN): Test whether %r_disp32()
works properly with .hidden symbols.
* configure: Rebuilt.
* config.in: Rebuilt.
* config/sparc/sparc.h (ASM_PREFERRED_EH_DATA_FORMAT): Use
DW_EH_PE_absptr for flag_pic && GLOBAL if %r_disp32() doesn't work
properly with .hidden symbols.

From-SVN: r51816

gcc/ChangeLog
gcc/config.in
gcc/config/sparc/sparc.h
gcc/configure
gcc/configure.in

index eea96e305b2dc3b4ee429298be62b14b810bd413..72e1f0c82dc335c64e51d9c22ae2ad5c52f00ba5 100644 (file)
@@ -1,3 +1,13 @@
+2002-04-03  Jakub Jelinek  <jakub@redhat.com>
+
+       * configure.in (HAVE_SPARC_UA_PCREL_HIDDEN): Test whether %r_disp32()
+       works properly with .hidden symbols.
+       * configure: Rebuilt.
+       * config.in: Rebuilt.
+       * config/sparc/sparc.h (ASM_PREFERRED_EH_DATA_FORMAT): Use
+       DW_EH_PE_absptr for flag_pic && GLOBAL if %r_disp32() doesn't work
+       properly with .hidden symbols.
+
 2002-04-03  Jakub Jelinek  <jakub@redhat.com>
 
        PR middle-end/6102
index fbe9acd165c143fa0266969351c870cfff7debaf..bd43cb84cdba657ee9f53418988a2543a999e5ee 100644 (file)
 /* Define if your assembler and linker support unaligned PC relative relocs. */
 #undef HAVE_AS_SPARC_UA_PCREL
 
+/* Define if your assembler and linker support unaligned PC relative relocs against hidden symbols. */
+#undef HAVE_AS_SPARC_UA_PCREL_HIDDEN
+
 /* Define if the assembler supports 64bit sparc. */
 #undef AS_SPARC64_FLAG
 
index d488a8f38bab708336b0fff8f02ddb8a9d81040b..6a5d1649778d5df7c545be1953b97aa79fa4acbc 100644 (file)
@@ -1955,14 +1955,27 @@ do {                                                                    \
    If assembler and linker properly support .uaword %r_disp32(foo),
    then use PC relative 32-bit relocations instead of absolute relocs
    for shared libraries.  On sparc64, use pc relative 32-bit relocs even
-   for binaries, to save memory.  */
+   for binaries, to save memory.
+
+   binutils 2.12 would emit a R_SPARC_DISP32 dynamic relocation if the
+   symbol %r_disp32() is against was not local, but .hidden.  In that
+   case, we have to use DW_EH_PE_absptr for pic personality.  */
 #ifdef HAVE_AS_SPARC_UA_PCREL
+#ifdef HAVE_AS_SPARC_UA_PCREL_HIDDEN
 #define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL)                      \
   (flag_pic                                                            \
    ? (GLOBAL ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel | DW_EH_PE_sdata4\
    : ((TARGET_ARCH64 && ! GLOBAL)                                      \
       ? (DW_EH_PE_pcrel | DW_EH_PE_sdata4)                             \
       : DW_EH_PE_absptr))
+#else
+#define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL)                      \
+  (flag_pic                                                            \
+   ? (GLOBAL ? DW_EH_PE_absptr : (DW_EH_PE_pcrel | DW_EH_PE_sdata4))   \
+   : ((TARGET_ARCH64 && ! GLOBAL)                                      \
+      ? (DW_EH_PE_pcrel | DW_EH_PE_sdata4)                             \
+      : DW_EH_PE_absptr))
+#endif
 
 /* Emit a PC-relative relocation.  */
 #define ASM_OUTPUT_DWARF_PCREL(FILE, SIZE, LABEL)      \
index 9220430457ee2db34e753d737cbb8e311d84f378..12709967e3545d1cf4d53fac9021f3e19d655152 100755 (executable)
@@ -7462,10 +7462,9 @@ else
        if test x$gcc_cv_as != x -a x$gcc_cv_ld != x; then
            gcc_cv_as_sparc_ua_pcrel=no
            echo ".text; foo: nop; .data; .align 4; .byte 0; .uaword %r_disp32(foo)" > conftest.s
-           if $gcc_cv_as -K PIC -o conftest.o conftest.s > /dev/null 2>&1; then
-               if $gcc_cv_ld -o conftest conftest.o -G > /dev/null 2>&1; then
-                   gcc_cv_as_sparc_ua_pcrel=yes
-               fi
+           if $gcc_cv_as -K PIC -o conftest.o conftest.s > /dev/null 2>&1 \
+              && $gcc_cv_ld -o conftest conftest.o -G > /dev/null 2>&1; then
+               gcc_cv_as_sparc_ua_pcrel=yes
            fi
            rm -f conftest.s conftest.o conftest
        fi
@@ -7480,6 +7479,46 @@ EOF
 
     fi
 
+    echo $ac_n "checking assembler and linker support unaligned pc related relocs against hidden symbols""... $ac_c" 1>&6
+echo "configure:7430: 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
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+       if test "x$gcc_cv_as_sparc_ua_pcrel" = xyes; then
+           gcc_cv_as_sparc_ua_pcrel_hidden=unknown
+           if test x$gcc_cv_objdump != x; then
+               gcc_cv_as_sparc_ua_pcrel_hidden=no
+               echo ".data; .align 4; .byte 0x31; .uaword %r_disp32(foo)" > conftest.s
+               echo ".byte 0x32, 0x33, 0x34; .global foo; .hidden foo" >> conftest.s
+               echo "foo: .skip 4" >> conftest.s
+               if $gcc_cv_as -K PIC -o conftest.o conftest.s > /dev/null 2>&1 \
+                  && $gcc_cv_ld -o conftest conftest.o -G > /dev/null 2>&1 \
+                  && $gcc_cv_objdump -s -j .data conftest 2> /dev/null \
+                     | grep ' 31000000 07323334' > /dev/null 2>&1; then
+                   if $gcc_cv_objdump -R conftest 2> /dev/null \
+                      | grep 'DISP32' > /dev/null 2>&1; then
+                       :
+                   else
+                       gcc_cv_as_sparc_ua_pcrel_hidden=yes
+                   fi
+               fi
+           fi
+           rm -f conftest.s conftest.o conftest
+       else
+           gcc_cv_as_sparc_ua_pcrel_hidden="$gcc_cv_as_sparc_ua_pcrel"
+       fi
+    
+fi
+
+echo "$ac_t""$gcc_cv_as_sparc_ua_pcrel_hidden" 1>&6
+    if test "x$gcc_cv_as_sparc_ua_pcrel_hidden" = xyes; then
+       cat >> confdefs.h <<\EOF
+#define HAVE_AS_SPARC_UA_PCREL_HIDDEN 1
+EOF
+
+    fi
+
     case "$tm_file" in
     *64*)
        echo $ac_n "checking for 64 bit support in assembler ($gcc_cv_as)""... $ac_c" 1>&6
index 3952de65ace263f6c02b1fc074de7d5abd0caa6a..7abf01bb641843290a6f29009631a13d4de28c7a 100644 (file)
@@ -1755,10 +1755,9 @@ EOF
        if test x$gcc_cv_as != x -a x$gcc_cv_ld != x; then
            gcc_cv_as_sparc_ua_pcrel=no
            echo ".text; foo: nop; .data; .align 4; .byte 0; .uaword %r_disp32(foo)" > conftest.s
-           if $gcc_cv_as -K PIC -o conftest.o conftest.s > /dev/null 2>&1; then
-               if $gcc_cv_ld -o conftest conftest.o -G > /dev/null 2>&1; then
-                   gcc_cv_as_sparc_ua_pcrel=yes
-               fi
+           if $gcc_cv_as -K PIC -o conftest.o conftest.s > /dev/null 2>&1 \
+              && $gcc_cv_ld -o conftest conftest.o -G > /dev/null 2>&1; then
+               gcc_cv_as_sparc_ua_pcrel=yes
            fi
            rm -f conftest.s conftest.o conftest
        fi
@@ -1768,6 +1767,37 @@ EOF
                [Define if your assembler and linker support unaligned PC relative relocs.])
     fi
 
+    AC_CACHE_CHECK([assembler and linker support unaligned pc related relocs against hidden symbols],
+       gcc_cv_as_sparc_ua_pcrel_hidden, [
+       if test "x$gcc_cv_as_sparc_ua_pcrel" = xyes; then
+           gcc_cv_as_sparc_ua_pcrel_hidden=unknown
+           if test x$gcc_cv_objdump != x; then
+               gcc_cv_as_sparc_ua_pcrel_hidden=no
+               echo ".data; .align 4; .byte 0x31; .uaword %r_disp32(foo)" > conftest.s
+               echo ".byte 0x32, 0x33, 0x34; .global foo; .hidden foo" >> conftest.s
+               echo "foo: .skip 4" >> conftest.s
+               if $gcc_cv_as -K PIC -o conftest.o conftest.s > /dev/null 2>&1 \
+                  && $gcc_cv_ld -o conftest conftest.o -G > /dev/null 2>&1 \
+                  && $gcc_cv_objdump -s -j .data conftest 2> /dev/null \
+                     | grep ' 31000000 07323334' > /dev/null 2>&1; then
+                   if $gcc_cv_objdump -R conftest 2> /dev/null \
+                      | grep 'DISP32' > /dev/null 2>&1; then
+                       :
+                   else
+                       gcc_cv_as_sparc_ua_pcrel_hidden=yes
+                   fi
+               fi
+           fi
+           rm -f conftest.s conftest.o conftest
+       else
+           gcc_cv_as_sparc_ua_pcrel_hidden="$gcc_cv_as_sparc_ua_pcrel"
+       fi
+    ])
+    if test "x$gcc_cv_as_sparc_ua_pcrel_hidden" = xyes; then
+       AC_DEFINE(HAVE_AS_SPARC_UA_PCREL_HIDDEN, 1,
+               [Define if your assembler and linker support unaligned PC relative relocs against hidden symbols.])
+    fi
+
     case "$tm_file" in
     *64*)
        AC_CACHE_CHECK([for 64 bit support in assembler ($gcc_cv_as)],