2005-04-01 Michael Snyder <msnyder@redhat.com>

* dummy-frame.c (dummy_frame_sniffer): Optimization: don't bother
	computing this_id if there are no dummy frames on the stack.
This commit is contained in:
Michael Snyder 2005-04-02 00:45:52 +00:00
parent f6fe78d68c
commit 0c98cc2b81
2 changed files with 26 additions and 17 deletions

View File

@ -1,5 +1,8 @@
2005-04-01 Michael Snyder <msnyder@redhat.com> 2005-04-01 Michael Snyder <msnyder@redhat.com>
* dummy-frame.c (dummy_frame_sniffer): Optimization: don't bother
computing this_id if there are no dummy frames on the stack.
* mn10300-tdep.c (mn10300_frame_unwind_cache): Use * mn10300-tdep.c (mn10300_frame_unwind_cache): Use
find_partial_func instead of unwind_pc to identify frame. find_partial_func instead of unwind_pc to identify frame.
(mn10300_push_dummy_call): Handle struct args, struct_return. (mn10300_push_dummy_call): Handle struct args, struct_return.

View File

@ -137,25 +137,31 @@ dummy_frame_sniffer (const struct frame_unwind *self,
entry point, or some random address on the stack. Trying to use entry point, or some random address on the stack. Trying to use
that PC to apply standard frame ID unwind techniques is just that PC to apply standard frame ID unwind techniques is just
asking for trouble. */ asking for trouble. */
/* Use an architecture specific method to extract the prev's dummy
ID from the next frame. Note that this method uses /* Don't bother unles there is at least one dummy frame. */
frame_register_unwind to obtain the register values needed to if (dummy_frame_stack != NULL)
determine the dummy frame's ID. */
this_id = gdbarch_unwind_dummy_id (get_frame_arch (next_frame), next_frame);
/* Use that ID to find the corresponding cache entry. */
for (dummyframe = dummy_frame_stack;
dummyframe != NULL;
dummyframe = dummyframe->next)
{ {
if (frame_id_eq (dummyframe->id, this_id)) /* Use an architecture specific method to extract the prev's
dummy ID from the next frame. Note that this method uses
frame_register_unwind to obtain the register values needed to
determine the dummy frame's ID. */
this_id = gdbarch_unwind_dummy_id (get_frame_arch (next_frame),
next_frame);
/* Use that ID to find the corresponding cache entry. */
for (dummyframe = dummy_frame_stack;
dummyframe != NULL;
dummyframe = dummyframe->next)
{ {
struct dummy_frame_cache *cache; if (frame_id_eq (dummyframe->id, this_id))
cache = FRAME_OBSTACK_ZALLOC (struct dummy_frame_cache); {
cache->prev_regcache = dummyframe->regcache; struct dummy_frame_cache *cache;
cache->this_id = this_id; cache = FRAME_OBSTACK_ZALLOC (struct dummy_frame_cache);
(*this_prologue_cache) = cache; cache->prev_regcache = dummyframe->regcache;
return 1; cache->this_id = this_id;
(*this_prologue_cache) = cache;
return 1;
}
} }
} }
return 0; return 0;