- table->list = OBSTACK_ZALLOC (obstack, struct frame_unwind_table_entry);
- table->list->unwinder = &dummy_frame_unwind;
- table->list->next = OBSTACK_ZALLOC (obstack,
- struct frame_unwind_table_entry);
- table->list->next->unwinder = &inline_frame_unwind;
+ struct frame_unwind_table_entry **link = &table->list;
+
+ link = add_unwinder (obstack, &dummy_frame_unwind, link);
+ /* The DWARF tailcall sniffer must come before the inline sniffer.
+ Otherwise, we can end up in a situation where a DWARF frame finds
+ tailcall information, but then the inline sniffer claims a frame
+ before the tailcall sniffer, resulting in confusion. This is
+ safe to do always because the tailcall sniffer can only ever be
+ activated if the newer frame was created using the DWARF
+ unwinder, and it also found tailcall information. */
+ link = add_unwinder (obstack, &dwarf2_tailcall_frame_unwind, link);
+ link = add_unwinder (obstack, &inline_frame_unwind, link);
+