From ecbe5be43968de534a6587499ef370a169c36c94 Mon Sep 17 00:00:00 2001 From: nobu Date: Tue, 1 Dec 2015 01:05:48 +0000 Subject: configure.in: FUNC_UNOPTIMIZED * configure.in: check if optimize pragma is supported. * include/ruby/defines.h (FUNC_UNOPTIMIZED): fallback definition. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52823 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- configure.in | 1 + include/ruby/defines.h | 3 +++ missing/explicit_bzero.c | 6 ++++-- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/configure.in b/configure.in index 916d93a1b8..2f8d4af02e 100644 --- a/configure.in +++ b/configure.in @@ -1757,6 +1757,7 @@ if_i386=${universal_binary+[defined __i386__]} RUBY_FUNC_ATTRIBUTE(stdcall, [], [], ${if_i386}) RUBY_FUNC_ATTRIBUTE(cdecl, [], [], ${if_i386}) RUBY_FUNC_ATTRIBUTE(fastcall, [], [], ${if_i386}) +RUBY_FUNC_ATTRIBUTE(optimize("O0"), FUNC_UNOPTIMIZED, rb_cv_func_unoptimized) RUBY_FUNC_ATTRIBUTE(optimize("-Os","-fomit-frame-pointer"), FUNC_MINIMIZED, rb_cv_func_minimized) if test "$GCC" = yes; then diff --git a/include/ruby/defines.h b/include/ruby/defines.h index 54a56ff9e6..b4d75294d4 100644 --- a/include/ruby/defines.h +++ b/include/ruby/defines.h @@ -244,6 +244,9 @@ void rb_ia64_flushrs(void); #ifndef FUNC_MINIMIZED #define FUNC_MINIMIZED(x) x #endif +#ifndef FUNC_UNOPTIMIZED +#define FUNC_UNOPTIMIZED(x) x +#endif #ifndef RUBY_ALIAS_FUNCTION_TYPE #define RUBY_ALIAS_FUNCTION_TYPE(type, prot, name, args) \ FUNC_MINIMIZED(type prot) {return (type)name args;} diff --git a/missing/explicit_bzero.c b/missing/explicit_bzero.c index c89bdbc0a8..e7bb11e69f 100644 --- a/missing/explicit_bzero.c +++ b/missing/explicit_bzero.c @@ -12,13 +12,15 @@ * http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1381.pdf */ -#ifdef __GNUC__ -#pragma GCC optimize ("O0") +#ifndef FUNC_UNOPTIMIZED +# define FUNC_UNOPTIMIZED(x) x #endif #ifndef HAVE_EXPLICIT_BZERO /* Similar to bzero(), but have a guarantee not to be eliminated from compiler optimization. */ +FUNC_UNOPTIMIZED(void explicit_bzero(void *b, size_t len)); + void explicit_bzero(void *b, size_t len) { -- cgit v1.2.3