Skip to content
  • Luke Shumaker's avatar
    2a53535a
    linux-user: init_guest_space: Try to make ARM space+commpage continuous · 2a53535a
    Luke Shumaker authored
    
    
    At a fixed distance after the usable memory that init_guest_space maps, for
    32-bit ARM targets we also need to map a commpage.  The normal
    init_guest_space logic doesn't keep this in mind when searching for an
    address range.
    
    If !host_start, then try to find a big continuous segment where we can put
    both the usable memory and the commpage; we then munmap that segment and
    set current_start to that address; and let the normal code mmap the usable
    memory and the commpage separately.  That is: if we don't have hint of
    where to start looking for memory, come up with one that is better than
    NULL.  Depending on host_size and guest_start, there may or may not be a
    gap between the usable memory and the commpage, so this is slightly more
    restrictive than it needs to be; but it's only a hint, so that's OK.
    
    We only do that for !host start, because if host_start, then either:
     - we got an address passed in with -B, in which case we don't want to
       interfere with what the user said;
     - or host_start is based off of the ELF image's loaddr.  The check "if
       (host_start && real_start != current_start)" suggests that we really
       want lowest available address that is >= loaddr.  I don't know why that
       is, but I'm trusting that Paul Brook knew what he was doing when he
       wrote the original version of that check in
       c581deda way back in 2010.
    
    Signed-off-by: default avatarLuke Shumaker <lukeshu@parabola.nu>
    Message-Id: <20171228180814.9749-11-lukeshu@lukeshu.com>
    Signed-off-by: default avatarLaurent Vivier <laurent@vivier.eu>
    2a53535a
    linux-user: init_guest_space: Try to make ARM space+commpage continuous
    Luke Shumaker authored
    
    
    At a fixed distance after the usable memory that init_guest_space maps, for
    32-bit ARM targets we also need to map a commpage.  The normal
    init_guest_space logic doesn't keep this in mind when searching for an
    address range.
    
    If !host_start, then try to find a big continuous segment where we can put
    both the usable memory and the commpage; we then munmap that segment and
    set current_start to that address; and let the normal code mmap the usable
    memory and the commpage separately.  That is: if we don't have hint of
    where to start looking for memory, come up with one that is better than
    NULL.  Depending on host_size and guest_start, there may or may not be a
    gap between the usable memory and the commpage, so this is slightly more
    restrictive than it needs to be; but it's only a hint, so that's OK.
    
    We only do that for !host start, because if host_start, then either:
     - we got an address passed in with -B, in which case we don't want to
       interfere with what the user said;
     - or host_start is based off of the ELF image's loaddr.  The check "if
       (host_start && real_start != current_start)" suggests that we really
       want lowest available address that is >= loaddr.  I don't know why that
       is, but I'm trusting that Paul Brook knew what he was doing when he
       wrote the original version of that check in
       c581deda way back in 2010.
    
    Signed-off-by: default avatarLuke Shumaker <lukeshu@parabola.nu>
    Message-Id: <20171228180814.9749-11-lukeshu@lukeshu.com>
    Signed-off-by: default avatarLaurent Vivier <laurent@vivier.eu>
Loading