Ignore:
Timestamp:
Oct 2, 2007, 11:35:22 PM (18 years ago)
Author:
bird
Message:

Made it build on darwin - leaving a couple of things for later...

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/kStuff/kHlp/Generic/kHlpPage.c

    r3575 r3594  
    3131#include <k/kHlpAssert.h>
    3232
    33 #if K_OS == K_OS_OS2
     33#if K_OS == K_OS_DARWIN
     34# include <sys/syscall.h>
     35# include <sys/mman.h>
     36extern void *kHlpSys_mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off);
     37extern int kHlpSys_mprotect(void *addr, size_t len, int prot);
     38extern int kHlpSys_munmap(void *addr, size_t len);
     39
     40#elif K_OS == K_OS_OS2
    3441# define INCL_BASE
    3542# define INCL_ERRORS
    3643# include <os2.h>
     44
    3745#elif  K_OS == K_OS_WINDOWS
    3846# include <Windows.h>
     47
    3948#else
    4049# error "port me"
     
    4554*   Global Variables                                                           *
    4655*******************************************************************************/
    47 #if K_OS == K_OS_OS2
     56#if K_OS == K_OS_DARWIN \
     57 || K_OS == K_OS_FREEBSD \
     58 || K_OS == K_OS_LINUX \
     59 || K_OS == K_OS_NETBSD \
     60 || K_OS == K_OS_OPENBSD \
     61 || K_OS == K_OS_SOLARIS
     62/* nothing */
     63#elif K_OS == K_OS_OS2
    4864/** The base of the loader stub object. <kLdr Hack>
    4965 * The OS/2 exe stub consists of a single data object. When allocating memory
     
    6278
    6379
    64 #if K_OS == K_OS_OS2
     80#if K_OS == K_OS_DARWIN \
     81 || K_OS == K_OS_FREEBSD \
     82 || K_OS == K_OS_LINUX \
     83 || K_OS == K_OS_NETBSD \
     84 || K_OS == K_OS_OPENBSD \
     85 || K_OS == K_OS_SOLARIS
     86static int kHlpPageProtToNative(KPROT enmProt)
     87{
     88    switch (enmProt)
     89    {
     90        case KPROT_NOACCESS:             return PROT_NONE;
     91        case KPROT_READONLY:             return PROT_READ;
     92        case KPROT_READWRITE:            return PROT_READ | PROT_WRITE;
     93        case KPROT_EXECUTE:              return PROT_EXEC;
     94        case KPROT_EXECUTE_READ:         return PROT_EXEC | PROT_READ;
     95        case KPROT_EXECUTE_READWRITE:    return PROT_EXEC | PROT_READ | PROT_WRITE;
     96        default:
     97            kHlpAssert(0);
     98            return ~0U;
     99    }
     100}
     101
     102#elif K_OS == K_OS_OS2
    65103static ULONG kHlpPageProtToNative(KPROT enmProt)
    66104{
     
    97135
    98136
     137
    99138/**
    100139 * Allocate a chunk of memory with page granularity.
     
    108147KHLP_DECL(int) kHlpPageAlloc(void **ppv, KSIZE cb, KPROT enmProt, KBOOL fFixed)
    109148{
    110 #if K_OS == K_OS_OS2
     149#if K_OS == K_OS_DARWIN
     150    void *pv;
     151
     152    pv = kHlpSys_mmap(fFixed ? *ppv : NULL, cb, kHlpPageProtToNative(enmProt),
     153                      fFixed ? MAP_FIXED | MAP_ANON: MAP_ANON, -1, 0);
     154    if ((KIPTR)pv < 256)
     155    {
     156        kHlpAssert(0);
     157        return (int)(KIPTR)pv; /** @todo convert errno to kErrors */
     158    }
     159    *ppv = pv;
     160    return 0;
     161
     162#elif K_OS == K_OS_OS2
    111163    APIRET  rc;
    112     ULONG   fFlags = kHlpPageProtToNative(enmProt);;
     164    ULONG   fFlags = kHlpPageProtToNative(enmProt);
    113165
    114166    if (!fFixed)
     
    163215KHLP_DECL(int) kHlpPageProtect(void *pv, KSIZE cb, KPROT enmProt)
    164216{
    165 #if K_OS == K_OS_OS2
     217#if K_OS == K_OS_DARWIN
     218    int rc;
     219
     220    rc = kHlpSys_mprotect(pv, cb, kHlpPageProtToNative(enmProt));
     221    if (!rc)
     222        return 0;
     223    /** @todo convert errno -> kErrors */
     224    kHlpAssert(0);
     225    return rc;
     226
     227#elif K_OS == K_OS_OS2
    166228    APIRET      rc;
    167     ULONG       fFlags = kHlpPageProtToNative(enmProt);;
     229    ULONG       fFlags = kHlpPageProtToNative(enmProt);
    168230
    169231    /*
     
    216278KHLP_DECL(int) kHlpPageFree(void *pv, KSIZE cb)
    217279{
    218 #if K_OS == K_OS_OS2
     280#if K_OS == K_OS_DARWIN
     281    int rc;
     282
     283    rc = kHlpSys_munmap(pv, cb);
     284    if (!rc)
     285        return 0;
     286    /** @todo convert errno -> kErrors */
     287    return rc;
     288
     289#elif K_OS == K_OS_OS2
    219290    APIRET rc;
    220291
Note: See TracChangeset for help on using the changeset viewer.