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

Use Go 1.23's new structs.HostLayout #259

Open
6 tasks done
TotallyGamerJet opened this issue Jun 25, 2024 · 2 comments
Open
6 tasks done

Use Go 1.23's new structs.HostLayout #259

TotallyGamerJet opened this issue Jun 25, 2024 · 2 comments
Labels
enhancement New feature or request good first issue Good for newcomers

Comments

@TotallyGamerJet
Copy link
Collaborator

Operating System

  • Windows
  • macOS
  • Linux
  • FreeBSD
  • Android
  • iOS

What feature would you like to be added?

Use structs.HostLayout in all Platform specific structs

Why is this needed?

In Go 1.23, a new package and type called structs.HostLayout was added in golang/go#66408. Adding this field to a struct instructs the compiler to guarantee the struct matches the C ABI.

We currently, rely on the fact that Go's current struct layout matches the C ABI. The following is an incomplete list of structs that must match C ABI.

  • objc_super
  • G
  • ThreadStart
  • pthread_mutex_t
  • pthread_cond_t

As well as all the one's in struct_test.go, objc_runtime_darwin_test.go and in the examples/window platform files

This is not urgent as there is no current plan to change Go's struct layout

@TotallyGamerJet TotallyGamerJet added enhancement New feature or request good first issue Good for newcomers labels Jun 25, 2024
@judah-caruso
Copy link

Does this only require adding _ structs.HostLayout to the start of types that must match the C ABI, or is there additional work needed to accommodate this?

@TotallyGamerJet
Copy link
Collaborator Author

That is really all that's necessary. Probably need to update some build tags

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request good first issue Good for newcomers
Projects
None yet
Development

No branches or pull requests

2 participants