From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.3 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING, SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 502DBC433DB for ; Thu, 25 Feb 2021 16:11:22 +0000 (UTC) Received: from lists.ozlabs.org (lists.ozlabs.org [112.213.38.117]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id B66B864F22 for ; Thu, 25 Feb 2021 16:11:21 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B66B864F22 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=kernel.crashing.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=linuxppc-dev-bounces+linuxppc-dev=archiver.kernel.org@lists.ozlabs.org Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4Dmd7r1QwDz3d2T for ; Fri, 26 Feb 2021 03:11:20 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; spf=permerror (SPF Permanent Error: Unknown mechanism found: ip:192.40.192.88/32) smtp.mailfrom=kernel.crashing.org (client-ip=63.228.1.57; helo=gate.crashing.org; envelope-from=segher@kernel.crashing.org; receiver=) Received: from gate.crashing.org (gate.crashing.org [63.228.1.57]) by lists.ozlabs.org (Postfix) with ESMTP id 4Dmd7T6bfdz30NL for ; Fri, 26 Feb 2021 03:11:01 +1100 (AEDT) Received: from gate.crashing.org (localhost.localdomain [127.0.0.1]) by gate.crashing.org (8.14.1/8.14.1) with ESMTP id 11PG8wqw024663; Thu, 25 Feb 2021 10:08:58 -0600 Received: (from segher@localhost) by gate.crashing.org (8.14.1/8.14.1/Submit) id 11PG8vrh024661; Thu, 25 Feb 2021 10:08:57 -0600 X-Authentication-Warning: gate.crashing.org: segher set sender to segher@kernel.crashing.org using -f Date: Thu, 25 Feb 2021 10:08:57 -0600 From: Segher Boessenkool To: Daniel Axtens Subject: Re: [RFC PATCH 8/8] powerpc/64/asm: don't reassign labels Message-ID: <20210225160857.GH28121@gate.crashing.org> References: <20210225031006.1204774-1-dja@axtens.net> <20210225031006.1204774-9-dja@axtens.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20210225031006.1204774-9-dja@axtens.net> User-Agent: Mutt/1.4.2.3i X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linuxppc-dev@lists.ozlabs.org, llvmlinux@lists.linuxfoundation.org Errors-To: linuxppc-dev-bounces+linuxppc-dev=archiver.kernel.org@lists.ozlabs.org Sender: "Linuxppc-dev" On Thu, Feb 25, 2021 at 02:10:06PM +1100, Daniel Axtens wrote: > The assembler really does not like us reassigning things to the same > label: > > :7:9: error: invalid reassignment of non-absolute variable 'fs_label' > > This happens across a bunch of platforms: > https://github.com/ClangBuiltLinux/linux/issues/1043 > https://github.com/ClangBuiltLinux/linux/issues/1008 > https://github.com/ClangBuiltLinux/linux/issues/920 > https://github.com/ClangBuiltLinux/linux/issues/1050 > > There is no hope of getting this fixed in LLVM, so if we want to build > with LLVM_IAS, we need to hack around it ourselves. > > For us the big problem comes from this: > > \#define USE_FIXED_SECTION(sname) \ > fs_label = start_##sname; \ > fs_start = sname##_start; \ > use_ftsec sname; > > \#define USE_TEXT_SECTION() > fs_label = start_text; \ > fs_start = text_start; \ > .text > > and in particular fs_label. The "Setting Symbols" super short chapter reads: "A symbol can be given an arbitrary value by writing a symbol, followed by an equals sign '=', followed by an expression. This is equivalent to using the '.set' directive." And ".set" has "Set the value of SYMBOL to EXPRESSION. This changes SYMBOL's value and type to conform to EXPRESSION. If SYMBOL was flagged as external, it remains flagged. You may '.set' a symbol many times in the same assembly provided that the values given to the symbol are constants. Values that are based on expressions involving other symbols are allowed, but some targets may restrict this to only being done once per assembly. This is because those targets do not set the addresses of symbols at assembly time, but rather delay the assignment until a final link is performed. This allows the linker a chance to change the code in the files, changing the location of, and the relative distance between, various different symbols. If you '.set' a global symbol, the value stored in the object file is the last value stored into it." So this really should be fixed in clang: it is basic assembler syntax. Segher