• Mathieu Desnoyers's avatar
    rseq/selftests: x86: Work-around bogus gcc-8 optimisation · fe22983d
    Mathieu Desnoyers authored
    gcc-8 version 8.1.0, 8.2.0, and 8.3.0 generate broken assembler with asm
    goto that have a thread-local storage "m" input operand on both x86-32
    and x86-64. For instance:
    
    __thread int var;
    
    static int fct(void)
    {
            asm goto (      "jmp %l[testlabel]\n\t"
                            : : [var] "m" (var) : : testlabel);
            return 0;
    testlabel:
            return 1;
    }
    
    int main()
    {
            return fct();
    }
    
    % gcc-8 -O2 -o test-asm-goto test-asm-goto.c
    /tmp/ccAdHJbe.o: In function `main':
    test-asm-goto.c:(.text.startup+0x1): undefined reference to `.L2'
    collect2: error: ld returned 1 exit status
    
    % gcc-8 -m32 -O2 -o test-asm-goto test-asm-goto.c
    /tmp/ccREsVXA.o: In function `main':
    test-asm-goto.c:(.text.startup+0x1): undefined reference to `.L2'
    collect2: error: ld returned 1 exit status
    
    Work-around this compiler bug in the rseq-x86.h header by passing the
    address of the __rseq_abi TLS as a register operand rather than using
    the "m" input operand.
    
    Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90193Signed-off-by: default avatarMathieu Desnoyers <mathieu.desnoyers@efficios.com>
    CC: Ingo Molnar <mingo@redhat.com>
    CC: Peter Zijlstra <peterz@infradead.org>
    CC: Thomas Gleixner <tglx@linutronix.de>
    CC: Joel Fernandes <joelaf@google.com>
    CC: Catalin Marinas <catalin.marinas@arm.com>
    CC: Dave Watson <davejwatson@fb.com>
    CC: Will Deacon <will.deacon@arm.com>
    CC: Shuah Khan <shuah@kernel.org>
    CC: Andi Kleen <andi@firstfloor.org>
    CC: linux-kselftest@vger.kernel.org
    CC: "H . Peter Anvin" <hpa@zytor.com>
    CC: Chris Lameter <cl@linux.com>
    CC: Russell King <linux@arm.linux.org.uk>
    CC: Michael Kerrisk <mtk.manpages@gmail.com>
    CC: "Paul E . McKenney" <paulmck@linux.vnet.ibm.com>
    CC: Paul Turner <pjt@google.com>
    CC: Boqun Feng <boqun.feng@gmail.com>
    CC: Josh Triplett <josh@joshtriplett.org>
    CC: Steven Rostedt <rostedt@goodmis.org>
    CC: Ben Maurer <bmaurer@fb.com>
    CC: linux-api@vger.kernel.org
    CC: Andy Lutomirski <luto@amacapital.net>
    CC: Andrew Morton <akpm@linux-foundation.org>
    CC: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: default avatarShuah Khan <skhan@linuxfoundation.org>
    fe22983d
rseq-x86.h 29.9 KB