mirror of
https://github.com/revng/revng
synced 2026-06-21 14:07:57 +00:00
d10178483d
Unlike the previous iteration of `MetaAddress`, which tried to stuff all the parts of `MetaAddress` within the existing `PC` CSV, this implementation adds a set of new CSVs (or marks some existing ones as) to represent the four portions of the current PC's `MetaAddress`. * Introduce `ProgramCounterHandler`: a class responsible to maintain the PC-related CSVs. This class is also used to manipulate the new dispatcher. * `AdvancedValueInfo`: update for new MetaAddress. * External jump handler: do not clobber registers. When introducing support for dynamic binaries, we didn't realize that in x86-64 we were clobbering `r11`. To avoid this, we have to jump to an address stored in memory. However, due to the new `MetaAddress`, obtaining a *jumpable* address from the PC-related CSVs might require some computations (and it does in ARM). Therefore, we introduce a new global variable, `jumpablepc`, whose only role is to contain the jumpable version of the program counter and then be the target of the memory-indirect jump instruction. * Labels care only about absolute addresses. * CSAA: mark call site, even if no accesses.