From 90bd3c903fe76a8a3a5ced98c76e4366c5a0948f Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Tue, 16 Apr 2019 11:10:44 +0930 Subject: [PATCH] Make fixup fx_where unsigned Another field that only stores unsigned values. * write.h (struct fix ): Make unsigned. (fix_new, fix_at_start, fix_new_exp): Adjust prototypes. * write.c (fix_new, fix_new_exp, fix_at_start): Make "where" and "size" parameters unsigned long. (fix_new_internal): Likewise. Adjust error format string to suit. * config/tc-mips.c (md_convert_frag): Remove cast of fx_where. * config/tc-sparc.c (md_apply_fix): Likewise. * config/tc-score.c (s3_convert_frag): Adjust for unsigned fx_where. * config/tc-score7.c (s7_convert_frag): Likewise. --- gas/ChangeLog | 12 ++++++++++++ gas/config/tc-mips.c | 2 +- gas/config/tc-score.c | 4 ++-- gas/config/tc-score7.c | 4 ++-- gas/config/tc-sparc.c | 2 +- gas/write.c | 20 ++++++++++---------- gas/write.h | 19 ++++++++----------- 7 files changed, 36 insertions(+), 27 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index 2013c5d..4a08de1 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,5 +1,17 @@ 2019-04-16 Alan Modra + * write.h (struct fix ): Make unsigned. + (fix_new, fix_at_start, fix_new_exp): Adjust prototypes. + * write.c (fix_new, fix_new_exp, fix_at_start): Make "where" and + "size" parameters unsigned long. + (fix_new_internal): Likewise. Adjust error format string to suit. + * config/tc-mips.c (md_convert_frag): Remove cast of fx_where. + * config/tc-sparc.c (md_apply_fix): Likewise. + * config/tc-score.c (s3_convert_frag): Adjust for unsigned fx_where. + * config/tc-score7.c (s7_convert_frag): Likewise. + +2019-04-16 Alan Modra + * frags.h (struct frag ): Use unsigned type. * frags.c (frag_new): Assert that current size exceeds old_frags_var_max_size. diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c index 70c6548..94141e9 100644 --- a/gas/config/tc-mips.c +++ b/gas/config/tc-mips.c @@ -19099,7 +19099,7 @@ md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, segT asec, fragS *fragp) sequence instead. */ while (fixp && fixp->fx_frag == fragp - && (valueT) fixp->fx_where + second < fragp->fr_fix) + && fixp->fx_where + second < fragp->fr_fix) { if (subtype & RELAX_USE_SECOND) fixp->fx_done = 1; diff --git a/gas/config/tc-score.c b/gas/config/tc-score.c index 3101dc8..4bbeeb0 100644 --- a/gas/config/tc-score.c +++ b/gas/config/tc-score.c @@ -7011,8 +7011,8 @@ s3_relax_frag (asection * sec ATTRIBUTE_UNUSED, fragS * fragp, long stretch ATTR static void s3_convert_frag (bfd * abfd ATTRIBUTE_UNUSED, segT sec ATTRIBUTE_UNUSED, fragS * fragp) { - int r_old; - int r_new; + unsigned int r_old; + unsigned int r_new; char backup[20]; fixS *fixp; diff --git a/gas/config/tc-score7.c b/gas/config/tc-score7.c index 13dd530..f60ab49 100644 --- a/gas/config/tc-score7.c +++ b/gas/config/tc-score7.c @@ -6562,8 +6562,8 @@ s7_convert_frag (bfd * abfd ATTRIBUTE_UNUSED, segT sec ATTRIBUTE_UNUSED, fragS * fragp) { - int r_old; - int r_new; + unsigned int r_old; + unsigned int r_new; char backup[20]; fixS *fixp; diff --git a/gas/config/tc-sparc.c b/gas/config/tc-sparc.c index 677a13f..347db08 100644 --- a/gas/config/tc-sparc.c +++ b/gas/config/tc-sparc.c @@ -3566,7 +3566,7 @@ md_apply_fix (fixS *fixP, valueT *valP, segT segment ATTRIBUTE_UNUSED) can be completely resolved here, i.e. if no undefined symbol is associated with it. */ if (sparc_relax && fixP->fx_addsy == NULL - && (valueT) fixP->fx_where + 8 <= fixP->fx_frag->fr_fix) + && fixP->fx_where + 8 <= fixP->fx_frag->fr_fix) { #define G0 0 #define O7 15 diff --git a/gas/write.c b/gas/write.c index 2c4305e..91767fb 100644 --- a/gas/write.c +++ b/gas/write.c @@ -143,8 +143,8 @@ static int n_fixups; static fixS * fix_new_internal (fragS *frag, /* Which frag? */ - int where, /* Where in that frag? */ - int size, /* 1, 2, or 4 usually. */ + unsigned long where, /* Where in that frag? */ + unsigned long size, /* 1, 2, or 4 usually. */ symbolS *add_symbol, /* X_add_symbol. */ symbolS *sub_symbol, /* X_op_symbol. */ offsetT offset, /* X_add_number. */ @@ -164,7 +164,7 @@ fix_new_internal (fragS *frag, /* Which frag? */ /* We've made fx_size a narrow field; check that it's wide enough. */ if (fixP->fx_size != size) { - as_bad (_("field fx_size too small to hold %d"), size); + as_bad (_("field fx_size too small to hold %lu"), size); abort (); } fixP->fx_addsy = add_symbol; @@ -228,10 +228,10 @@ fix_new_internal (fragS *frag, /* Which frag? */ /* Create a fixup relative to a symbol (plus a constant). */ fixS * -fix_new (fragS *frag, /* Which frag? */ - int where, /* Where in that frag? */ - int size, /* 1, 2, or 4 usually. */ - symbolS *add_symbol, /* X_add_symbol. */ +fix_new (fragS *frag, /* Which frag? */ + unsigned long where, /* Where in that frag? */ + unsigned long size, /* 1, 2, or 4 usually. */ + symbolS *add_symbol, /* X_add_symbol. */ offsetT offset, /* X_add_number. */ int pcrel, /* TRUE if PC-relative relocation. */ RELOC_ENUM r_type /* Relocation type. */) @@ -246,8 +246,8 @@ fix_new (fragS *frag, /* Which frag? */ fixS * fix_new_exp (fragS *frag, /* Which frag? */ - int where, /* Where in that frag? */ - int size, /* 1, 2, or 4 usually. */ + unsigned long where, /* Where in that frag? */ + unsigned long size, /* 1, 2, or 4 usually. */ expressionS *exp, /* Expression. */ int pcrel, /* TRUE if PC-relative relocation. */ RELOC_ENUM r_type /* Relocation type. */) @@ -313,7 +313,7 @@ fix_new_exp (fragS *frag, /* Which frag? */ as for fix_new, except that WHERE is implicitly 0. */ fixS * -fix_at_start (fragS *frag, int size, symbolS *add_symbol, +fix_at_start (fragS *frag, unsigned long size, symbolS *add_symbol, offsetT offset, int pcrel, RELOC_ENUM r_type) { return fix_new_internal (frag, 0, size, add_symbol, diff --git a/gas/write.h b/gas/write.h index e67fba0..a69ec3c 100644 --- a/gas/write.h +++ b/gas/write.h @@ -84,8 +84,8 @@ struct fix /* Which frag does this fix apply to? */ fragS *fx_frag; - /* Where is the first byte to fix up? */ - long fx_where; + /* The location within the frag where the fixup occurs. */ + unsigned long fx_where; /* NULL or Symbol whose value we add in. */ symbolS *fx_addsy; @@ -183,15 +183,12 @@ extern long relax_frag (segT, fragS *, long); extern int relax_segment (struct frag *, segT, int); extern void number_to_chars_littleendian (char *, valueT, int); extern void number_to_chars_bigendian (char *, valueT, int); -extern fixS *fix_new - (fragS * frag, int where, int size, symbolS * add_symbol, - offsetT offset, int pcrel, bfd_reloc_code_real_type r_type); -extern fixS *fix_at_start - (fragS * frag, int size, symbolS * add_symbol, - offsetT offset, int pcrel, bfd_reloc_code_real_type r_type); -extern fixS *fix_new_exp - (fragS * frag, int where, int size, expressionS *exp, int pcrel, - bfd_reloc_code_real_type r_type); +extern fixS *fix_new (fragS *, unsigned long, unsigned long, symbolS *, + offsetT, int, bfd_reloc_code_real_type); +extern fixS *fix_at_start (fragS *, unsigned long, symbolS *, + offsetT, int, bfd_reloc_code_real_type); +extern fixS *fix_new_exp (fragS *, unsigned long, unsigned long, + expressionS *, int, bfd_reloc_code_real_type); extern void write_print_statistics (FILE *); #endif /* __write_h__ */ -- 2.7.4