Re: Does a function know where it was called from?
On Sep 8, 11:08 pm, "BGB / cr88192" <cr88...@hotmail.com> wrote:
"Victor Bazarov" <v.baza...@comcast.invalid> wrote in message
[...]
in both of the above systems, things like exceptions are
usually handled by creating and linking together temporary
exception frames, and jumping from one frame to another. this
works for exceptions, but doesn't itself facilitate doing
a backtrace.
Why would a compiler do something stupid like that? Most
compilers, I think, just generate blocks of static data, which
the exception handling evaluates, rather than doing anything
dynamically before there is an exception.
[...]
for Linux, part of the functionality can be gained via libdl
(Linux provides some non-POSIX extensions), and via libunwind.
I've got code which works for Linux on Intel (32 bit) and for
Sparc (obviously, not the same code). All it does, however, is
acquire the return address and save it (as binary data);
conversion to symbolic form is left to the user (and isn't
possible without some sort of map, or if the executable has been
stripped). The GNU binary utilities library (normally installed
under Linux, but available for other systems as well) has
a program called addr2line, which can be used to obtain the
source filename and linenumber and the name of the function;
under Unix, you may also be able to get the information you need
with nm.
--
James Kanze