Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 3 Jun 2013 07:50:31 -0700
From:      Marcel Moolenaar <marcel@xcllnt.net>
To:        Dimitry Andric <dim@FreeBSD.org>
Cc:        svn-src-head@freebsd.org, svn-src-all@freebsd.org, Marcel Moolenaar <marcel@FreeBSD.org>, src-committers@freebsd.org
Subject:   Re: svn commit: r250991 - in head: contrib/jemalloc/include/jemalloc include lib/libc/stdlib/jemalloc
Message-ID:  <DC0C5FC7-C9A2-4158-9560-501B96B0E5C2@xcllnt.net>
In-Reply-To: <51AC9933.7050201@FreeBSD.org>
References:  <201305251859.r4PIxChc053341@svn.freebsd.org> <51AC9933.7050201@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help

On Jun 3, 2013, at 6:25 AM, Dimitry Andric <dim@FreeBSD.org> wrote:

> On 2013-05-25 20:59, Marcel Moolenaar wrote:
>> Author: marcel
>> Date: Sat May 25 18:59:11 2013
>> New Revision: 250991
>> URL: http://svnweb.freebsd.org/changeset/base/250991
>>=20
>> Log:
>>   Make the malloc(3) family of functions weak and make their non-weak
>>   implementations visible for use by applications. The functions $F =
that
>>   are now weak symbols are:
>>   	allocm, calloc, dallocm, free, malloc, malloc_usable_size,
>>   	nallocm, posix_memalign, rallocm, realloc, sallocm
>>=20
>>   The non-weak implementations of $F are exported as __$F.
>=20
> Hi Marcel,
>=20
> This commit seems to lead to various problems in ports, and possibly
> other software.  For example, with Firefox I now always get a few
> messages like:
>=20
>  firefox in free(): warning: malloc() has never been called
>=20
> Another example is the devel/talloc port, which now dies with:

It looks like the python build is broken. The net effect is that =
_ctypes.so
has a strong definition of malloc, free, et al. This is not intentional,
but a side-effect of the what seems to be a bug in fficonfig.py.in (see
patch below). To elaborate:

_ctypes.so incorporates the libffi functionality for what I presume is
the basis for Python bindings. libffi includes dlmalloc.c, an open =
source
allocator. dlmalloc.c is incuded by closures.c and closures.c defines
USE_DL_PREFIX. On top of that closures.c makes all allocator functions
static. This, by design there's no problem. In short: dlmalloc.c never
gets compiler separately/independently.

The python build however compiles dlmalloc.c separately/independently.
As such, dlmalloc.c now defines and exports malloc et al and it also
get linked into _ctypes.so.

Once _ctypes.so gets dynamically loaded, things start to break.

Unfortunately, this means python needs to be recompiled from ports with
the following fix:

Index: files/patch-Modules-_ctypes-libffi-fficonfig.py.in
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- files/patch-Modules-_ctypes-libffi-fficonfig.py.in	(revision 0)
+++ files/patch-Modules-_ctypes-libffi-fficonfig.py.in	(working copy)
@@ -0,0 +1,10 @@
+--- Modules/_ctypes/libffi/fficonfig.py.in.orig	2013-06-03 =
07:16:44.000000000 -0700
++++ Modules/_ctypes/libffi/fficonfig.py.in	2013-06-03 =
07:17:03.000000000 -0700
+@@ -1,7 +1,6 @@
+ ffi_sources =3D """
+ src/prep_cif.c
+ src/closures.c
+-src/dlmalloc.c
+ """.split()
+=20
+ ffi_platforms =3D {

This has been tested with python-2.7.5. I can't say anything about
other versions.

Do people concur that this is the right fix?

--=20
Marcel Moolenaar
marcel@xcllnt.net





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?DC0C5FC7-C9A2-4158-9560-501B96B0E5C2>