• On Tue, Jun 16, 2009 at 08:19:23PM -0500, Anthony Liguori wrote:
    > malc wrote:
    >>
    >> On my system the above line causes gcc to emit:
    >>
    >> In file included from /home/malc/x/rcs/git/qemu/linux-user/strace.c:12:
    >> /usr/include/linux/futex.h:48: error: field `__user' has incomplete type
    >> /usr/include/linux/futex.h:48: error: syntax error before '*' token
    >> /usr/include/linux/futex.h:63: error: field `list' has incomplete type
    >> /usr/include/linux/futex.h:83: error: field `__user' has incomplete type
    >> /usr/include/linux/futex.h:83: error: syntax error before '*' token
    >> make[1]: *** [strace.o] Error 1
    
    > We had the same problem with usb-linux.c.  It's broken system headers,
    > the __user stuff is supposed to get removed as part of the headers
    > installation.
    
    > It builds fine on my system (Fedora 10).
    
    Howabout something like this:
    
    commit eb8387cb0eda32a18880664eb5f0ca5c8bf05b45
    Author: Riku Voipio <riku.voipio@iki.fi>
    Date:   Thu Jun 18 22:44:31 2009 +0300
    Subject: linux-user: include futex defines directly
    
    Since some common distributions have broken linux/futex.h, stop
    including it. Instead add the defines directly.
    
    Signed-off-by: Riku Voipio <riku.voipio@iki.fi>
    Riku Voipio authored
     
    Browse Code »


  • When debugging multi-threaded programs, QEMU's gdb stub would report the
    correct number of threads (the qfThreadInfo and qsThreadInfo packets).
    However, the stub was unable to actually switch between threads (the T
    packet), since it would report every thread except the first as being
    dead.  Furthermore, the stub relied upon cpu_index as a reliable means
    of assigning IDs to the threads.  This was a bad idea; if you have this
    sequence of events:
    
    initial thread created
    new thread #1
    new thread #2
    thread #1 exits
    new thread #3
    
    thread #3 will have the same cpu_index as thread #1, which would confuse
    GDB.  (This problem is partly due to the remote protocol not having a
    good way to send thread creation/destruction events.)
    
    We fix this by using the host thread ID for the identifier passed to GDB
    when debugging a multi-threaded userspace program.  The thread ID might
    wrap, but the same sort of problems with wrapping thread IDs would come
    up with debugging programs natively, so this doesn't represent a
    problem.
    
    Signed-off-by: Nathan Froyd <froydnj@codesourcery.com>
    Nathan Froyd authored
     
    Browse Code »