Class SleighLanguage

  • All Implemented Interfaces:
    Language

    public class SleighLanguage
    extends java.lang.Object
    implements Language
    • Field Detail

      • SLA_FORMAT_VERSION

        public static final int SLA_FORMAT_VERSION
        SLA_FORMAT_VERSION will be incremented whenever the format of the .sla files change.

        Version 3: January 2021: added source file information for each constructor.
        Version 2: April 2019: Changed numbering of Overlay spaces.
        Version 1: Initial version.

        See Also:
        Constant Field Values
    • Method Detail

      • getUniqueBase

        public long getUniqueBase()
        Returns the unique base offset from which additional temporary variables may be created.
        Returns:
        unique base offset
      • getUniqueAllocationMask

        public int getUniqueAllocationMask()
      • numSections

        public int numSections()
        Returns:
        (maximum) number of named p-code sections
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • applyContextSettings

        public void applyContextSettings​(DefaultProgramContext programContext)
        Description copied from interface: Language
        Apply context settings to the ProgramContext as specified by the configuration
        Specified by:
        applyContextSettings in interface Language
        Parameters:
        programContext - is the default program context
      • getAddressFactory

        public AddressFactory getAddressFactory()
        Description copied from interface: Language
        Get the AddressFactory for this language. The returned Address factory will allow addresses associated with physical, constant and unique spaces to be instantiated. NOTE! this factory does not know about compiler or program specified spaces. Spaces such as stack and overlay spaces are not defined by the language - if these are needed, Program.getAddressFactory() should be used instead.
        Specified by:
        getAddressFactory in interface Language
        Returns:
        the AddressFactory for this language.
        See Also:
        Program.getAddressFactory()
      • getContextBaseRegister

        public Register getContextBaseRegister()
        Description copied from interface: Language
        Returns processor context base register or null if one has not been defined by the language.
        Specified by:
        getContextBaseRegister in interface Language
        Returns:
        base context register or Register.NO_CONTEXT if not defined
      • getContextRegisters

        public java.util.List<Register> getContextRegisters()
        Description copied from interface: Language
        Get an unsorted unmodifiable list of processor context registers that this language defines (includes context base register and its context field registers).
        Specified by:
        getContextRegisters in interface Language
        Returns:
        unmodifiable list of processor registers.
      • getProgramCounter

        public Register getProgramCounter()
        Description copied from interface: Language
        Get the default program counter register for this language if there is one.
        Specified by:
        getProgramCounter in interface Language
        Returns:
        default program counter register.
      • getDefaultSymbols

        public java.util.List<AddressLabelInfo> getDefaultSymbols()
        Description copied from interface: Language
        Returns the default symbols for this language. This list does not contain registers.
        Specified by:
        getDefaultSymbols in interface Language
        Returns:
        the default symbols for this language
      • getInstructionAlignment

        public int getInstructionAlignment()
        Description copied from interface: Language
        Get instruction alignment in terms of bytes.
        Specified by:
        getInstructionAlignment in interface Language
        Returns:
        instruction alignment
      • getMinorVersion

        public int getMinorVersion()
        Description copied from interface: Language
        Returns the minor version for this language. Returning a minor version number different than before could cause the program to try and "update" itself. Those languages which do not support this feature may always return a constant value of 0.
        Specified by:
        getMinorVersion in interface Language
        Returns:
        the language minor version number
      • getLanguageID

        public LanguageID getLanguageID()
        Description copied from interface: Language
        Returns the LanguageID of this language, which is used as a primary key to find the language when Ghidra loads it.
        Specified by:
        getLanguageID in interface Language
        Returns:
        the LanguageID of this language
      • getUserDefinedOpName

        public java.lang.String getUserDefinedOpName​(int index)
        Description copied from interface: Language
        Get the user define name for a given index. Certain pcode has operations defined only by name that when the pcode returns, only the index is known. Note: only works for Pcode based languages
        Specified by:
        getUserDefinedOpName in interface Language
        Parameters:
        index - user defined pcodeop index
        Returns:
        pcodeop name or null if not defined
      • getNumberOfUserDefinedOpNames

        public int getNumberOfUserDefinedOpNames()
        Description copied from interface: Language
        Get the total number of user defined pcode names. Note: only works for Pcode based languages
        Specified by:
        getNumberOfUserDefinedOpNames in interface Language
        Returns:
        number of user defined pcodeops
      • getProcessor

        public Processor getProcessor()
        Description copied from interface: Language
        Returns the processor name on which this language is based. For example, 30386, Pentium, 68010, etc.
        Specified by:
        getProcessor in interface Language
        Returns:
        the processor name
      • getRegister

        public Register getRegister​(AddressSpace addrspc,
                                    long offset,
                                    int size)
        Description copied from interface: Language
        Get a register given the address space it is in, its offset in the space and its size.
        Specified by:
        getRegister in interface Language
        Parameters:
        addrspc - address space the register is in
        offset - offset of the register in the space
        size - size of the register in bytes
        Returns:
        the register
      • getRegister

        public Register getRegister​(java.lang.String name)
        Description copied from interface: Language
        Get a register given the name of the register
        Specified by:
        getRegister in interface Language
        Parameters:
        name - Register name
        Returns:
        the register
      • getRegister

        public Register getRegister​(Address addr,
                                    int size)
        Description copied from interface: Language
        Get a register given it's underlying address location and size.
        Specified by:
        getRegister in interface Language
        Parameters:
        addr - location of the register in its address space
        size - the size of the register (in bytes). A value of 0 will return the largest register at the specified addr
        Returns:
        the register
      • getRegisters

        public Register[] getRegisters​(Address address)
        Description copied from interface: Language
        Returns all the registers (each different size is a different register) for an address.
        Specified by:
        getRegisters in interface Language
        Parameters:
        address - the register address for which to return all registers.
        Returns:
        all the registers (each different size is a different register) for an address.
      • getRegisters

        public java.util.List<Register> getRegisters()
        Description copied from interface: Language
        Get an unsorted unmodifiable list of Register objects that this language defines (including context registers).
        Specified by:
        getRegisters in interface Language
        Returns:
        unmodifiable list of processor registers.
      • getRegisterNames

        public java.util.List<java.lang.String> getRegisterNames()
        Description copied from interface: Language
        Get an alphabetical sorted unmodifiable list of original register names (including context registers). Names correspond to orignal register name and not aliases which may be defined.
        Specified by:
        getRegisterNames in interface Language
        Returns:
        alphabetical sorted unmodifiable list of original register names.
      • getSegmentedSpace

        public java.lang.String getSegmentedSpace()
        Description copied from interface: Language
        Returns the name of the segmented space for this language, or the empty string if the memory model for this language is not segmented.
        Specified by:
        getSegmentedSpace in interface Language
        Returns:
        the name of the segmented space or ""
      • getVersion

        public int getVersion()
        Description copied from interface: Language
        Returns the major version for this language. Returning a version number different than before could cause the program to try and "update" itself. Those languages which do not support this feature may always return a constant value of 1.
        Specified by:
        getVersion in interface Language
        Returns:
        the language version number
      • getVolatileAddresses

        public AddressSetView getVolatileAddresses()
        Description copied from interface: Language
        Returns an AddressSetView of the volatile addresses for this language
        Specified by:
        getVolatileAddresses in interface Language
        Returns:
        an AddressSetView of the volatile addresses for this language
      • isBigEndian

        public boolean isBigEndian()
        Description copied from interface: Language
        get the Endian type for this language. (If a language supports both, then this returns an initial or default value.)
        Specified by:
        isBigEndian in interface Language
        Returns:
        true for BigEndian, false for LittleEndian.
      • isVolatile

        public boolean isVolatile​(Address addr)
        Description copied from interface: Language
        Returns true if the language has defined the specified location as volatile.
        Specified by:
        isVolatile in interface Language
        Parameters:
        addr - location address
        Returns:
        true if specified address is within a volatile range
      • parse

        public InstructionPrototype parse​(MemBuffer buf,
                                          ProcessorContext context,
                                          boolean inDelaySlot)
                                   throws InsufficientBytesException,
                                          UnknownInstructionException
        Description copied from interface: Language
        Get the InstructionPrototype that matches the bytes presented by the MemBuffer object.
        Specified by:
        parse in interface Language
        Parameters:
        buf - the MemBuffer that presents the bytes in Memory at some address as if they were an array of bytes starting at index 0.
        context - the processor context at the address to be disassembled
        inDelaySlot - true if this instruction should be parsed as if it were in a delay slot
        Returns:
        the InstructionPrototype that matches the bytes in buf.
        Throws:
        InsufficientBytesException - thrown if there are not enough bytes in memory to satisfy a legal instruction.
        UnknownInstructionException - thrown if the byte pattern does not match any legal instruction.
      • getRootDecisionNode

        public DecisionNode getRootDecisionNode()
      • getSourceFileIndexer

        public SourceFileIndexer getSourceFileIndexer()
        Returns the source file indexer
        Returns:
        indexer
      • reloadLanguage

        public void reloadLanguage​(TaskMonitor monitor)
                            throws java.io.IOException
        Description copied from interface: Language
        Refreshes the definition of this language if possible. Use of this method is intended for development purpose only since stale references to prior language resources (e.g., registers) may persist.
        Specified by:
        reloadLanguage in interface Language
        Parameters:
        monitor - monitor for progress back to the user
        Throws:
        java.io.IOException - if error occurs while reloading language spec file(s)
      • supportsPcode

        public boolean supportsPcode()
        Description copied from interface: Language
        Return true if the instructions in this language support Pcode.
        Specified by:
        supportsPcode in interface Language
        Returns:
        true if language supports the use of pcode
      • getDefaultSpace

        public AddressSpace getDefaultSpace()
        Description copied from interface: Language
        Get the default memory/code space.
        Specified by:
        getDefaultSpace in interface Language
        Returns:
        default address space
      • getDefaultDataSpace

        public AddressSpace getDefaultDataSpace()
        Description copied from interface: Language
        Get the preferred data space used by loaders for data sections.
        Specified by:
        getDefaultDataSpace in interface Language
        Returns:
        default data address space
      • getDefaultPointerWordSize

        @Deprecated
        public int getDefaultPointerWordSize()
        Deprecated.
        Will be removed once we have better way to attach address spaces to pointer data-types
        Returns:
        the default wordsize to use when analyzing pointer offsets
      • getCompatibleCompilerSpecDescriptions

        public java.util.List<CompilerSpecDescription> getCompatibleCompilerSpecDescriptions()
        Description copied from interface: Language
        Returns a list of all compatible compiler spec descriptions. The first item in the list is the default.
        Specified by:
        getCompatibleCompilerSpecDescriptions in interface Language
        Returns:
        list of all compatible compiler specifications descriptions
      • getLanguageDescription

        public LanguageDescription getLanguageDescription()
        Description copied from interface: Language
        Returns the LanguageDescription of this language, which contains useful information about the characteristics of the language.
        Specified by:
        getLanguageDescription in interface Language
        Returns:
        the LanguageDescription of this language
      • getDefaultCompilerSpec

        public CompilerSpec getDefaultCompilerSpec()
        Description copied from interface: Language
        Returns the default compiler spec for this language, which is used when a loader cannot determine the compiler spec or for upgrades when a program had no compiler spec registered (seriously old program, like Ghidra 4.1 or earlier). NOTE: this has NOTHING to do with the compiler spec registered for a program. Use Program.getCompilerSpec() for that!
        Specified by:
        getDefaultCompilerSpec in interface Language
        Returns:
        the default compiler spec for this language
      • getProperty

        public java.lang.String getProperty​(java.lang.String key)
        Description copied from interface: Language
        Gets a property defined for this language, or null if that property isn't defined.
        Specified by:
        getProperty in interface Language
        Parameters:
        key - the property key
        Returns:
        the property value, or null if not defined
      • getPropertyKeys

        public java.util.Set<java.lang.String> getPropertyKeys()
        Description copied from interface: Language
        Returns a read-only set view of the property keys defined on this language.
        Specified by:
        getPropertyKeys in interface Language
        Returns:
        read-only set of property keys
      • getProperty

        public java.lang.String getProperty​(java.lang.String key,
                                            java.lang.String defaultString)
        Description copied from interface: Language
        Gets the value of a property as a String, returning defaultString if undefined.
        Specified by:
        getProperty in interface Language
        Parameters:
        key - the property key
        defaultString - the default value to return if property is undefined
        Returns:
        the property value as a String, or the default value if undefined
      • getPropertyAsBoolean

        public boolean getPropertyAsBoolean​(java.lang.String key,
                                            boolean defaultBoolean)
        Description copied from interface: Language
        Gets the value of a property as a boolean, returning defaultBoolean if undefined.
        Specified by:
        getPropertyAsBoolean in interface Language
        Parameters:
        key - the property key
        defaultBoolean - the default value to return if property is undefined
        Returns:
        the property value as a boolean, or the default value if undefined
      • getPropertyAsInt

        public int getPropertyAsInt​(java.lang.String key,
                                    int defaultInt)
        Description copied from interface: Language
        Gets the value of a property as an int, returning defaultInt if undefined.
        Specified by:
        getPropertyAsInt in interface Language
        Parameters:
        key - the property key
        defaultInt - the default value to return if property is undefined
        Returns:
        the property value as an int, or the default value if undefined
      • hasProperty

        public boolean hasProperty​(java.lang.String key)
        Description copied from interface: Language
        Returns whether this lanugage has a property defined.
        Specified by:
        hasProperty in interface Language
        Parameters:
        key - the property key
        Returns:
        if the property is defined
      • getManualEntry

        public ManualEntry getManualEntry​(java.lang.String instruction)
        Description copied from interface: Language
        Get the ManualEntry for the given instruction mnemonic.
        Specified by:
        getManualEntry in interface Language
        Parameters:
        instruction - the instruction mnemonic
        Returns:
        the ManualEntry or null. A default manual entry will be returned if an instruction can not be found within the index and a manual exists.
      • getManualInstructionMnemonicKeys

        public java.util.Set<java.lang.String> getManualInstructionMnemonicKeys()
        Description copied from interface: Language
        Returns a read-only set view of the instruction mnemonic keys defined on this language.
        Specified by:
        getManualInstructionMnemonicKeys in interface Language
        Returns:
        read-only set of instruction mnemonic keys
      • loadIndex

        public void loadIndex​(ResourceFile processorFile)
                       throws java.io.IOException
        Throws:
        java.io.IOException
      • getManualException

        public java.lang.Exception getManualException()
        Description copied from interface: Language
        Returns the exception generated trying to load the manual, or null if it succeeded.
        Specified by:
        getManualException in interface Language
        Returns:
        the exception generated trying to load the manual, or null if it succeeded
      • hasManual

        public boolean hasManual()
        Description copied from interface: Language
        Returns whether the language has a valid manual defined.
        Specified by:
        hasManual in interface Language
        Returns:
        if the language has a manual
      • buildTranslatorTag

        public java.lang.String buildTranslatorTag​(AddressFactory factory,
                                                   long uniqueOffset,
                                                   SymbolTable optionalSymTab)
        Generates a limited translator XML tag for the specified address factory and optional register set.
        Parameters:
        factory - address factory
        uniqueOffset - the initial offset within the unique address space to start assigning temporary registers
        optionalSymTab - optional symbol table to be passed (may be null to omit). Only non-context registers and user-defined pcodeop's are included.
        Returns:
        the entire XML tag as a String
      • getSortedVectorRegisters

        public java.util.List<Register> getSortedVectorRegisters()
        Description copied from interface: Language
        Returns an unmodifiable list of vector registers, sorted first by size and then by name.
        Specified by:
        getSortedVectorRegisters in interface Language
        Returns:
        unmodifiable list of vector registers.