1 #include <stdarg.h>
2
3 #define WRAP(x) typeof(x) __wrap_ ## x, __real_ ## x
4 #include "x86-emulate.h"
5
__wrap_fwrite(const void * src,size_t sz,size_t n,FILE * f)6 size_t __wrap_fwrite(const void *src, size_t sz, size_t n, FILE *f)
7 {
8 emul_save_fpu_state();
9 sz = __real_fwrite(src, sz, n, f);
10 emul_restore_fpu_state();
11
12 return sz;
13 }
14
__wrap_memcmp(const void * p1,const void * p2,size_t sz)15 int __wrap_memcmp(const void *p1, const void *p2, size_t sz)
16 {
17 int rc;
18
19 emul_save_fpu_state();
20 rc = __real_memcmp(p1, p2, sz);
21 emul_restore_fpu_state();
22
23 return rc;
24 }
25
__wrap_memcpy(void * dst,const void * src,size_t sz)26 void *__wrap_memcpy(void *dst, const void *src, size_t sz)
27 {
28 emul_save_fpu_state();
29 __real_memcpy(dst, src, sz);
30 emul_restore_fpu_state();
31
32 return dst;
33 }
34
__wrap_memset(void * dst,int c,size_t sz)35 void *__wrap_memset(void *dst, int c, size_t sz)
36 {
37 emul_save_fpu_state();
38 __real_memset(dst, c, sz);
39 emul_restore_fpu_state();
40
41 return dst;
42 }
43
__wrap_printf(const char * fmt,...)44 int __wrap_printf(const char *fmt, ...)
45 {
46 va_list varg;
47 int rc;
48
49 emul_save_fpu_state();
50 va_start(varg, fmt);
51 rc = __real_vprintf(fmt, varg);
52 va_end(varg);
53 emul_restore_fpu_state();
54
55 return rc;
56 }
57
__wrap_putchar(int c)58 int __wrap_putchar(int c)
59 {
60 int rc;
61
62 emul_save_fpu_state();
63 rc = __real_putchar(c);
64 emul_restore_fpu_state();
65
66 return rc;
67 }
68
__wrap_puts(const char * str)69 int __wrap_puts(const char *str)
70 {
71 int rc;
72
73 emul_save_fpu_state();
74 rc = __real_puts(str);
75 emul_restore_fpu_state();
76
77 return rc;
78 }
79
__wrap_snprintf(char * buf,size_t n,const char * fmt,...)80 int __wrap_snprintf(char *buf, size_t n, const char *fmt, ...)
81 {
82 va_list varg;
83 int rc;
84
85 emul_save_fpu_state();
86 va_start(varg, fmt);
87 rc = __real_vsnprintf(buf, n, fmt, varg);
88 va_end(varg);
89 emul_restore_fpu_state();
90
91 return rc;
92 }
93
__wrap_strstr(const char * s1,const char * s2)94 char *__wrap_strstr(const char *s1, const char *s2)
95 {
96 char *s;
97
98 emul_save_fpu_state();
99 s = __real_strstr(s1, s2);
100 emul_restore_fpu_state();
101
102 return s;
103 }
104