Skip to content
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

Open
felixge opened this issue Feb 9, 2023 · 11 comments
Open

runtime: copystack doesn't adjust frame pointers on arm64 #58432

felixge opened this issue Feb 9, 2023 · 11 comments
Labels
arch-arm64 compiler/runtime Issues related to the Go compiler and/or runtime. NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one.
Milestone

Comments

@felixge
Copy link
Contributor

felixge commented Feb 9, 2023

What version of Go are you using (go version)?

$ go version
go version go1.20 darwin/arm64

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.

@gopherbot gopherbot added the compiler/runtime Issues related to the Go compiler and/or runtime. label Feb 9, 2023
@gopherbot
Copy link

Change https://go.dev/cl/466315 mentions this issue: runtime: add missing fp adjustment for arm64

@bcmills
Copy link
Member

bcmills commented Feb 9, 2023

Possibly related to #53037?

@felixge
Copy link
Contributor Author

felixge commented Feb 9, 2023

@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 :).

@felixge
Copy link
Contributor Author

felixge commented Feb 9, 2023

Possibly related to #53037?

Not sure. But I think #39524 is definitely related.

@bcmills
Copy link
Member

bcmills commented Feb 9, 2023

(CC @golang/arm)

@erifan
Copy link
Contributor

erifan commented Feb 10, 2023

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?

@felixge
Copy link
Contributor Author

felixge commented Feb 10, 2023

Thanks @erifan - I hadn't seen this CL. Will definitely try it out.

@dr2chase dr2chase added the NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. label Feb 10, 2023
@mknyszek mknyszek added this to the Backlog milestone Feb 22, 2023
@felixge
Copy link
Contributor Author

felixge commented Mar 27, 2023

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?

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

@cherrymui
Copy link
Member

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.

@felixge
Copy link
Contributor Author

felixge commented Mar 27, 2023

@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 debugCheckBP on arm64, even after applying the changes from you CL. That being said, if you could update the CL that'd be awesome. We'd be happy to review and test this 🙇 .

@gopherbot
Copy link

Change https://go.dev/cl/241158 mentions this issue: runtime: adjust frame pointer on stack copy on ARM64

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
arch-arm64 compiler/runtime Issues related to the Go compiler and/or runtime. NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one.
Projects
Status: Todo
Development

No branches or pull requests

7 participants