From owner-freebsd-hackers@FreeBSD.ORG Fri Feb 15 16:23:59 2008 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6D30316A417 for ; Fri, 15 Feb 2008 16:23:59 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from relay02.kiev.sovam.com (relay02.kiev.sovam.com [62.64.120.197]) by mx1.freebsd.org (Postfix) with ESMTP id DF5CA13C468 for ; Fri, 15 Feb 2008 16:23:58 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from [212.82.216.226] (helo=skuns.kiev.zoral.com.ua) by relay02.kiev.sovam.com with esmtps (TLSv1:AES256-SHA:256) (Exim 4.67) (envelope-from ) id 1JQ33J-000Ihm-Ke for freebsd-hackers@freebsd.org; Fri, 15 Feb 2008 18:04:44 +0200 Received: from deviant.kiev.zoral.com.ua (root@deviant.kiev.zoral.com.ua [10.1.1.148]) by skuns.kiev.zoral.com.ua (8.14.1/8.14.1) with ESMTP id m1FG4FKV081766 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 15 Feb 2008 18:04:15 +0200 (EET) (envelope-from kostikbel@gmail.com) Received: from deviant.kiev.zoral.com.ua (kostik@localhost [127.0.0.1]) by deviant.kiev.zoral.com.ua (8.14.2/8.14.2) with ESMTP id m1FG4auO065108; Fri, 15 Feb 2008 18:04:36 +0200 (EET) (envelope-from kostikbel@gmail.com) Received: (from kostik@localhost) by deviant.kiev.zoral.com.ua (8.14.2/8.14.2/Submit) id m1FG4ZgO065107; Fri, 15 Feb 2008 18:04:35 +0200 (EET) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: deviant.kiev.zoral.com.ua: kostik set sender to kostikbel@gmail.com using -f Date: Fri, 15 Feb 2008 18:04:35 +0200 From: Kostik Belousov To: Sergei Trofimovich Message-ID: <20080215160435.GG57756@deviant.kiev.zoral.com.ua> References: <20080214174645.5bdb2879@st.vba.com.by> <49BA5EE4-D845-4F74-A61D-3CD2AAB41E53@0x58.com> <20080215094009.07079ef0@st.vba.com.by> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="pccYjlC/mV5H7SoF" Content-Disposition: inline In-Reply-To: <20080215094009.07079ef0@st.vba.com.by> User-Agent: Mutt/1.4.2.3i X-Virus-Scanned: ClamAV version 0.91.2, clamav-milter version 0.91.2 on skuns.kiev.zoral.com.ua X-Virus-Status: Clean X-Spam-Status: No, score=-4.4 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 autolearn=ham version=3.2.3 X-Spam-Checker-Version: SpamAssassin 3.2.3 (2007-08-08) on skuns.kiev.zoral.com.ua X-Scanner-Signature: cd91eefa7e6da97c48661c56a607d3ec X-DrWeb-checked: yes X-SpamTest-Envelope-From: kostikbel@gmail.com X-SpamTest-Group-ID: 00000000 X-SpamTest-Header: Not Detected X-SpamTest-Info: Profiles 2245 [Feb 15 2008] X-SpamTest-Info: helo_type=3 X-SpamTest-Method: none X-SpamTest-Rate: 0 X-SpamTest-Status: Not detected X-SpamTest-Status-Extended: not_detected X-SpamTest-Version: SMTP-Filter Version 3.0.0 [0278], KAS30/Release Cc: freebsd-hackers@freebsd.org Subject: Re: x86: sigaltstack problems X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 15 Feb 2008 16:23:59 -0000 --pccYjlC/mV5H7SoF Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Fri, Feb 15, 2008 at 09:40:09AM +0200, Sergei Trofimovich wrote: > On Thu, 14 Feb 2008 11:40:21 -0700 > Bert JW Regeer wrote: >=20 > > On Feb 14, 2008, at 08:46 , Sergei Trofimovich wrote: > >=20 > > > Attached file causes segfaults on freebsd 4,5,6 > > > but keeps alive in linux. > > > > > > IANIAML, so please CC me explicitly. > > > > > > Thanks! > >=20 > > You did not attach any files. > >=20 > > Bert JW Regeer >=20 > Sorry, something stripped it out. >=20 > (copy of file is here - http://rafb.net/p/OYjAUQ55.html) >=20 > The question is: > Is it okay the program segfaults? >=20 > I thought sigaltstack is the way not to mess our (possible invalid) stack. > IANIAML, so please CC me explicitly. >=20 > ////////////////////////////////////////////////////// > //main.c: > ////////////////////////////////////////////////////// >=20 > #include > #include > #include > #include >=20 > #include > #include > #include >=20 > volatile int alarmed =3D 0; > void alarm_handler(int signo) > { > alarmed =3D 1; > } >=20 > #define EMIT_ASM_CALL(aflag) \ > asm volatile( \ > "nop \t\n" \ > /* backup and mess esp */ \ > "movl %%esp, %%ebp \t\n" \ > "xorl %%eax, %%eax \t\n" \ > "movl %%eax, %%esp \t\n" \ > \ > "while_not_alarmed: \t\n" \ > "movl %0, %%eax \t\n" \ > "test %%eax, %%eax \t\n" \ > \ > /* loop on volatile var */ \ > "jz while_not_alarmed \t\n" \ > \ > /* restore esp */ \ > "movl %%ebp, %%esp \t\n" \ > "nop \t\n" \ > : \ > : "m"(aflag) \ > : "%eax", "%ebp", "%esp","cc" /* we mess up EFLAGS */); >=20 > int main () > { > /* alternate stack not to segfault on signal arrival */ > stack_t ss; > ss.ss_sp =3D malloc(SIGSTKSZ); > if (ss.ss_sp =3D=3D NULL) exit (1); > ss.ss_size =3D SIGSTKSZ; > ss.ss_flags =3D 0; > if (sigaltstack(&ss, NULL) =3D=3D -1) exit (2); >=20 >=20 > struct sigaction sa; > memset(&sa, 0, sizeof(sa)); > sigfillset(&sa.sa_mask); > sa.sa_handler =3D alarm_handler; > // we DO alternate stack on signal arrival > sa.sa_flags =3D SA_ONSTACK; > sigaction(SIGALRM, &sa, NULL); >=20 > alarm (1); >=20 > // loop on volatile var > EMIT_ASM_CALL(alarmed); >=20 > printf ("caught alarm signal\n"); > return 0; > } I do not see a problem on RELENG_7. The tail of the truss output is below: sigaltstack(0xbfbfe638,0x0,0x1,0x0,0x0,0x1) =3D 0 (0x0) sigaction(SIGALRM,{ 0x8048550 SA_ONSTACK ss_t },0x0) =3D 0 (0x0) setitimer(0,{0.000000, 1.000000},{0.000000, 0.000000}) =3D 0 (0x0) SIGNAL 14 (SIGALRM) sigreturn(0x28209500,0xe,0x0,0x28209500,0x0,0x8048550) =3D 0 (0x0) fstat(1,{mode=3Dcrw------- ,inode=3D137,size=3D0,blksize=3D4096}) =3D 0 (0x= 0) ioctl(1,TIOCGETA,0xbfbfe4e8) =3D 0 (0x0) caught alarm signal write(1,"caught alarm signal\n",20) =3D 20 (0x14) process exit, rval =3D 0 --pccYjlC/mV5H7SoF Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.8 (FreeBSD) iEYEARECAAYFAke1uBIACgkQC3+MBN1Mb4g2eACfaeeOta1MaRAEdYatsuNs1uPD ko8AoMrzhjCvF5H/teVVC5g9LjGiRzD/ =TCv9 -----END PGP SIGNATURE----- --pccYjlC/mV5H7SoF--