libclamav/bytecode_detect.h
c85060ff
 /*
e1cbc270
  *  Copyright (C) 2013-2019 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
  *  Copyright (C) 2009-2013 Sourcefire, Inc.
c85060ff
  *
  * 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 {
288057e9
     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
c85060ff
 };
 
 /* from ClamAV's configure.in */
 enum os_kind_conf {
288057e9
     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
c85060ff
 };
 
 enum os_kind_llvm {
288057e9
     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
c85060ff
 };
 
 /* the ones from clamconf */
 enum compiler_list {
288057e9
     compiler_unknown = 0,
     compiler_gnuc,
     compiler_llvm,
     compiler_clang,
     compiler_intel,
     compiler_msc,
     compiler_sun,
     compiler_other,
     compiler_ANY = 0xf
c85060ff
 };
 
 enum endian_list {
288057e9
     endian_little = 0,
     endian_big    = 1,
     endian_ANY    = 0xf
c85060ff
 };
 
 enum os_feature_bits {
288057e9
     feature_map_rwx           = 0,
     feature_selinux           = 1,
c85060ff
     feature_selinux_enforcing = 2,
288057e9
     feature_pax               = 3,
     feature_pax_mprotect      = 4
c85060ff
 };
 
 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;
288057e9
     int8_t engine_version[65];
c85060ff
     /* detailed runtime info */
288057e9
     int8_t triple[65]; /* LLVM only */
     int8_t cpu[65];    /* LLVM only */
c85060ff
     /* uname */
288057e9
     int8_t sysname[65];
     int8_t release[65];
     int8_t version[65];
     int8_t machine[65];
c85060ff
     /* build time */
     uint8_t big_endian;
     uint8_t sizeof_ptr;
     uint8_t arch;
288057e9
     uint8_t os_category; /* from configure */
     uint8_t os;          /* from LLVM if available */
c85060ff
     uint8_t compiler;
     uint8_t has_jit_compiled;
     uint8_t os_features;
     uint8_t reserved0;
 };
 
 #ifndef __CLAMBC__
288057e9
 #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)
c85060ff
 #endif
 
 void cli_detect_env_jit(struct cli_environment *env);
88d54dcb
 void cli_detect_environment(struct cli_environment *env);
c85060ff
 #endif