From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756210AbdKCSHI (ORCPT ); Fri, 3 Nov 2017 14:07:08 -0400 Received: from mail-wm0-f47.google.com ([74.125.82.47]:55208 "EHLO mail-wm0-f47.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756087AbdKCSHG (ORCPT ); Fri, 3 Nov 2017 14:07:06 -0400 X-Google-Smtp-Source: ABhQp+ScV698Up+UADzrnlzGbif1fs1n5oblRWv9pnrYYFe077ua0Ptlsqc0w++o8DlW/cfNh6OCOKw5KWWvqAihvqg= MIME-Version: 1.0 In-Reply-To: <20171103175156.f44o7kuxgzym3pbt@lakrids.cambridge.arm.com> References: <20171103171203.107569-1-samitolvanen@google.com> <20171103175156.f44o7kuxgzym3pbt@lakrids.cambridge.arm.com> From: Nick Desaulniers Date: Fri, 3 Nov 2017 11:07:04 -0700 Message-ID: Subject: Re: [PATCH 00/15] Add support for clang LTO To: Mark Rutland Cc: Sami Tolvanen , LKML , linux-arm-kernel@lists.infradead.org, Matthias Kaehlcke , Kees Cook , Greg Hackmann , George Burgess , Stephen Hines , Pirama Arumuga Nainar , Manoj Gupta Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Nov 3, 2017 at 10:51 AM, Mark Rutland wrote: > I had to create an aarch64-linux-gnu-clang wrapper, too. I'm not sure if > there's build system help to avoid needing that? Gah! So a BIG difference with Clang vs GCC for cross compiling is that Clang by default ships with all backends enabled, and uses a `-target ` CFLAG to determine the arch to cross compile for, while GCC is configured at compile time to support one back end, IIUC. Clang _can_ be built with all other back ends disabled but one, but I have a problem with this approach: distributions of Clang are rarely configured this way (all backends enabled by default), and it seems we just found this past week that Clang if configured with just one backend, it will silently ignore -target flags for other backends and generate code for the configured backend (this led to: https://lkml.org/lkml/2017/11/2/892). I consider this a bug in Clang, so I just filed: https://bugs.llvm.org/show_bug.cgi?id=35196 > CC arch/arm64/crypto/aes-ce-cipher.o > fatal error: error in backend: Do not know how to split the result of this operator! Yep, we've seen this. It was the FINAL bug in Clang for compiling the kernel for arm64. It was recently fixed upstream in llvm by gbiv@google.com, but so recent that you'll need to either compiler Clang from source from ToT or work around it like we have in Android with: https://android.googlesource.com/kernel/msm/+/9093342a0186dad05095b70f1806938310ace6e7 aka patch 7 in this series. From mboxrd@z Thu Jan 1 00:00:00 1970 From: ndesaulniers@google.com (Nick Desaulniers) Date: Fri, 3 Nov 2017 11:07:04 -0700 Subject: [PATCH 00/15] Add support for clang LTO In-Reply-To: <20171103175156.f44o7kuxgzym3pbt@lakrids.cambridge.arm.com> References: <20171103171203.107569-1-samitolvanen@google.com> <20171103175156.f44o7kuxgzym3pbt@lakrids.cambridge.arm.com> Message-ID: To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On Fri, Nov 3, 2017 at 10:51 AM, Mark Rutland wrote: > I had to create an aarch64-linux-gnu-clang wrapper, too. I'm not sure if > there's build system help to avoid needing that? Gah! So a BIG difference with Clang vs GCC for cross compiling is that Clang by default ships with all backends enabled, and uses a `-target ` CFLAG to determine the arch to cross compile for, while GCC is configured at compile time to support one back end, IIUC. Clang _can_ be built with all other back ends disabled but one, but I have a problem with this approach: distributions of Clang are rarely configured this way (all backends enabled by default), and it seems we just found this past week that Clang if configured with just one backend, it will silently ignore -target flags for other backends and generate code for the configured backend (this led to: https://lkml.org/lkml/2017/11/2/892). I consider this a bug in Clang, so I just filed: https://bugs.llvm.org/show_bug.cgi?id=35196 > CC arch/arm64/crypto/aes-ce-cipher.o > fatal error: error in backend: Do not know how to split the result of this operator! Yep, we've seen this. It was the FINAL bug in Clang for compiling the kernel for arm64. It was recently fixed upstream in llvm by gbiv at google.com, but so recent that you'll need to either compiler Clang from source from ToT or work around it like we have in Android with: https://android.googlesource.com/kernel/msm/+/9093342a0186dad05095b70f1806938310ace6e7 aka patch 7 in this series.