gdb/frame-base.c - gdb
Global variables defined
Data types defined
Functions defined
Source code
- #include "defs.h"
- #include "frame-base.h"
- #include "frame.h"
- #include "gdb_obstack.h"
- static CORE_ADDR
- default_frame_base_address (struct frame_info *this_frame, void **this_cache)
- {
- return get_frame_base (this_frame);
- }
- static CORE_ADDR
- default_frame_locals_address (struct frame_info *this_frame, void **this_cache)
- {
- return default_frame_base_address (this_frame, this_cache);
- }
- static CORE_ADDR
- default_frame_args_address (struct frame_info *this_frame, void **this_cache)
- {
- return default_frame_base_address (this_frame, this_cache);
- }
- const struct frame_base default_frame_base = {
- NULL,
- default_frame_base_address,
- default_frame_locals_address,
- default_frame_args_address
- };
- static struct gdbarch_data *frame_base_data;
- struct frame_base_table_entry
- {
- frame_base_sniffer_ftype *sniffer;
- struct frame_base_table_entry *next;
- };
- struct frame_base_table
- {
- struct frame_base_table_entry *head;
- struct frame_base_table_entry **tail;
- const struct frame_base *default_base;
- };
- static void *
- frame_base_init (struct obstack *obstack)
- {
- struct frame_base_table *table
- = OBSTACK_ZALLOC (obstack, struct frame_base_table);
- table->tail = &table->head;
- table->default_base = &default_frame_base;
- return table;
- }
- void
- frame_base_append_sniffer (struct gdbarch *gdbarch,
- frame_base_sniffer_ftype *sniffer)
- {
- struct frame_base_table *table = gdbarch_data (gdbarch, frame_base_data);
- (*table->tail)
- = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct frame_base_table_entry);
- (*table->tail)->sniffer = sniffer;
- table->tail = &(*table->tail)->next;
- }
- void
- frame_base_set_default (struct gdbarch *gdbarch,
- const struct frame_base *default_base)
- {
- struct frame_base_table *table = gdbarch_data (gdbarch, frame_base_data);
- table->default_base = default_base;
- }
- const struct frame_base *
- frame_base_find_by_frame (struct frame_info *this_frame)
- {
- struct gdbarch *gdbarch = get_frame_arch (this_frame);
- struct frame_base_table *table = gdbarch_data (gdbarch, frame_base_data);
- struct frame_base_table_entry *entry;
- for (entry = table->head; entry != NULL; entry = entry->next)
- {
- const struct frame_base *desc = NULL;
- desc = entry->sniffer (this_frame);
- if (desc != NULL)
- return desc;
- }
- return table->default_base;
- }
- extern initialize_file_ftype _initialize_frame_base;
- void
- _initialize_frame_base (void)
- {
- frame_base_data = gdbarch_data_register_pre_init (frame_base_init);
- }