File indexing completed on 2026-08-27 09:40:34
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029 #ifndef __PUB_TOOL_MACHINE_H
0030 #define __PUB_TOOL_MACHINE_H
0031
0032 #include "pub_tool_basics.h" // ThreadID
0033 #include "libvex.h" // VexArchInfo
0034
0035 #if defined(VGP_x86_linux) || defined(VGP_x86_solaris) || defined(VGP_x86_freebsd) || defined(VGP_x86_darwin)
0036 # define VG_MIN_INSTR_SZB 1
0037 # define VG_MAX_INSTR_SZB 16
0038 # define VG_CLREQ_SZB 14
0039
0040 # define VG_STACK_REDZONE_SZB 0
0041
0042 #elif defined(VGP_amd64_linux) || defined(VGP_amd64_solaris) || defined(VGP_amd64_freebsd) || defined(VGP_amd64_darwin)
0043 # define VG_MIN_INSTR_SZB 1
0044 # define VG_MAX_INSTR_SZB 16
0045 # define VG_CLREQ_SZB 19
0046 # define VG_STACK_REDZONE_SZB 128
0047
0048 #elif defined(VGP_ppc32_linux)
0049 # define VG_MIN_INSTR_SZB 4
0050 # define VG_MAX_INSTR_SZB 4
0051 # define VG_CLREQ_SZB 20
0052 # define VG_STACK_REDZONE_SZB 0
0053
0054 #elif defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux)
0055 # define VG_MIN_INSTR_SZB 4
0056 # define VG_MAX_INSTR_SZB 8
0057 # define VG_CLREQ_SZB 20
0058 # define VG_STACK_REDZONE_SZB 288
0059
0060
0061
0062 #elif defined(VGP_arm_linux)
0063 # define VG_MIN_INSTR_SZB 2
0064 # define VG_MAX_INSTR_SZB 4
0065 # define VG_CLREQ_SZB 20
0066 # define VG_STACK_REDZONE_SZB 0
0067
0068 #elif defined(VGP_arm64_linux) || defined(VGP_arm64_freebsd)
0069 # define VG_MIN_INSTR_SZB 4
0070 # define VG_MAX_INSTR_SZB 4
0071 # define VG_CLREQ_SZB 20
0072 # define VG_STACK_REDZONE_SZB 0
0073
0074 #elif defined(VGP_s390x_linux)
0075 # define VG_MIN_INSTR_SZB 2
0076 # define VG_MAX_INSTR_SZB 6
0077 # define VG_CLREQ_SZB 10
0078 # define VG_STACK_REDZONE_SZB 0
0079
0080 #elif defined(VGP_mips32_linux)
0081 # define VG_MIN_INSTR_SZB 4
0082 # define VG_MAX_INSTR_SZB 8
0083 # define VG_CLREQ_SZB 20
0084 # define VG_STACK_REDZONE_SZB 0
0085
0086 #elif defined(VGP_mips64_linux)
0087 # define VG_MIN_INSTR_SZB 4
0088 # define VG_MAX_INSTR_SZB 8
0089 # define VG_CLREQ_SZB 20
0090 # define VG_STACK_REDZONE_SZB 0
0091
0092 #elif defined(VGP_nanomips_linux)
0093 # define VG_MIN_INSTR_SZB 2
0094 # define VG_MAX_INSTR_SZB 6
0095 # define VG_CLREQ_SZB 20
0096 # define VG_STACK_REDZONE_SZB 0
0097
0098 #elif defined(VGP_riscv64_linux)
0099 # define VG_MIN_INSTR_SZB 2
0100 # define VG_MAX_INSTR_SZB 4
0101 # define VG_CLREQ_SZB 20
0102 # define VG_STACK_REDZONE_SZB 0
0103
0104 #else
0105 # error Unknown platform
0106 #endif
0107
0108
0109
0110
0111 Addr VG_(get_IP) ( ThreadId tid );
0112 Addr VG_(get_SP) ( ThreadId tid );
0113
0114
0115 Addr VG_(get_SP_s1) ( ThreadId tid );
0116 void VG_(set_SP_s1) ( ThreadId tid, Addr sp );
0117
0118
0119
0120
0121
0122
0123
0124 void
0125 VG_(get_shadow_regs_area) ( ThreadId tid,
0126 UChar* dst,
0127 Int shadowNo, PtrdiffT offset, SizeT size );
0128 void
0129 VG_(set_shadow_regs_area) ( ThreadId tid,
0130 Int shadowNo, PtrdiffT offset, SizeT size,
0131 const UChar* src );
0132
0133
0134
0135
0136
0137
0138 extern void VG_(apply_to_GP_regs)(void (*f)(ThreadId tid,
0139 const HChar* regname, UWord val));
0140
0141
0142
0143
0144 extern void VG_(thread_stack_reset_iter) ( ThreadId* tid );
0145
0146
0147
0148 extern Bool VG_(thread_stack_next) ( ThreadId* tid,
0149 Addr* stack_min,
0150 Addr* stack_max );
0151
0152
0153
0154 extern Addr VG_(thread_get_stack_max) ( ThreadId tid );
0155
0156
0157 extern SizeT VG_(thread_get_stack_size) ( ThreadId tid );
0158
0159
0160
0161 extern Addr VG_(thread_get_altstack_min) ( ThreadId tid );
0162
0163
0164
0165 extern SizeT VG_(thread_get_altstack_size) ( ThreadId tid );
0166
0167
0168
0169
0170
0171 extern void* VG_(fnptr_to_fnentry)( void* );
0172
0173
0174
0175
0176
0177 extern Int VG_(machine_get_size_of_largest_guest_register) ( void );
0178
0179
0180 extern void VG_(machine_get_VexArchInfo)( VexArch*,
0181 VexArchInfo* );
0182
0183 #endif
0184
0185
0186
0187