mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-30 12:44:10 +08:00
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:
parent
33b5443119
commit
1fbaefec00
@ -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.
|
||||
|
@ -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"
|
||||
}
|
||||
|
35
binutils/testsuite/binutils-all/arm/simple.s
Normal file
35
binutils/testsuite/binutils-all/arm/simple.s
Normal 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"
|
@ -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.
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user