Check sh_type/sh_flags/sh_addralign/sh_entsize when copying sh_link/sh_info
[binutils-gdb.git] / opcodes / arc-dis.c
index b4cc241615fc939860212db1e49857a9845e5b3f..92f69da76a17f7d81889077734f14e87920fa703 100644 (file)
@@ -1,6 +1,5 @@
 /* Instruction printing code for the ARC.
-   Copyright 1994, 1995, 1997, 1998, 2000, 2001, 2002, 2005, 2007, 2009, 2010
-   Free Software Foundation, Inc.
+   Copyright (C) 1994-2015 Free Software Foundation, Inc.
    Contributed by Doug Evans (dje@cygnus.com).
 
    This file is part of libopcodes.
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
    MA 02110-1301, USA.  */
 
-#include "ansidecl.h"
+#include "sysdep.h"
 #include "libiberty.h"
 #include "dis-asm.h"
 #include "opcode/arc.h"
 #include "elf-bfd.h"
 #include "elf/arc.h"
-#include <string.h>
 #include "opintl.h"
 
 #include <stdarg.h>
@@ -60,15 +58,14 @@ typedef enum
 } a4_decoding_class;
 
 #define BIT(word,n)    ((word) & (1 << n))
-#define BITS(word,s,e)  (((word) << (31 - e)) >> (s + (31 - e)))
+#define BITS(word,s,e)  (((word) >> s) & ((1 << (e + 1 - s)) - 1))
 #define OPCODE(word)   (BITS ((word), 27, 31))
 #define FIELDA(word)   (BITS ((word), 21, 26))
 #define FIELDB(word)   (BITS ((word), 15, 20))
 #define FIELDC(word)   (BITS ((word),  9, 14))
 
-/* FIELD D is signed in all of its uses, so we make sure argument is
-   treated as signed for bit shifting purposes:  */
-#define FIELDD(word)   (BITS (((signed int)word), 0, 8))
+/* FIELD D is signed.  */
+#define FIELDD(word)   ((BITS ((word), 0, 8) ^ 0x100) - 0x100)
 
 #define PUT_NEXT_WORD_IN(a)                                            \
   do                                                                   \
@@ -428,8 +425,7 @@ write_comments_(struct arcDisState * state,
            strcpy (state->commentBuffer, comment_prefix);
          else
            strcat (state->commentBuffer, ", ");
-         strncat (state->commentBuffer, state->comm[i],
-                  sizeof (state->commentBuffer));
+         strcat (state->commentBuffer, state->comm[i]);
        }
     }
 }