Package ghidra.program.model.lang

# Interface ParamList

All Known Implementing Classes:
  `ParamListRegisterOut`, `ParamListStandard`, `ParamListStandardOut`

public interface ParamList
A group of ParamEntry that form a complete set for passing parameters (in one direction)

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Interface
  Description
  `static class`
  `ParamList.WithSlotRec`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `assignMap(PrototypePieces proto, DataTypeManager dtManage, ArrayList<ParameterPieces> res, boolean addAutoParams)`
  Given a list of datatypes, calculate the storage locations used for passing those data-types
  `void`
  `encode(Encoder encoder, boolean isInput)`
  `VariableStorage[]`
  `getPotentialRegisterStorage(Program prog)`
  Get a list of all parameter storage locations consisting of a single register
  `AddressSpace`
  `getSpacebase()`
  Get the address space associated with any stack based parameters in this list.
  `int`
  `getStackParameterAlignment()`
  Return the amount of alignment used for parameters passed on the stack, or -1 if there are no stack params
  `Long`
  `getStackParameterOffset()`
  Find the boundary offset that separates parameters on the stack from other local variables This is usually the address of the first stack parameter, but if the stack grows positive, this is the first address AFTER the parameters on the stack
  `boolean`
  `isEquivalent(ParamList obj)`
  Determine if this ParmList is equivalent to another instance
  `boolean`
  `isThisBeforeRetPointer()`
  Return true if the this pointer occurs before an indirect return pointer The automatic parameters: this parameter and the hidden return value pointer both tend to be allocated from the initial general purpose registers reserved for parameter passing.
  `boolean`
  `possibleParamWithSlot(Address loc, int size, ParamList.WithSlotRec res)`
  Determine if a particular address range is a possible parameter, and if so what slot(s) it occupies
  `void`
  `restoreXml(XmlPullParser parser, CompilerSpec cspec)`

- ## Method Details

  - ### assignMap

    void assignMap(PrototypePieces proto, DataTypeManager dtManage, ArrayList<ParameterPieces> res, boolean addAutoParams)
    Given a list of datatypes, calculate the storage locations used for passing those data-types
    Parameters:
      `proto` - is the list of datatypes
      `dtManage` - is the data-type manager
      `res` - is the vector for holding the storage locations and other parameter properties
      `addAutoParams` - if true add/process auto-parameters

  - ### encode

    void encode(Encoder encoder, boolean isInput) throws IOException
    Throws:
      `IOException`

  - ### restoreXml

    void restoreXml(XmlPullParser parser, CompilerSpec cspec) throws XmlParseException
    Throws:
      `XmlParseException`

  - ### getPotentialRegisterStorage

    VariableStorage[] getPotentialRegisterStorage(Program prog)
    Get a list of all parameter storage locations consisting of a single register
    Parameters:
      `prog` - is the controlling program
    Returns:
      an array of VariableStorage

  - ### getStackParameterAlignment

    int getStackParameterAlignment()
    Return the amount of alignment used for parameters passed on the stack, or -1 if there are no stack params
    Returns:
      the alignment

  - ### getStackParameterOffset

    Long getStackParameterOffset()
    Find the boundary offset that separates parameters on the stack from other local variables This is usually the address of the first stack parameter, but if the stack grows positive, this is the first address AFTER the parameters on the stack
    Returns:
      the boundary offset

  - ### possibleParamWithSlot

    boolean possibleParamWithSlot(Address loc, int size, ParamList.WithSlotRec res)
    Determine if a particular address range is a possible parameter, and if so what slot(s) it occupies
    Parameters:
      `loc` - is the starting address of the range
      `size` - is the size of the range in bytes
      `res` - holds the resulting slot and slotsize
    Returns:
      true if the range is a possible parameter

  - ### getSpacebase

    AddressSpace getSpacebase()
    Get the address space associated with any stack based parameters in this list.
    Returns:
      the stack address space, if this models parameters passed on the stack, null otherwise

  - ### isThisBeforeRetPointer

    boolean isThisBeforeRetPointer()
    Return true if the this pointer occurs before an indirect return pointer The automatic parameters: this parameter and the hidden return value pointer both tend to be allocated from the initial general purpose registers reserved for parameter passing. This method returns true if the this parameter is allocated first.
    Returns:
      false if the hidden return value pointer is allocated first

  - ### isEquivalent

    boolean isEquivalent(ParamList obj)
    Determine if this ParmList is equivalent to another instance
    Parameters:
      `obj` - is the other instance
    Returns:
      true if they are equivalent