#551: t/pmc/nci.t: 2 test failures
---------------------+------------------------------------------------------
Reporter: jkeenan | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: none | Version:
Severity: medium | Keywords: pmc nci pointer
Lang: | Patch:
Platform: |
---------------------+------------------------------------------------------
Changes (by rg):
* cc: r...@… (added)
Comment:
Replying to [comment:6 whiteknight]:
> Any opinions on this?
I think you wouldn't even need to allocate a buffer. The only API change
required would be to return the address of the pointer instead of the
pointer itself, or maybe instead add a different function to request the
pointer address. I was about to try this, but it's not working for test
66, yet.
You definitely need to add this diff to fix the stack after the vtable
call (sorry for inlining):
{{{
--- src/jit/i386/jit_defs.c (revision 38087)
+++ src/jit/i386/jit_defs.c (working copy)
@@ -2273,6 +2273,9 @@
emitm_movl_m_r(interp, pc, emit_EAX, emit_EAX, 0, 1,
offsetof(VTABLE, get_pointer));
emitm_callr(pc, emit_EAX);
emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1,
args_offset);
+ /* reset ESP(4) */
+ emitm_lea_m_r(interp, pc, emit_EAX, emit_EBP, 0, 1,
st_offset);
+ emitm_movl_r_m(interp, pc, emit_EAX, emit_EBP, 0, 1,
temp_calls_offset + 4);
break;
case 'b': /* buffer (void*) pass PObj_bufstart(SReg) */
emitm_call_cfunc(pc, get_nci_S);
}}}
Maybe combined with your own fix attempt, this will get you further ;)
--
Ticket URL: <https://trac.parrot.org/parrot/ticket/551#comment:7>
Parrot <https://trac.parrot.org/parrot/>
Parrot Development
_______________________________________________
parrot-tickets mailing list
[email protected]
http://lists.parrot.org/mailman/listinfo/parrot-tickets