Skip to content

build: big endian ARM builds fail with mimalloc enabled #131675

@vfazio

Description

@vfazio

Bug report

Bug description:

Preface: I'm aware that big-endian ARM is not listed in PEP 11 where it's assumed that binaries are little endian by default.

I wrote an upstream issue to track this as well: microsoft/mimalloc#1046

build log: https://autobuild.buildroot.org/results/26b752738022e8b46e810a08e28d687120e5c4e3/build-end.log

/home/autobuild/autobuild/instance-4/output-1/per-package/python3/host/bin/armeb-buildroot-linux-gnueabi-gcc  -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O3 -Wall -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64  -Ofast -g2 -D_FORTIFY_SOURCE=1   -std=c11 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden  -I./Include/internal -I./Include/internal/mimalloc  -I. -I./Include -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64  -fPIC -DPy_BUILD_CORE_BUILTIN -c ./Modules/_abc.c -o Modules/_abc.o
In file included from ./Include/internal/mimalloc/mimalloc/types.h:24,
                 from ./Include/internal/pycore_mimalloc.h:44,
                 from ./Include/internal/pycore_interp.h:31,
                 from ./Include/internal/pycore_runtime.h:17,
                 from ./Include/internal/pycore_emscripten_trampoline.h:4,
                 from ./Include/internal/pycore_object.h:13,
                 from ./Modules/_abc.c:8:
./Include/internal/mimalloc/mimalloc/atomic.h:83:20: warning: 'mi_atomic_yield' declared 'static' but never defined [-Wunused-function]
   83 | static inline void mi_atomic_yield(void);
      |                    ^~~~~~~~~~~~~~~

This prevents CPython from linking correctly:

/home/autobuild/autobuild/instance-4/output-1/per-package/python3/host/bin/armeb-buildroot-linux-gnueabi-gcc -shared     -Wl,--no-as-needed -o libpython3.so -Wl,-hlibpython3.so libpython3.13.so
/home/autobuild/autobuild/instance-4/output-1/per-package/python3/host/bin/armeb-buildroot-linux-gnueabi-gcc     -Xlinker -export-dynamic -o python Programs/python.o -L. -lpython3.13 -ldl  -lpthread -latomic                          -lm 
/home/autobuild/autobuild/instance-4/output-1/per-package/python3/host/bin/../lib/gcc/armeb-buildroot-linux-gnueabi/13.3.0/../../../../armeb-buildroot-linux-gnueabi/bin/ld: ./libpython3.13.so: undefined reference to `mi_atomic_yield'
collect2: error: ld returned 1 exit status
make[1]: *** [Makefile:1024: python] Error 1

The quick fix may be as simple as changing the __ARM_ARCH__ -> __ARM_ARCH macro reference, but I'm waiting on input from upstream


Workarounds: disable mimalloc

CPython versions tested on:

3.13

Operating systems tested on:

Linux

Linked PRs

Metadata

Metadata

Assignees

No one assigned

    Labels

    OS-unsupportedbuildThe build process and cross-buildinterpreter-core(Objects, Python, Grammar, and Parser dirs)type-bugAn unexpected behavior, bug, or error

    Projects

    Status

    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions