diff --git a/src/structs/doc.go b/src/structs/doc.go
index ec79490..84f610a 100644
--- a/src/structs/doc.go
+++ b/src/structs/doc.go
@@ -3,8 +3,10 @@
// license that can be found in the LICENSE file.
// Package structs defines marker types that can be used as struct fields
-// to modify the properties of a struct.
+// to modify the properties of a struct in certain special cases.
//
// By convention, a marker type should be used as the type of a field
// named "_", placed at the beginning of a struct type definition.
+//
+// These tags ought to be very rare in "normal" Go code.
package structs
diff --git a/src/structs/hostlayout.go b/src/structs/hostlayout.go
index d373f24..6e22250 100644
--- a/src/structs/hostlayout.go
+++ b/src/structs/hostlayout.go
@@ -14,6 +14,20 @@
//
// By convention, HostLayout should be used as the type of a field
// named "_", placed at the beginning of the struct type definition.
+//
+// HostLayout should be used in types that are passed to, returned from,
+// or accessed via a pointer passed to/from host APIs. Without this marker,
+// struct layout order is not guaranteed by the language spec, though up to
+// and including Go 1.23 the host and language layouts happen to match.
+// For example, syscall.fdstat in fs_wasip1.go needs to specify host layout:
+//
+// type fdstat struct {
+// _ structs.HostLayout
+// filetype filetype
+// fdflags uint16
+// rightsBase rights
+// rightsInheriting rights
+// }
type HostLayout struct {
_ hostLayout // prevent accidental conversion with plain struct{}
}