diff options
-rw-r--r-- | configure.in | 1 | ||||
-rw-r--r-- | include/ruby/defines.h | 3 | ||||
-rw-r--r-- | 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) { |