forked from Imagelibrary/binutils-gdb
* config/tc-mips.c (my_getSmallExpression): Rework bracket handling.
testsuite/ * gas/mips/expr1.[sd]: New test. * gas/mips/mips.exp: Run it.
This commit is contained in:
@@ -1,3 +1,7 @@
|
||||
2003-02-07 Richard Sandiford <rsandifo@redhat.com>
|
||||
|
||||
* config/tc-mips.c (my_getSmallExpression): Rework bracket handling.
|
||||
|
||||
2003-02-06 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* config/tc-ppc.c (ppc_elf_suffix): Undo part of last change so that
|
||||
|
||||
@@ -10020,36 +10020,40 @@ my_getSmallExpression (ep, reloc, str)
|
||||
{
|
||||
bfd_reloc_code_real_type reversed_reloc[3];
|
||||
size_t reloc_index, i;
|
||||
int bracket_depth;
|
||||
|
||||
reloc_index = 0;
|
||||
bracket_depth = 0;
|
||||
int crux_depth, str_depth;
|
||||
char *crux;
|
||||
|
||||
/* Search for the start of the main expression, recoding relocations
|
||||
in REVERSED_RELOC. */
|
||||
for (;;)
|
||||
in REVERSED_RELOC. End the loop with CRUX pointing to the start
|
||||
of the main expression and with CRUX_DEPTH containing the number
|
||||
of open brackets at that point. */
|
||||
reloc_index = -1;
|
||||
str_depth = 0;
|
||||
do
|
||||
{
|
||||
if (*str == '(')
|
||||
bracket_depth++, str++;
|
||||
else if (*str == ' ' || *str == '\t')
|
||||
str++;
|
||||
else if (*str == '%'
|
||||
&& reloc_index < (HAVE_NEWABI ? 3 : 1)
|
||||
&& parse_relocation (&str, &reversed_reloc[reloc_index]))
|
||||
reloc_index++;
|
||||
else
|
||||
break;
|
||||
}
|
||||
reloc_index++;
|
||||
crux = str;
|
||||
crux_depth = str_depth;
|
||||
|
||||
my_getExpression (ep, str);
|
||||
/* Skip over whitespace and brackets, keeping count of the number
|
||||
of brackets. */
|
||||
while (*str == ' ' || *str == '\t' || *str == '(')
|
||||
if (*str++ == '(')
|
||||
str_depth++;
|
||||
}
|
||||
while (*str == '%'
|
||||
&& reloc_index < (HAVE_NEWABI ? 3 : 1)
|
||||
&& parse_relocation (&str, &reversed_reloc[reloc_index]));
|
||||
|
||||
my_getExpression (ep, crux);
|
||||
str = expr_end;
|
||||
|
||||
/* Match every open bracket. */
|
||||
while (bracket_depth > 0 && (*str == ')' || *str == ' ' || *str == '\t'))
|
||||
while (crux_depth > 0 && (*str == ')' || *str == ' ' || *str == '\t'))
|
||||
if (*str++ == ')')
|
||||
bracket_depth--;
|
||||
crux_depth--;
|
||||
|
||||
if (bracket_depth > 0)
|
||||
if (crux_depth > 0)
|
||||
as_bad ("unclosed '('");
|
||||
|
||||
expr_end = str;
|
||||
|
||||
@@ -1,3 +1,8 @@
|
||||
2003-02-07 Richard Sandiford <rsandifo@redhat.com>
|
||||
|
||||
* gas/mips/expr1.[sd]: New test.
|
||||
* gas/mips/mips.exp: Run it.
|
||||
|
||||
2003-02-06 Gwenole Beauchesne <gbeauchesne@mandrakesoft.com>
|
||||
|
||||
* gas/i386/x86-64-opcode.s: More tests for x86-64 MOVD opcodes.
|
||||
|
||||
19
gas/testsuite/gas/mips/expr1.d
Normal file
19
gas/testsuite/gas/mips/expr1.d
Normal file
@@ -0,0 +1,19 @@
|
||||
#as: -march=mips2 -mabi=32
|
||||
#objdump: -M gpr-names=numeric -dr
|
||||
#name: MIPS expression 1
|
||||
|
||||
.*: file format .*
|
||||
|
||||
Disassembly of section \.text:
|
||||
|
||||
0+00 <foo>:
|
||||
0: 8c840000 lw \$4,0\(\$4\)
|
||||
0: R_MIPS_LO16 foo
|
||||
4: 8c840038 lw \$4,56\(\$4\)
|
||||
8: 8c840008 lw \$4,8\(\$4\)
|
||||
8: R_MIPS_LO16 foo
|
||||
c: 8c840008 lw \$4,8\(\$4\)
|
||||
c: R_MIPS_LO16 foo
|
||||
10: 8c840008 lw \$4,8\(\$4\)
|
||||
10: R_MIPS_LO16 foo
|
||||
\.\.\.
|
||||
10
gas/testsuite/gas/mips/expr1.s
Normal file
10
gas/testsuite/gas/mips/expr1.s
Normal file
@@ -0,0 +1,10 @@
|
||||
.globl foo
|
||||
.ent foo
|
||||
foo:
|
||||
lw $4,%lo(foo)($4)
|
||||
lw $4,((10 + 4) * 4)($4)
|
||||
lw $4,%lo (2 * 4) + foo($4)
|
||||
lw $4,%lo((2 * 4) + foo)($4)
|
||||
lw $4,(((%lo ((2 * 4) + foo))))($4)
|
||||
.space 64
|
||||
.end foo
|
||||
@@ -618,6 +618,7 @@ if { [istarget mips*-*-*] } then {
|
||||
run_dump_test "${tmips}mips${el}16-f"
|
||||
}
|
||||
run_dump_test "elf-consthilo"
|
||||
run_dump_test "expr1"
|
||||
}
|
||||
|
||||
if $has_newabi {
|
||||
|
||||
Reference in New Issue
Block a user