mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-09 23:00:07 +00:00
ARM: Disable compat mcount code when unneeded.
This commit is contained in:
parent
649ecea212
commit
bc2ba20ae8
@ -1,3 +1,7 @@
|
||||
2014-01-10 Roland McGrath <roland@hack.frob.com>
|
||||
|
||||
* sysdeps/generic/gcc-compat.h: New file.
|
||||
|
||||
2014-01-10 Siddhesh Poyarekar <siddhesh@redhat.com>
|
||||
|
||||
* benchtests/asin-inputs: Correct slow inputs.
|
||||
|
@ -1,3 +1,14 @@
|
||||
2014-01-10 Roland McGrath <roland@hack.frob.com>
|
||||
|
||||
* sysdeps/arm/arm-mcount.S:
|
||||
#include <shlib-compat.h> and <gcc-compat.h>.
|
||||
(_mcount): Renamed to __mcount_arm_compat. Made conditional on
|
||||
[GCC_COMPAT (4, 3) || SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_19)].
|
||||
(_mcount, mcount): Define (as aliases) only under [GCC_COMPAT (4, 3)],
|
||||
with compat_symbol under [SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_19)].
|
||||
|
||||
* sysdeps/arm/gcc-compat.h: New file.
|
||||
|
||||
2014-01-01 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* sysdeps/arm/libm-test-ulps: Regenerated.
|
||||
@ -7,7 +18,9 @@
|
||||
* sysdeps/arm/fegetround.c (fegetround): Use libm_hidden_def.
|
||||
|
||||
2013-11-26 Ondřej Bílka <neleai@seznam.cz>
|
||||
* sysdeps/unix/sysv/linux/arm/bits/shm.h: Use __glibc_reserved instead __unused.
|
||||
|
||||
* sysdeps/unix/sysv/linux/arm/bits/shm.h: Use __glibc_reserved
|
||||
instead of __unused.
|
||||
|
||||
2013-11-22 Roland McGrath <roland@hack.frob.com>
|
||||
|
||||
|
@ -21,6 +21,7 @@
|
||||
|
||||
#include <sysdep.h>
|
||||
|
||||
#undef mcount
|
||||
|
||||
#ifdef __thumb2__
|
||||
.thumb
|
||||
@ -65,10 +66,20 @@ ENTRY(__gnu_mcount_nc)
|
||||
END(__gnu_mcount_nc)
|
||||
|
||||
|
||||
#include <gcc-compat.h>
|
||||
#include <shlib-compat.h>
|
||||
|
||||
/* The new __gnu_mcount_nc entry point was introduced in 4.4, so the
|
||||
static library needs the old one only to support older compilers.
|
||||
Even in a configuration that only cares about newer compilers, the
|
||||
shared library might need it only for strict ABI compatibility. */
|
||||
|
||||
#if GCC_COMPAT (4, 3) || SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_19)
|
||||
|
||||
/* Provide old mcount for backwards compatibility. This requires
|
||||
code be compiled with APCS frame pointers. */
|
||||
|
||||
ENTRY(_mcount)
|
||||
ENTRY(__mcount_arm_compat)
|
||||
push {r0, r1, r2, r3, fp, lr}
|
||||
cfi_adjust_cfa_offset (24)
|
||||
cfi_rel_offset (r0, 0)
|
||||
@ -83,7 +94,7 @@ ENTRY(_mcount)
|
||||
ldrne r0, [\B, #-4]
|
||||
movsne r1, lr
|
||||
blne __mcount_internal
|
||||
#if defined (__ARM_ARCH_4T__) && defined (__THUMB_INTERWORK__)
|
||||
# if defined (__ARM_ARCH_4T__) && defined (__THUMB_INTERWORK__)
|
||||
pop {r0, r1, r2, r3, fp, lr}
|
||||
cfi_adjust_cfa_offset (-24)
|
||||
cfi_restore (r0)
|
||||
@ -93,12 +104,26 @@ ENTRY(_mcount)
|
||||
cfi_restore (fp)
|
||||
cfi_restore (lr)
|
||||
bx lr
|
||||
#else
|
||||
# else
|
||||
pop {r0, r1, r2, r3, fp, pc}
|
||||
# endif
|
||||
END(__mcount_arm_compat)
|
||||
|
||||
#endif
|
||||
END(_mcount)
|
||||
|
||||
#if GCC_COMPAT (4, 3)
|
||||
|
||||
strong_alias (__mcount_arm_compat, _mcount)
|
||||
|
||||
/* The canonical name for the function is `_mcount' in both C and asm,
|
||||
but some old asm code might assume it's `mcount'. */
|
||||
#undef mcount
|
||||
weak_alias (_mcount, mcount)
|
||||
|
||||
#elif SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_19)
|
||||
|
||||
compat_symbol (libc, __mcount_arm_compat, _mcount, GLIBC_2_0)
|
||||
|
||||
strong_alias (__mcount_arm_compat, __mcount_arm_compat_1)
|
||||
compat_symbol (libc, __mcount_arm_compat_1, mcount, GLIBC_2_0)
|
||||
|
||||
#endif
|
||||
|
35
ports/sysdeps/arm/gcc-compat.h
Normal file
35
ports/sysdeps/arm/gcc-compat.h
Normal file
@ -0,0 +1,35 @@
|
||||
/* Macros for checking required GCC compatibility. ARM version.
|
||||
Copyright (C) 2014 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
|
||||
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.
|
||||
|
||||
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, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifndef _ARM_GCC_COMPAT_H
|
||||
#define _ARM_GCC_COMPAT_H 1
|
||||
|
||||
#ifndef GCC_COMPAT_VERSION
|
||||
# ifdef __ARM_PCS_VFP
|
||||
/* The hard-float ABI was first supported in 4.5. */
|
||||
# define GCC_COMPAT_VERSION GCC_VERSION (4, 5)
|
||||
# else
|
||||
/* The EABI configurations (the only ones we handle) were first supported
|
||||
in 4.1. */
|
||||
# define GCC_COMPAT_VERSION GCC_VERSION (4, 1)
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include_next <gcc-compat.h>
|
||||
|
||||
#endif
|
42
sysdeps/generic/gcc-compat.h
Normal file
42
sysdeps/generic/gcc-compat.h
Normal file
@ -0,0 +1,42 @@
|
||||
/* Macros for checking required GCC compatibility. Generic version.
|
||||
Copyright (C) 2014 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
|
||||
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.
|
||||
|
||||
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, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
/* This is the base file. More-specific sysdeps/.../gcc-compat.h files
|
||||
can define GCC_COMPAT_VERSION and then #include_next this file. */
|
||||
|
||||
#ifndef _GENERIC_GCC_COMPAT_H
|
||||
#define _GENERIC_GCC_COMPAT_H 1
|
||||
|
||||
/* This is the macro that gets used in #if tests in code: true iff
|
||||
the library we build must be compatible with user code built by
|
||||
GCC version MAJOR.MINOR. */
|
||||
#define GCC_COMPAT(major, minor) \
|
||||
(GCC_COMPAT_VERSION <= GCC_VERSION (major, minor))
|
||||
|
||||
/* This is how we compose an integer from major and minor version
|
||||
numbers, for comparison. */
|
||||
#define GCC_VERSION(major, minor) \
|
||||
(((major) << 16) + (minor))
|
||||
|
||||
#ifndef GCC_COMPAT_VERSION
|
||||
/* GCC 2.7.2 was current at the time of the glibc-2.0 release.
|
||||
We assume nothing before that ever mattered. */
|
||||
# define GCC_COMPAT_VERSION GCC_VERSION (2, 7)
|
||||
#endif
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user