]> Zhao Yanbai Git Server - minix.git/commitdiff
ldivmod, uldivmod: fix qdivrem calls 18/318/1
authorBen Gras <ben@minix3.org>
Fri, 8 Feb 2013 12:12:45 +0000 (13:12 +0100)
committerBen Gras <ben@minix3.org>
Fri, 8 Feb 2013 13:09:45 +0000 (14:09 +0100)
. ldivmod, uldivmod were passing the modulo argument pointer
  in R4, which is bogus, as qdivrem expects it on the stack as
  per the EABI, causing essentially 'random' memory to be trampled
  by qdivrem. fix by pushing R4 before the call.
. also add these functions to -minc so -lminc clients can be
  linked without -lgcc

Change-Id: I90b0b28b51a188c93da5de6afb108224749ea794

common/lib/libc/arch/arm/quad/__aeabi_ldivmod.S
common/lib/libc/arch/arm/quad/__aeabi_uldivmod.S
lib/libminc/Makefile

index 47de1650a854c1be41d36f7935f01fa3fe8e7531..041ce8558bfbdaed8c5cc5f7d55f8b10f5d6fc45 100644 (file)
@@ -66,7 +66,9 @@ ENTRY(__aeabi_ldivmod)
         */
        sub     sp, sp, #8
        mov     r4, sp          /* pointer to remainder */
+       push    {r4}
        bl      PLT_SYM(__qdivrem)
+       add     sp, sp, #4      /* forget pointer to remainder */
 
        teq     NEG, #0         /* any signs to flip? */
        /*
index bb352157f84a568bc04161e1abd252691e4c885d..12351d133869df949851e08350bee87b32cb3cbd 100644 (file)
@@ -41,7 +41,9 @@ ENTRY(__aeabi_uldivmod)
        push    {r4,lr}
        sub     sp, sp, #8
        mov     r4, sp
+       push    {r4}
        bl      PLT_SYM(__qdivrem)
+       add     sp, sp, #4
        /*
         * The remainder is already on the stack just waiting to be popped
         * into r2/r3.
index e9be11aae90311a4fd3936ad70a9002af83c5afe..442b848be1fa8fdb8c23227da332d5e145b16f83 100644 (file)
@@ -131,6 +131,10 @@ CPPFLAGS.strtol.c+=     -I${LIBCSRCDIR}/../../common/lib/libc/stdlib
 SRCS+= ${i}
 .endfor
 
+.if (${MACHINE_ARCH} == "earm")
+SRCS += __aeabi_ldivmod.S __aeabi_uldivmod.S
+.endif
+
 # Import from locale
 .for i in _def_time.c
 .PATH.c: ${LIBCSRCDIR}/locale