diff options
author | Nick Clifton <nickc@redhat.com> | 2000-06-25 16:39:45 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2000-06-25 16:39:45 +0000 |
commit | 05c58a7cfb691ea58be9232ac3ccda1d74415d5d (patch) | |
tree | c13c6078ff03b93a243f5ff95e83c88bae68a214 | |
parent | 307ff1df129bd324640f7c6361c2f78423dc88e7 (diff) | |
download | binutils-05c58a7cfb691ea58be9232ac3ccda1d74415d5d.zip binutils-05c58a7cfb691ea58be9232ac3ccda1d74415d5d.tar.gz binutils-05c58a7cfb691ea58be9232ac3ccda1d74415d5d.tar.bz2 |
Treat GNU weak symbols as external.
-rw-r--r-- | binutils/ChangeLog | 6 | ||||
-rw-r--r-- | binutils/rdcoff.c | 21 |
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; |