зеркало из https://github.com/github/ruby.git
Mark asan fake stacks during machine stack marking
ASAN leaves a pointer to the fake frame on the stack; we can use the __asan_addr_is_in_fake_stack API to work out the extent of the fake stack and thus mark any VALUEs contained therein. [Bug #20001]
This commit is contained in:
Родитель
bdafad8790
Коммит
d10bc3a2b8
43
common.mk
43
common.mk
|
@ -2000,6 +2000,7 @@ array.$(OBJEXT): $(top_srcdir)/internal/numeric.h
|
|||
array.$(OBJEXT): $(top_srcdir)/internal/object.h
|
||||
array.$(OBJEXT): $(top_srcdir)/internal/proc.h
|
||||
array.$(OBJEXT): $(top_srcdir)/internal/rational.h
|
||||
array.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
array.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
array.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
array.$(OBJEXT): $(top_srcdir)/internal/variable.h
|
||||
|
@ -2213,6 +2214,7 @@ ast.$(OBJEXT): $(top_srcdir)/internal/numeric.h
|
|||
ast.$(OBJEXT): $(top_srcdir)/internal/parse.h
|
||||
ast.$(OBJEXT): $(top_srcdir)/internal/rational.h
|
||||
ast.$(OBJEXT): $(top_srcdir)/internal/ruby_parser.h
|
||||
ast.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
ast.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
ast.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
ast.$(OBJEXT): $(top_srcdir)/internal/symbol.h
|
||||
|
@ -2648,6 +2650,7 @@ builtin.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
|
|||
builtin.$(OBJEXT): $(top_srcdir)/internal/compilers.h
|
||||
builtin.$(OBJEXT): $(top_srcdir)/internal/gc.h
|
||||
builtin.$(OBJEXT): $(top_srcdir)/internal/imemo.h
|
||||
builtin.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
builtin.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
builtin.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
builtin.$(OBJEXT): $(top_srcdir)/internal/variable.h
|
||||
|
@ -2877,6 +2880,7 @@ class.$(OBJEXT): $(top_srcdir)/internal/gc.h
|
|||
class.$(OBJEXT): $(top_srcdir)/internal/hash.h
|
||||
class.$(OBJEXT): $(top_srcdir)/internal/imemo.h
|
||||
class.$(OBJEXT): $(top_srcdir)/internal/object.h
|
||||
class.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
class.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
class.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
class.$(OBJEXT): $(top_srcdir)/internal/string.h
|
||||
|
@ -3274,6 +3278,7 @@ compile.$(OBJEXT): $(top_srcdir)/internal/object.h
|
|||
compile.$(OBJEXT): $(top_srcdir)/internal/rational.h
|
||||
compile.$(OBJEXT): $(top_srcdir)/internal/re.h
|
||||
compile.$(OBJEXT): $(top_srcdir)/internal/ruby_parser.h
|
||||
compile.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
compile.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
compile.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
compile.$(OBJEXT): $(top_srcdir)/internal/string.h
|
||||
|
@ -3527,6 +3532,7 @@ complex.$(OBJEXT): $(top_srcdir)/internal/math.h
|
|||
complex.$(OBJEXT): $(top_srcdir)/internal/numeric.h
|
||||
complex.$(OBJEXT): $(top_srcdir)/internal/object.h
|
||||
complex.$(OBJEXT): $(top_srcdir)/internal/rational.h
|
||||
complex.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
complex.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
complex.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
complex.$(OBJEXT): $(top_srcdir)/internal/string.h
|
||||
|
@ -3971,6 +3977,7 @@ debug.$(OBJEXT): $(top_srcdir)/internal/class.h
|
|||
debug.$(OBJEXT): $(top_srcdir)/internal/compilers.h
|
||||
debug.$(OBJEXT): $(top_srcdir)/internal/gc.h
|
||||
debug.$(OBJEXT): $(top_srcdir)/internal/imemo.h
|
||||
debug.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
debug.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
debug.$(OBJEXT): $(top_srcdir)/internal/signal.h
|
||||
debug.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
|
@ -4348,6 +4355,7 @@ dir.$(OBJEXT): $(top_srcdir)/internal/gc.h
|
|||
dir.$(OBJEXT): $(top_srcdir)/internal/imemo.h
|
||||
dir.$(OBJEXT): $(top_srcdir)/internal/io.h
|
||||
dir.$(OBJEXT): $(top_srcdir)/internal/object.h
|
||||
dir.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
dir.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
dir.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
dir.$(OBJEXT): $(top_srcdir)/internal/string.h
|
||||
|
@ -6271,6 +6279,7 @@ enumerator.$(OBJEXT): $(top_srcdir)/internal/imemo.h
|
|||
enumerator.$(OBJEXT): $(top_srcdir)/internal/numeric.h
|
||||
enumerator.$(OBJEXT): $(top_srcdir)/internal/range.h
|
||||
enumerator.$(OBJEXT): $(top_srcdir)/internal/rational.h
|
||||
enumerator.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
enumerator.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
enumerator.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
enumerator.$(OBJEXT): $(top_srcdir)/internal/string.h
|
||||
|
@ -6483,6 +6492,7 @@ error.$(OBJEXT): $(top_srcdir)/internal/io.h
|
|||
error.$(OBJEXT): $(top_srcdir)/internal/load.h
|
||||
error.$(OBJEXT): $(top_srcdir)/internal/object.h
|
||||
error.$(OBJEXT): $(top_srcdir)/internal/process.h
|
||||
error.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
error.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
error.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
error.$(OBJEXT): $(top_srcdir)/internal/string.h
|
||||
|
@ -6699,6 +6709,7 @@ eval.$(OBJEXT): $(top_srcdir)/internal/imemo.h
|
|||
eval.$(OBJEXT): $(top_srcdir)/internal/inits.h
|
||||
eval.$(OBJEXT): $(top_srcdir)/internal/io.h
|
||||
eval.$(OBJEXT): $(top_srcdir)/internal/object.h
|
||||
eval.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
eval.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
eval.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
eval.$(OBJEXT): $(top_srcdir)/internal/string.h
|
||||
|
@ -7434,6 +7445,7 @@ goruby.$(OBJEXT): $(top_srcdir)/internal/imemo.h
|
|||
goruby.$(OBJEXT): $(top_srcdir)/internal/numeric.h
|
||||
goruby.$(OBJEXT): $(top_srcdir)/internal/rational.h
|
||||
goruby.$(OBJEXT): $(top_srcdir)/internal/ruby_parser.h
|
||||
goruby.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
goruby.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
goruby.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
goruby.$(OBJEXT): $(top_srcdir)/internal/variable.h
|
||||
|
@ -7670,6 +7682,7 @@ hash.$(OBJEXT): $(top_srcdir)/internal/hash.h
|
|||
hash.$(OBJEXT): $(top_srcdir)/internal/imemo.h
|
||||
hash.$(OBJEXT): $(top_srcdir)/internal/object.h
|
||||
hash.$(OBJEXT): $(top_srcdir)/internal/proc.h
|
||||
hash.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
hash.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
hash.$(OBJEXT): $(top_srcdir)/internal/st.h
|
||||
hash.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
|
@ -8082,6 +8095,7 @@ io.$(OBJEXT): $(top_srcdir)/internal/io.h
|
|||
io.$(OBJEXT): $(top_srcdir)/internal/numeric.h
|
||||
io.$(OBJEXT): $(top_srcdir)/internal/object.h
|
||||
io.$(OBJEXT): $(top_srcdir)/internal/process.h
|
||||
io.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
io.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
io.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
io.$(OBJEXT): $(top_srcdir)/internal/string.h
|
||||
|
@ -8756,6 +8770,7 @@ load.$(OBJEXT): $(top_srcdir)/internal/numeric.h
|
|||
load.$(OBJEXT): $(top_srcdir)/internal/parse.h
|
||||
load.$(OBJEXT): $(top_srcdir)/internal/rational.h
|
||||
load.$(OBJEXT): $(top_srcdir)/internal/ruby_parser.h
|
||||
load.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
load.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
load.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
load.$(OBJEXT): $(top_srcdir)/internal/string.h
|
||||
|
@ -9485,6 +9500,7 @@ marshal.$(OBJEXT): $(top_srcdir)/internal/hash.h
|
|||
marshal.$(OBJEXT): $(top_srcdir)/internal/imemo.h
|
||||
marshal.$(OBJEXT): $(top_srcdir)/internal/numeric.h
|
||||
marshal.$(OBJEXT): $(top_srcdir)/internal/object.h
|
||||
marshal.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
marshal.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
marshal.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
marshal.$(OBJEXT): $(top_srcdir)/internal/string.h
|
||||
|
@ -9869,6 +9885,7 @@ memory_view.$(OBJEXT): $(top_srcdir)/internal/compilers.h
|
|||
memory_view.$(OBJEXT): $(top_srcdir)/internal/gc.h
|
||||
memory_view.$(OBJEXT): $(top_srcdir)/internal/hash.h
|
||||
memory_view.$(OBJEXT): $(top_srcdir)/internal/imemo.h
|
||||
memory_view.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
memory_view.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
memory_view.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
memory_view.$(OBJEXT): $(top_srcdir)/internal/variable.h
|
||||
|
@ -10080,6 +10097,7 @@ miniinit.$(OBJEXT): $(top_srcdir)/internal/imemo.h
|
|||
miniinit.$(OBJEXT): $(top_srcdir)/internal/numeric.h
|
||||
miniinit.$(OBJEXT): $(top_srcdir)/internal/rational.h
|
||||
miniinit.$(OBJEXT): $(top_srcdir)/internal/ruby_parser.h
|
||||
miniinit.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
miniinit.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
miniinit.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
miniinit.$(OBJEXT): $(top_srcdir)/internal/variable.h
|
||||
|
@ -10328,6 +10346,7 @@ node.$(OBJEXT): $(top_srcdir)/internal/compilers.h
|
|||
node.$(OBJEXT): $(top_srcdir)/internal/gc.h
|
||||
node.$(OBJEXT): $(top_srcdir)/internal/hash.h
|
||||
node.$(OBJEXT): $(top_srcdir)/internal/imemo.h
|
||||
node.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
node.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
node.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
node.$(OBJEXT): $(top_srcdir)/internal/variable.h
|
||||
|
@ -10535,6 +10554,7 @@ node_dump.$(OBJEXT): $(top_srcdir)/internal/imemo.h
|
|||
node_dump.$(OBJEXT): $(top_srcdir)/internal/numeric.h
|
||||
node_dump.$(OBJEXT): $(top_srcdir)/internal/rational.h
|
||||
node_dump.$(OBJEXT): $(top_srcdir)/internal/ruby_parser.h
|
||||
node_dump.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
node_dump.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
node_dump.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
node_dump.$(OBJEXT): $(top_srcdir)/internal/variable.h
|
||||
|
@ -10743,6 +10763,7 @@ numeric.$(OBJEXT): $(top_srcdir)/internal/imemo.h
|
|||
numeric.$(OBJEXT): $(top_srcdir)/internal/numeric.h
|
||||
numeric.$(OBJEXT): $(top_srcdir)/internal/object.h
|
||||
numeric.$(OBJEXT): $(top_srcdir)/internal/rational.h
|
||||
numeric.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
numeric.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
numeric.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
numeric.$(OBJEXT): $(top_srcdir)/internal/string.h
|
||||
|
@ -10956,6 +10977,7 @@ object.$(OBJEXT): $(top_srcdir)/internal/imemo.h
|
|||
object.$(OBJEXT): $(top_srcdir)/internal/inits.h
|
||||
object.$(OBJEXT): $(top_srcdir)/internal/numeric.h
|
||||
object.$(OBJEXT): $(top_srcdir)/internal/object.h
|
||||
object.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
object.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
object.$(OBJEXT): $(top_srcdir)/internal/st.h
|
||||
object.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
|
@ -11170,6 +11192,7 @@ pack.$(OBJEXT): $(top_srcdir)/internal/bits.h
|
|||
pack.$(OBJEXT): $(top_srcdir)/internal/compilers.h
|
||||
pack.$(OBJEXT): $(top_srcdir)/internal/gc.h
|
||||
pack.$(OBJEXT): $(top_srcdir)/internal/imemo.h
|
||||
pack.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
pack.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
pack.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
pack.$(OBJEXT): $(top_srcdir)/internal/string.h
|
||||
|
@ -11389,6 +11412,7 @@ parse.$(OBJEXT): $(top_srcdir)/internal/parse.h
|
|||
parse.$(OBJEXT): $(top_srcdir)/internal/rational.h
|
||||
parse.$(OBJEXT): $(top_srcdir)/internal/re.h
|
||||
parse.$(OBJEXT): $(top_srcdir)/internal/ruby_parser.h
|
||||
parse.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
parse.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
parse.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
parse.$(OBJEXT): $(top_srcdir)/internal/string.h
|
||||
|
@ -12641,6 +12665,7 @@ proc.$(OBJEXT): $(top_srcdir)/internal/gc.h
|
|||
proc.$(OBJEXT): $(top_srcdir)/internal/imemo.h
|
||||
proc.$(OBJEXT): $(top_srcdir)/internal/object.h
|
||||
proc.$(OBJEXT): $(top_srcdir)/internal/proc.h
|
||||
proc.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
proc.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
proc.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
proc.$(OBJEXT): $(top_srcdir)/internal/string.h
|
||||
|
@ -12885,6 +12910,7 @@ process.$(OBJEXT): $(top_srcdir)/internal/io.h
|
|||
process.$(OBJEXT): $(top_srcdir)/internal/numeric.h
|
||||
process.$(OBJEXT): $(top_srcdir)/internal/object.h
|
||||
process.$(OBJEXT): $(top_srcdir)/internal/process.h
|
||||
process.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
process.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
process.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
process.$(OBJEXT): $(top_srcdir)/internal/string.h
|
||||
|
@ -13107,6 +13133,7 @@ ractor.$(OBJEXT): $(top_srcdir)/internal/hash.h
|
|||
ractor.$(OBJEXT): $(top_srcdir)/internal/imemo.h
|
||||
ractor.$(OBJEXT): $(top_srcdir)/internal/numeric.h
|
||||
ractor.$(OBJEXT): $(top_srcdir)/internal/rational.h
|
||||
ractor.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
ractor.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
ractor.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
ractor.$(OBJEXT): $(top_srcdir)/internal/string.h
|
||||
|
@ -13729,6 +13756,7 @@ rational.$(OBJEXT): $(top_srcdir)/internal/imemo.h
|
|||
rational.$(OBJEXT): $(top_srcdir)/internal/numeric.h
|
||||
rational.$(OBJEXT): $(top_srcdir)/internal/object.h
|
||||
rational.$(OBJEXT): $(top_srcdir)/internal/rational.h
|
||||
rational.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
rational.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
rational.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
rational.$(OBJEXT): $(top_srcdir)/internal/variable.h
|
||||
|
@ -13935,6 +13963,7 @@ re.$(OBJEXT): $(top_srcdir)/internal/imemo.h
|
|||
re.$(OBJEXT): $(top_srcdir)/internal/object.h
|
||||
re.$(OBJEXT): $(top_srcdir)/internal/ractor.h
|
||||
re.$(OBJEXT): $(top_srcdir)/internal/re.h
|
||||
re.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
re.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
re.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
re.$(OBJEXT): $(top_srcdir)/internal/string.h
|
||||
|
@ -15118,6 +15147,7 @@ rjit.$(OBJEXT): $(top_srcdir)/internal/gc.h
|
|||
rjit.$(OBJEXT): $(top_srcdir)/internal/hash.h
|
||||
rjit.$(OBJEXT): $(top_srcdir)/internal/imemo.h
|
||||
rjit.$(OBJEXT): $(top_srcdir)/internal/process.h
|
||||
rjit.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
rjit.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
rjit.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
rjit.$(OBJEXT): $(top_srcdir)/internal/string.h
|
||||
|
@ -15647,6 +15677,7 @@ ruby.$(OBJEXT): $(top_srcdir)/internal/object.h
|
|||
ruby.$(OBJEXT): $(top_srcdir)/internal/parse.h
|
||||
ruby.$(OBJEXT): $(top_srcdir)/internal/rational.h
|
||||
ruby.$(OBJEXT): $(top_srcdir)/internal/ruby_parser.h
|
||||
ruby.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
ruby.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
ruby.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
ruby.$(OBJEXT): $(top_srcdir)/internal/string.h
|
||||
|
@ -16065,6 +16096,7 @@ scheduler.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
|
|||
scheduler.$(OBJEXT): $(top_srcdir)/internal/compilers.h
|
||||
scheduler.$(OBJEXT): $(top_srcdir)/internal/gc.h
|
||||
scheduler.$(OBJEXT): $(top_srcdir)/internal/imemo.h
|
||||
scheduler.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
scheduler.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
scheduler.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
scheduler.$(OBJEXT): $(top_srcdir)/internal/thread.h
|
||||
|
@ -16429,6 +16461,7 @@ shape.$(OBJEXT): $(top_srcdir)/internal/error.h
|
|||
shape.$(OBJEXT): $(top_srcdir)/internal/gc.h
|
||||
shape.$(OBJEXT): $(top_srcdir)/internal/imemo.h
|
||||
shape.$(OBJEXT): $(top_srcdir)/internal/object.h
|
||||
shape.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
shape.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
shape.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
shape.$(OBJEXT): $(top_srcdir)/internal/string.h
|
||||
|
@ -17645,6 +17678,7 @@ struct.$(OBJEXT): $(top_srcdir)/internal/hash.h
|
|||
struct.$(OBJEXT): $(top_srcdir)/internal/imemo.h
|
||||
struct.$(OBJEXT): $(top_srcdir)/internal/object.h
|
||||
struct.$(OBJEXT): $(top_srcdir)/internal/proc.h
|
||||
struct.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
struct.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
struct.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
struct.$(OBJEXT): $(top_srcdir)/internal/string.h
|
||||
|
@ -17855,6 +17889,7 @@ symbol.$(OBJEXT): $(top_srcdir)/internal/gc.h
|
|||
symbol.$(OBJEXT): $(top_srcdir)/internal/hash.h
|
||||
symbol.$(OBJEXT): $(top_srcdir)/internal/imemo.h
|
||||
symbol.$(OBJEXT): $(top_srcdir)/internal/object.h
|
||||
symbol.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
symbol.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
symbol.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
symbol.$(OBJEXT): $(top_srcdir)/internal/string.h
|
||||
|
@ -18076,6 +18111,7 @@ thread.$(OBJEXT): $(top_srcdir)/internal/imemo.h
|
|||
thread.$(OBJEXT): $(top_srcdir)/internal/io.h
|
||||
thread.$(OBJEXT): $(top_srcdir)/internal/object.h
|
||||
thread.$(OBJEXT): $(top_srcdir)/internal/proc.h
|
||||
thread.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
thread.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
thread.$(OBJEXT): $(top_srcdir)/internal/signal.h
|
||||
thread.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
|
@ -18329,6 +18365,7 @@ time.$(OBJEXT): $(top_srcdir)/internal/hash.h
|
|||
time.$(OBJEXT): $(top_srcdir)/internal/imemo.h
|
||||
time.$(OBJEXT): $(top_srcdir)/internal/numeric.h
|
||||
time.$(OBJEXT): $(top_srcdir)/internal/rational.h
|
||||
time.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
time.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
time.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
time.$(OBJEXT): $(top_srcdir)/internal/string.h
|
||||
|
@ -18892,6 +18929,7 @@ variable.$(OBJEXT): $(top_srcdir)/internal/hash.h
|
|||
variable.$(OBJEXT): $(top_srcdir)/internal/imemo.h
|
||||
variable.$(OBJEXT): $(top_srcdir)/internal/object.h
|
||||
variable.$(OBJEXT): $(top_srcdir)/internal/re.h
|
||||
variable.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
variable.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
variable.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
variable.$(OBJEXT): $(top_srcdir)/internal/string.h
|
||||
|
@ -19104,6 +19142,7 @@ version.$(OBJEXT): $(top_srcdir)/internal/cmdlineopt.h
|
|||
version.$(OBJEXT): $(top_srcdir)/internal/compilers.h
|
||||
version.$(OBJEXT): $(top_srcdir)/internal/gc.h
|
||||
version.$(OBJEXT): $(top_srcdir)/internal/imemo.h
|
||||
version.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
version.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
version.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
version.$(OBJEXT): $(top_srcdir)/internal/variable.h
|
||||
|
@ -19592,6 +19631,7 @@ vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/compilers.h
|
|||
vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/error.h
|
||||
vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/gc.h
|
||||
vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/imemo.h
|
||||
vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/string.h
|
||||
|
@ -19821,6 +19861,7 @@ vm_dump.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
|
|||
vm_dump.$(OBJEXT): $(top_srcdir)/internal/compilers.h
|
||||
vm_dump.$(OBJEXT): $(top_srcdir)/internal/gc.h
|
||||
vm_dump.$(OBJEXT): $(top_srcdir)/internal/imemo.h
|
||||
vm_dump.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
vm_dump.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
vm_dump.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
vm_dump.$(OBJEXT): $(top_srcdir)/internal/variable.h
|
||||
|
@ -20049,6 +20090,7 @@ vm_sync.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
|
|||
vm_sync.$(OBJEXT): $(top_srcdir)/internal/compilers.h
|
||||
vm_sync.$(OBJEXT): $(top_srcdir)/internal/gc.h
|
||||
vm_sync.$(OBJEXT): $(top_srcdir)/internal/imemo.h
|
||||
vm_sync.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
vm_sync.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
vm_sync.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
vm_sync.$(OBJEXT): $(top_srcdir)/internal/thread.h
|
||||
|
@ -20257,6 +20299,7 @@ vm_trace.$(OBJEXT): $(top_srcdir)/internal/compilers.h
|
|||
vm_trace.$(OBJEXT): $(top_srcdir)/internal/gc.h
|
||||
vm_trace.$(OBJEXT): $(top_srcdir)/internal/hash.h
|
||||
vm_trace.$(OBJEXT): $(top_srcdir)/internal/imemo.h
|
||||
vm_trace.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
|
||||
vm_trace.$(OBJEXT): $(top_srcdir)/internal/serial.h
|
||||
vm_trace.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
|
||||
vm_trace.$(OBJEXT): $(top_srcdir)/internal/symbol.h
|
||||
|
|
|
@ -182,6 +182,7 @@ object_tracing.o: $(top_srcdir)/internal/basic_operators.h
|
|||
object_tracing.o: $(top_srcdir)/internal/compilers.h
|
||||
object_tracing.o: $(top_srcdir)/internal/gc.h
|
||||
object_tracing.o: $(top_srcdir)/internal/imemo.h
|
||||
object_tracing.o: $(top_srcdir)/internal/sanitizers.h
|
||||
object_tracing.o: $(top_srcdir)/internal/serial.h
|
||||
object_tracing.o: $(top_srcdir)/internal/static_assert.h
|
||||
object_tracing.o: $(top_srcdir)/internal/vm.h
|
||||
|
|
|
@ -593,6 +593,7 @@ ripper.o: $(top_srcdir)/internal/parse.h
|
|||
ripper.o: $(top_srcdir)/internal/rational.h
|
||||
ripper.o: $(top_srcdir)/internal/re.h
|
||||
ripper.o: $(top_srcdir)/internal/ruby_parser.h
|
||||
ripper.o: $(top_srcdir)/internal/sanitizers.h
|
||||
ripper.o: $(top_srcdir)/internal/serial.h
|
||||
ripper.o: $(top_srcdir)/internal/static_assert.h
|
||||
ripper.o: $(top_srcdir)/internal/string.h
|
||||
|
|
|
@ -199,6 +199,7 @@ ancdata.o: $(top_srcdir)/internal/error.h
|
|||
ancdata.o: $(top_srcdir)/internal/gc.h
|
||||
ancdata.o: $(top_srcdir)/internal/imemo.h
|
||||
ancdata.o: $(top_srcdir)/internal/io.h
|
||||
ancdata.o: $(top_srcdir)/internal/sanitizers.h
|
||||
ancdata.o: $(top_srcdir)/internal/serial.h
|
||||
ancdata.o: $(top_srcdir)/internal/static_assert.h
|
||||
ancdata.o: $(top_srcdir)/internal/string.h
|
||||
|
@ -408,6 +409,7 @@ basicsocket.o: $(top_srcdir)/internal/error.h
|
|||
basicsocket.o: $(top_srcdir)/internal/gc.h
|
||||
basicsocket.o: $(top_srcdir)/internal/imemo.h
|
||||
basicsocket.o: $(top_srcdir)/internal/io.h
|
||||
basicsocket.o: $(top_srcdir)/internal/sanitizers.h
|
||||
basicsocket.o: $(top_srcdir)/internal/serial.h
|
||||
basicsocket.o: $(top_srcdir)/internal/static_assert.h
|
||||
basicsocket.o: $(top_srcdir)/internal/string.h
|
||||
|
@ -617,6 +619,7 @@ constants.o: $(top_srcdir)/internal/error.h
|
|||
constants.o: $(top_srcdir)/internal/gc.h
|
||||
constants.o: $(top_srcdir)/internal/imemo.h
|
||||
constants.o: $(top_srcdir)/internal/io.h
|
||||
constants.o: $(top_srcdir)/internal/sanitizers.h
|
||||
constants.o: $(top_srcdir)/internal/serial.h
|
||||
constants.o: $(top_srcdir)/internal/static_assert.h
|
||||
constants.o: $(top_srcdir)/internal/string.h
|
||||
|
@ -827,6 +830,7 @@ ifaddr.o: $(top_srcdir)/internal/error.h
|
|||
ifaddr.o: $(top_srcdir)/internal/gc.h
|
||||
ifaddr.o: $(top_srcdir)/internal/imemo.h
|
||||
ifaddr.o: $(top_srcdir)/internal/io.h
|
||||
ifaddr.o: $(top_srcdir)/internal/sanitizers.h
|
||||
ifaddr.o: $(top_srcdir)/internal/serial.h
|
||||
ifaddr.o: $(top_srcdir)/internal/static_assert.h
|
||||
ifaddr.o: $(top_srcdir)/internal/string.h
|
||||
|
@ -1036,6 +1040,7 @@ init.o: $(top_srcdir)/internal/error.h
|
|||
init.o: $(top_srcdir)/internal/gc.h
|
||||
init.o: $(top_srcdir)/internal/imemo.h
|
||||
init.o: $(top_srcdir)/internal/io.h
|
||||
init.o: $(top_srcdir)/internal/sanitizers.h
|
||||
init.o: $(top_srcdir)/internal/serial.h
|
||||
init.o: $(top_srcdir)/internal/static_assert.h
|
||||
init.o: $(top_srcdir)/internal/string.h
|
||||
|
@ -1245,6 +1250,7 @@ ipsocket.o: $(top_srcdir)/internal/error.h
|
|||
ipsocket.o: $(top_srcdir)/internal/gc.h
|
||||
ipsocket.o: $(top_srcdir)/internal/imemo.h
|
||||
ipsocket.o: $(top_srcdir)/internal/io.h
|
||||
ipsocket.o: $(top_srcdir)/internal/sanitizers.h
|
||||
ipsocket.o: $(top_srcdir)/internal/serial.h
|
||||
ipsocket.o: $(top_srcdir)/internal/static_assert.h
|
||||
ipsocket.o: $(top_srcdir)/internal/string.h
|
||||
|
@ -1454,6 +1460,7 @@ option.o: $(top_srcdir)/internal/error.h
|
|||
option.o: $(top_srcdir)/internal/gc.h
|
||||
option.o: $(top_srcdir)/internal/imemo.h
|
||||
option.o: $(top_srcdir)/internal/io.h
|
||||
option.o: $(top_srcdir)/internal/sanitizers.h
|
||||
option.o: $(top_srcdir)/internal/serial.h
|
||||
option.o: $(top_srcdir)/internal/static_assert.h
|
||||
option.o: $(top_srcdir)/internal/string.h
|
||||
|
@ -1663,6 +1670,7 @@ raddrinfo.o: $(top_srcdir)/internal/error.h
|
|||
raddrinfo.o: $(top_srcdir)/internal/gc.h
|
||||
raddrinfo.o: $(top_srcdir)/internal/imemo.h
|
||||
raddrinfo.o: $(top_srcdir)/internal/io.h
|
||||
raddrinfo.o: $(top_srcdir)/internal/sanitizers.h
|
||||
raddrinfo.o: $(top_srcdir)/internal/serial.h
|
||||
raddrinfo.o: $(top_srcdir)/internal/static_assert.h
|
||||
raddrinfo.o: $(top_srcdir)/internal/string.h
|
||||
|
@ -1872,6 +1880,7 @@ socket.o: $(top_srcdir)/internal/error.h
|
|||
socket.o: $(top_srcdir)/internal/gc.h
|
||||
socket.o: $(top_srcdir)/internal/imemo.h
|
||||
socket.o: $(top_srcdir)/internal/io.h
|
||||
socket.o: $(top_srcdir)/internal/sanitizers.h
|
||||
socket.o: $(top_srcdir)/internal/serial.h
|
||||
socket.o: $(top_srcdir)/internal/static_assert.h
|
||||
socket.o: $(top_srcdir)/internal/string.h
|
||||
|
@ -2081,6 +2090,7 @@ sockssocket.o: $(top_srcdir)/internal/error.h
|
|||
sockssocket.o: $(top_srcdir)/internal/gc.h
|
||||
sockssocket.o: $(top_srcdir)/internal/imemo.h
|
||||
sockssocket.o: $(top_srcdir)/internal/io.h
|
||||
sockssocket.o: $(top_srcdir)/internal/sanitizers.h
|
||||
sockssocket.o: $(top_srcdir)/internal/serial.h
|
||||
sockssocket.o: $(top_srcdir)/internal/static_assert.h
|
||||
sockssocket.o: $(top_srcdir)/internal/string.h
|
||||
|
@ -2290,6 +2300,7 @@ tcpserver.o: $(top_srcdir)/internal/error.h
|
|||
tcpserver.o: $(top_srcdir)/internal/gc.h
|
||||
tcpserver.o: $(top_srcdir)/internal/imemo.h
|
||||
tcpserver.o: $(top_srcdir)/internal/io.h
|
||||
tcpserver.o: $(top_srcdir)/internal/sanitizers.h
|
||||
tcpserver.o: $(top_srcdir)/internal/serial.h
|
||||
tcpserver.o: $(top_srcdir)/internal/static_assert.h
|
||||
tcpserver.o: $(top_srcdir)/internal/string.h
|
||||
|
@ -2499,6 +2510,7 @@ tcpsocket.o: $(top_srcdir)/internal/error.h
|
|||
tcpsocket.o: $(top_srcdir)/internal/gc.h
|
||||
tcpsocket.o: $(top_srcdir)/internal/imemo.h
|
||||
tcpsocket.o: $(top_srcdir)/internal/io.h
|
||||
tcpsocket.o: $(top_srcdir)/internal/sanitizers.h
|
||||
tcpsocket.o: $(top_srcdir)/internal/serial.h
|
||||
tcpsocket.o: $(top_srcdir)/internal/static_assert.h
|
||||
tcpsocket.o: $(top_srcdir)/internal/string.h
|
||||
|
@ -2708,6 +2720,7 @@ udpsocket.o: $(top_srcdir)/internal/error.h
|
|||
udpsocket.o: $(top_srcdir)/internal/gc.h
|
||||
udpsocket.o: $(top_srcdir)/internal/imemo.h
|
||||
udpsocket.o: $(top_srcdir)/internal/io.h
|
||||
udpsocket.o: $(top_srcdir)/internal/sanitizers.h
|
||||
udpsocket.o: $(top_srcdir)/internal/serial.h
|
||||
udpsocket.o: $(top_srcdir)/internal/static_assert.h
|
||||
udpsocket.o: $(top_srcdir)/internal/string.h
|
||||
|
@ -2917,6 +2930,7 @@ unixserver.o: $(top_srcdir)/internal/error.h
|
|||
unixserver.o: $(top_srcdir)/internal/gc.h
|
||||
unixserver.o: $(top_srcdir)/internal/imemo.h
|
||||
unixserver.o: $(top_srcdir)/internal/io.h
|
||||
unixserver.o: $(top_srcdir)/internal/sanitizers.h
|
||||
unixserver.o: $(top_srcdir)/internal/serial.h
|
||||
unixserver.o: $(top_srcdir)/internal/static_assert.h
|
||||
unixserver.o: $(top_srcdir)/internal/string.h
|
||||
|
@ -3126,6 +3140,7 @@ unixsocket.o: $(top_srcdir)/internal/error.h
|
|||
unixsocket.o: $(top_srcdir)/internal/gc.h
|
||||
unixsocket.o: $(top_srcdir)/internal/imemo.h
|
||||
unixsocket.o: $(top_srcdir)/internal/io.h
|
||||
unixsocket.o: $(top_srcdir)/internal/sanitizers.h
|
||||
unixsocket.o: $(top_srcdir)/internal/serial.h
|
||||
unixsocket.o: $(top_srcdir)/internal/static_assert.h
|
||||
unixsocket.o: $(top_srcdir)/internal/string.h
|
||||
|
|
33
gc.c
33
gc.c
|
@ -6828,6 +6828,25 @@ static void each_stack_location(rb_objspace_t *objspace, const rb_execution_cont
|
|||
const VALUE *stack_start, const VALUE *stack_end, void *ctx,
|
||||
void (*cb)(rb_objspace_t *, void *, VALUE));
|
||||
|
||||
static void
|
||||
gc_mark_machine_stack_location_maybe(rb_objspace_t *objspace, void *ctx, VALUE obj)
|
||||
{
|
||||
gc_mark_maybe(objspace, obj);
|
||||
#ifdef RUBY_ASAN_ENABLED
|
||||
rb_execution_context_t *ec = ctx;
|
||||
void *fake_frame_start;
|
||||
void *fake_frame_end;
|
||||
bool is_fake_frame = asan_get_fake_stack_extents(
|
||||
ec->thread_ptr->asan_fake_stack_handle, obj,
|
||||
ec->machine.stack_start, ec->machine.stack_end,
|
||||
&fake_frame_start, &fake_frame_end
|
||||
);
|
||||
if (is_fake_frame) {
|
||||
each_stack_location(objspace, ec, fake_frame_start, fake_frame_end, NULL, gc_mark_maybe_cb);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#if defined(__wasm__)
|
||||
|
||||
|
||||
|
@ -6846,10 +6865,10 @@ static void
|
|||
mark_current_machine_context(rb_objspace_t *objspace, rb_execution_context_t *ec)
|
||||
{
|
||||
emscripten_scan_stack(rb_mark_locations);
|
||||
each_stack_location(objspace, ec, rb_stack_range_tmp[0], rb_stack_range_tmp[1], gc_mark_maybe_cb);
|
||||
each_stack_location(objspace, ec, rb_stack_range_tmp[0], rb_stack_range_tmp[1], NULL, gc_mark_maybe_cb);
|
||||
|
||||
emscripten_scan_registers(rb_mark_locations);
|
||||
each_stack_location(objspace, ec, rb_stack_range_tmp[0], rb_stack_range_tmp[1], gc_mark_maybe_cb);
|
||||
each_stack_location(objspace, ec, rb_stack_range_tmp[0], rb_stack_range_tmp[1], NULL, gc_mark_maybe_cb);
|
||||
}
|
||||
# else // use Asyncify version
|
||||
|
||||
|
@ -6859,10 +6878,10 @@ mark_current_machine_context(rb_objspace_t *objspace, rb_execution_context_t *ec
|
|||
VALUE *stack_start, *stack_end;
|
||||
SET_STACK_END;
|
||||
GET_STACK_BOUNDS(stack_start, stack_end, 1);
|
||||
each_stack_location(objspace, ec, stack_start, stack_end, gc_mark_maybe_cb);
|
||||
each_stack_location(objspace, ec, stack_start, stack_end, NULL, gc_mark_maybe_cb);
|
||||
|
||||
rb_wasm_scan_locals(rb_mark_locations);
|
||||
each_stack_location(objspace, ec, rb_stack_range_tmp[0], rb_stack_range_tmp[1], gc_mark_maybe_cb);
|
||||
each_stack_location(objspace, ec, rb_stack_range_tmp[0], rb_stack_range_tmp[1], NULL, gc_mark_maybe_cb);
|
||||
}
|
||||
|
||||
# endif
|
||||
|
@ -6889,9 +6908,9 @@ mark_current_machine_context(rb_objspace_t *objspace, rb_execution_context_t *ec
|
|||
SET_STACK_END;
|
||||
GET_STACK_BOUNDS(stack_start, stack_end, 1);
|
||||
|
||||
each_location(objspace, save_regs_gc_mark.v, numberof(save_regs_gc_mark.v), NULL, gc_mark_maybe_cb);
|
||||
each_location(objspace, save_regs_gc_mark.v, numberof(save_regs_gc_mark.v), (void *)ec, gc_mark_machine_stack_location_maybe);
|
||||
|
||||
each_stack_location(objspace, ec, stack_start, stack_end, NULL, gc_mark_maybe_cb);
|
||||
each_stack_location(objspace, ec, stack_start, stack_end, (void *)ec, gc_mark_machine_stack_location_maybe);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -6909,7 +6928,7 @@ each_machine_stack_value(const rb_execution_context_t *ec, void *ctx, void (*cb)
|
|||
void
|
||||
rb_gc_mark_machine_stack(const rb_execution_context_t *ec)
|
||||
{
|
||||
each_machine_stack_value(ec, NULL, gc_mark_maybe_cb);
|
||||
each_machine_stack_value(ec, (void *)ec, gc_mark_machine_stack_location_maybe);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -213,4 +213,67 @@ asan_get_real_stack_addr(void* slot)
|
|||
return addr ? addr : slot;
|
||||
}
|
||||
|
||||
/*!
|
||||
* Gets the current thread's fake stack handle, which can be passed into get_fake_stack_extents
|
||||
*
|
||||
* \retval An opaque value which can be passed to asan_get_fake_stack_extents
|
||||
*/
|
||||
static inline void *
|
||||
asan_get_thread_fake_stack_handle(void)
|
||||
{
|
||||
return __asan_get_current_fake_stack();
|
||||
}
|
||||
|
||||
/*!
|
||||
* Checks if the given VALUE _actually_ represents a pointer to an ASAN fake stack.
|
||||
*
|
||||
* If the given slot _is_ actually a reference to an ASAN fake stack, and that fake stack
|
||||
* contains the real values for the passed-in range of machine stack addresses, returns true
|
||||
* and the range of the fake stack through the outparams.
|
||||
*
|
||||
* Otherwise, returns false, and sets the outparams to NULL.
|
||||
*
|
||||
* Note that this function expects "start" to be > "end" on downward-growing stack architectures;
|
||||
*
|
||||
* \param[in] thread_fake_stack_handle The asan fake stack reference for the thread we're scanning
|
||||
* \param[in] slot The value on the machine stack we want to inspect
|
||||
* \param[in] machine_stack_start The extents of the real machine stack on which slot lives
|
||||
* \param[in] machine_stack_end The extents of the real machine stack on which slot lives
|
||||
* \param[out] fake_stack_start_out The extents of the fake stack which contains real VALUEs
|
||||
* \param[out] fake_stack_end_out The extents of the fake stack which contains real VALUEs
|
||||
* \return Whether slot is a pointer to a fake stack for the given machine stack range
|
||||
*/
|
||||
|
||||
static inline bool
|
||||
asan_get_fake_stack_extents(void *thread_fake_stack_handle, VALUE slot,
|
||||
void *machine_stack_start, void *machine_stack_end,
|
||||
void **fake_stack_start_out, void **fake_stack_end_out)
|
||||
{
|
||||
/* the ifdef is needed here to suppress a warning about fake_frame_{start/end} being
|
||||
uninitialized if __asan_addr_is_in_fake_stack is an empty macro */
|
||||
#ifdef RUBY_ASAN_ENABLED
|
||||
void *fake_frame_start;
|
||||
void *fake_frame_end;
|
||||
void *real_stack_frame = __asan_addr_is_in_fake_stack(
|
||||
thread_fake_stack_handle, (void *)slot, &fake_frame_start, &fake_frame_end
|
||||
);
|
||||
if (real_stack_frame) {
|
||||
bool in_range;
|
||||
#if STACK_GROW_DIRECTION < 0
|
||||
in_range = machine_stack_start >= real_stack_frame && real_stack_frame >= machine_stack_end;
|
||||
#else
|
||||
in_range = machine_stack_start <= real_stack_frame && real_stack_frame <= machine_stack_end;
|
||||
#endif
|
||||
if (in_range) {
|
||||
*fake_stack_start_out = fake_frame_start;
|
||||
*fake_stack_end_out = fake_frame_end;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
*fake_stack_start_out = 0;
|
||||
*fake_stack_end_out = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
#endif /* INTERNAL_SANITIZERS_H */
|
||||
|
|
3
thread.c
3
thread.c
|
@ -525,6 +525,9 @@ void
|
|||
ruby_thread_init_stack(rb_thread_t *th, void *local_in_parent_frame)
|
||||
{
|
||||
native_thread_init_stack(th, local_in_parent_frame);
|
||||
#ifdef RUBY_ASAN_ENABLED
|
||||
th->asan_fake_stack_handle = asan_get_thread_fake_stack_handle();
|
||||
#endif
|
||||
}
|
||||
|
||||
const VALUE *
|
||||
|
|
|
@ -94,6 +94,7 @@ extern int ruby_assert_critical_section_entered;
|
|||
#include "internal.h"
|
||||
#include "internal/array.h"
|
||||
#include "internal/basic_operators.h"
|
||||
#include "internal/sanitizers.h"
|
||||
#include "internal/serial.h"
|
||||
#include "internal/vm.h"
|
||||
#include "method.h"
|
||||
|
@ -1155,6 +1156,10 @@ typedef struct rb_thread_struct {
|
|||
void **specific_storage;
|
||||
|
||||
struct rb_ext_config ext_config;
|
||||
|
||||
#ifdef RUBY_ASAN_ENABLED
|
||||
void *asan_fake_stack_handle;
|
||||
#endif
|
||||
} rb_thread_t;
|
||||
|
||||
static inline unsigned int
|
||||
|
|
Загрузка…
Ссылка в новой задаче