From patchwork Sat Mar 23 17:32:42 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergey Bugaev X-Patchwork-Id: 1915203 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=Un8cNQ0E; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=sourceware.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4V25v259lkz1yXr for ; Sun, 24 Mar 2024 04:35:26 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id E01C73858412 for ; Sat, 23 Mar 2024 17:35:23 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-lf1-x135.google.com (mail-lf1-x135.google.com [IPv6:2a00:1450:4864:20::135]) by sourceware.org (Postfix) with ESMTPS id 01A613858D28 for ; Sat, 23 Mar 2024 17:35:07 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 01A613858D28 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 01A613858D28 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::135 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215309; cv=none; b=RKMILHWtvyGUK2W3EweJGnZwSswl9uoeA1D3qs0BTB9+bTEfcQXuKhHNbeA/MbUSstcCZrMGZA6aNF6vbTglKfYS2WEkpg5wbonLMZch2qc9lmH3k7g5hS2S8v/OURBwC7DF9YtKmoLa5BVac3SMqNq18HUR/IW9X+iIhd7xu5E= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215309; c=relaxed/simple; bh=KNLGR0eiUWbqXrqukeGy3hAegNIod3CymT93i1hSpqo=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=Pq+XLye/rmGyNEUCqINDk4sWuXIpsP4PYHfCrE1JrPQge8keDEERmwyrhEeYCaYv5ag/XXkKLPfKDhjZ/Mlz1kwvCNoJsE1RI31F+hae2oz1RGWsJcAGcPDy5EuWDK1w0NNiI4JFyakjcmDGow835tOo+FdFY0JvGqjxI0CLHBY= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-lf1-x135.google.com with SMTP id 2adb3069b0e04-5148ea935b8so3606411e87.1 for ; Sat, 23 Mar 2024 10:35:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1711215305; x=1711820105; darn=sourceware.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=t1Iaii2YTOAQl6WcpzdKbl17JYVWmkT8kTWGwJlcu/s=; b=Un8cNQ0EedEqAJsLCiGRmud06vAr1SYRC9gB8sjaOHOFvRSOQKru01+Pjz9o21bgTC waHlDASPu4BPbPzG9QQwDRFD/SjUviehu6h+oijKqPNyrMYk3FOS1fMuCjwnxYI67oN/ OHNFzbhiVB5dxV8iheE0M6T25ED5LCfPYE4mqkYbmgjzjdcptK/iGiBGl3wK884vZCem rX2kG0etxGhlN5PZSeJO67yyCFw1YsC1DBVj9JvxF+X5Wk/5tgckGinVuqcAX1z/FBb7 3RgK7g6vXwwbp7j/CPwe+8/rXMlHCuXqJFPeef20MOfhlMKVwqMOS22Bg6/xlpakABYs B2vg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711215305; x=1711820105; 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:message-id:reply-to; bh=t1Iaii2YTOAQl6WcpzdKbl17JYVWmkT8kTWGwJlcu/s=; b=IvduP1xpdP/awExTFkQpxnTIwNoUQ1vvokiVVOmCQNWWa9h15mrsEuCSNdZd7B3peB qoPIEn1BEE9Vq4YsurijHhrgyiF5Gmq8rB66LAqDHO5aCyxbUHQcqlwzxpI1fZTuGWhK wQO+OlGEdz+6Y7Kk49E4/IFdb4PaDZYSHiyy5m/9pIBqHYD5kqZ5mwanAK1ONg9BWd5c 1OyxspYsF4zGJdTcyucdIvLmEgOWxxFQHqRugD+HBZ6N1x+Ve699RuGuN4BCgTnXdW2o CvAIBV5Id5fpISHpakvQax3hJelFULo4zNJlQ7ZipcqmFbPyWcyvnVKcvpS+nUdGBpBt 3jlw== X-Gm-Message-State: AOJu0YynmxV/UtECEJO2Y96tW/XyPrYv+sEgNruRXjdbMIz3pQK6AqC1 o/b40lksPqNitWMZa/oGFYy90FNV0WweLiBJidTWbmG5cXtOJT+pD8YlXKkA X-Google-Smtp-Source: AGHT+IFe14bjcIHibXuwb9Ws1pi7+ZyCdg/d7ENwCgKoXXBv/8SRlunzHXZiD9gnl660/NFy9QYnNw== X-Received: by 2002:ac2:5fed:0:b0:513:d4be:7e40 with SMTP id s13-20020ac25fed000000b00513d4be7e40mr1744108lfg.23.1711215304706; Sat, 23 Mar 2024 10:35:04 -0700 (PDT) Received: from surface-pro-6.. (79-139-171-253.dynamic.spd-mgts.ru. [79.139.171.253]) by smtp.gmail.com with ESMTPSA id g20-20020ac25394000000b00513973dee6fsm361290lfh.150.2024.03.23.10.35.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 23 Mar 2024 10:35:04 -0700 (PDT) From: Sergey Bugaev To: libc-alpha@sourceware.org, bug-hurd@gnu.org Cc: Maxim Kuvyrkov , Luca Subject: [PATCH v2 01/20] hurd: Move internal functions to internal header Date: Sat, 23 Mar 2024 20:32:42 +0300 Message-ID: <20240323173301.151066-2-bugaevc@gmail.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240323173301.151066-1-bugaevc@gmail.com> References: <20240323173301.151066-1-bugaevc@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-9.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org Move _hurd_self_sigstate (), _hurd_critical_section_lock (), and _hurd_critical_section_unlock () inline implementations (that were already guarded by #if defined _LIBC) to the internal version of the header. While at it, add to the includes, and use __LIBC_NO_TLS () unconditionally. Signed-off-by: Sergey Bugaev --- This is the remaining part of the "hurd: Add some missing includes" patch from v1, redone in a different way, as discussed last time. The hurd/check-installed-headers-c test seems to pass for me, but please check on your end too. hurd/hurd/signal.h | 87 ------------------------------ sysdeps/hurd/include/hurd/signal.h | 78 +++++++++++++++++++++++++++ 2 files changed, 78 insertions(+), 87 deletions(-) diff --git a/hurd/hurd/signal.h b/hurd/hurd/signal.h index 6bc7103b..5d116fb2 100644 --- a/hurd/hurd/signal.h +++ b/hurd/hurd/signal.h @@ -40,11 +40,6 @@ #include /* For `jmp_buf'. */ #include struct hurd_signal_preemptor; /* */ -#if defined __USE_EXTERN_INLINES && defined _LIBC -# if IS_IN (libc) || IS_IN (libpthread) -# include -# endif -#endif /* Full details of a signal. */ @@ -157,33 +152,6 @@ extern void _hurd_sigstate_unlock (struct hurd_sigstate *ss); /* Used by libpthread to remove stale sigstate structures. */ extern void _hurd_sigstate_delete (thread_t thread); -#ifndef _HURD_SIGNAL_H_EXTERN_INLINE -#define _HURD_SIGNAL_H_EXTERN_INLINE __extern_inline -#endif - -#if defined __USE_EXTERN_INLINES && defined _LIBC -# if IS_IN (libc) -_HURD_SIGNAL_H_EXTERN_INLINE struct hurd_sigstate * -_hurd_self_sigstate (void) -{ - struct hurd_sigstate *ss = THREAD_GETMEM (THREAD_SELF, _hurd_sigstate); - if (__glibc_unlikely (ss == NULL)) - { - thread_t self = __mach_thread_self (); - - /* The thread variable is unset; this must be the first time we've - asked for it. In this case, the critical section flag cannot - possible already be set. Look up our sigstate structure the slow - way. */ - ss = _hurd_thread_sigstate (self); - THREAD_SETMEM (THREAD_SELF, _hurd_sigstate, ss); - __mach_port_deallocate (__mach_task_self (), self); - } - return ss; -} -# endif -#endif - struct machine_thread_all_state; extern mach_port_t _hurdsig_abort_rpcs (struct hurd_sigstate *ss, int signo, int sigthread, @@ -215,63 +183,8 @@ extern int _hurd_core_limit; avoid unexpectingly exposing EINTR to the application. */ extern void *_hurd_critical_section_lock (void); - -#if defined __USE_EXTERN_INLINES && defined _LIBC -# if IS_IN (libc) -_HURD_SIGNAL_H_EXTERN_INLINE void * -_hurd_critical_section_lock (void) -{ - struct hurd_sigstate *ss; - -#ifdef __LIBC_NO_TLS - if (__LIBC_NO_TLS ()) - /* TLS is currently initializing, no need to enter critical section. */ - return NULL; -#endif - - ss = _hurd_self_sigstate (); - - if (! __spin_try_lock (&ss->critical_section_lock)) - /* We are already in a critical section, so do nothing. */ - return NULL; - - /* With the critical section lock held no signal handler will run. - Return our sigstate pointer; this will be passed to - _hurd_critical_section_unlock to unlock it. */ - return ss; -} -# endif -#endif - extern void _hurd_critical_section_unlock (void *our_lock); -#if defined __USE_EXTERN_INLINES && defined _LIBC -# if IS_IN (libc) -_HURD_SIGNAL_H_EXTERN_INLINE void -_hurd_critical_section_unlock (void *our_lock) -{ - if (our_lock == NULL) - /* The critical section lock was held when we began. Do nothing. */ - return; - else - { - /* It was us who acquired the critical section lock. Unlock it. */ - struct hurd_sigstate *ss = (struct hurd_sigstate *) our_lock; - sigset_t pending; - _hurd_sigstate_lock (ss); - __spin_unlock (&ss->critical_section_lock); - pending = _hurd_sigstate_pending (ss) & ~ss->blocked; - _hurd_sigstate_unlock (ss); - if (__glibc_unlikely (!__sigisemptyset (&pending))) - /* There are unblocked signals pending, which weren't - delivered because we were in the critical section. - Tell the signal thread to deliver them now. */ - __msg_sig_post (_hurd_msgport, 0, 0, __mach_task_self ()); - } -} -# endif -#endif - /* Convenient macros for simple uses of critical sections. These two must be used as a pair at the same C scoping level. */ diff --git a/sysdeps/hurd/include/hurd/signal.h b/sysdeps/hurd/include/hurd/signal.h index 1dc8a1f3..fab8d1b6 100644 --- a/sysdeps/hurd/include/hurd/signal.h +++ b/sysdeps/hurd/include/hurd/signal.h @@ -9,6 +9,84 @@ libc_hidden_proto (_hurd_self_sigstate) #include_next #ifndef _ISOMAC + +#if defined __USE_EXTERN_INLINES +# if IS_IN (libc) || IS_IN (libpthread) +# include +# include +# endif +#endif + +#ifndef _HURD_SIGNAL_H_EXTERN_INLINE +#define _HURD_SIGNAL_H_EXTERN_INLINE __extern_inline +#endif + +#if defined __USE_EXTERN_INLINES && IS_IN (libc) +_HURD_SIGNAL_H_EXTERN_INLINE struct hurd_sigstate * +_hurd_self_sigstate (void) +{ + struct hurd_sigstate *ss = THREAD_GETMEM (THREAD_SELF, _hurd_sigstate); + if (__glibc_unlikely (ss == NULL)) + { + thread_t self = __mach_thread_self (); + + /* The thread variable is unset; this must be the first time we've + asked for it. In this case, the critical section flag cannot + possible already be set. Look up our sigstate structure the slow + way. */ + ss = _hurd_thread_sigstate (self); + THREAD_SETMEM (THREAD_SELF, _hurd_sigstate, ss); + __mach_port_deallocate (__mach_task_self (), self); + } + return ss; +} + +_HURD_SIGNAL_H_EXTERN_INLINE void * +_hurd_critical_section_lock (void) +{ + struct hurd_sigstate *ss; + + if (__LIBC_NO_TLS ()) + /* TLS is currently initializing, no need to enter critical section. */ + return NULL; + + ss = _hurd_self_sigstate (); + + if (! __spin_try_lock (&ss->critical_section_lock)) + /* We are already in a critical section, so do nothing. */ + return NULL; + + /* With the critical section lock held no signal handler will run. + Return our sigstate pointer; this will be passed to + _hurd_critical_section_unlock to unlock it. */ + return ss; +} + +_HURD_SIGNAL_H_EXTERN_INLINE void +_hurd_critical_section_unlock (void *our_lock) +{ + if (our_lock == NULL) + /* The critical section lock was held when we began. Do nothing. */ + return; + else + { + /* It was us who acquired the critical section lock. Unlock it. */ + struct hurd_sigstate *ss = (struct hurd_sigstate *) our_lock; + sigset_t pending; + _hurd_sigstate_lock (ss); + __spin_unlock (&ss->critical_section_lock); + pending = _hurd_sigstate_pending (ss) & ~ss->blocked; + _hurd_sigstate_unlock (ss); + if (__glibc_unlikely (!__sigisemptyset (&pending))) + /* There are unblocked signals pending, which weren't + delivered because we were in the critical section. + Tell the signal thread to deliver them now. */ + __msg_sig_post (_hurd_msgport, 0, 0, __mach_task_self ()); + } +} +#endif /* defined __USE_EXTERN_INLINES && IS_IN (libc) */ + + libc_hidden_proto (_hurd_exception2signal) libc_hidden_proto (_hurd_intr_rpc_mach_msg) libc_hidden_proto (_hurd_thread_sigstate) From patchwork Sat Mar 23 17:32:43 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergey Bugaev X-Patchwork-Id: 1915205 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=ciPv629Z; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=sourceware.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4V25vR3LJbz1yXr for ; Sun, 24 Mar 2024 04:35:47 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 673C0385828B for ; Sat, 23 Mar 2024 17:35:45 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-lf1-x133.google.com (mail-lf1-x133.google.com [IPv6:2a00:1450:4864:20::133]) by sourceware.org (Postfix) with ESMTPS id 9E18C3858D38 for ; Sat, 23 Mar 2024 17:35:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 9E18C3858D38 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 9E18C3858D38 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::133 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215311; cv=none; b=xUPYQ+zVavcEB5h6YbfxInjLIrgLz1zqhnBMRyZug0urITmXONJRx7yG3W+qNDH4p4KJEGbkmuOuthgJiUALRRMMxPNJQAGiCXUqpFJ9cKIQJB9OxMvL8UwLkwomxGHoABVZSeTXz+M9Z41eKl4fAMvC1qkCKIYM5MbO6BJ62yU= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215311; c=relaxed/simple; bh=QLm2gkFJkUHUSpODDW4W2hXFVO5ktCW5m1/+v8zCsKk=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=vUk8pnPCd/ek8tV/++4LWadvVhwKrAi2GFsnP4g1bNObl2GNaWCMGCYiuecfhWjX3SnsHNsUMKqjqRYWGAaY6g+Wgims6mzbi3c2cPMQ0QostMgPU8I6UqCXuV9qz9uxnrpNW24nQoxIvJHssWgWU5JgTYlk+k5YHpGgsUvABY4= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-lf1-x133.google.com with SMTP id 2adb3069b0e04-513d4559fb4so4058829e87.3 for ; Sat, 23 Mar 2024 10:35:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1711215308; x=1711820108; darn=sourceware.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=JFEeh4wxyCQEooqv37+/ruhSLJ/BYeXTKxuq5I80Ufc=; b=ciPv629ZQDzbUR3Q1AloZHTZpkpmQdl7fY0oBZ7lrF4MNWmgpOBS/Agcmjag3ly4DH mtK6ZtK65oGgQ1/UoTICqNbgBMM6Kztcwatqen4sE6IziDHC5d+CI80OYIGgAzp3Hwfw YZOeR/8N6UJccoR2qkSCC7Exk02CfqBkGHUzdp2G3Yl3+PJ9yHeZ1mTi2m0JxSMOjl7+ B4Wh0dmiDVK44C0zZFm+3/VA6eBDkKssVGf9i6fo7SE+ioxJQGcDoruB6iX8aOTcdiuM 8RLrRJWfvqw22GK1UZrSQz19mX7yrqsUx1bMyTXr889gAGP6C53syBGqrI5fN5X+p7RO QT3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711215308; x=1711820108; 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:message-id:reply-to; bh=JFEeh4wxyCQEooqv37+/ruhSLJ/BYeXTKxuq5I80Ufc=; b=UGDKjqMQ6LUOBMm2ul5qwjslr9wVqItIofwT8EUcYCMoAhj7Mf5sEC1AJo63OKpsS4 qeU4deaYMgBH/glOXMXew+54RGcSvNj1lMHHbNMSTq81Z0IbXD/9gz/LEAnL09wNRIBk qZOmjyTtn7VTgIkyyAW8xyDIozhi4vihuAbUYUWfGR4hw8P3YRSzYCD/GNlsiO5n7Zmy wTl0+Qf01G4HIIWg17PH/5apRAqZPAjPtunEbpxzS4SD11f3krnrohD8Zzch8+kE1wWz lVAolT+8Eg0uJvTp4rWUocflWGIzVDq/8j5Ki3+l71Uh/n6rG2NgpEx/i+Z8PRD26Alc vN0g== X-Gm-Message-State: AOJu0YxgHPM2qfHMghpUeFAw2j+lE9zxKV/lC5uah2qVidp2pOlh3785 hfH1+zrRM3kXVMLOhNq0hwcQsv+rnIaA2FcsDXeWtx8luBAxeLul5S84TDO5 X-Google-Smtp-Source: AGHT+IHcAINUAaBytMDKgGBGKkB0T2bMfeSu8323F+HqdY2f70X38i1BNKpuryi90jIlLQsebIq1wA== X-Received: by 2002:a19:c518:0:b0:515:9789:a705 with SMTP id w24-20020a19c518000000b005159789a705mr1649838lfe.15.1711215305615; Sat, 23 Mar 2024 10:35:05 -0700 (PDT) Received: from surface-pro-6.. (79-139-171-253.dynamic.spd-mgts.ru. [79.139.171.253]) by smtp.gmail.com with ESMTPSA id g20-20020ac25394000000b00513973dee6fsm361290lfh.150.2024.03.23.10.35.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 23 Mar 2024 10:35:05 -0700 (PDT) From: Sergey Bugaev To: libc-alpha@sourceware.org, bug-hurd@gnu.org Cc: Maxim Kuvyrkov , Luca Subject: [PATCH v2 02/20] hurd: Stop relying on VM_MAX_ADDRESS Date: Sat, 23 Mar 2024 20:32:43 +0300 Message-ID: <20240323173301.151066-3-bugaevc@gmail.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240323173301.151066-1-bugaevc@gmail.com> References: <20240323173301.151066-1-bugaevc@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-9.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org We'd like to avoid committing to a specific size of virtual address space (i.e. the value of VM_AARCH64_T0SZ) on AArch64. While the current version of GNU Mach still exports VM_MAX_ADDRESS for compatibility, we should try to avoid relying on it when we can. This piece of logic in _hurdsig_getenv () doesn't actually care about the size of user- accessible virtual address space, it just wants to preempt faults on any addresses starting from the value of the P pointer and above. So, use (unsigned long int) -1 instead of VM_MAX_ADDRESS. While at it, change the casts to (unsigned long int) and not just (long int), since the type of struct hurd_signal_preemptor.{first,last} is unsigned long int. Signed-off-by: Sergey Bugaev --- hurd/hurdsig.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hurd/hurdsig.c b/hurd/hurdsig.c index 882a0347..8b1928d1 100644 --- a/hurd/hurdsig.c +++ b/hurd/hurdsig.c @@ -1658,8 +1658,8 @@ _hurdsig_getenv (const char *variable) while (*ep) { const char *p = *ep; - _hurdsig_fault_preemptor.first = (long int) p; - _hurdsig_fault_preemptor.last = VM_MAX_ADDRESS; + _hurdsig_fault_preemptor.first = (unsigned long int) p; + _hurdsig_fault_preemptor.last = (unsigned long int) -1; if (! strncmp (p, variable, len) && p[len] == '=') { size_t valuelen; @@ -1671,8 +1671,8 @@ _hurdsig_getenv (const char *variable) memcpy (value, p, valuelen); break; } - _hurdsig_fault_preemptor.first = (long int) ++ep; - _hurdsig_fault_preemptor.last = (long int) (ep + 1); + _hurdsig_fault_preemptor.first = (unsigned long int) ++ep; + _hurdsig_fault_preemptor.last = (unsigned long int) (ep + 1); } _hurdsig_end_catch_fault (); return value; From patchwork Sat Mar 23 17:32:44 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergey Bugaev X-Patchwork-Id: 1915206 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=R1ayKYK4; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=sourceware.org (client-ip=8.43.85.97; helo=server2.sourceware.org; envelope-from=libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4V25vs6pHSz1yXr for ; Sun, 24 Mar 2024 04:36:09 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id B207E3858C32 for ; Sat, 23 Mar 2024 17:36:07 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-lf1-x12a.google.com (mail-lf1-x12a.google.com [IPv6:2a00:1450:4864:20::12a]) by sourceware.org (Postfix) with ESMTPS id 81B103858C42 for ; Sat, 23 Mar 2024 17:35:10 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 81B103858C42 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 81B103858C42 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::12a ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215312; cv=none; b=Z4fA8CjWLn77JXgi36NLaSQ2vg3hFVXzcSvr0fY9CDTS9hFFUdNsjwElsv17MtWFLzRYWDIMFv2kTb//MnUA23wIbXDLNjGPooUDatPbBRaFFMKL5pTwDJN9UABxkSxreQEuRg6N8xWNw4jTZ7m0pCMxMBUB7eaJDMY6fM8gopg= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215312; c=relaxed/simple; bh=z6133yTPiW6WZxsTfatam9keZQQngkRn9+l8Tr0HGSg=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=pBT/Y/sEaK6i5fuliGeyi4rrTEMhGbaZP5ajCCTf/Jq6Q1b5PNWd/AGFQACPxKjLpfaZqZs/l4h0wZmWsfmeTNDa1pWa77b254fwQGqXpPoCWci+L0AOhdPymAoMVNTRmRb72mvvSHI7fpEEKGMBgjJv/a2nrsiTxi177AcZohg= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-lf1-x12a.google.com with SMTP id 2adb3069b0e04-513d23be0b6so3743322e87.0 for ; Sat, 23 Mar 2024 10:35:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1711215309; x=1711820109; darn=sourceware.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=rZQxVyPaR5GUzBbW7tD6O23ZGDM+bg/aT0xfi+eFmQQ=; b=R1ayKYK4aLg0KgVhxM4+YMuk7HhKEwC8BJ1yiLwEOcWnW4O4zHKfR+IejN94WItZrO Upwqy4qvk7SUToeY7YARG6siHyXOzuHywxa8ZEMyWwlsoFp/dE2ieZdiDpRWuf++hLWh NdM6/+JmzKkjIg416r+hg9Kw0uR8UL8463w1d0ugCzSgvwf9xYyVSUyFNoo6i5zTqnlG cj/xwfPv/PmhCMQDRK02OqXKSybz/PyK9vK4PriMJIQ20zKIGoF/N8iKYXx0/DYKORUo dOR4laVMPMkvTUx0Yf+LmL7kHccBrLIpTH8/1Tz/ksDJBqdEDQTKIYqJx2iKSIr6qEun 6o3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711215309; x=1711820109; 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:message-id:reply-to; bh=rZQxVyPaR5GUzBbW7tD6O23ZGDM+bg/aT0xfi+eFmQQ=; b=L0s7+Xzf2fQ6sCU0hpz2f++hU+7Iaw/6rDUL6uRoKAs/nRomGaKirotePZnsOvzT4v xhV6puw8Wxvdln3iXJWpwjpChTb+R8891icUx7vfroB5tqVaUMcYQrkZ2Rc0k/s/5O0J bCTzzgB2W0IwOIlc+AjCB1bJAobfKz9R93KwaK14u/ba0fPNa+p2H2iC5OWnPfEtSJF6 miJaCJuHY16GffXWhhmnNjlv7UlMhA/wonSbil7sU9PsKJMKDdMaddLjyh53eBI8sz9X WJA3u5G7+FXzyS6Ktrgvd+oIQ+FuXWHa4Wa2hUa+9YzFUOe6rjBwIca3nSSOEmkyWS/R o+5Q== X-Gm-Message-State: AOJu0YwyqXvyzvuAHaowHWSyK2uWxlF+vUPJYPr3XUU6QdHsw5wdsLnp boZMF1KrLT5VbZr2qrFlvStYDRa1qyXoI6rgqTbRPV4bj+9ixdidJvWHKxBc X-Google-Smtp-Source: AGHT+IEFIwSaho5uZvS7oXj528u0xW2pCAQkjFm5AikLb0lIomj8gTQ5dCMiCls3/IPFCEM70nu1LA== X-Received: by 2002:ac2:514a:0:b0:514:b7ff:95d9 with SMTP id q10-20020ac2514a000000b00514b7ff95d9mr1793788lfd.22.1711215308523; Sat, 23 Mar 2024 10:35:08 -0700 (PDT) Received: from surface-pro-6.. (79-139-171-253.dynamic.spd-mgts.ru. [79.139.171.253]) by smtp.gmail.com with ESMTPSA id g20-20020ac25394000000b00513973dee6fsm361290lfh.150.2024.03.23.10.35.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 23 Mar 2024 10:35:08 -0700 (PDT) From: Sergey Bugaev To: libc-alpha@sourceware.org, bug-hurd@gnu.org Cc: Maxim Kuvyrkov , Luca Subject: [PATCH v2 03/20] Allow glibc to be compiled without EXEC_PAGESIZE Date: Sat, 23 Mar 2024 20:32:44 +0300 Message-ID: <20240323173301.151066-4-bugaevc@gmail.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240323173301.151066-1-bugaevc@gmail.com> References: <20240323173301.151066-1-bugaevc@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-9.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_SHORT, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org We would like to avoid statically defining any specific page size on aarch64-gnu, and instead make sure that everything uses the dynamic page size, available via vm_page_size and GLRO(dl_pagesize). There are currently a few places in glibc that require EXEC_PAGESIZE to be defined. Per Roland's suggestion [0], drop the static GLRO(dl_pagesize) initializers (for now, only if EXEC_PAGESIZE is not defined), and don't require EXEC_PAGESIZE definition for libio to enable mmap usage. [0]: https://mail.gnu.org/archive/html/bug-hurd/2011-10/msg00035.html Signed-off-by: Sergey Bugaev --- Same patch as last time. At least in the Hurd port, GLRO(dl_pagesize) is one of the very things to get initialized, so this shouldn't cause any initialization order issues. But, if it's really undesirable for EXEC_PAGESIZE to be dropped, we could of course also define EXEC_PAGESIZE to some large value (16K?) on aarch64-gnu, provided that nothing actually tries to use it for anything. PAGE_SIZE is 4k in the current AArch64 GNU Mach, for what it's worth, but this is intended to eventually be build-time configurable. elf/dl-support.c | 6 +++++- elf/rtld.c | 2 ++ libio/libioP.h | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/elf/dl-support.c b/elf/dl-support.c index 451932dd..cb0bbd21 100644 --- a/elf/dl-support.c +++ b/elf/dl-support.c @@ -135,7 +135,11 @@ void *_dl_random; #include #include -size_t _dl_pagesize = EXEC_PAGESIZE; +size_t _dl_pagesize +#ifdef EXEC_PAGESIZE + = EXEC_PAGESIZE +#endif +; size_t _dl_minsigstacksize = CONSTANT_MINSIGSTKSZ; diff --git a/elf/rtld.c b/elf/rtld.c index ac4bb236..18d73f19 100644 --- a/elf/rtld.c +++ b/elf/rtld.c @@ -358,7 +358,9 @@ struct rtld_global_ro _rtld_global_ro attribute_relro = ._dl_debug_fd = STDERR_FILENO, ._dl_lazy = 1, ._dl_fpu_control = _FPU_DEFAULT, +#ifdef EXEC_PAGESIZE ._dl_pagesize = EXEC_PAGESIZE, +#endif ._dl_inhibit_cache = 0, ._dl_profile_output = "/var/tmp", diff --git a/libio/libioP.h b/libio/libioP.h index 1af287b1..1a7f547e 100644 --- a/libio/libioP.h +++ b/libio/libioP.h @@ -852,7 +852,7 @@ extern off64_t _IO_seekpos_unlocked (FILE *, off64_t, int) # define MAP_ANONYMOUS MAP_ANON # endif -# if !defined(MAP_ANONYMOUS) || !defined(EXEC_PAGESIZE) +# if !defined(MAP_ANONYMOUS) # undef _G_HAVE_MMAP # define _G_HAVE_MMAP 0 # endif From patchwork Sat Mar 23 17:32:45 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergey Bugaev X-Patchwork-Id: 1915207 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=QKaZZ+Ot; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=sourceware.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4V25wG57gMz1yXr for ; Sun, 24 Mar 2024 04:36:30 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id E0AA03858430 for ; Sat, 23 Mar 2024 17:36:26 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-lf1-x131.google.com (mail-lf1-x131.google.com [IPv6:2a00:1450:4864:20::131]) by sourceware.org (Postfix) with ESMTPS id C04A13858D39 for ; Sat, 23 Mar 2024 17:35:11 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C04A13858D39 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org C04A13858D39 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::131 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215313; cv=none; b=UAFMPWwI0XM2sCdZvVyyTxTFjy5srozcfoOG9z2d4OPMcjvh5i1UEEemFIkajAeh8/iUx/pb2U9G3B9AGAnXQuESRCvzbWIdjYVgiLskiDtLM6+ZaiRqI91tmTm5ufrIGmJhGoct+6NMOgbEDX6/BGfNetCSwLh+XfVzRQnAKHs= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215313; c=relaxed/simple; bh=ua2wrkWzr0DgDlTg/wgwK5vGhR9205yQahEdFrp+Ve0=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=Ie88M4b9fkSPkFTcY5k8v7BzMdZcsL1XtDb/bNSz3jijUW8BpBx2P5FF2KA7b7uR7NaCfCGNNujIMMysKb49/akSQysaVfW5Vg5THZa5s/KVVwzqKWjBFjaSG3Mip0V54sTwtpGheKgF830P5eilTiN7TjnvM/XnR+72iS28Rcg= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-lf1-x131.google.com with SMTP id 2adb3069b0e04-513e6777af4so5750269e87.2 for ; Sat, 23 Mar 2024 10:35:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1711215310; x=1711820110; darn=sourceware.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Tg6zA1YDwVH8kmndOT/FzNmiZJsApfw7Akk/QmBE5S4=; b=QKaZZ+Otlw03dX+Pa2c8USGwvWW+abJr5ssT8nyEoNfOT4tFJy04i/MNJ9I8CeLUgx sLIeVsYZV9G5Y2iEzdO5eZR4erObkuZ9mvlX5BfWalvGphZ8ofCopCiublEmkB5Np8Mi KLjRvwzb8lgBOR8WdHQNyUPSvNQFE0Unm+I1IFPyg4ZZi9Y6UaywPJK1L9imO0l4opVh 0Tz9Q32zWTpcPHnYdIeiBmMrfoWpwiLa8TU22bHaQ34ozxNiie3Ll6vqnumAQGkEq2zm VbOhfoTLk+Y3eVtxJ5KlyI5TOdrraJozrPHveDKi3fKMOJq2ZsdSx1L1A9pBojn8pQ6t H7dw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711215310; x=1711820110; 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:message-id:reply-to; bh=Tg6zA1YDwVH8kmndOT/FzNmiZJsApfw7Akk/QmBE5S4=; b=upsURIuYLgnv0IJ54S8cy/4ojXOHCKg+cyzKK9NOOpRycv9klt3PctWjAZxBEopeG5 ztE05/PJv7dp8TS9ZYmj8Jl/BLgMWsC3xMvUshmvDzL3Xm+wk9v9LzgT+d3s0jAM/NZL r0MovflA6B97KLBmUUdU+G6VVL8Vql1+4eHJrwV96qHLHyN2K24Gv/dxTr0Sm9esAPW4 BccJ3xUlQHqBsfkppHgUpKNxj2ttGtSz0l9oyXundNvvGODDPFnpGkDod4hIg//+19gR v7iHf/s8IuK/5rfTZLtuEDtrZyA+J424HSjtBxUY1ECruYYBvtITu7iU/O6wO2xDauEa joPw== X-Gm-Message-State: AOJu0YwwWgaoRjbzjIZBL/Emnu74V2cLK7Yrvz20dUOu05zmmuNbkLd+ u3NpCHLMYH3l4v7z2AhYUrEK61yrGf66cBHxajKbMiEW1KCqxfT6bfSAmtgq X-Google-Smtp-Source: AGHT+IHYLGpUg9r7OrgHCG2q+pnquh/BwBSRUsszgjBtkspdYqA0VesB8TQ6Q+flwFbguXdSmilvRQ== X-Received: by 2002:a05:6512:3106:b0:513:e7cc:97fc with SMTP id n6-20020a056512310600b00513e7cc97fcmr2049650lfb.49.1711215309848; Sat, 23 Mar 2024 10:35:09 -0700 (PDT) Received: from surface-pro-6.. (79-139-171-253.dynamic.spd-mgts.ru. [79.139.171.253]) by smtp.gmail.com with ESMTPSA id g20-20020ac25394000000b00513973dee6fsm361290lfh.150.2024.03.23.10.35.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 23 Mar 2024 10:35:09 -0700 (PDT) From: Sergey Bugaev To: libc-alpha@sourceware.org, bug-hurd@gnu.org Cc: Maxim Kuvyrkov , Luca Subject: [PATCH v2 04/20] hurd: Disable Prefer_MAP_32BIT_EXEC on non-x86_64 for now Date: Sat, 23 Mar 2024 20:32:45 +0300 Message-ID: <20240323173301.151066-5-bugaevc@gmail.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240323173301.151066-1-bugaevc@gmail.com> References: <20240323173301.151066-1-bugaevc@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-9.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org While we could support it on any architecture, the tunable is currently only defined on x86_64. Signed-off-by: Sergey Bugaev --- sysdeps/mach/hurd/dl-sysdep.c | 2 +- sysdeps/mach/hurd/mmap.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sysdeps/mach/hurd/dl-sysdep.c b/sysdeps/mach/hurd/dl-sysdep.c index 43129a1e..6ba00e41 100644 --- a/sysdeps/mach/hurd/dl-sysdep.c +++ b/sysdeps/mach/hurd/dl-sysdep.c @@ -457,7 +457,7 @@ __mmap (void *addr, size_t len, int prot, int flags, int fd, off_t offset) if (prot & PROT_EXEC) vmprot |= VM_PROT_EXECUTE; -#ifdef __LP64__ +#ifdef __x86_64__ if ((addr == NULL) && (prot & PROT_EXEC) && HAS_ARCH_FEATURE (Prefer_MAP_32BIT_EXEC)) flags |= MAP_32BIT; diff --git a/sysdeps/mach/hurd/mmap.c b/sysdeps/mach/hurd/mmap.c index 7b945610..30e369f0 100644 --- a/sysdeps/mach/hurd/mmap.c +++ b/sysdeps/mach/hurd/mmap.c @@ -60,7 +60,7 @@ __mmap (void *addr, size_t len, int prot, int flags, int fd, off_t offset) copy = ! (flags & MAP_SHARED); anywhere = ! (flags & MAP_FIXED); -#ifdef __LP64__ +#ifdef __x86_64__ if ((addr == NULL) && (prot & PROT_EXEC) && HAS_ARCH_FEATURE (Prefer_MAP_32BIT_EXEC)) flags |= MAP_32BIT; From patchwork Sat Mar 23 17:32:46 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergey Bugaev X-Patchwork-Id: 1915209 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=b0yR8Z6c; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=sourceware.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4V25wn4S6jz1yXr for ; Sun, 24 Mar 2024 04:36:57 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 96729385828E for ; Sat, 23 Mar 2024 17:36:55 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-lf1-x12b.google.com (mail-lf1-x12b.google.com [IPv6:2a00:1450:4864:20::12b]) by sourceware.org (Postfix) with ESMTPS id AE26C3858429 for ; Sat, 23 Mar 2024 17:35:14 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org AE26C3858429 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org AE26C3858429 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::12b ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215316; cv=none; b=tzurAyuvv3zu59czzTdvmN6ZWxioaek2Mc58GUG5ldk4fSbT3e6b8w9MKcurkGAF9xF7OLeUsCXIGsMT4ebpC1qhKc8T7zjqFrDt6RGA+wOj9ne+i5ZQVTzYInx87Co5jfdbHAnzjLytnnqoUUPO3L86XItuKVRXh2RZrXTnqCg= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215316; c=relaxed/simple; bh=NUdb8eCiFmEiPxKcMk+jeEv674Nbx5P0y+7tUxlPK+I=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=RZiLZlFIA7N0NtqgUYk+tRBVxnfueOWbsXZPEXHX0GjbenEdLqy+Mx7+IVjm1eBTbZy1eAgM8riFVZw/ijbUZO0uuw8NpgU4La8nhH0uwQUxYtQQYzW8hJ1VThH8elf1OXfklRCTfP177YWk+AqFO/3VyMNuebLXnLVxRF0N0cY= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-lf1-x12b.google.com with SMTP id 2adb3069b0e04-512f54fc2dbso2697186e87.1 for ; Sat, 23 Mar 2024 10:35:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1711215313; x=1711820113; darn=sourceware.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=1D7i6YQs5mgBRIBxoPVveHcwavxxNFlKTyxxrR6T4oM=; b=b0yR8Z6cooITNZXT+v0vMbD8mEqlV/InUxSiE8BIgib9pCCMOi+huVHoQMHzJFuUsH TZCMv5G0BE23gKLvG1pmrrIIC1knxbrZcegS6ecimCuFWFZHSEJUuVDzEsTZSRAGXy82 V+8+WyUg3u0EWOMonKaW8gYaHpNNAhDg5a0v1O1oLhmKuodZMGUABaDIsOhVNH+v5dej VFx1L7T/EGgLOFyi+Jvp0u9F6opiPb7TY09lLaYkknDiatupzTdfuYqfwf3i94DY45tq jq2M/UvCzfzQGlz1oCQE1MbNcp358dnp3t7qsjc5w58/2pyumCtuW94qinX2i+tq3a5q 2uQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711215313; x=1711820113; 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:message-id:reply-to; bh=1D7i6YQs5mgBRIBxoPVveHcwavxxNFlKTyxxrR6T4oM=; b=VKgBgcSdkVUJs/X7M4Udwzp/wljfktcGGHFPt2GFNBFj1QZ8blBx9HdRIdFZ5Q2e/D IIQDvunE3efLPDbJGsBW4eW1AK9d+UsniTaOcyA5LvJyy3sMZJvORZcobwQXC5ro6+5B XyCcPBLE8pOUpkPLCUq71ixTfLOa1GxLkvh/PSBVnGOt7qc0AaiStnyM+i1dRW7SeYF8 o6BDvtKe6gVo8Dzd+6+tYr2oE6aK3Yy2L8LgsE9xAi/e4jhIhkIKR6UtoNcWqa8vRMR+ y4Vxe8IRpqCvQ7RFt4zc64jPvvg/6SreZ3JO0ZHDprnyeYMY/90f3YR/47Laey8koVOe tz9A== X-Gm-Message-State: AOJu0YwBpPghsw1ZzT1EHLM5D+EBhm91P8WQRKhUN/cKRTlrBkrzNhYh DYF6zUDCy3j9reCjm48L3CMkhFFGggJzomJePhAKthvXU83u3mqBBfCHGr7T X-Google-Smtp-Source: AGHT+IGKoSH4vPmFZ14J5+HP1Oh9H6i6fpVh9LOB9pG2uChkdzpYfwRZkim9PXurY50Yug48Df2M+A== X-Received: by 2002:a05:6512:754:b0:513:a479:3ad9 with SMTP id c20-20020a056512075400b00513a4793ad9mr1528121lfs.55.1711215310854; Sat, 23 Mar 2024 10:35:10 -0700 (PDT) Received: from surface-pro-6.. (79-139-171-253.dynamic.spd-mgts.ru. [79.139.171.253]) by smtp.gmail.com with ESMTPSA id g20-20020ac25394000000b00513973dee6fsm361290lfh.150.2024.03.23.10.35.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 23 Mar 2024 10:35:10 -0700 (PDT) From: Sergey Bugaev To: libc-alpha@sourceware.org, bug-hurd@gnu.org Cc: Maxim Kuvyrkov , Luca Subject: [PATCH v2 05/20] hurd: Use the RETURN_ADDRESS macro Date: Sat, 23 Mar 2024 20:32:46 +0300 Message-ID: <20240323173301.151066-6-bugaevc@gmail.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240323173301.151066-1-bugaevc@gmail.com> References: <20240323173301.151066-1-bugaevc@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-9.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org This gives us PAC stripping on AArch64. Signed-off-by: Sergey Bugaev --- PAC is still not implemented on gnumach side, though. sysdeps/mach/hurd/init-first.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sysdeps/mach/hurd/init-first.c b/sysdeps/mach/hurd/init-first.c index 22c35747..5777c44c 100644 --- a/sysdeps/mach/hurd/init-first.c +++ b/sysdeps/mach/hurd/init-first.c @@ -222,7 +222,7 @@ _hurd_stack_setup (void **argptr) this may not be a valid pointer in case we're supposed to receive the arguments from the exec server, so we can not dereference it yet. */ - void *caller = __builtin_extract_return_addr (__builtin_return_address (0)); + void *caller = RETURN_ADDRESS (0); /* Init the essential things. */ first_init (); From patchwork Sat Mar 23 17:32:47 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergey Bugaev X-Patchwork-Id: 1915211 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=IagYsARy; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=sourceware.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4V25xT23vFz1yXr for ; Sun, 24 Mar 2024 04:37:33 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 3A6703858D38 for ; Sat, 23 Mar 2024 17:37:31 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-lf1-x130.google.com (mail-lf1-x130.google.com [IPv6:2a00:1450:4864:20::130]) by sourceware.org (Postfix) with ESMTPS id 9E6803858289 for ; Sat, 23 Mar 2024 17:35:18 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 9E6803858289 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 9E6803858289 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::130 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215323; cv=none; b=Fyd/J+WbxsN8t/3oygMhm3pkJLCfxzcB08s9vEwzI/GAQJYQmSKTva0pcTe1zs4GD9S+G0RrtXnlLlaKbZYmKZlfFUjFv6WAQJMVOkpOmlqMkDLtaFgrIrT2iJ/PXCWzZx5RDRQZvU/OjstXt3hIL5re21svfXMB0pflwvQvnkQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215323; c=relaxed/simple; bh=FiT30InLaDT/ATXnZMIILKf2/FCcTlz5mQl9B3WnOrI=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=SYQR2CL6vL6UbWDt+ZzLKppQF0aj9QWjJxguQxviMub0pfCDw8Y3BCLV11afmeayUuxAb//tNjHr9PQ302hq2SIllMGK2WFTH4BnWnUUUVRhNSkjyb9uAY8KtgNJw5s8uJrSjbsz7XKEsW0rmUJ201hCJXlAoMdYIm2UzC4CDy0= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-lf1-x130.google.com with SMTP id 2adb3069b0e04-513d599dbabso4100294e87.1 for ; Sat, 23 Mar 2024 10:35:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1711215317; x=1711820117; darn=sourceware.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=vOFkdsdbPkJKKEh1bnap+Fybnsj+mN6iJAVwYHsCRUA=; b=IagYsARyEwjFP+AkqLJDPVXcF9DEGu/ePj/Qjaj39kdFGCYMJO01o4paEbNHBn7POz QmeSHIQGaTio0mym+aPHd+q8CUvpYOJVse9dARnfB6UEZolxYx4V+Q/HoeeTEt8l5BIx pAcDNXgHS3pM2sFu/48az2rNNdRUBhn8B3NRNeUHu08X2E2oSAO9kl8jRAC831XkF0f9 zi8VdzAU3g9upnOlLsSkoyud0YzpTtwFELcH0oalOQQFp3c1T52C30HTkHwFTXiEMjD0 ACHSzvvj58NaC4h0XDnoowBZXEfUwaqhiPARxxNT/qRhB51MKEj7LkWraDpV1HDG1WZ4 0yBw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711215317; x=1711820117; 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:message-id:reply-to; bh=vOFkdsdbPkJKKEh1bnap+Fybnsj+mN6iJAVwYHsCRUA=; b=NyI2ZCc28TrtgyQABXv6om+pIJ2WzwHlAqPdVOfl08AcvB+5OUg/b1XSGxMQK+HGsM RWJEIBROPlmuwUOMxgwkZd0wlzCPJiTsc9m3Fcx5A6QD8Va/RzcTwb/IbmnDxOcTfS3w A25kCXSu0bbpEA094KFK04qigOftwVm2LC77QNce11zOAzLwNDXGEw0GD/hJfXrjDkvp 6tV1vJmo1o1Yf7GF8KCyjG5zJCTHzm/NYBs6fhIV9lNi1a/dvu1LMygGa0PkVJtY1sR/ w04KetuJCP1XTkr+Co8Y0/oMI+/dI+Z+9ke/KjjIxfl7vqde/bGsARzEkGFkcYR/bBCo o07A== X-Gm-Message-State: AOJu0YxV3Lwf/ksJftYYnt61x+RT4OMq2gV6+NbQenxoKbOkPJo3fTCg JSGq0Bgz6C3ypkmB546hSRgaBbDpjPhBDPDEW0oo54br5JZQuCG4dKQYmSxZ X-Google-Smtp-Source: AGHT+IFxFS5NYd9DwE6NYVNNoHoYvhwI56sOVoA2HIJBFcLD7B/nfrP6Y2oY07cYr2U6NtoxcEeYMA== X-Received: by 2002:a19:9108:0:b0:515:8550:58c9 with SMTP id t8-20020a199108000000b00515855058c9mr2114346lfd.63.1711215314907; Sat, 23 Mar 2024 10:35:14 -0700 (PDT) Received: from surface-pro-6.. (79-139-171-253.dynamic.spd-mgts.ru. [79.139.171.253]) by smtp.gmail.com with ESMTPSA id g20-20020ac25394000000b00513973dee6fsm361290lfh.150.2024.03.23.10.35.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 23 Mar 2024 10:35:13 -0700 (PDT) From: Sergey Bugaev To: libc-alpha@sourceware.org, bug-hurd@gnu.org Cc: Maxim Kuvyrkov , Luca Subject: [PATCH v2 06/20] htl: Respect GL(dl_stack_flags) when allocating stacks Date: Sat, 23 Mar 2024 20:32:47 +0300 Message-ID: <20240323173301.151066-7-bugaevc@gmail.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240323173301.151066-1-bugaevc@gmail.com> References: <20240323173301.151066-1-bugaevc@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-9.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org Previously, HTL would always allocate non-executable stacks. This has never been noticed, since GNU Mach on x86 ignores VM_PROT_EXECUTE and makes all pages implicitly executable. Since GNU Mach on AArch64 supports non-executable pages, HTL forgetting to pass VM_PROT_EXECUTE immediately breaks any code that (unfortunately, still) relies on executable stacks. Signed-off-by: Sergey Bugaev --- sysdeps/htl/Versions | 4 ++++ sysdeps/mach/htl/pt-stack-alloc.c | 9 +++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/sysdeps/htl/Versions b/sysdeps/htl/Versions index 3a3b1e8b..7b5450d2 100644 --- a/sysdeps/htl/Versions +++ b/sysdeps/htl/Versions @@ -12,4 +12,8 @@ libc { pthread_spin_destroy; pthread_spin_init; pthread_spin_lock; pthread_spin_trylock; pthread_spin_unlock; } + + GLIBC_PRIVATE { + __vm_map; + } } diff --git a/sysdeps/mach/htl/pt-stack-alloc.c b/sysdeps/mach/htl/pt-stack-alloc.c index 61974bd5..0597770b 100644 --- a/sysdeps/mach/htl/pt-stack-alloc.c +++ b/sysdeps/mach/htl/pt-stack-alloc.c @@ -31,9 +31,14 @@ int __pthread_stack_alloc (void **stackaddr, size_t stacksize) { error_t err; + vm_prot_t prot = VM_PROT_READ | VM_PROT_WRITE; - err = __vm_allocate (__mach_task_self (), (vm_offset_t *) stackaddr, - stacksize, TRUE); + if (GL(dl_stack_flags) & PF_X) + prot |= VM_PROT_EXECUTE; + + err = __vm_map (__mach_task_self (), (vm_offset_t *) stackaddr, + stacksize, 0, TRUE, MEMORY_OBJECT_NULL, 0, FALSE, + prot, VM_PROT_ALL, VM_INHERIT_COPY); if (err == KERN_NO_SPACE) err = EAGAIN; From patchwork Sat Mar 23 17:32:48 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergey Bugaev X-Patchwork-Id: 1915213 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=N2xCEywd; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=sourceware.org (client-ip=8.43.85.97; helo=server2.sourceware.org; envelope-from=libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4V25y06x0Vz1yXr for ; Sun, 24 Mar 2024 04:38:00 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 0AD26385841F for ; Sat, 23 Mar 2024 17:37:59 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-lf1-x12e.google.com (mail-lf1-x12e.google.com [IPv6:2a00:1450:4864:20::12e]) by sourceware.org (Postfix) with ESMTPS id E13893858C33 for ; Sat, 23 Mar 2024 17:35:19 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E13893858C33 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org E13893858C33 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::12e ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215323; cv=none; b=yBCU9CkVje6AAuCkpWknFDE102zFL9d219kcnx2P1fMG74lzpB6qwmwgMWH1Mcvxjl+YxCTZiX0nPQWt8tIBA1mmC0/De2ctUyO431e5bl/mqAIc5iQxdGvr5ul3prIWpBLv/CfA58BWzhuTpdHoucCQIJoz1kj78zwfhrdsXOA= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215323; c=relaxed/simple; bh=C7UISRPlGv+3xaokgTiMyCCF2uDNpcEMoGhl3wfbCjU=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=Lqkk+euh8FOtVVZ1vHYZ6X9Z2UOHWFB3pbZIW+L9s4foB201cTGK0z+UUtrN9YbEf4lrYAZNb7ueKfKlWfERWY5g37vTnTtMMFKfN4vxxrQgSggy6BlBTGxgr5eyNet5rW8aCM+bWzS62F11pt4tvohzzQipKdWo451OljaTPNk= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-lf1-x12e.google.com with SMTP id 2adb3069b0e04-513d247e3c4so2875502e87.0 for ; Sat, 23 Mar 2024 10:35:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1711215318; x=1711820118; darn=sourceware.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=KOWnPHFkCrRHqhIoaBPdfT4DXdyQELd71UfVpL/5FLo=; b=N2xCEywdNpIG99/gDn3Vyt7A/IqeGNMRpl29ZUtcWiaTYgEtXrCdiRcuxidcgkoZgL CZzZmrIWiqGvjEOJNo4tL9NG2NnF4dVyyiiqdgGavGg2t1EE3jCiHAUggAz7rm74zSvc 8gX+jPNEEaz2N/rQ5VGZAtLj5fz+HMQyuD21jYPFM7Kq3bU/JYXoH5UBX5hpxU5b081M TFBYL9I0KCkhw9m7kPQvsqFRyTLjd2KO65L7PALY2z44Sjv/FbCFa6eW7/5kY1OF23gY ZLqF3tTylW31t/I24abTBMkuBpLSDYKYib0dhsdjFgXyXNK+pzhjuWeUpxIiuOAJ0p+H 7qXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711215318; x=1711820118; 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:message-id:reply-to; bh=KOWnPHFkCrRHqhIoaBPdfT4DXdyQELd71UfVpL/5FLo=; b=LUbnbXnoeuJm/X4BOSZWUwInidExCJfbiO+W/bbonOZUwfC0IPXJTy6+XBeSzxBdXF qdz1Ibv7W0mS3r/SK86wPp1A0bQLiWXpk8gRccVocc9hdyfD3vTprYdryOgfO7jFdZ+3 baOsjuflwSuP3q3cpSA5DGC/0ItbI6mbdWVeOe73DVHj1HTu+r4pgSaPKw8I/apN9FgH STOFJqAfqEzRju7wfd/MzlOcvmdSVAlkq8T3UYkBfQOyHLcqO5iuBPli7+viSWoDUVYy mZgq5Zmmr5Bay/CocHXeCWBjsJvP235pVS+R5HO7nnMKNdBx+txp+9ZVVj5qBuDhsUY2 byUg== X-Gm-Message-State: AOJu0Yw8y329pSVLMPE7ua1vvaJc+1Zxv4B8rfwCDJD03bP1RRHgSSnm /adVS79BPVDhP0/44TwuW9M0ju7AUhaO2ozL5OrPYxGygAgmHaP6HuQFTdy+ X-Google-Smtp-Source: AGHT+IGi7LYm6cEJq5JZRb68p5WxvASxao3X8pnnXm4gQ4cPPU0xMvnUnC/m0c7D2lUZEvfUI/DJdg== X-Received: by 2002:a19:7701:0:b0:513:d6d9:b0dc with SMTP id s1-20020a197701000000b00513d6d9b0dcmr629691lfc.23.1711215318070; Sat, 23 Mar 2024 10:35:18 -0700 (PDT) Received: from surface-pro-6.. (79-139-171-253.dynamic.spd-mgts.ru. [79.139.171.253]) by smtp.gmail.com with ESMTPSA id g20-20020ac25394000000b00513973dee6fsm361290lfh.150.2024.03.23.10.35.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 23 Mar 2024 10:35:17 -0700 (PDT) From: Sergey Bugaev To: libc-alpha@sourceware.org, bug-hurd@gnu.org Cc: Maxim Kuvyrkov , Luca Subject: [PATCH v2 07/20] aarch64: Move pointer_guard.h out of sysdeps/unix/sysv/linux Date: Sat, 23 Mar 2024 20:32:48 +0300 Message-ID: <20240323173301.151066-8-bugaevc@gmail.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240323173301.151066-1-bugaevc@gmail.com> References: <20240323173301.151066-1-bugaevc@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-9.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org Nothing about this is Linux-specific. Signed-off-by: Sergey Bugaev --- sysdeps/{unix/sysv/linux => }/aarch64/pointer_guard.h | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename sysdeps/{unix/sysv/linux => }/aarch64/pointer_guard.h (100%) diff --git a/sysdeps/unix/sysv/linux/aarch64/pointer_guard.h b/sysdeps/aarch64/pointer_guard.h similarity index 100% rename from sysdeps/unix/sysv/linux/aarch64/pointer_guard.h rename to sysdeps/aarch64/pointer_guard.h From patchwork Sat Mar 23 17:32:49 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergey Bugaev X-Patchwork-Id: 1915208 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=FxQBm+8o; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=sourceware.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4V25wT3jKxz1yXr for ; Sun, 24 Mar 2024 04:36:41 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 58EAC385828E for ; Sat, 23 Mar 2024 17:36:39 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-lf1-x12b.google.com (mail-lf1-x12b.google.com [IPv6:2a00:1450:4864:20::12b]) by sourceware.org (Postfix) with ESMTPS id 2041C3858D3C for ; Sat, 23 Mar 2024 17:35:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 2041C3858D3C Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 2041C3858D3C Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::12b ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215324; cv=none; b=TOCB6ke88TujSIwz2F/TrzqGinjBLKIDm0GSYHw27i7wsVO5dkjFv17rPu1bKw8lRd8wOKVBKlcMupEMH9bHBuMxvu3P123GTio3blBxY+ZmReT+LZ41SDLnNO2V/wp2K3PmFlCubNZ845fcCb+Gje99R5a5WoaV3GR35mx5298= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215324; c=relaxed/simple; bh=7sV5N8BbL+riYxYa8HsinUCCuEkJHpCFap0glnlMmdw=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=WtcYqK807Dpo/wZLU/BFocS9p6EiA+3kyoqDnIVaK/P0nrJY72rEM+U/alfIxQepgi2UnPhU3w5Fqzou3dy7TpILFwvX/c0g/porlqiF41wsKYWeazKIpY8x5PGnexvq4K52nK4H7t9xq3PvhSkv44OEfyeuCBEF0d7CR3ivl6c= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-lf1-x12b.google.com with SMTP id 2adb3069b0e04-51588f70d2dso3640987e87.3 for ; Sat, 23 Mar 2024 10:35:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1711215319; x=1711820119; darn=sourceware.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=IIHjo/ZXn+4R2QlieJ133iNw5vv6u6TUQmaQH+qiuqo=; b=FxQBm+8oD3GbT5n0oI+VbMJEuef6f51aE5wngtDfN2KwMQbK/NCynx6hKf/TwrPIW+ t9ANMETWn/8HqWiIlQBMs/sjt34a/4i/7ZdoosJ+w7aYeJvk/B1XNan8AclxyQ9sjzOo orSfpK8xpdivLsKZzCWNBWMVchpF1QdmIqdAyFjJ0WsglKaHp+GZ823at3uYM0wHoRcG fPNrKnM7SPSblzDU5wu7XzeDLPs2U8KGmxKSSXCoHFDeN3pKEIg9pa23w8jGXUH1DgWF yYJt1miPaxvOwWkCci9AIVWB1iczDrhcldt2IKFGpJPbgrFSlm/t1ne4qjjmmE/vJB2U Zhjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711215319; x=1711820119; 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:message-id:reply-to; bh=IIHjo/ZXn+4R2QlieJ133iNw5vv6u6TUQmaQH+qiuqo=; b=ntPoQV1t+FVd1xR7WfSTMB7ERfvxABGhbD07rQm9Pytz3OnhCqWn1oQ9EsPT5HWEno ++TKtYI+ZxeTMx12kp162/SEuFlis3PHdy1iPXiZoE7QWlo1TFhVxRRinLuvJ/iBvODO 5HTb5f/3J/txm/DfhkQFb/oaiNtbAsVx3wtHwlzbYWcqyn+mkUBJkNipVU2GW7JNhipF fG8a2QZ0QTBjru2mCgN4F3FIUeg1+odsNzkW2WHFPLTR/MJQ14bjyJya/9Rz7DJLGHBM irLcHK7xDqRcrXdoGNanDYrhjS19srU+stsK8FgCGhT3dNWxjbgqL5rr2rfvbWzA674s NeTg== X-Gm-Message-State: AOJu0Ywn4NqXVHpybAFxUj1XTjIp4BI21Q3yYRG1bd5Gts7wmc6IpjQQ VfcekkrTr+FGHckfn5UteWUAqrQjoQe6COYtAhZSTTyAGfnziDXw4Qae55Hv X-Google-Smtp-Source: AGHT+IHO5so7Botfu/K9/0gUoznvKu47SUF7X5pD1mTZ76PiiULG9gsnM1ZzlJ+dYT/VtRZKWTRayQ== X-Received: by 2002:ac2:5503:0:b0:513:dc12:95f6 with SMTP id j3-20020ac25503000000b00513dc1295f6mr1427366lfk.28.1711215319268; Sat, 23 Mar 2024 10:35:19 -0700 (PDT) Received: from surface-pro-6.. (79-139-171-253.dynamic.spd-mgts.ru. [79.139.171.253]) by smtp.gmail.com with ESMTPSA id g20-20020ac25394000000b00513973dee6fsm361290lfh.150.2024.03.23.10.35.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 23 Mar 2024 10:35:18 -0700 (PDT) From: Sergey Bugaev To: libc-alpha@sourceware.org, bug-hurd@gnu.org Cc: Maxim Kuvyrkov , Luca Subject: [PATCH v2 08/20] aarch64: Add dl-procinfo Date: Sat, 23 Mar 2024 20:32:49 +0300 Message-ID: <20240323173301.151066-9-bugaevc@gmail.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240323173301.151066-1-bugaevc@gmail.com> References: <20240323173301.151066-1-bugaevc@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-9.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_SHORT, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org This is based on the Linux version, but doesn't define GLRO(dl_aarch64_cap_flags) and implement _dl_hwcap_string (which seems unused anyway) based on Linux HWCAP bit values. Signed-off-by: Sergey Bugaev --- sysdeps/aarch64/dl-procinfo.c | 59 +++++++++++++++++++++++++++++++++++ sysdeps/aarch64/dl-procinfo.h | 38 ++++++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 sysdeps/aarch64/dl-procinfo.c create mode 100644 sysdeps/aarch64/dl-procinfo.h diff --git a/sysdeps/aarch64/dl-procinfo.c b/sysdeps/aarch64/dl-procinfo.c new file mode 100644 index 00000000..5a51edbc --- /dev/null +++ b/sysdeps/aarch64/dl-procinfo.c @@ -0,0 +1,59 @@ +/* Data for AArch64 version of processor capability information. + Copyright (C) 2017-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* If anything should be added here check whether the size of each string + is still ok with the given array size. + + All the #ifdefs in the definitions are quite irritating but + necessary if we want to avoid duplicating the information. There + are three different modes: + + - PROCINFO_DECL is defined. This means we are only interested in + declarations. + + - PROCINFO_DECL is not defined: + + + if SHARED is defined the file is included in an array + initializer. The .element = { ... } syntax is needed. + + + if SHARED is not defined a normal array initialization is + needed. + */ + +#ifndef PROCINFO_CLASS +# define PROCINFO_CLASS +#endif + +#if !IS_IN (ldconfig) +# if !defined PROCINFO_DECL && defined SHARED + ._dl_aarch64_cpu_features +# else +PROCINFO_CLASS struct cpu_features _dl_aarch64_cpu_features +# endif +# ifndef PROCINFO_DECL += { } +# endif +# if !defined SHARED || defined PROCINFO_DECL +; +# else +, +# endif +#endif + +#undef PROCINFO_DECL +#undef PROCINFO_CLASS diff --git a/sysdeps/aarch64/dl-procinfo.h b/sysdeps/aarch64/dl-procinfo.h new file mode 100644 index 00000000..176de5cd --- /dev/null +++ b/sysdeps/aarch64/dl-procinfo.h @@ -0,0 +1,38 @@ +/* Processor capability information handling macros - aarch64 version. + Copyright (C) 2017-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _DL_PROCINFO_H +#define _DL_PROCINFO_H 1 + +#include +#include +#include +#include + +/* We cannot provide a general printing function. */ +#define _dl_procinfo(type, word) -1 + +/* No additional library search paths. */ +#define HWCAP_IMPORTANT HWCAP_ATOMICS + +/* There're no platforms to filter out. */ +#define _DL_HWCAP_PLATFORM 0 + +#define _dl_string_platform(str) (-1) + +#endif /* dl-procinfo.h */ From patchwork Sat Mar 23 17:32:50 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergey Bugaev X-Patchwork-Id: 1915215 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=fZHV3N7V; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=sourceware.org (client-ip=8.43.85.97; helo=server2.sourceware.org; envelope-from=libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4V25yR1TK6z1yXr for ; Sun, 24 Mar 2024 04:38:23 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 41B68385840A for ; Sat, 23 Mar 2024 17:38:21 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-lf1-x135.google.com (mail-lf1-x135.google.com [IPv6:2a00:1450:4864:20::135]) by sourceware.org (Postfix) with ESMTPS id 37B943858410 for ; Sat, 23 Mar 2024 17:35:22 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 37B943858410 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 37B943858410 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::135 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215324; cv=none; b=YTvp3Wu+/7LqFlIG+mG2avzjJRzs1aWfOQJayhVCjydqchOfGzsoSA1b1NNQJxos/q1UX8+UARTHWIZ9jtN5zQTxdU389mw0eQKo2xL/ZagkenhY2g6JeShdCS8M9HvhU/FwrhkIHuW1WK6mBho9zUlU+eQoHg/GUNBAvWgGwwk= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215324; c=relaxed/simple; bh=3yp3AdMUx3nTucKqAVMdTqfRf2Cl1wggHFa4lJ61VfU=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=px+Y9OgFeFJ6m2swD0+k1UFSkESB6S9f1bLrwcae9Rjd+FO3oKUCq/gnmUMMLw07cpUdm0TwGyP2vrSk1L9ljfyo/JiZ/VqVWeCx26EE+ha7JovPkmqu6CrJhmto+zjY3bzIkJjfmGVGWhDvjHsIORMibFgGHCeTnD6CQS8/WZA= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-lf1-x135.google.com with SMTP id 2adb3069b0e04-513dd2d2415so3271965e87.3 for ; Sat, 23 Mar 2024 10:35:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1711215320; x=1711820120; darn=sourceware.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=wPclyPtXpvqzHSKt9M4gR0hzT78BA2LoGluGYFuRJ7k=; b=fZHV3N7VvcDOnSI/CmSKdfljUfhX3zxEcdbPlSi22T1d2D949rUvU6zJjgCDFk6a+P OHTQwNsn1PPclWe3IOqB6UnotL4zcKdCk24QC+IBUc+v6avrS3FuMrwyB8fHTyUMzWHc e+DxdDldHUUwhPE4Y0AQ6NqIecMd2ojerJOSp2RK9nED/r8dWQfZZrzfYfg634K38DTR 9efF8Xq2lFW/I4fbi+G46Y++MdMy+nC48jZmSlo5XHOOvOJEvPQm+cXxG0x2l7gzJt2o gVm7KEaNHjLZd1I+/NUeXigX4q5iOumgYLPsQgor9gsgZMmWpTEFGzUcXxGqY22UIUQe oIFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711215320; x=1711820120; 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:message-id:reply-to; bh=wPclyPtXpvqzHSKt9M4gR0hzT78BA2LoGluGYFuRJ7k=; b=ZZi+f7FyvyuWTcvo7DfiBUh3XTsL3qI96YJ4yQ0iI585D9L6G8dFSbYCPp2xaTRYxN NLXvmU6pyznG6aRiEK1C8fRjGk05tYHfCy9xwNyxdLsJXDWyW36iSk4TyzX7ycydUZ2p NjPOZ5P2FuWbxvtnWBL+Hoj5/Fr44/+NQcwTUuLkn4DbUeu3pAALWdBj6qqMU+BlXRsc IKPsxVDoYbwAFFtro6wfezNxylYjFVQuQITof28Q2j6/mvHeF9R60jXy0XC0/LvD20fR k7qaIRnvnAkHU2MClL8Wg/m48CPW4hyy48uSWyeGo4KlnuXr6Qrr754fkak84lgRo4vr hejQ== X-Gm-Message-State: AOJu0Yxjw2WSeNibonenXONm5RN0u1Rr4keJfTAxkTYXnVDLCiDi+hVE 4wmMbg4xXfIf8zSjV8SLokPFxIALCUMOMZ+5a2d6hzYXCWDvH/T/yLdRyKYu X-Google-Smtp-Source: AGHT+IG8SE12m0RndiYq2WWqxLW7qbaaPZOtYR5AbjwVTHoSUZyiTwVojJjWWRY5cGTiETqFrrTF0g== X-Received: by 2002:a05:6512:48cc:b0:515:9f17:35e3 with SMTP id er12-20020a05651248cc00b005159f1735e3mr1719661lfb.23.1711215320297; Sat, 23 Mar 2024 10:35:20 -0700 (PDT) Received: from surface-pro-6.. (79-139-171-253.dynamic.spd-mgts.ru. [79.139.171.253]) by smtp.gmail.com with ESMTPSA id g20-20020ac25394000000b00513973dee6fsm361290lfh.150.2024.03.23.10.35.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 23 Mar 2024 10:35:19 -0700 (PDT) From: Sergey Bugaev To: libc-alpha@sourceware.org, bug-hurd@gnu.org Cc: Maxim Kuvyrkov , Luca Subject: [PATCH v2 09/20] aarch64: Move saving user entry into _dl_start_user Date: Sat, 23 Mar 2024 20:32:50 +0300 Message-ID: <20240323173301.151066-10-bugaevc@gmail.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240323173301.151066-1-bugaevc@gmail.com> References: <20240323173301.151066-1-bugaevc@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-9.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org In the Hurd ports, _dl_start () does not return the normal way; instead, _dl_sysdep_start () jumps to _dl_start_user directly using the RETURN_TO macro. Unlike in the i386 and x86_64 ports, the instruction that was saving the returned user entry into a different register (to avoid it getting clobbered by the _dl_init () call) was not marked as a part of _dl_start_user, causing it to be skipped when jumping to _dl_start_user using RETURN_TO, and control subsequently getting transferred to a random address left in x21. This should not make any difference for Linux ports, other than the _dl_start_user label pointing to an earlier instruction. Signed-off-by: Sergey Bugaev --- sysdeps/aarch64/dl-start.S | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sysdeps/aarch64/dl-start.S b/sysdeps/aarch64/dl-start.S index d645484e..e35431ca 100644 --- a/sysdeps/aarch64/dl-start.S +++ b/sysdeps/aarch64/dl-start.S @@ -29,10 +29,10 @@ ENTRY (_start) PTR_ARG (0) bl _dl_start /* Returns user entry point in x0. */ - mov PTR_REG (21), PTR_REG (0) .globl _dl_start_user .type _dl_start_user, %function _dl_start_user: + mov PTR_REG (21), PTR_REG (0) /* Get argc. */ ldr PTR_REG (1), [sp] /* Get argv. */ From patchwork Sat Mar 23 17:32:51 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergey Bugaev X-Patchwork-Id: 1915216 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=ItBcSbiY; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=sourceware.org (client-ip=8.43.85.97; helo=server2.sourceware.org; envelope-from=libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4V25ys1Dz7z1yXr for ; Sun, 24 Mar 2024 04:38:45 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 38E8A3858C33 for ; Sat, 23 Mar 2024 17:38:43 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-lf1-x12c.google.com (mail-lf1-x12c.google.com [IPv6:2a00:1450:4864:20::12c]) by sourceware.org (Postfix) with ESMTPS id 46E54385840A for ; Sat, 23 Mar 2024 17:35:23 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 46E54385840A Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 46E54385840A Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::12c ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215324; cv=none; b=rK8hTLCRe35lLTVnn1JMZgf9/NSuWEXe99SJvpagOLs3d994XE5u7oMR08NZqumht8iCmGPGTIg6DRSIhEtPrjYwvem9dTutB9lrK22N7sFu5GHbkoUVvOeRcKhpugVEx4tavVraINyyvUJCMTK3SFzKSp0W5gcSvNRj0QtBi8k= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215324; c=relaxed/simple; bh=xTwHu1yIUOjTm7fkHHVzQm8n0keEB9KMDdXuMDx0qL0=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=IzxyMAt9clHgMwDJ+F93myexBT9qKpQvYtTAvKSXly4MdCRoAZWZz/7q8QHRS1kW48hXsneJYnX7DMbAOQZ4FojQDT+wZ1GnmIP5yEwOcBGYU/wRBC59NlmYzDGKrIPTeN2QX/bn0iP82B51xxVpxHIhrIRCvTsfkk5N9Cxi/tM= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-lf1-x12c.google.com with SMTP id 2adb3069b0e04-513e25afabaso3658253e87.2 for ; Sat, 23 Mar 2024 10:35:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1711215321; x=1711820121; darn=sourceware.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=vqoxVSdhOiLpJ5ZRAjMCRGdRd8w1CFAlf3R0eUJE/eg=; b=ItBcSbiYvmPcIfw3BDpetR7T9cYIo5T9iW61Ur6bHD0VdUHrieTALa8kvqphbncpea GiiJbNoFWGG1R7NWvoezdFkWIDMrCUOaDANrvO7L3EqWVjA1HH0QlUtDBQXjxvnnCkA5 VOWcU5P3yiGd8vASPZ9FtOYaqn50sCJSWj6jOG+mSrW/dofk4EpSQj7zxKczba3ka+If +ZbitZWBScZA6hhgcJNk/9AUUuiL9Elxx+jkrY4UrIHIy3QfyZFlavDZSzvIzAefC9cM biKxk1r5rpksE5H1BqDftr5sqjEMt/p2R7ms9DtAVtJ/ePIAZHm5JogNPy2IarILZO2P lRFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711215321; x=1711820121; 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:message-id:reply-to; bh=vqoxVSdhOiLpJ5ZRAjMCRGdRd8w1CFAlf3R0eUJE/eg=; b=B2uWmszr8q4uUCb/OWiu9vFfShzI9glQ5Rtt8k5hJW7XGxjcGlm0lMz/1/B5UADbve Mn8P40xGRwkRjCRZN+/ykkgxLYm7EV4TDYd7lgXVBxv6CcPh8AR0W1LWZVR/j57UpJtZ F2pZdoxT2meyKY1Ia0OXqImjBiL9A7mHxJuHMIpOKY3GxY5eYHswOKQTrYWwzlC88nog 6GCpVoL9Ra0bbTTK2KMI/3TGajrbTlTW5VeyJWDHb40HSKZ53W/zneNu7vZKsKzMidV0 4fzMiidiyCyqqH6Vdxb4eiBzbXXZvJ2PQh+UKtYUL/2bIQdAI0kA8Zg3yJkBIVpPnMYc L2ag== X-Gm-Message-State: AOJu0YyMAswn5/FKIAdiNTGbeQjen+J/gO2/Tu+KAkwsbVjrl7uMPqwX VdDBJVWDqJna+/KbZGw6aRl5iQyOQXByWj5mSC7SnAzkhMoLNMArPRdtOmJ4 X-Google-Smtp-Source: AGHT+IFe4EBi2mbe0VWtVnxYfjWs1/0UMQiAoGSlPvZfvg8g73xOrhIEZcC8m4Z5VFEdbPXwzoa+oQ== X-Received: by 2002:a19:9110:0:b0:513:1a9c:ae77 with SMTP id t16-20020a199110000000b005131a9cae77mr1795509lfd.52.1711215321193; Sat, 23 Mar 2024 10:35:21 -0700 (PDT) Received: from surface-pro-6.. (79-139-171-253.dynamic.spd-mgts.ru. [79.139.171.253]) by smtp.gmail.com with ESMTPSA id g20-20020ac25394000000b00513973dee6fsm361290lfh.150.2024.03.23.10.35.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 23 Mar 2024 10:35:20 -0700 (PDT) From: Sergey Bugaev To: libc-alpha@sourceware.org, bug-hurd@gnu.org Cc: Maxim Kuvyrkov , Luca Subject: [PATCH v2 10/20] aarch64: Allow building without kernel support for BTI Date: Sat, 23 Mar 2024 20:32:51 +0300 Message-ID: <20240323173301.151066-11-bugaevc@gmail.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240323173301.151066-1-bugaevc@gmail.com> References: <20240323173301.151066-1-bugaevc@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-9.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org If PROT_BTI is not defined, turn _dl_bti_protect () into a no-op. We intend to support BTI & PROT_BTI on the Hurd eventually, but we're not there yet. Signed-off-by: Sergey Bugaev --- sysdeps/aarch64/dl-bti.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/sysdeps/aarch64/dl-bti.c b/sysdeps/aarch64/dl-bti.c index fd0d308a..4cf85630 100644 --- a/sysdeps/aarch64/dl-bti.c +++ b/sysdeps/aarch64/dl-bti.c @@ -28,6 +28,7 @@ /* Enable BTI protection for MAP. */ +#ifdef PROT_BTI void _dl_bti_protect (struct link_map *map, int fd) { @@ -59,6 +60,15 @@ _dl_bti_protect (struct link_map *map, int fd) } } +#else /* PROT_BTI */ +void +_dl_bti_protect (struct link_map *map, int fd) +{ + (void) map; + (void) fd; +} +#endif + static void bti_failed (struct link_map *l, const char *program) From patchwork Sat Mar 23 17:32:52 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergey Bugaev X-Patchwork-Id: 1915214 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=ktJf/NEI; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=sourceware.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4V25yC28gmz1yXr for ; Sun, 24 Mar 2024 04:38:11 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 381B8385842A for ; Sat, 23 Mar 2024 17:38:09 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-lf1-x12a.google.com (mail-lf1-x12a.google.com [IPv6:2a00:1450:4864:20::12a]) by sourceware.org (Postfix) with ESMTPS id 77ED53858424 for ; Sat, 23 Mar 2024 17:35:24 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 77ED53858424 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 77ED53858424 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::12a ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215329; cv=none; b=T2g7rYyMc0cFGNyLbuIjgTzbd4yMnXZof3ZPBeBKc+mYLDHr6znQOYoTHrV3jPAeMis7blzXiZ+QMzTgdVyFjmSa1UwDd96fN42C9roJdTGmwoaloAk9fUNyNhIw79VxEag27879oosHM46w8UN6khSca6D+biRz+YU7d9FomCA= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215329; c=relaxed/simple; bh=WXmj+9pr8q8v++gjknVP1kNjLZxWc/MEg5y2nMJI+Q4=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=ePct4c20oHOt+Nlxd6UHz3hiUCuR90HcKMCAkvZipdDATfeLfOZ3hpJd25hwGUrETYzlzvUk8vh6PIAhcp4//m5uTlYVXdzA8ya1A3fXjah/82PCT+axQtR+jW7TrbldrIJWBZTdDZeJKZSw0DM3KzeaOC9QA0i1aoPh3rxjOpM= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-lf1-x12a.google.com with SMTP id 2adb3069b0e04-513dd2d2415so3271983e87.3 for ; Sat, 23 Mar 2024 10:35:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1711215323; x=1711820123; darn=sourceware.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=wuGjmhAlf3cdQc+OwKWKa/sN5Ka4NoWZGRJee7QL0z4=; b=ktJf/NEIrfgwaOWp0ctSHWu8xW3q+mR2cMxo45e6Y91RbQdbVJU718qlYiM3sGzaKJ dtQfPD7uSPw7x31uX3N3aU1q9qrQ9Upn8HE8BASfggdyDAPxCQJ9Wlr0j94Kx4ewr7cK SkQNw8V4zYnFPKVaXyeG6ZQmaX5V23Ej1mqFYFr3yh9NHxZuB/plbx82Z0GbLKD4RHHh HpySB2j3atAZinnN6VXchkKDHpBaySV20GyuPFAjywmSSClAsNpjl+wGzR3NWKfNz3Tw LHtodeeJBmjkpFPsfjIdDSMuLRpJ0Jo6cD3Z7Ejr+VuZGX/kLRVRsflktG6qq7HPCGXH CS3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711215323; x=1711820123; 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:message-id:reply-to; bh=wuGjmhAlf3cdQc+OwKWKa/sN5Ka4NoWZGRJee7QL0z4=; b=WvKcUtSfwGUsiJQ1V0HUBYK6fiMu0rbezi8BkY43omeYsOvn/GHmGaR0iWeKh7B7cb RQgSko6GdJCARhWRxVJ+1xsI03kur3zQACSvOFu5wYFKhC3mKxCdY/Qukm3ArrO8/3tI d+MXaEHE9OMnTH+EqXb2uVqugJhhB2cul0qWzoAHUxRCr06ULbSTiQ7v2VGEW6vnrorG d/p0XSZ4+h+wm1xODriqqROEP3Gy4zZzTYSE4K7Cw3RdpynO1C2hqhheIjQu170mpnx2 6Jox0uuaQheywI4JCXLsgklUqDTUVFoNem994ec0EtI3kGdvezD/N61ibN1N4OkgUUdu W2gw== X-Gm-Message-State: AOJu0YyZ1kp41O83L7t1+oOFk9e1IZSKA8IaCIUEyaKdjRhl46fqoLcS MJfd3hyhmk1G13AtbZrkuvCxQO+WyOb5Cmy1H3rUF+eSqnMn/QAbMZ7jNtJz X-Google-Smtp-Source: AGHT+IE4ZuZkKsld8wsmUQVsnNxq1X35YkfmQsmilAbDgUHjEuLefaTuESlyzvqVftD9njfVeuOzHg== X-Received: by 2002:ac2:52a3:0:b0:515:9e3a:28ae with SMTP id r3-20020ac252a3000000b005159e3a28aemr1836811lfm.31.1711215322524; Sat, 23 Mar 2024 10:35:22 -0700 (PDT) Received: from surface-pro-6.. (79-139-171-253.dynamic.spd-mgts.ru. [79.139.171.253]) by smtp.gmail.com with ESMTPSA id g20-20020ac25394000000b00513973dee6fsm361290lfh.150.2024.03.23.10.35.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 23 Mar 2024 10:35:22 -0700 (PDT) From: Sergey Bugaev To: libc-alpha@sourceware.org, bug-hurd@gnu.org Cc: Maxim Kuvyrkov , Luca Subject: [PATCH v2 11/20] mach: Add a basic AArch64 port Date: Sat, 23 Mar 2024 20:32:52 +0300 Message-ID: <20240323173301.151066-12-bugaevc@gmail.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240323173301.151066-1-bugaevc@gmail.com> References: <20240323173301.151066-1-bugaevc@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-9.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_SHORT, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org This doesn't add any of the Hurd- or HTL-specific bits yet. Signed-off-by: Sergey Bugaev --- mach/Makefile | 1 + sysdeps/mach/aarch64/bits/mach/param.h | 24 ++++++ sysdeps/mach/aarch64/cpu-features.c | 109 +++++++++++++++++++++++++ sysdeps/mach/aarch64/sys/ucontext.h | 73 +++++++++++++++++ sysdeps/mach/aarch64/sysdep.h | 52 ++++++++++++ sysdeps/mach/aarch64/thread_state.h | 49 +++++++++++ sysdeps/mach/configure | 1 + sysdeps/mach/configure.ac | 1 + 8 files changed, 310 insertions(+) create mode 100644 sysdeps/mach/aarch64/bits/mach/param.h create mode 100644 sysdeps/mach/aarch64/cpu-features.c create mode 100644 sysdeps/mach/aarch64/sys/ucontext.h create mode 100644 sysdeps/mach/aarch64/sysdep.h create mode 100644 sysdeps/mach/aarch64/thread_state.h diff --git a/mach/Makefile b/mach/Makefile index 0ea3b3c1..92394951 100644 --- a/mach/Makefile +++ b/mach/Makefile @@ -56,6 +56,7 @@ generated = # Avoid ssp before TLS is initialized. CFLAGS-mach_init.o = $(no-stack-protector) +CFLAGS-RPC_aarch64_get_hwcaps.o = $(no-stack-protector) CFLAGS-RPC_vm_statistics.o = $(no-stack-protector) CFLAGS-RPC_vm_map.o = $(no-stack-protector) CFLAGS-RPC_vm_protect.o = $(no-stack-protector) diff --git a/sysdeps/mach/aarch64/bits/mach/param.h b/sysdeps/mach/aarch64/bits/mach/param.h new file mode 100644 index 00000000..4f7b76ed --- /dev/null +++ b/sysdeps/mach/aarch64/bits/mach/param.h @@ -0,0 +1,24 @@ +/* Old-style Unix parameters and limits. aarch64 Mach version. + Copyright (C) 1993-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _SYS_PARAM_H +# error "Never use directly; include instead." +#endif + +/* There is no EXEC_PAGESIZE. Use vm_page_size or getpagesize () + or sysconf (_SC_PAGESIZE) instead. */ diff --git a/sysdeps/mach/aarch64/cpu-features.c b/sysdeps/mach/aarch64/cpu-features.c new file mode 100644 index 00000000..1d1f5201 --- /dev/null +++ b/sysdeps/mach/aarch64/cpu-features.c @@ -0,0 +1,109 @@ +/* Initialize CPU feature data. Mach AArch64 version. + This file is part of the GNU C Library. + Copyright (C) 2017-2024 Free Software Foundation, Inc. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include +#include +#include +#include +#include + +#define DCZID_DZP_MASK (1 << 4) +#define DCZID_BS_MASK (0xf) + +/* The maximal set of permitted tags that the MTE random tag generation + instruction may use. We exclude tag 0 because a) we want to reserve + that for the libc heap structures and b) because it makes it easier + to see when pointer have been correctly tagged. */ +#define MTE_ALLOWED_TAGS (0xfffe << PR_MTE_TAG_SHIFT) + +struct cpu_list +{ + const char *name; + size_t len; + uint64_t midr; +}; + +static const struct cpu_list cpu_list[] = +{ +#define CPU_LIST_ENTRY(__str, __num) { __str, sizeof (__str) - 1, __num } + CPU_LIST_ENTRY ("thunderxt88", 0x430F0A10), + CPU_LIST_ENTRY ("thunderx2t99", 0x431F0AF0), + CPU_LIST_ENTRY ("thunderx2t99p1", 0x420F5160), + CPU_LIST_ENTRY ("ares", 0x411FD0C0), + CPU_LIST_ENTRY ("emag", 0x503F0001), + CPU_LIST_ENTRY ("kunpeng920", 0x481FD010), + CPU_LIST_ENTRY ("a64fx", 0x460F0010), + CPU_LIST_ENTRY ("generic", 0x0), +}; + +static uint64_t +get_midr_from_mcpu (const struct tunable_str_t *mcpu) +{ + for (int i = 0; i < array_length (cpu_list); i++) + if (tunable_strcmp (mcpu, cpu_list[i].name, cpu_list[i].len)) + return cpu_list[i].midr; + + return UINT64_MAX; +} + +static inline void +init_cpu_features (struct cpu_features *cpu_features) +{ + error_t err; + uint32_t hwcaps[HWCAPS_COUNT]; + mach_msg_type_number_t hwcaps_size = HWCAPS_COUNT; + uint64_t midr, revidr; + + err = __aarch64_get_hwcaps (__mach_host_self (), hwcaps, + &hwcaps_size, &midr, &revidr); + assert_perror (err); + + if (hwcaps_size >= 1) + GLRO (dl_hwcap) = hwcaps[0]; + if (hwcaps_size >= 2) + GLRO (dl_hwcap2) = hwcaps[1]; + + cpu_features->midr_el1 = midr; + + /* Get the tunable override. */ + const struct tunable_str_t *mcpu = TUNABLE_GET (glibc, cpu, name, + struct tunable_str_t *, + NULL); + if (mcpu != NULL) + { + midr = get_midr_from_mcpu (mcpu); + if (midr != UINT64_MAX) + cpu_features->midr_el1 = midr; + } + + /* Check if ZVA is enabled. */ + unsigned dczid; + asm volatile ("mrs %0, dczid_el0" : "=r"(dczid)); + + if ((dczid & DCZID_DZP_MASK) == 0) + cpu_features->zva_size = 4 << (dczid & DCZID_BS_MASK); + + /* Check if BTI is supported. */ + cpu_features->bti = GLRO (dl_hwcap2) & HWCAP2_BTI; + + /* Check if SVE is supported. */ + cpu_features->sve = GLRO (dl_hwcap) & HWCAP_SVE; + + /* Check if MOPS is supported. */ + cpu_features->mops = GLRO (dl_hwcap2) & HWCAP2_MOPS; +} diff --git a/sysdeps/mach/aarch64/sys/ucontext.h b/sysdeps/mach/aarch64/sys/ucontext.h new file mode 100644 index 00000000..69b95476 --- /dev/null +++ b/sysdeps/mach/aarch64/sys/ucontext.h @@ -0,0 +1,73 @@ +/* Copyright (C) 1998-2024 Free Software Foundation, Inc. + + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* System V/AArch64 ABI compliant context switching support. */ + +#ifndef _SYS_UCONTEXT_H +#define _SYS_UCONTEXT_H 1 + +#include + +#include +#include + +#ifdef __USE_MISC +# define __ctx(fld) fld +#else +# define __ctx(fld) __ ## fld +#endif + +/* Type for general register. */ +__extension__ typedef long long int greg_t; + +/* gregset_t is laid out to match mach/aarch64/thread_status.h:struct aarch64_thread_state */ +typedef struct +{ + greg_t __ctx(x)[31]; + greg_t __ctx(sp); + greg_t __ctx(pc); + greg_t __ctx(tpidr_el0); + unsigned long __ctx(cpsr); +} gregset_t; + +/* fpregset_t is laid out to match mach/aarch64/thread_status.h:struct aarch64_float_state */ +typedef struct +{ + __int128_t __ctx(v)[32]; + unsigned long __ctx(fpsr); + unsigned long __ctx(fpcr); +} fpregset_t; + +typedef struct +{ + gregset_t __ctx(gregs); + fpregset_t __ctx(fpregs); +} mcontext_t; + +typedef struct ucontext_t +{ + unsigned long __ctx(uc_flags); + struct ucontext_t *uc_link; + stack_t uc_stack; + sigset_t uc_sigmask; + mcontext_t uc_mcontext; +} ucontext_t; + +#undef __ctx + +#endif /* sys/ucontext.h */ diff --git a/sysdeps/mach/aarch64/sysdep.h b/sysdeps/mach/aarch64/sysdep.h new file mode 100644 index 00000000..ad5bf3b5 --- /dev/null +++ b/sysdeps/mach/aarch64/sysdep.h @@ -0,0 +1,52 @@ +/* Copyright (C) 1991-2024 Free Software Foundation, Inc. + + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _MACH_AARCH64_SYSDEP_H +#define _MACH_AARCH64_SYSDEP_H 1 + +/* Defines RTLD_PRIVATE_ERRNO and USE_DL_SYSINFO. */ +#include +#include +/* Get the hwcap definitions. */ +#include + +#define LOSE asm volatile ("udf #0xdead") + +#define STACK_GROWTH_DOWN + +/* Get the machine-independent Mach definitions. */ +#include + +#undef ENTRY +#undef ALIGN + +#define RETURN_TO(sp, pc, retval) \ +do \ + { \ + register long __rv asm ("x0") = (retval); \ + asm volatile ("mov sp, %0\n\t" \ + "ret %1" \ + :: "r" (sp), "r" (pc), "r" (__rv)); \ + __builtin_unreachable (); \ + } \ +while (0) + +#include +#include + +#endif /* mach/aarch64/sysdep.h */ diff --git a/sysdeps/mach/aarch64/thread_state.h b/sysdeps/mach/aarch64/thread_state.h new file mode 100644 index 00000000..f15859ee --- /dev/null +++ b/sysdeps/mach/aarch64/thread_state.h @@ -0,0 +1,49 @@ +/* Mach thread state definitions for machine-independent code. AArch64 version. + Copyright (C) 1994-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _MACH_AARCH64_THREAD_STATE_H +#define _MACH_AARCH64_THREAD_STATE_H 1 + +#include +#include + +#define MACHINE_NEW_THREAD_STATE_FLAVOR AARCH64_THREAD_STATE +#define MACHINE_THREAD_STATE_FLAVOR AARCH64_THREAD_STATE +#define MACHINE_THREAD_STATE_COUNT AARCH64_THREAD_STATE_COUNT + +#define machine_thread_state aarch64_thread_state + +#define PC pc +#define SP sp +#define SYSRETURN x[0] + +#define MACHINE_THREAD_STATE_SETUP_CALL(ts, stack, size, func) \ + ((ts)->sp = PTR_ALIGN_DOWN ((uintptr_t) (stack) + (size), 16), \ + (ts)->pc = (uintptr_t) func, \ + (ts)->cpsr = 0x0) /* notably, reset BTYPE */ + +struct machine_thread_all_state + { + struct aarch64_thread_state basic; + struct aarch64_float_state fpu; + int set; + }; + +#include + +#endif /* mach/aarch64/thread_state.h */ diff --git a/sysdeps/mach/configure b/sysdeps/mach/configure index f15160d0..18f98967 100644 --- a/sysdeps/mach/configure +++ b/sysdeps/mach/configure @@ -268,6 +268,7 @@ for ifc in mach mach4 gnumach \ clock clock_priv host_priv host_security ledger lock_set \ processor processor_set task task_notify thread_act vm_map \ memory_object memory_object_default i386/mach_i386 x86_64/mach_i386 \ + aarch64/mach_aarch64 \ ; do as_ac_Header=`printf "%s\n" "ac_cv_header_mach/${ifc}.defs" | $as_tr_sh` ac_fn_c_check_header_preproc "$LINENO" "mach/${ifc}.defs" "$as_ac_Header" diff --git a/sysdeps/mach/configure.ac b/sysdeps/mach/configure.ac index 730fb25d..03e45df2 100644 --- a/sysdeps/mach/configure.ac +++ b/sysdeps/mach/configure.ac @@ -64,6 +64,7 @@ for ifc in mach mach4 gnumach \ clock clock_priv host_priv host_security ledger lock_set \ processor processor_set task task_notify thread_act vm_map \ memory_object memory_object_default i386/mach_i386 x86_64/mach_i386 \ + aarch64/mach_aarch64 \ ; do AC_CHECK_HEADER(mach/${ifc}.defs, [dnl mach_interface_list="$mach_interface_list $ifc"],, -) From patchwork Sat Mar 23 17:32:53 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergey Bugaev X-Patchwork-Id: 1915210 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=k2BXiZNZ; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=sourceware.org (client-ip=8.43.85.97; helo=server2.sourceware.org; envelope-from=libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4V25x75QsSz1yXr for ; Sun, 24 Mar 2024 04:37:15 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 44416385841C for ; Sat, 23 Mar 2024 17:37:13 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-lf1-x136.google.com (mail-lf1-x136.google.com [IPv6:2a00:1450:4864:20::136]) by sourceware.org (Postfix) with ESMTPS id 50695385843A for ; Sat, 23 Mar 2024 17:35:25 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 50695385843A Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 50695385843A Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::136 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215328; cv=none; b=VOyfLy2rvzd0g3fhT+MYFXXvnDo1IEwWSrJ3KKm2CVPbQz1Y2Ft19+1AXJEkOYPfVnfkGv8OpzfzgQ9Vy5dE+331Anh7GHEU2bIVwKUIGtaHn32Wai5Yasj+VVUyoS50TmoFkc/7fsCSVSro/UQHEnYah1u4+uwogQZkALaifco= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215328; c=relaxed/simple; bh=fYNNHETKDZINdV2DOxbb0ZFSLn0UrR+Q4Ngs7C4fC/M=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=FPnLBC2g3yQvXYpH6seyw+AX67zXRd6hYlMjpYwrehbFAhVCejwZoiID2D8asTJdnACMYl2wjoZa/IM6LGb6vFfqBOrA1o9/B282+r5yyrv6heOS9hAzCKhW5UTQQ5yvm4RTP2ao2lHEBwHKjczHjWiEVcJ9SC4SI3eHi3ks+cM= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-lf1-x136.google.com with SMTP id 2adb3069b0e04-513d23be0b6so3743451e87.0 for ; Sat, 23 Mar 2024 10:35:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1711215323; x=1711820123; darn=sourceware.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=m703ExJuiZxvfZQVvWll8KQfNXW33WwwGGxxZCezCd4=; b=k2BXiZNZ0HTSrDeTT49e2shjA0JT4M9voAHuJKLZsar5Q+5q7rBK5FAvPFF/7TBvVK GE7s07vLmX6caekNObVTkVj+vYfLcGHvR1HrpRyDsKsF7iOq0JjvJIYbMpkFgoLaO3JY m8/Utx1RyFdD8CFiiqdYlQoZGREjVsCA09Tz4Q039HjajHlASEyYF2wPFd80g87bvv7x 8t8LuweMjTl61kxkCbb8KizUODf0rgmWOA7FMFgB0QCpn9vE6noRituSV+FQeu55RTTj m0F0Dh70Amwu4qL1C6IX5YbINOBMCGbIFLErBgF1V9XgsPxUOXtJbjhIrqtDlfeczL4W I4gw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711215323; x=1711820123; 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:message-id:reply-to; bh=m703ExJuiZxvfZQVvWll8KQfNXW33WwwGGxxZCezCd4=; b=rG50e0o0tYcAHgoQNxClP+j7SuA/n/zTZBAz66rbmmG3cG3fY++ZuHQbH7Fus6aiZY HoX0gaytSPyDNQF+bmpyznC6/kobGdlTFO3T04CgoxRP4K6y6XFY+hjrfr1HXIgRIPwn kUbD1rbhpQpj0x2RXeoSv69ZgsEgK3oIpt+EfCVogV259yX0rMK+tguDzdIVoO4dLOhw nzHJLJ3UqfrekTrCFhf3++lAngqMsUdp+wA/PhA9O1+2/aUICPrRUi2fzRrNkJeQ8MBO yRANiDE5xaofbVZ/U//TLcTztHpICN6DQbimcvZj1aXtTksbmx9eKyzQrxLZ+jim1bsh cJHw== X-Gm-Message-State: AOJu0YwAUElUev36qjl6ZRvvHCew3wrhhpz3DIrn139TbX23kgD8s2Al wVmJoz40VrFpgXrxq+c7VeoK4pnSKb5eNC4IyAElQyjw43TjnJd19SidnaRv X-Google-Smtp-Source: AGHT+IEz2CQEDhwPlA7ArYfiIwesaVzsW1AxmIuDI3OxUcoMAQ68nA3rBCxr2BClLO3cH+hOlte8Sg== X-Received: by 2002:ac2:4421:0:b0:513:76ec:2d21 with SMTP id w1-20020ac24421000000b0051376ec2d21mr1867047lfl.10.1711215323453; Sat, 23 Mar 2024 10:35:23 -0700 (PDT) Received: from surface-pro-6.. (79-139-171-253.dynamic.spd-mgts.ru. [79.139.171.253]) by smtp.gmail.com with ESMTPSA id g20-20020ac25394000000b00513973dee6fsm361290lfh.150.2024.03.23.10.35.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 23 Mar 2024 10:35:23 -0700 (PDT) From: Sergey Bugaev To: libc-alpha@sourceware.org, bug-hurd@gnu.org Cc: Maxim Kuvyrkov , Luca Subject: [PATCH v2 12/20] mach: Declare the new thread_set_self_state () trap Date: Sat, 23 Mar 2024 20:32:53 +0300 Message-ID: <20240323173301.151066-13-bugaevc@gmail.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240323173301.151066-1-bugaevc@gmail.com> References: <20240323173301.151066-1-bugaevc@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-9.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org This is a new Mach trap for setting the state of the current thread, as if with thread_set_state () RPC. The trap has been added to GNU Mach as a part of the AArch64 port, to make it possible to implement sigreturn in glibc; however, the trap itself is fully arch-independent. There does not seem to be an easy way to feature-test, in a header, for existence of traps in the Mach version being built against. Instead, just declare the trap prototype unconditionally, and don't add an exported version for now. Signed-off-by: Sergey Bugaev --- sysdeps/mach/include/mach/mach_traps.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/sysdeps/mach/include/mach/mach_traps.h b/sysdeps/mach/include/mach/mach_traps.h index c4334952..a942212c 100644 --- a/sysdeps/mach/include/mach/mach_traps.h +++ b/sysdeps/mach/include/mach/mach_traps.h @@ -19,5 +19,12 @@ kern_return_t __thread_switch (mach_port_t new_thread, libc_hidden_proto (__thread_switch) kern_return_t __evc_wait (unsigned int event); libc_hidden_proto (__evc_wait) + +/* Set current thread's state, as if with thread_set_state() RPC. + This syscall is only really available in recent enough GNU Mach. */ +extern kern_return_t __thread_set_self_state (int flavor, + natural_t *new_state, + natural_t new_state_count); +libc_hidden_proto (__thread_set_self_state) #endif #endif From patchwork Sat Mar 23 17:32:54 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergey Bugaev X-Patchwork-Id: 1915218 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=YhCgDHH6; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=sourceware.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4V25zJ5V3Gz1yXr for ; Sun, 24 Mar 2024 04:39:08 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id B5D0E3858C53 for ; Sat, 23 Mar 2024 17:39:06 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-lf1-x129.google.com (mail-lf1-x129.google.com [IPv6:2a00:1450:4864:20::129]) by sourceware.org (Postfix) with ESMTPS id 6F7CA3858C50 for ; Sat, 23 Mar 2024 17:35:26 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 6F7CA3858C50 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 6F7CA3858C50 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::129 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215329; cv=none; b=odu+wtHZkfuRHr5uvMVxnUaS6AxeD38AoAoK14D8jAoGOgEPiR05W4VPCs5MbvQRaiSB2r9HYkR4gc432C45rQqPjDr76AZT1L9oNrWftjZGAEcImscWlGRI0bb04QWtg63tStcud4x2CQu4DQaXzYQKzJ48Qj1TeqYijvZK3KA= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215329; c=relaxed/simple; bh=ryi1nroyizEOJRv0oSWQKNaIVo/huZWe3+NDU9jSanM=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=xij3CVN47cxVRQz0BNEJe3oLUjwCF6fK/vEFlb9bI+VUn8CRUoYLZVEnlqf5AactnR19o3WKNCgaLzU81mvn6DKzqO6JqJv6eNI93zW3+YKfhJLSjgo/Z4AVraGxh+TsYVtWu1WLkVnT6f3g+76idfCvoBRGFHARn9mB4esZVRg= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-lf1-x129.google.com with SMTP id 2adb3069b0e04-512b3b04995so1860548e87.3 for ; Sat, 23 Mar 2024 10:35:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1711215324; x=1711820124; darn=sourceware.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=kp8AD4ChmCphjUDvDGSSI6y4cCbMNxd375vMEKpv8b4=; b=YhCgDHH6eyHHeFBU9SIb/zXG8je892udElTd3bkN+4YmsgXJw8j9DDUXs7qjO4H2B7 BsRxw+5rDtIGiQ+ktaM2+rzuBWg8qOUqX9KKlxgkfZOM34y0SRWh9UPEuxnTMwkWu+WP IubEbRmQNgxGW+6qy2SD7yuHoKmg+MScSo0lJ3uOx6JPiXnUCAV3Og0FvOvocBQnRnO8 K1WQIh223FFgkRqwWNucjDvVVudL3wnQg/VlTGuEBgdxjAcv8ZjiDkEYfrDUOEp/AOc1 GxRVB3Vgz9W7CnTF7Zfwd/5tVCM3zOoAA9/97HfWbcnfktm2524MpF0u4pH4AKEhiwSx MaAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711215324; x=1711820124; 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:message-id:reply-to; bh=kp8AD4ChmCphjUDvDGSSI6y4cCbMNxd375vMEKpv8b4=; b=YIKtDXbTJxjwPwZ0+AS1FEvSZlku9wGkqkgA65ODxs83Xu97rlJ2irWDJHuveIbTb0 0OtEZ2voG/udIPfkr79b0Jhid03xYomD7w2a6Yx877idt7A3QYQ1NV7Frra+UlQ+QmKg 9Exra17AeY34muz6VVRtBBcp7aBH2htPsaSqQjWAjSjs8wtHMMlqUSg/4Q27Esf1LRaS MItBqD/UlFHvqNpf4vnLU55q6iISi93CZPrnDvvh4CltoUaO2xeLVhnMtzgk4jLwFBU8 SIWQvLmVEiMmpWfXA83wAkNrib1NnMgoWhELFffabBv2e0nFEZqlIUw676gsVjYXOHQ0 JWqg== X-Gm-Message-State: AOJu0YxF6g+dGhciUMtmxglRfeEC0APV13PjSWRlY0yvxTno6uB4Kp2d H8OVawNwDtWzTPru5Z2T+8+IdBGp0XaLofXh9e/0d6dbPENNtWTNbUJgdJ4Q X-Google-Smtp-Source: AGHT+IEINEEp6tSaOy0xZa9dg/SfCOXOppnZliRDrQFr0O58g9oXDbhb3EkS2U/LzJKQMmhUFOPGbg== X-Received: by 2002:ac2:5586:0:b0:513:d94a:670f with SMTP id v6-20020ac25586000000b00513d94a670fmr1550138lfg.31.1711215324566; Sat, 23 Mar 2024 10:35:24 -0700 (PDT) Received: from surface-pro-6.. (79-139-171-253.dynamic.spd-mgts.ru. [79.139.171.253]) by smtp.gmail.com with ESMTPSA id g20-20020ac25394000000b00513973dee6fsm361290lfh.150.2024.03.23.10.35.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 23 Mar 2024 10:35:24 -0700 (PDT) From: Sergey Bugaev To: libc-alpha@sourceware.org, bug-hurd@gnu.org Cc: Maxim Kuvyrkov , Luca Subject: [PATCH v2 13/20] hurd: Add a basic AArch64 port Date: Sat, 23 Mar 2024 20:32:54 +0300 Message-ID: <20240323173301.151066-14-bugaevc@gmail.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240323173301.151066-1-bugaevc@gmail.com> References: <20240323173301.151066-1-bugaevc@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-9.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_SHORT, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org The following commits will add TLS, HTL, and the signal bits. Signed-off-by: Sergey Bugaev --- sysdeps/mach/hurd/aarch64/Implies | 3 ++ sysdeps/mach/hurd/aarch64/longjmp-ts.c | 49 ++++++++++++++++++++++ sysdeps/mach/hurd/aarch64/shlib-versions | 2 + sysdeps/mach/hurd/aarch64/static-start.S | 52 ++++++++++++++++++++++++ sysdeps/mach/hurd/aarch64/vm_param.h | 24 +++++++++++ 5 files changed, 130 insertions(+) create mode 100644 sysdeps/mach/hurd/aarch64/Implies create mode 100644 sysdeps/mach/hurd/aarch64/longjmp-ts.c create mode 100644 sysdeps/mach/hurd/aarch64/shlib-versions create mode 100644 sysdeps/mach/hurd/aarch64/static-start.S create mode 100644 sysdeps/mach/hurd/aarch64/vm_param.h diff --git a/sysdeps/mach/hurd/aarch64/Implies b/sysdeps/mach/hurd/aarch64/Implies new file mode 100644 index 00000000..02af165f --- /dev/null +++ b/sysdeps/mach/hurd/aarch64/Implies @@ -0,0 +1,3 @@ +mach/hurd/htl +aarch64/htl +mach/hurd/aarch64/htl diff --git a/sysdeps/mach/hurd/aarch64/longjmp-ts.c b/sysdeps/mach/hurd/aarch64/longjmp-ts.c new file mode 100644 index 00000000..2fcb7493 --- /dev/null +++ b/sysdeps/mach/hurd/aarch64/longjmp-ts.c @@ -0,0 +1,49 @@ +/* Perform a `longjmp' on a Mach thread_state. AArch64 version. + Copyright (C) 1991-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include +#include +#include + + +/* Set up STATE to do the equivalent of `longjmp (ENV, VAL);'. */ + +void +_hurd_longjmp_thread_state (void *state, jmp_buf env, int val) +{ + struct aarch64_thread_state *ts = state; + + ts->x[19] = env[0].__jmpbuf[JB_X19]; + ts->x[20] = env[0].__jmpbuf[JB_X20]; + ts->x[21] = env[0].__jmpbuf[JB_X21]; + ts->x[22] = env[0].__jmpbuf[JB_X22]; + ts->x[23] = env[0].__jmpbuf[JB_X23]; + ts->x[24] = env[0].__jmpbuf[JB_X24]; + ts->x[25] = env[0].__jmpbuf[JB_X25]; + ts->x[26] = env[0].__jmpbuf[JB_X26]; + ts->x[27] = env[0].__jmpbuf[JB_X27]; + ts->x[28] = env[0].__jmpbuf[JB_X28]; + ts->x[29] = env[0].__jmpbuf[JB_X29]; + + /* XXX: We're ignoring all the d[] (SIMD) registers. + Is that fine? */ + + ts->pc = PTR_DEMANGLE (env[0].__jmpbuf[JB_LR]); + ts->sp = _jmpbuf_sp (env[0].__jmpbuf); + ts->x[0] = val ?: 1; +} diff --git a/sysdeps/mach/hurd/aarch64/shlib-versions b/sysdeps/mach/hurd/aarch64/shlib-versions new file mode 100644 index 00000000..b9e7c2cb --- /dev/null +++ b/sysdeps/mach/hurd/aarch64/shlib-versions @@ -0,0 +1,2 @@ +DEFAULT GLIBC_2.40 +ld=ld-aarch64.so.1 diff --git a/sysdeps/mach/hurd/aarch64/static-start.S b/sysdeps/mach/hurd/aarch64/static-start.S new file mode 100644 index 00000000..e09865c4 --- /dev/null +++ b/sysdeps/mach/hurd/aarch64/static-start.S @@ -0,0 +1,52 @@ +/* Startup code for statically linked Hurd/AArch64 binaries. + Copyright (C) 1998-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include + +/* This is the actual entry point for statically linked aarch64-gnu executables, + the very first code to run in a process. */ + + .text +ENTRY(_start) + /* Set up the initial stack frame. */ + cfi_undefined (x30) + mov x29, #0 + mov x30, #0 + + /* Pre-fill GOT entries for select ifunc routines that may get + called during _hurd_stack_setup () with baseline implementations. */ + adrp x1, __memcpy_generic + add x1, x1, #:lo12:__memcpy_generic + adrp x0, :got:memcpy + str x1, [x0, :got_lo12:memcpy] + + adrp x1, __strlen_generic + add x1, x1, #:lo12:__strlen_generic + adrp x0, :got:strlen + str x1, [x0, :got_lo12:strlen] + + mov x0, sp + bl _hurd_stack_setup + + /* Jump to the regular entry point. */ + mov x0, #0 + b _start1 +END(_start) + +#define _start _start1 +#include diff --git a/sysdeps/mach/hurd/aarch64/vm_param.h b/sysdeps/mach/hurd/aarch64/vm_param.h new file mode 100644 index 00000000..304a2f2b --- /dev/null +++ b/sysdeps/mach/hurd/aarch64/vm_param.h @@ -0,0 +1,24 @@ +/* Copyright (C) 2020-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _AARCH64_VM_PARAM_H +#define _AARCH64_VM_PARAM_H + +/* Arbitrary start of the brk. This is after usual binary and library mappings. */ +#define BRK_START 0x200000000000 + +#endif /* aarch64/vm_param.h */ From patchwork Sat Mar 23 17:32:55 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergey Bugaev X-Patchwork-Id: 1915219 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=Ifl9KiW9; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=sourceware.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4V25zf0Cfxz1yXr for ; Sun, 24 Mar 2024 04:39:26 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 0118F385842C for ; Sat, 23 Mar 2024 17:39:24 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-lj1-x22c.google.com (mail-lj1-x22c.google.com [IPv6:2a00:1450:4864:20::22c]) by sourceware.org (Postfix) with ESMTPS id 6EC3A3858C52 for ; Sat, 23 Mar 2024 17:35:27 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 6EC3A3858C52 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 6EC3A3858C52 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::22c ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215331; cv=none; b=JvBWwHvjy+9IMgPI1jhGDbt23w/SjqXARuVR4AZPYcrP4RN1TLnimidZTQZwKRt0F334xZWF8BB2rW3QwGQwCR+ncruS33bMvzm+rQS7cPTuVpsXQX1Z7wZtI/dhfgRnuqeg7c/YVhRSx9ZvC04XSV4HYitE839W3n/teL+rI5o= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215331; c=relaxed/simple; bh=IT0ONfgfzH/h4ISmxbZZXV20NXo3bKwuf0TDu5X1cyc=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=nr55+1ZJjMIC1rZsoWjcOhKgvpSQLVKU5Any7fnp5ydTljcO/LwKz0LzE7nPEatDRlTd2BzAuQVL+0qZlB/LBVd3beQ3ipYQL20jbKED3eyPDXfa0Lpns3/heuYEdCt8JRI3c69UQ4RJcwltgKk9G1FC/k+qTVdP01eBFHn+uXQ= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-lj1-x22c.google.com with SMTP id 38308e7fff4ca-2d52e65d4a8so42680461fa.0 for ; Sat, 23 Mar 2024 10:35:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1711215326; x=1711820126; darn=sourceware.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=a9l3YZR5YpgFqq8POIxegvf33p5MInnlEiLYkSCHsDQ=; b=Ifl9KiW9xtwsBoUF94BAbKguYGyPT0sHL6GUs+M71cmvys52Tp0J56kwJpcaN5iq7r oJy0X09mcritoxDcqqfebtOhRw1euV+bwy5n/jIdKjhNcSm1+UlCET373gktl6yqlmDu RP0nhTJ7Ub6ykOZg5kBWrx4T4qM6Xm9bttTXi3DAAEZtrTZSMV1VRKOs+QIkKUSZXC8Z xyJUgP6gkNsIKdBpR4rFt9s+bbpV71lAJyB+mlod/eu5vnuT/3AU/jA91FNKrjgVuDLg IwzpQZ4WiAKeuMGwJYPZtqY5KP8me73o6W8sTfr82a2VUe7zUOHvnSruq2hNilrYKpgM 7tKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711215326; x=1711820126; 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:message-id:reply-to; bh=a9l3YZR5YpgFqq8POIxegvf33p5MInnlEiLYkSCHsDQ=; b=aO+pouOy1XeiEJtGwTy5Ue6bZYkkePtOZkqZO1h9Xz2Cx8Yh9RLyDim14IVp7u0GN7 joF60ZKfV1eOAbB0y91suB0d4z6hkbvMlPdKqE3YTlcJPfccP+7tgRek0PZnfWVNvlVh x98nlbapFmF2wNlfWP/M+UBuS2heck4CUUPynC5R71bxN94nXjmHuJrYEUWvmCr5V0VM 2/YIZ+QEZanFkI7+MG/yEcic2MMxO59S/AgxAtnrzkhDwq6/eHlUEL53wH6kHRnRj0M7 lgTd3l539xiviSDjKiO7aSZqVe+E8SG1kyIxEOSULvASpawNCoddzFtWAx0/wUyizFck 3K5Q== X-Gm-Message-State: AOJu0Yxm8YsHBjoXdx702LVhP/kK6s2VfUOwoGoY9JWDqyNERaZ7giN2 sxJ+18Sta6rPPNI5dSUCMgQfwg5nKfueRKDlNH4hQv1j+V23dLhe5gOjplzp X-Google-Smtp-Source: AGHT+IGCACqy8W7CAQ9QkjE6Gc8WTvS5JNeZQ7sTDu32JyqIxX4WWT6rfxUrV4wyWbB4XsziVBaKgA== X-Received: by 2002:a19:6917:0:b0:513:5dc3:9ebb with SMTP id e23-20020a196917000000b005135dc39ebbmr1710919lfc.4.1711215325566; Sat, 23 Mar 2024 10:35:25 -0700 (PDT) Received: from surface-pro-6.. (79-139-171-253.dynamic.spd-mgts.ru. [79.139.171.253]) by smtp.gmail.com with ESMTPSA id g20-20020ac25394000000b00513973dee6fsm361290lfh.150.2024.03.23.10.35.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 23 Mar 2024 10:35:25 -0700 (PDT) From: Sergey Bugaev To: libc-alpha@sourceware.org, bug-hurd@gnu.org Cc: Maxim Kuvyrkov , Luca Subject: [PATCH v2 14/20] hurd: Implement TLS on AArch64 Date: Sat, 23 Mar 2024 20:32:55 +0300 Message-ID: <20240323173301.151066-15-bugaevc@gmail.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240323173301.151066-1-bugaevc@gmail.com> References: <20240323173301.151066-1-bugaevc@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-9.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_NUMSUBJECT, KAM_SHORT, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org This is using TLS_DTV_AT_TP, aka "Variant I" layout. tpidr_el0, which is both readable and writable from userspace, is used as the thread pointer. We store our Hurd-specific data (sigstate and reply port) *before* the TCB head, in a tcbprehead_t structure. This tcbprehead_t structure is also what THREAD_SELF, THREAD_GETMEM, and THREAD_SETMEM macros access. Signed-off-by: Sergey Bugaev --- .../mach/hurd/aarch64/dl-tls-initialized.c | 19 ++ sysdeps/mach/hurd/aarch64/tls.h | 206 ++++++++++++++++++ 2 files changed, 225 insertions(+) create mode 100644 sysdeps/mach/hurd/aarch64/dl-tls-initialized.c create mode 100644 sysdeps/mach/hurd/aarch64/tls.h diff --git a/sysdeps/mach/hurd/aarch64/dl-tls-initialized.c b/sysdeps/mach/hurd/aarch64/dl-tls-initialized.c new file mode 100644 index 00000000..9beafec3 --- /dev/null +++ b/sysdeps/mach/hurd/aarch64/dl-tls-initialized.c @@ -0,0 +1,19 @@ +/* Determine whether TLS is initialized, for AArch64/Hurd. + Copyright (C) 1995-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* Nothing here, it's all handled in tls.h */ diff --git a/sysdeps/mach/hurd/aarch64/tls.h b/sysdeps/mach/hurd/aarch64/tls.h new file mode 100644 index 00000000..712134e1 --- /dev/null +++ b/sysdeps/mach/hurd/aarch64/tls.h @@ -0,0 +1,206 @@ +/* Copyright (C) 2005-2024 Free Software Foundation, Inc. + + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _AARCH64_TLS_H +#define _AARCH64_TLS_H 1 + +/* Some things really need not be machine-dependent. */ +#include + +#include + +#ifndef __ASSEMBLER__ +# include +# include +# include +# include +# include +# include +# include +#endif /* __ASSEMBLER__ */ + +#ifndef __ASSEMBLER__ + +/* Get system call information. */ +# include + +/* The TP points to the start of the thread blocks. */ +# define TLS_DTV_AT_TP 1 +# define TLS_TCB_AT_TP 0 + +typedef struct +{ + /* Used by the exception handling implementation in the dynamic loader. */ + struct rtld_catch *rtld_catch; + + struct hurd_sigstate *_hurd_sigstate; + mach_port_t reply_port; /* This thread's reply port. */ + + int gscope_flag; +} tcbprehead_t; + +typedef struct +{ + dtv_t *dtv; + void *private; +} tcbhead_t; + +/* This is the size of the initial TCB. */ +# define TLS_INIT_TCB_SIZE sizeof (tcbhead_t) + +/* This is the size we need before TCB. */ +# define TLS_PRE_TCB_SIZE sizeof (tcbprehead_t) + +# define TCB_ALIGNMENT 64 + +/* Install new dtv for current thread. */ +# define INSTALL_NEW_DTV(dtv) \ + (THREAD_DTV() = (dtv)) + +/* Return the address of the dtv for the current thread. */ +# define THREAD_DTV() \ + (((tcbhead_t *) __builtin_thread_pointer ())->dtv) + +/* Return the thread descriptor for the current thread. */ +# define THREAD_SELF \ + ((tcbprehead_t *)__builtin_thread_pointer () - 1) + +/* Read member of the thread descriptor directly. */ +# define THREAD_GETMEM(descr, member) \ + ((descr)->member) + +/* Write member of the thread descriptor directly. */ +# define THREAD_SETMEM(descr, member, value) \ + ((descr)->member = (value)) + +/* Return the TCB address of a thread given its state. + Note: this is expensive. */ +static inline tcbprehead_t * __attribute__ ((unused)) +THREAD_TCB (thread_t thread, + struct machine_thread_all_state *all_state) +{ + int ok; + const struct aarch64_thread_state *state; + tcbhead_t *tcb; + + ok = machine_get_basic_state (thread, all_state); + assert (ok); + state = &((struct machine_thread_all_state *) all_state)->basic; + tcb = (tcbhead_t *) state->tpidr_el0; + return (tcbprehead_t *) tcb - 1; +} + +/* From hurd.h, reproduced here to avoid a circular include. */ +extern thread_t __hurd_thread_self (void); +libc_hidden_proto (__hurd_thread_self); + +/* Set up TLS in the new thread of a fork child, copying from the original. */ +static inline kern_return_t __attribute__ ((unused)) +_hurd_tls_fork (thread_t child, thread_t orig, + struct aarch64_thread_state *state) +{ + error_t err; + struct aarch64_thread_state orig_state; + mach_msg_type_number_t state_count = AARCH64_THREAD_STATE_COUNT; + + if (orig != __hurd_thread_self ()) + { + err = __thread_get_state (orig, AARCH64_THREAD_STATE, + (thread_state_t) &orig_state, + &state_count); + if (err) + return err; + assert (state_count == AARCH64_THREAD_STATE_COUNT); + state->tpidr_el0 = orig_state.tpidr_el0; + } + else + state->tpidr_el0 = (uintptr_t) __builtin_thread_pointer (); + return 0; +} + +static inline kern_return_t __attribute__ ((unused)) +_hurd_tls_new (thread_t child, tcbhead_t *tcb) +{ + error_t err; + struct aarch64_thread_state state; + mach_msg_type_number_t state_count = AARCH64_THREAD_STATE_COUNT; + + err = __thread_get_state (child, AARCH64_THREAD_STATE, + (thread_state_t) &state, + &state_count); + if (err) + return err; + assert (state_count == AARCH64_THREAD_STATE_COUNT); + + state.tpidr_el0 = (uintptr_t) tcb; + + return __thread_set_state (child, AARCH64_THREAD_STATE, + (thread_state_t) &state, + state_count); +} + +# if !defined (SHARED) || IS_IN (rtld) +# define __LIBC_NO_TLS() __builtin_expect (!__builtin_thread_pointer (), 0) + +static inline bool __attribute__ ((unused)) +_hurd_tls_init (tcbhead_t *tcb, bool full) +{ + extern mach_port_t __hurd_reply_port0; + + if (full) + /* Take over the reply port we've been using. */ + (((tcbprehead_t *) tcb) - 1)->reply_port = __hurd_reply_port0; + + __asm __volatile ("msr tpidr_el0, %0" : : "r" (tcb)); + if (full) + /* This port is now owned by the TCB. */ + __hurd_reply_port0 = MACH_PORT_NULL; + return true; +} + +# define TLS_INIT_TP(descr) _hurd_tls_init ((tcbhead_t *) (descr), 1) +# else /* defined (SHARED) && !IS_IN (rtld) */ +# define __LIBC_NO_TLS() 0 +# endif + +/* Global scope switch support. */ +# define THREAD_GSCOPE_FLAG_UNUSED 0 +# define THREAD_GSCOPE_FLAG_USED 1 +# define THREAD_GSCOPE_FLAG_WAIT 2 + +# define THREAD_GSCOPE_SET_FLAG() \ + do \ + { \ + THREAD_SELF->gscope_flag = THREAD_GSCOPE_FLAG_USED; \ + atomic_write_barrier (); \ + } \ + while (0) + +# define THREAD_GSCOPE_RESET_FLAG() \ + do \ + { int __flag \ + = atomic_exchange_release (&THREAD_SELF->gscope_flag, \ + THREAD_GSCOPE_FLAG_UNUSED); \ + if (__flag == THREAD_GSCOPE_FLAG_WAIT) \ + lll_wake (THREAD_SELF->gscope_flag, LLL_PRIVATE); \ + } \ + while (0) + +# endif /* __ASSEMBLER__ */ + +#endif /* tls.h */ From patchwork Sat Mar 23 17:32:56 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergey Bugaev X-Patchwork-Id: 1915217 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=SXrQZ67e; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=sourceware.org (client-ip=8.43.85.97; helo=server2.sourceware.org; envelope-from=libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4V25yz5lY9z1yXr for ; Sun, 24 Mar 2024 04:38:51 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id CE1943858D28 for ; Sat, 23 Mar 2024 17:38:49 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-lf1-x136.google.com (mail-lf1-x136.google.com [IPv6:2a00:1450:4864:20::136]) by sourceware.org (Postfix) with ESMTPS id 9206A3858C66 for ; Sat, 23 Mar 2024 17:35:28 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 9206A3858C66 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 9206A3858C66 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::136 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215331; cv=none; b=NVnRtLK12HRn5F7Nc78smboE5x+U/lPQZK1yfhMS9oJiO6P0a+aHyiAvd/VLUYW3XBwWWFwOlf20JPA5Y4B5iIURaFlJ+Mof6UJowdWCNizjbGF2/Ke/lSQvPSUEL1qLGSOafK7OvkIY+QcLeNf5cLzrTWvTjTZ+XSmUKtcZIfE= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215331; c=relaxed/simple; bh=aRAYH8cg/FQfG9vlbuB3pu7Fpu+FjypNtmhc19FAwaM=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=DsM067jEtwV8Vsx48Y2z7MKessLgfLAb3oOmnxzWtaZ74QThRbIKHQ/NGxG6SqHMluOUrWsVuUa9I7P36006ppkP+zH/R8S9ijfNLWQW6jTmcmI808jGh0zD78sFQmMhUOZkFbtV6cMt067xl/JrjFah7n1cxIA5E+9vECZ9t2E= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-lf1-x136.google.com with SMTP id 2adb3069b0e04-512e4f4e463so3442320e87.1 for ; Sat, 23 Mar 2024 10:35:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1711215327; x=1711820127; darn=sourceware.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=sXaIzdehYTd1QI3bPvefmhKH8e0W7xDPTCky0pSsgKI=; b=SXrQZ67elkHBCIagqc62jehgg5IT7tz8KPyzX5kfTM5RNeELQXSwsSbylL3328g7g9 hXNvpEeD0un4Wd7KDtj+6EmGOUAjfwILa0FX4rC+xyqnkQtOSpQ7Y+GPegTkZQ+skHFO mNS3P3Sz1TnqQVHh13kfUDe6EWYYqFMQR6BWxPL84Qv1NYzx59BIFyh5NBQIjMioEOv1 pnEP6dbcG9WGSZuxFEGrYRvwClfh7+7SZ2G3dA8+rvP0wXIWm9ZAkJmM33v2tQD4pAGe Km7tPnVlUuroB8xm1RZrbUd58cMg6UGgCU8FJcBlQs73MYM+1tZjo/sGFiLWQfFGR2Vk /DDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711215327; x=1711820127; 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:message-id:reply-to; bh=sXaIzdehYTd1QI3bPvefmhKH8e0W7xDPTCky0pSsgKI=; b=bgAWLZMXMqhuzS9cNmDeEoQSYCkcnA1C1BqJGXHRP8lX03tZ4N9i9Re8gUzvmRbPYU zOYl7+7/fHv7gwFFNh7i9yaPPgTLzH4UuFwe0kF1CJN0tvbF+5qMg5ogce5ekzbppJmT hf2oC1UqhElyKH1XSZaFHd0dD2JeCVqsr7svxUZ+KYUG/0+YKaw21GLO69ALpz8HnvXp 72SduTb00QI+duXoDBcCoOvfRr7Qdk5S8mHrz23HNb43NDSb//KfEFiW/jGAFDBL0kPZ 1ZLfCA9j5RfZUl6Vw+eGG8Gy6K2yZFAypKHtRCZRd52lpM5wz74jixK9Kl44oId8mwBR gAYw== X-Gm-Message-State: AOJu0YxDnR/R9yl+HiQxNM+7mWsjSGJXDAthTDxEJSBycHyg0SwE63ZI rPo4UvRop/Zj6gmYKmBjHpk1etJcSZWYcWisYcqrQCQ9V+L3I60ZnzYDd9+R X-Google-Smtp-Source: AGHT+IFygH9GCkLwTFkbSYH963+iUH8jjIQ/CP5VSUr/esbSO8md5hbXNXBNnmXy1mDSL/Auy6pvpw== X-Received: by 2002:a19:7708:0:b0:515:9568:fb14 with SMTP id s8-20020a197708000000b005159568fb14mr1642482lfc.46.1711215326711; Sat, 23 Mar 2024 10:35:26 -0700 (PDT) Received: from surface-pro-6.. (79-139-171-253.dynamic.spd-mgts.ru. [79.139.171.253]) by smtp.gmail.com with ESMTPSA id g20-20020ac25394000000b00513973dee6fsm361290lfh.150.2024.03.23.10.35.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 23 Mar 2024 10:35:26 -0700 (PDT) From: Sergey Bugaev To: libc-alpha@sourceware.org, bug-hurd@gnu.org Cc: Maxim Kuvyrkov , Luca Subject: [PATCH v2 15/20] hurd: Implement longjmp for AArch64 Date: Sat, 23 Mar 2024 20:32:56 +0300 Message-ID: <20240323173301.151066-16-bugaevc@gmail.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240323173301.151066-1-bugaevc@gmail.com> References: <20240323173301.151066-1-bugaevc@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-9.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_NUMSUBJECT, KAM_SHORT, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org This is based on the generic AArch64 version, but it additionally respects and updates the Hurd sigstate. Signed-off-by: Sergey Bugaev --- Same patch as last time. Something somewhere here should probably be hooked up to the hurd_userlink mechanism; I haven't looked into that. sysdeps/aarch64/htl/tcb-offsets.sym | 5 + sysdeps/mach/hurd/aarch64/Makefile | 24 +++ sysdeps/mach/hurd/aarch64/____longjmp_chk.S | 173 +++++++++++++++++++ sysdeps/mach/hurd/aarch64/__longjmp.S | 150 ++++++++++++++++ sysdeps/mach/hurd/aarch64/signal-defines.sym | 10 ++ 5 files changed, 362 insertions(+) create mode 100644 sysdeps/aarch64/htl/tcb-offsets.sym create mode 100644 sysdeps/mach/hurd/aarch64/Makefile create mode 100644 sysdeps/mach/hurd/aarch64/____longjmp_chk.S create mode 100644 sysdeps/mach/hurd/aarch64/__longjmp.S create mode 100644 sysdeps/mach/hurd/aarch64/signal-defines.sym diff --git a/sysdeps/aarch64/htl/tcb-offsets.sym b/sysdeps/aarch64/htl/tcb-offsets.sym new file mode 100644 index 00000000..56140780 --- /dev/null +++ b/sysdeps/aarch64/htl/tcb-offsets.sym @@ -0,0 +1,5 @@ +#include +#include +#include + +SIGSTATE_OFFSET offsetof (tcbprehead_t, _hurd_sigstate) - sizeof (tcbprehead_t) diff --git a/sysdeps/mach/hurd/aarch64/Makefile b/sysdeps/mach/hurd/aarch64/Makefile new file mode 100644 index 00000000..9210d436 --- /dev/null +++ b/sysdeps/mach/hurd/aarch64/Makefile @@ -0,0 +1,24 @@ +# Copyright (C) 2020-2024 Free Software Foundation, Inc. +# This file is part of the GNU C Library. + +# The GNU C Library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. + +# The GNU C Library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. + +# You should have received a copy of the GNU Lesser General Public +# License along with the GNU C Library; if not, see +# . + +ifeq ($(subdir),debug) +gen-as-const-headers += signal-defines.sym +endif + +ifeq ($(subdir),setjmp) +gen-as-const-headers += signal-defines.sym +endif diff --git a/sysdeps/mach/hurd/aarch64/____longjmp_chk.S b/sysdeps/mach/hurd/aarch64/____longjmp_chk.S new file mode 100644 index 00000000..90f062df --- /dev/null +++ b/sysdeps/mach/hurd/aarch64/____longjmp_chk.S @@ -0,0 +1,173 @@ +/* Copyright (C) 1997-2024 Free Software Foundation, Inc. + + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + . */ + +#include +#include +#include +#include +#include +#include +#include + +#define SS_ONSTACK 1 +#define SS_ONSTACK_BIT 0 + + .section .rodata.str1.1,"aMS",%progbits,1 + .type longjmp_msg,%object +longjmp_msg: + .string "longjmp causes uninitialized stack frame" + .size longjmp_msg, .-longjmp_msg + .text + +# define CALL_FAIL \ + adrp x0, longjmp_msg; \ + add x0, x0, :lo12:longjmp_msg; \ + b HIDDEN_JUMPTARGET(__fortify_fail) \ + +/* Jump to the position specified by ENV, causing the + setjmp call there to return VAL, or 1 if VAL is 0. + void __longjmp (__jmp_buf env, int val). */ + .text +ENTRY(____longjmp_chk) + cfi_def_cfa(x0, 0) + cfi_offset(x19, JB_X19<<3) + cfi_offset(x20, JB_X20<<3) + cfi_offset(x21, JB_X21<<3) + cfi_offset(x22, JB_X22<<3) + cfi_offset(x23, JB_X23<<3) + cfi_offset(x24, JB_X24<<3) + cfi_offset(x25, JB_X25<<3) + cfi_offset(x26, JB_X26<<3) + cfi_offset(x27, JB_X27<<3) + cfi_offset(x28, JB_X28<<3) + cfi_offset(x29, JB_X29<<3) + cfi_offset(x30, JB_LR<<3) + + cfi_offset( d8, JB_D8<<3) + cfi_offset( d9, JB_D9<<3) + cfi_offset(d10, JB_D10<<3) + cfi_offset(d11, JB_D11<<3) + cfi_offset(d12, JB_D12<<3) + cfi_offset(d13, JB_D13<<3) + cfi_offset(d14, JB_D14<<3) + cfi_offset(d15, JB_D15<<3) + + PTR_ARG (0) + + ldp x19, x20, [x0, #JB_X19<<3] + ldp x21, x22, [x0, #JB_X21<<3] + ldp x23, x24, [x0, #JB_X23<<3] + ldp x25, x26, [x0, #JB_X25<<3] + ldp x27, x28, [x0, #JB_X27<<3] +#ifdef PTR_DEMANGLE + ldp x29, x4, [x0, #JB_X29<<3] + PTR_DEMANGLE (30, 4, 3, 2) +#else + ldp x29, x30, [x0, #JB_X29<<3] +#endif + /* longjmp probe takes 3 arguments, address of jump buffer as + first argument (8@x0), return value as second argument (-4@x1), + and target address (8@x30), respectively. */ + LIBC_PROBE (longjmp, 3, 8@x0, -4@x1, 8@x30) + ldp d8, d9, [x0, #JB_D8<<3] + ldp d10, d11, [x0, #JB_D10<<3] + ldp d12, d13, [x0, #JB_D12<<3] + ldp d14, d15, [x0, #JB_D14<<3] + + /* Originally this was implemented with a series of + .cfi_restore() directives. + + The theory was that cfi_restore should revert to previous + frame value is the same as the current value. In practice + this doesn't work, even after cfi_restore() gdb continues + to try to recover a previous frame value offset from x0, + which gets stuffed after a few more instructions. The + cfi_same_value() mechanism appears to work fine. */ + + cfi_same_value(x19) + cfi_same_value(x20) + cfi_same_value(x21) + cfi_same_value(x22) + cfi_same_value(x23) + cfi_same_value(x24) + cfi_same_value(x25) + cfi_same_value(x26) + cfi_same_value(x27) + cfi_same_value(x28) + cfi_same_value(x29) + cfi_same_value(x30) + cfi_same_value(d8) + cfi_same_value(d9) + cfi_same_value(d10) + cfi_same_value(d11) + cfi_same_value(d12) + cfi_same_value(d13) + cfi_same_value(d14) + cfi_same_value(d15) +#ifdef PTR_DEMANGLE + ldr x4, [x0, #JB_SP<<3] + PTR_DEMANGLE (5, 4, 3, 2) +#else + ldr x5, [x0, #JB_SP<<3] +#endif + + mrs x3, tpidr_el0 +#if !defined (SHARED) || IS_IN (rtld) + cbz x3, L(ok) /* TLS not initialized yet */ +#endif + ldr x3, [x3, #SIGSTATE_OFFSET] + cbz x3, L(ok) /* sigstate not initialized yet */ + + ldrb w4, [x3, # (HURD_SIGSTATE__SIGALTSTACK__OFFSET + SIGALTSTACK__SS_FLAGS__OFFSET)] + tbnz w4, #SS_ONSTACK_BIT, L(onstack) + /* We haven't been using an altstack. Jumping to a higher-address + frame is always allowed, otherwise it's not allowed. */ + mov x6, sp + cmp x5, x6 + b.lt L(ok) + +L(fail): + CALL_FAIL + +L(onstack): + /* We have been using an altstack. Was it above or below ours? */ + ldr x2, [x3, # (HURD_SIGSTATE__SIGALTSTACK__OFFSET + SIGALTSTACK__SS_SP__OFFSET)] + cmp x2, x5 + b.lt L(oks) /* Jumping below the altstack, switch */ + ldr x6, [x3, # (HURD_SIGSTATE__SIGALTSTACK__OFFSET + SIGALTSTACK__SS_SIZE__OFFSET)] + add x2, x2, x6 + cmp x2, x5 + b.lt L(ok) /* Jumping inside the altstack, do not switch */ + + /* Jumping above the altstack, switch */ +L(oks): + and w4, w4, #~(SS_ONSTACK) + str w4, [x3, # (HURD_SIGSTATE__SIGALTSTACK__OFFSET + SIGALTSTACK__SS_FLAGS__OFFSET)] +L(ok): + mov sp, x5 + + /* longjmp_target probe takes 3 arguments, address of jump buffer + as first argument (8@x0), return value as second argument (-4@x1), + and target address (8@x30), respectively. */ + LIBC_PROBE (longjmp_target, 3, 8@x0, -4@x1, 8@x30) + cmp x1, #0 + mov x0, #1 + csel x0, x1, x0, ne + /* Use br instead of ret because ret is guaranteed to mispredict */ + br x30 +END (____longjmp_chk) diff --git a/sysdeps/mach/hurd/aarch64/__longjmp.S b/sysdeps/mach/hurd/aarch64/__longjmp.S new file mode 100644 index 00000000..c9f2e1ce --- /dev/null +++ b/sysdeps/mach/hurd/aarch64/__longjmp.S @@ -0,0 +1,150 @@ +/* Copyright (C) 1997-2024 Free Software Foundation, Inc. + + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + . */ + +#include +#include +#include +#include +#include +#include +#include + +#define SS_ONSTACK 1 +#define SS_ONSTACK_BIT 0 + +/* __longjmp(jmpbuf, val) */ + +ENTRY (__longjmp) + cfi_def_cfa(x0, 0) + cfi_offset(x19, JB_X19<<3) + cfi_offset(x20, JB_X20<<3) + cfi_offset(x21, JB_X21<<3) + cfi_offset(x22, JB_X22<<3) + cfi_offset(x23, JB_X23<<3) + cfi_offset(x24, JB_X24<<3) + cfi_offset(x25, JB_X25<<3) + cfi_offset(x26, JB_X26<<3) + cfi_offset(x27, JB_X27<<3) + cfi_offset(x28, JB_X28<<3) + cfi_offset(x29, JB_X29<<3) + cfi_offset(x30, JB_LR<<3) + + cfi_offset( d8, JB_D8<<3) + cfi_offset( d9, JB_D9<<3) + cfi_offset(d10, JB_D10<<3) + cfi_offset(d11, JB_D11<<3) + cfi_offset(d12, JB_D12<<3) + cfi_offset(d13, JB_D13<<3) + cfi_offset(d14, JB_D14<<3) + cfi_offset(d15, JB_D15<<3) + + PTR_ARG (0) + + ldp x19, x20, [x0, #JB_X19<<3] + ldp x21, x22, [x0, #JB_X21<<3] + ldp x23, x24, [x0, #JB_X23<<3] + ldp x25, x26, [x0, #JB_X25<<3] + ldp x27, x28, [x0, #JB_X27<<3] +#ifdef PTR_DEMANGLE + ldp x29, x4, [x0, #JB_X29<<3] + PTR_DEMANGLE (30, 4, 3, 2) +#else + ldp x29, x30, [x0, #JB_X29<<3] +#endif + /* longjmp probe takes 3 arguments, address of jump buffer as + first argument (8@x0), return value as second argument (-4@x1), + and target address (8@x30), respectively. */ + LIBC_PROBE (longjmp, 3, 8@x0, -4@x1, 8@x30) + ldp d8, d9, [x0, #JB_D8<<3] + ldp d10, d11, [x0, #JB_D10<<3] + ldp d12, d13, [x0, #JB_D12<<3] + ldp d14, d15, [x0, #JB_D14<<3] + + /* Originally this was implemented with a series of + .cfi_restore() directives. + + The theory was that cfi_restore should revert to previous + frame value is the same as the current value. In practice + this doesn't work, even after cfi_restore() gdb continues + to try to recover a previous frame value offset from x0, + which gets stuffed after a few more instructions. The + cfi_same_value() mechanism appears to work fine. */ + + cfi_same_value(x19) + cfi_same_value(x20) + cfi_same_value(x21) + cfi_same_value(x22) + cfi_same_value(x23) + cfi_same_value(x24) + cfi_same_value(x25) + cfi_same_value(x26) + cfi_same_value(x27) + cfi_same_value(x28) + cfi_same_value(x29) + cfi_same_value(x30) + cfi_same_value(d8) + cfi_same_value(d9) + cfi_same_value(d10) + cfi_same_value(d11) + cfi_same_value(d12) + cfi_same_value(d13) + cfi_same_value(d14) + cfi_same_value(d15) +#ifdef PTR_DEMANGLE + ldr x4, [x0, #JB_SP<<3] + PTR_DEMANGLE (5, 4, 3, 2) +#else + ldr x5, [x0, #JB_SP<<3] +#endif + + mrs x3, tpidr_el0 +#if !defined (SHARED) || IS_IN (rtld) + cbz x3, L(ok) /* TLS not initialized yet */ +#endif + ldr x3, [x3, #SIGSTATE_OFFSET] + cbz x3, L(ok) /* sigstate not initialized yet */ + /* If we haven't been using an altstack, don't switch */ + ldrb w4, [x3, # (HURD_SIGSTATE__SIGALTSTACK__OFFSET + SIGALTSTACK__SS_FLAGS__OFFSET)] + tbz w4, #SS_ONSTACK_BIT, L(ok) + + /* We have been using an altstack. Was it above or below ours? */ + ldr x2, [x3, # (HURD_SIGSTATE__SIGALTSTACK__OFFSET + SIGALTSTACK__SS_SP__OFFSET)] + cmp x2, x5 + b.lt L(oks) /* Jumping below the altstack, switch */ + ldr x6, [x3, # (HURD_SIGSTATE__SIGALTSTACK__OFFSET + SIGALTSTACK__SS_SIZE__OFFSET)] + add x2, x2, x6 + cmp x2, x5 + b.lt L(ok) /* Jumping inside the altstack, do not switch */ + + /* Jumping above the altstack, switch */ +L(oks): + and w4, w4, #~(SS_ONSTACK) + str w4, [x3, # (HURD_SIGSTATE__SIGALTSTACK__OFFSET + SIGALTSTACK__SS_FLAGS__OFFSET)] +L(ok): + mov sp, x5 + + /* longjmp_target probe takes 3 arguments, address of jump buffer + as first argument (8@x0), return value as second argument (-4@x1), + and target address (8@x30), respectively. */ + LIBC_PROBE (longjmp_target, 3, 8@x0, -4@x1, 8@x30) + cmp x1, #0 + mov x0, #1 + csel x0, x1, x0, ne + /* Use br instead of ret because ret is guaranteed to mispredict */ + br x30 +END (__longjmp) diff --git a/sysdeps/mach/hurd/aarch64/signal-defines.sym b/sysdeps/mach/hurd/aarch64/signal-defines.sym new file mode 100644 index 00000000..e42bbbe0 --- /dev/null +++ b/sysdeps/mach/hurd/aarch64/signal-defines.sym @@ -0,0 +1,10 @@ +#include +#include + +-- + +HURD_SIGSTATE__SIGALTSTACK__OFFSET offsetof(struct hurd_sigstate, sigaltstack) + +SIGALTSTACK__SS_SP__OFFSET offsetof(stack_t, ss_sp) +SIGALTSTACK__SS_SIZE__OFFSET offsetof(stack_t, ss_size) +SIGALTSTACK__SS_FLAGS__OFFSET offsetof(stack_t, ss_flags) From patchwork Sat Mar 23 17:32:57 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergey Bugaev X-Patchwork-Id: 1915212 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=JtC9mXHi; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=sourceware.org (client-ip=8.43.85.97; helo=server2.sourceware.org; envelope-from=libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4V25xf2Kkjz1yXr for ; Sun, 24 Mar 2024 04:37:42 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 6434E385829A for ; Sat, 23 Mar 2024 17:37:40 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-lj1-x22c.google.com (mail-lj1-x22c.google.com [IPv6:2a00:1450:4864:20::22c]) by sourceware.org (Postfix) with ESMTPS id 52D48385841D for ; Sat, 23 Mar 2024 17:35:29 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 52D48385841D Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 52D48385841D Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::22c ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215331; cv=none; b=gcMWqY8ILrElJBx9W2GmGrywcpFMZ3XzHlDdaNUgX4TcGB9deD5QQdb6shxWMADe2pho1OzoSfAJSipKPUhhDo9gE/1XufHYN+dBE3NZWKyd790+LslaPPs6ETxPsRqNt79DSvQ7fN9vjJj20Tov9WNCAnqUbAxNoEh8UgoL9mw= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215331; c=relaxed/simple; bh=Ee63xut9bn/SExLRBIHByZYouqcluJL2A2zYtH13p84=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=PhtDwbOmbVyHAIsdw1MnYHaT3oF0KhnGl8jmHCGGT9affRaODMSiE8t9ttI2HR6bQPBwNnWQ4F9EKCVKK+ANYjnt3YA7oDD309TdFZ++mIv2GR/+A+HhE8/O2ODGTNqEFUITZud9jQ5RYmCHFaYI8hSMT+DKtBcCOI00Lq/s0FQ= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-lj1-x22c.google.com with SMTP id 38308e7fff4ca-2d6a1af9c07so43914751fa.3 for ; Sat, 23 Mar 2024 10:35:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1711215327; x=1711820127; darn=sourceware.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=E9zWxe28wslNYGdt9ZfD9neGyjLcdLLVqZ59haUdDxI=; b=JtC9mXHiK1v8RyD+ooiJC/SdNrAS4Tb0thxgbxGxFpSKv3AtfXIIg6PR6E6Pg1ho6E +SRbHdiPNmszsTeFcKqXNudqwk79y8NiYZ15GL3dgxvXdUUfTS5eZ3l6FmfDUB1rdIpd cWxAHbDSLURiZ5auVPZc9j8WxFtaqyvtsF/TgTx50oCoGhCxhybQVoQwJJXTSiCw9DAH N01vShiZwI6nqJ4usLFkKfw9xcX7YZwyP/XTHzvbgImMvEtVeBueCkUdOK/aBMTOilSM UwjLAckN2/wQcEDhluEsPVAUZ+LWajm++D/GKwzq/xR2mD9TqIWenoM9GY6sQ5o9Wu8j 4T1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711215327; x=1711820127; 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:message-id:reply-to; bh=E9zWxe28wslNYGdt9ZfD9neGyjLcdLLVqZ59haUdDxI=; b=xGH6w46oxreUnfVVz6h01szldU8QZxH8DuohsiC8TqvgcXKlIGiwIGv7kLAirBDMcN 1T+SfDWO0CNNfXenTpYWS4qjXfPZPQzFVPm95kseK4zDh259t9m+LlahNpUaY+AZFAWj 73StH55o8socHJWeMg5ODMepQLE27klE1A1MSjH8oHh/Gy1SKQJ6/GC/0jHWq1LxQEQr Svem//nejzJMcLWdpMifY57YtHXmj9kbdsOWdzMSJaSvTK6Xcd+fJ97NmJ2NmXjkAu9s eDB6VdQE/RJGVjq+Eu/SD0YBEz7lNjHWO15X4jGIMZItjgbOELcnJS4+6pknz4ar800x zHXg== X-Gm-Message-State: AOJu0Yx0ToiF6jfRrdNJvm6bGKyrPVjHP+KClATEEu9tIxSHe2SOxn5M 3AvR7P4sx8Uw2C6QVIb+H4SKOy2dvujWtl4v4gmmULlL98MjnEj718955WBA X-Google-Smtp-Source: AGHT+IFQVtBuRApP9FcyGNsCqGB3FRePdOK/24hKncKQ967vgB5uXL6lGxCPEI+MiyknB00MFLKNaA== X-Received: by 2002:ac2:4851:0:b0:513:e466:cb05 with SMTP id 17-20020ac24851000000b00513e466cb05mr1590995lfy.45.1711215327599; Sat, 23 Mar 2024 10:35:27 -0700 (PDT) Received: from surface-pro-6.. (79-139-171-253.dynamic.spd-mgts.ru. [79.139.171.253]) by smtp.gmail.com with ESMTPSA id g20-20020ac25394000000b00513973dee6fsm361290lfh.150.2024.03.23.10.35.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 23 Mar 2024 10:35:27 -0700 (PDT) From: Sergey Bugaev To: libc-alpha@sourceware.org, bug-hurd@gnu.org Cc: Maxim Kuvyrkov , Luca Subject: [PATCH v2 16/20] Add FPE_FLTIDO Date: Sat, 23 Mar 2024 20:32:57 +0300 Message-ID: <20240323173301.151066-17-bugaevc@gmail.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240323173301.151066-1-bugaevc@gmail.com> References: <20240323173301.151066-1-bugaevc@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-9.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org This is a new si_code value for the SIGFPE signal that has been added to FreeBSD, and is also going to be used on the Hurd. Signed-off-by: Sergey Bugaev --- This makes sense, right? We should probably define more codes still (see exception2signal in the next patch). bits/siginfo-consts.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bits/siginfo-consts.h b/bits/siginfo-consts.h index 4eef775e..362a06a6 100644 --- a/bits/siginfo-consts.h +++ b/bits/siginfo-consts.h @@ -75,8 +75,10 @@ enum # define FPE_FLTRES FPE_FLTRES FPE_FLTINV, /* Floating point invalid operation. */ # define FPE_FLTINV FPE_FLTINV - FPE_FLTSUB /* Subscript out of range. */ + FPE_FLTSUB, /* Subscript out of range. */ # define FPE_FLTSUB FPE_FLTSUB + FPE_FLTIDO /* Input denormal operation. */ +# define FPE_FLTIDO FPE_FLTIDO }; /* `si_code' values for SIGSEGV signal. */ From patchwork Sat Mar 23 17:32:58 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergey Bugaev X-Patchwork-Id: 1915223 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=dqwvNb+f; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=sourceware.org (client-ip=8.43.85.97; helo=server2.sourceware.org; envelope-from=libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4V261K2BMbz1yXy for ; Sun, 24 Mar 2024 04:40:53 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 252653858D33 for ; Sat, 23 Mar 2024 17:40:51 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-lf1-x133.google.com (mail-lf1-x133.google.com [IPv6:2a00:1450:4864:20::133]) by sourceware.org (Postfix) with ESMTPS id 2C9F13858435 for ; Sat, 23 Mar 2024 17:35:31 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 2C9F13858435 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 2C9F13858435 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::133 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215336; cv=none; b=Z9kjOqokD8p9ZpMb/399fhvsCa/zA4ExsdKM57F/e7hhF9ytBcywEszlriICicDIOWv2YS/DiJuRxsgmYaUo8x7k1pQLZ21NF/MVMauW4LqKVOHI5oswW0MzVXyV6d3lEk+JhyY6133uiGeSsWLJJIeE/IZIkxMwSRGc9a7e708= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215336; c=relaxed/simple; bh=2Svubt2wXgYFVUnFpsoZK1ZRyxk/62Sd30kKyFZctv0=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=q1va8f//N6R5/skACb0MrtrN9/nWDjoXQBLTkklaO5gVR0LedibyUpIPhmW5ghfyD6eBbS61Rh7tb5I8FJ6x2+DVbl+9ZIyd+hcPmnARB/Wh8Uk7XpvGrLXU0TD1W6H8xxni9UB6+H8R2SFhumfytZdiHM8AyAm9xf7mBesc5PI= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-lf1-x133.google.com with SMTP id 2adb3069b0e04-513d247e3c4so2875554e87.0 for ; Sat, 23 Mar 2024 10:35:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1711215329; x=1711820129; darn=sourceware.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=9PlEzY53qDXnESrrCNwfcTKhTuk02hcxEilW+Y+osDg=; b=dqwvNb+fj9SvF5gp68om8kD8QAvxPYmNtJhVoycj1Y7lwxuKM4xwecrRZghYq8HpmB 3zRDms9ZJyElfAnLuCO8IsDHTznvm6aBD47Bo8I65Blt5Za5xs6d0qeU/klFHGzoIqcc MqQpkljCin1vDvm9LBCbyK02xUusdVS2/vqd9cINTbuGYrJOPoC7BPKNLTBCtu3MfCR9 QSoP8/9e2e42jvaYzDWh6jtLSCWFkge5yCw8P3nTRcnpadzUJ/NV/TzKH8yCYeCJLTbj mPN0m2PQD1MOw+WQ11kwIZ6UHfxQqxrehYX6RnSeb7KbA+qPbHtg0kq+rqw/WO+qZqHE DAGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711215329; x=1711820129; 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:message-id:reply-to; bh=9PlEzY53qDXnESrrCNwfcTKhTuk02hcxEilW+Y+osDg=; b=UNDldc6+P6N4A4WsHOZB/48OWnuYaXouR0+u6QcTWsixvtEbCVErVtFecYnNLV62yL DEM3Wl/KzNPp9E0hJT1gqmkyy5A2j14CpeQlPZRW2xPbQOUrlWwJbgMWUg/4EDtdI1FX 9Z2P07kYu2qdtCUDwnhMzkQL9z34PbBqm4+rc5y3Tlxk96nwx7/GAV6QB8dmx0SJYStS IlpT32JRgNfY8MvKXUOV1xg1RWF+NGPQvTMkOimMzKRUVzR68TKEapM0LAZU0xmrm4Ey QDIzpbYmdlLZl4LbcHBi1mmXwL5T+WHzsKHE+hQbD8qk7yAE6+fmWc2ICoahB0wuk4NU VK3g== X-Gm-Message-State: AOJu0YzM2SY/w5K2gv5iG4W9L+4QCudG7zZEpLlVTWmbontuHoWsAelt fpDbpk2Z7vNi4LTiM3KBjy+KDRi5hzOn65846/nhE3oL8HGI9e2vdK68+hcS X-Google-Smtp-Source: AGHT+IFiiFsHB8YEuigi6LItngKND9YRIr05ocNMn4Vf9Jmy8maf5kIrM2KzMJ4XRJLa0bmIVlR+6w== X-Received: by 2002:a05:6512:310d:b0:513:5e2f:6510 with SMTP id n13-20020a056512310d00b005135e2f6510mr691000lfb.31.1711215328940; Sat, 23 Mar 2024 10:35:28 -0700 (PDT) Received: from surface-pro-6.. (79-139-171-253.dynamic.spd-mgts.ru. [79.139.171.253]) by smtp.gmail.com with ESMTPSA id g20-20020ac25394000000b00513973dee6fsm361290lfh.150.2024.03.23.10.35.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 23 Mar 2024 10:35:28 -0700 (PDT) From: Sergey Bugaev To: libc-alpha@sourceware.org, bug-hurd@gnu.org Cc: Maxim Kuvyrkov , Luca Subject: [PATCH v2 17/20] hurd: Add an AArch64 signal implementation Date: Sat, 23 Mar 2024 20:32:58 +0300 Message-ID: <20240323173301.151066-18-bugaevc@gmail.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240323173301.151066-1-bugaevc@gmail.com> References: <20240323173301.151066-1-bugaevc@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-9.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_SHORT, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org Signed-off-by: Sergey Bugaev --- sysdeps/mach/hurd/aarch64/Makefile | 4 + sysdeps/mach/hurd/aarch64/bits/sigcontext.h | 96 ++++++ sysdeps/mach/hurd/aarch64/exc2signal.c | 149 +++++++++ sysdeps/mach/hurd/aarch64/intr-msg.h | 123 ++++++++ sysdeps/mach/hurd/aarch64/sigreturn.c | 127 ++++++++ sysdeps/mach/hurd/aarch64/trampoline.c | 325 ++++++++++++++++++++ 6 files changed, 824 insertions(+) create mode 100644 sysdeps/mach/hurd/aarch64/bits/sigcontext.h create mode 100644 sysdeps/mach/hurd/aarch64/exc2signal.c create mode 100644 sysdeps/mach/hurd/aarch64/intr-msg.h create mode 100644 sysdeps/mach/hurd/aarch64/sigreturn.c create mode 100644 sysdeps/mach/hurd/aarch64/trampoline.c diff --git a/sysdeps/mach/hurd/aarch64/Makefile b/sysdeps/mach/hurd/aarch64/Makefile index 9210d436..6cc831d6 100644 --- a/sysdeps/mach/hurd/aarch64/Makefile +++ b/sysdeps/mach/hurd/aarch64/Makefile @@ -22,3 +22,7 @@ endif ifeq ($(subdir),setjmp) gen-as-const-headers += signal-defines.sym endif + +ifeq ($(subdir),signal) +CFLAGS-sigreturn.c += -mgeneral-regs-only +endif diff --git a/sysdeps/mach/hurd/aarch64/bits/sigcontext.h b/sysdeps/mach/hurd/aarch64/bits/sigcontext.h new file mode 100644 index 00000000..163523fa --- /dev/null +++ b/sysdeps/mach/hurd/aarch64/bits/sigcontext.h @@ -0,0 +1,96 @@ +/* Machine-dependent signal context structure for GNU Hurd. AArch64 version. + Copyright (C) 1991-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _BITS_SIGCONTEXT_H +#define _BITS_SIGCONTEXT_H 1 + +#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H +# error "Never use directly; include instead." +#endif + +/* Signal handlers are actually called: + void handler (int sig, int code, struct sigcontext *scp); */ + +#include +#include + +/* State of this thread when the signal was taken. */ +struct sigcontext + { + /* These first members are machine-independent. */ + + int sc_onstack; /* Nonzero if running on sigstack. */ + __sigset_t sc_mask; /* Blocked signals to restore. */ + + /* MiG reply port this thread is using. */ + unsigned int sc_reply_port; + + /* Port this thread is doing an interruptible RPC on. */ + unsigned int sc_intr_port; + + /* Error code associated with this signal (interpreted as `error_t'). */ + int sc_error; + + /* Make sure the below members are properly aligned, and not packed + together with sc_error -- otherwise the layout won't match that of + aarch64_thread_state. */ + int sc_pad1; + + /* All following members are machine-dependent. The rest of this + structure is written to be laid out identically to: + { + struct aarch64_thread_state basic; + struct aarch64_float_state fpu; + } + trampoline.c knows this, so it must be changed if this changes. */ + +#define sc_aarch64_thread_state sc_x[0] /* Beginning of correspondence. */ + long sc_x[31]; + long sc_sp; + long sc_pc; + long sc_tpidr_el0; + long sc_cpsr; + +#define sc_aarch64_float_state sc_v[0] + __int128_t sc_v[32]; + long sc_fpsr; + long sc_fpcr; + }; + +/* Traditional BSD names for some members. */ +#define sc_fp sc_x[29] /* Frame pointer. */ +#define sc_ps sc_cpsr + + +/* The deprecated sigcode values below are passed as an extra, non-portable + argument to regular signal handlers. You should use SA_SIGINFO handlers + instead, which use the standard POSIX signal codes. */ + +/* Codes for SIGFPE. */ +#define FPE_INTOVF_TRAP 0x1 /* integer overflow */ +#define FPE_INTDIV_FAULT 0x2 /* integer divide by zero */ +#define FPE_FLTOVF_FAULT 0x3 /* floating overflow */ +#define FPE_FLTDIV_FAULT 0x4 /* floating divide by zero */ +#define FPE_FLTUND_FAULT 0x5 /* floating underflow */ +#define FPE_SUBRNG_FAULT 0x7 /* BOUNDS instruction failed */ +#define FPE_FLTDNR_FAULT 0x8 /* denormalized operand */ +#define FPE_FLTINX_FAULT 0x9 /* floating loss of precision */ +#define FPE_EMERR_FAULT 0xa /* mysterious emulation error 33 */ +#define FPE_EMBND_FAULT 0xb /* emulation BOUNDS instruction failed */ + +#endif /* bits/sigcontext.h */ diff --git a/sysdeps/mach/hurd/aarch64/exc2signal.c b/sysdeps/mach/hurd/aarch64/exc2signal.c new file mode 100644 index 00000000..7027bbf7 --- /dev/null +++ b/sysdeps/mach/hurd/aarch64/exc2signal.c @@ -0,0 +1,149 @@ +/* Translate Mach exception codes into signal numbers. AArch64 version. + Copyright (C) 1991-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include +#include +#include + +/* Translate the Mach exception codes, as received in an `exception_raise' RPC, + into a signal number and signal subcode. */ + +static void +exception2signal (struct hurd_signal_detail *detail, int *signo, int posix) +{ + detail->error = 0; + + switch (detail->exc) + { + default: + *signo = SIGIOT; + detail->code = detail->exc; + break; + + case EXC_BAD_ACCESS: + switch (detail->exc_code) + { + case KERN_INVALID_ADDRESS: + case KERN_MEMORY_FAILURE: + *signo = SIGSEGV; + detail->code = posix ? SEGV_MAPERR : detail->exc_subcode; + break; + + case KERN_PROTECTION_FAILURE: + case KERN_WRITE_PROTECTION_FAILURE: + *signo = SIGSEGV; + detail->code = posix ? SEGV_ACCERR : detail->exc_subcode; + break; + + case EXC_AARCH64_MTE: + *signo = SIGSEGV; + /* TODO: Should be SEGV_MTESERR */ + detail->code = posix ? SEGV_ACCERR : detail->exc_subcode; + break; + + case EXC_AARCH64_BTI: + *signo = SIGILL; + /* XXX: Consider adopting ILL_BTCFI from OpenBSD. */ + /* XXX: exc_subcode / signal code contains BTYPE */ + detail->code = posix ? ILL_ILLOPN : detail->exc_subcode; + break; + + case EXC_AARCH64_AL: + case EXC_AARCH64_AL_PC: + case EXC_AARCH64_AL_SP: + *signo = SIGBUS; + detail->code = posix ? BUS_ADRALN : detail->exc_subcode; + break; + + default: + *signo = SIGBUS; + detail->code = posix ? BUS_ADRERR : detail->exc_subcode; + break; + } + detail->error = detail->exc_code; + break; + + case EXC_BAD_INSTRUCTION: + *signo = SIGILL; + switch (detail->exc_code) + { + case EXC_AARCH64_SVC: + detail->code = posix ? ILL_ILLTRP : 0; + break; + + default: + detail->code = posix ? ILL_ILLOPC : 0; + break; + } + break; + + case EXC_ARITHMETIC: + *signo = SIGFPE; + switch (detail->exc_code) + { + case EXC_AARCH64_IDF: + detail->code = posix ? FPE_FLTIDO : 0; + break; + case EXC_AARCH64_IXF: + detail->code = posix ? FPE_FLTRES : FPE_FLTINX_FAULT; + break; + case EXC_AARCH64_UFF: + detail->code = posix ? FPE_FLTUND : FPE_FLTDNR_FAULT; + break; + case EXC_AARCH64_OFF: + detail->code = posix ? FPE_FLTOVF : FPE_FLTOVF_FAULT; + break; + case EXC_AARCH64_DZF: + detail->code = posix ? FPE_FLTDIV : FPE_FLTDIV_FAULT; + break; + case EXC_AARCH64_IOF: + /* NB: We used to send SIGILL here but we can't distinguish + POSIX vs. legacy with respect to what signal we send. */ + detail->code = posix ? FPE_FLTINV : 0 /*ILL_FPEOPR_FAULT*/; + break; + default: + detail->code = 0; + } + break; + + case EXC_EMULATION: + case EXC_SOFTWARE: + *signo = SIGEMT; + detail->code = 0; + break; + + + case EXC_BREAKPOINT: + *signo = SIGTRAP; + detail->code = posix ? TRAP_BRKPT : 0; + break; + } +} +libc_hidden_def (_hurd_exception2signal) + +void +_hurd_exception2signal (struct hurd_signal_detail *detail, int *signo) +{ + exception2signal (detail, signo, 1); +} + +void +_hurd_exception2signal_legacy (struct hurd_signal_detail *detail, int *signo) +{ + exception2signal (detail, signo, 0); +} diff --git a/sysdeps/mach/hurd/aarch64/intr-msg.h b/sysdeps/mach/hurd/aarch64/intr-msg.h new file mode 100644 index 00000000..b511d7d7 --- /dev/null +++ b/sysdeps/mach/hurd/aarch64/intr-msg.h @@ -0,0 +1,123 @@ +/* Machine-dependent details of interruptible RPC messaging. AArch64 version. + Copyright (C) 1995-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + + +/* Note that we must mark OPTION and TIMEOUT as outputs of this operation, + to indicate that the signal thread might mutate them as part + of sending us to a signal handler. */ + +#define INTR_MSG_TRAP(msg, option, send_size, rcv_size, rcv_name, timeout, notify, cancel_p, intr_port_p) \ +({ \ + register uintptr_t /* error_t */ err asm ("x0"); \ + register uintptr_t option_x1 asm ("x1") = option; \ + register uintptr_t send_size_x2 asm ("x2") = send_size; \ + register uintptr_t rcv_size_x3 asm ("x3") = rcv_size; \ + register uintptr_t rcv_name_x4 asm ("x4") = rcv_name; \ + register uintptr_t timeout_x5 asm ("x5") = timeout; \ + register uintptr_t notify_x6 asm ("x6") = notify; \ + register void *msg_x9 asm ("x9") = msg; /* used by trampoline.c */ \ + asm volatile ("\n" \ + ".globl _hurd_intr_rpc_msg_about_to\n" \ + ".globl _hurd_intr_rpc_msg_setup_done\n" \ + ".globl _hurd_intr_rpc_msg_in_trap\n" \ + /* Clear x0 before we do the check for cancel below. This is to + detect x0 being set to non-zero (actually MACH_SEND_INTERRUPTED) + from the outside (namely, _hurdsig_abort_rpcs), which signals us + to skip the trap we were about to enter. */ \ + " mov %[err], #0\n" \ + "_hurd_intr_rpc_msg_about_to:\n" \ + /* We need to make a last check of cancel, in case we got interrupted + right before _hurd_intr_rpc_msg_about_to. */ \ + " ldr w8, %[cancel]\n" \ + " cbz w8, _hurd_intr_rpc_msg_do\n" \ + /* We got interrupted, note so and return EINTR. */ \ + " str wzr, %[intr_port]\n" \ + " mov %[err], %[eintr_lo]\n" \ + " movk %[err], %[eintr_hi], lsl 16\n" \ + " b _hurd_intr_rpc_msg_sp_restored\n" \ + "_hurd_intr_rpc_msg_do:\n" \ + /* Ok, prepare the mach_msg_trap arguments. We pass all the 7 args + in registers. */ \ + "_hurd_intr_rpc_msg_setup_done:\n" \ + /* From here on, it is safe to make us jump over the syscall. Now + check if we have been told to skip the syscall while running + the above. */ \ + " cbnz %[err], _hurd_intr_rpc_msg_in_trap\n" \ + /* Do the actual syscall. */ \ + " mov %[err], %[msg]\n" \ + " mov x8, #-25\n" \ + "_hurd_intr_rpc_msg_do_trap:\n" \ + " svc #0\n" /* status in %[err] */ \ + "_hurd_intr_rpc_msg_in_trap:\n" \ + "_hurd_intr_rpc_msg_sp_restored:\n" \ + : [err] "=r" (err), "+r" (option_x1), \ + [intr_port] "=m" (*intr_port_p), \ + "+r" (timeout_x5) \ + : [msg] "r" (msg_x9), "r" (send_size_x2), "r" (rcv_size_x3), \ + "r" (rcv_name_x4), "r" (notify_x6), \ + [cancel] "m" (*cancel_p), \ + [eintr_lo] "i" (EINTR & 0xffff), [eintr_hi] "i" (EINTR >> 16)); \ + option = option_x1; \ + timeout = timeout_x5; \ + err; \ +}) + +#include "hurdfault.h" + +/* This cannot be an inline function because it calls setjmp. */ +#define SYSCALL_EXAMINE(state, callno) \ +({ \ + int result; \ + unsigned int *p = (unsigned int *) (state)->pc - 4; \ + if (_hurdsig_catch_memory_fault (p)) \ + return 0; \ + if (result = (*p == 0xd4000001)) \ + /* The PC is just after a "svc #0" instruction. + This is a system call in progress; x8 holds the call number. */ \ + *(callno) = (state)->x[8]; \ + _hurdsig_end_catch_fault (); \ + result; \ +}) + + +/* This cannot be an inline function because it calls setjmp. */ +#define MSG_EXAMINE(state, msgid, rcvname, send_name, opt, tmout) \ +({ \ + int ret = 0; \ + const struct machine_thread_state *s = (state); \ + const mach_msg_header_t *msg = (const void *) s->x[0]; \ + *(opt) = s->x[1]; \ + *(rcvname) = s->x[4]; \ + *(tmout) = s->x[5]; \ + if (msg == 0) \ + { \ + *(send_name) = MACH_PORT_NULL; \ + *(msgid) = 0; \ + } \ + else \ + { \ + ret = _hurdsig_catch_memory_fault (msg) ? -1 : 0; \ + if (ret == 0) \ + { \ + *(send_name) = msg->msgh_remote_port; \ + *(msgid) = msg->msgh_id; \ + _hurdsig_end_catch_fault (); \ + } \ + } \ + ret; \ +}) diff --git a/sysdeps/mach/hurd/aarch64/sigreturn.c b/sysdeps/mach/hurd/aarch64/sigreturn.c new file mode 100644 index 00000000..c58b9c49 --- /dev/null +++ b/sysdeps/mach/hurd/aarch64/sigreturn.c @@ -0,0 +1,127 @@ +/* Copyright (C) 1991-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include +#include +#include +#include + +/* This is run on the thread stack after restoring it, to be able to + unlock SS off sigstack. */ +void +__sigreturn2 (struct sigcontext *scp, + struct hurd_sigstate *ss) +{ + error_t err; + mach_port_t reply_port; + _hurd_sigstate_unlock (ss); + + /* Destroy the MiG reply port used by the signal handler, and restore the + reply port in use by the thread when interrupted. + + We cannot use the original reply port for our RPCs that we do here, since + we could unexpectedly receive/consume a reply message meant for the user + (in particular, msg_sig_post_reply), and also since we would deallocate + the port if *our* RPC fails, which we don't want to do since the user + still has the old name. And so, temporarily set MACH_PORT_DEAD as our + reply name, and make sure destroying the port is the very last RPC we + do. */ + reply_port = THREAD_GETMEM (THREAD_SELF, reply_port); + THREAD_SETMEM (THREAD_SELF, reply_port, MACH_PORT_DEAD); + if (__glibc_likely (MACH_PORT_VALID (reply_port))) + (void) __mach_port_mod_refs (__mach_task_self (), reply_port, + MACH_PORT_RIGHT_RECEIVE, -1); + THREAD_SETMEM (THREAD_SELF, reply_port, scp->sc_reply_port); + + /* Restore thread state. */ + err = __thread_set_self_state (AARCH64_FLOAT_STATE, + (thread_state_t) &scp->sc_aarch64_float_state, + AARCH64_FLOAT_STATE_COUNT); + assert_perror (err); + err = __thread_set_self_state (AARCH64_THREAD_STATE, + (thread_state_t) &scp->sc_aarch64_thread_state, + AARCH64_THREAD_STATE_COUNT); + assert_perror (err); + __builtin_unreachable (); +} + +int +__sigreturn (struct sigcontext *scp) +{ + struct hurd_sigstate *ss; + struct hurd_userlink *link = (void *) &scp[1]; + uintptr_t usp; + + if (__glibc_unlikely (scp == NULL || (scp->sc_mask & _SIG_CANT_MASK))) + return __hurd_fail (EINVAL); + + ss = _hurd_self_sigstate (); + _hurd_sigstate_lock (ss); + + /* Remove the link on the `active resources' chain added by + _hurd_setup_sighandler. Its purpose was to make sure + that we got called; now we have, it is done. */ + _hurd_userlink_unlink (link); + + /* Restore the set of blocked signals, and the intr_port slot. */ + ss->blocked = scp->sc_mask; + ss->intr_port = scp->sc_intr_port; + + /* Check for pending signals that were blocked by the old set. */ + if (_hurd_sigstate_pending (ss) & ~ss->blocked) + { + /* There are pending signals that just became unblocked. Wake up the + signal thread to deliver them. But first, squirrel away SCP where + the signal thread will notice it if it runs another handler, and + arrange to have us called over again in the new reality. */ + ss->context = scp; + _hurd_sigstate_unlock (ss); + __msg_sig_post (_hurd_msgport, 0, 0, __mach_task_self ()); + /* If a pending signal was handled, sig_post never returned. + If it did return, the pending signal didn't run a handler; + proceed as usual. */ + _hurd_sigstate_lock (ss); + ss->context = NULL; + } + + if (scp->sc_onstack) + ss->sigaltstack.ss_flags &= ~SS_ONSTACK; + + /* Copy the signal context onto the user's stack, to be able to release the + altstack (by unlocking sigstate). Note that unless an altstack is used, + the sigcontext will itself be located on the user's stack, so we may well + be overwriting it here (or later in __sigreturn2). */ + + usp = ALIGN_DOWN(scp->sc_sp - sizeof (struct sigcontext), 16); + memmove ((void *) usp, scp, sizeof (struct sigcontext)); + + /* Switch to the user's stack that we have just prepared, and call + __sigreturn2. Clobber "memory" to make sure GCC flushes the stack + setup to actual memory. */ + { + register uintptr_t usp_x0 asm("x0") = usp; + register struct hurd_sigstate *ss_x1 asm("x1") = ss; + + asm volatile ("mov sp, %0\n" + "b __sigreturn2" + :: "r" (usp_x0), "r" (ss_x1) + : "memory"); + __builtin_unreachable (); + } +} + +weak_alias (__sigreturn, sigreturn) diff --git a/sysdeps/mach/hurd/aarch64/trampoline.c b/sysdeps/mach/hurd/aarch64/trampoline.c new file mode 100644 index 00000000..4b301335 --- /dev/null +++ b/sysdeps/mach/hurd/aarch64/trampoline.c @@ -0,0 +1,325 @@ +/* Set thread_state for sighandler, and sigcontext to recover. AArch64 version. + Copyright (C) 1994-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include +#include +#include +#include +#include +#include +#include "hurdfault.h" +#include + + +/* Fill in a siginfo_t structure for SA_SIGINFO-enabled handlers. */ +static void fill_siginfo (siginfo_t *si, int signo, + const struct hurd_signal_detail *detail, + const struct machine_thread_all_state *state) +{ + si->si_signo = signo; + si->si_errno = detail->error; + si->si_code = detail->code; + + /* XXX We would need a protocol change for sig_post to include + * this information. */ + si->si_pid = -1; + si->si_uid = -1; + + /* Address of the faulting instruction or memory access. */ + if (detail->exc == EXC_BAD_ACCESS) + si->si_addr = (void *) detail->exc_subcode; + else + si->si_addr = (void *) state->basic.pc; + + /* XXX On SIGCHLD, this should be the exit status of the child + * process. We would need a protocol change for the proc server + * to send this information along with the signal. */ + si->si_status = 0; + + si->si_band = 0; /* SIGPOLL is not supported yet. */ + si->si_value.sival_int = 0; /* sigqueue() is not supported yet. */ +} + +/* Fill in a ucontext_t structure SA_SIGINFO-enabled handlers. */ +static void fill_ucontext (ucontext_t *uc, const struct sigcontext *sc) +{ + uc->uc_flags = 0; + uc->uc_link = NULL; + uc->uc_sigmask = sc->sc_mask; + uc->uc_stack.ss_sp = (__ptr_t) sc->sc_sp; + uc->uc_stack.ss_size = 0; + uc->uc_stack.ss_flags = 0; + + memcpy (&uc->uc_mcontext.gregs, &sc->sc_aarch64_thread_state, + sizeof (struct aarch64_thread_state)); + memcpy (&uc->uc_mcontext.fpregs, &sc->sc_aarch64_float_state, + sizeof (struct aarch64_float_state)); +} + +struct sigcontext * +_hurd_setup_sighandler (struct hurd_sigstate *ss, const struct sigaction *action, + __sighandler_t handler, + int signo, struct hurd_signal_detail *detail, + int rpc_wait, + struct machine_thread_all_state *state) +{ + void trampoline (void) attribute_hidden; + void rpc_wait_trampoline (void) attribute_hidden; + void *sigsp; + struct sigcontext *scp; + struct + { + union + { + int signo; + /* Make sure signo takes up a pointer-sized slot on the stack. + (This should already be the case considering the siginfop + pointer below, but better be explicit.) */ + void *_pointer_sized; + }; + union + { + /* Extra arguments for traditional signal handlers */ + struct + { + long int sigcode; + struct sigcontext *scp; /* Points to ctx, below. */ + } legacy; + + /* Extra arguments for SA_SIGINFO handlers */ + struct + { + siginfo_t *siginfop; /* Points to siginfo, below. */ + ucontext_t *uctxp; /* Points to uctx, below. */ + } posix; + }; + + void *_pad; + + /* NB: sigreturn assumes link is next to ctx. */ + struct sigcontext ctx; + struct hurd_userlink link; + ucontext_t ucontext; + siginfo_t siginfo; + } *stackframe; + + if (ss->context) + { + /* We have a previous sigcontext that sigreturn was about + to restore when another signal arrived. We will just base + our setup on that. */ + if (! _hurdsig_catch_memory_fault (ss->context)) + { + memcpy (&state->basic, &ss->context->sc_aarch64_thread_state, + sizeof (state->basic)); + memcpy (&state->fpu, &ss->context->sc_aarch64_float_state, + sizeof (state->fpu)); + state->set |= (1 << AARCH64_THREAD_STATE) | (1 << AARCH64_FLOAT_STATE); + } + } + + if (! machine_get_basic_state (ss->thread, state)) + return NULL; + + if ((action->sa_flags & SA_ONSTACK) + && !(ss->sigaltstack.ss_flags & (SS_DISABLE|SS_ONSTACK))) + { + sigsp = ss->sigaltstack.ss_sp + ss->sigaltstack.ss_size; + ss->sigaltstack.ss_flags |= SS_ONSTACK; + } + else + /* No red zone on aarch64-gnu. */ + sigsp = (void *) state->basic.sp; + + /* Push the arguments to call `trampoline' on the stack. + Note that user's SP doesn't strictly have to be 16-aligned, since + AArch64 only requires 16-alignment for the stack pointer when + making accesses relative to it. */ + sigsp = PTR_ALIGN_DOWN (sigsp - sizeof (*stackframe), 16); + stackframe = sigsp; + + _Static_assert ((void *) (&stackframe->_pad + 1) == (void *) &stackframe->ctx, + "trampoline expects no extra padding between " + "_pad and ctx"); + + if (_hurdsig_catch_memory_fault (stackframe)) + { + /* We got a fault trying to write the stack frame. + We cannot set up the signal handler. + Returning NULL tells our caller, who will nuke us with a SIGILL. */ + return NULL; + } + else + { + int ok; + + extern void _hurdsig_longjmp_from_handler (void *, jmp_buf, int); + + /* Add a link to the thread's active-resources list. We mark this as + the only user of the "resource", so the cleanup function will be + called by any longjmp which is unwinding past the signal frame. + The cleanup function (in sigunwind.c) will make sure that all the + appropriate cleanups done by sigreturn are taken care of. */ + stackframe->link.cleanup = &_hurdsig_longjmp_from_handler; + stackframe->link.cleanup_data = &stackframe->ctx; + stackframe->link.resource.next = NULL; + stackframe->link.resource.prevp = NULL; + stackframe->link.thread.next = ss->active_resources; + stackframe->link.thread.prevp = &ss->active_resources; + if (stackframe->link.thread.next) + stackframe->link.thread.next->thread.prevp + = &stackframe->link.thread.next; + ss->active_resources = &stackframe->link; + + /* Set up the sigcontext from the current state of the thread. */ + + scp = &stackframe->ctx; + scp->sc_onstack = ss->sigaltstack.ss_flags & SS_ONSTACK ? 1 : 0; + + /* struct sigcontext is laid out so that starting at sc_x[0] mimics a + struct aarch64_thread_state. */ + _Static_assert (offsetof (struct sigcontext, sc_aarch64_thread_state) + % __alignof__ (struct aarch64_thread_state) == 0, + "sc_aarch64_thread_state layout mismatch"); + memcpy (&scp->sc_aarch64_thread_state, + &state->basic, sizeof (state->basic)); + + /* struct sigcontext is laid out so that starting at sc_v[0] mimics a + struct aarch64_float_state. */ + _Static_assert (offsetof (struct sigcontext, sc_aarch64_float_state) + % __alignof__ (struct aarch64_float_state) == 0, + "sc_aarch64_float_state layout mismatch"); + ok = machine_get_state (ss->thread, state, AARCH64_FLOAT_STATE, + &state->fpu, &scp->sc_aarch64_float_state, + sizeof (state->fpu)); + + /* Set up the arguments for the signal handler. */ + stackframe->signo = signo; + if (action->sa_flags & SA_SIGINFO) + { + stackframe->posix.siginfop = &stackframe->siginfo; + stackframe->posix.uctxp = &stackframe->ucontext; + fill_siginfo (&stackframe->siginfo, signo, detail, state); + fill_ucontext (&stackframe->ucontext, scp); + } + else + { + if (detail->exc) + { + int nsigno; + _hurd_exception2signal_legacy (detail, &nsigno); + assert (nsigno == signo); + } + else + detail->code = 0; + + stackframe->legacy.sigcode = detail->code; + stackframe->legacy.scp = &stackframe->ctx; + } + + _hurdsig_end_catch_fault (); + + if (!ok) + return NULL; + } + + /* Modify the thread state to call the trampoline code on the new stack. */ + state->basic.sp = (uintptr_t) sigsp; + + if (rpc_wait) + { + /* The signalee thread was blocked in a mach_msg_trap system call, + still waiting for a reply. We will have it run the special + trampoline code which retries the message receive before running + the signal handler. + + To do this we change the OPTION argument (in x1) to enable only + message reception, since the request message has already been + sent. */ + + assert (state->basic.x[1] & MACH_RCV_MSG); + /* Disable the message-send, since it has already completed. The + calls we retry need only wait to receive the reply message. */ + state->basic.x[1] &= ~MACH_SEND_MSG; + + /* Limit the time to receive the reply message, in case the server + claimed that `interrupt_operation' succeeded but in fact the RPC + is hung. */ + state->basic.x[1] |= MACH_RCV_TIMEOUT; + state->basic.x[5] = _hurd_interrupted_rpc_timeout; + + state->basic.pc = (uintptr_t) rpc_wait_trampoline; + /* After doing the message receive, the trampoline code will need to + update the x0 value to be restored by sigreturn. To simplify + the assembly code, we pass the address of its slot in SCP to the + trampoline code in x21. */ + state->basic.x[21] = (uintptr_t) &scp->sc_x[0]; + } + else + state->basic.pc = (uintptr_t) trampoline; + + /* We pass the handler function to the trampoline code in x20. */ + state->basic.x[20] = (uintptr_t) handler; + + /* Clear pstate, notably reset BTYPE to 0. */ + state->basic.cpsr = 0; + + return scp; +} + +asm ("rpc_wait_trampoline:\n" + /* This is the entry point when we have an RPC reply message to receive + before running the handler. The MACH_MSG_SEND bit has already been + cleared in the OPTION argument in our x1. For our convenience, x21 + points to the sc_x[0] member of the sigcontext. + + When the sigcontext was saved, x0 was MACH_RCV_INTERRUPTED. To repeat + the message call, we need to restore the original message buffer + pointer; intr-msg.h keeps a backup copy of it in x9 specifically for + this purpose. */ + "mov x0, x9\n" + "svc #0\n" + /* Now the message receive has completed and the original caller of + the RPC (i.e. the code running when the signal arrived) needs to + see the final return value of the message receive in x0. So store + the new x0 value into the sc_x[0] member of the sigcontext (whose + address is in x21 to make this code simpler). */ + "str x0, [x21]\n" + + "trampoline:\n" + /* Entry point for running the handler normally. The arguments to the + handler function are on the top of the stack: + + [sp] SIGNO + [sp, #8] SIGCODE + [sp, #16] SCP + [sp, #24] _pad + + Pop them off to the registers, to pass as arguments to the handler. + */ + "ldp x0, x1, [sp], #16\n" + "ldr x2, [sp], #16\n" + /* Call handler (signo, sigcode, scp). Note that this is an indirect + call not using x16/x17, so this requires the signal handler to start + with a proper "bti c" marker. */ + "blr x20\n" + /* Call __sigreturn (), passing &CTX as SCP. CTX is on the top of + the stack. If __sigreturn () fails, we're in trouble. */ + "mov x0, sp\n" + "bl __sigreturn\n" + "udf #0xdead"); From patchwork Sat Mar 23 17:32:59 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergey Bugaev X-Patchwork-Id: 1915220 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=kzQ8M9pb; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=sourceware.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4V25zl55dXz1yXr for ; Sun, 24 Mar 2024 04:39:31 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id A79483858425 for ; Sat, 23 Mar 2024 17:39:29 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-lj1-x235.google.com (mail-lj1-x235.google.com [IPv6:2a00:1450:4864:20::235]) by sourceware.org (Postfix) with ESMTPS id DCE963858285 for ; Sat, 23 Mar 2024 17:35:31 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org DCE963858285 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org DCE963858285 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::235 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215334; cv=none; b=KCd177FqnvNT5IneNuDOHi6LiXSSQOA7QmcZ1ncpnEF5J9t/fCBl4EKHlEvV64fIQZe8ltv8Iox7ULKweqklCoHhlZWh+OqJjpU2hj109YIL3mym8d94tSfU347bhx6NJKvlW5ntyF6huz6Y6Gtb8PF7dar/ZEncYp72NRgO25c= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215334; c=relaxed/simple; bh=gbkFhseru4P6cqQkSdCO4PRes9gIm2VH8g0Igaqmq6Q=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=xujSIGbcfgLrV534JWmfDeY8rux2O/XMxkH4QhZv13AAolOym0Sg0kpdEmsChZnE37ImNvYpGAx/nLoo5AU983/dpzBrAQt9srOxgodrUrK74rtNn9DvlOT+9Xx57s/fD0d5p85bjvupy/QAnuP+jSZ4wxeDwOijSjrEb0e4Pc0= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-lj1-x235.google.com with SMTP id 38308e7fff4ca-2d094bc2244so42427391fa.1 for ; Sat, 23 Mar 2024 10:35:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1711215330; x=1711820130; darn=sourceware.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=KkLo4l19X/Uo8v+LOqFINnbFOYcn3QwN7BceQKDIvFU=; b=kzQ8M9pbCgL+TcmH7ShLv3ncb7q0hiICtlO5LO2kt+AODMqiREVx3NSZCv7vQlNFd+ T53X2NWrmd7Wk6iS60ZxpKSpj0JIqazpggwt4/PGM60zd3S4wlhY1pGw8zl1HZxTGhlY dgkch2bhj1Nemid1T993CaKEgF0F3S+ANnq89V2tqiv7OCn8zoDJmGjMupYpsmi6el1O xryyT7OS1l+gQN4I1itinXZuhjI6TuBTH6AMuEjazXNWgq8PpYGMuAYsFmJy5W/V+xng b4q50lFYk7s9kl3NbxVv9y6SDQHze/IoBKu7aLENXVafLL+wHLmLdeaO9bsi3KrZEtQP 1ezw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711215330; x=1711820130; 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:message-id:reply-to; bh=KkLo4l19X/Uo8v+LOqFINnbFOYcn3QwN7BceQKDIvFU=; b=ZWPpy61sfW//EES0oXZZfapotouACNG/enRIxYSP9tNlOjSeJGAs7PI8M+OkmfRXq8 UtAkIVbEqmPhOS16UDUCPLqRQ/taZJbTk0dqiSF2+tFSlm/yEKpBk4I102tsU11XrV6R 2n3J4l3b02Rektqf5Ap82I0EBu5U6Yyyv2UrGNgp3zoc31lZzZmcw2QjcxwkAGTywZpo Joxk2P6HV1LKKJ/sV26zOKilAlEhr1Mvh5j0MtAAGyfurw20Vuqf42Rq7ATUXjY06vCN 6HtVH4k+9nq/x0PtMMUExhSMc2XGHaFMQWjoJAdsKnPWWdYHTZqlXTTr7oRuRAv721Q2 OPsw== X-Gm-Message-State: AOJu0Yzy751dMB4y/5/o/BbA5+F8mO+prCxLJ2kYq+I+kXktIRJ8z2+5 4JSaTc6PuWVI8NwPSqRYAeh0qeE9GgQ2rJT1+E6yNNk9dTuHKF48/n6VBKNv X-Google-Smtp-Source: AGHT+IG0h7FplD1QhqAv5ytnXnwpsGokm7vTa3Ti32hqiBEbZzhi6R77tHfp8A518JWhWP3X3JjwtQ== X-Received: by 2002:a05:6512:3b12:b0:515:a670:3a6c with SMTP id f18-20020a0565123b1200b00515a6703a6cmr743559lfv.23.1711215329923; Sat, 23 Mar 2024 10:35:29 -0700 (PDT) Received: from surface-pro-6.. (79-139-171-253.dynamic.spd-mgts.ru. [79.139.171.253]) by smtp.gmail.com with ESMTPSA id g20-20020ac25394000000b00513973dee6fsm361290lfh.150.2024.03.23.10.35.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 23 Mar 2024 10:35:29 -0700 (PDT) From: Sergey Bugaev To: libc-alpha@sourceware.org, bug-hurd@gnu.org Cc: Maxim Kuvyrkov , Luca Subject: [PATCH v2 18/20] htl: Implement some support for TLS_DTV_AT_TP Date: Sat, 23 Mar 2024 20:32:59 +0300 Message-ID: <20240323173301.151066-19-bugaevc@gmail.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240323173301.151066-1-bugaevc@gmail.com> References: <20240323173301.151066-1-bugaevc@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-9.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org Signed-off-by: Sergey Bugaev --- htl/pt-create.c | 2 ++ sysdeps/htl/dl-thread_gscope_wait.c | 16 ++++++++++++++-- sysdeps/mach/hurd/htl/pt-sysdep.c | 9 +++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/htl/pt-create.c b/htl/pt-create.c index fac61f1b..8a735d99 100644 --- a/htl/pt-create.c +++ b/htl/pt-create.c @@ -177,7 +177,9 @@ __pthread_create_internal (struct __pthread **thread, err = ENOMEM; goto failed_thread_tls_alloc; } +#if TLS_TCB_AT_TP pthread->tcb->tcb = pthread->tcb; +#endif /* And initialize the rest of the machine context. This may include additional machine- and system-specific initializations that diff --git a/sysdeps/htl/dl-thread_gscope_wait.c b/sysdeps/htl/dl-thread_gscope_wait.c index 90a9a798..ee0a3165 100644 --- a/sysdeps/htl/dl-thread_gscope_wait.c +++ b/sysdeps/htl/dl-thread_gscope_wait.c @@ -20,6 +20,18 @@ #include #include +static inline int * +thread_gscope_flag (struct __pthread *t) +{ +#if TLS_TCB_AT_TP + return &t->tcb->gscope_flag; +#elif TLS_DTV_AT_TP + return &((tcbprehead_t *) t->tcb - 1)->gscope_flag; +#else +# error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined" +#endif +} + void __thread_gscope_wait (void) { @@ -33,10 +45,10 @@ __thread_gscope_wait (void) for (i = 0; i < GL (dl_pthread_num_threads); ++i) { t = GL (dl_pthread_threads[i]); - if (t == NULL || t->tcb->gscope_flag == THREAD_GSCOPE_FLAG_UNUSED) + if (t == NULL || *thread_gscope_flag (t) == THREAD_GSCOPE_FLAG_UNUSED) continue; - gscope_flagp = &t->tcb->gscope_flag; + gscope_flagp = thread_gscope_flag (t); /* We have to wait until this thread is done with the global scope. First tell the thread that we are waiting and diff --git a/sysdeps/mach/hurd/htl/pt-sysdep.c b/sysdeps/mach/hurd/htl/pt-sysdep.c index 270e7753..5372cbf7 100644 --- a/sysdeps/mach/hurd/htl/pt-sysdep.c +++ b/sysdeps/mach/hurd/htl/pt-sysdep.c @@ -100,7 +100,16 @@ _init_routine (void *stack) to the new stack. Pretend it wasn't allocated so that it remains valid if the main thread terminates. */ thread->stack = 0; +#if TLS_TCB_AT_TP thread->tcb = THREAD_SELF; +#elif TLS_DTV_AT_TP + /* Assuming THREAD_SELF is implemented as subtracting TLS_PRE_TCB_SIZE + from the value of a thread pointer regsiter, this should optimize + down to simply reading that register. */ + thread->tcb = (tcbhead_t *) (((char *) THREAD_SELF) + TLS_PRE_TCB_SIZE); +#else +# error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined" +#endif #ifndef PAGESIZE __pthread_default_attr.__guardsize = __vm_page_size; From patchwork Sat Mar 23 17:33:00 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergey Bugaev X-Patchwork-Id: 1915222 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=X6MuU0Yc; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=sourceware.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4V260b5PGFz1yXy for ; Sun, 24 Mar 2024 04:40:15 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id B00FA3858D3C for ; Sat, 23 Mar 2024 17:40:13 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-lf1-x12b.google.com (mail-lf1-x12b.google.com [IPv6:2a00:1450:4864:20::12b]) by sourceware.org (Postfix) with ESMTPS id D849D385840F for ; Sat, 23 Mar 2024 17:35:32 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D849D385840F Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org D849D385840F Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::12b ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215335; cv=none; b=ML/5y5AN8+KsETHp7XiLa9nHgyFe2iSI+7xyjIBMC13ZiTdM9LaWI7+K8pjZLzMczGPzHpcwd57dwWsh40tourVUkmKAby8fHzAJP0mzLBzRdUf6Cwx8YFgnGiSGZ24bG6VDhaD3ZfHeixDO05kwT/f9gsJtY1O4EjphybFJnhI= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215335; c=relaxed/simple; bh=+sRbaCQKl5qr6AendH3KgvMitTCtmh4psPTXgWU/wp4=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=M22bGdqi5rSkSltjfrXc7ZQi46LBpnMSEOy8z5OTPNWhouc1t3We5urjx5A9XZ4ylE3fM0Y3iHNCMPhF5++bQsB5N9jiUUXkSfYXc60bkhTge237+sLurvhKD+DxcF+OWCRY8kbjGKIGulOnYLlj/VfX4+AJr/70lxLsO0mt+eQ= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-lf1-x12b.google.com with SMTP id 2adb3069b0e04-512f892500cso3618513e87.3 for ; Sat, 23 Mar 2024 10:35:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1711215331; x=1711820131; darn=sourceware.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=2Z8GlNQ299HIlPMx5so7e8/YKoBkfVEL/MiGHF2FPBA=; b=X6MuU0YcQvqZNIU/VN04Xx+i+ZHv4iJYdx0eoarWVz2Sh1IdmUQXCjvQwVe2eZNGx8 c790I7ANRzPSvYoyVemTKrU2IQXE0QhbTlNnMIglGm9A9NmlPv8JiyZyBzLAMOGAt2KA 9A+oE//+C9TYOV3vjlenD+aWYqvZR+w83HcVZYfVNxxwxmZ9Dy3TrXgp6h4Kgc0lq+aP SvE1lbsEENwkloFtuI92dpsyq69N2tXwqD+3J4uXI3atB4ZiliTSXOvBgN8v1XOUJGHb KzWz7Uyl5gb2cOgwMT/iCUo3+2UT66HgreXRAmWqocMMNYAqx6xZ0rHpWS5Qqaht8Ddq PBRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711215331; x=1711820131; 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:message-id:reply-to; bh=2Z8GlNQ299HIlPMx5so7e8/YKoBkfVEL/MiGHF2FPBA=; b=oL9gI/ctQIOZxb1+Dp1f1ZpMg+1x7H1hvOJanripSmcTndjMQ4txbGJibAV5MoWhSI HnxmNxigRDZ5tqZPzybsNstfzW3Lh8v6NQ7BNCoIJ4vvv6voGPqX54CpBniVHVuTGQcn D2aR9PNNHAT7HghnStxTE3LQkLuhcK8dFhOYzwbQqj/emIJRCPcTw9nn1adxsjoXnfwh SF/km7DjnU9V1nXt3qNDfvjW8z826jrldaTdK9o/9klgWW1xfnUxqLE5Q92KhcMkNtDi DrOuFksEL/xYPDqmLptaZ6KBfkTZpX/CywxjWhXnDA8xmQ8q8s+diK4l0EM5JwsrbJv2 HTsA== X-Gm-Message-State: AOJu0YzwOxDTbtQ5xaywC+0lo0bO/Yb1tcrFiJrP4mj/18jQiKMCUibQ FlVLj7CtFjpuKIqpvgzp0zxNPsnukpnVNCzabYnO5BO8c+zEpDjZvIJnlhMa X-Google-Smtp-Source: AGHT+IH7St5OUkfKpq5VqyUN1+xpW/TD2zWB7ZVAJhHFpJNxmjfLsD+ril2gC5FLtT6jT8jtGwmUjg== X-Received: by 2002:a19:ca43:0:b0:513:cfaa:e618 with SMTP id h3-20020a19ca43000000b00513cfaae618mr2163325lfj.0.1711215331013; Sat, 23 Mar 2024 10:35:31 -0700 (PDT) Received: from surface-pro-6.. (79-139-171-253.dynamic.spd-mgts.ru. [79.139.171.253]) by smtp.gmail.com with ESMTPSA id g20-20020ac25394000000b00513973dee6fsm361290lfh.150.2024.03.23.10.35.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 23 Mar 2024 10:35:30 -0700 (PDT) From: Sergey Bugaev To: libc-alpha@sourceware.org, bug-hurd@gnu.org Cc: Maxim Kuvyrkov , Luca Subject: [PATCH v2 19/20] htl: Add an AArch64 implementation Date: Sat, 23 Mar 2024 20:33:00 +0300 Message-ID: <20240323173301.151066-20-bugaevc@gmail.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240323173301.151066-1-bugaevc@gmail.com> References: <20240323173301.151066-1-bugaevc@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-9.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_SHORT, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org Signed-off-by: Sergey Bugaev --- sysdeps/aarch64/htl/Makefile | 20 ++++++ sysdeps/aarch64/htl/bits/pthreadtypes-arch.h | 36 ++++++++++ sysdeps/aarch64/htl/machine-sp.h | 29 ++++++++ sysdeps/aarch64/htl/pt-machdep.h | 28 ++++++++ sysdeps/mach/hurd/aarch64/htl/pt-machdep.c | 55 ++++++++++++++ sysdeps/mach/hurd/aarch64/htl/pt-setup.c | 76 ++++++++++++++++++++ 6 files changed, 244 insertions(+) create mode 100644 sysdeps/aarch64/htl/Makefile create mode 100644 sysdeps/aarch64/htl/bits/pthreadtypes-arch.h create mode 100644 sysdeps/aarch64/htl/machine-sp.h create mode 100644 sysdeps/aarch64/htl/pt-machdep.h create mode 100644 sysdeps/mach/hurd/aarch64/htl/pt-machdep.c create mode 100644 sysdeps/mach/hurd/aarch64/htl/pt-setup.c diff --git a/sysdeps/aarch64/htl/Makefile b/sysdeps/aarch64/htl/Makefile new file mode 100644 index 00000000..686b843d --- /dev/null +++ b/sysdeps/aarch64/htl/Makefile @@ -0,0 +1,20 @@ +# Copyright (C) 2020-2024 Free Software Foundation, Inc. +# This file is part of the GNU C Library. + +# The GNU C Library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. + +# The GNU C Library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. + +# You should have received a copy of the GNU Lesser General Public +# License along with the GNU C Library; if not, see +# . + +ifeq ($(subdir),csu) +gen-as-const-headers += tcb-offsets.sym +endif diff --git a/sysdeps/aarch64/htl/bits/pthreadtypes-arch.h b/sysdeps/aarch64/htl/bits/pthreadtypes-arch.h new file mode 100644 index 00000000..9ee1568e --- /dev/null +++ b/sysdeps/aarch64/htl/bits/pthreadtypes-arch.h @@ -0,0 +1,36 @@ +/* Machine-specific pthread type layouts. Hurd AArch64 version. + Copyright (C) 2002-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _BITS_PTHREADTYPES_ARCH_H +#define _BITS_PTHREADTYPES_ARCH_H 1 + +#define __SIZEOF_PTHREAD_MUTEX_T 32 +#define __SIZEOF_PTHREAD_ATTR_T 48 +#define __SIZEOF_PTHREAD_RWLOCK_T 48 +#define __SIZEOF_PTHREAD_BARRIER_T 40 +#define __SIZEOF_PTHREAD_MUTEXATTR_T 16 +#define __SIZEOF_PTHREAD_COND_T 40 +#define __SIZEOF_PTHREAD_CONDATTR_T 8 +#define __SIZEOF_PTHREAD_RWLOCKATTR_T 4 +#define __SIZEOF_PTHREAD_BARRIERATTR_T 4 +#define __SIZEOF_PTHREAD_ONCE_T 8 + +#define __LOCK_ALIGNMENT +#define __ONCE_ALIGNMENT + +#endif /* bits/pthreadtypes.h */ diff --git a/sysdeps/aarch64/htl/machine-sp.h b/sysdeps/aarch64/htl/machine-sp.h new file mode 100644 index 00000000..b21331a0 --- /dev/null +++ b/sysdeps/aarch64/htl/machine-sp.h @@ -0,0 +1,29 @@ +/* Machine-specific function to return the stack pointer. AArch64 version. + Copyright (C) 1994-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _MACHINE_SP_H +#define _MACHINE_SP_H + +/* Return the current stack pointer. */ + +#define __thread_stack_pointer() ({ \ + register uintptr_t __sp__ asm("sp"); \ + __sp__; \ +}) + +#endif /* machine-sp.h */ diff --git a/sysdeps/aarch64/htl/pt-machdep.h b/sysdeps/aarch64/htl/pt-machdep.h new file mode 100644 index 00000000..c3681b4a --- /dev/null +++ b/sysdeps/aarch64/htl/pt-machdep.h @@ -0,0 +1,28 @@ +/* Machine dependent pthreads internal definitions. AArch64 version. + Copyright (C) 2000-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _PT_MACHDEP_H +#define _PT_MACHDEP_H 1 + +struct pthread_mcontext +{ + void *pc; + void *sp; +}; + +#endif /* pt-machdep.h */ diff --git a/sysdeps/mach/hurd/aarch64/htl/pt-machdep.c b/sysdeps/mach/hurd/aarch64/htl/pt-machdep.c new file mode 100644 index 00000000..e6e68ee1 --- /dev/null +++ b/sysdeps/mach/hurd/aarch64/htl/pt-machdep.c @@ -0,0 +1,55 @@ +/* Machine dependent pthreads code. Hurd/AArch64 version. + Copyright (C) 2000-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include +#include + +#include +#include +#include +#include + +int +__thread_set_pcsptp (thread_t thread, + int set_pc, void *pc, + int set_sp, void *sp, + int set_tp, void *tp) +{ + error_t err; + struct aarch64_thread_state state; + mach_msg_type_number_t state_count; + + state_count = AARCH64_THREAD_STATE_COUNT; + + err = __thread_get_state (thread, AARCH64_THREAD_STATE, + (thread_state_t) &state, &state_count); + if (err) + return err; + assert (state_count == AARCH64_THREAD_STATE_COUNT); + + if (set_pc) + state.pc = (uintptr_t) pc; + if (set_sp) + state.sp = (uintptr_t) sp; + if (set_tp) + state.tpidr_el0 = (uintptr_t) tp; + + return __thread_set_state (thread, AARCH64_THREAD_STATE, + (thread_state_t) &state, + AARCH64_THREAD_STATE_COUNT); +} diff --git a/sysdeps/mach/hurd/aarch64/htl/pt-setup.c b/sysdeps/mach/hurd/aarch64/htl/pt-setup.c new file mode 100644 index 00000000..e57d9210 --- /dev/null +++ b/sysdeps/mach/hurd/aarch64/htl/pt-setup.c @@ -0,0 +1,76 @@ +/* Setup thread stack. Hurd/AArch64 version. + Copyright (C) 2000-2024 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include +#include +#include +#include + +#include +#include + +/* Set up the stack for THREAD. Return the stack pointer + for the new thread. */ +static void * +stack_setup (struct __pthread *thread) +{ + error_t err; + uintptr_t bottom, top; + + /* Calculate the top of the new stack. */ + bottom = (uintptr_t) thread->stackaddr; + top = bottom + thread->stacksize + round_page (thread->guardsize); + + if (thread->guardsize) + { + err = __vm_protect (__mach_task_self (), (vm_address_t) bottom, + thread->guardsize, 0, 0); + assert_perror (err); + } + + return (void *) top; +} + +int +__pthread_setup (struct __pthread *thread, + void (*entry_point) (struct __pthread *, void *(*)(void *), + void *), + void *(*start_routine) (void *), + void *arg) +{ + struct aarch64_thread_state state; + + if (thread->kernel_thread == __hurd_thread_self ()) + return 0; + + thread->mcontext.pc = entry_point; + thread->mcontext.sp = stack_setup (thread); + + /* Set up the state to call entry_point (thread, start_routine, arg) */ + memset (&state, 0, sizeof (state)); + state.sp = (uintptr_t) thread->mcontext.sp; + state.pc = (uintptr_t) thread->mcontext.pc; + state.x[0] = (uintptr_t) thread; + state.x[1] = (uintptr_t) start_routine; + state.x[2] = (uintptr_t) arg; + state.tpidr_el0 = (uintptr_t) thread->tcb; + + return __thread_set_state (thread->kernel_thread, AARCH64_THREAD_STATE, + (thread_state_t) &state, + AARCH64_THREAD_STATE_COUNT); +} From patchwork Sat Mar 23 17:33:01 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergey Bugaev X-Patchwork-Id: 1915221 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=POQrrCNQ; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=sourceware.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4V260D5b2bz1yXr for ; Sun, 24 Mar 2024 04:39:56 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id B24813858401 for ; Sat, 23 Mar 2024 17:39:54 +0000 (GMT) X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-lf1-x130.google.com (mail-lf1-x130.google.com [IPv6:2a00:1450:4864:20::130]) by sourceware.org (Postfix) with ESMTPS id 0E7DF3858431 for ; Sat, 23 Mar 2024 17:35:36 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 0E7DF3858431 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 0E7DF3858431 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::130 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215344; cv=none; b=aN0sK5cvqiGcUwPgepK0WuHXoGwRM54PPCfCJWtSVYW4w2p4woFab8KMlnovp7CqJjHGxti5ciice0ldLDZOvEy1sOGfCx+Zxkacrs8U9BPZ4hi7Of8dVw5dH2V9Gkh7G94OXQh/bw6vrDVDBTJ2ySOVYZiwyaZcl1FMotIciZo= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711215344; c=relaxed/simple; bh=4v15xLr8o+eSNXwL6HHdcUp7WYtmvezWXqbcGl+xcYE=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=MsbYdxUusrtZqmvYOu68XdbHMSPzmhG2/R2BkoWCzKlebh8nQp185sCq6EigcerNcqJ2wT5Et1gsWnB3gE62dfozJ9XVT2OXpuwsGmWdQ0FrmmusO/Rx7omV5BwSjZxPEXF0mXPoBZUfopHPY6NMbv7w/9/4E3CKlnpYR1u1oc4= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-lf1-x130.google.com with SMTP id 2adb3069b0e04-513dd2d2415so3272081e87.3 for ; Sat, 23 Mar 2024 10:35:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1711215334; x=1711820134; darn=sourceware.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=5tOeCSWOKenepT9WTcJs89owm0wEaIVzzecalLRDhWk=; b=POQrrCNQ4SIhPAjeqEafWeUGQ9IWZZZ7Jm5Rc5lstFt0E4vVx/qpYfujgX2S6CMhCX UmP98LLv6c1ejcYgu9cvD3FxKXU0OpqTpitiTDUzP+6+T+v4QNcqMhIgvBYjPTqKGKzH yXoEcM/LugcOotUaFjws50bzB1P4pk/KPD5tJQED6bzQIvP9PkW247P4fP92brmO6Deq Fs1haUW7f3shDsMobOUR7mgczvCF3hHHfUQezM8tYSgPwJ49MeLjDhGcZmvtKJ4HCWeX daNMcU5SC4ljZmuhnRxwlE3hge6v9JkQSoDM318aS9g+XQEMJDyWPkZ6cBcX4E37pg3f iODQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711215334; x=1711820134; 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:message-id:reply-to; bh=5tOeCSWOKenepT9WTcJs89owm0wEaIVzzecalLRDhWk=; b=BWCeQ8QPDuPv8xlzUak68bnGjeOlMg3H2XbMKOyQI6xCmDXJiS7NqBoNrTNMX3gWiI c+1tVFA/EbyquBcVTx1URA/Ezfg/13TywtdpU6H9fKneZ5qCfhRKqU4B6c6LPnMsLDR7 3kembXBJyo0Qlreb8M/HB/jLOR0L86ndQLp3AQSGJv28dpP99PjfbOK15SUa2HORXY2d g+Ep2P1xb5wRHvGfVcYal+rV1W8xQUSey876Yr4DBZwOm3K5iACbsvkjybl+ArksnPvd hVUS9Vdc2m1WDv9graPdd5PFVVaLRbCe2I75Etj2bBMLUkDSBJGn2vKO8b+pO8kdiJcB 1pVw== X-Gm-Message-State: AOJu0YyzEbibKNVVuEbZQ8frSICg5YlKO5zGsmLCUFUZ9moYr3w6GSek C+DEN6MuWb6dNJ8EhmcMELh3HD9uqJXFDwF+o9BU9NM+qlYu2MVDuUuCXMtZ X-Google-Smtp-Source: AGHT+IG4yR4RW3h1GQ+0C8P988IFptOp595bYrxXFaCQbEgwr6aQv6eAQVFHrqMo6rqDXequgmMMcw== X-Received: by 2002:a19:7413:0:b0:513:ba9b:80ea with SMTP id v19-20020a197413000000b00513ba9b80eamr1753915lfe.63.1711215333720; Sat, 23 Mar 2024 10:35:33 -0700 (PDT) Received: from surface-pro-6.. (79-139-171-253.dynamic.spd-mgts.ru. [79.139.171.253]) by smtp.gmail.com with ESMTPSA id g20-20020ac25394000000b00513973dee6fsm361290lfh.150.2024.03.23.10.35.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 23 Mar 2024 10:35:33 -0700 (PDT) From: Sergey Bugaev To: libc-alpha@sourceware.org, bug-hurd@gnu.org Cc: Maxim Kuvyrkov , Luca Subject: [PATCH v2 20/20] hurd: Add expected aarch64-gnu abistlists Date: Sat, 23 Mar 2024 20:33:01 +0300 Message-ID: <20240323173301.151066-21-bugaevc@gmail.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240323173301.151066-1-bugaevc@gmail.com> References: <20240323173301.151066-1-bugaevc@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-9.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org Signed-off-by: Sergey Bugaev --- We obviously didn't make it into the 2.39 timeframe, so now tentatively targeting 2.40. sysdeps/mach/hurd/aarch64/ld.abilist | 18 + .../mach/hurd/aarch64/libBrokenLocale.abilist | 1 + sysdeps/mach/hurd/aarch64/libanl.abilist | 4 + sysdeps/mach/hurd/aarch64/libc.abilist | 2193 +++++++++++++++++ .../hurd/aarch64/libc_malloc_debug.abilist | 26 + sysdeps/mach/hurd/aarch64/libdl.abilist | 0 sysdeps/mach/hurd/aarch64/libm.abilist | 1030 ++++++++ sysdeps/mach/hurd/aarch64/libmvec.abilist | 75 + sysdeps/mach/hurd/aarch64/libpthread.abilist | 165 ++ sysdeps/mach/hurd/aarch64/libresolv.abilist | 55 + sysdeps/mach/hurd/aarch64/librt.abilist | 33 + 11 files changed, 3600 insertions(+) create mode 100644 sysdeps/mach/hurd/aarch64/ld.abilist create mode 100644 sysdeps/mach/hurd/aarch64/libBrokenLocale.abilist create mode 100644 sysdeps/mach/hurd/aarch64/libanl.abilist create mode 100644 sysdeps/mach/hurd/aarch64/libc.abilist create mode 100644 sysdeps/mach/hurd/aarch64/libc_malloc_debug.abilist create mode 100644 sysdeps/mach/hurd/aarch64/libdl.abilist create mode 100644 sysdeps/mach/hurd/aarch64/libm.abilist create mode 100644 sysdeps/mach/hurd/aarch64/libmvec.abilist create mode 100644 sysdeps/mach/hurd/aarch64/libpthread.abilist create mode 100644 sysdeps/mach/hurd/aarch64/libresolv.abilist create mode 100644 sysdeps/mach/hurd/aarch64/librt.abilist diff --git a/sysdeps/mach/hurd/aarch64/ld.abilist b/sysdeps/mach/hurd/aarch64/ld.abilist new file mode 100644 index 00000000..ba01b289 --- /dev/null +++ b/sysdeps/mach/hurd/aarch64/ld.abilist @@ -0,0 +1,18 @@ +GLIBC_2.40 __close F +GLIBC_2.40 __errno_location F +GLIBC_2.40 __getpid F +GLIBC_2.40 __libc_stack_end D 0x8 +GLIBC_2.40 __mmap F +GLIBC_2.40 __open F +GLIBC_2.40 __open64 F +GLIBC_2.40 __pread64 F +GLIBC_2.40 __read F +GLIBC_2.40 __sbrk F +GLIBC_2.40 __stack_chk_guard D 0x8 +GLIBC_2.40 __tls_get_addr F +GLIBC_2.40 __write F +GLIBC_2.40 __writev F +GLIBC_2.40 _dl_mcount F +GLIBC_2.40 _hurd_intr_rpc_mach_msg F +GLIBC_2.40 _r_debug D 0x28 +GLIBC_2.40 abort F diff --git a/sysdeps/mach/hurd/aarch64/libBrokenLocale.abilist b/sysdeps/mach/hurd/aarch64/libBrokenLocale.abilist new file mode 100644 index 00000000..f54dcd1b --- /dev/null +++ b/sysdeps/mach/hurd/aarch64/libBrokenLocale.abilist @@ -0,0 +1 @@ +GLIBC_2.40 __ctype_get_mb_cur_max F diff --git a/sysdeps/mach/hurd/aarch64/libanl.abilist b/sysdeps/mach/hurd/aarch64/libanl.abilist new file mode 100644 index 00000000..47ee5ca3 --- /dev/null +++ b/sysdeps/mach/hurd/aarch64/libanl.abilist @@ -0,0 +1,4 @@ +GLIBC_2.40 gai_cancel F +GLIBC_2.40 gai_error F +GLIBC_2.40 gai_suspend F +GLIBC_2.40 getaddrinfo_a F diff --git a/sysdeps/mach/hurd/aarch64/libc.abilist b/sysdeps/mach/hurd/aarch64/libc.abilist new file mode 100644 index 00000000..3e16e997 --- /dev/null +++ b/sysdeps/mach/hurd/aarch64/libc.abilist @@ -0,0 +1,2193 @@ +GLIBC_2.40 _Exit F +GLIBC_2.40 _Fork F +GLIBC_2.40 _IO_2_1_stderr_ D 0xe0 +GLIBC_2.40 _IO_2_1_stdin_ D 0xe0 +GLIBC_2.40 _IO_2_1_stdout_ D 0xe0 +GLIBC_2.40 _IO_adjust_column F +GLIBC_2.40 _IO_adjust_wcolumn F +GLIBC_2.40 _IO_default_doallocate F +GLIBC_2.40 _IO_default_finish F +GLIBC_2.40 _IO_default_pbackfail F +GLIBC_2.40 _IO_default_uflow F +GLIBC_2.40 _IO_default_xsgetn F +GLIBC_2.40 _IO_default_xsputn F +GLIBC_2.40 _IO_do_write F +GLIBC_2.40 _IO_doallocbuf F +GLIBC_2.40 _IO_fclose F +GLIBC_2.40 _IO_fdopen F +GLIBC_2.40 _IO_feof F +GLIBC_2.40 _IO_ferror F +GLIBC_2.40 _IO_fflush F +GLIBC_2.40 _IO_fgetpos F +GLIBC_2.40 _IO_fgetpos64 F +GLIBC_2.40 _IO_fgets F +GLIBC_2.40 _IO_file_attach F +GLIBC_2.40 _IO_file_close F +GLIBC_2.40 _IO_file_close_it F +GLIBC_2.40 _IO_file_doallocate F +GLIBC_2.40 _IO_file_finish F +GLIBC_2.40 _IO_file_fopen F +GLIBC_2.40 _IO_file_init F +GLIBC_2.40 _IO_file_jumps D 0xa8 +GLIBC_2.40 _IO_file_open F +GLIBC_2.40 _IO_file_overflow F +GLIBC_2.40 _IO_file_read F +GLIBC_2.40 _IO_file_seek F +GLIBC_2.40 _IO_file_seekoff F +GLIBC_2.40 _IO_file_setbuf F +GLIBC_2.40 _IO_file_stat F +GLIBC_2.40 _IO_file_sync F +GLIBC_2.40 _IO_file_underflow F +GLIBC_2.40 _IO_file_write F +GLIBC_2.40 _IO_file_xsputn F +GLIBC_2.40 _IO_flockfile F +GLIBC_2.40 _IO_flush_all F +GLIBC_2.40 _IO_flush_all_linebuffered F +GLIBC_2.40 _IO_fopen F +GLIBC_2.40 _IO_fprintf F +GLIBC_2.40 _IO_fputs F +GLIBC_2.40 _IO_fread F +GLIBC_2.40 _IO_free_backup_area F +GLIBC_2.40 _IO_free_wbackup_area F +GLIBC_2.40 _IO_fsetpos F +GLIBC_2.40 _IO_fsetpos64 F +GLIBC_2.40 _IO_ftell F +GLIBC_2.40 _IO_ftrylockfile F +GLIBC_2.40 _IO_funlockfile F +GLIBC_2.40 _IO_fwrite F +GLIBC_2.40 _IO_getc F +GLIBC_2.40 _IO_getline F +GLIBC_2.40 _IO_getline_info F +GLIBC_2.40 _IO_gets F +GLIBC_2.40 _IO_init F +GLIBC_2.40 _IO_init_marker F +GLIBC_2.40 _IO_init_wmarker F +GLIBC_2.40 _IO_iter_begin F +GLIBC_2.40 _IO_iter_end F +GLIBC_2.40 _IO_iter_file F +GLIBC_2.40 _IO_iter_next F +GLIBC_2.40 _IO_least_wmarker F +GLIBC_2.40 _IO_link_in F +GLIBC_2.40 _IO_list_all D 0x8 +GLIBC_2.40 _IO_list_lock F +GLIBC_2.40 _IO_list_resetlock F +GLIBC_2.40 _IO_list_unlock F +GLIBC_2.40 _IO_marker_delta F +GLIBC_2.40 _IO_marker_difference F +GLIBC_2.40 _IO_padn F +GLIBC_2.40 _IO_peekc_locked F +GLIBC_2.40 _IO_popen F +GLIBC_2.40 _IO_printf F +GLIBC_2.40 _IO_proc_close F +GLIBC_2.40 _IO_proc_open F +GLIBC_2.40 _IO_putc F +GLIBC_2.40 _IO_puts F +GLIBC_2.40 _IO_remove_marker F +GLIBC_2.40 _IO_seekmark F +GLIBC_2.40 _IO_seekoff F +GLIBC_2.40 _IO_seekpos F +GLIBC_2.40 _IO_seekwmark F +GLIBC_2.40 _IO_setb F +GLIBC_2.40 _IO_setbuffer F +GLIBC_2.40 _IO_setvbuf F +GLIBC_2.40 _IO_sgetn F +GLIBC_2.40 _IO_sprintf F +GLIBC_2.40 _IO_sputbackc F +GLIBC_2.40 _IO_sputbackwc F +GLIBC_2.40 _IO_sscanf F +GLIBC_2.40 _IO_str_init_readonly F +GLIBC_2.40 _IO_str_init_static F +GLIBC_2.40 _IO_str_overflow F +GLIBC_2.40 _IO_str_pbackfail F +GLIBC_2.40 _IO_str_seekoff F +GLIBC_2.40 _IO_str_underflow F +GLIBC_2.40 _IO_sungetc F +GLIBC_2.40 _IO_sungetwc F +GLIBC_2.40 _IO_switch_to_get_mode F +GLIBC_2.40 _IO_switch_to_main_wget_area F +GLIBC_2.40 _IO_switch_to_wbackup_area F +GLIBC_2.40 _IO_switch_to_wget_mode F +GLIBC_2.40 _IO_un_link F +GLIBC_2.40 _IO_ungetc F +GLIBC_2.40 _IO_unsave_markers F +GLIBC_2.40 _IO_unsave_wmarkers F +GLIBC_2.40 _IO_vfprintf F +GLIBC_2.40 _IO_vsprintf F +GLIBC_2.40 _IO_wdefault_doallocate F +GLIBC_2.40 _IO_wdefault_finish F +GLIBC_2.40 _IO_wdefault_pbackfail F +GLIBC_2.40 _IO_wdefault_uflow F +GLIBC_2.40 _IO_wdefault_xsgetn F +GLIBC_2.40 _IO_wdefault_xsputn F +GLIBC_2.40 _IO_wdo_write F +GLIBC_2.40 _IO_wdoallocbuf F +GLIBC_2.40 _IO_wfile_jumps D 0xa8 +GLIBC_2.40 _IO_wfile_overflow F +GLIBC_2.40 _IO_wfile_seekoff F +GLIBC_2.40 _IO_wfile_sync F +GLIBC_2.40 _IO_wfile_underflow F +GLIBC_2.40 _IO_wfile_xsputn F +GLIBC_2.40 _IO_wmarker_delta F +GLIBC_2.40 _IO_wsetb F +GLIBC_2.40 _S_catch_exception_raise F +GLIBC_2.40 _S_msg_add_auth F +GLIBC_2.40 _S_msg_del_auth F +GLIBC_2.40 _S_msg_describe_ports F +GLIBC_2.40 _S_msg_get_dtable F +GLIBC_2.40 _S_msg_get_env_variable F +GLIBC_2.40 _S_msg_get_environment F +GLIBC_2.40 _S_msg_get_fd F +GLIBC_2.40 _S_msg_get_init_int F +GLIBC_2.40 _S_msg_get_init_ints F +GLIBC_2.40 _S_msg_get_init_port F +GLIBC_2.40 _S_msg_get_init_ports F +GLIBC_2.40 _S_msg_proc_newids F +GLIBC_2.40 _S_msg_report_wait F +GLIBC_2.40 _S_msg_set_dtable F +GLIBC_2.40 _S_msg_set_env_variable F +GLIBC_2.40 _S_msg_set_environment F +GLIBC_2.40 _S_msg_set_fd F +GLIBC_2.40 _S_msg_set_init_int F +GLIBC_2.40 _S_msg_set_init_ints F +GLIBC_2.40 _S_msg_set_init_port F +GLIBC_2.40 _S_msg_set_init_ports F +GLIBC_2.40 _S_msg_sig_post F +GLIBC_2.40 _S_msg_sig_post_untraced F +GLIBC_2.40 ___brk_addr D 0x8 +GLIBC_2.40 __argz_count F +GLIBC_2.40 __argz_next F +GLIBC_2.40 __argz_stringify F +GLIBC_2.40 __asprintf F +GLIBC_2.40 __asprintf_chk F +GLIBC_2.40 __assert F +GLIBC_2.40 __assert_fail F +GLIBC_2.40 __assert_perror_fail F +GLIBC_2.40 __backtrace F +GLIBC_2.40 __backtrace_symbols F +GLIBC_2.40 __backtrace_symbols_fd F +GLIBC_2.40 __bsd_getpgrp F +GLIBC_2.40 __bzero F +GLIBC_2.40 __check_rhosts_file D 0x4 +GLIBC_2.40 __chk_fail F +GLIBC_2.40 __close F +GLIBC_2.40 __cmsg_nxthdr F +GLIBC_2.40 __confstr_chk F +GLIBC_2.40 __connect F +GLIBC_2.40 __ctype_b_loc F +GLIBC_2.40 __ctype_get_mb_cur_max F +GLIBC_2.40 __ctype_tolower_loc F +GLIBC_2.40 __ctype_toupper_loc F +GLIBC_2.40 __cxa_at_quick_exit F +GLIBC_2.40 __cxa_atexit F +GLIBC_2.40 __cxa_finalize F +GLIBC_2.40 __cxa_thread_atexit_impl F +GLIBC_2.40 __cyg_profile_func_enter F +GLIBC_2.40 __cyg_profile_func_exit F +GLIBC_2.40 __daylight D 0x4 +GLIBC_2.40 __dcgettext F +GLIBC_2.40 __dgettext F +GLIBC_2.40 __dprintf_chk F +GLIBC_2.40 __dup2 F +GLIBC_2.40 __duplocale F +GLIBC_2.40 __environ D 0x8 +GLIBC_2.40 __errno_location F +GLIBC_2.40 __explicit_bzero_chk F +GLIBC_2.40 __fbufsize F +GLIBC_2.40 __fcntl F +GLIBC_2.40 __fdelt_chk F +GLIBC_2.40 __fdelt_warn F +GLIBC_2.40 __ffs F +GLIBC_2.40 __fgets_chk F +GLIBC_2.40 __fgets_unlocked_chk F +GLIBC_2.40 __fgetws_chk F +GLIBC_2.40 __fgetws_unlocked_chk F +GLIBC_2.40 __finite F +GLIBC_2.40 __finitef F +GLIBC_2.40 __finitel F +GLIBC_2.40 __flbf F +GLIBC_2.40 __fork F +GLIBC_2.40 __fpending F +GLIBC_2.40 __fprintf_chk F +GLIBC_2.40 __fpu_control D 0x4 +GLIBC_2.40 __fpurge F +GLIBC_2.40 __fread_chk F +GLIBC_2.40 __fread_unlocked_chk F +GLIBC_2.40 __freadable F +GLIBC_2.40 __freading F +GLIBC_2.40 __freelocale F +GLIBC_2.40 __fsetlocking F +GLIBC_2.40 __fwprintf_chk F +GLIBC_2.40 __fwritable F +GLIBC_2.40 __fwriting F +GLIBC_2.40 __getauxval F +GLIBC_2.40 __getcwd_chk F +GLIBC_2.40 __getdelim F +GLIBC_2.40 __getdomainname_chk F +GLIBC_2.40 __getgroups_chk F +GLIBC_2.40 __gethostname_chk F +GLIBC_2.40 __getlogin_r_chk F +GLIBC_2.40 __getpagesize F +GLIBC_2.40 __getpgid F +GLIBC_2.40 __getpid F +GLIBC_2.40 __gets_chk F +GLIBC_2.40 __gettimeofday F +GLIBC_2.40 __getwd_chk F +GLIBC_2.40 __gmtime_r F +GLIBC_2.40 __h_errno_location F +GLIBC_2.40 __hurd_dfail F +GLIBC_2.40 __hurd_fail F +GLIBC_2.40 __hurd_sockfail F +GLIBC_2.40 __isalnum_l F +GLIBC_2.40 __isalpha_l F +GLIBC_2.40 __isascii_l F +GLIBC_2.40 __isblank_l F +GLIBC_2.40 __iscntrl_l F +GLIBC_2.40 __isctype F +GLIBC_2.40 __isdigit_l F +GLIBC_2.40 __isgraph_l F +GLIBC_2.40 __isinf F +GLIBC_2.40 __isinff F +GLIBC_2.40 __isinfl F +GLIBC_2.40 __islower_l F +GLIBC_2.40 __isnan F +GLIBC_2.40 __isnanf F +GLIBC_2.40 __isnanl F +GLIBC_2.40 __isoc23_fscanf F +GLIBC_2.40 __isoc23_fwscanf F +GLIBC_2.40 __isoc23_scanf F +GLIBC_2.40 __isoc23_sscanf F +GLIBC_2.40 __isoc23_strtoimax F +GLIBC_2.40 __isoc23_strtol F +GLIBC_2.40 __isoc23_strtol_l F +GLIBC_2.40 __isoc23_strtoll F +GLIBC_2.40 __isoc23_strtoll_l F +GLIBC_2.40 __isoc23_strtoul F +GLIBC_2.40 __isoc23_strtoul_l F +GLIBC_2.40 __isoc23_strtoull F +GLIBC_2.40 __isoc23_strtoull_l F +GLIBC_2.40 __isoc23_strtoumax F +GLIBC_2.40 __isoc23_swscanf F +GLIBC_2.40 __isoc23_vfscanf F +GLIBC_2.40 __isoc23_vfwscanf F +GLIBC_2.40 __isoc23_vscanf F +GLIBC_2.40 __isoc23_vsscanf F +GLIBC_2.40 __isoc23_vswscanf F +GLIBC_2.40 __isoc23_vwscanf F +GLIBC_2.40 __isoc23_wcstoimax F +GLIBC_2.40 __isoc23_wcstol F +GLIBC_2.40 __isoc23_wcstol_l F +GLIBC_2.40 __isoc23_wcstoll F +GLIBC_2.40 __isoc23_wcstoll_l F +GLIBC_2.40 __isoc23_wcstoul F +GLIBC_2.40 __isoc23_wcstoul_l F +GLIBC_2.40 __isoc23_wcstoull F +GLIBC_2.40 __isoc23_wcstoull_l F +GLIBC_2.40 __isoc23_wcstoumax F +GLIBC_2.40 __isoc23_wscanf F +GLIBC_2.40 __isoc99_fscanf F +GLIBC_2.40 __isoc99_fwscanf F +GLIBC_2.40 __isoc99_scanf F +GLIBC_2.40 __isoc99_sscanf F +GLIBC_2.40 __isoc99_swscanf F +GLIBC_2.40 __isoc99_vfscanf F +GLIBC_2.40 __isoc99_vfwscanf F +GLIBC_2.40 __isoc99_vscanf F +GLIBC_2.40 __isoc99_vsscanf F +GLIBC_2.40 __isoc99_vswscanf F +GLIBC_2.40 __isoc99_vwscanf F +GLIBC_2.40 __isoc99_wscanf F +GLIBC_2.40 __isprint_l F +GLIBC_2.40 __ispunct_l F +GLIBC_2.40 __isspace_l F +GLIBC_2.40 __isupper_l F +GLIBC_2.40 __iswalnum_l F +GLIBC_2.40 __iswalpha_l F +GLIBC_2.40 __iswblank_l F +GLIBC_2.40 __iswcntrl_l F +GLIBC_2.40 __iswctype F +GLIBC_2.40 __iswctype_l F +GLIBC_2.40 __iswdigit_l F +GLIBC_2.40 __iswgraph_l F +GLIBC_2.40 __iswlower_l F +GLIBC_2.40 __iswprint_l F +GLIBC_2.40 __iswpunct_l F +GLIBC_2.40 __iswspace_l F +GLIBC_2.40 __iswupper_l F +GLIBC_2.40 __iswxdigit_l F +GLIBC_2.40 __isxdigit_l F +GLIBC_2.40 __libc_allocate_rtsig F +GLIBC_2.40 __libc_calloc F +GLIBC_2.40 __libc_current_sigrtmax F +GLIBC_2.40 __libc_current_sigrtmin F +GLIBC_2.40 __libc_free F +GLIBC_2.40 __libc_freeres F +GLIBC_2.40 __libc_init_first F +GLIBC_2.40 __libc_mallinfo F +GLIBC_2.40 __libc_malloc F +GLIBC_2.40 __libc_mallopt F +GLIBC_2.40 __libc_memalign F +GLIBC_2.40 __libc_pvalloc F +GLIBC_2.40 __libc_realloc F +GLIBC_2.40 __libc_single_threaded D 0x1 +GLIBC_2.40 __libc_start_main F +GLIBC_2.40 __libc_valloc F +GLIBC_2.40 __longjmp_chk F +GLIBC_2.40 __lseek F +GLIBC_2.40 __mach_host_self_ D 0x4 +GLIBC_2.40 __mach_msg F +GLIBC_2.40 __mach_msg_destroy F +GLIBC_2.40 __mach_port_allocate F +GLIBC_2.40 __mach_port_deallocate F +GLIBC_2.40 __mach_port_insert_right F +GLIBC_2.40 __mach_reply_port F +GLIBC_2.40 __mach_task_self_ D 0x4 +GLIBC_2.40 __mach_thread_self F +GLIBC_2.40 __mbrlen F +GLIBC_2.40 __mbrtowc F +GLIBC_2.40 __mbsnrtowcs_chk F +GLIBC_2.40 __mbsrtowcs_chk F +GLIBC_2.40 __mbstowcs_chk F +GLIBC_2.40 __memcmpeq F +GLIBC_2.40 __memcpy_chk F +GLIBC_2.40 __memmove_chk F +GLIBC_2.40 __mempcpy F +GLIBC_2.40 __mempcpy_chk F +GLIBC_2.40 __memset_chk F +GLIBC_2.40 __mig_allocate F +GLIBC_2.40 __mig_dealloc_reply_port F +GLIBC_2.40 __mig_deallocate F +GLIBC_2.40 __mig_get_reply_port F +GLIBC_2.40 __mig_init F +GLIBC_2.40 __mig_put_reply_port F +GLIBC_2.40 __mig_strncpy F +GLIBC_2.40 __mmap F +GLIBC_2.40 __monstartup F +GLIBC_2.40 __nanosleep F +GLIBC_2.40 __newlocale F +GLIBC_2.40 __nl_langinfo_l F +GLIBC_2.40 __nss_configure_lookup F +GLIBC_2.40 __nss_hostname_digits_dots F +GLIBC_2.40 __obstack_printf_chk F +GLIBC_2.40 __obstack_vprintf_chk F +GLIBC_2.40 __open F +GLIBC_2.40 __open64 F +GLIBC_2.40 __open64_2 F +GLIBC_2.40 __open_2 F +GLIBC_2.40 __openat64_2 F +GLIBC_2.40 __openat_2 F +GLIBC_2.40 __overflow F +GLIBC_2.40 __pipe F +GLIBC_2.40 __poll F +GLIBC_2.40 __poll_chk F +GLIBC_2.40 __posix_getopt F +GLIBC_2.40 __ppoll_chk F +GLIBC_2.40 __pread64 F +GLIBC_2.40 __pread64_chk F +GLIBC_2.40 __pread_chk F +GLIBC_2.40 __printf_chk F +GLIBC_2.40 __printf_fp F +GLIBC_2.40 __profile_frequency F +GLIBC_2.40 __progname D 0x8 +GLIBC_2.40 __progname_full D 0x8 +GLIBC_2.40 __pthread_get_cleanup_stack F +GLIBC_2.40 __pthread_self F +GLIBC_2.40 __ptsname_r_chk F +GLIBC_2.40 __pwrite64 F +GLIBC_2.40 __rawmemchr F +GLIBC_2.40 __rcmd_errstr D 0x8 +GLIBC_2.40 __read F +GLIBC_2.40 __read_chk F +GLIBC_2.40 __readlink_chk F +GLIBC_2.40 __readlinkat_chk F +GLIBC_2.40 __realpath_chk F +GLIBC_2.40 __recv_chk F +GLIBC_2.40 __recvfrom_chk F +GLIBC_2.40 __register_atfork F +GLIBC_2.40 __res_init F +GLIBC_2.40 __res_nclose F +GLIBC_2.40 __res_ninit F +GLIBC_2.40 __res_randomid F +GLIBC_2.40 __res_state F +GLIBC_2.40 __sbrk F +GLIBC_2.40 __sched_cpualloc F +GLIBC_2.40 __sched_cpucount F +GLIBC_2.40 __sched_cpufree F +GLIBC_2.40 __sched_get_priority_max F +GLIBC_2.40 __sched_get_priority_min F +GLIBC_2.40 __sched_getparam F +GLIBC_2.40 __sched_getscheduler F +GLIBC_2.40 __sched_setscheduler F +GLIBC_2.40 __sched_yield F +GLIBC_2.40 __select F +GLIBC_2.40 __send F +GLIBC_2.40 __setpgid F +GLIBC_2.40 __sigaction F +GLIBC_2.40 __signbit F +GLIBC_2.40 __signbitf F +GLIBC_2.40 __signbitl F +GLIBC_2.40 __sigpause F +GLIBC_2.40 __sigsetjmp F +GLIBC_2.40 __sigsuspend F +GLIBC_2.40 __snprintf_chk F +GLIBC_2.40 __sprintf_chk F +GLIBC_2.40 __stack_chk_fail F +GLIBC_2.40 __stpcpy F +GLIBC_2.40 __stpcpy_chk F +GLIBC_2.40 __stpncpy F +GLIBC_2.40 __stpncpy_chk F +GLIBC_2.40 __strcasecmp F +GLIBC_2.40 __strcasecmp_l F +GLIBC_2.40 __strcasestr F +GLIBC_2.40 __strcat_chk F +GLIBC_2.40 __strcoll_l F +GLIBC_2.40 __strcpy_chk F +GLIBC_2.40 __strdup F +GLIBC_2.40 __strerror_r F +GLIBC_2.40 __strfmon_l F +GLIBC_2.40 __strftime_l F +GLIBC_2.40 __strlcat_chk F +GLIBC_2.40 __strlcpy_chk F +GLIBC_2.40 __strncasecmp_l F +GLIBC_2.40 __strncat_chk F +GLIBC_2.40 __strncpy_chk F +GLIBC_2.40 __strndup F +GLIBC_2.40 __strsep_g F +GLIBC_2.40 __strtod_internal F +GLIBC_2.40 __strtod_l F +GLIBC_2.40 __strtof_internal F +GLIBC_2.40 __strtof_l F +GLIBC_2.40 __strtok_r F +GLIBC_2.40 __strtol_internal F +GLIBC_2.40 __strtol_l F +GLIBC_2.40 __strtold_internal F +GLIBC_2.40 __strtold_l F +GLIBC_2.40 __strtoll_internal F +GLIBC_2.40 __strtoll_l F +GLIBC_2.40 __strtoul_internal F +GLIBC_2.40 __strtoul_l F +GLIBC_2.40 __strtoull_internal F +GLIBC_2.40 __strtoull_l F +GLIBC_2.40 __strverscmp F +GLIBC_2.40 __strxfrm_l F +GLIBC_2.40 __swprintf_chk F +GLIBC_2.40 __sysconf F +GLIBC_2.40 __syslog_chk F +GLIBC_2.40 __sysv_signal F +GLIBC_2.40 __timezone D 0x8 +GLIBC_2.40 __toascii_l F +GLIBC_2.40 __tolower_l F +GLIBC_2.40 __toupper_l F +GLIBC_2.40 __towctrans F +GLIBC_2.40 __towctrans_l F +GLIBC_2.40 __towlower_l F +GLIBC_2.40 __towupper_l F +GLIBC_2.40 __ttyname_r_chk F +GLIBC_2.40 __tzname D 0x10 +GLIBC_2.40 __uflow F +GLIBC_2.40 __underflow F +GLIBC_2.40 __uselocale F +GLIBC_2.40 __vasprintf_chk F +GLIBC_2.40 __vdprintf_chk F +GLIBC_2.40 __vfork F +GLIBC_2.40 __vfprintf_chk F +GLIBC_2.40 __vfscanf F +GLIBC_2.40 __vfwprintf_chk F +GLIBC_2.40 __vm_allocate F +GLIBC_2.40 __vm_deallocate F +GLIBC_2.40 __vm_page_size D 0x8 +GLIBC_2.40 __vprintf_chk F +GLIBC_2.40 __vsnprintf F +GLIBC_2.40 __vsnprintf_chk F +GLIBC_2.40 __vsprintf_chk F +GLIBC_2.40 __vsscanf F +GLIBC_2.40 __vswprintf_chk F +GLIBC_2.40 __vsyslog_chk F +GLIBC_2.40 __vwprintf_chk F +GLIBC_2.40 __wait F +GLIBC_2.40 __waitpid F +GLIBC_2.40 __wcpcpy_chk F +GLIBC_2.40 __wcpncpy_chk F +GLIBC_2.40 __wcrtomb_chk F +GLIBC_2.40 __wcscasecmp_l F +GLIBC_2.40 __wcscat_chk F +GLIBC_2.40 __wcscoll_l F +GLIBC_2.40 __wcscpy_chk F +GLIBC_2.40 __wcsftime_l F +GLIBC_2.40 __wcslcat_chk F +GLIBC_2.40 __wcslcpy_chk F +GLIBC_2.40 __wcsncasecmp_l F +GLIBC_2.40 __wcsncat_chk F +GLIBC_2.40 __wcsncpy_chk F +GLIBC_2.40 __wcsnrtombs_chk F +GLIBC_2.40 __wcsrtombs_chk F +GLIBC_2.40 __wcstod_internal F +GLIBC_2.40 __wcstod_l F +GLIBC_2.40 __wcstof_internal F +GLIBC_2.40 __wcstof_l F +GLIBC_2.40 __wcstol_internal F +GLIBC_2.40 __wcstol_l F +GLIBC_2.40 __wcstold_internal F +GLIBC_2.40 __wcstold_l F +GLIBC_2.40 __wcstoll_internal F +GLIBC_2.40 __wcstoll_l F +GLIBC_2.40 __wcstombs_chk F +GLIBC_2.40 __wcstoul_internal F +GLIBC_2.40 __wcstoul_l F +GLIBC_2.40 __wcstoull_internal F +GLIBC_2.40 __wcstoull_l F +GLIBC_2.40 __wcsxfrm_l F +GLIBC_2.40 __wctomb_chk F +GLIBC_2.40 __wctrans_l F +GLIBC_2.40 __wctype_l F +GLIBC_2.40 __wmemcpy_chk F +GLIBC_2.40 __wmemmove_chk F +GLIBC_2.40 __wmempcpy_chk F +GLIBC_2.40 __wmemset_chk F +GLIBC_2.40 __woverflow F +GLIBC_2.40 __wprintf_chk F +GLIBC_2.40 __write F +GLIBC_2.40 __writev F +GLIBC_2.40 __wuflow F +GLIBC_2.40 __wunderflow F +GLIBC_2.40 __xpg_basename F +GLIBC_2.40 __xpg_sigpause F +GLIBC_2.40 __xpg_strerror_r F +GLIBC_2.40 _dl_find_object F +GLIBC_2.40 _dl_mcount_wrapper F +GLIBC_2.40 _dl_mcount_wrapper_check F +GLIBC_2.40 _environ D 0x8 +GLIBC_2.40 _exit F +GLIBC_2.40 _flushlbf F +GLIBC_2.40 _hurd_canonicalize_directory_name_internal F +GLIBC_2.40 _hurd_critical_section_lock F +GLIBC_2.40 _hurd_critical_section_unlock F +GLIBC_2.40 _hurd_device_master D 0x4 +GLIBC_2.40 _hurd_dtable D 0x8 +GLIBC_2.40 _hurd_dtable_lock D 0x28 +GLIBC_2.40 _hurd_dtablesize D 0x4 +GLIBC_2.40 _hurd_exception2signal F +GLIBC_2.40 _hurd_exec F +GLIBC_2.40 _hurd_exec_paths F +GLIBC_2.40 _hurd_fd_error F +GLIBC_2.40 _hurd_fd_error_signal F +GLIBC_2.40 _hurd_fd_get F +GLIBC_2.40 _hurd_host_priv D 0x4 +GLIBC_2.40 _hurd_init F +GLIBC_2.40 _hurd_intern_fd F +GLIBC_2.40 _hurd_intr_rpc_mach_msg F +GLIBC_2.40 _hurd_libc_proc_init F +GLIBC_2.40 _hurd_msgport D 0x4 +GLIBC_2.40 _hurd_port_cleanup F +GLIBC_2.40 _hurd_port_free F +GLIBC_2.40 _hurd_port_get F +GLIBC_2.40 _hurd_port_init F +GLIBC_2.40 _hurd_port_locked_get F +GLIBC_2.40 _hurd_port_locked_set F +GLIBC_2.40 _hurd_port_move F +GLIBC_2.40 _hurd_port_set F +GLIBC_2.40 _hurd_ports D 0x8 +GLIBC_2.40 _hurd_ports_use F +GLIBC_2.40 _hurd_proc_init F +GLIBC_2.40 _hurd_raise_signal F +GLIBC_2.40 _hurd_self_sigstate F +GLIBC_2.40 _hurd_thread_sigstate F +GLIBC_2.40 _hurd_userlink_clear F +GLIBC_2.40 _hurd_userlink_link F +GLIBC_2.40 _hurd_userlink_unlink F +GLIBC_2.40 _hurdsig_fault_catch_exception_raise F +GLIBC_2.40 _hurdsig_fault_env D 0xc0 +GLIBC_2.40 _hurdsig_fault_preemptor D 0x30 +GLIBC_2.40 _hurdsig_interrupt_timeout D 0x4 +GLIBC_2.40 _libc_intl_domainname D 0x5 +GLIBC_2.40 _longjmp F +GLIBC_2.40 _mcleanup F +GLIBC_2.40 _mcount F +GLIBC_2.40 _nl_default_dirname D 0xe +GLIBC_2.40 _nl_domain_bindings D 0x8 +GLIBC_2.40 _nl_msg_cat_cntr D 0x4 +GLIBC_2.40 _obstack_allocated_p F +GLIBC_2.40 _obstack_begin F +GLIBC_2.40 _obstack_begin_1 F +GLIBC_2.40 _obstack_free F +GLIBC_2.40 _obstack_memory_used F +GLIBC_2.40 _obstack_newchunk F +GLIBC_2.40 _res D 0x238 +GLIBC_2.40 _res_hconf D 0x48 +GLIBC_2.40 _setjmp F +GLIBC_2.40 _tolower F +GLIBC_2.40 _toupper F +GLIBC_2.40 a64l F +GLIBC_2.40 abort F +GLIBC_2.40 abs F +GLIBC_2.40 accept F +GLIBC_2.40 accept4 F +GLIBC_2.40 access F +GLIBC_2.40 acct F +GLIBC_2.40 addmntent F +GLIBC_2.40 addseverity F +GLIBC_2.40 adjtime F +GLIBC_2.40 alarm F +GLIBC_2.40 aligned_alloc F +GLIBC_2.40 alphasort F +GLIBC_2.40 alphasort64 F +GLIBC_2.40 arc4random F +GLIBC_2.40 arc4random_buf F +GLIBC_2.40 arc4random_uniform F +GLIBC_2.40 argp_err_exit_status D 0x4 +GLIBC_2.40 argp_error F +GLIBC_2.40 argp_failure F +GLIBC_2.40 argp_help F +GLIBC_2.40 argp_parse F +GLIBC_2.40 argp_program_bug_address D 0x8 +GLIBC_2.40 argp_program_version D 0x8 +GLIBC_2.40 argp_program_version_hook D 0x8 +GLIBC_2.40 argp_state_help F +GLIBC_2.40 argp_usage F +GLIBC_2.40 argz_add F +GLIBC_2.40 argz_add_sep F +GLIBC_2.40 argz_append F +GLIBC_2.40 argz_count F +GLIBC_2.40 argz_create F +GLIBC_2.40 argz_create_sep F +GLIBC_2.40 argz_delete F +GLIBC_2.40 argz_extract F +GLIBC_2.40 argz_insert F +GLIBC_2.40 argz_next F +GLIBC_2.40 argz_replace F +GLIBC_2.40 argz_stringify F +GLIBC_2.40 asctime F +GLIBC_2.40 asctime_r F +GLIBC_2.40 asprintf F +GLIBC_2.40 atof F +GLIBC_2.40 atoi F +GLIBC_2.40 atol F +GLIBC_2.40 atoll F +GLIBC_2.40 backtrace F +GLIBC_2.40 backtrace_symbols F +GLIBC_2.40 backtrace_symbols_fd F +GLIBC_2.40 basename F +GLIBC_2.40 bcmp F +GLIBC_2.40 bcopy F +GLIBC_2.40 bind F +GLIBC_2.40 bind_textdomain_codeset F +GLIBC_2.40 bindresvport F +GLIBC_2.40 bindtextdomain F +GLIBC_2.40 brk F +GLIBC_2.40 bsd_signal F +GLIBC_2.40 bsearch F +GLIBC_2.40 btowc F +GLIBC_2.40 bzero F +GLIBC_2.40 c16rtomb F +GLIBC_2.40 c32rtomb F +GLIBC_2.40 c8rtomb F +GLIBC_2.40 calloc F +GLIBC_2.40 canonicalize_file_name F +GLIBC_2.40 catclose F +GLIBC_2.40 catgets F +GLIBC_2.40 catopen F +GLIBC_2.40 cfgetispeed F +GLIBC_2.40 cfgetospeed F +GLIBC_2.40 cfmakeraw F +GLIBC_2.40 cfsetispeed F +GLIBC_2.40 cfsetospeed F +GLIBC_2.40 cfsetspeed F +GLIBC_2.40 chdir F +GLIBC_2.40 chflags F +GLIBC_2.40 chmod F +GLIBC_2.40 chown F +GLIBC_2.40 chroot F +GLIBC_2.40 clearenv F +GLIBC_2.40 clearerr F +GLIBC_2.40 clearerr_unlocked F +GLIBC_2.40 clock F +GLIBC_2.40 clock_getcpuclockid F +GLIBC_2.40 clock_getres F +GLIBC_2.40 clock_gettime F +GLIBC_2.40 clock_nanosleep F +GLIBC_2.40 clock_settime F +GLIBC_2.40 close F +GLIBC_2.40 close_range F +GLIBC_2.40 closedir F +GLIBC_2.40 closefrom F +GLIBC_2.40 closelog F +GLIBC_2.40 confstr F +GLIBC_2.40 connect F +GLIBC_2.40 copy_file_range F +GLIBC_2.40 copysign F +GLIBC_2.40 copysignf F +GLIBC_2.40 copysignl F +GLIBC_2.40 creat F +GLIBC_2.40 creat64 F +GLIBC_2.40 ctermid F +GLIBC_2.40 ctime F +GLIBC_2.40 ctime_r F +GLIBC_2.40 cuserid F +GLIBC_2.40 daemon F +GLIBC_2.40 daylight D 0x4 +GLIBC_2.40 dcgettext F +GLIBC_2.40 dcngettext F +GLIBC_2.40 dgettext F +GLIBC_2.40 difftime F +GLIBC_2.40 directory_name_split F +GLIBC_2.40 dirfd F +GLIBC_2.40 dirname F +GLIBC_2.40 div F +GLIBC_2.40 dl_iterate_phdr F +GLIBC_2.40 dladdr F +GLIBC_2.40 dladdr1 F +GLIBC_2.40 dlclose F +GLIBC_2.40 dlerror F +GLIBC_2.40 dlinfo F +GLIBC_2.40 dlmopen F +GLIBC_2.40 dlopen F +GLIBC_2.40 dlsym F +GLIBC_2.40 dlvsym F +GLIBC_2.40 dn_comp F +GLIBC_2.40 dn_expand F +GLIBC_2.40 dn_skipname F +GLIBC_2.40 dngettext F +GLIBC_2.40 dprintf F +GLIBC_2.40 drand48 F +GLIBC_2.40 drand48_r F +GLIBC_2.40 dup F +GLIBC_2.40 dup2 F +GLIBC_2.40 dup3 F +GLIBC_2.40 duplocale F +GLIBC_2.40 dysize F +GLIBC_2.40 eaccess F +GLIBC_2.40 ecvt F +GLIBC_2.40 ecvt_r F +GLIBC_2.40 endaliasent F +GLIBC_2.40 endfsent F +GLIBC_2.40 endgrent F +GLIBC_2.40 endhostent F +GLIBC_2.40 endmntent F +GLIBC_2.40 endnetent F +GLIBC_2.40 endnetgrent F +GLIBC_2.40 endprotoent F +GLIBC_2.40 endpwent F +GLIBC_2.40 endrpcent F +GLIBC_2.40 endservent F +GLIBC_2.40 endsgent F +GLIBC_2.40 endspent F +GLIBC_2.40 endttyent F +GLIBC_2.40 endusershell F +GLIBC_2.40 endutent F +GLIBC_2.40 endutxent F +GLIBC_2.40 environ D 0x8 +GLIBC_2.40 envz_add F +GLIBC_2.40 envz_entry F +GLIBC_2.40 envz_get F +GLIBC_2.40 envz_merge F +GLIBC_2.40 envz_remove F +GLIBC_2.40 envz_strip F +GLIBC_2.40 erand48 F +GLIBC_2.40 erand48_r F +GLIBC_2.40 err F +GLIBC_2.40 error F +GLIBC_2.40 error_at_line F +GLIBC_2.40 error_message_count D 0x4 +GLIBC_2.40 error_one_per_line D 0x4 +GLIBC_2.40 error_print_progname D 0x8 +GLIBC_2.40 errx F +GLIBC_2.40 ether_aton F +GLIBC_2.40 ether_aton_r F +GLIBC_2.40 ether_hostton F +GLIBC_2.40 ether_line F +GLIBC_2.40 ether_ntoa F +GLIBC_2.40 ether_ntoa_r F +GLIBC_2.40 ether_ntohost F +GLIBC_2.40 euidaccess F +GLIBC_2.40 evc_wait F +GLIBC_2.40 execl F +GLIBC_2.40 execle F +GLIBC_2.40 execlp F +GLIBC_2.40 execv F +GLIBC_2.40 execve F +GLIBC_2.40 execveat F +GLIBC_2.40 execvp F +GLIBC_2.40 execvpe F +GLIBC_2.40 exit F +GLIBC_2.40 explicit_bzero F +GLIBC_2.40 faccessat F +GLIBC_2.40 fchdir F +GLIBC_2.40 fchflags F +GLIBC_2.40 fchmod F +GLIBC_2.40 fchmodat F +GLIBC_2.40 fchown F +GLIBC_2.40 fchownat F +GLIBC_2.40 fclose F +GLIBC_2.40 fcloseall F +GLIBC_2.40 fcntl F +GLIBC_2.40 fcntl64 F +GLIBC_2.40 fcvt F +GLIBC_2.40 fcvt_r F +GLIBC_2.40 fdatasync F +GLIBC_2.40 fdopen F +GLIBC_2.40 fdopendir F +GLIBC_2.40 feof F +GLIBC_2.40 feof_unlocked F +GLIBC_2.40 ferror F +GLIBC_2.40 ferror_unlocked F +GLIBC_2.40 fexecve F +GLIBC_2.40 fflush F +GLIBC_2.40 fflush_unlocked F +GLIBC_2.40 ffs F +GLIBC_2.40 ffsl F +GLIBC_2.40 ffsll F +GLIBC_2.40 fgetc F +GLIBC_2.40 fgetc_unlocked F +GLIBC_2.40 fgetgrent F +GLIBC_2.40 fgetgrent_r F +GLIBC_2.40 fgetpos F +GLIBC_2.40 fgetpos64 F +GLIBC_2.40 fgetpwent F +GLIBC_2.40 fgetpwent_r F +GLIBC_2.40 fgets F +GLIBC_2.40 fgets_unlocked F +GLIBC_2.40 fgetsgent F +GLIBC_2.40 fgetsgent_r F +GLIBC_2.40 fgetspent F +GLIBC_2.40 fgetspent_r F +GLIBC_2.40 fgetwc F +GLIBC_2.40 fgetwc_unlocked F +GLIBC_2.40 fgetws F +GLIBC_2.40 fgetws_unlocked F +GLIBC_2.40 fgetxattr F +GLIBC_2.40 file_name_lookup F +GLIBC_2.40 file_name_lookup_under F +GLIBC_2.40 file_name_path_lookup F +GLIBC_2.40 file_name_split F +GLIBC_2.40 fileno F +GLIBC_2.40 fileno_unlocked F +GLIBC_2.40 finite F +GLIBC_2.40 finitef F +GLIBC_2.40 finitel F +GLIBC_2.40 flistxattr F +GLIBC_2.40 flock F +GLIBC_2.40 flockfile F +GLIBC_2.40 fmemopen F +GLIBC_2.40 fmtmsg F +GLIBC_2.40 fnmatch F +GLIBC_2.40 fopen F +GLIBC_2.40 fopen64 F +GLIBC_2.40 fopencookie F +GLIBC_2.40 fopenport F +GLIBC_2.40 fork F +GLIBC_2.40 forkpty F +GLIBC_2.40 fpathconf F +GLIBC_2.40 fprintf F +GLIBC_2.40 fputc F +GLIBC_2.40 fputc_unlocked F +GLIBC_2.40 fputs F +GLIBC_2.40 fputs_unlocked F +GLIBC_2.40 fputwc F +GLIBC_2.40 fputwc_unlocked F +GLIBC_2.40 fputws F +GLIBC_2.40 fputws_unlocked F +GLIBC_2.40 fread F +GLIBC_2.40 fread_unlocked F +GLIBC_2.40 free F +GLIBC_2.40 freeaddrinfo F +GLIBC_2.40 freeifaddrs F +GLIBC_2.40 freelocale F +GLIBC_2.40 fremovexattr F +GLIBC_2.40 freopen F +GLIBC_2.40 freopen64 F +GLIBC_2.40 frexp F +GLIBC_2.40 frexpf F +GLIBC_2.40 frexpl F +GLIBC_2.40 fscanf F +GLIBC_2.40 fseek F +GLIBC_2.40 fseeko F +GLIBC_2.40 fseeko64 F +GLIBC_2.40 fsetpos F +GLIBC_2.40 fsetpos64 F +GLIBC_2.40 fsetxattr F +GLIBC_2.40 fstat F +GLIBC_2.40 fstat64 F +GLIBC_2.40 fstatat F +GLIBC_2.40 fstatat64 F +GLIBC_2.40 fstatfs F +GLIBC_2.40 fstatfs64 F +GLIBC_2.40 fstatvfs F +GLIBC_2.40 fstatvfs64 F +GLIBC_2.40 fsync F +GLIBC_2.40 ftell F +GLIBC_2.40 ftello F +GLIBC_2.40 ftello64 F +GLIBC_2.40 ftime F +GLIBC_2.40 ftok F +GLIBC_2.40 ftruncate F +GLIBC_2.40 ftruncate64 F +GLIBC_2.40 ftrylockfile F +GLIBC_2.40 fts64_children F +GLIBC_2.40 fts64_close F +GLIBC_2.40 fts64_open F +GLIBC_2.40 fts64_read F +GLIBC_2.40 fts64_set F +GLIBC_2.40 fts_children F +GLIBC_2.40 fts_close F +GLIBC_2.40 fts_open F +GLIBC_2.40 fts_read F +GLIBC_2.40 fts_set F +GLIBC_2.40 ftw F +GLIBC_2.40 ftw64 F +GLIBC_2.40 funlockfile F +GLIBC_2.40 futimens F +GLIBC_2.40 futimes F +GLIBC_2.40 futimesat F +GLIBC_2.40 fwide F +GLIBC_2.40 fwprintf F +GLIBC_2.40 fwrite F +GLIBC_2.40 fwrite_unlocked F +GLIBC_2.40 fwscanf F +GLIBC_2.40 gai_strerror F +GLIBC_2.40 gcvt F +GLIBC_2.40 get_avphys_pages F +GLIBC_2.40 get_current_dir_name F +GLIBC_2.40 get_nprocs F +GLIBC_2.40 get_nprocs_conf F +GLIBC_2.40 get_phys_pages F +GLIBC_2.40 get_privileged_ports F +GLIBC_2.40 getaddrinfo F +GLIBC_2.40 getaliasbyname F +GLIBC_2.40 getaliasbyname_r F +GLIBC_2.40 getaliasent F +GLIBC_2.40 getaliasent_r F +GLIBC_2.40 getauth F +GLIBC_2.40 getauxval F +GLIBC_2.40 getc F +GLIBC_2.40 getc_unlocked F +GLIBC_2.40 getchar F +GLIBC_2.40 getchar_unlocked F +GLIBC_2.40 getcontext F +GLIBC_2.40 getcrdir F +GLIBC_2.40 getcttyid F +GLIBC_2.40 getcwd F +GLIBC_2.40 getcwdir F +GLIBC_2.40 getdate F +GLIBC_2.40 getdate_err D 0x4 +GLIBC_2.40 getdate_r F +GLIBC_2.40 getdelim F +GLIBC_2.40 getdirentries F +GLIBC_2.40 getdirentries64 F +GLIBC_2.40 getdomainname F +GLIBC_2.40 getdport F +GLIBC_2.40 getdtablesize F +GLIBC_2.40 getegid F +GLIBC_2.40 getentropy F +GLIBC_2.40 getenv F +GLIBC_2.40 geteuid F +GLIBC_2.40 geteuids F +GLIBC_2.40 getfsent F +GLIBC_2.40 getfsfile F +GLIBC_2.40 getfsspec F +GLIBC_2.40 getgid F +GLIBC_2.40 getgrent F +GLIBC_2.40 getgrent_r F +GLIBC_2.40 getgrgid F +GLIBC_2.40 getgrgid_r F +GLIBC_2.40 getgrnam F +GLIBC_2.40 getgrnam_r F +GLIBC_2.40 getgrouplist F +GLIBC_2.40 getgroups F +GLIBC_2.40 gethostbyaddr F +GLIBC_2.40 gethostbyaddr_r F +GLIBC_2.40 gethostbyname F +GLIBC_2.40 gethostbyname2 F +GLIBC_2.40 gethostbyname2_r F +GLIBC_2.40 gethostbyname_r F +GLIBC_2.40 gethostent F +GLIBC_2.40 gethostent_r F +GLIBC_2.40 gethostid F +GLIBC_2.40 gethostname F +GLIBC_2.40 getifaddrs F +GLIBC_2.40 getipv4sourcefilter F +GLIBC_2.40 getitimer F +GLIBC_2.40 getline F +GLIBC_2.40 getloadavg F +GLIBC_2.40 getlogin F +GLIBC_2.40 getlogin_r F +GLIBC_2.40 getmntent F +GLIBC_2.40 getmntent_r F +GLIBC_2.40 getnameinfo F +GLIBC_2.40 getnetbyaddr F +GLIBC_2.40 getnetbyaddr_r F +GLIBC_2.40 getnetbyname F +GLIBC_2.40 getnetbyname_r F +GLIBC_2.40 getnetent F +GLIBC_2.40 getnetent_r F +GLIBC_2.40 getnetgrent F +GLIBC_2.40 getnetgrent_r F +GLIBC_2.40 getopt F +GLIBC_2.40 getopt_long F +GLIBC_2.40 getopt_long_only F +GLIBC_2.40 getpagesize F +GLIBC_2.40 getpass F +GLIBC_2.40 getpeername F +GLIBC_2.40 getpgid F +GLIBC_2.40 getpgrp F +GLIBC_2.40 getpid F +GLIBC_2.40 getppid F +GLIBC_2.40 getpriority F +GLIBC_2.40 getproc F +GLIBC_2.40 getprotobyname F +GLIBC_2.40 getprotobyname_r F +GLIBC_2.40 getprotobynumber F +GLIBC_2.40 getprotobynumber_r F +GLIBC_2.40 getprotoent F +GLIBC_2.40 getprotoent_r F +GLIBC_2.40 getpt F +GLIBC_2.40 getpw F +GLIBC_2.40 getpwent F +GLIBC_2.40 getpwent_r F +GLIBC_2.40 getpwnam F +GLIBC_2.40 getpwnam_r F +GLIBC_2.40 getpwuid F +GLIBC_2.40 getpwuid_r F +GLIBC_2.40 getrandom F +GLIBC_2.40 getresgid F +GLIBC_2.40 getresuid F +GLIBC_2.40 getrlimit F +GLIBC_2.40 getrlimit64 F +GLIBC_2.40 getrpcbyname F +GLIBC_2.40 getrpcbyname_r F +GLIBC_2.40 getrpcbynumber F +GLIBC_2.40 getrpcbynumber_r F +GLIBC_2.40 getrpcent F +GLIBC_2.40 getrpcent_r F +GLIBC_2.40 getrusage F +GLIBC_2.40 gets F +GLIBC_2.40 getservbyname F +GLIBC_2.40 getservbyname_r F +GLIBC_2.40 getservbyport F +GLIBC_2.40 getservbyport_r F +GLIBC_2.40 getservent F +GLIBC_2.40 getservent_r F +GLIBC_2.40 getsgent F +GLIBC_2.40 getsgent_r F +GLIBC_2.40 getsgnam F +GLIBC_2.40 getsgnam_r F +GLIBC_2.40 getsid F +GLIBC_2.40 getsockname F +GLIBC_2.40 getsockopt F +GLIBC_2.40 getsourcefilter F +GLIBC_2.40 getspent F +GLIBC_2.40 getspent_r F +GLIBC_2.40 getspnam F +GLIBC_2.40 getspnam_r F +GLIBC_2.40 getsubopt F +GLIBC_2.40 gettext F +GLIBC_2.40 gettimeofday F +GLIBC_2.40 getttyent F +GLIBC_2.40 getttynam F +GLIBC_2.40 getuid F +GLIBC_2.40 getumask F +GLIBC_2.40 getusershell F +GLIBC_2.40 getutent F +GLIBC_2.40 getutent_r F +GLIBC_2.40 getutid F +GLIBC_2.40 getutid_r F +GLIBC_2.40 getutline F +GLIBC_2.40 getutline_r F +GLIBC_2.40 getutmp F +GLIBC_2.40 getutmpx F +GLIBC_2.40 getutxent F +GLIBC_2.40 getutxid F +GLIBC_2.40 getutxline F +GLIBC_2.40 getw F +GLIBC_2.40 getwc F +GLIBC_2.40 getwc_unlocked F +GLIBC_2.40 getwchar F +GLIBC_2.40 getwchar_unlocked F +GLIBC_2.40 getwd F +GLIBC_2.40 getxattr F +GLIBC_2.40 glob F +GLIBC_2.40 glob64 F +GLIBC_2.40 glob_pattern_p F +GLIBC_2.40 globfree F +GLIBC_2.40 globfree64 F +GLIBC_2.40 gmtime F +GLIBC_2.40 gmtime_r F +GLIBC_2.40 gnu_dev_major F +GLIBC_2.40 gnu_dev_makedev F +GLIBC_2.40 gnu_dev_minor F +GLIBC_2.40 gnu_get_libc_release F +GLIBC_2.40 gnu_get_libc_version F +GLIBC_2.40 grantpt F +GLIBC_2.40 group_member F +GLIBC_2.40 gsignal F +GLIBC_2.40 gtty F +GLIBC_2.40 h_errlist D 0x28 +GLIBC_2.40 h_nerr D 0x4 +GLIBC_2.40 hasmntopt F +GLIBC_2.40 hcreate F +GLIBC_2.40 hcreate_r F +GLIBC_2.40 hdestroy F +GLIBC_2.40 hdestroy_r F +GLIBC_2.40 herror F +GLIBC_2.40 hsearch F +GLIBC_2.40 hsearch_r F +GLIBC_2.40 hstrerror F +GLIBC_2.40 htonl F +GLIBC_2.40 htons F +GLIBC_2.40 hurd_catch_signal F +GLIBC_2.40 hurd_check_cancel F +GLIBC_2.40 hurd_directory_name_split F +GLIBC_2.40 hurd_file_name_lookup F +GLIBC_2.40 hurd_file_name_lookup_retry F +GLIBC_2.40 hurd_file_name_path_lookup F +GLIBC_2.40 hurd_file_name_split F +GLIBC_2.40 hurd_preempt_signals F +GLIBC_2.40 hurd_safe_copyin F +GLIBC_2.40 hurd_safe_copyout F +GLIBC_2.40 hurd_safe_memmove F +GLIBC_2.40 hurd_safe_memset F +GLIBC_2.40 hurd_sig_post F +GLIBC_2.40 hurd_thread_cancel F +GLIBC_2.40 hurd_thread_self F +GLIBC_2.40 hurd_unpreempt_signals F +GLIBC_2.40 iconv F +GLIBC_2.40 iconv_close F +GLIBC_2.40 iconv_open F +GLIBC_2.40 if_freenameindex F +GLIBC_2.40 if_indextoname F +GLIBC_2.40 if_nameindex F +GLIBC_2.40 if_nametoindex F +GLIBC_2.40 imaxabs F +GLIBC_2.40 imaxdiv F +GLIBC_2.40 in6addr_any D 0x10 +GLIBC_2.40 in6addr_loopback D 0x10 +GLIBC_2.40 index F +GLIBC_2.40 inet6_opt_append F +GLIBC_2.40 inet6_opt_find F +GLIBC_2.40 inet6_opt_finish F +GLIBC_2.40 inet6_opt_get_val F +GLIBC_2.40 inet6_opt_init F +GLIBC_2.40 inet6_opt_next F +GLIBC_2.40 inet6_opt_set_val F +GLIBC_2.40 inet6_option_alloc F +GLIBC_2.40 inet6_option_append F +GLIBC_2.40 inet6_option_find F +GLIBC_2.40 inet6_option_init F +GLIBC_2.40 inet6_option_next F +GLIBC_2.40 inet6_option_space F +GLIBC_2.40 inet6_rth_add F +GLIBC_2.40 inet6_rth_getaddr F +GLIBC_2.40 inet6_rth_init F +GLIBC_2.40 inet6_rth_reverse F +GLIBC_2.40 inet6_rth_segments F +GLIBC_2.40 inet6_rth_space F +GLIBC_2.40 inet_addr F +GLIBC_2.40 inet_aton F +GLIBC_2.40 inet_lnaof F +GLIBC_2.40 inet_makeaddr F +GLIBC_2.40 inet_netof F +GLIBC_2.40 inet_network F +GLIBC_2.40 inet_nsap_addr F +GLIBC_2.40 inet_nsap_ntoa F +GLIBC_2.40 inet_ntoa F +GLIBC_2.40 inet_ntop F +GLIBC_2.40 inet_pton F +GLIBC_2.40 initgroups F +GLIBC_2.40 initstate F +GLIBC_2.40 initstate_r F +GLIBC_2.40 innetgr F +GLIBC_2.40 insque F +GLIBC_2.40 ioctl F +GLIBC_2.40 iruserok F +GLIBC_2.40 iruserok_af F +GLIBC_2.40 isalnum F +GLIBC_2.40 isalnum_l F +GLIBC_2.40 isalpha F +GLIBC_2.40 isalpha_l F +GLIBC_2.40 isascii F +GLIBC_2.40 isatty F +GLIBC_2.40 isblank F +GLIBC_2.40 isblank_l F +GLIBC_2.40 iscntrl F +GLIBC_2.40 iscntrl_l F +GLIBC_2.40 isctype F +GLIBC_2.40 isdigit F +GLIBC_2.40 isdigit_l F +GLIBC_2.40 isfdtype F +GLIBC_2.40 isgraph F +GLIBC_2.40 isgraph_l F +GLIBC_2.40 isinf F +GLIBC_2.40 isinff F +GLIBC_2.40 isinfl F +GLIBC_2.40 islower F +GLIBC_2.40 islower_l F +GLIBC_2.40 isnan F +GLIBC_2.40 isnanf F +GLIBC_2.40 isnanl F +GLIBC_2.40 isprint F +GLIBC_2.40 isprint_l F +GLIBC_2.40 ispunct F +GLIBC_2.40 ispunct_l F +GLIBC_2.40 isspace F +GLIBC_2.40 isspace_l F +GLIBC_2.40 isupper F +GLIBC_2.40 isupper_l F +GLIBC_2.40 iswalnum F +GLIBC_2.40 iswalnum_l F +GLIBC_2.40 iswalpha F +GLIBC_2.40 iswalpha_l F +GLIBC_2.40 iswblank F +GLIBC_2.40 iswblank_l F +GLIBC_2.40 iswcntrl F +GLIBC_2.40 iswcntrl_l F +GLIBC_2.40 iswctype F +GLIBC_2.40 iswctype_l F +GLIBC_2.40 iswdigit F +GLIBC_2.40 iswdigit_l F +GLIBC_2.40 iswgraph F +GLIBC_2.40 iswgraph_l F +GLIBC_2.40 iswlower F +GLIBC_2.40 iswlower_l F +GLIBC_2.40 iswprint F +GLIBC_2.40 iswprint_l F +GLIBC_2.40 iswpunct F +GLIBC_2.40 iswpunct_l F +GLIBC_2.40 iswspace F +GLIBC_2.40 iswspace_l F +GLIBC_2.40 iswupper F +GLIBC_2.40 iswupper_l F +GLIBC_2.40 iswxdigit F +GLIBC_2.40 iswxdigit_l F +GLIBC_2.40 isxdigit F +GLIBC_2.40 isxdigit_l F +GLIBC_2.40 jrand48 F +GLIBC_2.40 jrand48_r F +GLIBC_2.40 kill F +GLIBC_2.40 killpg F +GLIBC_2.40 l64a F +GLIBC_2.40 labs F +GLIBC_2.40 lchmod F +GLIBC_2.40 lchown F +GLIBC_2.40 lckpwdf F +GLIBC_2.40 lcong48 F +GLIBC_2.40 lcong48_r F +GLIBC_2.40 ldexp F +GLIBC_2.40 ldexpf F +GLIBC_2.40 ldexpl F +GLIBC_2.40 ldiv F +GLIBC_2.40 lfind F +GLIBC_2.40 lgetxattr F +GLIBC_2.40 link F +GLIBC_2.40 linkat F +GLIBC_2.40 listen F +GLIBC_2.40 listxattr F +GLIBC_2.40 llabs F +GLIBC_2.40 lldiv F +GLIBC_2.40 llistxattr F +GLIBC_2.40 localeconv F +GLIBC_2.40 localtime F +GLIBC_2.40 localtime_r F +GLIBC_2.40 lockf F +GLIBC_2.40 lockf64 F +GLIBC_2.40 login F +GLIBC_2.40 login_tty F +GLIBC_2.40 logout F +GLIBC_2.40 logwtmp F +GLIBC_2.40 longjmp F +GLIBC_2.40 lrand48 F +GLIBC_2.40 lrand48_r F +GLIBC_2.40 lremovexattr F +GLIBC_2.40 lsearch F +GLIBC_2.40 lseek F +GLIBC_2.40 lseek64 F +GLIBC_2.40 lsetxattr F +GLIBC_2.40 lstat F +GLIBC_2.40 lstat64 F +GLIBC_2.40 lutimes F +GLIBC_2.40 mach_error F +GLIBC_2.40 mach_error_string F +GLIBC_2.40 mach_error_type F +GLIBC_2.40 mach_host_self F +GLIBC_2.40 mach_msg F +GLIBC_2.40 mach_msg_destroy F +GLIBC_2.40 mach_msg_receive F +GLIBC_2.40 mach_msg_send F +GLIBC_2.40 mach_msg_server F +GLIBC_2.40 mach_msg_server_timeout F +GLIBC_2.40 mach_open_devstream F +GLIBC_2.40 mach_port_allocate F +GLIBC_2.40 mach_port_allocate_name F +GLIBC_2.40 mach_port_deallocate F +GLIBC_2.40 mach_port_insert_right F +GLIBC_2.40 mach_print F +GLIBC_2.40 mach_reply_port F +GLIBC_2.40 mach_setup_thread F +GLIBC_2.40 mach_setup_tls F +GLIBC_2.40 mach_task_self F +GLIBC_2.40 mach_thread_self F +GLIBC_2.40 madvise F +GLIBC_2.40 makecontext F +GLIBC_2.40 mallinfo F +GLIBC_2.40 mallinfo2 F +GLIBC_2.40 malloc F +GLIBC_2.40 malloc_info F +GLIBC_2.40 malloc_stats F +GLIBC_2.40 malloc_trim F +GLIBC_2.40 malloc_usable_size F +GLIBC_2.40 mallopt F +GLIBC_2.40 mblen F +GLIBC_2.40 mbrlen F +GLIBC_2.40 mbrtoc16 F +GLIBC_2.40 mbrtoc32 F +GLIBC_2.40 mbrtoc8 F +GLIBC_2.40 mbrtowc F +GLIBC_2.40 mbsinit F +GLIBC_2.40 mbsnrtowcs F +GLIBC_2.40 mbsrtowcs F +GLIBC_2.40 mbstowcs F +GLIBC_2.40 mbtowc F +GLIBC_2.40 mcheck F +GLIBC_2.40 mcheck_check_all F +GLIBC_2.40 mcheck_pedantic F +GLIBC_2.40 memalign F +GLIBC_2.40 memccpy F +GLIBC_2.40 memchr F +GLIBC_2.40 memcmp F +GLIBC_2.40 memcpy F +GLIBC_2.40 memfrob F +GLIBC_2.40 memmem F +GLIBC_2.40 memmove F +GLIBC_2.40 mempcpy F +GLIBC_2.40 memrchr F +GLIBC_2.40 memset F +GLIBC_2.40 mig_allocate F +GLIBC_2.40 mig_dealloc_reply_port F +GLIBC_2.40 mig_deallocate F +GLIBC_2.40 mig_get_reply_port F +GLIBC_2.40 mig_init F +GLIBC_2.40 mig_put_reply_port F +GLIBC_2.40 mig_strncpy F +GLIBC_2.40 mincore F +GLIBC_2.40 mkdir F +GLIBC_2.40 mkdirat F +GLIBC_2.40 mkdtemp F +GLIBC_2.40 mkfifo F +GLIBC_2.40 mkfifoat F +GLIBC_2.40 mknod F +GLIBC_2.40 mknodat F +GLIBC_2.40 mkostemp F +GLIBC_2.40 mkostemp64 F +GLIBC_2.40 mkostemps F +GLIBC_2.40 mkostemps64 F +GLIBC_2.40 mkstemp F +GLIBC_2.40 mkstemp64 F +GLIBC_2.40 mkstemps F +GLIBC_2.40 mkstemps64 F +GLIBC_2.40 mktemp F +GLIBC_2.40 mktime F +GLIBC_2.40 mlock F +GLIBC_2.40 mlockall F +GLIBC_2.40 mmap F +GLIBC_2.40 mmap64 F +GLIBC_2.40 modf F +GLIBC_2.40 modff F +GLIBC_2.40 modfl F +GLIBC_2.40 moncontrol F +GLIBC_2.40 monstartup F +GLIBC_2.40 mprobe F +GLIBC_2.40 mprotect F +GLIBC_2.40 mrand48 F +GLIBC_2.40 mrand48_r F +GLIBC_2.40 mremap F +GLIBC_2.40 msgctl F +GLIBC_2.40 msgget F +GLIBC_2.40 msgrcv F +GLIBC_2.40 msgsnd F +GLIBC_2.40 msync F +GLIBC_2.40 mtrace F +GLIBC_2.40 munlock F +GLIBC_2.40 munlockall F +GLIBC_2.40 munmap F +GLIBC_2.40 muntrace F +GLIBC_2.40 nanosleep F +GLIBC_2.40 newlocale F +GLIBC_2.40 nftw F +GLIBC_2.40 nftw64 F +GLIBC_2.40 ngettext F +GLIBC_2.40 nice F +GLIBC_2.40 nl_langinfo F +GLIBC_2.40 nl_langinfo_l F +GLIBC_2.40 nrand48 F +GLIBC_2.40 nrand48_r F +GLIBC_2.40 ns_name_compress F +GLIBC_2.40 ns_name_ntop F +GLIBC_2.40 ns_name_pack F +GLIBC_2.40 ns_name_pton F +GLIBC_2.40 ns_name_skip F +GLIBC_2.40 ns_name_uncompress F +GLIBC_2.40 ns_name_unpack F +GLIBC_2.40 ntohl F +GLIBC_2.40 ntohs F +GLIBC_2.40 obstack_alloc_failed_handler D 0x8 +GLIBC_2.40 obstack_exit_failure D 0x4 +GLIBC_2.40 obstack_free F +GLIBC_2.40 obstack_printf F +GLIBC_2.40 obstack_vprintf F +GLIBC_2.40 on_exit F +GLIBC_2.40 open F +GLIBC_2.40 open64 F +GLIBC_2.40 open_memstream F +GLIBC_2.40 open_wmemstream F +GLIBC_2.40 openat F +GLIBC_2.40 openat64 F +GLIBC_2.40 opendir F +GLIBC_2.40 openlog F +GLIBC_2.40 openport F +GLIBC_2.40 openpty F +GLIBC_2.40 optarg D 0x8 +GLIBC_2.40 opterr D 0x4 +GLIBC_2.40 optind D 0x4 +GLIBC_2.40 optopt D 0x4 +GLIBC_2.40 parse_printf_format F +GLIBC_2.40 pathconf F +GLIBC_2.40 pause F +GLIBC_2.40 pclose F +GLIBC_2.40 perror F +GLIBC_2.40 pid2task F +GLIBC_2.40 pipe F +GLIBC_2.40 pipe2 F +GLIBC_2.40 poll F +GLIBC_2.40 popen F +GLIBC_2.40 posix_fadvise F +GLIBC_2.40 posix_fadvise64 F +GLIBC_2.40 posix_fallocate F +GLIBC_2.40 posix_fallocate64 F +GLIBC_2.40 posix_madvise F +GLIBC_2.40 posix_memalign F +GLIBC_2.40 posix_openpt F +GLIBC_2.40 posix_spawn F +GLIBC_2.40 posix_spawn_file_actions_addchdir_np F +GLIBC_2.40 posix_spawn_file_actions_addclose F +GLIBC_2.40 posix_spawn_file_actions_addclosefrom_np F +GLIBC_2.40 posix_spawn_file_actions_adddup2 F +GLIBC_2.40 posix_spawn_file_actions_addfchdir_np F +GLIBC_2.40 posix_spawn_file_actions_addopen F +GLIBC_2.40 posix_spawn_file_actions_addtcsetpgrp_np F +GLIBC_2.40 posix_spawn_file_actions_destroy F +GLIBC_2.40 posix_spawn_file_actions_init F +GLIBC_2.40 posix_spawnattr_destroy F +GLIBC_2.40 posix_spawnattr_getflags F +GLIBC_2.40 posix_spawnattr_getpgroup F +GLIBC_2.40 posix_spawnattr_getschedparam F +GLIBC_2.40 posix_spawnattr_getschedpolicy F +GLIBC_2.40 posix_spawnattr_getsigdefault F +GLIBC_2.40 posix_spawnattr_getsigmask F +GLIBC_2.40 posix_spawnattr_init F +GLIBC_2.40 posix_spawnattr_setflags F +GLIBC_2.40 posix_spawnattr_setpgroup F +GLIBC_2.40 posix_spawnattr_setschedparam F +GLIBC_2.40 posix_spawnattr_setschedpolicy F +GLIBC_2.40 posix_spawnattr_setsigdefault F +GLIBC_2.40 posix_spawnattr_setsigmask F +GLIBC_2.40 posix_spawnp F +GLIBC_2.40 ppoll F +GLIBC_2.40 pread F +GLIBC_2.40 pread64 F +GLIBC_2.40 preadv F +GLIBC_2.40 preadv2 F +GLIBC_2.40 preadv64 F +GLIBC_2.40 preadv64v2 F +GLIBC_2.40 printf F +GLIBC_2.40 printf_size F +GLIBC_2.40 printf_size_info F +GLIBC_2.40 profil F +GLIBC_2.40 program_invocation_name D 0x8 +GLIBC_2.40 program_invocation_short_name D 0x8 +GLIBC_2.40 pselect F +GLIBC_2.40 psiginfo F +GLIBC_2.40 psignal F +GLIBC_2.40 pthread_attr_destroy F +GLIBC_2.40 pthread_attr_getdetachstate F +GLIBC_2.40 pthread_attr_getinheritsched F +GLIBC_2.40 pthread_attr_getschedparam F +GLIBC_2.40 pthread_attr_getschedpolicy F +GLIBC_2.40 pthread_attr_getscope F +GLIBC_2.40 pthread_attr_init F +GLIBC_2.40 pthread_attr_setdetachstate F +GLIBC_2.40 pthread_attr_setinheritsched F +GLIBC_2.40 pthread_attr_setschedparam F +GLIBC_2.40 pthread_attr_setschedpolicy F +GLIBC_2.40 pthread_attr_setscope F +GLIBC_2.40 pthread_cond_broadcast F +GLIBC_2.40 pthread_cond_destroy F +GLIBC_2.40 pthread_cond_init F +GLIBC_2.40 pthread_cond_signal F +GLIBC_2.40 pthread_cond_timedwait F +GLIBC_2.40 pthread_cond_wait F +GLIBC_2.40 pthread_condattr_destroy F +GLIBC_2.40 pthread_condattr_init F +GLIBC_2.40 pthread_equal F +GLIBC_2.40 pthread_exit F +GLIBC_2.40 pthread_getschedparam F +GLIBC_2.40 pthread_mutex_destroy F +GLIBC_2.40 pthread_mutex_init F +GLIBC_2.40 pthread_mutex_lock F +GLIBC_2.40 pthread_mutex_unlock F +GLIBC_2.40 pthread_self F +GLIBC_2.40 pthread_setcancelstate F +GLIBC_2.40 pthread_setcanceltype F +GLIBC_2.40 pthread_setschedparam F +GLIBC_2.40 ptrace F +GLIBC_2.40 ptsname F +GLIBC_2.40 ptsname_r F +GLIBC_2.40 putc F +GLIBC_2.40 putc_unlocked F +GLIBC_2.40 putchar F +GLIBC_2.40 putchar_unlocked F +GLIBC_2.40 putenv F +GLIBC_2.40 putgrent F +GLIBC_2.40 putpwent F +GLIBC_2.40 puts F +GLIBC_2.40 putsgent F +GLIBC_2.40 putspent F +GLIBC_2.40 pututline F +GLIBC_2.40 pututxline F +GLIBC_2.40 putw F +GLIBC_2.40 putwc F +GLIBC_2.40 putwc_unlocked F +GLIBC_2.40 putwchar F +GLIBC_2.40 putwchar_unlocked F +GLIBC_2.40 pvalloc F +GLIBC_2.40 pwrite F +GLIBC_2.40 pwrite64 F +GLIBC_2.40 pwritev F +GLIBC_2.40 pwritev2 F +GLIBC_2.40 pwritev64 F +GLIBC_2.40 pwritev64v2 F +GLIBC_2.40 qecvt F +GLIBC_2.40 qecvt_r F +GLIBC_2.40 qfcvt F +GLIBC_2.40 qfcvt_r F +GLIBC_2.40 qgcvt F +GLIBC_2.40 qsort F +GLIBC_2.40 qsort_r F +GLIBC_2.40 quick_exit F +GLIBC_2.40 raise F +GLIBC_2.40 rand F +GLIBC_2.40 rand_r F +GLIBC_2.40 random F +GLIBC_2.40 random_r F +GLIBC_2.40 rawmemchr F +GLIBC_2.40 rcmd F +GLIBC_2.40 rcmd_af F +GLIBC_2.40 re_comp F +GLIBC_2.40 re_compile_fastmap F +GLIBC_2.40 re_compile_pattern F +GLIBC_2.40 re_exec F +GLIBC_2.40 re_match F +GLIBC_2.40 re_match_2 F +GLIBC_2.40 re_search F +GLIBC_2.40 re_search_2 F +GLIBC_2.40 re_set_registers F +GLIBC_2.40 re_set_syntax F +GLIBC_2.40 re_syntax_options D 0x8 +GLIBC_2.40 read F +GLIBC_2.40 readdir F +GLIBC_2.40 readdir64 F +GLIBC_2.40 readdir64_r F +GLIBC_2.40 readdir_r F +GLIBC_2.40 readlink F +GLIBC_2.40 readlinkat F +GLIBC_2.40 readv F +GLIBC_2.40 realloc F +GLIBC_2.40 reallocarray F +GLIBC_2.40 realpath F +GLIBC_2.40 reboot F +GLIBC_2.40 recv F +GLIBC_2.40 recvfrom F +GLIBC_2.40 recvmmsg F +GLIBC_2.40 recvmsg F +GLIBC_2.40 regcomp F +GLIBC_2.40 regerror F +GLIBC_2.40 regexec F +GLIBC_2.40 regfree F +GLIBC_2.40 register_printf_function F +GLIBC_2.40 register_printf_modifier F +GLIBC_2.40 register_printf_specifier F +GLIBC_2.40 register_printf_type F +GLIBC_2.40 remap_file_pages F +GLIBC_2.40 remove F +GLIBC_2.40 removexattr F +GLIBC_2.40 remque F +GLIBC_2.40 rename F +GLIBC_2.40 renameat F +GLIBC_2.40 renameat2 F +GLIBC_2.40 res_dnok F +GLIBC_2.40 res_hnok F +GLIBC_2.40 res_mailok F +GLIBC_2.40 res_mkquery F +GLIBC_2.40 res_nmkquery F +GLIBC_2.40 res_nquery F +GLIBC_2.40 res_nquerydomain F +GLIBC_2.40 res_nsearch F +GLIBC_2.40 res_nsend F +GLIBC_2.40 res_ownok F +GLIBC_2.40 res_query F +GLIBC_2.40 res_querydomain F +GLIBC_2.40 res_search F +GLIBC_2.40 res_send F +GLIBC_2.40 revoke F +GLIBC_2.40 rewind F +GLIBC_2.40 rewinddir F +GLIBC_2.40 rexec F +GLIBC_2.40 rexec_af F +GLIBC_2.40 rexecoptions D 0x4 +GLIBC_2.40 rindex F +GLIBC_2.40 rmdir F +GLIBC_2.40 rpmatch F +GLIBC_2.40 rresvport F +GLIBC_2.40 rresvport_af F +GLIBC_2.40 ruserok F +GLIBC_2.40 ruserok_af F +GLIBC_2.40 ruserpass F +GLIBC_2.40 sbrk F +GLIBC_2.40 scalbn F +GLIBC_2.40 scalbnf F +GLIBC_2.40 scalbnl F +GLIBC_2.40 scandir F +GLIBC_2.40 scandir64 F +GLIBC_2.40 scandirat F +GLIBC_2.40 scandirat64 F +GLIBC_2.40 scanf F +GLIBC_2.40 sched_get_priority_max F +GLIBC_2.40 sched_get_priority_min F +GLIBC_2.40 sched_getaffinity F +GLIBC_2.40 sched_getparam F +GLIBC_2.40 sched_getscheduler F +GLIBC_2.40 sched_rr_get_interval F +GLIBC_2.40 sched_setaffinity F +GLIBC_2.40 sched_setparam F +GLIBC_2.40 sched_setscheduler F +GLIBC_2.40 sched_yield F +GLIBC_2.40 secure_getenv F +GLIBC_2.40 seed48 F +GLIBC_2.40 seed48_r F +GLIBC_2.40 seekdir F +GLIBC_2.40 select F +GLIBC_2.40 semctl F +GLIBC_2.40 semget F +GLIBC_2.40 semop F +GLIBC_2.40 semtimedop F +GLIBC_2.40 send F +GLIBC_2.40 sendfile F +GLIBC_2.40 sendfile64 F +GLIBC_2.40 sendmmsg F +GLIBC_2.40 sendmsg F +GLIBC_2.40 sendto F +GLIBC_2.40 setaliasent F +GLIBC_2.40 setauth F +GLIBC_2.40 setbuf F +GLIBC_2.40 setbuffer F +GLIBC_2.40 setcontext F +GLIBC_2.40 setcrdir F +GLIBC_2.40 setcttyid F +GLIBC_2.40 setcwdir F +GLIBC_2.40 setdomainname F +GLIBC_2.40 setegid F +GLIBC_2.40 setenv F +GLIBC_2.40 seteuid F +GLIBC_2.40 seteuids F +GLIBC_2.40 setfsent F +GLIBC_2.40 setgid F +GLIBC_2.40 setgrent F +GLIBC_2.40 setgroups F +GLIBC_2.40 sethostent F +GLIBC_2.40 sethostid F +GLIBC_2.40 sethostname F +GLIBC_2.40 setipv4sourcefilter F +GLIBC_2.40 setitimer F +GLIBC_2.40 setjmp F +GLIBC_2.40 setlinebuf F +GLIBC_2.40 setlocale F +GLIBC_2.40 setlogin F +GLIBC_2.40 setlogmask F +GLIBC_2.40 setmntent F +GLIBC_2.40 setnetent F +GLIBC_2.40 setnetgrent F +GLIBC_2.40 setpgid F +GLIBC_2.40 setpgrp F +GLIBC_2.40 setpriority F +GLIBC_2.40 setproc F +GLIBC_2.40 setprotoent F +GLIBC_2.40 setpwent F +GLIBC_2.40 setregid F +GLIBC_2.40 setresgid F +GLIBC_2.40 setresuid F +GLIBC_2.40 setreuid F +GLIBC_2.40 setrlimit F +GLIBC_2.40 setrlimit64 F +GLIBC_2.40 setrpcent F +GLIBC_2.40 setservent F +GLIBC_2.40 setsgent F +GLIBC_2.40 setsid F +GLIBC_2.40 setsockopt F +GLIBC_2.40 setsourcefilter F +GLIBC_2.40 setspent F +GLIBC_2.40 setstate F +GLIBC_2.40 setstate_r F +GLIBC_2.40 settimeofday F +GLIBC_2.40 setttyent F +GLIBC_2.40 setuid F +GLIBC_2.40 setusershell F +GLIBC_2.40 setutent F +GLIBC_2.40 setutxent F +GLIBC_2.40 setvbuf F +GLIBC_2.40 setxattr F +GLIBC_2.40 sgetsgent F +GLIBC_2.40 sgetsgent_r F +GLIBC_2.40 sgetspent F +GLIBC_2.40 sgetspent_r F +GLIBC_2.40 shm_open F +GLIBC_2.40 shm_unlink F +GLIBC_2.40 shmat F +GLIBC_2.40 shmctl F +GLIBC_2.40 shmdt F +GLIBC_2.40 shmget F +GLIBC_2.40 shutdown F +GLIBC_2.40 sigabbrev_np F +GLIBC_2.40 sigaction F +GLIBC_2.40 sigaddset F +GLIBC_2.40 sigaltstack F +GLIBC_2.40 sigandset F +GLIBC_2.40 sigblock F +GLIBC_2.40 sigdelset F +GLIBC_2.40 sigdescr_np F +GLIBC_2.40 sigemptyset F +GLIBC_2.40 sigfillset F +GLIBC_2.40 siggetmask F +GLIBC_2.40 sighold F +GLIBC_2.40 sigignore F +GLIBC_2.40 siginterrupt F +GLIBC_2.40 sigisemptyset F +GLIBC_2.40 sigismember F +GLIBC_2.40 siglongjmp F +GLIBC_2.40 signal F +GLIBC_2.40 sigorset F +GLIBC_2.40 sigpause F +GLIBC_2.40 sigpending F +GLIBC_2.40 sigprocmask F +GLIBC_2.40 sigqueue F +GLIBC_2.40 sigrelse F +GLIBC_2.40 sigreturn F +GLIBC_2.40 sigset F +GLIBC_2.40 sigsetmask F +GLIBC_2.40 sigstack F +GLIBC_2.40 sigsuspend F +GLIBC_2.40 sigtimedwait F +GLIBC_2.40 sigwait F +GLIBC_2.40 sigwaitinfo F +GLIBC_2.40 sleep F +GLIBC_2.40 snprintf F +GLIBC_2.40 sockatmark F +GLIBC_2.40 socket F +GLIBC_2.40 socketpair F +GLIBC_2.40 sprintf F +GLIBC_2.40 sprofil F +GLIBC_2.40 srand F +GLIBC_2.40 srand48 F +GLIBC_2.40 srand48_r F +GLIBC_2.40 srandom F +GLIBC_2.40 srandom_r F +GLIBC_2.40 sscanf F +GLIBC_2.40 ssignal F +GLIBC_2.40 stat F +GLIBC_2.40 stat64 F +GLIBC_2.40 statfs F +GLIBC_2.40 statfs64 F +GLIBC_2.40 statvfs F +GLIBC_2.40 statvfs64 F +GLIBC_2.40 statx F +GLIBC_2.40 stdc_bit_ceil_uc F +GLIBC_2.40 stdc_bit_ceil_ui F +GLIBC_2.40 stdc_bit_ceil_ul F +GLIBC_2.40 stdc_bit_ceil_ull F +GLIBC_2.40 stdc_bit_ceil_us F +GLIBC_2.40 stdc_bit_floor_uc F +GLIBC_2.40 stdc_bit_floor_ui F +GLIBC_2.40 stdc_bit_floor_ul F +GLIBC_2.40 stdc_bit_floor_ull F +GLIBC_2.40 stdc_bit_floor_us F +GLIBC_2.40 stdc_bit_width_uc F +GLIBC_2.40 stdc_bit_width_ui F +GLIBC_2.40 stdc_bit_width_ul F +GLIBC_2.40 stdc_bit_width_ull F +GLIBC_2.40 stdc_bit_width_us F +GLIBC_2.40 stdc_count_ones_uc F +GLIBC_2.40 stdc_count_ones_ui F +GLIBC_2.40 stdc_count_ones_ul F +GLIBC_2.40 stdc_count_ones_ull F +GLIBC_2.40 stdc_count_ones_us F +GLIBC_2.40 stdc_count_zeros_uc F +GLIBC_2.40 stdc_count_zeros_ui F +GLIBC_2.40 stdc_count_zeros_ul F +GLIBC_2.40 stdc_count_zeros_ull F +GLIBC_2.40 stdc_count_zeros_us F +GLIBC_2.40 stdc_first_leading_one_uc F +GLIBC_2.40 stdc_first_leading_one_ui F +GLIBC_2.40 stdc_first_leading_one_ul F +GLIBC_2.40 stdc_first_leading_one_ull F +GLIBC_2.40 stdc_first_leading_one_us F +GLIBC_2.40 stdc_first_leading_zero_uc F +GLIBC_2.40 stdc_first_leading_zero_ui F +GLIBC_2.40 stdc_first_leading_zero_ul F +GLIBC_2.40 stdc_first_leading_zero_ull F +GLIBC_2.40 stdc_first_leading_zero_us F +GLIBC_2.40 stdc_first_trailing_one_uc F +GLIBC_2.40 stdc_first_trailing_one_ui F +GLIBC_2.40 stdc_first_trailing_one_ul F +GLIBC_2.40 stdc_first_trailing_one_ull F +GLIBC_2.40 stdc_first_trailing_one_us F +GLIBC_2.40 stdc_first_trailing_zero_uc F +GLIBC_2.40 stdc_first_trailing_zero_ui F +GLIBC_2.40 stdc_first_trailing_zero_ul F +GLIBC_2.40 stdc_first_trailing_zero_ull F +GLIBC_2.40 stdc_first_trailing_zero_us F +GLIBC_2.40 stdc_has_single_bit_uc F +GLIBC_2.40 stdc_has_single_bit_ui F +GLIBC_2.40 stdc_has_single_bit_ul F +GLIBC_2.40 stdc_has_single_bit_ull F +GLIBC_2.40 stdc_has_single_bit_us F +GLIBC_2.40 stdc_leading_ones_uc F +GLIBC_2.40 stdc_leading_ones_ui F +GLIBC_2.40 stdc_leading_ones_ul F +GLIBC_2.40 stdc_leading_ones_ull F +GLIBC_2.40 stdc_leading_ones_us F +GLIBC_2.40 stdc_leading_zeros_uc F +GLIBC_2.40 stdc_leading_zeros_ui F +GLIBC_2.40 stdc_leading_zeros_ul F +GLIBC_2.40 stdc_leading_zeros_ull F +GLIBC_2.40 stdc_leading_zeros_us F +GLIBC_2.40 stdc_trailing_ones_uc F +GLIBC_2.40 stdc_trailing_ones_ui F +GLIBC_2.40 stdc_trailing_ones_ul F +GLIBC_2.40 stdc_trailing_ones_ull F +GLIBC_2.40 stdc_trailing_ones_us F +GLIBC_2.40 stdc_trailing_zeros_uc F +GLIBC_2.40 stdc_trailing_zeros_ui F +GLIBC_2.40 stdc_trailing_zeros_ul F +GLIBC_2.40 stdc_trailing_zeros_ull F +GLIBC_2.40 stdc_trailing_zeros_us F +GLIBC_2.40 stderr D 0x8 +GLIBC_2.40 stdin D 0x8 +GLIBC_2.40 stdout D 0x8 +GLIBC_2.40 stpcpy F +GLIBC_2.40 stpncpy F +GLIBC_2.40 strcasecmp F +GLIBC_2.40 strcasecmp_l F +GLIBC_2.40 strcasestr F +GLIBC_2.40 strcat F +GLIBC_2.40 strchr F +GLIBC_2.40 strchrnul F +GLIBC_2.40 strcmp F +GLIBC_2.40 strcoll F +GLIBC_2.40 strcoll_l F +GLIBC_2.40 strcpy F +GLIBC_2.40 strcspn F +GLIBC_2.40 strdup F +GLIBC_2.40 strerror F +GLIBC_2.40 strerror_l F +GLIBC_2.40 strerror_r F +GLIBC_2.40 strerrordesc_np F +GLIBC_2.40 strerrorname_np F +GLIBC_2.40 strfmon F +GLIBC_2.40 strfmon_l F +GLIBC_2.40 strfromd F +GLIBC_2.40 strfromf F +GLIBC_2.40 strfromf128 F +GLIBC_2.40 strfromf32 F +GLIBC_2.40 strfromf32x F +GLIBC_2.40 strfromf64 F +GLIBC_2.40 strfromf64x F +GLIBC_2.40 strfroml F +GLIBC_2.40 strfry F +GLIBC_2.40 strftime F +GLIBC_2.40 strftime_l F +GLIBC_2.40 strlcat F +GLIBC_2.40 strlcpy F +GLIBC_2.40 strlen F +GLIBC_2.40 strncasecmp F +GLIBC_2.40 strncasecmp_l F +GLIBC_2.40 strncat F +GLIBC_2.40 strncmp F +GLIBC_2.40 strncpy F +GLIBC_2.40 strndup F +GLIBC_2.40 strnlen F +GLIBC_2.40 strpbrk F +GLIBC_2.40 strptime F +GLIBC_2.40 strptime_l F +GLIBC_2.40 strrchr F +GLIBC_2.40 strsep F +GLIBC_2.40 strsignal F +GLIBC_2.40 strspn F +GLIBC_2.40 strstr F +GLIBC_2.40 strtod F +GLIBC_2.40 strtod_l F +GLIBC_2.40 strtof F +GLIBC_2.40 strtof128 F +GLIBC_2.40 strtof128_l F +GLIBC_2.40 strtof32 F +GLIBC_2.40 strtof32_l F +GLIBC_2.40 strtof32x F +GLIBC_2.40 strtof32x_l F +GLIBC_2.40 strtof64 F +GLIBC_2.40 strtof64_l F +GLIBC_2.40 strtof64x F +GLIBC_2.40 strtof64x_l F +GLIBC_2.40 strtof_l F +GLIBC_2.40 strtoimax F +GLIBC_2.40 strtok F +GLIBC_2.40 strtok_r F +GLIBC_2.40 strtol F +GLIBC_2.40 strtol_l F +GLIBC_2.40 strtold F +GLIBC_2.40 strtold_l F +GLIBC_2.40 strtoll F +GLIBC_2.40 strtoll_l F +GLIBC_2.40 strtoq F +GLIBC_2.40 strtoul F +GLIBC_2.40 strtoul_l F +GLIBC_2.40 strtoull F +GLIBC_2.40 strtoull_l F +GLIBC_2.40 strtoumax F +GLIBC_2.40 strtouq F +GLIBC_2.40 strverscmp F +GLIBC_2.40 strxfrm F +GLIBC_2.40 strxfrm_l F +GLIBC_2.40 stty F +GLIBC_2.40 swab F +GLIBC_2.40 swapcontext F +GLIBC_2.40 swprintf F +GLIBC_2.40 swscanf F +GLIBC_2.40 swtch F +GLIBC_2.40 swtch_pri F +GLIBC_2.40 symlink F +GLIBC_2.40 symlinkat F +GLIBC_2.40 sync F +GLIBC_2.40 syncfs F +GLIBC_2.40 syscall F +GLIBC_2.40 sysconf F +GLIBC_2.40 syslog F +GLIBC_2.40 system F +GLIBC_2.40 sysv_signal F +GLIBC_2.40 task2pid F +GLIBC_2.40 task_create F +GLIBC_2.40 task_set_special_port F +GLIBC_2.40 task_suspend F +GLIBC_2.40 task_terminate F +GLIBC_2.40 tcdrain F +GLIBC_2.40 tcflow F +GLIBC_2.40 tcflush F +GLIBC_2.40 tcgetattr F +GLIBC_2.40 tcgetpgrp F +GLIBC_2.40 tcgetsid F +GLIBC_2.40 tcsendbreak F +GLIBC_2.40 tcsetattr F +GLIBC_2.40 tcsetpgrp F +GLIBC_2.40 tdelete F +GLIBC_2.40 tdestroy F +GLIBC_2.40 telldir F +GLIBC_2.40 tempnam F +GLIBC_2.40 textdomain F +GLIBC_2.40 tfind F +GLIBC_2.40 thrd_current F +GLIBC_2.40 thrd_equal F +GLIBC_2.40 thrd_sleep F +GLIBC_2.40 thrd_yield F +GLIBC_2.40 thread_depress_abort F +GLIBC_2.40 thread_switch F +GLIBC_2.40 time F +GLIBC_2.40 timegm F +GLIBC_2.40 timelocal F +GLIBC_2.40 times F +GLIBC_2.40 timespec_get F +GLIBC_2.40 timespec_getres F +GLIBC_2.40 timezone D 0x8 +GLIBC_2.40 tmpfile F +GLIBC_2.40 tmpfile64 F +GLIBC_2.40 tmpnam F +GLIBC_2.40 tmpnam_r F +GLIBC_2.40 toascii F +GLIBC_2.40 tolower F +GLIBC_2.40 tolower_l F +GLIBC_2.40 toupper F +GLIBC_2.40 toupper_l F +GLIBC_2.40 towctrans F +GLIBC_2.40 towctrans_l F +GLIBC_2.40 towlower F +GLIBC_2.40 towlower_l F +GLIBC_2.40 towupper F +GLIBC_2.40 towupper_l F +GLIBC_2.40 truncate F +GLIBC_2.40 truncate64 F +GLIBC_2.40 tsearch F +GLIBC_2.40 ttyname F +GLIBC_2.40 ttyname_r F +GLIBC_2.40 ttyslot F +GLIBC_2.40 twalk F +GLIBC_2.40 twalk_r F +GLIBC_2.40 tzname D 0x10 +GLIBC_2.40 tzset F +GLIBC_2.40 ualarm F +GLIBC_2.40 ulckpwdf F +GLIBC_2.40 ulimit F +GLIBC_2.40 umask F +GLIBC_2.40 uname F +GLIBC_2.40 ungetc F +GLIBC_2.40 ungetwc F +GLIBC_2.40 unlink F +GLIBC_2.40 unlinkat F +GLIBC_2.40 unlockpt F +GLIBC_2.40 unsetenv F +GLIBC_2.40 updwtmp F +GLIBC_2.40 updwtmpx F +GLIBC_2.40 uselocale F +GLIBC_2.40 usleep F +GLIBC_2.40 utime F +GLIBC_2.40 utimensat F +GLIBC_2.40 utimes F +GLIBC_2.40 utmpname F +GLIBC_2.40 utmpxname F +GLIBC_2.40 valloc F +GLIBC_2.40 vasprintf F +GLIBC_2.40 vdprintf F +GLIBC_2.40 verr F +GLIBC_2.40 verrx F +GLIBC_2.40 versionsort F +GLIBC_2.40 versionsort64 F +GLIBC_2.40 vfork F +GLIBC_2.40 vfprintf F +GLIBC_2.40 vfscanf F +GLIBC_2.40 vfwprintf F +GLIBC_2.40 vfwscanf F +GLIBC_2.40 vhangup F +GLIBC_2.40 vlimit F +GLIBC_2.40 vm_allocate F +GLIBC_2.40 vm_deallocate F +GLIBC_2.40 vm_map F +GLIBC_2.40 vm_page_size D 0x8 +GLIBC_2.40 vpprintf F +GLIBC_2.40 vprintf F +GLIBC_2.40 vscanf F +GLIBC_2.40 vsnprintf F +GLIBC_2.40 vsprintf F +GLIBC_2.40 vsscanf F +GLIBC_2.40 vswprintf F +GLIBC_2.40 vswscanf F +GLIBC_2.40 vsyslog F +GLIBC_2.40 vwarn F +GLIBC_2.40 vwarnx F +GLIBC_2.40 vwprintf F +GLIBC_2.40 vwscanf F +GLIBC_2.40 wait F +GLIBC_2.40 wait3 F +GLIBC_2.40 wait4 F +GLIBC_2.40 waitid F +GLIBC_2.40 waitpid F +GLIBC_2.40 warn F +GLIBC_2.40 warnx F +GLIBC_2.40 wcpcpy F +GLIBC_2.40 wcpncpy F +GLIBC_2.40 wcrtomb F +GLIBC_2.40 wcscasecmp F +GLIBC_2.40 wcscasecmp_l F +GLIBC_2.40 wcscat F +GLIBC_2.40 wcschr F +GLIBC_2.40 wcschrnul F +GLIBC_2.40 wcscmp F +GLIBC_2.40 wcscoll F +GLIBC_2.40 wcscoll_l F +GLIBC_2.40 wcscpy F +GLIBC_2.40 wcscspn F +GLIBC_2.40 wcsdup F +GLIBC_2.40 wcsftime F +GLIBC_2.40 wcsftime_l F +GLIBC_2.40 wcslcat F +GLIBC_2.40 wcslcpy F +GLIBC_2.40 wcslen F +GLIBC_2.40 wcsncasecmp F +GLIBC_2.40 wcsncasecmp_l F +GLIBC_2.40 wcsncat F +GLIBC_2.40 wcsncmp F +GLIBC_2.40 wcsncpy F +GLIBC_2.40 wcsnlen F +GLIBC_2.40 wcsnrtombs F +GLIBC_2.40 wcspbrk F +GLIBC_2.40 wcsrchr F +GLIBC_2.40 wcsrtombs F +GLIBC_2.40 wcsspn F +GLIBC_2.40 wcsstr F +GLIBC_2.40 wcstod F +GLIBC_2.40 wcstod_l F +GLIBC_2.40 wcstof F +GLIBC_2.40 wcstof128 F +GLIBC_2.40 wcstof128_l F +GLIBC_2.40 wcstof32 F +GLIBC_2.40 wcstof32_l F +GLIBC_2.40 wcstof32x F +GLIBC_2.40 wcstof32x_l F +GLIBC_2.40 wcstof64 F +GLIBC_2.40 wcstof64_l F +GLIBC_2.40 wcstof64x F +GLIBC_2.40 wcstof64x_l F +GLIBC_2.40 wcstof_l F +GLIBC_2.40 wcstoimax F +GLIBC_2.40 wcstok F +GLIBC_2.40 wcstol F +GLIBC_2.40 wcstol_l F +GLIBC_2.40 wcstold F +GLIBC_2.40 wcstold_l F +GLIBC_2.40 wcstoll F +GLIBC_2.40 wcstoll_l F +GLIBC_2.40 wcstombs F +GLIBC_2.40 wcstoq F +GLIBC_2.40 wcstoul F +GLIBC_2.40 wcstoul_l F +GLIBC_2.40 wcstoull F +GLIBC_2.40 wcstoull_l F +GLIBC_2.40 wcstoumax F +GLIBC_2.40 wcstouq F +GLIBC_2.40 wcswcs F +GLIBC_2.40 wcswidth F +GLIBC_2.40 wcsxfrm F +GLIBC_2.40 wcsxfrm_l F +GLIBC_2.40 wctob F +GLIBC_2.40 wctomb F +GLIBC_2.40 wctrans F +GLIBC_2.40 wctrans_l F +GLIBC_2.40 wctype F +GLIBC_2.40 wctype_l F +GLIBC_2.40 wcwidth F +GLIBC_2.40 wmemchr F +GLIBC_2.40 wmemcmp F +GLIBC_2.40 wmemcpy F +GLIBC_2.40 wmemmove F +GLIBC_2.40 wmempcpy F +GLIBC_2.40 wmemset F +GLIBC_2.40 wordexp F +GLIBC_2.40 wordfree F +GLIBC_2.40 wprintf F +GLIBC_2.40 write F +GLIBC_2.40 writev F +GLIBC_2.40 wscanf F +HURD_CTHREADS_0.3 __cthread_getspecific F +HURD_CTHREADS_0.3 __cthread_keycreate F +HURD_CTHREADS_0.3 __cthread_setspecific F +HURD_CTHREADS_0.3 __mutex_init F +HURD_CTHREADS_0.3 __mutex_lock F +HURD_CTHREADS_0.3 __mutex_lock_solid F +HURD_CTHREADS_0.3 __mutex_trylock F +HURD_CTHREADS_0.3 __mutex_unlock F +HURD_CTHREADS_0.3 __mutex_unlock_solid F +HURD_CTHREADS_0.3 __spin_lock F +HURD_CTHREADS_0.3 __spin_lock_init F +HURD_CTHREADS_0.3 __spin_lock_solid F +HURD_CTHREADS_0.3 __spin_try_lock F +HURD_CTHREADS_0.3 __spin_unlock F diff --git a/sysdeps/mach/hurd/aarch64/libc_malloc_debug.abilist b/sysdeps/mach/hurd/aarch64/libc_malloc_debug.abilist new file mode 100644 index 00000000..a0850295 --- /dev/null +++ b/sysdeps/mach/hurd/aarch64/libc_malloc_debug.abilist @@ -0,0 +1,26 @@ +GLIBC_2.40 __free_hook D 0x8 +GLIBC_2.40 __malloc_hook D 0x8 +GLIBC_2.40 __memalign_hook D 0x8 +GLIBC_2.40 __realloc_hook D 0x8 +GLIBC_2.40 aligned_alloc F +GLIBC_2.40 calloc F +GLIBC_2.40 free F +GLIBC_2.40 mallinfo F +GLIBC_2.40 mallinfo2 F +GLIBC_2.40 malloc F +GLIBC_2.40 malloc_info F +GLIBC_2.40 malloc_stats F +GLIBC_2.40 malloc_trim F +GLIBC_2.40 malloc_usable_size F +GLIBC_2.40 mallopt F +GLIBC_2.40 mcheck F +GLIBC_2.40 mcheck_check_all F +GLIBC_2.40 mcheck_pedantic F +GLIBC_2.40 memalign F +GLIBC_2.40 mprobe F +GLIBC_2.40 mtrace F +GLIBC_2.40 muntrace F +GLIBC_2.40 posix_memalign F +GLIBC_2.40 pvalloc F +GLIBC_2.40 realloc F +GLIBC_2.40 valloc F diff --git a/sysdeps/mach/hurd/aarch64/libdl.abilist b/sysdeps/mach/hurd/aarch64/libdl.abilist new file mode 100644 index 00000000..e69de29b diff --git a/sysdeps/mach/hurd/aarch64/libm.abilist b/sysdeps/mach/hurd/aarch64/libm.abilist new file mode 100644 index 00000000..0e58db87 --- /dev/null +++ b/sysdeps/mach/hurd/aarch64/libm.abilist @@ -0,0 +1,1030 @@ +GLIBC_2.40 __clog10 F +GLIBC_2.40 __clog10f F +GLIBC_2.40 __clog10l F +GLIBC_2.40 __finite F +GLIBC_2.40 __finitef F +GLIBC_2.40 __finitel F +GLIBC_2.40 __fpclassify F +GLIBC_2.40 __fpclassifyf F +GLIBC_2.40 __fpclassifyl F +GLIBC_2.40 __iseqsig F +GLIBC_2.40 __iseqsigf F +GLIBC_2.40 __iseqsigl F +GLIBC_2.40 __issignaling F +GLIBC_2.40 __issignalingf F +GLIBC_2.40 __issignalingl F +GLIBC_2.40 __signbit F +GLIBC_2.40 __signbitf F +GLIBC_2.40 __signbitl F +GLIBC_2.40 __signgam D 0x4 +GLIBC_2.40 acos F +GLIBC_2.40 acosf F +GLIBC_2.40 acosf128 F +GLIBC_2.40 acosf32 F +GLIBC_2.40 acosf32x F +GLIBC_2.40 acosf64 F +GLIBC_2.40 acosf64x F +GLIBC_2.40 acosh F +GLIBC_2.40 acoshf F +GLIBC_2.40 acoshf128 F +GLIBC_2.40 acoshf32 F +GLIBC_2.40 acoshf32x F +GLIBC_2.40 acoshf64 F +GLIBC_2.40 acoshf64x F +GLIBC_2.40 acoshl F +GLIBC_2.40 acosl F +GLIBC_2.40 asin F +GLIBC_2.40 asinf F +GLIBC_2.40 asinf128 F +GLIBC_2.40 asinf32 F +GLIBC_2.40 asinf32x F +GLIBC_2.40 asinf64 F +GLIBC_2.40 asinf64x F +GLIBC_2.40 asinh F +GLIBC_2.40 asinhf F +GLIBC_2.40 asinhf128 F +GLIBC_2.40 asinhf32 F +GLIBC_2.40 asinhf32x F +GLIBC_2.40 asinhf64 F +GLIBC_2.40 asinhf64x F +GLIBC_2.40 asinhl F +GLIBC_2.40 asinl F +GLIBC_2.40 atan F +GLIBC_2.40 atan2 F +GLIBC_2.40 atan2f F +GLIBC_2.40 atan2f128 F +GLIBC_2.40 atan2f32 F +GLIBC_2.40 atan2f32x F +GLIBC_2.40 atan2f64 F +GLIBC_2.40 atan2f64x F +GLIBC_2.40 atan2l F +GLIBC_2.40 atanf F +GLIBC_2.40 atanf128 F +GLIBC_2.40 atanf32 F +GLIBC_2.40 atanf32x F +GLIBC_2.40 atanf64 F +GLIBC_2.40 atanf64x F +GLIBC_2.40 atanh F +GLIBC_2.40 atanhf F +GLIBC_2.40 atanhf128 F +GLIBC_2.40 atanhf32 F +GLIBC_2.40 atanhf32x F +GLIBC_2.40 atanhf64 F +GLIBC_2.40 atanhf64x F +GLIBC_2.40 atanhl F +GLIBC_2.40 atanl F +GLIBC_2.40 cabs F +GLIBC_2.40 cabsf F +GLIBC_2.40 cabsf128 F +GLIBC_2.40 cabsf32 F +GLIBC_2.40 cabsf32x F +GLIBC_2.40 cabsf64 F +GLIBC_2.40 cabsf64x F +GLIBC_2.40 cabsl F +GLIBC_2.40 cacos F +GLIBC_2.40 cacosf F +GLIBC_2.40 cacosf128 F +GLIBC_2.40 cacosf32 F +GLIBC_2.40 cacosf32x F +GLIBC_2.40 cacosf64 F +GLIBC_2.40 cacosf64x F +GLIBC_2.40 cacosh F +GLIBC_2.40 cacoshf F +GLIBC_2.40 cacoshf128 F +GLIBC_2.40 cacoshf32 F +GLIBC_2.40 cacoshf32x F +GLIBC_2.40 cacoshf64 F +GLIBC_2.40 cacoshf64x F +GLIBC_2.40 cacoshl F +GLIBC_2.40 cacosl F +GLIBC_2.40 canonicalize F +GLIBC_2.40 canonicalizef F +GLIBC_2.40 canonicalizef128 F +GLIBC_2.40 canonicalizef32 F +GLIBC_2.40 canonicalizef32x F +GLIBC_2.40 canonicalizef64 F +GLIBC_2.40 canonicalizef64x F +GLIBC_2.40 canonicalizel F +GLIBC_2.40 carg F +GLIBC_2.40 cargf F +GLIBC_2.40 cargf128 F +GLIBC_2.40 cargf32 F +GLIBC_2.40 cargf32x F +GLIBC_2.40 cargf64 F +GLIBC_2.40 cargf64x F +GLIBC_2.40 cargl F +GLIBC_2.40 casin F +GLIBC_2.40 casinf F +GLIBC_2.40 casinf128 F +GLIBC_2.40 casinf32 F +GLIBC_2.40 casinf32x F +GLIBC_2.40 casinf64 F +GLIBC_2.40 casinf64x F +GLIBC_2.40 casinh F +GLIBC_2.40 casinhf F +GLIBC_2.40 casinhf128 F +GLIBC_2.40 casinhf32 F +GLIBC_2.40 casinhf32x F +GLIBC_2.40 casinhf64 F +GLIBC_2.40 casinhf64x F +GLIBC_2.40 casinhl F +GLIBC_2.40 casinl F +GLIBC_2.40 catan F +GLIBC_2.40 catanf F +GLIBC_2.40 catanf128 F +GLIBC_2.40 catanf32 F +GLIBC_2.40 catanf32x F +GLIBC_2.40 catanf64 F +GLIBC_2.40 catanf64x F +GLIBC_2.40 catanh F +GLIBC_2.40 catanhf F +GLIBC_2.40 catanhf128 F +GLIBC_2.40 catanhf32 F +GLIBC_2.40 catanhf32x F +GLIBC_2.40 catanhf64 F +GLIBC_2.40 catanhf64x F +GLIBC_2.40 catanhl F +GLIBC_2.40 catanl F +GLIBC_2.40 cbrt F +GLIBC_2.40 cbrtf F +GLIBC_2.40 cbrtf128 F +GLIBC_2.40 cbrtf32 F +GLIBC_2.40 cbrtf32x F +GLIBC_2.40 cbrtf64 F +GLIBC_2.40 cbrtf64x F +GLIBC_2.40 cbrtl F +GLIBC_2.40 ccos F +GLIBC_2.40 ccosf F +GLIBC_2.40 ccosf128 F +GLIBC_2.40 ccosf32 F +GLIBC_2.40 ccosf32x F +GLIBC_2.40 ccosf64 F +GLIBC_2.40 ccosf64x F +GLIBC_2.40 ccosh F +GLIBC_2.40 ccoshf F +GLIBC_2.40 ccoshf128 F +GLIBC_2.40 ccoshf32 F +GLIBC_2.40 ccoshf32x F +GLIBC_2.40 ccoshf64 F +GLIBC_2.40 ccoshf64x F +GLIBC_2.40 ccoshl F +GLIBC_2.40 ccosl F +GLIBC_2.40 ceil F +GLIBC_2.40 ceilf F +GLIBC_2.40 ceilf128 F +GLIBC_2.40 ceilf32 F +GLIBC_2.40 ceilf32x F +GLIBC_2.40 ceilf64 F +GLIBC_2.40 ceilf64x F +GLIBC_2.40 ceill F +GLIBC_2.40 cexp F +GLIBC_2.40 cexpf F +GLIBC_2.40 cexpf128 F +GLIBC_2.40 cexpf32 F +GLIBC_2.40 cexpf32x F +GLIBC_2.40 cexpf64 F +GLIBC_2.40 cexpf64x F +GLIBC_2.40 cexpl F +GLIBC_2.40 cimag F +GLIBC_2.40 cimagf F +GLIBC_2.40 cimagf128 F +GLIBC_2.40 cimagf32 F +GLIBC_2.40 cimagf32x F +GLIBC_2.40 cimagf64 F +GLIBC_2.40 cimagf64x F +GLIBC_2.40 cimagl F +GLIBC_2.40 clog F +GLIBC_2.40 clog10 F +GLIBC_2.40 clog10f F +GLIBC_2.40 clog10f128 F +GLIBC_2.40 clog10f32 F +GLIBC_2.40 clog10f32x F +GLIBC_2.40 clog10f64 F +GLIBC_2.40 clog10f64x F +GLIBC_2.40 clog10l F +GLIBC_2.40 clogf F +GLIBC_2.40 clogf128 F +GLIBC_2.40 clogf32 F +GLIBC_2.40 clogf32x F +GLIBC_2.40 clogf64 F +GLIBC_2.40 clogf64x F +GLIBC_2.40 clogl F +GLIBC_2.40 conj F +GLIBC_2.40 conjf F +GLIBC_2.40 conjf128 F +GLIBC_2.40 conjf32 F +GLIBC_2.40 conjf32x F +GLIBC_2.40 conjf64 F +GLIBC_2.40 conjf64x F +GLIBC_2.40 conjl F +GLIBC_2.40 copysign F +GLIBC_2.40 copysignf F +GLIBC_2.40 copysignf128 F +GLIBC_2.40 copysignf32 F +GLIBC_2.40 copysignf32x F +GLIBC_2.40 copysignf64 F +GLIBC_2.40 copysignf64x F +GLIBC_2.40 copysignl F +GLIBC_2.40 cos F +GLIBC_2.40 cosf F +GLIBC_2.40 cosf128 F +GLIBC_2.40 cosf32 F +GLIBC_2.40 cosf32x F +GLIBC_2.40 cosf64 F +GLIBC_2.40 cosf64x F +GLIBC_2.40 cosh F +GLIBC_2.40 coshf F +GLIBC_2.40 coshf128 F +GLIBC_2.40 coshf32 F +GLIBC_2.40 coshf32x F +GLIBC_2.40 coshf64 F +GLIBC_2.40 coshf64x F +GLIBC_2.40 coshl F +GLIBC_2.40 cosl F +GLIBC_2.40 cpow F +GLIBC_2.40 cpowf F +GLIBC_2.40 cpowf128 F +GLIBC_2.40 cpowf32 F +GLIBC_2.40 cpowf32x F +GLIBC_2.40 cpowf64 F +GLIBC_2.40 cpowf64x F +GLIBC_2.40 cpowl F +GLIBC_2.40 cproj F +GLIBC_2.40 cprojf F +GLIBC_2.40 cprojf128 F +GLIBC_2.40 cprojf32 F +GLIBC_2.40 cprojf32x F +GLIBC_2.40 cprojf64 F +GLIBC_2.40 cprojf64x F +GLIBC_2.40 cprojl F +GLIBC_2.40 creal F +GLIBC_2.40 crealf F +GLIBC_2.40 crealf128 F +GLIBC_2.40 crealf32 F +GLIBC_2.40 crealf32x F +GLIBC_2.40 crealf64 F +GLIBC_2.40 crealf64x F +GLIBC_2.40 creall F +GLIBC_2.40 csin F +GLIBC_2.40 csinf F +GLIBC_2.40 csinf128 F +GLIBC_2.40 csinf32 F +GLIBC_2.40 csinf32x F +GLIBC_2.40 csinf64 F +GLIBC_2.40 csinf64x F +GLIBC_2.40 csinh F +GLIBC_2.40 csinhf F +GLIBC_2.40 csinhf128 F +GLIBC_2.40 csinhf32 F +GLIBC_2.40 csinhf32x F +GLIBC_2.40 csinhf64 F +GLIBC_2.40 csinhf64x F +GLIBC_2.40 csinhl F +GLIBC_2.40 csinl F +GLIBC_2.40 csqrt F +GLIBC_2.40 csqrtf F +GLIBC_2.40 csqrtf128 F +GLIBC_2.40 csqrtf32 F +GLIBC_2.40 csqrtf32x F +GLIBC_2.40 csqrtf64 F +GLIBC_2.40 csqrtf64x F +GLIBC_2.40 csqrtl F +GLIBC_2.40 ctan F +GLIBC_2.40 ctanf F +GLIBC_2.40 ctanf128 F +GLIBC_2.40 ctanf32 F +GLIBC_2.40 ctanf32x F +GLIBC_2.40 ctanf64 F +GLIBC_2.40 ctanf64x F +GLIBC_2.40 ctanh F +GLIBC_2.40 ctanhf F +GLIBC_2.40 ctanhf128 F +GLIBC_2.40 ctanhf32 F +GLIBC_2.40 ctanhf32x F +GLIBC_2.40 ctanhf64 F +GLIBC_2.40 ctanhf64x F +GLIBC_2.40 ctanhl F +GLIBC_2.40 ctanl F +GLIBC_2.40 daddl F +GLIBC_2.40 ddivl F +GLIBC_2.40 dfmal F +GLIBC_2.40 dmull F +GLIBC_2.40 drem F +GLIBC_2.40 dremf F +GLIBC_2.40 dreml F +GLIBC_2.40 dsqrtl F +GLIBC_2.40 dsubl F +GLIBC_2.40 erf F +GLIBC_2.40 erfc F +GLIBC_2.40 erfcf F +GLIBC_2.40 erfcf128 F +GLIBC_2.40 erfcf32 F +GLIBC_2.40 erfcf32x F +GLIBC_2.40 erfcf64 F +GLIBC_2.40 erfcf64x F +GLIBC_2.40 erfcl F +GLIBC_2.40 erff F +GLIBC_2.40 erff128 F +GLIBC_2.40 erff32 F +GLIBC_2.40 erff32x F +GLIBC_2.40 erff64 F +GLIBC_2.40 erff64x F +GLIBC_2.40 erfl F +GLIBC_2.40 exp F +GLIBC_2.40 exp10 F +GLIBC_2.40 exp10f F +GLIBC_2.40 exp10f128 F +GLIBC_2.40 exp10f32 F +GLIBC_2.40 exp10f32x F +GLIBC_2.40 exp10f64 F +GLIBC_2.40 exp10f64x F +GLIBC_2.40 exp10l F +GLIBC_2.40 exp2 F +GLIBC_2.40 exp2f F +GLIBC_2.40 exp2f128 F +GLIBC_2.40 exp2f32 F +GLIBC_2.40 exp2f32x F +GLIBC_2.40 exp2f64 F +GLIBC_2.40 exp2f64x F +GLIBC_2.40 exp2l F +GLIBC_2.40 expf F +GLIBC_2.40 expf128 F +GLIBC_2.40 expf32 F +GLIBC_2.40 expf32x F +GLIBC_2.40 expf64 F +GLIBC_2.40 expf64x F +GLIBC_2.40 expl F +GLIBC_2.40 expm1 F +GLIBC_2.40 expm1f F +GLIBC_2.40 expm1f128 F +GLIBC_2.40 expm1f32 F +GLIBC_2.40 expm1f32x F +GLIBC_2.40 expm1f64 F +GLIBC_2.40 expm1f64x F +GLIBC_2.40 expm1l F +GLIBC_2.40 f32addf128 F +GLIBC_2.40 f32addf32x F +GLIBC_2.40 f32addf64 F +GLIBC_2.40 f32addf64x F +GLIBC_2.40 f32divf128 F +GLIBC_2.40 f32divf32x F +GLIBC_2.40 f32divf64 F +GLIBC_2.40 f32divf64x F +GLIBC_2.40 f32fmaf128 F +GLIBC_2.40 f32fmaf32x F +GLIBC_2.40 f32fmaf64 F +GLIBC_2.40 f32fmaf64x F +GLIBC_2.40 f32mulf128 F +GLIBC_2.40 f32mulf32x F +GLIBC_2.40 f32mulf64 F +GLIBC_2.40 f32mulf64x F +GLIBC_2.40 f32sqrtf128 F +GLIBC_2.40 f32sqrtf32x F +GLIBC_2.40 f32sqrtf64 F +GLIBC_2.40 f32sqrtf64x F +GLIBC_2.40 f32subf128 F +GLIBC_2.40 f32subf32x F +GLIBC_2.40 f32subf64 F +GLIBC_2.40 f32subf64x F +GLIBC_2.40 f32xaddf128 F +GLIBC_2.40 f32xaddf64 F +GLIBC_2.40 f32xaddf64x F +GLIBC_2.40 f32xdivf128 F +GLIBC_2.40 f32xdivf64 F +GLIBC_2.40 f32xdivf64x F +GLIBC_2.40 f32xfmaf128 F +GLIBC_2.40 f32xfmaf64 F +GLIBC_2.40 f32xfmaf64x F +GLIBC_2.40 f32xmulf128 F +GLIBC_2.40 f32xmulf64 F +GLIBC_2.40 f32xmulf64x F +GLIBC_2.40 f32xsqrtf128 F +GLIBC_2.40 f32xsqrtf64 F +GLIBC_2.40 f32xsqrtf64x F +GLIBC_2.40 f32xsubf128 F +GLIBC_2.40 f32xsubf64 F +GLIBC_2.40 f32xsubf64x F +GLIBC_2.40 f64addf128 F +GLIBC_2.40 f64addf64x F +GLIBC_2.40 f64divf128 F +GLIBC_2.40 f64divf64x F +GLIBC_2.40 f64fmaf128 F +GLIBC_2.40 f64fmaf64x F +GLIBC_2.40 f64mulf128 F +GLIBC_2.40 f64mulf64x F +GLIBC_2.40 f64sqrtf128 F +GLIBC_2.40 f64sqrtf64x F +GLIBC_2.40 f64subf128 F +GLIBC_2.40 f64subf64x F +GLIBC_2.40 f64xaddf128 F +GLIBC_2.40 f64xdivf128 F +GLIBC_2.40 f64xfmaf128 F +GLIBC_2.40 f64xmulf128 F +GLIBC_2.40 f64xsqrtf128 F +GLIBC_2.40 f64xsubf128 F +GLIBC_2.40 fabs F +GLIBC_2.40 fabsf F +GLIBC_2.40 fabsf128 F +GLIBC_2.40 fabsf32 F +GLIBC_2.40 fabsf32x F +GLIBC_2.40 fabsf64 F +GLIBC_2.40 fabsf64x F +GLIBC_2.40 fabsl F +GLIBC_2.40 fadd F +GLIBC_2.40 faddl F +GLIBC_2.40 fdim F +GLIBC_2.40 fdimf F +GLIBC_2.40 fdimf128 F +GLIBC_2.40 fdimf32 F +GLIBC_2.40 fdimf32x F +GLIBC_2.40 fdimf64 F +GLIBC_2.40 fdimf64x F +GLIBC_2.40 fdiml F +GLIBC_2.40 fdiv F +GLIBC_2.40 fdivl F +GLIBC_2.40 feclearexcept F +GLIBC_2.40 fedisableexcept F +GLIBC_2.40 feenableexcept F +GLIBC_2.40 fegetenv F +GLIBC_2.40 fegetexcept F +GLIBC_2.40 fegetexceptflag F +GLIBC_2.40 fegetmode F +GLIBC_2.40 fegetround F +GLIBC_2.40 feholdexcept F +GLIBC_2.40 feraiseexcept F +GLIBC_2.40 fesetenv F +GLIBC_2.40 fesetexcept F +GLIBC_2.40 fesetexceptflag F +GLIBC_2.40 fesetmode F +GLIBC_2.40 fesetround F +GLIBC_2.40 fetestexcept F +GLIBC_2.40 fetestexceptflag F +GLIBC_2.40 feupdateenv F +GLIBC_2.40 ffma F +GLIBC_2.40 ffmal F +GLIBC_2.40 finite F +GLIBC_2.40 finitef F +GLIBC_2.40 finitel F +GLIBC_2.40 floor F +GLIBC_2.40 floorf F +GLIBC_2.40 floorf128 F +GLIBC_2.40 floorf32 F +GLIBC_2.40 floorf32x F +GLIBC_2.40 floorf64 F +GLIBC_2.40 floorf64x F +GLIBC_2.40 floorl F +GLIBC_2.40 fma F +GLIBC_2.40 fmaf F +GLIBC_2.40 fmaf128 F +GLIBC_2.40 fmaf32 F +GLIBC_2.40 fmaf32x F +GLIBC_2.40 fmaf64 F +GLIBC_2.40 fmaf64x F +GLIBC_2.40 fmal F +GLIBC_2.40 fmax F +GLIBC_2.40 fmaxf F +GLIBC_2.40 fmaxf128 F +GLIBC_2.40 fmaxf32 F +GLIBC_2.40 fmaxf32x F +GLIBC_2.40 fmaxf64 F +GLIBC_2.40 fmaxf64x F +GLIBC_2.40 fmaximum F +GLIBC_2.40 fmaximum_mag F +GLIBC_2.40 fmaximum_mag_num F +GLIBC_2.40 fmaximum_mag_numf F +GLIBC_2.40 fmaximum_mag_numf128 F +GLIBC_2.40 fmaximum_mag_numf32 F +GLIBC_2.40 fmaximum_mag_numf32x F +GLIBC_2.40 fmaximum_mag_numf64 F +GLIBC_2.40 fmaximum_mag_numf64x F +GLIBC_2.40 fmaximum_mag_numl F +GLIBC_2.40 fmaximum_magf F +GLIBC_2.40 fmaximum_magf128 F +GLIBC_2.40 fmaximum_magf32 F +GLIBC_2.40 fmaximum_magf32x F +GLIBC_2.40 fmaximum_magf64 F +GLIBC_2.40 fmaximum_magf64x F +GLIBC_2.40 fmaximum_magl F +GLIBC_2.40 fmaximum_num F +GLIBC_2.40 fmaximum_numf F +GLIBC_2.40 fmaximum_numf128 F +GLIBC_2.40 fmaximum_numf32 F +GLIBC_2.40 fmaximum_numf32x F +GLIBC_2.40 fmaximum_numf64 F +GLIBC_2.40 fmaximum_numf64x F +GLIBC_2.40 fmaximum_numl F +GLIBC_2.40 fmaximumf F +GLIBC_2.40 fmaximumf128 F +GLIBC_2.40 fmaximumf32 F +GLIBC_2.40 fmaximumf32x F +GLIBC_2.40 fmaximumf64 F +GLIBC_2.40 fmaximumf64x F +GLIBC_2.40 fmaximuml F +GLIBC_2.40 fmaxl F +GLIBC_2.40 fmaxmag F +GLIBC_2.40 fmaxmagf F +GLIBC_2.40 fmaxmagf128 F +GLIBC_2.40 fmaxmagf32 F +GLIBC_2.40 fmaxmagf32x F +GLIBC_2.40 fmaxmagf64 F +GLIBC_2.40 fmaxmagf64x F +GLIBC_2.40 fmaxmagl F +GLIBC_2.40 fmin F +GLIBC_2.40 fminf F +GLIBC_2.40 fminf128 F +GLIBC_2.40 fminf32 F +GLIBC_2.40 fminf32x F +GLIBC_2.40 fminf64 F +GLIBC_2.40 fminf64x F +GLIBC_2.40 fminimum F +GLIBC_2.40 fminimum_mag F +GLIBC_2.40 fminimum_mag_num F +GLIBC_2.40 fminimum_mag_numf F +GLIBC_2.40 fminimum_mag_numf128 F +GLIBC_2.40 fminimum_mag_numf32 F +GLIBC_2.40 fminimum_mag_numf32x F +GLIBC_2.40 fminimum_mag_numf64 F +GLIBC_2.40 fminimum_mag_numf64x F +GLIBC_2.40 fminimum_mag_numl F +GLIBC_2.40 fminimum_magf F +GLIBC_2.40 fminimum_magf128 F +GLIBC_2.40 fminimum_magf32 F +GLIBC_2.40 fminimum_magf32x F +GLIBC_2.40 fminimum_magf64 F +GLIBC_2.40 fminimum_magf64x F +GLIBC_2.40 fminimum_magl F +GLIBC_2.40 fminimum_num F +GLIBC_2.40 fminimum_numf F +GLIBC_2.40 fminimum_numf128 F +GLIBC_2.40 fminimum_numf32 F +GLIBC_2.40 fminimum_numf32x F +GLIBC_2.40 fminimum_numf64 F +GLIBC_2.40 fminimum_numf64x F +GLIBC_2.40 fminimum_numl F +GLIBC_2.40 fminimumf F +GLIBC_2.40 fminimumf128 F +GLIBC_2.40 fminimumf32 F +GLIBC_2.40 fminimumf32x F +GLIBC_2.40 fminimumf64 F +GLIBC_2.40 fminimumf64x F +GLIBC_2.40 fminimuml F +GLIBC_2.40 fminl F +GLIBC_2.40 fminmag F +GLIBC_2.40 fminmagf F +GLIBC_2.40 fminmagf128 F +GLIBC_2.40 fminmagf32 F +GLIBC_2.40 fminmagf32x F +GLIBC_2.40 fminmagf64 F +GLIBC_2.40 fminmagf64x F +GLIBC_2.40 fminmagl F +GLIBC_2.40 fmod F +GLIBC_2.40 fmodf F +GLIBC_2.40 fmodf128 F +GLIBC_2.40 fmodf32 F +GLIBC_2.40 fmodf32x F +GLIBC_2.40 fmodf64 F +GLIBC_2.40 fmodf64x F +GLIBC_2.40 fmodl F +GLIBC_2.40 fmul F +GLIBC_2.40 fmull F +GLIBC_2.40 frexp F +GLIBC_2.40 frexpf F +GLIBC_2.40 frexpf128 F +GLIBC_2.40 frexpf32 F +GLIBC_2.40 frexpf32x F +GLIBC_2.40 frexpf64 F +GLIBC_2.40 frexpf64x F +GLIBC_2.40 frexpl F +GLIBC_2.40 fromfp F +GLIBC_2.40 fromfpf F +GLIBC_2.40 fromfpf128 F +GLIBC_2.40 fromfpf32 F +GLIBC_2.40 fromfpf32x F +GLIBC_2.40 fromfpf64 F +GLIBC_2.40 fromfpf64x F +GLIBC_2.40 fromfpl F +GLIBC_2.40 fromfpx F +GLIBC_2.40 fromfpxf F +GLIBC_2.40 fromfpxf128 F +GLIBC_2.40 fromfpxf32 F +GLIBC_2.40 fromfpxf32x F +GLIBC_2.40 fromfpxf64 F +GLIBC_2.40 fromfpxf64x F +GLIBC_2.40 fromfpxl F +GLIBC_2.40 fsqrt F +GLIBC_2.40 fsqrtl F +GLIBC_2.40 fsub F +GLIBC_2.40 fsubl F +GLIBC_2.40 gamma F +GLIBC_2.40 gammaf F +GLIBC_2.40 gammal F +GLIBC_2.40 getpayload F +GLIBC_2.40 getpayloadf F +GLIBC_2.40 getpayloadf128 F +GLIBC_2.40 getpayloadf32 F +GLIBC_2.40 getpayloadf32x F +GLIBC_2.40 getpayloadf64 F +GLIBC_2.40 getpayloadf64x F +GLIBC_2.40 getpayloadl F +GLIBC_2.40 hypot F +GLIBC_2.40 hypotf F +GLIBC_2.40 hypotf128 F +GLIBC_2.40 hypotf32 F +GLIBC_2.40 hypotf32x F +GLIBC_2.40 hypotf64 F +GLIBC_2.40 hypotf64x F +GLIBC_2.40 hypotl F +GLIBC_2.40 ilogb F +GLIBC_2.40 ilogbf F +GLIBC_2.40 ilogbf128 F +GLIBC_2.40 ilogbf32 F +GLIBC_2.40 ilogbf32x F +GLIBC_2.40 ilogbf64 F +GLIBC_2.40 ilogbf64x F +GLIBC_2.40 ilogbl F +GLIBC_2.40 j0 F +GLIBC_2.40 j0f F +GLIBC_2.40 j0f128 F +GLIBC_2.40 j0f32 F +GLIBC_2.40 j0f32x F +GLIBC_2.40 j0f64 F +GLIBC_2.40 j0f64x F +GLIBC_2.40 j0l F +GLIBC_2.40 j1 F +GLIBC_2.40 j1f F +GLIBC_2.40 j1f128 F +GLIBC_2.40 j1f32 F +GLIBC_2.40 j1f32x F +GLIBC_2.40 j1f64 F +GLIBC_2.40 j1f64x F +GLIBC_2.40 j1l F +GLIBC_2.40 jn F +GLIBC_2.40 jnf F +GLIBC_2.40 jnf128 F +GLIBC_2.40 jnf32 F +GLIBC_2.40 jnf32x F +GLIBC_2.40 jnf64 F +GLIBC_2.40 jnf64x F +GLIBC_2.40 jnl F +GLIBC_2.40 ldexp F +GLIBC_2.40 ldexpf F +GLIBC_2.40 ldexpf128 F +GLIBC_2.40 ldexpf32 F +GLIBC_2.40 ldexpf32x F +GLIBC_2.40 ldexpf64 F +GLIBC_2.40 ldexpf64x F +GLIBC_2.40 ldexpl F +GLIBC_2.40 lgamma F +GLIBC_2.40 lgamma_r F +GLIBC_2.40 lgammaf F +GLIBC_2.40 lgammaf128 F +GLIBC_2.40 lgammaf128_r F +GLIBC_2.40 lgammaf32 F +GLIBC_2.40 lgammaf32_r F +GLIBC_2.40 lgammaf32x F +GLIBC_2.40 lgammaf32x_r F +GLIBC_2.40 lgammaf64 F +GLIBC_2.40 lgammaf64_r F +GLIBC_2.40 lgammaf64x F +GLIBC_2.40 lgammaf64x_r F +GLIBC_2.40 lgammaf_r F +GLIBC_2.40 lgammal F +GLIBC_2.40 lgammal_r F +GLIBC_2.40 llogb F +GLIBC_2.40 llogbf F +GLIBC_2.40 llogbf128 F +GLIBC_2.40 llogbf32 F +GLIBC_2.40 llogbf32x F +GLIBC_2.40 llogbf64 F +GLIBC_2.40 llogbf64x F +GLIBC_2.40 llogbl F +GLIBC_2.40 llrint F +GLIBC_2.40 llrintf F +GLIBC_2.40 llrintf128 F +GLIBC_2.40 llrintf32 F +GLIBC_2.40 llrintf32x F +GLIBC_2.40 llrintf64 F +GLIBC_2.40 llrintf64x F +GLIBC_2.40 llrintl F +GLIBC_2.40 llround F +GLIBC_2.40 llroundf F +GLIBC_2.40 llroundf128 F +GLIBC_2.40 llroundf32 F +GLIBC_2.40 llroundf32x F +GLIBC_2.40 llroundf64 F +GLIBC_2.40 llroundf64x F +GLIBC_2.40 llroundl F +GLIBC_2.40 log F +GLIBC_2.40 log10 F +GLIBC_2.40 log10f F +GLIBC_2.40 log10f128 F +GLIBC_2.40 log10f32 F +GLIBC_2.40 log10f32x F +GLIBC_2.40 log10f64 F +GLIBC_2.40 log10f64x F +GLIBC_2.40 log10l F +GLIBC_2.40 log1p F +GLIBC_2.40 log1pf F +GLIBC_2.40 log1pf128 F +GLIBC_2.40 log1pf32 F +GLIBC_2.40 log1pf32x F +GLIBC_2.40 log1pf64 F +GLIBC_2.40 log1pf64x F +GLIBC_2.40 log1pl F +GLIBC_2.40 log2 F +GLIBC_2.40 log2f F +GLIBC_2.40 log2f128 F +GLIBC_2.40 log2f32 F +GLIBC_2.40 log2f32x F +GLIBC_2.40 log2f64 F +GLIBC_2.40 log2f64x F +GLIBC_2.40 log2l F +GLIBC_2.40 logb F +GLIBC_2.40 logbf F +GLIBC_2.40 logbf128 F +GLIBC_2.40 logbf32 F +GLIBC_2.40 logbf32x F +GLIBC_2.40 logbf64 F +GLIBC_2.40 logbf64x F +GLIBC_2.40 logbl F +GLIBC_2.40 logf F +GLIBC_2.40 logf128 F +GLIBC_2.40 logf32 F +GLIBC_2.40 logf32x F +GLIBC_2.40 logf64 F +GLIBC_2.40 logf64x F +GLIBC_2.40 logl F +GLIBC_2.40 lrint F +GLIBC_2.40 lrintf F +GLIBC_2.40 lrintf128 F +GLIBC_2.40 lrintf32 F +GLIBC_2.40 lrintf32x F +GLIBC_2.40 lrintf64 F +GLIBC_2.40 lrintf64x F +GLIBC_2.40 lrintl F +GLIBC_2.40 lround F +GLIBC_2.40 lroundf F +GLIBC_2.40 lroundf128 F +GLIBC_2.40 lroundf32 F +GLIBC_2.40 lroundf32x F +GLIBC_2.40 lroundf64 F +GLIBC_2.40 lroundf64x F +GLIBC_2.40 lroundl F +GLIBC_2.40 modf F +GLIBC_2.40 modff F +GLIBC_2.40 modff128 F +GLIBC_2.40 modff32 F +GLIBC_2.40 modff32x F +GLIBC_2.40 modff64 F +GLIBC_2.40 modff64x F +GLIBC_2.40 modfl F +GLIBC_2.40 nan F +GLIBC_2.40 nanf F +GLIBC_2.40 nanf128 F +GLIBC_2.40 nanf32 F +GLIBC_2.40 nanf32x F +GLIBC_2.40 nanf64 F +GLIBC_2.40 nanf64x F +GLIBC_2.40 nanl F +GLIBC_2.40 nearbyint F +GLIBC_2.40 nearbyintf F +GLIBC_2.40 nearbyintf128 F +GLIBC_2.40 nearbyintf32 F +GLIBC_2.40 nearbyintf32x F +GLIBC_2.40 nearbyintf64 F +GLIBC_2.40 nearbyintf64x F +GLIBC_2.40 nearbyintl F +GLIBC_2.40 nextafter F +GLIBC_2.40 nextafterf F +GLIBC_2.40 nextafterf128 F +GLIBC_2.40 nextafterf32 F +GLIBC_2.40 nextafterf32x F +GLIBC_2.40 nextafterf64 F +GLIBC_2.40 nextafterf64x F +GLIBC_2.40 nextafterl F +GLIBC_2.40 nextdown F +GLIBC_2.40 nextdownf F +GLIBC_2.40 nextdownf128 F +GLIBC_2.40 nextdownf32 F +GLIBC_2.40 nextdownf32x F +GLIBC_2.40 nextdownf64 F +GLIBC_2.40 nextdownf64x F +GLIBC_2.40 nextdownl F +GLIBC_2.40 nexttoward F +GLIBC_2.40 nexttowardf F +GLIBC_2.40 nexttowardl F +GLIBC_2.40 nextup F +GLIBC_2.40 nextupf F +GLIBC_2.40 nextupf128 F +GLIBC_2.40 nextupf32 F +GLIBC_2.40 nextupf32x F +GLIBC_2.40 nextupf64 F +GLIBC_2.40 nextupf64x F +GLIBC_2.40 nextupl F +GLIBC_2.40 pow F +GLIBC_2.40 powf F +GLIBC_2.40 powf128 F +GLIBC_2.40 powf32 F +GLIBC_2.40 powf32x F +GLIBC_2.40 powf64 F +GLIBC_2.40 powf64x F +GLIBC_2.40 powl F +GLIBC_2.40 remainder F +GLIBC_2.40 remainderf F +GLIBC_2.40 remainderf128 F +GLIBC_2.40 remainderf32 F +GLIBC_2.40 remainderf32x F +GLIBC_2.40 remainderf64 F +GLIBC_2.40 remainderf64x F +GLIBC_2.40 remainderl F +GLIBC_2.40 remquo F +GLIBC_2.40 remquof F +GLIBC_2.40 remquof128 F +GLIBC_2.40 remquof32 F +GLIBC_2.40 remquof32x F +GLIBC_2.40 remquof64 F +GLIBC_2.40 remquof64x F +GLIBC_2.40 remquol F +GLIBC_2.40 rint F +GLIBC_2.40 rintf F +GLIBC_2.40 rintf128 F +GLIBC_2.40 rintf32 F +GLIBC_2.40 rintf32x F +GLIBC_2.40 rintf64 F +GLIBC_2.40 rintf64x F +GLIBC_2.40 rintl F +GLIBC_2.40 round F +GLIBC_2.40 roundeven F +GLIBC_2.40 roundevenf F +GLIBC_2.40 roundevenf128 F +GLIBC_2.40 roundevenf32 F +GLIBC_2.40 roundevenf32x F +GLIBC_2.40 roundevenf64 F +GLIBC_2.40 roundevenf64x F +GLIBC_2.40 roundevenl F +GLIBC_2.40 roundf F +GLIBC_2.40 roundf128 F +GLIBC_2.40 roundf32 F +GLIBC_2.40 roundf32x F +GLIBC_2.40 roundf64 F +GLIBC_2.40 roundf64x F +GLIBC_2.40 roundl F +GLIBC_2.40 scalb F +GLIBC_2.40 scalbf F +GLIBC_2.40 scalbl F +GLIBC_2.40 scalbln F +GLIBC_2.40 scalblnf F +GLIBC_2.40 scalblnf128 F +GLIBC_2.40 scalblnf32 F +GLIBC_2.40 scalblnf32x F +GLIBC_2.40 scalblnf64 F +GLIBC_2.40 scalblnf64x F +GLIBC_2.40 scalblnl F +GLIBC_2.40 scalbn F +GLIBC_2.40 scalbnf F +GLIBC_2.40 scalbnf128 F +GLIBC_2.40 scalbnf32 F +GLIBC_2.40 scalbnf32x F +GLIBC_2.40 scalbnf64 F +GLIBC_2.40 scalbnf64x F +GLIBC_2.40 scalbnl F +GLIBC_2.40 setpayload F +GLIBC_2.40 setpayloadf F +GLIBC_2.40 setpayloadf128 F +GLIBC_2.40 setpayloadf32 F +GLIBC_2.40 setpayloadf32x F +GLIBC_2.40 setpayloadf64 F +GLIBC_2.40 setpayloadf64x F +GLIBC_2.40 setpayloadl F +GLIBC_2.40 setpayloadsig F +GLIBC_2.40 setpayloadsigf F +GLIBC_2.40 setpayloadsigf128 F +GLIBC_2.40 setpayloadsigf32 F +GLIBC_2.40 setpayloadsigf32x F +GLIBC_2.40 setpayloadsigf64 F +GLIBC_2.40 setpayloadsigf64x F +GLIBC_2.40 setpayloadsigl F +GLIBC_2.40 signgam D 0x4 +GLIBC_2.40 significand F +GLIBC_2.40 significandf F +GLIBC_2.40 significandl F +GLIBC_2.40 sin F +GLIBC_2.40 sincos F +GLIBC_2.40 sincosf F +GLIBC_2.40 sincosf128 F +GLIBC_2.40 sincosf32 F +GLIBC_2.40 sincosf32x F +GLIBC_2.40 sincosf64 F +GLIBC_2.40 sincosf64x F +GLIBC_2.40 sincosl F +GLIBC_2.40 sinf F +GLIBC_2.40 sinf128 F +GLIBC_2.40 sinf32 F +GLIBC_2.40 sinf32x F +GLIBC_2.40 sinf64 F +GLIBC_2.40 sinf64x F +GLIBC_2.40 sinh F +GLIBC_2.40 sinhf F +GLIBC_2.40 sinhf128 F +GLIBC_2.40 sinhf32 F +GLIBC_2.40 sinhf32x F +GLIBC_2.40 sinhf64 F +GLIBC_2.40 sinhf64x F +GLIBC_2.40 sinhl F +GLIBC_2.40 sinl F +GLIBC_2.40 sqrt F +GLIBC_2.40 sqrtf F +GLIBC_2.40 sqrtf128 F +GLIBC_2.40 sqrtf32 F +GLIBC_2.40 sqrtf32x F +GLIBC_2.40 sqrtf64 F +GLIBC_2.40 sqrtf64x F +GLIBC_2.40 sqrtl F +GLIBC_2.40 tan F +GLIBC_2.40 tanf F +GLIBC_2.40 tanf128 F +GLIBC_2.40 tanf32 F +GLIBC_2.40 tanf32x F +GLIBC_2.40 tanf64 F +GLIBC_2.40 tanf64x F +GLIBC_2.40 tanh F +GLIBC_2.40 tanhf F +GLIBC_2.40 tanhf128 F +GLIBC_2.40 tanhf32 F +GLIBC_2.40 tanhf32x F +GLIBC_2.40 tanhf64 F +GLIBC_2.40 tanhf64x F +GLIBC_2.40 tanhl F +GLIBC_2.40 tanl F +GLIBC_2.40 tgamma F +GLIBC_2.40 tgammaf F +GLIBC_2.40 tgammaf128 F +GLIBC_2.40 tgammaf32 F +GLIBC_2.40 tgammaf32x F +GLIBC_2.40 tgammaf64 F +GLIBC_2.40 tgammaf64x F +GLIBC_2.40 tgammal F +GLIBC_2.40 totalorder F +GLIBC_2.40 totalorderf F +GLIBC_2.40 totalorderf128 F +GLIBC_2.40 totalorderf32 F +GLIBC_2.40 totalorderf32x F +GLIBC_2.40 totalorderf64 F +GLIBC_2.40 totalorderf64x F +GLIBC_2.40 totalorderl F +GLIBC_2.40 totalordermag F +GLIBC_2.40 totalordermagf F +GLIBC_2.40 totalordermagf128 F +GLIBC_2.40 totalordermagf32 F +GLIBC_2.40 totalordermagf32x F +GLIBC_2.40 totalordermagf64 F +GLIBC_2.40 totalordermagf64x F +GLIBC_2.40 totalordermagl F +GLIBC_2.40 trunc F +GLIBC_2.40 truncf F +GLIBC_2.40 truncf128 F +GLIBC_2.40 truncf32 F +GLIBC_2.40 truncf32x F +GLIBC_2.40 truncf64 F +GLIBC_2.40 truncf64x F +GLIBC_2.40 truncl F +GLIBC_2.40 ufromfp F +GLIBC_2.40 ufromfpf F +GLIBC_2.40 ufromfpf128 F +GLIBC_2.40 ufromfpf32 F +GLIBC_2.40 ufromfpf32x F +GLIBC_2.40 ufromfpf64 F +GLIBC_2.40 ufromfpf64x F +GLIBC_2.40 ufromfpl F +GLIBC_2.40 ufromfpx F +GLIBC_2.40 ufromfpxf F +GLIBC_2.40 ufromfpxf128 F +GLIBC_2.40 ufromfpxf32 F +GLIBC_2.40 ufromfpxf32x F +GLIBC_2.40 ufromfpxf64 F +GLIBC_2.40 ufromfpxf64x F +GLIBC_2.40 ufromfpxl F +GLIBC_2.40 y0 F +GLIBC_2.40 y0f F +GLIBC_2.40 y0f128 F +GLIBC_2.40 y0f32 F +GLIBC_2.40 y0f32x F +GLIBC_2.40 y0f64 F +GLIBC_2.40 y0f64x F +GLIBC_2.40 y0l F +GLIBC_2.40 y1 F +GLIBC_2.40 y1f F +GLIBC_2.40 y1f128 F +GLIBC_2.40 y1f32 F +GLIBC_2.40 y1f32x F +GLIBC_2.40 y1f64 F +GLIBC_2.40 y1f64x F +GLIBC_2.40 y1l F +GLIBC_2.40 yn F +GLIBC_2.40 ynf F +GLIBC_2.40 ynf128 F +GLIBC_2.40 ynf32 F +GLIBC_2.40 ynf32x F +GLIBC_2.40 ynf64 F +GLIBC_2.40 ynf64x F +GLIBC_2.40 ynl F diff --git a/sysdeps/mach/hurd/aarch64/libmvec.abilist b/sysdeps/mach/hurd/aarch64/libmvec.abilist new file mode 100644 index 00000000..70ac03b4 --- /dev/null +++ b/sysdeps/mach/hurd/aarch64/libmvec.abilist @@ -0,0 +1,75 @@ +GLIBC_2.40 _ZGVnN2v_acos F +GLIBC_2.40 _ZGVnN2v_acosf F +GLIBC_2.40 _ZGVnN2v_asin F +GLIBC_2.40 _ZGVnN2v_asinf F +GLIBC_2.40 _ZGVnN2v_atan F +GLIBC_2.40 _ZGVnN2v_atanf F +GLIBC_2.40 _ZGVnN2v_cos F +GLIBC_2.40 _ZGVnN2v_cosf F +GLIBC_2.40 _ZGVnN2v_exp F +GLIBC_2.40 _ZGVnN2v_exp10 F +GLIBC_2.40 _ZGVnN2v_exp10f F +GLIBC_2.40 _ZGVnN2v_exp2 F +GLIBC_2.40 _ZGVnN2v_exp2f F +GLIBC_2.40 _ZGVnN2v_expf F +GLIBC_2.40 _ZGVnN2v_expm1 F +GLIBC_2.40 _ZGVnN2v_expm1f F +GLIBC_2.40 _ZGVnN2v_log F +GLIBC_2.40 _ZGVnN2v_log10 F +GLIBC_2.40 _ZGVnN2v_log10f F +GLIBC_2.40 _ZGVnN2v_log1p F +GLIBC_2.40 _ZGVnN2v_log1pf F +GLIBC_2.40 _ZGVnN2v_log2 F +GLIBC_2.40 _ZGVnN2v_log2f F +GLIBC_2.40 _ZGVnN2v_logf F +GLIBC_2.40 _ZGVnN2v_sin F +GLIBC_2.40 _ZGVnN2v_sinf F +GLIBC_2.40 _ZGVnN2v_tan F +GLIBC_2.40 _ZGVnN2v_tanf F +GLIBC_2.40 _ZGVnN2vv_atan2 F +GLIBC_2.40 _ZGVnN2vv_atan2f F +GLIBC_2.40 _ZGVnN4v_acosf F +GLIBC_2.40 _ZGVnN4v_asinf F +GLIBC_2.40 _ZGVnN4v_atanf F +GLIBC_2.40 _ZGVnN4v_cosf F +GLIBC_2.40 _ZGVnN4v_exp10f F +GLIBC_2.40 _ZGVnN4v_exp2f F +GLIBC_2.40 _ZGVnN4v_expf F +GLIBC_2.40 _ZGVnN4v_expm1f F +GLIBC_2.40 _ZGVnN4v_log10f F +GLIBC_2.40 _ZGVnN4v_log1pf F +GLIBC_2.40 _ZGVnN4v_log2f F +GLIBC_2.40 _ZGVnN4v_logf F +GLIBC_2.40 _ZGVnN4v_sinf F +GLIBC_2.40 _ZGVnN4v_tanf F +GLIBC_2.40 _ZGVnN4vv_atan2f F +GLIBC_2.40 _ZGVsMxv_acos F +GLIBC_2.40 _ZGVsMxv_acosf F +GLIBC_2.40 _ZGVsMxv_asin F +GLIBC_2.40 _ZGVsMxv_asinf F +GLIBC_2.40 _ZGVsMxv_atan F +GLIBC_2.40 _ZGVsMxv_atanf F +GLIBC_2.40 _ZGVsMxv_cos F +GLIBC_2.40 _ZGVsMxv_cosf F +GLIBC_2.40 _ZGVsMxv_exp F +GLIBC_2.40 _ZGVsMxv_exp10 F +GLIBC_2.40 _ZGVsMxv_exp10f F +GLIBC_2.40 _ZGVsMxv_exp2 F +GLIBC_2.40 _ZGVsMxv_exp2f F +GLIBC_2.40 _ZGVsMxv_expf F +GLIBC_2.40 _ZGVsMxv_expm1 F +GLIBC_2.40 _ZGVsMxv_expm1f F +GLIBC_2.40 _ZGVsMxv_log F +GLIBC_2.40 _ZGVsMxv_log10 F +GLIBC_2.40 _ZGVsMxv_log10f F +GLIBC_2.40 _ZGVsMxv_log1p F +GLIBC_2.40 _ZGVsMxv_log1pf F +GLIBC_2.40 _ZGVsMxv_log2 F +GLIBC_2.40 _ZGVsMxv_log2f F +GLIBC_2.40 _ZGVsMxv_logf F +GLIBC_2.40 _ZGVsMxv_sin F +GLIBC_2.40 _ZGVsMxv_sinf F +GLIBC_2.40 _ZGVsMxv_tan F +GLIBC_2.40 _ZGVsMxv_tanf F +GLIBC_2.40 _ZGVsMxvv_atan2 F +GLIBC_2.40 _ZGVsMxvv_atan2f F diff --git a/sysdeps/mach/hurd/aarch64/libpthread.abilist b/sysdeps/mach/hurd/aarch64/libpthread.abilist new file mode 100644 index 00000000..326428fc --- /dev/null +++ b/sysdeps/mach/hurd/aarch64/libpthread.abilist @@ -0,0 +1,165 @@ +GLIBC_2.40 _IO_flockfile F +GLIBC_2.40 _IO_ftrylockfile F +GLIBC_2.40 _IO_funlockfile F +GLIBC_2.40 __errno_location F +GLIBC_2.40 __h_errno_location F +GLIBC_2.40 __mutex_lock_solid F +GLIBC_2.40 __mutex_unlock_solid F +GLIBC_2.40 __pthread_get_cleanup_stack F +GLIBC_2.40 __pthread_key_create F +GLIBC_2.40 __pthread_kill F +GLIBC_2.40 __pthread_mutex_transfer_np F +GLIBC_2.40 __pthread_spin_destroy F +GLIBC_2.40 __pthread_spin_init F +GLIBC_2.40 __pthread_spin_lock F +GLIBC_2.40 __pthread_spin_trylock F +GLIBC_2.40 __pthread_spin_unlock F +GLIBC_2.40 _cthreads_flockfile F +GLIBC_2.40 _cthreads_ftrylockfile F +GLIBC_2.40 _cthreads_funlockfile F +GLIBC_2.40 _pthread_spin_lock F +GLIBC_2.40 call_once F +GLIBC_2.40 cnd_broadcast F +GLIBC_2.40 cnd_destroy F +GLIBC_2.40 cnd_init F +GLIBC_2.40 cnd_signal F +GLIBC_2.40 cnd_timedwait F +GLIBC_2.40 cnd_wait F +GLIBC_2.40 cthread_detach F +GLIBC_2.40 cthread_fork F +GLIBC_2.40 cthread_getspecific F +GLIBC_2.40 cthread_keycreate F +GLIBC_2.40 cthread_setspecific F +GLIBC_2.40 flockfile F +GLIBC_2.40 ftrylockfile F +GLIBC_2.40 funlockfile F +GLIBC_2.40 mtx_destroy F +GLIBC_2.40 mtx_init F +GLIBC_2.40 mtx_lock F +GLIBC_2.40 mtx_timedlock F +GLIBC_2.40 mtx_trylock F +GLIBC_2.40 mtx_unlock F +GLIBC_2.40 pthread_attr_destroy F +GLIBC_2.40 pthread_attr_getguardsize F +GLIBC_2.40 pthread_attr_getscope F +GLIBC_2.40 pthread_attr_getstack F +GLIBC_2.40 pthread_attr_getstackaddr F +GLIBC_2.40 pthread_attr_getstacksize F +GLIBC_2.40 pthread_attr_init F +GLIBC_2.40 pthread_attr_setguardsize F +GLIBC_2.40 pthread_attr_setschedparam F +GLIBC_2.40 pthread_attr_setscope F +GLIBC_2.40 pthread_attr_setstack F +GLIBC_2.40 pthread_attr_setstackaddr F +GLIBC_2.40 pthread_attr_setstacksize F +GLIBC_2.40 pthread_barrier_destroy F +GLIBC_2.40 pthread_barrier_init F +GLIBC_2.40 pthread_barrier_wait F +GLIBC_2.40 pthread_barrierattr_destroy F +GLIBC_2.40 pthread_barrierattr_getpshared F +GLIBC_2.40 pthread_barrierattr_init F +GLIBC_2.40 pthread_barrierattr_setpshared F +GLIBC_2.40 pthread_cancel F +GLIBC_2.40 pthread_clockjoin_np F +GLIBC_2.40 pthread_cond_broadcast F +GLIBC_2.40 pthread_cond_clockwait F +GLIBC_2.40 pthread_cond_destroy F +GLIBC_2.40 pthread_cond_init F +GLIBC_2.40 pthread_cond_signal F +GLIBC_2.40 pthread_cond_timedwait F +GLIBC_2.40 pthread_cond_wait F +GLIBC_2.40 pthread_condattr_destroy F +GLIBC_2.40 pthread_condattr_getclock F +GLIBC_2.40 pthread_condattr_getpshared F +GLIBC_2.40 pthread_condattr_init F +GLIBC_2.40 pthread_condattr_setclock F +GLIBC_2.40 pthread_condattr_setpshared F +GLIBC_2.40 pthread_create F +GLIBC_2.40 pthread_detach F +GLIBC_2.40 pthread_exit F +GLIBC_2.40 pthread_getattr_np F +GLIBC_2.40 pthread_getconcurrency F +GLIBC_2.40 pthread_getcpuclockid F +GLIBC_2.40 pthread_getspecific F +GLIBC_2.40 pthread_hurd_cond_timedwait_np F +GLIBC_2.40 pthread_hurd_cond_wait_np F +GLIBC_2.40 pthread_join F +GLIBC_2.40 pthread_key_create F +GLIBC_2.40 pthread_key_delete F +GLIBC_2.40 pthread_kill F +GLIBC_2.40 pthread_mutex_clocklock F +GLIBC_2.40 pthread_mutex_consistent F +GLIBC_2.40 pthread_mutex_consistent_np F +GLIBC_2.40 pthread_mutex_destroy F +GLIBC_2.40 pthread_mutex_getprioceiling F +GLIBC_2.40 pthread_mutex_init F +GLIBC_2.40 pthread_mutex_lock F +GLIBC_2.40 pthread_mutex_setprioceiling F +GLIBC_2.40 pthread_mutex_timedlock F +GLIBC_2.40 pthread_mutex_transfer_np F +GLIBC_2.40 pthread_mutex_trylock F +GLIBC_2.40 pthread_mutex_unlock F +GLIBC_2.40 pthread_mutexattr_destroy F +GLIBC_2.40 pthread_mutexattr_getprioceiling F +GLIBC_2.40 pthread_mutexattr_getprotocol F +GLIBC_2.40 pthread_mutexattr_getpshared F +GLIBC_2.40 pthread_mutexattr_getrobust F +GLIBC_2.40 pthread_mutexattr_getrobust_np F +GLIBC_2.40 pthread_mutexattr_gettype F +GLIBC_2.40 pthread_mutexattr_init F +GLIBC_2.40 pthread_mutexattr_setprioceiling F +GLIBC_2.40 pthread_mutexattr_setprotocol F +GLIBC_2.40 pthread_mutexattr_setpshared F +GLIBC_2.40 pthread_mutexattr_setrobust F +GLIBC_2.40 pthread_mutexattr_setrobust_np F +GLIBC_2.40 pthread_mutexattr_settype F +GLIBC_2.40 pthread_once F +GLIBC_2.40 pthread_rwlock_clockrdlock F +GLIBC_2.40 pthread_rwlock_clockwrlock F +GLIBC_2.40 pthread_rwlock_destroy F +GLIBC_2.40 pthread_rwlock_init F +GLIBC_2.40 pthread_rwlock_rdlock F +GLIBC_2.40 pthread_rwlock_timedrdlock F +GLIBC_2.40 pthread_rwlock_timedwrlock F +GLIBC_2.40 pthread_rwlock_tryrdlock F +GLIBC_2.40 pthread_rwlock_trywrlock F +GLIBC_2.40 pthread_rwlock_unlock F +GLIBC_2.40 pthread_rwlock_wrlock F +GLIBC_2.40 pthread_rwlockattr_destroy F +GLIBC_2.40 pthread_rwlockattr_getpshared F +GLIBC_2.40 pthread_rwlockattr_init F +GLIBC_2.40 pthread_rwlockattr_setpshared F +GLIBC_2.40 pthread_setcancelstate F +GLIBC_2.40 pthread_setcanceltype F +GLIBC_2.40 pthread_setconcurrency F +GLIBC_2.40 pthread_setschedprio F +GLIBC_2.40 pthread_setspecific F +GLIBC_2.40 pthread_sigmask F +GLIBC_2.40 pthread_spin_destroy F +GLIBC_2.40 pthread_spin_init F +GLIBC_2.40 pthread_spin_lock F +GLIBC_2.40 pthread_spin_trylock F +GLIBC_2.40 pthread_spin_unlock F +GLIBC_2.40 pthread_testcancel F +GLIBC_2.40 pthread_timedjoin_np F +GLIBC_2.40 pthread_tryjoin_np F +GLIBC_2.40 pthread_yield F +GLIBC_2.40 sem_clockwait F +GLIBC_2.40 sem_close F +GLIBC_2.40 sem_destroy F +GLIBC_2.40 sem_getvalue F +GLIBC_2.40 sem_init F +GLIBC_2.40 sem_open F +GLIBC_2.40 sem_post F +GLIBC_2.40 sem_timedwait F +GLIBC_2.40 sem_trywait F +GLIBC_2.40 sem_unlink F +GLIBC_2.40 sem_wait F +GLIBC_2.40 thrd_create F +GLIBC_2.40 thrd_detach F +GLIBC_2.40 thrd_exit F +GLIBC_2.40 thrd_join F +GLIBC_2.40 tss_create F +GLIBC_2.40 tss_delete F +GLIBC_2.40 tss_get F +GLIBC_2.40 tss_set F diff --git a/sysdeps/mach/hurd/aarch64/libresolv.abilist b/sysdeps/mach/hurd/aarch64/libresolv.abilist new file mode 100644 index 00000000..86225345 --- /dev/null +++ b/sysdeps/mach/hurd/aarch64/libresolv.abilist @@ -0,0 +1,55 @@ +GLIBC_2.40 __b64_ntop F +GLIBC_2.40 __b64_pton F +GLIBC_2.40 __dn_count_labels F +GLIBC_2.40 __fp_nquery F +GLIBC_2.40 __fp_query F +GLIBC_2.40 __fp_resstat F +GLIBC_2.40 __hostalias F +GLIBC_2.40 __loc_aton F +GLIBC_2.40 __loc_ntoa F +GLIBC_2.40 __p_cdname F +GLIBC_2.40 __p_cdnname F +GLIBC_2.40 __p_class F +GLIBC_2.40 __p_class_syms D 0xa8 +GLIBC_2.40 __p_fqname F +GLIBC_2.40 __p_fqnname F +GLIBC_2.40 __p_option F +GLIBC_2.40 __p_query F +GLIBC_2.40 __p_rcode F +GLIBC_2.40 __p_time F +GLIBC_2.40 __p_type F +GLIBC_2.40 __p_type_syms D 0x450 +GLIBC_2.40 __putlong F +GLIBC_2.40 __putshort F +GLIBC_2.40 __res_close F +GLIBC_2.40 __res_hostalias F +GLIBC_2.40 __res_isourserver F +GLIBC_2.40 __res_nameinquery F +GLIBC_2.40 __res_queriesmatch F +GLIBC_2.40 __sym_ntop F +GLIBC_2.40 __sym_ntos F +GLIBC_2.40 __sym_ston F +GLIBC_2.40 _getlong F +GLIBC_2.40 _getshort F +GLIBC_2.40 inet_net_ntop F +GLIBC_2.40 inet_net_pton F +GLIBC_2.40 inet_neta F +GLIBC_2.40 ns_datetosecs F +GLIBC_2.40 ns_format_ttl F +GLIBC_2.40 ns_get16 F +GLIBC_2.40 ns_get32 F +GLIBC_2.40 ns_initparse F +GLIBC_2.40 ns_makecanon F +GLIBC_2.40 ns_msg_getflag F +GLIBC_2.40 ns_name_ntol F +GLIBC_2.40 ns_name_rollback F +GLIBC_2.40 ns_parse_ttl F +GLIBC_2.40 ns_parserr F +GLIBC_2.40 ns_put16 F +GLIBC_2.40 ns_put32 F +GLIBC_2.40 ns_samedomain F +GLIBC_2.40 ns_samename F +GLIBC_2.40 ns_skiprr F +GLIBC_2.40 ns_sprintrr F +GLIBC_2.40 ns_sprintrrf F +GLIBC_2.40 ns_subdomain F diff --git a/sysdeps/mach/hurd/aarch64/librt.abilist b/sysdeps/mach/hurd/aarch64/librt.abilist new file mode 100644 index 00000000..8925aca1 --- /dev/null +++ b/sysdeps/mach/hurd/aarch64/librt.abilist @@ -0,0 +1,33 @@ +GLIBC_2.40 __mq_open_2 F +GLIBC_2.40 aio_cancel F +GLIBC_2.40 aio_cancel64 F +GLIBC_2.40 aio_error F +GLIBC_2.40 aio_error64 F +GLIBC_2.40 aio_fsync F +GLIBC_2.40 aio_fsync64 F +GLIBC_2.40 aio_init F +GLIBC_2.40 aio_read F +GLIBC_2.40 aio_read64 F +GLIBC_2.40 aio_return F +GLIBC_2.40 aio_return64 F +GLIBC_2.40 aio_suspend F +GLIBC_2.40 aio_suspend64 F +GLIBC_2.40 aio_write F +GLIBC_2.40 aio_write64 F +GLIBC_2.40 lio_listio F +GLIBC_2.40 lio_listio64 F +GLIBC_2.40 mq_close F +GLIBC_2.40 mq_getattr F +GLIBC_2.40 mq_notify F +GLIBC_2.40 mq_open F +GLIBC_2.40 mq_receive F +GLIBC_2.40 mq_send F +GLIBC_2.40 mq_setattr F +GLIBC_2.40 mq_timedreceive F +GLIBC_2.40 mq_timedsend F +GLIBC_2.40 mq_unlink F +GLIBC_2.40 timer_create F +GLIBC_2.40 timer_delete F +GLIBC_2.40 timer_getoverrun F +GLIBC_2.40 timer_gettime F +GLIBC_2.40 timer_settime F