This patch ensure same output for sleb128 with large number.
gas/ * read.c (emit_leb128_expr): Extended unsigned big number for sleb128. * testsuite/gas/all/gas.exp (test_cond): Add sleb128-8 test. * testsuite/gas/all/sleb128.d: New test. * testsuite/gas/all/sleb128.s: New test source.
This commit is contained in:
parent
f7fd19e2b8
commit
74def31dcd
|
@ -1,3 +1,11 @@
|
|||
2017-01-10 Tristan Gingold <gingold@adacore.com>
|
||||
|
||||
* read.c (emit_leb128_expr): Extended unsigned big number for
|
||||
sleb128.
|
||||
* testsuite/gas/all/gas.exp (test_cond): Add sleb128-8 test.
|
||||
* testsuite/gas/all/sleb128.d: New test.
|
||||
* testsuite/gas/all/sleb128.s: New test source.
|
||||
|
||||
2017-01-09 Andrew Waterman <andrew@sifive.com>
|
||||
|
||||
* config/tc-riscv.c (append_insn): Don't eagerly apply relocations
|
||||
|
|
14
gas/read.c
14
gas/read.c
|
@ -5344,13 +5344,21 @@ emit_leb128_expr (expressionS *exp, int sign)
|
|||
else if (op == O_big)
|
||||
{
|
||||
/* O_big is a different sort of constant. */
|
||||
|
||||
int nbr_digits = exp->X_add_number;
|
||||
unsigned int size;
|
||||
char *p;
|
||||
|
||||
size = output_big_leb128 (NULL, generic_bignum, exp->X_add_number, sign);
|
||||
/* If the leading littenum is 0xffff, prepend a 0 to avoid confusion with
|
||||
a signed number. Unary operators like - or ~ always extend the
|
||||
bignum to its largest size. */
|
||||
if (exp->X_unsigned
|
||||
&& nbr_digits < SIZE_OF_LARGE_NUMBER
|
||||
&& generic_bignum[nbr_digits - 1] == LITTLENUM_MASK)
|
||||
generic_bignum[nbr_digits++] = 0;
|
||||
|
||||
size = output_big_leb128 (NULL, generic_bignum, nbr_digits, sign);
|
||||
p = frag_more (size);
|
||||
if (output_big_leb128 (p, generic_bignum, exp->X_add_number, sign) > size)
|
||||
if (output_big_leb128 (p, generic_bignum, nbr_digits, sign) > size)
|
||||
abort ();
|
||||
}
|
||||
else
|
||||
|
|
|
@ -393,6 +393,7 @@ run_dump_test sleb128-5
|
|||
if { ![istarget "tic4x*-*-*"] && ![istarget "tic54x*-*-*"] } {
|
||||
run_dump_test sleb128-7
|
||||
}
|
||||
run_dump_test sleb128-8
|
||||
|
||||
# .byte is 32 bits on tic4x, and .p2align isn't supported on tic54x
|
||||
# .space is different on hppa*-hpux.
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
#objdump : -s -j .data -j "\$DATA\$"
|
||||
#name : .sleb128 tests (8)
|
||||
|
||||
.*: .*
|
||||
|
||||
Contents of section (\.data|\$DATA\$):
|
||||
0000 ffffffff ffff3f .*
|
|
@ -0,0 +1,2 @@
|
|||
.data
|
||||
.sleb128 281474976710655
|
Loading…
Reference in New Issue