From: Tom Tromey <tom@tromey.com>
To: gdb-patches@sourceware.org
Subject: [PATCH v2 15/31] Return a block_symbol from find_pc_sect_function
Date: Sun, 05 Nov 2023 11:11:53 -0700 [thread overview]
Message-ID: <20231105-split-objfile-2023-bound-sym-october-v2-15-dbd2d158bbc3@tromey.com> (raw)
In-Reply-To: <20231105-split-objfile-2023-bound-sym-october-v2-0-dbd2d158bbc3@tromey.com>
This changes find_pc_sect_function to return a block_symbol and
updates all the callers in a minimal way.
A less intrusive approach might be possible -- but in the long run
we'll want to add an objfile into this result, so it makes sense to go
ahead with the conversion now.
---
gdb/blockframe.c | 12 ++++++------
gdb/breakpoint.c | 2 +-
gdb/btrace.c | 2 +-
gdb/cli/cli-cmds.c | 4 ++--
gdb/dwarf2/loc.c | 2 +-
gdb/eval.c | 2 +-
gdb/guile/scm-frame.c | 2 +-
gdb/infcall.c | 2 +-
gdb/infcmd.c | 6 +++---
gdb/infrun.c | 4 ++--
gdb/printcmd.c | 2 +-
gdb/python/py-finishbreakpoint.c | 2 +-
gdb/solib-frv.c | 2 +-
gdb/sparc-tdep.c | 4 ++--
gdb/symtab.c | 4 ++--
gdb/symtab.h | 4 ++--
gdb/tracepoint.c | 4 ++--
17 files changed, 30 insertions(+), 30 deletions(-)
diff --git a/gdb/blockframe.c b/gdb/blockframe.c
index 633a9674d97..981094803ed 100644
--- a/gdb/blockframe.c
+++ b/gdb/blockframe.c
@@ -132,21 +132,21 @@ get_frame_function (frame_info_ptr frame)
/* Return the function containing pc value PC in section SECTION.
Returns 0 if function is not known. */
-struct symbol *
+block_symbol
find_pc_sect_function (CORE_ADDR pc, struct obj_section *section)
{
const struct block *b = block_for_pc_sect (pc, section);
if (b == 0)
- return 0;
- return b->linkage_function ();
+ return {};
+ return { b->linkage_function (), b };
}
/* Return the function containing pc value PC.
Returns 0 if function is not known.
Backward compatibility, no section */
-struct symbol *
+block_symbol
find_pc_function (CORE_ADDR pc)
{
return find_pc_sect_function (pc, find_pc_mapped_section (pc));
@@ -251,7 +251,7 @@ find_pc_partial_function_sym (CORE_ADDR pc,
address of the function. This will happen when the function
has more than one range and the entry pc is not within the
lowest range of addresses. */
- f = find_pc_sect_function (mapped_pc, section);
+ f = find_pc_sect_function (mapped_pc, section).symbol;
if (f != NULL
&& (msymbol.minsym == NULL
|| (f->value_block ()->entry_pc ()
@@ -421,7 +421,7 @@ find_function_entry_range_from_pc (CORE_ADDR pc, const char **name,
struct type *
find_function_type (CORE_ADDR pc)
{
- struct symbol *sym = find_pc_function (pc);
+ struct symbol *sym = find_pc_function (pc).symbol;
if (sym != NULL && sym->value_block ()->entry_pc () == pc)
return sym->type ();
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index fe09dbcbeee..52ce63afade 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -12862,7 +12862,7 @@ update_static_tracepoint (tracepoint *tp, struct symtab_and_line sal)
tp->number, tp->static_trace_marker_id.c_str ());
symtab_and_line sal2 = find_pc_line (tpmarker->address, 0);
- sym = find_pc_sect_function (tpmarker->address, NULL);
+ sym = find_pc_sect_function (tpmarker->address, NULL).symbol;
uiout->text ("Now in ");
if (sym)
{
diff --git a/gdb/btrace.c b/gdb/btrace.c
index 3f72b9c91e5..ea18daa23e0 100644
--- a/gdb/btrace.c
+++ b/gdb/btrace.c
@@ -556,7 +556,7 @@ ftrace_update_function (struct btrace_thread_info *btinfo, CORE_ADDR pc)
/* Try to determine the function we're in. We use both types of symbols
to avoid surprises when we sometimes get a full symbol and sometimes
only a minimal symbol. */
- fun = find_pc_function (pc);
+ fun = find_pc_function (pc).symbol;
bmfun = lookup_minimal_symbol_by_pc (pc);
mfun = bmfun.minsym;
diff --git a/gdb/cli/cli-cmds.c b/gdb/cli/cli-cmds.c
index 8cadd637151..cfd0ff15acb 100644
--- a/gdb/cli/cli-cmds.c
+++ b/gdb/cli/cli-cmds.c
@@ -1040,7 +1040,7 @@ edit_command (const char *arg, int from_tty)
paddress (get_current_arch (), sal.pc));
gdbarch = sal.symtab->compunit ()->objfile ()->arch ();
- sym = find_pc_function (sal.pc);
+ sym = find_pc_function (sal.pc).symbol;
if (sym)
gdb_printf ("%s is in %s (%s:%d).\n",
paddress (gdbarch, sal.pc),
@@ -1424,7 +1424,7 @@ list_command (const char *arg, int from_tty)
paddress (get_current_arch (), sal.pc));
gdbarch = sal.symtab->compunit ()->objfile ()->arch ();
- sym = find_pc_function (sal.pc);
+ sym = find_pc_function (sal.pc).symbol;
if (sym)
gdb_printf ("%s is in %s (%s:%d).\n",
paddress (gdbarch, sal.pc),
diff --git a/gdb/dwarf2/loc.c b/gdb/dwarf2/loc.c
index 53031aa809a..17509f81464 100644
--- a/gdb/dwarf2/loc.c
+++ b/gdb/dwarf2/loc.c
@@ -762,7 +762,7 @@ call_site_target::iterate_over_addresses
static struct symbol *
func_addr_to_tail_call_list (struct gdbarch *gdbarch, CORE_ADDR addr)
{
- struct symbol *sym = find_pc_function (addr);
+ struct symbol *sym = find_pc_function (addr).symbol;
struct type *type;
if (sym == NULL || sym->value_block ()->entry_pc () != addr)
diff --git a/gdb/eval.c b/gdb/eval.c
index b859e825925..9b76d3d5376 100644
--- a/gdb/eval.c
+++ b/gdb/eval.c
@@ -2037,7 +2037,7 @@ eval_op_objc_msgcall (struct type *expect_type, struct expression *exp,
(exp->gdbarch, addr, current_inferior ()->top_target ());
/* Is it a high_level symbol? */
- sym = find_pc_function (addr);
+ sym = find_pc_function (addr).symbol;
if (sym != NULL)
method = value_of_variable (sym, 0);
}
diff --git a/gdb/guile/scm-frame.c b/gdb/guile/scm-frame.c
index 45863c587c1..74012ffea4f 100644
--- a/gdb/guile/scm-frame.c
+++ b/gdb/guile/scm-frame.c
@@ -666,7 +666,7 @@ gdbscm_frame_function (SCM self)
if (frame != NULL)
{
found = true;
- sym = find_pc_function (get_frame_address_in_block (frame));
+ sym = find_pc_function (get_frame_address_in_block (frame)).symbol;
}
}
catch (const gdb_exception &except)
diff --git a/gdb/infcall.c b/gdb/infcall.c
index 0f9ad34bbb4..a36a5e81b3a 100644
--- a/gdb/infcall.c
+++ b/gdb/infcall.c
@@ -413,7 +413,7 @@ static const char *
get_function_name (CORE_ADDR funaddr, char *buf, int buf_size)
{
{
- struct symbol *symbol = find_pc_function (funaddr);
+ struct symbol *symbol = find_pc_function (funaddr).symbol;
if (symbol)
return symbol->print_name ();
diff --git a/gdb/infcmd.c b/gdb/infcmd.c
index cf8cd527955..c50d9bcd47d 100644
--- a/gdb/infcmd.c
+++ b/gdb/infcmd.c
@@ -750,7 +750,7 @@ set_step_frame (thread_info *tp)
set_step_info (tp, frame, sal);
CORE_ADDR pc = get_frame_pc (frame);
- tp->control.step_start_function = find_pc_function (pc);
+ tp->control.step_start_function = find_pc_function (pc).symbol;
}
/* Step until outside of current statement. */
@@ -1343,7 +1343,7 @@ until_next_command (int from_tty)
not). */
pc = get_frame_pc (frame);
- func = find_pc_function (pc);
+ func = find_pc_function (pc).symbol;
if (!func)
{
@@ -1883,7 +1883,7 @@ finish_command (const char *arg, int from_tty)
/* Find the function we will return from. */
frame_info_ptr callee_frame = get_selected_frame (nullptr);
- sm->function = find_pc_function (get_frame_pc (callee_frame));
+ sm->function = find_pc_function (get_frame_pc (callee_frame)).symbol;
sm->return_buf = 0; /* Initialize buffer address is not available. */
/* Determine the return convention. If it is RETURN_VALUE_STRUCT_CONVENTION,
diff --git a/gdb/infrun.c b/gdb/infrun.c
index a7cb02c958e..2a004690e67 100644
--- a/gdb/infrun.c
+++ b/gdb/infrun.c
@@ -7343,7 +7343,7 @@ process_event_stop_test (struct execution_control_state *ecs)
&& ((ecs->event_thread->control.step_stack_frame_id
!= outer_frame_id)
|| (ecs->event_thread->control.step_start_function
- != find_pc_function (ecs->event_thread->stop_pc ())))))
+ != find_pc_function (ecs->event_thread->stop_pc ()).symbol))))
{
CORE_ADDR stop_pc = ecs->event_thread->stop_pc ();
CORE_ADDR real_stop_pc;
@@ -8752,7 +8752,7 @@ print_stop_location (const target_waitstatus &ws)
&& (tp->control.step_frame_id
== get_frame_id (get_current_frame ()))
&& (tp->control.step_start_function
- == find_pc_function (tp->stop_pc ())))
+ == find_pc_function (tp->stop_pc ()).symbol))
{
/* Finished step, just print source line. */
source_flag = SRC_LINE;
diff --git a/gdb/printcmd.c b/gdb/printcmd.c
index 2dbaaf0fffe..57a7af67ffe 100644
--- a/gdb/printcmd.c
+++ b/gdb/printcmd.c
@@ -637,7 +637,7 @@ build_address_symbolic (struct gdbarch *gdbarch,
anything/stabs--it would be inconvenient to eliminate those minimal
symbols anyway). */
msymbol = lookup_minimal_symbol_by_pc_section (addr, section);
- symbol = find_pc_sect_function (addr, section);
+ symbol = find_pc_sect_function (addr, section).symbol;
if (symbol)
{
diff --git a/gdb/python/py-finishbreakpoint.c b/gdb/python/py-finishbreakpoint.c
index 627eb297542..04fc8c9e8a7 100644
--- a/gdb/python/py-finishbreakpoint.c
+++ b/gdb/python/py-finishbreakpoint.c
@@ -252,7 +252,7 @@ bpfinishpy_init (PyObject *self, PyObject *args, PyObject *kwargs)
{
if (get_frame_pc_if_available (frame, &pc))
{
- struct symbol *function = find_pc_function (pc);
+ struct symbol *function = find_pc_function (pc).symbol;
if (function != nullptr)
{
struct type *ret_type =
diff --git a/gdb/solib-frv.c b/gdb/solib-frv.c
index 0897bce2325..aeaf0044ba7 100644
--- a/gdb/solib-frv.c
+++ b/gdb/solib-frv.c
@@ -893,7 +893,7 @@ frv_fdpic_find_canonical_descriptor (CORE_ADDR entry_point)
/* Attempt to find the name of the function. If the name is available,
it'll be used as an aid in finding matching functions in the dynamic
symbol table. */
- sym = find_pc_function (entry_point);
+ sym = find_pc_function (entry_point).symbol;
if (sym == 0)
name = 0;
else
diff --git a/gdb/sparc-tdep.c b/gdb/sparc-tdep.c
index 78f240db04e..48a1adb7553 100644
--- a/gdb/sparc-tdep.c
+++ b/gdb/sparc-tdep.c
@@ -1249,7 +1249,7 @@ sparc32_frame_cache (frame_info_ptr this_frame, void **this_cache)
cache = sparc_frame_cache (this_frame, this_cache);
- sym = find_pc_function (cache->pc);
+ sym = find_pc_function (cache->pc).symbol;
if (sym)
{
cache->struct_return_p = sparc32_struct_return_from_sym (sym);
@@ -1552,7 +1552,7 @@ static int
sparc32_dwarf2_struct_return_p (frame_info_ptr this_frame)
{
CORE_ADDR pc = get_frame_address_in_block (this_frame);
- struct symbol *sym = find_pc_function (pc);
+ struct symbol *sym = find_pc_function (pc).symbol;
if (sym)
return sparc32_struct_return_from_sym (sym);
diff --git a/gdb/symtab.c b/gdb/symtab.c
index 5ec56f4f2af..c1d78e1e2a6 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -3790,7 +3790,7 @@ skip_prologue_sal (struct symtab_and_line *sal)
switch_to_program_space_and_thread (sal->pspace);
- sym = find_pc_sect_function (sal->pc, sal->section);
+ sym = find_pc_sect_function (sal->pc, sal->section).symbol;
if (sym != NULL)
{
objfile = sym->objfile ();
@@ -4069,7 +4069,7 @@ find_function_alias_target (bound_minimal_symbol msymbol)
if (!msymbol_is_function (msymbol.objfile, msymbol.minsym, &func_addr))
return NULL;
- symbol *sym = find_pc_function (func_addr);
+ symbol *sym = find_pc_function (func_addr).symbol;
if (sym != NULL
&& sym->aclass () == LOC_BLOCK
&& sym->value_block ()->entry_pc () == func_addr)
diff --git a/gdb/symtab.h b/gdb/symtab.h
index 34ce10f5011..059f7cfe8a7 100644
--- a/gdb/symtab.h
+++ b/gdb/symtab.h
@@ -2171,13 +2171,13 @@ extern struct type *lookup_enum (const char *, const struct block *);
return value will not be an inlined function; the containing
function will be returned instead. */
-extern struct symbol *find_pc_function (CORE_ADDR);
+extern block_symbol find_pc_function (CORE_ADDR);
/* lookup the function corresponding to the address and section. The
return value will not be an inlined function; the containing
function will be returned instead. */
-extern struct symbol *find_pc_sect_function (CORE_ADDR, struct obj_section *);
+extern block_symbol find_pc_sect_function (CORE_ADDR, struct obj_section *);
/* lookup the function symbol corresponding to the address and
section. The return value will be the closest enclosing function,
diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c
index 713fb387857..2d65f7c7920 100644
--- a/gdb/tracepoint.c
+++ b/gdb/tracepoint.c
@@ -217,7 +217,7 @@ set_traceframe_context (frame_info_ptr trace_frame)
&& get_frame_pc_if_available (trace_frame, &trace_pc))
{
traceframe_sal = find_pc_line (trace_pc, 0);
- traceframe_fun = find_pc_function (trace_pc);
+ traceframe_fun = find_pc_function (trace_pc).symbol;
/* Save linenumber as "$trace_line", a debugger variable visible to
users. */
@@ -3623,7 +3623,7 @@ print_one_static_tracepoint_marker (int count,
uiout->field_core_addr ("addr", marker.gdbarch, marker.address);
sal = find_pc_line (marker.address, 0);
- sym = find_pc_sect_function (marker.address, NULL);
+ sym = find_pc_sect_function (marker.address, NULL).symbol;
if (sym)
{
uiout->text ("in ");
--
2.41.0
next prev parent reply other threads:[~2023-11-05 18:11 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-05 18:11 [PATCH v2 00/31] Baby step for objfile splitting Tom Tromey
2023-11-05 18:11 ` [PATCH v2 01/31] Introduce block-symbol.h Tom Tromey
2023-11-05 18:11 ` [PATCH v2 02/31] Add block_symbol::address Tom Tromey
2023-11-05 18:11 ` [PATCH v2 03/31] Add bound_symbol Tom Tromey
2023-11-05 18:11 ` [PATCH v2 04/31] Easy conversions to use block_symbol::address Tom Tromey
2023-11-05 18:11 ` [PATCH v2 05/31] Use block_symbol::address in ada-tasks.c Tom Tromey
2023-11-05 18:11 ` [PATCH v2 06/31] Use block_symbol::address in printcmd.c Tom Tromey
2023-11-05 18:11 ` [PATCH v2 07/31] Use bound_symbol::address in tracepoint.c Tom Tromey
2023-11-05 18:11 ` [PATCH v2 08/31] Use block_symbol::address " Tom Tromey
2023-11-05 18:11 ` [PATCH v2 09/31] Use block_symbol::address in ax-gdb.c Tom Tromey
2023-11-05 18:11 ` [PATCH v2 10/31] Use block_symbol::address in linespec.c Tom Tromey
2023-11-05 18:11 ` [PATCH v2 11/31] Use block_symbol::address in ada-lang.c Tom Tromey
2023-11-05 18:11 ` [PATCH v2 12/31] Use bound_symbol::address in symmisc.c Tom Tromey
2023-11-05 18:11 ` [PATCH v2 13/31] Introduce read_var_value overload Tom Tromey
2023-11-05 18:11 ` [PATCH v2 14/31] Use read_var_value in gdb/compile Tom Tromey
2023-11-05 18:11 ` Tom Tromey [this message]
2023-11-05 18:11 ` [PATCH v2 16/31] Use read_var_value overload in finish_command_fsm Tom Tromey
2023-11-05 18:11 ` [PATCH v2 17/31] Use block_symbol in overload-handling code Tom Tromey
2023-11-05 18:11 ` [PATCH v2 18/31] Change evaluate_var_value to accept a block_symbol Tom Tromey
2023-11-05 18:11 ` [PATCH v2 19/31] Change value_of_variable to take " Tom Tromey
2023-11-05 18:11 ` [PATCH v2 20/31] Return a block_symbol from get_frame_function Tom Tromey
2023-11-05 18:11 ` [PATCH v2 21/31] Use read_var_value overload in return_command Tom Tromey
2023-11-05 18:12 ` [PATCH v2 22/31] Use read_var_value overload in py-finishbreakpoint.c Tom Tromey
2023-11-05 18:12 ` [PATCH v2 23/31] Use read_var_value overload in py-framefilter.c Tom Tromey
2023-11-05 18:12 ` [PATCH v2 24/31] Use read_var_value overload in Guile Tom Tromey
2023-11-05 18:12 ` [PATCH v2 25/31] Use read_var_value in read_frame_arg and read_frame_local Tom Tromey
2023-11-05 18:12 ` [PATCH v2 26/31] Change print_variable_and_value to take a block_symbol Tom Tromey
2023-11-05 18:12 ` [PATCH v2 27/31] Change find_frame_funname to return " Tom Tromey
2023-11-05 18:12 ` [PATCH v2 28/31] Change btrace_function::sym to " Tom Tromey
2023-11-05 18:12 ` [PATCH v2 29/31] Use read_var_value overload in Python Tom Tromey
2023-11-05 18:12 ` [PATCH v2 30/31] Remove the old read_var_value Tom Tromey
2023-11-05 18:12 ` [PATCH v2 31/31] Change language_defn::read_var_value to accept block_symbol Tom Tromey
2023-11-06 15:16 ` [PATCH v2 00/31] Baby step for objfile splitting Andrew Burgess
2023-11-07 3:36 ` Tom Tromey
2023-11-07 11:06 ` Andrew Burgess
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=20231105-split-objfile-2023-bound-sym-october-v2-15-dbd2d158bbc3@tromey.com \
--to=tom@tromey.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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).