-
Notifications
You must be signed in to change notification settings - Fork 17.9k
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
Missing support for arm64e #39208
Comments
Is The later should be compatible with Go GC Note that Go GC does not usually compile to specific optional architecture extensions with a separate GOARCH but uses runtime dispatch to use newer instructions. The minimum requirement for Example for ARMv8.1 atomics: |
Hi martisch from what I've understand if GO already support |
Im suggesting that for Go GC the right GOARCH to use is However I do not think Go GC does anything special about authenticated pointers. Supporting those would be a feature request for that specific arch feature. It would be good to clarify what more precisely is wanted (just assembler instruction support, or do some kernel interfaces need to be called/wrapped differently, should For CFLAGS/LDFLAGS I dont know because I think Go itself would not need those to compile a pure Go binary and there hasnt been anything posted here about the compiling process used and how it fails. |
Ok martisch thank you so much for the help, I'll write you back with a description about HWD distribution of chipset which support arm64e and a better description regarding the safe pointer functionality. Cheers |
I think whats first missing here is what Go should do different from today so "arm64e" is considered to be supported. Does a Go binary compiled for arm64 not work on "arm64e" devices? |
As far as I know arm64e permit to sign and authenticate pointers to prevent attackers from |
The arm64e architecture is already supported by Go in the sense that programs built for arm64 will run on arm64e. The gc compiler does not generate any pointer authentication instructions. As far as I can tell, that shouldn't matter, except that Go programs do not have extra protection against some sorts of stack modification errors. |
One situation where this matters is when building with I don't know if simply tagging the shared object as arm64e would be enough to make this use case work, or if would require more significant ABI changes. Also I don't if the situation on ELF is different. There are three separate issues here:
The third one we will be unlikely to ever do, the first one is trivial, the second one doesn't seem too difficult. We should decide whether this is worthy of pursuit for enabling Go plugins in arm64e applications. +cc @cherrymui |
Ok, some experiments with doing the first item on the list above. After toolchain is modified to generate arm64e Mach-o binary, I can load arm64e |
What version of Go are you using (
go version
)?Does this issue reproduce with the latest release?
Yes
What did you do?
I was wondering if arm64e is supported but I didn't see any reference to this architecture after check with
go tool dist list
and try to build withGOARCH=arm64e
I see is not supported yet. Even if is a new architecture, does someone know when or if this arch will be supported by Go?Kind regards
The text was updated successfully, but these errors were encountered: