[Oberon] Dynamic linker/loader in EO
andreas_pirklbauer at yahoo.com
Sun Jun 14 04:26:57 CEST 2020
> […] In the part where the data fixups are done
> ("fixup of MOV/LDR/STR/ADD”), there is a
> "SYSTEM.PUT(adr, MOV+U+B + pno*C24 +
> offset DIV C16)" with a comment "mark as fixed up”.
> I guess that refers to the "+B" part of the instruction,
> which is in an otherwise unused position of its
> representation (the "b" register).
Yes, it’s the “+B” part, which acts as a marker. This is possible
only because the “b” operand is unused in MOV' instructions.
> 1. Where is this information needed?
Currently only in ORL.Relocate, where it is used to detect whether a
MOV’ instruction has previously been fixed up. But there are other uses,
for example to relocate pre-linked boot loaders BootLoad.bin or to run
multiple copies of the Oberon system on the same computer.
> 2. What do you recommend to do if some processor
> does not have any bits to spare in the equivalent
> instruction (or does reject instructions where
> this part isn't zero)?
This is for example the case if you want to implement Oberon on RISC-V.
There, a different approach must be chosen, e.g.to store the fixup locations
on file and/or in memory, rather than embedding the “B” marker in the fixed
up instructions themselves. But this is suboptimal, as the list can get long.
More information about the Oberon