introduce minimal_symbol_upper_bound

This introduces minimal_symbol_upper_bound and changes various bits of
code to use it.  Since this function is intimately tied to the
implementation of minimal symbol tables, I believe it belongs in
minsyms.c.

The new function is extracted from find_pc_partial_function_gnu_ifunc.
This isn't a "clean" move because the old function interleaved the
caching and the computation; but this doesn't make sense for the new
code.

2014-02-26  Tom Tromey  <tromey@redhat.com>

	* blockframe.c (find_pc_partial_function_gnu_ifunc): Use
	bound minimal symbols.  Move code that knows about minsym
	table layout...
	* minsyms.c (minimal_symbol_upper_bound): ... here.  New
	function.
	* minsyms.h (minimal_symbol_upper_bound): Declare.
	* objc-lang.c (find_objc_msgsend): Use bound minimal symbols,
	minimal_symbol_upper_bound.
This commit is contained in:
Tom Tromey 2013-08-19 07:58:44 -06:00
parent 1b58801583
commit 50e65b1713
5 changed files with 83 additions and 51 deletions

View file

@ -1260,25 +1260,23 @@ find_objc_msgsend (void)
for (i = 0; i < nmethcalls; i++)
{
struct minimal_symbol *func;
struct bound_minimal_symbol func;
/* Try both with and without underscore. */
func = lookup_minimal_symbol (methcalls[i].name, NULL, NULL);
if ((func == NULL) && (methcalls[i].name[0] == '_'))
func = lookup_bound_minimal_symbol (methcalls[i].name);
if ((func.minsym == NULL) && (methcalls[i].name[0] == '_'))
{
func = lookup_minimal_symbol (methcalls[i].name + 1, NULL, NULL);
func = lookup_bound_minimal_symbol (methcalls[i].name + 1);
}
if (func == NULL)
if (func.minsym == NULL)
{
methcalls[i].begin = 0;
methcalls[i].end = 0;
continue;
}
methcalls[i].begin = SYMBOL_VALUE_ADDRESS (func);
do {
methcalls[i].end = SYMBOL_VALUE_ADDRESS (++func);
} while (methcalls[i].begin == methcalls[i].end);
methcalls[i].begin = SYMBOL_VALUE_ADDRESS (func.minsym);
methcalls[i].end = minimal_symbol_upper_bound (func);
}
}