[lkml]   [2007]   [Oct]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectIs gcc thread-unsafe?

    Andi spotted this exchange on the gcc list. I don't think he's
    brought it up here yet, but it worries me enough that I'd like
    to discuss it.

    Starts here

    Concrete example here

    Basically, what the gcc developers are saying is that gcc is
    free to load and store to any memory location, so long as it
    behaves as if the instructions were executed in sequence.

    I guess that dynamically allocated memory and computed pointers
    are more difficult for gcc to do anything unsafe with, because
    it is harder to tell if a given function has deallocated the
    memory. However even that could theoretically happen in future
    if the compiler can work out the address comes from a global
    variable or is not changed intermediately.

    Linux makes extensive use of both trylocks and interruptible
    locks (ie. which automatically result in divergant code paths,
    one of which holds the lock, the other doesn't). However there
    are also other code paths which will either hold a particular
    lock or will not hold it, depending on context or some flags
    etc. barrier() doesn't help.

    For x86, obviously the example above shows it can be miscompiled,
    but it is probably relatively hard to make it happen for a non
    trivial sequence. For an ISA with lots of predicated instructions
    like ia64, it would seem to be much more likely. But of course
    we don't want even the possibility of failures.

    The gcc guys seem to be saying to mark everything volatile that
    could be touched in a critical section. This is insane for Linux.

    Any thoughts?
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to
    More majordomo info at
    Please read the FAQ at

     \ /
      Last update: 2007-10-25 05:35    [W:0.031 / U:28.528 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site