Received: by 2002:a05:6358:16cc:b0:ea:6187:17c9 with SMTP id r12csp5935747rwl; Mon, 9 Jan 2023 01:44:39 -0800 (PST) X-Google-Smtp-Source: AMrXdXujVFmcwY5wPiPmmiQ273MHljNs/KRr0NagvrdsEjj5ViGARcdPfxz3626PrI45L8zcuQCS X-Received: by 2002:a17:906:260e:b0:7c1:9046:878a with SMTP id h14-20020a170906260e00b007c19046878amr55184241ejc.38.1673257479425; Mon, 09 Jan 2023 01:44:39 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673257479; cv=none; d=google.com; s=arc-20160816; b=dihwyRCPQaCkHDYQ+9+748zUfLUuIWVXMGVgYaJ/9K5mp7iNmiXdvnksu24E9DaqYw B5Yrphx4s2mVozhAvG7zUh6xjzM/Fo0XbxWtH4u4ALVSrydFs+AOBhOvq4hWeC1s7ahA sM2iKVTRmP/3tqVDalCwtRI22xWFxuav+R/LVlTJsDpi8QUvCEcP82WdV2VKOvSdmxoB ZX2cus++pyIks0X2O68GyfTbp0vhgVWZuzJ+VqxSQhxCt8yUbqHs7ugZ75QbFG4rm+ir Jp3ekhB55Tn4l8g+H3AZD87EYK5Fi/4AfsHFC94iEkw1WSI8VXzeMl2dEmHCo6xUw1fd /XkA== 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=kuekeZ6W9tl+DHXJA0hZtbNVAcyQWc7lGpbLOq6CNGQ=; b=GlaTQBsK15ib+RgyhXgBww3mzZ1nUFjhw5znf+b5860iqEZd/EWIbIC6/yP4J17SjC QZWNnp9OTbS2O3a0jBY/OZIh605KGgcxZXb0pBhrnlzR2ycCGdwGmtA5sb1Pq5rAJnyt nozUi5nUTrdiuii7pO2ea4a5DJjuuBVK9MaRvs8fI0sswZbgypyFqM8tXA5OczAaLm3b g442Z7NB/SNx6OnNkTaiAapJQdgzMVL0An7LrAGeSsApw5n5WmX8RJ1uBJVP5QBEIKx1 mVWMaRHMdNY5yyP4zvHbbS6qTJlRca3ZzKpEi9TfSPftB5SagFSkIr5w+P3Jjm7QS7o9 I/eQ== 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 ds6-20020a170907724600b0078cdba56108si9496960ejc.296.2023.01.09.01.44.26; Mon, 09 Jan 2023 01:44:39 -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 S236756AbjAIIoZ (ORCPT + 54 others); Mon, 9 Jan 2023 03:44:25 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51244 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236757AbjAIImj (ORCPT ); Mon, 9 Jan 2023 03:42:39 -0500 Received: from 1wt.eu (wtarreau.pck.nerim.net [62.212.114.60]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 7E9AD14026 for ; Mon, 9 Jan 2023 00:42:33 -0800 (PST) Received: (from willy@localhost) by pcw.home.local (8.15.2/8.15.2/Submit) id 3098gCBD027421; Mon, 9 Jan 2023 09:42:12 +0100 From: Willy Tarreau To: "Paul E. McKenney" Cc: linux-kernel@vger.kernel.org, Willy Tarreau Subject: [PATCH 02/22] tools/nolibc: enable support for thumb1 mode for ARM Date: Mon, 9 Jan 2023 09:41:48 +0100 Message-Id: <20230109084208.27355-3-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 Passing -mthumb to the kernel.org arm toolchain failed to build because it defaults to armv5 hence thumb1, which has a fairly limited instruction set compared to thumb2 enabled with armv7 that is much more complete. It's not very difficult to adjust the instructions to also build on thumb1, it only adds a total of 3 instructions, so it's worth doing it at least to ease use by casual testers. It was verified that the adjusted code now builds and works fine for armv5, thumb1, armv7 and thumb2, as long as frame pointers are not used. Signed-off-by: Willy Tarreau --- tools/include/nolibc/arch-arm.h | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/tools/include/nolibc/arch-arm.h b/tools/include/nolibc/arch-arm.h index 875b21975137..e4ba77b0310f 100644 --- a/tools/include/nolibc/arch-arm.h +++ b/tools/include/nolibc/arch-arm.h @@ -180,10 +180,16 @@ void __attribute__((weak,noreturn,optimize("omit-frame-pointer"))) _start(void) __asm__ volatile ( "pop {%r0}\n" // argc was in the stack "mov %r1, %sp\n" // argv = sp - "add %r2, %r1, %r0, lsl #2\n" // envp = argv + 4*argc ... - "add %r2, %r2, $4\n" // ... + 4 - "and %r3, %r1, $-8\n" // AAPCS : sp must be 8-byte aligned in the - "mov %sp, %r3\n" // callee, an bl doesn't push (lr=pc) + + "add %r2, %r0, $1\n" // envp = (argc + 1) ... + "lsl %r2, %r2, $2\n" // * 4 ... + "add %r2, %r2, %r1\n" // + argv + + "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) + "and %r3, %r3, %r1\n" // so we do sp = r1(=sp) & r3(=-8); + "mov %sp, %r3\n" // + "bl main\n" // main() returns the status code, we'll exit with it. "movs r7, $1\n" // NR_exit == 1 "svc $0x00\n" -- 2.17.5