PR 10263
authorNick Clifton <nickc@redhat.com>
Mon, 15 Jun 2009 11:37:26 +0000 (11:37 +0000)
committerNick Clifton <nickc@redhat.com>
Mon, 15 Jun 2009 11:37:26 +0000 (11:37 +0000)
        * arm-dis.c (print_insn): Ignore is_data if the user has requested
        the disassembly of data as well as instructions.

        * objdump.c (disassemble_bytes): Set the DISASSEMBLE_DATA bit in
        the flags field of the disassemble_info structure if the -D switch
        is in operation.

        * dis-asm.h (struct disassemble_info): New value for the flags
        field.

binutils/ChangeLog
binutils/objdump.c
include/ChangeLog
include/dis-asm.h
opcodes/ChangeLog
opcodes/arm-dis.c

index cc1e87d400f3abf1d221d62e8dbb00aeffc2f72d..e008e955ef71987da256215e299924f2e175ffe8 100644 (file)
@@ -1,3 +1,10 @@
+2009-06-15  Nick Clifton  <nickc@redhat.com>
+
+       PR 10263
+       * objdump.c (disassemble_bytes): Set the DISASSEMBLE_DATA bit in
+       the flags field of the disassemble_info structure if the -D switch
+       is in operation.
+
 2009-06-12  Homer Xing  <homer.xing@yahoo.com>
 
        * NEWS: Mention new feature added to gprof.
index 265a8ead44f7467211a1b893fd2fb6faefd235a7..3cf03f7eddbe8cc773974999678f0666e2455f53 100644 (file)
@@ -1525,7 +1525,7 @@ disassemble_bytes (struct disassemble_info * info,
              info->stream = &sfile;
              info->bytes_per_line = 0;
              info->bytes_per_chunk = 0;
-             info->flags = 0;
+             info->flags = disassemble_all ? DISASSEMBLE_DATA : 0;
 
              if (info->disassembler_needs_relocs
                  && (bfd_get_file_flags (aux->abfd) & EXEC_P) == 0
@@ -1554,7 +1554,7 @@ disassemble_bytes (struct disassemble_info * info,
                      || (distance_to_rel > 0
                          && distance_to_rel < (bfd_signed_vma) (previous_octets/ opb)))
                    {
-                     info->flags = INSN_HAS_RELOC;
+                     info->flags |= INSN_HAS_RELOC;
                      aux->reloc = **relppp;
                    }
                  else
index 1af04e80bc7bfd411f42ae5e6db172ba5a695bfa..82b104591865426a85e38545ec3346e4449993a0 100644 (file)
@@ -1,3 +1,8 @@
+2009-06-15  Nick Clifton  <nickc@redhat.com>
+
+       * dis-asm.h (struct disassemble_info): New value for the flags
+       field.
+
 2009-06-02  Ian Lance Taylor  <iant@google.com>
 
        * ansidecl.h (EXPORTED_CONST): Define.
index 95d141ffa23c25246ae7d1619217e61a07534fb4..3872f8b2d427eb7ebe6447b98ac3d472fa7761a7 100644 (file)
@@ -1,6 +1,6 @@
 /* Interface between the opcode library and its callers.
 
-   Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
    Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
@@ -39,14 +39,14 @@ extern "C" {
 
 enum dis_insn_type
 {
-  dis_noninsn,                 /* Not a valid instruction */
-  dis_nonbranch,               /* Not a branch instruction */
-  dis_branch,                  /* Unconditional branch */
-  dis_condbranch,              /* Conditional branch */
-  dis_jsr,                     /* Jump to subroutine */
-  dis_condjsr,                 /* Conditional jump to subroutine */
-  dis_dref,                    /* Data reference instruction */
-  dis_dref2                    /* Two data references in instruction */
+  dis_noninsn,                 /* Not a valid instruction */
+  dis_nonbranch,               /* Not a branch instruction */
+  dis_branch,                  /* Unconditional branch */
+  dis_condbranch,              /* Conditional branch */
+  dis_jsr,                     /* Jump to subroutine */
+  dis_condjsr,                 /* Conditional jump to subroutine */
+  dis_dref,                    /* Data reference instruction */
+  dis_dref2                    /* Two data references in instruction */
 };
 
 /* This struct is passed into the instruction decoding routine,
@@ -108,7 +108,13 @@ typedef struct disassemble_info
      The top 16 bits are reserved for public use (and are documented here).
      The bottom 16 bits are for the internal use of the disassembler.  */
   unsigned long flags;
-#define INSN_HAS_RELOC 0x80000000
+  /* Set if the disassembler has determined that there are one or more
+     relocations associated with the instruction being disassembled.  */
+#define INSN_HAS_RELOC  (1 << 31)
+  /* Set if the user has requested the disassembly of data as well as code.  */
+#define DISASSEMBLE_DATA (1 << 30)
+
+  /* Use internally by the target specific disassembly code.  */
   void *private_data;
 
   /* Function used to get bytes to disassemble.  MEMADDR is the
index d70992a52c3eb97165a41a608da82c15ca7d0165..93d5d0205da410aecaf81507e0a899ffdc4bc2dd 100644 (file)
@@ -1,3 +1,9 @@
+2009-06-15  Nick Clifton  <nickc@redhat.com>
+
+       PR 10263
+       * arm-dis.c (print_insn): Ignore is_data if the user has requested
+       the disassembly of data as well as instructions.
+
 2009-06-11  Doug Evans  <dje@sebabeach.org>
 
        * cgen.sh: Handle multiple simultaneous runs for parallel makes.
index 884b5aec185bf8d766516f62bfad1ab9c008072a..cb3bc9985157090a387ed623d5fe737a6dbfcdbf 100644 (file)
@@ -1,6 +1,6 @@
 /* Instruction printing code for the ARM
-   Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
-   2007, Free Software Foundation, Inc.
+   Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+   2004, 2007, 2009  Free Software Foundation, Inc.
    Contributed by Richard Earnshaw (rwe@pegasus.esprit.ec.org)
    Modification by James G. Smith (jsmith@cygnus.co.uk)
 
@@ -4120,11 +4120,12 @@ print_insn (bfd_vma pc, struct disassemble_info *info, bfd_boolean little)
 
   info->bytes_per_line = 4;
 
-  if (is_data)
+  /* PR 10263: Disassemble data if requested to do so by the user.  */
+  if (is_data && ((info->flags & DISASSEMBLE_DATA) == 0))
     {
       int i;
 
-      /* size was already set above.  */
+      /* Size was already set above.  */
       info->bytes_per_chunk = size;
       printer = print_insn_data;