diff --git a/gdb-6.8-bz377541-vla.patch b/gdb-6.8-bz377541-vla.patch index b1a2980..b05cc52 100644 --- a/gdb-6.8-bz377541-vla.patch +++ b/gdb-6.8-bz377541-vla.patch @@ -1,9 +1,9 @@ Based on: http://people.redhat.com/jkratoch/vla/ -fortran-dynamic-arrays-HEAD-j.patch +fortran-dynamic-arrays-HEAD-l.patch ---- ./gdb/c-typeprint.c 2008-11-06 20:50:14.000000000 +0100 -+++ ./gdb/c-typeprint.c 2008-11-06 20:51:03.000000000 +0100 +--- ./gdb/c-typeprint.c 2008-11-08 22:46:06.000000000 +0100 ++++ ./gdb/c-typeprint.c 2008-11-08 22:39:57.000000000 +0100 @@ -541,7 +541,12 @@ c_type_print_varspec_suffix (struct type fprintf_filtered (stream, ")"); @@ -18,8 +18,8 @@ fortran-dynamic-arrays-HEAD-j.patch && !TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type)) fprintf_filtered (stream, "%d", (TYPE_LENGTH (type) ---- ./gdb/dwarf2expr.c 2008-11-06 20:50:14.000000000 +0100 -+++ ./gdb/dwarf2expr.c 2008-11-06 20:51:03.000000000 +0100 +--- ./gdb/dwarf2expr.c 2008-11-08 22:46:06.000000000 +0100 ++++ ./gdb/dwarf2expr.c 2008-11-08 22:39:57.000000000 +0100 @@ -750,6 +750,13 @@ execute_stack_op (struct dwarf_expr_cont ctx->initialized = 0; goto no_push; @@ -34,8 +34,8 @@ fortran-dynamic-arrays-HEAD-j.patch default: error (_("Unhandled dwarf expression opcode 0x%x"), op); } ---- ./gdb/dwarf2expr.h 2008-11-06 20:50:14.000000000 +0100 -+++ ./gdb/dwarf2expr.h 2008-11-06 20:51:03.000000000 +0100 +--- ./gdb/dwarf2expr.h 2008-11-08 22:46:06.000000000 +0100 ++++ ./gdb/dwarf2expr.h 2008-11-08 22:39:57.000000000 +0100 @@ -61,10 +61,10 @@ struct dwarf_expr_context The result must be live until the current expression evaluation is complete. */ @@ -48,9 +48,9 @@ fortran-dynamic-arrays-HEAD-j.patch /* The current depth of dwarf expression recursion, via DW_OP_call*, DW_OP_fbreg, DW_OP_push_object_address, etc., and the maximum ---- ./gdb/dwarf2loc.c 2008-11-06 20:50:14.000000000 +0100 -+++ ./gdb/dwarf2loc.c 2008-11-06 20:51:35.000000000 +0100 -@@ -106,6 +106,9 @@ struct dwarf_expr_baton +--- ./gdb/dwarf2loc.c 2008-11-08 22:46:06.000000000 +0100 ++++ ./gdb/dwarf2loc.c 2008-11-08 22:39:57.000000000 +0100 +@@ -105,6 +105,9 @@ struct dwarf_expr_baton { struct frame_info *frame; struct objfile *objfile; @@ -60,7 +60,7 @@ fortran-dynamic-arrays-HEAD-j.patch }; /* Helper functions for dwarf2_evaluate_loc_desc. */ -@@ -164,22 +167,32 @@ dwarf_expr_frame_base (void *baton, gdb_ +@@ -160,22 +163,32 @@ dwarf_expr_frame_base (void *baton, gdb_ *start = find_location_expression (symbaton, length, get_frame_address_in_block (frame)); } @@ -102,7 +102,7 @@ fortran-dynamic-arrays-HEAD-j.patch } /* Using the objfile specified in BATON, find the address for the -@@ -192,6 +205,117 @@ dwarf_expr_tls_address (void *baton, COR +@@ -188,6 +201,117 @@ dwarf_expr_tls_address (void *baton, COR return target_translate_tls_address (debaton->objfile, offset); } @@ -220,7 +220,7 @@ fortran-dynamic-arrays-HEAD-j.patch /* Evaluate a location description, starting at DATA and with length SIZE, to find the current location of variable VAR in the context of FRAME. */ -@@ -202,8 +326,8 @@ dwarf2_evaluate_loc_desc (struct symbol +@@ -198,8 +322,8 @@ dwarf2_evaluate_loc_desc (struct symbol { struct gdbarch *arch = get_frame_arch (frame); struct value *retval; @@ -230,7 +230,7 @@ fortran-dynamic-arrays-HEAD-j.patch if (size == 0) { -@@ -213,17 +337,8 @@ dwarf2_evaluate_loc_desc (struct symbol +@@ -209,17 +333,8 @@ dwarf2_evaluate_loc_desc (struct symbol return retval; } @@ -249,7 +249,7 @@ fortran-dynamic-arrays-HEAD-j.patch if (ctx->num_pieces > 0) { int i; -@@ -261,6 +376,10 @@ dwarf2_evaluate_loc_desc (struct symbol +@@ -257,6 +372,10 @@ dwarf2_evaluate_loc_desc (struct symbol { CORE_ADDR address = dwarf_expr_fetch (ctx, 0); @@ -260,7 +260,7 @@ fortran-dynamic-arrays-HEAD-j.patch retval = allocate_value (SYMBOL_TYPE (var)); VALUE_LVAL (retval) = lval_memory; set_value_lazy (retval, 1); -@@ -269,7 +388,7 @@ dwarf2_evaluate_loc_desc (struct symbol +@@ -265,7 +384,7 @@ dwarf2_evaluate_loc_desc (struct symbol set_value_initialized (retval, ctx->initialized); @@ -269,7 +269,7 @@ fortran-dynamic-arrays-HEAD-j.patch return retval; } -@@ -578,7 +697,7 @@ static int +@@ -574,7 +693,7 @@ static int loclist_describe_location (struct symbol *symbol, struct ui_file *stream) { /* FIXME: Could print the entire list of locations. */ @@ -278,7 +278,7 @@ fortran-dynamic-arrays-HEAD-j.patch return 1; } -@@ -594,16 +713,56 @@ loclist_tracepoint_var_ref (struct symbo +@@ -590,16 +709,56 @@ loclist_tracepoint_var_ref (struct symbo data = find_location_expression (dlbaton, &size, ax->scope); if (data == NULL) @@ -338,8 +338,8 @@ fortran-dynamic-arrays-HEAD-j.patch + missing_describe_location, + missing_tracepoint_var_ref +}; ---- ./gdb/dwarf2loc.h 2008-11-06 20:50:14.000000000 +0100 -+++ ./gdb/dwarf2loc.h 2008-11-06 20:52:23.000000000 +0100 +--- ./gdb/dwarf2loc.h 2008-11-08 22:46:06.000000000 +0100 ++++ ./gdb/dwarf2loc.h 2008-11-08 22:39:57.000000000 +0100 @@ -65,5 +65,11 @@ struct dwarf2_loclist_baton extern const struct symbol_ops dwarf2_locexpr_funcs; @@ -352,9 +352,9 @@ fortran-dynamic-arrays-HEAD-j.patch + (struct dwarf2_locexpr_baton *dlbaton); #endif /* dwarf2loc.h */ ---- ./gdb/dwarf2read.c 2008-11-06 20:50:14.000000000 +0100 -+++ ./gdb/dwarf2read.c 2008-11-06 20:51:35.000000000 +0100 -@@ -1005,7 +1005,14 @@ static void store_in_ref_table (unsigned +--- ./gdb/dwarf2read.c 2008-11-08 22:46:06.000000000 +0100 ++++ ./gdb/dwarf2read.c 2008-11-08 22:47:45.000000000 +0100 +@@ -1004,7 +1004,14 @@ static void store_in_ref_table (unsigned static unsigned int dwarf2_get_ref_die_offset (struct attribute *, struct dwarf2_cu *); @@ -370,7 +370,7 @@ fortran-dynamic-arrays-HEAD-j.patch static struct die_info *follow_die_ref (struct die_info *, struct attribute *, -@@ -1060,6 +1067,9 @@ static void age_cached_comp_units (void) +@@ -1059,6 +1066,9 @@ static void age_cached_comp_units (void) static void free_one_cached_comp_unit (void *); @@ -380,7 +380,7 @@ fortran-dynamic-arrays-HEAD-j.patch static void set_die_type (struct die_info *, struct type *, struct dwarf2_cu *); -@@ -1083,6 +1093,9 @@ static void dwarf2_clear_marks (struct d +@@ -1082,6 +1092,9 @@ static void dwarf2_clear_marks (struct d static void read_set_type (struct die_info *, struct dwarf2_cu *); @@ -390,7 +390,7 @@ fortran-dynamic-arrays-HEAD-j.patch /* Try to locate the sections we need for DWARF 2 debugging information and return true if we have enough to do something. */ -@@ -4402,6 +4415,26 @@ process_enumeration_scope (struct die_in +@@ -4387,6 +4400,26 @@ process_enumeration_scope (struct die_in new_symbol (die, die->type, cu); } @@ -417,7 +417,7 @@ fortran-dynamic-arrays-HEAD-j.patch /* Extract all information from a DW_TAG_array_type DIE and put it in the DIE's type field. For now, this only handles one dimensional arrays. */ -@@ -4415,7 +4448,7 @@ read_array_type (struct die_info *die, s +@@ -4400,7 +4433,7 @@ read_array_type (struct die_info *die, s struct type *element_type, *range_type, *index_type; struct type **range_types = NULL; struct attribute *attr; @@ -426,7 +426,7 @@ fortran-dynamic-arrays-HEAD-j.patch struct cleanup *back_to; char *name; -@@ -4470,16 +4503,11 @@ read_array_type (struct die_info *die, s +@@ -4455,16 +4488,11 @@ read_array_type (struct die_info *die, s type = element_type; if (read_array_order (die, cu) == DW_ORD_col_major) @@ -448,7 +448,7 @@ fortran-dynamic-arrays-HEAD-j.patch /* Understand Dwarf2 support for vector types (like they occur on the PowerPC w/ AltiVec). Gcc just adds another attribute to the -@@ -4841,34 +4869,98 @@ read_tag_string_type (struct die_info *d +@@ -4826,34 +4854,98 @@ read_tag_string_type (struct die_info *d struct objfile *objfile = cu->objfile; struct type *type, *range_type, *index_type, *char_type; struct attribute *attr; @@ -470,12 +470,12 @@ fortran-dynamic-arrays-HEAD-j.patch + attr = dwarf2_attr (die, DW_AT_string_length, cu); - if (attr) -+ switch (dwarf2_get_attr_constant_value (attr, &length)) - { +- { - length = DW_UNSND (attr); - } - else -- { ++ switch (dwarf2_get_attr_constant_value (attr, &length)) + { - /* check for the DW_AT_byte_size attribute */ + case dwarf2_attr_const: + /* We currently do not support a constant address where the location @@ -564,7 +564,7 @@ fortran-dynamic-arrays-HEAD-j.patch type = create_string_type (NULL, range_type); set_die_type (die, type, cu); -@@ -4961,7 +5053,6 @@ static void +@@ -4946,7 +5038,6 @@ static void read_typedef (struct die_info *die, struct dwarf2_cu *cu) { struct objfile *objfile = cu->objfile; @@ -572,7 +572,7 @@ fortran-dynamic-arrays-HEAD-j.patch char *name = NULL; if (!die->type) -@@ -5067,9 +5158,9 @@ read_subrange_type (struct die_info *die +@@ -5052,9 +5143,9 @@ read_subrange_type (struct die_info *die { struct type *base_type; struct type *range_type; @@ -585,7 +585,7 @@ fortran-dynamic-arrays-HEAD-j.patch char *name; /* If we have already decoded this die, then nothing more to do. */ -@@ -5086,42 +5177,87 @@ read_subrange_type (struct die_info *die +@@ -5071,42 +5162,89 @@ read_subrange_type (struct die_info *die 0, NULL, cu->objfile); } @@ -663,7 +663,9 @@ fortran-dynamic-arrays-HEAD-j.patch + { + attr = dwarf2_attr (die, DW_AT_count, cu); + high_type = dwarf2_get_attr_constant_value (attr, &high); -+ TYPE_FLAGS (range_type) |= TYPE_FLAG_RANGE_HIGH_BOUND_IS_COUNT; ++ /* It does not hurt but it is needlessly ineffective in check_typedef. */ ++ if (high_type != dwarf2_attr_unknown) ++ TYPE_FLAGS (range_type) |= TYPE_FLAG_RANGE_HIGH_BOUND_IS_COUNT; + /* Pass it now as the regular DW_AT_upper_bound. */ + } + switch (high_type) @@ -703,7 +705,7 @@ fortran-dynamic-arrays-HEAD-j.patch name = dwarf2_name (die, cu); if (name) -@@ -7256,10 +7392,12 @@ var_decode_location (struct attribute *a +@@ -7237,10 +7375,12 @@ var_decode_location (struct attribute *a (i.e. when the value of a register or memory location is referenced, or a thread-local block, etc.). Then again, it might not be worthwhile. I'm assuming that it isn't unless performance @@ -718,7 +720,16 @@ fortran-dynamic-arrays-HEAD-j.patch } /* Given a pointer to a DWARF information entry, figure out if we need -@@ -9120,26 +9258,35 @@ dwarf2_get_ref_die_offset (struct attrib +@@ -7272,6 +7412,8 @@ new_symbol (struct die_info *die, struct + sizeof (struct symbol)); + OBJSTAT (objfile, n_syms++); + memset (sym, 0, sizeof (struct symbol)); ++ /* Some methods are called without checking SYMBOL_OPS validity. */ ++ SYMBOL_OPS (sym) = &dwarf2_missing_funcs; + + /* Cache this symbol's name and the name's demangled form (if any). */ + SYMBOL_LANGUAGE (sym) = cu->language; +@@ -9079,26 +9221,35 @@ dwarf2_get_ref_die_offset (struct attrib return result; } @@ -748,7 +759,7 @@ fortran-dynamic-arrays-HEAD-j.patch - return default_value; + *val_return = DW_SND (attr); + return dwarf2_attr_const; -+ } + } + if (attr->form == DW_FORM_udata + || attr->form == DW_FORM_data1 + || attr->form == DW_FORM_data2 @@ -757,7 +768,7 @@ fortran-dynamic-arrays-HEAD-j.patch + { + *val_return = DW_UNSND (attr); + return dwarf2_attr_const; - } ++ } + if (attr->form == DW_FORM_block + || attr->form == DW_FORM_block1 + || attr->form == DW_FORM_block2 @@ -769,7 +780,7 @@ fortran-dynamic-arrays-HEAD-j.patch } static struct die_info * -@@ -9903,6 +10050,34 @@ attr_form_is_constant (struct attribute +@@ -9862,6 +10013,34 @@ attr_form_is_constant (struct attribute } } @@ -804,7 +815,7 @@ fortran-dynamic-arrays-HEAD-j.patch static void dwarf2_symbol_mark_computed (struct attribute *attr, struct symbol *sym, struct dwarf2_cu *cu) -@@ -9938,34 +10113,24 @@ dwarf2_symbol_mark_computed (struct attr +@@ -9897,34 +10076,24 @@ dwarf2_symbol_mark_computed (struct attr SYMBOL_OPS (sym) = &dwarf2_loclist_funcs; SYMBOL_LOCATION_BATON (sym) = baton; } @@ -853,7 +864,7 @@ fortran-dynamic-arrays-HEAD-j.patch } } -@@ -10205,6 +10370,27 @@ offset_and_type_eq (const void *item_lhs +@@ -10164,6 +10333,27 @@ offset_and_type_eq (const void *item_lhs return ofs_lhs->offset == ofs_rhs->offset; } @@ -881,7 +892,7 @@ fortran-dynamic-arrays-HEAD-j.patch /* Set the type associated with DIE to TYPE. Save it in CU's hash table if necessary. */ -@@ -10215,6 +10401,8 @@ set_die_type (struct die_info *die, stru +@@ -10174,6 +10364,8 @@ set_die_type (struct die_info *die, stru die->type = type; @@ -890,8 +901,8 @@ fortran-dynamic-arrays-HEAD-j.patch if (cu->per_cu == NULL) return; ---- ./gdb/eval.c 2008-11-06 20:50:14.000000000 +0100 -+++ ./gdb/eval.c 2008-11-06 20:51:35.000000000 +0100 +--- ./gdb/eval.c 2008-11-08 22:46:06.000000000 +0100 ++++ ./gdb/eval.c 2008-11-08 22:39:57.000000000 +0100 @@ -38,6 +38,7 @@ #include "ui-out.h" #include "exceptions.h" @@ -1007,8 +1018,8 @@ fortran-dynamic-arrays-HEAD-j.patch default: val = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS); ---- ./gdb/f-lang.h 2008-11-06 20:50:14.000000000 +0100 -+++ ./gdb/f-lang.h 2008-11-06 20:51:03.000000000 +0100 +--- ./gdb/f-lang.h 2008-11-08 22:46:06.000000000 +0100 ++++ ./gdb/f-lang.h 2008-11-08 22:39:57.000000000 +0100 @@ -28,6 +28,10 @@ extern void f_error (char *); /* Defined extern void f_print_type (struct type *, char *, struct ui_file *, int, int); @@ -1020,8 +1031,8 @@ fortran-dynamic-arrays-HEAD-j.patch extern int f_val_print (struct type *, const gdb_byte *, int, CORE_ADDR, struct ui_file *, int, int, int, enum val_prettyprint); ---- ./gdb/f-typeprint.c 2008-11-06 20:50:14.000000000 +0100 -+++ ./gdb/f-typeprint.c 2008-11-06 20:51:03.000000000 +0100 +--- ./gdb/f-typeprint.c 2008-11-08 22:46:06.000000000 +0100 ++++ ./gdb/f-typeprint.c 2008-11-08 22:39:57.000000000 +0100 @@ -31,7 +31,7 @@ #include "gdbcore.h" #include "target.h" @@ -1157,8 +1168,8 @@ fortran-dynamic-arrays-HEAD-j.patch if (passed_a_ptr) fprintf_filtered (stream, ")"); ---- ./gdb/f-valprint.c 2008-11-06 20:50:14.000000000 +0100 -+++ ./gdb/f-valprint.c 2008-11-06 20:51:03.000000000 +0100 +--- ./gdb/f-valprint.c 2008-11-08 22:46:06.000000000 +0100 ++++ ./gdb/f-valprint.c 2008-11-08 22:48:10.000000000 +0100 @@ -54,15 +54,17 @@ int f77_array_offset_tbl[MAX_FORTRAN_DIM /* The following macro gives us the size of the nth dimension, Where n is 1 based. */ @@ -1278,8 +1289,18 @@ fortran-dynamic-arrays-HEAD-j.patch CHECK_TYPEDEF (type); switch (TYPE_CODE (type)) { ---- ./gdb/findvar.c 2008-11-06 20:50:14.000000000 +0100 -+++ ./gdb/findvar.c 2008-11-06 20:51:03.000000000 +0100 +@@ -599,8 +611,7 @@ info_common_command (char *comname, int + while (entry != NULL) + { + printf_filtered ("%s = ", DEPRECATED_SYMBOL_NAME (entry->symbol)); +- print_variable_value (entry->symbol, fi, gdb_stdout); +- printf_filtered ("\n"); ++ print_variable_value_nl (entry->symbol, fi, gdb_stdout); + entry = entry->next; + } + } +--- ./gdb/findvar.c 2008-11-08 22:46:06.000000000 +0100 ++++ ./gdb/findvar.c 2008-11-08 22:39:57.000000000 +0100 @@ -34,6 +34,7 @@ #include "regcache.h" #include "user-regs.h" @@ -1411,7 +1432,7 @@ fortran-dynamic-arrays-HEAD-j.patch case LOC_REGISTER: case LOC_REGPARM: -@@ -530,7 +537,6 @@ addresses have not been bound by the dyn +@@ -532,7 +539,6 @@ addresses have not been bound by the dyn error (_("Value of register variable not available.")); addr = value_as_address (regval); @@ -1419,7 +1440,7 @@ fortran-dynamic-arrays-HEAD-j.patch } else { -@@ -570,18 +576,33 @@ addresses have not been bound by the dyn +@@ -572,18 +578,33 @@ addresses have not been bound by the dyn break; case LOC_OPTIMIZED_OUT: @@ -1459,7 +1480,7 @@ fortran-dynamic-arrays-HEAD-j.patch } /* Install default attributes for register values. */ -@@ -618,10 +639,11 @@ struct value * +@@ -620,10 +641,11 @@ struct value * value_from_register (struct type *type, int regnum, struct frame_info *frame) { struct gdbarch *gdbarch = get_frame_arch (frame); @@ -1473,7 +1494,7 @@ fortran-dynamic-arrays-HEAD-j.patch { /* The ISA/ABI need to something weird when obtaining the specified value from this register. It might need to -@@ -635,7 +657,7 @@ value_from_register (struct type *type, +@@ -637,7 +659,7 @@ value_from_register (struct type *type, VALUE_FRAME_ID (v) = get_frame_id (frame); VALUE_REGNUM (v) = regnum; gdbarch_register_to_value (gdbarch, @@ -1482,8 +1503,8 @@ fortran-dynamic-arrays-HEAD-j.patch } else { ---- ./gdb/gdbtypes.c 2008-11-06 20:50:14.000000000 +0100 -+++ ./gdb/gdbtypes.c 2008-11-06 20:51:03.000000000 +0100 +--- ./gdb/gdbtypes.c 2008-11-08 22:46:06.000000000 +0100 ++++ ./gdb/gdbtypes.c 2008-11-08 22:46:45.000000000 +0100 @@ -38,6 +38,8 @@ #include "cp-abi.h" #include "gdb_assert.h" @@ -1733,7 +1754,7 @@ fortran-dynamic-arrays-HEAD-j.patch struct type * check_typedef (struct type *type) -@@ -1505,34 +1621,85 @@ check_typedef (struct type *type) +@@ -1505,34 +1621,87 @@ check_typedef (struct type *type) } } @@ -1744,10 +1765,13 @@ fortran-dynamic-arrays-HEAD-j.patch + struct type *ntype; + + /* make_cv_type does not copy the contents of TYPE_MAIN_TYPE while we are -+ changing fields in it below. Do a full TYPE_MAIN_TYPE copy. */ ++ changing fields in it below. Do a full TYPE_MAIN_TYPE copy. ++ Sure FIXME as it is at least a memory leak. */ + + ntype = alloc_type (TYPE_OBJFILE (type)); + *TYPE_MAIN_TYPE (ntype) = *TYPE_MAIN_TYPE (type); ++ TYPE_LENGTH (ntype) = TYPE_LENGTH (type); ++ TYPE_INSTANCE_FLAGS (ntype) = TYPE_INSTANCE_FLAGS (type); + if (TYPE_NFIELDS (type)) + { + size_t size = sizeof (*TYPE_FIELDS (type)) * TYPE_NFIELDS (type); @@ -1759,7 +1783,6 @@ fortran-dynamic-arrays-HEAD-j.patch + TYPE_FIELDS (ntype) = xzalloc (size); + memcpy (TYPE_FIELDS (ntype), TYPE_FIELDS (type), size); + } -+ TYPE_INSTANCE_FLAGS (ntype) = TYPE_INSTANCE_FLAGS (type); + type = ntype; + + if (TYPE_CODE (type) == TYPE_CODE_ARRAY @@ -1837,7 +1860,7 @@ fortran-dynamic-arrays-HEAD-j.patch TYPE_FLAGS (type) &= ~TYPE_FLAG_TARGET_STUB; } else if (TYPE_CODE (type) == TYPE_CODE_RANGE) -@@ -1540,9 +1707,12 @@ check_typedef (struct type *type) +@@ -1540,9 +1709,12 @@ check_typedef (struct type *type) TYPE_LENGTH (type) = TYPE_LENGTH (target_type); TYPE_FLAGS (type) &= ~TYPE_FLAG_TARGET_STUB; } @@ -1850,9 +1873,9 @@ fortran-dynamic-arrays-HEAD-j.patch return type; } ---- ./gdb/gdbtypes.h 2008-11-06 20:50:14.000000000 +0100 -+++ ./gdb/gdbtypes.h 2008-11-06 20:51:03.000000000 +0100 -@@ -310,6 +310,16 @@ enum type_code +--- ./gdb/gdbtypes.h 2008-11-08 22:46:06.000000000 +0100 ++++ ./gdb/gdbtypes.h 2008-11-08 22:39:57.000000000 +0100 +@@ -295,6 +295,16 @@ enum type_code #define TYPE_FLAG_NOTTEXT (1 << 17) #define TYPE_NOTTEXT(t) (TYPE_FLAGS (t) & TYPE_FLAG_NOTTEXT) @@ -1869,7 +1892,7 @@ fortran-dynamic-arrays-HEAD-j.patch /* Determine which field of the union main_type.fields[x].loc is used. */ enum field_loc_kind -@@ -391,6 +401,15 @@ struct main_type +@@ -376,6 +386,15 @@ struct main_type short vptr_fieldno; @@ -1885,7 +1908,7 @@ fortran-dynamic-arrays-HEAD-j.patch /* For structure and union types, a description of each field. For set and pascal array types, there is one "field", whose type is the domain type of the set or array. -@@ -778,9 +797,9 @@ extern void allocate_cplus_struct_type ( +@@ -763,9 +782,9 @@ extern void allocate_cplus_struct_type ( #define TYPE_POINTER_TYPE(thistype) (thistype)->pointer_type #define TYPE_REFERENCE_TYPE(thistype) (thistype)->reference_type #define TYPE_CHAIN(thistype) (thistype)->chain @@ -1898,7 +1921,7 @@ fortran-dynamic-arrays-HEAD-j.patch calls check_typedef, TYPE_LENGTH (VALUE_TYPE (X)) is safe. */ #define TYPE_LENGTH(thistype) (thistype)->length #define TYPE_OBJFILE(thistype) TYPE_MAIN_TYPE(thistype)->objfile -@@ -792,23 +811,49 @@ extern void allocate_cplus_struct_type ( +@@ -777,23 +796,49 @@ extern void allocate_cplus_struct_type ( #define TYPE_FIELDS(thistype) TYPE_MAIN_TYPE(thistype)->fields #define TYPE_TEMPLATE_ARGS(thistype) TYPE_CPLUS_SPECIFIC(thistype)->template_args #define TYPE_INSTANTIATIONS(thistype) TYPE_CPLUS_SPECIFIC(thistype)->instantiations @@ -1957,7 +1980,7 @@ fortran-dynamic-arrays-HEAD-j.patch /* C++ */ -@@ -1271,12 +1316,26 @@ extern struct type *make_function_type ( +@@ -1256,12 +1301,26 @@ extern struct type *make_function_type ( extern struct type *lookup_function_type (struct type *); @@ -1984,9 +2007,17 @@ fortran-dynamic-arrays-HEAD-j.patch extern struct type *create_string_type (struct type *, struct type *); extern struct type *create_set_type (struct type *, struct type *); ---- ./gdb/printcmd.c 2008-11-06 20:50:14.000000000 +0100 -+++ ./gdb/printcmd.c 2008-11-06 20:51:03.000000000 +0100 -@@ -888,6 +888,11 @@ print_command_1 (char *exp, int inspect, +--- ./gdb/printcmd.c 2008-11-08 22:46:06.000000000 +0100 ++++ ./gdb/printcmd.c 2008-11-08 22:49:51.000000000 +0100 +@@ -42,6 +42,7 @@ + #include "block.h" + #include "disasm.h" + #include "dfp.h" ++#include "exceptions.h" + + #ifdef TUI + #include "tui/tui.h" /* For tui_active et.al. */ +@@ -888,6 +889,11 @@ print_command_1 (char *exp, int inspect, else val = access_value_history (0); @@ -1998,8 +2029,62 @@ fortran-dynamic-arrays-HEAD-j.patch if (voidprint || (val && value_type (val) && TYPE_CODE (value_type (val)) != TYPE_CODE_VOID)) { +@@ -1716,15 +1722,26 @@ disable_display_command (char *args, int + + + /* Print the value in stack frame FRAME of a variable specified by a +- struct symbol. */ ++ struct symbol. Printed value gets terminated by a newline. */ + + void +-print_variable_value (struct symbol *var, struct frame_info *frame, +- struct ui_file *stream) ++print_variable_value_nl (struct symbol *var, struct frame_info *frame, ++ struct ui_file *stream) + { +- struct value *val = read_var_value (var, frame); ++ struct value *val = NULL; /* A false GCC warning. */ ++ struct gdb_exception e; + +- value_print (val, stream, 0, Val_pretty_default); ++ TRY_CATCH (e, RETURN_MASK_ERROR) ++ { ++ val = read_var_value (var, frame); ++ } ++ if (e.reason < 0) ++ exception_print (stream, e); ++ else ++ { ++ value_print (val, stream, 0, Val_pretty_default); ++ fputc_filtered ('\n', stream); ++ } + } + + static void +--- ./gdb/stack.c 2008-03-17 16:06:24.000000000 +0100 ++++ ./gdb/stack.c 2008-11-08 22:48:28.000000000 +0100 +@@ -1381,8 +1381,7 @@ print_block_frame_locals (struct block * + fputs_filtered ("\t", stream); + fputs_filtered (SYMBOL_PRINT_NAME (sym), stream); + fputs_filtered (" = ", stream); +- print_variable_value (sym, frame, stream); +- fprintf_filtered (stream, "\n"); ++ print_variable_value_nl (sym, frame, stream); + break; + + default: +@@ -1598,8 +1597,7 @@ print_frame_arg_vars (struct frame_info + + sym2 = lookup_symbol (DEPRECATED_SYMBOL_NAME (sym), + b, VAR_DOMAIN, NULL, NULL); +- print_variable_value (sym2, frame, stream); +- fprintf_filtered (stream, "\n"); ++ print_variable_value_nl (sym2, frame, stream); + break; + + default: --- ./gdb/testsuite/gdb.base/vla-overflow.c 1970-01-01 01:00:00.000000000 +0100 -+++ ./gdb/testsuite/gdb.base/vla-overflow.c 2008-11-06 20:51:03.000000000 +0100 ++++ ./gdb/testsuite/gdb.base/vla-overflow.c 2008-11-08 22:39:57.000000000 +0100 @@ -0,0 +1,30 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -2032,7 +2117,7 @@ fortran-dynamic-arrays-HEAD-j.patch + return 0; +} --- ./gdb/testsuite/gdb.base/vla-overflow.exp 1970-01-01 01:00:00.000000000 +0100 -+++ ./gdb/testsuite/gdb.base/vla-overflow.exp 2008-11-06 20:51:35.000000000 +0100 ++++ ./gdb/testsuite/gdb.base/vla-overflow.exp 2008-11-08 22:39:57.000000000 +0100 @@ -0,0 +1,108 @@ +# Copyright 2008 Free Software Foundation, Inc. + @@ -2143,7 +2228,7 @@ fortran-dynamic-arrays-HEAD-j.patch + +verbose -log "kb_found in bt after abort() = [expr [memory_v_pages_get] * $pagesize / 1024]" --- ./gdb/testsuite/gdb.base/vla.c 1970-01-01 01:00:00.000000000 +0100 -+++ ./gdb/testsuite/gdb.base/vla.c 2008-11-06 20:51:03.000000000 +0100 ++++ ./gdb/testsuite/gdb.base/vla.c 2008-11-08 22:39:57.000000000 +0100 @@ -0,0 +1,55 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -2201,7 +2286,7 @@ fortran-dynamic-arrays-HEAD-j.patch + return 0; +} --- ./gdb/testsuite/gdb.base/vla.exp 1970-01-01 01:00:00.000000000 +0100 -+++ ./gdb/testsuite/gdb.base/vla.exp 2008-11-06 20:51:03.000000000 +0100 ++++ ./gdb/testsuite/gdb.base/vla.exp 2008-11-08 22:39:57.000000000 +0100 @@ -0,0 +1,62 @@ +# Copyright 2008 Free Software Foundation, Inc. + @@ -2265,8 +2350,462 @@ fortran-dynamic-arrays-HEAD-j.patch +gdb_test "p temp1" " = '1' " "second: print temp1" +gdb_test "p temp2" " = '2' " "second: print temp2" +gdb_test "p temp3" " = '3' " "second: print temp3" +--- ./gdb/testsuite/gdb.dwarf2/dw2-framebase-missing-func.S 1970-01-01 01:00:00.000000000 +0100 ++++ ./gdb/testsuite/gdb.dwarf2/dw2-framebase-missing-func.S 2008-11-08 22:46:45.000000000 +0100 +@@ -0,0 +1,336 @@ ++/* This testcase is part of GDB, the GNU debugger. ++ ++ Copyright 2008 Free Software Foundation, Inc. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 3 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program. If not, see . */ ++ ++/* ++#include ++ ++void ++func (void) ++{ ++ int i; ++ ++ abort (); ++} ++*/ ++ .file "dw2-loclist-prelinked.c" ++ .section .debug_abbrev,"",@progbits ++.Ldebug_abbrev0: ++ .section .debug_info,"",@progbits ++.Ldebug_info0: ++ .section .debug_line,"",@progbits ++.Ldebug_line0: ++ .text ++.Ltext0: ++.globl func ++ .type func, @function ++func: ++.LFB2: ++ .file 1 "dw2-loclist-prelinked.c" ++ .loc 1 5 0 ++ pushl %ebp ++.LCFI0: ++ movl %esp, %ebp ++.LCFI1: ++ subl $24, %esp ++.LCFI2: ++ .loc 1 8 0 ++ call abort ++.LFE2: ++ .size func, .-func ++ .section .debug_frame,"",@progbits ++.Lframe0: ++ .long .LECIE0-.LSCIE0 ++.LSCIE0: ++ .long 0xffffffff ++ .byte 0x1 ++ .string "" ++ .uleb128 0x1 ++ .sleb128 -4 ++ .byte 0x8 ++ .byte 0xc ++ .uleb128 0x4 ++ .uleb128 0x4 ++ .byte 0x88 ++ .uleb128 0x1 ++ .align 4 ++.LECIE0: ++.LSFDE0: ++ .long .LEFDE0-.LASFDE0 ++.LASFDE0: ++ .long .Lframe0 ++ .long .LFB2 ++ .long .LFE2-.LFB2 ++ .byte 0x4 ++ .long .LCFI0-.LFB2 ++ .byte 0xe ++ .uleb128 0x8 ++ .byte 0x85 ++ .uleb128 0x2 ++ .byte 0x4 ++ .long .LCFI1-.LCFI0 ++ .byte 0xd ++ .uleb128 0x5 ++ .align 4 ++.LEFDE0: ++ .text ++.Letext0: ++#if 0 /* FRAMEBASE_MISSING */ ++ .section .debug_loc,"",@progbits ++.Ldebug_loc0: ++.LLST0: ++ .long .LFB2-.Ltext0 ++ .long .LCFI0-.Ltext0 ++ .value 0x2 ++ .byte 0x74 ++ .sleb128 4 ++ .long .LCFI0-.Ltext0 ++ .long .LCFI1-.Ltext0 ++ .value 0x2 ++ .byte 0x74 ++ .sleb128 8 ++ .long .LCFI1-.Ltext0 ++ .long .LFE2-.Ltext0 ++ .value 0x2 ++ .byte 0x75 ++ .sleb128 8 ++ .long 0x0 ++ .long 0x0 ++#endif /* FRAMEBASE_MISSING */ ++ .section .debug_info ++ .long .Ldebug_info_end - .Ldebug_info_start ++.Ldebug_info_start: ++ .value 0x2 ++ .long .Ldebug_abbrev0 ++ .byte 0x4 ++ .uleb128 0x1 ++ .long .LASF10 ++ .byte 0x1 ++ .long .LASF11 ++ .long .LASF12 ++ .long .Ltext0 ++ .long .Letext0 ++ .long .Ldebug_line0 ++ .uleb128 0x2 ++ .byte 0x4 ++ .byte 0x7 ++ .long .LASF0 ++ .uleb128 0x3 ++ .byte 0x4 ++ .byte 0x5 ++ .string "int" ++ .uleb128 0x2 ++ .byte 0x4 ++ .byte 0x5 ++ .long .LASF1 ++ .uleb128 0x2 ++ .byte 0x1 ++ .byte 0x8 ++ .long .LASF2 ++ .uleb128 0x2 ++ .byte 0x2 ++ .byte 0x7 ++ .long .LASF3 ++ .uleb128 0x2 ++ .byte 0x4 ++ .byte 0x7 ++ .long .LASF4 ++ .uleb128 0x2 ++ .byte 0x1 ++ .byte 0x6 ++ .long .LASF5 ++ .uleb128 0x2 ++ .byte 0x2 ++ .byte 0x5 ++ .long .LASF6 ++ .uleb128 0x2 ++ .byte 0x8 ++ .byte 0x5 ++ .long .LASF7 ++ .uleb128 0x2 ++ .byte 0x8 ++ .byte 0x7 ++ .long .LASF8 ++ .uleb128 0x4 ++ .byte 0x4 ++ .byte 0x7 ++ .uleb128 0x2 ++ .byte 0x1 ++ .byte 0x6 ++ .long .LASF9 ++ .uleb128 0x5 ++ .byte 0x1 ++ .long .LASF13 ++ .byte 0x1 ++ .byte 0x5 ++ .byte 0x1 ++ .long .LFB2 ++ .long .LFE2 ++#if 0 /* FRAMEBASE_MISSING */ ++ .long .LLST0 /* DW_AT_frame_base : 0x0 (location list) */ ++#endif /* FRAMEBASE_MISSING */ ++ .uleb128 0x6 ++ .string "i" ++ .byte 0x1 ++ .byte 0x6 ++ .long 0x2c ++ .byte 0x2 ++ .byte 0x91 ++ .sleb128 -12 ++ .byte 0x0 ++ .byte 0x0 ++.Ldebug_info_end: ++ .section .debug_abbrev ++ .uleb128 0x1 ++ .uleb128 0x11 ++ .byte 0x1 ++ .uleb128 0x25 ++ .uleb128 0xe ++ .uleb128 0x13 ++ .uleb128 0xb ++ .uleb128 0x3 ++ .uleb128 0xe ++ .uleb128 0x1b ++ .uleb128 0xe ++ .uleb128 0x11 ++ .uleb128 0x1 ++ .uleb128 0x12 ++ .uleb128 0x1 ++ .uleb128 0x10 ++ .uleb128 0x6 ++ .byte 0x0 ++ .byte 0x0 ++ .uleb128 0x2 ++ .uleb128 0x24 ++ .byte 0x0 ++ .uleb128 0xb ++ .uleb128 0xb ++ .uleb128 0x3e ++ .uleb128 0xb ++ .uleb128 0x3 ++ .uleb128 0xe ++ .byte 0x0 ++ .byte 0x0 ++ .uleb128 0x3 ++ .uleb128 0x24 ++ .byte 0x0 ++ .uleb128 0xb ++ .uleb128 0xb ++ .uleb128 0x3e ++ .uleb128 0xb ++ .uleb128 0x3 ++ .uleb128 0x8 ++ .byte 0x0 ++ .byte 0x0 ++ .uleb128 0x4 ++ .uleb128 0x24 ++ .byte 0x0 ++ .uleb128 0xb ++ .uleb128 0xb ++ .uleb128 0x3e ++ .uleb128 0xb ++ .byte 0x0 ++ .byte 0x0 ++ .uleb128 0x5 ++ .uleb128 0x2e ++ .byte 0x1 ++ .uleb128 0x3f ++ .uleb128 0xc ++ .uleb128 0x3 ++ .uleb128 0xe ++ .uleb128 0x3a ++ .uleb128 0xb ++ .uleb128 0x3b ++ .uleb128 0xb ++ .uleb128 0x27 ++ .uleb128 0xc ++ .uleb128 0x11 ++ .uleb128 0x1 ++ .uleb128 0x12 ++ .uleb128 0x1 ++#if 0 /* FRAMEBASE_MISSING */ ++ .uleb128 0x40 ++ .uleb128 0x6 ++#endif /* FRAMEBASE_MISSING */ ++ .byte 0x0 ++ .byte 0x0 ++ .uleb128 0x6 ++ .uleb128 0x34 ++ .byte 0x0 ++ .uleb128 0x3 ++ .uleb128 0x8 ++ .uleb128 0x3a ++ .uleb128 0xb ++ .uleb128 0x3b ++ .uleb128 0xb ++ .uleb128 0x49 ++ .uleb128 0x13 ++ .uleb128 0x2 ++ .uleb128 0xa ++ .byte 0x0 ++ .byte 0x0 ++ .byte 0x0 ++ .section .debug_pubnames,"",@progbits ++ .long 0x17 ++ .value 0x2 ++ .long .Ldebug_info0 ++ .long 0x98 ++ .long 0x75 ++ .string "func" ++ .long 0x0 ++ .section .debug_aranges,"",@progbits ++ .long 0x1c ++ .value 0x2 ++ .long .Ldebug_info0 ++ .byte 0x4 ++ .byte 0x0 ++ .value 0x0 ++ .value 0x0 ++ .long .Ltext0 ++ .long .Letext0-.Ltext0 ++ .long 0x0 ++ .long 0x0 ++ .section .debug_str,"MS",@progbits,1 ++.LASF7: ++ .string "long long int" ++.LASF0: ++ .string "unsigned int" ++.LASF11: ++ .string "dw2-framebase-missing-func.c" ++.LASF12: ++ .string "gdb-6.8/gdb/testsuite/gdb.dwarf2" ++.LASF4: ++ .string "long unsigned int" ++.LASF8: ++ .string "long long unsigned int" ++.LASF2: ++ .string "unsigned char" ++.LASF9: ++ .string "char" ++.LASF1: ++ .string "long int" ++.LASF3: ++ .string "short unsigned int" ++.LASF5: ++ .string "signed char" ++.LASF10: ++ .string "GNU C 4.3.2 20081007 (Red Hat 4.3.2-6)" ++.LASF13: ++ .string "func" ++.LASF6: ++ .string "short int" ++ .ident "GCC: (GNU) 4.3.2 20081007 (Red Hat 4.3.2-6)" ++ .section .note.GNU-stack,"",@progbits +--- ./gdb/testsuite/gdb.dwarf2/dw2-framebase-missing-main.c 1970-01-01 01:00:00.000000000 +0100 ++++ ./gdb/testsuite/gdb.dwarf2/dw2-framebase-missing-main.c 2008-11-08 22:46:45.000000000 +0100 +@@ -0,0 +1,26 @@ ++/* This testcase is part of GDB, the GNU debugger. ++ ++ Copyright 2008 Free Software Foundation, Inc. ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 3 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program. If not, see . */ ++ ++/* dw2-framebase-missing-func.S */ ++extern void func (void); ++ ++int ++main (void) ++{ ++ func (); ++ return 0; ++} +--- ./gdb/testsuite/gdb.dwarf2/dw2-framebase-missing.exp 1970-01-01 01:00:00.000000000 +0100 ++++ ./gdb/testsuite/gdb.dwarf2/dw2-framebase-missing.exp 2008-11-08 22:46:45.000000000 +0100 +@@ -0,0 +1,83 @@ ++# Copyright 2008 Free Software Foundation, Inc. ++ ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program; if not, write to the Free Software ++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ ++# Minimal DWARF-2 unit test ++ ++# This test can only be run on i386/x86_64 targets which support DWARF-2. ++# For now pick a sampling of likely targets. ++if {(![istarget *-*-linux*] ++ && ![istarget *-*-gnu*] ++ && ![istarget *-*-elf*] ++ && ![istarget *-*-openbsd*]) ++ || (![istarget "i?86-*-*"] && ![istarget "x86_64-*-*"])} { ++ return 0 ++} ++ ++set testfile "dw2-framebase-missing" ++set srcfuncfile ${testfile}-func.S ++set srcmainfile ${testfile}-main.c ++set binfile ${objdir}/${subdir}/${testfile} ++ ++remote_exec build "rm -f ${binfile}" ++ ++# get the value of gcc_compiled ++if [get_compiler_info ${binfile}] { ++ return -1 ++} ++ ++# This test can only be run on gcc as we use additional_flags=FIXME ++if {$gcc_compiled == 0} { ++ return 0 ++} ++ ++if { [gdb_compile "${srcdir}/${subdir}/${srcmainfile} ${srcdir}/${subdir}/${srcfuncfile}" \ ++ "${binfile}" executable [list debug additional_flags=-m32]] != "" } { ++ return -1 ++} ++ ++gdb_exit ++gdb_start ++gdb_reinitialize_dir $srcdir/$subdir ++gdb_load ${binfile} ++ ++gdb_run_cmd ++ ++gdb_test "" "Program received signal SIGABRT, Aborted..*" "Enter abort()" ++ ++# Incorrect: ++# #0 0x00110430 in __kernel_vsyscall () ++# No symbol table info available. ++# #1 0x003d44c0 in raise () from /lib/libc.so.6 ++# No symbol table info available. ++# #2 0x003d5e88 in abort () from /lib/libc.so.6 ++# No symbol table info available. ++# #3 0x44f10437 in func () at dw2-framebase-missing.c:8 ++# i = Could not find the frame base for "func". ++ ++# Correct: ++# #0 0x00110430 in __kernel_vsyscall () ++# No symbol table info available. ++# #1 0x003d44c0 in raise () from /lib/libc.so.6 ++# No symbol table info available. ++# #2 0x003d5e88 in abort () from /lib/libc.so.6 ++# No symbol table info available. ++# #3 0x4ae36437 in func () at dw2-framebase-missing.c:8 ++# i = Could not find the frame base for "func". ++# #4 0x0804851a in main () at ../../../gdb/testsuite/gdb.dwarf2/dw2-framebase-missing-main.c:24 ++# No locals. ++ ++# `abort' can get expressed as `*__GI_abort'. ++gdb_test "bt full" "in \[^ \]*abort \\(.*in func \\(.*\ti = Could not find the frame base for \"func\".\r\n.*in main \\(.*" "Backtrace after abort()" --- ./gdb/testsuite/gdb.dwarf2/dw2-stripped.c 1970-01-01 01:00:00.000000000 +0100 -+++ ./gdb/testsuite/gdb.dwarf2/dw2-stripped.c 2008-11-06 20:51:35.000000000 +0100 ++++ ./gdb/testsuite/gdb.dwarf2/dw2-stripped.c 2008-11-08 22:39:57.000000000 +0100 @@ -0,0 +1,42 @@ +/* This testcase is part of GDB, the GNU debugger. + @@ -2311,7 +2850,7 @@ fortran-dynamic-arrays-HEAD-j.patch + return 0; +} --- ./gdb/testsuite/gdb.dwarf2/dw2-stripped.exp 1970-01-01 01:00:00.000000000 +0100 -+++ ./gdb/testsuite/gdb.dwarf2/dw2-stripped.exp 2008-11-06 20:51:35.000000000 +0100 ++++ ./gdb/testsuite/gdb.dwarf2/dw2-stripped.exp 2008-11-08 22:39:57.000000000 +0100 @@ -0,0 +1,79 @@ +# Copyright 2006 Free Software Foundation, Inc. + @@ -2393,7 +2932,7 @@ fortran-dynamic-arrays-HEAD-j.patch + "func.* \\(.*\\) at .*" \ + "step" --- ./gdb/testsuite/gdb.fortran/dynamic.exp 1970-01-01 01:00:00.000000000 +0100 -+++ ./gdb/testsuite/gdb.fortran/dynamic.exp 2008-11-06 20:51:03.000000000 +0100 ++++ ./gdb/testsuite/gdb.fortran/dynamic.exp 2008-11-08 22:39:57.000000000 +0100 @@ -0,0 +1,141 @@ +# Copyright 2007 Free Software Foundation, Inc. + @@ -2537,7 +3076,7 @@ fortran-dynamic-arrays-HEAD-j.patch +# maps to foo::vary(1,3) +gdb_test "p vart(2,9)" "\\$\[0-9\]* = 10" --- ./gdb/testsuite/gdb.fortran/dynamic.f90 1970-01-01 01:00:00.000000000 +0100 -+++ ./gdb/testsuite/gdb.fortran/dynamic.f90 2008-11-06 20:51:03.000000000 +0100 ++++ ./gdb/testsuite/gdb.fortran/dynamic.f90 2008-11-08 22:39:57.000000000 +0100 @@ -0,0 +1,97 @@ +! Copyright 2007 Free Software Foundation, Inc. +! @@ -2637,7 +3176,7 @@ fortran-dynamic-arrays-HEAD-j.patch + if (x (3, 1) .ne. 10) call abort +end --- ./gdb/testsuite/gdb.fortran/string.exp 1970-01-01 01:00:00.000000000 +0100 -+++ ./gdb/testsuite/gdb.fortran/string.exp 2008-11-06 20:51:03.000000000 +0100 ++++ ./gdb/testsuite/gdb.fortran/string.exp 2008-11-08 22:39:57.000000000 +0100 @@ -0,0 +1,59 @@ +# Copyright 2008 Free Software Foundation, Inc. + @@ -2699,7 +3238,7 @@ fortran-dynamic-arrays-HEAD-j.patch +gdb_test "p e" "\\$\[0-9\]* = 'e '" "p e re-set" +gdb_test "p f" "\\$\[0-9\]* = \\(\\( 'f ', 'f ', 'f ', 'f ', 'f ', 'f ', 'f '\\) \\( 'f2 ', 'f ', 'f ', 'f ', 'f ', 'f ', 'f '\\) \\( 'f ', 'f ', 'f ', 'f ', 'f ', 'f ', 'f '\\) \\)" "p *f re-set" --- ./gdb/testsuite/gdb.fortran/string.f90 1970-01-01 01:00:00.000000000 +0100 -+++ ./gdb/testsuite/gdb.fortran/string.f90 2008-11-06 20:51:03.000000000 +0100 ++++ ./gdb/testsuite/gdb.fortran/string.f90 2008-11-08 22:39:57.000000000 +0100 @@ -0,0 +1,37 @@ +! Copyright 2008 Free Software Foundation, Inc. +! @@ -2738,8 +3277,8 @@ fortran-dynamic-arrays-HEAD-j.patch + h = 'h' + call foo (g, h) +end ---- ./gdb/typeprint.c 2008-11-06 20:50:14.000000000 +0100 -+++ ./gdb/typeprint.c 2008-11-06 20:51:35.000000000 +0100 +--- ./gdb/typeprint.c 2008-11-08 22:46:06.000000000 +0100 ++++ ./gdb/typeprint.c 2008-11-08 22:39:57.000000000 +0100 @@ -33,6 +33,7 @@ #include "cp-abi.h" #include "typeprint.h" @@ -2793,8 +3332,8 @@ fortran-dynamic-arrays-HEAD-j.patch } static void ---- ./gdb/valarith.c 2008-11-06 20:50:14.000000000 +0100 -+++ ./gdb/valarith.c 2008-11-06 20:51:03.000000000 +0100 +--- ./gdb/valarith.c 2008-11-08 22:46:06.000000000 +0100 ++++ ./gdb/valarith.c 2008-11-08 22:39:57.000000000 +0100 @@ -39,7 +39,6 @@ #define TRUNCATION_TOWARDS_ZERO ((-5 / 2) == -2) #endif @@ -2930,8 +3469,8 @@ fortran-dynamic-arrays-HEAD-j.patch return v; } ---- ./gdb/valops.c 2008-11-06 20:50:14.000000000 +0100 -+++ ./gdb/valops.c 2008-11-06 20:51:35.000000000 +0100 +--- ./gdb/valops.c 2008-11-08 22:46:06.000000000 +0100 ++++ ./gdb/valops.c 2008-11-08 22:39:57.000000000 +0100 @@ -37,6 +37,7 @@ #include "dictionary.h" #include "cp-support.h" @@ -3036,8 +3575,8 @@ fortran-dynamic-arrays-HEAD-j.patch } /* Given a value which is a function, return a value which is a pointer ---- ./gdb/value.h 2008-11-06 20:50:14.000000000 +0100 -+++ ./gdb/value.h 2008-11-06 20:51:03.000000000 +0100 +--- ./gdb/value.h 2008-11-08 22:46:06.000000000 +0100 ++++ ./gdb/value.h 2008-11-08 22:46:45.000000000 +0100 @@ -284,6 +284,10 @@ extern struct value *value_from_decfloat const gdb_byte *decbytes); extern struct value *value_from_string (char *string); @@ -3049,6 +3588,19 @@ fortran-dynamic-arrays-HEAD-j.patch extern struct value *value_at (struct type *type, CORE_ADDR addr); extern struct value *value_at_lazy (struct type *type, CORE_ADDR addr); +@@ -522,9 +526,9 @@ extern int common_val_print (struct valu + extern int val_print_string (CORE_ADDR addr, int len, int width, + struct ui_file *stream); + +-extern void print_variable_value (struct symbol *var, +- struct frame_info *frame, +- struct ui_file *stream); ++extern void print_variable_value_nl (struct symbol *var, ++ struct frame_info *frame, ++ struct ui_file *stream); + + extern int check_field (struct value *, const char *); + @@ -554,4 +558,7 @@ extern struct value *value_allocate_spac extern struct value *value_of_local (const char *name, int complain); diff --git a/gdb-6.8-bz466901-backtrace-full-prelinked.patch b/gdb-6.8-bz466901-backtrace-full-prelinked.patch index 7cea4e9..de008a7 100644 --- a/gdb-6.8-bz466901-backtrace-full-prelinked.patch +++ b/gdb-6.8-bz466901-backtrace-full-prelinked.patch @@ -20,7 +20,7 @@ Fix resolving of variables at locations lists in prelinked libs (BZ 466901). --- /dev/null 2008-11-06 15:02:28.406299691 +0100 +++ gdb-6.8/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked.exp 2008-11-06 23:11:02.000000000 +0100 @@ -0,0 +1,102 @@ -+# Copyright 2006 Free Software Foundation, Inc. ++# Copyright 2008 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by diff --git a/gdb-6.8-bz466901-backtrace-never-aborts.patch b/gdb-6.8-bz466901-backtrace-never-aborts.patch deleted file mode 100644 index 895669c..0000000 --- a/gdb-6.8-bz466901-backtrace-never-aborts.patch +++ /dev/null @@ -1,93 +0,0 @@ -# Never terminate `bt full' on a problem of variable resolving (BZ 466901). - ---- ./gdb/f-valprint.c 2008-11-06 22:05:16.000000000 +0100 -+++ ./gdb/f-valprint.c 2008-11-06 22:09:10.000000000 +0100 -@@ -611,8 +611,7 @@ info_common_command (char *comname, int - while (entry != NULL) - { - printf_filtered ("%s = ", DEPRECATED_SYMBOL_NAME (entry->symbol)); -- print_variable_value (entry->symbol, fi, gdb_stdout); -- printf_filtered ("\n"); -+ print_variable_value_nl (entry->symbol, fi, gdb_stdout); - entry = entry->next; - } - } ---- ./gdb/printcmd.c 2008-11-06 22:05:16.000000000 +0100 -+++ ./gdb/printcmd.c 2008-11-06 22:06:55.000000000 +0100 -@@ -42,6 +42,7 @@ - #include "block.h" - #include "disasm.h" - #include "dfp.h" -+#include "exceptions.h" - - #ifdef TUI - #include "tui/tui.h" /* For tui_active et.al. */ -@@ -1721,15 +1722,26 @@ disable_display_command (char *args, int - - - /* Print the value in stack frame FRAME of a variable specified by a -- struct symbol. */ -+ struct symbol. Printed value gets terminated by a newline. */ - - void --print_variable_value (struct symbol *var, struct frame_info *frame, -- struct ui_file *stream) -+print_variable_value_nl (struct symbol *var, struct frame_info *frame, -+ struct ui_file *stream) - { -- struct value *val = read_var_value (var, frame); -+ struct value *val = NULL; /* A false GCC warning. */ -+ struct gdb_exception e; - -- value_print (val, stream, 0, Val_pretty_default); -+ TRY_CATCH (e, RETURN_MASK_ERROR) -+ { -+ val = read_var_value (var, frame); -+ } -+ if (e.reason < 0) -+ exception_print (stream, e); -+ else -+ { -+ value_print (val, stream, 0, Val_pretty_default); -+ fprintf_filtered (stream, "\n"); -+ } - } - - static void ---- ./gdb/stack.c 2008-11-06 22:05:16.000000000 +0100 -+++ ./gdb/stack.c 2008-11-06 22:08:45.000000000 +0100 -@@ -1412,8 +1412,7 @@ print_block_frame_locals (struct block * - fputs_filtered ("\t", stream); - fputs_filtered (SYMBOL_PRINT_NAME (sym), stream); - fputs_filtered (" = ", stream); -- print_variable_value (sym, frame, stream); -- fprintf_filtered (stream, "\n"); -+ print_variable_value_nl (sym, frame, stream); - break; - - default: -@@ -1633,8 +1632,7 @@ print_frame_arg_vars (struct frame_info - - sym2 = lookup_symbol (DEPRECATED_SYMBOL_NAME (sym), - b, VAR_DOMAIN, NULL, NULL); -- print_variable_value (sym2, frame, stream); -- fprintf_filtered (stream, "\n"); -+ print_variable_value_nl (sym2, frame, stream); - break; - - default: ---- ./gdb/value.h 2008-11-06 22:05:16.000000000 +0100 -+++ ./gdb/value.h 2008-11-06 22:08:07.000000000 +0100 -@@ -526,9 +526,9 @@ extern int common_val_print (struct valu - extern int val_print_string (CORE_ADDR addr, int len, int width, - struct ui_file *stream); - --extern void print_variable_value (struct symbol *var, -- struct frame_info *frame, -- struct ui_file *stream); -+extern void print_variable_value_nl (struct symbol *var, -+ struct frame_info *frame, -+ struct ui_file *stream); - - extern int check_field (struct value *, const char *); - diff --git a/gdb.spec b/gdb.spec index 9c8f5aa..9c682d2 100644 --- a/gdb.spec +++ b/gdb.spec @@ -13,7 +13,7 @@ Version: 6.8 # The release always contains a leading reserved number, start it at 1. # `upstream' is not a part of `name' to stay fully rpm dependencies compatible for the testing. -Release: 28%{?_with_upstream:.upstream}%{?dist} +Release: 29%{?_with_upstream:.upstream}%{?dist} License: GPLv3+ Group: Development/Debuggers @@ -422,9 +422,6 @@ Patch342: gdb-6.8-ia64-breakpoint-restoration.patch # Test the watchpoints conditionals works. Patch343: gdb-6.8-watchpoint-conditionals-test.patch -# Never terminate `bt full' on a problem of variable resolving (for BZ 466901). -Patch347: gdb-6.8-bz466901-backtrace-never-aborts.patch - # Fix resolving of variables at locations lists in prelinked libs (BZ 466901). Patch348: gdb-6.8-bz466901-backtrace-full-prelinked.patch @@ -631,7 +628,6 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c %patch338 -p1 %patch342 -p1 %patch343 -p1 -%patch347 -p1 %patch348 -p1 %patch124 -p1 @@ -896,6 +892,10 @@ fi %endif %changelog +* Sun Nov 9 2008 Jan Kratochvil - 6.8-29 +- Fix more the variable-length-arrays support (BZ 468266, feature BZ 377541). +- Integrate the `bt full' protection (for BZ 466901) into the VLA patch. + * Thu Nov 6 2008 Jan Kratochvil - 6.8-28 - Fix the "never terminate `bt full'" patch false GCC warning / build error.