Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-09-09 09:27:11

0001 
0002 /*---------------------------------------------------------------*/
0003 /*--- begin                                   libvex_emnote.h ---*/
0004 /*---------------------------------------------------------------*/
0005 
0006 /*
0007    This file is part of Valgrind, a dynamic binary instrumentation
0008    framework.
0009 
0010    Copyright (C) 2004-2017 OpenWorks LLP
0011       info@open-works.net
0012 
0013    This program is free software; you can redistribute it and/or
0014    modify it under the terms of the GNU General Public License as
0015    published by the Free Software Foundation; either version 3 of the
0016    License, or (at your option) any later version.
0017 
0018    This program is distributed in the hope that it will be useful, but
0019    WITHOUT ANY WARRANTY; without even the implied warranty of
0020    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0021    General Public License for more details.
0022 
0023    You should have received a copy of the GNU General Public License
0024    along with this program; if not, see <http://www.gnu.org/licenses/>.
0025 
0026    The GNU General Public License is contained in the file COPYING.
0027 
0028    Neither the names of the U.S. Department of Energy nor the
0029    University of California nor the names of its contributors may be
0030    used to endorse or promote products derived from this software
0031    without prior written permission.
0032 */
0033 
0034 #ifndef __LIBVEX_EMNOTE_H
0035 #define __LIBVEX_EMNOTE_H
0036 
0037 #include "libvex_basictypes.h"
0038 
0039 /* VEX can sometimes generate code which returns to the dispatcher
0040    with the guest state pointer set to VEX_TRC_JMP_EMWARN or
0041    VEX_TRC_JMP_EMFAIL.  This means that VEX is trying to tell Valgrind
0042    something noteworthy about emulation progress. For example, that Valgrind
0043    is doing imprecise emulation in some sense.  The guest's pseudo-register
0044    "guest_EMNOTE" will hold a value of type VexEmNote, which describes
0045    the nature of the warning.  Currently the limitations that are
0046    warned about apply primarily to floating point support.
0047 
0048    All guest states must have a 32-bit (UInt) guest_EMNOTE pseudo-
0049    register, that emulation warnings can be written in to.
0050 
0051    Note that guest_EMNOTE only carries a valid value at the jump
0052    marked as VEX_TRC_JMP_EMWARN / VEX_TRC_JMP_EMFAIL.  You can't assume
0053    it will continue to carry a valid value from any amount of time after
0054    the jump.
0055 */
0056 
0057 typedef
0058    enum {
0059       /* no note indicated */
0060       EmNote_NONE=0,
0061 
0062       /* unmasking x87 FP exceptions is not supported */
0063       EmWarn_X86_x87exns,
0064 
0065       /* change of x87 FP precision away from 64-bit (mantissa) */
0066       EmWarn_X86_x87precision,
0067 
0068       /* unmasking SSE FP exceptions is not supported */
0069       EmWarn_X86_sseExns,
0070 
0071       /* setting mxcsr.fz is not supported */
0072       EmWarn_X86_fz,
0073 
0074       /* setting mxcsr.daz is not supported */
0075       EmWarn_X86_daz,
0076 
0077       /* settings to %eflags.ac (alignment check) are noted but ignored */
0078       EmWarn_X86_acFlag,
0079 
0080       /* unmasking PPC32/64 FP exceptions is not supported */
0081       EmWarn_PPCexns,
0082 
0083       /* overflow/underflow of the PPC64 _REDIR stack (ppc64 only) */
0084       EmWarn_PPC64_redir_overflow,
0085       EmWarn_PPC64_redir_underflow,
0086 
0087       /* Various BFP insns have an M4 field containing the
0088          IEEE-inexact-exception (XxC) control bit. That bit cannot be modelled
0089          in VEX and is expected to be zero. */
0090       EmWarn_S390X_XxC_not_zero,
0091 
0092       /* Various DFP insns have an M4 field containing the
0093          IEEE-invalid-operation (XiC) control bit. That bit cannot be modelled
0094          in VEX and is expected to be zero. */
0095       EmWarn_S390X_XiC_not_zero,
0096 
0097       /* GPR 0 contains invalid rounding mode for PFPO instruction */
0098       EmFail_S390X_invalid_PFPO_rounding_mode,
0099 
0100       /* The function code specified in GPR 0 executed by PFPO
0101          instruction is invalid */
0102       EmFail_S390X_invalid_PFPO_function,
0103 
0104       /* some insn needs vector facility which is not available on this host */
0105       EmFail_S390X_vx,
0106 
0107       /* prno insn is not supported on this host */
0108       EmFail_S390X_prno,
0109 
0110       /* insn needs vector-enhancements facility 1 which is not available on
0111          this host */
0112       EmFail_S390X_vxe,
0113 
0114       /* insn needs deflate-conversion facility which is not available on
0115          this host */
0116       EmFail_S390X_dflt,
0117 
0118       /* insn needs neural-network-processing-assist facility which is not
0119          available on this host */
0120       EmFail_S390X_nnpa,
0121 
0122       /* insn needs vector-enhancements facility 2 which is not available on
0123          this host */
0124       EmFail_S390X_vxe2,
0125 
0126       /* insn needs vector-packed-decimal facility which is not available on
0127          this host */
0128       EmFail_S390X_vxd,
0129 
0130       /* insn needs message-security-assist extension 8 which is not available
0131          on this host */
0132       EmFail_S390X_msa8,
0133 
0134       /* insn needs message-security-assist extension 9 which is not available
0135          on this host */
0136       EmFail_S390X_msa9,
0137 
0138       /* insn needs vector-enhancements facility 3 which is not available on
0139          this host */
0140       EmFail_S390X_vxe3,
0141 
0142       EmNote_NUMBER
0143    }
0144    VexEmNote;
0145 
0146 
0147 /* Produces a short string describing the warning. */
0148 extern const HChar* LibVEX_EmNote_string ( VexEmNote );
0149 
0150 
0151 #endif /* ndef __LIBVEX_EMNOTE_H */
0152 
0153 /*---------------------------------------------------------------*/
0154 /*---                                         libvex_emnote.h ---*/
0155 /*---------------------------------------------------------------*/