I'm studying apps/bundle_deploy example code which runs on crt runtime. This function was called at the beginning to pre-load all operator functions:
``` // src/runtime/crt/crt_backend_api.c: int TVMBackendRegisterSystemLibSymbol(const char* name, void* ptr) { g_fexecs = vrealloc(g_fexecs, sizeof(TVMPackedFunc) * (g_fexecs_count + 1)); snprintf(g_fexecs[g_fexecs_count].name, sizeof(g_fexecs[g_fexecs_count].name), "%s", name); g_fexecs[g_fexecs_count].fexec = ptr; g_fexecs_count++; return 0; } ``` However, I cannot find where this function was called by browsing source code. A brutal grep search indicates this one might be built within llvm host-side. ``` $ grep -R SystemLibSymbol * Binary file apps/bundle_deploy/build/demo_static matches Binary file apps/bundle_deploy/build/model.o matches Binary file apps/bundle_deploy/build/bundle_static.o matches Binary file apps/bundle_deploy/build/bundle.so matches Binary file build/libtvm.so matches Binary file build/libtvm_runtime.so matches Binary file build/CMakeFiles/tvm.dir/src/target/llvm/codegen_cpu.cc.o matches Binary file build/CMakeFiles/tvm.dir/src/target/llvm/codegen_blob.cc.o matches Binary file build/CMakeFiles/tvm.dir/src/target/codegen.cc.o matches Binary file build/CMakeFiles/tvm.dir/src/runtime/system_library.cc.o matches Binary file build/CMakeFiles/tvm_runtime.dir/src/runtime/system_library.cc.o matches include/tvm/runtime/c_backend_api.h:TVM_DLL int TVMBackendRegisterSystemLibSymbol(const char* name, void* ptr); rust/runtime/src/module/syslib.rs:pub extern "C" fn TVMBackendRegisterSystemLibSymbol( src/target/llvm/codegen_blob.cc: // Create TVMBackendRegisterSystemLibSymbol function src/target/llvm/codegen_blob.cc: llvm::Twine("TVMBackendRegisterSystemLibSymbol"), module.get()); src/target/llvm/codegen_cpu.cc: llvm::Function::ExternalLinkage, "TVMBackendRegisterSystemLibSymbol", module_.get()); src/target/codegen.cc: os << "extern int TVMBackendRegisterSystemLibSymbol(const char*, void*);\n"; src/target/codegen.cc: << "TVMBackendRegisterSystemLibSymbol(\"" << runtime::symbol::tvm_dev_mblob << "\", (void*)" src/runtime/system_library.cc:int TVMBackendRegisterSystemLibSymbol(const char* name, void* ptr) { src/runtime/crt/crt_backend_api.c:int TVMBackendRegisterSystemLibSymbol(const char* name, void* ptr) { ``` Gdb calling stack shows it was called by __tvm_module_startup: ``` TVMBackendRegisterSystemLibSymbol(const char * ....) __tvm_module_startup __libc_csu_init libc.so.6!__libc_start_main(int (*)(int, char...) _start ``` Can anyone help point out how is __tvm_module_startup being invoked in source code or linker script somewhere? --- [Visit Topic](https://discuss.tvm.ai/t/how-is-tvm-module-startup-invoked/6891/1) to respond. You are receiving this because you enabled mailing list mode. To unsubscribe from these emails, [click here](https://discuss.tvm.ai/email/unsubscribe/5df7375045bead9d7a5b2fd6778c202dd5ff70de3b50e543d0d733bb2d5f6215).