Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Andrew Burgess <andrew.burgess@embecosm.com>
To: gdb-patches@sourceware.org
Cc: Andrew Burgess <andrew.burgess@embecosm.com>
Subject: [PATCH 2/2] gdb: Move get_frame_language from stack.c to frame.c.
Date: Tue, 04 Aug 2015 15:40:00 -0000	[thread overview]
Message-ID: <568a4c1273713e14f691586c2d32bdbd3be610a1.1438699523.git.andrew.burgess@embecosm.com> (raw)
In-Reply-To: <cover.1438699523.git.andrew.burgess@embecosm.com>
In-Reply-To: <cover.1438699523.git.andrew.burgess@embecosm.com>

The get_frame_language feels like it would be more at home in frame.c
rather than in stack.c, while the declaration, that is currently in
language.h can be moved into frame.h to match.

A couple of new includes are added, but otherwise no substantial change
here.

gdb/ChangeLog:

	* stack.c (get_frame_language): Moved ...
	* frame.c (get_frame_language): ... to here.
	* language.h (get_frame_language): Declaration moved ...
	* frame.h (get_frame_language): ... to here.
	(enum language): Add declaration.
	* language.c: Add frame.h include.
	* top.c: Add frame.h include.
---
 gdb/ChangeLog  | 10 ++++++++++
 gdb/frame.c    | 42 ++++++++++++++++++++++++++++++++++++++++++
 gdb/frame.h    |  6 ++++++
 gdb/language.c |  1 +
 gdb/language.h |  2 --
 gdb/stack.c    | 42 ------------------------------------------
 gdb/top.c      |  1 +
 7 files changed, 60 insertions(+), 44 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 223d2e5..f383dd7 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,15 @@
 2015-08-04  Andrew Burgess  <andrew.burgess@embecosm.com>
 
+	* stack.c (get_frame_language): Moved ...
+	* frame.c (get_frame_language): ... to here.
+	* language.h (get_frame_language): Declaration moved ...
+	* frame.h (get_frame_language): ... to here.
+	(enum language): Add declaration.
+	* language.c: Add frame.h include.
+	* top.c: Add frame.h include.
+
+2015-08-04  Andrew Burgess  <andrew.burgess@embecosm.com>
+
 	* language.c (show_language_command): Find selected frame before
 	asking for the language of that frame.
 	(set_language_command): Likewise.
diff --git a/gdb/frame.c b/gdb/frame.c
index da5bfb9..f05f739 100644
--- a/gdb/frame.c
+++ b/gdb/frame.c
@@ -2571,6 +2571,48 @@ frame_unwind_caller_arch (struct frame_info *next_frame)
   return frame_unwind_arch (skip_artificial_frames (next_frame));
 }
 
+/* Gets the language of FRAME.  */
+
+enum language
+get_frame_language (struct frame_info *frame)
+{
+  CORE_ADDR pc = 0;
+  int pc_p = 0;
+
+  gdb_assert (frame!= NULL);
+
+    /* We determine the current frame language by looking up its
+       associated symtab.  To retrieve this symtab, we use the frame
+       PC.  However we cannot use the frame PC as is, because it
+       usually points to the instruction following the "call", which
+       is sometimes the first instruction of another function.  So
+       we rely on get_frame_address_in_block(), it provides us with
+       a PC that is guaranteed to be inside the frame's code
+       block.  */
+
+  TRY
+    {
+      pc = get_frame_address_in_block (frame);
+      pc_p = 1;
+    }
+  CATCH (ex, RETURN_MASK_ERROR)
+    {
+      if (ex.error != NOT_AVAILABLE_ERROR)
+	throw_exception (ex);
+    }
+  END_CATCH
+
+  if (pc_p)
+    {
+      struct compunit_symtab *cust = find_pc_compunit_symtab (pc);
+
+      if (cust != NULL)
+	return compunit_language (cust);
+    }
+
+  return language_unknown;
+}
+
 /* Stack pointer methods.  */
 
 CORE_ADDR
diff --git a/gdb/frame.h b/gdb/frame.h
index be64c57..6c39b86 100644
--- a/gdb/frame.h
+++ b/gdb/frame.h
@@ -814,4 +814,10 @@ extern struct frame_info *create_new_frame (CORE_ADDR base, CORE_ADDR pc);
 extern int frame_unwinder_is (struct frame_info *fi,
 			      const struct frame_unwind *unwinder);
 
+/* Return the language of FRAME.  */
+
+enum language;
+extern enum language get_frame_language (struct frame_info *frame);
+
+
 #endif /* !defined (FRAME_H)  */
diff --git a/gdb/language.c b/gdb/language.c
index 989a8da..b130f50 100644
--- a/gdb/language.c
+++ b/gdb/language.c
@@ -43,6 +43,7 @@
 #include "demangle.h"
 #include "symfile.h"
 #include "cp-support.h"
+#include "frame.h"
 
 extern void _initialize_language (void);
 
diff --git a/gdb/language.h b/gdb/language.h
index 8782ef0..2265afc 100644
--- a/gdb/language.h
+++ b/gdb/language.h
@@ -544,8 +544,6 @@ extern const char *language_str (enum language);
 
 extern void add_language (const struct language_defn *);
 
-extern enum language get_frame_language (struct frame_info *frame);	/* In stack.c */
-
 /* Check for a language-specific trampoline.  */
 
 extern CORE_ADDR skip_language_trampoline (struct frame_info *, CORE_ADDR pc);
diff --git a/gdb/stack.c b/gdb/stack.c
index 31a723d..ae53ec8 100644
--- a/gdb/stack.c
+++ b/gdb/stack.c
@@ -2559,48 +2559,6 @@ func_command (char *arg, int from_tty)
   else if (frame != get_selected_frame (NULL))
     select_and_print_frame (frame);
 }
-
-/* Gets the language of FRAME.  */
-
-enum language
-get_frame_language (struct frame_info *frame)
-{
-  CORE_ADDR pc = 0;
-  int pc_p = 0;
-
-  gdb_assert (frame!= NULL);
-
-    /* We determine the current frame language by looking up its
-       associated symtab.  To retrieve this symtab, we use the frame
-       PC.  However we cannot use the frame PC as is, because it
-       usually points to the instruction following the "call", which
-       is sometimes the first instruction of another function.  So
-       we rely on get_frame_address_in_block(), it provides us with
-       a PC that is guaranteed to be inside the frame's code
-       block.  */
-
-  TRY
-    {
-      pc = get_frame_address_in_block (frame);
-      pc_p = 1;
-    }
-  CATCH (ex, RETURN_MASK_ERROR)
-    {
-      if (ex.error != NOT_AVAILABLE_ERROR)
-	throw_exception (ex);
-    }
-  END_CATCH
-
-  if (pc_p)
-    {
-      struct compunit_symtab *cust = find_pc_compunit_symtab (pc);
-
-      if (cust != NULL)
-	return compunit_language (cust);
-    }
-
-  return language_unknown;
-}
 \f
 
 /* Provide a prototype to silence -Wmissing-prototypes.  */
diff --git a/gdb/top.c b/gdb/top.c
index d17891e..364ca88 100644
--- a/gdb/top.c
+++ b/gdb/top.c
@@ -49,6 +49,7 @@
 #include "observer.h"
 #include "maint.h"
 #include "filenames.h"
+#include "frame.h"
 
 /* readline include files.  */
 #include "readline/readline.h"
-- 
2.4.0


  parent reply	other threads:[~2015-08-04 15:40 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-04 15:40 [PATCH 0/2] Make get_frame_langauge take a frame argument Andrew Burgess
2015-08-04 15:40 ` [PATCH 1/2] gdb: get_frame_language now takes a frame parameter Andrew Burgess
2015-08-04 16:02   ` Pedro Alves
2015-08-07  8:56     ` Andrew Burgess
2015-08-07  9:45       ` Pedro Alves
2015-08-04 15:40 ` Andrew Burgess [this message]
2015-08-04 16:02   ` [PATCH 2/2] gdb: Move get_frame_language from stack.c to frame.c Pedro Alves
2015-08-07  8:57     ` Andrew Burgess
2015-08-07  9:45       ` Pedro Alves

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=568a4c1273713e14f691586c2d32bdbd3be610a1.1438699523.git.andrew.burgess@embecosm.com \
    --to=andrew.burgess@embecosm.com \
    --cc=gdb-patches@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