mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-18 12:24:38 +08:00
gas/
2005-04-26 H.J. Lu <hongjiu.lu@intel.com> * config/obj-multi.h (FAKE_LABEL_NAME): Defined. * read.c (pseudo_set): Disallow symbol set to common symbol. PR 857 * write.c (write_object_file): Report common symbol name when disallowing local symbol set to common symbol. (adjust_reloc_syms): Disallow local symbol set to undefined symbol. gas/testsuite/ 2005-04-26 H.J. Lu <hongjiu.lu@intel.com> * gas/all/assign.s: Make `x' and `y' global.
This commit is contained in:
parent
6156ef10ad
commit
60938e80e6
@ -1,3 +1,15 @@
|
||||
2005-04-26 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* config/obj-multi.h (FAKE_LABEL_NAME): Defined.
|
||||
|
||||
* read.c (pseudo_set): Disallow symbol set to common symbol.
|
||||
|
||||
PR 857
|
||||
* write.c (write_object_file): Report common symbol name when
|
||||
disallowing local symbol set to common symbol.
|
||||
(adjust_reloc_syms): Disallow local symbol set to undefined
|
||||
symbol.
|
||||
|
||||
2005-04-25 Jan Beulich <jbeulich@novell.com>
|
||||
|
||||
* macro.c (macro_expand_body): Replace locals indicator parameters
|
||||
|
@ -146,6 +146,8 @@
|
||||
|
||||
#define EMIT_SECTION_SYMBOLS (this_format->emit_section_symbols)
|
||||
|
||||
#define FAKE_LABEL_NAME (this_emulation->fake_label_name)
|
||||
|
||||
#ifdef OBJ_MAYBE_ELF
|
||||
/* We need OBJ_SYMFIELD_TYPE so that symbol_get_obj is defined in symbol.c
|
||||
We also need various STAB defines for stab.c */
|
||||
|
@ -3301,6 +3301,10 @@ pseudo_set (symbolS *symbolP)
|
||||
{
|
||||
symbolS *s = exp.X_add_symbol;
|
||||
|
||||
if (S_IS_COMMON (s))
|
||||
as_bad (_("`%s' can't be equated to common symbol '%s'"),
|
||||
S_GET_NAME (symbolP), S_GET_NAME (s));
|
||||
|
||||
S_SET_SEGMENT (symbolP, seg);
|
||||
S_SET_VALUE (symbolP, exp.X_add_number + S_GET_VALUE (s));
|
||||
symbol_set_frag (symbolP, symbol_get_frag (s));
|
||||
|
@ -1,3 +1,7 @@
|
||||
2005-04-26 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* gas/all/assign.s: Make `x' and `y' global.
|
||||
|
||||
2005-04-25 Jan Beulich <jbeulich@novell.com>
|
||||
|
||||
* gas/macros/badarg.s: Add tests for collisions between/among macro
|
||||
|
@ -1,7 +1,9 @@
|
||||
.global x
|
||||
x = zzz
|
||||
x = x+1
|
||||
.long x
|
||||
|
||||
.global y
|
||||
y = 1
|
||||
y = y+zzz
|
||||
.long y
|
||||
|
26
gas/write.c
26
gas/write.c
@ -787,12 +787,20 @@ adjust_reloc_syms (bfd *abfd ATTRIBUTE_UNUSED,
|
||||
if (fixp->fx_subsy != NULL)
|
||||
resolve_symbol_value (fixp->fx_subsy);
|
||||
|
||||
/* If this symbol is equated to an undefined symbol, convert
|
||||
the fixup to being against that symbol. */
|
||||
/* If this symbol is equated to an undefined or common symbol,
|
||||
convert the fixup to being against that symbol. */
|
||||
if (symbol_equated_reloc_p (sym))
|
||||
{
|
||||
symbolS *new_sym
|
||||
= symbol_get_value_expression (sym)->X_add_symbol;
|
||||
const char *name = S_GET_NAME (sym);
|
||||
if (!S_IS_COMMON (new_sym)
|
||||
&& strcmp (name, FAKE_LABEL_NAME)
|
||||
&& (!S_IS_EXTERNAL (sym) || S_IS_LOCAL (sym)))
|
||||
as_bad (_("Local symbol `%s' can't be equated to undefined symbol `%s'"),
|
||||
name, S_GET_NAME (new_sym));
|
||||
fixp->fx_offset += symbol_get_value_expression (sym)->X_add_number;
|
||||
sym = symbol_get_value_expression (sym)->X_add_symbol;
|
||||
sym = new_sym;
|
||||
fixp->fx_addsy = sym;
|
||||
}
|
||||
|
||||
@ -1927,9 +1935,15 @@ write_object_file (void)
|
||||
symbols. */
|
||||
if (symbol_equated_reloc_p (symp))
|
||||
{
|
||||
if (S_IS_COMMON (symp))
|
||||
as_bad (_("`%s' can't be equated to common symbol"),
|
||||
S_GET_NAME (symp));
|
||||
const char *name = S_GET_NAME (symp);
|
||||
if (S_IS_COMMON (symp)
|
||||
&& strcmp (name, FAKE_LABEL_NAME)
|
||||
&& (!S_IS_EXTERNAL (symp) || S_IS_LOCAL (symp)))
|
||||
{
|
||||
expressionS *e = symbol_get_value_expression (symp);
|
||||
as_bad (_("Local symbol `%s' can't be equated to common symbol `%s'"),
|
||||
name, S_GET_NAME (e->X_add_symbol));
|
||||
}
|
||||
symbol_remove (symp, &symbol_rootP, &symbol_lastP);
|
||||
continue;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user