[pycrypto] issue with redefine of malloc to rpl_malloc on AIX, also hint re: _LARGE_FILES as a CFLAG define
michael at felt.demon.nl
Sat Oct 15 09:48:48 UTC 2016
Hi - A couple things.
Show stopper was this message: ld: 0711-317 ERROR: Undefined symbol:
The fist thing I find via google:"ld: 0711-317 ERROR: Undefined symbol:
.rpl_malloc AIX" is: https://bugs.launchpad.net/pycrypto/+bug/1321757
and the second starts here:
* The key message for coreutils being:
where he suggests to add an #undef malloc
* Back to the first find - more in your domain: the poster suggests
effectively the same - except I expect src/config.h is generated so it
will never stay.
* re: the command below: -std=c99 is a GCC thing (and every compile has
a warning about an incorrect argument for -t being ignored)
xlc_r -D_LARGE_FILES -std=c99 -O3 -fomit-frame-pointer -Isrc/
-I/opt/include/python2.7 -c src/AES.c -o build/temp.aix-5.3-2.7/src/AES.o
Adding the -bloadmap:xxx.map gives these key lines in the .map output
ld: 0711-318 ERROR: Undefined symbols were found.
The following symbols are in error:
Symbol Inpndx TY CL Source-File(Object-File) OR
RLD: Address Section Rld-type
.rpl_malloc  ER PR
00001d88 .text R_RBR 
00002ae0 .text R_RBR 
Once the #undefine is set one way or another, it builds (outside of pip).
FYI: There are several other errors that occur when _LARGE_FILES is not
defined. (export CFLAGS="-D_LARGE_FILES" takes care of that).
While someone building on AIX should know this and 'fix' it on the
command-line, having it added to the config for AIX would be great.
_LARGE_FLAGS is the 'constuct' or 'define' that IBM established for
ensuring support for LARGE_FILES regardless of the
kernel/application ABI size and predates anything GNU came up with by
several years. As your module is sensitive for this
I recommend you have a way to add it to the flags - because to work -
this should be defined before any other system include files are
read (i.e., they all need to know from the start). Behavior is undefined
when this advice aka rule is not followed.
Also note: extract from ./configure output:
checking for stdlib.h... (cached) yes
checking for GNU libc compatible malloc... no
checking for memmove... yes
checking for memset... yes
configure: creating ./config.status
config.status: creating src/config.h
root at x064:[/data/prj/aixtools/saltstack/pycrypto-2.6.1]grep malloc
/* Define to 1 if your system has a GNU libc compatible `malloc'
/* Define to rpl_malloc if the replacement function should be used. */
#define malloc rpl_malloc
So, it seems the logic for "GNU compatible" is followed (nothing is defined)
but the define malloc rpl_malloc occurs regardless.
More information about the pycrypto