tstNoCrt-1.cpp revision 8c4be5f42a6789afc0380ed4a69b0f0247425295
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe * IPRT Testcase - Testcase for the No-CRT assembly bits.
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe * Copyright (C) 2008 Sun Microsystems, Inc.
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe * This file is part of VirtualBox Open Source Edition (OSE), as
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe * available from http://www.virtualbox.org. This file is free software;
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe * you can redistribute it and/or modify it under the terms of the GNU
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe * General Public License (GPL) as published by the Free Software
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe * Foundation, in version 2 as it comes in the "COPYING" file of the
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe * The contents of this file may alternatively be used under the terms
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe * of the Common Development and Distribution License Version 1.0
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe * VirtualBox OSE distribution, in which case the provisions of the
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe * CDDL are applicable instead of those of the GPL.
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe * You may elect to license modified versions of this file under the
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe * terms and conditions of either the GPL or the CDDL or both.
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe * Clara, CA 95054 USA or visit http://www.sun.com if you need
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe * additional information or have any questions.
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe/*******************************************************************************
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe* Header Files *
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe*******************************************************************************/
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe/*******************************************************************************
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe* Structures and Typedefs *
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe*******************************************************************************/
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowetypedef struct TSTBUF
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe/*******************************************************************************
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe* Global Variables *
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe*******************************************************************************/
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowestatic unsigned g_cErrors = 0;
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowestatic void my_memcheck(const void *pv, int ch, size_t cb, const char *pszDesc)
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe for (off = 1; off < cb && pb[off] != (uint8_t)ch; off++)
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe /* nandemonai */;
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe RTPrintf("tstNoCrt-1: %s: %p:%p - %02x instead of %02x\n",
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe (uint8_t *)pb - (uint8_t *)pv + off, *pb, (uint8_t)ch);
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe RTPrintf("tstNoCrt-1: %s: %p - %02x instead of %02x\n",
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe pszDesc, (uint8_t *)pb - (uint8_t *)pv, *pb, (uint8_t)ch);
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe my_memset(pBuf->abHeadFence, 0x55, sizeof(pBuf->abHeadFence));
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe my_memset(pBuf->abTailFence, 0x77, sizeof(pBuf->abHeadFence));
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowestatic void TstBufCheck(PTSTBUF pBuf, const char *pszDesc)
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe my_memcheck(pBuf->abHeadFence, 0x55, sizeof(pBuf->abHeadFence), pszDesc);
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe my_memcheck(pBuf->abTailFence, 0x77, sizeof(pBuf->abTailFence), pszDesc);
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe#if 0 /* enable this to test the testcase. */
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe# define RT_NOCRT(a) a
300dd9a2073fdbb3b996d3a2f1a92ab69c12e5a0wrowe * Prologue.
if (g_cErrors)
g_cErrors++; \
g_cErrors++; \
void *pv;
g_cErrors++; \
int iDiff;
pv = RT_NOCRT(memmove)(&Buf1.abBuf[off2], Buf1.abBuf, TSTBUF_SIZE - off2); CHECK_PV(&Buf1.abBuf[off2]);
pszSrc++;
for (unsigned i = 0; i < sizeof(s_szTest1); i++)
for (unsigned i = 0; i < sizeof(s_szTest1); i++)
if (!g_cErrors)
return !!g_cErrors;