[Oberon] Dynamic linker/loader in EO

Andreas Pirklbauer andreas_pirklbauer at yahoo.com
Sun Jun 14 04:26:57 CEST 2020

Hi Hellwig,

    > […] 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.

    > Thanks,
    > Hellwig


More information about the Oberon mailing list