APE programs which require libmp fail to link due to unresolved
mallocz symbol.  Easily solved by providing a local implementation,
but why: it's already there - in an alternative form though:

        cpu% nm /386/lib/ape/libap.a  | grep -i mallocz
        9mallocz.8: T _MALLOCZ
        9mallocz.8: U malloc
        9mallocz.8: U memset

I don't really see the reasons for this rename, yet other APE libs
like libsec follow it:

        cpu% nm /386/lib/ape/libsec.a | grep -i mallocz
        sha2_64.8: U _MALLOCZ
        sha2_128.8: U _MALLOCZ
        rsaalloc.8: U _MALLOCZ
        egalloc.8: U _MALLOCZ
        dsaalloc.8: U _MALLOCZ

And libmp does not:

        cpu% nm /386/lib/ape/libmp.a | grep -i mallocz
        mpaux.8: U mallocz
        mpmul.8: U mallocz

Here's why:

        cpu% grep -ni mallocz /sys/src/ape/lib/*/*.h /sys/src/ape/lib/*/*/*.h 
        /sys/src/ape/lib/9/libc.h:105: extern   void *_MALLOCZ(int, int);
        /sys/src/ape/lib/9/libc.h:132: #define mallocz _MALLOCZ
        /sys/src/ape/lib/draw/libc.h:100: extern        void *_MALLOCZ(int, 
int);
        /sys/src/ape/lib/draw/libc.h:127: #define mallocz _MALLOCZ
        /sys/src/ape/lib/mp/port/libc.h:14: extern      void*   mallocz(ulong, 
int);
        /sys/src/ape/lib/sec/port/libc.h:105: extern    void *_MALLOCZ(int, 
int);
        /sys/src/ape/lib/sec/port/libc.h:132: #define mallocz _MALLOCZ

Note the libmp's one standing out.

A quick fix is to bring up mallocz bits in
/sys/src/ape/lib/mp/port/libc.h into agreement with the rest.

Replacing _MALLOCZ back with mallocz within APE realm seems to me a
better option to consider.

Comments are welcome.


Reply via email to