This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: Question about blockframe.c:inside_main_func()
- From: Jason Molenda <jmolenda at apple dot com>
- To: Andrew Cagney <cagney at gnu dot org>
- Cc: Joel Brobecker <brobecker at gnat dot com>, gdb-patches at sources dot redhat dot com
- Date: Thu, 29 Apr 2004 17:27:28 -0700
- Subject: Re: Question about blockframe.c:inside_main_func()
- References: <9B827536-9972-11D8-9EA7-000A9569836A@apple.com> <40911AA8.9080106@gnu.org>
On Apr 29, 2004, at 8:09 AM, Andrew Cagney wrote:
However, I think the entire function's contents are bogus. It should
look like:
if (symtab_find_function_range_by_name (main_name (), &low_pc,
&high_pc))
return pc in [low_pc, high_pc);
else
return 0;
so that the logic is pushed back into the symbol table (an obvious
thing for lookup_function_range_by_name to do is implement a
look-aside cache).
Just so I'm clear -- this is a function that doesn't exist right now,
right?
We have at least one similar address range cache in the Apple gdb to
keep track of some oft-referenced ObjC dispatch functions (which could
be subsumed by a symtab_find_function_range_by_name() type function).
(they need to be killed off anyway as PIE breaks the assumption that
the values are constant across function invocations).
I don't really know what PIE means - I thought it meant that the
executable was built PIC and would be loaded at an arbitrary address on
each run. How could a function shift locations while the inferior is
executing?
[*] We have something called "ZeroLink" where the main executable --
the symfile_objfile -- is a tiny stub that demand-loads each object
file (formatted like a shared library) as functions/global variables
in those .o's are referenced. So in our case, the symfile_objfile
doesn't contain main at all; hence me looking into this function and
scratching my head about why it's re-searching for this function
every time...
you might want to look at PIE.
It's a pretty different thing, if I'm not mistaken. PIE is about
loading your executable at an arbitrary address, isn't it? ZeroLink is
about avoiding the static link editor stage in development. You build
your .o's (and they're built as little shared libraries), and you run
the ZL stub program in place of your main application. The ZL stub
program loads at the usual 0x0 address, like a normal program. It
builds up a list of available functions in all the .o's and pulls them
in on-demand. It's entirely a development-time speed deal. I thought
PIE was more about security, putting the executable in different places
so hax0rs can't hardcode where interesting functions et al are located.
Maybe I misunderstood what PIE encompasses?
Thanks,
Jason