aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/declextract/entity.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/declextract/entity.go')
-rw-r--r--pkg/declextract/entity.go44
1 files changed, 12 insertions, 32 deletions
diff --git a/pkg/declextract/entity.go b/pkg/declextract/entity.go
index d0a309a0f..bd8f143d1 100644
--- a/pkg/declextract/entity.go
+++ b/pkg/declextract/entity.go
@@ -4,11 +4,9 @@
package declextract
import (
- "bytes"
- "crypto/sha256"
- "encoding/json"
- "slices"
"strings"
+
+ "github.com/google/syzkaller/pkg/clangtool"
)
type Output struct {
@@ -244,16 +242,16 @@ func (out *Output) Merge(other *Output) {
}
func (out *Output) SortAndDedup() {
- out.Functions = sortAndDedupSlice(out.Functions)
- out.Consts = sortAndDedupSlice(out.Consts)
- out.Enums = sortAndDedupSlice(out.Enums)
- out.Structs = sortAndDedupSlice(out.Structs)
- out.Syscalls = sortAndDedupSlice(out.Syscalls)
- out.FileOps = sortAndDedupSlice(out.FileOps)
- out.Ioctls = sortAndDedupSlice(out.Ioctls)
- out.IouringOps = sortAndDedupSlice(out.IouringOps)
- out.NetlinkFamilies = sortAndDedupSlice(out.NetlinkFamilies)
- out.NetlinkPolicies = sortAndDedupSlice(out.NetlinkPolicies)
+ out.Functions = clangtool.SortAndDedupSlice(out.Functions)
+ out.Consts = clangtool.SortAndDedupSlice(out.Consts)
+ out.Enums = clangtool.SortAndDedupSlice(out.Enums)
+ out.Structs = clangtool.SortAndDedupSlice(out.Structs)
+ out.Syscalls = clangtool.SortAndDedupSlice(out.Syscalls)
+ out.FileOps = clangtool.SortAndDedupSlice(out.FileOps)
+ out.Ioctls = clangtool.SortAndDedupSlice(out.Ioctls)
+ out.IouringOps = clangtool.SortAndDedupSlice(out.IouringOps)
+ out.NetlinkFamilies = clangtool.SortAndDedupSlice(out.NetlinkFamilies)
+ out.NetlinkPolicies = clangtool.SortAndDedupSlice(out.NetlinkPolicies)
}
// SetSoureFile attaches the source file to the entities that need it.
@@ -285,21 +283,3 @@ func (out *Output) SetSourceFile(file string, updatePath func(string) string) {
op.SourceFile = file
}
}
-
-func sortAndDedupSlice[Slice ~[]E, E comparable](s Slice) Slice {
- dedup := make(map[[sha256.Size]byte]E)
- text := make(map[E][]byte)
- for _, e := range s {
- t, _ := json.Marshal(e)
- dedup[sha256.Sum256(t)] = e
- text[e] = t
- }
- s = make([]E, 0, len(dedup))
- for _, e := range dedup {
- s = append(s, e)
- }
- slices.SortFunc(s, func(a, b E) int {
- return bytes.Compare(text[a], text[b])
- })
- return s
-}