import Unicorn2
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
* os-win32.c
|
||||
*
|
||||
* Copyright (c) 2003-2008 Fabrice Bellard
|
||||
* Copyright (c) 2010 Red Hat, Inc.
|
||||
* Copyright (c) 2010-2016 Red Hat, Inc.
|
||||
*
|
||||
* QEMU library functions for win32 which are shared between QEMU and
|
||||
* the QEMU tools.
|
||||
@@ -25,21 +25,18 @@
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*
|
||||
* The implementation of g_poll (functions poll_rest, g_poll) at the end of
|
||||
* this file are based on code from GNOME glib-2 and use a different license,
|
||||
* see the license comment there.
|
||||
*/
|
||||
#include <winsock2.h>
|
||||
|
||||
#include <uc_priv.h>
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include <windows.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
#include "config-host.h"
|
||||
#include "qemu-common.h"
|
||||
#include "sysemu/sysemu.h"
|
||||
|
||||
/* this must come after including "trace.h" */
|
||||
/* The pragmas are to fix this issue: https://connect.microsoft.com/VisualStudio/feedback/details/976983 */
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable : 4091)
|
||||
#include <shlobj.h>
|
||||
#pragma warning(pop)
|
||||
|
||||
void *qemu_oom_check(void *ptr)
|
||||
{
|
||||
if (ptr == NULL) {
|
||||
@@ -57,7 +54,7 @@ void *qemu_try_memalign(size_t alignment, size_t size)
|
||||
abort();
|
||||
}
|
||||
ptr = VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE);
|
||||
// trace_qemu_memalign(alignment, size, ptr);
|
||||
//trace_qemu_memalign(alignment, size, ptr);
|
||||
return ptr;
|
||||
}
|
||||
|
||||
@@ -65,36 +62,45 @@ void *qemu_memalign(size_t alignment, size_t size)
|
||||
{
|
||||
return qemu_oom_check(qemu_try_memalign(alignment, size));
|
||||
}
|
||||
|
||||
void *qemu_anon_ram_alloc(size_t size, uint64_t *align)
|
||||
|
||||
static int get_allocation_granularity(void)
|
||||
{
|
||||
SYSTEM_INFO system_info;
|
||||
|
||||
GetSystemInfo(&system_info);
|
||||
return system_info.dwAllocationGranularity;
|
||||
}
|
||||
|
||||
void *qemu_anon_ram_alloc(struct uc_struct *uc, size_t size, uint64_t *align)
|
||||
{
|
||||
void *ptr;
|
||||
|
||||
/* FIXME: this is not exactly optimal solution since VirtualAlloc
|
||||
has 64Kb granularity, but at least it guarantees us that the
|
||||
memory is page aligned. */
|
||||
ptr = VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE);
|
||||
// trace_qemu_anon_ram_alloc(size, ptr);
|
||||
|
||||
if (ptr && align) {
|
||||
*align = MAX(get_allocation_granularity(), getpagesize());
|
||||
}
|
||||
return ptr;
|
||||
}
|
||||
|
||||
void qemu_vfree(void *ptr)
|
||||
{
|
||||
// trace_qemu_vfree(ptr);
|
||||
//trace_qemu_vfree(ptr);
|
||||
if (ptr) {
|
||||
VirtualFree(ptr, 0, MEM_RELEASE);
|
||||
}
|
||||
}
|
||||
|
||||
void qemu_anon_ram_free(void *ptr, size_t size)
|
||||
void qemu_anon_ram_free(struct uc_struct *uc, void *ptr, size_t size)
|
||||
{
|
||||
// trace_qemu_anon_ram_free(ptr, size);
|
||||
//trace_qemu_anon_ram_free(ptr, size);
|
||||
if (ptr) {
|
||||
VirtualFree(ptr, 0, MEM_RELEASE);
|
||||
}
|
||||
}
|
||||
|
||||
size_t getpagesize(void)
|
||||
int getpagesize(void)
|
||||
{
|
||||
SYSTEM_INFO system_info;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user