This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [gofrontend-dev] Re: libgo patch committed: Add precise stack scan support


On 11.12.18 22:01, Cherry Zhang wrote:
> On Tue, Dec 11, 2018 at 3:51 PM Ian Lance Taylor <iant@golang.org> wrote:
> 
>> On Tue, Dec 11, 2018 at 6:52 AM Matthias Klose <doko@ubuntu.com> wrote:
>>>
>>> On 10.12.18 16:54, Cherry Zhang wrote:
>>>> On Mon, Dec 10, 2018 at 1:41 AM Matthias Klose <doko@ubuntu.com>
>> wrote:
>>>>
>>>>> On 06.12.18 00:09, Ian Lance Taylor wrote:
>>>>>> This libgo patch by Cherry Zhang adds support for precise stack
>>>>>> scanning to the Go runtime.  This uses per-function stack maps stored
>>>>>> in the exception tables in the language-specific data area.  The
>>>>>> compiler needs to generate these stack maps; currently this is only
>>>>>> done by a version of LLVM, not by GCC.  Each safepoint in a function
>>>>>> is associated with a (real or dummy) landing pad, and its "type info"
>>>>>> in the exception table is a pointer to the stack map. When a stack is
>>>>>> scanned, the stack map is found by the stack unwinding code.
>>>>>>
>>>>>> For precise stack scan we need to unwind the stack. There are three
>>>>> cases:
>>>>>>
>>>>>> - If a goroutine is scanning its own stack, it can unwind the stack
>>>>>> and scan the frames.
>>>>>>
>>>>>> - If a goroutine is scanning another, stopped, goroutine, it cannot
>>>>>> directly unwind the target stack. We handle this by switching
>>>>>> (runtime.gogo) to the target g, letting it unwind and scan the stack,
>>>>>> and switch back.
>>>>>>
>>>>>> - If we are scanning a goroutine that is blocked in a syscall, we
>> send
>>>>>> a signal to the target goroutine's thread, and let the signal handler
>>>>>> unwind and scan the stack. Extra care is needed as this races with
>>>>>> enter/exit syscall.
>>>>>>
>>>>>> Currently this is only implemented on GNU/Linux.
>>>>>>
>>>>>> Bootstrapped and ran Go testsuite on x86_64-pc-linux-gnu.  Committed
>>>>>> to mainline.
>>>>>
>>>>> this broke the libgo build on ARM32:
>>>>>
>>>>> ../../../src/libgo/runtime/go-unwind.c: In function
>>>>> 'scanstackwithmap_callback':
>>>>> ../../../src/libgo/runtime/go-unwind.c:754:18: error:
>> '_URC_NORMAL_STOP'
>>>>> undeclared (first use in this function)
>>>>>   754 |           return _URC_NORMAL_STOP;
>>>>>       |                  ^~~~~~~~~~~~~~~~
>>>>> ../../../src/libgo/runtime/go-unwind.c:754:18: note: each undeclared
>>>>> identifier
>>>>> is reported only once for each function i
>>>>> t appears in
>>>>> ../../../src/libgo/runtime/go-unwind.c: In function
>>>>> 'probestackmaps_callback':
>>>>> ../../../src/libgo/runtime/go-unwind.c:802:10: error:
>> '_URC_NORMAL_STOP'
>>>>> undeclared (first use in this function)
>>>>>   802 |   return _URC_NORMAL_STOP;
>>>>>       |          ^~~~~~~~~~~~~~~~
>>>>> ../../../src/libgo/runtime/go-unwind.c:803:1: warning: control
>> reaches end
>>>>> of
>>>>> non-void function [-Wreturn-type]
>>>>>   803 | }
>>>>>       | ^
>>>>> make[6]: *** [Makefile:1474: runtime/go-unwind.lo] Error 1
>>>>> make[6]: Leaving directory
>>>>> '/<<PKGBUILDDIR>>/build/arm-linux-gnueabihf/libgo'
>>>>>
>>>>>
>>>> Hell Matthias,
>>>>
>>>> Thank you for the report. And sorry about the breakage. Does
>>>> https://go-review.googlesource.com/c/gofrontend/+/153417 (or the patch
>>>> below) fix ARM32 build? I don't have an ARM32 machine at hand to test.
>>>
>>> this fixes the build.
>>>
>>> currently running the testsuite, almost every test case core dumps on
>>> arm-linux-gnueabihf
>>
>> I committed Cherry's patch to trunk, since it looks reasonable to me.
>> Cherry, Matthias, let me know if you figure out why programs are
>> failing.
>>
>>
> Thank you.
> 
> I don't know for the moment. I'm trying to find an ARM32 machine so I can
> test.
> 
> Matthias, is it convenient for you to share a stack trace for the failing
> programs? That would be very helpful. Thanks!

I'll do a local build this weekend. For now you find the build log at
https://launchpad.net/ubuntu/+source/gcc-snapshot/1:20181210-0ubuntu1/+build/15759748


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]