]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
m68k: unify m68k-helpers.S
authorAndreas Schwab <schwab@linux-m68k.org>
Wed, 8 Feb 2012 12:35:36 +0000 (13:35 +0100)
committerAndreas Schwab <schwab@linux-m68k.org>
Wed, 8 Feb 2012 12:35:36 +0000 (13:35 +0100)
ChangeLog.m68k
sysdeps/m68k/coldfire/sysdep.h
sysdeps/m68k/m680x0/sysdep.h
sysdeps/unix/sysv/linux/m68k/coldfire/m68k-helpers.S [deleted file]
sysdeps/unix/sysv/linux/m68k/m68k-helpers.S [moved from sysdeps/unix/sysv/linux/m68k/m680x0/m68k-helpers.S with 98% similarity]

index 54baf63f63bc7a9bd615a60c91de06b6869f2755..78f718fe37175dc4df816197eaebc31ba23b4bc4 100644 (file)
@@ -1,5 +1,11 @@
 2012-02-08  Andreas Schwab  <schwab@linux-m68k.org>
 
+       * sysdeps/m68k/m680x0/sysdep.h (LOAD_GOT): Define.
+       * sysdeps/m68k/coldfire/sysdep.h (LOAD_GOT): Define.
+       * sysdeps/unix/sysv/linux/m68k/coldfire/m68k-helper.S: Remove.
+       * sysdeps/unix/sysv/linux/m68k/m680x0/m68k-helper.S: Remove.
+       * sysdeps/unix/sysv/linux/m68k/m68k-helper.S: New file.
+
        * sysdeps/unix/sysv/linux/m68k/configure.in
        (libc_cv_gcc_unwind_find_fde): Don't set on coldfire.
 
index 37f66d1c7425ded176f35a8f28c215ec35458260..25feee97844bf292012bebcf8946755695e13203 100644 (file)
@@ -1,5 +1,5 @@
 /* Assembler macros for Coldfire.
-   Copyright (C) 1998, 2003, 2010 Free Software Foundation, Inc.
+   Copyright (C) 1998, 2003, 2010, 2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
 # define PCREL_OP(OP, SRC, DST, TMP) \
   move.l &SRC - ., TMP; OP (-8, %pc, TMP), DST
 
+/* Load the address of the GOT into register R.  */
+# define LOAD_GOT(R) \
+  move.l &_GLOBAL_OFFSET_TABLE_@GOTPC, R; \
+  lea (-6, %pc, R), R
+
 #else
 
 /* As above, but PC is the spelling of the PC register.  We need this
index 013bc5eb6634ae120e094edc3322821f97d1c139..ca90e8c03e0c52a4ac6bb78f9e99bec12de4833f 100644 (file)
@@ -1,5 +1,5 @@
 /* Assembler macros for m680x0.
-   Copyright (C) 2010 Free Software Foundation, Inc.
+   Copyright (C) 2010, 2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
 
 /* Perform operation OP with PC-relative SRC as the first operand and
    DST as the second.  TMP is available as a temporary if needed.  */
-#define PCREL_OP(OP, SRC, DST, TMP) \
+# define PCREL_OP(OP, SRC, DST, TMP) \
   OP SRC(%pc), DST
 
+/* Load the address of the GOT into register R.  */
+# define LOAD_GOT(R) \
+  lea _GLOBAL_OFFSET_TABLE_@GOTPC (%pc), R
+
 #else
 
 /* As above, but PC is the spelling of the PC register.  We need this
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/m68k-helpers.S b/sysdeps/unix/sysv/linux/m68k/coldfire/m68k-helpers.S
deleted file mode 100644 (file)
index 91f697b..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-/* Copyright (C) 2010, 2012 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Maxim Kuvyrkov <maxim@codesourcery.com>, 2010.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   In addition to the permissions in the GNU Lesser General Public
-   License, the Free Software Foundation gives you unlimited
-   permission to link the compiled version of this file with other
-   programs, and to distribute those programs without any restriction
-   coming from the use of this file. (The GNU Lesser General Public
-   License restrictions do apply in other respects; for example, they
-   cover modification of the file, and distribution when not linked
-   into another program.)
-
-   Note that people who make modified versions of this file are not
-   obligated to grant this special exception for their modified
-   versions; it is their choice whether to do so. The GNU Lesser
-   General Public License gives permission to release a modified
-   version without this exception; this exception also makes it
-   possible to release a modified version which carries forward this
-   exception.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include <sysdep.h>
-#include <bits/m68k-vdso.h>
-
-       .text
-
-       .hidden __vdso_read_tp_stub
-ENTRY (__vdso_read_tp_stub)
-       move.l  #__NR_get_thread_area, %d0
-       trap    #0
-       move.l  %d0, %a0
-       rts
-END (__vdso_read_tp_stub)
-
-# ifdef SHARED
-/* GCC will emit calls to this routine.  Linux has an
-   equivalent helper function (which clobbers fewer registers than
-   a normal function call) in a vdso; tail call to the
-   helper.  */
-# ifdef IS_IN_rtld
-/* rtld gets a hidden copy of __m68k_read_tp.  */
-       .hidden __m68k_read_tp
-# endif
-ENTRY (__m68k_read_tp)
-       move.l  #_GLOBAL_OFFSET_TABLE_@GOTPC, %a0
-       lea     (-6, %pc, %a0), %a0
-       move.l  M68K_VDSO_SYMBOL (__vdso_read_tp)@GOT(%a0), %a0
-       move.l  (%a0), %a0
-       jmp     (%a0)
-END (__m68k_read_tp)
-
-/* The following two stubs are for macros in atomic.h, they can't
-   clobber anything.  */
-
-       .hidden __vdso_atomic_cmpxchg_32_stub
-ENTRY (__vdso_atomic_cmpxchg_32_stub)
-       move.l  %d2, -(%sp)
-       cfi_adjust_cfa_offset (4)
-       cfi_rel_offset (%d2, 0)
-       move.l  %d0, %d2
-       move.l  #SYS_ify (atomic_cmpxchg_32), %d0
-       trap    #0
-       move.l  (%sp)+, %d2
-       cfi_adjust_cfa_offset (-4)
-       cfi_restore (%d2)
-       rts
-END (__vdso_atomic_cmpxchg_32_stub)
-
-       .hidden __vdso_atomic_barrier_stub
-ENTRY (__vdso_atomic_barrier_stub)
-       move.l  %d0, -(%sp)
-       cfi_adjust_cfa_offset (4)
-       move.l  #SYS_ify (atomic_barrier), %d0
-       trap    #0
-       move.l  (%sp)+, %d0
-       cfi_adjust_cfa_offset (-4)
-       rts
-END (__vdso_atomic_barrier_stub)
-# else /* !SHARED */
-/* If the vDSO is not available, use a syscall to get TP.  */
-       strong_alias (__vdso_read_tp_stub, __m68k_read_tp)
-# endif /* SHARED */
similarity index 98%
rename from sysdeps/unix/sysv/linux/m68k/m680x0/m68k-helpers.S
rename to sysdeps/unix/sysv/linux/m68k/m68k-helpers.S
index 46e117633e85712e5f2768d0c0be45f78bac21e6..4a475b19700c71fbfcdec2ad5908c80c9da87994 100644 (file)
@@ -57,9 +57,10 @@ END (__vdso_read_tp_stub)
        .hidden __m68k_read_tp
 # endif
 ENTRY (__m68k_read_tp)
-       lea     _GLOBAL_OFFSET_TABLE_@GOTPC(%pc), %a0
+       LOAD_GOT (%a0)
        move.l  M68K_VDSO_SYMBOL (__vdso_read_tp)@GOT(%a0), %a0
-       jmp     ([%a0])
+       move.l  (%a0), %a0
+       jmp     (%a0)
 END (__m68k_read_tp)
 
 /* The following two stubs are for macros in atomic.h, they can't