Architectures which use RETURN_VALUE_STRUCT_CONVENTION will have a
NULL return value after executing a finish command. See get_return_value()
in infcmd.c.
This patch avoids an eventual SIGSEV (caused by attempting to
derefrence a NULL pointer) by adding a suitable test to
finish_command_fsm_should_stop().
I encountered this problem while testing msp430:
(gdb) PASS: gdb.base/structs.exp: zed L<n> for finish; return 1 structs-tc
finish
Run till exit from #0 fun1 () at /ironwood1/sourceware-git/msp430-elf/../binutils-gdb/gdb/testsuite/gdb.base/structs.c:125
ERROR: Process no longer exists
gdb/ChangeLog:
* infcmd.c (finish_command_fsm_should_stop): Don't attempt to
record a NULL value.
+2015-09-29 Kevin Buettner <kevinb@redhat.com>
+
+ * infcmd.c (finish_command_fsm_should_stop): Don't attempt to
+ record a NULL value.
+
2015-09-29 Kevin Buettner <kevinb@redhat.com>
* msp430-tdep.c (msp430_push_dummy_call): Treat reference, struct,
func = read_var_value (f->function, NULL, get_current_frame ());
rv->value = get_return_value (func, rv->type);
- rv->value_history_index = record_latest_value (rv->value);
+ if (rv->value != NULL)
+ rv->value_history_index = record_latest_value (rv->value);
}
}
else if (tp->control.stop_step)