diff options
author | Nobuyoshi Nakada <[email protected]> | 2025-03-14 16:24:31 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <[email protected]> | 2025-03-16 17:33:58 +0900 |
commit | 453f88f7f1c339a5256bc3a2c733610cc3ee965c (patch) | |
tree | d0d83faa8be4886b72ca38695eff3d70c18b1304 | |
parent | f23146f09f3c5d0d9b72d044efa0a544566b4a49 (diff) |
Make ASAN default option string built-in libruby
The content depends on ruby internal, not responsibility of the
caller. Revive `RUBY_GLOBAL_SETUP` macro to define the hook function.
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/12933
-rw-r--r-- | include/ruby/ruby.h | 8 | ||||
-rw-r--r-- | internal/sanitizers.h | 12 | ||||
-rw-r--r-- | main.c | 15 | ||||
-rw-r--r-- | ruby.c | 6 |
4 files changed, 28 insertions, 13 deletions
diff --git a/include/ruby/ruby.h b/include/ruby/ruby.h index 035f02c70b..888ce89169 100644 --- a/include/ruby/ruby.h +++ b/include/ruby/ruby.h @@ -426,6 +426,14 @@ __extension__({ \ # include "ruby/backward.h" #endif +#ifndef RUBY__ASAN_DEFAULT_OPTIONS +# define RUBY__ASAN_DEFAULT_OPTIONS +#endif + +#define RUBY_GLOBAL_SETUP \ + RUBY__ASAN_DEFAULT_OPTIONS \ + /* RUBY_GLOBAL_SETUP end */ + RBIMPL_SYMBOL_EXPORT_END() #endif /* RUBY_RUBY_H */ diff --git a/internal/sanitizers.h b/internal/sanitizers.h index 6a9f80bcc9..279cbbe069 100644 --- a/internal/sanitizers.h +++ b/internal/sanitizers.h @@ -314,5 +314,17 @@ asan_get_fake_stack_extents(void *thread_fake_stack_handle, VALUE slot, return false; } +extern const char ruby_asan_default_options[]; + +#ifdef RUBY_ASAN_ENABLED +/* Compile in the ASAN options Ruby needs, rather than relying on environment variables, so + * that even tests which fork ruby with a clean environment will run ASAN with the right + * settings */ +# undef RUBY__ASAN_DEFAULT_OPTIONS +# define RUBY__ASAN_DEFAULT_OPTIONS \ + RBIMPL_SYMBOL_EXPORT_BEGIN() \ + const char * __asan_default_options(void) {return ruby_asan_default_options;} \ + RBIMPL_SYMBOL_EXPORT_END() +#endif #endif /* INTERNAL_SANITIZERS_H */ @@ -32,6 +32,8 @@ # undef RUBY_DEBUG_ENV #endif +RUBY_GLOBAL_SETUP + static int rb_main(int argc, char **argv) { @@ -64,16 +66,3 @@ main(int argc, char **argv) ruby_sysinit(&argc, &argv); return rb_main(argc, argv); } - -#ifdef RUBY_ASAN_ENABLED -/* Compile in the ASAN options Ruby needs, rather than relying on environment variables, so - * that even tests which fork ruby with a clean environment will run ASAN with the right - * settings */ -RUBY_SYMBOL_EXPORT_BEGIN -const char * -__asan_default_options(void) -{ - return "use_sigaltstack=0:detect_leaks=0"; -} -RUBY_SYMBOL_EXPORT_END -#endif @@ -3188,3 +3188,9 @@ ruby_sysinit(int *argc, char ***argv) } fill_standard_fds(); } + +#ifdef RUBY_ASAN_ENABLED +RUBY_SYMBOL_EXPORT_BEGIN +const char ruby_asan_default_options[] = "use_sigaltstack=0:detect_leaks=0"; +RUBY_SYMBOL_EXPORT_END +#endif |