From 479d9725ab0c5bc7d516e22e84c13d445bfd3c7c Mon Sep 17 00:00:00 2001 From: David 'Digit' Turner Date: Thu, 25 Mar 2010 10:54:28 -0700 Subject: Add setjmp() / longjmp() test. Change-Id: Id2115e580c2e3463afa9406a8d5236a0c5c5f819 --- tests/bionic/libc/Android.mk | 1 + tests/bionic/libc/bionic/test_setjmp.c | 86 ++++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 tests/bionic/libc/bionic/test_setjmp.c (limited to 'tests') diff --git a/tests/bionic/libc/Android.mk b/tests/bionic/libc/Android.mk index f68d68b9..b88a99e5 100644 --- a/tests/bionic/libc/Android.mk +++ b/tests/bionic/libc/Android.mk @@ -97,6 +97,7 @@ sources := \ bionic/test_netinet_icmp.c \ bionic/test_pthread_cond.c \ bionic/test_pthread_create.c \ + bionic/test_setjmp.c \ $(call device-test, $(sources)) diff --git a/tests/bionic/libc/bionic/test_setjmp.c b/tests/bionic/libc/bionic/test_setjmp.c new file mode 100644 index 00000000..71607420 --- /dev/null +++ b/tests/bionic/libc/bionic/test_setjmp.c @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/* Basic test of setjmp() functionality */ + +#include +#include +#include + +#define INT_VALUE1 0x12345678 +#define INT_VALUE2 0xfedcba98 + +#define FLOAT_VALUE1 (1.2345678) +#define FLOAT_VALUE2 (9.8765432) + +int dummy_int; +double dummy_double; + +/* test that integer registers are restored properly */ +static void +test_int(void) +{ + jmp_buf jumper; + register int xx = INT_VALUE1; + + if (setjmp(jumper) == 0) { + xx = INT_VALUE2; + longjmp(jumper, 1); + } else { + if (xx != INT_VALUE1) { + fprintf(stderr, "setjmp() is broken for integer registers !\n"); + exit(1); + } + } + dummy_int = xx; +} + +static void +test_float(void) +{ + jmp_buf jumper; + register double xx = FLOAT_VALUE1; + + if (setjmp(jumper) == 0) { + xx = FLOAT_VALUE2; + longjmp(jumper, 1); + } else { + if (xx != FLOAT_VALUE1) { + fprintf(stderr, "setjmp() is broken for floating point registers !\n"); + exit(1); + } + } + dummy_double = xx; +} + +int main(void) +{ + test_int(); + test_float(); + return 0; +} -- cgit v1.2.3