Date: Tue, 1 Nov 2011 07:45:05 GMT From: yamayan <yamayan@kbh.biglobe.ne.jp> To: freebsd-gnats-submit@FreeBSD.org Subject: amd64/162214: longjmp and siglongjmp, stack pointer is not aligned Message-ID: <201111010745.pA17j5K2047970@red.freebsd.org> Resent-Message-ID: <201111010750.pA17oBrP050320@freefall.freebsd.org>
index | next in thread | raw e-mail
>Number: 162214 >Category: amd64 >Synopsis: longjmp and siglongjmp, stack pointer is not aligned >Confidential: no >Severity: critical >Priority: high >Responsible: freebsd-amd64 >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Tue Nov 01 07:50:11 UTC 2011 >Closed-Date: >Last-Modified: >Originator: yamayan >Release: 10.0-CURRENT >Organization: >Environment: FreeBSD yamayan 10.0-CURRENT FreeBSD 10.0-CURRENT #1 r226954M: Mon Oct 31 10:10:55 JST 2011 root@yamayan:/usr/obj/usr/src/sys/YAMAYAN amd64 >Description: /usr/src/lib/libc/amd64/gen/ At longjmp(setjmp.S) and siglongjmp(sigsetjmp.S), stack pointer is not 16-byte alignment, so to call sigprocmask makes BusError. in /usr/src/lib/libthr/thread/thr_sig.c, compile with clang -march=native @ corei7, movaps is used at sigprocmask. It is not problem. unaligned stack pointer is problem. >How-To-Repeat: build and install lib/libthr with clang -march=corei7 (-march=native @ corei7 CPU) for example, build /usr/ports/lang/perl5.14. miniperl stops with BusError. check corefile. >Fix: patch my patch. Adjust stack pointer alignment. Patch attached with submission follows: Index: setjmp.S =================================================================== --- setjmp.S (revision 226979) +++ setjmp.S (working copy) @@ -81,7 +81,9 @@ movq $3,%rdi /* SIG_SETMASK */ leaq 72(%rdx),%rsi /* (sigset_t*)set */ movq $0,%rdx /* (sigset_t*)oset */ + subq $0x8,%rsp /* adjust alignment */ call PIC_PLT(CNAME(_sigprocmask)) + addq $0x8,%rsp popq %rsi popq %rdi /* jmpbuf */ movq %rdi,%rdx Index: sigsetjmp.S =================================================================== --- sigsetjmp.S (revision 226979) +++ sigsetjmp.S (working copy) @@ -90,7 +90,9 @@ movq $3,%rdi /* SIG_SETMASK */ leaq 72(%rdx),%rsi /* (sigset_t*)set */ movq $0,%rdx /* (sigset_t*)oset */ + subq $0x8,%rsp /* adjust alignment */ call PIC_PLT(CNAME(_sigprocmask)) + addq $0x8,%rsp popq %rsi popq %rdi /* jmpbuf */ 2: movq %rdi,%rdx >Release-Note: >Audit-Trail: >Unformatted:home | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201111010745.pA17j5K2047970>
