Changeset 2973


Ignore:
Timestamp:
Feb 14, 2007, 10:14:28 AM (18 years ago)
Author:
bird
Message:

Quick and dirty darwin implementation.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/kLdr/kLdrModNative.c

    r2898 r2973  
    6060#include <winnt.h> */
    6161
     62#elif defined(__DARWIN__)
     63# include <dlfcn.h>
     64# include <errno.h>
     65
    6266#else
    6367# error "port me"
     
    122126    /** Pointer to the section header array. */
    123127    const IMAGE_SECTION_HEADER *paShdrs;
     128
     129#elif defined(__DARWIN__)
     130    /** The dlopen() handle.*/
     131    void                       *pvMod;
     132
    124133#else
    125134# error "Port me"
     
    191200        FreeLibrary(hmod);
    192201
     202#elif defined(__DARWIN__)
     203    void *pvMod;
     204
     205    pvMod = dlopen(pszFilename, 0);
     206    if (!pvMod)
     207        return ENOENT;
     208    rc = kLdrModOpenNativeByHandle((uintptr_t)pvMod, ppMod);
     209    if (rc)
     210        dlclose(pvMod);
     211
    193212#else
    194213# error "Port me"
     
    269288    cSegments = pNtHdrs->FileHeader.NumberOfSections + 1;
    270289    paShdrs = (const IMAGE_SECTION_HEADER *)(pNtHdrs + 1);
     290
     291#elif defined(__DARWIN__)
     292    char    szFilename[1] = "";
     293    cSegments = 0; /** @todo Figure out the Mac OS X dynamic loader. */
    271294
    272295#else
     
    473496    }
    474497
     498#elif defined(__DARWIN__)
     499    /** @todo Figure out the Mac OS X dynamic loader. */
     500
    475501#else
    476502# error "Port me"
     
    493519#ifdef __OS2__
    494520    rc = DosFreeModule(pModNative->hmod);
     521
    495522#elif defined(__WIN__)
    496523    if (FreeLibrary(pModNative->hmod))
     
    498525    else
    499526        rc = GetLastError();
     527
     528#elif defined(__DARWIN__)
     529    dlclose(pModNative->pvMod);
     530
    500531#else
    501532# error "Port me"
     
    521552#elif defined(__WIN__)
    522553    FARPROC pfn;
     554#elif defined(__DARWIN__)
     555    void *pfn;
    523556#else
    524557# error "Port me"
     
    577610                | KLDRSYMKIND_NO_TYPE;
    578611
     612#elif defined(__DARWIN__)
     613    if (!pszSymbol && iSymbol != NIL_KLDRMOD_SYM_ORDINAL)
     614        return KLDR_ERR_SYMBOL_NOT_FOUND;
     615
     616    pfn = dlsym(pModNative->pvMod, pszSymbol);
     617    if (!pfn)
     618        return KLDR_ERR_SYMBOL_NOT_FOUND;
     619    if (puValue)
     620        *puValue = (uintptr_t)pfn;
     621    if (pfKind)
     622        *pfKind = (sizeof(uintptr_t) == 4 ? KLDRSYMKIND_32BIT : KLDRSYMKIND_64BIT)
     623                | KLDRSYMKIND_NO_TYPE;
     624
    579625#else
    580626# error "Port me"
     
    668714    return 0;
    669715
     716#elif defined(__DARWIN__)
     717    /** @todo implement enumeration on darwin. */
     718    (void)pModNative;
     719    return KLDR_ERR_TODO;
     720
    670721#else
    671722# error "Port me"
     
    681732#ifdef __OS2__
    682733
    683     /** @todo implement export enumeration on OS/2. */
     734    /** @todo implement import enumeration on OS/2. */
    684735    (void)pModNative;
    685736    return ERROR_NOT_SUPPORTED;
     
    721772    return rc;
    722773
     774#elif defined(__DARWIN__)
     775    /** @todo Implement import enumeration on darwin. */
     776    (void)pModNative;
     777    return KLDR_ERR_TODO;
     778
    723779#else
    724780# error "Port me"
     
    733789#ifdef __OS2__
    734790
    735     /** @todo implement export enumeration on OS/2. */
     791    /** @todo implement import counting on OS/2. */
    736792    (void)pModNative;
    737793    return -1;
     
    761817    return pModNative->cImportModules;
    762818
     819#elif defined(__DARWIN__)
     820    /** @todo Implement import counting on Darwin. */
     821    (void)pModNative;
     822    return -1;
     823
    763824#else
    764825# error "Port me"
     
    773834#ifdef __OS2__
    774835
    775     /** @todo implement export enumeration on OS/2. */
     836    /** @todo implement stack info on OS/2. */
    776837    (void)pModNative;
    777838    return ERROR_NOT_SUPPORTED;
     
    784845    return 0;
    785846
     847#elif defined(__DARWIN__)
     848    /** @todo Implement stack info on Darwin. */
     849    (void)pModNative;
     850    return KLDR_ERR_TODO;
     851
    786852#else
    787853# error "Port me"
     
    796862#ifdef __OS2__
    797863
    798     /** @todo implement export enumeration on OS/2. */
     864    /** @todo implement me on OS/2. */
    799865    (void)pModNative;
    800866    return ERROR_NOT_SUPPORTED;
     
    809875    return 0;
    810876
     877#elif defined(__DARWIN__)
     878    /** @todo Implement me on Darwin. */
     879    (void)pModNative;
     880    return KLDR_ERR_TODO;
     881
    811882#else
    812883# error "Port me"
     
    821892#ifdef __OS2__
    822893
    823     /** @todo implement export enumeration on OS/2. */
     894    /** @todo implement me on OS/2. */
    824895    (void)pModNative;
    825896    return ERROR_NOT_SUPPORTED;
     
    884955    return rc;
    885956
     957#elif defined(__DARWIN__)
     958    /** @todo Implement me on Darwin. */
     959    (void)pModNative;
     960    return KLDR_ERR_TODO;
     961
    886962#else
    887963# error "Port me"
     
    896972#ifdef __OS2__
    897973
    898     /** @todo implement export enumeration on OS/2. */
     974    /** @todo implement me on OS/2. */
    899975    (void)pModNative;
    900976    return KLDR_ERR_NO_DEBUG_INFO;
     
    909985        return KLDR_ERR_NO_DEBUG_INFO;
    910986    return 0;
     987
     988#elif defined(__DARWIN__)
     989    /** @todo Implement me on Darwin. */
     990    (void)pModNative;
     991    return KLDR_ERR_NO_DEBUG_INFO;
     992
    911993#else
    912994# error "Port me"
     
    9881070    return pModNative->pNtHdrs->OptionalHeader.SizeOfImage;
    9891071
     1072#elif defined(__DARWIN__)
     1073    /** @todo Implement me on Darwin. */
     1074    return 0;
     1075
    9901076#else
    9911077# error "Port me"
     
    10021088#elif defined(__WIN__) || defined(__NT__)
    10031089    return ERROR_NOT_SUPPORTED; /* don't bother even if we could implement this. */
     1090
     1091#elif defined(__DARWIN__)
     1092    return KLDR_ERR_TODO; /* don't bother. */
     1093
    10041094#else
    10051095# error "Port me"
     
    10171107#elif defined(__WIN__) || defined(__NT__)
    10181108    return ERROR_NOT_SUPPORTED; /* don't bother even if we could implement this. */
     1109
     1110#elif defined(__DARWIN__)
     1111    return KLDR_ERR_TODO; /* don't bother. */
     1112
    10191113#else
    10201114# error "Port me"
Note: See TracChangeset for help on using the changeset viewer.