alignmentchecks.h revision b0738128c45e3f85ad96ff0e968c11b1448d0fbb
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync/* $Id$ */
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync/** @file
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync * IPRT - Internal header for hacking alignment checks on x86 and AMD64.
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync */
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync/*
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync * Copyright (C) 2009 Sun Microsystems, Inc.
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync *
3f1f30f349c6d9ef74ba8d16ff0c5b0ac47def6cvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
3f1f30f349c6d9ef74ba8d16ff0c5b0ac47def6cvboxsync * available from http://www.virtualbox.org. This file is free software;
3f1f30f349c6d9ef74ba8d16ff0c5b0ac47def6cvboxsync * you can redistribute it and/or modify it under the terms of the GNU
3f1f30f349c6d9ef74ba8d16ff0c5b0ac47def6cvboxsync * General Public License (GPL) as published by the Free Software
3f1f30f349c6d9ef74ba8d16ff0c5b0ac47def6cvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
3f1f30f349c6d9ef74ba8d16ff0c5b0ac47def6cvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
3f1f30f349c6d9ef74ba8d16ff0c5b0ac47def6cvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync *
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync * The contents of this file may alternatively be used under the terms
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync * of the Common Development and Distribution License Version 1.0
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync * VirtualBox OSE distribution, in which case the provisions of the
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync * CDDL are applicable instead of those of the GPL.
43747b1f0bc8302a238fb35e55857a5e9aa1933dvboxsync *
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync * You may elect to license modified versions of this file under the
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync * terms and conditions of either the GPL or the CDDL or both.
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync *
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync * additional information or have any questions.
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync */
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync#ifndef ___internal_alignmentchecks_h
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync#define ___internal_alignmentchecks_h
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync/** @def IPRT_ALIGNMENT_CHECKS_DISABLE
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync * Disables alignment checks.
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync * Typically used before calling problematic library functions.
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync */
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync/** @def IPRT_ALIGNMENT_CHECKS_ENABLE
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync * (re-)Enables alignment checks if they are supposed to be active.
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync * This is used to counter IPRT_ALIGNMENT_CHECKS_DISABLE as well as enabling
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync * them for the first time.
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync */
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync#if defined(DEBUG) || defined(DOXYGEN_RUNNING)
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync# include <iprt/asm.h>
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsync
9de2fa82343af2df7df171b18afbe32b6f37ed84vboxsyncRT_C_DECLS_BEGIN
extern RTDATADECL(bool) g_fRTAlignmentChecks;
RT_C_DECLS_END
# define IPRT_ALIGNMENT_CHECKS_DISABLE() \
do { if (g_fRTAlignmentChecks) ASMSetFlags(ASMGetFlags() & ~RT_BIT_32(18)); } while (0)
# define IPRT_ALIGNMENT_CHECKS_ENABLE() \
do { if (g_fRTAlignmentChecks) ASMSetFlags(ASMGetFlags() | RT_BIT_32(18)); } while (0)
#else
# define IPRT_ALIGNMENT_CHECKS_DISABLE() do {} while (0)
# define IPRT_ALIGNMENT_CHECKS_ENABLE() do {} while (0)
#endif
#endif