mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-29 08:24:05 +08:00
2006-09-16 Paul Brook <paul@codesourcery.com>
gas/ * config/tc-arm.c (s_arm_unwind_movsp): Add offset argument. * doc/c-arm.texi (movsp): Document offset argument. gas/testsuite/ * gas/arm/unwind.s: Test two argument form of .movsp. * gas/arm/unwind.d: Update expected output. * gas/arm/unwind_vxworks.d: Ditto.
This commit is contained in:
@ -1,3 +1,8 @@
|
|||||||
|
2006-09-16 Paul Brook <paul@codesourcery.com>
|
||||||
|
|
||||||
|
* config/tc-arm.c (s_arm_unwind_movsp): Add offset argument.
|
||||||
|
* doc/c-arm.texi (movsp): Document offset argument.
|
||||||
|
|
||||||
2006-09-16 Paul Brook <paul@codesourcery.com>
|
2006-09-16 Paul Brook <paul@codesourcery.com>
|
||||||
|
|
||||||
* config/tc-arm.c (thumb32_negate_data_op): Consistently use
|
* config/tc-arm.c (thumb32_negate_data_op): Consistently use
|
||||||
|
@ -3628,6 +3628,7 @@ s_arm_unwind_movsp (int ignored ATTRIBUTE_UNUSED)
|
|||||||
{
|
{
|
||||||
int reg;
|
int reg;
|
||||||
valueT op;
|
valueT op;
|
||||||
|
int offset;
|
||||||
|
|
||||||
reg = arm_reg_parse (&input_line_pointer, REG_TYPE_RN);
|
reg = arm_reg_parse (&input_line_pointer, REG_TYPE_RN);
|
||||||
if (reg == FAIL)
|
if (reg == FAIL)
|
||||||
@ -3636,6 +3637,16 @@ s_arm_unwind_movsp (int ignored ATTRIBUTE_UNUSED)
|
|||||||
ignore_rest_of_line ();
|
ignore_rest_of_line ();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Optional constant. */
|
||||||
|
if (skip_past_comma (&input_line_pointer) != FAIL)
|
||||||
|
{
|
||||||
|
if (immediate_for_directive (&offset) == FAIL)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
offset = 0;
|
||||||
|
|
||||||
demand_empty_rest_of_line ();
|
demand_empty_rest_of_line ();
|
||||||
|
|
||||||
if (reg == REG_SP || reg == REG_PC)
|
if (reg == REG_SP || reg == REG_PC)
|
||||||
@ -3653,7 +3664,7 @@ s_arm_unwind_movsp (int ignored ATTRIBUTE_UNUSED)
|
|||||||
|
|
||||||
/* Record the information for later. */
|
/* Record the information for later. */
|
||||||
unwind.fp_reg = reg;
|
unwind.fp_reg = reg;
|
||||||
unwind.fp_offset = unwind.frame_size;
|
unwind.fp_offset = unwind.frame_size - offset;
|
||||||
unwind.sp_restored = 1;
|
unwind.sp_restored = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -545,8 +545,10 @@ A positive value indicates the function prologue allocated stack space by
|
|||||||
decrementing the stack pointer.
|
decrementing the stack pointer.
|
||||||
|
|
||||||
@cindex @code{.movsp} directive, ARM
|
@cindex @code{.movsp} directive, ARM
|
||||||
@item .movsp @var{reg}
|
@item .movsp @var{reg} [, #@var{offset}]
|
||||||
Tell the unwinder that @var{reg} contains the current stack pointer.
|
Tell the unwinder that @var{reg} contains an offset from the current
|
||||||
|
stack pointer. If @var{offset} is not specified then it is assumed to be
|
||||||
|
zero.
|
||||||
|
|
||||||
@cindex @code{.setfp} directive, ARM
|
@cindex @code{.setfp} directive, ARM
|
||||||
@item .setfp @var{fpreg}, @var{spreg} [, #@var{offset}]
|
@item .setfp @var{fpreg}, @var{spreg} [, #@var{offset}]
|
||||||
|
@ -1,3 +1,9 @@
|
|||||||
|
2006-09-16 Paul Brook <paul@codesourcery.com>
|
||||||
|
|
||||||
|
* gas/arm/unwind.s: Test two argument form of .movsp.
|
||||||
|
* gas/arm/unwind.d: Update expected output.
|
||||||
|
* gas/arm/unwind_vxworks.d: Ditto.
|
||||||
|
|
||||||
2006-09-08 Kazu Hirata <kazu@codesourcery.com>
|
2006-09-08 Kazu Hirata <kazu@codesourcery.com>
|
||||||
|
|
||||||
* lib/gas-dg.exp (gas-dg-test): Treat $dir as a literal.
|
* lib/gas-dg.exp (gas-dg-test): Treat $dir as a literal.
|
||||||
|
@ -25,18 +25,22 @@ OFFSET TYPE VALUE
|
|||||||
0000001c R_ARM_PREL31 .ARM.extab.*
|
0000001c R_ARM_PREL31 .ARM.extab.*
|
||||||
00000020 R_ARM_PREL31 .text.*
|
00000020 R_ARM_PREL31 .text.*
|
||||||
00000028 R_ARM_PREL31 .text.*
|
00000028 R_ARM_PREL31 .text.*
|
||||||
|
00000030 R_ARM_PREL31 .text.*
|
||||||
|
00000034 R_ARM_PREL31 .ARM.extab.*
|
||||||
|
|
||||||
|
|
||||||
Contents of section .text:
|
Contents of section .text:
|
||||||
0000 (0000a0e3 0100a0e3 0200a0e3 0300a0e3|e3a00000 e3a00001 e3a00002 e3a00003) .*
|
0000 (0000a0e3 0100a0e3 0200a0e3 0300a0e3|e3a00000 e3a00001 e3a00002 e3a00003) .*
|
||||||
0010 (04200520|20052004) .*
|
0010 (04200520 0600a0e3|20052004 e3a00006) .*
|
||||||
Contents of section .ARM.extab:
|
Contents of section .ARM.extab:
|
||||||
0000 (449b0181 b0b08086|81019b44 8680b0b0) 00000000 00000000 .*
|
0000 (449b0181 b0b08086|81019b44 8680b0b0) 00000000 00000000 .*
|
||||||
0010 (8402b101 b0b0b005 2a000000 00c60281|01b10284 05b0b0b0 0000002a 8102c600) .*
|
0010 (8402b101 b0b0b005 2a000000 00c60281|01b10284 05b0b0b0 0000002a 8102c600) .*
|
||||||
0020 (d0c6c1c1 b0b0c0c6|c1c1c6d0 c6c0b0b0) 00000000 .*
|
0020 (d0c6c1c1 b0b0c0c6|c1c1c6d0 c6c0b0b0) 00000000 (429b0181|81019b42) .*
|
||||||
|
0030 (b0008086|868000b0) 00000000 .*
|
||||||
Contents of section .ARM.exidx:
|
Contents of section .ARM.exidx:
|
||||||
0000 00000000 (b0b0a880 04000000|80a8b0b0 00000004) 00000000 .*
|
0000 00000000 (b0b0a880 04000000|80a8b0b0 00000004) 00000000 .*
|
||||||
0010 (08000000 0c000000 0c000000 1c000000|00000008 0000000c 0000000c 0000001c) .*
|
0010 (08000000 0c000000 0c000000 1c000000|00000008 0000000c 0000000c 0000001c) .*
|
||||||
0020 (10000000 08849780 12000000 b00fb180|00000010 80978408 00000012 80b10fb0) .*
|
0020 (10000000 08849780 12000000 b00fb180|00000010 80978408 00000012 80b10fb0) .*
|
||||||
|
0030 (14000000 2c000000|00000014 0000002c) .*
|
||||||
# Ignore .ARM.attributes section
|
# Ignore .ARM.attributes section
|
||||||
#...
|
#...
|
||||||
|
@ -51,3 +51,17 @@ foo5: @ Save r0-r3 only.
|
|||||||
.save {r0, r1, r2, r3}
|
.save {r0, r1, r2, r3}
|
||||||
mov r0, #5
|
mov r0, #5
|
||||||
.fnend
|
.fnend
|
||||||
|
.code 32
|
||||||
|
foo6: @ Nested function with frame pointer
|
||||||
|
.fnstart
|
||||||
|
.pad #4
|
||||||
|
@push {ip}
|
||||||
|
.movsp ip, #4
|
||||||
|
@mov ip, sp
|
||||||
|
.pad #4
|
||||||
|
.save {fp, ip, lr}
|
||||||
|
@stmfd sp!, {fp, ip, lr, pc}
|
||||||
|
.setfp fp, ip, #-8
|
||||||
|
@sub fp, ip, #8
|
||||||
|
mov r0, #6
|
||||||
|
.fnend
|
||||||
|
@ -24,6 +24,8 @@ OFFSET TYPE VALUE
|
|||||||
0000001c R_ARM_PREL31 .ARM.extab.*\+0x0000001c
|
0000001c R_ARM_PREL31 .ARM.extab.*\+0x0000001c
|
||||||
00000020 R_ARM_PREL31 .text.*\+0x00000010
|
00000020 R_ARM_PREL31 .text.*\+0x00000010
|
||||||
00000028 R_ARM_PREL31 .text.*\+0x00000012
|
00000028 R_ARM_PREL31 .text.*\+0x00000012
|
||||||
|
00000030 R_ARM_PREL31 .text.*\+0x00000014
|
||||||
|
00000034 R_ARM_PREL31 .ARM.extab.*\+0x0000002c
|
||||||
|
|
||||||
|
|
||||||
Contents of section .text:
|
Contents of section .text:
|
||||||
@ -32,10 +34,12 @@ Contents of section .text:
|
|||||||
Contents of section .ARM.extab:
|
Contents of section .ARM.extab:
|
||||||
0000 (449b0181 b0b08086|81019b44 8680b0b0) 00000000 00000000 .*
|
0000 (449b0181 b0b08086|81019b44 8680b0b0) 00000000 00000000 .*
|
||||||
0010 (8402b101 b0b0b005 2a000000 00c60281|01b10284 05b0b0b0 0000002a 8102c600) .*
|
0010 (8402b101 b0b0b005 2a000000 00c60281|01b10284 05b0b0b0 0000002a 8102c600) .*
|
||||||
0020 (d0c6c1c1 b0b0c0c6|c1c1c6d0 c6c0b0b0) 00000000 .*
|
0020 (d0c6c1c1 b0b0c0c6|c1c1c6d0 c6c0b0b0) 00000000 (429b0181|81019b42) .*
|
||||||
|
0030 (b0008086|868000b0) 00000000 .*
|
||||||
Contents of section .ARM.exidx:
|
Contents of section .ARM.exidx:
|
||||||
0000 00000000 (b0b0a880|80a8b0b0) 00000000 00000000 .*
|
0000 00000000 (b0b0a880|80a8b0b0) 00000000 00000000 .*
|
||||||
0010 00000000 00000000 00000000 00000000 .*
|
0010 00000000 00000000 00000000 00000000 .*
|
||||||
0020 00000000 (08849780|80978408) 00000000 (b00fb180|80b10fb0) .*
|
0020 00000000 (08849780|80978408) 00000000 (b00fb180|80b10fb0) .*
|
||||||
|
0030 00000000 00000000 .*
|
||||||
# Ignore .ARM.attributes section
|
# Ignore .ARM.attributes section
|
||||||
#...
|
#...
|
||||||
|
Reference in New Issue
Block a user