mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
gc.c: move ASAN check to configure
Availability of attributes are checked in configure these days, rather than compiler macros. Also __attribute__((no_address_safety_analysis)) is considered deprecated in both GCC and Clang. Use the current best practice if available. See also: https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html https://clang.llvm.org/docs/AddressSanitizer.html git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65558 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
ee7af44257
commit
16f5b18b7a
4 changed files with 20 additions and 10 deletions
|
@ -1352,6 +1352,9 @@ RUBY_FUNC_ATTRIBUTE(__deprecated__("by "@%:@n), DEPRECATED_BY(n,x), rb_cv_func_d
|
||||||
RUBY_TYPE_ATTRIBUTE(__deprecated__ mesg, DEPRECATED_TYPE(mesg,x), rb_cv_type_deprecated)
|
RUBY_TYPE_ATTRIBUTE(__deprecated__ mesg, DEPRECATED_TYPE(mesg,x), rb_cv_type_deprecated)
|
||||||
RUBY_FUNC_ATTRIBUTE(__noinline__, NOINLINE)
|
RUBY_FUNC_ATTRIBUTE(__noinline__, NOINLINE)
|
||||||
RUBY_FUNC_ATTRIBUTE(__always_inline__, ALWAYS_INLINE)
|
RUBY_FUNC_ATTRIBUTE(__always_inline__, ALWAYS_INLINE)
|
||||||
|
RUBY_FUNC_ATTRIBUTE(__no_sanitize__(san), NO_SANITIZE(san, x), rb_cv_func_no_sanitize)
|
||||||
|
RUBY_FUNC_ATTRIBUTE(__no_sanitize_address__, NO_SANITIZE_ADDRESS)
|
||||||
|
RUBY_FUNC_ATTRIBUTE(__no_address_safety_analysis__, NO_ADDRESS_SAFETY_ANALYSIS)
|
||||||
RUBY_FUNC_ATTRIBUTE(__warn_unused_result__, WARN_UNUSED_RESULT)
|
RUBY_FUNC_ATTRIBUTE(__warn_unused_result__, WARN_UNUSED_RESULT)
|
||||||
RUBY_FUNC_ATTRIBUTE(__unused__, MAYBE_UNUSED)
|
RUBY_FUNC_ATTRIBUTE(__unused__, MAYBE_UNUSED)
|
||||||
RUBY_FUNC_ATTRIBUTE(__error__ mesg, ERRORFUNC(mesg,x), rb_cv_func___error__)
|
RUBY_FUNC_ATTRIBUTE(__error__ mesg, ERRORFUNC(mesg,x), rb_cv_func___error__)
|
||||||
|
|
12
gc.c
12
gc.c
|
@ -61,16 +61,6 @@
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if /* is ASAN enabled? */ \
|
|
||||||
__has_feature(address_sanitizer) /* Clang */ || \
|
|
||||||
defined(__SANITIZE_ADDRESS__) /* GCC 4.8.x */
|
|
||||||
#define ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS \
|
|
||||||
__attribute__((no_address_safety_analysis)) \
|
|
||||||
__attribute__((noinline))
|
|
||||||
#else
|
|
||||||
#define ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_SYS_TIME_H
|
#ifdef HAVE_SYS_TIME_H
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#endif
|
#endif
|
||||||
|
@ -4158,8 +4148,10 @@ ruby_stack_check(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS
|
ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS
|
||||||
|
(
|
||||||
static void
|
static void
|
||||||
mark_locations_array(rb_objspace_t *objspace, register const VALUE *x, register long n)
|
mark_locations_array(rb_objspace_t *objspace, register const VALUE *x, register long n)
|
||||||
|
)
|
||||||
{
|
{
|
||||||
VALUE v;
|
VALUE v;
|
||||||
while (n--) {
|
while (n--) {
|
||||||
|
|
14
internal.h
14
internal.h
|
@ -54,6 +54,20 @@ extern "C" {
|
||||||
# define WARN_UNUSED_RESULT(x) x
|
# define WARN_UNUSED_RESULT(x) x
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
#elif defined(NO_SANITIZE)
|
||||||
|
# define ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS(x) \
|
||||||
|
NO_SANITIZE("address", NOINLINE(x))
|
||||||
|
#elif defined(NO_SANITIZE_ADDRESS)
|
||||||
|
# define ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS(x) \
|
||||||
|
NO_SANITIZE_ADDRESS(NOINLINE(x))
|
||||||
|
#elif defined(NO_ADDRESS_SAFETY_ANALYSIS)
|
||||||
|
# define ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS(x) \
|
||||||
|
NO_ADDRESS_SAFETY_ANALYSIS(NOINLINE(x))
|
||||||
|
#else
|
||||||
|
# define ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_VALGRIND_MEMCHECK_H
|
#ifdef HAVE_VALGRIND_MEMCHECK_H
|
||||||
# include <valgrind/memcheck.h>
|
# include <valgrind/memcheck.h>
|
||||||
# ifndef VALGRIND_MAKE_MEM_DEFINED
|
# ifndef VALGRIND_MAKE_MEM_DEFINED
|
||||||
|
|
|
@ -29,6 +29,7 @@ ${rbcv_cond+[@%:@define ]attrib[](attrib_params)[ x]}
|
||||||
${rbcv_cond+[@%:@endif]})
|
${rbcv_cond+[@%:@endif]})
|
||||||
$6
|
$6
|
||||||
@%:@define mesg ("")
|
@%:@define mesg ("")
|
||||||
|
@%:@define san "address"
|
||||||
attrib[](attrib_params)[;], [],
|
attrib[](attrib_params)[;], [],
|
||||||
[rbcv="$mac"; break])
|
[rbcv="$mac"; break])
|
||||||
done
|
done
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue