Trailing-Edge
-
PDP-10 Archives
-
bb-bt99e-bb
-
lnkov1.c08
There is 1 other file named lnkov1.c08 in the archive. Click here to see a list.
REP 2/1 ;08C1
SUBTTL D.M.NIXON/DMN/JLd/RKH/JBC/JNG/MCHC/DZN/PY/PAH 14-Feb-83
WIT
SUBTTL D.M.NIXON/DMN/JLd/RKH/JBC/JNG/MCHC/DZN/PY/PAH 8-Nov-83
REP 37/1 ;08C2
DECEVR==2033 ;DEC EDIT VERSION
WIT
DECEVR==2053 ;DEC EDIT VERSION
INS 61/3 ;08C3
;2053 Argcheck the BG area, and build deferred character fixups.
INS 28/57 ;08C4
;**;[2053] Insert after TRYBG4+26 Lines PY 8-Nov-83
SUBTTL Argument check the BG area [2053]
TYP.BG::SKIPL BG.SCH ;[2053] Any bound globals we can look at?
POPJ P, ;[2053] No, return
SPUSH <NAMLOC,HSPACE,HT.PRM,HT.PTR,BG.SCH> ;[2053] GS Parameters
SETOM ARGOVL ;[2053] Remember that BG area is being checked
.JDDT LNKOV1,TYP.BG,<<CAMN W2,$SYMBOL##>> ;[2053]
SETZM HSPACE ;[2053] Prevent rehashing
HRRZ T1,BRNLEN ;[2053] No. of bound global tables
MOVEM T1,BG.SCH ;[2053] Safe place to put it
PUSH P,W3 ;[2053] Save the arg block pointer
TYPBG1: ;[2053] Start at link 0 so typout will
;[2053] be in correct order
HRRZ T1,BRNLEN ;[2053] Total
SUB T1,BG.SCH ;[2053] Minus whats left gives index
ADD T1,BRNTBL ;[2053] Index into table
SKIPN T2,(T1) ;[2053] Get LINK #,,ADDRESS
JRST TYPBG2 ;[2053] Link 0 is always in core
TRNN T2,-1 ;[2053] On DSK?
PUSHJ P,E$$LNM## ;[2053] Must be in memory
TYPBG2: ADD T2,BG.LB ;[2053] Add in base
HRRZM T2,NAMLOC ;[2053] Where it is
MOVE T1,(T2) ;[2053] First word is special
HLRZM T1,HT.PRM ;[2053] Contains hash size
ADDI T2,(T1) ;[2053] Add offset for hash table
HRRM T2,HT.PTR ;[2053]
MOVE W3,0(P) ;[2053] Get the callee argblock pointer
PUSHJ P,SYTYP## ;[2053] Typecheck this table
SOSL T1,BG.SCH ;[2053] More to look at?
JRST TYPBG1 ;[2053] Yes
SETZM ARGOVL ;[2053] Back to typechecking GS area
POP P,W3 ;[2053] Recover the arg block pointer
SPOP <BG.SCH,HT.PTR,HT.PRM,HSPACE,NAMLOC> ;[2053] Put things back
POPJ P, ;[2053] Return to process current overlay
;[2053] Here to build a deferred fixup block. The block is two words
;[2053] long, and looks like:
;
; -----------------------------
; ! Pointer to next !
; -----------------------------
; !overlay index,,user address!
; -----------------------------
;
;[2053] These blocks are stored in ascending order by overlay index
;[2053] and address. Note that the address is 18 bits because this
;[2053] only occur in the overlay case, and that is restricted to
;[2053] section zero. On entry, P3 contains the user address.
COEOVL::HRRZ T2,BRNLEN ;[2053] Total
SUB T2,BG.SCH ;[2053] Minus whats left gives index
JUMPN T2,COEOV0 ;[2053] Check for not root node
HRRZ P2,LL.S2 ;[2053] Get the root node highseg origin
JUMPE P2,COEOV0 ;[2053] No root node high segment
CAML P3,P2 ;[2053] In the high segment?
JRST COESP0## ;[2053] Yes, do this fixup now. SGCHK.
;[2053] will use the root node high seg.
COEOV0: HRL P3,T2 ;[2053] Put the index with the address
MOVEI T2,TPCBK ;[2053] Get the length
PUSH P,T4 ;[2053] Save over DY.GET call
PUSHJ P,DY.GET## ;[2053] Get a block
POP P,T4 ;[2053] Restore AC
MOVEM P3,TPCAD(T1) ;[2053] Store the address info
MOVEI P1,ARGFXP ;[2053] Get the pointer to the chain
COEOV1: MOVE T2,TPCLK(P1) ;[2053] Get the new pointer
JUMPE T2,COEOV2 ;[2053] At end of chain?
CAMG P3,TPCAD(T2) ;[2053] Is this one bigger than last?
JRST COEOV2 ;[2053] Yes, link it in here
MOVE P1,T2 ;[2053] Point to the current block
JRST COEOV1 ;[2053] Try the next block
COEOV2: MOVEM T2,TPCLK(T1) ;[2053] Link this one into the chain
MOVEM T1,TPCLK(P1) ;[2053] Complete the chain
PJRST COESP1## ;[2053] Return to coersion code
SUM 55460