diff mbox

[Android] Stop unconditional disabling of ifuncs for Bionic #2

Message ID CACysShi0Xm_HKFJXp8dTR5Twok=twE9JY7eh2jxe+ri0GAEGSw@mail.gmail.com
State New
Headers show

Commit Message

Alexander Ivchenko Dec. 9, 2014, 12:39 p.m. UTC
Hi,

Whether the *linux* target supports ifuncs or not is defined here:

linux_has_ifunc_p (void)
{
  return OPTION_BIONIC ? false : HAVE_GNU_INDIRECT_FUNCTION;
}

Bionic right now supports indirect functions, but there is no way to
notify the compiler about that (For Android OPTION_BIONIC is always on
and so configure time check with --enable-gnu-indirect-function does
not work)

The following patch makes the use of the default version of
TARGET_HAS_IFUNC_P for *linux*, so we can decide whether the Android
target supports indirect functions or not on configure time.

 # undef TARGET_LIBC_HAS_FUNCTION

Is the patch ok? Bootstrapped/regtested on x86_64-unknown-linux-gnu +
checked that the behavior of i686-linux-android is correct.

Alexander

Comments

Jeff Law Dec. 9, 2014, 6:43 p.m. UTC | #1
On 12/09/14 05:39, Alexander Ivchenko wrote:
> Hi,
>
> Whether the *linux* target supports ifuncs or not is defined here:
>
> linux_has_ifunc_p (void)
> {
>    return OPTION_BIONIC ? false : HAVE_GNU_INDIRECT_FUNCTION;
> }
>
> Bionic right now supports indirect functions, but there is no way to
> notify the compiler about that (For Android OPTION_BIONIC is always on
> and so configure time check with --enable-gnu-indirect-function does
> not work)
>
> The following patch makes the use of the default version of
> TARGET_HAS_IFUNC_P for *linux*, so we can decide whether the Android
> target supports indirect functions or not on configure time.
>
> diff --git a/gcc/ChangeLog b/gcc/ChangeLog
> index f22bba8..d4d09d0 100644
> --- a/gcc/ChangeLog
> +++ b/gcc/ChangeLog
> @@ -1,3 +1,8 @@
> +2014-12-08  Alexander Ivchenko  <alexander.ivchenko@intel.com>
> +
> +       * config/linux.c (linux_has_ifunc_p): Remove.
> +       * config/linux.h (TARGET_HAS_IFUNC_P): Use default version.
OK.
jeff
diff mbox

Patch

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f22bba8..d4d09d0 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@ 
+2014-12-08  Alexander Ivchenko  <alexander.ivchenko@intel.com>
+
+       * config/linux.c (linux_has_ifunc_p): Remove.
+       * config/linux.h (TARGET_HAS_IFUNC_P): Use default version.
+
 2014-12-08  Ilya Tocar  <ilya.tocar@intel.com>

        * config/i386/i386.c (ix86_expand_vec_perm_vpermi2): Handle v64qi.
diff --git a/gcc/config/linux.c b/gcc/config/linux.c
index 6242e11..15df213 100644
--- a/gcc/config/linux.c
+++ b/gcc/config/linux.c
@@ -23,14 +23,6 @@  along with GCC; see the file COPYING3.  If not see
 #include "tm.h"
 #include "linux-protos.h"

-/* Android does not support GNU indirect functions.  */
-
-bool
-linux_has_ifunc_p (void)
-{
-  return OPTION_BIONIC ? false : HAVE_GNU_INDIRECT_FUNCTION;
-}
-
 bool
 linux_libc_has_function (enum function_class fn_class)
 {
diff --git a/gcc/config/linux.h b/gcc/config/linux.h
index d38ef81..6ccacff 100644
--- a/gcc/config/linux.h
+++ b/gcc/config/linux.h
@@ -117,10 +117,6 @@  see the files COPYING3 and COPYING.RUNTIME
respectively.  If not, see

 #else /* !uClinux, i.e., normal Linux */

-/* IFUNCs are supported by glibc, but not by uClibc or Bionic.  */
-# undef TARGET_HAS_IFUNC_P
-# define TARGET_HAS_IFUNC_P linux_has_ifunc_p
-
 /* Determine what functions are present at the runtime;
    this includes full c99 runtime and sincos.  */