VirtualBox

Ignore:
Timestamp:
Jun 23, 2013 4:10:25 PM (12 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
86665
Message:

reorged the allocex bits in ring3.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/r3/generic/allocex-r3-generic.cpp

    r46568 r46739  
    11/* $Id$ */
    22/** @file
    3  * IPRT - Memory Allocation, Extended Alloc and Free Functions for Ring-3, generic.
     3 * IPRT - Memory Allocation, Extended Alloc Workers, generic.
    44 */
    55
     
    3434
    3535#include <iprt/assert.h>
    36 #include <iprt/string.h>
    37 #include "internal/magics.h"
    38 
    39 
    40 /*******************************************************************************
    41 *   Structures and Typedefs                                                    *
    42 *******************************************************************************/
    43 /**
    44  * Heading for extended memory allocations in ring-3.
    45  */
    46 typedef struct RTMEMHDRR3
    47 {
    48     /** Magic (RTMEMHDR_MAGIC). */
    49     uint32_t    u32Magic;
    50     /** Block flags (RTMEMALLOCEX_FLAGS_*). */
    51     uint32_t    fFlags;
    52     /** The actual size of the block, header not included. */
    53     uint32_t    cb;
    54     /** The requested allocation size. */
    55     uint32_t    cbReq;
    56 } RTMEMHDRR3;
    57 /** Pointer to a ring-3 extended memory header. */
    58 typedef RTMEMHDRR3 *PRTMEMHDRR3;
     36#include "../allocex-r3.h"
    5937
    6038
    6139
    62 RTDECL(int) RTMemAllocExTag(size_t cb, size_t cbAlignment, uint32_t fFlags, const char *pszTag, void **ppv) RT_NO_THROW
     40DECLHIDDEN(int) rtMemAllocEx16BitReach(size_t cbAlloc, uint32_t fFlags, void **ppv)
    6341{
    64     /*
    65      * Validate and adjust input.
    66      */
    67     AssertMsgReturn(!(fFlags & ~RTMEMALLOCEX_FLAGS_VALID_MASK), ("%#x\n", fFlags), VERR_INVALID_PARAMETER);
    68     AssertReturn(cb > 0, VERR_INVALID_PARAMETER);
    69     AssertReturn(RT_IS_POWER_OF_TWO(cbAlignment), VERR_INVALID_PARAMETER);
    70     AssertMsgReturn(cbAlignment <= sizeof(void *), ("%zu (%#x)\n", cbAlignment, cbAlignment), VERR_UNSUPPORTED_ALIGNMENT);
    71 
    72     if (fFlags & (RTMEMALLOCEX_FLAGS_16BIT_REACH | RTMEMALLOCEX_FLAGS_32BIT_REACH | RTMEMALLOCEX_FLAGS_ANY_CTX))
    73         return VERR_NOT_SUPPORTED;
    74 
    75     /*
    76      * Align the request.
    77      */
    78     size_t cbAligned = cb;
    79     if (cbAlignment)
    80         cbAligned = RT_ALIGN_Z(cb, cbAlignment);
    81     else
    82         cbAligned = RT_ALIGN_Z(cb, sizeof(uint64_t));
    83     AssertMsgReturn(cbAligned >= cb && cbAligned <= ~(size_t)0, ("cbAligned=%#zx cb=%#zx", cbAligned, cb),
    84                     VERR_INVALID_PARAMETER);
    85 
    86     /*
    87      * Allocate the requested memory.
    88      */
    89     void *pv;
    90     if (fFlags & RTMEMALLOCEX_FLAGS_EXEC)
    91     {
    92         pv = RTMemExecAlloc(cbAligned + sizeof(RTMEMHDRR3));
    93         if ((fFlags & RTMEMALLOCEX_FLAGS_ZEROED) && pv)
    94             RT_BZERO(pv, cbAligned + sizeof(RTMEMHDRR3));
    95     }
    96     else if (fFlags & RTMEMALLOCEX_FLAGS_ZEROED)
    97         pv = RTMemAllocZ(cbAligned + sizeof(RTMEMHDRR3));
    98     else
    99         pv = RTMemAlloc(cbAligned + sizeof(RTMEMHDRR3));
    100     if (!pv)
    101         return VERR_NO_MEMORY;
    102 
    103     /*
    104      * Fill in the header and return.
    105      */
    106     PRTMEMHDRR3 pHdr = (PRTMEMHDRR3)pv;
    107     pHdr->u32Magic  = RTMEMHDR_MAGIC;
    108     pHdr->fFlags    = fFlags;
    109     pHdr->cb        = (uint32_t)cbAligned;
    110     pHdr->cbReq     = (uint32_t)cb;
    111 
    112     *ppv = pHdr + 1;
    113     return VINF_SUCCESS;
     42    return VERR_NOT_SUPPORTED;
    11443}
    115 RT_EXPORT_SYMBOL(RTMemAllocExTag);
    11644
    11745
    118 RTDECL(void) RTMemFreeEx(void *pv, size_t cb) RT_NO_THROW
     46DECLHIDDEN(int) rtMemAllocEx32BitReach(size_t cbAlloc, uint32_t fFlags, void **ppv)
    11947{
    120     if (!pv)
    121         return;
    122     AssertPtr(pv);
     48    return VERR_NOT_SUPPORTED;
     49}
    12350
    124     PRTMEMHDRR3 pHdr = (PRTMEMHDRR3)pv - 1;
    125     AssertMsg(pHdr->u32Magic == RTMEMHDR_MAGIC, ("pHdr->u32Magic=%RX32 pv=%p cb=%#x\n", pHdr->u32Magic, pv, cb));
    126     pHdr->u32Magic = RTMEMHDR_MAGIC_DEAD;
    127     Assert(pHdr->cbReq == cb);
    12851
    129     if (pHdr->fFlags & RTMEMALLOCEX_FLAGS_EXEC)
    130         RTMemExecFree(pHdr, pHdr->cb + sizeof(*pHdr));
    131     else
    132         RTMemFree(pHdr);
     52DECLHIDDEN(void) rtMemFreeExYyBitReach(void *pv, size_t cb, uint32_t fFlags)
     53{
     54    AssertFailed();
    13355}
    134 RT_EXPORT_SYMBOL(RTMemFreeEx);
    13556
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette