ffi64.c (ffi_prep_args): Check for void retval.

2003-01-14  Andrew Haley  <aph@redhat.com>

        * src/x86/ffi64.c (ffi_prep_args): Check for void retval.
        (ffi_prep_cif_machdep): Likewise.
        * src/x86/unix64.S: Add unwind info.

From-SVN: r61291
This commit is contained in:
Andrew Haley 2003-01-14 18:42:29 +00:00 committed by Andrew Haley
parent 474113419b
commit 45ba15f410
3 changed files with 52 additions and 3 deletions

View File

@ -1,3 +1,9 @@
2003-01-14 Andrew Haley <aph@redhat.com>
* src/x86/ffi64.c (ffi_prep_args): Check for void retval.
(ffi_prep_cif_machdep): Likewise.
* src/x86/unix64.S: Add unwind info.
2003-01-14 Andreas Jaeger <aj@suse.de>
* src/ffitest.c (main): Only use ffi_closures if those are

View File

@ -285,7 +285,8 @@ ffi_prep_args (stackLayout *stack, extended_cif *ecif)
/* First check if the return value should be passed in memory. If so,
pass the pointer as the first argument. */
gprcount = ssecount = 0;
if (examine_argument (ecif->cif->rtype, 1, &g, &s) == 0)
if (ecif->cif->rtype->type != FFI_TYPE_VOID
&& examine_argument (ecif->cif->rtype, 1, &g, &s) == 0)
(void *)stack->gpr[gprcount++] = ecif->rvalue;
for (i=ecif->cif->nargs, p_arg=ecif->cif->arg_types, p_argv = ecif->avalue;
@ -389,8 +390,8 @@ ffi_prep_cif_machdep (ffi_cif *cif)
/* If the return value should be passed in memory, pass the pointer
as the first argument. The actual memory isn't allocated here. */
if (examine_argument (cif->rtype, 1, &g, &s) == 0)
if (cif->rtype->type != FFI_TYPE_VOID
&& examine_argument (cif->rtype, 1, &g, &s) == 0)
gprcount = 1;
/* Go over all arguments and determine the way they should be passed.

View File

@ -163,4 +163,46 @@ sse2floatfloat:
movq %xmm0, (%rsi)
ret
.section .eh_frame,"a",@progbits
.Lframe0:
.long .LECIE1-.LSCIE1
.LSCIE1:
.long 0x0
.byte 0x1
.string "zR"
.uleb128 0x1
.sleb128 -8
.byte 0x10
.uleb128 0x1
.byte 0x1b
.byte 0xc
.uleb128 0x7
.uleb128 0x8
.byte 0x90
.uleb128 0x1
.align 8
.LECIE1:
.LSFDE1:
.long .LEFDE1-.LASFDE1
.LASFDE1:
.long .LASFDE1-.Lframe0
.long .LFB1-.
.long .LFE1-.LFB1
.uleb128 0x0
.byte 0x4 # DW_CFA_advance_loc4
.long .LCFI0-.LFB1
.byte 0xe # DW_CFA_def_cfa_offset
.uleb128 0x10
.byte 0x86 # DW_CFA_offset: r6 at cfa-16
.uleb128 0x2
.byte 0x4 # DW_CFA_advance_loc4
.long .LCFI1-.LCFI0
.byte 0x86 # DW_CFA_offset: r6 at cfa-16
.uleb128 0x2
.byte 0xd # DW_CFA_def_cfa_reg: r6
.uleb128 0x6
.align 8
.LEFDE1:
#endif /* __x86_64__ */