Received: by 2002:a05:6358:16cc:b0:ea:6187:17c9 with SMTP id r12csp5919093rwl; Mon, 9 Jan 2023 01:27:56 -0800 (PST) X-Google-Smtp-Source: AMrXdXvFAq7cC2wkUkDNIwzVXsDIYWcbiAtdWZx97sVrdzLb/3xva1TkVK0PaAz9O0TIQs6CfxVG X-Received: by 2002:a17:907:7844:b0:7c0:eba2:f9dd with SMTP id lb4-20020a170907784400b007c0eba2f9ddmr53308211ejc.53.1673256475953; Mon, 09 Jan 2023 01:27:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673256475; cv=none; d=google.com; s=arc-20160816; b=AtESjDaDzW35vatJziF22xzP3Jbyx4mHEX7rsI719GpcQmnMQSom/Jl0hU7LNjq6Jc leYM01ZYoYTGaneMwx9osdnoti0CgHj1pAfAOedwDDKwoErR3OP+51XgWCRRyrwTbo9O 9AbzAix8bvUHXIcLYs6qLwlYjIqxEeP6aceETe7w74Gl4vZZH6TcCErGg63YFBjBxyXY VdRFbGeldV0OAamw3mn6maOF+M7QKVhKEPn9gAcnSVfl10+VHcSuSMOjKXRL0SA3/WvB chM2+Gg4anrDkL+aiAhZoNEareMA9n5nHiVMJ8ryyBRGx7ibAIkQqKO3URcr+fM5vjiJ oPeA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:references:in-reply-to:message-id:date:subject :cc:to:from; bh=2PakoP/R0gv6P5CG7WgyzC4RUZZWPwEw6lNssPPXIE0=; b=UsarsWUko9BTpmDJZGGBWzqsN4Jul1mpaDcT1T5cxh15Io/UBoDyFqVs0Spz4Du6I5 LlD2NNWrYj0x35zdvIsBaQG88r0tA4LgDDR85BMKr5EJiFdHj5Um4lYyAT5Y1WELlVVp ZW8TZcyeV8UJ+B6tRo80LHVzOLLlJ13nmKrNFq2+LATBGS4FpL/t5d9Ks8375XvUUswn 3/4HieksooBRMT+AdYumIWd0ON6TAAy+iLCQ/AzO6dJQTm5SXgKTK50cHczf7sQZhkSI FsOal2NIhXulnRMOXBWJuFH+vTIAt4WL6U9/txqtFDpY13Wn9/J7RSb/FDwhhZgq/oxs I6OQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id gt37-20020a1709072da500b0084d34979415si6763590ejc.326.2023.01.09.01.27.43; Mon, 09 Jan 2023 01:27:55 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236830AbjAIItq (ORCPT + 54 others); Mon, 9 Jan 2023 03:49:46 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59290 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236943AbjAIIsV (ORCPT ); Mon, 9 Jan 2023 03:48:21 -0500 Received: from 1wt.eu (wtarreau.pck.nerim.net [62.212.114.60]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id C43B5167DF for ; Mon, 9 Jan 2023 00:43:47 -0800 (PST) Received: (from willy@localhost) by pcw.home.local (8.15.2/8.15.2/Submit) id 3098gDS7027428; Mon, 9 Jan 2023 09:42:13 +0100 From: Willy Tarreau To: "Paul E. McKenney" Cc: linux-kernel@vger.kernel.org, Willy Tarreau Subject: [PATCH 09/22] tools/nolibc: export environ as a weak symbol on arm Date: Mon, 9 Jan 2023 09:41:55 +0100 Message-Id: <20230109084208.27355-10-w@1wt.eu> X-Mailer: git-send-email 2.17.5 In-Reply-To: <20230109084208.27355-1-w@1wt.eu> References: <20230109084208.27355-1-w@1wt.eu> X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_HELO_PASS, SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The environ is retrieved from the _start code and is easy to store at this moment. Let's declare the variable weak and store the value into it. By not being static it will be visible to all units. By being weak, if some programs already declared it, they will continue to be able to use it. This was tested in arm and thumb1 and thumb2 modes, and for each mode, both with environ inherited from _start and extracted from envp. Signed-off-by: Willy Tarreau --- tools/include/nolibc/arch-arm.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/tools/include/nolibc/arch-arm.h b/tools/include/nolibc/arch-arm.h index 48bd95492c87..79666b590e87 100644 --- a/tools/include/nolibc/arch-arm.h +++ b/tools/include/nolibc/arch-arm.h @@ -196,6 +196,8 @@ struct sys_stat_struct { _arg1; \ }) +char **environ __attribute__((weak)); + /* startup code */ void __attribute__((weak,noreturn,optimize("omit-frame-pointer"))) _start(void) { @@ -206,6 +208,8 @@ void __attribute__((weak,noreturn,optimize("omit-frame-pointer"))) _start(void) "add %r2, %r0, $1\n" // envp = (argc + 1) ... "lsl %r2, %r2, $2\n" // * 4 ... "add %r2, %r2, %r1\n" // + argv + "ldr %r3, 1f\n" // r3 = &environ (see below) + "str %r2, [r3]\n" // store envp into environ "mov %r3, $8\n" // AAPCS : sp must be 8-byte aligned in the "neg %r3, %r3\n" // callee, and bl doesn't push (lr=pc) @@ -215,7 +219,10 @@ void __attribute__((weak,noreturn,optimize("omit-frame-pointer"))) _start(void) "bl main\n" // main() returns the status code, we'll exit with it. "movs r7, $1\n" // NR_exit == 1 "svc $0x00\n" - ); + ".align 2\n" // below are the pointers to a few variables + "1:\n" + ".word environ\n" + ); __builtin_unreachable(); } -- 2.17.5