Date: Fri, 31 Dec 2010 14:08:31 +0100 From: John Marino <freebsdml@marino.st> To: Kostik Belousov <kostikbel@gmail.com> Cc: freebsd-threads@freebsd.org Subject: Re: AMD64 version of GNAT Ada compiler broken due to libthr Message-ID: <4D1DD5CF.5020305@marino.st> In-Reply-To: <20101231125215.GL90883@deviant.kiev.zoral.com.ua> References: <4D1DC299.2090808@marino.st> <20101231122225.GK90883@deviant.kiev.zoral.com.ua> <4D1DCE02.3050601@marino.st> <20101231125215.GL90883@deviant.kiev.zoral.com.ua>
next in thread | previous in thread | raw e-mail | index | archive | help
Hi Kostik, The result is the test passes. A small gdb log follows to prove it. So what does this mean? -- John Starting program: /usr/home/marino/test_gnat/test_c9a009c/c9a009c [New LWP 100064] [New Thread 800a041c0 (LWP 100064)] [New Thread 800a0ae40 (LWP 100051)] [New Thread 800a64c80 (LWP 100073)] [New Thread 800aa1ac0 (LWP 100090)] [Thread 800aa1ac0 (LWP 100090) exited] Invalid selected thread. [Switching to thread 2 (Thread 800a041c0 (LWP 100064))]#0 0x00000008006923cc in _umtx_op_err () at /usr/src/lib/libthr/arch/amd64/amd64/_umtx_op_err.S:37 37 RSYSCALL_ERR(_umtx_op) Continuing. [Thread 800a64c80 (LWP 100073) exited] Invalid selected thread. [Switching to thread 2 (Thread 800a041c0 (LWP 100064))]#0 0x00000008006923cc in _umtx_op_err () at /usr/src/lib/libthr/arch/amd64/amd64/_umtx_op_err.S:37 37 RSYSCALL_ERR(_umtx_op) Continuing. [Thread 800a0ae40 (LWP 100051) exited] Invalid selected thread. [Switching to thread 2 (Thread 800a041c0 (LWP 100064))]#0 0x00000008006923cc in _umtx_op_err () at /usr/src/lib/libthr/arch/amd64/amd64/_umtx_op_err.S:37 37 RSYSCALL_ERR(_umtx_op) Continuing. Program exited normally. Kostik Belousov wrote: > On Fri, Dec 31, 2010 at 01:35:14PM +0100, John Marino wrote: >> Hi Kostik, >> You're right, that was an oversight. I'm using release 8.1, but I tried >> troubleshooting this months ago on 8.0 and the result was identical. >> >> I'm well above my head here. I don't know what I should be looking for. >> Here's the dissembled _umtx_op_err function, along with the >> backtraces of the other two threads. They didn't look that interesting >> to me the first time. > The instruction counter is right before syscall, so I do think that the > thread was executing the syscall. > > Backtrace for LWP 100073 indeed looks interesting, because the address > 0x00007fffffbfeb19 belongs to the area used for stack(s), including > the thread stacks. > > FreeBSD amd64 currently provides non-executable stacks for non-main > threads, but executable stack for main thread. i386 has no support for > nx bit on non-PAE kernels. > > As a useful experiment, go to src/lib/libthr/thread/thr_stack.c, find > the following fragment > > if ((stackaddr = mmap(stackaddr, stacksize+guardsize, > PROT_READ | PROT_WRITE, MAP_STACK, > -1, 0)) != MAP_FAILED && > > and change the flags from PROT_READ | PROT_WRITE to > PROT_READ | PROT_WRITE | PROT_EXEC. Then recompile and reinstall libthr, > and report back what happens with your test. >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4D1DD5CF.5020305>