gdb: Move get_frame_language from stack.c to frame.c.
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 to frame.h. * frame.h: Add language.h include, for language enum. (get_frame_language): Declaration moved from language.h. * language.c: Add frame.h include. * top.c: Add frame.h include. * symtab.h (struct obj_section): Declare. (struct cmd_list_element): Declare.
This commit is contained in:
parent
7ff38b1c89
commit
060967202b
8 changed files with 65 additions and 44 deletions
|
@ -1,3 +1,15 @@
|
||||||
|
2015-08-07 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 to frame.h.
|
||||||
|
* frame.h: Add language.h include, for language enum.
|
||||||
|
(get_frame_language): Declaration moved from language.h.
|
||||||
|
* language.c: Add frame.h include.
|
||||||
|
* top.c: Add frame.h include.
|
||||||
|
* symtab.h (struct obj_section): Declare.
|
||||||
|
(struct cmd_list_element): Declare.
|
||||||
|
|
||||||
2015-08-07 Andrew Burgess <andrew.burgess@embecosm.com>
|
2015-08-07 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||||
|
|
||||||
* language.c (show_language_command): Find selected frame before
|
* language.c (show_language_command): Find selected frame before
|
||||||
|
|
42
gdb/frame.c
42
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));
|
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. */
|
/* Stack pointer methods. */
|
||||||
|
|
||||||
CORE_ADDR
|
CORE_ADDR
|
||||||
|
|
|
@ -69,6 +69,8 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "language.h"
|
||||||
|
|
||||||
struct symtab_and_line;
|
struct symtab_and_line;
|
||||||
struct frame_unwind;
|
struct frame_unwind;
|
||||||
struct frame_base;
|
struct frame_base;
|
||||||
|
@ -814,4 +816,9 @@ extern struct frame_info *create_new_frame (CORE_ADDR base, CORE_ADDR pc);
|
||||||
extern int frame_unwinder_is (struct frame_info *fi,
|
extern int frame_unwinder_is (struct frame_info *fi,
|
||||||
const struct frame_unwind *unwinder);
|
const struct frame_unwind *unwinder);
|
||||||
|
|
||||||
|
/* Return the language of FRAME. */
|
||||||
|
|
||||||
|
extern enum language get_frame_language (struct frame_info *frame);
|
||||||
|
|
||||||
|
|
||||||
#endif /* !defined (FRAME_H) */
|
#endif /* !defined (FRAME_H) */
|
||||||
|
|
|
@ -43,6 +43,7 @@
|
||||||
#include "demangle.h"
|
#include "demangle.h"
|
||||||
#include "symfile.h"
|
#include "symfile.h"
|
||||||
#include "cp-support.h"
|
#include "cp-support.h"
|
||||||
|
#include "frame.h"
|
||||||
|
|
||||||
extern void _initialize_language (void);
|
extern void _initialize_language (void);
|
||||||
|
|
||||||
|
|
|
@ -544,8 +544,6 @@ extern const char *language_str (enum language);
|
||||||
|
|
||||||
extern void add_language (const struct language_defn *);
|
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. */
|
/* Check for a language-specific trampoline. */
|
||||||
|
|
||||||
extern CORE_ADDR skip_language_trampoline (struct frame_info *, CORE_ADDR pc);
|
extern CORE_ADDR skip_language_trampoline (struct frame_info *, CORE_ADDR pc);
|
||||||
|
|
42
gdb/stack.c
42
gdb/stack.c
|
@ -2559,48 +2559,6 @@ func_command (char *arg, int from_tty)
|
||||||
else if (frame != get_selected_frame (NULL))
|
else if (frame != get_selected_frame (NULL))
|
||||||
select_and_print_frame (frame);
|
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Provide a prototype to silence -Wmissing-prototypes. */
|
/* Provide a prototype to silence -Wmissing-prototypes. */
|
||||||
|
|
|
@ -38,6 +38,8 @@ struct program_space;
|
||||||
struct language_defn;
|
struct language_defn;
|
||||||
struct probe;
|
struct probe;
|
||||||
struct common_block;
|
struct common_block;
|
||||||
|
struct obj_section;
|
||||||
|
struct cmd_list_element;
|
||||||
|
|
||||||
/* Some of the structures in this file are space critical.
|
/* Some of the structures in this file are space critical.
|
||||||
The space-critical structures are:
|
The space-critical structures are:
|
||||||
|
|
|
@ -49,6 +49,7 @@
|
||||||
#include "observer.h"
|
#include "observer.h"
|
||||||
#include "maint.h"
|
#include "maint.h"
|
||||||
#include "filenames.h"
|
#include "filenames.h"
|
||||||
|
#include "frame.h"
|
||||||
|
|
||||||
/* readline include files. */
|
/* readline include files. */
|
||||||
#include "readline/readline.h"
|
#include "readline/readline.h"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue