tcg-mips: Layout executable and code_gen_buffer
Choosing good addresses for them means we can use JAL for helper calls. Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Richard Henderson <rth@twiddle.net>
This commit is contained in:
parent
178ac111bc
commit
479eb12108
|
@ -4029,11 +4029,14 @@ fi
|
||||||
if test "$pie" = "no" ; then
|
if test "$pie" = "no" ; then
|
||||||
textseg_addr=
|
textseg_addr=
|
||||||
case "$cpu" in
|
case "$cpu" in
|
||||||
arm | hppa | i386 | m68k | ppc | ppc64 | s390* | sparc | sparc64 | x86_64 | x32)
|
arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
|
||||||
|
# ??? Rationale for choosing this address
|
||||||
textseg_addr=0x60000000
|
textseg_addr=0x60000000
|
||||||
;;
|
;;
|
||||||
mips)
|
mips)
|
||||||
textseg_addr=0x400000
|
# A 256M aligned address, high in the address space, with enough
|
||||||
|
# room for the code_gen_buffer above it before the stack.
|
||||||
|
textseg_addr=0x60000000
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
if [ -n "$textseg_addr" ]; then
|
if [ -n "$textseg_addr" ]; then
|
||||||
|
|
|
@ -475,6 +475,10 @@ static inline PageDesc *page_find(tb_page_addr_t index)
|
||||||
#elif defined(__s390x__)
|
#elif defined(__s390x__)
|
||||||
/* We have a +- 4GB range on the branches; leave some slop. */
|
/* We have a +- 4GB range on the branches; leave some slop. */
|
||||||
# define MAX_CODE_GEN_BUFFER_SIZE (3ul * 1024 * 1024 * 1024)
|
# define MAX_CODE_GEN_BUFFER_SIZE (3ul * 1024 * 1024 * 1024)
|
||||||
|
#elif defined(__mips__)
|
||||||
|
/* We have a 256MB branch region, but leave room to make sure the
|
||||||
|
main executable is also within that region. */
|
||||||
|
# define MAX_CODE_GEN_BUFFER_SIZE (128ul * 1024 * 1024)
|
||||||
#else
|
#else
|
||||||
# define MAX_CODE_GEN_BUFFER_SIZE ((size_t)-1)
|
# define MAX_CODE_GEN_BUFFER_SIZE ((size_t)-1)
|
||||||
#endif
|
#endif
|
||||||
|
@ -545,6 +549,15 @@ static inline void *alloc_code_gen_buffer(void)
|
||||||
start = 0x40000000ul;
|
start = 0x40000000ul;
|
||||||
# elif defined(__s390x__)
|
# elif defined(__s390x__)
|
||||||
start = 0x90000000ul;
|
start = 0x90000000ul;
|
||||||
|
# elif defined(__mips__)
|
||||||
|
/* ??? We ought to more explicitly manage layout for softmmu too. */
|
||||||
|
# ifdef CONFIG_USER_ONLY
|
||||||
|
start = 0x68000000ul;
|
||||||
|
# elif _MIPS_SIM == _ABI64
|
||||||
|
start = 0x128000000ul;
|
||||||
|
# else
|
||||||
|
start = 0x08000000ul;
|
||||||
|
# endif
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
buf = mmap((void *)start, tcg_ctx.code_gen_buffer_size,
|
buf = mmap((void *)start, tcg_ctx.code_gen_buffer_size,
|
||||||
|
|
Loading…
Reference in New Issue