From a87e40ba65ede2a884e4bce31ba7a1d87e71f981 Mon Sep 17 00:00:00 2001 From: "Frank Ch. Eigler" Date: Sun, 20 Dec 2009 16:54:27 -0500 Subject: [PATCH] PR10601: unfork deref() * runtime/loc2c-runtime.h: Remove k_ vs u_[store_]deref; share instead. * tapsets.cxx: Remove k_ vs u_ redirection for *deref(). --- runtime/loc2c-runtime.h | 38 ++++++++++++++++---------------------- tapsets.cxx | 6 ------ 2 files changed, 16 insertions(+), 28 deletions(-) diff --git a/runtime/loc2c-runtime.h b/runtime/loc2c-runtime.h index c89d5b2c4..de59f0e51 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 cfd21bff4..a5e2c7a02 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; -- 2.43.5