Add -Wshadow to the gcc command line options used when compiling the binutils.
[platform/upstream/binutils.git] / opcodes / s390-dis.c
index e4e9cad..b9eeb79 100644 (file)
@@ -81,6 +81,10 @@ init_disasm (struct disassemble_info *info)
 }
 
 /* Extracts an operand value from an instruction.  */
+/* We do not perform the shift operation for larl-type address
+   operands here since that would lead to an overflow of the 32 bit
+   integer value.  Instead the shift operation is done when printing
+   the operand in print_insn_s390.  */
 
 static inline unsigned int
 s390_extract_operand (unsigned char *insn, const struct s390_operand *operand)
@@ -111,10 +115,6 @@ s390_extract_operand (unsigned char *insn, const struct s390_operand *operand)
       && (val & (1U << (operand->bits - 1))))
     val |= (-1U << (operand->bits - 1)) << 1;
 
-  /* Double value if the operand is pc relative.  */
-  if (operand->flags & S390_OPERAND_PCREL)
-    val <<= 1;
-
   /* Length x in an instructions has real length x + 1.  */
   if (operand->flags & S390_OPERAND_LENGTH)
     val++;
@@ -196,8 +196,6 @@ print_insn_s390 (bfd_vma memaddr, struct disassemble_info *info)
          separator = 0;
          for (opindex = opcode->operands; *opindex != 0; opindex++)
            {
-             unsigned int value;
-
              operand = s390_operands + *opindex;
              value = s390_extract_operand (buffer, operand);
 
@@ -222,7 +220,8 @@ print_insn_s390 (bfd_vma memaddr, struct disassemble_info *info)
              else if (operand->flags & S390_OPERAND_CR)
                (*info->fprintf_func) (info->stream, "%%c%i", value);
              else if (operand->flags & S390_OPERAND_PCREL)
-               (*info->print_address_func) (memaddr + (int) value, info);
+               (*info->print_address_func) (memaddr + (int)value + (int)value,
+                                            info);
              else if (operand->flags & S390_OPERAND_SIGNED)
                (*info->fprintf_func) (info->stream, "%i", (int) value);
              else