gas/
2006-11-15 Jan Beulich <jbeulich@novell.com> PR/3469 * symbols.c (symbol_clone): Mark symbol ending up not on symbol chain by linking it to itself. (resolve_symbol_value): Also check symbol_shadow_p(). (symbol_shadow_p): New. * symbols.h (symbol_shadow_p): Declare. gas/testsuite/ 2006-11-15 Jan Beulich <jbeulich@novell.com> * gas/elf/equ-reloc.[sd]: New. * gas/elf/elf.exp: Run new test.
This commit is contained in:
parent
b9c3a42a93
commit
bdf128d65b
@ -1,3 +1,12 @@
|
||||
2006-11-15 Jan Beulich <jbeulich@novell.com>
|
||||
|
||||
PR/3469
|
||||
* symbols.c (symbol_clone): Mark symbol ending up not on symbol
|
||||
chain by linking it to itself.
|
||||
(resolve_symbol_value): Also check symbol_shadow_p().
|
||||
(symbol_shadow_p): New.
|
||||
* symbols.h (symbol_shadow_p): Declare.
|
||||
|
||||
2006-11-12 Mark Shinwell <shinwell@codesourcery.com>
|
||||
|
||||
* config/tc-arm.c (do_t_czb): Rename to do_t_cbz.
|
||||
|
@ -598,11 +598,13 @@ symbol_clone (symbolS *orgsymP, int replace)
|
||||
symbol_lastP = newsymP;
|
||||
else if (orgsymP->sy_next)
|
||||
orgsymP->sy_next->sy_previous = newsymP;
|
||||
orgsymP->sy_next = NULL;
|
||||
orgsymP->sy_previous = orgsymP->sy_next = orgsymP;
|
||||
debug_verify_symchain (symbol_rootP, symbol_lastP);
|
||||
|
||||
symbol_table_insert (newsymP);
|
||||
}
|
||||
else
|
||||
newsymP->sy_previous = newsymP->sy_next = newsymP;
|
||||
|
||||
return newsymP;
|
||||
}
|
||||
@ -1078,8 +1080,9 @@ resolve_symbol_value (symbolS *symp)
|
||||
symp->sy_resolving = 0;
|
||||
goto exit_dont_set_value;
|
||||
}
|
||||
else if (finalize_syms && final_seg == expr_section
|
||||
&& seg_left != expr_section)
|
||||
else if (finalize_syms &&
|
||||
((final_seg == expr_section && seg_left != expr_section) ||
|
||||
symbol_shadow_p (symp)))
|
||||
{
|
||||
/* If the symbol is an expression symbol, do similarly
|
||||
as for undefined and common syms above. Handles
|
||||
@ -2492,6 +2495,17 @@ symbol_constant_p (symbolS *s)
|
||||
return s->sy_value.X_op == O_constant;
|
||||
}
|
||||
|
||||
/* Return whether a symbol was cloned and thus removed from the global
|
||||
symbol list. */
|
||||
|
||||
int
|
||||
symbol_shadow_p (symbolS *s)
|
||||
{
|
||||
if (LOCAL_SYMBOL_CHECK (s))
|
||||
return 0;
|
||||
return s->sy_next == s;
|
||||
}
|
||||
|
||||
/* Return the BFD symbol for a symbol. */
|
||||
|
||||
asymbol *
|
||||
|
@ -192,6 +192,7 @@ extern int symbol_section_p (symbolS *);
|
||||
extern int symbol_equated_p (symbolS *);
|
||||
extern int symbol_equated_reloc_p (symbolS *);
|
||||
extern int symbol_constant_p (symbolS *);
|
||||
extern int symbol_shadow_p (symbolS *);
|
||||
extern asymbol *symbol_get_bfdsym (symbolS *);
|
||||
extern void symbol_set_bfdsym (symbolS *, asymbol *);
|
||||
|
||||
|
@ -1,3 +1,8 @@
|
||||
2006-11-15 Jan Beulich <jbeulich@novell.com>
|
||||
|
||||
* gas/elf/equ-reloc.[sd]: New.
|
||||
* gas/elf/elf.exp: Run new test.
|
||||
|
||||
2006-11-10 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* gas/i386/merom.d: Use "#pass" instead of "#..." to skip the
|
||||
|
@ -72,6 +72,7 @@ if { ([istarget "*-*-*elf*"]
|
||||
{ *c54x*-*-* } { }
|
||||
default {
|
||||
run_dump_test redef
|
||||
run_dump_test equ-reloc
|
||||
}
|
||||
}
|
||||
run_dump_test "section0"
|
||||
|
13
gas/testsuite/gas/elf/equ-reloc.d
Normal file
13
gas/testsuite/gas/elf/equ-reloc.d
Normal file
@ -0,0 +1,13 @@
|
||||
#objdump: -rsj .data
|
||||
#name: elf equate relocs
|
||||
|
||||
.*: +file format .*
|
||||
|
||||
RELOCATION RECORDS FOR \[.*\]:
|
||||
OFFSET *TYPE *VALUE
|
||||
0*0 [^ ]+ +(\.bss(\+0x0*4)?|y1)
|
||||
0*4 [^ ]+ +(\.bss(\+0x0*8)?|y2)
|
||||
#...
|
||||
Contents of section .data:
|
||||
0000 0[04]00000[04] 0[08]00000[08].*
|
||||
#pass
|
16
gas/testsuite/gas/elf/equ-reloc.s
Normal file
16
gas/testsuite/gas/elf/equ-reloc.s
Normal file
@ -0,0 +1,16 @@
|
||||
.data
|
||||
.long x1, x2
|
||||
|
||||
.global x1, x2, z2
|
||||
|
||||
.set x1, y1
|
||||
.set x2, y2
|
||||
.set x2, z2
|
||||
|
||||
.section .bss, "aw", %nobits
|
||||
x1:
|
||||
.zero 4
|
||||
y1:
|
||||
.zero 4
|
||||
y2:
|
||||
.zero 4
|
Loading…
x
Reference in New Issue
Block a user