Date: Sun, 25 Jun 2023 09:31:59 +0000 From: bugzilla-noreply@freebsd.org To: ports-bugs@FreeBSD.org Subject: [Bug 272203] git crashes on start in rtld on AArch64 Message-ID: <bug-272203-7788@https.bugs.freebsd.org/bugzilla/>
next in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D272203 Bug ID: 272203 Summary: git crashes on start in rtld on AArch64 Product: Ports & Packages Version: Latest Hardware: arm64 OS: Any Status: New Severity: Affects Some People Priority: --- Component: Individual Port(s) Assignee: garga@FreeBSD.org Reporter: theraven@FreeBSD.org Assignee: garga@FreeBSD.org Flags: maintainer-feedback?(garga@FreeBSD.org) Using the latest package (same behaviour on the version from the stable bra= nch) on AArch64: ``` $ uname -a FreeBSD freebsd 13.2-RELEASE FreeBSD 13.2-RELEASE releng/13.2-n254617-525ecfdad597 GENERIC arm64 $ pkg info git git-2.41.0 Name : git Version : 2.41.0 Installed on : Sat Jun 24 12:14:59 2023 UTC Origin : devel/git Architecture : FreeBSD:13:aarch64 Prefix : /usr/local Categories : devel Licenses : GPLv2 Maintainer : garga@FreeBSD.org WWW : https://git-scm.com/ Comment : Distributed source code management tool Options : CONTRIB : on CURL : on GITWEB : on HTMLDOCS : off ICONV : on NLS : on PCRE2 : on PERL : on SEND_EMAIL : on SUBTREE : on Shared Libs required: libpcre2-8.so.0 libintl.so.8 libexpat.so.1 libcurl.so.4 Annotations : FreeBSD_version: 1301000 cpe : cpe:2.3:a:git-scm:git:2.41.0:::::freebsd13:aarch64 flavor : default repo_type : binary repository : FreeBSD Flat size : 33.4MiB Description : Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficien= cy. WWW: https://git-scm.com/ $ git Bus error (core dumped) $ lldb git (lldb) target create "git" Current executable set to 'git' (aarch64). (lldb) r Process 6542 launched: '/usr/local/bin/git' (aarch64) This version of LLDB has no plugin for the language "assembler". Inspection= of frame variables will be limited. Process 6542 stopped * thread #1, name =3D 'git', stop reason =3D signal SIGBUS: hardware error frame #0: 0x00003dcda641e08c ld-elf.so.1`memset at memset.S:136 (lldb) bt * thread #1, name =3D 'git', stop reason =3D signal SIGBUS: hardware error * frame #0: 0x00003dcda641e08c ld-elf.so.1`memset at memset.S:136 frame #1: 0x00003dcda64188f8 ld-elf.so.1`map_object(fd=3D3, path=3D"/usr/local/lib/libpcre2-8.so.0", sb=3D0x00000000811450e0) at map_object.c:262:3 frame #2: 0x00003dcda64133f8 ld-elf.so.1`load_object [inlined] do_load_object(fd=3D3, name=3D"libpcre2-8.so.0", path=3D<unavailable>, sbp=3D0x00000000811450e0, flags=3D0) at rtld.c:2833:11 frame #3: 0x00003dcda64133a8 ld-elf.so.1`load_object(name=3D"libpcre2-8.so.0", fd_u=3D<unavailable>, refobj=3D<unavailable>, flags=3D0) at rtld.c:2805:11 frame #4: 0x00003dcda640d200 ld-elf.so.1`_rtld [inlined] process_needed(obj=3D0x00000000820ac008, needed=3D0x00000000820a9028, flags= =3D0) at rtld.c:2638:23 frame #5: 0x00003dcda640d1e0 ld-elf.so.1`_rtld [inlined] load_needed_objects(first=3D<unavailable>, flags=3D0) at rtld.c:2659:6 frame #6: 0x00003dcda640d1c0 ld-elf.so.1`_rtld(sp=3D<unavailable>, exit_proc=3D0x0000000081146cc0, objp=3D<unavailable>) at rtld.c:861:9 frame #7: 0x00003dcda640b0d8 ld-elf.so.1`.rtld_start at rtld_start.S:41 (lldb) disas ld-elf.so.1`memset: 0x3dcda641e000 <+0>: dup v0.16b, w1 0x3dcda641e004 <+4>: add x4, x0, x2 0x3dcda641e008 <+8>: cmp x2, #0x60 0x3dcda641e00c <+12>: b.hi 0x3dcda641e084 ; <+132> 0x3dcda641e010 <+16>: cmp x2, #0x10 0x3dcda641e014 <+20>: b.hs 0x3dcda641e054 ; <+84> 0x3dcda641e018 <+24>: mov x1, v0.d[0] 0x3dcda641e01c <+28>: tbz w2, #0x3, 0x3dcda641e030 ; <+48> 0x3dcda641e020 <+32>: str x1, [x0] 0x3dcda641e024 <+36>: stur x1, [x4, #-0x8] 0x3dcda641e028 <+40>: ret=20=20=20=20 0x3dcda641e02c <+44>: nop=20=20=20=20 0x3dcda641e030 <+48>: tbz w2, #0x2, 0x3dcda641e040 ; <+64> 0x3dcda641e034 <+52>: str w1, [x0] 0x3dcda641e038 <+56>: stur w1, [x4, #-0x4] 0x3dcda641e03c <+60>: ret=20=20=20=20 0x3dcda641e040 <+64>: cbz x2, 0x3dcda641e050 ; <+80> 0x3dcda641e044 <+68>: strb w1, [x0] 0x3dcda641e048 <+72>: tbz w2, #0x1, 0x3dcda641e050 ; <+80> 0x3dcda641e04c <+76>: sturh w1, [x4, #-0x2] 0x3dcda641e050 <+80>: ret=20=20=20=20 0x3dcda641e054 <+84>: str q0, [x0] 0x3dcda641e058 <+88>: tbnz w2, #0x6, 0x3dcda641e070 ; <+112> 0x3dcda641e05c <+92>: stur q0, [x4, #-0x10] 0x3dcda641e060 <+96>: tbz w2, #0x5, 0x3dcda641e06c ; <+108> 0x3dcda641e064 <+100>: str q0, [x0, #0x10] 0x3dcda641e068 <+104>: stur q0, [x4, #-0x20] 0x3dcda641e06c <+108>: ret=20=20=20=20 0x3dcda641e070 <+112>: str q0, [x0, #0x10] 0x3dcda641e074 <+116>: stp q0, q0, [x0, #0x20] 0x3dcda641e078 <+120>: stp q0, q0, [x4, #-0x20] 0x3dcda641e07c <+124>: ret=20=20=20=20 0x3dcda641e080 <+128>: nop=20=20=20=20 0x3dcda641e084 <+132>: and w1, w1, #0xff 0x3dcda641e088 <+136>: and x3, x0, #0xfffffffffffffff0 -> 0x3dcda641e08c <+140>: str q0, [x0] 0x3dcda641e090 <+144>: cmp x2, #0x100 (lldb) register read x0 x0 =3D 0x0000000082c1ea40 $ procstat -v 6542 PID START END PRT RES PRES REF SHD FLAG TP = PATH 6542 0x200000 0x2b3000 r-- 179 840 5 1 CN--- vn /usr/local/bin/git 6542 0x2c2000 0x53b000 r-x 633 840 5 1 CN--- vn /usr/local/bin/git 6542 0x54a000 0x54b000 rw- 1 0 1 0 C---- vn /usr/local/bin/git 6542 0x55a000 0x56b000 rw- 17 840 5 1 CN--- vn /usr/local/bin/git 6542 0x56b000 0x592000 rw- 1 1 1 0 ----- df= =20 6542 0x41148000 0x81128000 --- 0 0 0 0 ----- gd= =20 6542 0x81128000 0x81148000 rw- 4 4 1 0 ---D- df= =20 6542 0x820a9000 0x820ca000 rw- 7 7 1 0 ----- df= =20 6542 0x82b48000 0x82b70000 r-- 8 8 5 1 CN--- vn /usr/local/lib/libpcre2-8.so.0.11.2 6542 0x82b70000 0x82b7f000 --- 0 0 0 0 CN--- gd= =20 6542 0x82b7f000 0x82bff000 r-x 0 8 5 1 CN--- vn /usr/local/lib/libpcre2-8.so.0.11.2 6542 0x82bff000 0x82c0e000 --- 0 0 0 0 CN--- gd= =20 6542 0x82c0e000 0x82c0f000 rw- 0 8 5 1 CN--- vn /usr/local/lib/libpcre2-8.so.0.11.2 6542 0x82c0f000 0x82c1e000 --- 0 0 0 0 CN--- gd= =20 6542 0x82c1e000 0x82c1f000 rw- 0 0 1 0 C---- vn /usr/local/lib/libpcre2-8.so.0.11.2 6542 0x83aca000 0x83acb000 r-- 1 8 5 1 CN--- vn /usr/local/lib/libpcre2-8.so.0.11.2 6542 0x3dcda63f5000 0x3dcda63fc000 r-- 7 28 109 51 CN--- vn /libexec/ld-elf.so.1 6542 0x3dcda640b000 0x3dcda6420000 r-x 21 0 1 0 C---- vn /libexec/ld-elf.so.1 6542 0x3dcda642f000 0x3dcda6430000 r-- 1 0 1 0 C---- vn /libexec/ld-elf.so.1 6542 0x3dcda643f000 0x3dcda6440000 rw- 1 0 1 0 C---- vn /libexec/ld-elf.so.1 6542 0x3dcda6440000 0x3dcda6441000 rw- 1 1 1 0 ----- df= =20 6542 0xfffffffff000 0x1000000000000 r-x 1 1 32 0 ----- ph= =20 ``` I don't believe this is a bug in git itself, since it appears to be trigger= ed before any user code runs. If I'm reading the disassembly correctly, it's slightly dubious that the str instruction appears to be using the same regi= ster as the address the address as the value stored. This appears to be from the Linaro string routines, which are [unchanged in CURRENT](https://github.com/freebsd/freebsd-src/blob/main/contrib/arm-optim= ized-routines/string/aarch64/memset.S#L55). I am probably missing some understanding of Arm assembly here, but it at l= east looks like a store that shouldn't fault. The memset appears to be faulting writing into a region that is mapped read-write and the address is strongly aligned and so I'm not sure what's causing the bus error. This is on QEMU with Hypervisor.framework on a M2 MacBook Pro (virtualised AArch64). --=20 You are receiving this mail because: You are the assignee for the bug.=
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-272203-7788>