Skip to content

Commit

Permalink
[release/7.0][ppc64le] Fixed thunk address 8 byte alignment issue (#7…
Browse files Browse the repository at this point in the history
…5258)

* [ppc64le] Bug fixes

* [ppc64le] Fixed thunk address 8 byte alignment issue
  • Loading branch information
alhad-deshpande committed Sep 8, 2022
1 parent b83539c commit a20c82f
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 3 deletions.
17 changes: 14 additions & 3 deletions src/mono/mono/mini/mini-ppc.c
Original file line number Diff line number Diff line change
Expand Up @@ -2732,6 +2732,9 @@ handle_thunk (MonoCompile *cfg, guchar *code, const guchar *target)
if (!cfg->arch.thunks) {
cfg->arch.thunks = cfg->thunks;
cfg->arch.thunks_size = cfg->thunk_area;
#ifdef THUNK_ADDR_ALIGNMENT
cfg->arch.thunks = ALIGN_TO(cfg->arch.thunks, THUNK_ADDR_ALIGNMENT);
#endif
}
thunks = cfg->arch.thunks;
thunks_size = cfg->arch.thunks_size;
Expand Down Expand Up @@ -3907,11 +3910,11 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
if (cfg->compile_aot && ins->sreg1 == ppc_r12) {
/* The trampolines clobber this */
ppc_mr (code, ppc_r29, ins->sreg1);
ppc_ldptr (code, ppc_r0, ins->inst_offset, ppc_r29);
ppc_ldptr (code, ppc_r12, ins->inst_offset, ppc_r29);
} else {
ppc_ldptr (code, ppc_r0, ins->inst_offset, ins->sreg1);
ppc_ldptr (code, ppc_r12, ins->inst_offset, ins->sreg1);
}
ppc_mtlr (code, ppc_r0);
ppc_mtlr (code, ppc_r12);
ppc_blrl (code);
/* FIXME: this should be handled somewhere else in the new jit */
code = emit_move_return_value (cfg, ins, code);
Expand Down Expand Up @@ -5556,6 +5559,14 @@ mono_arch_emit_exceptions (MonoCompile *cfg)
}

set_code_cursor (cfg, code);

#ifdef THUNK_ADDR_ALIGNMENT
/* We need to align thunks_offset to 8 byte boundary, hence allocating first 8 bytes
for padding purpose */
if (cfg->thunk_area != 0) {
cfg->thunk_area += THUNK_ADDR_ALIGNMENT;
}
#endif
}
#endif

Expand Down
1 change: 1 addition & 0 deletions src/mono/mono/mini/mini-ppc.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
#ifdef TARGET_POWERPC64
#if !defined(PPC_USES_FUNCTION_DESCRIPTOR)
#define THUNK_SIZE 8
#define THUNK_ADDR_ALIGNMENT 8
#define GET_MEMORY_SLOT_THUNK_ADDRESS(c) \
((guint64)(((c)) [0] & 0x0000ffff) << 48) \
+ ((guint64)(((c)) [1] & 0x0000ffff) << 32) \
Expand Down

0 comments on commit a20c82f

Please sign in to comment.