diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 45d8ef906f..28173b0bb5 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,7 @@ +2016-01-21 Marcin Koƛcielnicki + + * ax-gdb.c (gen_traced_pop): Use gen_fetch for string collection. + 2016-01-21 Andrew Burgess * disasm.c (maybe_add_dis_line_entry): Rename to... diff --git a/gdb/ax-gdb.c b/gdb/ax-gdb.c index dd6eee6e6e..7c6cb6481f 100644 --- a/gdb/ax-gdb.c +++ b/gdb/ax-gdb.c @@ -394,26 +394,25 @@ gen_traced_pop (struct gdbarch *gdbarch, case axs_lvalue_memory: { - if (string_trace) - ax_simple (ax, aop_dup); - /* Initialize the TYPE_LENGTH if it is a typedef. */ check_typedef (value->type); - /* There's no point in trying to use a trace_quick bytecode - here, since "trace_quick SIZE pop" is three bytes, whereas - "const8 SIZE trace" is also three bytes, does the same - thing, and the simplest code which generates that will also - work correctly for objects with large sizes. */ - ax_const_l (ax, TYPE_LENGTH (value->type)); - ax_simple (ax, aop_trace); - if (string_trace) { - ax_simple (ax, aop_ref32); + gen_fetch (ax, value->type); ax_const_l (ax, ax->trace_string); ax_simple (ax, aop_tracenz); } + else + { + /* There's no point in trying to use a trace_quick bytecode + here, since "trace_quick SIZE pop" is three bytes, whereas + "const8 SIZE trace" is also three bytes, does the same + thing, and the simplest code which generates that will also + work correctly for objects with large sizes. */ + ax_const_l (ax, TYPE_LENGTH (value->type)); + ax_simple (ax, aop_trace); + } } break;