This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: CRIS port; frame cleanup crash


After a long overdue update of my gdb cvs tree, I found that something broke late March/early April. I don't quite understand what goes on, but it seems to happen the first time a frame allocated by deprecated_frame_xmalloc_with_cleanup is freed by do_cleanups (which happens in cris_skip_prologue_main). gdb segfaults on a call to free with a pointer to that frame. The arm-tdep.c file contains the same construct of:

  old_chain = make_cleanup (null_cleanup, NULL);
  frame = deprecated_frame_xmalloc_with_cleanup (..., ...)
  <do something with frame>
  do_cleanups (old_chain);

Er, that points at a bug:


struct frame_info *
deprecated_frame_xmalloc (void)
{
  struct frame_info *frame = FRAME_OBSTACK_ZALLOC (struct frame_info);
  frame->this_id.p = 1;
  return frame;
}

shouldn't be allocated from the frame obstack pool. I'll commit a fix.

However, poking around in all the stuff that has been deprecated, I'm sort of at a loss as to where to start. Replacing the deprecated function/macros one at a time doesn't look feasible, since a lot of functionality is replaced by the same functions (push_dummy_code/push_dummy_call for example). Is there a preferred way of doing it, or is it just a matter of diving right into it? I'd prefer to do it in a structured way to be able to catch when things start to break. I see there are a couple of targets that have made the transition (d10v and m68hc11 for example), so that should provide some help.

ia64, Arm, ... Some people are diving straight in, some are atacking the edges - updating any deprecated methods first.


Andrew



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]