arch/defs_arches_linux.go (76 lines of code) (raw):
// 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.
//go:build ignore
// +build ignore
package arch
// #include <linux/audit.h>
import "C"
import (
"strconv"
)
// The arch field is not unique for all calling conventions. The x86-64
// ABI and the x32 ABI both use AUDIT_ARCH_X86_64 as arch, and they run
// on the same processors. Instead, the mask __X32_SYSCALL_BIT is used
// on the system call number to tell the two ABIs apart.
// https://github.com/torvalds/linux/blob/v4.16/arch/x86/include/uapi/asm/unistd.h#L6
const x32SyscallMask = 0x40000000
// AuditArch represents a machine architecture (i.e. arm, ppc, x86_64).
type AuditArch uint32
// List of architectures constants used by then kernel.
const (
auditArchAARCH64 AuditArch = C.AUDIT_ARCH_AARCH64
auditArchARM AuditArch = C.AUDIT_ARCH_ARM
auditArchARMEB AuditArch = C.AUDIT_ARCH_ARMEB
auditArchCRIS AuditArch = C.AUDIT_ARCH_CRIS
auditArchFRV AuditArch = C.AUDIT_ARCH_FRV
auditArchI386 AuditArch = C.AUDIT_ARCH_I386
auditArchIA64 AuditArch = C.AUDIT_ARCH_IA64
auditArchM32R AuditArch = C.AUDIT_ARCH_M32R
auditArchM68K AuditArch = C.AUDIT_ARCH_M68K
auditArchMIPS AuditArch = C.AUDIT_ARCH_MIPS
auditArchMIPS64 AuditArch = C.AUDIT_ARCH_MIPS64
auditArchMIPS64N32 AuditArch = C.AUDIT_ARCH_MIPS64N32
auditArchMIPSEL AuditArch = C.AUDIT_ARCH_MIPSEL
auditArchMIPSEL64 AuditArch = C.AUDIT_ARCH_MIPSEL64
auditArchMIPSEL64N32 AuditArch = C.AUDIT_ARCH_MIPSEL64N32
auditArchPARISC AuditArch = C.AUDIT_ARCH_PARISC
auditArchPARISC64 AuditArch = C.AUDIT_ARCH_PARISC64
auditArchPPC AuditArch = C.AUDIT_ARCH_PPC
auditArchPPC64 AuditArch = C.AUDIT_ARCH_PPC64
auditArchPPC64LE AuditArch = C.AUDIT_ARCH_PPC64LE
auditArchS390 AuditArch = C.AUDIT_ARCH_S390
auditArchS390X AuditArch = C.AUDIT_ARCH_S390X
auditArchSH AuditArch = C.AUDIT_ARCH_SH
auditArchSH64 AuditArch = C.AUDIT_ARCH_SH64
auditArchSHEL AuditArch = C.AUDIT_ARCH_SHEL
auditArchSHEL64 AuditArch = C.AUDIT_ARCH_SHEL64
auditArchSPARC AuditArch = C.AUDIT_ARCH_SPARC
auditArchSPARC64 AuditArch = C.AUDIT_ARCH_SPARC64
auditArchX86_64 AuditArch = C.AUDIT_ARCH_X86_64
)
var auditArchNames = map[AuditArch]string{
auditArchAARCH64: "aarch64",
auditArchARM: "arm",
auditArchARMEB: "armeb",
auditArchCRIS: "cris",
auditArchFRV: "frv",
auditArchI386: "i386",
auditArchIA64: "ia64",
auditArchM32R: "m32r",
auditArchM68K: "m68k",
auditArchMIPS: "mips",
auditArchMIPS64: "mips64",
auditArchMIPS64N32: "mips64n32",
auditArchMIPSEL: "mipsel",
auditArchMIPSEL64: "mipsel64",
auditArchMIPSEL64N32: "mipsel64n32",
auditArchPARISC: "parisc",
auditArchPARISC64: "parisc64",
auditArchPPC: "ppc",
auditArchPPC64: "ppc64",
auditArchPPC64LE: "ppc64le",
auditArchS390: "s390",
auditArchS390X: "s390x",
auditArchSH: "sh",
auditArchSH64: "sh64",
auditArchSHEL: "shel",
auditArchSHEL64: "shel64",
auditArchSPARC: "sparc",
auditArchSPARC64: "sparc64",
auditArchX86_64: "x86_64",
}
// String returns a string representation of the architecture.
func (a AuditArch) String() string {
name, found := auditArchNames[a]
if found {
return name
}
return "unknown[" + strconv.Itoa(int(a)) + "]"
}