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: 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.
  • Field Details

  • 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