From owner-freebsd-amd64@FreeBSD.ORG Fri Dec 30 21:00:37 2011 Return-Path: Delivered-To: freebsd-amd64@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 90FCD1065755 for ; Fri, 30 Dec 2011 21:00:36 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id 20AE98FC0C for ; Fri, 30 Dec 2011 21:00:34 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.5/8.14.5) with ESMTP id pBUL0X7e040421 for ; Fri, 30 Dec 2011 21:00:33 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.5/8.14.5/Submit) id pBUL0Xxb040418; Fri, 30 Dec 2011 21:00:33 GMT (envelope-from gnats) Date: Fri, 30 Dec 2011 21:00:33 GMT Message-Id: <201112302100.pBUL0Xxb040418@freefall.freebsd.org> To: freebsd-amd64@FreeBSD.org From: Russell Cattelan X-Mailman-Approved-At: Sat, 31 Dec 2011 01:50:32 +0000 Cc: Subject: Re: amd64/163710: setjump in userboot.so causes stack corruption X-BeenThere: freebsd-amd64@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Russell Cattelan List-Id: Porting FreeBSD to the AMD64 platform List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 30 Dec 2011 21:00:37 -0000 The following reply was made to PR amd64/163710; it has been noted by GNATS. From: Russell Cattelan To: Peter Wemm Cc: freebsd-gnats-submit@freebsd.org Subject: Re: amd64/163710: setjump in userboot.so causes stack corruption Date: Fri, 30 Dec 2011 14:24:49 -0600 On 12/30/11 1:33 AM, Peter Wemm wrote: > On Thu, Dec 29, 2011 at 7:16 PM, Russell Cattelan > wrote: > >>> Description: >> For some reason the forth interpreter is built and linked as 32bit even >> on amd64. > That's the catch. We use the same 32 bit loader on i386 and amd64. > The common loader understands both kernel formats. This unfortunately > has meant that the libstand and sys/boot environment has had to be 32 > bit. > Yes this is bit of an odd situation. the loader is linked 32bit but userboot.so / libstand is built 64bit but pulls in the 32bit ficl lib. The 64bit libstand provides the setjmp call that needs 96 bytes of space but since ficl is built with the 32bit jump_buf (48 byte ) structure things go sideways. I'm not sure the right overall fix is here. I figured I would file the bug and see if anybody more familiar with the loader/userboot build has any ideas. The patch I posted fixes the issue with the forth interpreter crashing when running under userboot.so, but yes it does break loader build. -Russell