  We present a method for proving that a program running under the Total Store
Ordering (TSO) memory model is robust, i.e., all its TSO computations are
equivalent to computations under the Sequential Consistency (SC) semantics.
This method is inspired by Lipton's reduction theory for proving atomicity of
concurrent programs. For programs which are not robust, we introduce an
abstraction mechanism that allows to construct robust programs
over-approximating their TSO semantics. This enables the use of proof methods
designed for the SC semantics in proving invariants that hold on the TSO
semantics of a non-robust program. These techniques have been evaluated on a
large set of benchmarks using the infrastructure provided by CIVL, a generic
tool for reasoning about concurrent programs under the SC semantics.
