Hi Ignacy, Ignacy Gawędzki wrote, > On Mon, Oct 03, 2016 at 06:13:45PM +0200, thus spake Waldemar Brodkorb: > > Hi Ignacy, > > Ignacy Gawędzki wrote, > > > > > 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. > > > > But isn't pthread_cancel using pthread_cancel_init from > > libpthread/nptl/sysdeps/pthread/unwind-forcedunwind.c? > > Yes, it looks like it does. But at least _Unwind_Resume doesn't seem > to be used at all. > > > > 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. > > > > I still do not understand the issue. > > As far as I know, the Unwind* functions in uClibc and GNU libc is > > wrapper code around gcc libgcc_s.so.1 which is loaded via dlopen > > at runtime. > > Yes, they are, but the problem is with the way the ARM unwinder works. > Obviously, it doesn't expect to have one additional frame added by a > call to _Unwind_Resume. This is why in the case of the ARM > architecture, a specially-crafted version of the wrapper around > _Unwind_Resume is provided which doesn't create a new frame. > > > I once asked about this on the libc mailinglist: > > https://sourceware.org/ml/libc-help/2014-07/msg00000.html > > > > > 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. > > > > But what exactly is fixed by the patch then? > > The patch makes _Unwind_Resume in libpthread/nptl/ be implemented by > sysdeps/unix/sysv/linux/arm/unwind-forcedunwind.c in the case of ARM > and by sysdeps/pthread/unwind-forcedunwind.c otherwise. So if > libc.so's _Unwind_Resume ever takes over libgcc_s.so's, or if the > wrapper around _Unwind_Resume is used in the future, it will simply > work transparently. > > The way this is achieved is inspired by how it's already done for > librt with unwind-resume.c (see sysdeps/pthread/rt-unwind-resume.c). > > > Is it still a ARM specific issue? > > Yes it is. > > > Could you take a look at glibc commit: > > commit 46abb64d6287d09100b147d062f6810066389b7e > > Author: Roland McGrath <rol...@hack.frob.com> > > Date: Mon Jan 5 14:01:49 2015 -0800 > > > > ARM: Consolidate with generic unwinder wrapper code > > > > I think it would be a better solution to sync with glibc and > > get rid of the special ARM specific versions. > > I you look closely at this commit, it's exactly what I'm talking > about: it's providing an ARM-specific implementation of _Unwind_Resume > in assembly. For other architectures, the generic wrapper is used. > > Now I agree with you that the code should sync with glibc's as much as > possible in this regard, since the problem is exactly the same. > > Cheers,
Thanks, now i understand. Could you create a patch and sync the code? best regards Waldemar _______________________________________________ devel mailing list devel@uclibc-ng.org http://mailman.uclibc-ng.org/cgi-bin/mailman/listinfo/devel