From 56530c61bfdd87c5bfba4b6de20612d356bd289c Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Thu, 17 Sep 2020 13:11:47 +0200 Subject: unit: Add test for misaligned builtin memcpy() --- spec/build/testsuites/unit/misc.yml | 1 + testsuites/unit/tc-misaligned-builtin-memcpy.c | 51 ++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 testsuites/unit/tc-misaligned-builtin-memcpy.c diff --git a/spec/build/testsuites/unit/misc.yml b/spec/build/testsuites/unit/misc.yml index a9263a37c9..da454d8960 100644 --- a/spec/build/testsuites/unit/misc.yml +++ b/spec/build/testsuites/unit/misc.yml @@ -11,6 +11,7 @@ includes: [] ldflags: [] links: [] source: +- testsuites/unit/tc-misaligned-builtin-memcpy.c - testsuites/unit/ts-unit-misc.c stlib: [] target: testsuites/unit/unitmisc.exe diff --git a/testsuites/unit/tc-misaligned-builtin-memcpy.c b/testsuites/unit/tc-misaligned-builtin-memcpy.c new file mode 100644 index 0000000000..2021a68551 --- /dev/null +++ b/testsuites/unit/tc-misaligned-builtin-memcpy.c @@ -0,0 +1,51 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/* + * Copyright (C) 2019 embedded brains GmbH (http://www.embedded-brains.de) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + */ + +#include + +#include + +#include + +T_TEST_CASE(MisalignedBuiltinMemcpy) +{ + double a; + double b; + char buf[2 * sizeof(double)]; + void *p; + + p = &buf[0]; + p = (void *)((uintptr_t)p | 1); + RTEMS_OBFUSCATE_VARIABLE(p); + a = 123e4; + RTEMS_OBFUSCATE_VARIABLE(a); + a *= a; + memcpy(p, &a, sizeof(a)); + RTEMS_OBFUSCATE_VARIABLE(p); + memcpy(&b, p, sizeof(b)); + T_eq(a, b, "%f == %f", a, b); +} -- cgit v1.2.3