On Mon, Oct 03, 2016 at 12:26:19PM +0200, thus spake Ignacy Gawedzki: > On Sat, Oct 01, 2016 at 01:22:37PM +0200, thus spake Waldemar Brodkorb: > > Can you please try with 1.0.18? I can not reproduce the issue with > > 1.0.18. > > > > I just get "caught" with the test app. > > > > May be it was accidentally fixed in the release. > > I don't get the uncaught exception with 1.0.18 indeed. This is > certainly due to the way libpthread is now integrated into libc. Now > the version of Unwind_Resume that is called is always the one from > libgcc_1.so, even when using threads. I'm affraid that this is not > the right thing to do, because the wrapping code for Unwind_Resume in > libpthread was there for some reason.
Okay, I've explored that problem a bit more today and I have additional information. It seems that the Unwind_* functions are provided in the libc for local use and are not supposed to be visible for the dynamic linker. Compare that with GNU libc where the Unwind_* symbols are local. Right now it also seems that none of uClibc's code actually uses these functions, at least in my case, so the incorrect Unwind_Resume inside uClibc is harmless. The problem I was having with v1.0.17 was that by linking with libpthread, the Unwind_Resume wrapper code in that library was overriding the implementation in libgcc_s that was supposed to be called directly. Now that libpthread (and librt for that matter) are integrated into libc, it seems the problem is gone, because the libgcc_s implementation is not overridden by uClibc's. But this happens only because libgcc_s.so is listed before libc.so in the .dynamic section, and if it were not the case anymore, for any reason, the problem would reemerge immediately. You can force the problem to re-emerge by simply preloading libc.so using LD_PRELOAD. This makes uClibc's incorrect implementation of Unwind_Resume to be called and the execution of the example code aborts instead of outputting "caught". Please find attached the updated patch for v1.0.18. This is more like a quick fix, since a proper fix would most probably be to make those conflicting symbols local in the resulting .so. Cheers, Ignacy Ignacy Gawędzki (1): libpthread/nptl: Use arch-dependent unwind-forcedunwind.c if available libpthread/nptl/sysdeps/pthread/Makefile.in | 7 +++++-- libpthread/nptl/sysdeps/pthread/pthread-unwind-forcedunwind.c | 1 + 2 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 libpthread/nptl/sysdeps/pthread/pthread-unwind-forcedunwind.c -- 2.7.4 _______________________________________________ devel mailing list [email protected] http://mailman.uclibc-ng.org/cgi-bin/mailman/listinfo/devel
