ports/bash4 --enable-static fails
chet.ramey at case.edu
Thu May 10 12:57:04 UTC 2012
On 5/10/12 12:20 AM, Craig Rodrigues wrote:
> Bash is trying to override the malloc() functions in libc with its own
> implementation in lib/malloc/malloc.c .
> I have seen this type of trick before 3rd party code that tries to
> override the libc implementation of malloc() / free() with its own.
> kan@ explained this to me before, but I don't know if I can explain it
> as well as him, because it has to do
> with how static linking works. :)
> Basically, the malloc.o object from bash, *must* have implementations of
> *all* the relevant functions in jemalloc_jemalloc.o in order for
> malloc.o to properly override jemalloc_jemalloc.o.
> If you have something like:
> jemalloc_jemalloc.o (libc) malloc.o (Bash)
> =============== =============
> malloc() malloc()
> free() free()
> the static linker will not be able to replace jemalloc_jemalloc.o from
> libc with malloc.o from Bash,
> because calloc() and realloc() symbols in jemalloc_jemalloc.o (libc)
> do not exist malloc.o (Bash).
> Since the linker can only deal with whole objects (.o files), it will
> try to pull in both
> jemalloc_jemalloc.o and malloc.o when doing static linking.
> I may have got some of the details/explanation wrong, but I have fixed
> something similar
> to this in 3rd party code, when the layout of malloc() functions in
> libc changed between FreeBSD 4 and FreeBSD 6.
This explanation is substantially correct.
> What you need to do is:
> (1) run nm or readelf on jemalloc_jemalloc.o, then run nm or
> readelf on malloc.o
> (2) Look at the symbols in both
> (3) Add the missing symbols to malloc.c in Bash
The bash malloc includes definitions for malloc/free/realloc/calloc/cfree/
valloc/memalign. I'd be interested in knowing what other global symbols
jemalloc exports. I'd also be interested in seeing how someone managed to
compile the bash malloc and leave out realloc.
``The lyf so short, the craft so long to lerne.'' - Chaucer
``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, ITS, CWRU chet at case.edu http://cnswww.cns.cwru.edu/~chet/
More information about the freebsd-current