{"record":{"id":"d4bb096ef0050e02","repo":"dotnet/runtime","slug":"icall-symbol-maps-not-enabled-pass-enable-icall","errorCode":null,"errorMessage":"icall symbol maps not enabled, pass --enable-icall-symbol-map to configure.\\n","messagePattern":"icall symbol maps not enabled, pass --enable-icall-symbol-map to configure\\.\\\\n","errorType":"console","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"src/mono/mono/metadata/icall-table.c","lineNumber":322,"sourceCode":"\n\t\tT *functions_sorted = g_new (T, N);\n\n\t\t// Initialize with identity mapping. One line is easier to step over.\n\t\tfor (T i = 0; i < N; ++i) functions_sorted [i] = i;\n\n\t\tmono_qsort (functions_sorted, N, sizeof (T), mono_qsort_icall_function_compare_indirect);\n\n\t\tgpointer old = mono_atomic_cas_ptr ((gpointer*)&static_functions_sorted, functions_sorted, NULL);\n\t\tif (old)\n\t\t\tg_free (functions_sorted);\n\t}\n\n\tT const * const slot = (const T*)bsearch (func, static_functions_sorted, N, sizeof (T), mono_bsearch_icall_function_compare_indirect);\n\tif (!slot)\n\t\treturn NULL;\n\treturn icall_functions [*slot].name;\n#else\n\tfprintf (stderr, \"icall symbol maps not enabled, pass --enable-icall-symbol-map to configure.\\n\");\n\tg_assert_not_reached ();\n\treturn NULL;\n#endif\n}\n\nvoid\nmono_icall_table_init (void)\n{\n\tint i = 0;\n\n\t/* check that tables are sorted: disable in release */\n\tif (TRUE) {\n\t\tint j;\n\t\tconst char *prev_class = NULL;\n\t\tconst char *prev_method;\n\n\t\tfor (i = 0; i < Icall_type_num; ++i) {\n\t\t\tconst IcallTypeDesc *desc;","sourceCodeStart":304,"sourceCodeEnd":340,"githubUrl":"https://github.com/dotnet/runtime/blob/60108ba66eb7d1d12f595480091b4ad80a24b172/src/mono/mono/metadata/icall-table.c#L304-L340","documentation":"mono_lookup_icall_symbol_internal resolves a native function pointer to the name of its Mono internal call (icall), used for backtraces, profiling, and AOT metadata. Its real body is compiled only when ENABLE_ICALL_SYMBOL_MAP (set by configure --enable-icall-symbol-map) or TEST_ICALL_SYMBOL_MAP is defined; in any other build the function compiles to a stub that prints this message and calls g_assert_not_reached() (SIGABRT). The stub is registered as the runtime's icall-table callback in mono_icall_table_init, so any consumer that invokes symbol resolution triggers the abort.","triggerScenarios":"Running a Mono runtime that was configured without --enable-icall-symbol-map while a component calls the icall symbol-lookup callback: native-stack symbolication in a profiler/debugger, AOT tooling that records icall names, or direct calls to mono_lookup_icall_symbol / mono_lookup_icall_symbol_internal.","commonSituations":"Distro-packaged or embedded/minimal Mono builds that disable icall symbol maps to reduce binary size; attaching a profiler or debugger that expects symbol resolution on such a build; upgrading to a runtime that no longer ships the symbol map.","solutions":["Rebuild Mono enabling the feature: ./configure --enable-icall-symbol-map (pass the same flag to autogen.sh/cmake as appropriate)","If you cannot rebuild, disable the consumer that triggers the lookup (e.g. turn off the profiler/debugger)","Use a runtime build documented to ship icall symbol maps (many release/desktop builds do; minimal/embedded ones often do not)"],"exampleFix":"# before\n./configure --prefix=/opt/mono\n\n# after\n./configure --prefix=/opt/mono --enable-icall-symbol-map","handlingStrategy":"validation","validationCode":"# Build-time / install-time check: confirm the runtime was built with icall symbol maps.\n# After configure, grep config.h for the feature flag.\ngrep -q '#define ENABLE_ICALL_SYMBOL_MAP 1' \"${MONO_BUILD_DIR:-.}/config.h\" \\\n  && echo \"ok: icall symbol map enabled\" \\\n  || echo \"missing: reconfigure with --enable-icall-symbol-map before relying on symbolication\"","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Standardize your Mono build with --enable-icall-symbol-map if any profiler, debugger, or AOT tooling will run against it","Distinguish release/embedded builds (often strip this for size) from dev builds that need symbolication","Treat this error as non-recoverable at runtime: it is a SIGABRT, so fix it at build/install time rather than try to handle it in-process","Document in your deployment runbook which Mono build variant ships the symbol map so operators pick the right one"],"tags":["mono","icall","build-configuration","debugging","profiling","abort"],"backgroundTag":null,"analyzedSha":"60108ba66eb7d1d12f595480091b4ad80a24b172","analyzedAt":"2026-08-10T18:54:11.478Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}