int find_function2(char *s,struct program *p) { int a,b,c; a=0; b=p->num_functions; while(b>a) { c=(a+b)>>1; if(p->function[p->function_index[c]].name>s) b=c; else a=c+1; } if(p->flags & P_DYNAMIC_INHERIT) { if(p->function[p->function_index[c]].name==s) { return p->function_index_offset+c; }else{ for(a=p->num_inhert;a>=0;a--) { b=find_function2(s,p->inherit[a].program); if(b!=-1) return b; } } }else{ if(p->function[p->function_index[c]].name==s) return c; } return -1; } int find_function(char *s,struct object *o) { struct program *p; int ret; p=o->program; s=find_shared_string(s); if(!s) return -1; ret=find_function2(s,p); } struct function *find_function(int f,struct program *p) { int a,b,c; if(p->flags & P_DYNAMIC_INHERIT) { if(p->function_index_offset<f) { a=0; b=p->num_inherits; while(b>a) { c=(a+b)>>1; if(p->inherit[c].function_index_offset>f) b=c; else a=c+1; } return find_function(p->inherit[a].program,f-p->inherit[a].function_index_offset); }else{ return p->functions+(f-p->function_index_offset) } }else{ return p->functions+f; } }