diff options
-rw-r--r-- | gas/ChangeLog | 15 | ||||
-rw-r--r-- | gas/ecoff.c | 28 |
2 files changed, 29 insertions, 14 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 322fafa..ad45c85 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,18 @@ +Thu Feb 3 23:07:30 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) + + * config/obj-ecoff.h (TARGET_SYMBOL_FIELDS): Changed + ecoff_undefined to ecoff_extern_size. + * config/obj-elf.h (ELF_TARGET_SYMBOL_FIELDS): Likewise. + * config/tc-mips.c (s_extern): Set ecoff_extern_size to the + external symbol size, rathern than setting the symbol value. + (md_estimate_size_before_relax): Check both ecoff_extern_size and + symbol value to see if GP referencing can be used. + * ecoff.c (ecoff_symbol_new_hook): Clear ecoff_extern_size, not + ecoff_undefined. + (ecoff_frob_symbol): Don't check ecoff_undefined. + (ecoff_build_symbols): Get size of an undefined symbol from + sym->ecoff_extern_size, not S_GET_VALUE (sym). + Wed Feb 2 13:55:08 1994 Jeffrey A. Law (law@snake.cs.utah.edu) * Makefile.in: Avoid bug in losing hpux sed. diff --git a/gas/ecoff.c b/gas/ecoff.c index 27890fa..7a72cf7 100644 --- a/gas/ecoff.c +++ b/gas/ecoff.c @@ -1501,7 +1501,7 @@ ecoff_symbol_new_hook (symbolP) add_file ((const char *) NULL, 0); symbolP->ecoff_file = cur_file_ptr; symbolP->ecoff_symbol = NULL; - symbolP->ecoff_undefined = 0; + symbolP->ecoff_extern_size = 0; } /* Add a page to a varray object. */ @@ -3421,17 +3421,14 @@ ecoff_stab (what, string, type, other, desc) cur_file_ptr = save_file_ptr; } -/* Frob an ECOFF symbol. A .extern symbol will have a value, but is - not common. Small common symbols go into a special .scommon - section rather than bfd_com_section. */ +/* Frob an ECOFF symbol. Small common symbols go into a special + .scommon section rather than bfd_com_section. */ void ecoff_frob_symbol (sym) symbolS *sym; { - if (sym->ecoff_undefined) - S_SET_SEGMENT (sym, undefined_section); - else if (S_IS_COMMON (sym) + if (S_IS_COMMON (sym) && S_GET_VALUE (sym) > 0 && S_GET_VALUE (sym) <= bfd_get_gp_size (stdoutput)) { @@ -3835,15 +3832,18 @@ ecoff_build_symbols (backend, buf, bufend, offset) else st = st_Static; - if (! S_IS_DEFINED (as_sym) - || as_sym->ecoff_undefined) + if (! S_IS_DEFINED (as_sym)) { - if (S_GET_VALUE (as_sym) > 0 - && (S_GET_VALUE (as_sym) - <= bfd_get_gp_size (stdoutput))) - sc = sc_SUndefined; - else + if (as_sym->ecoff_extern_size == 0 + || (as_sym->ecoff_extern_size + > bfd_get_gp_size (stdoutput))) sc = sc_Undefined; + else + { + sc = sc_SUndefined; + sym_ptr->ecoff_sym.asym.value = + as_sym->ecoff_extern_size; + } } else if (S_IS_COMMON (as_sym)) { |