Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 6 Oct 2006 17:49:48 +0900
From:      "Takahiro Kurosawa" <takahiro.kurosawa@gmail.com>
To:        "Alexander Kabaev" <kabaev@gmail.com>
Cc:        John Baldwin <john@baldwin.cx>, freebsd-gnats-submit@freebsd.org, freebsd-threads@freebsd.org
Subject:   Re: threads/103975: Implicit loading/unloading of libpthread.so may crash user processes
Message-ID:  <b72f377d0610060149id3d02dcxf5ccafe0e80fa18c@mail.gmail.com>
In-Reply-To: <20061005194756.07580108@kan.dnsalias.net>
References:  <200610041356.k94DuOmj097237@www.freebsd.org> <200610050906.21304.john@baldwin.cx> <20061005194756.07580108@kan.dnsalias.net>

next in thread | previous in thread | raw e-mail | index | archive | help
Alexander Kabaev <kabaev@gmail.com> wrote:
> On Thu, 5 Oct 2006 09:06:20 -0400
> John Baldwin <john@baldwin.cx> wrote:
>
> > > To fix the problem, a function that has __attribute__((destructor))
> > > in libpthread should probably be implemented in order to recover
> > > the initial state before unloading.
> >
> > I'm not sure you can recover the state actually, hence why I think
> > maybe we should make it so that libpthread doesn't unload once it has
> > been loaded.

I understand that it's way easier to prohibit unloading of libpthread
than to change the code safely unloadable.
Thanks for your explanation, John!

> Linux does not allow pthread library to be unloaded presumably because
> of reasons like this. From readelf -a /compat/linux/lib/libpthread.so.0:
>
>  0x6ffffffb (FLAGS_1)                    Flags: NODELETE INITFIRST
>
> Infortunately, rtld does not implement NODELETE and INITFIRST. Both are
> addressed in my patch that I am yet to commit.

I'm looking forward to the commit of your patch into the CVS repository :-)
Maybe the following line should be added to src/lib/libpthread/Makefile
when rtld supports the NODELETE flag? :
  LDFLAGS+=-Wl,-znodelete

Thanks,
--
KUROSAWA, Takahiro



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?b72f377d0610060149id3d02dcxf5ccafe0e80fa18c>