-
Notifications
You must be signed in to change notification settings - Fork 17.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
runtime: copystack doesn't adjust frame pointers on arm64 #58432
Comments
Change https://go.dev/cl/466315 mentions this issue: |
Possibly related to #53037? |
@mknyszek @prattmic @aclements FYI. Took me a while to debug the fp unwinding crashes I saw, but this seems to be the root cause and relatively easy to fix (see CL above). However, the fix reveals (or causes?) more issues with frame pointers on arm64,- details are in CL 466315. I'm putting this on hold for now and will focus on making fp unwinding work on amd64 first. But if anybody has a good idea, please let me know :). |
(CC @golang/arm) |
There's a lot of work to be done here, can you try if this CL https://go-review.googlesource.com/c/go/+/241158 works for you first? |
Thanks @erifan - I hadn't seen this CL. Will definitely try it out. |
My colleague @nsrip-dd and I are currently looking at this. Could you elaborate what you mean by "a lot of work to be done here"? We can't really figure out why the patch had stalled and what other things might need to be done here. cc @cherrymui |
I'm not sure there are a lot. But I'm also not sure if that CL is not enough to ensure frame pointer working everywhere. (It is probably enough for this particular issue.) There are probably a few places we smashed the frame pointer. CL https://golang.org/cl/241080 was one I found. There may be others. Syscall wrappers might be some. I'm happy to update that CL. |
@cherrymui thanks for the fast reply! Yeah, we suspect that there are more problems like the one you mentioned. We see a lot of crashes when enabling |
Change https://go.dev/cl/241158 mentions this issue: |
Change https://go.dev/cl/481635 mentions this issue: |
Change https://go.dev/cl/481636 mentions this issue: |
When taking over the goroutine stack in the panic or preemption signal handlers on arm64, the frame pointer should be saved on the stack (like the link register) so that frame-pointer unwinding from a panic stack works properly. Otherwise, tests like TestStackWrapperStackPanic will fail with the frame pointer check in adjustframe (enabled with debugCheckBP) when checking the sigpanic frame. Updates #39524, #58432 Change-Id: I8b89e6fc4877af29b1b81e55e591e6398159855c Reviewed-on: https://go-review.googlesource.com/c/go/+/481635 Reviewed-by: Felix Geisendörfer <[email protected]> TryBot-Result: Gopher Robot <[email protected]> Run-TryBot: Nick Ripley <[email protected]> Reviewed-by: Cherry Mui <[email protected]> Reviewed-by: Michael Knyszek <[email protected]>
When a goroutine stack is reused on arm64, the spot on the stack where the "caller's" frame pointer goes for the topmost frame should be explicitly zeroed. Otherwise, the frame pointer check in adjustframe with debugCheckBP enabled will fail on the topmost frame of a call stack the first time a reused stack is grown. Updates #39524, #58432 Change-Id: Ic1210dc005e3ecdbf9cd5d7b98846566e56df8f5 Reviewed-on: https://go-review.googlesource.com/c/go/+/481636 Reviewed-by: Felix Geisendörfer <[email protected]> Reviewed-by: Dmitri Shuralyov <[email protected]> Reviewed-by: Cherry Mui <[email protected]> TryBot-Result: Gopher Robot <[email protected]> Auto-Submit: Dmitri Shuralyov <[email protected]>
What version of Go are you using (
go version
)?Does this issue reproduce with the latest release?
Yes.
What operating system and processor architecture are you using
any/arm64
What did you do?
Try to implement frame pointer unwinding for the tracer (gh 16638, wip patch).
What did you expect to see?
copystack should adjust frame pointers on the stack when growing the stack.
What did you see instead?
TODO what about arm64 frame pointer adjustment? 😅.
Seems like this issue was missed when the CL 61511 for this landed in 2018.
This is causing lots of crashes when trying to frame pointer unwind stacks that have grown.
The text was updated successfully, but these errors were encountered: