asmjit::LabelEntry Class Reference

Label entry.

Contains the following properties:

  • Label id - This is the only thing that is set to the Label operand.
  • Label name - Optional, used mostly to create executables and libraries.
  • Label type - Type of the label, default Label::kTypeAnonymous.
  • Label parent id - Derived from many assemblers that allow to define a local label that falls under a global label. This allows to define many labels of the same name that have different parent (global) label.
  • Offset - offset of the label bound by Assembler.
  • Links - single-linked list that contains locations of code that has to be patched when the label gets bound. Every use of unbound label adds one link to _links list.
  • HVal - Hash value of label's name and optionally parentId.
  • HashNext - Hash-table implementation detail.

Public Members

- Public Attributes inherited from asmjit::ZoneHashNode

Static Public Attributes

Member Functions

Accessors
- Public Member Functions inherited from asmjit::ZoneHashNode

Member Function Documentation

uint32_t LabelEntry::id() constnoexcept

Returns label id.

void LabelEntry::_setId(uint32_t id)noexcept

Sets label id (internal, used only by CodeHolder).

uint32_t LabelEntry::type() constnoexcept

Returns label type, see Label::LabelType.

uint32_t LabelEntry::flags() constnoexcept

Returns label flags, returns 0 at the moment.

bool LabelEntry::hasParent() constnoexcept

Tests whether the label has a parent label.

uint32_t LabelEntry::parentId() constnoexcept

Returns label's parent id.

Section* LabelEntry::section() constnoexcept

Returns the section where the label was bound.

If the label was not yet bound the return value is nullptr.

bool LabelEntry::hasName() constnoexcept

Tests whether the label has name.

const char* LabelEntry::name() constnoexcept

Returns the label's name.

Note
Local labels will return their local name without their parent part, for example ".L1".

uint32_t LabelEntry::nameSize() constnoexcept

Returns size of label's name.

Note
Label name is always null terminated, so you can use strlen() to get it, however, it's also cached in LabelEntry itself, so if you want to know the size the fastest way is to call LabelEntry::nameSize().

LabelLink* LabelEntry::links() constnoexcept

Returns links associated with this label.

bool LabelEntry::isBound() constnoexcept

Tests whether the label is bound.

bool LabelEntry::isBoundTo(Section* section) constnoexcept

Tests whether the label is bound to a the given sectionId.

uint64_t LabelEntry::offset() constnoexcept

Returns the label offset (only useful if the label is bound).

uint32_t LabelEntry::hashCode() constnoexcept

Returns the hash-value of label's name and its parent label (if any).

Label hash is calculated as HASH(Name) ^ ParentId. The hash function is implemented in Support::hashString() and Support::hashRound().

Member Data Documentation

uint32_t LabelEntry::kStaticNameSizeconstexprstaticconstexpr

Initial value:
=
64 - (sizeof(ZoneHashNode) + 8 + sizeof(Section*) + sizeof(size_t) + sizeof(LabelLink*))

uint8_t LabelEntry::_type

Label type, see Label::LabelType.

uint8_t LabelEntry::_flags

Must be zero.

uint16_t LabelEntry::_reserved16

Reserved.

uint32_t LabelEntry::_parentId

Label parent id or zero.

uint64_t LabelEntry::_offset

Label offset relative to the start of the _section.

Section* LabelEntry::_section

Section where the label was bound.

LabelLink* LabelEntry::_links

Label links.

ZoneString<kStaticNameSize>LabelEntry::_name

Label name.