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