Skip site navigation (1)Skip section navigation (2)
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>