Port-arm archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: New jemalloc causes crashes - looking for ideas



Hi,

This patch works around the problem for me:

~~~
diff --git a/libexec/ld.elf_so/arch/arm/rtld_start.S b/libexec/ld.elf_so/arch/arm/rtld_start.S
index 667efe65b20..627f79756cb 100644
--- a/libexec/ld.elf_so/arch/arm/rtld_start.S
+++ b/libexec/ld.elf_so/arch/arm/rtld_start.S
@@ -85,11 +85,21 @@ ARM_ENTRY_NP(_rtld_bind_start)
 	ldr	r0, [lr, #-4]		/* get obj ptr from GOT[1] */
 	mov	r4, ip			/* save GOT location */

+	ands	r2, sp, #4
+	bne	2f
+
 	bl	_rtld_bind		/* Call the binder */

+1:
 	str	r0, [r4]		/* save address in GOT */
 	mov	ip, r0			/* save new address */

 	ldmia	sp!,{r0-r4,sl,fp,lr}	/* restore the stack */
 	RETr(ip)			/* jump to the new address */
+
+2:
+	sub	sp, sp, #4
+	bl	_rtld_bind
+	add	sp, sp, #4
+	b 1b
 END(_rtld_bind_start)
~~~

There seem to be two cases (calling paths?) where sp is correctly
aligned to 8-byte boundaries, and not; a dynamically-linked binary
works only if two cases are handled.

I was going to investigate further, but I've not figured yet what
happens...

Thanks,
rin

On 2025/02/03 20:00, Martin Husemann wrote:
Hey folks,

the switch to newer jemalloc in libc recently makes evbarm (v5) userland
fail with core dumps everywhere.

The minimum alignment (LG_QUANTUM 3, so 2^3 minimal alignement) did not
change.

Can someone educate me how to use the external symbols from in a cross-gdb?
I didn't get that part working, and it also seems to be unhappy with the
core file...

[..]
This GDB was configured as "--host=x86_64-unknown-netbsd10.99 --target=arm--netbsdelf-eabi".
[..]
(gdb) set sysroot /branches/hosts-current/evbearmv5/
(gdb) file /branches/hosts-current/evbearmv5/bin/sh
Reading symbols from /branches/hosts-current/evbearmv5/bin/sh...
(No debugging symbols found in /branches/hosts-current/evbearmv5/bin/sh)
(gdb) target core sh.core
warning: BFD: warning: /tmp/sh.core has a segment extending past end of file
[New process 11128]
Core was generated by `sh'.
Program terminated with signal SIGBUS, Bus error.
#0  0xbbef4f64 in ?? ()
(gdb) bt
#0  0xbbef4f64 in ?? ()
#1  0xbbef5434 in ?? ()
(gdb) x/i 0xbbef4f64
=> 0xbbef4f64:  Cannot access memory at address 0xbbef4f64
(gdb) info reg
r0             0xbbcb557c          3150665084
r1             0xbfffe384          3221218180
r2             0xbbefe548          3153061192
r3             0xbfffe338          3221218104
r4             0xbbee5140          3152957760
r5             0xbfffe33c          3221218108
r6             0x1                 1
r7             0xbfffe384          3221218180
r8             0x0                 0
r9             0x1                 1
r10            0xbfffe338          3221218104
r11            0xbfffe370          3221218160
r12            0x60                96
sp             0xbfffe2c4          0xbfffe2c4
lr             0xbbef5434          3153024052
pc             0xbbef4f64          0xbbef4f64
cpsr           0xa0000010          2684354576

Martin




Home | Main Index | Thread Index | Old Index