Skip site navigation (1)Skip section navigation (2)
Date:      18 Jul 1999 12:45:27 +0200
From:      Dag-Erling Smorgrav <des@flood.ping.uio.no>
To:        Alfred Perlstein <bright@rush.net>
Cc:        Dag-Erling Smorgrav <des@flood.ping.uio.no>, hackers@FreeBSD.ORG
Subject:   Re: Determining the return address
Message-ID:  <xzpaesunsmw.fsf@flood.ping.uio.no>
In-Reply-To: Alfred Perlstein's message of "Sat, 17 Jul 1999 16:01:50 -0500 (EST)"
References:  <Pine.BSF.3.96.990717155538.14320Z-100000@cygnus.rush.net>

next in thread | previous in thread | raw e-mail | index | archive | help
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.

> 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).

> > 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.

DES
-- 
Dag-Erling Smorgrav - des@flood.ping.uio.no


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?xzpaesunsmw.fsf>