From owner-freebsd-questions@FreeBSD.ORG Fri Aug 13 21:44:59 2010 Return-Path: Delivered-To: freebsd-questions@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id CED32106564A for ; Fri, 13 Aug 2010 21:44:59 +0000 (UTC) (envelope-from dan@dan.emsphone.com) Received: from email1.allantgroup.com (email1.emsphone.com [199.67.51.115]) by mx1.freebsd.org (Postfix) with ESMTP id 6AE918FC13 for ; Fri, 13 Aug 2010 21:44:59 +0000 (UTC) Received: from dan.emsphone.com (dan.emsphone.com [199.67.51.101]) by email1.allantgroup.com (8.14.0/8.14.0) with ESMTP id o7DLiwUs026465 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Fri, 13 Aug 2010 16:44:58 -0500 (CDT) (envelope-from dan@dan.emsphone.com) Received: from dan.emsphone.com (smmsp@localhost [127.0.0.1]) by dan.emsphone.com (8.14.4/8.14.4) with ESMTP id o7DLiwg1063354 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Fri, 13 Aug 2010 16:44:58 -0500 (CDT) (envelope-from dan@dan.emsphone.com) Received: (from dan@localhost) by dan.emsphone.com (8.14.4/8.14.3/Submit) id o7DLivRv063139; Fri, 13 Aug 2010 16:44:57 -0500 (CDT) (envelope-from dan) Date: Fri, 13 Aug 2010 16:44:57 -0500 From: Dan Nelson To: Yuri Message-ID: <20100813214457.GF18896@dan.emsphone.com> References: <4C656E8F.8090105@rawbw.com> <20100813162429.GE18896@dan.emsphone.com> <4C65852B.807@rawbw.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4C65852B.807@rawbw.com> X-OS: FreeBSD 8.1-PRERELEASE User-Agent: Mutt/1.5.20 (2009-06-14) X-Virus-Scanned: clamav-milter 0.96 at email1.allantgroup.com X-Virus-Status: Clean X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-2.0.2 (email1.allantgroup.com [199.67.51.78]); Fri, 13 Aug 2010 16:44:58 -0500 (CDT) Cc: freebsd-questions@freebsd.org Subject: Re: Documentation on how to build 32bit applications on amd64? X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 13 Aug 2010 21:44:59 -0000 In the last episode (Aug 13), Yuri said: > On 08/13/2010 09:24, Dan Nelson wrote: > > Try adding -B/usr/lib32 to your first gcc line. The specs file should > > be modified to add this automatically when you pass -m32, imho. > > Thank you Dan, this flag worked. > > But I found a strange discrepancy between 32bit and 64bit. > When I compile the program below in 64 bit, I get the correct result. > With 32 bit executable compiled on 64 bit system like you suggested > there is another (wrong) result. On 32 bit system result is also > correct, the same as with 64 executable. > > This is a very strange discrepancy. rm_eo field is zero in the match > result which is wrong. I can't think of any explanation for it. I think Anonymous is right, and that it's due to the /usr/include headers on amd64 not being 32-bit-mode aware. So you end up with some structure members being sized for 64-bit machines instead of 32-bit. I bet struct regex_t on your cross-compiled program is the same size as your native 64-bit program, where it should match your 32-bit program instead. I took that "-B /usr/lib32" flag from /usr/src/Makefile.inc1 , where it builds the lib32 compat libraries, and it looks like it also temporarily installs a full 32-bit include directory and compiles against that with "-iprefix ${LIB32TMP}/usr/" . You may have to install a full 32-bit tree somewhere and chroot to it to build, or look more closely at how buildworld compiles the lib32 stuff and mimic that, or submit patches to the base include files that make them 32 and 64-bit compatible depending on compiler flags. -- Dan Nelson dnelson@allantgroup.com