2011-04-07 Paul Carroll<pcarroll@codesourcery.com>
authorPaul Brook <paul@codesourcery.com>
Fri, 8 Apr 2011 11:42:19 +0000 (11:42 +0000)
committerPaul Brook <paul@codesourcery.com>
Fri, 8 Apr 2011 11:42:19 +0000 (11:42 +0000)
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

binutils/testsuite/ChangeLog
binutils/testsuite/binutils-all/arm/objdump.exp
binutils/testsuite/binutils-all/arm/simple.s [new file with mode: 0644]
opcodes/ChangeLog
opcodes/arm-dis.c

index 5b92774..2d2981f 100644 (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.
index d2e04fa..2b78db3 100644 (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"
+}
diff --git a/binutils/testsuite/binutils-all/arm/simple.s b/binutils/testsuite/binutils-all/arm/simple.s
new file mode 100644 (file)
index 0000000..a486023
--- /dev/null
@@ -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"
index 734f824..7e56d0b 100644 (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.
index e8abbf5..f1b2104 100644 (file)
 #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;
-
 \f
 /* 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,