Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 18 Jul 1999 14:13:02 -0500 (EST)
From:      Alfred Perlstein <bright@rush.net>
To:        Dag-Erling Smorgrav <des@flood.ping.uio.no>
Cc:        hackers@FreeBSD.ORG
Subject:   Re: Determining the return address
Message-ID:  <Pine.BSF.3.96.990718140958.14320g-100000@cygnus.rush.net>
In-Reply-To: <xzpaesunsmw.fsf@flood.ping.uio.no>

next in thread | previous in thread | raw e-mail | index | archive | help
On 18 Jul 1999, Dag-Erling Smorgrav wrote:

> Alfred Perlstein <bright@rush.net> writes:
> > This looks like what you are doing is trying to grab the data on the
> > stack before "log" which is the return address.
> 
> Yes. It actually works :)
> 
> >                                                  I doubt this is
> > at all portable and may fail because of optimizations and ABI, such
> > as archs that store the return address in a register...
> 
> I know - I don't expect it to be portable.

*slap* :)

> 
> > gdb and glibc have some functions to assist in runtime backtraces,
> > perhaps a look there may help?
> 
> I found out about __builtin_return_address(0).

what is that? a function? available on freebsd?

> 
> > > BTW, is dladdr() signal-safe?
> > not according to the sigaction man page.
> 
> OK, is there any way I can find out that I am being called from a
> signal handler, other than using a global variable? I want my logging
> functions to be signal-safe - that's why I use writev(), and I've gone
> to great lengths to ensure that log_makedate() (which uses
> localtime_r() and strftime() to build a date string) and lvformat() (a
> printf() clone with some additional goodies) are signal-safe.

sigaltstack() ?

     If oss is non-zero, the current signal stack state is returned.  The
     ss_flags field will contain the value SS_ONSTACK if the process is cur-
     rently on a signal stack and SS_DISABLE if the signal stack is currently
     disabled.

by setting an alternate signal stack i think you can check
if you are in a signal using this.  this may not be the best way
but it seems like a viable solution.

-Alfred



To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.3.96.990718140958.14320g-100000>