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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

BINDING AND LOADINGPL/M-2B6 COMPILER 960-515 date PAGE 7145 3147 314B 3149, 3150 4151 4152 4153 4154 3155 215615715B15916016116216316516616716B'"169170171172~ 74175122334444334444444IF EXCEPTION THEN CALL REPORT (@EXCEP);1* Is it marked with Present bit = 0 ? *1IF (SEGDT(LI'X) .RIGHTS AND B0H)=0 THEN1* Is it a call g~te? *1IF (SEGDT(LIX) .RIGHTS AND 0FH)=4 1* Type field *1THEN DO; 1* Insert pointer from BOND table *1CALL FIND BOND (@DESNAM(LIX) .NAME,@GATET(LIX) .ENTRY POINT, @GATET(LIX) .SEL,@EXCEP); -IF EXCEP=OK THEN 1* Set present bit. *1GATET(LIX) .RIGHTS=GATET(LIX) .RIGHTS OR B0H;END 1* inserting pointer *1;END 1* stepping through all descriptors *1;END LOAD_DESCRP;/*******************************************************/1* Transfer remaining descriptors to new LDT *1TRANSFER REMAINDERS: PROCEDURE;1* Handles descriptors for which there was noLODTXT record (e.g. stacks and gates). *1DECLARE NEW LDT SEL SELECTOR,NEW-LDT-SEL W WORD AT (@NEW LDT SEL),SEG=RIGHTS - BYTE; --1* Step thru DESCRP entries, skipping LDT alias */DO LIX = 2 TO MODULE_HEADER.DESCR_COUNT-l;IF (SEGDT(LIX) .RIGHTS AND 0FH) = 4THEN 1* call~gate *1 DO;1* Construct selector for slot in new LDT *1NEW LDT SEL W = (SHL(LIXj3) OR 07H);I*-Transfer descriptor to new LDT */CALL LOAD LDT GATE (TASK SLOT, NEW LDT SEL,GATET(LIX) .RIGHTS,- --BUILD$PTR(GATET(LIX) .SEL,GATET(LIX) .ENTRY POINT) ,GATET(LIX) .WORD COUNT, @EXCEP);IF EXCEPTION THEN CALL REPORT (@EXCEP);END 1* call gate */;ELSE IF (SEGDT(LIX) .RIGHTS AND 10H) 0THEN 1* unallocated data or code segment *1 DO;IF (SEGDT(LIX) .RIGHTS AND 06H) = 06H1* expand-down data segment? */THEN SEG RIGHTS=DATA WD;ELSE SEG-RIGHTS=DATA-W;/* Allocate a segment *1CALL ALLOCATE (DCS SEL, SEG RIGHTS,SEGDT(LIX) .LIMIT+l, @EXCEP);IF EXCEPTION THEN CALL REPORT (@EXCEP);/* Put actual access rights in descriptor *1CALL CHANGE AR (DCS SEL, ,SEGDT (LI X) • RIGHTS, @EXCEP);IF EXCEPTION THEN CALL REPORT (@EXCEP);1* Construct selector for slot in new LDT *1Figure 11-6. ,Binding Loader (Cont'd.)11-21 121960-001

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

Saved successfully!

Ooh no, something went wrong!