summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-02-21 11:51:01 +0200
committerPaul Buetow <paul@buetow.org>2026-02-21 11:51:01 +0200
commit6c912a9d72ae2a43923c638538d320e6bf585952 (patch)
tree727f66d158210e01abf8c18a83ef4db6066e0c1a
parent32136b8cb18944157ff1f361bc0755f6b627fd47 (diff)
Migrate make targets to mage
Amp-Thread-ID: https://ampcode.com/threads/T-019c7f4e-cc5f-76f1-aaf0-dd7cbaabbb18 Co-authored-by: Amp <amp@ampcode.com>
-rw-r--r--AGENTS.md27
-rw-r--r--Magefile.go424
-rw-r--r--Makefile68
-rw-r--r--go.mod2
-rw-r--r--go.sum2
-rw-r--r--internal/c/Makefile50
-rw-r--r--internal/c/generated_tracepoints_result.txt164
-rw-r--r--internal/generate/bpfhandler.go152
-rw-r--r--internal/generate/classify.go214
-rw-r--r--internal/generate/classify_test.go332
-rw-r--r--internal/generate/codegen.go152
-rw-r--r--internal/generate/codegen_test.go263
-rw-r--r--internal/generate/format.go145
-rw-r--r--internal/generate/format_test.go174
-rw-r--r--internal/generate/retclassify_test.go59
-rw-r--r--internal/generate/testdata.go666
-rw-r--r--internal/generate/tracepointsgo.go43
-rw-r--r--internal/generate/tracepointsgo_test.go92
-rw-r--r--internal/generate/typesgo.go341
-rw-r--r--internal/generate/typesgo_test.go257
-rw-r--r--internal/tracepoints/Makefile8
-rw-r--r--internal/types/Makefile13
22 files changed, 3409 insertions, 239 deletions
diff --git a/AGENTS.md b/AGENTS.md
index 051d57f..d3f3e95 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -7,26 +7,26 @@ This file provides guidance to AI coding assistants working with the I/O Riot NG
**Prerequisites**: Ensure libbpfgo is cloned at `../libbpfgo` relative to this repository.
```bash
-make all # Build everything (BPF objects and Go binary)
-make test # Run all tests
-make test_with_name TEST_NAME=TestEventloop # Run specific test
-go test ./internal/event -v # Run tests for specific package
-make generate # Generate code (required after modifying tracepoint definitions)
-make bench # Run benchmarks
-make clean # Clean build artifacts
+mage all # Build everything (BPF objects and Go binary)
+mage test # Run all tests
+TEST_NAME=TestEventloop mage testWithName # Run specific test
+go test ./internal/event -v # Run tests for specific package
+mage generate # Generate code (required after modifying tracepoint definitions)
+mage bench # Run benchmarks
+mage clean # Clean build artifacts
```
## Code Generation
-**Run `make generate` before building when tracepoint definitions change!**
+**Run `mage generate` before building when tracepoint definitions change!**
-A Go program (`cmd/generate/`) generates code from Linux kernel tracepoint data:
+A Mage target generates code from Linux kernel tracepoint data:
```bash
-make generate # Generate all code (C and Go)
-make -C internal/c generate # Generate C tracepoint handlers from /sys/kernel/tracing
-make -C internal/types generate # Generate Go types from C structs
-make -C internal/tracepoints generate # Generate Go tracepoint list
+mage generate # Generate all code (C and Go)
+mage generateTracepointsC # Generate C tracepoint handlers from /sys/kernel/tracing
+mage generateTypesGo # Generate Go types from C structs
+mage generateTracepointsGo # Generate Go tracepoint list
```
Generated files (do not edit manually):
@@ -35,7 +35,6 @@ Generated files (do not edit manually):
- `internal/tracepoints/generated_tracepoints.go` - List of available syscall tracepoints
Generator source code:
-- `cmd/generate/main.go` - Entry point with subcommands: `tracepoints-c`, `tracepoints-go`, `types-go`
- `internal/generate/` - Parser, classifier, and code generation logic
## Architecture
diff --git a/Magefile.go b/Magefile.go
index 7f63a22..8a49bea 100644
--- a/Magefile.go
+++ b/Magefile.go
@@ -1,18 +1,39 @@
//go:build mage
-// Magefile for ior targets: build, test, install.
+// Magefile for ior targets: build, test, install, generate, clean, and BPF builds.
package main
import (
+ "bufio"
+ "errors"
"fmt"
+ "go/format"
+ "io"
"os"
+ "os/exec"
"path/filepath"
+ "strings"
"github.com/magefile/mage/mg"
"github.com/magefile/mage/sh"
+
+ "ior/internal/generate"
)
-const binaryName = "ior"
+const (
+ binaryName = "ior"
+ defaultLibbpfgoPath = "../libbpfgo"
+ bpfSourcePath = "internal/c/ior.bpf.c"
+ bpfObjectPath = "internal/c/ior.bpf.o"
+ bpfOutputPath = "ior.bpf.o"
+ tracepointsCPath = "internal/c/generated_tracepoints.c"
+ tracepointsResult = "internal/c/generated_tracepoints_result.txt"
+ tracepointsResultNew = "internal/c/generated_tracepoints_result.txt.new"
+ tracepointsGoPath = "internal/tracepoints/generated_tracepoints.go"
+ typesGoPath = "internal/types/generated_types.go"
+ typesHeaderPath = "internal/c/types.h"
+ VMLINUXPath = "internal/c/vmlinux.h"
+)
// Default builds the project.
func Default() {
@@ -21,12 +42,126 @@ func Default() {
// Build compiles the binary.
func Build() error {
- return sh.RunV("go", "build", "-o", binaryName, "./cmd/ior")
+ return sh.RunWithV(goEnv(), "go", "build", "-tags", "netgo", "-ldflags", "-w -extldflags \"-static\"",
+ "-o", binaryName, "./cmd/ior/main.go")
+}
+
+// GoBuildRace compiles the binary with the race detector enabled.
+func GoBuildRace() error {
+ return sh.RunWithV(goEnv(), "go", "build", "-tags", "netgo", "-ldflags", "-w -extldflags \"-static\"",
+ "-race", "-o", binaryName, "./cmd/ior/main.go")
+}
+
+// All builds the BPF object and the Go binary.
+func All() error {
+ mg.SerialDeps(BpfBuild, Build)
+ return nil
+}
+
+// BpfBuild builds the BPF object and copies it to the repo root.
+func BpfBuild() error {
+ if err := ensureVMLINUX(); err != nil {
+ return err
+ }
+ if err := buildBPFObject(); err != nil {
+ return err
+ }
+ return sh.RunV("cp", "-v", bpfObjectPath, bpfOutputPath)
}
// Test runs the full test suite.
func Test() error {
- return sh.RunV("go", "test", "./...")
+ if err := sh.RunWithV(goEnv(), "go", "clean", "-testcache"); err != nil {
+ return err
+ }
+ return sh.RunWithV(goEnv(), "go", "test", "./...", "-v", "-failfast")
+}
+
+// TestWithName runs a specific test by name.
+func TestWithName() error {
+ if err := sh.RunWithV(goEnv(), "go", "clean", "-testcache"); err != nil {
+ return err
+ }
+ testName := os.Getenv("TEST_NAME")
+ if testName == "" {
+ testName = "TestEventloop"
+ }
+ return sh.RunWithV(goEnv(), "go", "test", "./...", "-run", "^"+testName+"$", "-v", "-failfast")
+}
+
+// Bench runs benchmarks.
+func Bench() error {
+ return sh.RunWithV(goEnv(), "go", "test", "./...", "-v", "-bench=.", "-run", "xxx")
+}
+
+// Generate regenerates all generated files.
+func Generate() error {
+ fmt.Println("Generating tracepoint and type artifacts...")
+ mg.SerialDeps(GenerateTracepointsC, GenerateTracepointsGo, GenerateTypesGo)
+ fmt.Println("Generation complete.")
+ return nil
+}
+
+// GenerateTracepointsC regenerates the tracepoint handlers in C.
+func GenerateTracepointsC() error {
+ fmt.Println("Generating C tracepoints...")
+ return generateTracepointsC(true, false)
+}
+
+// GenerateTracepointsCForce regenerates the tracepoint handlers in C, ignoring diffs.
+func GenerateTracepointsCForce() error {
+ fmt.Println("Generating C tracepoints (force)...")
+ return generateTracepointsC(false, false)
+}
+
+// GenerateTracepointsCStdout prints the tracepoint handlers in C to stdout.
+func GenerateTracepointsCStdout() error {
+ fmt.Println("Generating C tracepoints (stdout)...")
+ return generateTracepointsC(true, true)
+}
+
+// GenerateTracepointsGo regenerates the tracepoint list in Go.
+func GenerateTracepointsGo() error {
+ fmt.Println("Generating Go tracepoints list...")
+ input, err := os.ReadFile(tracepointsCPath)
+ if err != nil {
+ return fmt.Errorf("read %s: %w", tracepointsCPath, err)
+ }
+ output, err := generate.ExtractTracepoints(strings.NewReader(string(input)))
+ if err != nil {
+ return err
+ }
+ formatted, err := format.Source([]byte(output))
+ if err != nil {
+ return fmt.Errorf("format tracepoints go: %w", err)
+ }
+ if err := os.WriteFile(tracepointsGoPath, formatted, 0o644); err != nil {
+ return fmt.Errorf("write %s: %w", tracepointsGoPath, err)
+ }
+ return nil
+}
+
+// GenerateTypesGo regenerates the Go types and constants.
+func GenerateTypesGo() error {
+ fmt.Println("Generating Go types...")
+ input, err := readTypesInput()
+ if err != nil {
+ return err
+ }
+ structs, constants, err := generate.ParseCTypesInput(strings.NewReader(input))
+ if err != nil {
+ return err
+ }
+ output := generate.GenerateTypesGo(structs, constants)
+ output = generate.AddTypesImports(output)
+ formatted, err := format.Source([]byte(output))
+ if err != nil {
+ return fmt.Errorf("format types go: %w", err)
+ }
+ if err := os.WriteFile(typesGoPath, formatted, 0o644); err != nil {
+ return fmt.Errorf("write %s: %w", typesGoPath, err)
+ }
+ return nil
}
// Install copies the binary into GOPATH/bin.
@@ -50,3 +185,284 @@ func Install() error {
dest := filepath.Join(binDir, binaryName)
return sh.RunV("cp", "-v", binaryName, dest)
}
+
+// Clean removes build artifacts.
+func Clean() error {
+ if err := removeFilesByName(binaryName); err != nil {
+ return err
+ }
+ if err := removeFilesByPath(bpfOutputPath); err != nil {
+ return err
+ }
+ if err := cleanBPFArtifacts(); err != nil {
+ return err
+ }
+ return nil
+}
+
+// Mrproper removes build artifacts and generated output files.
+func Mrproper() error {
+ mg.SerialDeps(Clean)
+ patterns := []string{"*.zst", "*.collapsed", "*.svg", "*profile", "*.pdf", "*.tmp", "palete.map"}
+ for _, pattern := range patterns {
+ if err := removeFilesByGlob(pattern); err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+// World runs clean, generate, test, and build targets.
+func World() error {
+ fmt.Println("World: cleaning...")
+ if err := Clean(); err != nil {
+ return err
+ }
+ fmt.Println("World: generating...")
+ if err := Generate(); err != nil {
+ return err
+ }
+ fmt.Println("World: running tests...")
+ if err := Test(); err != nil {
+ return err
+ }
+ fmt.Println("World: building... (BPF + Go)")
+ if err := All(); err != nil {
+ return err
+ }
+ fmt.Println("World: done.")
+ return nil
+}
+
+// Prof generates CPU and memory profiling PDFs.
+func Prof() error {
+ if err := runShellCommand("go tool pprof -pdf ./ior ior.cpuprofile > cpuprofile.pdf"); err != nil {
+ return err
+ }
+ if err := runShellCommand("go tool pprof -pdf ./ior ior.memprofile > memprofile.pdf"); err != nil {
+ return err
+ }
+ return nil
+}
+
+func buildBPFObject() error {
+ libbpfgo := libbpfgoPath()
+ includeDir := filepath.Join(libbpfgo, "output")
+ return sh.RunWithV(bpfEnv(), "clang", "-g", "-O2", "-Wall", "-fpie", "-target", "bpf",
+ "-D__TARGET_ARCH_amd64", "-I"+includeDir, "-c", bpfSourcePath, "-o", bpfObjectPath)
+}
+
+func bpfEnv() map[string]string {
+ return map[string]string{"CC": "clang"}
+}
+
+func cleanBPFArtifacts() error {
+ for _, pattern := range []string{"internal/c/*.o", VMLINUXPath} {
+ if err := removeFilesByGlob(pattern); err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+func ensureVMLINUX() error {
+ if _, err := os.Stat(VMLINUXPath); err == nil {
+ return nil
+ } else if !errors.Is(err, os.ErrNotExist) {
+ return fmt.Errorf("stat %s: %w", VMLINUXPath, err)
+ }
+
+ output, err := sudoOutput("bpftool", "btf", "dump", "file", "/sys/kernel/btf/vmlinux", "format", "c")
+ if err != nil {
+ return err
+ }
+ if err := os.WriteFile(VMLINUXPath, []byte(output), 0o644); err != nil {
+ return fmt.Errorf("write %s: %w", VMLINUXPath, err)
+ }
+ return nil
+}
+
+func generateTracepointsC(strict bool, toStdout bool) error {
+ fmt.Println("Reading syscall format files...")
+ formats, err := readSyscallFormats()
+ if err != nil {
+ return err
+ }
+ fmt.Println("Parsing syscall formats...")
+
+ parsed, err := generate.ParseFormats(strings.NewReader(formats))
+ if err != nil {
+ return err
+ }
+ output := generate.GenerateTracepointsC(parsed)
+ fmt.Println("Writing generated C tracepoints...")
+
+ if toStdout {
+ fmt.Print(output)
+ return nil
+ }
+
+ if err := os.WriteFile(tracepointsCPath, []byte(output), 0o644); err != nil {
+ return fmt.Errorf("write %s: %w", tracepointsCPath, err)
+ }
+ return writeTracepointsResult(output, strict)
+}
+
+func goEnv() map[string]string {
+ libbpfgo := libbpfgoPath()
+ cgoCflags := fmt.Sprintf("-I%s -I%s", filepath.Join(libbpfgo, "output"), filepath.Join(libbpfgo, "selftest", "common"))
+ cgoLdflags := fmt.Sprintf("-lelf -lzstd %s", filepath.Join(libbpfgo, "output", "libbpf", "libbpf.a"))
+ return map[string]string{
+ "CGO_CFLAGS": cgoCflags,
+ "CGO_LDFLAGS": cgoLdflags,
+ "GOARCH": "amd64",
+ "GOOS": "linux",
+ "LIBBPFGO": libbpfgo,
+ }
+}
+
+func libbpfgoPath() string {
+ if libbpfgo := os.Getenv("LIBBPFGO"); libbpfgo != "" {
+ return libbpfgo
+ }
+ return filepath.Clean(filepath.Join(repoRoot(), defaultLibbpfgoPath))
+}
+
+func readSyscallFormats() (string, error) {
+ fmt.Println("Reading syscall format files with one sudo call...")
+ output, err := sudoOutput("sh", "-c", "LC_ALL=C find /sys/kernel/tracing/events/syscalls -maxdepth 2 -mindepth 2 -name format | sort | xargs cat")
+ if err != nil {
+ return "", err
+ }
+ if output == "" {
+ return "", fmt.Errorf("no syscall format files found")
+ }
+ return output, nil
+}
+
+func readTypesInput() (string, error) {
+ parts := []string{typesHeaderPath, tracepointsCPath}
+ var b strings.Builder
+ for _, p := range parts {
+ data, err := os.ReadFile(p)
+ if err != nil {
+ return "", fmt.Errorf("read %s: %w", p, err)
+ }
+ b.Write(data)
+ if len(data) > 0 && data[len(data)-1] != '\n' {
+ b.WriteString("\n")
+ }
+ }
+ return b.String(), nil
+}
+
+func removeFilesByGlob(pattern string) error {
+ matches, err := filepath.Glob(pattern)
+ if err != nil {
+ return fmt.Errorf("glob %s: %w", pattern, err)
+ }
+ for _, match := range matches {
+ if err := removeFilesByPath(match); err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+func removeFilesByName(name string) error {
+ return filepath.WalkDir(".", func(path string, d os.DirEntry, err error) error {
+ if err != nil {
+ return err
+ }
+ if d.IsDir() {
+ return nil
+ }
+ if d.Name() == name {
+ return removeFilesByPath(path)
+ }
+ return nil
+ })
+}
+
+func removeFilesByPath(path string) error {
+ if err := os.Remove(path); err != nil && !errors.Is(err, os.ErrNotExist) {
+ return fmt.Errorf("remove %s: %w", path, err)
+ }
+ return nil
+}
+
+func repoRoot() string {
+ root, err := os.Getwd()
+ if err != nil {
+ return "."
+ }
+ return root
+}
+
+func runShellCommand(command string) error {
+ return sh.RunV("bash", "-c", command)
+}
+
+func sudoOutput(cmd string, args ...string) (string, error) {
+ if os.Geteuid() == 0 {
+ return sh.Output(cmd, args...)
+ }
+ return sh.Output("sudo", append([]string{cmd}, args...)...)
+}
+
+func writeTracepointsResult(output string, strict bool) error {
+ result := extractTracepointReasons(output)
+ if err := os.WriteFile(tracepointsResultNew, []byte(result), 0o644); err != nil {
+ return fmt.Errorf("write %s: %w", tracepointsResultNew, err)
+ }
+ if _, err := os.Stat(tracepointsResult); errors.Is(err, os.ErrNotExist) {
+ return sh.RunV("cp", tracepointsResultNew, tracepointsResult)
+ } else if err != nil {
+ return fmt.Errorf("stat %s: %w", tracepointsResult, err)
+ }
+ if err := sh.RunV("diff", "-u", tracepointsResult, tracepointsResultNew); err != nil {
+ if strict {
+ return err
+ }
+ }
+ return sh.RunV("cp", tracepointsResultNew, tracepointsResult)
+}
+
+func extractTracepointReasons(output string) string {
+ var reasons []string
+ reader := bufio.NewReader(strings.NewReader(output))
+ for {
+ line, err := reader.ReadString('\n')
+ if line != "" {
+ line = strings.TrimRight(line, "\n")
+ if strings.HasPrefix(line, "/// ") {
+ reasons = append(reasons, strings.TrimPrefix(line, "/// "))
+ }
+ }
+ if err != nil {
+ if errors.Is(err, io.EOF) {
+ break
+ }
+ return ""
+ }
+ }
+ if len(reasons) == 0 {
+ return ""
+ }
+ sorted, err := sortLinesWithLocale(reasons)
+ if err != nil {
+ return strings.Join(reasons, "\n") + "\n"
+ }
+ return sorted
+}
+
+func sortLinesWithLocale(lines []string) (string, error) {
+ cmd := exec.Command("sort")
+ cmd.Env = append(os.Environ(), "LC_ALL=C")
+ cmd.Stdin = strings.NewReader(strings.Join(lines, "\n") + "\n")
+ output, err := cmd.Output()
+ if err != nil {
+ return "", err
+ }
+ return string(output), nil
+}
diff --git a/Makefile b/Makefile
deleted file mode 100644
index 7d65af7..0000000
--- a/Makefile
+++ /dev/null
@@ -1,68 +0,0 @@
-export LIBBPFGO = $(CURDIR)/../libbpfgo
-export CC = clang
-export GOOS = linux
-export GOARCH = amd64
-export CGO_CFLAGS = -I$(LIBBPFGO)/output -I$(LIBBPFGO)/selftest/common
-export CGO_LDFLAGS = -lelf -lzstd $(LIBBPFGO)/output/libbpf/libbpf.a
-export GO ?= go
-export TEST_NAME ?= TestEventloop
-
-all: bpfbuild gobuild
-
-.PHONY: bpfbuild
-bpfbuild:
- make -C ./internal/c redo
- cp -v ./internal/c/ior.bpf.o .
-
-gen: generate
-generate: generate
-
-.PHONY: generate
-generate:
- make -C ./internal/c generate
- make -C ./internal/tracepoints generate
- make -C ./internal/types generate
-
-.PHONY: gobuild
-gobuild:
- $(GO) build -tags netgo -ldflags '-w -extldflags "-static"' -o ior ./cmd/ior/main.go
-gobuild_race:
- $(GO) build -tags netgo -ldflags '-w -extldflags "-static"' -race -o ior ./cmd/ior/main.go
-
-.PHONY: clean
-clean:
- find . -type f -name ior -delete
- if [ -e ior.bpf.o ]; then rm ior.bpf.o; fi
- make -C ./internal/c clean
-
-.PHONY: mrproper
-mrproper: clean
- find . -type f -name \*.zst -delete
- find . -type f -name \*.collapsed -delete
- find . -type f -name \*.svg -delete
- find . -type f -name \*profile -delete
- find . -type f -name \*.pdf -delete
- find . -type f -name \*.tmp -delete
- find . -type f -name palete.map -delete
-
-.PHONY: world
-world: clean generate test all
-
-.PHONY: prof
-prof:
- $(GO) tool pprof -pdf ./ior ior.cpuprofile > cpuprofile.pdf && evince cpuprofile.pdf &
- $(GO) tool pprof -pdf ./ior ior.memprofile > memprofile.pdf && evince memprofile.pdf &
-
-.PHONY: test
-test:
- $(GO) clean -testcache
- $(GO) test ./... -v -failfast
-
-.PHONY: test_with_name
-test_with_name:
- $(GO) clean -testcache
- $(GO) test ./... -run ^$(TEST_NAME)$$ -v -failfast
-
-.PHONY: bench
-bench:
- $(GO) test ./... -v -bench=. -run xxx
diff --git a/go.mod b/go.mod
index 7f1eb6a..a89a147 100644
--- a/go.mod
+++ b/go.mod
@@ -6,3 +6,5 @@ require (
github.com/DataDog/zstd v1.5.7
github.com/aquasecurity/libbpfgo v0.6.0-libbpf-1.3.0.20240111220235-90dbffffbdab
)
+
+require github.com/magefile/mage v1.15.0 // indirect
diff --git a/go.sum b/go.sum
index 35c80fa..03e3d7d 100644
--- a/go.sum
+++ b/go.sum
@@ -4,6 +4,8 @@ github.com/aquasecurity/libbpfgo v0.6.0-libbpf-1.3.0.20240111220235-90dbffffbdab
github.com/aquasecurity/libbpfgo v0.6.0-libbpf-1.3.0.20240111220235-90dbffffbdab/go.mod h1:0rEApF1YBHGuZ4C8OYI9q5oDBVpgqtRqYATePl9mCDk=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/magefile/mage v1.15.0 h1:BvGheCMAsG3bWUDbZ8AyXXpCNwU9u5CB6sM+HNb9HYg=
+github.com/magefile/mage v1.15.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
diff --git a/internal/c/Makefile b/internal/c/Makefile
deleted file mode 100644
index 03c1f9f..0000000
--- a/internal/c/Makefile
+++ /dev/null
@@ -1,50 +0,0 @@
-export LIBBPFGO = $(CURDIR)/../../../libbpfgo
-export CC = clang
-
-SOURCES := $(wildcard *.bpf.c)
-TARGETS := $(SOURCES:.bpf.c=.bpf.o)
-
-all: $(TARGETS)
-
-redo: clean all
-
-%.bpf.o: %.bpf.c vmlinux.h
- $(CC) -g -O2 -Wall -fpie -target bpf -D__TARGET_ARCH_amd64 \
- -I$(LIBBPFGO)/output -c $< -o $@
-
-vmlinux.h:
- bpftool btf dump file /sys/kernel/btf/vmlinux format c > vmlinux.h
-
-.PHONY: clean
-clean:
- find . -name \*.o -delete
- find . -name vmlinux.h -delete
-
-.PHONY: generate
-generate: generate_tracepoints
-
-.PHONY: generate_tracepoints
-generate_tracepoints:
- sudo sh -c 'sudo find /sys/kernel/tracing/events/syscalls -maxdepth 2 -mindepth 2 -name format' \
- | sort -t_ -k3 | sudo xargs cat \
- | go run ../../cmd/generate tracepoints-c > ./generated_tracepoints.c
- grep '^/// ' ./generated_tracepoints.c | sort | sed 's|/// ||' > ./generated_tracepoints_result.txt.new
- diff -u ./generated_tracepoints_result.txt ./generated_tracepoints_result.txt.new
- cp ./generated_tracepoints_result.txt.new ./generated_tracepoints_result.txt
-
-# TODO: Document what to do, when a syscall is missing. E.g. we also need to add the new syscall maybe
-# to the classifier in cmd/generate and internal/generate!
-.PHONY: generate_tracepoints_force
-generate_tracepoints_force:
- sudo sh -c 'sudo find /sys/kernel/tracing/events/syscalls -maxdepth 2 -mindepth 2 -name format' \
- | sort -t_ -k3 | sudo xargs cat \
- | go run ../../cmd/generate tracepoints-c > ./generated_tracepoints.c
- grep '^/// ' ./generated_tracepoints.c | sort | sed 's|/// ||' > ./generated_tracepoints_result.txt.new
- sh -c 'diff -u ./generated_tracepoints_result.txt ./generated_tracepoints_result.txt.new; exit 0'
- cp ./generated_tracepoints_result.txt.new ./generated_tracepoints_result.txt
-
-.PHONY: generate_tracepoints_stdout
-generate_tracepoints_stdout:
- sudo sh -c 'sudo find /sys/kernel/tracing/events/syscalls -maxdepth 2 -mindepth 2 -name format' \
- | sort -t_ -k3 | sudo xargs cat \
- | go run ../../cmd/generate tracepoints-c
diff --git a/internal/c/generated_tracepoints_result.txt b/internal/c/generated_tracepoints_result.txt
index 2176d6b..fb3867c 100644
--- a/internal/c/generated_tracepoints_result.txt
+++ b/internal/c/generated_tracepoints_result.txt
@@ -1,5 +1,5 @@
-Ignoring sys_enter_accept4 sys_exit_accept4 as possibly not file I/O related
Ignoring sys_enter_accept sys_exit_accept as possibly not file I/O related
+Ignoring sys_enter_accept4 sys_exit_accept4 as possibly not file I/O related
Ignoring sys_enter_acct sys_exit_acct as possibly not file I/O related
Ignoring sys_enter_add_key sys_exit_add_key as possibly not file I/O related
Ignoring sys_enter_adjtimex sys_exit_adjtimex as possibly not file I/O related
@@ -15,32 +15,34 @@ Ignoring sys_enter_clock_getres sys_exit_clock_getres as possibly not file I/O r
Ignoring sys_enter_clock_gettime sys_exit_clock_gettime as possibly not file I/O related
Ignoring sys_enter_clock_nanosleep sys_exit_clock_nanosleep as possibly not file I/O related
Ignoring sys_enter_clock_settime sys_exit_clock_settime as possibly not file I/O related
-Ignoring sys_enter_clone3 sys_exit_clone3 as possibly not file I/O related
Ignoring sys_enter_clone sys_exit_clone as possibly not file I/O related
+Ignoring sys_enter_clone3 sys_exit_clone3 as possibly not file I/O related
Ignoring sys_enter_connect sys_exit_connect as possibly not file I/O related
Ignoring sys_enter_copy_file_range sys_exit_copy_file_range as possibly not file I/O related
Ignoring sys_enter_delete_module sys_exit_delete_module as possibly not file I/O related
-Ignoring sys_enter_epoll_create1 sys_exit_epoll_create1 as possibly not file I/O related
Ignoring sys_enter_epoll_create sys_exit_epoll_create as possibly not file I/O related
+Ignoring sys_enter_epoll_create1 sys_exit_epoll_create1 as possibly not file I/O related
Ignoring sys_enter_epoll_ctl sys_exit_epoll_ctl as possibly not file I/O related
-Ignoring sys_enter_epoll_pwait2 sys_exit_epoll_pwait2 as possibly not file I/O related
Ignoring sys_enter_epoll_pwait sys_exit_epoll_pwait as possibly not file I/O related
+Ignoring sys_enter_epoll_pwait2 sys_exit_epoll_pwait2 as possibly not file I/O related
Ignoring sys_enter_epoll_wait sys_exit_epoll_wait as possibly not file I/O related
-Ignoring sys_enter_eventfd2 sys_exit_eventfd2 as possibly not file I/O related
Ignoring sys_enter_eventfd sys_exit_eventfd as possibly not file I/O related
-Ignoring sys_enter_execveat sys_exit_execveat as possibly not file I/O related
+Ignoring sys_enter_eventfd2 sys_exit_eventfd2 as possibly not file I/O related
Ignoring sys_enter_execve sys_exit_execve as possibly not file I/O related
-Ignoring sys_enter_exit_group sys_exit_exit_group as possibly not file I/O related
+Ignoring sys_enter_execveat sys_exit_execveat as possibly not file I/O related
Ignoring sys_enter_exit sys_exit_exit as possibly not file I/O related
+Ignoring sys_enter_exit_group sys_exit_exit_group as possibly not file I/O related
Ignoring sys_enter_fanotify_init sys_exit_fanotify_init as possibly not file I/O related
Ignoring sys_enter_fork sys_exit_fork as possibly not file I/O related
Ignoring sys_enter_fsmount sys_exit_fsmount as possibly not file I/O related
Ignoring sys_enter_fsopen sys_exit_fsopen as possibly not file I/O related
-Ignoring sys_enter_futex_requeue sys_exit_futex_requeue as possibly not file I/O related
Ignoring sys_enter_futex sys_exit_futex as possibly not file I/O related
+Ignoring sys_enter_futex_requeue sys_exit_futex_requeue as possibly not file I/O related
Ignoring sys_enter_futex_wait sys_exit_futex_wait as possibly not file I/O related
Ignoring sys_enter_futex_waitv sys_exit_futex_waitv as possibly not file I/O related
Ignoring sys_enter_futex_wake sys_exit_futex_wake as possibly not file I/O related
+Ignoring sys_enter_get_mempolicy sys_exit_get_mempolicy as possibly not file I/O related
+Ignoring sys_enter_get_robust_list sys_exit_get_robust_list as possibly not file I/O related
Ignoring sys_enter_getcpu sys_exit_getcpu as possibly not file I/O related
Ignoring sys_enter_getcwd sys_exit_getcwd as possibly not file I/O related
Ignoring sys_enter_getegid sys_exit_getegid as possibly not file I/O related
@@ -48,7 +50,6 @@ Ignoring sys_enter_geteuid sys_exit_geteuid as possibly not file I/O related
Ignoring sys_enter_getgid sys_exit_getgid as possibly not file I/O related
Ignoring sys_enter_getgroups sys_exit_getgroups as possibly not file I/O related
Ignoring sys_enter_getitimer sys_exit_getitimer as possibly not file I/O related
-Ignoring sys_enter_get_mempolicy sys_exit_get_mempolicy as possibly not file I/O related
Ignoring sys_enter_getpeername sys_exit_getpeername as possibly not file I/O related
Ignoring sys_enter_getpgid sys_exit_getpgid as possibly not file I/O related
Ignoring sys_enter_getpgrp sys_exit_getpgrp as possibly not file I/O related
@@ -59,7 +60,6 @@ Ignoring sys_enter_getrandom sys_exit_getrandom as possibly not file I/O related
Ignoring sys_enter_getresgid sys_exit_getresgid as possibly not file I/O related
Ignoring sys_enter_getresuid sys_exit_getresuid as possibly not file I/O related
Ignoring sys_enter_getrlimit sys_exit_getrlimit as possibly not file I/O related
-Ignoring sys_enter_get_robust_list sys_exit_get_robust_list as possibly not file I/O related
Ignoring sys_enter_getrusage sys_exit_getrusage as possibly not file I/O related
Ignoring sys_enter_getsid sys_exit_getsid as possibly not file I/O related
Ignoring sys_enter_getsockname sys_exit_getsockname as possibly not file I/O related
@@ -69,8 +69,8 @@ Ignoring sys_enter_gettimeofday sys_exit_gettimeofday as possibly not file I/O r
Ignoring sys_enter_getuid sys_exit_getuid as possibly not file I/O related
Ignoring sys_enter_init_module sys_exit_init_module as possibly not file I/O related
Ignoring sys_enter_inotify_add_watch sys_exit_inotify_add_watch as possibly not file I/O related
-Ignoring sys_enter_inotify_init1 sys_exit_inotify_init1 as possibly not file I/O related
Ignoring sys_enter_inotify_init sys_exit_inotify_init as possibly not file I/O related
+Ignoring sys_enter_inotify_init1 sys_exit_inotify_init1 as possibly not file I/O related
Ignoring sys_enter_inotify_rm_watch sys_exit_inotify_rm_watch as possibly not file I/O related
Ignoring sys_enter_ioperm sys_exit_ioperm as possibly not file I/O related
Ignoring sys_enter_iopl sys_exit_iopl as possibly not file I/O related
@@ -97,11 +97,11 @@ Ignoring sys_enter_memfd_create sys_exit_memfd_create as possibly not file I/O r
Ignoring sys_enter_memfd_secret sys_exit_memfd_secret as possibly not file I/O related
Ignoring sys_enter_migrate_pages sys_exit_migrate_pages as possibly not file I/O related
Ignoring sys_enter_mincore sys_exit_mincore as possibly not file I/O related
-Ignoring sys_enter_mknodat sys_exit_mknodat as possibly not file I/O related
Ignoring sys_enter_mknod sys_exit_mknod as possibly not file I/O related
+Ignoring sys_enter_mknodat sys_exit_mknodat as possibly not file I/O related
+Ignoring sys_enter_mlock sys_exit_mlock as possibly not file I/O related
Ignoring sys_enter_mlock2 sys_exit_mlock2 as possibly not file I/O related
Ignoring sys_enter_mlockall sys_exit_mlockall as possibly not file I/O related
-Ignoring sys_enter_mlock sys_exit_mlock as possibly not file I/O related
Ignoring sys_enter_modify_ldt sys_exit_modify_ldt as possibly not file I/O related
Ignoring sys_enter_mount sys_exit_mount as possibly not file I/O related
Ignoring sys_enter_move_mount sys_exit_move_mount as possibly not file I/O related
@@ -120,8 +120,8 @@ Ignoring sys_enter_msgget sys_exit_msgget as possibly not file I/O related
Ignoring sys_enter_msgrcv sys_exit_msgrcv as possibly not file I/O related
Ignoring sys_enter_msgsnd sys_exit_msgsnd as possibly not file I/O related
Ignoring sys_enter_msync sys_exit_msync as possibly not file I/O related
-Ignoring sys_enter_munlockall sys_exit_munlockall as possibly not file I/O related
Ignoring sys_enter_munlock sys_exit_munlock as possibly not file I/O related
+Ignoring sys_enter_munlockall sys_exit_munlockall as possibly not file I/O related
Ignoring sys_enter_munmap sys_exit_munmap as possibly not file I/O related
Ignoring sys_enter_name_to_handle_at sys_exit_name_to_handle_at as possibly not file I/O related
Ignoring sys_enter_nanosleep sys_exit_nanosleep as possibly not file I/O related
@@ -132,8 +132,8 @@ Ignoring sys_enter_personality sys_exit_personality as possibly not file I/O rel
Ignoring sys_enter_pidfd_getfd sys_exit_pidfd_getfd as possibly not file I/O related
Ignoring sys_enter_pidfd_open sys_exit_pidfd_open as possibly not file I/O related
Ignoring sys_enter_pidfd_send_signal sys_exit_pidfd_send_signal as possibly not file I/O related
-Ignoring sys_enter_pipe2 sys_exit_pipe2 as possibly not file I/O related
Ignoring sys_enter_pipe sys_exit_pipe as possibly not file I/O related
+Ignoring sys_enter_pipe2 sys_exit_pipe2 as possibly not file I/O related
Ignoring sys_enter_pivot_root sys_exit_pivot_root as possibly not file I/O related
Ignoring sys_enter_pkey_alloc sys_exit_pkey_alloc as possibly not file I/O related
Ignoring sys_enter_pkey_free sys_exit_pkey_free as possibly not file I/O related
@@ -165,11 +165,11 @@ Ignoring sys_enter_rt_sigreturn sys_exit_rt_sigreturn as possibly not file I/O r
Ignoring sys_enter_rt_sigsuspend sys_exit_rt_sigsuspend as possibly not file I/O related
Ignoring sys_enter_rt_sigtimedwait sys_exit_rt_sigtimedwait as possibly not file I/O related
Ignoring sys_enter_rt_tgsigqueueinfo sys_exit_rt_tgsigqueueinfo as possibly not file I/O related
+Ignoring sys_enter_sched_get_priority_max sys_exit_sched_get_priority_max as possibly not file I/O related
+Ignoring sys_enter_sched_get_priority_min sys_exit_sched_get_priority_min as possibly not file I/O related
Ignoring sys_enter_sched_getaffinity sys_exit_sched_getaffinity as possibly not file I/O related
Ignoring sys_enter_sched_getattr sys_exit_sched_getattr as possibly not file I/O related
Ignoring sys_enter_sched_getparam sys_exit_sched_getparam as possibly not file I/O related
-Ignoring sys_enter_sched_get_priority_max sys_exit_sched_get_priority_max as possibly not file I/O related
-Ignoring sys_enter_sched_get_priority_min sys_exit_sched_get_priority_min as possibly not file I/O related
Ignoring sys_enter_sched_getscheduler sys_exit_sched_getscheduler as possibly not file I/O related
Ignoring sys_enter_sched_rr_get_interval sys_exit_sched_rr_get_interval as possibly not file I/O related
Ignoring sys_enter_sched_setaffinity sys_exit_sched_setaffinity as possibly not file I/O related
@@ -187,6 +187,10 @@ Ignoring sys_enter_sendfile64 sys_exit_sendfile64 as possibly not file I/O relat
Ignoring sys_enter_sendmmsg sys_exit_sendmmsg as possibly not file I/O related
Ignoring sys_enter_sendmsg sys_exit_sendmsg as possibly not file I/O related
Ignoring sys_enter_sendto sys_exit_sendto as possibly not file I/O related
+Ignoring sys_enter_set_mempolicy sys_exit_set_mempolicy as possibly not file I/O related
+Ignoring sys_enter_set_mempolicy_home_node sys_exit_set_mempolicy_home_node as possibly not file I/O related
+Ignoring sys_enter_set_robust_list sys_exit_set_robust_list as possibly not file I/O related
+Ignoring sys_enter_set_tid_address sys_exit_set_tid_address as possibly not file I/O related
Ignoring sys_enter_setdomainname sys_exit_setdomainname as possibly not file I/O related
Ignoring sys_enter_setfsgid sys_exit_setfsgid as possibly not file I/O related
Ignoring sys_enter_setfsuid sys_exit_setfsuid as possibly not file I/O related
@@ -194,8 +198,6 @@ Ignoring sys_enter_setgid sys_exit_setgid as possibly not file I/O related
Ignoring sys_enter_setgroup