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.
This commit is contained in:
Nobuyoshi Nakada 2025-03-14 16:24:31 +09:00 committed by Nobuyoshi Nakada
parent f23146f09f
commit 453f88f7f1
Notes: git 2025-03-16 08:34:23 +00:00
4 changed files with 28 additions and 13 deletions

View File

@ -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 */

View File

@ -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 */

15
main.c
View File

@ -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

6
ruby.c
View File

@ -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