summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrank Ch. Eigler <fche@elastic.org>2009-12-20 16:54:27 -0500
committerFrank Ch. Eigler <fche@elastic.org>2009-12-20 16:54:27 -0500
commita87e40ba65ede2a884e4bce31ba7a1d87e71f981 (patch)
treebf1ad4efb8385e7932c58ebd61901e37d7f69a06
parentd57f3d2a8602da74c745529575e76594c2d760b3 (diff)
downloadsystemtap-steved-a87e40ba65ede2a884e4bce31ba7a1d87e71f981.tar.gz
systemtap-steved-a87e40ba65ede2a884e4bce31ba7a1d87e71f981.tar.xz
systemtap-steved-a87e40ba65ede2a884e4bce31ba7a1d87e71f981.zip
PR10601: unfork deref()
* runtime/loc2c-runtime.h: Remove k_ vs u_[store_]deref; share instead. * tapsets.cxx: Remove k_ vs u_ redirection for *deref().
-rw-r--r--runtime/loc2c-runtime.h38
-rw-r--r--tapsets.cxx6
2 files changed, 16 insertions, 28 deletions
diff --git a/runtime/loc2c-runtime.h b/runtime/loc2c-runtime.h
index c89d5b2c..de59f0e5 100644
--- a/runtime/loc2c-runtime.h
+++ b/runtime/loc2c-runtime.h
@@ -428,7 +428,7 @@ static void ursl_store64 (const struct usr_regset_lut* lut,unsigned lutsize, in
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; \
@@ -440,7 +440,7 @@ static void ursl_store64 (const struct usr_regset_lut* lut,unsigned lutsize, in
_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; \
@@ -458,7 +458,7 @@ extern void __store_deref_bad(void);
#if defined __i386__
-#define k_deref(size, addr) \
+#define deref(size, addr) \
({ \
int _bad = 0; \
u8 _b; u16 _w; u32 _l; \
@@ -478,7 +478,7 @@ extern void __store_deref_bad(void);
_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)) \
@@ -498,7 +498,7 @@ extern void __store_deref_bad(void);
#elif defined __x86_64__
-#define k_deref(size, addr) \
+#define deref(size, addr) \
({ \
int _bad = 0; \
u8 _b; u16 _w; u32 _l; u64 _q; \
@@ -519,7 +519,7 @@ extern void __store_deref_bad(void);
_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)) \
@@ -538,7 +538,7 @@ extern void __store_deref_bad(void);
})
#elif defined __ia64__
-#define k_deref(size, addr) \
+#define deref(size, addr) \
({ \
int _bad = 0; \
intptr_t _v=0; \
@@ -557,7 +557,7 @@ extern void __store_deref_bad(void);
_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)) \
@@ -616,7 +616,7 @@ extern void __store_deref_bad(void);
"i"(sizeof(unsigned long)))
-#define k_deref(size, addr) \
+#define deref(size, addr) \
({ \
int _bad = 0; \
intptr_t _v = 0; \
@@ -636,7 +636,7 @@ extern void __store_deref_bad(void);
_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)) \
@@ -790,7 +790,7 @@ extern void __store_deref_bad(void);
: "r" (x), "i" (-EFAULT) \
: "cc")
-#define k_deref(size, addr) \
+#define deref(size, addr) \
({ \
int _bad = 0; \
intptr_t _v=0; \
@@ -808,7 +808,7 @@ extern void __store_deref_bad(void);
_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)) \
@@ -878,7 +878,7 @@ extern void __store_deref_bad(void);
: "cc"); \
})
-#define k_deref(size, addr) \
+#define deref(size, addr) \
({ \
u8 _b; u16 _w; u32 _l; u64 _q; \
int _bad = 0; \
@@ -915,7 +915,7 @@ extern void __store_deref_bad(void);
_v; \
})
-#define k_store_deref(size, addr, value) \
+#define store_deref(size, addr, value) \
({ \
int _bad = 0; \
int i; \
@@ -961,20 +961,14 @@ extern void __store_deref_bad(void);
#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) \
({ \
diff --git a/tapsets.cxx b/tapsets.cxx
index cfd21bff..a5e2c7a0 100644
--- a/tapsets.cxx
+++ b/tapsets.cxx
@@ -2403,7 +2403,6 @@ dwarf_var_expanding_visitor::visit_target_symbol (target_symbol *e)
// 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"))
{
@@ -2431,7 +2430,6 @@ dwarf_var_expanding_visitor::visit_target_symbol (target_symbol *e)
// 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)
{
@@ -2756,7 +2754,6 @@ void dwarf_cast_expanding_visitor::visit_cast_op (cast_op* e)
// 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;
@@ -2802,7 +2799,6 @@ void dwarf_cast_expanding_visitor::visit_cast_op (cast_op* e)
// 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;
@@ -5790,7 +5786,6 @@ tracepoint_var_expanding_visitor::visit_target_symbol_arg (target_symbol* e)
// 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
{
@@ -5855,7 +5850,6 @@ tracepoint_var_expanding_visitor::visit_target_symbol_arg (target_symbol* e)
// 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;