From patchwork Thu Sep 15 19:30:54 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Max Filippov X-Patchwork-Id: 1678406 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=none (no SPF record) smtp.mailfrom=uclibc-ng.org (client-ip=89.238.66.15; helo=helium.openadk.org; envelope-from=devel-bounces@uclibc-ng.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=o6Ri+Nns; dkim-atps=neutral Received: from helium.openadk.org (helium.openadk.org [89.238.66.15]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4MT6lW72v5z1ynm for ; Fri, 16 Sep 2022 05:31:51 +1000 (AEST) Received: from helium.openadk.org (localhost [IPv6:::1]) by helium.openadk.org (Postfix) with ESMTP id 93F45352067E; Thu, 15 Sep 2022 21:31:43 +0200 (CEST) Authentication-Results: helium.openadk.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=o6Ri+Nns; dkim-atps=neutral Received: from mail-pj1-f47.google.com (mail-pj1-f47.google.com [209.85.216.47]) by helium.openadk.org (Postfix) with ESMTPS id 718113520194 for ; Thu, 15 Sep 2022 21:31:26 +0200 (CEST) Received: by mail-pj1-f47.google.com with SMTP id n23-20020a17090a091700b00202a51cc78bso17131839pjn.2 for ; Thu, 15 Sep 2022 12:31:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date; bh=Ltm1hyRhvMjKva1lvsJ1mGFjie21FSB/fnFeLJiX9O0=; b=o6Ri+Nns5tIFEoMPPvdBMX2GLcWGvLST+BZGg6EchMP9W2YmIrD7MLmz27nhZtTFS8 rIrQYuZf/DNew9RqblybpMMsFDN6GLFDvQsxbKTgaB4xtDf+UbcRRXh/eNR3qm8kzAMr QQkxczyty2+JfimROSKRGE8IxACjvfUJ6QzQpBnb8ablmLn1QwKNAQ/wZ/xUMvqX/bk3 qu/Rm2PSy1/c68/Kbtzo7chb/wrcWfH90Srl/o5d2FzfjIgDWHcKBMBjGi7MsX2B37NO hCmddlhJ8P/v5tjcaNvvji2IOOSg115Qzsb3dQwTqFCMrPuugBPyTqUBC6duEn4zwpc8 LUKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date; bh=Ltm1hyRhvMjKva1lvsJ1mGFjie21FSB/fnFeLJiX9O0=; b=Os2pDVmsJHIaXBx3OX9/RrKUZC+Rhh5oWmz8JXKjF/H577O2NRJ+mSmUC1t6WC1Amm +3DQ+Ykky8RA77NwQmr92OG1WV1uPW1LwNxgl2ZEfToaSbdNvvpC6OEbJcgQOXUriMO+ fNqchyqsjbKwBwe0T+8RszB+l5h0wYVFfs2Ry9Pu9VLMbabiYPt6vqzOwL8YZwSLCZfN bDvLSYqFrZCPv/Z6IA/TK2uQS5J+aW16P5+sDFab7HS+Qe/Vt7gYgeynEllk1ydukwg0 ElQ+Dyu8bPOEiIxr6qvpneqkWBHHdBCL7UgqZ7QaeTBWRDNOM6buUY35Fy0Z2bfFV+nz JuPQ== X-Gm-Message-State: ACrzQf3HhZ5O0QjnAvNYxLnt1/TcvxrQgtNNqNo/76ncG+VGq+qsA2Z5 /Jj03OIdWzkyF5RAbs4gYtAue1u44QIbbw== X-Google-Smtp-Source: AMsMyM6lu6lvNZBORNf/Bu+ntpKX8GrsZn1jSugD70FP0itn162sa3mc0mhGCnvhNq1Bcu8UBpbeww== X-Received: by 2002:a17:902:c40b:b0:178:e34:efa9 with SMTP id k11-20020a170902c40b00b001780e34efa9mr1093039plk.10.1663270282936; Thu, 15 Sep 2022 12:31:22 -0700 (PDT) Received: from octofox.metropolis (c-24-130-93-68.hsd1.ca.comcast.net. [24.130.93.68]) by smtp.gmail.com with ESMTPSA id n9-20020a170902e54900b00174be817124sm13418743plf.221.2022.09.15.12.31.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 Sep 2022 12:31:22 -0700 (PDT) From: Max Filippov To: devel@uclibc-ng.org Date: Thu, 15 Sep 2022 12:30:54 -0700 Message-Id: <20220915193054.2916840-6-jcmvbkbc@gmail.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220915193054.2916840-1-jcmvbkbc@gmail.com> References: <20220915193054.2916840-1-jcmvbkbc@gmail.com> MIME-Version: 1.0 Message-ID-Hash: LKZ7FGC25IKQSUAJCKTVGXQCTTAHUMOD X-Message-ID-Hash: LKZ7FGC25IKQSUAJCKTVGXQCTTAHUMOD X-MailFrom: jcmvbkbc@gmail.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: linted X-Mailman-Version: 3.3.3 Precedence: list Subject: [uclibc-ng-devel] [PATCH v2 5/5] xtensa: add static pie support List-Id: uClibc-ng Development Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Signed-off-by: Max Filippov --- extra/Configs/Config.in | 4 +++- ldso/ldso/xtensa/dl-startup.h | 2 ++ libc/misc/internals/reloc_static_pie.c | 2 +- libc/sysdeps/linux/xtensa/crt1.S | 27 ++++++++++++++++++++++++++ 4 files changed, 33 insertions(+), 2 deletions(-) diff --git a/extra/Configs/Config.in b/extra/Configs/Config.in index 43c04fd0a271..dd1beaadcee3 100644 --- a/extra/Configs/Config.in +++ b/extra/Configs/Config.in @@ -324,7 +324,9 @@ config DOPIC config STATIC_PIE bool "Add support for Static Position Independent Executables (PIE)" default n - depends on DOPIC && !UCLIBC_FORMAT_FDPIC_ELF && (TARGET_arm || TARGET_i386 || TARGET_x86_64 || TARGET_aarch64 || TARGET_mips) + depends on DOPIC && !UCLIBC_FORMAT_FDPIC_ELF && \ + (TARGET_arm || TARGET_i386 || TARGET_x86_64 || TARGET_aarch64 || \ + TARGET_mips || TARGET_xtensa) config ARCH_HAS_NO_SHARED bool diff --git a/ldso/ldso/xtensa/dl-startup.h b/ldso/ldso/xtensa/dl-startup.h index 439bdbd7a5e2..c9350c0f201e 100644 --- a/ldso/ldso/xtensa/dl-startup.h +++ b/ldso/ldso/xtensa/dl-startup.h @@ -7,6 +7,7 @@ * Parts taken from glibc/sysdeps/xtensa/dl-machine.h. */ +#ifndef L_rcrt1 __asm__ ( " .text\n" " .align 4\n" @@ -81,6 +82,7 @@ __asm__ ( " addi a5, a5, 8\n" " bnez a6, 3b\n" " j .Lfixup_stack_ret"); +#endif /* Get a pointer to the argv value. */ #define GET_ARGV(ARGVP, ARGS) ARGVP = (((unsigned long *) ARGS) + 1) diff --git a/libc/misc/internals/reloc_static_pie.c b/libc/misc/internals/reloc_static_pie.c index ce42cb9b30df..ab1923024c2b 100644 --- a/libc/misc/internals/reloc_static_pie.c +++ b/libc/misc/internals/reloc_static_pie.c @@ -21,7 +21,7 @@ #include #include -#ifdef __mips__ +#if defined(__mips__) || defined(__xtensa__) #include #endif diff --git a/libc/sysdeps/linux/xtensa/crt1.S b/libc/sysdeps/linux/xtensa/crt1.S index efbe264c03f0..3fa14ae583a9 100644 --- a/libc/sysdeps/linux/xtensa/crt1.S +++ b/libc/sysdeps/linux/xtensa/crt1.S @@ -76,9 +76,26 @@ .global _start .type _start, @function _start: +#ifdef L_rcrt1 + .begin no-transform + call0 1f +.Lret_addr: + .end no-transform + .align 4 +1: +#endif #if defined(__XTENSA_WINDOWED_ABI__) +#ifdef L_rcrt1 + movi a6, .Lret_addr + sub a6, a0, a6 + movi a0, 0 + movi a4, reloc_static_pie + add a4, a4, a6 + callx4 a4 +#else /* Clear a0 to obviously mark the outermost frame. */ movi a0, 0 +#endif /* Load up the user's main function. */ movi a6, main @@ -106,8 +123,18 @@ _start: movi a4, __uClibc_main callx4 a4 #elif defined(__XTENSA_CALL0_ABI__) +#ifdef L_rcrt1 + mov a12, a2 + movi a2, .Lret_addr + sub a2, a0, a2 + movi a0, reloc_static_pie + add a0, a0, a2 + callx0 a0 + mov a7, a12 +#else /* Setup the shared library termination function. */ mov a7, a2 +#endif /* Load up the user's main function. */ movi a2, main