Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 18 Jan 2013 07:29:39 +0200
From:      Konstantin Belousov <kostikbel@gmail.com>
To:        Steve Kiernan <stevek@juniper.net>
Cc:        Jason Evans <jasone@canonware.com>, freebsd-arch@freebsd.org
Subject:   Re: [JNPR] Proposal to add weak symbols for malloc, realloc, and free to libc
Message-ID:  <20130118052939.GV2522@kib.kiev.ua>
In-Reply-To: <20130117232850.1b69bfc0@stevek-ubuntu>
References:  <20130117161311.4c15c7c4@stevek-ubuntu> <E4A1FEFD-B267-422B-8051-443B1F8519E1@canonware.com> <20130117184654.06f8e330@stevek-ubuntu> <20130118040933.GU2522@kib.kiev.ua> <20130117232850.1b69bfc0@stevek-ubuntu>

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

[-- Attachment #1 --]
On Thu, Jan 17, 2013 at 11:28:50PM -0500, Steve Kiernan wrote:
> On Fri, 18 Jan 2013 06:09:33 +0200
> Konstantin Belousov <kostikbel@gmail.com> wrote:
> 
> > On Thu, Jan 17, 2013 at 06:46:54PM -0500, Steve Kiernan wrote:
> > > On Thu, 17 Jan 2013 15:42:19 -0800
> > > Jason Evans <jasone@canonware.com> wrote:
> > > 
> > > > On Jan 17, 2013, at 1:13 PM, Steve Kiernan wrote:
> > > > > When libc was changed to use jemalloc, the weak symbols for malloc, realloc, and free ended up being removed.
> > > > > This makes it a bit difficult for an application to replace (or augment) the malloc implementation.
> > > > > 
> > > > > This proposal is to add back the weak symbols similar to how they existed in libc prior to jemalloc introduction.
> > > > > 
> > > > > See the following patch for the changes:
> > > > > http://people.freebsd.org/~marcel/Juniper/weak-malloc.diff
> > > > > 
> > > > > I'm not sure if the the symbols are in the proper place in the Symbol.map file and would welcome comments.
> > > > 
> > > > What about calloc(), posix_memalign(), and malloc_usable_size()?  Similarly, I think the *allocm() functions in -current may need the same treatment.
> > > 
> > > I think you are correct and those would probably be necessary, as well, yes.
> > > 
> > > It looked like previously, calloc was not made weak because it was implemented in terms of malloc, but since that is not the case in jemalloc, it will need to be addressed.
> > > 
> > > I'll update the patch.
> > 
> > New symbols should be added to the current version, which is FBSD_1.3
> > for the 10.0.
> 
> Okay, great. Thank you for the information.
> 
> > 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.
> 
> 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 = dlopen("libc.so");
 void *(*libc_malloc)(size_t) = 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.

[-- Attachment #2 --]
-----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-----

Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20130118052939.GV2522>