search_result DIGENTRY DIPImpAddrMod( imp_image_handle *ii, address a, imp_mod_handle *im ) { search_result sr; unsigned i; sr = FindMBIndex( ii, a.mach.offset, &i ); switch( sr ) { case SR_EXACT: case SR_CLOSEST: *im = IMH_JAVA; break; } return( sr ); }
walk_result DIGENTRY DIPImpWalkSymList( imp_image_handle *ii, symbol_source ss, void *source, IMP_SYM_WKR *wk, imp_sym_handle *is, void *d ) { scope_block *scope; address *a; walk_result wr; unsigned i; ji_ptr clazz; imp_type_handle *it; struct walk_data data; data.wk = wk; data.d = d; switch( ss ) { case SS_BLOCK: scope = source; switch( FindMBIndex( ii, scope->start.mach.offset, &i ) ) { case SR_EXACT: case SR_CLOSEST: break; default: return( WR_CONTINUE ); } if( scope->unique == OBJECT_SCOPE ) { wr = WalkObject( ii, FALSE, ii->cc, WalkSymGlue, is, &data ); } else { wr = WalkAScope( ii, i, scope, WalkSymGlue, is, &data ); } return( wr ); case SS_MODULE: /* no module scope symbols in Java */ break; case SS_SCOPED: a = source; switch( FindMBIndex( ii, a->mach.offset, &i ) ) { case SR_EXACT: case SR_CLOSEST: break; default: return( WR_CONTINUE ); } wr = WalkAllScopes( ii, i, a->mach.offset, WalkSymGlue, is, &data ); break; case SS_TYPE: it = source; switch( it->kind ) { case JT_RAWNAME: clazz = GetClass( it->sig ); break; case JT_WANTOBJECT: case JT_SIGNATURE: if( GetU8( it->sig ) != SIGNATURE_CLASS ) return( WR_CONTINUE ); clazz = GetClass( it->sig + 1 ); break; default: return( WR_CONTINUE ); } if( clazz != 0 ) { return( WalkObject( ii, FALSE, clazz, WalkSymGlue, is, &data ) ); } break; } return( WR_CONTINUE ); }