#define INCL_OS2V20_TASKING #define INCL_OS2V20_MEMORY #define INCL_OS2V20_FILESYS #define INCL_ERROR_H #define INCL_TYPES #include #include #include #include #include #include "os2tile.h" #include "os2srv.h" #include "os2defp.h" #include "mi.h" #include "seldesc.h" #define FOR_EXEHDR 1 #include "newexe.h" #include "exe386.h" #include "ldrvars.h" #include "ldrxport.h" #include "os2ldr.h" #ifdef DBCS // MSKK Apr.19.1993 V-AkihiS // // OS/2 internal multibyte string function. // #include "ldrdbcs.h" #define strpbrk ldrMultiByteStrpbrk #define strchr ldrMultiByteStrchr #define strrchr ldrMultiByteStrrchr #endif int ldrFindModule(PUCHAR pachModname, USHORT cb, USHORT class, ldrmte_t **ppmte); int ldrOpenNewExe(PUCHAR pachModname, USHORT cb, ldrlv_t *plv, PUSHORT pfl, PBOOLEAN pBound, PULONG pNEFlags); APIRET ldrGetMte(PUCHAR pachModname, USHORT cb, UCHAR chLdrtype, USHORT class, ldrmte_t **ppmte, PBOOLEAN pBound, PULONG pNEFlags); int ldrGetModParams(ldrmte_t *pmte, ldrrei_t *pei); int ldrIsAttached(ldrmte_t *pmte); void ldrChkLoadType(ULONG lflags, ldrlv_t *plv); void ldrPromoteMTE(ldrmte_t *pmte); int ldrCheckGlobal(PUCHAR pachname, USHORT cb, ldrmte_t **ppmte); int ldrCheckSpecific(ldrmte_t **ppmte, ldrlv_t *plv); int ldrCheckInternalName(ldrmte_t *pmte); int ldrMungeFlags(struct e32_exe *pe32); APIRET ldrCreateMte(struct e32_exe *pe32, ldrlv_t *plv); int ldrMTEValidatePtrs(ldrmte_t *pmte, ULONG limit, ULONG constant); void ldrExpandSegment(ldrmte_t *pmte, UCHAR type); int ldrOpenPath(PUCHAR pachModname, USHORT cb, ldrlv_t *plv, ULONG *pflmte); void ldrstart(ldrrei_t *pexec_info); ldrmte_t *ldrFindMTEForHandle(USHORT hmte); APIRET Allocate16BHandle(PUSHORT pusHandle, ULONG h32bHandle); APIRET Free16BHandle(USHORT usHandle); APIRET ldrAllocSegment(ldrmte_t *pmte, ldrste_t *pste, ulong_t iseg); APIRET ldrDoFixups(ri_t *pri, ulong_t laddr, struct taddr_s *ptaddr, ushort_t segsize); APIRET ldrLoadIteratedData(ldrmte_t *pmte, ldrste_t *pste, PIO_STATUS_BLOCK pIoStatusBlock, ULONG laddr); ldrote_t *ldrNumToOte(ldrmte_t *pmte, ulong_t objnum); APIRET ldrAllocSegments(ldrlv_t *plv); APIRET ldrLoadModule(ldrlv_t *plv); APIRET ldrLoadSegment(ldrmte_t *pmte, ldrste_t *pste); APIRET ldrGetTgtMte(ushort_t modord, ldrmte_t *pmte, ldrmte_t **ptgtmte); ulong_t ldrAscToOrd(char *pachstring, int cchstring); APIRET ldrGetOrdNum(ldrmte_t *pmte, uchar_t *pprocnam, ushort_t *pentord, int fstring); APIRET ldrGetOrdNumSub(uchar_t *pnt, uchar_t *pprocnam, ushort_t *pentord); APIRET ldrGetEntAddr(ushort_t entord, ldrmte_t *pmte, struct taddr_s *ptaddr, ldrste_t *psrcste, ldrmte_t *psrcmte); APIRET ldrGetModule(PUCHAR pachModname, USHORT cb, char chLdrtype, USHORT class, ldrmte_t **ppmte, PBOOLEAN pBound, PULONG pNEFlags); int ldrEachObjEntry(ulong_t objnum, ldrmte_t *pmte, int (*pwork)(ldret_t *pet, ulong_t *pentry, ldrmte_t *pmte, ldrlv_t *plv), ldrlv_t *plv); int ldrInitEntry(ldret_t *pet, ulong_t *pentry, ldrmte_t *pmte, ldrlv_t *plv); int ldrEditProlog(ldret_t *pet, ulong_t *pentry, ldrmte_t *pmte, ldrlv_t *plv); int ldrGetCallGate(ldret_t *pet, ulong_t *pentry, ldrmte_t *pmte, ldrlv_t *plv); int ldrFreeCallGate(ldret_t *pet, ulong_t *pentry, ldrmte_t *pmte, ldrlv_t *plv); ulong_t ldrSkipEnts(ldrmte_t *pmte, uchar_t type, uchar_t count); VOID ldrUnlinkMTE(ldrmte_t *pmte); VOID ldrTagModuleTree(ldrmte_t *pmte); VOID ldrTagModuleTree_USED(ldrmte_t *pmte); BOOLEAN ldrUnloadTagedModules(POS2_PROCESS Process); VOID ldrClearAllMteFlag(ULONG Flags); VOID ldrWriteErrTxt(int errcode); VOID ldrUCaseString(PCHAR pstring, ULONG cb); VOID ldrNewExeInit(POS2_THREAD t,P_LDRNEWEXE_MSG a,PUSHORT cb); #if PMNT BOOLEAN ldrSaveErrInfo(int errcode); VOID ldrRestoreErrInfo(int *errcode); BOOLEAN ldrFreeErrInfo(VOID); #endif #define SEL_RPL3 0x3 // Rpl Ring 3 #define SEL_RPLCLR 0xfffc // Non RPL bits mask ULONG Ol2EntryFlat; ldrlibi_t *pldrLibiRecord; ULONG *pldrLibiCounter; PSTRING Od2ExecPgmErrorText; jmp_buf ljmpError; POS2_THREAD CurrentThread; ULONG ProgramIndex; ULONG LoadFactor; PSTRING pErrText; BOOLEAN fForceUnmap; BOOLEAN DoscallsLoaded; HANDLE R2XferSegHandle;