On Sat 07 Mar 2020 at 01:59:03 +0100, Johnny Billquist wrote: > In the end, that is a different thing. Absolute addressing is not what Bob > was thinking about here... > > Here is what MACRO-11 does: > > 1 000000 .ASECT > 2 001000 .=1000 > 3 001234 X=1234 > 4 > 5 001000 005067 000230 CLR X > 6 > > Note that the addressing is still relative. But the actual offset required > can be computed by MACRO-11 at compile time.
This is the output of dumpobj for that code. It looks like indeed there is an unneeded relocation record in there: GSD: GLOBAL X =1234 DEF ABS flags=110 MODNAME TEST =0 flags=0 PSECT =0 CON RW REL LCL I flags=40 PSECT . ABS.=1004 OVR RW ABS GBL I flags=104 XFER . ABS.=1 flags=10 ENDGSD RLD Location counter definition . ABS.+1000 TEXT ADDR=1000 LEN=4 001000: 005067 001234 7... RLD Internal displaced 1002=1234 ENDMOD It looks like the 2nd RLD record is generated by the code text_displaced_word() in object.c. That in turn must be called from this code in assemble_aux.c, since there are no other callers to store_displaced_word(): void mode_extension( ... if (value->type == EX_LIT) { if (mode->rel) /* PC-relative? */ store_displaced_word(str, tr, 2, value->data.lit); else store_word(str, tr, 2, value->data.lit); /* Just a known value. */ My guess is that this could become something like if (value->type == EX_LIT) { if (mode->rel) { /* PC-relative? */ if (current_pc->section->flags & PSECT_REL) { store_displaced_word(str, tr, 2, value->data.lit); } else { /* I can compute this myself. */ store_word(str, tr, 2, value->data.lit - DOT - 2); } } else { store_word(str, tr, 2, value->data.lit); /* Just a known value. */ } It seems like this case didn't come up in any previous tests; the regression tests show no change at all. (I have tested somewhat strictly by hand that various RSX-Kermit-11 source files generated the same object files as on RSX and that the listings, including macro expansion, didn't have any unexplained differences). Any interesting test cases I can use with this, so see if it is correct this way? 1 .TITLE TEST RELOCATABLE REFERENCES 2 000000 .ASECT 3 001000 .=1000 4 001234 X == 1234 5 001000 005067 000230 CLR X . =****** X =001234 G . ABS. 001004 000 (RW,I,GBL,ABS,OVR,NOSAV) > Johnny -Olaf. -- Olaf 'Rhialto' Seibert -- rhialto at falu dot nl ___ Anyone who is capable of getting themselves made President should on \X/ no account be allowed to do the job. --Douglas Adams, "THGTTG"
signature.asc
Description: PGP signature
_______________________________________________ Simh mailing list Simh@trailing-edge.com http://mailman.trailing-edge.com/mailman/listinfo/simh