From owner-freebsd-arch@FreeBSD.ORG Fri Jan 18 05:29:48 2013 Return-Path: Delivered-To: freebsd-arch@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id DD497B08 for ; Fri, 18 Jan 2013 05:29:48 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from kib.kiev.ua (kib.kiev.ua [IPv6:2001:470:d5e7:1::1]) by mx1.freebsd.org (Postfix) with ESMTP id 3B790DC7 for ; Fri, 18 Jan 2013 05:29:48 +0000 (UTC) Received: from tom.home (kostik@localhost [127.0.0.1]) by kib.kiev.ua (8.14.6/8.14.6) with ESMTP id r0I5TdQO073910; Fri, 18 Jan 2013 07:29:39 +0200 (EET) (envelope-from kostikbel@gmail.com) DKIM-Filter: OpenDKIM Filter v2.7.4 kib.kiev.ua r0I5TdQO073910 Received: (from kostik@localhost) by tom.home (8.14.6/8.14.6/Submit) id r0I5Td1M073909; Fri, 18 Jan 2013 07:29:39 +0200 (EET) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: tom.home: kostik set sender to kostikbel@gmail.com using -f Date: Fri, 18 Jan 2013 07:29:39 +0200 From: Konstantin Belousov To: Steve Kiernan Subject: Re: [JNPR] Proposal to add weak symbols for malloc, realloc, and free to libc Message-ID: <20130118052939.GV2522@kib.kiev.ua> References: <20130117161311.4c15c7c4@stevek-ubuntu> <20130117184654.06f8e330@stevek-ubuntu> <20130118040933.GU2522@kib.kiev.ua> <20130117232850.1b69bfc0@stevek-ubuntu> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="Pbi2MkfjSbXbI4MN" Content-Disposition: inline In-Reply-To: <20130117232850.1b69bfc0@stevek-ubuntu> User-Agent: Mutt/1.5.21 (2010-09-15) X-Spam-Status: No, score=-2.0 required=5.0 tests=ALL_TRUSTED,BAYES_00, DKIM_ADSP_CUSTOM_MED,FREEMAIL_FROM,NML_ADSP_CUSTOM_MED autolearn=no version=3.3.2 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on tom.home Cc: Jason Evans , freebsd-arch@freebsd.org X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 18 Jan 2013 05:29:48 -0000 --Pbi2MkfjSbXbI4MN Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Thu, Jan 17, 2013 at 11:28:50PM -0500, Steve Kiernan wrote: > On Fri, 18 Jan 2013 06:09:33 +0200 > Konstantin Belousov wrote: >=20 > > On Thu, Jan 17, 2013 at 06:46:54PM -0500, Steve Kiernan wrote: > > > On Thu, 17 Jan 2013 15:42:19 -0800 > > > Jason Evans wrote: > > >=20 > > > > On Jan 17, 2013, at 1:13 PM, Steve Kiernan wrote: > > > > > When libc was changed to use jemalloc, the weak symbols for mallo= c, realloc, and free ended up being removed. > > > > > This makes it a bit difficult for an application to replace (or a= ugment) the malloc implementation. > > > > >=20 > > > > > This proposal is to add back the weak symbols similar to how they= existed in libc prior to jemalloc introduction. > > > > >=20 > > > > > See the following patch for the changes: > > > > > http://people.freebsd.org/~marcel/Juniper/weak-malloc.diff > > > > >=20 > > > > > I'm not sure if the the symbols are in the proper place in the Sy= mbol.map file and would welcome comments. > > > >=20 > > > > What about calloc(), posix_memalign(), and malloc_usable_size()? S= imilarly, I think the *allocm() functions in -current may need the same tre= atment. > > >=20 > > > I think you are correct and those would probably be necessary, as wel= l, yes. > > >=20 > > > It looked like previously, calloc was not made weak because it was im= plemented in terms of malloc, but since that is not the case in jemalloc, i= t will need to be addressed. > > >=20 > > > I'll update the patch. > >=20 > > New symbols should be added to the current version, which is FBSD_1.3 > > for the 10.0. >=20 > Okay, great. Thank you for the information. >=20 > > That said, what are the difficulties you experiencing with the malloc > > interposing ? According to the normal ELF symbol lookup rules, the > > definitions from any object which is loaded before libc overrides the > > libc symbols. >=20 > The problem is when one want to augment the calls. For example, say > you want to do some leak detection or keep track of statistics that > the malloc library does not. One would need to still call the original > call after replacing the malloc/realloc/free/etc. with their own. > Without having the __malloc/__realloc/__free/etc. that _used_ to be > in libc, one cannot do so. Well, the standard technique is to do void *libc_handle =3D dlopen("libc.so"); void *(*libc_malloc)(size_t) =3D dlsym(libc_handle, "malloc"); if you know exactly that you want malloc from libc. If you want just any previous interposer for the malloc, then the right technique is to do dlsym(RTLD_NEXT, "malloc") from your malloc wrapper. Still I think that your patch, with additions noted by Jason, is useful. --Pbi2MkfjSbXbI4MN Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.19 (FreeBSD) iQIcBAEBAgAGBQJQ+N3DAAoJEJDCuSvBvK1BG9oQAJOs5GYCya1p6vp19k3ZgUmn tfC3QNm2olwWsNv4NCUxoJGYPtA2D048UoxaEjgToRcLdwjD2fmj716LkLhQOIei Ugy/HHWmQdaTWZ9gqIh5ZZsneEt5WEGJ0pRmyFLTBco975+SNX4E0RNhJcpirM8t nbqIMNHN26JacWeo+LZFXqgbIOvTJVB9mV2sA+GJ9c96mFC1uwQOk+dOoywnEJ29 WSM+91naZaowEueXSldJu7uORi0Xs1uFeHJZTeKZOsWuW0G2cwSLr4zMszSNvt9o 6/znom+JMWSKQwHZBC+U3FK7VZiEpAWghCb16f7qdXZZ1en0fpX4VtZuERF79C2d 4992Shsyz4D8f7ltuI+z95Pq74Ok8rEphr989CH9xoha5mQZIA1IYAIabuy7Qz7H Eug4yLFhR0VnB1aiD0SzD6BzLvjDc8e4lcAVSqmuw/0jQXb9cpIWzQ1iXEZ65jWu K+oBo1mw1QK6rFYfBPS+fq48qqAnHtGaYQIIPp+xp7HypHIYQGrKt0MzKFYQ0ElQ fX7FJmW4unSfEmoJgJYurLhDuYi2JOD9vdoeLGs/nzcE5lgiPzGdM1kYag8c3Aaz yDI4qCXAqgJV5VMrjObR9tj4TcAxJ6AAO9USZXVIx5NS+DuPi7q1XdXSDnwgIdRZ 9RasAT7Ew/65hIAw2b7C =wUb0 -----END PGP SIGNATURE----- --Pbi2MkfjSbXbI4MN--