{"record":{"id":"adc0f8521163c406","repo":"stablyai/orca","slug":"verify-linux-glibc-floor-could-not-run-objdump-o","errorCode":null,"errorMessage":"[verify-linux-glibc-floor] could not run objdump on ${filePath}: ${result.error.message}","messagePattern":"\\[verify-linux-glibc-floor\\] could not run objdump on (.+?): (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"config/scripts/verify-linux-glibc-floor.cjs","lineNumber":252,"sourceCode":"// disables LANGUAGE-based message translation).\nfunction cLocaleEnv() {\n  return { ...process.env, LC_ALL: 'C', LANG: 'C' }\n}\n\n/**\n * Run objdump with one flag on `filePath`. Fail-closed: a spawn error, non-zero\n * exit, or signal throws, because a silently-unreadable binary (truncated,\n * corrupt, or an objdump that cannot decode its format) would let a too-new\n * binary slip past the gate.\n */\nfunction runObjdump(objdumpPath, flag, filePath) {\n  const result = spawnSync(objdumpPath, [flag, filePath], {\n    encoding: 'utf8',\n    maxBuffer: 64 * 1024 * 1024,\n    env: cLocaleEnv()\n  })\n  if (result.error) {\n    throw new Error(\n      `[verify-linux-glibc-floor] could not run objdump on ${filePath}: ${result.error.message}`\n    )\n  }\n  if (result.signal || result.status !== 0) {\n    throw new Error(\n      `[verify-linux-glibc-floor] objdump ${flag} failed for ${filePath} ` +\n        `(status ${result.status}, signal ${result.signal ?? 'none'}): ${(result.stderr || '').trim()}`\n    )\n  }\n  return result.stdout || ''\n}\n\n/** DT_NEEDED shared-library names from `objdump -p` (`  NEEDED  <lib>`). */\nfunction parseNeededLibraries(objdumpOutput) {\n  const needed = new Set()\n  for (const line of objdumpOutput.split('\\n')) {\n    const match = line.match(/^\\s+NEEDED\\s+(\\S+)/)\n    if (match) {","sourceCodeStart":234,"sourceCodeEnd":270,"githubUrl":"https://github.com/stablyai/orca/blob/1136503c6a231a16dce8f921f6fadb63d181e8db/config/scripts/verify-linux-glibc-floor.cjs#L234-L270","documentation":"runObjdump spawns objdump with one flag on a bundled native binary and fails closed if spawnSync returns result.error (a spawn-level failure, e.g. the objdump binary vanished, permission denied, or EAGAIN). A silent spawn failure would let a too-new binary pass the glibc floor gate, so any spawn error is fatal. The message interpolates the filePath and the underlying error.message.","triggerScenarios":"spawnSync(objdumpPath, [flag, filePath]) returns a result with .error set at line 251. Concrete causes: objdumpPath resolved but became unreadable/non-executable between resolveObjdump and the call, EMFILE (too many open FDs), or EAGAIN fork limits when iterating many binaries.","commonSituations":"CI host with low ulimit -n or -u hitting EMFILE/EAGAIN mid-iteration; a flaky NFS-mounted binutils; objdump permissions changed under a container remount.","solutions":["Re-run the gate — if result.error was EMFILE/EAGAIN, raise ulimits (`ulimit -n` / `ulimit -u`) on the packaging host and retry.","Verify the objdump binary is executable and readable: `ls -l $(which objdump)`.","If transient, run verify-linux-glibc-floor again after clearing the resource pressure."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"import { accessSync, constants } from 'node:fs'\n// pre-check objdump is invocable before iterating binaries\naccessSync(objdumpPath, constants.X_OK)","typeGuard":null,"tryCatchPattern":"try {\n  output = runObjdump(objdumpPath, flag, filePath)\n} catch (error) {\n  if (/EMFILE|EAGAIN/.test(error.message)) {\n    // transient resource pressure — raise ulimits and retry once\n    throw error\n  }\n  throw error\n}","preventionTips":["Raise ulimit -n / ulimit -u on packaging hosts before running the gate over many binaries.","Confirm objdump is executable and readable before the run."],"tags":["linux","packaging","glibc","binutils","objdump","spawn"],"backgroundTag":null,"analyzedSha":"1136503c6a231a16dce8f921f6fadb63d181e8db","analyzedAt":"2026-08-12T23:15:58.167Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}