Literal.xcc

Author: Stefan M. Freudenberger (stefan.freudenberger@st.com)

Copyright 2007 STMicroelectronics

This program is free software; you can redistribute it and/or modify it under the terms of either (at your option): the GNU General Public License (GPL) version 2; the GNU Lesser General Public License (LGPL) version 2.1; any later version of these licences as published by the Free Software Foundation.

LiteralType— Enumerates the Literal types.
typedef enum {
  LiteralType_Absolute,         // Absolute literal: HANDLE is NULL
  LiteralType_Symbol,           // Symbol literal: SYMBOL is the Symbol
  LiteralType_Label,            // Label literal: LABEL is the Label
  LiteralType__
} enum_LiteralType;
typedef uint8_t LiteralType;
#define LiteralType_isAbsolute(type)    ((type) == LiteralType_Absolute)
#define LiteralType_isSymbol(type)      ((type) == LiteralType_Symbol)
#define LiteralType_isLabel(type)       ((type) == LiteralType_Label)
LiteralUnion_— Union for the variant part of Literal.
union LiteralUnion_ {
  void *HANDLE;                 // Client handle.
  Symbol SYMBOL;                // Symbol of this Literal.
  Label LABEL;                  // Label of this Literal.
};
typedef union LiteralUnion_ LiteralUnion_, *LiteralUnion;
Literal— Implements a Literal.
struct Literal_ {
  //@args       LiteralType type, void *handle,
  //@args       ImmediateValue value, ImmediateValue offset,
  //@args       Relocation relocation, NativeType nativeType
  ImmediateValue VALUE;         // The resolved value of this literal.
  ImmediateValue OFFSET;        // This literal's Symbol or Label offset.
  LiteralUnion_ UNION_;         // This literal's Symbol or Label.
  //@access HANDLE      (Literal_UNION_(this).HANDLE)
  //@mutate HANDLE      (&Literal_UNION_(this).HANDLE)
  //@access isRelocatable       (Literal_HANDLE(this) != NULL)
  //@access SYMBOL      (Literal_UNION_(this).SYMBOL)
  //@mutate SYMBOL      (&Literal_UNION_(this).SYMBOL)
  //@access LABEL       (Literal_UNION_(this).LABEL)
  //@mutate LABEL       (&Literal_UNION_(this).LABEL)
  LiteralType TYPE;
  Relocation RELOCATION;
  NativeType NATIVETYPE;
  //@access isAbsolute  LiteralType_isAbsolute(Literal_type(this))
  //@access isSymbol    LiteralType_isSymbol(Literal_type(this))
  //@access isLabel     LiteralType_isLabel(Literal_type(this))
};
Literal_type— This Literal type.
static inline LiteralType
Literal_type(Literal this)
{
  return Literal_TYPE(this);
}
Literal_value— This Literal value.
static inline ImmediateValue
Literal_value(Literal this)
{
  return Literal_VALUE(this);
}
Literal_setValue— Set this Literal value.
static inline void
Literal_setValue(Literal this, ImmediateValue value)
{
  *Literal__VALUE(this) = value;
}
Literal_offset— This Literal offset.
static inline ImmediateValue
Literal_offset(Literal this)
{
  Except_REQUIRE(Literal_isSymbol(this) || Literal_isLabel(this));
  return Literal_OFFSET(this);
}
Literal_handle— This Literal handle.
static inline void*
Literal_handle(Literal this)
{
  Except_REQUIRE(Literal_isSymbol(this) || Literal_isLabel(this));
  return Literal_HANDLE(this);
}
Literal_symbol— This Literal symbol.
static inline Symbol
Literal_symbol(Literal this)
{
  Except_REQUIRE(Literal_isSymbol(this));
  return Literal_SYMBOL(this);
}
Literal_label— This Literal label.
static inline Label
Literal_label(Literal this)
{
  Except_REQUIRE(Literal_isLabel(this));
  return Literal_LABEL(this);
}
Literal_relocation— This Literal Relocation.
static inline Relocation
Literal_relocation(Literal this)
{
  return Literal_RELOCATION(this);
}
Literal_nativeType— This Literal NativeType.
static inline NativeType
Literal_nativeType(Literal this)
{
  return Literal_NATIVETYPE(this);
}

Literal relocation fixup type.

typedef void (*LiteralRelocationFixup)(Literal literal,
                                       PlatformUInt nativePC,
                                       Relocation relocation,
                                       void* user_data,
                                       void* stream);
LiteralPool— Manage a pool of Literal(s).