current_bbccs.entries);
}
-static Char* mangled_cxt(Context* cxt, int rec_index)
+static const HChar* mangled_cxt(Context* cxt, int rec_index)
{
- static Char mangled[FN_NAME_LEN];
+ static HChar mangled[FN_NAME_LEN];
int i, p;
if (!cxt) return "(no context)";
CLG_DEBUGIF(3)
CLG_(print_bbcc)(-2, bbcc);
+ // FIXME: mangled_cxt returns a pointer to a static buffer that
+ // gets overwritten with each invocation.
CLG_DEBUG(2,"- clone_BBCC(%p, %d) for BB %#lx\n"
" orig %s\n"
" new %s\n",
#endif
if (fn->dump_before) {
- Char trigger[FN_NAME_LEN];
+ HChar trigger[FN_NAME_LEN];
VG_(sprintf)(trigger, "--dump-before=%s", fn->name);
CLG_(dump_profile)(trigger, True);
}
CLG_ASSERT(fn != 0);
if (fn->dump_after) {
- Char trigger[FN_NAME_LEN];
+ HChar trigger[FN_NAME_LEN];
VG_(sprintf)(trigger, "--dump-after=%s", fn->name);
CLG_(dump_profile)(trigger, True);
}
Char fn_buf[FN_NAME_LEN];
const UChar* obj_name;
DebugInfo* di;
- int ln, i=0, opos=0;
+ UInt ln, i=0, opos=0;
if (addr == 0) {
VG_(printf)("%08lx", addr);
/*
* tag can be "fn", "cfn", "jfn"
*/
-static void print_fn(Int fd, Char* buf, Char* tag, fn_node* fn)
+static void print_fn(Int fd, Char* buf, const HChar* tag, fn_node* fn)
{
int p;
p = VG_(sprintf)(buf, "%s=",tag);
my_fwrite(fd, buf, p);
}
-static void print_mangled_fn(Int fd, Char* buf, Char* tag,
+static void print_mangled_fn(Int fd, Char* buf, const HChar* tag,
Context* cxt, int rec_index)
{
int p, i;
-static void fprint_cost_ln(int fd, Char* prefix,
+static void fprint_cost_ln(int fd, const HChar* prefix,
EventMapping* em, ULong* cost)
{
int p;
*
* Returns the file descriptor, and -1 on error (no write permission)
*/
-static int new_dumpfile(Char buf[BUF_LEN], int tid, Char* trigger)
+static int new_dumpfile(Char buf[BUF_LEN], int tid, const HChar* trigger)
{
Bool appending = False;
int i, fd;
my_fwrite(fd, (void*)buf, VG_(strlen)(buf));
VG_(sprintf)(buf, "desc: Trigger: %s\n",
- trigger ? trigger : (Char*)"Program termination");
+ trigger ? trigger : "Program termination");
my_fwrite(fd, (void*)buf, VG_(strlen)(buf));
#if 0
/* Helper for print_bbccs */
static Int print_fd;
-static Char* print_trigger;
+static const HChar* print_trigger;
static Char print_buf[BUF_LEN];
static void print_bbccs_of_thread(thread_info* ti)
}
-static void print_bbccs(Char* trigger, Bool only_current_thread)
+static void print_bbccs(const HChar* trigger, Bool only_current_thread)
{
init_dump_array();
init_debug_cache();
}
-void CLG_(dump_profile)(Char* trigger, Bool only_current_thread)
+void CLG_(dump_profile)(const HChar* trigger, Bool only_current_thread)
{
CLG_DEBUG(2, "+ dump_profile(Trigger '%s')\n",
- trigger ? trigger : (Char*)"Prg.Term.");
+ trigger ? trigger : "Prg.Term.");
CLG_(init_dumps)();
if (VG_(clo_verbosity) > 1)
VG_(message)(Vg_DebugMsg, "Start dumping at BB %llu (%s)...\n",
CLG_(stat).bb_executions,
- trigger ? trigger : (Char*)"Prg.Term.");
+ trigger ? trigger : "Prg.Term.");
out_counter++;
return eg;
}
-EventGroup* CLG_(register_event_group) (int id, Char* n1)
+EventGroup* CLG_(register_event_group) (int id, const HChar* n1)
{
EventGroup* eg = new_event_group(id, 1);
eg->name[0] = n1;
return eg;
}
-EventGroup* CLG_(register_event_group2)(int id, Char* n1, Char* n2)
+EventGroup* CLG_(register_event_group2)(int id, const HChar* n1,
+ const HChar* n2)
{
EventGroup* eg = new_event_group(id, 2);
eg->name[0] = n1;
return eg;
}
-EventGroup* CLG_(register_event_group3)(int id, Char* n1, Char* n2, Char* n3)
+EventGroup* CLG_(register_event_group3)(int id, const HChar* n1,
+ const HChar* n2, const HChar* n3)
{
EventGroup* eg = new_event_group(id, 3);
eg->name[0] = n1;
return eg;
}
-EventGroup* CLG_(register_event_group4)(int id,
- Char* n1, Char* n2, Char* n3, Char* n4)
+EventGroup* CLG_(register_event_group4)(int id, const HChar* n1,
+ const HChar* n2, const HChar* n3,
+ const HChar* n4)
{
EventGroup* eg = new_event_group(id, 4);
eg->name[0] = n1;
return em;
}
-void CLG_(append_event)(EventMapping* em, Char* n)
+void CLG_(append_event)(EventMapping* em, const HChar* n)
{
Int i, j, offset = 0;
UInt mask;
typedef struct _EventGroup EventGroup;
struct _EventGroup {
Int size;
- Char* name[0];
+ const HChar* name[0];
};
/* return 0 if event group can not be registered */
-EventGroup* CLG_(register_event_group) (int id, Char*);
-EventGroup* CLG_(register_event_group2)(int id, Char*, Char*);
-EventGroup* CLG_(register_event_group3)(int id, Char*, Char*, Char*);
-EventGroup* CLG_(register_event_group4)(int id, Char*, Char*, Char*, Char*);
+EventGroup* CLG_(register_event_group) (int id, const HChar*);
+EventGroup* CLG_(register_event_group2)(int id, const HChar*, const HChar*);
+EventGroup* CLG_(register_event_group3)(int id, const HChar*, const HChar*,
+ const HChar*);
+EventGroup* CLG_(register_event_group4)(int id, const HChar*, const HChar*,
+ const HChar*, const HChar*);
EventGroup* CLG_(get_event_group)(int id);
/* Event sets are defined by event groups they consist of. */
/* Allocate space for an event mapping */
EventMapping* CLG_(get_eventmapping)(EventSet*);
-void CLG_(append_event)(EventMapping*, Char*);
+void CLG_(append_event)(EventMapping*, const HChar*);
/* Returns number of characters written */
Int CLG_(sprint_eventmapping)(Char* buf, EventMapping*);
/* Returns number of characters written */
}
-static Char* anonymous_obj = "???";
+static const HChar* anonymous_obj = "???";
static __inline__
obj_node* new_obj_node(DebugInfo* di, obj_node* next)
obj_node* obj;
obj = (obj_node*) CLG_MALLOC("cl.fn.non.1", sizeof(obj_node));
- obj->name = di ? VG_(strdup)( "cl.fn.non.2",
+ obj->name = di ? (HChar *)VG_(strdup)( "cl.fn.non.2",
VG_(DebugInfo_get_filename)(di) )
: anonymous_obj;
for (i = 0; i < N_FILE_ENTRIES; i++) {
{
obj_node* curr_obj_node;
UInt objname_hash;
- const UChar* obj_name;
+ const HChar* obj_name;
- obj_name = di ? (Char*) VG_(DebugInfo_get_filename)(di) : anonymous_obj;
+ obj_name = di ? (HChar*) VG_(DebugInfo_get_filename)(di) : anonymous_obj;
/* lookup in obj hash */
objname_hash = str_hash(obj_name, N_OBJ_ENTRIES);
struct _CommandLineOptions {
/* Dump format options */
- Char* out_format; /* Format string for callgrind output file name */
- Bool combine_dumps; /* Dump trace parts into same file? */
+ const HChar* out_format; /* Format string for callgrind output file name */
+ Bool combine_dumps; /* Dump trace parts into same file? */
Bool compress_strings;
Bool compress_events;
Bool compress_pos;
* zero when object is unmapped (possible at dump time).
*/
struct _obj_node {
- Char* name;
+ const HChar* name;
UInt last_slash_pos;
Addr start; /* Start address of text segment mapping */
void (*log_0I1Dw)(InstrInfo*, Addr, Word) VG_REGPARM(3);
// function names of helpers (for debugging generated code)
- Char *log_1I0D_name, *log_2I0D_name, *log_3I0D_name;
- Char *log_1I1Dr_name, *log_1I1Dw_name;
- Char *log_0I1Dr_name, *log_0I1Dw_name;
+ const HChar *log_1I0D_name, *log_2I0D_name, *log_3I0D_name;
+ const HChar *log_1I1Dr_name, *log_1I1Dw_name;
+ const HChar *log_0I1Dr_name, *log_0I1Dw_name;
};
// set by setup_bbcc at start of every BB, and needed by log_* helpers
Bool CLG_(get_debug_info)(Addr, Char filename[FILENAME_LEN],
Char fn_name[FN_NAME_LEN], UInt*, DebugInfo**);
void CLG_(collectBlockInfo)(IRSB* bbIn, UInt*, UInt*, Bool*);
-void CLG_(set_instrument_state)(Char*,Bool);
-void CLG_(dump_profile)(Char* trigger,Bool only_current_thread);
+void CLG_(set_instrument_state)(const HChar*,Bool);
+void CLG_(dump_profile)(const HChar* trigger,Bool only_current_thread);
void CLG_(zero_all_cost)(Bool only_current_thread);
Int CLG_(get_dump_counter)(void);
void CLG_(fini)(Int exitcode);
static void flushEvents ( ClgState* clgs )
{
Int i, regparms, inew;
- Char* helperName;
+ const HChar* helperName;
void* helperAddr;
IRExpr** argv;
IRExpr* i_node_expr;
/* Ups, this can go very wrong... */
extern void VG_(discard_translations) ( Addr64 start, ULong range, HChar* who );
-void CLG_(set_instrument_state)(Char* reason, Bool state)
+void CLG_(set_instrument_state)(const HChar* reason, Bool state)
{
if (CLG_(instrument_state) == state) {
CLG_DEBUG(2, "%s: instrumentation already %s\n",
case VG_USERREQ__DUMP_STATS_AT:
{
- Char buf[512];
+ HChar buf[512];
VG_(sprintf)(buf,"Client Request: %s", (Char*)args[1]);
CLG_(dump_profile)(buf, True);
*ret = 0; /* meaningless */
static
void branchsim_printstat(int l1, int l2, int l3)
{
- static Char buf1[128], buf2[128], buf3[128], fmt[128];
+ static Char buf1[128], buf2[128], buf3[128];
+ static HChar fmt[128];
FullCost total;
ULong Bc_total_b, Bc_total_mp, Bi_total_b, Bi_total_mp;
ULong B_total_b, B_total_mp;
static
void finish(void)
{
- Char buf[32+COSTS_LEN], fmt[128];
+ Char buf[32+COSTS_LEN];
+ HChar fmt[128];
Int l1, l2, l3;
FullCost total;
}
static
-Char* cacheRes(CacheModelResult r)
+const HChar* cacheRes(CacheModelResult r)
{
switch(r) {
case L1_Hit: return "L1 Hit ";
{
/* check for dumps needed */
static ULong bbs_done = 0;
- static Char buf[512];
+ static HChar buf[512];
if (CLG_(clo).dump_every_bb >0) {
if (CLG_(stat).bb_executions - bbs_done > CLG_(clo).dump_every_bb) {
return es;
}
-