auparse/mk_audit_arches.pl (71 lines of code) (raw):

#!/usr/bin/env perl # Copyright 2017 Elasticsearch Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. use strict; my $command = "mk_audit_arches.pl ". join(' ', @ARGV); `curl -s -O https://raw.githubusercontent.com/torvalds/linux/v6.11/include/uapi/linux/audit.h`; open(GCC, "gcc -E -dD audit.h |") || die "can't run gcc"; my @arches; while(<GCC>){ if (/^#define (AUDIT_ARCH_\w+)/){ my $arch = $1; push @arches, $1 } } close GCC; # Filter arches not known by compiler. @arches = grep {! /(TILE|OPENRISC|ALPHA|MICROBLAZE|ARCOMPACT|ARCV2|CSKY|HEXAGON|NDS32|RISCV|UNICORE|XTENSA)/} @arches; my $outfile = 'defs_audit_arches.go'; open (FILE, "> $outfile") || die "problem opening $outfile\n"; print FILE <<EOF; // Licensed to Elasticsearch B.V. under one or more contributor // license agreements. See the NOTICE file distributed with // this work for additional information regarding copyright // ownership. Elasticsearch B.V. licenses this file to you under // the Apache License, Version 2.0 (the "License"); you may // not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. // Code generated by $command - DO NOT EDIT. //go:build ignore // +build ignore package auparse /* #include <audit.h> */ import "C" import "fmt" // AuditArch represents a machine architecture (i.e. arm, ppc, x86_64). type AuditArch uint32 // List of architectures constants used by then kernel. const( EOF foreach my $arch (sort @arches) { print FILE "\t$arch AuditArch = C.$arch\n"; } print FILE <<EOF; ) var AuditArchNames = map[AuditArch]string{ EOF foreach my $arch (sort @arches) { if ($arch =~ m/^AUDIT_ARCH_(\w+)/) { my $name = lc($1); print FILE "\t$arch: \"$name\",\n"; } } print FILE <<EOF; } func (a AuditArch) String() string { name, found := AuditArchNames[a] if found { return name } return fmt.Sprintf("unknown[%x]", uint32(a)) } EOF close(FILE); `go tool cgo -godefs $outfile > zaudit_arches.go`; `gofmt -s -w $outfile zaudit_arches.go`;