From patchwork Fri Dec 10 23:34:44 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stafford Horne X-Patchwork-Id: 48815 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id DE0533857C76 for ; Fri, 10 Dec 2021 23:36:11 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org DE0533857C76 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1639179371; bh=r1UqO0prb7wO6SCP2V1tDw+iVCN73ZgBpaPz3KmcV6k=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=dMnwkK7LaKFHsC/i2fqRNue8Ep6dzqJVPhC5zjONHZJhXN5+eyKRcvKirtt1WJRQc GXGgqKnYpqyPk5Rjzb8r+tKzyTOtj1tbbxJeOKA6wFn0vfen0mV0FvUcreYNInh8Lc OBNx60KIaoyc6/ADoPBy8zsTRE6gLm8cqdIvHI30= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-pf1-x42d.google.com (mail-pf1-x42d.google.com [IPv6:2607:f8b0:4864:20::42d]) by sourceware.org (Postfix) with ESMTPS id 6477B3858031 for ; Fri, 10 Dec 2021 23:35:08 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 6477B3858031 Received: by mail-pf1-x42d.google.com with SMTP id k64so9754891pfd.11 for ; Fri, 10 Dec 2021 15:35:08 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=r1UqO0prb7wO6SCP2V1tDw+iVCN73ZgBpaPz3KmcV6k=; b=DAUz9GZOtYaGfkMdPmkjCsBZ9S5K2yQgO1uPb23zKndq7tUCzYcO3XOrhOn23s43KQ 4fVBB9c2Y6go8IUefd0lf7kN/piJasAnhMACmWpmrMVYk+UWnTF0ipSz89L0TJBYNrn6 uER/T9YmAVNxZUjo6v8DBPIGTr6ibITq5p8st1X2a048gneIdhPkXtE/W2MiO6r+N9XB oo/O/hFtQMyGi81AaBpH/P1PtivlI0+jbilIjJ94MsZeeQEYc/AKa+c3s+yy/MUP1Inz khJETuO6IvVy0sewda4/y6pULOMvyKCW2JmBcNuLScAcjTcDjF7IqDbbCImp4zpqzNGR T7Cg== X-Gm-Message-State: AOAM533t5R7PCqbAxYm2t99jmJgIfkFmGqk2TnwTJqhIE3c/b41psYdV 5CNVXD68QbGiOnvKbi/3GJ3qrbBTDZU= X-Google-Smtp-Source: ABdhPJzlaR5ShFcHd2dPy9HEk6hSA05LoKjr5Jx27swBV9kStnQQp5UXBusn4A7REuH0CB9tooae0Q== X-Received: by 2002:a63:be4f:: with SMTP id g15mr40980943pgo.417.1639179307175; Fri, 10 Dec 2021 15:35:07 -0800 (PST) Received: from localhost ([2409:10:24a0:4700:e8ad:216a:2a9d:6d0c]) by smtp.gmail.com with ESMTPSA id p14sm89012pjl.32.2021.12.10.15.35.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Dec 2021 15:35:06 -0800 (PST) To: GLIBC patches Subject: [PATCH v3 01/13] elf: Add reloc for OpenRISC Date: Sat, 11 Dec 2021 08:34:44 +0900 Message-Id: <20211210233456.4146479-2-shorne@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211210233456.4146479-1-shorne@gmail.com> References: <20211210233456.4146479-1-shorne@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-10.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Stafford Horne via Libc-alpha From: Stafford Horne Reply-To: Stafford Horne Cc: Openrisc Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" --- elf/elf.h | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) Reviewed-by: Adhemerval Zanella diff --git a/elf/elf.h b/elf/elf.h index baa6c6693e..18458e4d04 100644 --- a/elf/elf.h +++ b/elf/elf.h @@ -4125,4 +4125,41 @@ enum #define R_ARC_TLS_LE_S9 0x4a #define R_ARC_TLS_LE_32 0x4b +/* OpenRISC 1000 specific relocs. */ +#define R_OR1K_NONE 0 +#define R_OR1K_32 1 +#define R_OR1K_16 2 +#define R_OR1K_8 3 +#define R_OR1K_LO_16_IN_INSN 4 +#define R_OR1K_HI_16_IN_INSN 5 +#define R_OR1K_INSN_REL_26 6 +#define R_OR1K_GNU_VTENTRY 7 +#define R_OR1K_GNU_VTINHERIT 8 +#define R_OR1K_32_PCREL 9 +#define R_OR1K_16_PCREL 10 +#define R_OR1K_8_PCREL 11 +#define R_OR1K_GOTPC_HI16 12 +#define R_OR1K_GOTPC_LO16 13 +#define R_OR1K_GOT16 14 +#define R_OR1K_PLT26 15 +#define R_OR1K_GOTOFF_HI16 16 +#define R_OR1K_GOTOFF_LO16 17 +#define R_OR1K_COPY 18 +#define R_OR1K_GLOB_DAT 19 +#define R_OR1K_JMP_SLOT 20 +#define R_OR1K_RELATIVE 21 +#define R_OR1K_TLS_GD_HI16 22 +#define R_OR1K_TLS_GD_LO16 23 +#define R_OR1K_TLS_LDM_HI16 24 +#define R_OR1K_TLS_LDM_LO16 25 +#define R_OR1K_TLS_LDO_HI16 26 +#define R_OR1K_TLS_LDO_LO16 27 +#define R_OR1K_TLS_IE_HI16 28 +#define R_OR1K_TLS_IE_LO16 29 +#define R_OR1K_TLS_LE_HI16 30 +#define R_OR1K_TLS_LE_LO16 31 +#define R_OR1K_TLS_TPOFF 32 +#define R_OR1K_TLS_DTPOFF 33 +#define R_OR1K_TLS_DTPMOD 34 + #endif /* elf.h */ From patchwork Fri Dec 10 23:34:45 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stafford Horne X-Patchwork-Id: 48816 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 11D663857C77 for ; Fri, 10 Dec 2021 23:36:54 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 11D663857C77 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1639179414; bh=X8GsNqbjvYHQu72z/T07/fwt7FqlbtOKQz+GJxUDBeQ=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=tSp49I2rFDcE3/yV3iDv1ojzstd5+CviXjOqGXbu/TzflmkqROeoazghOZnyGOd8g nC25ZE0iLFPQ72sQUT92Ehns+M4dGaBEcqD/AKvYYFwpjbzg1taa+d0V/gAgaD7kPG pj9MHxQ+Zl/yu8VD2X6XDhQf/qxG/7N8XLqNt09c= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-pj1-x102c.google.com (mail-pj1-x102c.google.com [IPv6:2607:f8b0:4864:20::102c]) by sourceware.org (Postfix) with ESMTPS id 5ED4C3857C66 for ; Fri, 10 Dec 2021 23:35:11 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 5ED4C3857C66 Received: by mail-pj1-x102c.google.com with SMTP id f18-20020a17090aa79200b001ad9cb23022so8785711pjq.4 for ; Fri, 10 Dec 2021 15:35:11 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=X8GsNqbjvYHQu72z/T07/fwt7FqlbtOKQz+GJxUDBeQ=; b=YqxyWKgV807DijENAHOp6btM6YEObrulc37lXsqlvYolKTM/EaongdolWduRBcvyw1 WgJK57QLV1FL14vE7pbeV2x0WGaGYGe60U3BJsYKNvIBvJ7BuD4OWPUdHiF5FiacBeVz IBQPrJtKJAmBKeGu1rF/SjtK7vfn+8o3u3AK6AIr1mIk5AA9dK1ZeRYDzgY7rHh1aUhQ y15GUVuOW1k5togh/B2uPMyqzd4QGaWQj6wYRAP5+rcORrdOkrSYYdA0RutzzYGKI7IC GYwMSsjg1y1kjmU1AqVZMGrbaAEmq9k4ypqPYvr9zSPGvkcO3tt242r6lSDAEYH3zX0d SghA== X-Gm-Message-State: AOAM532aS9qEgpDEuFa+V2RtCpEaq6tU6w0ynK+WeEM7YQ6JnYcKGgTQ 0H0iWZw2dbHfCihbKVtX0PJQsLcuOTE= X-Google-Smtp-Source: ABdhPJw8mWq+bh6wE3oamKdXoZGPBYmhlW3Lv+9JgsfcjiKz95cyQpgVK7tdILzO8z4XHke+ftcaUg== X-Received: by 2002:a17:902:ab94:b0:143:beb5:b6a7 with SMTP id f20-20020a170902ab9400b00143beb5b6a7mr80650768plr.30.1639179310185; Fri, 10 Dec 2021 15:35:10 -0800 (PST) Received: from localhost ([2409:10:24a0:4700:e8ad:216a:2a9d:6d0c]) by smtp.gmail.com with ESMTPSA id nn4sm88646pjb.38.2021.12.10.15.35.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Dec 2021 15:35:09 -0800 (PST) To: GLIBC patches Subject: [PATCH v3 02/13] linux/syscalls: Add or1k_atomic syscall for OpenRISC Date: Sat, 11 Dec 2021 08:34:45 +0900 Message-Id: <20211210233456.4146479-3-shorne@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211210233456.4146479-1-shorne@gmail.com> References: <20211210233456.4146479-1-shorne@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-10.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Stafford Horne via Libc-alpha From: Stafford Horne Reply-To: Stafford Horne Cc: Openrisc Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" --- sysdeps/unix/sysv/linux/syscall-names.list | 1 + 1 file changed, 1 insertion(+) Reviewed-by: Adhemerval Zanella diff --git a/sysdeps/unix/sysv/linux/syscall-names.list b/sysdeps/unix/sysv/linux/syscall-names.list index 1a74d090b7..a72dee6275 100644 --- a/sysdeps/unix/sysv/linux/syscall-names.list +++ b/sysdeps/unix/sysv/linux/syscall-names.list @@ -304,6 +304,7 @@ open_by_handle_at open_tree openat openat2 +or1k_atomic osf_adjtime osf_afs_syscall osf_alt_plock From patchwork Fri Dec 10 23:34:46 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stafford Horne X-Patchwork-Id: 48817 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 880393857803 for ; Fri, 10 Dec 2021 23:37:41 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 880393857803 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1639179461; bh=YqOZ/CYELAPRclbZYptoKR6NlKu2839LqE4wp/DvcVQ=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=rdUAus+2jQRevn3fW6/rGUV94SfBeQM5eJEAMvgwfudRjE+scEvnlxjfg8hgPCuXD 4qHAyVBO29V0/Yd+jmDJ4TVk8wspkEXXnZsSuQpAMjcFOCpmZ8nezKZV6o6a98j5Bd GvJRKPELAekm84BI3JF1E0vwYgTwxu6Y2+nLs3kY= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-pg1-x530.google.com (mail-pg1-x530.google.com [IPv6:2607:f8b0:4864:20::530]) by sourceware.org (Postfix) with ESMTPS id 19EF2385803A for ; Fri, 10 Dec 2021 23:35:15 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 19EF2385803A Received: by mail-pg1-x530.google.com with SMTP id k4so9318374pgb.8 for ; Fri, 10 Dec 2021 15:35:15 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=YqOZ/CYELAPRclbZYptoKR6NlKu2839LqE4wp/DvcVQ=; b=ln28Ewyyghmm3oVfMp72q7MdefNF8ZqZgPmpPXTRQRmRfE9es3AVTk358qqnTfpOhn +H9IiiHFVTrutRlQ+sidlkiZ62rlj959lHkmMljtN+aH/PUCUV4zg6rG8krYmUxahLg+ 2O2FxS9bIcxYPS/vE0fezU7QHT8Fw8RvocV+RURXaZJdE3ybkC7juG9bkATfbVTQEGwl qBhjtZ5iInSSdSVHvpwciGMDpB0ep3SKYSJpSFm4n555aQqghDRo8Qe/8KIo8kQnHGz2 RJESLczDboKi42sqKsNywR69DgUu35O/TFzgZTO0JjfJF/boBJG3lcLanykPyk1T2f5g xU7w== X-Gm-Message-State: AOAM530fp5mzrrQ/jHqb7Al0+YXIqQTtFBqojsGqdldt1WAhibfy7tY7 XVNReNdFAbRC1zeY2Vs50fKF0+hhVL4= X-Google-Smtp-Source: ABdhPJxIdhlPi5pvkP3oGDa6Iavi/DyooSoxYNenFmBRKh3aFlj8jYiNHY7qzk6k4GE2h+g3EsHtyQ== X-Received: by 2002:a05:6a00:10cf:b0:4a3:124d:bb81 with SMTP id d15-20020a056a0010cf00b004a3124dbb81mr21180361pfu.75.1639179313473; Fri, 10 Dec 2021 15:35:13 -0800 (PST) Received: from localhost ([2409:10:24a0:4700:e8ad:216a:2a9d:6d0c]) by smtp.gmail.com with ESMTPSA id h186sm4372106pfg.64.2021.12.10.15.35.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Dec 2021 15:35:12 -0800 (PST) To: GLIBC patches Subject: [PATCH v3 03/13] or1k: ABI Implementation Date: Sat, 11 Dec 2021 08:34:46 +0900 Message-Id: <20211210233456.4146479-4-shorne@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211210233456.4146479-1-shorne@gmail.com> References: <20211210233456.4146479-1-shorne@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-8.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_SHORT, KAM_STOCKGEN, RCVD_IN_DNSWL_NONE, SCC_10_SHORT_WORD_LINES, SCC_5_SHORT_WORD_LINES, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Stafford Horne via Libc-alpha From: Stafford Horne Reply-To: Stafford Horne Cc: Openrisc Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" This code deals with the OpenRISC ABI. --- sysdeps/or1k/__longjmp.S | 55 ++++++++++++++++++++++ sysdeps/or1k/bits/endianness.h | 11 +++++ sysdeps/or1k/bits/setjmp.h | 32 +++++++++++++ sysdeps/or1k/bsd-_setjmp.S | 1 + sysdeps/or1k/bsd-setjmp.S | 1 + sysdeps/or1k/dl-trampoline.S | 79 ++++++++++++++++++++++++++++++++ sysdeps/or1k/jmpbuf-offsets.h | 23 ++++++++++ sysdeps/or1k/jmpbuf-unwind.h | 36 +++++++++++++++ sysdeps/or1k/machine-gmon.h | 35 ++++++++++++++ sysdeps/or1k/memusage.h | 21 +++++++++ sysdeps/or1k/setjmp.S | 56 +++++++++++++++++++++++ sysdeps/or1k/sysdep.h | 83 ++++++++++++++++++++++++++++++++++ 12 files changed, 433 insertions(+) create mode 100644 sysdeps/or1k/__longjmp.S create mode 100644 sysdeps/or1k/bits/endianness.h create mode 100644 sysdeps/or1k/bits/setjmp.h create mode 100644 sysdeps/or1k/bsd-_setjmp.S create mode 100644 sysdeps/or1k/bsd-setjmp.S create mode 100644 sysdeps/or1k/dl-trampoline.S create mode 100644 sysdeps/or1k/jmpbuf-offsets.h create mode 100644 sysdeps/or1k/jmpbuf-unwind.h create mode 100644 sysdeps/or1k/machine-gmon.h create mode 100644 sysdeps/or1k/memusage.h create mode 100644 sysdeps/or1k/setjmp.S create mode 100644 sysdeps/or1k/sysdep.h diff --git a/sysdeps/or1k/__longjmp.S b/sysdeps/or1k/__longjmp.S new file mode 100644 index 0000000000..f8aa5dda8f --- /dev/null +++ b/sysdeps/or1k/__longjmp.S @@ -0,0 +1,55 @@ +/* longjmp, OpenRISC version. + Copyright (C) 2021 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, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include +#define _ASM +#define _SETJMP_H +#include + + .globl __longjmp; + .type __longjmp, @function; + .align 4; + +__longjmp: + l.lwz r1, 0(r3) + l.lwz r2, 4(r3) + + /* if r4 is 0, something wrong, so set it to 1 */ + l.sfeqi r4, 0x0 + l.bnf 1f /* r4 != 0, longjmp value sensible */ + l.nop + l.ori r4, r0, 0x1 /* make nonzero */ +1: + l.addi r11, r4, 0 + l.lwz r9, 8(r3) + l.lwz r10, 12(r3) + l.lwz r14, 16(r3) + l.lwz r16, 20(r3) + l.lwz r18, 24(r3) + l.lwz r20, 28(r3) + l.lwz r22, 32(r3) + l.lwz r24, 36(r3) + l.lwz r26, 40(r3) + l.lwz r28, 44(r3) + l.lwz r30, 48(r3) + l.jr r9 + l.nop + .size __longjmp, . - __longjmp + +libc_hidden_def(__longjmp) diff --git a/sysdeps/or1k/bits/endianness.h b/sysdeps/or1k/bits/endianness.h new file mode 100644 index 0000000000..7b61d8adb7 --- /dev/null +++ b/sysdeps/or1k/bits/endianness.h @@ -0,0 +1,11 @@ +#ifndef _BITS_ENDIANNESS_H +#define _BITS_ENDIANNESS_H 1 + +#ifndef _BITS_ENDIAN_H +# error "Never use directly; include instead." +#endif + +/* OpenRISC is big-endian. */ +#define __BYTE_ORDER __BIG_ENDIAN + +#endif /* bits/endianness.h */ diff --git a/sysdeps/or1k/bits/setjmp.h b/sysdeps/or1k/bits/setjmp.h new file mode 100644 index 0000000000..dac511c904 --- /dev/null +++ b/sysdeps/or1k/bits/setjmp.h @@ -0,0 +1,32 @@ +/* Define the machine-dependent type `jmp_buf'. OpenRISC version. + Copyright (C) 2021 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, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + + +#ifndef _OR1K_BITS_SETJMP_H +#define _OR1K_BITS_SETJMP_H 1 + +#if !defined _SETJMP_H && !defined _PTHREAD_H +# error "Never include directly; use instead." +#endif + +#ifndef _ASM +typedef long int __jmp_buf[13]; +#endif + +#endif /* _OR1K_BITS_SETJMP_H */ diff --git a/sysdeps/or1k/bsd-_setjmp.S b/sysdeps/or1k/bsd-_setjmp.S new file mode 100644 index 0000000000..4e6a2da560 --- /dev/null +++ b/sysdeps/or1k/bsd-_setjmp.S @@ -0,0 +1 @@ +/* _setjmp is in setjmp.S */ diff --git a/sysdeps/or1k/bsd-setjmp.S b/sysdeps/or1k/bsd-setjmp.S new file mode 100644 index 0000000000..1da848d2f1 --- /dev/null +++ b/sysdeps/or1k/bsd-setjmp.S @@ -0,0 +1 @@ +/* setjmp is in setjmp.S */ diff --git a/sysdeps/or1k/dl-trampoline.S b/sysdeps/or1k/dl-trampoline.S new file mode 100644 index 0000000000..9ebc68f525 --- /dev/null +++ b/sysdeps/or1k/dl-trampoline.S @@ -0,0 +1,79 @@ +/* Machine-dependent ELF runtime symbol resolution, OpenRISC version. + Copyright (C) 2021 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, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +/* This code is used to call _dl_linux_resolver (dl-runtime.c). + + We assume that R11 contains the relocation offset and R12 contains + link_map (_DYNAMIC). This must be consistent with the JUMP_SLOT + layout generated by binutils. */ + + .section .text + .align 4 + + .global _dl_runtime_resolve + .type _dl_runtime_resolve, @function + +_dl_runtime_resolve: + .cfi_startproc + l.sw -4(r1), r9 + l.sw -8(r1), r1 + + /* save function arguments. */ + l.sw -12(r1), r3 + l.sw -16(r1), r4 + l.sw -20(r1), r5 + l.sw -24(r1), r6 + l.sw -28(r1), r7 + l.sw -32(r1), r8 + + .cfi_offset 9, -4 + .cfi_offset 1, -8 + .cfi_offset 3, -12 + .cfi_offset 4, -16 + .cfi_offset 5, -20 + .cfi_offset 6, -24 + .cfi_offset 7, -28 + .cfi_offset 8, -32 + + l.addi r1,r1, -32 + .cfi_def_cfa_offset 32 + + l.ori r3, r12, 0 + l.ori r4, r11, 0 + + l.jal _dl_fixup + l.nop + + /* Restore function arguments. */ + l.addi r1,r1, 32 + l.lwz r8, -32(r1) + l.lwz r7, -28(r1) + l.lwz r6, -24(r1) + l.lwz r5, -20(r1) + l.lwz r4, -16(r1) + l.lwz r3, -12(r1) + + /* restore return address. */ + l.lwz r9, -4(r1) + + l.jr r11 + l.nop + + .cfi_endproc + .size _dl_runtime_resolve, . - _dl_runtime_resolve diff --git a/sysdeps/or1k/jmpbuf-offsets.h b/sysdeps/or1k/jmpbuf-offsets.h new file mode 100644 index 0000000000..e33105cc03 --- /dev/null +++ b/sysdeps/or1k/jmpbuf-offsets.h @@ -0,0 +1,23 @@ +/* Private macros for accessing __jmp_buf contents. OpenRISC version. + Copyright (C) 2021 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 + . */ + +#define __JMP_BUF_SP 0 + +/* Helper for generic function ____longjmp_chk. */ +#define JB_FRAME_ADDRESS(buf) \ + ((void *) (unsigned long) (buf[__JMP_BUF_SP])) diff --git a/sysdeps/or1k/jmpbuf-unwind.h b/sysdeps/or1k/jmpbuf-unwind.h new file mode 100644 index 0000000000..6710dea989 --- /dev/null +++ b/sysdeps/or1k/jmpbuf-unwind.h @@ -0,0 +1,36 @@ +/* Macros to help frame unwinding using jmpbuf. OpenRISC version. + Copyright (C) 2021 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 + +/* Test if longjmp to JMPBUF would unwind the frame + containing a local variable at ADDRESS. */ +#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \ + ((void *) (address) < (void *) demangle (jmpbuf[__JMP_BUF_SP])) + +#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \ + _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj) + +#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ + ((uintptr_t) (_address) - (_adj) < (uintptr_t) (_jmpbuf)[__JMP_BUF_SP] - (_adj)) + +/* We use the normal longjmp for unwinding. */ +#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val) diff --git a/sysdeps/or1k/machine-gmon.h b/sysdeps/or1k/machine-gmon.h new file mode 100644 index 0000000000..7152105eec --- /dev/null +++ b/sysdeps/or1k/machine-gmon.h @@ -0,0 +1,35 @@ +/* Machine-dependent definitions for profiling support. OpenRISC version. + Copyright (C) 2021 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 + +#define _MCOUNT_DECL(frompc, selfpc) \ +static void \ +__mcount_internal (unsigned long int frompc, unsigned long int selfpc) + +/* This is very simple as gcc does all the heavy lifting at the _mcount + call site. GCC passes in the return address of the function calling + _mcount. */ + +#define MCOUNT \ +void \ +_mcount (void *frompc) \ +{ \ + __mcount_internal ((unsigned long int) frompc, \ + (unsigned long int) __builtin_return_address (0)); \ +} diff --git a/sysdeps/or1k/memusage.h b/sysdeps/or1k/memusage.h new file mode 100644 index 0000000000..a62da17e61 --- /dev/null +++ b/sysdeps/or1k/memusage.h @@ -0,0 +1,21 @@ +/* Definitions for memory usage profiling. OpenRISC version. + Copyright (C) 2021 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 + . */ + +#define GETSP() ({ register uintptr_t stack_ptr asm ("r1"); stack_ptr; }) + +#include diff --git a/sysdeps/or1k/setjmp.S b/sysdeps/or1k/setjmp.S new file mode 100644 index 0000000000..660995b493 --- /dev/null +++ b/sysdeps/or1k/setjmp.S @@ -0,0 +1,56 @@ +/* setjmp, OpenRISC version. + Copyright (C) 2021 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, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include +#define _ASM +#define _SETJMP_H +#include + +ENTRY (_setjmp) + l.addi r4, r0, 0 /* Set second argument to 0. */ + l.j .Local__sigsetjmp + l.nop +END (_setjmp) +libc_hidden_def (_setjmp) + +ENTRY (setjmp) + l.addi r4, r0, 1 /* Set second argument to 1. */ + l.j .Local__sigsetjmp + l.nop +END (setjmp) + +ENTRY (__sigsetjmp) +.Local__sigsetjmp: + l.sw 0(r3), r1 + l.sw 4(r3), r2 + l.sw 8(r3), r9 + l.sw 12(r3), r10 + l.sw 16(r3), r14 + l.sw 20(r3), r16 + l.sw 24(r3), r18 + l.sw 28(r3), r20 + l.sw 32(r3), r22 + l.sw 36(r3), r24 + l.sw 40(r3), r26 + l.sw 44(r3), r28 + l.sw 48(r3), r30 + l.j __sigjmp_save + l.nop +END (__sigsetjmp) +hidden_def (__sigsetjmp) diff --git a/sysdeps/or1k/sysdep.h b/sysdeps/or1k/sysdep.h new file mode 100644 index 0000000000..61a135afe7 --- /dev/null +++ b/sysdeps/or1k/sysdep.h @@ -0,0 +1,83 @@ +/* Assembler macro definitions. OpenRISC version. + Copyright (C) 2021 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 + +#if defined __ASSEMBLER__ || defined REQUEST_ASSEMBLER_MACROS + +/* Make use of .size directive. */ +#define ASM_SIZE_DIRECTIVE(name) .size name,.-name; + +/* Define an entry point visible from C. */ +#define ENTRY(name) \ + .globl C_SYMBOL_NAME(name); \ + .type C_SYMBOL_NAME(name),@function; \ + .align 4; \ + C_LABEL(name) \ + cfi_startproc; \ + CALL_MCOUNT + +#undef END +#define END(name) \ + cfi_endproc; \ + ASM_SIZE_DIRECTIVE(name) + +/* Since C identifiers are not normally prefixed with an underscore + on this system, the asm identifier `syscall_error' intrudes on the + C name space. Make sure we use an innocuous name. */ +#define syscall_error __syscall_error + +/* If compiled for profiling, call `mcount' at the start of each function. */ +#ifdef PROF +# ifdef __PIC__ +# define CALL_MCOUNT \ + l.addi r1, r1, -8; \ + l.sw 0(r1), r9; \ + l.sw 4(r1), r3; \ + l.ori r3, r9, 0; \ + l.j plt(_mcount); \ + l.nop; \ + l.lwz r9, 0(r1); \ + l.lwz r3, 4(r1); \ + l.addi r1, r1, 8; +# else +# define CALL_MCOUNT \ + l.addi r1, r1, -8; \ + l.sw 0(r1), r9; \ + l.sw 4(r1), r3; \ + l.ori r3, r9, 0; \ + l.movhi r15, hi(_mcount); \ + l.ori r15, r15, lo(_mcount); \ + l.jr r15; \ + l.nop; \ + l.lwz r9, 0(r1); \ + l.lwz r3, 4(r1); \ + l.addi r1, r1, 8; +# endif +#else +# define CALL_MCOUNT /* Do nothing. */ +#endif + +/* Local label name for asm code. */ +#define L(name) .L##name + +/* Specify the size in bytes of a machine register. */ +#define REGSIZE 4 + +#endif /* __ASSEMBLER__ */ From patchwork Fri Dec 10 23:34:47 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stafford Horne X-Patchwork-Id: 48820 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 9001C3858036 for ; Fri, 10 Dec 2021 23:39:54 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9001C3858036 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1639179594; bh=EgmNltNS6hiJMeoWjuk4id/ppVpo1cCYDa5PAdswC9g=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=mEfr5XDpFn8ykDTCdsSCHDHuH4zYZxdNkaJqxKK9GlE/Fl5KzL59/k4GkL4OLD3Fc MR8CLHL4FvOZ4z/xOy0sPcAoHA255SillGDN0Hst83RqGqBo0uEXai0TiD/x1D+ZQM SdycU38dCVr9nwBft1gp/VPjTkOM7djVDz3acUrQ= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-pj1-x1030.google.com (mail-pj1-x1030.google.com [IPv6:2607:f8b0:4864:20::1030]) by sourceware.org (Postfix) with ESMTPS id 030DE3857C6F for ; Fri, 10 Dec 2021 23:35:18 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 030DE3857C6F Received: by mail-pj1-x1030.google.com with SMTP id f18-20020a17090aa79200b001ad9cb23022so8785901pjq.4 for ; Fri, 10 Dec 2021 15:35:17 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=EgmNltNS6hiJMeoWjuk4id/ppVpo1cCYDa5PAdswC9g=; b=s/NPdIitpFOs0T5khngiMqIoTLy1Cdq1K67pNKbui2U2rT4hZ8aHGdeqGLY4907nvV RiFjVmEUlBnk95EIUjoYhe6wMXAuYHkuPfcks2wJCWKXsiCys3TLdiARf9FbHw+jrgeP V49mkR9RwB2S9utXfyccdykKU5mgl1BjocmarU5rubgJAGyRsOOmWWLwjX56GA1kSsEn yEOkotsalZhpdL4PM28QtNeGU/ySCbdG/5KgiausD387Ty4dHhDr4Lyv+Y4E7s06BUo8 BWXHZUaZP54imI9SzeN0+my2EBVxJ3mdTNzolTNzGABIqMEnA7z0+tpraDz3Cas0K76t TdEw== X-Gm-Message-State: AOAM530m3dxHnvDI6GWZelrORbgKQufQ3SDkNPXk2SKSTZALM1WC+Sux KMv48OOL+BgbI6IHZY7+lWzP7K0++v4= X-Google-Smtp-Source: ABdhPJxpMtuppNQQqI1A18UMsDtcq1wGWAtd72A8s+qiUHxuBpvYfZ0qOB8cc5Dx1ZcluULYmFwaRQ== X-Received: by 2002:a17:90b:11c1:: with SMTP id gv1mr27553648pjb.208.1639179316221; Fri, 10 Dec 2021 15:35:16 -0800 (PST) Received: from localhost ([2409:10:24a0:4700:e8ad:216a:2a9d:6d0c]) by smtp.gmail.com with ESMTPSA id y128sm4044806pfb.181.2021.12.10.15.35.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Dec 2021 15:35:15 -0800 (PST) To: GLIBC patches Subject: [PATCH v3 04/13] or1k: startup and dynamic linking code Date: Sat, 11 Dec 2021 08:34:47 +0900 Message-Id: <20211210233456.4146479-5-shorne@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211210233456.4146479-1-shorne@gmail.com> References: <20211210233456.4146479-1-shorne@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-9.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_SHORT, KAM_STOCKGEN, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Stafford Horne via Libc-alpha From: Stafford Horne Reply-To: Stafford Horne Cc: Openrisc Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" Code for C runtime startup and dynamic loading including PLT layout. --- sysdeps/or1k/bits/link.h | 51 ++++++ sysdeps/or1k/dl-machine.h | 323 +++++++++++++++++++++++++++++++++++++ sysdeps/or1k/dl-start.S | 98 +++++++++++ sysdeps/or1k/ldsodefs.h | 40 +++++ sysdeps/or1k/sotruss-lib.c | 51 ++++++ sysdeps/or1k/start.S | 99 ++++++++++++ sysdeps/or1k/tst-audit.h | 24 +++ 7 files changed, 686 insertions(+) create mode 100644 sysdeps/or1k/bits/link.h create mode 100644 sysdeps/or1k/dl-machine.h create mode 100644 sysdeps/or1k/dl-start.S create mode 100644 sysdeps/or1k/ldsodefs.h create mode 100644 sysdeps/or1k/sotruss-lib.c create mode 100644 sysdeps/or1k/start.S create mode 100644 sysdeps/or1k/tst-audit.h diff --git a/sysdeps/or1k/bits/link.h b/sysdeps/or1k/bits/link.h new file mode 100644 index 0000000000..ad183c9625 --- /dev/null +++ b/sysdeps/or1k/bits/link.h @@ -0,0 +1,51 @@ +/* Declarations for dynamic linker interface. OpenRISC version. + Copyright (C) 2021 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 _LINK_H +# error "Never include directly; use instead." +#endif + +/* Registers for entry into PLT. */ +typedef struct La_or1k_regs +{ + uint32_t lr_reg[31]; +} La_or1k_regs; + +/* Return values for calls from PLT. */ +typedef struct La_or1k_retval +{ + uint32_t lrv_r3; +} La_or1k_retval; + +__BEGIN_DECLS + +extern ElfW(Addr) la_or1k_gnu_pltenter (ElfW(Sym) *__sym, unsigned int __ndx, + uintptr_t *__refcook, + uintptr_t *__defcook, + La_or1k_regs *__regs, + unsigned int *__flags, + const char *__symname, + long int *__framesizep); +extern unsigned int la_or1k_gnu_pltexit (ElfW(Sym) *__sym, unsigned int __ndx, + uintptr_t *__refcook, + uintptr_t *__defcook, + const La_or1k_regs *__inregs, + La_or1k_retval *__outregs, + const char *__symname); + +__END_DECLS diff --git a/sysdeps/or1k/dl-machine.h b/sysdeps/or1k/dl-machine.h new file mode 100644 index 0000000000..d41554769e --- /dev/null +++ b/sysdeps/or1k/dl-machine.h @@ -0,0 +1,323 @@ +/* Machine-dependent ELF dynamic relocation inline functions. OpenRISC version. + Copyright (C) 2021 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_machine_h +#define dl_machine_h + +#define ELF_MACHINE_NAME "or1k" + +#include +#include +#include +#include +#include +#include + +/* Return nonzero iff ELF header is compatible with the running host. */ +static inline int __attribute__ ((unused)) +elf_machine_matches_host (const Elf32_Ehdr *ehdr) +{ + return ehdr->e_machine == EM_OPENRISC; +} + +static inline Elf32_Addr * +or1k_get_got (void) +{ + Elf32_Addr *got; + register long int linkreg asm ("r9"); + asm ("l.jal 0x8\n" + " l.movhi %0, gotpchi(_GLOBAL_OFFSET_TABLE_-4)\n" + "l.ori %0, %0, gotpclo(_GLOBAL_OFFSET_TABLE_+0)\n" + "l.add %0, %0, %1\n" + : "=r" (got), "=r" (linkreg)); + + return got; +} + +/* Return the link-time address of _DYNAMIC. Conveniently, this is the + first element of the GOT. */ +static inline Elf32_Addr +elf_machine_dynamic (void) +{ + Elf32_Addr *got = or1k_get_got(); + return *got; +} + + +/* Return the run-time load address of the shared object. */ +static inline Elf32_Addr +elf_machine_load_address (void) +{ + /* Compute the difference between the runtime address of _DYNAMIC as seen + by a GOTOFF reference, and the link-time address found in the special + unrelocated first GOT entry. */ + Elf32_Addr dyn; + Elf32_Addr *got = or1k_get_got(); + + asm ("l.movhi %0, gotoffhi(_DYNAMIC);" + "l.ori %0, %0, gotofflo(_DYNAMIC);" + "l.add %0, %0, %1;" + : "=&r"(dyn) : "r"(got)); + + return dyn - *got; +} + +/* Initial entry point code for the dynamic linker. The function _dl_start + is the real entry point; it's return value is the user program's entry + point. + + Code is really located in dl-start.S, just tell the linker that it + exists. */ +#define RTLD_START asm (".globl _dl_start"); + +/* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry or + TLS variable, so undefined references should not be allowed to + define the value. + ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one + of the main executable's symbols, as for a COPY reloc. */ + +#define elf_machine_type_class(type) \ + (((type) == R_OR1K_JMP_SLOT \ + || (type) == R_OR1K_TLS_DTPMOD \ + || (type) == R_OR1K_TLS_DTPOFF \ + || (type) == R_OR1K_TLS_TPOFF) * ELF_RTYPE_CLASS_PLT \ + | ((type) == R_OR1K_COPY) * ELF_RTYPE_CLASS_COPY) + +/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */ +#define ELF_MACHINE_JMP_SLOT R_OR1K_JMP_SLOT + +#define ARCH_LA_PLTENTER or1k_gnu_pltenter +#define ARCH_LA_PLTEXIT or1k_gnu_pltexit + +/* Set up the loaded object described by L so its unrelocated PLT + entries will jump to the on-demand fixup code in dl-runtime.c. */ +static inline int __attribute__ ((unused, always_inline)) +elf_machine_runtime_setup (struct link_map *l, struct r_scope_elem *scope[], + int lazy, int profile) +{ + ElfW(Addr) *pltgot; + extern void _dl_runtime_resolve (ElfW(Word)); + extern void _dl_runtime_profile (ElfW(Word)); + + if (l->l_info[DT_JMPREL] && lazy) + { + pltgot = (ElfW(Addr) *) D_PTR (l, l_info[DT_PLTGOT]); + + /* Fill in initial entrys of the plt */ + + /* Register the link_map address in the plt at pltgot[1]. + This will also be used in the resolver for accessing the + link_map structure. */ + pltgot[1] = (ElfW(Addr)) l; + + /* The pltgot[2] entry contains the address of a function which gets + called to get the address of a so far unresolved function and + jump to it. The profiling extension of the dynamic linker allows + to intercept the calls to collect information. In this case we + don't store the address in the GOT so that all future calls also + end in this function. */ +#if 0 /* Profiling not supported in OpenRISC yet (need to implement + _dl_runtime_profile). */ + if ( profile) + { + pltgot[2] = (ElfW(Addr)) &_dl_runtime_profile; + + if (GLRO(dl_profile) != NULL + && _dl_name_match_p (GLRO(dl_profile), l)) + /* Say that we really want profiling and the timers are + started. */ + GL(dl_profile_map) = l; + } + else +#endif + { + /* This function will get called to fix up the GOT entry + indicated by the offset on the stack, and then jump to + the resolved address. */ + pltgot[2] = (ElfW(Addr)) &_dl_runtime_resolve; + } + + } + + return lazy; +} + +/* Mask identifying addresses reserved for the user program, + where the dynamic linker should not map anything. */ +#define ELF_MACHINE_USER_ADDRESS_MASK 0xf8000000UL + +/* We define an initialization functions. This is called very early in + _dl_sysdep_start. */ +#define DL_PLATFORM_INIT dl_platform_init () + +static inline void __attribute__ ((unused)) +dl_platform_init (void) +{ + if (GLRO(dl_platform) != NULL && *GLRO(dl_platform) == '\0') + /* Avoid an empty string which would disturb us. */ + GLRO(dl_platform) = NULL; +} + +static inline ElfW(Addr) +elf_machine_fixup_plt (struct link_map *map, lookup_t t, + const ElfW(Sym) *refsym, const ElfW(Sym) *sym, + const ElfW(Rela) *reloc, + ElfW(Addr) *reloc_addr, ElfW(Addr) value) +{ + return *reloc_addr = value; +} + +/* Return the final value of a plt relocation. */ +static inline Elf32_Addr +elf_machine_plt_value (struct link_map *map, const Elf32_Rela *reloc, + Elf32_Addr value) +{ + return value + reloc->r_addend; +} + + +#endif /* !dl_machine_h */ + +#ifdef RESOLVE_MAP + +/* Perform the relocation specified by RELOC and SYM (which is fully resolved). + MAP is the object containing the reloc. */ + +static inline void +__attribute ((always_inline)) +elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[], + const ElfW(Rela) *reloc, const ElfW(Sym) *sym, + const struct r_found_version *version, + void *const reloc_addr_arg, int skip_ifunc) +{ + Elf32_Addr *const reloc_addr = reloc_addr_arg; + const unsigned int r_type = ELF32_R_TYPE (reloc->r_info); + + if (__glibc_unlikely (r_type == R_OR1K_NONE)) + return; + else + { +# ifndef RESOLVE_CONFLICT_FIND_MAP + const Elf32_Sym *const refsym = sym; +# endif + struct link_map *sym_map = RESOLVE_MAP (map, scope, &sym, version, + r_type); + Elf32_Addr value = SYMBOL_ADDRESS (sym_map, sym, true); + + if (sym != NULL + && __glibc_unlikely (ELFW(ST_TYPE) (sym->st_info) == STT_GNU_IFUNC) + && __glibc_likely (sym->st_shndx != SHN_UNDEF) + && __glibc_likely (!skip_ifunc)) + value = elf_ifunc_invoke (value); + + switch (r_type) + { +# ifndef RESOLVE_CONFLICT_FIND_MAP + case R_OR1K_COPY: + if (sym == NULL) + /* This can happen in trace mode if an object could not be + found. */ + break; + if (__glibc_unlikely (sym->st_size > refsym->st_size) + || (__glibc_unlikely (sym->st_size < refsym->st_size) + && GLRO(dl_verbose))) + { + const char *strtab; + + strtab = (const char *) D_PTR (map, l_info[DT_STRTAB]); + _dl_error_printf ("\ +%s: Symbol `%s' has different size in shared object, consider re-linking\n", + rtld_progname ?: "", + strtab + refsym->st_name); + } + memcpy (reloc_addr_arg, (void *) value, + MIN (sym->st_size, refsym->st_size)); + break; +# endif /* !RESOLVE_CONFLICT_FIND_MAP */ + case R_OR1K_32: + /* Support relocations on mis-aligned offsets. */ + value += reloc->r_addend; + memcpy (reloc_addr_arg, &value, 4); + break; + case R_OR1K_GLOB_DAT: + case R_OR1K_JMP_SLOT: + *reloc_addr = value + reloc->r_addend; + break; + case R_OR1K_TLS_DTPMOD: +# ifdef RTLD_BOOTSTRAP + /* During startup the dynamic linker is always the module + with index 1. */ + *reloc_addr = 1; +# else + if (sym_map != NULL) + *reloc_addr = sym_map->l_tls_modid; +# endif + break; + case R_OR1K_TLS_DTPOFF: +# ifndef RTLD_BOOTSTRAP + *reloc_addr = (sym == NULL ? 0 : sym->st_value) + reloc->r_addend; +# endif + break; + + case R_OR1K_TLS_TPOFF: +# ifdef RTLD_BOOTSTRAP + *reloc_addr = sym->st_value + reloc->r_addend + + map->l_tls_offset - TLS_TCB_SIZE; +# else + if (sym_map != NULL) + { + CHECK_STATIC_TLS (map, sym_map); + *reloc_addr = sym->st_value + reloc->r_addend + + sym_map->l_tls_offset - TLS_TCB_SIZE; + } +# endif + break; + default: + _dl_reloc_bad_type (map, r_type, 0); + break; + } + } +} + +static inline void +__attribute__ ((always_inline)) +elf_machine_rela_relative (Elf32_Addr l_addr, const Elf32_Rela *reloc, + void *const reloc_addr_arg) +{ + Elf32_Addr *const reloc_addr = reloc_addr_arg; + *reloc_addr = l_addr + reloc->r_addend; +} + +static inline void +__attribute__ ((always_inline)) +elf_machine_lazy_rel (struct link_map *map, struct r_scope_elem *scope[], + ElfW(Addr) l_addr, const ElfW(Rela) *reloc, + int skip_ifunc) +{ + Elf32_Addr *const reloc_addr = (void *) (l_addr + reloc->r_offset); + const unsigned int r_type = ELF32_R_TYPE (reloc->r_info); + + if (__glibc_likely (r_type == R_OR1K_JMP_SLOT)) + *reloc_addr += l_addr; + else if (__glibc_unlikely (r_type == R_OR1K_NONE)) + return; + else + _dl_reloc_bad_type (map, r_type, 1); +} + +#endif /* RESOLVE_MAP */ diff --git a/sysdeps/or1k/dl-start.S b/sysdeps/or1k/dl-start.S new file mode 100644 index 0000000000..ecb1505427 --- /dev/null +++ b/sysdeps/or1k/dl-start.S @@ -0,0 +1,98 @@ +/* Machine-dependent ELF startup code. OpenRISC version. + Copyright (C) 2021 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 + +/* Initial entry point code for the dynamic linker. + The function _dl_start is the real entry point; + it's return value is the user program's entry point. */ +ENTRY (_start) + /* Count arguments in r11 */ + l.ori r3, r1, 0 + l.movhi r11, 0 +1: + l.addi r3, r3, 4 + l.lwz r12, 0(r3) + l.sfnei r12, 0 + l.addi r11, r11, 1 + l.bf 1b + l.nop + l.addi r11, r11, -1 + /* store argument counter to stack. */ + l.sw 0(r1), r11 + + /* Load the PIC register. */ + l.jal 0x8 + l.movhi r16, gotpchi(_GLOBAL_OFFSET_TABLE_-4) + l.ori r16, r16, gotpclo(_GLOBAL_OFFSET_TABLE_+0) + l.add r16, r16, r9 + + l.ori r3, r1, 0 + + l.jal _dl_start + l.nop + /* Save user entry in a call saved reg. */ + l.ori r22, r11, 0 + /* Fall through to _dl_start_user. */ + +_dl_start_user: + /* Set up for _dl_init. */ + + /* Load _rtld_local (a.k.a _dl_loaded). */ + l.lwz r12, got(_rtld_local)(r16) + l.lwz r3, 0(r12) + + /* Load argc */ + l.lwz r18, got(_dl_argc)(r16) + l.lwz r4, 0(r18) + + /* Load argv */ + l.lwz r20, got(_dl_argv)(r16) + l.lwz r5, 0(r20) + + /* Load envp = &argv[argc + 1]. */ + l.slli r6, r4, 2 + l.addi r6, r6, 4 + l.add r6, r6, r5 + + l.jal plt(_dl_init) + l.nop + + /* Now set up for user entry. + The already defined ABI loads argc and argv from the stack. + + argc = 0(r1) + argv = r1 + 4 + */ + + /* Load SP as argv - 4. */ + l.lwz r3, 0(r20) + l.addi r1, r3, -4 + + /* Save argc. */ + l.lwz r3, 0(r18) + l.sw 0(r1), r3 + + /* Pass _dl_fini function address to _start. + Next start.S will then pass this as rtld_fini to __libc_start_main. */ + l.lwz r3, got(_dl_fini)(r16) + + l.jr r22 + l.nop + +END (_start) diff --git a/sysdeps/or1k/ldsodefs.h b/sysdeps/or1k/ldsodefs.h new file mode 100644 index 0000000000..89713fcc70 --- /dev/null +++ b/sysdeps/or1k/ldsodefs.h @@ -0,0 +1,40 @@ +/* Run-time dynamic linker data structures for loaded ELF shared objects. + Copyright (C) 2021 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 _OR1K_LDSODEFS_H +#define _OR1K_LDSODEFS_H 1 + +#include + +struct La_or1k_regs; +struct La_or1k_retval; + +#define ARCH_PLTENTER_MEMBERS \ + uintptr_t (*or1k_gnu_pltenter) (Elf32_Sym *, unsigned int, uintptr_t *, \ + uintptr_t *, struct La_or1k_regs *, \ + unsigned int *, const char *name, \ + long int *framesizep) + +#define ARCH_PLTEXIT_MEMBERS \ + unsigned int (*or1k_gnu_pltexit) (Elf32_Sym *, unsigned int, uintptr_t *, \ + uintptr_t *, const struct La_or1k_regs *, \ + struct La_or1k_retval *, const char *) + +#include_next + +#endif diff --git a/sysdeps/or1k/sotruss-lib.c b/sysdeps/or1k/sotruss-lib.c new file mode 100644 index 0000000000..ee16f84456 --- /dev/null +++ b/sysdeps/or1k/sotruss-lib.c @@ -0,0 +1,51 @@ +/* Override generic sotruss-lib.c to define actual functions for OpenRISC. + Copyright (C) 2021 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 + . */ + +#define HAVE_ARCH_PLTENTER +#define HAVE_ARCH_PLTEXIT + +#include + +ElfW(Addr) +la_or1k_gnu_pltenter (ElfW(Sym) *sym __attribute__ ((unused)), + unsigned int ndx __attribute__ ((unused)), + uintptr_t *refcook, uintptr_t *defcook, + La_or1k_regs *regs, unsigned int *flags, + const char *symname, long int *framesizep) +{ + print_enter (refcook, defcook, symname, + regs->lr_reg[0], regs->lr_reg[1], regs->lr_reg[2], + *flags); + + /* No need to copy anything, we will not need the parameters in any case. */ + *framesizep = 0; + + return sym->st_value; +} + +unsigned int +la_or1k_gnu_pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook, + uintptr_t *defcook, + const struct La_or1k_regs *inregs, + struct La_or1k_retval *outregs, + const char *symname) +{ + print_exit (refcook, defcook, symname, outregs->lrv_r3); + + return 0; +} diff --git a/sysdeps/or1k/start.S b/sysdeps/or1k/start.S new file mode 100644 index 0000000000..0424355f36 --- /dev/null +++ b/sysdeps/or1k/start.S @@ -0,0 +1,99 @@ +/* start, OpenRISC version. + Copyright (C) 2021 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, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +/* This is the canonical entry point, usually the first thing in the text + segment. + + sp The stack contains the arguments and environment: + 0(sp) argc + 4(sp) argv[0] + ... + (4*argc)(sp) NULL + (4*(argc+1))(sp) envp[0] + ... + NULL + */ + +#define __ASSEMBLY__ +#include +#include + +ENTRY (ENTRY_POINT) + + /* Setup Arguments to the __libc_start_main function. */ + + /* Take values for argc and argv off the stack. + These will be passed as arguments two and three to main + and thus go in registers r4 and r5, respectively. */ + l.lwz r4, 0(r1) + l.addi r5, r1, 4 + + /* Pass in rtld_fini from dl-start.S. */ + l.or r8, r3, r3 + +#ifdef PIC + /* Obtain a pointer to .got in r16 */ + l.jal 0x8 + l.movhi r16, gotpchi(_GLOBAL_OFFSET_TABLE_-4) + l.ori r16, r16, gotpclo(_GLOBAL_OFFSET_TABLE_+0) + l.add r16, r16, r9 + + /* Pass in the the main symbol. */ + l.lwz r3, got(main)(r16) +#else + /* Pass in the the main symbol. */ + l.movhi r3, hi(main) + l.ori r3, r3, lo(main) +#endif + /* Used to be init and fini. */ + l.movhi r6, 0x0 + l.movhi r7, 0x0 + + /* Push stack limit onto the stack. + This provides the highest stack address to user code (as stack grows + downwards. + This is the seventh argument to __libc_start_main and thus needs to + be passed on the stack. */ + l.sw -4(r1), r1 + + /* Adjust stack to account for a total of 7 args (i.e. the last one is + on the stack. */ + l.addi r1, r1, -4 + + /* Clear the frame pointer and link register since this is the + outermost frame. */ + l.movhi r2, 0x0 + l.movhi r9, 0x0 + + /* Let the libc call main and exit with its return code. */ +#ifdef PIC + l.j plt(__libc_start_main) +#else + l.j __libc_start_main +#endif + l.nop +END (ENTRY_POINT) + + /* Define a symbol for the first piece of initialized data. */ + .data + .globl __data_start +__data_start: + .long 0 + .weak data_start + data_start = __data_start diff --git a/sysdeps/or1k/tst-audit.h b/sysdeps/or1k/tst-audit.h new file mode 100644 index 0000000000..79ee1b7b02 --- /dev/null +++ b/sysdeps/or1k/tst-audit.h @@ -0,0 +1,24 @@ +/* Definitions for testing PLT entry/exit auditing. OpenRISC version. + Copyright (C) 2021 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 + . */ + +#define pltenter la_or1k_gnu_pltenter +#define pltexit la_or1k_gnu_pltexit +#define La_regs La_or1k_regs +#define La_retval La_or1k_retval +#define int_retval lrv_r3 From patchwork Fri Dec 10 23:34:48 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stafford Horne X-Patchwork-Id: 48819 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 477E43857C66 for ; Fri, 10 Dec 2021 23:39:06 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 477E43857C66 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1639179546; bh=vxGxuajyDf5nY+aA0aIB7ztLg7ACmXeyCmrLkh9Cf3A=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=o2oVdZsZ1SJmDPgP4KCeYgrb9JYssuZxZFud3vT1MuhA7MVMwEvuTPn11GeIz8T5y OQd7ehuL4ypd0KviPeBRRtYzqSJBNBgdn74sGxOx/nmtFeUtMkRGQO8uJ+NWQ7LnHw ybF7wRlIlWpeboI4Y/OOkqH9JPQk7yfoelqnCkr8= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-pg1-x536.google.com (mail-pg1-x536.google.com [IPv6:2607:f8b0:4864:20::536]) by sourceware.org (Postfix) with ESMTPS id 17BFC3857C6E for ; Fri, 10 Dec 2021 23:35:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 17BFC3857C6E Received: by mail-pg1-x536.google.com with SMTP id r138so9290044pgr.13 for ; Fri, 10 Dec 2021 15:35:21 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=vxGxuajyDf5nY+aA0aIB7ztLg7ACmXeyCmrLkh9Cf3A=; b=g/PXnhXnBYWEckwM9BOGeEI/WV3L78fP5ZCcLZiISoNM7yqii+Yg8NWNOcBf+1dPnx OtfYFB9QoIHt8Sq3IcsgBwAtATsBnItOWI9O4wEwdAQF5PbncYcvtuOp01OIwzSzN4tD 7m0kvA23vEJ4uE8zgVfrI8Brh4HJTMlKlNOasetXMPxQZwGXZ3i9KNAqZ5HbVFqXnuUp y0IunGfQMbeHZbsFhZlxoc6wRJKJXWy7o1Tlbk9NA3BK+nqHlQmw5mUMXrYuMZPPhcGc vvttoebdiCypaGxnU3T2LT4jtXoqXSGCw5wCkL6KIgYo9c07FvWEPNLs3ij9m5DzcyxZ cckA== X-Gm-Message-State: AOAM5312GJTfLyYnJO/S+HW3gLSQZeftN5+sXuWmOINycFVSu3CqN0NU ATLaiC5dYdL5P9d0IZ2+ZCA+pEsn9sU= X-Google-Smtp-Source: ABdhPJzxAXKLD457h1kDJ1DJp9mXFLSR1JGHh1XbPnOseQ/cPqOOJhQosBfkWuUsPyn+a5z/T3hhrQ== X-Received: by 2002:a63:cc03:: with SMTP id x3mr316863pgf.295.1639179319476; Fri, 10 Dec 2021 15:35:19 -0800 (PST) Received: from localhost ([2409:10:24a0:4700:e8ad:216a:2a9d:6d0c]) by smtp.gmail.com with ESMTPSA id i1sm3651852pgs.50.2021.12.10.15.35.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Dec 2021 15:35:18 -0800 (PST) To: GLIBC patches Subject: [PATCH v3 05/13] or1k: Thread Local Storage support Date: Sat, 11 Dec 2021 08:34:48 +0900 Message-Id: <20211210233456.4146479-6-shorne@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211210233456.4146479-1-shorne@gmail.com> References: <20211210233456.4146479-1-shorne@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-10.6 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_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Stafford Horne via Libc-alpha From: Stafford Horne Reply-To: Stafford Horne Cc: Openrisc Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" OpenRISC includes 3 TLS addressing models. Local Dynamic optimizations are not done in the linker and therefore use the same code sequences as Global Dynamic. --- sysdeps/or1k/dl-tls.h | 27 +++++ sysdeps/or1k/libc-tls.c | 34 ++++++ sysdeps/or1k/nptl/tcb-offsets.sym | 6 + sysdeps/or1k/nptl/tls.h | 189 ++++++++++++++++++++++++++++++ sysdeps/or1k/stackinfo.h | 34 ++++++ 5 files changed, 290 insertions(+) create mode 100644 sysdeps/or1k/dl-tls.h create mode 100644 sysdeps/or1k/libc-tls.c create mode 100644 sysdeps/or1k/nptl/tcb-offsets.sym create mode 100644 sysdeps/or1k/nptl/tls.h create mode 100644 sysdeps/or1k/stackinfo.h diff --git a/sysdeps/or1k/dl-tls.h b/sysdeps/or1k/dl-tls.h new file mode 100644 index 0000000000..382588d504 --- /dev/null +++ b/sysdeps/or1k/dl-tls.h @@ -0,0 +1,27 @@ +/* TLS definitions for the ELF dynamic linker. OpenRISC version. + Copyright (C) 2021 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 + . */ + +/* Type used for the representation of TLS information in the GOT. */ +typedef struct +{ + unsigned long int ti_module; + unsigned long int ti_offset; +} tls_index; + +extern void *__tls_get_addr (tls_index *ti); diff --git a/sysdeps/or1k/libc-tls.c b/sysdeps/or1k/libc-tls.c new file mode 100644 index 0000000000..1524855e88 --- /dev/null +++ b/sysdeps/or1k/libc-tls.c @@ -0,0 +1,34 @@ +/* Thread-local storage handling in the ELF dynamic linker. + OpenRISC version. + Copyright (C) 2021 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 + +/* On OpenRISC, linker optimizations are not required, so __tls_get_addr + can be called even in statically linked binaries. In this case module + must be always 1 and PT_TLS segment exist in the binary, otherwise it + would not link. */ + +void * +__tls_get_addr (tls_index *ti) +{ + dtv_t *dtv = THREAD_DTV (); + return (char *) dtv[1].pointer.val + ti->ti_offset; +} diff --git a/sysdeps/or1k/nptl/tcb-offsets.sym b/sysdeps/or1k/nptl/tcb-offsets.sym new file mode 100644 index 0000000000..86025a402d --- /dev/null +++ b/sysdeps/or1k/nptl/tcb-offsets.sym @@ -0,0 +1,6 @@ +#include +#include + +MULTIPLE_THREADS_OFFSET offsetof (struct pthread, header.multiple_threads) +TID_OFFSET offsetof (struct pthread, tid) +TP_TO_PTHREAD_OFFSET -(sizeof (struct pthread) + sizeof (tcbhead_t)) diff --git a/sysdeps/or1k/nptl/tls.h b/sysdeps/or1k/nptl/tls.h new file mode 100644 index 0000000000..dc11610920 --- /dev/null +++ b/sysdeps/or1k/nptl/tls.h @@ -0,0 +1,189 @@ +/* Definition for thread-local data handling. NPTL/OpenRISC version. + Copyright (C) 2021 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 _TLS_H +#define _TLS_H 1 + +#include + +#ifndef __ASSEMBLER__ +# include +# include +# include +# include + +typedef struct +{ + dtv_t *dtv; + void *__padding[3]; /* To maintain 16 byte padding, needed by STACK_ALIGN. */ +} tcbhead_t; + +register tcbhead_t *__thread_self __asm__("r10"); + +# define TLS_MULTIPLE_THREADS_IN_TCB 1 + +#else /* __ASSEMBLER__ */ +# include +#endif /* __ASSEMBLER__ */ + +#ifndef __ASSEMBLER__ + +/* Get system call information. */ +# include + +/* The TP points to the start of the TLS block. + As I understand it, this isn't strictly that "TP points to DTV" - it's + more where to place the TCB in the TLS block. This will place it in + the beginning. + + Layout: + +-----+-----+----------------------+ + | PRE | TCB | TLS MEMORY .. | + +-----+-----+----------------------+ + ^ r10 / TP + + PRE is the struct pthread described below + TCB is tcbhead_t + TLS memory is where the TLS program sections are loaded + + See _dl_allocate_tls_storage and __libc_setup_tls for more information. */ + +# define TLS_DTV_AT_TP 1 +# define TLS_TCB_AT_TP 0 + +/* Get the thread descriptor definition. */ +# include + +/* Requirements for the TCB. */ +# define TLS_INIT_TCB_SIZE sizeof (tcbhead_t) +# define TLS_INIT_TCB_ALIGN __alignof__ (struct pthread) + +# define TLS_TCB_SIZE sizeof (tcbhead_t) +# define TLS_TCB_ALIGN __alignof__ (struct pthread) + +/* This is the size of the TCB. */ + +/* This is the size we need before TCB. + To support THREAD_GETMEM with friends we want to have a + struct pthread available. + Yank it in infront of everything, I'm sure nobody will mind. + + This memory is really allocated PRE the TLS block, so it's possible + to do ((char*)tlsblock) - TLS_PRE_TCB_SIZE to access it. + This is done for THREAD_SELF. */ + +# define TLS_PRE_TCB_SIZE sizeof (struct pthread) + + +/* Install the dtv pointer. + When called, dtvp is a pointer not the DTV per say (which should start + with the generation counter) but to the length of the DTV. + We can always index with -1, so we store dtvp[1]. */ + +# define INSTALL_DTV(tcbp, dtvp) \ + (((tcbhead_t *) (tcbp))->dtv = (dtvp) + 1) + +/* Install new dtv for current thread + In a logicial world dtv here would also point to the length of the DTV. + However it does not, this time it points to the generation counter, + so just store it. + + Note: -1 is still valid and contains the length. */ + +# define INSTALL_NEW_DTV(dtv) (THREAD_DTV() = (dtv)) + +/* Return dtv of given thread descriptor. */ +# define GET_DTV(tcbp) (((tcbhead_t *) (tcbp))->dtv) + +/* Code to initially initialize the thread pointer. + + Set TP to the address _after_ tcbhead_t. This will allow us + to change the size of tcbhead_t without having to re-link everything. + + This has to return NULL on success (or a string with the failure text). + It's hard to fail this, so return NULL always. */ + +# define TLS_INIT_TP(tcbp) \ + ({__thread_self = ((tcbhead_t *)tcbp + 1); NULL;}) + +/* Value passed to 'clone' for initialization of the thread register. */ +# define TLS_DEFINE_INIT_TP(tp, pd) \ + void *tp = ((char *) pd + TLS_PRE_TCB_SIZE + TLS_INIT_TCB_SIZE) + +/* Return the address of the dtv for the current thread. + + Dereference TP, offset to dtv - really straightforward. + Remember that we made TP point to after tcb, so we need to reverse that. */ + +# define THREAD_DTV() \ + ((((tcbhead_t *)__thread_self)-1)->dtv) + +/* Return the thread descriptor for the current thread. + + Return a pointer to the TLS_PRE area where we allocated space for + a struct pthread. Again, TP points to after tcbhead_t, compensate with + TLS_INIT_TCB_SIZE. + + I regard this is a seperate system from the "normal" TLS. */ + +# define THREAD_SELF \ + ((struct pthread *) ((char *) __thread_self - TLS_INIT_TCB_SIZE \ + - TLS_PRE_TCB_SIZE)) + +/* Magic for libthread_db to know how to do THREAD_SELF. */ + +# define DB_THREAD_SELF \ + REGISTER (32, 32, 10 * 4, - TLS_INIT_TCB_SIZE - TLS_PRE_TCB_SIZE) + +/* Access to data in the thread descriptor is easy. */ + +#define THREAD_GETMEM(descr, member) \ + descr->member +#define THREAD_GETMEM_NC(descr, member, idx) \ + descr->member[idx] +#define THREAD_SETMEM(descr, member, value) \ + descr->member = (value) +#define THREAD_SETMEM_NC(descr, member, idx, value) \ + descr->member[idx] = (value) + +/* Get and set the global scope generation counter in struct pthread. */ + +#define THREAD_GSCOPE_FLAG_UNUSED 0 +#define THREAD_GSCOPE_FLAG_USED 1 +#define THREAD_GSCOPE_FLAG_WAIT 2 +#define THREAD_GSCOPE_RESET_FLAG() \ + do \ + { \ + int __res = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag,\ + THREAD_GSCOPE_FLAG_UNUSED); \ + if (__res == THREAD_GSCOPE_FLAG_WAIT) \ + lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, \ + LLL_PRIVATE); \ + } \ + while (0) +#define THREAD_GSCOPE_SET_FLAG() \ + do \ + { \ + THREAD_SELF->header.gscope_flag = THREAD_GSCOPE_FLAG_USED; \ + atomic_write_barrier (); \ + } \ + while (0) + +#endif /* __ASSEMBLER__ */ + +#endif /* tls.h */ diff --git a/sysdeps/or1k/stackinfo.h b/sysdeps/or1k/stackinfo.h new file mode 100644 index 0000000000..9273e709bd --- /dev/null +++ b/sysdeps/or1k/stackinfo.h @@ -0,0 +1,34 @@ +/* Stack definitions for OpenRISC. + Copyright (C) 2021 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 + . */ + +/* This file contains a bit of information about the stack allocation + of the processor. */ + +#ifndef _STACKINFO_H +#define _STACKINFO_H 1 + +#include + +/* On or1k the stack grows down. */ +#define _STACK_GROWS_DOWN 1 + +/* Default to an executable stack. PF_X can be overridden if PT_GNU_STACK is + present, but it is presumed absent. */ +#define DEFAULT_STACK_PERMS (PF_R | PF_W | PF_X) + +#endif /* stackinfo.h */ From patchwork Fri Dec 10 23:34:49 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stafford Horne X-Patchwork-Id: 48818 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id E2BA73857C72 for ; Fri, 10 Dec 2021 23:38:23 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E2BA73857C72 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1639179503; bh=qVssAnCqizWMYNetFxK/R2/Ds3SH8AMEJdUOHUOrQNU=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=tIxwfvKnKh8EBUKkjXvgE1dvunwk4GnleR5PUUIV9Bmsrk4PmkyLlTtTO5oh9HR9+ E9ZUciSwUq3U8eEYuIe3wNiZ+HSviuzGpChrGw7Kb/djXxcHeqXs++5yMQyk3yS0CQ JfbuvEjH+G0ZKG2/DCfRjZ1KvD9/6vlNtdq+IyAo= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-pf1-x434.google.com (mail-pf1-x434.google.com [IPv6:2607:f8b0:4864:20::434]) by sourceware.org (Postfix) with ESMTPS id 0F8AB3857C64 for ; Fri, 10 Dec 2021 23:35:24 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 0F8AB3857C64 Received: by mail-pf1-x434.google.com with SMTP id x5so9862866pfr.0 for ; Fri, 10 Dec 2021 15:35:24 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=qVssAnCqizWMYNetFxK/R2/Ds3SH8AMEJdUOHUOrQNU=; b=0MAj6kxtkfD0dxEdm5qN57RI0bdy+UDLyjNJVkwjZYURMNQFDsWNrh7HjAXx50PD5V 8oowc9Iijvn8rrKs4hrTNqv0eLLIgUegk/42K3BBFtF/16rID7Pd3xRCTQhQNWaZq+Ch N5ZxAUx63UnRtaR80BG31X/p67lVaojrr7reTBU4jkNhdOZ4oPl0pP+o5EwlpLUcVA55 rJUTTNSZD8rreA74aWWgTFSKuJaXdeZiuPfXsj9Ka3MZNyaHG6icoU03NStuwZe+dMQW QIychbITxoV+M7EJYi2cXLy87siXf2qUuMvNJ/yY+c1d4XVIwbWvsnRuBCuriGzTiTkc V2vw== X-Gm-Message-State: AOAM532KkSHmh0DyDKm1F22P4uJB8NofWsxSaRMiz4imeV+v5j5frVOL ccDxq2YrPLRjXxhhUUdXOjahHxnFVp4= X-Google-Smtp-Source: ABdhPJw5bxQxCMi3C/UJtNdqOo7GNHvGfU5pt65DUZqLo4kfMjAtyhK2uWyw5c4+wLDh4POiBWiB5Q== X-Received: by 2002:a63:d054:: with SMTP id s20mr41111124pgi.565.1639179322772; Fri, 10 Dec 2021 15:35:22 -0800 (PST) Received: from localhost ([2409:10:24a0:4700:e8ad:216a:2a9d:6d0c]) by smtp.gmail.com with ESMTPSA id d185sm3573941pgc.58.2021.12.10.15.35.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Dec 2021 15:35:22 -0800 (PST) To: GLIBC patches Subject: [PATCH v3 06/13] or1k: Atomics and Locking primitives Date: Sat, 11 Dec 2021 08:34:49 +0900 Message-Id: <20211210233456.4146479-7-shorne@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211210233456.4146479-1-shorne@gmail.com> References: <20211210233456.4146479-1-shorne@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-10.6 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_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Stafford Horne via Libc-alpha From: Stafford Horne Reply-To: Stafford Horne Cc: Openrisc Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" --- sysdeps/or1k/atomic-machine.h | 79 +++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 sysdeps/or1k/atomic-machine.h diff --git a/sysdeps/or1k/atomic-machine.h b/sysdeps/or1k/atomic-machine.h new file mode 100644 index 0000000000..1e306ae4ef --- /dev/null +++ b/sysdeps/or1k/atomic-machine.h @@ -0,0 +1,79 @@ +/* Atomic operations. OpenRISC version. + Copyright (C) 2021 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 __OR1K_ATOMIC_H_ +#define __OR1K_ATOMIC_H_ + +#include + +typedef int32_t atomic32_t; +typedef uint32_t uatomic32_t; + +typedef intptr_t atomicptr_t; +typedef uintptr_t uatomicptr_t; +typedef intmax_t atomic_max_t; +typedef uintmax_t uatomic_max_t; + +#define __HAVE_64B_ATOMICS 0 +#define USE_ATOMIC_COMPILER_BUILTINS 1 +#define ATOMIC_EXCHANGE_USES_CAS 1 + +#define __arch_compare_and_exchange_bool_8_int(mem, newval, oldval, model) \ + (abort (), 0) + +#define __arch_compare_and_exchange_bool_16_int(mem, newval, oldval, model) \ + (abort (), 0) + +#define __arch_compare_and_exchange_bool_32_int(mem, newval, oldval, model) \ + ({ \ + typeof (*mem) __oldval = (oldval); \ + !__atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0, \ + model, __ATOMIC_RELAXED); \ + }) + +#define __arch_compare_and_exchange_bool_64_int(mem, newval, oldval, model) \ + (abort (), 0) + +#define __arch_compare_and_exchange_val_8_int(mem, newval, oldval, model) \ + (abort (), (__typeof (*mem)) 0) + +#define __arch_compare_and_exchange_val_16_int(mem, newval, oldval, model) \ + (abort (), (__typeof (*mem)) 0) + +#define __arch_compare_and_exchange_val_32_int(mem, newval, oldval, model) \ + ({ \ + typeof (*mem) __oldval = (oldval); \ + __atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0, \ + model, __ATOMIC_RELAXED); \ + __oldval; \ + }) + +#define __arch_compare_and_exchange_val_64_int(mem, newval, oldval, model) \ + (abort (), (__typeof (*mem)) 0) + +#define atomic_compare_and_exchange_bool_acq(mem, new, old) \ + __atomic_bool_bysize (__arch_compare_and_exchange_bool, int, \ + mem, new, old, __ATOMIC_ACQUIRE) + +#define atomic_compare_and_exchange_val_acq(mem, new, old) \ + __atomic_val_bysize (__arch_compare_and_exchange_val, int, \ + mem, new, old, __ATOMIC_ACQUIRE) + +#define atomic_full_barrier() ({ asm volatile ("l.msync" ::: "memory"); }) + +#endif /* atomic-machine.h */ From patchwork Fri Dec 10 23:34:50 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stafford Horne X-Patchwork-Id: 48821 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 646E63857C5D for ; Fri, 10 Dec 2021 23:40:37 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 646E63857C5D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1639179637; bh=FapMdTMm0AMehIEeH6tl+lHViy/AGXttvuk5tURrLfY=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=vIlQ+GM3tp8gAU5ws9PcLRlq/X7d5F9BXAqn8kYES0T6Lue2Tm0DSv9OmdpM57gdM O4uyVqBj7XEc9Ut68X+aHX0cgy+qTWp9WbI/bXDh+XngqGrJnmq0Rh1zlqO4R3whPH V/YvUHlHM6RxspS9vvIttBqxa1ca6N6jWVu1FVsA= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-pg1-x534.google.com (mail-pg1-x534.google.com [IPv6:2607:f8b0:4864:20::534]) by sourceware.org (Postfix) with ESMTPS id 9E5433857C6E for ; Fri, 10 Dec 2021 23:35:27 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 9E5433857C6E Received: by mail-pg1-x534.google.com with SMTP id 133so9297607pgc.12 for ; Fri, 10 Dec 2021 15:35:27 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=FapMdTMm0AMehIEeH6tl+lHViy/AGXttvuk5tURrLfY=; b=xFU3XulYerermSlN9uJDavgP23uloD0/wFWbFlTzPtM/u6Y67jBOkCeORztY76Jque F5qHIT6neRoxRNTHTx4Iaaf2ECVGc39SBd0VXw07Z9OtwbEyrpzNf2mIo74t7vybHuGi ys4vIl/H+KagIFrqiYs/r7YKr+wNXX16do0lCFe5oIGph0s5iowTsn0VvGPBf8YCxdiu 1iLFUJ3ORMfC3Lh32m8mNtvNODSZs+QHJ69W05Dg+q0piGpSKuhGirXOveImJGEg4SB+ JPaCMJqp0R8EvMs3BXLD7mYR3mCqj9MsmMin+ulIIirT4yOk1UUoTCMjhgPA1NznQG4B hZhQ== X-Gm-Message-State: AOAM533VFbxzBeLipZvrBGMqNqGH8LzRZ/NqGux0LWHp/z8LUg1wdCzd qXh0wVoWJd7cOXA8t7ASMt3q5JrsDco= X-Google-Smtp-Source: ABdhPJw7Wn4m7wZ84Rs30H0JqwbsIEawyC93gD/Y9crhkkmKrU+C/lQ5euhH+Svk9KONuoQelegfog== X-Received: by 2002:a63:6ac2:: with SMTP id f185mr41576435pgc.198.1639179325962; Fri, 10 Dec 2021 15:35:25 -0800 (PST) Received: from localhost ([2409:10:24a0:4700:e8ad:216a:2a9d:6d0c]) by smtp.gmail.com with ESMTPSA id h6sm4351657pfh.82.2021.12.10.15.35.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Dec 2021 15:35:25 -0800 (PST) To: GLIBC patches Subject: [PATCH v3 07/13] or1k: math soft float support Date: Sat, 11 Dec 2021 08:34:50 +0900 Message-Id: <20211210233456.4146479-8-shorne@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211210233456.4146479-1-shorne@gmail.com> References: <20211210233456.4146479-1-shorne@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-10.6 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_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Stafford Horne via Libc-alpha From: Stafford Horne Reply-To: Stafford Horne Cc: Openrisc Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" OpenRISC support hard float but I will like to submit that after glibc soft float goes upstream. The hard float support depends on adding user access to the FPCSR, which is not supported by the kernel yet. --- sysdeps/or1k/bits/fenv.h | 69 ++ sysdeps/or1k/libm-test-ulps | 1112 ++++++++++++++++++++ sysdeps/or1k/libm-test-ulps-name | 1 + sysdeps/or1k/nofpu/math-tests-exceptions.h | 29 + sysdeps/or1k/nofpu/math-tests-rounding.h | 28 + sysdeps/or1k/sfp-machine.h | 93 ++ sysdeps/or1k/tininess.h | 1 + 7 files changed, 1333 insertions(+) create mode 100644 sysdeps/or1k/bits/fenv.h create mode 100644 sysdeps/or1k/libm-test-ulps create mode 100644 sysdeps/or1k/libm-test-ulps-name create mode 100644 sysdeps/or1k/nofpu/math-tests-exceptions.h create mode 100644 sysdeps/or1k/nofpu/math-tests-rounding.h create mode 100644 sysdeps/or1k/sfp-machine.h create mode 100644 sysdeps/or1k/tininess.h diff --git a/sysdeps/or1k/bits/fenv.h b/sysdeps/or1k/bits/fenv.h new file mode 100644 index 0000000000..721136a57d --- /dev/null +++ b/sysdeps/or1k/bits/fenv.h @@ -0,0 +1,69 @@ +/* Floating point environment, OpenRISC version. + Copyright (C) 2021 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 _FENV_H +# error "Never use directly; include instead." +#endif + +/* Define bits representing exceptions in the FPCSR status word. */ +enum + { + FE_OVERFLOW = +#define FE_OVERFLOW (1 << 3) + FE_OVERFLOW, + FE_UNDERFLOW = +#define FE_UNDERFLOW (1 << 4) + FE_UNDERFLOW, + FE_INEXACT = +#define FE_INEXACT (1 << 8) + FE_INEXACT, + FE_INVALID = +#define FE_INVALID (1 << 9) + FE_INVALID, + FE_DIVBYZERO = +#define FE_DIVBYZERO (1 << 11) + FE_DIVBYZERO, + }; + +/* All supported exceptions. */ +#define FE_ALL_EXCEPT \ + (FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT) + +/* Define bits representing rounding modes in the FPCSR Rmode field. */ +#define FE_TONEAREST (0x0 << 1) +#define FE_TOWARDZERO (0x1 << 1) +#define FE_UPWARD (0x2 << 1) +#define FE_DOWNWARD (0x3 << 1) + +/* Type representing exception flags. */ +typedef unsigned int fexcept_t; + +/* Type representing floating-point environment. */ +typedef unsigned int fenv_t; + +/* If the default argument is used we use this value. */ +#define FE_DFL_ENV ((const fenv_t *) -1l) + +#if __GLIBC_USE (IEC_60559_BFP_EXT) +/* Type representing floating-point control modes. */ +typedef unsigned int femode_t; + +/* Default floating-point control modes. */ +# define FE_DFL_MODE ((const femode_t *) -1L) +#endif diff --git a/sysdeps/or1k/libm-test-ulps b/sysdeps/or1k/libm-test-ulps new file mode 100644 index 0000000000..94b383669d --- /dev/null +++ b/sysdeps/or1k/libm-test-ulps @@ -0,0 +1,1112 @@ +# Begin of automatic generation + +# Maximal error of functions: +Function: "acos": +double: 1 +float: 1 + +Function: "acos_downward": +double: 1 +float: 1 + +Function: "acos_towardzero": +double: 1 +float: 1 + +Function: "acos_upward": +double: 1 +float: 1 + +Function: "acosh": +double: 2 +float: 2 + +Function: "acosh_downward": +double: 2 +float: 2 + +Function: "acosh_towardzero": +double: 2 +float: 2 + +Function: "acosh_upward": +double: 2 +float: 2 + +Function: "asin": +double: 1 +float: 1 + +Function: "asin_downward": +double: 1 +float: 1 + +Function: "asin_towardzero": +double: 1 +float: 1 + +Function: "asin_upward": +double: 1 +float: 1 + +Function: "asinh": +double: 2 +float: 2 + +Function: "asinh_downward": +double: 3 +float: 3 + +Function: "asinh_towardzero": +double: 2 +float: 2 + +Function: "asinh_upward": +double: 3 +float: 3 + +Function: "atan": +double: 1 +float: 1 + +Function: "atan2": +float: 2 + +Function: "atan2_downward": +double: 5 +float: 2 + +Function: "atan2_towardzero": +double: 5 +float: 2 + +Function: "atan2_upward": +double: 8 +float: 2 + +Function: "atan_downward": +double: 1 +float: 2 + +Function: "atan_towardzero": +double: 1 +float: 1 + +Function: "atan_upward": +double: 1 +float: 2 + +Function: "atanh": +double: 2 +float: 2 + +Function: "atanh_downward": +double: 3 +float: 3 + +Function: "atanh_towardzero": +double: 2 +float: 2 + +Function: "atanh_upward": +double: 3 +float: 3 + +Function: "cabs": +double: 1 + +Function: "cabs_downward": +double: 1 + +Function: "cabs_towardzero": +double: 1 + +Function: "cabs_upward": +double: 1 + +Function: Real part of "cacos": +double: 1 +float: 2 + +Function: Imaginary part of "cacos": +double: 2 +float: 2 + +Function: Real part of "cacos_downward": +double: 3 +float: 2 + +Function: Imaginary part of "cacos_downward": +double: 5 +float: 3 + +Function: Real part of "cacos_towardzero": +double: 3 +float: 2 + +Function: Imaginary part of "cacos_towardzero": +double: 4 +float: 2 + +Function: Real part of "cacos_upward": +double: 2 +float: 2 + +Function: Imaginary part of "cacos_upward": +double: 5 +float: 7 + +Function: Real part of "cacosh": +double: 2 +float: 2 + +Function: Imaginary part of "cacosh": +double: 1 +float: 2 + +Function: Real part of "cacosh_downward": +double: 4 +float: 2 + +Function: Imaginary part of "cacosh_downward": +double: 3 +float: 3 + +Function: Real part of "cacosh_towardzero": +double: 4 +float: 2 + +Function: Imaginary part of "cacosh_towardzero": +double: 3 +float: 2 + +Function: Real part of "cacosh_upward": +double: 4 +float: 3 + +Function: Imaginary part of "cacosh_upward": +double: 3 +float: 2 + +Function: "carg": +float: 1 + +Function: "carg_downward": +double: 5 +float: 2 + +Function: "carg_towardzero": +double: 5 +float: 2 + +Function: "carg_upward": +double: 8 +float: 2 + +Function: Real part of "casin": +double: 1 +float: 1 + +Function: Imaginary part of "casin": +double: 2 +float: 2 + +Function: Real part of "casin_downward": +double: 3 +float: 2 + +Function: Imaginary part of "casin_downward": +double: 5 +float: 3 + +Function: Real part of "casin_towardzero": +double: 3 +float: 1 + +Function: Imaginary part of "casin_towardzero": +double: 4 +float: 2 + +Function: Real part of "casin_upward": +double: 3 +float: 2 + +Function: Imaginary part of "casin_upward": +double: 5 +float: 7 + +Function: Real part of "casinh": +double: 2 +float: 2 + +Function: Imaginary part of "casinh": +double: 1 +float: 1 + +Function: Real part of "casinh_downward": +double: 5 +float: 3 + +Function: Imaginary part of "casinh_downward": +double: 3 +float: 2 + +Function: Real part of "casinh_towardzero": +double: 4 +float: 2 + +Function: Imaginary part of "casinh_towardzero": +double: 3 +float: 1 + +Function: Real part of "casinh_upward": +double: 5 +float: 7 + +Function: Imaginary part of "casinh_upward": +double: 3 +float: 2 + +Function: Real part of "catan": +double: 1 +float: 1 + +Function: Imaginary part of "catan": +double: 1 +float: 1 + +Function: Real part of "catan_downward": +double: 1 +float: 2 + +Function: Imaginary part of "catan_downward": +double: 2 +float: 2 + +Function: Real part of "catan_towardzero": +double: 1 +float: 2 + +Function: Imaginary part of "catan_towardzero": +double: 2 +float: 2 + +Function: Real part of "catan_upward": +double: 2 +float: 1 + +Function: Imaginary part of "catan_upward": +double: 2 +float: 2 + +Function: Real part of "catanh": +double: 1 +float: 1 + +Function: Imaginary part of "catanh": +double: 1 +float: 1 + +Function: Real part of "catanh_downward": +double: 2 +float: 2 + +Function: Imaginary part of "catanh_downward": +double: 1 +float: 2 + +Function: Real part of "catanh_towardzero": +double: 2 +float: 2 + +Function: Imaginary part of "catanh_towardzero": +double: 1 +float: 2 + +Function: Real part of "catanh_upward": +double: 4 +float: 4 + +Function: Imaginary part of "catanh_upward": +double: 2 +float: 1 + +Function: "cbrt": +double: 4 +float: 1 + +Function: "cbrt_downward": +double: 4 +float: 1 + +Function: "cbrt_towardzero": +double: 3 +float: 1 + +Function: "cbrt_upward": +double: 5 +float: 1 + +Function: Real part of "ccos": +double: 1 +float: 1 + +Function: Imaginary part of "ccos": +double: 1 +float: 1 + +Function: Real part of "ccos_downward": +double: 3 +float: 1 + +Function: Imaginary part of "ccos_downward": +double: 3 +float: 3 + +Function: Real part of "ccos_towardzero": +double: 3 +float: 2 + +Function: Imaginary part of "ccos_towardzero": +double: 3 +float: 3 + +Function: Real part of "ccos_upward": +double: 1 +float: 2 + +Function: Imaginary part of "ccos_upward": +double: 2 +float: 2 + +Function: Real part of "ccosh": +double: 2 +float: 1 + +Function: Imaginary part of "ccosh": +double: 1 +float: 1 + +Function: Real part of "ccosh_downward": +double: 3 +float: 2 + +Function: Imaginary part of "ccosh_downward": +double: 3 +float: 3 + +Function: Real part of "ccosh_towardzero": +double: 3 +float: 3 + +Function: Imaginary part of "ccosh_towardzero": +double: 3 +float: 3 + +Function: Real part of "ccosh_upward": +double: 1 +float: 2 + +Function: Imaginary part of "ccosh_upward": +double: 2 +float: 2 + +Function: Real part of "cexp": +double: 2 +float: 1 + +Function: Imaginary part of "cexp": +double: 1 +float: 2 + +Function: Real part of "cexp_downward": +double: 4 +float: 2 + +Function: Imaginary part of "cexp_downward": +double: 3 +float: 3 + +Function: Real part of "cexp_towardzero": +double: 4 +float: 2 + +Function: Imaginary part of "cexp_towardzero": +double: 3 +float: 3 + +Function: Real part of "cexp_upward": +double: 2 +float: 2 + +Function: Imaginary part of "cexp_upward": +double: 3 +float: 2 + +Function: Real part of "clog": +double: 3 +float: 3 + +Function: Imaginary part of "clog": +double: 1 +float: 1 + +Function: Real part of "clog10": +double: 3 +float: 4 + +Function: Imaginary part of "clog10": +double: 2 +float: 2 + +Function: Real part of "clog10_downward": +double: 7 +float: 5 + +Function: Imaginary part of "clog10_downward": +double: 8 +float: 4 + +Function: Real part of "clog10_towardzero": +double: 5 +float: 5 + +Function: Imaginary part of "clog10_towardzero": +double: 8 +float: 4 + +Function: Real part of "clog10_upward": +double: 6 +float: 5 + +Function: Imaginary part of "clog10_upward": +double: 5 +float: 4 + +Function: Real part of "clog_downward": +double: 4 +float: 3 + +Function: Imaginary part of "clog_downward": +double: 5 +float: 2 + +Function: Real part of "clog_towardzero": +double: 8 +float: 4 + +Function: Imaginary part of "clog_towardzero": +double: 5 +float: 3 + +Function: Real part of "clog_upward": +double: 8 +float: 3 + +Function: Imaginary part of "clog_upward": +double: 8 +float: 2 + +Function: "cos": +double: 1 +float: 1 + +Function: "cos_downward": +double: 1 +float: 1 + +Function: "cos_towardzero": +double: 4 +float: 1 + +Function: "cos_upward": +double: 4 +float: 1 + +Function: "cosh": +double: 2 +float: 2 + +Function: "cosh_downward": +double: 2 +float: 1 + +Function: "cosh_towardzero": +double: 2 +float: 1 + +Function: "cosh_upward": +double: 2 +float: 2 + +Function: Real part of "cpow": +double: 2 +float: 5 + +Function: Imaginary part of "cpow": +float: 2 + +Function: Real part of "cpow_downward": +double: 5 +float: 8 + +Function: Imaginary part of "cpow_downward": +double: 2 +float: 2 + +Function: Real part of "cpow_towardzero": +double: 5 +float: 8 + +Function: Imaginary part of "cpow_towardzero": +double: 2 +float: 2 + +Function: Real part of "cpow_upward": +double: 4 +float: 1 + +Function: Imaginary part of "cpow_upward": +double: 2 +float: 2 + +Function: Real part of "csin": +double: 1 +float: 1 + +Function: Real part of "csin_downward": +double: 3 +float: 3 + +Function: Imaginary part of "csin_downward": +double: 3 +float: 1 + +Function: Real part of "csin_towardzero": +double: 3 +float: 3 + +Function: Imaginary part of "csin_towardzero": +double: 3 +float: 1 + +Function: Real part of "csin_upward": +double: 2 +float: 2 + +Function: Imaginary part of "csin_upward": +double: 1 +float: 2 + +Function: Real part of "csinh": +float: 1 + +Function: Imaginary part of "csinh": +double: 1 +float: 1 + +Function: Real part of "csinh_downward": +double: 3 +float: 1 + +Function: Imaginary part of "csinh_downward": +double: 3 +float: 3 + +Function: Real part of "csinh_towardzero": +double: 3 +float: 2 + +Function: Imaginary part of "csinh_towardzero": +double: 3 +float: 3 + +Function: Real part of "csinh_upward": +double: 1 +float: 2 + +Function: Imaginary part of "csinh_upward": +double: 2 +float: 2 + +Function: Real part of "csqrt": +double: 2 +float: 2 + +Function: Imaginary part of "csqrt": +double: 2 +float: 2 + +Function: Real part of "csqrt_downward": +double: 5 +float: 4 + +Function: Imaginary part of "csqrt_downward": +double: 4 +float: 3 + +Function: Real part of "csqrt_towardzero": +double: 4 +float: 3 + +Function: Imaginary part of "csqrt_towardzero": +double: 4 +float: 3 + +Function: Real part of "csqrt_upward": +double: 5 +float: 4 + +Function: Imaginary part of "csqrt_upward": +double: 3 +float: 3 + +Function: Real part of "ctan": +double: 1 +float: 1 + +Function: Imaginary part of "ctan": +double: 2 +float: 2 + +Function: Real part of "ctan_downward": +double: 6 +float: 5 + +Function: Imaginary part of "ctan_downward": +double: 3 +float: 2 + +Function: Real part of "ctan_towardzero": +double: 5 +float: 3 + +Function: Imaginary part of "ctan_towardzero": +double: 3 +float: 2 + +Function: Real part of "ctan_upward": +double: 2 +float: 4 + +Function: Imaginary part of "ctan_upward": +double: 2 +float: 1 + +Function: Real part of "ctanh": +double: 2 +float: 2 + +Function: Imaginary part of "ctanh": +double: 2 +float: 2 + +Function: Real part of "ctanh_downward": +double: 3 +float: 2 + +Function: Imaginary part of "ctanh_downward": +double: 6 +float: 5 + +Function: Real part of "ctanh_towardzero": +double: 3 +float: 2 + +Function: Imaginary part of "ctanh_towardzero": +double: 5 +float: 3 + +Function: Real part of "ctanh_upward": +double: 2 +float: 2 + +Function: Imaginary part of "ctanh_upward": +double: 2 +float: 3 + +Function: "erf": +double: 1 +float: 1 + +Function: "erf_downward": +double: 1 +float: 1 + +Function: "erf_towardzero": +double: 1 +float: 1 + +Function: "erf_upward": +double: 1 +float: 1 + +Function: "erfc": +double: 5 +float: 3 + +Function: "erfc_downward": +double: 5 +float: 6 + +Function: "erfc_towardzero": +double: 3 +float: 4 + +Function: "erfc_upward": +double: 5 +float: 6 + +Function: "exp": +double: 1 +float: 1 + +Function: "exp10": +double: 2 +float: 1 + +Function: "exp10_downward": +double: 3 + +Function: "exp10_towardzero": +double: 3 + +Function: "exp10_upward": +double: 2 +float: 1 + +Function: "exp2": +double: 1 + +Function: "exp2_downward": +double: 1 + +Function: "exp2_towardzero": +double: 1 + +Function: "exp2_upward": +double: 1 +float: 1 + +Function: "exp_downward": +double: 1 +float: 1 + +Function: "exp_towardzero": +double: 1 +float: 1 + +Function: "exp_upward": +double: 1 +float: 1 + +Function: "expm1": +double: 1 +float: 1 + +Function: "expm1_downward": +double: 1 +float: 1 + +Function: "expm1_towardzero": +double: 1 +float: 2 + +Function: "expm1_upward": +double: 1 +float: 1 + +Function: "gamma": +double: 4 +float: 7 + +Function: "gamma_downward": +double: 7 +float: 7 + +Function: "gamma_towardzero": +double: 7 +float: 7 + +Function: "gamma_upward": +double: 5 +float: 6 + +Function: "hypot": +double: 1 + +Function: "hypot_downward": +double: 1 + +Function: "hypot_towardzero": +double: 1 + +Function: "hypot_upward": +double: 1 + +Function: "j0": +double: 2 +float: 9 + +Function: "j0_downward": +double: 2 +float: 4 + +Function: "j0_towardzero": +double: 4 +float: 5 + +Function: "j0_upward": +double: 4 +float: 5 + +Function: "j1": +double: 4 +float: 9 + +Function: "j1_downward": +double: 4 +float: 5 + +Function: "j1_towardzero": +double: 4 +float: 2 + +Function: "j1_upward": +double: 3 +float: 5 + +Function: "jn": +double: 4 +float: 4 + +Function: "jn_downward": +double: 7 +float: 9 + +Function: "jn_towardzero": +double: 7 +float: 9 + +Function: "jn_upward": +double: 7 +float: 9 + +Function: "lgamma": +double: 4 +float: 7 + +Function: "lgamma_downward": +double: 7 +float: 7 + +Function: "lgamma_towardzero": +double: 7 +float: 7 + +Function: "lgamma_upward": +double: 5 +float: 6 + +Function: "log10": +double: 2 +float: 2 + +Function: "log10_downward": +double: 2 +float: 3 + +Function: "log10_towardzero": +double: 2 +float: 1 + +Function: "log10_upward": +double: 2 +float: 2 + +Function: "log1p": +double: 1 +float: 1 + +Function: "log1p_downward": +double: 2 +float: 2 + +Function: "log1p_towardzero": +double: 2 +float: 2 + +Function: "log1p_upward": +double: 2 +float: 2 + +Function: "log2": +float: 1 + +Function: "log2_downward": +double: 1 + +Function: "log2_towardzero": +double: 1 + +Function: "log2_upward": +double: 1 + +Function: "pow": +double: 1 + +Function: "pow_downward": +double: 1 +float: 1 + +Function: "pow_towardzero": +double: 1 +float: 1 + +Function: "pow_upward": +double: 1 +float: 1 + +Function: "sin": +double: 1 +float: 1 + +Function: "sin_downward": +double: 4 +float: 1 + +Function: "sin_towardzero": +double: 3 +float: 1 + +Function: "sin_upward": +double: 7 +float: 1 + +Function: "sincos": +double: 1 + +Function: "sincos_downward": +double: 1 +float: 1 + +Function: "sincos_towardzero": +double: 4 +float: 1 + +Function: "sincos_upward": +double: 1 +float: 1 + +Function: "sinh": +double: 2 +float: 2 + +Function: "sinh_downward": +double: 3 +float: 3 + +Function: "sinh_towardzero": +double: 2 +float: 2 + +Function: "sinh_upward": +double: 3 +float: 3 + +Function: "tan": +float: 1 + +Function: "tan_downward": +double: 1 +float: 2 + +Function: "tan_towardzero": +double: 1 +float: 1 + +Function: "tan_upward": +double: 1 +float: 1 + +Function: "tanh": +double: 2 +float: 2 + +Function: "tanh_downward": +double: 3 +float: 3 + +Function: "tanh_towardzero": +double: 2 +float: 2 + +Function: "tanh_upward": +double: 3 +float: 3 + +Function: "tgamma": +double: 9 +float: 8 + +Function: "tgamma_downward": +double: 9 +float: 9 + +Function: "tgamma_towardzero": +double: 9 +float: 8 + +Function: "tgamma_upward": +double: 9 +float: 8 + +Function: "y0": +double: 3 +float: 9 + +Function: "y0_downward": +double: 3 +float: 6 + +Function: "y0_towardzero": +double: 3 +float: 3 + +Function: "y0_upward": +double: 3 +float: 6 + +Function: "y1": +double: 3 +float: 9 + +Function: "y1_downward": +double: 6 +float: 7 + +Function: "y1_towardzero": +double: 3 +float: 3 + +Function: "y1_upward": +double: 7 +float: 5 + +Function: "yn": +double: 3 +float: 3 + +Function: "yn_downward": +double: 6 +float: 8 + +Function: "yn_towardzero": +double: 8 +float: 8 + +Function: "yn_upward": +double: 8 +float: 8 + +# end of automatic generation diff --git a/sysdeps/or1k/libm-test-ulps-name b/sysdeps/or1k/libm-test-ulps-name new file mode 100644 index 0000000000..0af6591fd9 --- /dev/null +++ b/sysdeps/or1k/libm-test-ulps-name @@ -0,0 +1 @@ +OpenRISC diff --git a/sysdeps/or1k/nofpu/math-tests-exceptions.h b/sysdeps/or1k/nofpu/math-tests-exceptions.h new file mode 100644 index 0000000000..cf4ed98279 --- /dev/null +++ b/sysdeps/or1k/nofpu/math-tests-exceptions.h @@ -0,0 +1,29 @@ +/* Configuration for math tests: support for exceptions. OpenRISC no-FPU + version. + Copyright (C) 2021 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 OR1K_NOFPU_MATH_TESTS_EXCEPTIONS_H +#define OR1K_NOFPU_MATH_TESTS_EXCEPTIONS_H 1 + +/* We support setting floating-point exception flags on hard-float + targets. These are not supported on soft-float targets. */ +#define EXCEPTION_TESTS_float 0 +#define EXCEPTION_TESTS_double 0 +#define EXCEPTION_TESTS_long_double 0 + +#endif /* math-tests-exceptions.h. */ diff --git a/sysdeps/or1k/nofpu/math-tests-rounding.h b/sysdeps/or1k/nofpu/math-tests-rounding.h new file mode 100644 index 0000000000..2b69a541a3 --- /dev/null +++ b/sysdeps/or1k/nofpu/math-tests-rounding.h @@ -0,0 +1,28 @@ +/* Configuration for math tests: rounding mode support. OpenRISC no-FPU + version. + Copyright (C) 2021 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 OR1K_NOFPU_MATH_TESTS_ROUNDING_H +#define OR1K_NOFPU_MATH_TESTS_ROUNDING_H 1 + +/* On soft-float targets we only support the "to nearest" rounding mode. */ +#define ROUNDING_TESTS_float(MODE) ((MODE) == FE_TONEAREST) +#define ROUNDING_TESTS_double(MODE) ((MODE) == FE_TONEAREST) +#define ROUNDING_TESTS_long_double(MODE) ((MODE) == FE_TONEAREST) + +#endif /* math-tests-rounding.h. */ diff --git a/sysdeps/or1k/sfp-machine.h b/sysdeps/or1k/sfp-machine.h new file mode 100644 index 0000000000..18f2676510 --- /dev/null +++ b/sysdeps/or1k/sfp-machine.h @@ -0,0 +1,93 @@ +/* OpenRISC softfloat definitions. + Copyright (C) 2021 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 + . */ + +#define _FP_W_TYPE_SIZE 32 +#define _FP_W_TYPE unsigned long +#define _FP_WS_TYPE signed long +#define _FP_I_TYPE long + +#define _FP_MUL_MEAT_S(R,X,Y) \ + _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm) +#define _FP_MUL_MEAT_D(R,X,Y) \ + _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm) +#define _FP_MUL_MEAT_Q(R,X,Y) \ + _FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm) + +#define _FP_MUL_MEAT_DW_S(R,X,Y) \ + _FP_MUL_MEAT_DW_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm) +#define _FP_MUL_MEAT_DW_D(R,X,Y) \ + _FP_MUL_MEAT_DW_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm) +#define _FP_MUL_MEAT_DW_Q(R,X,Y) \ + _FP_MUL_MEAT_DW_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm) + + +#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_loop(S,R,X,Y) +#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y) +#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y) + +#define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1) +#define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1), -1 +#define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1, -1, -1 +#define _FP_NANSIGN_S 0 +#define _FP_NANSIGN_D 0 +#define _FP_NANSIGN_Q 0 + +#define _FP_KEEPNANFRACP 1 +#define _FP_QNANNEGATEDP 0 + +/* Someone please check this. */ +#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \ + do { \ + if ((_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs) \ + && !(_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs)) \ + { \ + R##_s = Y##_s; \ + _FP_FRAC_COPY_##wc(R,Y); \ + } \ + else \ + { \ + R##_s = X##_s; \ + _FP_FRAC_COPY_##wc(R,X); \ + } \ + R##_c = FP_CLS_NAN; \ + } while (0) + +/* Handle getting and setting rounding mode for soft fp operations. */ + +#define FP_RND_NEAREST (0x0 << 1) +#define FP_RND_ZERO (0x1 << 1) +#define FP_RND_PINF (0x2 << 1) +#define FP_RND_MINF (0x3 << 1) +#define FP_RND_MASK (0x3 << 1) + +#define FP_EX_OVERFLOW (1 << 3) +#define FP_EX_UNDERFLOW (1 << 4) +#define FP_EX_INEXACT (1 << 8) +#define FP_EX_INVALID (1 << 9) +#define FP_EX_DIVZERO (1 << 11) +#define FP_EX_ALL \ + (FP_EX_INVALID | FP_EX_DIVZERO | FP_EX_OVERFLOW | FP_EX_UNDERFLOW \ + | FP_EX_INEXACT) + +#define _FP_DECL_EX \ + unsigned int _fpcsr __attribute__ ((unused)) = FP_RND_NEAREST + +#define FP_ROUNDMODE (_fpcsr & FP_RND_MASK) + +#define _FP_TININESS_AFTER_ROUNDING 0 diff --git a/sysdeps/or1k/tininess.h b/sysdeps/or1k/tininess.h new file mode 100644 index 0000000000..dafbc6cad5 --- /dev/null +++ b/sysdeps/or1k/tininess.h @@ -0,0 +1 @@ +#define TININESS_AFTER_ROUNDING 0 From patchwork Fri Dec 10 23:34:51 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stafford Horne X-Patchwork-Id: 48822 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id A06B13857C47 for ; Fri, 10 Dec 2021 23:41:25 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A06B13857C47 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1639179685; bh=IBHwRa5lg/LQBYNuAdzLWW5MjU1Nx1OYztXwo7zRoUA=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=jayxjGYxjdty/546DQJDP6o3j2028gB1v9JV6U4n3lCPKhKPjaJZdNj/y752nTumf CzVCH4ScSOg3RSnEAAd31Oc+QIX+QHGLrkvhuGnkuTrY0yAOdoM8zTYnK/1AYmFt79 Z13EBVIgGMxYJ7yrfRqKaJLRANp9/JpkV9c8jgR4= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-pl1-x62b.google.com (mail-pl1-x62b.google.com [IPv6:2607:f8b0:4864:20::62b]) by sourceware.org (Postfix) with ESMTPS id 561D53857C77 for ; Fri, 10 Dec 2021 23:35:30 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 561D53857C77 Received: by mail-pl1-x62b.google.com with SMTP id n8so7280583plf.4 for ; Fri, 10 Dec 2021 15:35:30 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=IBHwRa5lg/LQBYNuAdzLWW5MjU1Nx1OYztXwo7zRoUA=; b=c2FK19Kxzb4ZGRo1RV7s8NAWkDzxW7TWN6lliHrGD3hfERe1Ndzu190x5/xCABj7rS 9Otne8VF282HYyhtgBjCUhESW2epltMKiuzvf64Z8mGeOucrlXNKZPBK7TrtRiMvK95X yJc1cl1rCjRVdB+gIVIJZlrMrxUN7RGODEKbK77h4wG7PZuqlCAQsACqPjz/TD750d5o MKhkXymCaqz4qa9v2C7oxBq+MSwu9kNiMp59uv1YuEmjE7pNLiRmTq6O7++ciPbOLBaN wES39VPJQ1kSu601+1lVTLmJKtOpaeDMWBWPrYnQOxFDvTv9jLxbztmnIpBppct8GgoP FNaQ== X-Gm-Message-State: AOAM533iPxfGKAgLO1WF7nkvAUx4z6MrJfMYTVfAm0WT2Lr1NUefV2J3 EXWKl8vverBqaku4HhUYw25KVZo2J8E= X-Google-Smtp-Source: ABdhPJx/7rye2otB/7j3AcGv86ec35cGvvAReG3j+IHP85J/iQ8RpkmELfQIWX/dSe45QNuZqDnuSg== X-Received: by 2002:a17:903:11cd:b0:143:d220:fdd8 with SMTP id q13-20020a17090311cd00b00143d220fdd8mr78514309plh.79.1639179328703; Fri, 10 Dec 2021 15:35:28 -0800 (PST) Received: from localhost ([2409:10:24a0:4700:e8ad:216a:2a9d:6d0c]) by smtp.gmail.com with ESMTPSA id t3sm4693894pfg.94.2021.12.10.15.35.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Dec 2021 15:35:27 -0800 (PST) To: GLIBC patches Subject: [PATCH v3 08/13] or1k: Linux Syscall Interface Date: Sat, 11 Dec 2021 08:34:51 +0900 Message-Id: <20211210233456.4146479-9-shorne@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211210233456.4146479-1-shorne@gmail.com> References: <20211210233456.4146479-1-shorne@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-10.6 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_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Stafford Horne via Libc-alpha From: Stafford Horne Reply-To: Stafford Horne Cc: Openrisc Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" --- sysdeps/unix/sysv/linux/or1k/arch-syscall.h | 325 ++++++++++++++++++ sysdeps/unix/sysv/linux/or1k/bits/timesize.h | 19 + sysdeps/unix/sysv/linux/or1k/clone.c | 61 ++++ sysdeps/unix/sysv/linux/or1k/jmp_buf-macros.h | 41 +++ sysdeps/unix/sysv/linux/or1k/mmap_internal.h | 28 ++ sysdeps/unix/sysv/linux/or1k/or1k_clone.S | 89 +++++ sysdeps/unix/sysv/linux/or1k/sysdep.c | 34 ++ sysdeps/unix/sysv/linux/or1k/sysdep.h | 201 +++++++++++ 8 files changed, 798 insertions(+) create mode 100644 sysdeps/unix/sysv/linux/or1k/arch-syscall.h create mode 100644 sysdeps/unix/sysv/linux/or1k/bits/timesize.h create mode 100644 sysdeps/unix/sysv/linux/or1k/clone.c create mode 100644 sysdeps/unix/sysv/linux/or1k/jmp_buf-macros.h create mode 100644 sysdeps/unix/sysv/linux/or1k/mmap_internal.h create mode 100644 sysdeps/unix/sysv/linux/or1k/or1k_clone.S create mode 100644 sysdeps/unix/sysv/linux/or1k/sysdep.c create mode 100644 sysdeps/unix/sysv/linux/or1k/sysdep.h diff --git a/sysdeps/unix/sysv/linux/or1k/arch-syscall.h b/sysdeps/unix/sysv/linux/or1k/arch-syscall.h new file mode 100644 index 0000000000..c6c3556137 --- /dev/null +++ b/sysdeps/unix/sysv/linux/or1k/arch-syscall.h @@ -0,0 +1,325 @@ +/* AUTOGENERATED by update-syscall-lists.py. */ +#define __NR_accept 202 +#define __NR_accept4 242 +#define __NR_acct 89 +#define __NR_add_key 217 +#define __NR_adjtimex 171 +#define __NR_bind 200 +#define __NR_bpf 280 +#define __NR_brk 214 +#define __NR_capget 90 +#define __NR_capset 91 +#define __NR_chdir 49 +#define __NR_chroot 51 +#define __NR_clock_adjtime 266 +#define __NR_clock_adjtime64 405 +#define __NR_clock_getres 114 +#define __NR_clock_getres_time64 406 +#define __NR_clock_gettime 113 +#define __NR_clock_gettime64 403 +#define __NR_clock_nanosleep 115 +#define __NR_clock_nanosleep_time64 407 +#define __NR_clock_settime 112 +#define __NR_clock_settime64 404 +#define __NR_clone 220 +#define __NR_clone3 435 +#define __NR_close 57 +#define __NR_close_range 436 +#define __NR_connect 203 +#define __NR_copy_file_range 285 +#define __NR_delete_module 106 +#define __NR_dup 23 +#define __NR_dup3 24 +#define __NR_epoll_create1 20 +#define __NR_epoll_ctl 21 +#define __NR_epoll_pwait 22 +#define __NR_epoll_pwait2 441 +#define __NR_eventfd2 19 +#define __NR_execve 221 +#define __NR_execveat 281 +#define __NR_exit 93 +#define __NR_exit_group 94 +#define __NR_faccessat 48 +#define __NR_faccessat2 439 +#define __NR_fadvise64_64 223 +#define __NR_fallocate 47 +#define __NR_fanotify_init 262 +#define __NR_fanotify_mark 263 +#define __NR_fchdir 50 +#define __NR_fchmod 52 +#define __NR_fchmodat 53 +#define __NR_fchown 55 +#define __NR_fchownat 54 +#define __NR_fcntl64 25 +#define __NR_fdatasync 83 +#define __NR_fgetxattr 10 +#define __NR_finit_module 273 +#define __NR_flistxattr 13 +#define __NR_flock 32 +#define __NR_fremovexattr 16 +#define __NR_fsconfig 431 +#define __NR_fsetxattr 7 +#define __NR_fsmount 432 +#define __NR_fsopen 430 +#define __NR_fspick 433 +#define __NR_fstat64 80 +#define __NR_fstatat64 79 +#define __NR_fstatfs64 44 +#define __NR_fsync 82 +#define __NR_ftruncate64 46 +#define __NR_futex 98 +#define __NR_futex_time64 422 +#define __NR_get_mempolicy 236 +#define __NR_get_robust_list 100 +#define __NR_getcpu 168 +#define __NR_getcwd 17 +#define __NR_getdents64 61 +#define __NR_getegid 177 +#define __NR_geteuid 175 +#define __NR_getgid 176 +#define __NR_getgroups 158 +#define __NR_getitimer 102 +#define __NR_getpeername 205 +#define __NR_getpgid 155 +#define __NR_getpid 172 +#define __NR_getppid 173 +#define __NR_getpriority 141 +#define __NR_getrandom 278 +#define __NR_getresgid 150 +#define __NR_getresuid 148 +#define __NR_getrlimit 163 +#define __NR_getrusage 165 +#define __NR_getsid 156 +#define __NR_getsockname 204 +#define __NR_getsockopt 209 +#define __NR_gettid 178 +#define __NR_gettimeofday 169 +#define __NR_getuid 174 +#define __NR_getxattr 8 +#define __NR_init_module 105 +#define __NR_inotify_add_watch 27 +#define __NR_inotify_init1 26 +#define __NR_inotify_rm_watch 28 +#define __NR_io_cancel 3 +#define __NR_io_destroy 1 +#define __NR_io_getevents 4 +#define __NR_io_pgetevents 292 +#define __NR_io_pgetevents_time64 416 +#define __NR_io_setup 0 +#define __NR_io_submit 2 +#define __NR_io_uring_enter 426 +#define __NR_io_uring_register 427 +#define __NR_io_uring_setup 425 +#define __NR_ioctl 29 +#define __NR_ioprio_get 31 +#define __NR_ioprio_set 30 +#define __NR_kcmp 272 +#define __NR_kexec_file_load 294 +#define __NR_kexec_load 104 +#define __NR_keyctl 219 +#define __NR_kill 129 +#define __NR_landlock_add_rule 445 +#define __NR_landlock_create_ruleset 444 +#define __NR_landlock_restrict_self 446 +#define __NR_lgetxattr 9 +#define __NR_linkat 37 +#define __NR_listen 201 +#define __NR_listxattr 11 +#define __NR_llistxattr 12 +#define __NR_llseek 62 +#define __NR_lookup_dcookie 18 +#define __NR_lremovexattr 15 +#define __NR_lsetxattr 6 +#define __NR_madvise 233 +#define __NR_mbind 235 +#define __NR_membarrier 283 +#define __NR_memfd_create 279 +#define __NR_migrate_pages 238 +#define __NR_mincore 232 +#define __NR_mkdirat 34 +#define __NR_mknodat 33 +#define __NR_mlock 228 +#define __NR_mlock2 284 +#define __NR_mlockall 230 +#define __NR_mmap2 222 +#define __NR_mount 40 +#define __NR_mount_setattr 442 +#define __NR_move_mount 429 +#define __NR_move_pages 239 +#define __NR_mprotect 226 +#define __NR_mq_getsetattr 185 +#define __NR_mq_notify 184 +#define __NR_mq_open 180 +#define __NR_mq_timedreceive 183 +#define __NR_mq_timedreceive_time64 419 +#define __NR_mq_timedsend 182 +#define __NR_mq_timedsend_time64 418 +#define __NR_mq_unlink 181 +#define __NR_mremap 216 +#define __NR_msgctl 187 +#define __NR_msgget 186 +#define __NR_msgrcv 188 +#define __NR_msgsnd 189 +#define __NR_msync 227 +#define __NR_munlock 229 +#define __NR_munlockall 231 +#define __NR_munmap 215 +#define __NR_name_to_handle_at 264 +#define __NR_nanosleep 101 +#define __NR_nfsservctl 42 +#define __NR_open_by_handle_at 265 +#define __NR_open_tree 428 +#define __NR_openat 56 +#define __NR_openat2 437 +#define __NR_or1k_atomic 244 +#define __NR_perf_event_open 241 +#define __NR_personality 92 +#define __NR_pidfd_getfd 438 +#define __NR_pidfd_open 434 +#define __NR_pidfd_send_signal 424 +#define __NR_pipe2 59 +#define __NR_pivot_root 41 +#define __NR_pkey_alloc 289 +#define __NR_pkey_free 290 +#define __NR_pkey_mprotect 288 +#define __NR_ppoll 73 +#define __NR_ppoll_time64 414 +#define __NR_prctl 167 +#define __NR_pread64 67 +#define __NR_preadv 69 +#define __NR_preadv2 286 +#define __NR_prlimit64 261 +#define __NR_process_madvise 440 +#define __NR_process_mrelease 448 +#define __NR_process_vm_readv 270 +#define __NR_process_vm_writev 271 +#define __NR_pselect6 72 +#define __NR_pselect6_time64 413 +#define __NR_ptrace 117 +#define __NR_pwrite64 68 +#define __NR_pwritev 70 +#define __NR_pwritev2 287 +#define __NR_quotactl 60 +#define __NR_quotactl_fd 443 +#define __NR_read 63 +#define __NR_readahead 213 +#define __NR_readlinkat 78 +#define __NR_readv 65 +#define __NR_reboot 142 +#define __NR_recvfrom 207 +#define __NR_recvmmsg 243 +#define __NR_recvmmsg_time64 417 +#define __NR_recvmsg 212 +#define __NR_remap_file_pages 234 +#define __NR_removexattr 14 +#define __NR_renameat 38 +#define __NR_renameat2 276 +#define __NR_request_key 218 +#define __NR_restart_syscall 128 +#define __NR_rseq 293 +#define __NR_rt_sigaction 134 +#define __NR_rt_sigpending 136 +#define __NR_rt_sigprocmask 135 +#define __NR_rt_sigqueueinfo 138 +#define __NR_rt_sigreturn 139 +#define __NR_rt_sigsuspend 133 +#define __NR_rt_sigtimedwait 137 +#define __NR_rt_sigtimedwait_time64 421 +#define __NR_rt_tgsigqueueinfo 240 +#define __NR_sched_get_priority_max 125 +#define __NR_sched_get_priority_min 126 +#define __NR_sched_getaffinity 123 +#define __NR_sched_getattr 275 +#define __NR_sched_getparam 121 +#define __NR_sched_getscheduler 120 +#define __NR_sched_rr_get_interval 127 +#define __NR_sched_rr_get_interval_time64 423 +#define __NR_sched_setaffinity 122 +#define __NR_sched_setattr 274 +#define __NR_sched_setparam 118 +#define __NR_sched_setscheduler 119 +#define __NR_sched_yield 124 +#define __NR_seccomp 277 +#define __NR_semctl 191 +#define __NR_semget 190 +#define __NR_semop 193 +#define __NR_semtimedop 192 +#define __NR_semtimedop_time64 420 +#define __NR_sendfile64 71 +#define __NR_sendmmsg 269 +#define __NR_sendmsg 211 +#define __NR_sendto 206 +#define __NR_set_mempolicy 237 +#define __NR_set_robust_list 99 +#define __NR_set_tid_address 96 +#define __NR_setdomainname 162 +#define __NR_setfsgid 152 +#define __NR_setfsuid 151 +#define __NR_setgid 144 +#define __NR_setgroups 159 +#define __NR_sethostname 161 +#define __NR_setitimer 103 +#define __NR_setns 268 +#define __NR_setpgid 154 +#define __NR_setpriority 140 +#define __NR_setregid 143 +#define __NR_setresgid 149 +#define __NR_setresuid 147 +#define __NR_setreuid 145 +#define __NR_setrlimit 164 +#define __NR_setsid 157 +#define __NR_setsockopt 208 +#define __NR_settimeofday 170 +#define __NR_setuid 146 +#define __NR_setxattr 5 +#define __NR_shmat 196 +#define __NR_shmctl 195 +#define __NR_shmdt 197 +#define __NR_shmget 194 +#define __NR_shutdown 210 +#define __NR_sigaltstack 132 +#define __NR_signalfd4 74 +#define __NR_socket 198 +#define __NR_socketpair 199 +#define __NR_splice 76 +#define __NR_statfs64 43 +#define __NR_statx 291 +#define __NR_swapoff 225 +#define __NR_swapon 224 +#define __NR_symlinkat 36 +#define __NR_sync 81 +#define __NR_sync_file_range 84 +#define __NR_syncfs 267 +#define __NR_sysinfo 179 +#define __NR_syslog 116 +#define __NR_tee 77 +#define __NR_tgkill 131 +#define __NR_timer_create 107 +#define __NR_timer_delete 111 +#define __NR_timer_getoverrun 109 +#define __NR_timer_gettime 108 +#define __NR_timer_gettime64 408 +#define __NR_timer_settime 110 +#define __NR_timer_settime64 409 +#define __NR_timerfd_create 85 +#define __NR_timerfd_gettime 87 +#define __NR_timerfd_gettime64 410 +#define __NR_timerfd_settime 86 +#define __NR_timerfd_settime64 411 +#define __NR_times 153 +#define __NR_tkill 130 +#define __NR_truncate64 45 +#define __NR_umask 166 +#define __NR_umount2 39 +#define __NR_uname 160 +#define __NR_unlinkat 35 +#define __NR_unshare 97 +#define __NR_userfaultfd 282 +#define __NR_utimensat 88 +#define __NR_utimensat_time64 412 +#define __NR_vhangup 58 +#define __NR_vmsplice 75 +#define __NR_wait4 260 +#define __NR_waitid 95 +#define __NR_write 64 +#define __NR_writev 66 diff --git a/sysdeps/unix/sysv/linux/or1k/bits/timesize.h b/sysdeps/unix/sysv/linux/or1k/bits/timesize.h new file mode 100644 index 0000000000..3ab388da7f --- /dev/null +++ b/sysdeps/unix/sysv/linux/or1k/bits/timesize.h @@ -0,0 +1,19 @@ +/* Bit size of the time_t type at glibc build time, OpenRISC version. + Copyright (C) 2021 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 + . */ + +#define __TIMESIZE 64 diff --git a/sysdeps/unix/sysv/linux/or1k/clone.c b/sysdeps/unix/sysv/linux/or1k/clone.c new file mode 100644 index 0000000000..531fd17e29 --- /dev/null +++ b/sysdeps/unix/sysv/linux/or1k/clone.c @@ -0,0 +1,61 @@ +/* OpenRISC helper for the clone syscall. + Copyright (C) 2021 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 + +extern int __or1k_clone (int (*fn)(void *), void *child_stack, + int flags, void *arg, pid_t *ptid, + void *tls, pid_t *ctid); + + +/* The OpenRISC ABI uses the stack for varargs like those using in clone + but the linux syscall ABI uses registers. + This function moves from varargs to regs. */ +int +__clone (int (*fn)(void *), void *child_stack, + int flags, void *arg, ... + /* pid_t *ptid, struct user_desc *tls, pid_t *ctid */ ) +{ + void *ptid; + void *tls; + void *ctid; + va_list ap; + int err; + + va_start (ap, arg); + ptid = va_arg (ap, void *); + tls = va_arg (ap, void *); + ctid = va_arg (ap, void *); + va_end (ap); + + /* Sanity check the arguments */ + err = -EINVAL; + if (!fn) + goto syscall_error; + if (!child_stack) + goto syscall_error; + + return __or1k_clone (fn, child_stack, flags, arg, ptid, tls, ctid); + +syscall_error: + __set_errno (-err); + return -1; +} +libc_hidden_def (__clone) +weak_alias (__clone, clone) diff --git a/sysdeps/unix/sysv/linux/or1k/jmp_buf-macros.h b/sysdeps/unix/sysv/linux/or1k/jmp_buf-macros.h new file mode 100644 index 0000000000..3c5c1826ab --- /dev/null +++ b/sysdeps/unix/sysv/linux/or1k/jmp_buf-macros.h @@ -0,0 +1,41 @@ +/* jump buffer constants, OpenRISC version. + Copyright (C) 2021 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 + . */ + +/* Produced by this program: + + #include + #include + #include + #include + + int main (int argc, char **argv) + { + printf ("#define JMP_BUF_SIZE %d\n", sizeof (jmp_buf)); + printf ("#define JMP_BUF_ALIGN %d\n", __alignof__ (jmp_buf)); + printf ("#define SIGJMP_BUF_SIZE %d\n", sizeof (sigjmp_buf)); + printf ("#define SIGJMP_BUF_ALIGN %d\n", __alignof__ (sigjmp_buf)); + printf ("#define MASK_WAS_SAVED_OFFSET %d\n", offsetof (struct __jmp_buf_tag, __mask_was_saved)); + printf ("#define SAVED_MASK_OFFSET %d\n", offsetof (struct __jmp_buf_tag, __saved_mask)); + } */ + +#define JMP_BUF_SIZE 184 +#define JMP_BUF_ALIGN 4 +#define SIGJMP_BUF_SIZE 184 +#define SIGJMP_BUF_ALIGN 4 +#define MASK_WAS_SAVED_OFFSET 52 +#define SAVED_MASK_OFFSET 56 diff --git a/sysdeps/unix/sysv/linux/or1k/mmap_internal.h b/sysdeps/unix/sysv/linux/or1k/mmap_internal.h new file mode 100644 index 0000000000..817b841e5b --- /dev/null +++ b/sysdeps/unix/sysv/linux/or1k/mmap_internal.h @@ -0,0 +1,28 @@ +/* Common mmap definition for Linux implementation. OpenRISC version. + Copyright (C) 2021 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 MMAP_OR1K_INTERNAL_LINUX_H +#define MMAP_OR1K_INTERNAL_LINUX_H + +/* OpenRISC Linux sets the page shift to 13 and mmap2 expects + offsets to be provided in 8K pages. */ +#define MMAP2_PAGE_UNIT 8192ULL + +#include_next + +#endif diff --git a/sysdeps/unix/sysv/linux/or1k/or1k_clone.S b/sysdeps/unix/sysv/linux/or1k/or1k_clone.S new file mode 100644 index 0000000000..337eb17d06 --- /dev/null +++ b/sysdeps/unix/sysv/linux/or1k/or1k_clone.S @@ -0,0 +1,89 @@ +/* clone helper __or1k_clone for OpenRISC. + Copyright (C) 2021 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, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include +#include +#define __ASSEMBLY__ +#include + + .text +ENTRY(__or1k_clone) + + /* To handle GCC varargs we need to use our __clone wrapper to pop + everything from the stack for us. + Now everything is placed in the registers which saves us a lot + of trouble. + + The userland implementation is: + + int clone (int (*fn)(void *), void *child_stack, + int flags, void *arg, pid_t *ptid, + struct user_desc *tls, pid_t *ctid); + The kernel entry is: + + int clone (long flags, void *child_stack, int *parent_tid, + int *child_tid, struct void *tls) + + NB: tls isn't really an argument, it is read from r7 directly. */ + + /* First, align the stack to 4 bytes. */ + l.xori r11, r0, -4 + l.and r4, r4, r11 + + /* Put 'fn', 'arg' and 'flags' on the child stack. */ + l.addi r4, r4, -12 + l.sw 8(r4), r3 + l.sw 4(r4), r6 + l.sw 0(r4), r5 + + l.ori r3, r5, 0 + /* The child_stack is already in r4. */ + l.ori r5, r7, 0 + l.lwz r6, 0(r1) + l.ori r7, r8, 0 + + DO_CALL (clone) + + l.sfgeui r11, 0xf001 + l.bf L(error) + l.nop + + /* If we are not the child, return the pid. */ + l.sfeqi r11, 0 + l.bf L(thread_start) + l.nop + + l.jr r9 + l.nop + +L(thread_start): + /* Load function from stack. */ + l.lwz r11, 8(r1) + l.jalr r11 + l.lwz r3, 4(r1) + + /* Exit the child thread. */ + l.ori r3, r11, 0 + DO_CALL (exit) + +L(error): + l.j SYSCALL_ERROR_NAME + l.ori r3, r11, 0 + +PSEUDO_END (__or1k_clone) diff --git a/sysdeps/unix/sysv/linux/or1k/sysdep.c b/sysdeps/unix/sysv/linux/or1k/sysdep.c new file mode 100644 index 0000000000..1130cba687 --- /dev/null +++ b/sysdeps/unix/sysv/linux/or1k/sysdep.c @@ -0,0 +1,34 @@ +/* OpenRISC wrapper for setting errno. + Copyright (C) 2021 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 + +long int __syscall_error (long int err); +hidden_proto (__syscall_error) + +/* This routine is jumped to by all the syscall handlers, to stash + an error number into errno. */ +long int +__syscall_error (long int err) +{ + __set_errno (- err); + return -1; +} +hidden_def (__syscall_error) diff --git a/sysdeps/unix/sysv/linux/or1k/sysdep.h b/sysdeps/unix/sysv/linux/or1k/sysdep.h new file mode 100644 index 0000000000..5dd6da48a1 --- /dev/null +++ b/sysdeps/unix/sysv/linux/or1k/sysdep.h @@ -0,0 +1,201 @@ +/* Assembler and syscall macros. OpenRISC version. + Copyright (C) 2021 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 _LINUX_OR1K_SYSDEP_H +#define _LINUX_OR1K_SYSDEP_H 1 + +#include +#include +#include + +/* "workarounds" for generic code needing to handle 64-bit time_t. */ + +#undef __NR_clock_getres +#undef __NR_futex +#undef __NR_ppoll +#undef __NR_pselect6 +#undef __NR_recvmmsg +#undef __NR_rt_sigtimedwait +#undef __NR_semtimedop +#undef __NR_utimensat + +/* Fix sysdeps/unix/sysv/linux/clock_getcpuclockid.c. */ +#define __NR_clock_getres __NR_clock_getres_time64 +/* Fix sysdeps/nptl/lowlevellock-futex.h. */ +#define __NR_futex __NR_futex_time64 +/* Fix sysdeps/unix/sysv/linux/pause.c. */ +#define __NR_ppoll __NR_ppoll_time64 +/* Fix sysdeps/unix/sysv/linux/select.c. */ +#define __NR_pselect6 __NR_pselect6_time64 +/* Fix sysdeps/unix/sysv/linux/recvmmsg.c. */ +#define __NR_recvmmsg __NR_recvmmsg_time64 +/* Fix sysdeps/unix/sysv/linux/sigtimedwait.c. */ +#define __NR_rt_sigtimedwait __NR_rt_sigtimedwait_time64 +/* Fix sysdeps/unix/sysv/linux/semtimedop.c. */ +#define __NR_semtimedop __NR_semtimedop_time64 +/* Hack sysdeps/unix/sysv/linux/generic/utimes.c. */ +#define __NR_utimensat __NR_utimensat_time64 + +#undef SYS_ify +#define SYS_ify(syscall_name) (__NR_##syscall_name) + +/* Linux uses a negative return value to indicate syscall errors, + unlike most Unices, which use the condition codes' carry flag. + + Since version 2.1 the return value of a system call might be + negative even if the call succeeded. E.g., the lseek system call + might return a large offset. Therefore we must not anymore test + for < 0, but test for a real error by making sure the value in R0 + is a real error number. Linus said he will make sure the no syscall + returns a value in -1 .. -4095 as a valid result so we can safely + test with -4095. */ + +#ifdef __ASSEMBLER__ + +/* Macros used in syscall-template.S */ +#define ret l.jr r9; l.nop +#define ret_NOERRNO l.jr r9; l.nop + +#undef DO_CALL +#define DO_CALL(syscall_name) \ + l.addi r11, r0, SYS_ify (syscall_name); \ + l.sys 1; \ + l.nop + +#undef PSEUDO +#define PSEUDO(name, syscall_name, args) \ + ENTRY (name); \ + DO_CALL(syscall_name); \ + /* if -4096 < ret < 0 holds, it's an error */ \ + l.sfgeui r11, 0xf001; \ + l.bf L(pseudo_end); \ + l.nop + +#undef PSEUDO_NOERRNO +#define PSEUDO_NOERRNO(name, syscall_name, args) \ + ENTRY (name); \ + DO_CALL(syscall_name) + +#undef PSEUDO_END +#define PSEUDO_END(name) \ +L(pseudo_end): \ + l.j SYSCALL_ERROR_NAME; \ + l.ori r3,r11,0; \ + END (name) + +#undef PSEUDO_END_NOERRNO +#define PSEUDO_END_NOERRNO(name) \ + END (name) + +#ifndef PIC +/* For static code, on error jump to __syscall_error directly. */ +# define SYSCALL_ERROR_NAME __syscall_error +#elif !IS_IN (libc) +/* Use the internal name for libc shared objects. */ +# define SYSCALL_ERROR_NAME __GI___syscall_error +#else +/* Otherwise, on error do a full PLT jump. */ +# define SYSCALL_ERROR_NAME plt(__syscall_error) +#endif + +#else /* not __ASSEMBLER__ */ + +#include + +extern long int __syscall_error (long int neg_errno); + +/* Pointer mangling is not yet supported for or1k. */ +#define PTR_MANGLE(var) (void) (var) +#define PTR_DEMANGLE(var) (void) (var) + +#undef INTERNAL_SYSCALL +#define INTERNAL_SYSCALL(name, nr, args...) \ + INTERNAL_SYSCALL_NCS (SYS_ify (name), nr, args) + +/* The _NCS variant allows non-constant syscall numbers. */ +#undef INTERNAL_SYSCALL_NCS +#define INTERNAL_SYSCALL_NCS(number, nr, args...) \ + ({ unsigned long int __sys_result; \ + { \ + long int _sc_ret = (long int) number; \ + LOAD_ARGS_##nr (args) \ + register long int __sc_ret __asm__ ("r11") = _sc_ret; \ + __asm__ __volatile__ ("l.sys 1\n\t" \ + " l.nop\n\t" \ + : "+r" (__sc_ret) \ + : ASM_ARGS_##nr \ + : ASM_CLOBBERS_##nr \ + "r12", "r13", "r15", "r17", "r19", \ + "r21", "r23", "r25", "r27", "r29", \ + "r31", "memory"); \ + __sys_result = __sc_ret; \ + } \ + (long int) __sys_result; }) + +/* From here on we have nested macros that generate code for + setting up syscall arguments. */ + +#define LOAD_ARGS_0() + +#define ASM_ARGS_0 +#define ASM_CLOBBERS_0 "r3", ASM_CLOBBERS_1 + +#define LOAD_ARGS_1(a) \ + long int _a = (long int)(a); \ + register long int __a __asm__ ("r3") = _a; +#define ASM_ARGS_1 "r" (__a) +#define ASM_CLOBBERS_1 "r4", ASM_CLOBBERS_2 + +#define LOAD_ARGS_2(a, b) \ + long int _b = (long int)(b); \ + LOAD_ARGS_1 (a) \ + register long int __b __asm__ ("r4") = _b; +#define ASM_ARGS_2 ASM_ARGS_1, "r" (__b) +#define ASM_CLOBBERS_2 "r5", ASM_CLOBBERS_3 + +#define LOAD_ARGS_3(a, b, c) \ + long int _c = (long int)(c); \ + LOAD_ARGS_2 (a, b) \ + register long int __c __asm__ ("r5") = _c; +#define ASM_ARGS_3 ASM_ARGS_2, "r" (__c) +#define ASM_CLOBBERS_3 "r6", ASM_CLOBBERS_4 + +#define LOAD_ARGS_4(a, b, c, d) \ + LOAD_ARGS_3 (a, b, c) \ + long int _d = (long int)(d); \ + register long int __d __asm__ ("r6") = _d; +#define ASM_ARGS_4 ASM_ARGS_3, "r" (__d) +#define ASM_CLOBBERS_4 "r7", ASM_CLOBBERS_5 + +#define LOAD_ARGS_5(a, b, c, d, e) \ + long int _e = (long int)(e); \ + LOAD_ARGS_4 (a, b, c, d) \ + register long int __e __asm__ ("r7") = _e; +#define ASM_ARGS_5 ASM_ARGS_4, "r" (__e) +#define ASM_CLOBBERS_5 "r8", ASM_CLOBBERS_6 + +#define LOAD_ARGS_6(a, b, c, d, e, f) \ + long int _f = (long int)(f); \ + LOAD_ARGS_5 (a, b, c, d, e) \ + register long int __f __asm__ ("r8") = _f; +#define ASM_ARGS_6 ASM_ARGS_5, "r" (__f) +#define ASM_CLOBBERS_6 + +#endif /* not __ASSEMBLER__ */ + +#endif /* linux/or1k/sysdep.h */ From patchwork Fri Dec 10 23:34:52 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stafford Horne X-Patchwork-Id: 48823 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 26C723857C70 for ; Fri, 10 Dec 2021 23:42:13 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 26C723857C70 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1639179733; bh=gOuwfxwcGLCVTW9p2YsGSGRxD61AZk7nGELhxFzTHPs=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=XRk0+YLqljhAGqPQkbxGrPVynmzD0khE76KN7X/ApBEoca8AGB8XjAufLgMKV4tGd WJGSePZ5IDCPJfxBqcEriYe2Eki2Q/TrBHw10vtrI6tRv+SmkENQBMqMrbCxNSkT4c wIGjxdP2SRw5BH4oAL/DKOPKklbd4t0QOuu1yTdI= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-pj1-x1035.google.com (mail-pj1-x1035.google.com [IPv6:2607:f8b0:4864:20::1035]) by sourceware.org (Postfix) with ESMTPS id 263A53857C6E for ; Fri, 10 Dec 2021 23:35:33 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 263A53857C6E Received: by mail-pj1-x1035.google.com with SMTP id gx15-20020a17090b124f00b001a695f3734aso8851207pjb.0 for ; Fri, 10 Dec 2021 15:35:33 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=gOuwfxwcGLCVTW9p2YsGSGRxD61AZk7nGELhxFzTHPs=; b=LBvSgb15+TzubmC0PYOYo7aLYqCtqunBYJIv1RGRixIL2MpvsjM/a9snbJSO2/PAvC 4AkEd+/7QwLEHmHZZbn4o4QDhizXSgiXx7F595CXCQo54JVjjzrhJv7I1oBQIVp7zpZx RwJR/keGxoENMbBNehenmHLbT9IXCmxbdVhKKrcAoUFx8a6B49Y6iRGAKmtjbqCVXG2G A808tO0x+vKGaoK5t9JHfsF9DMmC/5mMeZxyG3NfK4zpg2NJ6doniQQYa9ZrrdYYjUaX Ur97craGbAQujAMBWuVRe6c6ZZxeoaiSTTWKE+hYF5aoPOeMlw6pY+NMj2KN3MfhI49o yWXQ== X-Gm-Message-State: AOAM531843rd856CgLGlFZfgw6m/dMEeexWyn4Ict6llOBtbHIwqn7Tj RYrlP6AJBC4U1d1Ci0PPuYkRaoHYM0k= X-Google-Smtp-Source: ABdhPJyk6Bdkylm3UZ8j275wziJ0uGsnIU4AR6mAM8QkhYqCUOY36C/+KSqw+y92dd0uiK3wwE77Xw== X-Received: by 2002:a17:902:cec4:b0:141:cfa1:f7e with SMTP id d4-20020a170902cec400b00141cfa10f7emr77445728plg.13.1639179331546; Fri, 10 Dec 2021 15:35:31 -0800 (PST) Received: from localhost ([2409:10:24a0:4700:e8ad:216a:2a9d:6d0c]) by smtp.gmail.com with ESMTPSA id y191sm2754711pfb.124.2021.12.10.15.35.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Dec 2021 15:35:30 -0800 (PST) To: GLIBC patches Subject: [PATCH v3 09/13] or1k: Linux ABI Date: Sat, 11 Dec 2021 08:34:52 +0900 Message-Id: <20211210233456.4146479-10-shorne@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211210233456.4146479-1-shorne@gmail.com> References: <20211210233456.4146479-1-shorne@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-10.6 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_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Stafford Horne via Libc-alpha From: Stafford Horne Reply-To: Stafford Horne Cc: Openrisc Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" --- sysdeps/or1k/nptl/bits/pthreadtypes-arch.h | 48 ++++++++ sysdeps/or1k/nptl/pthreaddef.h | 36 ++++++ sysdeps/unix/sysv/linux/or1k/bits/procfs.h | 38 ++++++ sysdeps/unix/sysv/linux/or1k/getcontext.S | 72 +++++++++++ sysdeps/unix/sysv/linux/or1k/makecontext.c | 77 ++++++++++++ sysdeps/unix/sysv/linux/or1k/setcontext.S | 108 ++++++++++++++++ sysdeps/unix/sysv/linux/or1k/sigcontextinfo.h | 28 +++++ sysdeps/unix/sysv/linux/or1k/swapcontext.S | 116 ++++++++++++++++++ sysdeps/unix/sysv/linux/or1k/sys/ucontext.h | 53 ++++++++ sysdeps/unix/sysv/linux/or1k/sys/user.h | 1 + sysdeps/unix/sysv/linux/or1k/ucontext_i.sym | 26 ++++ 11 files changed, 603 insertions(+) create mode 100644 sysdeps/or1k/nptl/bits/pthreadtypes-arch.h create mode 100644 sysdeps/or1k/nptl/pthreaddef.h create mode 100644 sysdeps/unix/sysv/linux/or1k/bits/procfs.h create mode 100644 sysdeps/unix/sysv/linux/or1k/getcontext.S create mode 100644 sysdeps/unix/sysv/linux/or1k/makecontext.c create mode 100644 sysdeps/unix/sysv/linux/or1k/setcontext.S create mode 100644 sysdeps/unix/sysv/linux/or1k/sigcontextinfo.h create mode 100644 sysdeps/unix/sysv/linux/or1k/swapcontext.S create mode 100644 sysdeps/unix/sysv/linux/or1k/sys/ucontext.h create mode 100644 sysdeps/unix/sysv/linux/or1k/sys/user.h create mode 100644 sysdeps/unix/sysv/linux/or1k/ucontext_i.sym diff --git a/sysdeps/or1k/nptl/bits/pthreadtypes-arch.h b/sysdeps/or1k/nptl/bits/pthreadtypes-arch.h new file mode 100644 index 0000000000..56a62a7161 --- /dev/null +++ b/sysdeps/or1k/nptl/bits/pthreadtypes-arch.h @@ -0,0 +1,48 @@ +/* Machine-specific pthread type layouts. OpenRISC version. + Copyright (C) 2021 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_H +#define _BITS_PTHREADTYPES_H 1 + +#include + +/* Opaque union sizes for: + pthread_attr_t - internally pthread_attr + pthread_mutex_t - internally __pthread_mutex_s + pthread_mutexattr_t - internally pthread_mutexattr + pthread_cond_t - internally __pthread_cond_s + pthread_condattr_t - internally pthread_condattr + pthread_rwlock_t - internally __pthread_rwlock_arch_t + pthread_rwlockattr_t - internally pthread_rwlockattr + pthread_barrier_t - internally pthread_barrier + pthread_barrierattr_t - internally pthread_barrierattr */ + +#define __SIZEOF_PTHREAD_ATTR_T 32 +#define __SIZEOF_PTHREAD_MUTEX_T 32 +#define __SIZEOF_PTHREAD_MUTEXATTR_T 4 +#define __SIZEOF_PTHREAD_COND_T 48 +#define __SIZEOF_PTHREAD_CONDATTR_T 4 +#define __SIZEOF_PTHREAD_RWLOCK_T 44 +#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8 +#define __SIZEOF_PTHREAD_BARRIER_T 20 +#define __SIZEOF_PTHREAD_BARRIERATTR_T 4 + +#define __LOCK_ALIGNMENT +#define __ONCE_ALIGNMENT + +#endif /* bits/pthreadtypes.h */ diff --git a/sysdeps/or1k/nptl/pthreaddef.h b/sysdeps/or1k/nptl/pthreaddef.h new file mode 100644 index 0000000000..d17918ea11 --- /dev/null +++ b/sysdeps/or1k/nptl/pthreaddef.h @@ -0,0 +1,36 @@ +/* pthread machine parameter definitions. OpenRISC version. + Copyright (C) 2021 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 + . */ + +/* Default stack size. */ +#define ARCH_STACK_DEFAULT_SIZE (2 * 1024 * 1024) + +/* Minimum guard size. */ +#define ARCH_MIN_GUARD_SIZE 0 + +/* Required stack pointer alignment at beginning. */ +#define STACK_ALIGN 16 + +/* Minimal stack size after allocating thread descriptor and guard size. */ +#define MINIMAL_REST_STACK 2048 + +/* Alignment requirement for TCB. Needs to be >= to STACK_ALIGN. */ +#define TCB_ALIGNMENT 32 + +/* Location of current stack frame. */ +#define CURRENT_STACK_FRAME __builtin_frame_address (0) diff --git a/sysdeps/unix/sysv/linux/or1k/bits/procfs.h b/sysdeps/unix/sysv/linux/or1k/bits/procfs.h new file mode 100644 index 0000000000..b50c92efb1 --- /dev/null +++ b/sysdeps/unix/sysv/linux/or1k/bits/procfs.h @@ -0,0 +1,38 @@ +/* Types for registers for sys/procfs.h. OpenRISC version. + Copyright (C) 2021 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_PROCFS_H +# error "Never include directly; use instead." +#endif + +#include + +#define ELF_NGREG __NGREG + +/* Type for a general-purpose register. */ +typedef unsigned long int elf_greg_t; + +/* And the array of general-purpose registers. We could have used `struct + user_regs' directly, but tradition says that the register set is an array, + which does have some peculiar semantics, so leave it that way. + GDB uses this for prtrace GETREGSET, on OpenRISC the regset contains 32 + gprs the PC and the SR, 34 longs. */ +typedef elf_greg_t elf_gregset_t[34]; + +/* Register set for the floating-point registers. */ +typedef elf_greg_t elf_fpregset_t[32]; diff --git a/sysdeps/unix/sysv/linux/or1k/getcontext.S b/sysdeps/unix/sysv/linux/or1k/getcontext.S new file mode 100644 index 0000000000..4c2e64db7a --- /dev/null +++ b/sysdeps/unix/sysv/linux/or1k/getcontext.S @@ -0,0 +1,72 @@ +/* Save current context. OpenRISC version. + Copyright (C) 2021 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 "ucontext_i.h" + +/* int getcontext (ucontext_t *ucp) + + Returns 0 on success -1 and errno on failure. + */ + .text +ENTRY(__getcontext) + /* Store r1, the stack pointer. */ + l.sw (UCONTEXT_MCONTEXT + 1*4)(r3), r1 + /* Store r2, the frame pointer. */ + l.sw (UCONTEXT_MCONTEXT + 2*4)(r3), r2 + /* Store r9, the link register. */ + l.sw (UCONTEXT_MCONTEXT + 9*4)(r3), r9 + /* Store r9 to reg[11] too, as we need two links for makecontext. */ + l.sw (UCONTEXT_MCONTEXT + 11*4)(r3), r9 + /* Store r10, the TLS register. */ + l.sw (UCONTEXT_MCONTEXT + 10*4)(r3), r10 + /* Store r14-r30 even, callee saved registers. */ + l.sw (UCONTEXT_MCONTEXT + 14*4)(r3), r14 + l.sw (UCONTEXT_MCONTEXT + 16*4)(r3), r16 + l.sw (UCONTEXT_MCONTEXT + 18*4)(r3), r18 + l.sw (UCONTEXT_MCONTEXT + 20*4)(r3), r20 + l.sw (UCONTEXT_MCONTEXT + 22*4)(r3), r22 + l.sw (UCONTEXT_MCONTEXT + 24*4)(r3), r24 + l.sw (UCONTEXT_MCONTEXT + 26*4)(r3), r26 + l.sw (UCONTEXT_MCONTEXT + 28*4)(r3), r28 + l.sw (UCONTEXT_MCONTEXT + 30*4)(r3), r30 + + /* Get signal mask. */ + /* rt_sigprocmask (SIG_BLOCK, NULL, &ucp->uc_sigmask, _NSIG8) */ + l.ori r6, r0, _NSIG8 + l.addi r5, r3, UCONTEXT_SIGMASK + l.ori r4, r0, 0 + l.ori r3, r0, SIG_BLOCK + l.ori r11, r0, SYS_ify (rt_sigprocmask) + /* Do the syscall. */ + l.sys 1 + l.nop + + /* if -4096 < ret < 0 holds, it's an error */ + l.sfgeui r11, 0xf001 + l.bf 1f + l.nop + + l.jr r9 + l.ori r11, r0, 0 + +1: l.j __syscall_error + l.ori r3, r11, 0 + +END(__getcontext) +weak_alias(__getcontext, getcontext) diff --git a/sysdeps/unix/sysv/linux/or1k/makecontext.c b/sysdeps/unix/sysv/linux/or1k/makecontext.c new file mode 100644 index 0000000000..3dd4134a6b --- /dev/null +++ b/sysdeps/unix/sysv/linux/or1k/makecontext.c @@ -0,0 +1,77 @@ +/* Create new context. OpenRISC version. + Copyright (C) 2021 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 + +/* makecontext sets up a stack and the registers for the + user context. The stack looks like this: + + +-----------------------+ + | padding as required | + +-----------------------+ + sp -> | parameters 7 to n | + +-----------------------+ + + The registers are set up like this: + r3-r8 : parameters 1 to 6 + r14 : uc_link + r1 : stack pointer + r2 : frame pointer, set to NULL +*/ +void +__makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...) +{ + extern void __startcontext (void); + unsigned long int *sp; + va_list ap; + int i; + + sp = (unsigned long int *) + ((uintptr_t) ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size); + + /* Allocate stack arguments. */ + sp -= argc < 6 ? 0 : argc - 6; + + /* Keep the stack aligned. */ + sp = (unsigned long int *) (((uintptr_t) sp) & -4L); + + /* Keep uc_link in r14. */ + ucp->uc_mcontext.__gprs[14] = (uintptr_t) ucp->uc_link; + /* Return address points to function __startcontext. */ + ucp->uc_mcontext.__gprs[9] = (uintptr_t) &__startcontext; + /* Frame pointer is null. */ + ucp->uc_mcontext.__gprs[2] = (uintptr_t) 0; + /* Restart in user-space starting at 'func'. */ + ucp->uc_mcontext.__gprs[11] = (uintptr_t) func; + /* Set stack pointer. */ + ucp->uc_mcontext.__gprs[1] = (uintptr_t) sp; + + va_start (ap, argc); + for (i = 0; i < argc; ++i) + if (i < 6) + ucp->uc_mcontext.__gprs[i + 3] = va_arg (ap, unsigned long int); + else + sp[i - 6] = va_arg (ap, unsigned long int); + + va_end (ap); +} + +weak_alias (__makecontext, makecontext) diff --git a/sysdeps/unix/sysv/linux/or1k/setcontext.S b/sysdeps/unix/sysv/linux/or1k/setcontext.S new file mode 100644 index 0000000000..b4808d5422 --- /dev/null +++ b/sysdeps/unix/sysv/linux/or1k/setcontext.S @@ -0,0 +1,108 @@ +/* Set current context. OpenRISC version. + Copyright (C) 2021 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 "ucontext_i.h" + +/* int setcontext (const ucontext_t *ucp) */ + .text +ENTRY(__setcontext) + l.ori r30, r3, 0 + + /* Restore signal mask. */ + /* rt_sigprocmask (SIG_SETMASK, &ucp->uc_sigmask, NULL, _NSIG8) */ + l.ori r6, r0, _NSIG8 + l.ori r5, r0, 0 + l.addi r4, r3, UCONTEXT_SIGMASK + l.ori r3, r0, SIG_SETMASK + l.ori r11, r0, SYS_ify (rt_sigprocmask) + /* Do the syscall. */ + l.sys 1 + l.nop + + /* if -4096 < ret < 0 holds, it's an error */ + l.sfgeui r11, 0xf001 + l.bf 1f + l.nop + + /* Restore argument registers, for the makecontext case. */ + l.lwz r3, (UCONTEXT_MCONTEXT + 3*4)(r30) + l.lwz r4, (UCONTEXT_MCONTEXT + 4*4)(r30) + l.lwz r5, (UCONTEXT_MCONTEXT + 5*4)(r30) + l.lwz r6, (UCONTEXT_MCONTEXT + 6*4)(r30) + l.lwz r7, (UCONTEXT_MCONTEXT + 7*4)(r30) + l.lwz r8, (UCONTEXT_MCONTEXT + 8*4)(r30) + + /* Restore registers stored in getcontext. */ + l.lwz r1, (UCONTEXT_MCONTEXT + 1*4)(r30) + l.lwz r2, (UCONTEXT_MCONTEXT + 2*4)(r30) + l.lwz r9, (UCONTEXT_MCONTEXT + 9*4)(r30) + l.lwz r10, (UCONTEXT_MCONTEXT + 10*4)(r30) + l.lwz r11, (UCONTEXT_MCONTEXT + 11*4)(r30) + /* Restore r14-r30 even, callee saved registers. */ + l.lwz r14, (UCONTEXT_MCONTEXT + 14*4)(r30) + l.lwz r16, (UCONTEXT_MCONTEXT + 16*4)(r30) + l.lwz r18, (UCONTEXT_MCONTEXT + 18*4)(r30) + l.lwz r20, (UCONTEXT_MCONTEXT + 20*4)(r30) + l.lwz r22, (UCONTEXT_MCONTEXT + 22*4)(r30) + l.lwz r24, (UCONTEXT_MCONTEXT + 24*4)(r30) + l.lwz r26, (UCONTEXT_MCONTEXT + 26*4)(r30) + l.lwz r28, (UCONTEXT_MCONTEXT + 28*4)(r30) + l.lwz r30, (UCONTEXT_MCONTEXT + 30*4)(r30) + + l.jr r11 + l.ori r11, r0, 0 + +1: l.j __syscall_error + l.ori r3, r11, 0 + +END (__setcontext) +weak_alias (__setcontext, setcontext) + + /* We add a NOP here because when the unwinder is looking for the + enclosing function of the link register (r9) address FDE lookup will + use '$r9 - 1' finding setcontext which is wrong. This is because in + makecontext we have set r9 to the start of &__startcontext. + + If this NOP did not exist the unwinder would repeatedly find + __setcontext's FDE in an infinite loop. Modifiying/deleting the below + __startcontext's FDE has no help on this. */ + l.nop + +ENTRY(__startcontext) + + l.ori r3, r14, 0 + l.sfeq r3, r0 + /* If uc_link is not 0 resume there, otherwise exit. */ + l.bnf __setcontext + l.nop + +#ifdef SHARED + /* Obtain a pointer to .got in r16 */ + l.jal 0x8 + l.movhi r16, gotpchi(_GLOBAL_OFFSET_TABLE_-4) + l.ori r16, r16, gotpclo(_GLOBAL_OFFSET_TABLE_+0) + l.add r16, r16, r9 + l.lwz r16, got(exit)(r16) + l.jr r16 +#else + l.j exit +#endif + l.nop + +END(__startcontext) diff --git a/sysdeps/unix/sysv/linux/or1k/sigcontextinfo.h b/sysdeps/unix/sysv/linux/or1k/sigcontextinfo.h new file mode 100644 index 0000000000..de94b59578 --- /dev/null +++ b/sysdeps/unix/sysv/linux/or1k/sigcontextinfo.h @@ -0,0 +1,28 @@ +/* Profile counter helper to get PC from sigcontext. OpenRISC version. + Copyright (C) 2021 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 _SIGCONTEXTINFO_H +#define _SIGCONTEXTINFO_H + +static inline uintptr_t +sigcontext_get_pc (const ucontext_t *ctx) +{ + return ctx->uc_mcontext.__pc; +} + +#endif /* _SIGCONTEXTINFO_H */ diff --git a/sysdeps/unix/sysv/linux/or1k/swapcontext.S b/sysdeps/unix/sysv/linux/or1k/swapcontext.S new file mode 100644 index 0000000000..2acdc6d9bd --- /dev/null +++ b/sysdeps/unix/sysv/linux/or1k/swapcontext.S @@ -0,0 +1,116 @@ +/* Swap two contexts. OpenRISC version. + Copyright (C) 2021 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 "ucontext_i.h" + +/* int swapcontext (ucontext_t *oucp, const ucontext_t *ucp) */ + .text +ENTRY(__swapcontext) + + /* Same as getcontext. */ + /* Store r1, the stack pointer. */ + l.sw (UCONTEXT_MCONTEXT + 1*4)(r3), r1 + /* Store r2, the frame pointer. */ + l.sw (UCONTEXT_MCONTEXT + 2*4)(r3), r2 + /* Store r9, the link register. */ + l.sw (UCONTEXT_MCONTEXT + 9*4)(r3), r9 + /* Store r9 to reg[11] too, as we need two links for makecontext. */ + l.sw (UCONTEXT_MCONTEXT + 11*4)(r3), r9 + /* Store r10, the TLS register. */ + l.sw (UCONTEXT_MCONTEXT + 10*4)(r3), r10 + /* Store r14-r30 even, callee saved registers. */ + l.sw (UCONTEXT_MCONTEXT + 14*4)(r3), r14 + l.sw (UCONTEXT_MCONTEXT + 16*4)(r3), r16 + l.sw (UCONTEXT_MCONTEXT + 18*4)(r3), r18 + l.sw (UCONTEXT_MCONTEXT + 20*4)(r3), r20 + l.sw (UCONTEXT_MCONTEXT + 22*4)(r3), r22 + l.sw (UCONTEXT_MCONTEXT + 24*4)(r3), r24 + l.sw (UCONTEXT_MCONTEXT + 26*4)(r3), r26 + l.sw (UCONTEXT_MCONTEXT + 28*4)(r3), r28 + l.sw (UCONTEXT_MCONTEXT + 30*4)(r3), r30 + + /* Store ucp to non-argument syscall preserved register. */ + l.ori r30, r4, 0 + + /* Get signal mask. */ + /* rt_sigprocmask (SIG_BLOCK, NULL, &ucp->uc_sigmask, _NSIG8) */ + l.ori r6, r0, _NSIG8 + l.addi r5, r3, UCONTEXT_SIGMASK + l.ori r4, r0, 0 + l.ori r3, r0, SIG_BLOCK + l.ori r11, r0, SYS_ify (rt_sigprocmask) + /* Do the syscall. */ + l.sys 1 + l.nop + + /* if -4096 < ret < 0 holds, it's an error */ + l.sfgeui r11, 0xf001 + l.bf 1f + l.nop + + /* Same as setcontext. */ + + /* Restore signal mask. */ + /* rt_sigprocmask (SIG_SETMASK, &ucp->uc_sigmask, NULL, _NSIG8) */ + l.ori r6, r0, _NSIG8 + l.ori r5, r0, 0 + l.addi r4, r30, UCONTEXT_SIGMASK + l.ori r3, r0, SIG_SETMASK + l.ori r11, r0, SYS_ify (rt_sigprocmask) + /* Do the syscall. */ + l.sys 1 + l.nop + + /* if -4096 < ret < 0 holds, it's an error */ + l.sfgeui r11, 0xf001 + l.bf 1f + l.nop + + /* Restore argument registers, for the makecontext case. */ + l.lwz r3, (UCONTEXT_MCONTEXT + 3*4)(r30) + l.lwz r4, (UCONTEXT_MCONTEXT + 4*4)(r30) + l.lwz r5, (UCONTEXT_MCONTEXT + 5*4)(r30) + l.lwz r6, (UCONTEXT_MCONTEXT + 6*4)(r30) + l.lwz r7, (UCONTEXT_MCONTEXT + 7*4)(r30) + l.lwz r8, (UCONTEXT_MCONTEXT + 8*4)(r30) + + /* Restore registers stored in getcontext. */ + l.lwz r1, (UCONTEXT_MCONTEXT + 1*4)(r30) + l.lwz r2, (UCONTEXT_MCONTEXT + 2*4)(r30) + l.lwz r9, (UCONTEXT_MCONTEXT + 9*4)(r30) + l.lwz r10, (UCONTEXT_MCONTEXT + 10*4)(r30) + l.lwz r11, (UCONTEXT_MCONTEXT + 11*4)(r30) + l.lwz r14, (UCONTEXT_MCONTEXT + 14*4)(r30) + l.lwz r16, (UCONTEXT_MCONTEXT + 16*4)(r30) + l.lwz r18, (UCONTEXT_MCONTEXT + 18*4)(r30) + l.lwz r20, (UCONTEXT_MCONTEXT + 20*4)(r30) + l.lwz r22, (UCONTEXT_MCONTEXT + 22*4)(r30) + l.lwz r24, (UCONTEXT_MCONTEXT + 24*4)(r30) + l.lwz r26, (UCONTEXT_MCONTEXT + 26*4)(r30) + l.lwz r28, (UCONTEXT_MCONTEXT + 28*4)(r30) + l.lwz r30, (UCONTEXT_MCONTEXT + 30*4)(r30) + + l.jr r11 + l.ori r11, r0, 0 + +1: l.j __syscall_error + l.ori r3, r11, 0 + +END (__swapcontext) +weak_alias (__swapcontext, swapcontext) diff --git a/sysdeps/unix/sysv/linux/or1k/sys/ucontext.h b/sysdeps/unix/sysv/linux/or1k/sys/ucontext.h new file mode 100644 index 0000000000..c4aead8f93 --- /dev/null +++ b/sysdeps/unix/sysv/linux/or1k/sys/ucontext.h @@ -0,0 +1,53 @@ +/* ucontext_t definition, OpenRISC version. + Copyright (C) 2021 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/OpenRISC compliant context switching support. */ + +#ifndef _SYS_UCONTEXT_H +#define _SYS_UCONTEXT_H 1 + +#include + +#include +#include + +/* Number of general registers. */ +#define __NGREG 32 +#ifdef __USE_MISC +# define NGREG __NGREG +#endif + +/* Context to describe whole processor state. */ +typedef struct + { + unsigned long int __gprs[__NGREG]; + unsigned long int __pc; + unsigned long int __sr; + } mcontext_t; + +/* Userlevel context. */ +typedef struct ucontext_t + { + unsigned long int __uc_flags; + struct ucontext_t *uc_link; + stack_t uc_stack; + mcontext_t uc_mcontext; + sigset_t uc_sigmask; + } ucontext_t; + +#endif /* sys/ucontext.h */ diff --git a/sysdeps/unix/sysv/linux/or1k/sys/user.h b/sysdeps/unix/sysv/linux/or1k/sys/user.h new file mode 100644 index 0000000000..c871f1a03d --- /dev/null +++ b/sysdeps/unix/sysv/linux/or1k/sys/user.h @@ -0,0 +1 @@ +/* This file is not needed, but in practice gdb might try to include it. */ diff --git a/sysdeps/unix/sysv/linux/or1k/ucontext_i.sym b/sysdeps/unix/sysv/linux/or1k/ucontext_i.sym new file mode 100644 index 0000000000..a8d4db080f --- /dev/null +++ b/sysdeps/unix/sysv/linux/or1k/ucontext_i.sym @@ -0,0 +1,26 @@ +#include +#include +#include +#include + +-- Constants used by the rt_sigprocmask call. + +SIG_BLOCK +SIG_SETMASK + +_NSIG8 (_NSIG / 8) + +-- Offsets of the fields in the ucontext_t structure. +#define ucontext(member) offsetof (ucontext_t, member) +#define stack(member) ucontext (uc_stack.member) + +UCONTEXT_LINK ucontext (uc_link) +UCONTEXT_STACK ucontext (uc_stack) +UCONTEXT_MCONTEXT ucontext (uc_mcontext) +UCONTEXT_SIGMASK ucontext (uc_sigmask) + +STACK_SP stack (ss_sp) +STACK_SIZE stack (ss_size) +STACK_FLAGS stack (ss_flags) + +UCONTEXT_SIZE sizeof (ucontext_t) From patchwork Fri Dec 10 23:34:53 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stafford Horne X-Patchwork-Id: 48824 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id EB55A3857C66 for ; Fri, 10 Dec 2021 23:42:55 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org EB55A3857C66 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1639179776; bh=AWT3ARNwWxaW70d8ZR06kMl+YlQiSYA5DIIBdVwls0U=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=Qwe34QyKhjOUzgGoT9qLOd2QtDGCmQJLzBtSnpUo9iSrw+VnHMvOSvbB4JA5Ef5zp k0AevuLvmCLQu7Prhs8FYmlApmJ9nLi1Zrk+wECymhzgH84JP6mdfwHrG8dHxpM/b3 BP/nrgVGjAs0kUTqyVSZHoXCdSNLrk+NIf+De3GY= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-pg1-x530.google.com (mail-pg1-x530.google.com [IPv6:2607:f8b0:4864:20::530]) by sourceware.org (Postfix) with ESMTPS id 575CA3857C6C for ; Fri, 10 Dec 2021 23:35:37 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 575CA3857C6C Received: by mail-pg1-x530.google.com with SMTP id 200so494565pgg.3 for ; Fri, 10 Dec 2021 15:35:37 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=AWT3ARNwWxaW70d8ZR06kMl+YlQiSYA5DIIBdVwls0U=; b=skXrrLOkmO6z+N+toJg2m13ueafAaXk1HGW7YO616vc+8cKV/mIztttI/RTPSv6U9f bGj5WyM4RRxJNaO5Sr8rNVzDDRsJcHPmL4urJuSz6WRIWTjUlDDcYwGeI13ZQb80wPc3 Mb8inVyQ0qmc1oERVKCVyBjJZP097bLpn5sPmDOkIAp4i6MmFlMrlbfZ1FYWVItdqgNc yxNE8vqfcD4HB2GkFRHpz0Oet8SUupeP/HJeK6qw0Kc/vLMq0Ji30XvKdhA9h/7/OjvG G1UwhJ+RDVsiCvFV16oLA249IuVhik1tbynosAsG2XTl/tMmnnRlZ1Mqf1vwPUEVeLS3 zYxA== X-Gm-Message-State: AOAM530JbU7tncOKvYkzdVsaX2VkcN2GJ3IBu7hVRl5POBFMbfoJnuRS EP7DF7ohF6PFVMVzoprR7H8+87v4Md0= X-Google-Smtp-Source: ABdhPJxEA7goezHAbPsuJCsJu5t8IXY6XVxQLRvEDb6/Juv7eQS1qvd9PaCSQ0sjN4n/Li1tl3BcPQ== X-Received: by 2002:a05:6a00:248f:b0:4a0:1e25:3155 with SMTP id c15-20020a056a00248f00b004a01e253155mr21031851pfv.21.1639179334964; Fri, 10 Dec 2021 15:35:34 -0800 (PST) Received: from localhost ([2409:10:24a0:4700:e8ad:216a:2a9d:6d0c]) by smtp.gmail.com with ESMTPSA id o16sm4716640pfu.72.2021.12.10.15.35.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Dec 2021 15:35:34 -0800 (PST) To: GLIBC patches Subject: [PATCH v3 10/13] or1k: ABI lists Date: Sat, 11 Dec 2021 08:34:53 +0900 Message-Id: <20211210233456.4146479-11-shorne@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211210233456.4146479-1-shorne@gmail.com> References: <20211210233456.4146479-1-shorne@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-10.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Stafford Horne via Libc-alpha From: Stafford Horne Reply-To: Stafford Horne Cc: Openrisc Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" --- sysdeps/unix/sysv/linux/or1k/c++-types.data | 67 + sysdeps/unix/sysv/linux/or1k/ld.abilist | 5 + .../sysv/linux/or1k/libBrokenLocale.abilist | 1 + sysdeps/unix/sysv/linux/or1k/libanl.abilist | 1 + sysdeps/unix/sysv/linux/or1k/libc.abilist | 2122 +++++++++++++++++ .../sysv/linux/or1k/libc_malloc_debug.abilist | 26 + sysdeps/unix/sysv/linux/or1k/libcrypt.abilist | 2 + sysdeps/unix/sysv/linux/or1k/libdl.abilist | 0 sysdeps/unix/sysv/linux/or1k/libm.abilist | 759 ++++++ sysdeps/unix/sysv/linux/or1k/libnsl.abilist | 121 + .../unix/sysv/linux/or1k/libpthread.abilist | 0 .../unix/sysv/linux/or1k/libresolv.abilist | 55 + sysdeps/unix/sysv/linux/or1k/librt.abilist | 0 .../unix/sysv/linux/or1k/libthread_db.abilist | 40 + sysdeps/unix/sysv/linux/or1k/libutil.abilist | 1 + sysdeps/unix/sysv/linux/or1k/localplt.data | 14 + 16 files changed, 3214 insertions(+) create mode 100644 sysdeps/unix/sysv/linux/or1k/c++-types.data create mode 100644 sysdeps/unix/sysv/linux/or1k/ld.abilist create mode 100644 sysdeps/unix/sysv/linux/or1k/libBrokenLocale.abilist create mode 100644 sysdeps/unix/sysv/linux/or1k/libanl.abilist create mode 100644 sysdeps/unix/sysv/linux/or1k/libc.abilist create mode 100644 sysdeps/unix/sysv/linux/or1k/libc_malloc_debug.abilist create mode 100644 sysdeps/unix/sysv/linux/or1k/libcrypt.abilist create mode 100644 sysdeps/unix/sysv/linux/or1k/libdl.abilist create mode 100644 sysdeps/unix/sysv/linux/or1k/libm.abilist create mode 100644 sysdeps/unix/sysv/linux/or1k/libnsl.abilist create mode 100644 sysdeps/unix/sysv/linux/or1k/libpthread.abilist create mode 100644 sysdeps/unix/sysv/linux/or1k/libresolv.abilist create mode 100644 sysdeps/unix/sysv/linux/or1k/librt.abilist create mode 100644 sysdeps/unix/sysv/linux/or1k/libthread_db.abilist create mode 100644 sysdeps/unix/sysv/linux/or1k/libutil.abilist create mode 100644 sysdeps/unix/sysv/linux/or1k/localplt.data diff --git a/sysdeps/unix/sysv/linux/or1k/c++-types.data b/sysdeps/unix/sysv/linux/or1k/c++-types.data new file mode 100644 index 0000000000..0fb0143ae7 --- /dev/null +++ b/sysdeps/unix/sysv/linux/or1k/c++-types.data @@ -0,0 +1,67 @@ +blkcnt64_t:x +blkcnt_t:x +blksize_t:i +caddr_t:Pc +clockid_t:i +clock_t:l +daddr_t:i +dev_t:y +fd_mask:l +fsblkcnt64_t:y +fsblkcnt_t:y +fsfilcnt64_t:y +fsfilcnt_t:y +fsid_t:8__fsid_t +gid_t:j +id_t:j +ino64_t:y +ino_t:y +int16_t:s +int32_t:i +int64_t:x +int8_t:a +intptr_t:i +key_t:i +loff_t:x +mode_t:j +nlink_t:j +off64_t:x +off_t:x +pid_t:i +pthread_attr_t:14pthread_attr_t +pthread_barrier_t:17pthread_barrier_t +pthread_barrierattr_t:21pthread_barrierattr_t +pthread_cond_t:14pthread_cond_t +pthread_condattr_t:18pthread_condattr_t +pthread_key_t:j +pthread_mutex_t:15pthread_mutex_t +pthread_mutexattr_t:19pthread_mutexattr_t +pthread_once_t:i +pthread_rwlock_t:16pthread_rwlock_t +pthread_rwlockattr_t:20pthread_rwlockattr_t +pthread_spinlock_t:i +pthread_t:m +quad_t:x +register_t:i +rlim64_t:y +rlim_t:y +sigset_t:10__sigset_t +size_t:j +socklen_t:j +ssize_t:i +suseconds_t:x +time_t:x +u_char:h +uid_t:j +uint:j +u_int:j +u_int16_t:t +u_int32_t:j +u_int64_t:y +u_int8_t:h +ulong:m +u_long:m +u_quad_t:y +useconds_t:j +ushort:t +u_short:t diff --git a/sysdeps/unix/sysv/linux/or1k/ld.abilist b/sysdeps/unix/sysv/linux/or1k/ld.abilist new file mode 100644 index 0000000000..c4b85c8a33 --- /dev/null +++ b/sysdeps/unix/sysv/linux/or1k/ld.abilist @@ -0,0 +1,5 @@ +GLIBC_2.35 __libc_stack_end D 0x4 +GLIBC_2.35 __stack_chk_guard D 0x4 +GLIBC_2.35 __tls_get_addr F +GLIBC_2.35 _dl_mcount F +GLIBC_2.35 _r_debug D 0x14 diff --git a/sysdeps/unix/sysv/linux/or1k/libBrokenLocale.abilist b/sysdeps/unix/sysv/linux/or1k/libBrokenLocale.abilist new file mode 100644 index 0000000000..366c393274 --- /dev/null +++ b/sysdeps/unix/sysv/linux/or1k/libBrokenLocale.abilist @@ -0,0 +1 @@ +GLIBC_2.35 __ctype_get_mb_cur_max F diff --git a/sysdeps/unix/sysv/linux/or1k/libanl.abilist b/sysdeps/unix/sysv/linux/or1k/libanl.abilist new file mode 100644 index 0000000000..c6437809db --- /dev/null +++ b/sysdeps/unix/sysv/linux/or1k/libanl.abilist @@ -0,0 +1 @@ +GLIBC_2.35 __libanl_version_placeholder F diff --git a/sysdeps/unix/sysv/linux/or1k/libc.abilist b/sysdeps/unix/sysv/linux/or1k/libc.abilist new file mode 100644 index 0000000000..2e177b0811 --- /dev/null +++ b/sysdeps/unix/sysv/linux/or1k/libc.abilist @@ -0,0 +1,2122 @@ +GLIBC_2.35 _Exit F +GLIBC_2.35 _Fork F +GLIBC_2.35 _IO_2_1_stderr_ D 0x9c +GLIBC_2.35 _IO_2_1_stdin_ D 0x9c +GLIBC_2.35 _IO_2_1_stdout_ D 0x9c +GLIBC_2.35 _IO_adjust_column F +GLIBC_2.35 _IO_adjust_wcolumn F +GLIBC_2.35 _IO_default_doallocate F +GLIBC_2.35 _IO_default_finish F +GLIBC_2.35 _IO_default_pbackfail F +GLIBC_2.35 _IO_default_uflow F +GLIBC_2.35 _IO_default_xsgetn F +GLIBC_2.35 _IO_default_xsputn F +GLIBC_2.35 _IO_do_write F +GLIBC_2.35 _IO_doallocbuf F +GLIBC_2.35 _IO_fclose F +GLIBC_2.35 _IO_fdopen F +GLIBC_2.35 _IO_feof F +GLIBC_2.35 _IO_ferror F +GLIBC_2.35 _IO_fflush F +GLIBC_2.35 _IO_fgetpos F +GLIBC_2.35 _IO_fgetpos64 F +GLIBC_2.35 _IO_fgets F +GLIBC_2.35 _IO_file_attach F +GLIBC_2.35 _IO_file_close F +GLIBC_2.35 _IO_file_close_it F +GLIBC_2.35 _IO_file_doallocate F +GLIBC_2.35 _IO_file_finish F +GLIBC_2.35 _IO_file_fopen F +GLIBC_2.35 _IO_file_init F +GLIBC_2.35 _IO_file_jumps D 0x54 +GLIBC_2.35 _IO_file_open F +GLIBC_2.35 _IO_file_overflow F +GLIBC_2.35 _IO_file_read F +GLIBC_2.35 _IO_file_seek F +GLIBC_2.35 _IO_file_seekoff F +GLIBC_2.35 _IO_file_setbuf F +GLIBC_2.35 _IO_file_stat F +GLIBC_2.35 _IO_file_sync F +GLIBC_2.35 _IO_file_underflow F +GLIBC_2.35 _IO_file_write F +GLIBC_2.35 _IO_file_xsputn F +GLIBC_2.35 _IO_flockfile F +GLIBC_2.35 _IO_flush_all F +GLIBC_2.35 _IO_flush_all_linebuffered F +GLIBC_2.35 _IO_fopen F +GLIBC_2.35 _IO_fprintf F +GLIBC_2.35 _IO_fputs F +GLIBC_2.35 _IO_fread F +GLIBC_2.35 _IO_free_backup_area F +GLIBC_2.35 _IO_free_wbackup_area F +GLIBC_2.35 _IO_fsetpos F +GLIBC_2.35 _IO_fsetpos64 F +GLIBC_2.35 _IO_ftell F +GLIBC_2.35 _IO_ftrylockfile F +GLIBC_2.35 _IO_funlockfile F +GLIBC_2.35 _IO_fwrite F +GLIBC_2.35 _IO_getc F +GLIBC_2.35 _IO_getline F +GLIBC_2.35 _IO_getline_info F +GLIBC_2.35 _IO_gets F +GLIBC_2.35 _IO_init F +GLIBC_2.35 _IO_init_marker F +GLIBC_2.35 _IO_init_wmarker F +GLIBC_2.35 _IO_iter_begin F +GLIBC_2.35 _IO_iter_end F +GLIBC_2.35 _IO_iter_file F +GLIBC_2.35 _IO_iter_next F +GLIBC_2.35 _IO_least_wmarker F +GLIBC_2.35 _IO_link_in F +GLIBC_2.35 _IO_list_all D 0x4 +GLIBC_2.35 _IO_list_lock F +GLIBC_2.35 _IO_list_resetlock F +GLIBC_2.35 _IO_list_unlock F +GLIBC_2.35 _IO_marker_delta F +GLIBC_2.35 _IO_marker_difference F +GLIBC_2.35 _IO_padn F +GLIBC_2.35 _IO_peekc_locked F +GLIBC_2.35 _IO_popen F +GLIBC_2.35 _IO_printf F +GLIBC_2.35 _IO_proc_close F +GLIBC_2.35 _IO_proc_open F +GLIBC_2.35 _IO_putc F +GLIBC_2.35 _IO_puts F +GLIBC_2.35 _IO_remove_marker F +GLIBC_2.35 _IO_seekmark F +GLIBC_2.35 _IO_seekoff F +GLIBC_2.35 _IO_seekpos F +GLIBC_2.35 _IO_seekwmark F +GLIBC_2.35 _IO_setb F +GLIBC_2.35 _IO_setbuffer F +GLIBC_2.35 _IO_setvbuf F +GLIBC_2.35 _IO_sgetn F +GLIBC_2.35 _IO_sprintf F +GLIBC_2.35 _IO_sputbackc F +GLIBC_2.35 _IO_sputbackwc F +GLIBC_2.35 _IO_sscanf F +GLIBC_2.35 _IO_str_init_readonly F +GLIBC_2.35 _IO_str_init_static F +GLIBC_2.35 _IO_str_overflow F +GLIBC_2.35 _IO_str_pbackfail F +GLIBC_2.35 _IO_str_seekoff F +GLIBC_2.35 _IO_str_underflow F +GLIBC_2.35 _IO_sungetc F +GLIBC_2.35 _IO_sungetwc F +GLIBC_2.35 _IO_switch_to_get_mode F +GLIBC_2.35 _IO_switch_to_main_wget_area F +GLIBC_2.35 _IO_switch_to_wbackup_area F +GLIBC_2.35 _IO_switch_to_wget_mode F +GLIBC_2.35 _IO_un_link F +GLIBC_2.35 _IO_ungetc F +GLIBC_2.35 _IO_unsave_markers F +GLIBC_2.35 _IO_unsave_wmarkers F +GLIBC_2.35 _IO_vfprintf F +GLIBC_2.35 _IO_vsprintf F +GLIBC_2.35 _IO_wdefault_doallocate F +GLIBC_2.35 _IO_wdefault_finish F +GLIBC_2.35 _IO_wdefault_pbackfail F +GLIBC_2.35 _IO_wdefault_uflow F +GLIBC_2.35 _IO_wdefault_xsgetn F +GLIBC_2.35 _IO_wdefault_xsputn F +GLIBC_2.35 _IO_wdo_write F +GLIBC_2.35 _IO_wdoallocbuf F +GLIBC_2.35 _IO_wfile_jumps D 0x54 +GLIBC_2.35 _IO_wfile_overflow F +GLIBC_2.35 _IO_wfile_seekoff F +GLIBC_2.35 _IO_wfile_sync F +GLIBC_2.35 _IO_wfile_underflow F +GLIBC_2.35 _IO_wfile_xsputn F +GLIBC_2.35 _IO_wmarker_delta F +GLIBC_2.35 _IO_wsetb F +GLIBC_2.35 __adjtimex F +GLIBC_2.35 __argz_count F +GLIBC_2.35 __argz_next F +GLIBC_2.35 __argz_stringify F +GLIBC_2.35 __asprintf F +GLIBC_2.35 __asprintf_chk F +GLIBC_2.35 __assert F +GLIBC_2.35 __assert_fail F +GLIBC_2.35 __assert_perror_fail F +GLIBC_2.35 __backtrace F +GLIBC_2.35 __backtrace_symbols F +GLIBC_2.35 __backtrace_symbols_fd F +GLIBC_2.35 __bsd_getpgrp F +GLIBC_2.35 __bzero F +GLIBC_2.35 __check_rhosts_file D 0x4 +GLIBC_2.35 __chk_fail F +GLIBC_2.35 __clone F +GLIBC_2.35 __close F +GLIBC_2.35 __cmsg_nxthdr F +GLIBC_2.35 __confstr_chk F +GLIBC_2.35 __connect F +GLIBC_2.35 __ctype_b_loc F +GLIBC_2.35 __ctype_get_mb_cur_max F +GLIBC_2.35 __ctype_tolower_loc F +GLIBC_2.35 __ctype_toupper_loc F +GLIBC_2.35 __curbrk D 0x4 +GLIBC_2.35 __cxa_at_quick_exit F +GLIBC_2.35 __cxa_atexit F +GLIBC_2.35 __cxa_finalize F +GLIBC_2.35 __cxa_thread_atexit_impl F +GLIBC_2.35 __cyg_profile_func_enter F +GLIBC_2.35 __cyg_profile_func_exit F +GLIBC_2.35 __daylight D 0x4 +GLIBC_2.35 __dcgettext F +GLIBC_2.35 __dgettext F +GLIBC_2.35 __dprintf_chk F +GLIBC_2.35 __dup2 F +GLIBC_2.35 __duplocale F +GLIBC_2.35 __endmntent F +GLIBC_2.35 __environ D 0x4 +GLIBC_2.35 __errno_location F +GLIBC_2.35 __explicit_bzero_chk F +GLIBC_2.35 __fbufsize F +GLIBC_2.35 __fcntl F +GLIBC_2.35 __fdelt_chk F +GLIBC_2.35 __fdelt_warn F +GLIBC_2.35 __ffs F +GLIBC_2.35 __fgets_chk F +GLIBC_2.35 __fgets_unlocked_chk F +GLIBC_2.35 __fgetws_chk F +GLIBC_2.35 __fgetws_unlocked_chk F +GLIBC_2.35 __finite F +GLIBC_2.35 __finitef F +GLIBC_2.35 __flbf F +GLIBC_2.35 __fork F +GLIBC_2.35 __fpending F +GLIBC_2.35 __fprintf_chk F +GLIBC_2.35 __fpu_control D 0x4 +GLIBC_2.35 __fpurge F +GLIBC_2.35 __fread_chk F +GLIBC_2.35 __fread_unlocked_chk F +GLIBC_2.35 __freadable F +GLIBC_2.35 __freading F +GLIBC_2.35 __freelocale F +GLIBC_2.35 __fsetlocking F +GLIBC_2.35 __fwprintf_chk F +GLIBC_2.35 __fwritable F +GLIBC_2.35 __fwriting F +GLIBC_2.35 __getauxval F +GLIBC_2.35 __getcwd_chk F +GLIBC_2.35 __getdelim F +GLIBC_2.35 __getdomainname_chk F +GLIBC_2.35 __getgroups_chk F +GLIBC_2.35 __gethostname_chk F +GLIBC_2.35 __getlogin_r_chk F +GLIBC_2.35 __getmntent_r F +GLIBC_2.35 __getpagesize F +GLIBC_2.35 __getpgid F +GLIBC_2.35 __getpid F +GLIBC_2.35 __gets_chk F +GLIBC_2.35 __gettimeofday F +GLIBC_2.35 __getwd_chk F +GLIBC_2.35 __gmtime_r F +GLIBC_2.35 __h_errno_location F +GLIBC_2.35 __isalnum_l F +GLIBC_2.35 __isalpha_l F +GLIBC_2.35 __isascii_l F +GLIBC_2.35 __isblank_l F +GLIBC_2.35 __iscntrl_l F +GLIBC_2.35 __isctype F +GLIBC_2.35 __isdigit_l F +GLIBC_2.35 __isgraph_l F +GLIBC_2.35 __isinf F +GLIBC_2.35 __isinff F +GLIBC_2.35 __islower_l F +GLIBC_2.35 __isnan F +GLIBC_2.35 __isnanf F +GLIBC_2.35 __isoc99_fscanf F +GLIBC_2.35 __isoc99_fwscanf F +GLIBC_2.35 __isoc99_scanf F +GLIBC_2.35 __isoc99_sscanf F +GLIBC_2.35 __isoc99_swscanf F +GLIBC_2.35 __isoc99_vfscanf F +GLIBC_2.35 __isoc99_vfwscanf F +GLIBC_2.35 __isoc99_vscanf F +GLIBC_2.35 __isoc99_vsscanf F +GLIBC_2.35 __isoc99_vswscanf F +GLIBC_2.35 __isoc99_vwscanf F +GLIBC_2.35 __isoc99_wscanf F +GLIBC_2.35 __isprint_l F +GLIBC_2.35 __ispunct_l F +GLIBC_2.35 __isspace_l F +GLIBC_2.35 __isupper_l F +GLIBC_2.35 __iswalnum_l F +GLIBC_2.35 __iswalpha_l F +GLIBC_2.35 __iswblank_l F +GLIBC_2.35 __iswcntrl_l F +GLIBC_2.35 __iswctype F +GLIBC_2.35 __iswctype_l F +GLIBC_2.35 __iswdigit_l F +GLIBC_2.35 __iswgraph_l F +GLIBC_2.35 __iswlower_l F +GLIBC_2.35 __iswprint_l F +GLIBC_2.35 __iswpunct_l F +GLIBC_2.35 __iswspace_l F +GLIBC_2.35 __iswupper_l F +GLIBC_2.35 __iswxdigit_l F +GLIBC_2.35 __isxdigit_l F +GLIBC_2.35 __ivaliduser F +GLIBC_2.35 __libc_allocate_rtsig F +GLIBC_2.35 __libc_calloc F +GLIBC_2.35 __libc_current_sigrtmax F +GLIBC_2.35 __libc_current_sigrtmin F +GLIBC_2.35 __libc_free F +GLIBC_2.35 __libc_freeres F +GLIBC_2.35 __libc_init_first F +GLIBC_2.35 __libc_mallinfo F +GLIBC_2.35 __libc_malloc F +GLIBC_2.35 __libc_mallopt F +GLIBC_2.35 __libc_memalign F +GLIBC_2.35 __libc_pvalloc F +GLIBC_2.35 __libc_realloc F +GLIBC_2.35 __libc_sa_len F +GLIBC_2.35 __libc_single_threaded D 0x1 +GLIBC_2.35 __libc_start_main F +GLIBC_2.35 __libc_valloc F +GLIBC_2.35 __longjmp_chk F +GLIBC_2.35 __lseek F +GLIBC_2.35 __mbrlen F +GLIBC_2.35 __mbrtowc F +GLIBC_2.35 __mbsnrtowcs_chk F +GLIBC_2.35 __mbsrtowcs_chk F +GLIBC_2.35 __mbstowcs_chk F +GLIBC_2.35 __memcmpeq F +GLIBC_2.35 __memcpy_chk F +GLIBC_2.35 __memmove_chk F +GLIBC_2.35 __mempcpy F +GLIBC_2.35 __mempcpy_chk F +GLIBC_2.35 __memset_chk F +GLIBC_2.35 __monstartup F +GLIBC_2.35 __mq_open_2 F +GLIBC_2.35 __nanosleep F +GLIBC_2.35 __newlocale F +GLIBC_2.35 __nl_langinfo_l F +GLIBC_2.35 __nss_configure_lookup F +GLIBC_2.35 __nss_hostname_digits_dots F +GLIBC_2.35 __obstack_printf_chk F +GLIBC_2.35 __obstack_vprintf_chk F +GLIBC_2.35 __open F +GLIBC_2.35 __open64 F +GLIBC_2.35 __open64_2 F +GLIBC_2.35 __open_2 F +GLIBC_2.35 __openat64_2 F +GLIBC_2.35 __openat_2 F +GLIBC_2.35 __overflow F +GLIBC_2.35 __pipe F +GLIBC_2.35 __poll F +GLIBC_2.35 __poll_chk F +GLIBC_2.35 __posix_getopt F +GLIBC_2.35 __ppoll_chk F +GLIBC_2.35 __pread64 F +GLIBC_2.35 __pread64_chk F +GLIBC_2.35 __pread_chk F +GLIBC_2.35 __printf_chk F +GLIBC_2.35 __printf_fp F +GLIBC_2.35 __profile_frequency F +GLIBC_2.35 __progname D 0x4 +GLIBC_2.35 __progname_full D 0x4 +GLIBC_2.35 __pthread_cleanup_routine F +GLIBC_2.35 __pthread_key_create F +GLIBC_2.35 __pthread_register_cancel F +GLIBC_2.35 __pthread_register_cancel_defer F +GLIBC_2.35 __pthread_rwlock_unlock F +GLIBC_2.35 __pthread_unregister_cancel F +GLIBC_2.35 __pthread_unregister_cancel_restore F +GLIBC_2.35 __pthread_unwind_next F +GLIBC_2.35 __ptsname_r_chk F +GLIBC_2.35 __pwrite64 F +GLIBC_2.35 __rawmemchr F +GLIBC_2.35 __rcmd_errstr D 0x4 +GLIBC_2.35 __read F +GLIBC_2.35 __read_chk F +GLIBC_2.35 __readlink_chk F +GLIBC_2.35 __readlinkat_chk F +GLIBC_2.35 __realpath_chk F +GLIBC_2.35 __recv_chk F +GLIBC_2.35 __recvfrom_chk F +GLIBC_2.35 __register_atfork F +GLIBC_2.35 __res_init F +GLIBC_2.35 __res_nclose F +GLIBC_2.35 __res_ninit F +GLIBC_2.35 __res_randomid F +GLIBC_2.35 __res_state F +GLIBC_2.35 __sbrk F +GLIBC_2.35 __sched_cpualloc F +GLIBC_2.35 __sched_cpucount F +GLIBC_2.35 __sched_cpufree F +GLIBC_2.35 __sched_get_priority_max F +GLIBC_2.35 __sched_get_priority_min F +GLIBC_2.35 __sched_getparam F +GLIBC_2.35 __sched_getscheduler F +GLIBC_2.35 __sched_setscheduler F +GLIBC_2.35 __sched_yield F +GLIBC_2.35 __select F +GLIBC_2.35 __send F +GLIBC_2.35 __setmntent F +GLIBC_2.35 __setpgid F +GLIBC_2.35 __sigaction F +GLIBC_2.35 __signbit F +GLIBC_2.35 __signbitf F +GLIBC_2.35 __sigpause F +GLIBC_2.35 __sigsetjmp F +GLIBC_2.35 __sigsuspend F +GLIBC_2.35 __snprintf_chk F +GLIBC_2.35 __sprintf_chk F +GLIBC_2.35 __stack_chk_fail F +GLIBC_2.35 __statfs F +GLIBC_2.35 __stpcpy F +GLIBC_2.35 __stpcpy_chk F +GLIBC_2.35 __stpncpy F +GLIBC_2.35 __stpncpy_chk F +GLIBC_2.35 __strcasecmp F +GLIBC_2.35 __strcasecmp_l F +GLIBC_2.35 __strcasestr F +GLIBC_2.35 __strcat_chk F +GLIBC_2.35 __strcoll_l F +GLIBC_2.35 __strcpy_chk F +GLIBC_2.35 __strdup F +GLIBC_2.35 __strerror_r F +GLIBC_2.35 __strfmon_l F +GLIBC_2.35 __strftime_l F +GLIBC_2.35 __strncasecmp_l F +GLIBC_2.35 __strncat_chk F +GLIBC_2.35 __strncpy_chk F +GLIBC_2.35 __strndup F +GLIBC_2.35 __strsep_g F +GLIBC_2.35 __strtod_internal F +GLIBC_2.35 __strtod_l F +GLIBC_2.35 __strtof_internal F +GLIBC_2.35 __strtof_l F +GLIBC_2.35 __strtok_r F +GLIBC_2.35 __strtol_internal F +GLIBC_2.35 __strtol_l F +GLIBC_2.35 __strtold_internal F +GLIBC_2.35 __strtold_l F +GLIBC_2.35 __strtoll_internal F +GLIBC_2.35 __strtoll_l F +GLIBC_2.35 __strtoul_internal F +GLIBC_2.35 __strtoul_l F +GLIBC_2.35 __strtoull_internal F +GLIBC_2.35 __strtoull_l F +GLIBC_2.35 __strverscmp F +GLIBC_2.35 __strxfrm_l F +GLIBC_2.35 __swprintf_chk F +GLIBC_2.35 __sysconf F +GLIBC_2.35 __syslog_chk F +GLIBC_2.35 __sysv_signal F +GLIBC_2.35 __timezone D 0x4 +GLIBC_2.35 __toascii_l F +GLIBC_2.35 __tolower_l F +GLIBC_2.35 __toupper_l F +GLIBC_2.35 __towctrans F +GLIBC_2.35 __towctrans_l F +GLIBC_2.35 __towlower_l F +GLIBC_2.35 __towupper_l F +GLIBC_2.35 __ttyname_r_chk F +GLIBC_2.35 __tzname D 0x8 +GLIBC_2.35 __uflow F +GLIBC_2.35 __underflow F +GLIBC_2.35 __uselocale F +GLIBC_2.35 __vasprintf_chk F +GLIBC_2.35 __vdprintf_chk F +GLIBC_2.35 __vfork F +GLIBC_2.35 __vfprintf_chk F +GLIBC_2.35 __vfscanf F +GLIBC_2.35 __vfwprintf_chk F +GLIBC_2.35 __vprintf_chk F +GLIBC_2.35 __vsnprintf F +GLIBC_2.35 __vsnprintf_chk F +GLIBC_2.35 __vsprintf_chk F +GLIBC_2.35 __vsscanf F +GLIBC_2.35 __vswprintf_chk F +GLIBC_2.35 __vsyslog_chk F +GLIBC_2.35 __vwprintf_chk F +GLIBC_2.35 __wait F +GLIBC_2.35 __waitpid F +GLIBC_2.35 __wcpcpy_chk F +GLIBC_2.35 __wcpncpy_chk F +GLIBC_2.35 __wcrtomb_chk F +GLIBC_2.35 __wcscasecmp_l F +GLIBC_2.35 __wcscat_chk F +GLIBC_2.35 __wcscoll_l F +GLIBC_2.35 __wcscpy_chk F +GLIBC_2.35 __wcsftime_l F +GLIBC_2.35 __wcsncasecmp_l F +GLIBC_2.35 __wcsncat_chk F +GLIBC_2.35 __wcsncpy_chk F +GLIBC_2.35 __wcsnrtombs_chk F +GLIBC_2.35 __wcsrtombs_chk F +GLIBC_2.35 __wcstod_internal F +GLIBC_2.35 __wcstod_l F +GLIBC_2.35 __wcstof_internal F +GLIBC_2.35 __wcstof_l F +GLIBC_2.35 __wcstol_internal F +GLIBC_2.35 __wcstol_l F +GLIBC_2.35 __wcstold_internal F +GLIBC_2.35 __wcstold_l F +GLIBC_2.35 __wcstoll_internal F +GLIBC_2.35 __wcstoll_l F +GLIBC_2.35 __wcstombs_chk F +GLIBC_2.35 __wcstoul_internal F +GLIBC_2.35 __wcstoul_l F +GLIBC_2.35 __wcstoull_internal F +GLIBC_2.35 __wcstoull_l F +GLIBC_2.35 __wcsxfrm_l F +GLIBC_2.35 __wctomb_chk F +GLIBC_2.35 __wctrans_l F +GLIBC_2.35 __wctype_l F +GLIBC_2.35 __wmemcpy_chk F +GLIBC_2.35 __wmemmove_chk F +GLIBC_2.35 __wmempcpy_chk F +GLIBC_2.35 __wmemset_chk F +GLIBC_2.35 __woverflow F +GLIBC_2.35 __wprintf_chk F +GLIBC_2.35 __write F +GLIBC_2.35 __wuflow F +GLIBC_2.35 __wunderflow F +GLIBC_2.35 __xpg_basename F +GLIBC_2.35 __xpg_sigpause F +GLIBC_2.35 __xpg_strerror_r F +GLIBC_2.35 _dl_mcount_wrapper F +GLIBC_2.35 _dl_mcount_wrapper_check F +GLIBC_2.35 _environ D 0x4 +GLIBC_2.35 _exit F +GLIBC_2.35 _flushlbf F +GLIBC_2.35 _libc_intl_domainname D 0x5 +GLIBC_2.35 _longjmp F +GLIBC_2.35 _mcleanup F +GLIBC_2.35 _mcount F +GLIBC_2.35 _nl_default_dirname D 0x12 +GLIBC_2.35 _nl_domain_bindings D 0x4 +GLIBC_2.35 _nl_msg_cat_cntr D 0x4 +GLIBC_2.35 _obstack_allocated_p F +GLIBC_2.35 _obstack_begin F +GLIBC_2.35 _obstack_begin_1 F +GLIBC_2.35 _obstack_free F +GLIBC_2.35 _obstack_memory_used F +GLIBC_2.35 _obstack_newchunk F +GLIBC_2.35 _pthread_cleanup_pop F +GLIBC_2.35 _pthread_cleanup_push F +GLIBC_2.35 _res D 0x200 +GLIBC_2.35 _res_hconf D 0x30 +GLIBC_2.35 _setjmp F +GLIBC_2.35 _tolower F +GLIBC_2.35 _toupper F +GLIBC_2.35 a64l F +GLIBC_2.35 abort F +GLIBC_2.35 abs F +GLIBC_2.35 accept F +GLIBC_2.35 accept4 F +GLIBC_2.35 access F +GLIBC_2.35 acct F +GLIBC_2.35 addmntent F +GLIBC_2.35 addseverity F +GLIBC_2.35 adjtime F +GLIBC_2.35 adjtimex F +GLIBC_2.35 aio_cancel F +GLIBC_2.35 aio_cancel64 F +GLIBC_2.35 aio_error F +GLIBC_2.35 aio_error64 F +GLIBC_2.35 aio_fsync F +GLIBC_2.35 aio_fsync64 F +GLIBC_2.35 aio_init F +GLIBC_2.35 aio_read F +GLIBC_2.35 aio_read64 F +GLIBC_2.35 aio_return F +GLIBC_2.35 aio_return64 F +GLIBC_2.35 aio_suspend F +GLIBC_2.35 aio_suspend64 F +GLIBC_2.35 aio_write F +GLIBC_2.35 aio_write64 F +GLIBC_2.35 alarm F +GLIBC_2.35 aligned_alloc F +GLIBC_2.35 alphasort F +GLIBC_2.35 alphasort64 F +GLIBC_2.35 argp_err_exit_status D 0x4 +GLIBC_2.35 argp_error F +GLIBC_2.35 argp_failure F +GLIBC_2.35 argp_help F +GLIBC_2.35 argp_parse F +GLIBC_2.35 argp_program_bug_address D 0x4 +GLIBC_2.35 argp_program_version D 0x4 +GLIBC_2.35 argp_program_version_hook D 0x4 +GLIBC_2.35 argp_state_help F +GLIBC_2.35 argp_usage F +GLIBC_2.35 argz_add F +GLIBC_2.35 argz_add_sep F +GLIBC_2.35 argz_append F +GLIBC_2.35 argz_count F +GLIBC_2.35 argz_create F +GLIBC_2.35 argz_create_sep F +GLIBC_2.35 argz_delete F +GLIBC_2.35 argz_extract F +GLIBC_2.35 argz_insert F +GLIBC_2.35 argz_next F +GLIBC_2.35 argz_replace F +GLIBC_2.35 argz_stringify F +GLIBC_2.35 asctime F +GLIBC_2.35 asctime_r F +GLIBC_2.35 asprintf F +GLIBC_2.35 atof F +GLIBC_2.35 atoi F +GLIBC_2.35 atol F +GLIBC_2.35 atoll F +GLIBC_2.35 backtrace F +GLIBC_2.35 backtrace_symbols F +GLIBC_2.35 backtrace_symbols_fd F +GLIBC_2.35 basename F +GLIBC_2.35 bcmp F +GLIBC_2.35 bcopy F +GLIBC_2.35 bind F +GLIBC_2.35 bind_textdomain_codeset F +GLIBC_2.35 bindresvport F +GLIBC_2.35 bindtextdomain F +GLIBC_2.35 brk F +GLIBC_2.35 bsd_signal F +GLIBC_2.35 bsearch F +GLIBC_2.35 btowc F +GLIBC_2.35 bzero F +GLIBC_2.35 c16rtomb F +GLIBC_2.35 c32rtomb F +GLIBC_2.35 call_once F +GLIBC_2.35 calloc F +GLIBC_2.35 canonicalize_file_name F +GLIBC_2.35 capget F +GLIBC_2.35 capset F +GLIBC_2.35 catclose F +GLIBC_2.35 catgets F +GLIBC_2.35 catopen F +GLIBC_2.35 cfgetispeed F +GLIBC_2.35 cfgetospeed F +GLIBC_2.35 cfmakeraw F +GLIBC_2.35 cfsetispeed F +GLIBC_2.35 cfsetospeed F +GLIBC_2.35 cfsetspeed F +GLIBC_2.35 chdir F +GLIBC_2.35 chflags F +GLIBC_2.35 chmod F +GLIBC_2.35 chown F +GLIBC_2.35 chroot F +GLIBC_2.35 clearenv F +GLIBC_2.35 clearerr F +GLIBC_2.35 clearerr_unlocked F +GLIBC_2.35 clock F +GLIBC_2.35 clock_adjtime F +GLIBC_2.35 clock_getcpuclockid F +GLIBC_2.35 clock_getres F +GLIBC_2.35 clock_gettime F +GLIBC_2.35 clock_nanosleep F +GLIBC_2.35 clock_settime F +GLIBC_2.35 clone F +GLIBC_2.35 close F +GLIBC_2.35 close_range F +GLIBC_2.35 closedir F +GLIBC_2.35 closefrom F +GLIBC_2.35 closelog F +GLIBC_2.35 cnd_broadcast F +GLIBC_2.35 cnd_destroy F +GLIBC_2.35 cnd_init F +GLIBC_2.35 cnd_signal F +GLIBC_2.35 cnd_timedwait F +GLIBC_2.35 cnd_wait F +GLIBC_2.35 confstr F +GLIBC_2.35 connect F +GLIBC_2.35 copy_file_range F +GLIBC_2.35 copysign F +GLIBC_2.35 copysignf F +GLIBC_2.35 copysignl F +GLIBC_2.35 creat F +GLIBC_2.35 creat64 F +GLIBC_2.35 ctermid F +GLIBC_2.35 ctime F +GLIBC_2.35 ctime_r F +GLIBC_2.35 cuserid F +GLIBC_2.35 daemon F +GLIBC_2.35 daylight D 0x4 +GLIBC_2.35 dcgettext F +GLIBC_2.35 dcngettext F +GLIBC_2.35 delete_module F +GLIBC_2.35 dgettext F +GLIBC_2.35 difftime F +GLIBC_2.35 dirfd F +GLIBC_2.35 dirname F +GLIBC_2.35 div F +GLIBC_2.35 dl_iterate_phdr F +GLIBC_2.35 dladdr F +GLIBC_2.35 dladdr1 F +GLIBC_2.35 dlclose F +GLIBC_2.35 dlerror F +GLIBC_2.35 dlinfo F +GLIBC_2.35 dlmopen F +GLIBC_2.35 dlopen F +GLIBC_2.35 dlsym F +GLIBC_2.35 dlvsym F +GLIBC_2.35 dn_comp F +GLIBC_2.35 dn_expand F +GLIBC_2.35 dn_skipname F +GLIBC_2.35 dngettext F +GLIBC_2.35 dprintf F +GLIBC_2.35 drand48 F +GLIBC_2.35 drand48_r F +GLIBC_2.35 dup F +GLIBC_2.35 dup2 F +GLIBC_2.35 dup3 F +GLIBC_2.35 duplocale F +GLIBC_2.35 dysize F +GLIBC_2.35 eaccess F +GLIBC_2.35 ecvt F +GLIBC_2.35 ecvt_r F +GLIBC_2.35 endaliasent F +GLIBC_2.35 endfsent F +GLIBC_2.35 endgrent F +GLIBC_2.35 endhostent F +GLIBC_2.35 endmntent F +GLIBC_2.35 endnetent F +GLIBC_2.35 endnetgrent F +GLIBC_2.35 endprotoent F +GLIBC_2.35 endpwent F +GLIBC_2.35 endrpcent F +GLIBC_2.35 endservent F +GLIBC_2.35 endsgent F +GLIBC_2.35 endspent F +GLIBC_2.35 endttyent F +GLIBC_2.35 endusershell F +GLIBC_2.35 endutent F +GLIBC_2.35 endutxent F +GLIBC_2.35 environ D 0x4 +GLIBC_2.35 envz_add F +GLIBC_2.35 envz_entry F +GLIBC_2.35 envz_get F +GLIBC_2.35 envz_merge F +GLIBC_2.35 envz_remove F +GLIBC_2.35 envz_strip F +GLIBC_2.35 epoll_create F +GLIBC_2.35 epoll_create1 F +GLIBC_2.35 epoll_ctl F +GLIBC_2.35 epoll_pwait F +GLIBC_2.35 epoll_wait F +GLIBC_2.35 erand48 F +GLIBC_2.35 erand48_r F +GLIBC_2.35 err F +GLIBC_2.35 error F +GLIBC_2.35 error_at_line F +GLIBC_2.35 error_message_count D 0x4 +GLIBC_2.35 error_one_per_line D 0x4 +GLIBC_2.35 error_print_progname D 0x4 +GLIBC_2.35 errx F +GLIBC_2.35 ether_aton F +GLIBC_2.35 ether_aton_r F +GLIBC_2.35 ether_hostton F +GLIBC_2.35 ether_line F +GLIBC_2.35 ether_ntoa F +GLIBC_2.35 ether_ntoa_r F +GLIBC_2.35 ether_ntohost F +GLIBC_2.35 euidaccess F +GLIBC_2.35 eventfd F +GLIBC_2.35 eventfd_read F +GLIBC_2.35 eventfd_write F +GLIBC_2.35 execl F +GLIBC_2.35 execle F +GLIBC_2.35 execlp F +GLIBC_2.35 execv F +GLIBC_2.35 execve F +GLIBC_2.35 execveat F +GLIBC_2.35 execvp F +GLIBC_2.35 execvpe F +GLIBC_2.35 exit F +GLIBC_2.35 explicit_bzero F +GLIBC_2.35 faccessat F +GLIBC_2.35 fallocate F +GLIBC_2.35 fallocate64 F +GLIBC_2.35 fanotify_init F +GLIBC_2.35 fanotify_mark F +GLIBC_2.35 fchdir F +GLIBC_2.35 fchflags F +GLIBC_2.35 fchmod F +GLIBC_2.35 fchmodat F +GLIBC_2.35 fchown F +GLIBC_2.35 fchownat F +GLIBC_2.35 fclose F +GLIBC_2.35 fcloseall F +GLIBC_2.35 fcntl F +GLIBC_2.35 fcntl64 F +GLIBC_2.35 fcvt F +GLIBC_2.35 fcvt_r F +GLIBC_2.35 fdatasync F +GLIBC_2.35 fdopen F +GLIBC_2.35 fdopendir F +GLIBC_2.35 feof F +GLIBC_2.35 feof_unlocked F +GLIBC_2.35 ferror F +GLIBC_2.35 ferror_unlocked F +GLIBC_2.35 fexecve F +GLIBC_2.35 fflush F +GLIBC_2.35 fflush_unlocked F +GLIBC_2.35 ffs F +GLIBC_2.35 ffsl F +GLIBC_2.35 ffsll F +GLIBC_2.35 fgetc F +GLIBC_2.35 fgetc_unlocked F +GLIBC_2.35 fgetgrent F +GLIBC_2.35 fgetgrent_r F +GLIBC_2.35 fgetpos F +GLIBC_2.35 fgetpos64 F +GLIBC_2.35 fgetpwent F +GLIBC_2.35 fgetpwent_r F +GLIBC_2.35 fgets F +GLIBC_2.35 fgets_unlocked F +GLIBC_2.35 fgetsgent F +GLIBC_2.35 fgetsgent_r F +GLIBC_2.35 fgetspent F +GLIBC_2.35 fgetspent_r F +GLIBC_2.35 fgetwc F +GLIBC_2.35 fgetwc_unlocked F +GLIBC_2.35 fgetws F +GLIBC_2.35 fgetws_unlocked F +GLIBC_2.35 fgetxattr F +GLIBC_2.35 fileno F +GLIBC_2.35 fileno_unlocked F +GLIBC_2.35 finite F +GLIBC_2.35 finitef F +GLIBC_2.35 finitel F +GLIBC_2.35 flistxattr F +GLIBC_2.35 flock F +GLIBC_2.35 flockfile F +GLIBC_2.35 fmemopen F +GLIBC_2.35 fmtmsg F +GLIBC_2.35 fnmatch F +GLIBC_2.35 fopen F +GLIBC_2.35 fopen64 F +GLIBC_2.35 fopencookie F +GLIBC_2.35 fork F +GLIBC_2.35 forkpty F +GLIBC_2.35 fpathconf F +GLIBC_2.35 fprintf F +GLIBC_2.35 fputc F +GLIBC_2.35 fputc_unlocked F +GLIBC_2.35 fputs F +GLIBC_2.35 fputs_unlocked F +GLIBC_2.35 fputwc F +GLIBC_2.35 fputwc_unlocked F +GLIBC_2.35 fputws F +GLIBC_2.35 fputws_unlocked F +GLIBC_2.35 fread F +GLIBC_2.35 fread_unlocked F +GLIBC_2.35 free F +GLIBC_2.35 freeaddrinfo F +GLIBC_2.35 freeifaddrs F +GLIBC_2.35 freelocale F +GLIBC_2.35 fremovexattr F +GLIBC_2.35 freopen F +GLIBC_2.35 freopen64 F +GLIBC_2.35 frexp F +GLIBC_2.35 frexpf F +GLIBC_2.35 frexpl F +GLIBC_2.35 fscanf F +GLIBC_2.35 fseek F +GLIBC_2.35 fseeko F +GLIBC_2.35 fseeko64 F +GLIBC_2.35 fsetpos F +GLIBC_2.35 fsetpos64 F +GLIBC_2.35 fsetxattr F +GLIBC_2.35 fstat F +GLIBC_2.35 fstat64 F +GLIBC_2.35 fstatat F +GLIBC_2.35 fstatat64 F +GLIBC_2.35 fstatfs F +GLIBC_2.35 fstatfs64 F +GLIBC_2.35 fstatvfs F +GLIBC_2.35 fstatvfs64 F +GLIBC_2.35 fsync F +GLIBC_2.35 ftell F +GLIBC_2.35 ftello F +GLIBC_2.35 ftello64 F +GLIBC_2.35 ftime F +GLIBC_2.35 ftok F +GLIBC_2.35 ftruncate F +GLIBC_2.35 ftruncate64 F +GLIBC_2.35 ftrylockfile F +GLIBC_2.35 fts64_children F +GLIBC_2.35 fts64_close F +GLIBC_2.35 fts64_open F +GLIBC_2.35 fts64_read F +GLIBC_2.35 fts64_set F +GLIBC_2.35 fts_children F +GLIBC_2.35 fts_close F +GLIBC_2.35 fts_open F +GLIBC_2.35 fts_read F +GLIBC_2.35 fts_set F +GLIBC_2.35 ftw F +GLIBC_2.35 ftw64 F +GLIBC_2.35 funlockfile F +GLIBC_2.35 futimens F +GLIBC_2.35 futimes F +GLIBC_2.35 futimesat F +GLIBC_2.35 fwide F +GLIBC_2.35 fwprintf F +GLIBC_2.35 fwrite F +GLIBC_2.35 fwrite_unlocked F +GLIBC_2.35 fwscanf F +GLIBC_2.35 gai_cancel F +GLIBC_2.35 gai_error F +GLIBC_2.35 gai_strerror F +GLIBC_2.35 gai_suspend F +GLIBC_2.35 gcvt F +GLIBC_2.35 get_avphys_pages F +GLIBC_2.35 get_current_dir_name F +GLIBC_2.35 get_nprocs F +GLIBC_2.35 get_nprocs_conf F +GLIBC_2.35 get_phys_pages F +GLIBC_2.35 getaddrinfo F +GLIBC_2.35 getaddrinfo_a F +GLIBC_2.35 getaliasbyname F +GLIBC_2.35 getaliasbyname_r F +GLIBC_2.35 getaliasent F +GLIBC_2.35 getaliasent_r F +GLIBC_2.35 getauxval F +GLIBC_2.35 getc F +GLIBC_2.35 getc_unlocked F +GLIBC_2.35 getchar F +GLIBC_2.35 getchar_unlocked F +GLIBC_2.35 getcontext F +GLIBC_2.35 getcpu F +GLIBC_2.35 getcwd F +GLIBC_2.35 getdate F +GLIBC_2.35 getdate_err D 0x4 +GLIBC_2.35 getdate_r F +GLIBC_2.35 getdelim F +GLIBC_2.35 getdents64 F +GLIBC_2.35 getdirentries F +GLIBC_2.35 getdirentries64 F +GLIBC_2.35 getdomainname F +GLIBC_2.35 getdtablesize F +GLIBC_2.35 getegid F +GLIBC_2.35 getentropy F +GLIBC_2.35 getenv F +GLIBC_2.35 geteuid F +GLIBC_2.35 getfsent F +GLIBC_2.35 getfsfile F +GLIBC_2.35 getfsspec F +GLIBC_2.35 getgid F +GLIBC_2.35 getgrent F +GLIBC_2.35 getgrent_r F +GLIBC_2.35 getgrgid F +GLIBC_2.35 getgrgid_r F +GLIBC_2.35 getgrnam F +GLIBC_2.35 getgrnam_r F +GLIBC_2.35 getgrouplist F +GLIBC_2.35 getgroups F +GLIBC_2.35 gethostbyaddr F +GLIBC_2.35 gethostbyaddr_r F +GLIBC_2.35 gethostbyname F +GLIBC_2.35 gethostbyname2 F +GLIBC_2.35 gethostbyname2_r F +GLIBC_2.35 gethostbyname_r F +GLIBC_2.35 gethostent F +GLIBC_2.35 gethostent_r F +GLIBC_2.35 gethostid F +GLIBC_2.35 gethostname F +GLIBC_2.35 getifaddrs F +GLIBC_2.35 getipv4sourcefilter F +GLIBC_2.35 getitimer F +GLIBC_2.35 getline F +GLIBC_2.35 getloadavg F +GLIBC_2.35 getlogin F +GLIBC_2.35 getlogin_r F +GLIBC_2.35 getmntent F +GLIBC_2.35 getmntent_r F +GLIBC_2.35 getnameinfo F +GLIBC_2.35 getnetbyaddr F +GLIBC_2.35 getnetbyaddr_r F +GLIBC_2.35 getnetbyname F +GLIBC_2.35 getnetbyname_r F +GLIBC_2.35 getnetent F +GLIBC_2.35 getnetent_r F +GLIBC_2.35 getnetgrent F +GLIBC_2.35 getnetgrent_r F +GLIBC_2.35 getopt F +GLIBC_2.35 getopt_long F +GLIBC_2.35 getopt_long_only F +GLIBC_2.35 getpagesize F +GLIBC_2.35 getpass F +GLIBC_2.35 getpeername F +GLIBC_2.35 getpgid F +GLIBC_2.35 getpgrp F +GLIBC_2.35 getpid F +GLIBC_2.35 getppid F +GLIBC_2.35 getpriority F +GLIBC_2.35 getprotobyname F +GLIBC_2.35 getprotobyname_r F +GLIBC_2.35 getprotobynumber F +GLIBC_2.35 getprotobynumber_r F +GLIBC_2.35 getprotoent F +GLIBC_2.35 getprotoent_r F +GLIBC_2.35 getpt F +GLIBC_2.35 getpw F +GLIBC_2.35 getpwent F +GLIBC_2.35 getpwent_r F +GLIBC_2.35 getpwnam F +GLIBC_2.35 getpwnam_r F +GLIBC_2.35 getpwuid F +GLIBC_2.35 getpwuid_r F +GLIBC_2.35 getrandom F +GLIBC_2.35 getresgid F +GLIBC_2.35 getresuid F +GLIBC_2.35 getrlimit F +GLIBC_2.35 getrlimit64 F +GLIBC_2.35 getrpcbyname F +GLIBC_2.35 getrpcbyname_r F +GLIBC_2.35 getrpcbynumber F +GLIBC_2.35 getrpcbynumber_r F +GLIBC_2.35 getrpcent F +GLIBC_2.35 getrpcent_r F +GLIBC_2.35 getrusage F +GLIBC_2.35 gets F +GLIBC_2.35 getservbyname F +GLIBC_2.35 getservbyname_r F +GLIBC_2.35 getservbyport F +GLIBC_2.35 getservbyport_r F +GLIBC_2.35 getservent F +GLIBC_2.35 getservent_r F +GLIBC_2.35 getsgent F +GLIBC_2.35 getsgent_r F +GLIBC_2.35 getsgnam F +GLIBC_2.35 getsgnam_r F +GLIBC_2.35 getsid F +GLIBC_2.35 getsockname F +GLIBC_2.35 getsockopt F +GLIBC_2.35 getsourcefilter F +GLIBC_2.35 getspent F +GLIBC_2.35 getspent_r F +GLIBC_2.35 getspnam F +GLIBC_2.35 getspnam_r F +GLIBC_2.35 getsubopt F +GLIBC_2.35 gettext F +GLIBC_2.35 gettid F +GLIBC_2.35 gettimeofday F +GLIBC_2.35 getttyent F +GLIBC_2.35 getttynam F +GLIBC_2.35 getuid F +GLIBC_2.35 getusershell F +GLIBC_2.35 getutent F +GLIBC_2.35 getutent_r F +GLIBC_2.35 getutid F +GLIBC_2.35 getutid_r F +GLIBC_2.35 getutline F +GLIBC_2.35 getutline_r F +GLIBC_2.35 getutmp F +GLIBC_2.35 getutmpx F +GLIBC_2.35 getutxent F +GLIBC_2.35 getutxid F +GLIBC_2.35 getutxline F +GLIBC_2.35 getw F +GLIBC_2.35 getwc F +GLIBC_2.35 getwc_unlocked F +GLIBC_2.35 getwchar F +GLIBC_2.35 getwchar_unlocked F +GLIBC_2.35 getwd F +GLIBC_2.35 getxattr F +GLIBC_2.35 glob F +GLIBC_2.35 glob64 F +GLIBC_2.35 glob_pattern_p F +GLIBC_2.35 globfree F +GLIBC_2.35 globfree64 F +GLIBC_2.35 gmtime F +GLIBC_2.35 gmtime_r F +GLIBC_2.35 gnu_dev_major F +GLIBC_2.35 gnu_dev_makedev F +GLIBC_2.35 gnu_dev_minor F +GLIBC_2.35 gnu_get_libc_release F +GLIBC_2.35 gnu_get_libc_version F +GLIBC_2.35 grantpt F +GLIBC_2.35 group_member F +GLIBC_2.35 gsignal F +GLIBC_2.35 gtty F +GLIBC_2.35 h_errlist D 0x14 +GLIBC_2.35 h_nerr D 0x4 +GLIBC_2.35 hasmntopt F +GLIBC_2.35 hcreate F +GLIBC_2.35 hcreate_r F +GLIBC_2.35 hdestroy F +GLIBC_2.35 hdestroy_r F +GLIBC_2.35 herror F +GLIBC_2.35 hsearch F +GLIBC_2.35 hsearch_r F +GLIBC_2.35 hstrerror F +GLIBC_2.35 htonl F +GLIBC_2.35 htons F +GLIBC_2.35 iconv F +GLIBC_2.35 iconv_close F +GLIBC_2.35 iconv_open F +GLIBC_2.35 if_freenameindex F +GLIBC_2.35 if_indextoname F +GLIBC_2.35 if_nameindex F +GLIBC_2.35 if_nametoindex F +GLIBC_2.35 imaxabs F +GLIBC_2.35 imaxdiv F +GLIBC_2.35 in6addr_any D 0x10 +GLIBC_2.35 in6addr_loopback D 0x10 +GLIBC_2.35 index F +GLIBC_2.35 inet6_opt_append F +GLIBC_2.35 inet6_opt_find F +GLIBC_2.35 inet6_opt_finish F +GLIBC_2.35 inet6_opt_get_val F +GLIBC_2.35 inet6_opt_init F +GLIBC_2.35 inet6_opt_next F +GLIBC_2.35 inet6_opt_set_val F +GLIBC_2.35 inet6_option_alloc F +GLIBC_2.35 inet6_option_append F +GLIBC_2.35 inet6_option_find F +GLIBC_2.35 inet6_option_init F +GLIBC_2.35 inet6_option_next F +GLIBC_2.35 inet6_option_space F +GLIBC_2.35 inet6_rth_add F +GLIBC_2.35 inet6_rth_getaddr F +GLIBC_2.35 inet6_rth_init F +GLIBC_2.35 inet6_rth_reverse F +GLIBC_2.35 inet6_rth_segments F +GLIBC_2.35 inet6_rth_space F +GLIBC_2.35 inet_addr F +GLIBC_2.35 inet_aton F +GLIBC_2.35 inet_lnaof F +GLIBC_2.35 inet_makeaddr F +GLIBC_2.35 inet_netof F +GLIBC_2.35 inet_network F +GLIBC_2.35 inet_nsap_addr F +GLIBC_2.35 inet_nsap_ntoa F +GLIBC_2.35 inet_ntoa F +GLIBC_2.35 inet_ntop F +GLIBC_2.35 inet_pton F +GLIBC_2.35 init_module F +GLIBC_2.35 initgroups F +GLIBC_2.35 initstate F +GLIBC_2.35 initstate_r F +GLIBC_2.35 innetgr F +GLIBC_2.35 inotify_add_watch F +GLIBC_2.35 inotify_init F +GLIBC_2.35 inotify_init1 F +GLIBC_2.35 inotify_rm_watch F +GLIBC_2.35 insque F +GLIBC_2.35 ioctl F +GLIBC_2.35 iruserok F +GLIBC_2.35 iruserok_af F +GLIBC_2.35 isalnum F +GLIBC_2.35 isalnum_l F +GLIBC_2.35 isalpha F +GLIBC_2.35 isalpha_l F +GLIBC_2.35 isascii F +GLIBC_2.35 isatty F +GLIBC_2.35 isblank F +GLIBC_2.35 isblank_l F +GLIBC_2.35 iscntrl F +GLIBC_2.35 iscntrl_l F +GLIBC_2.35 isctype F +GLIBC_2.35 isdigit F +GLIBC_2.35 isdigit_l F +GLIBC_2.35 isfdtype F +GLIBC_2.35 isgraph F +GLIBC_2.35 isgraph_l F +GLIBC_2.35 isinf F +GLIBC_2.35 isinff F +GLIBC_2.35 isinfl F +GLIBC_2.35 islower F +GLIBC_2.35 islower_l F +GLIBC_2.35 isnan F +GLIBC_2.35 isnanf F +GLIBC_2.35 isnanl F +GLIBC_2.35 isprint F +GLIBC_2.35 isprint_l F +GLIBC_2.35 ispunct F +GLIBC_2.35 ispunct_l F +GLIBC_2.35 isspace F +GLIBC_2.35 isspace_l F +GLIBC_2.35 isupper F +GLIBC_2.35 isupper_l F +GLIBC_2.35 iswalnum F +GLIBC_2.35 iswalnum_l F +GLIBC_2.35 iswalpha F +GLIBC_2.35 iswalpha_l F +GLIBC_2.35 iswblank F +GLIBC_2.35 iswblank_l F +GLIBC_2.35 iswcntrl F +GLIBC_2.35 iswcntrl_l F +GLIBC_2.35 iswctype F +GLIBC_2.35 iswctype_l F +GLIBC_2.35 iswdigit F +GLIBC_2.35 iswdigit_l F +GLIBC_2.35 iswgraph F +GLIBC_2.35 iswgraph_l F +GLIBC_2.35 iswlower F +GLIBC_2.35 iswlower_l F +GLIBC_2.35 iswprint F +GLIBC_2.35 iswprint_l F +GLIBC_2.35 iswpunct F +GLIBC_2.35 iswpunct_l F +GLIBC_2.35 iswspace F +GLIBC_2.35 iswspace_l F +GLIBC_2.35 iswupper F +GLIBC_2.35 iswupper_l F +GLIBC_2.35 iswxdigit F +GLIBC_2.35 iswxdigit_l F +GLIBC_2.35 isxdigit F +GLIBC_2.35 isxdigit_l F +GLIBC_2.35 jrand48 F +GLIBC_2.35 jrand48_r F +GLIBC_2.35 kill F +GLIBC_2.35 killpg F +GLIBC_2.35 klogctl F +GLIBC_2.35 l64a F +GLIBC_2.35 labs F +GLIBC_2.35 lchmod F +GLIBC_2.35 lchown F +GLIBC_2.35 lckpwdf F +GLIBC_2.35 lcong48 F +GLIBC_2.35 lcong48_r F +GLIBC_2.35 ldexp F +GLIBC_2.35 ldexpf F +GLIBC_2.35 ldexpl F +GLIBC_2.35 ldiv F +GLIBC_2.35 lfind F +GLIBC_2.35 lgetxattr F +GLIBC_2.35 link F +GLIBC_2.35 linkat F +GLIBC_2.35 lio_listio F +GLIBC_2.35 lio_listio64 F +GLIBC_2.35 listen F +GLIBC_2.35 listxattr F +GLIBC_2.35 llabs F +GLIBC_2.35 lldiv F +GLIBC_2.35 llistxattr F +GLIBC_2.35 localeconv F +GLIBC_2.35 localtime F +GLIBC_2.35 localtime_r F +GLIBC_2.35 lockf F +GLIBC_2.35 lockf64 F +GLIBC_2.35 login F +GLIBC_2.35 login_tty F +GLIBC_2.35 logout F +GLIBC_2.35 logwtmp F +GLIBC_2.35 longjmp F +GLIBC_2.35 lrand48 F +GLIBC_2.35 lrand48_r F +GLIBC_2.35 lremovexattr F +GLIBC_2.35 lsearch F +GLIBC_2.35 lseek F +GLIBC_2.35 lseek64 F +GLIBC_2.35 lsetxattr F +GLIBC_2.35 lstat F +GLIBC_2.35 lstat64 F +GLIBC_2.35 lutimes F +GLIBC_2.35 madvise F +GLIBC_2.35 makecontext F +GLIBC_2.35 mallinfo F +GLIBC_2.35 mallinfo2 F +GLIBC_2.35 malloc F +GLIBC_2.35 malloc_info F +GLIBC_2.35 malloc_stats F +GLIBC_2.35 malloc_trim F +GLIBC_2.35 malloc_usable_size F +GLIBC_2.35 mallopt F +GLIBC_2.35 mblen F +GLIBC_2.35 mbrlen F +GLIBC_2.35 mbrtoc16 F +GLIBC_2.35 mbrtoc32 F +GLIBC_2.35 mbrtowc F +GLIBC_2.35 mbsinit F +GLIBC_2.35 mbsnrtowcs F +GLIBC_2.35 mbsrtowcs F +GLIBC_2.35 mbstowcs F +GLIBC_2.35 mbtowc F +GLIBC_2.35 mcheck F +GLIBC_2.35 mcheck_check_all F +GLIBC_2.35 mcheck_pedantic F +GLIBC_2.35 memalign F +GLIBC_2.35 memccpy F +GLIBC_2.35 memchr F +GLIBC_2.35 memcmp F +GLIBC_2.35 memcpy F +GLIBC_2.35 memfd_create F +GLIBC_2.35 memfrob F +GLIBC_2.35 memmem F +GLIBC_2.35 memmove F +GLIBC_2.35 mempcpy F +GLIBC_2.35 memrchr F +GLIBC_2.35 memset F +GLIBC_2.35 mincore F +GLIBC_2.35 mkdir F +GLIBC_2.35 mkdirat F +GLIBC_2.35 mkdtemp F +GLIBC_2.35 mkfifo F +GLIBC_2.35 mkfifoat F +GLIBC_2.35 mknod F +GLIBC_2.35 mknodat F +GLIBC_2.35 mkostemp F +GLIBC_2.35 mkostemp64 F +GLIBC_2.35 mkostemps F +GLIBC_2.35 mkostemps64 F +GLIBC_2.35 mkstemp F +GLIBC_2.35 mkstemp64 F +GLIBC_2.35 mkstemps F +GLIBC_2.35 mkstemps64 F +GLIBC_2.35 mktemp F +GLIBC_2.35 mktime F +GLIBC_2.35 mlock F +GLIBC_2.35 mlock2 F +GLIBC_2.35 mlockall F +GLIBC_2.35 mmap F +GLIBC_2.35 mmap64 F +GLIBC_2.35 modf F +GLIBC_2.35 modff F +GLIBC_2.35 modfl F +GLIBC_2.35 moncontrol F +GLIBC_2.35 monstartup F +GLIBC_2.35 mount F +GLIBC_2.35 mprobe F +GLIBC_2.35 mprotect F +GLIBC_2.35 mq_close F +GLIBC_2.35 mq_getattr F +GLIBC_2.35 mq_notify F +GLIBC_2.35 mq_open F +GLIBC_2.35 mq_receive F +GLIBC_2.35 mq_send F +GLIBC_2.35 mq_setattr F +GLIBC_2.35 mq_timedreceive F +GLIBC_2.35 mq_timedsend F +GLIBC_2.35 mq_unlink F +GLIBC_2.35 mrand48 F +GLIBC_2.35 mrand48_r F +GLIBC_2.35 mremap F +GLIBC_2.35 msgctl F +GLIBC_2.35 msgget F +GLIBC_2.35 msgrcv F +GLIBC_2.35 msgsnd F +GLIBC_2.35 msync F +GLIBC_2.35 mtrace F +GLIBC_2.35 mtx_destroy F +GLIBC_2.35 mtx_init F +GLIBC_2.35 mtx_lock F +GLIBC_2.35 mtx_timedlock F +GLIBC_2.35 mtx_trylock F +GLIBC_2.35 mtx_unlock F +GLIBC_2.35 munlock F +GLIBC_2.35 munlockall F +GLIBC_2.35 munmap F +GLIBC_2.35 muntrace F +GLIBC_2.35 name_to_handle_at F +GLIBC_2.35 nanosleep F +GLIBC_2.35 newlocale F +GLIBC_2.35 nftw F +GLIBC_2.35 nftw64 F +GLIBC_2.35 ngettext F +GLIBC_2.35 nice F +GLIBC_2.35 nl_langinfo F +GLIBC_2.35 nl_langinfo_l F +GLIBC_2.35 nrand48 F +GLIBC_2.35 nrand48_r F +GLIBC_2.35 ns_name_compress F +GLIBC_2.35 ns_name_ntop F +GLIBC_2.35 ns_name_pack F +GLIBC_2.35 ns_name_pton F +GLIBC_2.35 ns_name_skip F +GLIBC_2.35 ns_name_uncompress F +GLIBC_2.35 ns_name_unpack F +GLIBC_2.35 ntohl F +GLIBC_2.35 ntohs F +GLIBC_2.35 ntp_adjtime F +GLIBC_2.35 ntp_gettime F +GLIBC_2.35 ntp_gettimex F +GLIBC_2.35 obstack_alloc_failed_handler D 0x4 +GLIBC_2.35 obstack_exit_failure D 0x4 +GLIBC_2.35 obstack_free F +GLIBC_2.35 obstack_printf F +GLIBC_2.35 obstack_vprintf F +GLIBC_2.35 on_exit F +GLIBC_2.35 open F +GLIBC_2.35 open64 F +GLIBC_2.35 open_by_handle_at F +GLIBC_2.35 open_memstream F +GLIBC_2.35 open_wmemstream F +GLIBC_2.35 openat F +GLIBC_2.35 openat64 F +GLIBC_2.35 opendir F +GLIBC_2.35 openlog F +GLIBC_2.35 openpty F +GLIBC_2.35 optarg D 0x4 +GLIBC_2.35 opterr D 0x4 +GLIBC_2.35 optind D 0x4 +GLIBC_2.35 optopt D 0x4 +GLIBC_2.35 parse_printf_format F +GLIBC_2.35 pathconf F +GLIBC_2.35 pause F +GLIBC_2.35 pclose F +GLIBC_2.35 perror F +GLIBC_2.35 personality F +GLIBC_2.35 pipe F +GLIBC_2.35 pipe2 F +GLIBC_2.35 pivot_root F +GLIBC_2.35 pkey_alloc F +GLIBC_2.35 pkey_free F +GLIBC_2.35 pkey_get F +GLIBC_2.35 pkey_mprotect F +GLIBC_2.35 pkey_set F +GLIBC_2.35 poll F +GLIBC_2.35 popen F +GLIBC_2.35 posix_fadvise F +GLIBC_2.35 posix_fadvise64 F +GLIBC_2.35 posix_fallocate F +GLIBC_2.35 posix_fallocate64 F +GLIBC_2.35 posix_madvise F +GLIBC_2.35 posix_memalign F +GLIBC_2.35 posix_openpt F +GLIBC_2.35 posix_spawn F +GLIBC_2.35 posix_spawn_file_actions_addchdir_np F +GLIBC_2.35 posix_spawn_file_actions_addclose F +GLIBC_2.35 posix_spawn_file_actions_addclosefrom_np F +GLIBC_2.35 posix_spawn_file_actions_adddup2 F +GLIBC_2.35 posix_spawn_file_actions_addfchdir_np F +GLIBC_2.35 posix_spawn_file_actions_addopen F +GLIBC_2.35 posix_spawn_file_actions_destroy F +GLIBC_2.35 posix_spawn_file_actions_init F +GLIBC_2.35 posix_spawnattr_destroy F +GLIBC_2.35 posix_spawnattr_getflags F +GLIBC_2.35 posix_spawnattr_getpgroup F +GLIBC_2.35 posix_spawnattr_getschedparam F +GLIBC_2.35 posix_spawnattr_getschedpolicy F +GLIBC_2.35 posix_spawnattr_getsigdefault F +GLIBC_2.35 posix_spawnattr_getsigmask F +GLIBC_2.35 posix_spawnattr_init F +GLIBC_2.35 posix_spawnattr_setflags F +GLIBC_2.35 posix_spawnattr_setpgroup F +GLIBC_2.35 posix_spawnattr_setschedparam F +GLIBC_2.35 posix_spawnattr_setschedpolicy F +GLIBC_2.35 posix_spawnattr_setsigdefault F +GLIBC_2.35 posix_spawnattr_setsigmask F +GLIBC_2.35 posix_spawnp F +GLIBC_2.35 ppoll F +GLIBC_2.35 prctl F +GLIBC_2.35 pread F +GLIBC_2.35 pread64 F +GLIBC_2.35 preadv F +GLIBC_2.35 preadv2 F +GLIBC_2.35 preadv64 F +GLIBC_2.35 preadv64v2 F +GLIBC_2.35 printf F +GLIBC_2.35 printf_size F +GLIBC_2.35 printf_size_info F +GLIBC_2.35 prlimit F +GLIBC_2.35 prlimit64 F +GLIBC_2.35 process_vm_readv F +GLIBC_2.35 process_vm_writev F +GLIBC_2.35 profil F +GLIBC_2.35 program_invocation_name D 0x4 +GLIBC_2.35 program_invocation_short_name D 0x4 +GLIBC_2.35 pselect F +GLIBC_2.35 psiginfo F +GLIBC_2.35 psignal F +GLIBC_2.35 pthread_attr_destroy F +GLIBC_2.35 pthread_attr_getaffinity_np F +GLIBC_2.35 pthread_attr_getdetachstate F +GLIBC_2.35 pthread_attr_getguardsize F +GLIBC_2.35 pthread_attr_getinheritsched F +GLIBC_2.35 pthread_attr_getschedparam F +GLIBC_2.35 pthread_attr_getschedpolicy F +GLIBC_2.35 pthread_attr_getscope F +GLIBC_2.35 pthread_attr_getsigmask_np F +GLIBC_2.35 pthread_attr_getstack F +GLIBC_2.35 pthread_attr_getstackaddr F +GLIBC_2.35 pthread_attr_getstacksize F +GLIBC_2.35 pthread_attr_init F +GLIBC_2.35 pthread_attr_setaffinity_np F +GLIBC_2.35 pthread_attr_setdetachstate F +GLIBC_2.35 pthread_attr_setguardsize F +GLIBC_2.35 pthread_attr_setinheritsched F +GLIBC_2.35 pthread_attr_setschedparam F +GLIBC_2.35 pthread_attr_setschedpolicy F +GLIBC_2.35 pthread_attr_setscope F +GLIBC_2.35 pthread_attr_setsigmask_np F +GLIBC_2.35 pthread_attr_setstack F +GLIBC_2.35 pthread_attr_setstackaddr F +GLIBC_2.35 pthread_attr_setstacksize F +GLIBC_2.35 pthread_barrier_destroy F +GLIBC_2.35 pthread_barrier_init F +GLIBC_2.35 pthread_barrier_wait F +GLIBC_2.35 pthread_barrierattr_destroy F +GLIBC_2.35 pthread_barrierattr_getpshared F +GLIBC_2.35 pthread_barrierattr_init F +GLIBC_2.35 pthread_barrierattr_setpshared F +GLIBC_2.35 pthread_cancel F +GLIBC_2.35 pthread_clockjoin_np F +GLIBC_2.35 pthread_cond_broadcast F +GLIBC_2.35 pthread_cond_clockwait F +GLIBC_2.35 pthread_cond_destroy F +GLIBC_2.35 pthread_cond_init F +GLIBC_2.35 pthread_cond_signal F +GLIBC_2.35 pthread_cond_timedwait F +GLIBC_2.35 pthread_cond_wait F +GLIBC_2.35 pthread_condattr_destroy F +GLIBC_2.35 pthread_condattr_getclock F +GLIBC_2.35 pthread_condattr_getpshared F +GLIBC_2.35 pthread_condattr_init F +GLIBC_2.35 pthread_condattr_setclock F +GLIBC_2.35 pthread_condattr_setpshared F +GLIBC_2.35 pthread_create F +GLIBC_2.35 pthread_detach F +GLIBC_2.35 pthread_equal F +GLIBC_2.35 pthread_exit F +GLIBC_2.35 pthread_getaffinity_np F +GLIBC_2.35 pthread_getattr_default_np F +GLIBC_2.35 pthread_getattr_np F +GLIBC_2.35 pthread_getconcurrency F +GLIBC_2.35 pthread_getcpuclockid F +GLIBC_2.35 pthread_getname_np F +GLIBC_2.35 pthread_getschedparam F +GLIBC_2.35 pthread_getspecific F +GLIBC_2.35 pthread_join F +GLIBC_2.35 pthread_key_create F +GLIBC_2.35 pthread_key_delete F +GLIBC_2.35 pthread_kill F +GLIBC_2.35 pthread_mutex_clocklock F +GLIBC_2.35 pthread_mutex_consistent F +GLIBC_2.35 pthread_mutex_destroy F +GLIBC_2.35 pthread_mutex_getprioceiling F +GLIBC_2.35 pthread_mutex_init F +GLIBC_2.35 pthread_mutex_lock F +GLIBC_2.35 pthread_mutex_setprioceiling F +GLIBC_2.35 pthread_mutex_timedlock F +GLIBC_2.35 pthread_mutex_trylock F +GLIBC_2.35 pthread_mutex_unlock F +GLIBC_2.35 pthread_mutexattr_destroy F +GLIBC_2.35 pthread_mutexattr_getprioceiling F +GLIBC_2.35 pthread_mutexattr_getprotocol F +GLIBC_2.35 pthread_mutexattr_getpshared F +GLIBC_2.35 pthread_mutexattr_getrobust F +GLIBC_2.35 pthread_mutexattr_gettype F +GLIBC_2.35 pthread_mutexattr_init F +GLIBC_2.35 pthread_mutexattr_setprioceiling F +GLIBC_2.35 pthread_mutexattr_setprotocol F +GLIBC_2.35 pthread_mutexattr_setpshared F +GLIBC_2.35 pthread_mutexattr_setrobust F +GLIBC_2.35 pthread_mutexattr_settype F +GLIBC_2.35 pthread_once F +GLIBC_2.35 pthread_rwlock_clockrdlock F +GLIBC_2.35 pthread_rwlock_clockwrlock F +GLIBC_2.35 pthread_rwlock_destroy F +GLIBC_2.35 pthread_rwlock_init F +GLIBC_2.35 pthread_rwlock_rdlock F +GLIBC_2.35 pthread_rwlock_timedrdlock F +GLIBC_2.35 pthread_rwlock_timedwrlock F +GLIBC_2.35 pthread_rwlock_tryrdlock F +GLIBC_2.35 pthread_rwlock_trywrlock F +GLIBC_2.35 pthread_rwlock_unlock F +GLIBC_2.35 pthread_rwlock_wrlock F +GLIBC_2.35 pthread_rwlockattr_destroy F +GLIBC_2.35 pthread_rwlockattr_getkind_np F +GLIBC_2.35 pthread_rwlockattr_getpshared F +GLIBC_2.35 pthread_rwlockattr_init F +GLIBC_2.35 pthread_rwlockattr_setkind_np F +GLIBC_2.35 pthread_rwlockattr_setpshared F +GLIBC_2.35 pthread_self F +GLIBC_2.35 pthread_setaffinity_np F +GLIBC_2.35 pthread_setattr_default_np F +GLIBC_2.35 pthread_setcancelstate F +GLIBC_2.35 pthread_setcanceltype F +GLIBC_2.35 pthread_setconcurrency F +GLIBC_2.35 pthread_setname_np F +GLIBC_2.35 pthread_setschedparam F +GLIBC_2.35 pthread_setschedprio F +GLIBC_2.35 pthread_setspecific F +GLIBC_2.35 pthread_sigmask F +GLIBC_2.35 pthread_sigqueue F +GLIBC_2.35 pthread_spin_destroy F +GLIBC_2.35 pthread_spin_init F +GLIBC_2.35 pthread_spin_lock F +GLIBC_2.35 pthread_spin_trylock F +GLIBC_2.35 pthread_spin_unlock F +GLIBC_2.35 pthread_testcancel F +GLIBC_2.35 pthread_timedjoin_np F +GLIBC_2.35 pthread_tryjoin_np F +GLIBC_2.35 ptrace F +GLIBC_2.35 ptsname F +GLIBC_2.35 ptsname_r F +GLIBC_2.35 putc F +GLIBC_2.35 putc_unlocked F +GLIBC_2.35 putchar F +GLIBC_2.35 putchar_unlocked F +GLIBC_2.35 putenv F +GLIBC_2.35 putgrent F +GLIBC_2.35 putpwent F +GLIBC_2.35 puts F +GLIBC_2.35 putsgent F +GLIBC_2.35 putspent F +GLIBC_2.35 pututline F +GLIBC_2.35 pututxline F +GLIBC_2.35 putw F +GLIBC_2.35 putwc F +GLIBC_2.35 putwc_unlocked F +GLIBC_2.35 putwchar F +GLIBC_2.35 putwchar_unlocked F +GLIBC_2.35 pvalloc F +GLIBC_2.35 pwrite F +GLIBC_2.35 pwrite64 F +GLIBC_2.35 pwritev F +GLIBC_2.35 pwritev2 F +GLIBC_2.35 pwritev64 F +GLIBC_2.35 pwritev64v2 F +GLIBC_2.35 qecvt F +GLIBC_2.35 qecvt_r F +GLIBC_2.35 qfcvt F +GLIBC_2.35 qfcvt_r F +GLIBC_2.35 qgcvt F +GLIBC_2.35 qsort F +GLIBC_2.35 qsort_r F +GLIBC_2.35 quick_exit F +GLIBC_2.35 quotactl F +GLIBC_2.35 raise F +GLIBC_2.35 rand F +GLIBC_2.35 rand_r F +GLIBC_2.35 random F +GLIBC_2.35 random_r F +GLIBC_2.35 rawmemchr F +GLIBC_2.35 rcmd F +GLIBC_2.35 rcmd_af F +GLIBC_2.35 re_comp F +GLIBC_2.35 re_compile_fastmap F +GLIBC_2.35 re_compile_pattern F +GLIBC_2.35 re_exec F +GLIBC_2.35 re_match F +GLIBC_2.35 re_match_2 F +GLIBC_2.35 re_search F +GLIBC_2.35 re_search_2 F +GLIBC_2.35 re_set_registers F +GLIBC_2.35 re_set_syntax F +GLIBC_2.35 re_syntax_options D 0x4 +GLIBC_2.35 read F +GLIBC_2.35 readahead F +GLIBC_2.35 readdir F +GLIBC_2.35 readdir64 F +GLIBC_2.35 readdir64_r F +GLIBC_2.35 readdir_r F +GLIBC_2.35 readlink F +GLIBC_2.35 readlinkat F +GLIBC_2.35 readv F +GLIBC_2.35 realloc F +GLIBC_2.35 reallocarray F +GLIBC_2.35 realpath F +GLIBC_2.35 reboot F +GLIBC_2.35 recv F +GLIBC_2.35 recvfrom F +GLIBC_2.35 recvmmsg F +GLIBC_2.35 recvmsg F +GLIBC_2.35 regcomp F +GLIBC_2.35 regerror F +GLIBC_2.35 regexec F +GLIBC_2.35 regfree F +GLIBC_2.35 register_printf_function F +GLIBC_2.35 register_printf_modifier F +GLIBC_2.35 register_printf_specifier F +GLIBC_2.35 register_printf_type F +GLIBC_2.35 remap_file_pages F +GLIBC_2.35 remove F +GLIBC_2.35 removexattr F +GLIBC_2.35 remque F +GLIBC_2.35 rename F +GLIBC_2.35 renameat F +GLIBC_2.35 renameat2 F +GLIBC_2.35 res_dnok F +GLIBC_2.35 res_hnok F +GLIBC_2.35 res_mailok F +GLIBC_2.35 res_mkquery F +GLIBC_2.35 res_nmkquery F +GLIBC_2.35 res_nquery F +GLIBC_2.35 res_nquerydomain F +GLIBC_2.35 res_nsearch F +GLIBC_2.35 res_nsend F +GLIBC_2.35 res_ownok F +GLIBC_2.35 res_query F +GLIBC_2.35 res_querydomain F +GLIBC_2.35 res_search F +GLIBC_2.35 res_send F +GLIBC_2.35 revoke F +GLIBC_2.35 rewind F +GLIBC_2.35 rewinddir F +GLIBC_2.35 rexec F +GLIBC_2.35 rexec_af F +GLIBC_2.35 rexecoptions D 0x4 +GLIBC_2.35 rindex F +GLIBC_2.35 rmdir F +GLIBC_2.35 rpmatch F +GLIBC_2.35 rresvport F +GLIBC_2.35 rresvport_af F +GLIBC_2.35 ruserok F +GLIBC_2.35 ruserok_af F +GLIBC_2.35 ruserpass F +GLIBC_2.35 sbrk F +GLIBC_2.35 scalbn F +GLIBC_2.35 scalbnf F +GLIBC_2.35 scalbnl F +GLIBC_2.35 scandir F +GLIBC_2.35 scandir64 F +GLIBC_2.35 scandirat F +GLIBC_2.35 scandirat64 F +GLIBC_2.35 scanf F +GLIBC_2.35 sched_get_priority_max F +GLIBC_2.35 sched_get_priority_min F +GLIBC_2.35 sched_getaffinity F +GLIBC_2.35 sched_getcpu F +GLIBC_2.35 sched_getparam F +GLIBC_2.35 sched_getscheduler F +GLIBC_2.35 sched_rr_get_interval F +GLIBC_2.35 sched_setaffinity F +GLIBC_2.35 sched_setparam F +GLIBC_2.35 sched_setscheduler F +GLIBC_2.35 sched_yield F +GLIBC_2.35 secure_getenv F +GLIBC_2.35 seed48 F +GLIBC_2.35 seed48_r F +GLIBC_2.35 seekdir F +GLIBC_2.35 select F +GLIBC_2.35 sem_clockwait F +GLIBC_2.35 sem_close F +GLIBC_2.35 sem_destroy F +GLIBC_2.35 sem_getvalue F +GLIBC_2.35 sem_init F +GLIBC_2.35 sem_open F +GLIBC_2.35 sem_post F +GLIBC_2.35 sem_timedwait F +GLIBC_2.35 sem_trywait F +GLIBC_2.35 sem_unlink F +GLIBC_2.35 sem_wait F +GLIBC_2.35 semctl F +GLIBC_2.35 semget F +GLIBC_2.35 semop F +GLIBC_2.35 semtimedop F +GLIBC_2.35 send F +GLIBC_2.35 sendfile F +GLIBC_2.35 sendfile64 F +GLIBC_2.35 sendmmsg F +GLIBC_2.35 sendmsg F +GLIBC_2.35 sendto F +GLIBC_2.35 setaliasent F +GLIBC_2.35 setbuf F +GLIBC_2.35 setbuffer F +GLIBC_2.35 setcontext F +GLIBC_2.35 setdomainname F +GLIBC_2.35 setegid F +GLIBC_2.35 setenv F +GLIBC_2.35 seteuid F +GLIBC_2.35 setfsent F +GLIBC_2.35 setfsgid F +GLIBC_2.35 setfsuid F +GLIBC_2.35 setgid F +GLIBC_2.35 setgrent F +GLIBC_2.35 setgroups F +GLIBC_2.35 sethostent F +GLIBC_2.35 sethostid F +GLIBC_2.35 sethostname F +GLIBC_2.35 setipv4sourcefilter F +GLIBC_2.35 setitimer F +GLIBC_2.35 setjmp F +GLIBC_2.35 setlinebuf F +GLIBC_2.35 setlocale F +GLIBC_2.35 setlogin F +GLIBC_2.35 setlogmask F +GLIBC_2.35 setmntent F +GLIBC_2.35 setnetent F +GLIBC_2.35 setnetgrent F +GLIBC_2.35 setns F +GLIBC_2.35 setpgid F +GLIBC_2.35 setpgrp F +GLIBC_2.35 setpriority F +GLIBC_2.35 setprotoent F +GLIBC_2.35 setpwent F +GLIBC_2.35 setregid F +GLIBC_2.35 setresgid F +GLIBC_2.35 setresuid F +GLIBC_2.35 setreuid F +GLIBC_2.35 setrlimit F +GLIBC_2.35 setrlimit64 F +GLIBC_2.35 setrpcent F +GLIBC_2.35 setservent F +GLIBC_2.35 setsgent F +GLIBC_2.35 setsid F +GLIBC_2.35 setsockopt F +GLIBC_2.35 setsourcefilter F +GLIBC_2.35 setspent F +GLIBC_2.35 setstate F +GLIBC_2.35 setstate_r F +GLIBC_2.35 settimeofday F +GLIBC_2.35 setttyent F +GLIBC_2.35 setuid F +GLIBC_2.35 setusershell F +GLIBC_2.35 setutent F +GLIBC_2.35 setutxent F +GLIBC_2.35 setvbuf F +GLIBC_2.35 setxattr F +GLIBC_2.35 sgetsgent F +GLIBC_2.35 sgetsgent_r F +GLIBC_2.35 sgetspent F +GLIBC_2.35 sgetspent_r F +GLIBC_2.35 shm_open F +GLIBC_2.35 shm_unlink F +GLIBC_2.35 shmat F +GLIBC_2.35 shmctl F +GLIBC_2.35 shmdt F +GLIBC_2.35 shmget F +GLIBC_2.35 shutdown F +GLIBC_2.35 sigabbrev_np F +GLIBC_2.35 sigaction F +GLIBC_2.35 sigaddset F +GLIBC_2.35 sigaltstack F +GLIBC_2.35 sigandset F +GLIBC_2.35 sigblock F +GLIBC_2.35 sigdelset F +GLIBC_2.35 sigdescr_np F +GLIBC_2.35 sigemptyset F +GLIBC_2.35 sigfillset F +GLIBC_2.35 siggetmask F +GLIBC_2.35 sighold F +GLIBC_2.35 sigignore F +GLIBC_2.35 siginterrupt F +GLIBC_2.35 sigisemptyset F +GLIBC_2.35 sigismember F +GLIBC_2.35 siglongjmp F +GLIBC_2.35 signal F +GLIBC_2.35 signalfd F +GLIBC_2.35 sigorset F +GLIBC_2.35 sigpause F +GLIBC_2.35 sigpending F +GLIBC_2.35 sigprocmask F +GLIBC_2.35 sigqueue F +GLIBC_2.35 sigrelse F +GLIBC_2.35 sigreturn F +GLIBC_2.35 sigset F +GLIBC_2.35 sigsetmask F +GLIBC_2.35 sigstack F +GLIBC_2.35 sigsuspend F +GLIBC_2.35 sigtimedwait F +GLIBC_2.35 sigwait F +GLIBC_2.35 sigwaitinfo F +GLIBC_2.35 sleep F +GLIBC_2.35 snprintf F +GLIBC_2.35 sockatmark F +GLIBC_2.35 socket F +GLIBC_2.35 socketpair F +GLIBC_2.35 splice F +GLIBC_2.35 sprintf F +GLIBC_2.35 sprofil F +GLIBC_2.35 srand F +GLIBC_2.35 srand48 F +GLIBC_2.35 srand48_r F +GLIBC_2.35 srandom F +GLIBC_2.35 srandom_r F +GLIBC_2.35 sscanf F +GLIBC_2.35 ssignal F +GLIBC_2.35 stat F +GLIBC_2.35 stat64 F +GLIBC_2.35 statfs F +GLIBC_2.35 statfs64 F +GLIBC_2.35 statvfs F +GLIBC_2.35 statvfs64 F +GLIBC_2.35 statx F +GLIBC_2.35 stderr D 0x4 +GLIBC_2.35 stdin D 0x4 +GLIBC_2.35 stdout D 0x4 +GLIBC_2.35 stpcpy F +GLIBC_2.35 stpncpy F +GLIBC_2.35 strcasecmp F +GLIBC_2.35 strcasecmp_l F +GLIBC_2.35 strcasestr F +GLIBC_2.35 strcat F +GLIBC_2.35 strchr F +GLIBC_2.35 strchrnul F +GLIBC_2.35 strcmp F +GLIBC_2.35 strcoll F +GLIBC_2.35 strcoll_l F +GLIBC_2.35 strcpy F +GLIBC_2.35 strcspn F +GLIBC_2.35 strdup F +GLIBC_2.35 strerror F +GLIBC_2.35 strerror_l F +GLIBC_2.35 strerror_r F +GLIBC_2.35 strerrordesc_np F +GLIBC_2.35 strerrorname_np F +GLIBC_2.35 strfmon F +GLIBC_2.35 strfmon_l F +GLIBC_2.35 strfromd F +GLIBC_2.35 strfromf F +GLIBC_2.35 strfromf32 F +GLIBC_2.35 strfromf32x F +GLIBC_2.35 strfromf64 F +GLIBC_2.35 strfroml F +GLIBC_2.35 strfry F +GLIBC_2.35 strftime F +GLIBC_2.35 strftime_l F +GLIBC_2.35 strlen F +GLIBC_2.35 strncasecmp F +GLIBC_2.35 strncasecmp_l F +GLIBC_2.35 strncat F +GLIBC_2.35 strncmp F +GLIBC_2.35 strncpy F +GLIBC_2.35 strndup F +GLIBC_2.35 strnlen F +GLIBC_2.35 strpbrk F +GLIBC_2.35 strptime F +GLIBC_2.35 strptime_l F +GLIBC_2.35 strrchr F +GLIBC_2.35 strsep F +GLIBC_2.35 strsignal F +GLIBC_2.35 strspn F +GLIBC_2.35 strstr F +GLIBC_2.35 strtod F +GLIBC_2.35 strtod_l F +GLIBC_2.35 strtof F +GLIBC_2.35 strtof32 F +GLIBC_2.35 strtof32_l F +GLIBC_2.35 strtof32x F +GLIBC_2.35 strtof32x_l F +GLIBC_2.35 strtof64 F +GLIBC_2.35 strtof64_l F +GLIBC_2.35 strtof_l F +GLIBC_2.35 strtoimax F +GLIBC_2.35 strtok F +GLIBC_2.35 strtok_r F +GLIBC_2.35 strtol F +GLIBC_2.35 strtol_l F +GLIBC_2.35 strtold F +GLIBC_2.35 strtold_l F +GLIBC_2.35 strtoll F +GLIBC_2.35 strtoll_l F +GLIBC_2.35 strtoq F +GLIBC_2.35 strtoul F +GLIBC_2.35 strtoul_l F +GLIBC_2.35 strtoull F +GLIBC_2.35 strtoull_l F +GLIBC_2.35 strtoumax F +GLIBC_2.35 strtouq F +GLIBC_2.35 strverscmp F +GLIBC_2.35 strxfrm F +GLIBC_2.35 strxfrm_l F +GLIBC_2.35 stty F +GLIBC_2.35 swab F +GLIBC_2.35 swapcontext F +GLIBC_2.35 swapoff F +GLIBC_2.35 swapon F +GLIBC_2.35 swprintf F +GLIBC_2.35 swscanf F +GLIBC_2.35 symlink F +GLIBC_2.35 symlinkat F +GLIBC_2.35 sync F +GLIBC_2.35 sync_file_range F +GLIBC_2.35 syncfs F +GLIBC_2.35 syscall F +GLIBC_2.35 sysconf F +GLIBC_2.35 sysinfo F +GLIBC_2.35 syslog F +GLIBC_2.35 system F +GLIBC_2.35 sysv_signal F +GLIBC_2.35 tcdrain F +GLIBC_2.35 tcflow F +GLIBC_2.35 tcflush F +GLIBC_2.35 tcgetattr F +GLIBC_2.35 tcgetpgrp F +GLIBC_2.35 tcgetsid F +GLIBC_2.35 tcsendbreak F +GLIBC_2.35 tcsetattr F +GLIBC_2.35 tcsetpgrp F +GLIBC_2.35 tdelete F +GLIBC_2.35 tdestroy F +GLIBC_2.35 tee F +GLIBC_2.35 telldir F +GLIBC_2.35 tempnam F +GLIBC_2.35 textdomain F +GLIBC_2.35 tfind F +GLIBC_2.35 tgkill F +GLIBC_2.35 thrd_create F +GLIBC_2.35 thrd_current F +GLIBC_2.35 thrd_detach F +GLIBC_2.35 thrd_equal F +GLIBC_2.35 thrd_exit F +GLIBC_2.35 thrd_join F +GLIBC_2.35 thrd_sleep F +GLIBC_2.35 thrd_yield F +GLIBC_2.35 time F +GLIBC_2.35 timegm F +GLIBC_2.35 timelocal F +GLIBC_2.35 timer_create F +GLIBC_2.35 timer_delete F +GLIBC_2.35 timer_getoverrun F +GLIBC_2.35 timer_gettime F +GLIBC_2.35 timer_settime F +GLIBC_2.35 timerfd_create F +GLIBC_2.35 timerfd_gettime F +GLIBC_2.35 timerfd_settime F +GLIBC_2.35 times F +GLIBC_2.35 timespec_get F +GLIBC_2.35 timespec_getres F +GLIBC_2.35 timezone D 0x4 +GLIBC_2.35 tmpfile F +GLIBC_2.35 tmpfile64 F +GLIBC_2.35 tmpnam F +GLIBC_2.35 tmpnam_r F +GLIBC_2.35 toascii F +GLIBC_2.35 tolower F +GLIBC_2.35 tolower_l F +GLIBC_2.35 toupper F +GLIBC_2.35 toupper_l F +GLIBC_2.35 towctrans F +GLIBC_2.35 towctrans_l F +GLIBC_2.35 towlower F +GLIBC_2.35 towlower_l F +GLIBC_2.35 towupper F +GLIBC_2.35 towupper_l F +GLIBC_2.35 truncate F +GLIBC_2.35 truncate64 F +GLIBC_2.35 tsearch F +GLIBC_2.35 tss_create F +GLIBC_2.35 tss_delete F +GLIBC_2.35 tss_get F +GLIBC_2.35 tss_set F +GLIBC_2.35 ttyname F +GLIBC_2.35 ttyname_r F +GLIBC_2.35 ttyslot F +GLIBC_2.35 twalk F +GLIBC_2.35 twalk_r F +GLIBC_2.35 tzname D 0x8 +GLIBC_2.35 tzset F +GLIBC_2.35 ualarm F +GLIBC_2.35 ulckpwdf F +GLIBC_2.35 ulimit F +GLIBC_2.35 umask F +GLIBC_2.35 umount F +GLIBC_2.35 umount2 F +GLIBC_2.35 uname F +GLIBC_2.35 ungetc F +GLIBC_2.35 ungetwc F +GLIBC_2.35 unlink F +GLIBC_2.35 unlinkat F +GLIBC_2.35 unlockpt F +GLIBC_2.35 unsetenv F +GLIBC_2.35 unshare F +GLIBC_2.35 updwtmp F +GLIBC_2.35 updwtmpx F +GLIBC_2.35 uselocale F +GLIBC_2.35 usleep F +GLIBC_2.35 utime F +GLIBC_2.35 utimensat F +GLIBC_2.35 utimes F +GLIBC_2.35 utmpname F +GLIBC_2.35 utmpxname F +GLIBC_2.35 valloc F +GLIBC_2.35 vasprintf F +GLIBC_2.35 vdprintf F +GLIBC_2.35 verr F +GLIBC_2.35 verrx F +GLIBC_2.35 versionsort F +GLIBC_2.35 versionsort64 F +GLIBC_2.35 vfork F +GLIBC_2.35 vfprintf F +GLIBC_2.35 vfscanf F +GLIBC_2.35 vfwprintf F +GLIBC_2.35 vfwscanf F +GLIBC_2.35 vhangup F +GLIBC_2.35 vlimit F +GLIBC_2.35 vmsplice F +GLIBC_2.35 vprintf F +GLIBC_2.35 vscanf F +GLIBC_2.35 vsnprintf F +GLIBC_2.35 vsprintf F +GLIBC_2.35 vsscanf F +GLIBC_2.35 vswprintf F +GLIBC_2.35 vswscanf F +GLIBC_2.35 vsyslog F +GLIBC_2.35 vwarn F +GLIBC_2.35 vwarnx F +GLIBC_2.35 vwprintf F +GLIBC_2.35 vwscanf F +GLIBC_2.35 wait F +GLIBC_2.35 wait3 F +GLIBC_2.35 wait4 F +GLIBC_2.35 waitid F +GLIBC_2.35 waitpid F +GLIBC_2.35 warn F +GLIBC_2.35 warnx F +GLIBC_2.35 wcpcpy F +GLIBC_2.35 wcpncpy F +GLIBC_2.35 wcrtomb F +GLIBC_2.35 wcscasecmp F +GLIBC_2.35 wcscasecmp_l F +GLIBC_2.35 wcscat F +GLIBC_2.35 wcschr F +GLIBC_2.35 wcschrnul F +GLIBC_2.35 wcscmp F +GLIBC_2.35 wcscoll F +GLIBC_2.35 wcscoll_l F +GLIBC_2.35 wcscpy F +GLIBC_2.35 wcscspn F +GLIBC_2.35 wcsdup F +GLIBC_2.35 wcsftime F +GLIBC_2.35 wcsftime_l F +GLIBC_2.35 wcslen F +GLIBC_2.35 wcsncasecmp F +GLIBC_2.35 wcsncasecmp_l F +GLIBC_2.35 wcsncat F +GLIBC_2.35 wcsncmp F +GLIBC_2.35 wcsncpy F +GLIBC_2.35 wcsnlen F +GLIBC_2.35 wcsnrtombs F +GLIBC_2.35 wcspbrk F +GLIBC_2.35 wcsrchr F +GLIBC_2.35 wcsrtombs F +GLIBC_2.35 wcsspn F +GLIBC_2.35 wcsstr F +GLIBC_2.35 wcstod F +GLIBC_2.35 wcstod_l F +GLIBC_2.35 wcstof F +GLIBC_2.35 wcstof32 F +GLIBC_2.35 wcstof32_l F +GLIBC_2.35 wcstof32x F +GLIBC_2.35 wcstof32x_l F +GLIBC_2.35 wcstof64 F +GLIBC_2.35 wcstof64_l F +GLIBC_2.35 wcstof_l F +GLIBC_2.35 wcstoimax F +GLIBC_2.35 wcstok F +GLIBC_2.35 wcstol F +GLIBC_2.35 wcstol_l F +GLIBC_2.35 wcstold F +GLIBC_2.35 wcstold_l F +GLIBC_2.35 wcstoll F +GLIBC_2.35 wcstoll_l F +GLIBC_2.35 wcstombs F +GLIBC_2.35 wcstoq F +GLIBC_2.35 wcstoul F +GLIBC_2.35 wcstoul_l F +GLIBC_2.35 wcstoull F +GLIBC_2.35 wcstoull_l F +GLIBC_2.35 wcstoumax F +GLIBC_2.35 wcstouq F +GLIBC_2.35 wcswcs F +GLIBC_2.35 wcswidth F +GLIBC_2.35 wcsxfrm F +GLIBC_2.35 wcsxfrm_l F +GLIBC_2.35 wctob F +GLIBC_2.35 wctomb F +GLIBC_2.35 wctrans F +GLIBC_2.35 wctrans_l F +GLIBC_2.35 wctype F +GLIBC_2.35 wctype_l F +GLIBC_2.35 wcwidth F +GLIBC_2.35 wmemchr F +GLIBC_2.35 wmemcmp F +GLIBC_2.35 wmemcpy F +GLIBC_2.35 wmemmove F +GLIBC_2.35 wmempcpy F +GLIBC_2.35 wmemset F +GLIBC_2.35 wordexp F +GLIBC_2.35 wordfree F +GLIBC_2.35 wprintf F +GLIBC_2.35 write F +GLIBC_2.35 writev F +GLIBC_2.35 wscanf F diff --git a/sysdeps/unix/sysv/linux/or1k/libc_malloc_debug.abilist b/sysdeps/unix/sysv/linux/or1k/libc_malloc_debug.abilist new file mode 100644 index 0000000000..0acf98fc6f --- /dev/null +++ b/sysdeps/unix/sysv/linux/or1k/libc_malloc_debug.abilist @@ -0,0 +1,26 @@ +GLIBC_2.35 __free_hook D 0x4 +GLIBC_2.35 __malloc_hook D 0x4 +GLIBC_2.35 __memalign_hook D 0x4 +GLIBC_2.35 __realloc_hook D 0x4 +GLIBC_2.35 aligned_alloc F +GLIBC_2.35 calloc F +GLIBC_2.35 free F +GLIBC_2.35 mallinfo F +GLIBC_2.35 mallinfo2 F +GLIBC_2.35 malloc F +GLIBC_2.35 malloc_info F +GLIBC_2.35 malloc_stats F +GLIBC_2.35 malloc_trim F +GLIBC_2.35 malloc_usable_size F +GLIBC_2.35 mallopt F +GLIBC_2.35 mcheck F +GLIBC_2.35 mcheck_check_all F +GLIBC_2.35 mcheck_pedantic F +GLIBC_2.35 memalign F +GLIBC_2.35 mprobe F +GLIBC_2.35 mtrace F +GLIBC_2.35 muntrace F +GLIBC_2.35 posix_memalign F +GLIBC_2.35 pvalloc F +GLIBC_2.35 realloc F +GLIBC_2.35 valloc F diff --git a/sysdeps/unix/sysv/linux/or1k/libcrypt.abilist b/sysdeps/unix/sysv/linux/or1k/libcrypt.abilist new file mode 100644 index 0000000000..fc9c3d5428 --- /dev/null +++ b/sysdeps/unix/sysv/linux/or1k/libcrypt.abilist @@ -0,0 +1,2 @@ +GLIBC_2.35 crypt F +GLIBC_2.35 crypt_r F diff --git a/sysdeps/unix/sysv/linux/or1k/libdl.abilist b/sysdeps/unix/sysv/linux/or1k/libdl.abilist new file mode 100644 index 0000000000..e69de29bb2 diff --git a/sysdeps/unix/sysv/linux/or1k/libm.abilist b/sysdeps/unix/sysv/linux/or1k/libm.abilist new file mode 100644 index 0000000000..9d26508ff5 --- /dev/null +++ b/sysdeps/unix/sysv/linux/or1k/libm.abilist @@ -0,0 +1,759 @@ +GLIBC_2.35 __clog10 F +GLIBC_2.35 __clog10f F +GLIBC_2.35 __clog10l F +GLIBC_2.35 __finite F +GLIBC_2.35 __finitef F +GLIBC_2.35 __fpclassify F +GLIBC_2.35 __fpclassifyf F +GLIBC_2.35 __iseqsig F +GLIBC_2.35 __iseqsigf F +GLIBC_2.35 __issignaling F +GLIBC_2.35 __issignalingf F +GLIBC_2.35 __signbit F +GLIBC_2.35 __signbitf F +GLIBC_2.35 __signgam D 0x4 +GLIBC_2.35 acos F +GLIBC_2.35 acosf F +GLIBC_2.35 acosf32 F +GLIBC_2.35 acosf32x F +GLIBC_2.35 acosf64 F +GLIBC_2.35 acosh F +GLIBC_2.35 acoshf F +GLIBC_2.35 acoshf32 F +GLIBC_2.35 acoshf32x F +GLIBC_2.35 acoshf64 F +GLIBC_2.35 acoshl F +GLIBC_2.35 acosl F +GLIBC_2.35 asin F +GLIBC_2.35 asinf F +GLIBC_2.35 asinf32 F +GLIBC_2.35 asinf32x F +GLIBC_2.35 asinf64 F +GLIBC_2.35 asinh F +GLIBC_2.35 asinhf F +GLIBC_2.35 asinhf32 F +GLIBC_2.35 asinhf32x F +GLIBC_2.35 asinhf64 F +GLIBC_2.35 asinhl F +GLIBC_2.35 asinl F +GLIBC_2.35 atan F +GLIBC_2.35 atan2 F +GLIBC_2.35 atan2f F +GLIBC_2.35 atan2f32 F +GLIBC_2.35 atan2f32x F +GLIBC_2.35 atan2f64 F +GLIBC_2.35 atan2l F +GLIBC_2.35 atanf F +GLIBC_2.35 atanf32 F +GLIBC_2.35 atanf32x F +GLIBC_2.35 atanf64 F +GLIBC_2.35 atanh F +GLIBC_2.35 atanhf F +GLIBC_2.35 atanhf32 F +GLIBC_2.35 atanhf32x F +GLIBC_2.35 atanhf64 F +GLIBC_2.35 atanhl F +GLIBC_2.35 atanl F +GLIBC_2.35 cabs F +GLIBC_2.35 cabsf F +GLIBC_2.35 cabsf32 F +GLIBC_2.35 cabsf32x F +GLIBC_2.35 cabsf64 F +GLIBC_2.35 cabsl F +GLIBC_2.35 cacos F +GLIBC_2.35 cacosf F +GLIBC_2.35 cacosf32 F +GLIBC_2.35 cacosf32x F +GLIBC_2.35 cacosf64 F +GLIBC_2.35 cacosh F +GLIBC_2.35 cacoshf F +GLIBC_2.35 cacoshf32 F +GLIBC_2.35 cacoshf32x F +GLIBC_2.35 cacoshf64 F +GLIBC_2.35 cacoshl F +GLIBC_2.35 cacosl F +GLIBC_2.35 canonicalize F +GLIBC_2.35 canonicalizef F +GLIBC_2.35 canonicalizef32 F +GLIBC_2.35 canonicalizef32x F +GLIBC_2.35 canonicalizef64 F +GLIBC_2.35 canonicalizel F +GLIBC_2.35 carg F +GLIBC_2.35 cargf F +GLIBC_2.35 cargf32 F +GLIBC_2.35 cargf32x F +GLIBC_2.35 cargf64 F +GLIBC_2.35 cargl F +GLIBC_2.35 casin F +GLIBC_2.35 casinf F +GLIBC_2.35 casinf32 F +GLIBC_2.35 casinf32x F +GLIBC_2.35 casinf64 F +GLIBC_2.35 casinh F +GLIBC_2.35 casinhf F +GLIBC_2.35 casinhf32 F +GLIBC_2.35 casinhf32x F +GLIBC_2.35 casinhf64 F +GLIBC_2.35 casinhl F +GLIBC_2.35 casinl F +GLIBC_2.35 catan F +GLIBC_2.35 catanf F +GLIBC_2.35 catanf32 F +GLIBC_2.35 catanf32x F +GLIBC_2.35 catanf64 F +GLIBC_2.35 catanh F +GLIBC_2.35 catanhf F +GLIBC_2.35 catanhf32 F +GLIBC_2.35 catanhf32x F +GLIBC_2.35 catanhf64 F +GLIBC_2.35 catanhl F +GLIBC_2.35 catanl F +GLIBC_2.35 cbrt F +GLIBC_2.35 cbrtf F +GLIBC_2.35 cbrtf32 F +GLIBC_2.35 cbrtf32x F +GLIBC_2.35 cbrtf64 F +GLIBC_2.35 cbrtl F +GLIBC_2.35 ccos F +GLIBC_2.35 ccosf F +GLIBC_2.35 ccosf32 F +GLIBC_2.35 ccosf32x F +GLIBC_2.35 ccosf64 F +GLIBC_2.35 ccosh F +GLIBC_2.35 ccoshf F +GLIBC_2.35 ccoshf32 F +GLIBC_2.35 ccoshf32x F +GLIBC_2.35 ccoshf64 F +GLIBC_2.35 ccoshl F +GLIBC_2.35 ccosl F +GLIBC_2.35 ceil F +GLIBC_2.35 ceilf F +GLIBC_2.35 ceilf32 F +GLIBC_2.35 ceilf32x F +GLIBC_2.35 ceilf64 F +GLIBC_2.35 ceill F +GLIBC_2.35 cexp F +GLIBC_2.35 cexpf F +GLIBC_2.35 cexpf32 F +GLIBC_2.35 cexpf32x F +GLIBC_2.35 cexpf64 F +GLIBC_2.35 cexpl F +GLIBC_2.35 cimag F +GLIBC_2.35 cimagf F +GLIBC_2.35 cimagf32 F +GLIBC_2.35 cimagf32x F +GLIBC_2.35 cimagf64 F +GLIBC_2.35 cimagl F +GLIBC_2.35 clog F +GLIBC_2.35 clog10 F +GLIBC_2.35 clog10f F +GLIBC_2.35 clog10f32 F +GLIBC_2.35 clog10f32x F +GLIBC_2.35 clog10f64 F +GLIBC_2.35 clog10l F +GLIBC_2.35 clogf F +GLIBC_2.35 clogf32 F +GLIBC_2.35 clogf32x F +GLIBC_2.35 clogf64 F +GLIBC_2.35 clogl F +GLIBC_2.35 conj F +GLIBC_2.35 conjf F +GLIBC_2.35 conjf32 F +GLIBC_2.35 conjf32x F +GLIBC_2.35 conjf64 F +GLIBC_2.35 conjl F +GLIBC_2.35 copysign F +GLIBC_2.35 copysignf F +GLIBC_2.35 copysignf32 F +GLIBC_2.35 copysignf32x F +GLIBC_2.35 copysignf64 F +GLIBC_2.35 copysignl F +GLIBC_2.35 cos F +GLIBC_2.35 cosf F +GLIBC_2.35 cosf32 F +GLIBC_2.35 cosf32x F +GLIBC_2.35 cosf64 F +GLIBC_2.35 cosh F +GLIBC_2.35 coshf F +GLIBC_2.35 coshf32 F +GLIBC_2.35 coshf32x F +GLIBC_2.35 coshf64 F +GLIBC_2.35 coshl F +GLIBC_2.35 cosl F +GLIBC_2.35 cpow F +GLIBC_2.35 cpowf F +GLIBC_2.35 cpowf32 F +GLIBC_2.35 cpowf32x F +GLIBC_2.35 cpowf64 F +GLIBC_2.35 cpowl F +GLIBC_2.35 cproj F +GLIBC_2.35 cprojf F +GLIBC_2.35 cprojf32 F +GLIBC_2.35 cprojf32x F +GLIBC_2.35 cprojf64 F +GLIBC_2.35 cprojl F +GLIBC_2.35 creal F +GLIBC_2.35 crealf F +GLIBC_2.35 crealf32 F +GLIBC_2.35 crealf32x F +GLIBC_2.35 crealf64 F +GLIBC_2.35 creall F +GLIBC_2.35 csin F +GLIBC_2.35 csinf F +GLIBC_2.35 csinf32 F +GLIBC_2.35 csinf32x F +GLIBC_2.35 csinf64 F +GLIBC_2.35 csinh F +GLIBC_2.35 csinhf F +GLIBC_2.35 csinhf32 F +GLIBC_2.35 csinhf32x F +GLIBC_2.35 csinhf64 F +GLIBC_2.35 csinhl F +GLIBC_2.35 csinl F +GLIBC_2.35 csqrt F +GLIBC_2.35 csqrtf F +GLIBC_2.35 csqrtf32 F +GLIBC_2.35 csqrtf32x F +GLIBC_2.35 csqrtf64 F +GLIBC_2.35 csqrtl F +GLIBC_2.35 ctan F +GLIBC_2.35 ctanf F +GLIBC_2.35 ctanf32 F +GLIBC_2.35 ctanf32x F +GLIBC_2.35 ctanf64 F +GLIBC_2.35 ctanh F +GLIBC_2.35 ctanhf F +GLIBC_2.35 ctanhf32 F +GLIBC_2.35 ctanhf32x F +GLIBC_2.35 ctanhf64 F +GLIBC_2.35 ctanhl F +GLIBC_2.35 ctanl F +GLIBC_2.35 daddl F +GLIBC_2.35 ddivl F +GLIBC_2.35 dfmal F +GLIBC_2.35 dmull F +GLIBC_2.35 drem F +GLIBC_2.35 dremf F +GLIBC_2.35 dreml F +GLIBC_2.35 dsqrtl F +GLIBC_2.35 dsubl F +GLIBC_2.35 erf F +GLIBC_2.35 erfc F +GLIBC_2.35 erfcf F +GLIBC_2.35 erfcf32 F +GLIBC_2.35 erfcf32x F +GLIBC_2.35 erfcf64 F +GLIBC_2.35 erfcl F +GLIBC_2.35 erff F +GLIBC_2.35 erff32 F +GLIBC_2.35 erff32x F +GLIBC_2.35 erff64 F +GLIBC_2.35 erfl F +GLIBC_2.35 exp F +GLIBC_2.35 exp10 F +GLIBC_2.35 exp10f F +GLIBC_2.35 exp10f32 F +GLIBC_2.35 exp10f32x F +GLIBC_2.35 exp10f64 F +GLIBC_2.35 exp10l F +GLIBC_2.35 exp2 F +GLIBC_2.35 exp2f F +GLIBC_2.35 exp2f32 F +GLIBC_2.35 exp2f32x F +GLIBC_2.35 exp2f64 F +GLIBC_2.35 exp2l F +GLIBC_2.35 expf F +GLIBC_2.35 expf32 F +GLIBC_2.35 expf32x F +GLIBC_2.35 expf64 F +GLIBC_2.35 expl F +GLIBC_2.35 expm1 F +GLIBC_2.35 expm1f F +GLIBC_2.35 expm1f32 F +GLIBC_2.35 expm1f32x F +GLIBC_2.35 expm1f64 F +GLIBC_2.35 expm1l F +GLIBC_2.35 f32addf32x F +GLIBC_2.35 f32addf64 F +GLIBC_2.35 f32divf32x F +GLIBC_2.35 f32divf64 F +GLIBC_2.35 f32fmaf32x F +GLIBC_2.35 f32fmaf64 F +GLIBC_2.35 f32mulf32x F +GLIBC_2.35 f32mulf64 F +GLIBC_2.35 f32sqrtf32x F +GLIBC_2.35 f32sqrtf64 F +GLIBC_2.35 f32subf32x F +GLIBC_2.35 f32subf64 F +GLIBC_2.35 f32xaddf64 F +GLIBC_2.35 f32xdivf64 F +GLIBC_2.35 f32xfmaf64 F +GLIBC_2.35 f32xmulf64 F +GLIBC_2.35 f32xsqrtf64 F +GLIBC_2.35 f32xsubf64 F +GLIBC_2.35 fabs F +GLIBC_2.35 fabsf F +GLIBC_2.35 fabsf32 F +GLIBC_2.35 fabsf32x F +GLIBC_2.35 fabsf64 F +GLIBC_2.35 fabsl F +GLIBC_2.35 fadd F +GLIBC_2.35 faddl F +GLIBC_2.35 fdim F +GLIBC_2.35 fdimf F +GLIBC_2.35 fdimf32 F +GLIBC_2.35 fdimf32x F +GLIBC_2.35 fdimf64 F +GLIBC_2.35 fdiml F +GLIBC_2.35 fdiv F +GLIBC_2.35 fdivl F +GLIBC_2.35 feclearexcept F +GLIBC_2.35 fedisableexcept F +GLIBC_2.35 feenableexcept F +GLIBC_2.35 fegetenv F +GLIBC_2.35 fegetexcept F +GLIBC_2.35 fegetexceptflag F +GLIBC_2.35 fegetmode F +GLIBC_2.35 fegetround F +GLIBC_2.35 feholdexcept F +GLIBC_2.35 feraiseexcept F +GLIBC_2.35 fesetenv F +GLIBC_2.35 fesetexcept F +GLIBC_2.35 fesetexceptflag F +GLIBC_2.35 fesetmode F +GLIBC_2.35 fesetround F +GLIBC_2.35 fetestexcept F +GLIBC_2.35 fetestexceptflag F +GLIBC_2.35 feupdateenv F +GLIBC_2.35 ffma F +GLIBC_2.35 ffmal F +GLIBC_2.35 finite F +GLIBC_2.35 finitef F +GLIBC_2.35 finitel F +GLIBC_2.35 floor F +GLIBC_2.35 floorf F +GLIBC_2.35 floorf32 F +GLIBC_2.35 floorf32x F +GLIBC_2.35 floorf64 F +GLIBC_2.35 floorl F +GLIBC_2.35 fma F +GLIBC_2.35 fmaf F +GLIBC_2.35 fmaf32 F +GLIBC_2.35 fmaf32x F +GLIBC_2.35 fmaf64 F +GLIBC_2.35 fmal F +GLIBC_2.35 fmax F +GLIBC_2.35 fmaxf F +GLIBC_2.35 fmaxf32 F +GLIBC_2.35 fmaxf32x F +GLIBC_2.35 fmaxf64 F +GLIBC_2.35 fmaximum F +GLIBC_2.35 fmaximum_mag F +GLIBC_2.35 fmaximum_mag_num F +GLIBC_2.35 fmaximum_mag_numf F +GLIBC_2.35 fmaximum_mag_numf32 F +GLIBC_2.35 fmaximum_mag_numf32x F +GLIBC_2.35 fmaximum_mag_numf64 F +GLIBC_2.35 fmaximum_mag_numl F +GLIBC_2.35 fmaximum_magf F +GLIBC_2.35 fmaximum_magf32 F +GLIBC_2.35 fmaximum_magf32x F +GLIBC_2.35 fmaximum_magf64 F +GLIBC_2.35 fmaximum_magl F +GLIBC_2.35 fmaximum_num F +GLIBC_2.35 fmaximum_numf F +GLIBC_2.35 fmaximum_numf32 F +GLIBC_2.35 fmaximum_numf32x F +GLIBC_2.35 fmaximum_numf64 F +GLIBC_2.35 fmaximum_numl F +GLIBC_2.35 fmaximumf F +GLIBC_2.35 fmaximumf32 F +GLIBC_2.35 fmaximumf32x F +GLIBC_2.35 fmaximumf64 F +GLIBC_2.35 fmaximuml F +GLIBC_2.35 fmaxl F +GLIBC_2.35 fmaxmag F +GLIBC_2.35 fmaxmagf F +GLIBC_2.35 fmaxmagf32 F +GLIBC_2.35 fmaxmagf32x F +GLIBC_2.35 fmaxmagf64 F +GLIBC_2.35 fmaxmagl F +GLIBC_2.35 fmin F +GLIBC_2.35 fminf F +GLIBC_2.35 fminf32 F +GLIBC_2.35 fminf32x F +GLIBC_2.35 fminf64 F +GLIBC_2.35 fminimum F +GLIBC_2.35 fminimum_mag F +GLIBC_2.35 fminimum_mag_num F +GLIBC_2.35 fminimum_mag_numf F +GLIBC_2.35 fminimum_mag_numf32 F +GLIBC_2.35 fminimum_mag_numf32x F +GLIBC_2.35 fminimum_mag_numf64 F +GLIBC_2.35 fminimum_mag_numl F +GLIBC_2.35 fminimum_magf F +GLIBC_2.35 fminimum_magf32 F +GLIBC_2.35 fminimum_magf32x F +GLIBC_2.35 fminimum_magf64 F +GLIBC_2.35 fminimum_magl F +GLIBC_2.35 fminimum_num F +GLIBC_2.35 fminimum_numf F +GLIBC_2.35 fminimum_numf32 F +GLIBC_2.35 fminimum_numf32x F +GLIBC_2.35 fminimum_numf64 F +GLIBC_2.35 fminimum_numl F +GLIBC_2.35 fminimumf F +GLIBC_2.35 fminimumf32 F +GLIBC_2.35 fminimumf32x F +GLIBC_2.35 fminimumf64 F +GLIBC_2.35 fminimuml F +GLIBC_2.35 fminl F +GLIBC_2.35 fminmag F +GLIBC_2.35 fminmagf F +GLIBC_2.35 fminmagf32 F +GLIBC_2.35 fminmagf32x F +GLIBC_2.35 fminmagf64 F +GLIBC_2.35 fminmagl F +GLIBC_2.35 fmod F +GLIBC_2.35 fmodf F +GLIBC_2.35 fmodf32 F +GLIBC_2.35 fmodf32x F +GLIBC_2.35 fmodf64 F +GLIBC_2.35 fmodl F +GLIBC_2.35 fmul F +GLIBC_2.35 fmull F +GLIBC_2.35 frexp F +GLIBC_2.35 frexpf F +GLIBC_2.35 frexpf32 F +GLIBC_2.35 frexpf32x F +GLIBC_2.35 frexpf64 F +GLIBC_2.35 frexpl F +GLIBC_2.35 fromfp F +GLIBC_2.35 fromfpf F +GLIBC_2.35 fromfpf32 F +GLIBC_2.35 fromfpf32x F +GLIBC_2.35 fromfpf64 F +GLIBC_2.35 fromfpl F +GLIBC_2.35 fromfpx F +GLIBC_2.35 fromfpxf F +GLIBC_2.35 fromfpxf32 F +GLIBC_2.35 fromfpxf32x F +GLIBC_2.35 fromfpxf64 F +GLIBC_2.35 fromfpxl F +GLIBC_2.35 fsqrt F +GLIBC_2.35 fsqrtl F +GLIBC_2.35 fsub F +GLIBC_2.35 fsubl F +GLIBC_2.35 gamma F +GLIBC_2.35 gammaf F +GLIBC_2.35 gammal F +GLIBC_2.35 getpayload F +GLIBC_2.35 getpayloadf F +GLIBC_2.35 getpayloadf32 F +GLIBC_2.35 getpayloadf32x F +GLIBC_2.35 getpayloadf64 F +GLIBC_2.35 getpayloadl F +GLIBC_2.35 hypot F +GLIBC_2.35 hypotf F +GLIBC_2.35 hypotf32 F +GLIBC_2.35 hypotf32x F +GLIBC_2.35 hypotf64 F +GLIBC_2.35 hypotl F +GLIBC_2.35 ilogb F +GLIBC_2.35 ilogbf F +GLIBC_2.35 ilogbf32 F +GLIBC_2.35 ilogbf32x F +GLIBC_2.35 ilogbf64 F +GLIBC_2.35 ilogbl F +GLIBC_2.35 j0 F +GLIBC_2.35 j0f F +GLIBC_2.35 j0f32 F +GLIBC_2.35 j0f32x F +GLIBC_2.35 j0f64 F +GLIBC_2.35 j0l F +GLIBC_2.35 j1 F +GLIBC_2.35 j1f F +GLIBC_2.35 j1f32 F +GLIBC_2.35 j1f32x F +GLIBC_2.35 j1f64 F +GLIBC_2.35 j1l F +GLIBC_2.35 jn F +GLIBC_2.35 jnf F +GLIBC_2.35 jnf32 F +GLIBC_2.35 jnf32x F +GLIBC_2.35 jnf64 F +GLIBC_2.35 jnl F +GLIBC_2.35 ldexp F +GLIBC_2.35 ldexpf F +GLIBC_2.35 ldexpf32 F +GLIBC_2.35 ldexpf32x F +GLIBC_2.35 ldexpf64 F +GLIBC_2.35 ldexpl F +GLIBC_2.35 lgamma F +GLIBC_2.35 lgamma_r F +GLIBC_2.35 lgammaf F +GLIBC_2.35 lgammaf32 F +GLIBC_2.35 lgammaf32_r F +GLIBC_2.35 lgammaf32x F +GLIBC_2.35 lgammaf32x_r F +GLIBC_2.35 lgammaf64 F +GLIBC_2.35 lgammaf64_r F +GLIBC_2.35 lgammaf_r F +GLIBC_2.35 lgammal F +GLIBC_2.35 lgammal_r F +GLIBC_2.35 llogb F +GLIBC_2.35 llogbf F +GLIBC_2.35 llogbf32 F +GLIBC_2.35 llogbf32x F +GLIBC_2.35 llogbf64 F +GLIBC_2.35 llogbl F +GLIBC_2.35 llrint F +GLIBC_2.35 llrintf F +GLIBC_2.35 llrintf32 F +GLIBC_2.35 llrintf32x F +GLIBC_2.35 llrintf64 F +GLIBC_2.35 llrintl F +GLIBC_2.35 llround F +GLIBC_2.35 llroundf F +GLIBC_2.35 llroundf32 F +GLIBC_2.35 llroundf32x F +GLIBC_2.35 llroundf64 F +GLIBC_2.35 llroundl F +GLIBC_2.35 log F +GLIBC_2.35 log10 F +GLIBC_2.35 log10f F +GLIBC_2.35 log10f32 F +GLIBC_2.35 log10f32x F +GLIBC_2.35 log10f64 F +GLIBC_2.35 log10l F +GLIBC_2.35 log1p F +GLIBC_2.35 log1pf F +GLIBC_2.35 log1pf32 F +GLIBC_2.35 log1pf32x F +GLIBC_2.35 log1pf64 F +GLIBC_2.35 log1pl F +GLIBC_2.35 log2 F +GLIBC_2.35 log2f F +GLIBC_2.35 log2f32 F +GLIBC_2.35 log2f32x F +GLIBC_2.35 log2f64 F +GLIBC_2.35 log2l F +GLIBC_2.35 logb F +GLIBC_2.35 logbf F +GLIBC_2.35 logbf32 F +GLIBC_2.35 logbf32x F +GLIBC_2.35 logbf64 F +GLIBC_2.35 logbl F +GLIBC_2.35 logf F +GLIBC_2.35 logf32 F +GLIBC_2.35 logf32x F +GLIBC_2.35 logf64 F +GLIBC_2.35 logl F +GLIBC_2.35 lrint F +GLIBC_2.35 lrintf F +GLIBC_2.35 lrintf32 F +GLIBC_2.35 lrintf32x F +GLIBC_2.35 lrintf64 F +GLIBC_2.35 lrintl F +GLIBC_2.35 lround F +GLIBC_2.35 lroundf F +GLIBC_2.35 lroundf32 F +GLIBC_2.35 lroundf32x F +GLIBC_2.35 lroundf64 F +GLIBC_2.35 lroundl F +GLIBC_2.35 modf F +GLIBC_2.35 modff F +GLIBC_2.35 modff32 F +GLIBC_2.35 modff32x F +GLIBC_2.35 modff64 F +GLIBC_2.35 modfl F +GLIBC_2.35 nan F +GLIBC_2.35 nanf F +GLIBC_2.35 nanf32 F +GLIBC_2.35 nanf32x F +GLIBC_2.35 nanf64 F +GLIBC_2.35 nanl F +GLIBC_2.35 nearbyint F +GLIBC_2.35 nearbyintf F +GLIBC_2.35 nearbyintf32 F +GLIBC_2.35 nearbyintf32x F +GLIBC_2.35 nearbyintf64 F +GLIBC_2.35 nearbyintl F +GLIBC_2.35 nextafter F +GLIBC_2.35 nextafterf F +GLIBC_2.35 nextafterf32 F +GLIBC_2.35 nextafterf32x F +GLIBC_2.35 nextafterf64 F +GLIBC_2.35 nextafterl F +GLIBC_2.35 nextdown F +GLIBC_2.35 nextdownf F +GLIBC_2.35 nextdownf32 F +GLIBC_2.35 nextdownf32x F +GLIBC_2.35 nextdownf64 F +GLIBC_2.35 nextdownl F +GLIBC_2.35 nexttoward F +GLIBC_2.35 nexttowardf F +GLIBC_2.35 nexttowardl F +GLIBC_2.35 nextup F +GLIBC_2.35 nextupf F +GLIBC_2.35 nextupf32 F +GLIBC_2.35 nextupf32x F +GLIBC_2.35 nextupf64 F +GLIBC_2.35 nextupl F +GLIBC_2.35 pow F +GLIBC_2.35 powf F +GLIBC_2.35 powf32 F +GLIBC_2.35 powf32x F +GLIBC_2.35 powf64 F +GLIBC_2.35 powl F +GLIBC_2.35 remainder F +GLIBC_2.35 remainderf F +GLIBC_2.35 remainderf32 F +GLIBC_2.35 remainderf32x F +GLIBC_2.35 remainderf64 F +GLIBC_2.35 remainderl F +GLIBC_2.35 remquo F +GLIBC_2.35 remquof F +GLIBC_2.35 remquof32 F +GLIBC_2.35 remquof32x F +GLIBC_2.35 remquof64 F +GLIBC_2.35 remquol F +GLIBC_2.35 rint F +GLIBC_2.35 rintf F +GLIBC_2.35 rintf32 F +GLIBC_2.35 rintf32x F +GLIBC_2.35 rintf64 F +GLIBC_2.35 rintl F +GLIBC_2.35 round F +GLIBC_2.35 roundeven F +GLIBC_2.35 roundevenf F +GLIBC_2.35 roundevenf32 F +GLIBC_2.35 roundevenf32x F +GLIBC_2.35 roundevenf64 F +GLIBC_2.35 roundevenl F +GLIBC_2.35 roundf F +GLIBC_2.35 roundf32 F +GLIBC_2.35 roundf32x F +GLIBC_2.35 roundf64 F +GLIBC_2.35 roundl F +GLIBC_2.35 scalb F +GLIBC_2.35 scalbf F +GLIBC_2.35 scalbl F +GLIBC_2.35 scalbln F +GLIBC_2.35 scalblnf F +GLIBC_2.35 scalblnf32 F +GLIBC_2.35 scalblnf32x F +GLIBC_2.35 scalblnf64 F +GLIBC_2.35 scalblnl F +GLIBC_2.35 scalbn F +GLIBC_2.35 scalbnf F +GLIBC_2.35 scalbnf32 F +GLIBC_2.35 scalbnf32x F +GLIBC_2.35 scalbnf64 F +GLIBC_2.35 scalbnl F +GLIBC_2.35 setpayload F +GLIBC_2.35 setpayloadf F +GLIBC_2.35 setpayloadf32 F +GLIBC_2.35 setpayloadf32x F +GLIBC_2.35 setpayloadf64 F +GLIBC_2.35 setpayloadl F +GLIBC_2.35 setpayloadsig F +GLIBC_2.35 setpayloadsigf F +GLIBC_2.35 setpayloadsigf32 F +GLIBC_2.35 setpayloadsigf32x F +GLIBC_2.35 setpayloadsigf64 F +GLIBC_2.35 setpayloadsigl F +GLIBC_2.35 signgam D 0x4 +GLIBC_2.35 significand F +GLIBC_2.35 significandf F +GLIBC_2.35 significandl F +GLIBC_2.35 sin F +GLIBC_2.35 sincos F +GLIBC_2.35 sincosf F +GLIBC_2.35 sincosf32 F +GLIBC_2.35 sincosf32x F +GLIBC_2.35 sincosf64 F +GLIBC_2.35 sincosl F +GLIBC_2.35 sinf F +GLIBC_2.35 sinf32 F +GLIBC_2.35 sinf32x F +GLIBC_2.35 sinf64 F +GLIBC_2.35 sinh F +GLIBC_2.35 sinhf F +GLIBC_2.35 sinhf32 F +GLIBC_2.35 sinhf32x F +GLIBC_2.35 sinhf64 F +GLIBC_2.35 sinhl F +GLIBC_2.35 sinl F +GLIBC_2.35 sqrt F +GLIBC_2.35 sqrtf F +GLIBC_2.35 sqrtf32 F +GLIBC_2.35 sqrtf32x F +GLIBC_2.35 sqrtf64 F +GLIBC_2.35 sqrtl F +GLIBC_2.35 tan F +GLIBC_2.35 tanf F +GLIBC_2.35 tanf32 F +GLIBC_2.35 tanf32x F +GLIBC_2.35 tanf64 F +GLIBC_2.35 tanh F +GLIBC_2.35 tanhf F +GLIBC_2.35 tanhf32 F +GLIBC_2.35 tanhf32x F +GLIBC_2.35 tanhf64 F +GLIBC_2.35 tanhl F +GLIBC_2.35 tanl F +GLIBC_2.35 tgamma F +GLIBC_2.35 tgammaf F +GLIBC_2.35 tgammaf32 F +GLIBC_2.35 tgammaf32x F +GLIBC_2.35 tgammaf64 F +GLIBC_2.35 tgammal F +GLIBC_2.35 totalorder F +GLIBC_2.35 totalorderf F +GLIBC_2.35 totalorderf32 F +GLIBC_2.35 totalorderf32x F +GLIBC_2.35 totalorderf64 F +GLIBC_2.35 totalorderl F +GLIBC_2.35 totalordermag F +GLIBC_2.35 totalordermagf F +GLIBC_2.35 totalordermagf32 F +GLIBC_2.35 totalordermagf32x F +GLIBC_2.35 totalordermagf64 F +GLIBC_2.35 totalordermagl F +GLIBC_2.35 trunc F +GLIBC_2.35 truncf F +GLIBC_2.35 truncf32 F +GLIBC_2.35 truncf32x F +GLIBC_2.35 truncf64 F +GLIBC_2.35 truncl F +GLIBC_2.35 ufromfp F +GLIBC_2.35 ufromfpf F +GLIBC_2.35 ufromfpf32 F +GLIBC_2.35 ufromfpf32x F +GLIBC_2.35 ufromfpf64 F +GLIBC_2.35 ufromfpl F +GLIBC_2.35 ufromfpx F +GLIBC_2.35 ufromfpxf F +GLIBC_2.35 ufromfpxf32 F +GLIBC_2.35 ufromfpxf32x F +GLIBC_2.35 ufromfpxf64 F +GLIBC_2.35 ufromfpxl F +GLIBC_2.35 y0 F +GLIBC_2.35 y0f F +GLIBC_2.35 y0f32 F +GLIBC_2.35 y0f32x F +GLIBC_2.35 y0f64 F +GLIBC_2.35 y0l F +GLIBC_2.35 y1 F +GLIBC_2.35 y1f F +GLIBC_2.35 y1f32 F +GLIBC_2.35 y1f32x F +GLIBC_2.35 y1f64 F +GLIBC_2.35 y1l F +GLIBC_2.35 yn F +GLIBC_2.35 ynf F +GLIBC_2.35 ynf32 F +GLIBC_2.35 ynf32x F +GLIBC_2.35 ynf64 F +GLIBC_2.35 ynl F diff --git a/sysdeps/unix/sysv/linux/or1k/libnsl.abilist b/sysdeps/unix/sysv/linux/or1k/libnsl.abilist new file mode 100644 index 0000000000..5592653177 --- /dev/null +++ b/sysdeps/unix/sysv/linux/or1k/libnsl.abilist @@ -0,0 +1,121 @@ +GLIBC_2.35 __free_fdresult F +GLIBC_2.35 __nis_default_access F +GLIBC_2.35 __nis_default_group F +GLIBC_2.35 __nis_default_owner F +GLIBC_2.35 __nis_default_ttl F +GLIBC_2.35 __nis_finddirectory F +GLIBC_2.35 __nis_hash F +GLIBC_2.35 __nisbind_connect F +GLIBC_2.35 __nisbind_create F +GLIBC_2.35 __nisbind_destroy F +GLIBC_2.35 __nisbind_next F +GLIBC_2.35 __yp_check F +GLIBC_2.35 nis_add F +GLIBC_2.35 nis_add_entry F +GLIBC_2.35 nis_addmember F +GLIBC_2.35 nis_checkpoint F +GLIBC_2.35 nis_clone_directory F +GLIBC_2.35 nis_clone_object F +GLIBC_2.35 nis_clone_result F +GLIBC_2.35 nis_creategroup F +GLIBC_2.35 nis_destroy_object F +GLIBC_2.35 nis_destroygroup F +GLIBC_2.35 nis_dir_cmp F +GLIBC_2.35 nis_domain_of F +GLIBC_2.35 nis_domain_of_r F +GLIBC_2.35 nis_first_entry F +GLIBC_2.35 nis_free_directory F +GLIBC_2.35 nis_free_object F +GLIBC_2.35 nis_free_request F +GLIBC_2.35 nis_freenames F +GLIBC_2.35 nis_freeresult F +GLIBC_2.35 nis_freeservlist F +GLIBC_2.35 nis_freetags F +GLIBC_2.35 nis_getnames F +GLIBC_2.35 nis_getservlist F +GLIBC_2.35 nis_ismember F +GLIBC_2.35 nis_leaf_of F +GLIBC_2.35 nis_leaf_of_r F +GLIBC_2.35 nis_lerror F +GLIBC_2.35 nis_list F +GLIBC_2.35 nis_local_directory F +GLIBC_2.35 nis_local_group F +GLIBC_2.35 nis_local_host F +GLIBC_2.35 nis_local_principal F +GLIBC_2.35 nis_lookup F +GLIBC_2.35 nis_mkdir F +GLIBC_2.35 nis_modify F +GLIBC_2.35 nis_modify_entry F +GLIBC_2.35 nis_name_of F +GLIBC_2.35 nis_name_of_r F +GLIBC_2.35 nis_next_entry F +GLIBC_2.35 nis_perror F +GLIBC_2.35 nis_ping F +GLIBC_2.35 nis_print_directory F +GLIBC_2.35 nis_print_entry F +GLIBC_2.35 nis_print_group F +GLIBC_2.35 nis_print_group_entry F +GLIBC_2.35 nis_print_link F +GLIBC_2.35 nis_print_object F +GLIBC_2.35 nis_print_result F +GLIBC_2.35 nis_print_rights F +GLIBC_2.35 nis_print_table F +GLIBC_2.35 nis_read_obj F +GLIBC_2.35 nis_remove F +GLIBC_2.35 nis_remove_entry F +GLIBC_2.35 nis_removemember F +GLIBC_2.35 nis_rmdir F +GLIBC_2.35 nis_servstate F +GLIBC_2.35 nis_sperrno F +GLIBC_2.35 nis_sperror F +GLIBC_2.35 nis_sperror_r F +GLIBC_2.35 nis_stats F +GLIBC_2.35 nis_verifygroup F +GLIBC_2.35 nis_write_obj F +GLIBC_2.35 readColdStartFile F +GLIBC_2.35 writeColdStartFile F +GLIBC_2.35 xdr_cback_data F +GLIBC_2.35 xdr_domainname F +GLIBC_2.35 xdr_keydat F +GLIBC_2.35 xdr_mapname F +GLIBC_2.35 xdr_obj_p F +GLIBC_2.35 xdr_peername F +GLIBC_2.35 xdr_valdat F +GLIBC_2.35 xdr_yp_buf F +GLIBC_2.35 xdr_ypall F +GLIBC_2.35 xdr_ypbind_binding F +GLIBC_2.35 xdr_ypbind_resp F +GLIBC_2.35 xdr_ypbind_resptype F +GLIBC_2.35 xdr_ypbind_setdom F +GLIBC_2.35 xdr_ypdelete_args F +GLIBC_2.35 xdr_ypmap_parms F +GLIBC_2.35 xdr_ypmaplist F +GLIBC_2.35 xdr_yppush_status F +GLIBC_2.35 xdr_yppushresp_xfr F +GLIBC_2.35 xdr_ypreq_key F +GLIBC_2.35 xdr_ypreq_nokey F +GLIBC_2.35 xdr_ypreq_xfr F +GLIBC_2.35 xdr_ypresp_all F +GLIBC_2.35 xdr_ypresp_key_val F +GLIBC_2.35 xdr_ypresp_maplist F +GLIBC_2.35 xdr_ypresp_master F +GLIBC_2.35 xdr_ypresp_order F +GLIBC_2.35 xdr_ypresp_val F +GLIBC_2.35 xdr_ypresp_xfr F +GLIBC_2.35 xdr_ypstat F +GLIBC_2.35 xdr_ypupdate_args F +GLIBC_2.35 xdr_ypxfrstat F +GLIBC_2.35 yp_all F +GLIBC_2.35 yp_bind F +GLIBC_2.35 yp_first F +GLIBC_2.35 yp_get_default_domain F +GLIBC_2.35 yp_maplist F +GLIBC_2.35 yp_master F +GLIBC_2.35 yp_match F +GLIBC_2.35 yp_next F +GLIBC_2.35 yp_order F +GLIBC_2.35 yp_unbind F +GLIBC_2.35 yp_update F +GLIBC_2.35 ypbinderr_string F +GLIBC_2.35 yperr_string F +GLIBC_2.35 ypprot_err F diff --git a/sysdeps/unix/sysv/linux/or1k/libpthread.abilist b/sysdeps/unix/sysv/linux/or1k/libpthread.abilist new file mode 100644 index 0000000000..e69de29bb2 diff --git a/sysdeps/unix/sysv/linux/or1k/libresolv.abilist b/sysdeps/unix/sysv/linux/or1k/libresolv.abilist new file mode 100644 index 0000000000..bfeb1f27e0 --- /dev/null +++ b/sysdeps/unix/sysv/linux/or1k/libresolv.abilist @@ -0,0 +1,55 @@ +GLIBC_2.35 __b64_ntop F +GLIBC_2.35 __b64_pton F +GLIBC_2.35 __dn_count_labels F +GLIBC_2.35 __fp_nquery F +GLIBC_2.35 __fp_query F +GLIBC_2.35 __fp_resstat F +GLIBC_2.35 __hostalias F +GLIBC_2.35 __loc_aton F +GLIBC_2.35 __loc_ntoa F +GLIBC_2.35 __p_cdname F +GLIBC_2.35 __p_cdnname F +GLIBC_2.35 __p_class F +GLIBC_2.35 __p_class_syms D 0x54 +GLIBC_2.35 __p_fqname F +GLIBC_2.35 __p_fqnname F +GLIBC_2.35 __p_option F +GLIBC_2.35 __p_query F +GLIBC_2.35 __p_rcode F +GLIBC_2.35 __p_time F +GLIBC_2.35 __p_type F +GLIBC_2.35 __p_type_syms D 0x228 +GLIBC_2.35 __putlong F +GLIBC_2.35 __putshort F +GLIBC_2.35 __res_close F +GLIBC_2.35 __res_hostalias F +GLIBC_2.35 __res_isourserver F +GLIBC_2.35 __res_nameinquery F +GLIBC_2.35 __res_queriesmatch F +GLIBC_2.35 __sym_ntop F +GLIBC_2.35 __sym_ntos F +GLIBC_2.35 __sym_ston F +GLIBC_2.35 _getlong F +GLIBC_2.35 _getshort F +GLIBC_2.35 inet_net_ntop F +GLIBC_2.35 inet_net_pton F +GLIBC_2.35 inet_neta F +GLIBC_2.35 ns_datetosecs F +GLIBC_2.35 ns_format_ttl F +GLIBC_2.35 ns_get16 F +GLIBC_2.35 ns_get32 F +GLIBC_2.35 ns_initparse F +GLIBC_2.35 ns_makecanon F +GLIBC_2.35 ns_msg_getflag F +GLIBC_2.35 ns_name_ntol F +GLIBC_2.35 ns_name_rollback F +GLIBC_2.35 ns_parse_ttl F +GLIBC_2.35 ns_parserr F +GLIBC_2.35 ns_put16 F +GLIBC_2.35 ns_put32 F +GLIBC_2.35 ns_samedomain F +GLIBC_2.35 ns_samename F +GLIBC_2.35 ns_skiprr F +GLIBC_2.35 ns_sprintrr F +GLIBC_2.35 ns_sprintrrf F +GLIBC_2.35 ns_subdomain F diff --git a/sysdeps/unix/sysv/linux/or1k/librt.abilist b/sysdeps/unix/sysv/linux/or1k/librt.abilist new file mode 100644 index 0000000000..e69de29bb2 diff --git a/sysdeps/unix/sysv/linux/or1k/libthread_db.abilist b/sysdeps/unix/sysv/linux/or1k/libthread_db.abilist new file mode 100644 index 0000000000..9607e70c16 --- /dev/null +++ b/sysdeps/unix/sysv/linux/or1k/libthread_db.abilist @@ -0,0 +1,40 @@ +GLIBC_2.35 td_init F +GLIBC_2.35 td_log F +GLIBC_2.35 td_symbol_list F +GLIBC_2.35 td_ta_clear_event F +GLIBC_2.35 td_ta_delete F +GLIBC_2.35 td_ta_enable_stats F +GLIBC_2.35 td_ta_event_addr F +GLIBC_2.35 td_ta_event_getmsg F +GLIBC_2.35 td_ta_get_nthreads F +GLIBC_2.35 td_ta_get_ph F +GLIBC_2.35 td_ta_get_stats F +GLIBC_2.35 td_ta_map_id2thr F +GLIBC_2.35 td_ta_map_lwp2thr F +GLIBC_2.35 td_ta_new F +GLIBC_2.35 td_ta_reset_stats F +GLIBC_2.35 td_ta_set_event F +GLIBC_2.35 td_ta_setconcurrency F +GLIBC_2.35 td_ta_thr_iter F +GLIBC_2.35 td_ta_tsd_iter F +GLIBC_2.35 td_thr_clear_event F +GLIBC_2.35 td_thr_dbresume F +GLIBC_2.35 td_thr_dbsuspend F +GLIBC_2.35 td_thr_event_enable F +GLIBC_2.35 td_thr_event_getmsg F +GLIBC_2.35 td_thr_get_info F +GLIBC_2.35 td_thr_getfpregs F +GLIBC_2.35 td_thr_getgregs F +GLIBC_2.35 td_thr_getxregs F +GLIBC_2.35 td_thr_getxregsize F +GLIBC_2.35 td_thr_set_event F +GLIBC_2.35 td_thr_setfpregs F +GLIBC_2.35 td_thr_setgregs F +GLIBC_2.35 td_thr_setprio F +GLIBC_2.35 td_thr_setsigpending F +GLIBC_2.35 td_thr_setxregs F +GLIBC_2.35 td_thr_sigsetmask F +GLIBC_2.35 td_thr_tls_get_addr F +GLIBC_2.35 td_thr_tlsbase F +GLIBC_2.35 td_thr_tsd F +GLIBC_2.35 td_thr_validate F diff --git a/sysdeps/unix/sysv/linux/or1k/libutil.abilist b/sysdeps/unix/sysv/linux/or1k/libutil.abilist new file mode 100644 index 0000000000..f33b84813b --- /dev/null +++ b/sysdeps/unix/sysv/linux/or1k/libutil.abilist @@ -0,0 +1 @@ +GLIBC_2.35 __libutil_version_placeholder F diff --git a/sysdeps/unix/sysv/linux/or1k/localplt.data b/sysdeps/unix/sysv/linux/or1k/localplt.data new file mode 100644 index 0000000000..04eb9fc8dc --- /dev/null +++ b/sysdeps/unix/sysv/linux/or1k/localplt.data @@ -0,0 +1,14 @@ +# See scripts/check-localplt.awk for how this file is processed. +# PLT use is required for the malloc family and for matherr because +# users can define their own functions and have library internals call them. +libc.so: calloc +libc.so: free +libc.so: malloc +libc.so: realloc +# Generated by the compiler because there is no trap insn pattern. +libc.so: abort ? +# The TLS-enabled version of these functions is interposed from libc.so. +ld.so: _dl_signal_error +ld.so: _dl_catch_error +ld.so: _dl_signal_exception +ld.so: _dl_catch_exception From patchwork Fri Dec 10 23:34:54 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stafford Horne X-Patchwork-Id: 48827 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 886823857C58 for ; Fri, 10 Dec 2021 23:45:08 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 886823857C58 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1639179908; bh=TgB4b2wA1z55AU97z3SP5cSz5m3Kejgu3UwicJMtSAA=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=EdLFSmgBwY8wQM2wfyc138z8pGnrci6X3/9+bTWE5t9RW2t6JRwwtGTukvTD9xpNy 6KRXjQ/WWuGGxCNoNkHKTFIbBaWm6SZh0pNfr+MsJ3Avlj4Lb3NObXz1BbmBhbkm3I PDZjjz/IIKCKlZEeTQJ+0Pkyepnt73ChvWxm2c5Q= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-pj1-x102b.google.com (mail-pj1-x102b.google.com [IPv6:2607:f8b0:4864:20::102b]) by sourceware.org (Postfix) with ESMTPS id 0F9803857C4F for ; Fri, 10 Dec 2021 23:35:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 0F9803857C4F Received: by mail-pj1-x102b.google.com with SMTP id gx15-20020a17090b124f00b001a695f3734aso8851302pjb.0 for ; Fri, 10 Dec 2021 15:35:39 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=TgB4b2wA1z55AU97z3SP5cSz5m3Kejgu3UwicJMtSAA=; b=nHJK/hzImsS0Gds8huygVwMTQXT9UzMG6je+iONgp/eZ4nzVL1INkIuxi4NQsb94mU Xv1OKduU9ZlJ7Xy9BzQCP248xhbmnh46EFR820XPunJvoCk5F5KIyTh2MphEQTL1hAwD t6SFsJwcjJCSRdTySK0xK4hGNvwXCRW85pEH+EvGUvg3cvvGbFvRGRGclng2zD3OuOxU HMkJpMbvr6pRyhgdQM/v1N7Fu9O8TWlysUTPYTj7qAITHPMHuC+BH8po04zPxJsEoW4P Uw0OoO51hmcNJI8aiMHzymHxH5MRs8nq57l8+hIV/ko11YH8uBJw9h3OBRr+pNCK1rsu QfVg== X-Gm-Message-State: AOAM533OFvGYSHZaxePpbR25Ud4CJLWX+/Lr3Qeuxtq1SrEdK7X8MFSH E0ImTwK27L9wJTAKiQPDGh0BbUlYdMw= X-Google-Smtp-Source: ABdhPJw3XfPCKhcijJ93biOUnKzd++ATZ11gheRAitceFWxr+oJE3okFJu4kbqNipV1pebmnBhnqtw== X-Received: by 2002:a17:902:d2c3:b0:146:6c28:191e with SMTP id n3-20020a170902d2c300b001466c28191emr57393367plc.7.1639179337660; Fri, 10 Dec 2021 15:35:37 -0800 (PST) Received: from localhost ([2409:10:24a0:4700:e8ad:216a:2a9d:6d0c]) by smtp.gmail.com with ESMTPSA id h22sm4277668pfv.25.2021.12.10.15.35.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Dec 2021 15:35:37 -0800 (PST) To: GLIBC patches Subject: [PATCH v3 11/13] or1k: Build Infrastructure Date: Sat, 11 Dec 2021 08:34:54 +0900 Message-Id: <20211210233456.4146479-12-shorne@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211210233456.4146479-1-shorne@gmail.com> References: <20211210233456.4146479-1-shorne@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-10.7 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_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Stafford Horne via Libc-alpha From: Stafford Horne Reply-To: Stafford Horne Cc: Openrisc Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" Here we define the minumum linux kernel version at 5.4.0, as that is the long term support version where 32-bit architectures start to support 64-bit time API's. The OpenRISC kernel had some bugs up until version 5.8 which caused issues with glibc fork/clone, they have been backported to 5.4 but not previous versions. --- sysdeps/or1k/Implies | 3 ++ sysdeps/or1k/Makefile | 7 +++++ sysdeps/or1k/nofpu/Implies | 1 + sysdeps/or1k/nptl/Makefile | 21 +++++++++++++ sysdeps/or1k/preconfigure | 34 +++++++++++++++++++++ sysdeps/unix/sysv/linux/or1k/Implies | 3 ++ sysdeps/unix/sysv/linux/or1k/Makefile | 12 ++++++++ sysdeps/unix/sysv/linux/or1k/configure | 4 +++ sysdeps/unix/sysv/linux/or1k/configure.ac | 4 +++ sysdeps/unix/sysv/linux/or1k/shlib-versions | 2 ++ 10 files changed, 91 insertions(+) create mode 100644 sysdeps/or1k/Implies create mode 100644 sysdeps/or1k/Makefile create mode 100644 sysdeps/or1k/nofpu/Implies create mode 100644 sysdeps/or1k/nptl/Makefile create mode 100644 sysdeps/or1k/preconfigure create mode 100644 sysdeps/unix/sysv/linux/or1k/Implies create mode 100644 sysdeps/unix/sysv/linux/or1k/Makefile create mode 100644 sysdeps/unix/sysv/linux/or1k/configure create mode 100644 sysdeps/unix/sysv/linux/or1k/configure.ac create mode 100644 sysdeps/unix/sysv/linux/or1k/shlib-versions diff --git a/sysdeps/or1k/Implies b/sysdeps/or1k/Implies new file mode 100644 index 0000000000..387a0ca052 --- /dev/null +++ b/sysdeps/or1k/Implies @@ -0,0 +1,3 @@ +wordsize-32 +ieee754/dbl-64 +ieee754/flt-32 diff --git a/sysdeps/or1k/Makefile b/sysdeps/or1k/Makefile new file mode 100644 index 0000000000..0241a0587e --- /dev/null +++ b/sysdeps/or1k/Makefile @@ -0,0 +1,7 @@ +ASFLAGS-.os += -fPIC + +ifeq ($(subdir),elf) +# Extra shared linker files to link only into dl-allobjs.so. +sysdep-rtld-routines += dl-start +endif + diff --git a/sysdeps/or1k/nofpu/Implies b/sysdeps/or1k/nofpu/Implies new file mode 100644 index 0000000000..abcbadb25f --- /dev/null +++ b/sysdeps/or1k/nofpu/Implies @@ -0,0 +1 @@ +ieee754/soft-fp diff --git a/sysdeps/or1k/nptl/Makefile b/sysdeps/or1k/nptl/Makefile new file mode 100644 index 0000000000..0e08821933 --- /dev/null +++ b/sysdeps/or1k/nptl/Makefile @@ -0,0 +1,21 @@ +# Copyright (C) 2021 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/or1k/preconfigure b/sysdeps/or1k/preconfigure new file mode 100644 index 0000000000..d1b1fb1843 --- /dev/null +++ b/sysdeps/or1k/preconfigure @@ -0,0 +1,34 @@ +# +# This is free and unencumbered software released into the public domain. +# +# Anyone is free to copy, modify, publish, use, compile, sell, or +# distribute this software, either in source code form or as a compiled +# binary, for any purpose, commercial or non-commercial, and by any +# means. +# +# In jurisdictions that recognize copyright laws, the author or authors +# of this software dedicate any and all copyright interest in the +# software to the public domain. We make this dedication for the benefit +# of the public at large and to the detriment of our heirs and +# successors. We intend this dedication to be an overt act of +# relinquishment in perpetuity of all present and future rights to this +# software under copyright law. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +# + +case "$machine" in +or1k*) + base_machine=or1k + machine=or1k + + with_fp_cond="defined __or1k_hard_float__" + ;; +esac + diff --git a/sysdeps/unix/sysv/linux/or1k/Implies b/sysdeps/unix/sysv/linux/or1k/Implies new file mode 100644 index 0000000000..f39f16c04a --- /dev/null +++ b/sysdeps/unix/sysv/linux/or1k/Implies @@ -0,0 +1,3 @@ +or1k/nptl +unix/sysv/linux/generic/wordsize-32 +unix/sysv/linux/generic diff --git a/sysdeps/unix/sysv/linux/or1k/Makefile b/sysdeps/unix/sysv/linux/or1k/Makefile new file mode 100644 index 0000000000..be20320b2f --- /dev/null +++ b/sysdeps/unix/sysv/linux/or1k/Makefile @@ -0,0 +1,12 @@ +ifeq ($(subdir),misc) + sysdep_routines += prctl or1k_clone +endif + +ifeq ($(subdir),stdlib) +gen-as-const-headers += ucontext_i.sym +endif + +# pull in __syscall_error routine +libpthread-routines += sysdep +librt-routines += sysdep + diff --git a/sysdeps/unix/sysv/linux/or1k/configure b/sysdeps/unix/sysv/linux/or1k/configure new file mode 100644 index 0000000000..5225dfea5b --- /dev/null +++ b/sysdeps/unix/sysv/linux/or1k/configure @@ -0,0 +1,4 @@ +# This file is generated from configure.ac by Autoconf. DO NOT EDIT! + # Local configure fragment for sysdeps/unix/sysv/linux/or1k. + +arch_minimum_kernel=5.4.0 diff --git a/sysdeps/unix/sysv/linux/or1k/configure.ac b/sysdeps/unix/sysv/linux/or1k/configure.ac new file mode 100644 index 0000000000..6274c4fb02 --- /dev/null +++ b/sysdeps/unix/sysv/linux/or1k/configure.ac @@ -0,0 +1,4 @@ +GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. +# Local configure fragment for sysdeps/unix/sysv/linux/or1k. + +arch_minimum_kernel=5.4.0 diff --git a/sysdeps/unix/sysv/linux/or1k/shlib-versions b/sysdeps/unix/sysv/linux/or1k/shlib-versions new file mode 100644 index 0000000000..159653b5c4 --- /dev/null +++ b/sysdeps/unix/sysv/linux/or1k/shlib-versions @@ -0,0 +1,2 @@ +DEFAULT GLIBC_2.35 +ld=ld-linux-or1k.so.1 From patchwork Fri Dec 10 23:34:55 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stafford Horne X-Patchwork-Id: 48825 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 8D1403858031 for ; Fri, 10 Dec 2021 23:43:44 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 8D1403858031 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1639179824; bh=ElDxRuWf9GfPoY52kEsiau5azdeYjGKXn+4nUud1HdA=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=SB9SbZzw2manxhvGEGRfEqI7JOHPQGV2ULtod8259VLciHOrfPQTIvKbytWNrNF/T t+katEb0Rd8rnj8u/wS+R8HQva2fNBs0BvEq2+B8aZ45w/eeqN8kWlwhL1e+KyPYAh kW4ypX1XrDMmcFdiPhMMQlchh469j5wx7gKtkr3s= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-pf1-x42a.google.com (mail-pf1-x42a.google.com [IPv6:2607:f8b0:4864:20::42a]) by sourceware.org (Postfix) with ESMTPS id 209B93857C44 for ; Fri, 10 Dec 2021 23:35:42 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 209B93857C44 Received: by mail-pf1-x42a.google.com with SMTP id x131so9740869pfc.12 for ; Fri, 10 Dec 2021 15:35:42 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ElDxRuWf9GfPoY52kEsiau5azdeYjGKXn+4nUud1HdA=; b=d0/wU9q1vJ4QLeXAyWCmBCtBFVhxaxOmPNAj8PhnAhybDSpYss+U+P6qsB+OMvsmA/ KVtx2/rjcTnZIDpQ5ra8imgQ+8dczzJu6Wiv+8/C+OLILalRYx3F7MXI8en2FD50eF7+ fQO+NHAN3OkOpypwakPx+jUf0Bg0idN2AQLupab3+FAt5S6fXB1Sg1arERzZzeJRYX0d dK+nAOYnrzgsZGRSJkaxllPxGQUbqNn78r79OFw1DsSzzTQif2HjcogDGlOVQ+paADws JUaSGMKUrxvkkgoYuEtmFjAfGjQd0eCED1mRreCFYGmgEYykHWiBLQr+yP7fj7o8nDdc XOBg== X-Gm-Message-State: AOAM531TP7Iv6igjqNvgN6kLAvzh3hU+K4e97QIISwGOFHXwogmmFvc2 rD1TbDdElWWxAIMjeNKW/sTUk+2ROKY= X-Google-Smtp-Source: ABdhPJymkr8fpeqzXONqlNXKk1LYIYCySZ8EF87NsViTzV/WMxAra61KbD6W3p0uqJ0Vqb/0hqQa/A== X-Received: by 2002:a63:2013:: with SMTP id g19mr25795611pgg.505.1639179340863; Fri, 10 Dec 2021 15:35:40 -0800 (PST) Received: from localhost ([2409:10:24a0:4700:e8ad:216a:2a9d:6d0c]) by smtp.gmail.com with ESMTPSA id g189sm3575391pgc.3.2021.12.10.15.35.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Dec 2021 15:35:40 -0800 (PST) To: GLIBC patches Subject: [PATCH v3 12/13] build-many-glibcs.py: add OpenRISC support Date: Sat, 11 Dec 2021 08:34:55 +0900 Message-Id: <20211210233456.4146479-13-shorne@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211210233456.4146479-1-shorne@gmail.com> References: <20211210233456.4146479-1-shorne@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-10.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Stafford Horne via Libc-alpha From: Stafford Horne Reply-To: Stafford Horne Cc: Openrisc Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" --- scripts/build-many-glibcs.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/scripts/build-many-glibcs.py b/scripts/build-many-glibcs.py index 6ae2172956..47b2cabc9c 100755 --- a/scripts/build-many-glibcs.py +++ b/scripts/build-many-glibcs.py @@ -334,6 +334,10 @@ class Context(object): 'ccopts': '-mabi=64'}]) self.add_config(arch='nios2', os_name='linux-gnu') + self.add_config(arch='or1k', + os_name='linux-gnu', + variant='soft', + gcc_cfg=['--with-multilib-list=mcmov']) self.add_config(arch='powerpc', os_name='linux-gnu', gcc_cfg=['--disable-multilib', '--enable-secureplt'], @@ -1270,6 +1274,7 @@ def install_linux_headers(policy, cmdlist): 'microblaze': 'microblaze', 'mips': 'mips', 'nios2': 'nios2', + 'or1k': 'openrisc', 'powerpc': 'powerpc', 's390': 's390', 'riscv32': 'riscv', From patchwork Fri Dec 10 23:34:56 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stafford Horne X-Patchwork-Id: 48826 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 97C8C3857C72 for ; Fri, 10 Dec 2021 23:44:26 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 97C8C3857C72 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1639179866; bh=LL8xvf4PJMnuX3zKvr9o0AmwR0tuURHkS4sS/bQB7jY=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=FMn5Mngnl4Iw2TOIc8lA7LUapF+yQZgfobXkikRJAAWGFOhSCsfVi3qKkSgq8meMV SecEUPEimJDD5JiSXJ6HaoRTc9WaDnElAIlQMUllph6Q4ptBxhWxrpWEpyd0aN6Rfs qjcAnljadxJeErmd1+xm3+8NLf1kcc+WmOoalx+w= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-pj1-x1030.google.com (mail-pj1-x1030.google.com [IPv6:2607:f8b0:4864:20::1030]) by sourceware.org (Postfix) with ESMTPS id 98146385780F for ; Fri, 10 Dec 2021 23:35:44 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 98146385780F Received: by mail-pj1-x1030.google.com with SMTP id nh10-20020a17090b364a00b001a69adad5ebso8811040pjb.2 for ; Fri, 10 Dec 2021 15:35:44 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=LL8xvf4PJMnuX3zKvr9o0AmwR0tuURHkS4sS/bQB7jY=; b=6sSQi9CZTLuQ0Xm2QNMbLxSaw3YXJC+0z+CYlt5U8HSOogGAxNLGoPKpdyeFx6/KFN nMZlMjh4Ze9QO8n4YSMGluA3Y+SJXKKcyqbcmFSoC2e1mAW1+/OsO3aEPKMpiFJINkgy O7PW9KoGyPNoNQ6PLo5AO6GySz0mbS2JGos0QqtQ+hKqnn3NhvhQqfWy/v6MW6+oDKQo YMvvQ3jyJ2i6rt2JGqo7330s76wc3tOw/CxFc/QLJQzWWZX1XZWoeqW8FiavKmiQt7Dh gOGengRGMl7p6IZ+3L943JqtGAn+zyy/2bfrpv80l4m8p+RAOAeE9SxU8xuzEOxPX1yk 1vhA== X-Gm-Message-State: AOAM531irQRtg5Q35Qsu8doI6dgkZqi6usyeIubBlVW1f05/c29xcnjK uYU7kw/Jt8Kb5BOgy9V0Z9SvregqIh0= X-Google-Smtp-Source: ABdhPJx9RFMvH1DhxQU/w49ZvzAbG+iuigJOeuVgToTbV/qKZLgFNjn/zO1v+4q3/TUVaNmeE7bHDA== X-Received: by 2002:a17:90b:4b4d:: with SMTP id mi13mr27153540pjb.192.1639179343397; Fri, 10 Dec 2021 15:35:43 -0800 (PST) Received: from localhost ([2409:10:24a0:4700:e8ad:216a:2a9d:6d0c]) by smtp.gmail.com with ESMTPSA id a6sm86114pjd.40.2021.12.10.15.35.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Dec 2021 15:35:42 -0800 (PST) To: GLIBC patches Subject: [PATCH v3 13/13] Documentation for OpenRISC port Date: Sat, 11 Dec 2021 08:34:56 +0900 Message-Id: <20211210233456.4146479-14-shorne@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211210233456.4146479-1-shorne@gmail.com> References: <20211210233456.4146479-1-shorne@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-10.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Stafford Horne via Libc-alpha From: Stafford Horne Reply-To: Stafford Horne Cc: Openrisc Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" OpenRISC architecture specification: https://raw.githubusercontent.com/openrisc/doc/master/openrisc-arch-1.3-rev1.pdf Currently the port as of the 2021-12-07 rebasing has the following test failures: FAIL: timezone/tst-tzset # Not enough space to create 4GiB file FAIL: elf/tst-bz15311 # dynamic ld sort order diff Writing credits for the port are: Stafford Horne Christian Svensson --- NEWS | 4 ++++ README | 1 + 2 files changed, 5 insertions(+) diff --git a/NEWS b/NEWS index 1398cf2e87..f896746574 100644 --- a/NEWS +++ b/NEWS @@ -485,6 +485,10 @@ Major new features: The latest GCC available at this time (10.2) does not support this level of fortification. +* Support for OpenRISC on Linux has been added. + + The OpenRISC pore requires at least Linux 5.4, GCC 11 and binutils 2.35. + Deprecated and removed features, and other changes affecting compatibility: * The mallinfo function is marked deprecated. Callers should call diff --git a/README b/README index d0f0edb393..3d5a78ccff 100644 --- a/README +++ b/README @@ -35,6 +35,7 @@ The GNU C Library supports these configurations for using Linux kernels: microblaze*-*-linux-gnu mips-*-linux-gnu mips64-*-linux-gnu + or1k-*-linux-gnu powerpc-*-linux-gnu Hardware or software floating point, BE only. powerpc64*-*-linux-gnu Big-endian and little-endian. s390-*-linux-gnu