
I added some printf debugs to imagetool.c and recompiled with debug symbols:
struct image_type_params *imagetool_get_type(int type) { struct image_type_params **curr; fprintf(stderr, "BEFORE INIT\n"); INIT_SECTION(image_type); + fprintf(stderr, "AFTER INIT\n");
+ fprintf(stderr, "1\n"); struct image_type_params **start = __start_image_type; struct image_type_params **end = __stop_image_type; + fprintf(stderr, "3\n");
for (curr = start; curr != end; curr++) { + fprintf(stderr, "%p\n", curr);
if ((*curr)->check_image_type) { if (!(*curr)->check_image_type(type)) return *curr; } } return NULL; }
% ./mkimage -f aaa bbb BEFORE INIT AFTER INIT 1 3 0x100041e48 zsh: segmentation fault (core dumped) ./mkimage -f aaa bbb
% lldb ./mkimage -c /cores/core.95889 (lldb) target create "./mkimage" --core "/cores/core.95889” ...
(lldb) bt all mkimage was compiled with optimization - stepping may behave oddly; variables may not be available. * thread #1, stop reason = signal SIGSTOP * frame #0: 0x00000001048ec168 mkimage`imagetool_get_type(type=<unavailable>) at imagetool.c:27:8 [opt] frame #1: 0x000000010490c008 mkimage`main(argc=<unavailable>, argv=<unavailable>) at mkimage.c:357:12 [opt] frame #2: 0x000000018c2f5430 libdyld.dylib`start + 4 (lldb) f 0 frame #0: 0x00000001048ec168 mkimage`imagetool_get_type(type=<unavailable>) at imagetool.c:27:8 [opt] 24 for (curr = start; curr != end; curr++) { 25 fprintf(stderr, "%p\n", curr); 26 -> 27 if ((*curr)->check_image_type) { 28 if (!(*curr)->check_image_type(type)) 29 return *curr;
And the most interesting thing, mkimage doesn’t segfault if it is launched under lldb:
% lldb ./mkimage (lldb) target create "./mkimage" Current executable set to '/Volumes/u-boot/tools/mkimage' (arm64). (lldb) r -f aaa bbb Process 95950 launched: '/Volumes/u-boot/tools/mkimage' (arm64) BEFORE INIT AFTER INIT 1 3 0x100041e48 0x100041e50 0x100041e58 sh: dtc: command not found /Volumes/u-boot/tools/mkimage: Can't open bbb.tmp: No such file or directory
On 30 Nov 2021, at 14:49, Sergey V. Lobanov sergey@lobanov.in wrote:
Hello,
I have observed that u-boot mkimage is broken on macos arm64, it generates segfault every time.
Reproducing:
My MacOS environment: % sw_vers ProductName: macOS ProductVersion: 11.6 BuildVersion: 20G165
% uname -s -r -m Darwin 20.6.0 arm64
- Build on macos arm64
% export CPATH=/opt/homebrew/opt/openssl@1.1/include % export LIBRARY_PATH=/opt/homebrew/opt/openssl@1.1/lib % make tools
- Versions
% git log | head -n 1 commit ade37460a944aed36ae6ee634c4d4a9a22690461
% ./mkimage -V mkimage version 2022.01-rc3
- Run
% ./mkimage -f aaa bbb zsh: segmentation fault ./mkimage -f aaa bbb
(Diagnostics related to the segfault attached)
The same story for Mac homebrew’s version:
% mkimage -V mkimage version 2021.10 % mkimage -f aaa bbb zsh: segmentation fault mkimage -f aaa bbb
If do the same on normal Linux host, everything is ok (no segfault):
$ uname -s -r -m Linux 4.19.0-18-amd64 x86_64
$ ./mkimage -V mkimage version 2022.01-rc3
$ ./mkimage -f aaa bbb FATAL ERROR: Couldn't open "aaa": No such file or directory ./mkimage: Can't open bbb.tmp: No such file or directory
<mkimage_2021-11-30-132645_Sergeys-MacBook-Air.crash.txt>