From owner-freebsd-current@freebsd.org Fri Jan 27 08:31:37 2017 Return-Path: Delivered-To: freebsd-current@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6BDA2CC2958 for ; Fri, 27 Jan 2017 08:31:37 +0000 (UTC) (envelope-from truckman@FreeBSD.org) Received: from mailman.ysv.freebsd.org (unknown [127.0.1.3]) by mx1.freebsd.org (Postfix) with ESMTP id 5BA5D1379 for ; Fri, 27 Jan 2017 08:31:37 +0000 (UTC) (envelope-from truckman@FreeBSD.org) Received: by mailman.ysv.freebsd.org (Postfix) id 58193CC2957; Fri, 27 Jan 2017 08:31:37 +0000 (UTC) Delivered-To: current@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 57BEDCC2956 for ; Fri, 27 Jan 2017 08:31:37 +0000 (UTC) (envelope-from truckman@FreeBSD.org) Received: from gw.catspoiler.org (unknown [IPv6:2602:304:b010:ef20::f2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "gw.catspoiler.org", Issuer "gw.catspoiler.org" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 198CE1377 for ; Fri, 27 Jan 2017 08:31:37 +0000 (UTC) (envelope-from truckman@FreeBSD.org) Received: from FreeBSD.org (mousie.catspoiler.org [192.168.101.2]) by gw.catspoiler.org (8.15.2/8.15.2) with ESMTP id v0R8VUsC018788 for ; Fri, 27 Jan 2017 00:31:34 -0800 (PST) (envelope-from truckman@FreeBSD.org) Message-Id: <201701270831.v0R8VUsC018788@gw.catspoiler.org> Date: Fri, 27 Jan 2017 00:31:30 -0800 (PST) From: Don Lewis Subject: malloc() call somehow calling the rtld malloc() implementaion To: current@FreeBSD.org MIME-Version: 1.0 Content-Type: TEXT/plain; charset=us-ascii X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 27 Jan 2017 08:31:37 -0000 I've been attempting to get OpenOffice to build properly in a clang400-import poudriere jail and have run into a mystery. The build procedure creates a c++ executable "idlc", which is used to build other stuff. The new operator has been overrriden to call a custom memory allocator, which I have configured to call the system version of malloc(). At some point idlc crashes because it has allocated a 16 byte structure and the compiler is using "movaps %xmm0,(%rax)" to initialize it, which requires 16 byte alignment. Unfortunately this structure is only 8 byte aligned, causing a bus error. This shouldn't be happening because our system malloc() always seems to do the proper alignment. It appears that intead of calling the version of malloc() in libc, the simple version of malloc() built into rtld is being called instead. GNU gdb 6.1.1 [FreeBSD] Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "amd64-marcel-freebsd"... (gdb) break main Breakpoint 1 at 0x43b1f6: file idlcmain.cxx, line 34. (gdb) run @/tmp/r Starting program: /wrkdirs/usr/ports/editors/openoffice-devel/work/aoo-4.2.0/main/solver/420/unxfbsdx.pro/bin/idlc @/tmp/r [New LWP 101304] [New Thread 802616000 (LWP 101304/idlc)] [Switching to Thread 802616000 (LWP 101304/idlc)] Breakpoint 1, main (argc=2, argv=0x7fffffffb278) at idlcmain.cxx:34 34 SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv) (gdb) break malloc Breakpoint 2 at 0x8006a5f01: file /var/poudriere/jails/clang400amd64/usr/src/libexec/rtld-elf/malloc.c, line 163. (gdb) cont Continuing. Trace 12474/1: "Min Prioriy for policy '2' == '0' " Trace 12474/1: "Max Prioriy for policy '2' == '103' " /wrkdirs/usr/ports/editors/openoffice-devel/work/aoo-4.2.0/main/solver/420/unxfbsdx.pro/bin/idlc: compiling 1 source files ... Compiling: /wrkdirs/usr/ports/editors/openoffice-devel/work/aoo-4.2.0/main/offapi/com/sun/star/i18n/KParseTokens.idl Breakpoint 2, malloc (nbytes=343) at /var/poudriere/jails/clang400amd64/usr/src/libexec/rtld-elf/malloc.c:163 163 /var/poudriere/jails/clang400amd64/usr/src/libexec/rtld-elf/malloc.c: No such file or directory. in /var/poudriere/jails/clang400amd64/usr/src/libexec/rtld-elf/malloc.c Current language: auto; currently minimal (gdb) cont Continuing. Breakpoint 2, malloc (nbytes=32) at /var/poudriere/jails/clang400amd64/usr/src/libexec/rtld-elf/malloc.c:163 163 in /var/poudriere/jails/clang400amd64/usr/src/libexec/rtld-elf/malloc.c (gdb) cont Continuing. Trace 13112/2: "ChildStatusProc : starting '/wrkdirs/usr/ports/editors/openoffice-devel/work/aoo-4.2.0/main/solver/420/unxfbsdx.pro/bin/ucpp'" [New Thread 802616500 (LWP 100249/idlc)] [Switching to Thread 802616500 (LWP 100249/idlc)] Breakpoint 2, malloc (nbytes=19) at /var/poudriere/jails/clang400amd64/usr/src/libexec/rtld-elf/malloc.c:163 163 in /var/poudriere/jails/clang400amd64/usr/src/libexec/rtld-elf/malloc.c (gdb) cont Continuing. Breakpoint 2, malloc (nbytes=34) at /var/poudriere/jails/clang400amd64/usr/src/libexec/rtld-elf/malloc.c:163 163 in /var/poudriere/jails/clang400amd64/usr/src/libexec/rtld-elf/malloc.c (gdb) cont Continuing. Breakpoint 2, malloc (nbytes=16) at /var/poudriere/jails/clang400amd64/usr/src/libexec/rtld-elf/malloc.c:163 163 in /var/poudriere/jails/clang400amd64/usr/src/libexec/rtld-elf/malloc.c (gdb) cont Continuing. Breakpoint 2, malloc (nbytes=16) at /var/poudriere/jails/clang400amd64/usr/src/libexec/rtld-elf/malloc.c:163 163 in /var/poudriere/jails/clang400amd64/usr/src/libexec/rtld-elf/malloc.c (gdb) cont Continuing. Breakpoint 2, malloc (nbytes=16) at /var/poudriere/jails/clang400amd64/usr/src/libexec/rtld-elf/malloc.c:163 163 in /var/poudriere/jails/clang400amd64/usr/src/libexec/rtld-elf/malloc.c (gdb) cont Continuing. Breakpoint 2, malloc (nbytes=16) at /var/poudriere/jails/clang400amd64/usr/src/libexec/rtld-elf/malloc.c:163 163 in /var/poudriere/jails/clang400amd64/usr/src/libexec/rtld-elf/malloc.c (gdb) cont Continuing. sizeof(AstExprValue)=16 Program received signal SIGBUS, Bus error. [Switching to Thread 802616000 (LWP 101304/idlc)] 0x0000000000478cc2 in AstExpression::eval_bit_op (this=0x802633dc8, ek=EK_const) at astexpression.cxx:1001 1001 std::auto_ptr< AstExprValue > retval(new AstExprValue()); idlc is linked to libc.so: /wrkdirs/usr/ports/editors/openoffice-devel/work/aoo-4.2.0/main/solver/420/unxfbsdx.pro/bin/idlc: libreg.so.3 => /wrkdirs/usr/ports/editors/openoffice-devel/work/aoo-4.2.0/main/solver/420/unxfbsdx.pro/lib/libreg.so.3 (0x8008b9000) libuno_sal.so.3 => /wrkdirs/usr/ports/editors/openoffice-devel/work/aoo-4.2.0/main/solver/420/unxfbsdx.pro/lib/libuno_sal.so.3 (0x800c00000) libuno_salhelpergcc3.so.3 => /wrkdirs/usr/ports/editors/openoffice-devel/work/aoo-4.2.0/main/solver/420/unxfbsdx.pro/lib/libuno_salhelpergcc3.so.3 (0x801040000) libm.so.5 => /lib/libm.so.5 (0x801244000) libc++.so.1 => /usr/lib/libc++.so.1 (0x80146e000) libcxxrt.so.1 => /lib/libcxxrt.so.1 (0x801735000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x801953000) libthr.so.3 => /lib/libthr.so.3 (0x801b69000) libc.so.7 => /lib/libc.so.7 (0x801d91000) libstore.so.3 => /wrkdirs/usr/ports/editors/openoffice-devel/work/aoo-4.2.0/main/solver/420/unxfbsdx.pro/lib/libstore.so.3 (0x802152000) If I create a simple test program that calls malloc() and set a breakpoint in malloc(), the breakpoint gets set in the rtld version, but the the libc version of malloc is what gets called. What the heck is going on here, and how can I fix it?