Re: [RFA] Introduce solib_loaded observer

Mark Kettenis
2005-01-09T13:05:52Z

Date: Sat, 8 Jan 2005 19:01:04 -0500
From: Daniel Jacobowitz <drow@false.org>

On Sun, Jan 09, 2005 at 12:14:06AM +0100, Mark Kettenis wrote:
> This patch introduces a new solib_loaded observer that parallels the
> solub_unloaded observer that we already have. I need this observer to
> properly implement a threads stratum for FreeBSD and OpenBSD
> user-space threads library support. With this observer I'll also be
> able to fix the problems we're having with statically linked programs
> that use the threading library on Linux. If you think about it a bit,
> the problems with static thread libraries stem from the fact that we
> abuse the now deprecated target_new_objfile_hook to get notified about
> newly loaded libraries. Unfortunately that hook is also called when
> the main executable is loaded, which causes all kinds of trouble.

Actually, I've already posted patches for the Linux problem. The basic
"abuse" of the target_new_objfile_hook isn't really the stumbling
block, rather, the attempt to use it for both running and non-running
programs. The necessary fix was to use inferior_created. Still, it'll
definitely be cleaner to use a solib_loaded hook there, and I look
forward to that.

I missed that patch. But I'm doing the same thing for the BSD
user-level threads support. Works like a charm.

I'll ping that patch after I get back from travelling next week.

> The patch below doesn't only implement the new observer. The reason
> for that is that when the solib_loaded observer is called, the symbols
> for the new library haven't been loaded yet. So I've split out the
> code to read in those symbols out from solib_add() into a seperate
> function, and made that public.

Could you explain why this is necessary, instead of calling the
observer after loading symbols? I don't see notification at that point
as particularly useful. Certainly the first thing the GNU/Linux code
would want to do would be to load the symbols.

Calling the observer after loading the symbols isn't possible. You
can set "auto-solib-add" to 0, and then the symbols will never be
loaded at all. So you'll always have to force loading the symbols
from within your observer anyway (but you only have to do so for the
threads library). From a code perspective the point where the
notification is called is the most logical. And that way it's less
likely that we see "auto-solib-add" related bugs ;-).

Mark