gobes commented on issue #47229:
URL: https://github.com/apache/arrow/issues/47229#issuecomment-3191238845
Hi, the illegal instruction in pyarrow 21.0.0 also affect two
**march=armv8-a** variants
Contex (freqtrade 2025.7, PYTHON_VERSION="3.13")
### Raspberry Pi 4 Model B Rev 1.4
- CPU **armv8-a/cortex-a72**
- Debian GNU/Linux 12 (bookworm)
- `Linux raspberrypi 6.12.25+rpt-rpi-v8 #1 SMP PREEMPT Debian
1:6.12.25-1+rpt1 (2025-04-30) aarch64 GNU/Linux`
### Nvidia Jetson Nano 4GB dev board
- CPU **armv8-a/cortex-a57**
- Ubuntu 20.04.6 LTS
- `Linux jetson 4.9.337-tegra #1 SMP PREEMPT Mon Nov 4 23:41:41 PST 2024
aarch64 aarch64 aarch64 GNU/Linux`
Any adjustment of -DARROW_SIMD_* define does not help.
Instead, rebuild arrow and pyarrow as bellow solved the illegal instruction
on both platforms:
>
`--build-arg CC="gcc -march=armv8-a -mtune=cortex-a 57 -mno-outline-atomics`
`--build-arg CXX="g++ -march=armv8-a -mtune=cortex-a57 -mno-outline-atomics `
>
`--build-arg CC="gcc -march=armv8-a -mtune=cortex-a72 -mno-outline-atomics`
`--build-arg CXX="g++ -march=armv8-a -mtune=cortex-a72 -mno-outline-atomics`
> Pass extra flags to arrow/cpp/release
`-DMI_USE_LIBATOMIC=ON `
` -DARROW_MIMALLOC=OFF `
> Pass extra flags to pyarrow
`ENV MI_USE_LIBATOMIC=ON`
`ENV DARROW_MIMALLOC=OFF`
**It seems like the illegal instruction is produced by**
> (gdb) x/i $pc
=> 0x7f8d35f6a0 <mi_out_buf_flush+64>: ldaddal x1, x1, [x0]
<details><summary>Full gdb backtrace</summary>
<p>
```shell
gdb on main branch
GNU gdb (Debian 13.1-3) 13.1
Copyright (C) 2023 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "aarch64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from python3...
(No debugging symbols found in python3)
Starting program: /usr/local/bin/python3 -c import\ pyarrow
warning: Error disabling address space randomization: Operation not permitted
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/aarch64-linux-gnu/libthread_db.so.1".
Program received signal SIGILL, Illegal instruction.
0x0000007f836cec4c in _mi_options_init () from
/usr/local/lib/python3.13/site-packages/pyarrow/libarrow.so.2100
(gdb) bt full
#0 0x0000007f836cec4c in _mi_options_init () from
/usr/local/lib/python3.13/site-packages/pyarrow/libarrow.so.2100
No symbol table info available.
#1 0x0000007f836ccfe8 in _mi_auto_process_init () from
/usr/local/lib/python3.13/site-packages/pyarrow/libarrow.so.2100
No symbol table info available.
#2 0x0000007f84aaa448 in call_init (env=0x7fe664f798, argv=0x7fe664f778,
argc=3, l=<optimized out>) at ./elf/dl-init.c:74
j = 0
jm = <optimized out>
addrs = <optimized out>
init_array = <optimized out>
__PRETTY_FUNCTION__ = "call_init"
init_array = <optimized out>
j = <optimized out>
jm = <optimized out>
addrs = <optimized out>
#3 call_init (l=<optimized out>, argc=3, argv=0x7fe664f778,
env=0x7fe664f798) at ./elf/dl-init.c:26
init_array = <optimized out>
__PRETTY_FUNCTION__ = "call_init"
j = <optimized out>
jm = <optimized out>
addrs = <optimized out>
#4 0x0000007f84aaa554 in _dl_init (main_map=0x558e7c00f0, argc=3,
argv=0x7fe664f778, env=0x7fe664f798) at ./elf/dl-init.c:121
preinit_array = 0x0
preinit_array_size = <optimized out>
i = <optimized out>
#5 0x0000007f844aea44 in __GI__dl_catch_exception (exception=0x0,
operate=0x7f84ab0180 <call_dl_init>, args=0x7fe664dc90) at
./elf/dl-error-skeleton.c:182
old = <optimized out>
errcode = 127
c = {exception = 0x7fe664dc90, errcode = 0x7fe664db0c, env =
{{__jmpbuf = {184, 547686815584, 547686866944, 549326216336, 547683136008, 3,
549326223224, 549326223256, 2147483650, 547683780856,
549326215872, 16624411701779815989, 547683754624,
16624411700199746837, 0, 0, 0, 0, 0, 0, 0, 0}, __mask_was_saved = 0,
__saved_mask = {__val = {547682143840, 6053859657349367846, 549326216416,
549326216416, 549326216384, 18446743528248704992,
4596253733475294464, 549326216432, 547682813888, 547675063168, 2, 549326216288,
547686646592, 549326216288, 547686646632, 549326216904}}}}}
old = <optimized out>
#6 0x0000007f84ab03b8 in dl_open_worker (a=a@entry=0x7fe664dec8) at
./elf/dl-open.c:808
init_args = {new = 0x558e7c00f0, argc = 3, argv = 0x7fe664f778, env
= 0x7fe664f798}
args = 0x7fe664dec8
mode = -2147483646
new = 0x558e7c00f0
#7 0x0000007f844ae9ec in __GI__dl_catch_exception (exception=0x7fe664deb0,
operate=0x7f84ab0310 <dl_open_worker>, args=0x7fe664dec8) at
./elf/dl-error-skeleton.c:208
errcode = 127
c = {exception = 0x7fe664deb0, errcode = 0x7fe664dcfc, env =
{{__jmpbuf = {184, 547686815584, 547686866944, 549326216880, 547683136008, 3,
549326223224, 549326223256, 2147483650, 547683780856,
549326216368, 16624411701779815989, 549326216936,
16624411700199746405, 0, 0, 0, 0, 0, 0, 0, 0}, __mask_was_saved = 0,
__saved_mask = {__val = {0, 547685657856, 549326216808, 0, 547681866960,
549326216872, 547674989472, 1, 547674989472, 4583450494,
547677061184, 549326216784, 547686647576, 18446744073709551614, 547674869200,
547686866944}}}}}
old = 0x7fe664df80
#8 0x0000007f84ab075c in _dl_open (file=0x7f83f74dd0
"/usr/local/lib/python3.13/site-packages/pyarrow/lib.cpython-313-aarch64-linux-gnu.so",
mode=-2147483646, caller_dlopen=0x7f84757208, nsid=-2, argc=3,
argv=0x7fe664f778, env=0x7fe664f798) at ./elf/dl-open.c:884
args = {file = 0x7f83f74dd0
"/usr/local/lib/python3.13/site-packages/pyarrow/lib.cpython-313-aarch64-linux-gnu.so",
mode = -2147483646, caller_dlopen = 0x7f84757208, map = 0x558e7c00f0, nsid =
0,
original_global_scope_pending_adds = 0, libc_already_loaded =
true, worker_continue = true, argc = 3, argv = 0x7fe664f778, env = 0x7fe664f798}
exception = {objname = 0x7f84ae1428 "\206\214T\204\177", errstring =
0x1 <error: Cannot access memory at address 0x1>, message_buffer = 0x7f84ae0210
""}
errcode = <optimized out>
__PRETTY_FUNCTION__ = "_dl_open"
--Type <RET> for more, q to quit, c to continue without paging--
#9 0x0000007f843fae54 in dlopen_doit (a=a@entry=0x7fe664e1a8) at
./dlfcn/dlopen.c:56
args = 0x7fe664e1a8
#10 0x0000007f844ae9ec in __GI__dl_catch_exception
(exception=exception@entry=0x7fe664e100, operate=0x7f843fadf0 <dlopen_doit>,
args=0x7fe664e1a8) at ./elf/dl-error-skeleton.c:208
errcode = 127
c = {exception = 0x7fe664e100, errcode = 0x7fe664df7c, env =
{{__jmpbuf = {184, 547686815584, 549326217592, 549326217688, 547686865824,
547675040304, 547686815584, 547674989888, 549326217944,
547683780856, 549326217008, 16624411701779815989,
547686843840, 16624411700199745765, 0, 0, 0, 0, 0, 0, 0, 0}, __mask_was_saved =
0, __saved_mask = {__val = {547686844288, 547674921920,
4596253733475294464, 549326217472, 547681839548,
549326218480, 547686672268, 0, 0, 547674869200, 549326217688, 547686117056,
547675040304, 549326217632, 549326217680, 549326217680}}}}}
old = 0x0
#11 0x0000007f844aeab0 in __GI__dl_catch_error (objname=0x7fe664e178,
errstring=0x7fe664e180, mallocedp=0x7fe664e177, operate=<optimized out>,
args=<optimized out>) at ./elf/dl-error-skeleton.c:227
exception = {objname = 0xfffffffd <error: Cannot access memory at
address 0xfffffffd>, errstring = 0xc8 <error: Cannot access memory at address
0xc8>,
message_buffer = 0x7f843f89f0 <__GI__IO_default_xsputn> "\202\b"}
errorcode = <optimized out>
#12 0x0000007f843fa8e0 in _dlerror_run (operate=operate@entry=0x7f843fadf0
<dlopen_doit>, args=args@entry=0x7fe664e1a8) at ./dlfcn/dlerror.c:138
result = <optimized out>
objname = 0xff0000 <error: Cannot access memory at address 0xff0000>
errstring = 0xf00ffff0000 <error: Cannot access memory at address
0xf00ffff0000>
malloced = 255
errcode = <optimized out>
#13 0x0000007f843faf28 in dlopen_implementation (dl_caller=<optimized out>,
mode=<optimized out>, file=<optimized out>) at ./dlfcn/dlopen.c:71
args = {file = 0x7f83f74dd0
"/usr/local/lib/python3.13/site-packages/pyarrow/lib.cpython-313-aarch64-linux-gnu.so",
mode = 2, new = 0xd81000d3100dd80c, caller = 0x7f84757208}
args = <optimized out>
#14 ___dlopen (file=<optimized out>, mode=<optimized out>) at
./dlfcn/dlopen.c:81
No locals.
#15 0x0000007f84757208 in ?? () from
/usr/local/bin/../lib/libpython3.13.so.1.0
No symbol table info available.
#16 0x0000007f846671d0 in ?? () from
/usr/local/bin/../lib/libpython3.13.so.1.0
No symbol table info available.
#17 0x0000007f84648470 in _PyEval_EvalFrameDefault () from
/usr/local/bin/../lib/libpython3.13.so.1.0
No symbol table info available.
#18 0x0000007f84663f9c in ?? () from
/usr/local/bin/../lib/libpython3.13.so.1.0
No symbol table info available.
#19 0x0000007f84691804 in PyObject_CallMethodObjArgs () from
/usr/local/bin/../lib/libpython3.13.so.1.0
No symbol table info available.
#20 0x0000007f8469055c in PyImport_ImportModuleLevelObject () from
/usr/local/bin/../lib/libpython3.13.so.1.0
No symbol table info available.
#21 0x0000007f8464a04c in _PyEval_EvalFrameDefault () from
/usr/local/bin/../lib/libpython3.13.so.1.0
No symbol table info available.
#22 0x0000007f846f6458 in PyEval_EvalCode () from
/usr/local/bin/../lib/libpython3.13.so.1.0
No symbol table info available.
#23 0x0000007f8471974c in ?? () from
/usr/local/bin/../lib/libpython3.13.so.1.0
No symbol table info available.
#24 0x0000007f8465ec78 in ?? () from
/usr/local/bin/../lib/libpython3.13.so.1.0
No symbol table info available.
#25 0x0000007f84648470 in _PyEval_EvalFrameDefault () from
/usr/local/bin/../lib/libpython3.13.so.1.0
No symbol table info available.
#26 0x0000007f84663f9c in ?? () from
/usr/local/bin/../lib/libpython3.13.so.1.0
No symbol table info available.
#27 0x0000007f84691804 in PyObject_CallMethodObjArgs () from
/usr/local/bin/../lib/libpython3.13.so.1.0
No symbol table info available.
--Type <RET> for more, q to quit, c to continue without paging--
#28 0x0000007f8469055c in PyImport_ImportModuleLevelObject () from
/usr/local/bin/../lib/libpython3.13.so.1.0
No symbol table info available.
#29 0x0000007f8464a04c in _PyEval_EvalFrameDefault () from
/usr/local/bin/../lib/libpython3.13.so.1.0
No symbol table info available.
#30 0x0000007f846f6458 in PyEval_EvalCode () from
/usr/local/bin/../lib/libpython3.13.so.1.0
No symbol table info available.
#31 0x0000007f84755cc4 in ?? () from
/usr/local/bin/../lib/libpython3.13.so.1.0
No symbol table info available.
#32 0x0000007f84751e54 in ?? () from
/usr/local/bin/../lib/libpython3.13.so.1.0
No symbol table info available.
#33 0x0000007f8474b9a8 in ?? () from
/usr/local/bin/../lib/libpython3.13.so.1.0
No symbol table info available.
#34 0x0000007f8474b810 in ?? () from
/usr/local/bin/../lib/libpython3.13.so.1.0
No symbol table info available.
#35 0x0000007f8474986c in Py_RunMain () from
/usr/local/bin/../lib/libpython3.13.so.1.0
No symbol table info available.
#36 0x0000007f846df910 in Py_BytesMain () from
/usr/local/bin/../lib/libpython3.13.so.1.0
No symbol table info available.
#37 0x0000007f843a7740 in __libc_start_call_main
(main=main@entry=0x556b4bc960, argc=argc@entry=3, argv=argv@entry=0x7fe664f778)
at ../sysdeps/nptl/libc_start_call_main.h:58
self = <optimized out>
result = <optimized out>
unwind_buf = {cancel_jmp_buf = {{jmp_buf = {549326223224, 3,
366872477104, 366872349024, 549326223256, 547686865824, 0, 547686866984,
366872477104, 0, 549326222848, 16624411701774532821,
7017564186559734879, 16624411700199735765, 0, 0, 0, 0, 0, 0,
0, 0}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x7f84ae5ba0
<_rtld_global_ro>, 0x7f84520080 <[email protected]>},
data = {prev = 0x0, cleanup = 0x0, canceltype = -2068948064}}}
not_first_call = <optimized out>
#38 0x0000007f843a7818 in __libc_start_main_impl (main=0x556b4bc960, argc=3,
argv=0x7fe664f778, init=<optimized out>, fini=<optimized out>,
rtld_fini=<optimized out>, stack_end=<optimized out>)
at ../csu/libc-start.c:360
No locals.
#39 0x000000556b4bc870 in _start ()
No symbol table info available.
(gdb) disassemble $pc-32,$pc+32
Dump of assembler code from 0x7f836cec2c to 0x7f836cec6c:
0x0000007f836cec2c: nop
0x0000007f836cec30 <_mi_options_init+0>: stp x29, x30, [sp, #-48]!
0x0000007f836cec34 <_mi_options_init+4>: mov x29, sp
0x0000007f836cec38 <_mi_options_init+8>: stp x19, x20, [sp, #16]
0x0000007f836cec3c <_mi_options_init+12>: adrp x20, 0x7f83901000
<_ZZN5arrow8internal13GetRandomSeedEvE8seed_gen+2208>
0x0000007f836cec40 <_mi_options_init+16>: add x0, x20, #0x5f0
0x0000007f836cec44 <_mi_options_init+20>: stp x21, x22, [sp, #32]
0x0000007f836cec48 <_mi_options_init+24>: mov x22, #0x1
// #1
=> 0x0000007f836cec4c <_mi_options_init+28>: ldaddal x22, x22, [x0]
0x0000007f836cec50 <_mi_options_init+32>: cmp x22, #0x4, lsl #12
0x0000007f836cec54 <_mi_options_init+36>: mov x0, #0x4000
// #16384
0x0000007f836cec58 <_mi_options_init+40>: adrp x19, 0x7f83901000
<_ZZN5arrow8internal13GetRandomSeedEvE8seed_gen+2208>
0x0000007f836cec5c <_mi_options_init+44>: csel x22, x22, x0, ls
// ls = plast
0x0000007f836cec60 <_mi_options_init+48>: add x0, x19, #0x630
0x0000007f836cec64 <_mi_options_init+52>: strb wzr, [x0, x22]
0x0000007f836cec68 <_mi_options_init+56>: ldrb w1, [x19, #1584]
End of assembler dump.
(gdb) info registers
x0 0x7f839015f0 547668104688
x1 0x7f84ae5b98 547686865816
x2 0x0 0
x3 0x0 0
x4 0x16db81f9 383484409
x5 0x9873cb36 2557725494
x6 0x177f654a 394224970
x7 0xeae074fe 3940578558
x8 0x7f838fa678 547668076152
x9 0x9fd501d1 2681536977
x10 0x12bdd8f8 314431736
x11 0x197e461e 427705886
x12 0x2e0644f5 772162805
x13 0xa8263ded 2821078509
x14 0x13c87c2 20744130
x15 0xfdf4f1ed 4260688365
x16 0x7f838f2420 547668042784
x17 0x7f84401640 547679639104
x18 0x7fe664d9b0 549326215600
x19 0x7f838fa000 547668074496
x20 0x7f83901000 547668103168
x21 0x7fe664f778 549326223224
x22 0x1 1
x23 0x7f838ba4b0 547667813552
x24 0x0 0
x25 0x0 0
x26 0x7fe664f798 549326223256
x27 0x80000002 2147483650
x28 0x7f847f48f8 547683780856
x29 0x7fe664d9d0 549326215632
x30 0x7f836ccfe8 547665793000
sp 0x7fe664d9d0 0x7fe664d9d0
pc 0x7f836cec4c 0x7f836cec4c <_mi_options_init+28>
cpsr 0x60000000 [ EL=0 BTYPE=0 C Z ]
fpsr 0x10 [ IXC ]
fpcr 0x0 [ Len=0 Stride=0 RMode=0 ]
tpidr 0x7f84ad9760 0x7f84ad9760
tpidr2 0x0 0x0
(gdb) x/i $pc
=> 0x7f836cec4c <_mi_options_init+28>: ldaddal x22, x22, [x0]
```
</p>
</details>
<details><summary>armv8-a/cortex-a72 details </summary>
<p>
```shell
cat /proc/cpuinfo
processor : 0
BogoMIPS : 108.00
Features : fp asimd evtstrm crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part : 0xd08
CPU revision : 3
. . .
Revision : d03114
Serial : 10000000775b6cfe
Model : Raspberry Pi 4 Model B Rev 1.4
lscpu
Architecture: aarch64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Vendor ID: ARM
Model name: Cortex-A72
Model: 3
Thread(s) per core: 1
Core(s) per cluster: 4
Socket(s): -
Cluster(s): 1
Stepping: r0p3
CPU(s) scaling MHz: 100%
CPU max MHz: 1800.0000
CPU min MHz: 600.0000
BogoMIPS: 108.00
Flags: fp asimd evtstrm crc32 cpuid
Caches (sum of all):
L1d: 128 KiB (4 instances)
L1i: 192 KiB (4 instances)
L2: 1 MiB (1 instance)
```
</p>
</details>
<details><summary>armv8-a/cortex-a57 details </summary>
<p>
```shell
lscpu
Architecture: aarch64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 1
Core(s) per socket: 4
Socket(s): 1
Vendor ID: ARM
Model: 1
Model name: Cortex-A57
Stepping: r1p1
CPU max MHz: 1479.0000
CPU min MHz: 102.0000
BogoMIPS: 38.40
L1d cache: 128 KiB
L1i cache: 192 KiB
L2 cache: 2 MiB
Flags: fp asimd evtstrm aes pmull sha1 sha2 crc32
cat /proc/cpuinfo
processor : 0
model name : ARMv8 Processor rev 1 (v8l)
BogoMIPS : 38.40
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x1
CPU part : 0xd07
CPU revision : 1
...
```
</p>
</details>
It seems that both ARMv8.0 variants do not support the pyarrow whell
prebuild arch64 version, and so, without knowing your perspective on supporting
older CPU versions, I wonder if you intend to support them on
https://pypi.org/project/pyarrow/ or it's up to us (consumers) to build it?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]