// Process contents of all Init tables void MYOInitTableList::process() { OFFLOAD_DEBUG_TRACE(2, "Process MYO Init tables:\n"); m_lock.lock(); for (Node *n = m_head; n != 0; n = n->next) { __offload_myo_shared_init_table_process( (InitTableEntry*)n->table.entries); } for (Node *n = m_head; n != 0; n = n->next) { remove_table(n); } m_lock.unlock(); }
extern "C" void __offload_myoRegisterTables( InitTableEntry* init_table, SharedTableEntry *shared_table, FptrTableEntry *fptr_table ) { // check whether we need to initialize MYO library. It is // initialized only if at least one myo table is not empty if (shared_table_entries(shared_table) || fptr_table_entries(fptr_table)) { // make sure myo library is loaded __offload_myoLoadLibrary(); // register tables __offload_myo_shared_table_process(shared_table); __offload_myo_fptr_table_process(fptr_table); __offload_myo_shared_init_table_process(init_table); } }
MyoError __offload_init_vtables(void) { SharedTableEntry *t_start; //OFFLOAD_DEBUG_TRACE(3, "%s\n", __func__); t_start = &__offload_myo_shared_vtable_start + 1; //OFFLOAD_DEBUG_TRACE(3, "%s(%p)\n", __func__, t_start); while (t_start->varName != 0) { //OFFLOAD_DEBUG_TRACE(4, // "myo shared vtable \"%s\" &myo_ptr = %p myo_ptr = %p\n", // t_start->varName, // (void *)(t_start->sharedAddr), // ((void **)(t_start->sharedAddr))[0]); t_start++; } __offload_myo_shared_init_table_process( &__offload_myo_init_table_start + 1); return MYO_SUCCESS; }