From a098b44f4c592c2192fcdef4fad6108eb3f4301c Mon Sep 17 00:00:00 2001 From: Anthony Green Date: Fri, 6 Apr 2012 17:04:35 -0400 Subject: [PATCH] Reapply missing testsuite changes for arm --- .pc/applied-patches | 1 + .pc/arm-test-fix/.timestamp | 0 .../testsuite/libffi.call/cls_double_va.c | 64 ++++++++++++++++++ .../testsuite/libffi.call/cls_longdouble_va.c | 65 +++++++++++++++++++ patches/arm-test-fix | 24 +++++++ patches/series | 1 + testsuite/libffi.call/cls_double_va.c | 1 - testsuite/libffi.call/cls_longdouble_va.c | 1 - 8 files changed, 155 insertions(+), 2 deletions(-) create mode 100644 .pc/arm-test-fix/.timestamp create mode 100644 .pc/arm-test-fix/testsuite/libffi.call/cls_double_va.c create mode 100644 .pc/arm-test-fix/testsuite/libffi.call/cls_longdouble_va.c create mode 100644 patches/arm-test-fix diff --git a/.pc/applied-patches b/.pc/applied-patches index 5bb67d75..088a2d89 100644 --- a/.pc/applied-patches +++ b/.pc/applied-patches @@ -11,3 +11,4 @@ apple-fixes dist-tests icc128 x32libtool +arm-test-fix diff --git a/.pc/arm-test-fix/.timestamp b/.pc/arm-test-fix/.timestamp new file mode 100644 index 00000000..e69de29b diff --git a/.pc/arm-test-fix/testsuite/libffi.call/cls_double_va.c b/.pc/arm-test-fix/testsuite/libffi.call/cls_double_va.c new file mode 100644 index 00000000..67e44a4e --- /dev/null +++ b/.pc/arm-test-fix/testsuite/libffi.call/cls_double_va.c @@ -0,0 +1,64 @@ +/* Area: ffi_call, closure_call + Purpose: Test doubles passed in variable argument lists. + Limitations: none. + PR: none. + Originator: Blake Chaffin 6/6/2007 */ + +/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ +/* { dg-output "" { xfail avr32*-*-* } } */ +/* { dg-output "" { xfail mips-sgi-irix6* } } PR libffi/46660 */ +/* { dg-skip-if "" arm*-*-* { "-mfloat-abi=hard" } { "" } } */ + +#include "ffitest.h" + +static void +cls_double_va_fn(ffi_cif* cif __UNUSED__, void* resp, + void** args, void* userdata __UNUSED__) +{ + char* format = *(char**)args[0]; + double doubleValue = *(double*)args[1]; + + *(ffi_arg*)resp = printf(format, doubleValue); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args[3]; + ffi_type* arg_types[3]; + + char* format = "%.1f\n"; + double doubleArg = 7; + ffi_arg res = 0; + + arg_types[0] = &ffi_type_pointer; + arg_types[1] = &ffi_type_double; + arg_types[2] = NULL; + + /* This printf call is variadic */ + CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 2, &ffi_type_sint, + arg_types) == FFI_OK); + + args[0] = &format; + args[1] = &doubleArg; + args[2] = NULL; + + ffi_call(&cif, FFI_FN(printf), &res, args); + // { dg-output "7.0" } + printf("res: %d\n", (int) res); + // { dg-output "\nres: 4" } + + /* The call to cls_double_va_fn is static, so have to use a normal prep_cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &ffi_type_sint, arg_types) == FFI_OK); + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_double_va_fn, NULL, code) == FFI_OK); + + res = ((int(*)(char*, double))(code))(format, doubleArg); + // { dg-output "\n7.0" } + printf("res: %d\n", (int) res); + // { dg-output "\nres: 4" } + + exit(0); +} diff --git a/.pc/arm-test-fix/testsuite/libffi.call/cls_longdouble_va.c b/.pc/arm-test-fix/testsuite/libffi.call/cls_longdouble_va.c new file mode 100644 index 00000000..6b8484a8 --- /dev/null +++ b/.pc/arm-test-fix/testsuite/libffi.call/cls_longdouble_va.c @@ -0,0 +1,65 @@ +/* Area: ffi_call, closure_call + Purpose: Test long doubles passed in variable argument lists. + Limitations: none. + PR: none. + Originator: Blake Chaffin 6/6/2007 */ + +/* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ +/* { dg-output "" { xfail avr32*-*-* x86_64-*-mingw* } } */ +/* { dg-output "" { xfail mips-sgi-irix6* } } PR libffi/46660 */ +/* { dg-skip-if "" arm*-*-* { "-mfloat-abi=hard" } { "" } } */ + +#include "ffitest.h" + +static void +cls_longdouble_va_fn(ffi_cif* cif __UNUSED__, void* resp, + void** args, void* userdata __UNUSED__) +{ + char* format = *(char**)args[0]; + long double ldValue = *(long double*)args[1]; + + *(ffi_arg*)resp = printf(format, ldValue); +} + +int main (void) +{ + ffi_cif cif; + void *code; + ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code); + void* args[3]; + ffi_type* arg_types[3]; + + char* format = "%.1Lf\n"; + long double ldArg = 7; + ffi_arg res = 0; + + arg_types[0] = &ffi_type_pointer; + arg_types[1] = &ffi_type_longdouble; + arg_types[2] = NULL; + + /* This printf call is variadic */ + CHECK(ffi_prep_cif_var(&cif, FFI_DEFAULT_ABI, 1, 2, &ffi_type_sint, + arg_types) == FFI_OK); + + args[0] = &format; + args[1] = &ldArg; + args[2] = NULL; + + ffi_call(&cif, FFI_FN(printf), &res, args); + // { dg-output "7.0" } + printf("res: %d\n", (int) res); + // { dg-output "\nres: 4" } + + /* The call to cls_longdouble_va_fn is static, so have to use a normal prep_cif */ + CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, &ffi_type_sint, + arg_types) == FFI_OK); + + CHECK(ffi_prep_closure_loc(pcl, &cif, cls_longdouble_va_fn, NULL, code) == FFI_OK); + + res = ((int(*)(char*, long double))(code))(format, ldArg); + // { dg-output "\n7.0" } + printf("res: %d\n", (int) res); + // { dg-output "\nres: 4" } + + exit(0); +} diff --git a/patches/arm-test-fix b/patches/arm-test-fix new file mode 100644 index 00000000..8417d920 --- /dev/null +++ b/patches/arm-test-fix @@ -0,0 +1,24 @@ +Index: libffi/testsuite/libffi.call/cls_double_va.c +=================================================================== +--- libffi.orig/testsuite/libffi.call/cls_double_va.c ++++ libffi/testsuite/libffi.call/cls_double_va.c +@@ -7,7 +7,6 @@ + /* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ + /* { dg-output "" { xfail avr32*-*-* } } */ + /* { dg-output "" { xfail mips-sgi-irix6* } } PR libffi/46660 */ +-/* { dg-skip-if "" arm*-*-* { "-mfloat-abi=hard" } { "" } } */ + + #include "ffitest.h" + +Index: libffi/testsuite/libffi.call/cls_longdouble_va.c +=================================================================== +--- libffi.orig/testsuite/libffi.call/cls_longdouble_va.c ++++ libffi/testsuite/libffi.call/cls_longdouble_va.c +@@ -7,7 +7,6 @@ + /* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ + /* { dg-output "" { xfail avr32*-*-* x86_64-*-mingw* } } */ + /* { dg-output "" { xfail mips-sgi-irix6* } } PR libffi/46660 */ +-/* { dg-skip-if "" arm*-*-* { "-mfloat-abi=hard" } { "" } } */ + + #include "ffitest.h" + diff --git a/patches/series b/patches/series index e45ad780..f2322ce1 100644 --- a/patches/series +++ b/patches/series @@ -12,3 +12,4 @@ apple-fixes dist-tests icc128 x32libtool +arm-test-fix diff --git a/testsuite/libffi.call/cls_double_va.c b/testsuite/libffi.call/cls_double_va.c index 67e44a4e..dbf20002 100644 --- a/testsuite/libffi.call/cls_double_va.c +++ b/testsuite/libffi.call/cls_double_va.c @@ -7,7 +7,6 @@ /* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ /* { dg-output "" { xfail avr32*-*-* } } */ /* { dg-output "" { xfail mips-sgi-irix6* } } PR libffi/46660 */ -/* { dg-skip-if "" arm*-*-* { "-mfloat-abi=hard" } { "" } } */ #include "ffitest.h" diff --git a/testsuite/libffi.call/cls_longdouble_va.c b/testsuite/libffi.call/cls_longdouble_va.c index 6b8484a8..4fa1ea28 100644 --- a/testsuite/libffi.call/cls_longdouble_va.c +++ b/testsuite/libffi.call/cls_longdouble_va.c @@ -7,7 +7,6 @@ /* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */ /* { dg-output "" { xfail avr32*-*-* x86_64-*-mingw* } } */ /* { dg-output "" { xfail mips-sgi-irix6* } } PR libffi/46660 */ -/* { dg-skip-if "" arm*-*-* { "-mfloat-abi=hard" } { "" } } */ #include "ffitest.h"