2011-04-07 Paul Carroll<pcarroll@codesourcery.com>

opcodes/
	* arm-dis.c (print_insn): init vars moved into private_data structure.

	binutils/testsuite/
	* binutils-all/arm/simple.s: Demo issue with objdump with
	multiple input files
	* binutils-all/arm/objdump.exp: added new ARM test case code
This commit is contained in:
Paul Brook 2011-04-08 11:42:19 +00:00
parent 33b5443119
commit 1fbaefec00
5 changed files with 94 additions and 18 deletions

View File

@ -1,3 +1,9 @@
2011-04-07 Paul Carroll<pcarroll@codesourcery.com>
* binutils-all/arm/simple.s: Demo issue with objdump with
multiple input files
* binutils-all/arm/objdump.exp: added new ARM test case code
2011-04-06 Joseph Myers <joseph@codesourcery.com>
* binutils-all/objcopy.exp (*arm*-*-coff): Change to arm*-*-coff.

View File

@ -61,3 +61,29 @@ if [regexp $want $got] then {
} else {
fail "thumb2-cond test2"
}
###########################
# Set up the test of multiple disassemblies
###########################
if {![binutils_assemble $srcdir/$subdir/simple.s tmpdir/simple.o]} then {
return
}
if [is_remote host] {
set objfile [remote_download host tmpdir/simple.o]
} else {
set objfile tmpdir/simple.o
}
# Make sure multiple disassemblies come out the same
set got [binutils_run $OBJDUMP "-dr $objfile $objfile"]
set want "$objfile:\[ \]*file format.*$objfile:\[ \]*file format.*push.*add.*sub.*str.*add.*pop"
if [regexp $want $got] then {
pass "multiple input files"
} else {
fail "multiple input files"
}

View File

@ -0,0 +1,35 @@
.cpu arm7tdmi-s
.fpu softvfp
.file "y.c"
.bss
.align 2
l:
.space 4
.text
.align 2
.global f1
.type f1, %function
f1:
str fp, [sp, #-4]!
add fp, sp, #0
sub sp, sp, #12
str r0, [fp, #-8]
add sp, fp, #0
ldmfd sp!, {fp}
bx lr
.align 2
.word l
.size f1, .-f1
.align 2
.global main
.type main, %function
main:
stmfd sp!, {fp, lr}
add fp, sp, #4
bx lr
.align 2
.word 1717986919
.word -1840700269
.word l
.size main, .-main
.ident "GCC: (Sourcery G++ 2011.03) 4.5.1"

View File

@ -1,3 +1,7 @@
2011-04-07 Paul Carroll<pcarroll@codesourcery.com>
* arm-dis.c (print_insn): init vars moved into private_data structure.
2011-03-24 Mike Frysinger <vapier@gentoo.org>
* bfin-dis.c (decode_dsp32mac_0): Move MM zeroing down to MAC0 logic.

View File

@ -45,6 +45,14 @@
#define NUM_ELEM(a) (sizeof (a) / sizeof (a)[0])
#endif
/* Cached mapping symbol state. */
enum map_type
{
MAP_ARM,
MAP_THUMB,
MAP_DATA
};
struct arm_private_data
{
/* The features to use when disassembling optional instructions. */
@ -53,6 +61,13 @@ struct arm_private_data
/* Whether any mapping symbols are present in the provided symbol
table. -1 if we do not know yet, otherwise 0 or 1. */
int has_mapping_symbols;
/* Track the last type (although this doesn't seem to be useful) */
enum map_type last_type;
/* Tracking symbol table information */
int last_mapping_sym;
bfd_vma last_mapping_addr;
};
struct opcode32
@ -1642,18 +1657,6 @@ static unsigned int ifthen_next_state;
static bfd_vma ifthen_address;
#define IFTHEN_COND ((ifthen_state >> 4) & 0xf)
/* Cached mapping symbol state. */
enum map_type
{
MAP_ARM,
MAP_THUMB,
MAP_DATA
};
enum map_type last_type;
int last_mapping_sym = -1;
bfd_vma last_mapping_addr = 0;
/* Functions. */
int
@ -4635,6 +4638,8 @@ print_insn (bfd_vma pc, struct disassemble_info *info, bfd_boolean little)
select_arm_features (info->mach, & private.features);
private.has_mapping_symbols = -1;
private.last_mapping_sym = -1;
private.last_mapping_addr = 0;
info->private_data = & private;
}
@ -4658,8 +4663,8 @@ print_insn (bfd_vma pc, struct disassemble_info *info, bfd_boolean little)
/* Start scanning at the start of the function, or wherever
we finished last time. */
start = info->symtab_pos + 1;
if (start < last_mapping_sym)
start = last_mapping_sym;
if (start < private_data->last_mapping_sym)
start = private_data->last_mapping_sym;
found = FALSE;
/* First, look for mapping symbols. */
@ -4754,10 +4759,10 @@ print_insn (bfd_vma pc, struct disassemble_info *info, bfd_boolean little)
}
}
last_mapping_sym = last_sym;
last_type = type;
is_thumb = (last_type == MAP_THUMB);
is_data = (last_type == MAP_DATA);
private_data->last_mapping_sym = last_sym;
private_data->last_type = type;
is_thumb = (private_data->last_type == MAP_THUMB);
is_data = (private_data->last_type == MAP_DATA);
/* Look a little bit ahead to see if we should print out
two or four bytes of data. If there's a symbol,