void source( char *file ) { static char findpath[ _MAX_PATH ]; static char findname[ _MAX_PATH ]; fn_split( file ); /* _splitpath( file, disk, path, name, ext ); */ if ( strchr( file, '?' ) || strchr( file, '*' ) ) { /* Check for '*' and '?' */ _makepath( findpath, fn_drive(), fn_dir(), NULL, NULL ); _makepath( findname, NULL, NULL, fn_name(), fn_ext() ); sources( findpath, findname ); } else one_source( file ); }
void one_source( char *file ) { assert( file != NULL ); fn_split( file ); if ( ! exe_file[0] ) { strcpy( exe_file, fn_name() ); strcat( exe_file, ".exe" ); } if ( stricmp( fn_ext(), ".l" ) == 0 ) { if (! add_lib_file( file ) ) fprintf( stderr, "File '%s' already add!\n", file ); return; } if ( stricmp( fn_ext(), ".o" ) == 0 ) { if (! add_obj_file( file ) ) fprintf( stderr, "File '%s' already add!\n", file ); return; } if ( stricmp( fn_ext(), ".asm" ) == 0 ) { if (! add_asm_file( file ) ) fprintf( stderr, "File '%s' already add!\n", file ); if (! add_obj_tmpfile( fn_temp( ".o" ) ) ) fprintf( stderr, "File '%s' already add!\n", file ); return; } if ( stricmp( fn_ext(), ".res" ) == 0 ) { if (! add_res_file( file ) ) fprintf( stderr, "File '%s' already add!\n", file ); return; } if ( stricmp( fn_ext(), ".rc" ) == 0 ) { if (! add_rc_file( file ) ) fprintf( stderr, "File '%s' already add!\n", file ); if (! add_res_tmpfile( fn_temp( ".res" ) ) ) fprintf( stderr, "File '%s' already add!\n", file ); return; } if (! add_cpp_file( file ) ) fprintf( stderr, "File '%s' already add!\n", file ); if (! add_asm_tmpfile( fn_temp( ".asm" ) ) ) fprintf( stderr, "File '%s' already add!\n", file ); if (! add_obj_tmpfile( fn_temp( ".o" ) ) ) fprintf( stderr, "File '%s' already add!\n", file ); }
/* * We have seen a case that the fh passed in is for "." which * should be a VROOT node, however, the fh is different from the * root fh stored in the mntinfo4_t. The invalid fh might be * from a misbehaved server and will panic the client system at * a later time. To avoid the panic, we drop the bad fh, use * the root fh from mntinfo4_t, and print an error message * for attention. */ nfs4_sharedfh_t * badrootfh_check(nfs4_sharedfh_t *fh, nfs4_fname_t *nm, mntinfo4_t *mi, int *wasbad) { char *s; *wasbad = 0; s = fn_name(nm); ASSERT(strcmp(s, "..") != 0); if ((s[0] == '.' && s[1] == '\0') && fh && !SFH4_SAME(mi->mi_rootfh, fh)) { #ifdef DEBUG nfs4_fhandle_t fhandle; zcmn_err(mi->mi_zone->zone_id, CE_WARN, "Server %s returns a different " "root filehandle for the path %s:", mi->mi_curr_serv->sv_hostname, mi->mi_curr_serv->sv_path); /* print the bad fh */ fhandle.fh_len = fh->sfh_fh.nfs_fh4_len; bcopy(fh->sfh_fh.nfs_fh4_val, fhandle.fh_buf, fhandle.fh_len); nfs4_printfhandle(&fhandle); /* print mi_rootfh */ fhandle.fh_len = mi->mi_rootfh->sfh_fh.nfs_fh4_len; bcopy(mi->mi_rootfh->sfh_fh.nfs_fh4_val, fhandle.fh_buf, fhandle.fh_len); nfs4_printfhandle(&fhandle); #endif /* use mi_rootfh instead; fh will be rele by the caller */ fh = mi->mi_rootfh; *wasbad = 1; } kmem_free(s, MAXNAMELEN); return (fh); }
VOID Fini(INT32 code, VOID *v) { trace_enter(); list<param_t *>::reverse_iterator it_in, it_out; it_in = param_in->rbegin(); it_out = param_out->rbegin(); int depth = 0; UINT64 last_date = -1; bool is_in = false; gettimeofday(&stop, NULL); ofile << "Elapsed time ] Commence ; Fini [ : " << (stop.tv_usec / 1000.0 + 1000 * stop.tv_sec - start.tv_sec * 1000 - start.tv_usec / 1000.0) / 1000.0 << "s" << endl; while (it_in != param_in->rend() || it_out != param_out->rend()) { // for (int i = 0; i < depth; i++) // ofile << " "; param_t *p; if (it_in == param_in->rend()) { p = *it_out; it_out++; is_in = false; ofile << "out:"; } else if (it_out == param_out->rend() || (*it_out)->counter >= (*it_in)->counter) { p = *it_in; it_in++; is_in = true; ofile << "in:"; } else { p = *it_out; it_out++; is_in = false; ofile << "out:"; } if (p->is_addr) ofile << "addr:"; else ofile << "int:"; if (last_date != p->counter) { if (is_in) depth++; else depth--; } last_date = p->counter; ofile << p->val << ":" << fn_img(p->fid) << ":" << fn_imgaddr(p->fid) << ":" << fn_name(p->fid) << ":" << p->pos << ":" << p->counter << endl; } ofile.close(); trace_leave(); return; }
VOID Fini(INT32 code, VOID *v) { trace_enter(); #define append_type(type) \ if (need_comma) \ ofile << "," ; \ ofile << (type); \ need_comma = true for(unsigned int fid = 1; fid <= fn_nb(); fid++) { if (nb_call[fid] < NB_CALLS_TO_CONCLUDE) continue; ofile << fn_img(fid) << ":" << fn_imgaddr(fid) << ":" << fn_name(fid) << ":"; bool need_comma = false; unsigned int param_val_size = 1 + nb_param_int[fid] + nb_param_int_stack[fid]; for (unsigned int pid = 0; pid < param_val_size; pid++) { if (((float) nb_out[fid][pid]) > 0.75 * ((float) nb_call[fid])) { debug("Found 'out parameter' candidate : [%s@%lX] %s %u (%u <=> %u)\n", fn_img(fid).c_str(), fn_imgaddr(fid), fn_name(fid).c_str(), pid, nb_out[fid][pid], nb_call[fid]); } if (pid == 0 && has_return[fid] == 0) { append_type("VOID"); } else if (pid == 0 && has_return[fid] == 2) { append_type("FLOAT"); } else if (pid < 1 + nb_param_int[fid] && param_is_not_addr[fid][pid]) { append_type("INT"); } else if (param_val[fid][pid]->size() == 0) { append_type("UNDEF"); } else { int param_addr = 0; for (list<UINT64>::iterator it = param_val[fid][pid]->begin(); it != param_val[fid][pid]->end(); it++) { if (is_addr(*it)) { param_addr++; } } float coef = ((float) param_addr) / ((float) param_val[fid][pid]->size()); append_type(coef > THRESHOLD ? "ADDR" : "INT"); ofile << "(" << coef << ")"; } } for (unsigned int pid = 0; pid < nb_param_float[fid] + nb_param_float_stack[fid]; pid++) { append_type("FLOAT"); } ofile << endl; } ofile.close(); trace_leave(); }
VOID Fini(INT32 code, VOID *v) { trace_enter(); list<param_t *>::reverse_iterator it_in, it_out; it_in = param_in->rbegin(); it_out = param_out->rbegin(); int depth = 0; UINT64 last_date = -1; bool is_in = false; gettimeofday(&stop, NULL); ofile << "Elapsed time ] Commence ; Fini [ : " << (stop.tv_usec / 1000.0 + 1000 * stop.tv_sec - start.tv_sec * 1000 - start.tv_usec / 1000.0) / 1000.0 << "s" << endl; while (it_in != param_in->rend() || it_out != param_out->rend()) { param_t *p; if (it_in == param_in->rend()) { p = *it_out; it_out++; is_in = false; } else if (it_out == param_out->rend() || (*it_out)->counter >= (*it_in)->counter) { p = *it_in; it_in++; is_in = true; } else { p = *it_out; it_out++; is_in = false; } #if 0 if (p->is_addr) ofile << "a:"; else ofile << "n:"; #endif if (last_date != p->counter) { if (is_in) depth++; else depth--; } last_date = p->counter; char head = 0x00; /* Construct the first byte */ /* First two bits are for i/o and addr/not addr */ head |= 0x80 & ((is_in?1:0) << 7); head |= 0x40 & ((p->is_addr?1:0) << 6); /* Then we encode the position of the parameter */ head |= 0x3F & p->pos; if (!pushed_in_log[p->fid]) { ofile << '\xff' << p->fid << ":" << fn_img(p->fid) << ":" << fn_imgaddr(p->fid) << ":" << fn_name(p->fid) << endl; pushed_in_log[p->fid] = true; } ofile << head; ofile << p->fid << ":" << p->counter << ":" << p->val << endl; #if 0 ofile << p->val << ":" << fn_img(p->fid) << ":" << fn_imgaddr(p->fid) << ":" << fn_name(p->fid) << ":" << p->pos << ":" << p->counter << endl; #endif } ofile.close(); trace_leave(); return; }