static int llcallchain_list_show(dyn_llcallchain_t *dyn, track_proc_t *proc, track_lwp_t *lwp) { perf_llrecgrp_t *llrec_grp; char content[WIN_LINECHAR_MAX]; os_perf_llrec_t *rec_arr; sym_chainlist_t chainlist; win_reg_t *reg; int i; reg = &dyn->chain_caption; reg_erase(reg); snprintf(content, WIN_LINECHAR_MAX, "Call-chain list:"); reg_line_write(reg, 1, ALIGN_LEFT, content); dump_write("%s\n", content); reg_refresh_nout(reg); reg = &dyn->pad; reg_erase(reg); dump_write("\n"); reg_refresh_nout(reg); if (lwp != NULL) { llrec_grp = &lwp->llrec_grp; } else { llrec_grp = &proc->llrec_grp; } if (sym_load(proc, SYM_TYPE_FUNC) != 0) { debug_print(NULL, 2, "Failed to load the process symbol " "(pid = %d)\n", proc->pid); return (-1); } memset(&chainlist, 0, sizeof (sym_chainlist_t)); rec_arr = llrec_grp->rec_arr; for (i = 0; i < llrec_grp->nrec_cur; i++) { if ((rec_arr[i].addr < dyn->addr) || (rec_arr[i].addr >= dyn->addr + dyn->size)) { continue; } sym_callchain_add(&proc->sym, rec_arr[i].callchain.ips, rec_arr[i].callchain.ip_num, &chainlist); } chainlist_show(&chainlist, &dyn->chain_data); return (0); }
void boot_boot(void) { int a; // memory init (Must do before cpuinit!) mem_init(RDRAMSIZE); // cpu/compiler init cpu_init(); // os emulator structures os_init(); // map cart into memory (read only) for(a=0;a<cart.size;a+=4096) { mem_mapexternal(0x10000000+a,MAP_R,cart.data+a); mem_mapexternal(0x90000000+a,MAP_R,cart.data+a); mem_mapexternal(0xb0000000+a,MAP_R,cart.data+a); } // copy pif rom #ifdef PIFROM memcpy(RPIF,pifRomImage,0x7c0); memcpy(WPIF,pifRomImage,0x7c0); #endif cart.codebase=mem_read32(0x10000008); cart.codesize=0x100000; // guess, always same? if(cart.codesize>4096*1024) { print("error: codeblock too large"); return; } if(mem_read32(0x10000540)!=0) cart.bootloader=1; if(cart.bootloader==1) { print("Alternate boot loader. "); cart.codebase&=~0x300000; // fzero } if(0) { // RealBoot mem_writerangeraw(0xa4000000,4096,cart.data); cpu_goto(0xa4000000); } else { // C-Boot mem_writerangeraw(cart.codebase,cart.codesize,cart.data+0x1000); sym_load(cart.symname); cpu_goto(cart.codebase); } st.framesync=cart.framesync; view.codebase=cart.codebase; view_changed(VIEW_CODE); }