public inbox for archer-commits@sourceware.org
help / color / mirror / Atom feed
From: rmoseley@sourceware.org
To: archer-commits@sourceware.org
Subject: [SCM]  archer-rmoseley-F9-patch-merge: Add final linking fix, have a couple compile erros to go after I comment them back in.
Date: Wed, 19 Nov 2008 22:37:00 -0000	[thread overview]
Message-ID: <20081119223716.24286.qmail@sourceware.org> (raw)

The branch, archer-rmoseley-F9-patch-merge has been updated
       via  eecf8a1bffed2ed860ea995647afdc71982d508f (commit)
      from  507be30a312572fcbfb751d201aa112c2fabcf60 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email.

- Log -----------------------------------------------------------------
commit eecf8a1bffed2ed860ea995647afdc71982d508f
Author: Rick Moseley <rmoseley@localhost.localdomain>
Date:   Wed Nov 19 16:36:23 2008 -0600

    Add final linking fix, have a couple compile erros to go after I comment them back in.

-----------------------------------------------------------------------

Summary of changes:
 gdb/frame.c |   60 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 60 insertions(+), 0 deletions(-)

First 500 lines of diff:
diff --git a/gdb/frame.c b/gdb/frame.c
index 0215966..f48f1aa 100644
--- a/gdb/frame.c
+++ b/gdb/frame.c
@@ -573,6 +573,24 @@ frame_pc_unwind (struct frame_info *this_frame)
 }
 
 CORE_ADDR
+frame_func_unwind (struct frame_info *fi, enum frame_type this_type)
+{
+  if (!fi->prev_func.p)
+    {
+      /* Make certain that this, and not the adjacent, function is
+         found.  */
+      CORE_ADDR addr_in_block = frame_unwind_address_in_block (fi, this_type);
+      fi->prev_func.p = 1;
+      fi->prev_func.addr = get_pc_function_start (addr_in_block);
+      if (frame_debug)
+	fprintf_unfiltered (gdb_stdlog,
+			    "{ frame_func_unwind (fi=%d) -> 0x%s }\n",
+			    fi->level, paddr_nz (fi->prev_func.addr));
+    }
+  return fi->prev_func.addr;
+}
+
+CORE_ADDR
 get_frame_func (struct frame_info *this_frame)
 {
   struct frame_info *next_frame = this_frame->next;
@@ -1686,6 +1704,48 @@ get_frame_pc (struct frame_info *frame)
   return frame_pc_unwind (frame->next);
 }
 
+/* Return an address that falls within NEXT_FRAME's caller's code
+   block, assuming that the caller is a THIS_TYPE frame.  */
+
+CORE_ADDR
+frame_unwind_address_in_block (struct frame_info *next_frame,
+			       enum frame_type this_type)
+{
+  /* A draft address.  */
+  CORE_ADDR pc = frame_pc_unwind (next_frame);
+
+  /* If NEXT_FRAME was called by a signal frame or dummy frame, then
+     we should not adjust the unwound PC.  These frames may not call
+     their next frame in the normal way; the operating system or GDB
+     may have pushed their resume address manually onto the stack, so
+     it may be the very first instruction.  Even if the resume address
+     was not manually pushed, they expect to be returned to.  */
+  if (this_type != NORMAL_FRAME && this_type != INLINE_FRAME)
+    return pc;
+
+  /* If NEXT_FRAME was inlined into the current frame, we are really
+     interested in an even younger (newer) frame - the point where
+     execution left THIS function.  */
+  while (get_frame_type (next_frame) == INLINE_FRAME)
+    next_frame = next_frame->next;
+
+  /* If THIS frame is not inner most (i.e., NEXT isn't the sentinel),
+     and NEXT is `normal' (i.e., not a sigtramp, dummy, ....) THIS
+     frame's PC ends up pointing at the instruction fallowing the
+     "call".  Adjust that PC value so that it falls on the call
+     instruction (which, hopefully, falls within THIS frame's code
+     block).  So far it's proved to be a very good approximation.  See
+     get_frame_type() for why ->type can't be used.
+
+     This is correct even if NEXT_FRAME describes an inlined function.
+     Inlined functions always live between two normal frames, and are
+     themselves normal.  */
+  if (next_frame->level >= 0
+      && get_frame_type (next_frame) == NORMAL_FRAME)
+    --pc;
+  return pc;
+}
+
 /* Return an address that falls within THIS_FRAME's code block.  */
 
 CORE_ADDR


hooks/post-receive
--
Repository for Project Archer.


                 reply	other threads:[~2008-11-19 22:37 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20081119223716.24286.qmail@sourceware.org \
    --to=rmoseley@sourceware.org \
    --cc=archer-commits@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).