diff options
author | Anthony Green <green@moxielogic.com> | 2012-04-06 17:04:35 -0400 |
---|---|---|
committer | Anthony Green <green@moxielogic.com> | 2012-04-06 17:04:35 -0400 |
commit | a098b44f4c592c2192fcdef4fad6108eb3f4301c (patch) | |
tree | 25eda40e06fec5684a081a1c0431af9bb2eb3213 | |
parent | 10d1e51393f08c14045db85843208f44f9f1e9ba (diff) | |
download | libffi-a098b44f4c592c2192fcdef4fad6108eb3f4301c.tar.gz |
Reapply missing testsuite changes for arm
-rw-r--r-- | .pc/applied-patches | 1 | ||||
-rw-r--r-- | .pc/arm-test-fix/.timestamp | 0 | ||||
-rw-r--r-- | .pc/arm-test-fix/testsuite/libffi.call/cls_double_va.c | 64 | ||||
-rw-r--r-- | .pc/arm-test-fix/testsuite/libffi.call/cls_longdouble_va.c | 65 | ||||
-rw-r--r-- | patches/arm-test-fix | 24 | ||||
-rw-r--r-- | patches/series | 1 | ||||
-rw-r--r-- | testsuite/libffi.call/cls_double_va.c | 1 | ||||
-rw-r--r-- | testsuite/libffi.call/cls_longdouble_va.c | 1 |
8 files changed, 155 insertions, 2 deletions
diff --git a/.pc/applied-patches b/.pc/applied-patches index 5bb67d7..088a2d8 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 0000000..e69de29 --- /dev/null +++ b/.pc/arm-test-fix/.timestamp 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 0000000..67e44a4 --- /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 0000000..6b8484a --- /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 0000000..8417d92 --- /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 e45ad78..f2322ce 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 67e44a4..dbf2000 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 6b8484a..4fa1ea2 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" |