STORE_DEREF_FAULT(ptr); \
})
-#define k_deref(size, addr) ({ \
+#define deref(size, addr) ({ \
intptr_t _i = 0; \
switch (size) { \
case 1: _i = kread((u8 *)(addr)); break; \
_i; \
})
-#define k_store_deref(size, addr, value) ({ \
+#define store_deref(size, addr, value) ({ \
switch (size) { \
case 1: kwrite((u8 *)(addr), (value)); break; \
case 2: kwrite((u16 *)(addr), (value)); break; \
#if defined __i386__
-#define k_deref(size, addr) \
+#define deref(size, addr) \
({ \
int _bad = 0; \
u8 _b; u16 _w; u32 _l; \
_v; \
})
-#define k_store_deref(size, addr, value) \
+#define store_deref(size, addr, value) \
({ \
int _bad = 0; \
if (lookup_bad_addr((unsigned long)addr, size)) \
#elif defined __x86_64__
-#define k_deref(size, addr) \
+#define deref(size, addr) \
({ \
int _bad = 0; \
u8 _b; u16 _w; u32 _l; u64 _q; \
_v; \
})
-#define k_store_deref(size, addr, value) \
+#define store_deref(size, addr, value) \
({ \
int _bad = 0; \
if (lookup_bad_addr((unsigned long)addr, size)) \
})
#elif defined __ia64__
-#define k_deref(size, addr) \
+#define deref(size, addr) \
({ \
int _bad = 0; \
intptr_t _v=0; \
_v; \
})
-#define k_store_deref(size, addr, value) \
+#define store_deref(size, addr, value) \
({ \
int _bad=0; \
if (lookup_bad_addr((unsigned long)addr, size)) \
"i"(sizeof(unsigned long)))
-#define k_deref(size, addr) \
+#define deref(size, addr) \
({ \
int _bad = 0; \
intptr_t _v = 0; \
_v; \
})
-#define k_store_deref(size, addr, value) \
+#define store_deref(size, addr, value) \
({ \
int _bad = 0; \
if (lookup_bad_addr((unsigned long)addr, size)) \
: "r" (x), "i" (-EFAULT) \
: "cc")
-#define k_deref(size, addr) \
+#define deref(size, addr) \
({ \
int _bad = 0; \
intptr_t _v=0; \
_v; \
})
-#define k_store_deref(size, addr, value) \
+#define store_deref(size, addr, value) \
({ \
int _bad=0; \
if (lookup_bad_addr((unsigned long)addr, size)) \
: "cc"); \
})
-#define k_deref(size, addr) \
+#define deref(size, addr) \
({ \
u8 _b; u16 _w; u32 _l; u64 _q; \
int _bad = 0; \
_v; \
})
-#define k_store_deref(size, addr, value) \
+#define store_deref(size, addr, value) \
({ \
int _bad = 0; \
int i; \
#else
#define kread(ptr) \
- ( (typeof(*(ptr))) k_deref(sizeof(*(ptr)), (ptr)) )
+ ( (typeof(*(ptr))) deref(sizeof(*(ptr)), (ptr)) )
#define kwrite(ptr, value) \
- ( k_store_deref(sizeof(*(ptr)), (ptr), (long)(typeof(*(ptr)))(value)) )
+ ( store_deref(sizeof(*(ptr)), (ptr), (long)(typeof(*(ptr)))(value)) )
#endif
#endif /* STAPCONF_PROBE_KERNEL */
-/* XXX: PR10601 */
-/* Perhaps this should use something like set_fs(USER_DS); k_deref() ; set_fs(KERNEL_DS)
- * But then again, the addr_map protections do that already. */
-#define u_deref(a,b) k_deref(a,b)
-#define u_store_deref(a,b,c) k_store_deref(a,b,c)
-
#define deref_string(dst, addr, maxbytes) \
({ \
// PR10601: adapt to kernel-vs-userspace loc2c-runtime
ec->code += "\n#define fetch_register " + string(q.has_process?"u":"k") + "_fetch_register\n";
ec->code += "#define store_register " + string(q.has_process?"u":"k") + "_store_register\n";
- ec->code += "#define deref " + string(q.has_process?"u":"k") + "_deref\n";
if (q.has_return && (e->base_name == "$return"))
{
// PR10601
ec->code += "\n#undef fetch_register\n";
ec->code += "\n#undef store_register\n";
- ec->code += "\n#undef deref\n";
}
catch (const semantic_error& er)
{
// PR10601: adapt to kernel-vs-userspace loc2c-runtime
ec->code += "\n#define fetch_register " + string(userspace_p?"u":"k") + "_fetch_register\n";
ec->code += "#define store_register " + string(userspace_p?"u":"k") + "_store_register\n";
- ec->code += "#define deref " + string(userspace_p?"u":"k") + "_deref\n";
ec->code += code;
// PR10601
ec->code += "\n#undef fetch_register\n";
ec->code += "\n#undef store_register\n";
- ec->code += "\n#undef deref\n";
s.functions[fdecl->name] = fdecl;
// PR10601: adapt to kernel-vs-userspace loc2c-runtime
ec->code += "\n#define fetch_register k_fetch_register\n";
ec->code += "#define store_register k_store_register\n";
- ec->code += "#define deref k_deref\n";
try
{
// PR10601
ec->code += "\n#undef fetch_register\n";
ec->code += "\n#undef store_register\n";
- ec->code += "\n#undef deref\n";
dw.sess.functions[fdecl->name] = fdecl;