ebitengine/purego

Use Go 1.23's new structs.HostLayout

TotallyGamerJet opened this issue · 2 comments

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

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?

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