OSDN Git Service

fix PR23716
[pf3gnuchains/gcc-fork.git] / gcc / dwarf2out.c
index 1f6e902..43cc8ce 100644 (file)
@@ -5241,7 +5241,7 @@ output_cfa_loc_raw (dw_cfi_ref cfi)
 
   if (cfi->dw_cfi_opc == DW_CFA_expression)
     {
-      fprintf (asm_out_file, "%#x,", cfi->dw_cfi_oprnd1.dw_cfi_reg_num);
+      fprintf (asm_out_file, "0x%x,", cfi->dw_cfi_oprnd1.dw_cfi_reg_num);
       loc = cfi->dw_cfi_oprnd2.dw_cfi_loc;
     }
   else
@@ -14364,12 +14364,12 @@ dw_loc_list_1 (tree loc, rtx varloc, int want_address,
    if it is not possible.  */
 
 static dw_loc_descr_ref
-new_loc_descr_op_bit_piece (HOST_WIDE_INT bitsize, HOST_WIDE_INT offset)
+new_loc_descr_op_bit_piece (HOST_WIDE_INT bitsize)
 {
-  if ((bitsize % BITS_PER_UNIT) == 0 && offset == 0)
+  if ((bitsize % BITS_PER_UNIT) == 0)
     return new_loc_descr (DW_OP_piece, bitsize / BITS_PER_UNIT, 0);
   else if (dwarf_version >= 3 || !dwarf_strict)
-    return new_loc_descr (DW_OP_bit_piece, bitsize, offset);
+    return new_loc_descr (DW_OP_bit_piece, bitsize, 0);
   else
     return NULL;
 }
@@ -14448,7 +14448,7 @@ dw_sra_loc_expr (tree decl, rtx loc)
          if (padsize > decl_size)
            return NULL;
          decl_size -= padsize;
-         *descr_tail = new_loc_descr_op_bit_piece (padsize, 0);
+         *descr_tail = new_loc_descr_op_bit_piece (padsize);
          if (*descr_tail == NULL)
            return NULL;
          descr_tail = &(*descr_tail)->dw_loc_next;
@@ -14461,47 +14461,7 @@ dw_sra_loc_expr (tree decl, rtx loc)
       decl_size -= bitsize;
       if (last == NULL)
        {
-         HOST_WIDE_INT offset = 0;
-         if (GET_CODE (varloc) == VAR_LOCATION
-             && GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
-           {
-             varloc = PAT_VAR_LOCATION_LOC (varloc);
-             if (GET_CODE (varloc) == EXPR_LIST)
-               varloc = XEXP (varloc, 0);
-           }
-         do 
-           {
-             if (GET_CODE (varloc) == CONST
-                 || GET_CODE (varloc) == SIGN_EXTEND
-                 || GET_CODE (varloc) == ZERO_EXTEND)
-               varloc = XEXP (varloc, 0);
-             else if (GET_CODE (varloc) == SUBREG)
-               varloc = SUBREG_REG (varloc);
-             else
-               break;
-           }
-         while (1);
-         /* DW_OP_bit_size offset should be zero for register
-            or implicit location descriptions and empty location
-            descriptions, but for memory addresses needs big endian
-            adjustment.  */
-         if (MEM_P (varloc))
-           {
-             unsigned HOST_WIDE_INT memsize
-               = INTVAL (MEM_SIZE (varloc)) * BITS_PER_UNIT;
-             if (memsize != bitsize)
-               {
-                 if (BYTES_BIG_ENDIAN != WORDS_BIG_ENDIAN
-                     && (memsize > BITS_PER_WORD || bitsize > BITS_PER_WORD))
-                   return NULL;
-                 if (memsize < bitsize)
-                   return NULL;
-                 if (BITS_BIG_ENDIAN)
-                   offset = memsize - bitsize;
-               }
-           }
-
-         *descr_tail = new_loc_descr_op_bit_piece (bitsize, offset);
+         *descr_tail = new_loc_descr_op_bit_piece (bitsize);
          if (*descr_tail == NULL)
            return NULL;
          descr_tail = &(*descr_tail)->dw_loc_next;
@@ -14512,7 +14472,7 @@ dw_sra_loc_expr (tree decl, rtx loc)
      the decl.  */
   if (descr != NULL && decl_size != 0)
     {
-      *descr_tail = new_loc_descr_op_bit_piece (decl_size, 0);
+      *descr_tail = new_loc_descr_op_bit_piece (decl_size);
       if (*descr_tail == NULL)
        return NULL;
     }
@@ -16345,7 +16305,7 @@ add_location_or_const_value_attribute (dw_die_ref die, tree decl,
       struct var_loc_node *node;
 
       node = loc_list->first;
-      rtl = NOTE_VAR_LOCATION_LOC (node->loc);
+      rtl = NOTE_VAR_LOCATION_LOC (node->var_loc_note);
       if (GET_CODE (rtl) == EXPR_LIST)
        rtl = XEXP (rtl, 0);
       if ((CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
@@ -16767,7 +16727,6 @@ lower_bound_default (void)
       return 1;
     case DW_LANG_UPC:
     case DW_LANG_D:
-    case DW_LANG_Python:
       return dwarf_version >= 4 ? 0 : -1;
     case DW_LANG_Ada95:
     case DW_LANG_Ada83: