From 85278e66846c4ce452c3442887ec947180661c40 Mon Sep 17 00:00:00 2001 From: brolley Date: Wed, 23 Jan 2008 19:15:19 +0000 Subject: 2008-01-23 Dave Brolley * translate.cxx (var::fini): New method. (c_unparser::emit_module_init): Call var::fini when deregistering variables without indices. (c_unparser::emit_module_exit): Likewise. --- ChangeLog | 7 +++++++ translate.cxx | 18 ++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/ChangeLog b/ChangeLog index fe7eca75..8a8901a4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-01-23 Dave Brolley + + * translate.cxx (var::fini): New method. + (c_unparser::emit_module_init): Call var::fini when deregistering + variables without indices. + (c_unparser::emit_module_exit): Likewise. + 2008-01-22 Jim Keniston * runtime/uprobes/uprobes.c: Fix from Srinivasa: Recast diff --git a/translate.cxx b/translate.cxx index 21a438b6..0beaf1f8 100644 --- a/translate.cxx +++ b/translate.cxx @@ -400,6 +400,20 @@ public: } } + string fini () const + { + switch (type()) + { + case pe_string: + case pe_long: + return ""; // no action required + case pe_stats: + return "_stp_stat_del (" + value () + ");"; + default: + throw semantic_error("unsupported deallocator for " + value()); + } + } + void declare(c_unparser &c) const { c.c_declare(ty, name); @@ -1201,6 +1215,8 @@ c_unparser::emit_module_init () vardecl* v = session->globals[i]; if (v->index_types.size() > 0) o->newline() << getmap (v).fini(); + else + o->newline() << getvar (v).fini(); } o->newline() << "return rc;"; @@ -1262,6 +1278,8 @@ c_unparser::emit_module_exit () vardecl* v = session->globals[i]; if (v->index_types.size() > 0) o->newline() << getmap (v).fini(); + else + o->newline() << getvar (v).fini(); } o->newline() << "free_percpu (contexts);"; -- cgit