dotnet/runtime · error

Failed to initialize Assembler

Error message

Failed to initialize Assembler

What it means

`pAsm->Init(bGeneratePdb)` returned FALSE (main.cpp:603-605). Assembler::Init (assem.cpp:235) creates the ICeeFileGen, the .il/.sdata/.tls sections, and (on Linux) checks OpenSSL for deterministic mode; any of those HRESULTs failing causes Init to return FALSE and ilasm prints this generic message and exits. The root cause is one of those internal setup failures.

Source

Thrown at src/coreclr/ilasm/main.cpp:605

                {
                    fprintf(stderr,"Invalid Image Base specified for 32-bit target\n");
                    delete pAsm;
                    goto ErrorExit;
                }
            }
            if (COR_IS_32BIT_PREFERRED(pAsm->m_dwComImageFlags) &&
                ((pAsm->m_dwCeeFileFlags & ICEE_CREATE_FILE_PE64) ||
                 ((pAsm->m_dwCeeFileFlags & ICEE_CREATE_FILE_PE32) == 0) ||
                 ((pAsm->m_dwCeeFileFlags & ICEE_CREATE_MACHINE_I386) == 0) ||
                 ((pAsm->m_dwComImageFlags & COMIMAGE_FLAGS_ILONLY) == 0)))
            {
                fprintf(stderr,"/32BITPREFERRED valid only with PE32/X86/ILONLY images\n");
                delete pAsm;
                goto ErrorExit;
            }
            if (!pAsm->Init(bGeneratePdb))
            {
                fprintf(stderr,"Failed to initialize Assembler\n");
                delete pAsm;
                goto ErrorExit;
            }
            if(g_dwTestRepeat)
                MakeTestFile(szInputFilename);

            if(wzOutputFilename[0] == 0)
            {
                wcscpy_s(wzOutputFilename,MAX_FILENAME_LENGTH,pwzInputFiles[0]);
                size_t j = u16_strlen(wzOutputFilename);
                do
                {
                    j--;
                    if(wzOutputFilename[j] == W('.'))
                    {
                        wzOutputFilename[j] = 0;
                        break;
                    }

View on GitHub (pinned to 290d5ab72c)

Solutions

  1. Check stderr for a preceding, more specific message (e.g. the OpenSSL line from 221).
  2. Reinstall or rebuild ilasm from a known-good source tree.
  3. Free system resources / try on a different machine to rule out memory pressure.
  4. Disable `/DETERMINISTIC` and `/PDB` to narrow which setup step failed.

Example fix

// before
ilasm /DETERMINISTIC /PDB foo.il   # -> Failed to initialize Assembler
// after
apt-get install -y libssl1.1 && ilasm /DETERMINISTIC /PDB foo.il
Defensive patterns

Strategy: validation

Validate before calling

# Pre-flight the conditions Assembler::Init depends on.
# (Linux, deterministic) ensure OpenSSL loads; ensure free memory.
if want_deterministic && ! ldd "$(command -v ilasm)" | grep -q libcrypto; then
  echo 'Init will likely fail: OpenSSL missing for deterministic mode'; exit 1
fi

Prevention

When it happens

Trigger: ICeeFileGen creation failure; section-creation failure; (Linux) OpenSSL unavailable in deterministic mode; out of resources during metadata emitter setup.

Common situations: Corrupted or incompatible ilasm/CoreCLR build; missing native dependency; very low memory; deterministic mode without OpenSSL (see 221).

Related errors


AI-assisted analysis of dotnet/runtime@290d5ab72c (2026-08-06). Data as JSON: /api/errors/0b2a5f4b77e71456. Report an issue: GitHub.