]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
lib1funcs.asm (div0): Call raise instead of making syscalls.
authorDaniel Jacobowitz <dan@codesourcery.com>
Tue, 15 Nov 2005 14:32:13 +0000 (14:32 +0000)
committerDaniel Jacobowitz <drow@gcc.gnu.org>
Tue, 15 Nov 2005 14:32:13 +0000 (14:32 +0000)
* config/arm/lib1funcs.asm (div0) [L_dvmd_lnx]: Call raise instead
of making syscalls.
* config/arm/linux-eabi.h (CLEAR_INSN_CACHE): Define.  Set r7 also.

From-SVN: r107018

gcc/ChangeLog
gcc/config/arm/lib1funcs.asm
gcc/config/arm/linux-eabi.h

index 6515936795c8e9a27ee7e7b8388d8608e97e4745..f2b22fa98a252162d04ba27fd5a08b95082245e0 100644 (file)
@@ -1,3 +1,9 @@
+2005-11-15  Daniel Jacobowitz  <dan@codesourcery.com>
+
+       * config/arm/lib1funcs.asm (div0) [L_dvmd_lnx]: Call raise instead
+       of making syscalls.
+       * config/arm/linux-eabi.h (CLEAR_INSN_CACHE): Define.  Set r7 also.
+
 2005-11-15  Jan Hubicka  <jh@suse.cz>
 
        * invoke.texi (large-unit-insns): Document.
index 364d9fea8048e25fbe566a9342f7e413774fcd84..8494a973bfa6d4947f7acfc8c0f33f36ff977e02 100644 (file)
@@ -989,29 +989,15 @@ LSYM(Lover12):
 #ifdef L_dvmd_lnx
 @ GNU/Linux division-by zero handler.  Used in place of L_dvmd_tls
 
-/* Constants taken from <asm/unistd.h> and <asm/signal.h> */
+/* Constant taken from <asm/signal.h>.  */
 #define SIGFPE 8
-#define __NR_SYSCALL_BASE      0x900000
-#define __NR_getpid                    (__NR_SYSCALL_BASE+ 20)
-#define __NR_kill                      (__NR_SYSCALL_BASE+ 37)
-#define __NR_gettid                    (__NR_SYSCALL_BASE+ 224)
-#define __NR_tkill                     (__NR_SYSCALL_BASE+ 238)
 
        .code   32
        FUNC_START div0
 
        stmfd   sp!, {r1, lr}
-       swi     __NR_gettid
-       cmn     r0, #1000
-       swihs   __NR_getpid
-       cmnhs   r0, #1000
-       RETLDM  r1 hs
-       mov     ip, r0
-       mov     r1, #SIGFPE
-       swi     __NR_tkill
-       movs    r0, r0
-       movne   r0, ip
-       swine   __NR_kill
+       mov     r0, #SIGFPE
+       bl      SYM(raise) __PLT__
        RETLDM  r1
 
        FUNC_END div0
index 62aa6dd10a1492279c6998438244199def8a88cf..6cd0989c8c5a497a117dd38b51eb439d5373e20e 100644 (file)
@@ -1,5 +1,5 @@
 /* Configuration file for ARM GNU/Linux EABI targets.
-   Copyright (C) 2004
+   Copyright (C) 2004, 2005
    Free Software Foundation, Inc.
    Contributed by CodeSourcery, LLC   
 
    non-AAPCS.  */
 #undef WCHAR_TYPE
 #define WCHAR_TYPE (TARGET_AAPCS_BASED ? "unsigned int" : "long int")
+
+/* Clear the instruction cache from `beg' to `end'.  This makes an
+   inline system call to SYS_cacheflush.  It is modified to work with
+   both the original and EABI-only syscall interfaces.  */
+#undef CLEAR_INSN_CACHE
+#define CLEAR_INSN_CACHE(BEG, END)                                     \
+{                                                                      \
+  register unsigned long _beg __asm ("a1") = (unsigned long) (BEG);    \
+  register unsigned long _end __asm ("a2") = (unsigned long) (END);    \
+  register unsigned long _flg __asm ("a3") = 0;                                \
+  register unsigned long _scno __asm ("r7") = 0xf0002;                 \
+  __asm __volatile ("swi 0x9f0002              @ sys_cacheflush"       \
+                   : "=r" (_beg)                                       \
+                   : "0" (_beg), "r" (_end), "r" (_flg), "r" (_scno)); \
+}