Skip to content
  • Alex Bennée's avatar
    ee947430
    linux-user: completely re-write init_guest_space · ee947430
    Alex Bennée authored
    
    
    First we ensure all guest space initialisation logic comes through
    probe_guest_base once we understand the nature of the binary we are
    loading. The convoluted init_guest_space routine is removed and
    replaced with a number of pgb_* helpers which are called depending on
    what requirements we have when loading the binary.
    
    We first try to do what is requested by the host. Failing that we try
    and satisfy the guest requested base address. If all those options
    fail we fall back to finding a space in the memory map using our
    recently written read_self_maps() helper.
    
    There are some additional complications we try and take into account
    when looking for holes in the address space. We try not to go directly
    after the system brk() space so there is space for a little growth. We
    also don't want to have to use negative offsets which would result in
    slightly less efficient code on x86 when it's unable to use the
    segment offset register.
    
    Less mind-binding gotos and hopefully clearer logic throughout.
    
    Signed-off-by: default avatarAlex Bennée <alex.bennee@linaro.org>
    Acked-by: default avatarLaurent Vivier <laurent@vivier.eu>
    
    Message-Id: <20200513175134.19619-5-alex.bennee@linaro.org>
    ee947430
    linux-user: completely re-write init_guest_space
    Alex Bennée authored
    
    
    First we ensure all guest space initialisation logic comes through
    probe_guest_base once we understand the nature of the binary we are
    loading. The convoluted init_guest_space routine is removed and
    replaced with a number of pgb_* helpers which are called depending on
    what requirements we have when loading the binary.
    
    We first try to do what is requested by the host. Failing that we try
    and satisfy the guest requested base address. If all those options
    fail we fall back to finding a space in the memory map using our
    recently written read_self_maps() helper.
    
    There are some additional complications we try and take into account
    when looking for holes in the address space. We try not to go directly
    after the system brk() space so there is space for a little growth. We
    also don't want to have to use negative offsets which would result in
    slightly less efficient code on x86 when it's unable to use the
    segment offset register.
    
    Less mind-binding gotos and hopefully clearer logic throughout.
    
    Signed-off-by: default avatarAlex Bennée <alex.bennee@linaro.org>
    Acked-by: default avatarLaurent Vivier <laurent@vivier.eu>
    
    Message-Id: <20200513175134.19619-5-alex.bennee@linaro.org>
Loading