Trailing-Edge - PDP-10 Archives - bb-bt99g-bb - lnkov1.c08
There is 1 other file named lnkov1.c08 in the archive. Click here to see a list.
 REP 2/1	;08C1
 REP 37/1	;08C2
 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
		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