2013-03-08 Chung-Lin Tang <cltang@codesourcery.com>
* write.h (struct fix): Add fx_dot_frag field. (dot_frag): Declare. * write.c (dot_frag): New variable. (fix_new_internal): Set fx_dot_frag field with dot_frag. (fixup_segment): Base calculation of fx_offset with fx_dot_frag. * expr.c (expr): Save value of frag_now in dot_frag when setting dot_value. * read.c (emit_expr): Likewise. Delete comments.
This commit is contained in:
parent
12afa43e27
commit
8e723a1045
5 changed files with 25 additions and 4 deletions
|
@ -1,3 +1,14 @@
|
|||
2013-03-08 Chung-Lin Tang <cltang@codesourcery.com>
|
||||
|
||||
* write.h (struct fix): Add fx_dot_frag field.
|
||||
(dot_frag): Declare.
|
||||
* write.c (dot_frag): New variable.
|
||||
(fix_new_internal): Set fx_dot_frag field with dot_frag.
|
||||
(fixup_segment): Base calculation of fx_offset with fx_dot_frag.
|
||||
* expr.c (expr): Save value of frag_now in dot_frag when setting
|
||||
dot_value.
|
||||
* read.c (emit_expr): Likewise. Delete comments.
|
||||
|
||||
2013-03-07 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* config/tc-i386.c (flag_code_names): Removed.
|
||||
|
|
|
@ -1735,7 +1735,10 @@ expr (int rankarg, /* Larger # is higher rank. */
|
|||
|
||||
/* Save the value of dot for the fixup code. */
|
||||
if (rank == 0)
|
||||
dot_value = frag_now_fix ();
|
||||
{
|
||||
dot_value = frag_now_fix ();
|
||||
dot_frag = frag_now;
|
||||
}
|
||||
|
||||
retval = operand (resultP, mode);
|
||||
|
||||
|
|
|
@ -4087,10 +4087,9 @@ emit_expr (expressionS *exp, unsigned int nbytes)
|
|||
if (need_pass_2)
|
||||
return;
|
||||
|
||||
/* Grow the current frag now so that dot_value does not get invalidated
|
||||
if the frag were to fill up in the frag_more() call below. */
|
||||
frag_grow (nbytes);
|
||||
dot_value = frag_now_fix ();
|
||||
dot_frag = frag_now;
|
||||
|
||||
#ifndef NO_LISTING
|
||||
#ifdef OBJ_ELF
|
||||
|
|
|
@ -122,6 +122,9 @@ symbolS *abs_section_sym;
|
|||
/* Remember the value of dot when parsing expressions. */
|
||||
addressT dot_value;
|
||||
|
||||
/* The frag that dot_value is based from. */
|
||||
fragS *dot_frag;
|
||||
|
||||
/* Relocs generated by ".reloc" pseudo. */
|
||||
struct reloc_list* reloc_list;
|
||||
|
||||
|
@ -169,6 +172,7 @@ fix_new_internal (fragS *frag, /* Which frag? */
|
|||
fixP->fx_subsy = sub_symbol;
|
||||
fixP->fx_offset = offset;
|
||||
fixP->fx_dot_value = dot_value;
|
||||
fixP->fx_dot_frag = dot_frag;
|
||||
fixP->fx_pcrel = pcrel;
|
||||
fixP->fx_r_type = r_type;
|
||||
fixP->fx_im_disp = 0;
|
||||
|
@ -977,7 +981,7 @@ fixup_segment (fixS *fixP, segT this_segment)
|
|||
{
|
||||
add_number -= S_GET_VALUE (fixP->fx_subsy);
|
||||
fixP->fx_offset = (add_number + fixP->fx_dot_value
|
||||
+ fixP->fx_frag->fr_address);
|
||||
+ fixP->fx_dot_frag->fr_address);
|
||||
|
||||
/* Make it pc-relative. If the back-end code has not
|
||||
selected a pc-relative reloc, cancel the adjustment
|
||||
|
|
|
@ -88,6 +88,9 @@ struct fix
|
|||
/* The value of dot when the fixup expression was parsed. */
|
||||
addressT fx_dot_value;
|
||||
|
||||
/* The frag fx_dot_value is based on. */
|
||||
fragS *fx_dot_frag;
|
||||
|
||||
/* Next fixS in linked list, or NULL. */
|
||||
struct fix *fx_next;
|
||||
|
||||
|
@ -162,6 +165,7 @@ struct reloc_list
|
|||
extern int finalize_syms;
|
||||
extern symbolS *abs_section_sym;
|
||||
extern addressT dot_value;
|
||||
extern fragS *dot_frag;
|
||||
extern struct reloc_list* reloc_list;
|
||||
|
||||
extern void append (char **charPP, char *fromP, unsigned long length);
|
||||
|
|
Loading…
Reference in a new issue