Changeset 2848 for trunk/kLdr/kLdrMod.c

Timestamp:
Nov 2, 2006, 1:08:16 AM (19 years ago)
Author:
bird
Message:

stubbed all the interpreter entry points.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/kLdr/kLdrMod.c

    r2828 r2848  
    3939# include "kLdrModELF64.h"
    4040#endif
     41
     42
     43
     44
     45
     46
     47
     48
     49
     50
     51
     52
     53
     54
     55
     56
     57
     58
     59
     60
     61
     62
     63
     64
     65
     66
    4167
    4268
     
    108134
    109135/**
    110  * Open a executable image by file name.
     136 * Open a executable image .
    111137 *
    112138 * @returns 0 on success and *ppMod pointing to a module instance.
     
    115141 * @param   ppMod           Where to store the module handle.
    116142 */
    117 int kLdrModOpen(const char *pszFilename, PPKLDRMOD ppMod)
    118 {
    119     /*
    120      * Open the file using a bit provider.
    121      */
    122     PKLDRRDR pRdr;
    123     int rc = kLdrRdrOpen(&pRdr, pszFilename);
    124     if (!rc)
    125     {
    126         rc = kLdrModOpenFromRdr(pRdr, ppMod);
    127         if (!rc)
    128             return 0;
    129        kLdrRdrClose(pRdr);
    130     }
    131     return rc;
    132 }
    133 
     143int kLdrModOpenNative(const char *pszFilename, PPKLDRMOD ppMod)
     144{
     145#ifdef __OS2__
     146
     147    //DosLoadModule()
     148#elif defined(__WIN__)
     149
     150#else
     151# error "Port me"
     152#endif
     153    return -1;
     154}
     155
     156
     157
     158/**
     159 * Closes an open module.
     160 *
     161 * The caller is responsible for calling kLdrModUnmap() and kLdrFreeTLS()
     162 * before closing the module.
     163 *
     164 * @returns 0 on success,
     165 * @param   pMod    The module.
     166 */
     167int     kLdrModClose(PKLDRMOD pMod)
     168{
     169    //pMod->
     170    return -1;
     171}
     172
     173
     174
     175/**
     176 * Queries a symbol by name or ordinal number.
     177 *
     178 * @returns 0 and *puValue and *pfKind on success.
     179 *          KLDR_ERR_SYMBOL_NOT_FOUND is returned if the symbol wasn't found.
     180 *          Other failures could stem from bad executable format failures,
     181 *          read failure in case pvBits isn't specified and no mapping should be used.
     182 * @param   pMod            The module.
     183 * @param   pvBits          Optional pointer to bits returned by kLdrModGetBits() currently located at BaseAddress.
     184 *                          This can be used by some module interpreters to reduce memory consumption.
     185 * @param   BaseAddress     The module base address to use when calculating the symbol value.
     186 *                          There are two special values that can be used:
     187 *                              KLDRMOD_BASEADDRESS_LINK and KLDRMOD_BASEADDRESS_MAP.
     188 * @param   uSymbol         The symbol ordinal. (optional)
     189 * @param   pszSymbol       The symbol name. (optional)
     190 * @param   puValue         Where to store the symbol value. (optional)
     191 * @param   pfKind          Where to store the symbol kind. (optional)
     192 */
     193int     kLdrModQuerySymbol(PKLDRMOD pMod, const void *pvBits, KLDRADDR BaseAddress, uint32_t uSymbol,
     194                           const char *pszSymbol, PKLDRADDR puValue, uint32_t *pfKind)
     195{
     196    return -1;
     197}
     198
     199
     200/**
     201 * Enumerate the symbols in the module.
     202 *
     203 * @returns 0 on success and non-zero a status code on failure.
     204 * @param   pMod            The module which symbols should be enumerated.
     205 * @param   fFlags          The enumeration flags. A combination of the KLDRMOD_ENUM_SYMS_FLAGS_* \#defines.
     206 * @param   pvBits          Optional pointer to bits returned by kLdrModGetBits() currently located at BaseAddress.
     207 *                          This can be used by some module interpreters to reduce memory consumption.
     208 * @param   BaseAddress     The module base address to use when calculating the symbol values.
     209 *                          There are two special values that could be can:
     210 *                              KLDRMOD_BASEADDRESS_LINK and KLDRMOD_BASEADDRESS_MAP.
     211 * @param   pfnCallback     The enumeration callback function.
     212 * @param   pvUser          The user argument to the callback function.
     213 */
     214int     kLdrModEnumSymbols(PKLDRMOD pMod, uint32_t fFlags, const void *pvBits, KLDRADDR BaseAddress,
     215                           PFNKLDRMODENUMSYMS pfnCallback, void *pvUser)
     216{
     217    return -1;
     218}
     219
     220
     221/**
     222 * Get the name of an import module by ordinal number.
     223 *
     224 * @returns 0 and name in pszName on success.
     225 *          On buffer overruns KLDR_ERR_BUFFER_OVERFLOW will be returned.
     226 *          On other failures and appropriate error code is returned.
     227 * @param   pMod            The module.
     228 * @param   pvBits          Optional pointer to bits returned by kLdrModGetBits().
     229 *                          This can be used by some module interpreters to reduce memory consumption.
     230 * @param   iImport         The import module ordinal number.
     231 * @param   pszName         Where to store the name.
     232 * @param   cchName         The size of the name buffer.
     233 */
     234int     kLdrModGetImport(PKLDRMOD pMod, void *pvBits, uint32_t iImport, const char *pszName, size_t cchName)
     235{
     236    return -1;
     237}
     238
     239
     240/**
     241 * Get the number of import modules.
     242 *
     243 * @returns The number of import modules. -1 if something really bad happens.
     244 * @param   pMod            The module.
     245 * @param   pvBits          Optional pointer to bits returned by kLdrModGetBits().
     246 *                          This can be used by some module interpreters to reduce memory consumption.
     247 */
     248int32_t kLdrModNumberOfImports(PKLDRMOD pMod, void *pvBits)
     249{
     250    return -1;
     251}
     252
     253
     254/**
     255 * Checks if this module can be executed by the specified arch+cpu.
     256 *
     257 * @returns 0 if it can, KLDR_ERR_ARCH_CPU_NOT_COMPATIBLE if it can't.
     258 *          Other failures may occur and cause other return values.
     259 * @param   pMod            The module.
     260 * @param   pvBits          Optional pointer to bits returned by kLdrModGetBits().
     261 *                          This can be used by some module interpreters to reduce memory consumption.
     262 */
     263int     kLdrModCanExecuteOn(PKLDRMOD pMod, void *pvBits, KLDRARCH enmArch, KLDRCPU enmCpu)
     264{
     265    //return KLDR_ERR_ARCH_CPU_NOT_COMPATIBLE;
     266    return 0;
     267}
     268
     269
     270/**
     271 * Gets the image stack info.
     272 *
     273 * @returns 0 on success, non-zero on failure.
     274 * @param   pMod
     275 * @param   pvBits          Optional pointer to bits returned by kLdrModGetBits() currently located at BaseAddress.
     276 *                          This can be used by some module interpreters to reduce memory consumption.
     277 * @param   BaseAddress     The module base address to use when calculating the stack address.
     278 *                          There are two special values that can be used:
     279 *                              KLDRMOD_BASEADDRESS_LINK and KLDRMOD_BASEADDRESS_MAP.
     280 * @param   pStackInfo      The stack information.
     281 */
     282int     kLdrModGetStackInfo(PKLDRMOD pMod, void *pvBits, KLDRADDR BaseAddress, PKLDRSTACKINFO pStackInfo)
     283{
     284    return -1;
     285}
     286
     287
     288/**
     289 * Queries the main entrypoint of the module.
     290 *
     291 * Only executable are supposed to have an main entrypoint, though some object and DLL
     292 * formats will also allow this.
     293 *
     294 * @returns 0 and *pMainEPAddress on success. Non-zero status code on failure.
     295 * @param   pMod            The module.
     296 * @param   pvBits          Optional pointer to bits returned by kLdrModGetBits() currently located at BaseAddress.
     297 *                          This can be used by some module interpreters to reduce memory consumption.
     298 * @param   BaseAddress     The module base address to use when calculating the entrypoint address.
     299 *                          There are two special values that can be used:
     300 *                              KLDRMOD_BASEADDRESS_LINK and KLDRMOD_BASEADDRESS_MAP.
     301 * @param   pMainEPAddress  Where to store the entry point address.
     302 */
     303int     kLdrModQueryMainEntrypoint(PKLDRMOD pMod, void *pvBits, KLDRADDR BaseAddress, PKLDRADDR pMainEPAddress)
     304{
     305    return 1;
     306}
     307
     308
     309/**
     310 * Get the size of the mapped module.
     311 *
     312 * @returns The size of the mapped module (in bytes).
     313 * @param   pMod            The module.
     314 */
     315size_t  kLdrModSize(PKLDRMOD pMod)
     316{
     317    return 0;
     318}
     319
     320
     321/**
     322 * Maps the module into the memory of the caller.
     323 *
     324 * On success the actual addresses for the segments can be found in MapAddress
     325 * member of each segment in the segment array.
     326 *
     327 * @returns 0 on success, non-zero OS or kLdr status code on failure.
     328 * @param   pMod            The module to be mapped.
     329 * @remark  kLdr only supports one mapping at a time of a module.
     330 */
     331int     kLdrModMap(PKLDRMOD pMod)
     332{
     333    return -1;
     334}
     335
     336
     337/**
     338 * Unmaps a module previously mapped by kLdrModMap().
     339 *
     340 * @returns 0 on success, non-zero OS or kLdr status code on failure.
     341 * @param   pMod            The module to unmap.
     342 */
     343int     kLdrModUnmap(PKLDRMOD pMod)
     344{
     345    return -1;
     346}
     347
     348
     349/**
     350 * Allocates Thread Local Storage for module mapped by kLdrModMap().
     351 *
     352 * Calling kLdrModAllocTLS() more than once without calling kLdrModFreeTLS()
     353 * between each invocation is not supported.
     354 *
     355 * @returns 0 on success, non-zero OS or kLdr status code on failure.
     356 * @param   pMod            The module.
     357 */
     358int     kLdrModAllocTLS(PKLDRMOD pMod)
     359{
     360    return 0;
     361}
     362
     363
     364/**
     365 * Frees Thread Local Storage previously allocated by kLdrModAllocTLS().
     366 *
     367 * The caller is responsible for only calling kLdrModFreeTLS() once
     368 * after calling kLdrModAllocTLS().
     369 *
     370 * @returns 0 on success, non-zero OS or kLdr status code on failure.
     371 * @param   pMod            The module.
     372 */
     373void    kLdrModFreeTLS(PKLDRMOD pMod)
     374{
     375}
     376
     377
     378/**
     379 * Reloads all dirty pages in a module previously mapped by kLdrModMap().
     380 *
     381 * The module interpreter may omit code pages if it can safely apply code
     382 * fixups again in a subsequent kLdrModFixupMapping() call.
     383 *
     384 * The caller is responsible for freeing TLS before calling this function.
     385 *
     386 * @returns 0 on success, non-zero OS or kLdr status code on failure.
     387 * @param   pMod            The module.
     388 */
     389int     kLdrModReload(PKLDRMOD pMod)
     390{
     391    return -1;
     392}
     393
     394
     395/**
     396 * Fixup the mapping made by kLdrModMap().
     397 *
     398 * The caller is only responsible for not calling this function more than
     399 * once without doing kLDrModReload() inbetween.
     400 *
     401 * @returns 0 on success, non-zero OS or kLdr status code on failure.
     402 * @param   pMod            The module.
     403 * @param   pfnGetImport    The callback for resolving external (imported) symbols.
     404 * @param   pvUser          The callback user argument.
     405 */
     406int     kLdrModFixupMapping(PKLDRMOD pMod, PFNKLDRMODGETIMPORT pfnGetImport, void *pvUser)
     407{
     408    return -1;
     409}
     410
     411
     412/**
     413 * Call the module initializiation function of a mapped module (if any).
     414 *
     415 * @returns 0 on success or no init function, non-zero on init function failure or invalid pMod.
     416 * @param   pMod            The module.
     417 */
     418int     kLdrModCallInit(PKLDRMOD pMod)
     419{
     420    return -1;
     421}
     422
     423
     424/**
     425 * Call the module termination function of a mapped module (if any).
     426 *
     427 * @returns 0 on success or no term function, non-zero on invalid pMod.
     428 * @param   pMod            The module.
     429 *
     430 * @remark  Termination function failure will be ignored by the module interpreter.
     431 */
     432int     kLdrModCallTerm(PKLDRMOD pMod)
     433{
     434    return 0;
     435}
     436
     437
     438/**
     439 * Call the thread attach or detach function of a mapped module (if any).
     440 *
     441 * @returns 0 on success or no attach/detach function, non-zero on attach failure or invalid pMod.
     442 * @param   pMod            The module.
     443 *
     444 * @remark  Detach function failure will be ignored by the module interpreter.
     445 */
     446int     kLdrModCallThread(PKLDRMOD pMod, unsigned fAttachingOrDetaching)
     447{
     448    return 0;
     449}
     450
     451
     452/**
     453 * Gets the module bits.
     454 *
     455 * The module interpreter will fill a mapping allocated by the caller with the
     456 * module bits reallocated to the specified address.
     457 *
     458 * @returns 0 on succes, non-zero OS or kLdr status code on failure.
     459 * @param   pMod            The module.
     460 * @param   pvBits          Where to put the bits.
     461 * @param   BaseAddress     The base address that should correspond to the first byte in pvBits
     462 *                          upon return.
     463 * @param   pfnGetImport    The callback ufor resolving external (imported) symbols.
     464 * @param   pvUser          The callback user argument.
     465 */
     466int     kLdrModGetBits(PKLDRMOD pMod, void *pvBits, KLDRADDR BaseAddress, PFNKLDRMODGETIMPORT pfnGetImport, void *pvUser)
     467{
     468    return -1;
     469}
     470
     471
     472/**
     473 * Relocates the module bits previously obtained by kLdrModGetBits().
     474 *
     475 * @returns 0 on succes, non-zero OS or kLdr status code on failure.
     476 * @param   pMod            The module.
     477 * @param   pvBits          Where to put the bits.
     478 * @param   NewBaseAddress  The new base address.
     479 * @param   OldBaseAddress  The old base address (i.e. the one specified to kLdrModGetBits() or as
     480 *                          NewBaseAddressto the previous kLdrModRelocateBits() call).
     481 * @param   pfnGetImport    The callback ufor resolving external (imported) symbols.
     482 * @param   pvUser          The callback user argument.
     483 */
     484int     kLdrModRelocateBits(PKLDRMOD pMod, void *pvBits, KLDRADDR NewBaseAddress, KLDRADDR OldBaseAddress,
     485                            PFNKLDRMODGETIMPORT pfnGetImport, void *pvUser)
     486{
     487    return -1;
     488}
     489
     490
     491
Note: See TracChangeset for help on using the changeset viewer.