return
}
-if {[dap_initialize] == ""} {
- return
+save_vars { env(ASAN_OPTIONS) } {
+ # The request readMemory with count 18446744073709551615 triggers address
+ # sanitizer. Suppress the error, leaving us with just this warning:
+ # WARNING: AddressSanitizer failed to allocate 0xffffffffffffffff bytes
+ set_sanitizer ASAN_OPTIONS allocator_may_return_null 1
+
+ if {[dap_initialize] == ""} {
+ return
+ }
}
set line [gdb_get_line_number "BREAK"]
}
# Start with a fresh gdb.
-clean_restart ${testfile}
+save_vars { env(ASAN_OPTIONS) } {
+ # The call to gdb.selected_inferior().read_memory (0, 0xffffffffffffffff)
+ # triggers address sanitizer. Suppress the error, leaving us with just
+ # this warning:
+ # WARNING: AddressSanitizer failed to allocate 0xffffffffffffffff bytes
+ set_sanitizer ASAN_OPTIONS allocator_may_return_null 1
+
+ clean_restart ${testfile}
+}
switch [get_endianness] {
little { set python_pack_char "<" }
}
}
-# Add VAR_ID=VAL to ENV_VAR, unless ENV_VAR already contains a VAR_ID setting.
+# Helper function for set_sanitizer/set_sanitizer_default.
-proc set_sanitizer_default { env_var var_id val } {
+proc set_sanitizer_1 { env_var var_id val default} {
global env
if { ![info exists env($env_var) ]
return
}
- if { [regexp $var_id= $env($env_var)] } {
+ if { $default && [regexp $var_id= $env($env_var)] } {
# Don't set var_id. It's already set by the user, leave as is.
# Note that we could probably get the same result by unconditionally
# prepending it, but this way is less likely to cause confusion.
append env($env_var) : $var_id=$val
}
+# Add VAR_ID=VAL to ENV_VAR.
+
+proc set_sanitizer { env_var var_id val } {
+ set_sanitizer_1 $env_var $var_id $val 0
+}
+
+# Add VAR_ID=VAL to ENV_VAR, unless ENV_VAR already contains a VAR_ID setting.
+
+proc set_sanitizer_default { env_var var_id val } {
+ set_sanitizer_1 $env_var $var_id $val 1
+}
+
set_sanitizer_default TSAN_OPTIONS suppressions \
$srcdir/../tsan-suppressions.txt