Skip to content

Commit f79a4e4

Browse files
committed
Fix segfault in decoder init
1 parent eae08db commit f79a4e4

7 files changed

+14
-12
lines changed

src/decoder.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ static inline void decoder_set_native_funcs() {
3535
# else
3636
# include "decoder_sse_base.h"
3737
static inline void decoder_set_native_funcs() {
38-
decoder_sse_init();
38+
decoder_sse_init(lookups);
3939
decoder_init_lut(lookups->compact);
4040
_do_decode = &do_decode_simd<false, false, sizeof(__m128i)*2, do_decode_sse<false, false, ISA_NATIVE> >;
4141
_do_decode_raw = &do_decode_simd<true, false, sizeof(__m128i)*2, do_decode_sse<true, false, ISA_NATIVE> >;

src/decoder_avx.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#include "decoder_common.h"
55
#include "decoder_sse_base.h"
66
void decoder_set_avx_funcs() {
7-
decoder_sse_init();
7+
decoder_sse_init(lookups);
88
decoder_init_lut(lookups->compact);
99
_do_decode = &do_decode_simd<false, false, sizeof(__m128i)*2, do_decode_sse<false, false, ISA_LEVEL_SSE4_POPCNT> >;
1010
_do_decode_raw = &do_decode_simd<true, false, sizeof(__m128i)*2, do_decode_sse<true, false, ISA_LEVEL_SSE4_POPCNT> >;

src/decoder_common.h

+4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
#include "decoder.h"
22

3+
#if defined(PLATFORM_ARM) && !defined(__aarch64__)
4+
#define YENC_DEC_USE_THINTABLE 1
5+
#endif
6+
37
// TODO: need to support max output length somehow
48
// TODO: add branch probabilities
59

src/decoder_neon.cc

-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
#include "common.h"
22
#ifdef __ARM_NEON
33

4-
#ifndef __aarch64__
5-
#define YENC_DEC_USE_THINTABLE 1
6-
#endif
74
#include "decoder_common.h"
85

96

src/decoder_sse2.cc

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
#include "decoder_common.h"
55
#include "decoder_sse_base.h"
66

7-
void decoder_sse_init() {
8-
ALIGN_ALLOC(lookups, sizeof(*lookups), 16);
7+
void decoder_sse_init(SSELookups* HEDLEY_RESTRICT& lookups) {
8+
ALIGN_ALLOC(lookups, sizeof(SSELookups), 16);
99
for(int i=0; i<256; i++) {
1010
lookups->BitsSetTable256inv[i] = 8 - (
1111
(i & 1) + ((i>>1) & 1) + ((i>>2) & 1) + ((i>>3) & 1) + ((i>>4) & 1) + ((i>>5) & 1) + ((i>>6) & 1) + ((i>>7) & 1)
@@ -26,7 +26,7 @@ void decoder_sse_init() {
2626
}
2727

2828
void decoder_set_sse2_funcs() {
29-
decoder_sse_init();
29+
decoder_sse_init(lookups);
3030
decoder_init_lut(lookups->compact);
3131
_do_decode = &do_decode_simd<false, false, sizeof(__m128i)*2, do_decode_sse<false, false, ISA_LEVEL_SSE2> >;
3232
_do_decode_raw = &do_decode_simd<true, false, sizeof(__m128i)*2, do_decode_sse<true, false, ISA_LEVEL_SSE2> >;

src/decoder_sse_base.h

+4-3
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,13 @@
2626
#endif
2727

2828
#pragma pack(16)
29-
static struct {
29+
typedef struct {
3030
unsigned char BitsSetTable256inv[256];
3131
/*align16*/ struct { char bytes[16]; } compact[32768];
3232
/*align8*/ uint64_t eqAdd[256];
3333
/*align16*/ int8_t unshufMask[32*16];
34-
} * HEDLEY_RESTRICT lookups;
34+
} SSELookups;
35+
static SSELookups* HEDLEY_RESTRICT lookups;
3536
#pragma pack()
3637

3738

@@ -44,7 +45,7 @@ static HEDLEY_ALWAYS_INLINE __m128i force_align_read_128(const void* p) {
4445
#endif
4546
}
4647

47-
void decoder_sse_init(); // defined in decoder_sse2.cc
48+
void decoder_sse_init(SSELookups* HEDLEY_RESTRICT& lookups); // defined in decoder_sse2.cc
4849

4950

5051
// for LZCNT/BSR

src/decoder_ssse3.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#include "decoder_common.h"
55
#include "decoder_sse_base.h"
66
void decoder_set_ssse3_funcs() {
7-
decoder_sse_init();
7+
decoder_sse_init(lookups);
88
decoder_init_lut(lookups->compact);
99
_do_decode = &do_decode_simd<false, false, sizeof(__m128i)*2, do_decode_sse<false, false, ISA_LEVEL_SSSE3> >;
1010
_do_decode_raw = &do_decode_simd<true, false, sizeof(__m128i)*2, do_decode_sse<true, false, ISA_LEVEL_SSSE3> >;

0 commit comments

Comments
 (0)