Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 16 Jun 2009 14:59:36 +0530
From:      venki kaps <venkiece2005@gmail.com>
To:        freebsd-arm@freebsd.org, netbsd-users@netbsd.org,  freebsd-current@freebsd.org
Subject:   [libc] dlclose gives "invalid shared object handle" without pthread combination.
Message-ID:  <6d53329e0906160229j2fdba518h84b13652153a32f6@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
Hi,

I am using the NetBSD implementation of rtld(src/libexec/ld.elf_so/)
for ARM/MIPS.

I have C++ static constructor/destructor issue with my rtld.

Problem Report:
"ld.elf_so does not execute .init/.fini functions in order" and [libc]
dlclose gives
"invalid shared object handle" when called through the fini function of another
module.

The similar NetBSD/freeBSD issues are found from the following References:
[1] http://gnats.netbsd.org/37347
[2] http://updraft3.jp.freebsd.org/cgi/query-pr.cgi?pr=kern/42956

The above issues are already commited in NetBSD-5-0-RELEASE.

I have ported NetBSD-5-0-RELEASE rtld and tested Ref[1] provided
static constructor/destructor test and did not find any issues
with shared pthread combination but noticed [libc] dlclose gives
"invalid shared object handle" without pthread combination.

The static constructor/destructor test results:

It should be :
--------------

$ ./foobar
foo_ctor
bar_ctor
tar_ctor
main_ctor
dep1_ctor
dep2_ctor
dll_ctor
dll_dtor
dep2_dtor
dep1_dtor
main_dtor
tar_dtor
bar_dtor
foo_dtor

While currently I get:
----------------------

with pthreads:

$ ./foobar
foo_ctor
bar_ctor
tar_ctor
main_ctor
dep1_ctor
dep2_ctor
dll_ctor
dll_dtor
dep2_dtor
dep1_dtor
main_dtor
tar_dtor
bar_dtor
foo_dtor

without pthreads:

$ ./foobar
foo_ctor
bar_ctor
tar_ctor
main_ctor
dep1_ctor
dep2_ctor
dll_ctor
dll_dtor
dep2_dtor
dep1_dtor
main_dtor
tar_dtor
bar_dtor
foo_dtor
Invalid shared object handle 0xbdbed400

This gives a "invalid shared object handle" message
because the refcount field (obj->dl_refcount) for the handle is zero.

I have little bit confused about dlclose destructor
with/without pthreads.

I have some queries:
1) Is it required any changes apart from the NetBSD-5-0-RELEASE/{Ref[1],[2]}?
2) Are any changes required in thread-stub?

Could anyone provide any inputs to the my issue?

Thanks in advance.

Thanks & Regards,
Venkappa



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