Skip to content

Commit a227288

Browse files
committed
Fix 32 bits targets.
Warning: problem with arm-linux-user.
1 parent 5964a6a commit a227288

File tree

5 files changed

+47
-14
lines changed

5 files changed

+47
-14
lines changed

accel/tcg/tcg-runtime-sym-common.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,8 @@ void *build_and_push_path_constraint(CPUArchState *env, void *arg1_expr, void *a
5959
/* Architecture-independent way to get the program counter */
6060
target_ulong get_pc(CPUArchState *env)
6161
{
62-
target_ulong pc, cs_base;
62+
vaddr pc;
63+
uint64_t cs_base;
6364
uint32_t flags;
6465

6566
cpu_get_tb_cpu_state(env, &pc, &cs_base, &flags);

accel/tcg/tcg-runtime-sym.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -313,22 +313,22 @@ static void *sym_load_guest_internal(CPUArchState *env,
313313
}
314314

315315
void *HELPER(sym_load_guest_i32)(CPUArchState *env,
316-
target_ulong addr, void *addr_expr,
317-
uint64_t length, target_ulong mmu_idx)
316+
uint64_t addr, void *addr_expr,
317+
uint64_t length, uint64_t mmu_idx)
318318
{
319319
return sym_load_guest_internal(env, addr, addr_expr, length, 4, mmu_idx);
320320
}
321321

322322
void *HELPER(sym_load_guest_i64)(CPUArchState *env,
323-
target_ulong addr, void *addr_expr,
324-
uint64_t length, target_ulong mmu_idx)
323+
uint64_t addr, void *addr_expr,
324+
uint64_t length, uint64_t mmu_idx)
325325
{
326326
return sym_load_guest_internal(env, addr, addr_expr, length, 8, mmu_idx);
327327
}
328328

329329
static void sym_store_guest_internal(CPUArchState *env,
330330
uint64_t value, void *value_expr,
331-
target_ulong addr, void *addr_expr,
331+
uint64_t addr, void *addr_expr,
332332
uint64_t length, target_ulong mmu_idx)
333333
{
334334
/* Try an alternative address */
@@ -344,17 +344,17 @@ static void sym_store_guest_internal(CPUArchState *env,
344344

345345
void HELPER(sym_store_guest_i32)(CPUArchState *env,
346346
uint32_t value, void *value_expr,
347-
target_ulong addr, void *addr_expr,
348-
uint64_t length, target_ulong mmu_idx)
347+
uint64_t addr, void *addr_expr,
348+
uint64_t length, uint64_t mmu_idx)
349349
{
350350
return sym_store_guest_internal(
351351
env, value, value_expr, addr, addr_expr, length, mmu_idx);
352352
}
353353

354354
void HELPER(sym_store_guest_i64)(CPUArchState *env,
355355
uint64_t value, void *value_expr,
356-
target_ulong addr, void *addr_expr,
357-
uint64_t length, target_ulong mmu_idx)
356+
uint64_t addr, void *addr_expr,
357+
uint64_t length, uint64_t mmu_idx)
358358
{
359359
return sym_store_guest_internal(
360360
env, value, value_expr, addr, addr_expr, length, mmu_idx);

configure

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1676,7 +1676,7 @@ mkdir -p tests/tcg
16761676
echo "# Automatically generated by configure - do not modify" > $config_host_mak
16771677
echo "SRC_PATH=$source_path" >> $config_host_mak
16781678
if test "$plugins" = "yes" ; then
1679-
echo "CONFIG_PLUGIN=y" >> tests/tcg/$config_host_mak
1679+
echo "CONFIG_PLUGIN=y" >> $config_host_mak
16801680
fi
16811681

16821682
tcg_tests_targets=

meson.build

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1083,7 +1083,7 @@ endif
10831083

10841084
symcc_rt_backend = get_option('symcc_rt_backend')
10851085

1086-
if not fs.is_file('subprojects/symcc-rt/RuntimeCommon.h')
1086+
if not fs.is_file('subprojects/symcc-rt/include/RuntimeCommon.h')
10871087
error('''Symcc Runtime does not seem to be present.
10881088
Did you initialize the symcc-rt submodule? (git submodule update --init --recursive subprojects/symcc-rt)''')
10891089
endif
@@ -1099,9 +1099,9 @@ symcc_rt_vars.add_cmake_defines({
10991099

11001100
symcc_rt_proj = cmake.subproject('symcc-rt', options: symcc_rt_vars)
11011101
if get_option('symcc_rt_shared')
1102-
symcc_rt = symcc_rt_proj.dependency('SymccRtShared')
1102+
symcc_rt = symcc_rt_proj.dependency('SymCCRtShared')
11031103
else
1104-
symcc_rt = symcc_rt_proj.dependency('SymccRtStatic')
1104+
symcc_rt = symcc_rt_proj.dependency('SymCCRtStatic')
11051105
endif
11061106

11071107
mpathlibs = [libudev]

target/i386/tcg/translate.c

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3604,7 +3604,15 @@ static bool disas_insn(DisasContext *s, CPUState *cpu)
36043604
if (dflag == MO_16) {
36053605
tcg_gen_ext16u_tl(s->T0, s->T0);
36063606
}
3607+
#if TARGET_LONG_BITS == 32
3608+
TCGv_i64 call_addr = tcg_temp_new_i64();
3609+
tcg_gen_extu_i32_i64(call_addr, eip_next_tl(s));
3610+
gen_helper_sym_notify_call(call_addr);
3611+
#elif TARGET_LONG_BITS == 64
36073612
gen_helper_sym_notify_call(eip_next_tl(s));
3613+
#else
3614+
#error Unhandled TARGET_LONG_BITS value
3615+
#endif
36083616
gen_push_v(s, eip_next_tl(s));
36093617
gen_op_jmp_v(s, s->T0);
36103618
gen_bnd_jmp(s);
@@ -5064,7 +5072,15 @@ static bool disas_insn(DisasContext *s, CPUState *cpu)
50645072
val = x86_ldsw_code(env, s);
50655073
ot = gen_pop_T0(s);
50665074
gen_stack_update(s, val + (1 << ot));
5075+
#if TARGET_LONG_BITS == 32
5076+
TCGv_i64 ret_addr = tcg_temp_new_i64();
5077+
tcg_gen_extu_i32_i64(ret_addr, s->T0);
5078+
gen_helper_sym_notify_return(ret_addr);
5079+
#elif TARGET_LONG_BITS == 64
50675080
gen_helper_sym_notify_return(s->T0);
5081+
#else
5082+
#error Unhandled TARGET_LONG_BITS value
5083+
#endif
50685084
/* Note that gen_pop_T0 uses a zero-extending load. */
50695085
gen_op_jmp_v(s, s->T0);
50705086
gen_bnd_jmp(s);
@@ -5073,7 +5089,15 @@ static bool disas_insn(DisasContext *s, CPUState *cpu)
50735089
case 0xc3: /* ret */
50745090
ot = gen_pop_T0(s);
50755091
gen_pop_update(s, ot);
5092+
#if TARGET_LONG_BITS == 32
5093+
TCGv_i64 ret_addr2 = tcg_temp_new_i64();
5094+
tcg_gen_extu_i32_i64(ret_addr2, s->T0);
5095+
gen_helper_sym_notify_return(ret_addr2);
5096+
#elif TARGET_LONG_BITS == 64
50765097
gen_helper_sym_notify_return(s->T0);
5098+
#else
5099+
#error Unhandled TARGET_LONG_BITS value
5100+
#endif
50775101
/* Note that gen_pop_T0 uses a zero-extending load. */
50785102
gen_op_jmp_v(s, s->T0);
50795103
gen_bnd_jmp(s);
@@ -5126,7 +5150,15 @@ static bool disas_insn(DisasContext *s, CPUState *cpu)
51265150
int diff = (dflag != MO_16
51275151
? (int32_t)insn_get(env, s, MO_32)
51285152
: (int16_t)insn_get(env, s, MO_16));
5153+
#if TARGET_LONG_BITS == 32
5154+
TCGv_i64 call_addr = tcg_temp_new_i64();
5155+
tcg_gen_extu_i32_i64(call_addr, eip_next_tl(s));
5156+
gen_helper_sym_notify_call(call_addr);
5157+
#elif TARGET_LONG_BITS == 64
51295158
gen_helper_sym_notify_call(eip_next_tl(s));
5159+
#else
5160+
#error Unhandled TARGET_LONG_BITS value
5161+
#endif
51305162
gen_push_v(s, eip_next_tl(s));
51315163
gen_bnd_jmp(s);
51325164
gen_jmp_rel(s, dflag, diff, 0);

0 commit comments

Comments
 (0)