Package ghidra.program.database

# Class ProgramCompilerSpec

java.lang.Object
ghidra.program.model.lang.BasicCompilerSpec
ghidra.program.database.ProgramCompilerSpec

All Implemented Interfaces:
  `CompilerSpec`

public class ProgramCompilerSpec extends BasicCompilerSpec
A Program-specific version of the `CompilerSpec`. Every `Program` owns a specific `ProgramCompilerSpec`. It is based on a `CompilerSpec` returned by the `Language` assigned to the `Program`, but it may include extensions. Extensions are currently either a new form of:

- `PrototypeModel` or
- `InjectPayload`

Extensions can be installed or removed from a `ProgramDB` via the `Options` mechanism (See `SpecExtension`) using `SpecExtension.addReplaceCompilerSpecExtension(String, TaskMonitor)` or `SpecExtension.removeCompilerSpecExtension(String, TaskMonitor)`.

`ProgramCompilerSpec` allows the static evaluation models, described by the underlying `BasicCompilerSpec` and returned by `getPrototypeEvaluationModel(EvaluationModelType)`, to be overridden by Program-specific options.

`getDecompilerOutputLanguage()` queries the Program-specific language the decompiler should use as output.

`installExtensions()` is the main entry point for integrating the Program Options with the Language's base CompilerSpec and producing a complete in-memory CompilerSpec for the Program.

- ## Nested Class Summary

  ## Nested classes/interfaces inherited from interface ghidra.program.model.lang.CompilerSpec

  `CompilerSpec.EvaluationModelType`

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final DecompilerLanguage`
  `DECOMPILER_OUTPUT_DEF`
  `static final String`
  `DECOMPILER_OUTPUT_DESC`
  `static final String`
  `DECOMPILER_OUTPUT_LANGUAGE`
  `static final String`
  `DECOMPILER_PROPERTY_LIST_NAME`
  `static final String`
  `EVALUATION_MODEL_PROPERTY_NAME`

  ### Fields inherited from class ghidra.program.model.lang.BasicCompilerSpec

  `allmodels, defaultModel, evalCalledModel, evalCurrentModel, models, pcodeInject, returnAddress`

  ### Fields inherited from interface ghidra.program.model.lang.CompilerSpec

  `CALLING_CONVENTION_cdecl, CALLING_CONVENTION_default, CALLING_CONVENTION_fastcall, CALLING_CONVENTION_pascal, CALLING_CONVENTION_rustcall, CALLING_CONVENTION_stdcall, CALLING_CONVENTION_thiscall, CALLING_CONVENTION_unknown, CALLING_CONVENTION_vectorcall`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `static void`
  `enableJavaLanguageDecompilation(Program program)`
  Adds and enables an option to have the decompiler display java.
  `boolean`
  `equals(Object obj)`
  `DecompilerLanguage`
  `getDecompilerOutputLanguage()`
  Get the language that the decompiler produces
  `PrototypeModel`
  `getPrototypeEvaluationModel(CompilerSpec.EvaluationModelType modelType)`
  Get the evaluation model matching the given type.
  `protected void`
  `installExtensions()`
  Update this object with any program specific compiler specification extensions.
  `protected void`
  `registerProgramOptions()`
  Register program-specific compiler-spec options
  `protected void`
  `resetProgramOptions(TaskMonitor monitor)`
  Reset options to default (for this CompilerSpec) This is for setLanguage to clear out strings that might belong to the old language.

  ### Methods inherited from class ghidra.program.model.lang.BasicCompilerSpec

  `applyContextSettings, doesCDataTypeConversions, encode, findBestCallingConvention, getAddressSpace, getAllModels, getCallingConvention, getCallingConventions, getCompilerSpecDescription, getCompilerSpecID, getDataOrganization, getDefaultCallingConvention, getErrorHandler, getLanguage, getPcodeInjectLibrary, getProperty, getProperty, getPropertyAsBoolean, getPropertyAsInt, getPropertyKeys, getStackBaseSpace, getStackPointer, getStackSpace, hasProperty, isEquivalent, isGlobal, isStackRightJustified, markPrototypeAsExtension, matchConvention, modelXrefs, registerProgramInject, removeProgramMechanismPayloads, setDefaultReturnAddressIfNeeded, stackGrowsNegative`

  ### Methods inherited from class java.lang.Object

  `clone, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Field Details

  - ### DECOMPILER_PROPERTY_LIST_NAME

    public static final String DECOMPILER_PROPERTY_LIST_NAME
    See Also:
      - Constant Field Values

  - ### DECOMPILER_OUTPUT_LANGUAGE

    public static final String DECOMPILER_OUTPUT_LANGUAGE
    See Also:
      - Constant Field Values

  - ### DECOMPILER_OUTPUT_DEF

    public static final DecompilerLanguage DECOMPILER_OUTPUT_DEF

  - ### DECOMPILER_OUTPUT_DESC

    public static final String DECOMPILER_OUTPUT_DESC
    See Also:
      - Constant Field Values

  - ### EVALUATION_MODEL_PROPERTY_NAME

    public static final String EVALUATION_MODEL_PROPERTY_NAME
    See Also:
      - Constant Field Values

- ## Method Details

  - ### enableJavaLanguageDecompilation

    public static void enableJavaLanguageDecompilation(Program program)
    Adds and enables an option to have the decompiler display java.
    Parameters:
      `program` - to be enabled

  - ### getDecompilerOutputLanguage

    public DecompilerLanguage getDecompilerOutputLanguage()
    Description copied from interface: `CompilerSpec`
    Get the language that the decompiler produces
    Specified by:
      `getDecompilerOutputLanguage` in interface `CompilerSpec`
    Overrides:
      `getDecompilerOutputLanguage` in class `BasicCompilerSpec`
    Returns:
      an enum specifying the language

  - ### installExtensions

    protected void installExtensions()
    Update this object with any program specific compiler specification extensions.

  - ### getPrototypeEvaluationModel

    public PrototypeModel getPrototypeEvaluationModel(CompilerSpec.EvaluationModelType modelType)
    Description copied from interface: `CompilerSpec`
    Get the evaluation model matching the given type. If analysis needs to apply a PrototypeModel to a function but a specific model is not known, then this method can be used to select a putative PrototypeModel based on the analysis use-case: - EVAL_CURRENT indicates the model to use for the "current function" being analyzed - EVAL_CALLED indicates the model to use for a function called by the current function
    Specified by:
      `getPrototypeEvaluationModel` in interface `CompilerSpec`
    Overrides:
      `getPrototypeEvaluationModel` in class `BasicCompilerSpec`
    Parameters:
      `modelType` - is the type of evaluation model
    Returns:
      prototype evaluation model

  - ### registerProgramOptions

    protected void registerProgramOptions()
    Register program-specific compiler-spec options

  - ### resetProgramOptions

    protected void resetProgramOptions(TaskMonitor monitor) throws CancelledException
    Reset options to default (for this CompilerSpec) This is for setLanguage to clear out strings that might belong to the old language.
    Parameters:
      `monitor` - is the monitor for checking cancellation
    Throws:
      `CancelledException` - if operation is cancelled externally

  - ### equals

    public boolean equals(Object obj)
    Overrides:
      `equals` in class `Object`