mirror of
https://github.com/PDP-10/its.git
synced 2026-01-15 08:03:19 +00:00
Don't split two-word directives across blocks.
When: - MIDAS is writing a "standard data" block to a REL file; - it wants to write a 76 (local-to-global/rename/expunge) directive, which needs two words of data; - and there's only one word of space left in the block; it wrote the first one to the current block, and the second word to the start of the next block. STINK 1/201 doesn't understand this, and treats the second word as codebits for the next block, misinterpreting the directives for that block; this results in missing symbols or junk being loaded into memory. For other two-word directives, MIDAS sets the IRCONT flag for all words except the last one, to prevent the block from being flushed until the directive is complete. Do the same for 76 directives. Also fix CNSTA, which unset IRCONT *after* its last word; this was probably harmless because it will be the first directive in a block so can't be split.
This commit is contained in:
parent
c17ee29314
commit
1bb6ced04c
@ -2998,12 +2998,14 @@ OUTDE1: TLNE FF,FLPPSS
|
||||
PLOGLO: SKIPGE CONTRL
|
||||
RET
|
||||
PUSH P,A
|
||||
TRO I,IRCONT ;Don't end block between the two words
|
||||
PUSHJ P,PBITS7
|
||||
MOVEI A,CLGLO
|
||||
PUSHJ P,PBITS
|
||||
TLO SYM,400000 ;SAY THIS IS NEW STYLE RQ,
|
||||
PUSHJ P,OUTSM0 ;PUNCH "OLD NAME" = SYMTAB IDX,
|
||||
TLC SYM,440000 ;SAY MAKE GLOBAL, OUTPUT ACTUAL NAME OF SYM.
|
||||
TRZ I,IRCONT
|
||||
PUSHJ P,OUTSM
|
||||
JRST POPAJ
|
||||
|
||||
@ -3936,8 +3938,8 @@ CNSTA: HRRZ T,PBCON
|
||||
TLO A,100000 ;RELOCATE
|
||||
PUSHJ P,$OUTPT
|
||||
HRRZ A,1(T)
|
||||
PUSHJ P,$OUTPT ;OUTPUT VALUE, FIRST LOCATION IN AREA
|
||||
TRZ I,IRCONT
|
||||
PUSHJ P,$OUTPT ;OUTPUT VALUE, FIRST LOCATION IN AREA
|
||||
CNSTDA: MOVSI A,CTDEF
|
||||
IORM A,2(T) ;CALL IT DEFINED
|
||||
CNSTD: TRNE FF,FRPSS2
|
||||
@ -6266,12 +6268,14 @@ IFN CREFSW,XCT CRFDEF
|
||||
SKIPL CONTRL ;IF RELOCATABLE ANDLOCAL SYMBOL,
|
||||
CAIL A,DEFGVR_-33.
|
||||
RET
|
||||
TRO I,IRCONT ;Don't end block between the two words
|
||||
PUSHJ P,PBITS7 ;TELL STINK TO EXPUNGE SYM.
|
||||
MOVEI A,CLGLO
|
||||
PUSHJ P,PBITS
|
||||
TLO SYM,400000 ;SAY IS NEW TYPE RQ,
|
||||
PUSHJ P,OUTSM0
|
||||
MOVSI A,400000 ;NEW NAME NULL => DELETE.
|
||||
TRZ I,IRCONT
|
||||
JRST $OUTPT
|
||||
|
||||
;EQUAL SYM1,SYM2 ;DEFINE SYM1 SAME AS SYM2.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user