1
0
mirror of https://github.com/golang/go synced 2024-11-22 15:14:53 -07:00
go/test/abi
David Chase 8462169b5a cmd/compile: pre-spill pointers in aggregate-typed register args
There's a problem in liveness, where liveness of any
part of an aggregate keeps the whole aggregate alive,
but the not-live parts don't get spilled.  The GC
can observe those live-but-not-spilled slots, which
can contain junk.

A better fix is to change liveness to work
pointer-by-pointer, but that is also a riskier,
trickier fix.

To avoid this, in the case of

(1) an aggregate input parameter
(2) containing pointers
(3) passed in registers

pre-spill the pointers.

Updates #40724.

Change-Id: I6beb8e0a353b1ae3c68c16072f56698061922c04
Reviewed-on: https://go-review.googlesource.com/c/go/+/307909
Trust: David Chase <drchase@google.com>
Run-TryBot: David Chase <drchase@google.com>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
2021-04-07 03:42:11 +00:00
..
bad_internal_offsets.go cmd/compile: fix broken type+offset calc for register args 2021-03-09 18:44:23 +00:00
defer_aggregate.go cmd/compile: deduplicate OpArg's across types 2021-03-31 20:21:57 +00:00
defer_recover_results.go cmd/compile: load results into registers on open defer return path 2021-04-06 20:22:15 +00:00
double_nested_addressed_struct.go cmd/compile: return (and receive) medium-large results 2021-03-04 23:09:24 +00:00
double_nested_struct.go cmd/compile: fix OpArg decomposer for registers in expandCalls 2021-03-09 18:43:58 +00:00
f_ret_z_not.go cmd/compile: add register abi tests 2021-03-04 23:07:50 +00:00
f_ret_z_not.out cmd/compile: fixed which-result confusion in presence of 0-width types 2021-02-27 18:38:31 +00:00
fibish2.go cmd/compile: (fixed) spill output parameters passed in registers as autos 2021-03-16 19:22:44 +00:00
fibish2.out cmd/compile: test register ABI for method, interface, closure calls 2021-03-12 21:18:15 +00:00
fibish_closure.go cmd/compile: test register ABI for method, interface, closure calls 2021-03-12 21:18:15 +00:00
fibish_closure.out cmd/compile: test register ABI for method, interface, closure calls 2021-03-12 21:18:15 +00:00
fibish.go cmd/compile: implement simple register results 2021-03-04 19:45:11 +00:00
fibish.out cmd/compile: implement simple register results 2021-03-04 19:45:11 +00:00
fuzz_trailing_zero_field.go cmd/compile: fix register/offset calculation for trailing empty field case. 2021-04-01 15:50:43 +00:00
idata.go cmd/compile: add "surprised by IData of Arg" case for register args 2021-04-05 20:11:08 +00:00
idata.out cmd/compile: add "surprised by IData of Arg" case for register args 2021-04-05 20:11:08 +00:00
leaf2.go cmd/compile: (fixed) spill output parameters passed in registers as autos 2021-03-16 19:22:44 +00:00
leaf.go cmd/compile: (fixed) spill output parameters passed in registers as autos 2021-03-16 19:22:44 +00:00
many_int_input.go cmd/compile: add register abi tests 2021-03-04 23:07:50 +00:00
many_int_input.out cmd/compile: register abi, morestack work and mole whacking 2021-03-04 16:19:12 +00:00
many_intstar_input.go cmd/compile: add register abi tests 2021-03-04 23:07:50 +00:00
many_intstar_input.out cmd/compile: add register abi tests 2021-03-04 23:07:50 +00:00
methods.go cmd/compile: (fixed) spill output parameters passed in registers as autos 2021-03-16 19:22:44 +00:00
methods.out cmd/compile: test register ABI for method, interface, closure calls 2021-03-12 21:18:15 +00:00
more_intstar_input.go cmd/compile: add register abi tests 2021-03-04 23:07:50 +00:00
more_intstar_input.out cmd/compile: add register abi tests 2021-03-04 23:07:50 +00:00
named_results.go cmd/compile: implement too-big-to-SSA struct passing in registers 2021-03-04 20:18:16 +00:00
named_results.out cmd/compile: implement too-big-to-SSA struct passing in registers 2021-03-04 20:18:16 +00:00
named_return_stuff.go cmd/compile: add register abi tests 2021-03-04 23:07:50 +00:00
named_return_stuff.out cmd/compile: add register abi tests 2021-03-04 23:07:50 +00:00
open_defer_1.go cmd/compile: fix open defer of method call 2021-03-16 19:23:36 +00:00
part_live_2.go cmd/compile: pre-spill pointers in aggregate-typed register args 2021-04-07 03:42:11 +00:00
part_live.go cmd/compile: pre-spill pointers in aggregate-typed register args 2021-04-07 03:42:11 +00:00
return_stuff.go cmd/compile: add register abi tests 2021-03-04 23:07:50 +00:00
return_stuff.out cmd/compile: add register abi tests 2021-03-04 23:07:50 +00:00
s_sif_sif.go cmd/compile: fix failure to communicate between ABIinfo producer&consumer 2021-03-09 18:45:05 +00:00
spills3.go cmd/compile: (fixed) spill output parameters passed in registers as autos 2021-03-16 19:22:44 +00:00
spills4.go cmd/compile: (fixed) spill output parameters passed in registers as autos 2021-03-16 19:22:44 +00:00
store_reg_args.go cmd/compile: avoid generating duplicated in-register Arg 2021-03-30 22:10:19 +00:00
struct_3_string_input.go cmd/compile: add register abi tests 2021-03-04 23:07:50 +00:00
struct_3_string_input.out cmd/compile: add register abi tests 2021-03-04 23:07:50 +00:00
struct_lower_1.go cmd/compile: fix OpArg decomposer for registers in expandCalls 2021-03-09 18:43:58 +00:00
struct_lower_1.out cmd/compile: fix OpArg decomposer for registers in expandCalls 2021-03-09 18:43:58 +00:00
too_big_to_ssa.go cmd/compile: fix OpArg decomposer for registers in expandCalls 2021-03-09 18:43:58 +00:00
too_big_to_ssa.out cmd/compile: return (and receive) medium-large results 2021-03-04 23:09:24 +00:00
uglyfib.go cmd/compile: add register abi tests 2021-03-04 23:07:50 +00:00
uglyfib.out cmd/compile: fix pointer maps for morestack 2021-03-04 16:21:10 +00:00
zombie_struct_select.go cmd/compile: mark unused values as invalid to prevent problems in expandCalls 2021-04-02 17:58:59 +00:00