Looking better at the Parrot_exec_rel_... vars, they are not intended to be exported at all, they are globals for private usage between exec and jit, so they don't need the API or DATA things. This patch cleans it, make sure they are defined only in jit.c and declared as extern in the others, and also moves his declaration in 386 jit_emit.h before his first usage.
I hope that this changes will solve the issue in all platforms. Next step will be to try to get rid of these globals. -- Salu2
Index: src/exec.c =================================================================== --- src/exec.c (revisión: 27764) +++ src/exec.c (copia de trabajo) @@ -61,9 +61,10 @@ */ int Parrot_exec_run = 0; -char **Parrot_exec_rel_addr; -int Parrot_exec_rel_count; +extern char **Parrot_exec_rel_addr; +extern int Parrot_exec_rel_count; + /* =item C<void Parrot_exec> Index: src/jit/i386/jit_emit.h =================================================================== --- src/jit/i386/jit_emit.h (revisión: 27764) +++ src/jit/i386/jit_emit.h (copia de trabajo) @@ -91,6 +91,9 @@ #define ISR1 emit_EAX #define FSR1 0 +extern char **Parrot_exec_rel_addr; +extern int Parrot_exec_rel_count; + /* Register the address of a rellocation. */ #if EXEC_CAPABLE # define EXEC_RA(addr) \ @@ -149,9 +152,6 @@ #define emit_alu_r_r(reg1, reg2) emit_alu_X_r(((reg1) - 1), (reg2)) -PARROT_DATA char **Parrot_exec_rel_addr; -PARROT_DATA int Parrot_exec_rel_count; - static int emit_is8bit(long disp) { Index: src/jit/i386/exec_dep.c =================================================================== --- src/jit/i386/exec_dep.c (revisión: 27764) +++ src/jit/i386/exec_dep.c (copia de trabajo) @@ -32,8 +32,8 @@ jit_info->optimizer->cur_section; int i, j, last_is_branch = 0; void ** offset; - extern PARROT_API char **Parrot_exec_rel_addr; - extern PARROT_API int Parrot_exec_rel_count; + extern char **Parrot_exec_rel_addr; + extern int Parrot_exec_rel_count; assert(op_jit[*jit_info->cur_op].extcall == 1); if (cur_section->done == 1) Index: src/jit.c =================================================================== --- src/jit.c (revisión: 27764) +++ src/jit.c (copia de trabajo) @@ -48,8 +48,8 @@ void Parrot_jit_debug(PARROT_INTERP); #endif -PARROT_API char **Parrot_exec_rel_addr; -PARROT_API int Parrot_exec_rel_count; +char **Parrot_exec_rel_addr; +int Parrot_exec_rel_count; /* Index: tools/build/jit2c.pl =================================================================== --- tools/build/jit2c.pl (revisión: 27764) +++ tools/build/jit2c.pl (copia de trabajo) @@ -285,8 +285,8 @@ # define MAP(i) jit_info->optimizer->map_branch[jit_info->op_i + (i)] #endif -PARROT_DATA char **Parrot_exec_rel_addr; -PARROT_DATA int Parrot_exec_rel_count; +extern char **Parrot_exec_rel_addr; +extern int Parrot_exec_rel_count; #define ROFFS_INT(x) REG_OFFS_INT(jit_info->cur_op[x]) #define ROFFS_NUM(x) REG_OFFS_NUM(jit_info->cur_op[x])