Skip to content

Commit c2563e4

Browse files
committed
program: reuse kconfig package for LINUX_HAS_SYSCALL_WRAPPER
Export a function from the kconfig package which allows writing an integer into a slice based on a btf.Int. Signed-off-by: Lorenz Bauer <[email protected]>
1 parent c44a8d2 commit c2563e4

File tree

2 files changed

+18
-14
lines changed

2 files changed

+18
-14
lines changed

collection.go

+3-12
Original file line numberDiff line numberDiff line change
@@ -630,24 +630,15 @@ func resolveKconfig(m *MapSpec) error {
630630
if !ok {
631631
return fmt.Errorf("variable %s must be an integer, got %s", n, v.Type)
632632
}
633-
var value uint8 = 1
633+
var value uint64 = 1
634634
if err := haveSyscallWrapper(); errors.Is(err, ErrNotSupported) {
635635
value = 0
636636
} else if err != nil {
637637
return fmt.Errorf("unable to derive a value for LINUX_HAS_SYSCALL_WRAPPER: %w", err)
638638
}
639639

640-
switch integer.Size {
641-
case 1:
642-
data[vsi.Offset] = value
643-
case 2:
644-
internal.NativeEndian.PutUint16(data[vsi.Offset:], uint16(value))
645-
case 4:
646-
internal.NativeEndian.PutUint32(data[vsi.Offset:], uint32(value))
647-
case 8:
648-
internal.NativeEndian.PutUint64(data[vsi.Offset:], uint64(value))
649-
default:
650-
return fmt.Errorf("variable %s must be a 8, 16, 32, or 64 bits integer, got %s", n, v.Type)
640+
if err := kconfig.PutInteger(data[vsi.Offset:], integer, value); err != nil {
641+
return fmt.Errorf("set LINUX_HAS_SYSCALL_WRAPPER: %w", err)
651642
}
652643

653644
default: // Catch CONFIG_*.

internal/kconfig/kconfig.go

+15-2
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,20 @@ func putValueNumber(data []byte, typ btf.Type, value string) error {
250250
return fmt.Errorf("cannot parse value: %w", err)
251251
}
252252

253-
switch size {
253+
return PutInteger(data, integer, n)
254+
}
255+
256+
// PutInteger writes n into data.
257+
//
258+
// integer determines how much is written into data and what the valid values
259+
// are.
260+
func PutInteger(data []byte, integer *btf.Int, n uint64) error {
261+
// This function should match set_kcfg_value_num in libbpf.
262+
if integer.Encoding == btf.Bool && n > 1 {
263+
return fmt.Errorf("invalid boolean value: %d", n)
264+
}
265+
266+
switch integer.Size {
254267
case 1:
255268
data[0] = byte(n)
256269
case 2:
@@ -260,7 +273,7 @@ func putValueNumber(data []byte, typ btf.Type, value string) error {
260273
case 8:
261274
internal.NativeEndian.PutUint64(data, uint64(n))
262275
default:
263-
return fmt.Errorf("size (%d) is not valid, expected: 1, 2, 4 or 8", size)
276+
return fmt.Errorf("size (%d) is not valid, expected: 1, 2, 4 or 8", integer.Size)
264277
}
265278

266279
return nil

0 commit comments

Comments
 (0)