diff --git a/riscv-elf.adoc b/riscv-elf.adoc index eb5c3f29..9e341acb 100644 --- a/riscv-elf.adoc +++ b/riscv-elf.adoc @@ -1185,9 +1185,12 @@ A number of symbols, named mapping symbols, describe the boundaries. [%autowidth] |=== | Symbol Name | Meaning -| $d | Start of a sequence of data. -| $x | Start of a sequence of instructions. -| $x | Start of a sequence of instructions with extension. +| $d .2+| Start of a sequence of data. +| $d. +| $x .2+| Start of a sequence of instructions. +| $x. +| $x .2+| Start of a sequence of instructions with extension. +| $x. |=== The mapping symbol should set the type to `STT_NOTYPE`, binding to `STB_LOCAL`, @@ -1206,6 +1209,9 @@ from ELF attribute. Format and rule of the optional ISA string are same as `Tag_RISCV_arch`, must having explicit version, more detailed rule please refer to <>. +The mapping symbol can be followed by an optional uniquifier, which is prefixed +with a dot (`.`). + NOTE: The use case for mapping symbol for instruction(`$x`) with ISA information is used with ifunc, e.g. libraries are built with `rv64gc`, but few functions like memcpy provides two versions, one built with `rv64gc`, and one built with