diff options
author | Alexandre Oliva <aoliva@redhat.com> | 2005-10-24 17:51:42 +0000 |
---|---|---|
committer | Alexandre Oliva <aoliva@redhat.com> | 2005-10-24 17:51:42 +0000 |
commit | 06e77878ef2b6a57ef92c1691b3aeb668dc248ba (patch) | |
tree | 5bb8d868d5530589690a1e248422257110dea2b3 /gas/config/obj-coff.h | |
parent | 9ba4c445137e7c387090441e2837e09479f14457 (diff) | |
download | gdb-06e77878ef2b6a57ef92c1691b3aeb668dc248ba.zip gdb-06e77878ef2b6a57ef92c1691b3aeb668dc248ba.tar.gz gdb-06e77878ef2b6a57ef92c1691b3aeb668dc248ba.tar.bz2 |
gas/ChangeLog:
* read.c (potable): Add weakref.
(s_weakref): New.
* read.h (s_weakref): Declare.
* struc-symbol.h (struct symbol): Add sy_weakrefr and sy_weakrefd.
* symbols.c (colon): Clear weakrefr.
(symbol_find_exact): Rename to, and reimplement in terms of...
(symbol_find_exact_noref): ... new function.
(symbol_find): Likewise...
(symbol_find_noref): ... ditto.
(resolve_symbol_value): Resolve weakrefr without setting their
values.
(S_SET_WEAK): Call hook.
(S_GET_VALUE): Follow weakref link.
(S_SET_VALUE): Clear weakrefr.
(S_IS_WEAK): Follow weakref link.
(S_IS_WEAKREFR, S_SET_WEAKREFR, S_CLEAR_WEAKREFR): New.
(S_IS_WEAKREFD, S_SET_WEAKREFD, S_CLEAR_WEAKREFD): New.
(symbol_set_value_expression, symbol_set_frag): Clear weakrefr.
(symbol_mark_used): Follow weakref link.
(print_symbol_value_1): Print weak, weakrefr and weakrefd.
* symbols.h (symbol_find_noref, symbol_find_exact_noref): Declare.
(S_IS_WEAKREFR, S_SET_WEAKREFR, S_CLEAR_WEAKREFR): Declare.
(S_IS_WEAKREFD, S_SET_WEAKREFD, S_CLEAR_WEAKREFD): Declare.
* write.c (adust_reloc_syms): Follow weakref link. Do not
complain if target is undefined.
(write_object_file): Likewise. Remove weakrefr symbols. Drop
unreferenced weakrefd symbols.
* config/obj-coff.c (obj_frob_symbol): Do not force WEAKREFD
symbols EXTERNAL.
(pecoff_obj_set_weak_hook, pecoff_obj_clear_weak_hook): New.
* config/obj-coff.h (obj_set_weak_hook, obj_clear_weak_hook): Define.
* doc/as.texinfo: Document weakref.
* doc/internals.texi: Document new struct members, internal
functions and hooks.
gas/testsuite/ChangeLog:
* gas/all/weakref1.s, gas/all/weakref1.d: New test.
* gas/all/weakref1g.d, gas/all/weakref1l.d: New tests.
* gas/all/weakref1u.d, gas/all/weakref1w.d: New tests.
* gas/all/weakref2.s, gas/all/weakref3.s: New tests.
* gas/all/gas.exp: Run new tests.
Diffstat (limited to 'gas/config/obj-coff.h')
-rw-r--r-- | gas/config/obj-coff.h | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/gas/config/obj-coff.h b/gas/config/obj-coff.h index c6b4e63..81577c8 100644 --- a/gas/config/obj-coff.h +++ b/gas/config/obj-coff.h @@ -157,6 +157,9 @@ #ifdef TE_PE /* PE weak symbols need USE_UNIQUE. */ #define USE_UNIQUE 1 + +#define obj_set_weak_hook pecoff_obj_set_weak_hook +#define obj_clear_weak_hook pecoff_obj_clear_weak_hook #endif #ifndef OBJ_COFF_MAX_AUXENTRIES @@ -384,6 +387,10 @@ extern void coff_adjust_section_syms (bfd *, asection *, void *); extern void coff_frob_file_after_relocs (void); extern void coff_obj_symbol_new_hook (symbolS *); extern void coff_obj_read_begin_hook (void); +#ifdef TE_PE +extern void pecoff_obj_set_weak_hook (symbolS *); +extern void pecoff_obj_clear_weak_hook (symbolS *); +#endif extern void obj_coff_section (int); extern segT obj_coff_add_segment (const char *); extern void obj_coff_section (int); |