1234567891011121314151617181920212223242526 |
- package btf
- // datasecResolveWorkaround ensures that certain vars in a Datasec are added
- // to a Spec before the Datasec. This avoids a bug in kernel BTF validation.
- //
- // See https://lore.kernel.org/bpf/20230302123440.1193507-1-lmb@isovalent.com/
- func datasecResolveWorkaround(b *Builder, ds *Datasec) error {
- for _, vsi := range ds.Vars {
- v, ok := vsi.Type.(*Var)
- if !ok {
- continue
- }
- switch v.Type.(type) {
- case *Typedef, *Volatile, *Const, *Restrict, *typeTag:
- // NB: We must never call Add on a Datasec, otherwise we risk
- // infinite recursion.
- _, err := b.Add(v.Type)
- if err != nil {
- return err
- }
- }
- }
- return nil
- }
|