13.07.2015 Views

iAPX 286 Operating System Writers Guide 1983

iAPX 286 Operating System Writers Guide 1983

iAPX 286 Operating System Writers Guide 1983

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

BINDING AND LOADINGPL/M-<strong>286</strong> COMPILER 96r.J-515 date PAGE 6Ul5 3Ul6 3HI8 31r.J9 311r.J 3111 4112 4114 4115 4116 3117 4118 4119 412r.J 4121 4122 4124 4125 4127· 4128 4129 4131 4132 4133 4135 4136 4137 3138 2139 114r.J 2141 2143 2144 3/* Read in the LODTXT header */ACTUAL=DQ$READ(LOAD FILE,@LODTXT HEADER,6,@EXCEP);IF EXCEPTION THEN CALL REPORT (@EXCEP);LODTXT USED=LODTXT USED+ACTUAL;IF LODTXT_HEADER.DESCR_IN=TSS_INTHEN DO; /* Load the Task State Segment */ACTUAL=DQ$READ(LOAD FILE,@TSS,LODTXT HEADER. LENGTH,@EXCEP); -. ,IF EXCEPTION THEN CALL REPORT (@EXCEP);LODTXT USED=LODTXT USED+ACTUAL;END /* loading Task-State Segment */;ELSE DO; /* Load a data or code segment */LIX=LODTXT HEADER.DESCR IN-I;IF (SEGDT(LIX) .RIGHTS AND r.J6H) =06H/* expand-down data segment? */THEN SEG RIGHTS=DATA WD;ELSE SEG-RIGHTS=DATA-W;/* Allocate a segment */CALL ALLOCATE (DCS SEL, SEG RIGHTS,SEGDT (LI X) . LIMIT+l, @EXCEP);IF EXCEPTION THEN CALL REPORT (@EXCEP);/* Read LODTXT record into segment */ACTUAL=DQ$READ(LOAD FILE,BUILD$PTR(DCS SEL,LODTXT HEADER. LOAD OFFSET),LODTXT HEADER. LENGTH, @EXCEP);IF EXCEPTION THEN CALL REPORT (@EXCEP);LODTXT USED=LODTXT USED+ACTUAL;/* Put actual access rights in descriptor */CALL CHANGE AR (DCS SEL, SEGDT(LIX) .RIGHTS, @EXCEP);IF EXCEPTION THEN CALL REPORT (@EXCEP);/* Construct selector for slot in new LDT *//* DPL = 3; TI = 1 */NEW LDT SEL W = (SHL(LIX,3) OR 07H);/*-Transfer descriptor to new LDT */CALL LOAD LDT(TASK SLOT,NEW LDT SEL,DCS SEL,@EXCEP);IF EXCEPTION THEN CALL REPORT(@EXCEP);-/* Mark descriptor as allocated */SEGDT(LIX) .RIGHTS=ALLOCATED;END /* loading a data or code segment */;END /* stepping thru all LODTXT records */;END LOAD_SEGMENTS;/*******************************************************/LOAD_DESCRP: PROCEDURE;/* Allocate a segment for the DESCRP section */CALL ALLOCATE (DESCRP SEL, DATA vi,8*MODULE HEADER.DESCR COUNT, @EXCEP);IF EXCEPTION THEN CALL REPORT (@EXCEP);/* Step thru all descriptors */DO LIX = '" TO MODULE HEADER.DESCR COUNT-I;/* Read LDT entry */ -ACTUAL=DQ$READ (LOAD FILE, @SEGDT(LIX),- 8, @EXCEP);Figure 11-6. Binding Loader (Cont'd.)11-20 121960-001

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!