src/Platform.h
author David Anderson <dvander@alliedmods.net>
Sun Jul 29 19:24:55 2012 -0700 (2012-07-29)
changeset 133 7797936ba34c
parent 86 32ad0523b309
child 251 ca99a81745fe
permissions -rw-r--r--
Add parser support for default parameters.
     1 /* vim: set ts=4 sw=4 tw=99 et:
     2  *
     3  * Copyright (C) 2012 David Anderson
     4  *
     5  * This file is part of JITCraft.
     6  *
     7  * JITCraft is free software: you can redistribute it and/or modify it under
     8  * the terms of the GNU General Public License as published by the Free
     9  * Software Foundation, either version 3 of the License, or (at your option)
    10  * any later version.
    11  * 
    12  * Foobar is distributed in the hope that it will be useful, but WITHOUT ANY
    13  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
    14  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
    15  *
    16  * You should have received a copy of the GNU General Public License along with
    17  * JITCraft. If not, see http://www.gnu.org/licenses/.
    18  */
    19 #ifndef _include_jitcraft_platform_h_
    20 #define _include_jitcraft_platform_h_
    21 
    22 #include "Utility.h"
    23 
    24 namespace ke {
    25 
    26 namespace OS {
    27     enum Protection {
    28         Prot_ReadWrite,         // rw-, for the heap
    29         Prot_ReadExecute,       // r-x, for code
    30         Prot_ReadWriteExecute   // rwx, if disabling r-x for code.
    31     };
    32 
    33     enum MapMode {
    34         Map_Reserve,            // don't ask for actual pages yet
    35         Map_Commit              // ask for pages right away
    36     };
    37 
    38     Address MapMemory(size_t amount, MapMode mode, Protection prot);
    39     bool CommitMemory(Address address, size_t amount, Protection prot);
    40     void UnmapMemory(Address address, size_t size);
    41 
    42     class AlignableMapping {
    43         Address base_;
    44         Address aligned_;
    45         size_t size_;
    46 
    47       public:
    48         AlignableMapping(Address ptr, size_t alignment, size_t size)
    49           : base_(ptr),
    50             size_(size)
    51         {
    52             aligned_ = base_;
    53             if (!IsAligned(aligned_, alignment))
    54                 aligned_ = AlignedBase(aligned_, alignment) + alignment;
    55         }
    56 
    57         AlignableMapping() : base_(NULL), aligned_(NULL), size_(0)
    58         {
    59         }
    60 
    61         Address base() const {
    62             return base_;
    63         }
    64         bool isValid() const {
    65             return !!base_;
    66         }
    67         size_t size() const {
    68             return size_;
    69         }
    70         Address aligned() const {
    71             return aligned_;
    72         }
    73     };
    74 
    75     // MapAlignedMemory is guaranteed to return zeroed memory.
    76     AlignableMapping MapAlignedMemory(size_t amount, size_t alignment, MapMode mode);
    77     void UnmapAlignedMemory(Address address, size_t size);
    78 
    79     // The default alignment of memory returned via MapMemory().
    80     // :TODO: better ifdefs
    81 #ifdef _MSC_VER
    82     static const size_t kPageAlignment = 64 * kKB;
    83 #else
    84     static const size_t kPageAlignment = 4 * kKB;
    85 #endif
    86 
    87 }
    88 
    89 }
    90 
    91 #endif // _include_jitcraft_platform_h_