Revision 4369415f

b/exec.c
187 187
#else
188 188
static void map_exec(void *addr, long size)
189 189
{
190
    unsigned long start, end;
190
    unsigned long start, end, page_size;
191 191
    
192
    page_size = getpagesize();
192 193
    start = (unsigned long)addr;
193
    start &= ~(qemu_real_host_page_size - 1);
194
    start &= ~(page_size - 1);
194 195
    
195 196
    end = (unsigned long)addr + size;
196
    end += qemu_real_host_page_size - 1;
197
    end &= ~(qemu_real_host_page_size - 1);
197
    end += page_size - 1;
198
    end &= ~(page_size - 1);
198 199
    
199 200
    mprotect((void *)start, end - start,
200 201
             PROT_READ | PROT_WRITE | PROT_EXEC);
......
326 327
                                    target_ulong vaddr);
327 328
#endif
328 329

  
330
#define DEFAULT_CODE_GEN_BUFFER_SIZE (32 * 1024 * 1024)
331

  
332
#if defined(CONFIG_USER_ONLY)
333
/* Currently it is not recommanded to allocate big chunks of data in
334
   user mode. It will change when a dedicated libc will be used */
335
#define USE_STATIC_CODE_GEN_BUFFER
336
#endif
337

  
338
#ifdef USE_STATIC_CODE_GEN_BUFFER
339
static uint8_t static_code_gen_buffer[DEFAULT_CODE_GEN_BUFFER_SIZE];
340
#endif
341

  
329 342
void code_gen_alloc(unsigned long tb_size)
330 343
{
344
#ifdef USE_STATIC_CODE_GEN_BUFFER
345
    code_gen_buffer = static_code_gen_buffer;
346
    code_gen_buffer_size = DEFAULT_CODE_GEN_BUFFER_SIZE;
347
    map_exec(code_gen_buffer, code_gen_buffer_size);
348
#else
331 349
    code_gen_buffer_size = tb_size;
332 350
    if (code_gen_buffer_size == 0) {
351
#if defined(CONFIG_USER_ONLY)
352
        /* in user mode, phys_ram_size is not meaningful */
353
        code_gen_buffer_size = DEFAULT_CODE_GEN_BUFFER_SIZE;
354
#else
333 355
        /* XXX: needs ajustments */
334 356
        code_gen_buffer_size = (int)(phys_ram_size / 4);
357
#endif
335 358
    }
336 359
    if (code_gen_buffer_size < MIN_CODE_GEN_BUFFER_SIZE)
337 360
        code_gen_buffer_size = MIN_CODE_GEN_BUFFER_SIZE;
......
363 386
    }
364 387
    map_exec(code_gen_buffer, code_gen_buffer_size);
365 388
#endif
389
#endif /* !USE_STATIC_CODE_GEN_BUFFER */
366 390
    map_exec(code_gen_prologue, sizeof(code_gen_prologue));
367 391
    code_gen_buffer_max_size = code_gen_buffer_size - 
368 392
        code_gen_max_block_size();
......
375 399
   size. */
376 400
void cpu_exec_init_all(unsigned long tb_size)
377 401
{
378
    page_init();
379 402
    cpu_gen_init();
380 403
    code_gen_alloc(tb_size);
381 404
    code_gen_ptr = code_gen_buffer;
405
    page_init();
382 406
    io_mem_init();
383 407
}
384 408

  

Also available in: Unified diff