aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2000-06-25 16:39:45 +0000
committerNick Clifton <nickc@redhat.com>2000-06-25 16:39:45 +0000
commit05c58a7cfb691ea58be9232ac3ccda1d74415d5d (patch)
treec13c6078ff03b93a243f5ff95e83c88bae68a214
parent307ff1df129bd324640f7c6361c2f78423dc88e7 (diff)
downloadbinutils-05c58a7cfb691ea58be9232ac3ccda1d74415d5d.zip
binutils-05c58a7cfb691ea58be9232ac3ccda1d74415d5d.tar.gz
binutils-05c58a7cfb691ea58be9232ac3ccda1d74415d5d.tar.bz2
Treat GNU weak symbols as external.
-rw-r--r--binutils/ChangeLog6
-rw-r--r--binutils/rdcoff.c21
2 files changed, 26 insertions, 1 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 1cb0b717..0e576ca 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -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
diff --git a/binutils/rdcoff.c b/binutils/rdcoff.c
index e1385c7..22c8ab9 100644
--- a/binutils/rdcoff.c
+++ b/binutils/rdcoff.c
@@ -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));
/* 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;