1. 26 6月, 2016 1 次提交
    • P
      linux-user: Create a hostdep.h for each host architecture · ba453780
      Peter Maydell 提交于
      In commit 4d330cee a new hostdep.h file was added, with the intent
      that host architectures which needed one could provide it, and the
      build system would automatically fall back to a generic version if
      there was no version for the host architecture. Although this works,
      it has a flaw: if a subsequent commit switches an architecture from
      "uses generic/hostdep.h" to "uses its own hostdep.h" nothing in the
      makefile dependencies notices this and so doing a rebuild without
      a manual 'make clean' will fail.
      
      So we drop the idea of having a 'generic' version in favour of
      every architecture we support having its own hostdep.h, even if
      it doesn't have anything in it. (There are only thirteen of these.)
      
      If the dependency files claim that an object file depends on a
      nonexistent file, our dependency system means that make will
      rebuild the object file, and regenerate the dependencies in
      the process. So moving between trees prior to this commit and
      trees after this commit works without requiring a 'make clean'.
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      Reviewed-by: NLaurent Vivier <laurent@vivier.eu>
      Reviewed-by: NRichard Henderson <rth@twiddle.net>
      Signed-off-by: NRiku Voipio <riku.voipio@linaro.org>
      ba453780
  2. 27 5月, 2016 1 次提交
    • T
      linux-user: Provide safe_syscall for fixing races between signals and syscalls · 4d330cee
      Timothy E Baldwin 提交于
      If a signal is delivered immediately before a blocking system call the
      handler will only be called after the system call returns, which may be a
      long time later or never.
      
      This is fixed by using a function (safe_syscall) that checks if a guest
      signal is pending prior to making a system call, and if so does not call the
      system call and returns -TARGET_ERESTARTSYS. If a signal is received between
      the check and the system call host_signal_handler() rewinds execution to
      before the check. This rewinding has the effect of closing the race window
      so that safe_syscall will reliably either (a) go into the host syscall
      with no unprocessed guest signals pending or or (b) return
      -TARGET_ERESTARTSYS so that the caller can deal with the signals.
      Implementing this requires a per-host-architecture assembly language
      fragment.
      
      This will also resolve the mishandling of the SA_RESTART flag where
      we would restart a host system call and not call the guest signal handler
      until the syscall finally completed -- syscall restarting now always
      happens at the guest syscall level so the guest signal handler will run.
      (The host syscall will never be restarted because if the host kernel
      rewinds the PC to point at the syscall insn for a restart then our
      host_signal_handler() will see this and arrange the guest PC rewind.)
      
      This commit contains the infrastructure for implementing safe_syscall
      and the assembly language fragment for x86-64, but does not change any
      syscalls to use it.
      Signed-off-by: NTimothy Edward Baldwin <T.E.Baldwin99@members.leeds.ac.uk>
      Message-id: 1441497448-32489-14-git-send-email-T.E.Baldwin99@members.leeds.ac.uk
      [PMM:
       * Avoid having an architecture if-ladder in configure by putting
         linux-user/host/$(ARCH) on the include path and including
         safe-syscall.inc.S from it
       * Avoid ifdef ladder in signal.c by creating new hostdep.h to hold
         host-architecture-specific things
       * Added copyright/license header to safe-syscall.inc.S
       * Rewrote commit message
       * Added comments to safe-syscall.inc.S
       * Changed calling convention of safe_syscall() to match syscall()
         (returns -1 and host error in errno on failure)
       * Added a long comment in qemu.h about how to use safe_syscall()
         to implement guest syscalls.
      ]
      RV: squashed Peters "fixup! linux-user: compile on non-x86-64 hosts"
      patch
      Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
      4d330cee