Commit 06e67a82da7b0d2bb2bdada0ec7122032a330312

Authored by aliguori
1 parent a876e289

Allocate code gen buffer properly on FreeBSD

Signed-off-by: Juergen Lock <nox@jelal.kn-bremen.de>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>



git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5331 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 22 additions and 0 deletions
... ... @@ -443,6 +443,28 @@ static void code_gen_alloc(unsigned long tb_size)
443 443 exit(1);
444 444 }
445 445 }
  446 +#elif defined(__FreeBSD__)
  447 + {
  448 + int flags;
  449 + void *addr = NULL;
  450 + flags = MAP_PRIVATE | MAP_ANONYMOUS;
  451 +#if defined(__x86_64__)
  452 + /* FreeBSD doesn't have MAP_32BIT, use MAP_FIXED and assume
  453 + * 0x40000000 is free */
  454 + flags |= MAP_FIXED;
  455 + addr = (void *)0x40000000;
  456 + /* Cannot map more than that */
  457 + if (code_gen_buffer_size > (800 * 1024 * 1024))
  458 + code_gen_buffer_size = (800 * 1024 * 1024);
  459 +#endif
  460 + code_gen_buffer = mmap(addr, code_gen_buffer_size,
  461 + PROT_WRITE | PROT_READ | PROT_EXEC,
  462 + flags, -1, 0);
  463 + if (code_gen_buffer == MAP_FAILED) {
  464 + fprintf(stderr, "Could not allocate dynamic translator buffer\n");
  465 + exit(1);
  466 + }
  467 + }
446 468 #else
447 469 code_gen_buffer = qemu_malloc(code_gen_buffer_size);
448 470 if (!code_gen_buffer) {
... ...