Changeset 81 for trunk/kLdr/kLdrModLX.c
- Timestamp:
- Aug 19, 2016, 12:10:38 AM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/kLdr/kLdrModLX.c
r80 r81 128 128 static void kLdrModLXMemCopyW(KU8 *pbDst, const KU8 *pbSrc, int cb); 129 129 static int kldrModLXDoProtect(PKLDRMODLX pModLX, void *pvBits, unsigned fUnprotectOrProtect); 130 static int kldrModLXDoCallDLL(PKLDRMODLX pModLX, unsigned uOp, KUPTR uHandle);130 static int kldrModLXDoCallDLL(PKLDRMODLX pModLX, void *pvMapping, unsigned uOp, KUPTR uHandle); 131 131 static int kldrModLXDoForwarderQuery(PKLDRMODLX pModLX, const struct e32_entry *pEntry, 132 132 PFNKLDRMODGETIMPORT pfnGetForwarder, void *pvUser, PKLDRADDR puValue, KU32 *pfKind); … … 1937 1937 1938 1938 /** @copydoc kLdrModAllocTLS */ 1939 static int kldrModLXAllocTLS(PKLDRMOD pMod )1939 static int kldrModLXAllocTLS(PKLDRMOD pMod, void *pvMapping) 1940 1940 { 1941 1941 PKLDRMODLX pModLX = (PKLDRMODLX)pMod->pvData; 1942 1942 1943 1943 /* no tls, just do the error checking. */ 1944 if (!pModLX->pvMapping) 1944 if ( pvMapping == KLDRMOD_INT_MAP 1945 && pModLX->pvMapping) 1945 1946 return KLDR_ERR_NOT_MAPPED; 1946 1947 return 0; … … 1949 1950 1950 1951 /** @copydoc kLdrModFreeTLS */ 1951 static void kldrModLXFreeTLS(PKLDRMOD pMod )1952 static void kldrModLXFreeTLS(PKLDRMOD pMod, void *pvMapping) 1952 1953 { 1953 1954 /* no tls. */ 1954 1955 K_NOREF(pMod); 1956 K_NOREF(pvMapping); 1955 1957 1956 1958 } … … 2027 2029 2028 2030 /** @copydoc kLdrModCallInit */ 2029 static int kldrModLXCallInit(PKLDRMOD pMod, KUPTR uHandle)2031 static int kldrModLXCallInit(PKLDRMOD pMod, void *pvMapping, KUPTR uHandle) 2030 2032 { 2031 2033 PKLDRMODLX pModLX = (PKLDRMODLX)pMod->pvData; … … 2035 2037 * Mapped? 2036 2038 */ 2037 if (!pModLX->pvMapping) 2038 return KLDR_ERR_NOT_MAPPED; 2039 if (pvMapping == KLDRMOD_INT_MAP) 2040 { 2041 pvMapping = pModLX->pvMapping; 2042 if (!pvMapping) 2043 return KLDR_ERR_NOT_MAPPED; 2044 } 2039 2045 2040 2046 /* … … 2042 2048 */ 2043 2049 if ((pModLX->Hdr.e32_mflags & E32MODMASK) == E32MODDLL) 2044 rc = kldrModLXDoCallDLL(pModLX, 0 /* attach */, uHandle);2050 rc = kldrModLXDoCallDLL(pModLX, pvMapping, 0 /* attach */, uHandle); 2045 2051 else 2046 2052 rc = 0; … … 2055 2061 * @returns KLDR_ERR_MODULE_INIT_FAILED or KLDR_ERR_THREAD_ATTACH_FAILED on failure. 2056 2062 * @param pModLX The LX module interpreter instance. 2063 * @param pvMapping The module mapping to use (resolved). 2057 2064 * @param uOp The operation (DLL_*). 2058 2065 * @param uHandle The module handle to present. 2059 2066 */ 2060 static int kldrModLXDoCallDLL(PKLDRMODLX pModLX, unsigned uOp, KUPTR uHandle)2067 static int kldrModLXDoCallDLL(PKLDRMODLX pModLX, void *pvMapping, unsigned uOp, KUPTR uHandle) 2061 2068 { 2062 2069 int rc; … … 2072 2079 * Invoke the entrypoint and convert the boolean result to a kLdr status code. 2073 2080 */ 2074 rc = kldrModLXDoCall((KUPTR)p ModLX->pvMapping2081 rc = kldrModLXDoCall((KUPTR)pvMapping 2075 2082 + (KUPTR)pModLX->pMod->aSegments[pModLX->Hdr.e32_startobj - 1].RVA 2076 2083 + pModLX->Hdr.e32_eip, … … 2150 2157 2151 2158 /** @copydoc kLdrModCallTerm */ 2152 static int kldrModLXCallTerm(PKLDRMOD pMod, KUPTR uHandle)2159 static int kldrModLXCallTerm(PKLDRMOD pMod, void *pvMapping, KUPTR uHandle) 2153 2160 { 2154 2161 PKLDRMODLX pModLX = (PKLDRMODLX)pMod->pvData; … … 2157 2164 * Mapped? 2158 2165 */ 2159 if (!pModLX->pvMapping) 2160 return KLDR_ERR_NOT_MAPPED; 2166 if (pvMapping == KLDRMOD_INT_MAP) 2167 { 2168 pvMapping = pModLX->pvMapping; 2169 if (!pvMapping) 2170 return KLDR_ERR_NOT_MAPPED; 2171 } 2161 2172 2162 2173 /* … … 2164 2175 */ 2165 2176 if ((pModLX->Hdr.e32_mflags & E32MODMASK) == E32MODDLL) 2166 kldrModLXDoCallDLL(pModLX, 1 /* detach */, uHandle);2177 kldrModLXDoCallDLL(pModLX, pvMapping, 1 /* detach */, uHandle); 2167 2178 2168 2179 return 0; … … 2171 2182 2172 2183 /** @copydoc kLdrModCallThread */ 2173 static int kldrModLXCallThread(PKLDRMOD pMod, KUPTR uHandle, unsigned fAttachingOrDetaching)2184 static int kldrModLXCallThread(PKLDRMOD pMod, void *pvMapping, KUPTR uHandle, unsigned fAttachingOrDetaching) 2174 2185 { 2175 2186 /* no thread attach/detach callout. */ 2176 2187 K_NOREF(pMod); 2188 K_NOREF(pvMapping); 2177 2189 K_NOREF(uHandle); 2178 2190 K_NOREF(fAttachingOrDetaching);
Note:
See TracChangeset
for help on using the changeset viewer.