NationalSecurityAgency/ghidra · warning · JDOMException

No context register name provided.

Error message

No context register name provided.

What it means

Thrown by parseGdisOptionsFile() as a JDOMException when a <context_register> element exists but has empty content (getContentSize() == 0). The element must contain the register name as its text content; an empty element yields no register name to look up. Like 638 it is caught internally, logged, and resets the config fields.

Solutions

  1. Put the context register name as the element's text content, e.g. <context_register>cs</context_register>.
  2. Ensure the named register exists for the Sleigh language (else a separate 'Unknown context register' error follows).
  3. Remove the <context_register> element entirely if the file should be global-optstring-only (but then add a <global> element, see 638).

Example fix

<!-- before -->
<context_register/>

<!-- after -->
<context_register>cs</context_register>
Defensive patterns

Strategy: validation

Validate before calling

import org.jdom2.Element;
Element ctx = root.getChild("context_register");
if (ctx != null && ctx.getContentSize() == 0) {
    // empty <context_register/>; require a name or remove the element
}

Type guard

public boolean contextRegisterHasName(Element ctx) {
    return ctx != null && ctx.getContentSize() > 0
        && ctx.getContent(0).getValue() != null && !ctx.getContent(0).getValue().trim().isEmpty();
}

Try / catch

try {
    config.parseGdisOptionsFile(fileName);
} catch (JDOMException e) {
    if (e.getMessage().equals("No context register name provided.")) {
        // fill the element text or drop it in favor of a <global> block
    } else throw e;
}

Prevention

When it happens

Trigger: An options file with <context_register></context_register> or <context_register/> — the tag is present but the register name text node is missing.

Common situations: Authoring a new gdis options file and forgetting to fill in the register name; an editing tool that collapsed the element to self-closing.

Related errors


AI-assisted analysis of NationalSecurityAgency/ghidra@d5f144c24d (2026-08-14). Data as JSON: /api/errors/7995e1d92c59b7d8. Report an issue: GitHub.

Appendix: source

Thrown at Ghidra/Extensions/SleighDevTools/src/main/java/ghidra/app/util/disassemble/GNUExternalDisassembler.java:229

				if (globalElement != null) {
					globalDisassemblerOptions = globalElement.getAttributeValue("optstring");
				}
				Element contextRegisterElement = rootElem.getChild("context_register");
				if (contextRegisterElement == null) {
					//no context_register element found in the xml file 
					//this is not necessarily an error - might only be a global optstring
					//global optstring has already been parsed, so we're done
					if (globalElement != null) {
						Msg.info(this,
							"no context register element in " + gdisOpts.getAbsolutePath());
						return;
					}
					//no context register element or global element, error
					throw new JDOMException(
						"No context_register element or global element in gdis options file");
				}
				if (contextRegisterElement.getContentSize() == 0) {
					throw new JDOMException("No context register name provided.");
				}
				String contextRegisterName = contextRegisterElement.getContent(0).getValue();
				contextRegister = lang.getRegister(contextRegisterName);
				if (contextRegister == null) {
					//the context register named in the xml file does not exist in the sleigh language
					//this is an error
					throw new JDOMException("Unknown context register " + contextRegisterName +
						" for language " + lang.getLanguageID().getIdAsString());
				}
				valueToOptionString = new HashMap<>();
				valueToDisplayPrefix = new HashMap<>();
				Element options = rootElem.getChild("options");
				List<Element> optList = options.getChildren("option");
				for (Element opt : optList) {
					Long value = Long.decode(opt.getAttributeValue("value"));
					String optString = opt.getAttributeValue("optstring");
					valueToOptionString.put(value, optString);
					String displayPrefix = opt.getAttributeValue("display_prefix");

View on GitHub (pinned to d5f144c24d)