diff options
author | kyukhin <kyukhin@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-03-27 09:55:19 +0000 |
---|---|---|
committer | kyukhin <kyukhin@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-03-27 09:55:19 +0000 |
commit | df9f2e40cb3e58ff6490c54473a7779e30206794 (patch) | |
tree | c3f8af07cbeec30831a713ebef2709f7bae7324c /gcc/varasm.c | |
parent | d18af62e3808d9860cf2a36c41367b3b3e8e3fa9 (diff) | |
download | gcc-df9f2e40cb3e58ff6490c54473a7779e30206794.tar.gz |
* gcc/target.def (TARGET_HAS_IFUNC_P): New target hook.
* gcc/doc/tm.texi.in (TARGET_HAS_IFUNC_P): New.
* gcc/doc/tm.texi: Regenerate.
* gcc/targhooks.h (default_has_ifunc_p): New.
* gcc/targhooks.c (default_has_ifunc_p): Ditto.
* gcc/config/linux-protos.h: New file.
* gcc/config/linux-android.h (TARGET_HAS_IFUNC_P): Using version of
this hook for linux which disables support of indirect functions in
android.
* gcc/config/linux-android.c: New file.
* gcc/config/t-linux-android.c: Ditto.
* gcc/config.gcc: Added new object file linux-android.o.
* gcc/config/i386/i386.c (ix86_get_function_versions_dispatcher):
Using TARGET_HAS_IFUNC hook instead of HAVE_GNU_INDIRECT_FUNCTION.
* gcc/varasm.c (do_assemble_alias): Likewise.
* configure.ac: Define HAVE_GNU_INDIRECT_FUNCTION as zero if the target
doesn't support indirect functions.
* configure: Regenerate.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@197156 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/varasm.c')
-rw-r--r-- | gcc/varasm.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/gcc/varasm.c b/gcc/varasm.c index 66481031022..2532d804214 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -5489,14 +5489,15 @@ do_assemble_alias (tree decl, tree target) } if (lookup_attribute ("ifunc", DECL_ATTRIBUTES (decl))) { -#if defined (ASM_OUTPUT_TYPE_DIRECTIVE) && HAVE_GNU_INDIRECT_FUNCTION - ASM_OUTPUT_TYPE_DIRECTIVE - (asm_out_file, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), - IFUNC_ASM_TYPE); -#else - error_at (DECL_SOURCE_LOCATION (decl), - "ifunc is not supported in this configuration"); +#if defined (ASM_OUTPUT_TYPE_DIRECTIVE) + if (targetm.has_ifunc_p ()) + ASM_OUTPUT_TYPE_DIRECTIVE + (asm_out_file, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), + IFUNC_ASM_TYPE); + else #endif + error_at (DECL_SOURCE_LOCATION (decl), + "ifunc is not supported on this target"); } # ifdef ASM_OUTPUT_DEF_FROM_DECLS |