160 lines
4.2 KiB
C
160 lines
4.2 KiB
C
|
/*
|
||
|
* Copyright (C) 2013-2022 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
|
||
|
* Copyright (C) 2009-2013 Sourcefire, Inc.
|
||
|
*
|
||
|
* Redistribution and use in source and binary forms, with or without
|
||
|
* modification, are permitted provided that the following conditions
|
||
|
* are met:
|
||
|
* 1. Redistributions of source code must retain the above copyright
|
||
|
* notice, this list of conditions and the following disclaimer.
|
||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||
|
* notice, this list of conditions and the following disclaimer in the
|
||
|
* documentation and/or other materials provided with the distribution.
|
||
|
*
|
||
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS AS IS'' AND
|
||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||
|
* SUCH DAMAGE.
|
||
|
*/
|
||
|
#ifndef BYTECODE_DETECT_H
|
||
|
#define BYTECODE_DETECT_H
|
||
|
/* mostly from m4/acinclude.m4 */
|
||
|
enum arch_list {
|
||
|
arch_unknown = 0,
|
||
|
arch_i386,
|
||
|
arch_x86_64,
|
||
|
arch_ppc32,
|
||
|
arch_ppc64,
|
||
|
arch_arm,
|
||
|
arch_sparc,
|
||
|
arch_sparc64,
|
||
|
arch_mips,
|
||
|
arch_mips64,
|
||
|
arch_alpha,
|
||
|
arch_hppa1,
|
||
|
arch_hppa2,
|
||
|
arch_m68k,
|
||
|
arch_ANY = 0xf
|
||
|
};
|
||
|
|
||
|
/* from ClamAV's configure.in */
|
||
|
enum os_kind_conf {
|
||
|
os_unknown = 0,
|
||
|
os_aix,
|
||
|
os_beos,
|
||
|
os_bsd,
|
||
|
os_darwin,
|
||
|
os_gnu_hurd,
|
||
|
os_hpux,
|
||
|
os_interix,
|
||
|
os_irix,
|
||
|
os_kfreebsd_gnu,
|
||
|
os_linux,
|
||
|
os_os2,
|
||
|
os_osf,
|
||
|
os_qnx6,
|
||
|
os_solaris,
|
||
|
os_win32,
|
||
|
os_win64,
|
||
|
os_generic,
|
||
|
os_ANY = 0xff
|
||
|
};
|
||
|
|
||
|
enum os_kind_llvm {
|
||
|
llvm_os_UnknownOS = 0,
|
||
|
llvm_os_AuroraUX,
|
||
|
llvm_os_Cygwin,
|
||
|
llvm_os_Darwin,
|
||
|
llvm_os_DragonFly,
|
||
|
llvm_os_FreeBSD,
|
||
|
llvm_os_Linux,
|
||
|
llvm_os_Lv2,
|
||
|
llvm_os_MinGW32,
|
||
|
llvm_os_MinGW64,
|
||
|
llvm_os_NetBSD,
|
||
|
llvm_os_OpenBSD,
|
||
|
llvm_os_Psp,
|
||
|
llvm_os_Solaris,
|
||
|
llvm_os_Win32,
|
||
|
llvm_os_Haiku,
|
||
|
llvm_os_Minix,
|
||
|
llvm_os_ANY = 0xff
|
||
|
};
|
||
|
|
||
|
/* the ones from clamconf */
|
||
|
enum compiler_list {
|
||
|
compiler_unknown = 0,
|
||
|
compiler_gnuc,
|
||
|
compiler_llvm,
|
||
|
compiler_clang,
|
||
|
compiler_intel,
|
||
|
compiler_msc,
|
||
|
compiler_sun,
|
||
|
compiler_other,
|
||
|
compiler_ANY = 0xf
|
||
|
};
|
||
|
|
||
|
enum endian_list {
|
||
|
endian_little = 0,
|
||
|
endian_big = 1,
|
||
|
endian_ANY = 0xf
|
||
|
};
|
||
|
|
||
|
enum os_feature_bits {
|
||
|
feature_map_rwx = 0,
|
||
|
feature_selinux = 1,
|
||
|
feature_selinux_enforcing = 2,
|
||
|
feature_pax = 3,
|
||
|
feature_pax_mprotect = 4
|
||
|
};
|
||
|
|
||
|
struct cli_environment {
|
||
|
uint32_t platform_id_a;
|
||
|
uint32_t platform_id_b;
|
||
|
uint32_t platform_id_c;
|
||
|
uint32_t c_version;
|
||
|
uint32_t cpp_version; /* LLVM only */
|
||
|
/* engine */
|
||
|
uint32_t functionality_level;
|
||
|
uint32_t dconf_level;
|
||
|
int8_t engine_version[65];
|
||
|
/* detailed runtime info */
|
||
|
int8_t triple[65]; /* LLVM only */
|
||
|
int8_t cpu[65]; /* LLVM only */
|
||
|
/* uname */
|
||
|
int8_t sysname[65];
|
||
|
int8_t release[65];
|
||
|
int8_t version[65];
|
||
|
int8_t machine[65];
|
||
|
/* build time */
|
||
|
uint8_t big_endian;
|
||
|
uint8_t sizeof_ptr;
|
||
|
uint8_t arch;
|
||
|
uint8_t os_category; /* from configure */
|
||
|
uint8_t os; /* from LLVM if available */
|
||
|
uint8_t compiler;
|
||
|
uint8_t has_jit_compiled;
|
||
|
uint8_t os_features;
|
||
|
uint8_t reserved0;
|
||
|
};
|
||
|
|
||
|
#ifndef __CLAMBC__
|
||
|
#define MAKE_VERSION(a, b, c, d) ((a << 24) | (b << 16) | (c << 8) | d)
|
||
|
#define INIT_STRFIELD(field, value) \
|
||
|
do { \
|
||
|
strncpy((char *)(field), (value), sizeof(field) - 1); \
|
||
|
(field)[sizeof(field) - 1] = 0; \
|
||
|
} while (0)
|
||
|
#endif
|
||
|
|
||
|
void cli_detect_env_jit(struct cli_environment *env);
|
||
|
void cli_detect_environment(struct cli_environment *env);
|
||
|
#endif
|