/* find char* name, f_funcptr pair in dump from string, output suitable for stubs_entry_2.s*/ #include #include #include #include #include "dumputil.h" void usage() { fprintf(stderr,"find_eventproc ...\n"); exit(1); } int find_event_proc(dump_t *dump,char *name) { unsigned str_offset=0; unsigned str_addr=0; unsigned found=0; while(find_cstring(dump,&str_offset,name)) { str_addr=offset_to_ptr(dump,str_offset); int i=0; while(find_word_aligned(dump,&i,str_addr)) { uint32_t pfunc = dump->pw[i+1]; // TODO better check for valid code, or even check against ref dump if(pfunc > dump->base && deref_word_ptr(dump,i*4+4) != 0) { // printf("%s candidate %08X val %08X\n",name,pfunc,deref_word_ptr(dump,i*4+4)); printf("NHSTUB(%s,0x%08X) // by find_eventproc name @ 0x%08X\n",name,pfunc,offset_to_ptr(dump,i*4)); found++; } i++; } str_offset+=strlen(name); } return found; } int process_dump(dump_t *dump,char **names,unsigned num_procs) { unsigned i; unsigned found; for(i=0,found=0; i