mirror of
https://github.com/VectorCamp/vectorscan.git
synced 2025-09-29 19:24:25 +03:00
Windows porting: port hyperscan and chimera tools to windows.
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2017, Intel Corporation
|
||||
* Copyright (c) 2015-2018, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
@@ -122,11 +122,11 @@ typedef struct hs_scratch hs_scratch_t;
|
||||
* subsequent calls to @ref hs_scan_stream() for that stream will
|
||||
* immediately return with @ref HS_SCAN_TERMINATED.
|
||||
*/
|
||||
typedef int (*match_event_handler)(unsigned int id,
|
||||
unsigned long long from,
|
||||
unsigned long long to,
|
||||
unsigned int flags,
|
||||
void *context);
|
||||
typedef int (HS_CDECL *match_event_handler)(unsigned int id,
|
||||
unsigned long long from,
|
||||
unsigned long long to,
|
||||
unsigned int flags,
|
||||
void *context);
|
||||
|
||||
/**
|
||||
* Open and initialise a stream.
|
||||
|
@@ -1437,7 +1437,19 @@ void mergeLeftfixesVariableLag(RoseBuildImpl &build) {
|
||||
|
||||
assert(!parents.empty());
|
||||
|
||||
#ifndef _WIN32
|
||||
engine_groups[MergeKey(left, parents)].push_back(left);
|
||||
#else
|
||||
// On windows, when passing MergeKey object into map 'engine_groups',
|
||||
// it will not be copied, but will be freed along with
|
||||
// engine_groups.clear().
|
||||
// If we construct MergeKey object on the stack, it will be destructed
|
||||
// on its life cycle ending, then on engine_groups.clear(), which
|
||||
// will cause is_block_type_valid() assertion error in MergeKey
|
||||
// destructor.
|
||||
MergeKey *mk = new MergeKey(left, parents);
|
||||
engine_groups[*mk].push_back(left);
|
||||
#endif
|
||||
}
|
||||
|
||||
vector<vector<left_id>> chunks;
|
||||
|
@@ -67,9 +67,9 @@ void prefetch_data(const char *data, unsigned length) {
|
||||
|
||||
/** dummy event handler for use when user does not provide one */
|
||||
static
|
||||
int null_onEvent(UNUSED unsigned id, UNUSED unsigned long long from,
|
||||
UNUSED unsigned long long to, UNUSED unsigned flags,
|
||||
UNUSED void *ctxt) {
|
||||
int HS_CDECL null_onEvent(UNUSED unsigned id, UNUSED unsigned long long from,
|
||||
UNUSED unsigned long long to, UNUSED unsigned flags,
|
||||
UNUSED void *ctxt) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@@ -36,6 +36,7 @@
|
||||
#ifndef SCRATCH_H_DA6D4FC06FF410
|
||||
#define SCRATCH_H_DA6D4FC06FF410
|
||||
|
||||
#include "hs_common.h"
|
||||
#include "ue2common.h"
|
||||
#include "rose/rose_types.h"
|
||||
|
||||
@@ -88,8 +89,9 @@ struct core_info {
|
||||
void *userContext; /**< user-supplied context */
|
||||
|
||||
/** \brief user-supplied match callback */
|
||||
int (*userCallback)(unsigned int id, unsigned long long from,
|
||||
unsigned long long to, unsigned int flags, void *ctx);
|
||||
int (HS_CDECL *userCallback)(unsigned int id, unsigned long long from,
|
||||
unsigned long long to, unsigned int flags,
|
||||
void *ctx);
|
||||
|
||||
const struct RoseEngine *rose;
|
||||
char *state; /**< full stream state */
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2017, Intel Corporation
|
||||
* Copyright (c) 2015-2018, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
@@ -66,8 +66,13 @@ typedef signed int s32;
|
||||
/* We append the 'a' for aligned, since these aren't common, garden variety
|
||||
* 64 bit values. The alignment is necessary for structs on some platforms,
|
||||
* so we don't end up performing accidental unaligned accesses. */
|
||||
#if defined(_WIN32) && ! defined(_WIN64)
|
||||
typedef unsigned long long ALIGN_ATTR(4) u64a;
|
||||
typedef signed long long ALIGN_ATTR(4) s64a;
|
||||
#else
|
||||
typedef unsigned long long ALIGN_ATTR(8) u64a;
|
||||
typedef signed long long ALIGN_ATTR(8) s64a;
|
||||
#endif
|
||||
|
||||
/* get the SIMD types */
|
||||
#include "util/simd_types.h"
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2017, Intel Corporation
|
||||
* Copyright (c) 2015-2018, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
@@ -305,9 +305,10 @@ public:
|
||||
}
|
||||
|
||||
/// Bitwise OR.
|
||||
bitfield operator|(bitfield a) const {
|
||||
a |= *this;
|
||||
return a;
|
||||
bitfield operator|(const bitfield &a) const {
|
||||
bitfield b = a;
|
||||
b |= *this;
|
||||
return b;
|
||||
}
|
||||
|
||||
/// Bitwise OR-equals.
|
||||
@@ -325,9 +326,10 @@ public:
|
||||
}
|
||||
|
||||
/// Bitwise AND.
|
||||
bitfield operator&(bitfield a) const {
|
||||
a &= *this;
|
||||
return a;
|
||||
bitfield operator&(const bitfield &a) const {
|
||||
bitfield b = a;
|
||||
b &= *this;
|
||||
return b;
|
||||
}
|
||||
|
||||
/// Bitwise AND-equals.
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2017, Intel Corporation
|
||||
* Copyright (c) 2015-2018, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
@@ -56,7 +56,11 @@ void describeChar(ostream &os, char c, enum cc_output_t out_type) {
|
||||
|
||||
const string backslash((out_type == CC_OUT_DOT ? 2 : 1), '\\');
|
||||
|
||||
#ifdef _WIN32
|
||||
if (c >= 0x21 && c < 0x7F && c != '\\') {
|
||||
#else
|
||||
if (isgraph(c) && c != '\\') {
|
||||
#endif
|
||||
if (escaped.find(c) != string::npos) {
|
||||
os << backslash << c;
|
||||
} else if (out_type == CC_OUT_DOT
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2016, Intel Corporation
|
||||
* Copyright (c) 2015-2018, Intel Corporation
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
@@ -1197,7 +1197,11 @@ u32 mmbit_sparse_iter_begin(const u8 *bits, u32 total_bits, u32 *idx,
|
||||
assert(ISALIGNED_N(it_root, alignof(struct mmbit_sparse_iter)));
|
||||
|
||||
// Our state _may_ be on the stack
|
||||
#ifndef _WIN32
|
||||
assert(ISALIGNED_N(s, alignof(struct mmbit_sparse_state)));
|
||||
#else
|
||||
assert(ISALIGNED_N(s, 4));
|
||||
#endif
|
||||
|
||||
MDEBUG_PRINTF("%p total_bits %u\n", bits, total_bits);
|
||||
// iterator should have _something_ at the root level
|
||||
@@ -1305,7 +1309,11 @@ u32 mmbit_sparse_iter_next(const u8 *bits, u32 total_bits, u32 last_key,
|
||||
assert(ISALIGNED_N(it_root, alignof(struct mmbit_sparse_iter)));
|
||||
|
||||
// Our state _may_ be on the stack
|
||||
#ifndef _WIN32
|
||||
assert(ISALIGNED_N(s, alignof(struct mmbit_sparse_state)));
|
||||
#else
|
||||
assert(ISALIGNED_N(s, 4));
|
||||
#endif
|
||||
|
||||
MDEBUG_PRINTF("%p total_bits %u\n", bits, total_bits);
|
||||
MDEBUG_PRINTF("NEXT (total_bits=%u, last_key=%u)\n", total_bits, last_key);
|
||||
@@ -1458,7 +1466,11 @@ void mmbit_sparse_iter_unset(u8 *bits, u32 total_bits,
|
||||
assert(ISALIGNED_N(it, alignof(struct mmbit_sparse_iter)));
|
||||
|
||||
// Our state _may_ be on the stack
|
||||
#ifndef _WIN32
|
||||
assert(ISALIGNED_N(s, alignof(struct mmbit_sparse_state)));
|
||||
#else
|
||||
assert(ISALIGNED_N(s, 4));
|
||||
#endif
|
||||
|
||||
MDEBUG_PRINTF("%p total_bits %u\n", bits, total_bits);
|
||||
|
||||
|
@@ -46,7 +46,7 @@ using namespace std;
|
||||
|
||||
namespace ue2 {
|
||||
|
||||
u32 HS_CDECL mmbit_size(u32 total_bits) {
|
||||
u32 mmbit_size(u32 total_bits) {
|
||||
if (total_bits > MMB_MAX_BITS) {
|
||||
throw ResourceLimitError();
|
||||
}
|
||||
|
@@ -63,10 +63,8 @@ namespace ue2 {
|
||||
*
|
||||
* This will throw a resource limit assertion if the requested mmbit is too
|
||||
* large.
|
||||
*
|
||||
* TODO:add temporary HS_CDECL for chimera on Windows, need improve this.
|
||||
*/
|
||||
u32 HS_CDECL mmbit_size(u32 total_bits);
|
||||
u32 mmbit_size(u32 total_bits);
|
||||
|
||||
/** \brief Construct a sparse iterator over the values in \a bits for a
|
||||
* multibit of size \a total_bits. */
|
||||
|
Reference in New Issue
Block a user