1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
8c5752de23ac421025032e405ca3168191ae7a33 dynarec breaks rkbin's boot_merger
Attempting box64 bump downstream in https://github.com/NixOS/nixpkgs/pull/326034 showed a build failure for `rkboot`.
[rockchip-linux/rkbin](https://github.com/rockchip-linux/rkbin) has a static x86_64 executable under `/tools/boot_merger` which our build runs via box64 on aarch64.
```
substituteInPlace RKBOOT/*.ini --replace 'PATH=' 'PATH=rkboot/'
mkdir rkboot
for i in $(ls ./RKBOOT/*.ini)
do
# The proprietary, statically linked binaries to perform boot_merge are
# x86_64 only. Though we use box64 to emulate if building on aarch64-linux
/path/to/box64 ./tools/boot_merger "$i" || true
done
mkdir -p $out
if [ -z "$(ls -A rkboot)" ]; then
echo "Error: The 'rkboot' directory is empty."
exit 1
else
mv rkboot $out/bin
fi
```
[(Example of upstream code that mirrors this `boot_merger` usage)](https://github.com/rockchip-linux/rkbin/blob/a2a0b89b6c8c612dca5ed9ed8a68db8a07f68bc0/scripts/checkpatch.sh#L306-L326)
8c5752de23ac421025032e405ca3168191ae7a33 (as present in v0.3.0) made the execution fail to use the argument correctly, even though it shows up in `argv[1]`?
<details>
<summary>Diff over outputs</summary>
```
Running phase: buildPhase Running phase: buildPhase
Dynarec for ARM64, with extension: ASIMD AES CRC32 PMULL SHA1 SHA2sh: lscpu: not foun Dynarec for ARM64, with extension: ASIMD AES CRC32 PMULL SHA1 SHA2sh: lscpu: not foun
sh: lscpu: not found sh: lscpu: not found
PageSize:4096 Running on Unknown CPU with 6 Cores PageSize:4096 Running on Unknown CPU with 6 Cores
Will use Hardware counter measured at 24.0 MHz emulating 3.0 GHz Will use Hardware counter measured at 24.0 MHz emulating 3.0 GHz
Params database has 14 entries Params database has 14 entries
Box64 with Dynarec v0.2.8 nogit built on Jan 1 1980 00:00:00 | Box64 with Dynarec v0.3.0 nogit built on Jan 1 1980 00:00:00
BOX64: Detected 48bits at least of address space BOX64: Detected 48bits at least of address space
Counted 80 Env var Counted 80 Env var
BOX64 LIB PATH: ./:lib/:lib64/:x86_64/:bin64/:libs64/ BOX64 LIB PATH: ./:lib/:lib64/:x86_64/:bin64/:libs64/
BOX64 BIN PATH: ./:bin/:/nix/store/5rfs2mv7aw8yfg0l013lzz2q7zc4ycsf-patchelf-0.15.0/b BOX64 BIN PATH: ./:bin/:/nix/store/5rfs2mv7aw8yfg0l013lzz2q7zc4ycsf-patchelf-0.15.0/b
Looking for ./tools/boot_merger Looking for ./tools/boot_merger
argv[1]="./RKBOOT/PX30MINIALL.ini" argv[1]="./RKBOOT/PX30MINIALL.ini"
Rename process to "boot_merger" Rename process to "boot_merger"
Redirecting overridden malloc from symtab function for /build/source/tools/boot_merge Redirecting overridden malloc from symtab function for /build/source/tools/boot_merge
sh: lscpu: not found sh: lscpu: not found
warning, call to unsupported arch_prctl(0x3001, 0xfffff79fe860) | warning, call to unsupported arch_prctl(0x3001, 0xfffff79fe850)
********boot_merger ver 1.34******** ********boot_merger ver 1.34********
Info:Pack loader ok. | NAME
> boot_merger - Generating loader tool
> SYNOPSIS
> boot_merger pack [...]
> boot_merger unpack [...]
> boot_merger idb [...]
> DESCRIPTION
> This tool can support to pack and unpack format of rk loader
> you can input boot_merger pack to get more help of pack
> you can input boot_merger unpack to get more help of unpack
> you can input boot_merger idb to get more help of idb
```
</details>
<details>
<summary>Bisect log</summary>
```
git bisect start
# Status: warte auf guten und schlechten Commit
# good: [8545d0505f274554561ca30e1839027dd7be783a] Bumped version to v0.2.8
git bisect good 8545d0505f274554561ca30e1839027dd7be783a
# Status: warte auf schlechten Commit, 1 guter Commit bekannt
# bad: [62695ceed4982c3fdf379b65cc4481c3656cd6ac] Bumped version to v0.3.0
git bisect bad 62695ceed4982c3fdf379b65cc4481c3656cd6ac
# good: [537cb65f26afd07cbc2332f0a60c181f5c75c0d7] [ARM64_DYNAREC] Added BMI.0F38 F2, F3/1 opcodes
git bisect good 537cb65f26afd07cbc2332f0a60c181f5c75c0d7
# good: [cbb3126b28d2987fd1c2aeaf963a86ecb1ffcf4b] [COSIM] Improved handling of AVX.66.0F38 3E/2F opcodes
git bisect good cbb3126b28d2987fd1c2aeaf963a86ecb1ffcf4b
# good: [7771a67abebdd09917a3278f2442ff85c730cb0b] Add missing func declarations: `get_first_jump_addr` (#1627)
git bisect good 7771a67abebdd09917a3278f2442ff85c730cb0b
# good: [267bffb0ec2b8afdea35cdc7f2d5983f7cd1566b] [ARM64_DYNAREC] More improvment on YMM handling
git bisect good 267bffb0ec2b8afdea35cdc7f2d5983f7cd1566b
# bad: [d6b9fd2860dc097de8aebf147b3aa6d1741ea550] [VULKAN] Added 1 more extension
git bisect bad d6b9fd2860dc097de8aebf147b3aa6d1741ea550
# bad: [d7e8da632183e6ceece1230710f6dda722d2f8ae] [ARM64_DYNAREC] Fixed reflect cache for ymm0
git bisect bad d7e8da632183e6ceece1230710f6dda722d2f8ae
# bad: [b4828477794a8e69a96f0ca7991ad0e619d1b2a3] [INTERPRETER] Added 64 66 8D opcode (#1648)
git bisect bad b4828477794a8e69a96f0ca7991ad0e619d1b2a3
# bad: [8c5752de23ac421025032e405ca3168191ae7a33] [ARM64_DYNAREC] Made AVX/AVX2 enabled by default, but only for ARM64 Dynarec configs
git bisect bad 8c5752de23ac421025032e405ca3168191ae7a33
# first bad commit: [8c5752de23ac421025032e405ca3168191ae7a33] [ARM64_DYNAREC] Made AVX/AVX2 enabled by default, but only for ARM64 Dynarec configs
```
</details>
`BOX64_DYNAREC=0` at runtime gets recognised, but it's not enough to work around this. Only works again by rebuilding box64 with `-DARM_DYNAREC=OFF` or reverting 8c5752de23ac421025032e405ca3168191ae7a33. Issue is unresolved on current master.
|