[uClibc 0002454]: Fixing ARM EABI support bug in syscall()

bugs at busybox.net bugs at busybox.net
Fri Apr 11 02:12:05 UTC 2008


A NOTE has been added to this issue. 
====================================================================== 
http://busybox.net/bugs/view.php?id=2454 
====================================================================== 
Reported By:                Joe Lin
Assigned To:                uClibc
====================================================================== 
Project:                    uClibc
Issue ID:                   2454
Category:                   Architecture Specific
Reproducibility:            always
Severity:                   major
Priority:                   normal
Status:                     assigned
====================================================================== 
Date Submitted:             03-06-2008 04:12 PST
Last Modified:              04-10-2008 19:12 PDT
====================================================================== 
Summary:                    Fixing ARM EABI support bug in syscall()
Description: 
When making an EABI syscall() system call, the library does not correctly
pass requesting system number to the Linux kernel.

For example, the ping facility in Busybox will issue a syscall() to get
monotonic time (see monotonic_us() in libbb/time.c). The syscall() in
syscall-eabi.S passes R7 value verbatim. But the kernel (see linux's
vector_swi routine in arch/arm/kernel/entry-common.S) expects R7 a number
without __NR_SYSCALL_BASE.

This bug caused a Segmentation Fault.

Below is the patch.

--------------------------------------------------------------
diff -Naurd uClibc-0.9.29/libc/sysdeps/linux/arm/syscall-eabi.S
uClibc-0.9.29-p1/libc/sysdeps/linux/arm/syscall-eabi.S
--- uClibc-0.9.29/libc/sysdeps/linux/arm/syscall-eabi.S 2006-02-11
12:29:52.000000000 +0800
+++ uClibc-0.9.29-p1/libc/sysdeps/linux/arm/syscall-eabi.S      2008-03-06
19:53:15.000000000 +0800
@@ -29,7 +29,7 @@
 syscall:
        mov     ip, sp
        stmfd   sp!, {r4, r5, r6, r7}
-       mov     r7, r0
+       sub     r7, r0, #SYS_SYSCALL_BASE
        mov     r0, r1
        mov     r1, r2
        mov     r2, r3
--------------------------------------------------------------
====================================================================== 

---------------------------------------------------------------------- 
 khem - 04-09-08 00:07  
---------------------------------------------------------------------- 
is your kernel compiled with AEABI ?
Are you compiling uclibc also with EABI turned on in toolchain ? 

---------------------------------------------------------------------- 
 Joe Lin - 04-09-08 19:22  
---------------------------------------------------------------------- 
Yes, I compiled both kernel and uClibc with EABI turned on. If uClibc was
compiled in OABI, it would go through different path in kernel, which got
no problem. If kernel was not compiled to process EABI executables, EABI
programs would not work. 

---------------------------------------------------------------------- 
 khem - 04-10-08 19:12  
---------------------------------------------------------------------- 
I do not get segmentation fault on using busybox applet ping. 

Issue History 
Date Modified   Username       Field                    Change               
====================================================================== 
03-06-08 04:12  Joe Lin        New Issue                                    
03-06-08 04:12  Joe Lin        Status                   new => assigned     
03-06-08 04:12  Joe Lin        Assigned To               => uClibc          
04-09-08 00:07  khem           Note Added: 0006484                          
04-09-08 19:22  Joe Lin        Note Added: 0006504                          
04-10-08 19:12  khem           Note Added: 0006554                          
======================================================================




More information about the uClibc-cvs mailing list