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);