123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- /* vim: set expandtab ts=4 sw=4: */
- /*
- * You may redistribute this program and/or modify it under the terms of
- * the GNU General Public License as published by the Free Software Foundation,
- * either version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <https://www.gnu.org/licenses/>.
- */
- #include "util/ArchInfo.h"
- #include "util/Endian.h"
- /*
- Autogenerated list of arch-info, using the following:
- #include "linux/elf-em.h"
- #include "linux/audit.h"
- #include "stdio.h"
- #define EM_OPENRISC 92
- static const struct { char* name; unsigned int id; } archs[] = {
- #include "arch.x"
- {0}
- };
- int main()
- {
- int i;
- for (i=0; archs[i].name; i++) {
- printf("#define ArchInfo_%s 0x%08x\n", archs[i].name, archs[i].id);
- }
- return 0;
- }
- echo '#include "linux/audit.h"' | gcc -E -dM - | grep '#define AUDIT_ARCH' | \
- awk '{print "{ .name=\""$2"\", .id="$2" },"}' > arch.x
- gcc arch.c
- ./a.out
- */
- #define ArchInfo_AUDIT_ARCH_SPARC64 0x8000002b
- #define ArchInfo_AUDIT_ARCH_MIPS 0x00000008
- #define ArchInfo_AUDIT_ARCH_S390 0x00000016
- #define ArchInfo_AUDIT_ARCH_PPC64 0x80000015
- #define ArchInfo_AUDIT_ARCH_SHEL64 0xc000002a
- #define ArchInfo_AUDIT_ARCH_SH 0x0000002a
- #define ArchInfo_AUDIT_ARCH_PARISC64 0x8000000f
- #define ArchInfo_AUDIT_ARCH_MIPSEL64 0xc0000008
- #define ArchInfo_AUDIT_ARCH_MIPS64N32 0xa0000008
- #define ArchInfo_AUDIT_ARCH_IA64 0xc0000032
- #define ArchInfo_AUDIT_ARCH_PARISC 0x0000000f
- #define ArchInfo_AUDIT_ARCH_MIPS64 0x80000008
- #define ArchInfo_AUDIT_ARCH_RISCV64 0xc00000f3
- #define ArchInfo_AUDIT_ARCH_PPC64LE 0xc0000015
- #define ArchInfo_AUDIT_ARCH_ALPHA 0xc0009026
- #define ArchInfo_AUDIT_ARCH_MIPSEL 0x40000008
- #define ArchInfo_AUDIT_ARCH_SPARC 0x00000002
- #define ArchInfo_AUDIT_ARCH_I386 0x40000003
- #define ArchInfo_AUDIT_ARCH_OPENRISC 0x0000005c
- #define ArchInfo_AUDIT_ARCH_AARCH64 0xc00000b7
- #define ArchInfo_AUDIT_ARCH_FRV 0x00005441
- #define ArchInfo_AUDIT_ARCH_ARM 0x40000028
- #define ArchInfo_AUDIT_ARCH_X86_64 0xc000003e
- #define ArchInfo_AUDIT_ARCH_ARMEB 0x00000028
- #define ArchInfo_AUDIT_ARCH_M68K 0x00000004
- #define ArchInfo_AUDIT_ARCH_S390X 0x80000016
- #define ArchInfo_AUDIT_ARCH_PPC 0x00000014
- #define ArchInfo_AUDIT_ARCH_SH64 0x8000002a
- #define ArchInfo_AUDIT_ARCH_MIPSEL64N32 0xe0000008
- #define ArchInfo_AUDIT_ARCH_SHEL 0x4000002a
- #define ArchInfo_AUDIT_ARCH_M32R 0x00000058
- #define ArchInfo_AUDIT_ARCH_CRIS 0x4000004c
- /**
- * Manually generated detection routine...
- */
- #if defined(__amd64__) || defined(__x86_64__) || defined(__AMD64__) || \
- defined(_M_X64) || defined(__amd64)
- #define ARCH ArchInfo_AUDIT_ARCH_X86_64
- #define ARCHSTR "amd64"
- #elif defined(__i386__) || defined(__x86__) || defined(__X86__) || \
- defined(_M_IX86) || defined(__i386)
- #define ARCH ArchInfo_AUDIT_ARCH_I386
- #define ARCHSTR "i386"
- #elif defined(__aarch64__)
- #define ARCH ArchInfo_AUDIT_ARCH_AARCH64
- #define ARCHSTR "arm64"
- #elif defined(__ARM_EABI__) || defined(__arm__)
- #if defined(Endian_BIG)
- #define ARCH ArchInfo_AUDIT_ARCH_ARMEB
- #define ARCHSTR "armeb"
- #elif defined(Endian_LITTLE)
- #define ARCH ArchInfo_AUDIT_ARCH_ARM
- #define ARCHSTR "armel"
- #else
- #error unknown endian
- #endif
- #elif defined(__powerpc64__) || defined(__ppc64__) || defined(__PPC64__) || defined(_ARCH_PPC64)
- #if defined(Endian_BIG)
- #define ARCH ArchInfo_AUDIT_ARCH_PPC64
- #define ARCHSTR "ppc64"
- #elif defined(Endian_LITTLE)
- #define ARCH ArchInfo_AUDIT_ARCH_PPC64LE
- #define ARCHSTR "ppc64le"
- #else
- #error unknown endian
- #endif
- #elif defined(__powerpc__) || defined(__ppc__) || defined(__PPC__) || defined(_ARCH_PPC)
- #define ARCH ArchInfo_AUDIT_ARCH_PPC
- #define ARCHSTR "ppc"
- #elif defined(__sparcv9__) || defined(__sparcv9)
- #define ARCH ArchInfo_AUDIT_ARCH_SPARC64
- #define ARCHSTR "sparc64"
- Assert_compileTime(sizeof(long) == 8);
- #elif defined(__sparc_v8__)
- #define ARCH ArchInfo_AUDIT_ARCH_SPARC
- #define ARCHSTR "sparc"
- Assert_compileTime(sizeof(long) == 4);
- #elif defined(__sparc__) || defined(__sparc)
- #if defined(__SIZEOF_POINTER__) && __SIZEOF_POINTER__ == 8
- #define ARCH ArchInfo_AUDIT_ARCH_SPARC64
- #define ARCHSTR "sparc64"
- #elif defined(__SIZEOF_POINTER__) && __SIZEOF_POINTER__ == 4
- #define ARCH ArchInfo_AUDIT_ARCH_SPARC
- #define ARCHSTR "sparc"
- #else
- #error unknown bit width
- #endif
- #elif defined(__mips__) || defined(__mips) || defined(__MIPS__)
- #if defined(__SIZEOF_POINTER__) && __SIZEOF_POINTER__ == 8
- #if defined(Endian_BIG)
- #define ARCH ArchInfo_AUDIT_ARCH_MIPS64
- #define ARCHSTR "mips64"
- #elif defined(Endian_LITTLE)
- #define ARCH ArchInfo_AUDIT_ARCH_MIPSEL64
- #define ARCHSTR "mipsel64"
- #else
- #error unknown endian
- #endif
- #elif defined(__SIZEOF_POINTER__) && __SIZEOF_POINTER__ == 4
- #if defined(Endian_BIG)
- #define ARCH ArchInfo_AUDIT_ARCH_MIPS
- #define ARCHSTR "mips"
- #elif defined(Endian_LITTLE)
- #define ARCH ArchInfo_AUDIT_ARCH_MIPSEL
- #define ARCHSTR "mipsel"
- #else
- #error unknown endian
- #endif
- #else
- #error unknown bit width
- #endif
- #elif defined(__s390x__)
- #define ARCH ArchInfo_AUDIT_ARCH_S390X
- #define ARCHSTR "s390x"
- #elif defined(__riscv) && __riscv_xlen == 64
- #define ARCH ArchInfo_AUDIT_ARCH_RISCV64
- #define ARCHSTR "riscv64"
- #else
- #error architecture unknown
- #endif
- uint32_t ArchInfo_getAuditArch(void)
- {
- return ARCH;
- }
- char* ArchInfo_getArchStr(void)
- {
- return ARCHSTR;
- }
|