static void DoAddLib( pid_t pid, struct link_map *lmap ) { lib_load_info *lli; // inefficient code, but not called very often ModuleTop++; lli = malloc( ModuleTop * sizeof( lib_load_info ) ); memset( lli, 0, ModuleTop * sizeof( lib_load_info ) ); memcpy( lli, ModuleInfo, (ModuleTop - 1) * sizeof( lib_load_info ) ); free( ModuleInfo ); ModuleInfo = lli; lli = ModuleInfo + ModuleTop - 1; lli->offset = lmap->l_addr; lli->dbg_dyn_sect = (addr_off)lmap->l_ld; dbg_strcpy( pid, lli->filename, lmap->l_name ); lli->offset = lmap->l_addr; dbg_printf( "Added library, ofs/dyn = %p/%p'%s'\n", lmap->l_addr, (addr_off)lmap->l_ld, lli->filename ); // no name, not interested if( lli->filename[0] != '\0' ) { CodeLoad( lli->filename, lmap->l_addr, SAMP_CODE_LOAD ); } }
/* * AddLib - a new library has loaded */ static void AddLib( struct link_map *lmap ) { lib_load_info *lli; /* This code is not terribly efficient */ ModuleTop++; lli = malloc( ModuleTop * sizeof( lib_load_info ) ); memset( lli, 0, ModuleTop * sizeof( lib_load_info ) ); memcpy( lli, moduleInfo, (ModuleTop - 1) * sizeof( lib_load_info ) ); free( moduleInfo ); moduleInfo = lli; lli = &moduleInfo[ModuleTop - 1]; lli->offset = lmap->l_addr; lli->dbg_dyn_sect = (addr_off)lmap->l_ld; dbg_strcpy( pid, lli->filename, lmap->l_name ); lli->newly_loaded = true; lli->newly_unloaded = false; lli->offset = lmap->l_addr; Out( "Added library: ofs/dyn = " ); OutNum( lmap->l_addr ); Out( "/" ); OutNum( (addr_off)lmap->l_ld ); Out( " " ); Out( lli->filename ); Out( "\n" ); }