Treat GNU weak symbols as external.
authorNick Clifton <nickc@redhat.com>
Sun, 25 Jun 2000 16:39:45 +0000 (16:39 +0000)
committerNick Clifton <nickc@redhat.com>
Sun, 25 Jun 2000 16:39:45 +0000 (16:39 +0000)
binutils/ChangeLog
binutils/rdcoff.c

index 1cb0b7174505031c933efb209c3f0910887ab470..0e576ca252b02551892c25a62a96108605132969 100644 (file)
@@ -1,3 +1,9 @@
+2000-06-25 Mark Elbrecht <snowball3@bigfoot.com>
+
+       * rdcoff (parse_coff_symbol): Treat GNU weak symbols as external.
+       (external_coff_symbol_p): New function.
+       (parse_coff): Use it.
+
 2000-06-25  Alexander Aganichev <AAganichev@hypercom.com>
 
        * ar.c (normalize): Advance past both characters in a DOS based
index e1385c7140eefe6ce86228bd02f640f392bf7282..22c8ab95e9646dac3cb87b161c8fda079f60388c 100644 (file)
@@ -99,6 +99,7 @@ static debug_type parse_coff_enum_type
 static boolean parse_coff_symbol
   PARAMS ((bfd *, struct coff_types *, asymbol *, long,
           struct internal_syment *, PTR, debug_type, boolean));
+static boolean external_coff_symbol_p PARAMS ((int sym_class));
 \f
 /* Return the slot for a type.  */
 
@@ -588,6 +589,7 @@ parse_coff_symbol (abfd, types, sym, coff_symno, psyment, dhandle, type,
        return false;
       break;
 
+    case C_WEAKEXT:
     case C_EXT:
       if (! debug_record_variable (dhandle, bfd_asymbol_name (sym), type,
                                   DEBUG_GLOBAL, bfd_asymbol_value (sym)))
@@ -656,6 +658,22 @@ parse_coff_symbol (abfd, types, sym, coff_symno, psyment, dhandle, type,
   return true;                            
 }
 
+/* Determine if a symbol has external visibility.  */
+
+static boolean
+external_coff_symbol_p (int sym_class)
+{
+  switch (sym_class)
+    {
+      case C_EXT:
+      case C_WEAKEXT:
+        return true;
+    default:
+      break;
+    }
+  return false;         
+}
+
 /* This is the main routine.  It looks through all the symbols and
    handles them.  */
 
@@ -767,6 +785,7 @@ parse_coff (abfd, syms, symcount, dhandle)
          if (syment.n_type == T_NULL)
            break;
          /* Fall through.  */
+       case C_WEAKEXT:
        case C_EXT:
          if (ISFCN (syment.n_type))
            {
@@ -805,7 +824,7 @@ parse_coff (abfd, syms, symcount, dhandle)
                return false;
 
              if (! debug_record_function (dhandle, fnname, type,
-                                          fnclass == C_EXT,
+                                          external_coff_symbol_p (fnclass),
                                           bfd_asymbol_value (sym)))
                return false;