From 2211f6f960b65d200a3142798cf86576405c24cb Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Wed, 5 Aug 2020 15:21:00 +0200 Subject: [PATCH] ARM: Ensure relative GG_State element alignment differently. Thanks to jojo59516 and dwing4g. --- src/lj_dispatch.h | 8 ++++++++ src/lj_jit.h | 6 +----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/lj_dispatch.h b/src/lj_dispatch.h index 17bf93da..6a3bc2bd 100644 --- a/src/lj_dispatch.h +++ b/src/lj_dispatch.h @@ -70,12 +70,20 @@ typedef uint16_t HotCount; typedef struct GG_State { lua_State L; /* Main thread. */ global_State g; /* Global state. */ +#if LJ_TARGET_ARM + /* Make g reachable via K12 encoded DISPATCH-relative addressing. */ + uint8_t align1[(16-sizeof(global_State))&15]; +#endif #if LJ_TARGET_MIPS ASMFunction got[LJ_GOT__MAX]; /* Global offset table. */ #endif #if LJ_HASJIT jit_State J; /* JIT state. */ HotCount hotcount[HOTCOUNT_SIZE]; /* Hot counters. */ +#if LJ_TARGET_ARM + /* Ditto for J. */ + uint8_t align2[(16-sizeof(jit_State)-sizeof(HotCount)*HOTCOUNT_SIZE)&15]; +#endif #endif ASMFunction dispatch[GG_LEN_DISP]; /* Instruction dispatch tables. */ BCIns bcff[GG_NUM_ASMFF]; /* Bytecode for ASM fast functions. */ diff --git a/src/lj_jit.h b/src/lj_jit.h index 0e1c4827..4a4b0b1b 100644 --- a/src/lj_jit.h +++ b/src/lj_jit.h @@ -406,11 +406,7 @@ typedef struct jit_State { size_t szallmcarea; /* Total size of all allocated mcode areas. */ TValue errinfo; /* Additional info element for trace errors. */ -} -#if LJ_TARGET_ARM -LJ_ALIGN(16) /* For DISPATCH-relative addresses in assembler part. */ -#endif -jit_State; +} jit_State; /* Trivial PRNG e.g. used for penalty randomization. */ static LJ_AINLINE uint32_t LJ_PRNG_BITS(jit_State *J, int bits)