You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- What is Mapping Symbol?
This proposal add a new special symbol class, called mapping symbol,
those symbol are used for assist disassembler to having better knowledge
of binary, it could be used for distinguish the code and data region.
Here is two kind of mapping symbol: data and instruction, and both
having an optional extra part in the symbol name for carry extra information.
Symbol Name | Meaning
:---------- | :-----------------------------------------------------------
$d | Start of a sequence of data.
$x | Start of a sequence of instructions.
$x<ISA> | Start of a sequence of instructions with <ISA> extension.
Mapping symbol are also used by other ISA for same purpose, like ARM, AArch64,
C-sky and nds32.
- Data Mapping Symbol
Data mapping symbol could having an extra length information to present
the orignal data layout.
e.g.
```
.foo:
.word 10
.word 20
```
Without mapping symbol:
```
$ riscv64-unknown-elf-gcc foo.s -c
$ riscv64-unknown-elf-gcc foo.o -c
Disassembly of section .text:
0000000000000000 <.foo>:
0: 000a c.slli zero,0x2
2: 0000 unimp
4: 0014 0x14
...
```
With mapping symbol:
```
Disassembly of section .text:
00000000 <.foo>: # $d insert here.
0: 0000000a .word 0x0000000a
4: 00000014 .word 0x00000014
```
- Instruction Mapping Symbol
Instruction mapping symbol with extra ISA info could also used for
ifunc, e.g. library are built with `rv64gc`, but few functions
like memcpy provide two version, one built with `rv64gc`, and one built with
`rv64gcv`, and select by ifunc mechanism at run-time; however the arch
attribute is recording for minimal execution environment requirement, so the ISA
information from arch attribute isn't enough for disassembler to disassemble the
`rv64gcv` version correctly.
0 commit comments