stablyai/orca · error
[verify-linux-glibc-floor] objdump ${flag} failed for ${file
Error message
[verify-linux-glibc-floor] objdump ${flag} failed for ${filePath} (status ${result.status}, signal ${result.signal ?? 'none'}): ${(result.stderr || '').trim()} What it means
objdump spawned successfully but exited non-zero or was killed by a signal. Because a truncated, corrupt, or unparseable binary must not slip past the glibc-floor gate, runObjdump treats any non-zero status or signal as fatal and reports the flag, status, signal, and trimmed stderr. This is the deliberate fail-closed contract documented above the function.
Source
Thrown at config/scripts/verify-linux-glibc-floor.cjs:257
/**
* Run objdump with one flag on `filePath`. Fail-closed: a spawn error, non-zero
* exit, or signal throws, because a silently-unreadable binary (truncated,
* corrupt, or an objdump that cannot decode its format) would let a too-new
* binary slip past the gate.
*/
function runObjdump(objdumpPath, flag, filePath) {
const result = spawnSync(objdumpPath, [flag, filePath], {
encoding: 'utf8',
maxBuffer: 64 * 1024 * 1024,
env: cLocaleEnv()
})
if (result.error) {
throw new Error(
`[verify-linux-glibc-floor] could not run objdump on ${filePath}: ${result.error.message}`
)
}
if (result.signal || result.status !== 0) {
throw new Error(
`[verify-linux-glibc-floor] objdump ${flag} failed for ${filePath} ` +
`(status ${result.status}, signal ${result.signal ?? 'none'}): ${(result.stderr || '').trim()}`
)
}
return result.stdout || ''
}
/** DT_NEEDED shared-library names from `objdump -p` (` NEEDED <lib>`). */
function parseNeededLibraries(objdumpOutput) {
const needed = new Set()
for (const line of objdumpOutput.split('\n')) {
const match = line.match(/^\s+NEEDED\s+(\S+)/)
if (match) {
needed.add(match[1])
}
}
return needed
}View on GitHub (pinned to 1136503c6a)
Solutions
- Read the trimmed stderr in the message — it usually states the parse failure (e.g. 'File format not recognized').
- Rebuild the offending native module so its binary is complete and valid for the target arch.
- If the file is genuinely not an ELF native (false positive from collectNativeBinaries), exclude it from the scan or fix the collector's ELF magic check.
Defensive patterns
Strategy: try-catch
Try / catch
try {
const out = runObjdump(objdumpPath, '-p', filePath)
} catch (error) {
// objdump parse failure => suspect corrupt/non-ELF; rebuild the module, do not skip
console.error('objdump rejected', filePath, error.message)
throw error
} Prevention
- Treat any objdump non-zero exit as a corrupt binary; rebuild the offending native module.
- Keep collectNativeBinaries' ELF magic check tight to avoid feeding non-natives to objdump.
When it happens
Trigger: result.signal is truthy OR result.status !== 0 at line 256. Happens when objdump cannot parse the file (not a valid ELF / truncated), when the bundled binary is for an architecture objdump doesn't support, or when objdump itself crashes (e.g. OOM-killed, signal).
Common situations: A bundled .node that is corrupt or a non-native artifact misclassified by collectNativeBinaries; cross-compiled binaries the host objdump can't decode; a partially-written binary from an interrupted build.
Related errors
- [verify-linux-glibc-floor] could not run objdump on ${filePa
- [verify-linux-glibc-floor] objdump not found. Install binuti
- [verify-linux-glibc-floor] ${offenders.length} bundled nativ
- Missing packaged resources directory: ${resourcesDir}
- Unsupported local-build compatibility architecture: ${contex
AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12).
Data as JSON: /api/errors/c268c2bc9b5ba888.
Report an issue: GitHub.