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]

[PATCH, alpha]: Introduce alpha_frob_update_context


Hello!

This problem was uncovered by a libgo testsuite, where SIGSEGV handler
in html/template test resulted in

Program received signal SIGSEGV, Segmentation fault.
libgo_html.template.Error.pN25_libgo_html.template.Error (e=0x0) at error.go:185
185             if e.Line != 0 {

While x86_64 recovers from the exception, alpha doesn't, resulting in:

(gdb) c
Continuing.

Program received signal SIGILL, Illegal instruction.
0x0000020000b6617c in runtime_m0 () from ./libgo.so.0

The problem was that signal handler in frame 5 wasn't marked as such,
so unwinder assigned FDE of frame #5 to frame #6.

(gdb) bt
#0  _Unwind_RaiseException (exc=0xf840453300) at
../../../gcc-svn/trunk/libgcc/unwind.inc:135
#1  0x0000020000559a8c in __go_unwind_stack () at
../../../gcc-svn/trunk/libgo/runtime/go-unwind.c:175
#2  0x0000020000556d44 in __go_panic (arg=...) at
../../../gcc-svn/trunk/libgo/runtime/go-panic.c:85
#3  0x0000020000564be8 in runtime_panicstring (s=0x200007fb737
"invalid memory address or nil pointer dereference")
    at ../../../gcc-svn/trunk/libgo/runtime/runtime.c:83
#4  0x000002000055875c in sighandler (sig=<optimized out>) at
../../../gcc-svn/trunk/libgo/runtime/go-signal.c:183
#5  0x0000020002c82620 in ?? () from /lib/libc.so.6.1
#6  0x000000012001c85c in
libgo_html.template.Error.pN25_libgo_html.template.Error (e=0x0) at
error.go:184
#7  0x0000020000580cc4 in
libgo_fmt.fmt.handleMethods.pN16_libgo_fmt.fmt.pp (p=0xf840214f00,
verb=<optimized out>, plus=<optimized out>,
    goSyntax=<optimized out>, depth=<optimized out>) at
../../../gcc-svn/trunk/libgo/go/fmt/print.go:648
#8  0x000002000057efc8 in
libgo_fmt.fmt.printField.pN16_libgo_fmt.fmt.pp (p=0xf840214f00,
field=..., verb=<optimized out>,
    plus=<optimized out>, goSyntax=<optimized out>, depth=0) at
../../../gcc-svn/trunk/libgo/go/fmt/print.go:687
#9  0x000002000057fde8 in libgo_fmt.fmt.doPrintf.pN16_libgo_fmt.fmt.pp
(p=0xf840214f00, format=..., a=...)
    at ../../../gcc-svn/trunk/libgo/go/fmt/print.go:1045
#10 0x00000200005811ac in libgo_fmt.fmt.Sprintf (format=..., a=...) at
../../../gcc-svn/trunk/libgo/go/fmt/print.go:194

Attached patch that introduces MD_FROB_UPDATE_CONTEXT fixes this failure.

2011-12-19  Uros Bizjak  <ubizjak@gmail.com>

	* config/alpha/linux-unwind.h: Update copyright years.
	(MD_FROB_UPDATE_CONTEXT): New define.
	(alpha_frob_update_context): New function.

Patch was bootstrapped and regression tested on alphaev68-pc-linux-gnu
with all languages + go.

OK for mainline? What about other release branches?

Uros.

Attachment: a.diff.txt
Description: Text document


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