osf.h (ASM_OUTPUT_WEAK_ALIAS, [...]): Define.
authorRainer Orth <ro@TechFak.Uni-Bielefeld.DE>
Thu, 19 Jul 2001 18:08:17 +0000 (18:08 +0000)
committerRainer Orth <ro@gcc.gnu.org>
Thu, 19 Jul 2001 18:08:17 +0000 (18:08 +0000)
* config/alpha/osf.h (ASM_OUTPUT_WEAK_ALIAS, ASM_WEAKEN_LABEL,
HANDLE_SYSV_PRAGMA): Define.
* mips-tfile.c (add_ext_symbol): Pass complete symbol ptr, inline
previous args.
(copy_object): Caller changed.

testsuite:
* g++.old-deja/g++.pt/static3.C: Removed alpha*-*-osf* XFAIL.
g++.old-deja/g++.pt/static6.C: Likewise.
* lib/target-supports.exp (check_weak_available): alpha*-*-osf*
supports weak symbols.

From-SVN: r44153

gcc/ChangeLog
gcc/config/alpha/osf.h
gcc/mips-tfile.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.old-deja/g++.pt/static3.C
gcc/testsuite/g++.old-deja/g++.pt/static6.C
gcc/testsuite/lib/target-supports.exp

index 61401d15c5f23d5452a08b234e272d4d3783c217..88ab499e2260a397ffaf0bae0b954a13920c3ba2 100644 (file)
@@ -1,3 +1,11 @@
+2001-07-19  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+
+       * config/alpha/osf.h (ASM_OUTPUT_WEAK_ALIAS, ASM_WEAKEN_LABEL,
+       HANDLE_SYSV_PRAGMA): Define.
+       * mips-tfile.c (add_ext_symbol): Pass complete symbol ptr, inline
+       previous args.
+       (copy_object): Caller changed.
+
 2001-07-19  Andreas Schwab  <schwab@suse.de>
 
        * configure.in (assembler dwarf2 debug_line support): Define nop
index 24ebaf6aa3fd31a8543712804a04a718c9a1da49..250974c46e7b7666178191e6677e2702514a6e64 100644 (file)
@@ -186,3 +186,26 @@ __enable_execute_stack (addr)                                              \
   (TARGET_GAS                                                               \
    ? (((GLOBAL) ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel | DW_EH_PE_sdata4) \
    : DW_EH_PE_aligned)
+
+/* This is how we tell the assembler that a symbol is weak.  */
+
+#define ASM_OUTPUT_WEAK_ALIAS(FILE, NAME, VALUE)       \
+  do                                                   \
+    {                                                  \
+      ASM_GLOBALIZE_LABEL (FILE, NAME);                        \
+      fputs ("\t.weakext\t", FILE);                    \
+      assemble_name (FILE, NAME);                      \
+      if (VALUE)                                       \
+        {                                              \
+          fputc (' ', FILE);                           \
+          assemble_name (FILE, VALUE);                 \
+        }                                              \
+      fputc ('\n', FILE);                              \
+    }                                                  \
+  while (0)
+
+#define ASM_WEAKEN_LABEL(FILE, NAME) ASM_OUTPUT_WEAK_ALIAS(FILE, NAME, 0)
+
+/* Handle #pragma weak and #pragma pack.  */
+#undef HANDLE_SYSV_PRAGMA
+#define HANDLE_SYSV_PRAGMA 1
index f28302feb8f78ac1a83bfdecf89f46e99742576b..5de540a03bdf1d88f05382fb9c3bacd8ba003c81 100644 (file)
@@ -1624,13 +1624,8 @@ STATIC symint_t  add_local_symbol
                                         symint_t,
                                         symint_t));
 
-STATIC symint_t        add_ext_symbol  PARAMS ((const char *,
-                                        const char *,
-                                        st_t,
-                                        sc_t,
-                                        long,
-                                        symint_t,
-                                        int));
+STATIC symint_t        add_ext_symbol  PARAMS ((EXTR *,
+                                        int));
 
 STATIC symint_t        add_aux_sym_symint
                                PARAMS ((symint_t));
@@ -2044,23 +2039,24 @@ add_local_symbol (str_start, str_end_p1, type, storage, value, indx)
 /* Add an external symbol.  */
 
 STATIC symint_t
-add_ext_symbol (str_start, str_end_p1, type, storage, value, indx, ifd)
-     const char *str_start;            /* first byte in string */
-     const char *str_end_p1;           /* first byte after string */
-     st_t type;                                /* symbol type */
-     sc_t storage;                     /* storage class */
-     long value;                       /* value of symbol */
-     symint_t indx;                    /* index to local/aux. syms */
+add_ext_symbol (esym, ifd)
+     EXTR *esym;                       /* symbol pointer */
      int ifd;                          /* file index */
 {
+  const char *str_start;               /* first byte in string */
+  const char *str_end_p1;              /* first byte after string */
   register EXTR *psym;
   register varray_t *vp = &ext_symbols;
   shash_t *hash_ptr = (shash_t *) 0;
 
+  str_start = ORIG_ESTRS (esym->asym.iss);
+  str_end_p1 = str_start + strlen(str_start);
+
   if (debug > 1)
     {
-      const char *sc_str = sc_to_string (storage);
-      const char *st_str = st_to_string (type);
+      long value = esym->asym.value;
+      const char *sc_str = sc_to_string (esym->asym.sc);
+      const char *st_str = st_to_string (esym->asym.st);
 
       fprintf (stderr,
               "\tesym\tv= %10ld, ifd= %2d, sc= %-12s",
@@ -2078,11 +2074,9 @@ add_ext_symbol (str_start, str_end_p1, type, storage, value, indx, ifd)
 
   psym = &vp->last->datum->esym[ vp->objects_last_page++ ];
 
+  *psym = *esym;
   psym->ifd = ifd;
-  psym->asym.value = value;
-  psym->asym.st    = (unsigned) type;
-  psym->asym.sc    = (unsigned) storage;
-  psym->asym.index = indx;
+  psym->asym.index = indexNil;
   psym->asym.iss   = (str_start == (const char *) 0)
                        ? 0
                        : add_string (&ext_strings,
@@ -4629,17 +4623,10 @@ copy_object ()
   for (es = 0; es < orig_sym_hdr.iextMax; es++)
     {
       register EXTR *eptr = orig_ext_syms + es;
-      register char *ename = ORIG_ESTRS (eptr->asym.iss);
       register unsigned ifd = eptr->ifd;
 
-      (void) add_ext_symbol (ename,
-                            ename + strlen (ename),
-                            (st_t) eptr->asym.st,
-                            (sc_t) eptr->asym.sc,
-                            eptr->asym.value,
-                            (symint_t) indexNil,
-                            ((long) ifd < orig_sym_hdr.ifdMax
-                             ? remap_file_number[ifd] : (int) ifd));
+      (void) add_ext_symbol (eptr, ((long) ifd < orig_sym_hdr.ifdMax)
+                            ? remap_file_number[ ifd ] : ifd );
     }
 
 
index 08d19255d78b2c448eab40effdd47a840d1e5d18..c5dd4b216262895363aec21f3582668df22d8db6 100644 (file)
@@ -1,3 +1,10 @@
+2001-07-19  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+
+       * g++.old-deja/g++.pt/static3.C: Removed alpha*-*-osf* XFAIL.
+       g++.old-deja/g++.pt/static6.C: Likewise.
+       * lib/target-supports.exp (check_weak_available): alpha*-*-osf*
+       supports weak symbols.
+
 2001-07-18  Andreas Jaeger  <aj@suse.de>
 
        * g++.dg/vtgc1.C: Revert patch from 2001-04-26 since vtable-gc is
index df770dac87d2a76c8c9ea6dc5ce4783461a37e0e..bfcfbdbe743c53f01dd6bab700f2cae2c6589343 100644 (file)
@@ -1,6 +1,6 @@
 // On targets that don't support weak symbols, we require an explicit
 // instantiation of arr.
-// excess errors test - XFAIL *-*-aout *-*-coff *-*-hpux* alpha*-dec-osf* *-*-hms
+// excess errors test - XFAIL *-*-aout *-*-coff *-*-hpux* *-*-hms
 
 template<class T>
 struct A {
index b433e3efa390fb4733add3a5339e392879959764..8052dc219a3098ba8a47dcd51d4448562b2ec074 100644 (file)
@@ -1,5 +1,5 @@
 // Build don't run:
-// excess errors test - XFAIL *-*-aout *-*-coff *-*-hpux* alpha*-dec-osf* *-*-hms
+// excess errors test - XFAIL *-*-aout *-*-coff *-*-hpux* *-*-hms
 
 // Simplified from testcase by Erez Louidor Lior <s3824888@techst02.technion.ac.il>
 
index 054fdb8f77033fdf4646f73fc19b7e3ab50bdde4..8664256787809aaaed702bc659036150b09280f8 100644 (file)
@@ -27,6 +27,7 @@
 # this proc returns 1 if they're supported, 0 if they're not, or -1 if unsure
 
 proc check_weak_available { } {
+    global target_triplet
     global target_cpu
 
     # All mips targets should support it
@@ -35,6 +36,12 @@ proc check_weak_available { } {
         return 1
     }
 
+    # DEC OSF/1/Digital UNIX/Tru64 UNIX supports it
+
+    if { [regexp "alpha.*osf.*" $target_triplet] } {
+       return 1
+    }
+
     # ELF and ECOFF support it. a.out does with gas/gld but may also with
     # other linkers, so we should try it