From patchwork Sun May 6 14:41:15 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vincent Chen X-Patchwork-Id: 909314 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=sourceware.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=libc-alpha-return-92063-incoming=patchwork.ozlabs.org@sourceware.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=andestech.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.b="tg9pCEsf"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 40f7kW4K6Yz9s0q for ; Mon, 7 May 2018 00:42:11 +1000 (AEST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-type; q=dns; s=default; b=x1MfZ 8pWu7h68A8ZFYeUrlHUaXZPT/ldyfzjHrPqaKWDAs3IHQbk3uJrWXQTEhMDMQBO/ txv3+cCMTyAFq/r71Fj0kghaZdPru7IcnLhCPpTge3wI7wUy6WWH0iNLPdMWtvBv L433EXLhC5Ifu8lydSXPGxu+dldx9A5S8hV5Qo= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-type; s=default; bh=qmKBN0meJPW SKLMkLos8EHFalho=; b=tg9pCEsf2naCIo9siAn+V7DZuvP1KA6aiBdNekQF84N FcSN/AbS8T2ZeT1T3qtVSV7dimnX+xoMkQdmvRlusJs4g27lLmCkijCwP16b9kmj 3B3tF3yyxKpALp3Y/WixNDI5zCCNG8JNEXBFoX/UucRnFMCdr1o+Xi82s6g48kwc = Received: (qmail 33588 invoked by alias); 6 May 2018 14:42:05 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 33497 invoked by uid 89); 6 May 2018 14:42:04 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_PASS, TIME_LIMIT_EXCEEDED autolearn=unavailable version=3.3.2 spammy=H*RU:sk:mail.an, Hx-spam-relays-external:sk:mail.an X-HELO: ATCSQR.andestech.com From: vincentc To: CC: , , vincentc Subject: [PATCH 01/11] nds32: Build Infastructure Date: Sun, 6 May 2018 22:41:15 +0800 Message-ID: <1525617685-32083-2-git-send-email-vincentc@andestech.com> In-Reply-To: <1525617685-32083-1-git-send-email-vincentc@andestech.com> References: <1525617685-32083-1-git-send-email-vincentc@andestech.com> MIME-Version: 1.0 X-DNSRBL: X-MAIL: ATCSQR.andestech.com w46EXsEn047096 This patch contains all needed Implies, configure and Makefile for nds32 port. --- sysdeps/nds32/Implies | 3 +++ sysdeps/nds32/Makefile | 9 +++++++ sysdeps/nds32/configure | 35 ++++++++++++++++++++++++++++ sysdeps/nds32/configure.ac | 14 +++++++++++ sysdeps/nds32/nofpu/Implies | 1 + sysdeps/nds32/nptl/Makefile | 4 ++++ sysdeps/nds32/preconfigure | 20 ++++++++++++++++ sysdeps/unix/sysv/linux/nds32/Implies | 3 +++ sysdeps/unix/sysv/linux/nds32/Makefile | 17 ++++++++++++++ sysdeps/unix/sysv/linux/nds32/Versions | 11 +++++++++ sysdeps/unix/sysv/linux/nds32/configure | 4 ++++ sysdeps/unix/sysv/linux/nds32/configure.ac | 4 ++++ sysdeps/unix/sysv/linux/nds32/shlib-versions | 7 ++++++ 13 files changed, 132 insertions(+) create mode 100644 sysdeps/nds32/Implies create mode 100644 sysdeps/nds32/Makefile create mode 100755 sysdeps/nds32/configure create mode 100644 sysdeps/nds32/configure.ac create mode 100644 sysdeps/nds32/nofpu/Implies create mode 100644 sysdeps/nds32/nptl/Makefile create mode 100644 sysdeps/nds32/preconfigure create mode 100644 sysdeps/unix/sysv/linux/nds32/Implies create mode 100644 sysdeps/unix/sysv/linux/nds32/Makefile create mode 100644 sysdeps/unix/sysv/linux/nds32/Versions create mode 100755 sysdeps/unix/sysv/linux/nds32/configure create mode 100644 sysdeps/unix/sysv/linux/nds32/configure.ac create mode 100644 sysdeps/unix/sysv/linux/nds32/shlib-versions diff --git a/sysdeps/nds32/Implies b/sysdeps/nds32/Implies new file mode 100644 index 0000000..387a0ca --- /dev/null +++ b/sysdeps/nds32/Implies @@ -0,0 +1,3 @@ +wordsize-32 +ieee754/dbl-64 +ieee754/flt-32 diff --git a/sysdeps/nds32/Makefile b/sysdeps/nds32/Makefile new file mode 100644 index 0000000..5651161 --- /dev/null +++ b/sysdeps/nds32/Makefile @@ -0,0 +1,9 @@ +ifeq ($(subdir),elf) +sysdep-dl-routines += tlsdesc dl-tlsdesc +sysdep_routines += tlsdesc dl-tlsdesc +sysdep-rtld-routines += tlsdesc dl-tlsdesc +endif + +ifeq ($(subdir),csu) +gen-as-const-headers += tlsdesc.sym +endif diff --git a/sysdeps/nds32/configure b/sysdeps/nds32/configure new file mode 100755 index 0000000..42eb9bb --- /dev/null +++ b/sysdeps/nds32/configure @@ -0,0 +1,35 @@ +# This file is generated from configure.ac by Autoconf. DO NOT EDIT! + # Local configure fragment for sysdeps/nds32. +CFLAGS="$CFLAGS -minline-asm-r15" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc support option -mno-scalbn-transform" >&5 +$as_echo_n "checking whether gcc support option -mno-scalbn-transform... " >&6; } +if ${libc_cv_scalbn_transform+:} false; then : + $as_echo_n "(cached) " >&6 +else + save_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -mno-scalbn-transform" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + libc_cv_scalbn_transform=yes +else + libc_cv_scalbn_transform=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +CFLAGS="$save_CFLAGS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_scalbn_transform" >&5 +$as_echo "$libc_cv_scalbn_transform" >&6; } +if test "$libc_cv_scalbn_transform" = yes; then +CFLAGS="$CFLAGS -mno-scalbn-transform" +fi diff --git a/sysdeps/nds32/configure.ac b/sysdeps/nds32/configure.ac new file mode 100644 index 0000000..4ca57b8 --- /dev/null +++ b/sysdeps/nds32/configure.ac @@ -0,0 +1,14 @@ +GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. +# Local configure fragment for sysdeps/nds32. +CFLAGS="$CFLAGS -minline-asm-r15" +AC_CACHE_CHECK(whether gcc support option -mno-scalbn-transform, + libc_cv_scalbn_transform, [dnl +save_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -mno-scalbn-transform" +AC_TRY_COMPILE(,, + libc_cv_scalbn_transform=yes, + libc_cv_scalbn_transform=no) +CFLAGS="$save_CFLAGS"]) +if test "$libc_cv_scalbn_transform" = yes; then +CFLAGS="$CFLAGS -mno-scalbn-transform" +fi diff --git a/sysdeps/nds32/nofpu/Implies b/sysdeps/nds32/nofpu/Implies new file mode 100644 index 0000000..abcbadb --- /dev/null +++ b/sysdeps/nds32/nofpu/Implies @@ -0,0 +1 @@ +ieee754/soft-fp diff --git a/sysdeps/nds32/nptl/Makefile b/sysdeps/nds32/nptl/Makefile new file mode 100644 index 0000000..6f553d6 --- /dev/null +++ b/sysdeps/nds32/nptl/Makefile @@ -0,0 +1,4 @@ + +ifeq ($(subdir),csu) +gen-as-const-headers += tcb-offsets.sym +endif diff --git a/sysdeps/nds32/preconfigure b/sysdeps/nds32/preconfigure new file mode 100644 index 0000000..9154423 --- /dev/null +++ b/sysdeps/nds32/preconfigure @@ -0,0 +1,20 @@ +case "$machine" in +nds32*) + float_abi_type=`$CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null | sed -n 's/^#define __NDS32_EXT_FPU_\([S|D]P*\) 1/\1/p' | wc -l` + + case "$float_abi_type" in + 0) + with_fp_cond=0 + ;; + *) + echo "glibc does not yet support systems with FP instructions" >&2 + exit 1 + ;; + esac + + base_machine=nds32 + machine=nds32 + + $as_echo "#define NDS32_ABI_TYPE $float_abi_type" >>confdefs.h + ;; +esac diff --git a/sysdeps/unix/sysv/linux/nds32/Implies b/sysdeps/unix/sysv/linux/nds32/Implies new file mode 100644 index 0000000..91b4e1e --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/Implies @@ -0,0 +1,3 @@ +nds32/nptl +unix/sysv/linux/generic/wordsize-32 +unix/sysv/linux/generic diff --git a/sysdeps/unix/sysv/linux/nds32/Makefile b/sysdeps/unix/sysv/linux/nds32/Makefile new file mode 100644 index 0000000..2709916 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/Makefile @@ -0,0 +1,17 @@ +ifeq ($(subdir),misc) +sysdep_headers += sys/cachectl.h +sysdep_routines += cacheflush prctl mremap +endif + + +ifeq ($(subdir),stdlib) +gen-as-const-headers += ucontext_i.sym +endif + +ifeq ($(subdir),elf) +sysdep_routines += dl-vdso +ifeq ($(build-shared),yes) +# This is needed for DSO loading from static binaries. +sysdep-dl-routines += dl-static +endif +endif diff --git a/sysdeps/unix/sysv/linux/nds32/Versions b/sysdeps/unix/sysv/linux/nds32/Versions new file mode 100644 index 0000000..abe47ce --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/Versions @@ -0,0 +1,11 @@ +ld { + GLIBC_PRIVATE { + # used for loading by static libraries + _dl_var_init; + } +} +libc { + GLIBC_2.28 { + cacheflush; + } +} diff --git a/sysdeps/unix/sysv/linux/nds32/configure b/sysdeps/unix/sysv/linux/nds32/configure new file mode 100755 index 0000000..e815611 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/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/nds32. + +arch_minimum_kernel=4.16.0 diff --git a/sysdeps/unix/sysv/linux/nds32/configure.ac b/sysdeps/unix/sysv/linux/nds32/configure.ac new file mode 100644 index 0000000..a5a0593 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/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/nds32. + +arch_minimum_kernel=4.16.0 diff --git a/sysdeps/unix/sysv/linux/nds32/shlib-versions b/sysdeps/unix/sysv/linux/nds32/shlib-versions new file mode 100644 index 0000000..2131996 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/shlib-versions @@ -0,0 +1,7 @@ +DEFAULT GLIBC_2.28 + +%if NDS32_ABI_TYPE == 0 +ld=ld-linux-nds32.so.1 +%else +%error cannot determine ABI +%endif From patchwork Sun May 6 14:41:16 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vincent Chen X-Patchwork-Id: 909315 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=sourceware.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=libc-alpha-return-92064-incoming=patchwork.ozlabs.org@sourceware.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=andestech.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.b="oybuVwKU"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 40f7kl3VpHz9s0q for ; Mon, 7 May 2018 00:42:23 +1000 (AEST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-type; q=dns; s=default; b=sTMds f0DOqXn5ddgor5OgyEtihjNRgjXLVR7/UTlJ4OlliA8hkP98qjMK/mytOV74xLF/ Gajon8FkZG+wgKn1S+PXCR/CnsbEb6TezCH+pbkSk4HeXIqWAkxWOouOa1zSbojg TBOOaBuYTq+F4wYEoE7iiuw4bll5CC/swgjP3Q= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-type; s=default; bh=ihED2P7sJHu WCIMsP5Uwj6/3DD8=; b=oybuVwKUEyGjRL493G8FxgcKHoaJ0sG69UVGK1qxn75 CHqXQtE9mTjSLYoPAXRF0IkW8DK+TUxLtFY4onTfhc4eMATjtKEXHW4lpD6t1y9J FJSG8vkcwriVTxcMf5WQffaadRr+PyeopK64+k0ji6NQGsdeSDOJtn8aXMcTCQ9E = Received: (qmail 34029 invoked by alias); 6 May 2018 14:42:09 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 33893 invoked by uid 89); 6 May 2018 14:42:07 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-20.2 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_SHORT, KAM_STOCKGEN, RCVD_IN_DNSWL_NONE, SPF_PASS, UNSUBSCRIBE_BODY autolearn=ham version=3.3.2 spammy=TCB, Never, Still, r10 X-HELO: ATCSQR.andestech.com From: vincentc To: CC: , , vincentc Subject: [PATCH 02/11] nds32: ABI Implementation Date: Sun, 6 May 2018 22:41:16 +0800 Message-ID: <1525617685-32083-3-git-send-email-vincentc@andestech.com> In-Reply-To: <1525617685-32083-1-git-send-email-vincentc@andestech.com> References: <1525617685-32083-1-git-send-email-vincentc@andestech.com> MIME-Version: 1.0 X-DNSRBL: X-MAIL: ATCSQR.andestech.com w46EXxuA047110 The implementation of these files in this patch is dependent on nds32-ABI convention. --- sysdeps/nds32/__longjmp.S | 64 +++++++++++++ sysdeps/nds32/backtrace.c | 1 + sysdeps/nds32/bits/endian.h | 27 ++++++ sysdeps/nds32/bits/link.h | 54 +++++++++++ sysdeps/nds32/bits/setjmp.h | 37 ++++++++ sysdeps/nds32/bsd-_setjmp.S | 1 + sysdeps/nds32/bsd-setjmp.S | 1 + sysdeps/nds32/gccframe.h | 21 +++++ sysdeps/nds32/jmpbuf-offsets.h | 34 +++++++ sysdeps/nds32/jmpbuf-unwind.h | 47 ++++++++++ sysdeps/nds32/linkmap.h | 26 ++++++ sysdeps/nds32/machine-gmon.h | 32 +++++++ sysdeps/nds32/memcpy.S | 123 +++++++++++++++++++++++++ sysdeps/nds32/memset.S | 59 ++++++++++++ sysdeps/nds32/memusage.h | 21 +++++ sysdeps/nds32/nptl/pthreaddef.h | 33 +++++++ sysdeps/nds32/setjmp.S | 66 +++++++++++++ sysdeps/nds32/sotruss-lib.c | 50 ++++++++++ sysdeps/nds32/stackinfo.h | 32 +++++++ sysdeps/nds32/strcmp.S | 105 +++++++++++++++++++++ sysdeps/nds32/strcpy.S | 75 +++++++++++++++ sysdeps/nds32/sysdep.h | 70 ++++++++++++++ sysdeps/nds32/tst-audit.h | 23 +++++ sysdeps/unix/sysv/linux/nds32/jmp_buf-macros.h | 26 ++++++ sysdeps/unix/sysv/linux/nds32/localplt.data | 19 ++++ 25 files changed, 1047 insertions(+) create mode 100644 sysdeps/nds32/__longjmp.S create mode 100644 sysdeps/nds32/backtrace.c create mode 100644 sysdeps/nds32/bits/endian.h create mode 100644 sysdeps/nds32/bits/link.h create mode 100644 sysdeps/nds32/bits/setjmp.h create mode 100644 sysdeps/nds32/bsd-_setjmp.S create mode 100644 sysdeps/nds32/bsd-setjmp.S create mode 100644 sysdeps/nds32/gccframe.h create mode 100644 sysdeps/nds32/jmpbuf-offsets.h create mode 100644 sysdeps/nds32/jmpbuf-unwind.h create mode 100644 sysdeps/nds32/linkmap.h create mode 100644 sysdeps/nds32/machine-gmon.h create mode 100644 sysdeps/nds32/memcpy.S create mode 100644 sysdeps/nds32/memset.S create mode 100644 sysdeps/nds32/memusage.h create mode 100644 sysdeps/nds32/nptl/pthreaddef.h create mode 100644 sysdeps/nds32/setjmp.S create mode 100644 sysdeps/nds32/sotruss-lib.c create mode 100644 sysdeps/nds32/stackinfo.h create mode 100644 sysdeps/nds32/strcmp.S create mode 100644 sysdeps/nds32/strcpy.S create mode 100644 sysdeps/nds32/sysdep.h create mode 100644 sysdeps/nds32/tst-audit.h create mode 100644 sysdeps/unix/sysv/linux/nds32/jmp_buf-macros.h create mode 100644 sysdeps/unix/sysv/linux/nds32/localplt.data diff --git a/sysdeps/nds32/__longjmp.S b/sysdeps/nds32/__longjmp.S new file mode 100644 index 0000000..608216c --- /dev/null +++ b/sysdeps/nds32/__longjmp.S @@ -0,0 +1,64 @@ +/* longjmp, Andes nds32 version. + Copyright (C) 1996-2018 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 + . */ + +/* + $r0 - $r5 are for paramter passing - no need to save. + $r6 - $r14 are callee saved - needs to save. + $r15 is temp register for assembler - no need to save. + $r16 - $r25 are caller saved - no need to save. + $r26 - $r27 are temp registers for OS - no need to save. + $r28 is $fp - need to save. + $r29 is $gp - need to save. + $r30 is $ra - need to save. + $r31 is $sp - need to save. + So we need to save $r6 - $r14 and $r28 - $r31. + The jmpbuf looks like this: + $r6 + $r7 + $r8 + $r9 + $r10 + $r11 + $r12 + $r13 + $r14 + $fp + $gp + $ra + $sp + Reserved(For 8-byte align if needed) +*/ + +#include +#define _SETJMP_H +#define _ASM +#include + .section .text + +/* __longjmp (env[0].__jmpbuf, val ?: 1); */ +ENTRY(__longjmp) + /* Restore registers. */ + lmw.bim $r6, [$r0], $r14, #0xf + + /* Return error code. Make sure error code is not 0. */ + bnez $r1, .Ldone + movi $r1, #1 +.Ldone: + addi $r0, $r1, #0 + ret +END(__longjmp) diff --git a/sysdeps/nds32/backtrace.c b/sysdeps/nds32/backtrace.c new file mode 100644 index 0000000..27ce597 --- /dev/null +++ b/sysdeps/nds32/backtrace.c @@ -0,0 +1 @@ +#include diff --git a/sysdeps/nds32/bits/endian.h b/sysdeps/nds32/bits/endian.h new file mode 100644 index 0000000..262ffea --- /dev/null +++ b/sysdeps/nds32/bits/endian.h @@ -0,0 +1,27 @@ +/* Define __BYTE_ORDER. Andes nds32 version + Copyright (C) 1997-2018 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 _ENDIAN_H +# error "Never use directly; include instead." +#endif + +#if defined __NDS32_EB__ +# define __BYTE_ORDER __BIG_ENDIAN +#else +# define __BYTE_ORDER __LITTLE_ENDIAN +#endif diff --git a/sysdeps/nds32/bits/link.h b/sysdeps/nds32/bits/link.h new file mode 100644 index 0000000..7b3f078 --- /dev/null +++ b/sysdeps/nds32/bits/link.h @@ -0,0 +1,54 @@ +/* Machine-specific declarations for dynamic linker interface. Andes nds32 version. + Copyright (C) 2005-2018 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 on NDS32. */ +typedef struct La_nds32_regs +{ + uint32_t lr_reg[6]; + uint32_t lr_gp; + uint32_t lr_lp; + uint32_t lr_sp; +} La_nds32_regs; + +/* Return values for calls from PLT on NDS32. */ +typedef struct La_nds32_retval +{ + uint32_t lrv_reg[2]; +} La_nds32_retval; + +__BEGIN_DECLS + +extern ElfW(Addr) la_nds32_gnu_pltenter (ElfW(Sym) *__sym, unsigned int __ndx, + uintptr_t *__refcook, + uintptr_t *__defcook, + La_nds32_regs *__regs, + unsigned int *__flags, + const char *__symname, + long int *__framesizep); +extern unsigned int la_nds32_gnu_pltexit (ElfW(Sym) *__sym, unsigned int __ndx, + uintptr_t *__refcook, + uintptr_t *__defcook, + const La_nds32_regs *__inregs, + La_nds32_retval *__outregs, + const char *__symname); + +__END_DECLS diff --git a/sysdeps/nds32/bits/setjmp.h b/sysdeps/nds32/bits/setjmp.h new file mode 100644 index 0000000..5ac5217 --- /dev/null +++ b/sysdeps/nds32/bits/setjmp.h @@ -0,0 +1,37 @@ +/* Define the machine-dependent type `jmp_buf'. Andes nds32 version. + Copyright (C) 2003-2018 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 Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#ifndef _BITS_SETJMP_H +#define _BITS_SETJMP_H 1 + +#if !defined _SETJMP_H && !defined _PTHREAD_H +# error "Never include directly; use instead." +#endif + +#ifndef _ASM + +typedef struct __jmp_buf_internal_tag + { + /* Callee-saved registers: $r6 - $r14, $fp, $gp, $lp, $sp: $r28 - $r31. */ + int __regs[13]; + } __jmp_buf[1] __attribute__((__aligned__ (8))); + +#endif + +#endif /* bits/setjmp.h */ diff --git a/sysdeps/nds32/bsd-_setjmp.S b/sysdeps/nds32/bsd-_setjmp.S new file mode 100644 index 0000000..90b99cd --- /dev/null +++ b/sysdeps/nds32/bsd-_setjmp.S @@ -0,0 +1 @@ +/* _setjmp is in setjmp.S. */ diff --git a/sysdeps/nds32/bsd-setjmp.S b/sysdeps/nds32/bsd-setjmp.S new file mode 100644 index 0000000..d3b823c --- /dev/null +++ b/sysdeps/nds32/bsd-setjmp.S @@ -0,0 +1 @@ +/* setjmp is in setjmp.S. */ diff --git a/sysdeps/nds32/gccframe.h b/sysdeps/nds32/gccframe.h new file mode 100644 index 0000000..2ef5bc2 --- /dev/null +++ b/sysdeps/nds32/gccframe.h @@ -0,0 +1,21 @@ +/* Definition of object in frame unwind info. Andes nds32 version. + Copyright (C) 2001-2018 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 FIRST_PSEUDO_REGISTER 34 + +#include diff --git a/sysdeps/nds32/jmpbuf-offsets.h b/sysdeps/nds32/jmpbuf-offsets.h new file mode 100644 index 0000000..7026c90 --- /dev/null +++ b/sysdeps/nds32/jmpbuf-offsets.h @@ -0,0 +1,34 @@ +/* Private macros for accessing __jmp_buf contents. Andes nds32 version. + Copyright (C) 2018 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 JB_R6 0 +#define JB_R7 1 +#define JB_R8 2 +#define JB_R9 3 +#define JB_R10 4 +#define JB_R11 5 +#define JB_R12 6 +#define JB_R13 7 +#define JB_R14 8 +#define JB_FP 9 +#define JB_GP 10 +#define JB_LP 11 +#define JB_SP 12 + +#define JB_FRAME_ADDRESS(buf) \ + ((void *)buf[0].__regs[JB_SP]) diff --git a/sysdeps/nds32/jmpbuf-unwind.h b/sysdeps/nds32/jmpbuf-unwind.h new file mode 100644 index 0000000..373f114 --- /dev/null +++ b/sysdeps/nds32/jmpbuf-unwind.h @@ -0,0 +1,47 @@ +/* Examine __jmp_buf for unwinding frames. Andes nds32 version. + Copyright (C) 2003-2018 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + . */ + +#include +#include +#include +#include +#include + +/* Test if longjmp to JMPBUF would unwind the frame + containing a local variable at ADDRESS. */ +#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \ + ((void *) (address) < &(jmpbuf)[0].__regs[JB_SP]) + +#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \ + _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj) + +static inline uintptr_t __attribute__ ((unused)) +_jmpbuf_sp (__jmp_buf regs) +{ + uintptr_t sp = (uintptr_t) &(regs)[0].__regs[JB_SP]; +#ifdef PTR_DEMANGLE + PTR_DEMANGLE (sp); +#endif + return sp; +} + +#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ + ((uintptr_t) (_address) - (_adj) < _jmpbuf_sp (_jmpbuf) - (_adj)) + +/* We use the normal longjmp for unwinding. */ +#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val) diff --git a/sysdeps/nds32/linkmap.h b/sysdeps/nds32/linkmap.h new file mode 100644 index 0000000..89e912a --- /dev/null +++ b/sysdeps/nds32/linkmap.h @@ -0,0 +1,26 @@ +/* Define nds32 link_map_machine + Copyright (C) 2018 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 + . */ + +struct link_map_machine + { + ElfW(Addr) plt; /* Address of .plt. */ + ElfW(Addr) gotplt; /* Address of .got. */ + void *tlsdesc_table; + }; + diff --git a/sysdeps/nds32/machine-gmon.h b/sysdeps/nds32/machine-gmon.h new file mode 100644 index 0000000..64679d9 --- /dev/null +++ b/sysdeps/nds32/machine-gmon.h @@ -0,0 +1,32 @@ +/* profiling support for Andes nds32 version + Copyright (C) 1996-2018 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 + +static void __mcount_internal (u_long frompc, u_long selfpc) __attribute_used__; + +#define _MCOUNT_DECL(frompc, selfpc) \ +static void __mcount_internal (u_long frompc, u_long selfpc) + + +#define MCOUNT \ +void _mcount (u_long frompc) \ +{ \ + __mcount_internal (frompc, (u_long) RETURN_ADDRESS (0)); \ +} + diff --git a/sysdeps/nds32/memcpy.S b/sysdeps/nds32/memcpy.S new file mode 100644 index 0000000..80d38ef --- /dev/null +++ b/sysdeps/nds32/memcpy.S @@ -0,0 +1,123 @@ +/* Memory copy, Andes nds32 version + Copyright (C) 2009-2018 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 + . */ + +/* void *memcpy(void *dst, const void *src, int n); + + dst: $r0 + src: $r1 + n : $r2 + ret: $r0 - pointer to the memory area dst. */ + + +#include + .text + +ENTRY(memcpy) + beq $r0, $r1, .Lquit_memcpy2 + beqz $r2, .Lquit_memcpy2 + move $r5, $r0 + srli $r3, $r2, #5 /* Check if len < cache-line size 32. */ + beqz $r3, .Lword_copy_entry + andi $r4, $r0, #0x3 /* Check byte-align. */ + beqz $r4, .Lunalign_word_copy_entry + + addi $r4, $r4,#-4 + abs $r4, $r4 /* Check how many un-align byte to copy. */ + sub $r2, $r2, $r4 /* Update $r2. */ + +.Lunalign_byte_copy: + lbi.bi $r3, [$r1], #1 + addi $r4, $r4, #-1 + sbi.bi $r3, [$r0], #1 + bnez $r4, .Lunalign_byte_copy + beqz $r2, .Lquit_memcpy + +.Lunalign_word_copy_entry: + andi $r3, $r0, 0x1f /* Check cache-line unaligncount. */ + beqz $r3, .Lcache_copy + + addi $r3, $r3, #-32 + abs $r3, $r3 + sub $r2, $r2, $r3 /* Update $r2. */ + +.Lunalign_word_copy: + lmw.bim $r4, [$r1], $r4 + addi $r3, $r3, #-4 + smw.bim $r4, [$r0], $r4 + bnez $r3, .Lunalign_word_copy + beqz $r2, .Lquit_memcpy + + addi $r3, $r2, #-32 /* To check $r2 < cache_line, than go to .Lword_copy. */ + bltz $r3, .Lword_copy_entry +.Lcache_copy: + srli $r3, $r2, #5 + beqz $r3, .Lword_copy_entry + pushm $r6, $r13 + .cfi_adjust_cfa_offset 32 + .cfi_rel_offset r6, 0 + .cfi_rel_offset r7, 4 + .cfi_rel_offset r8, 8 + .cfi_rel_offset r9, 12 + .cfi_rel_offset r10, 16 + .cfi_rel_offset r11, 20 + .cfi_rel_offset r12, 24 + .cfi_rel_offset r13, 28 +3: + lmw.bim $r6, [$r1], $r13 + addi $r3, $r3, #-1 + smw.bim $r6, [$r0], $r13 + bnez $r3, 3b + popm $r6, $r13 + .cfi_adjust_cfa_offset -32 + .cfi_restore r6 + .cfi_restore r7 + .cfi_restore r8 + .cfi_restore r9 + .cfi_restore r10 + .cfi_restore r11 + .cfi_restore r12 + .cfi_restore r13 + +.Lword_copy_entry: + andi $r2, $r2, #31 + + beqz $r2, .Lquit_memcpy + srli $r3, $r2, #2 + beqz $r3, .Lbyte_copy +.Lword_copy: + lmw.bim $r4, [$r1], $r4 + addi $r3, $r3, #-1 + smw.bim $r4, [$r0], $r4 + bnez $r3, .Lword_copy + andi $r2, $r2, #3 + beqz $r2, .Lquit_memcpy +.Lbyte_copy: + lbi.bi $r3, [$r1], #1 + addi $r2, $r2, #-1 + + sbi.bi $r3, [$r0], #1 + bnez $r2, .Lbyte_copy +.Lquit_memcpy: + move $r0, $r5 +.Lquit_memcpy2: + ret + +END(memcpy) +libc_hidden_builtin_def (memcpy) + diff --git a/sysdeps/nds32/memset.S b/sysdeps/nds32/memset.S new file mode 100644 index 0000000..74e7852 --- /dev/null +++ b/sysdeps/nds32/memset.S @@ -0,0 +1,59 @@ +/* Optimized version for Andes nds32. + Copyright (C) 2006-2018 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 + +/* void *memset(void *dst, int val, int len); + + dst: $r0 + val: $r1 + len: $r2 + ret: $r0 - pointer to the memory area dst. */ + +ENTRY(memset) + move $r5, $r0 /* Return value. */ + beqz $r2, .Lend_memset /* Exit when len = 0. */ + srli $r3, $r2, 2 /* $r3 is how many words to copy. */ + andi $r2, $r2, 3 /* How many bytes are less than a word. */ + beqz $r3, .Lbyte_set /* When n is less than a word. */ + + /* set $r1 from ??????ab to abababab. */ + andi $r1, $r1, 0x00ff /* $r1 = 000000ab. */ + slli $r4, $r1, 8 /* $r4 = 0000ab00. */ + or $r1, $r1, $r4 /* $r1 = 0000abab. */ + slli $r4, $r1, 16 /* $r4 = abab0000. */ + or $r1, $r1, $r4 /* $r1 = abababab. */ + +.Lword_set: + addi $r3, $r3, -1 /* How many words left to copy. */ + smw.bim $r1, [$r5], $r1 /* Copy the word to det. */ + bnez $r3, .Lword_set /* Still words to set, continue looping. */ + beqz $r2, .Lend_memset /* No left byte to set. */ + +.Lbyte_set: /* Less than 4 bytes left to set. */ + addi $r2, $r2, -1 /* Decrease len by 1. */ + sbi.p $r1, [$r5], 1 /* Set data of the next byte to $r1. */ + bnez $r2, .Lbyte_set /* Still bytes left to set. */ + +.Lend_memset: + ret + +END(memset) +libc_hidden_builtin_def (memset) + diff --git a/sysdeps/nds32/memusage.h b/sysdeps/nds32/memusage.h new file mode 100644 index 0000000..e227c90 --- /dev/null +++ b/sysdeps/nds32/memusage.h @@ -0,0 +1,21 @@ +/* Machine-specific definitions for memory usage profiling, Andes nds32 version. + Copyright (C) 2000-2018 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 ("$sp"); stack_ptr; }) + +#include diff --git a/sysdeps/nds32/nptl/pthreaddef.h b/sysdeps/nds32/nptl/pthreaddef.h new file mode 100644 index 0000000..6ba4596 --- /dev/null +++ b/sysdeps/nds32/nptl/pthreaddef.h @@ -0,0 +1,33 @@ +/* pthread machine parameter definitions, Andes nds32 version. + Copyright (C) 2011-2018 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) + +/* 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. */ +#define TCB_ALIGNMENT 16 + + +/* Location of current stack frame. */ +#define CURRENT_STACK_FRAME __builtin_frame_address (0) diff --git a/sysdeps/nds32/setjmp.S b/sysdeps/nds32/setjmp.S new file mode 100644 index 0000000..dc9c658 --- /dev/null +++ b/sysdeps/nds32/setjmp.S @@ -0,0 +1,66 @@ +/* setjmp for Andes nds32. + Copyright (C) 1996-2018 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 _SETJMP_H +#define _ASM +#include + .section .text +#ifdef PIC +# define JMP_BY_R2(symbol) \ + sethi $r3, hi20(symbol@PLT); \ + ori $r3, $r3, lo12(symbol@PLT); \ + add $r3, $r3, $r2; \ + jr $r3 +# define TCALL_SIGJMP_SAVE \ + GET_GTABLE ($r2); \ + JMP_BY_R2 (__sigjmp_save) +#else +# define JMP_BY_R2(symbol) \ + la $r15, C_SYMBOL_NAME(symbol); \ + jr $r15 +# define TCALL_SIGJMP_SAVE \ + JMP_BY_R2 (__sigjmp_save) +#endif + +ENTRY(_setjmp) + move $r1, #0 + /* Initialize $r2 as $gp value. */ + GET_GTABLE ($r2) + /* Make a tail call to __sigsetjmp. */ + JMP_BY_R2 (HIDDEN_JUMPTARGET (__sigsetjmp)) +END(_setjmp) +ENTRY(setjmp) + move $r1, #1 + /* Initialize $r2 as $gp value. */ + GET_GTABLE ($r2) + /* Make a tail call to __sigsetjmp. */ + JMP_BY_R2 (HIDDEN_JUMPTARGET (__sigsetjmp)) +END(setjmp) + +ENTRY(__sigsetjmp) + move $r2, $r0 + /* Save callee-saved registers into buffer. */ + smw.bim $r6, [$r2], $r14, #0xf + /* Make a tail call to __sigjmp_save. */ + TCALL_SIGJMP_SAVE + +END(__sigsetjmp) +hidden_def(__sigsetjmp) +weak_alias (_setjmp, __GI__setjmp) diff --git a/sysdeps/nds32/sotruss-lib.c b/sysdeps/nds32/sotruss-lib.c new file mode 100644 index 0000000..d77b7fa --- /dev/null +++ b/sysdeps/nds32/sotruss-lib.c @@ -0,0 +1,50 @@ +/* Override generic sotruss-lib.c to define actual functions for Andes nds32. + Copyright (C) 2013-2018 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_nds32_gnu_pltenter (ElfW(Sym) *sym __attribute__ ((unused)), + unsigned int ndx __attribute__ ((unused)), + uintptr_t *refcook, uintptr_t *defcook, + La_nds32_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_nds32_gnu_pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook, + uintptr_t *defcook, const struct La_nds32_regs *inregs, + struct La_nds32_retval *outregs, const char *symname) +{ + print_exit (refcook, defcook, symname, outregs->lrv_reg[0]); + + return 0; +} diff --git a/sysdeps/nds32/stackinfo.h b/sysdeps/nds32/stackinfo.h new file mode 100644 index 0000000..51790e7 --- /dev/null +++ b/sysdeps/nds32/stackinfo.h @@ -0,0 +1,32 @@ +/* Stack environment definitions for Andes nds32. + Copyright (C) 2011-2018 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 + +#define _STACK_GROWS_DOWN 1 + +/* Default to a non-executable stack. */ +#define DEFAULT_STACK_PERMS (PF_R|PF_W) + +#endif /* stackinfo.h */ diff --git a/sysdeps/nds32/strcmp.S b/sysdeps/nds32/strcmp.S new file mode 100644 index 0000000..4462354 --- /dev/null +++ b/sysdeps/nds32/strcmp.S @@ -0,0 +1,105 @@ +/* Optimized version for Andes nds32. + Copyright (C) 2015-2018 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 + . */ + +/* + Function: + strcmp - compare two strings. + Syntax: + int strcmp(const char *s1, const char *s2); + Description: + The strcmp function compares the string pointed to by s1 to the string + pointed to by s2. + Return value: + Return n integer greater than, equal to, or less than zero, accordingly + as the string pointed to by s1 is greater than, equal to, or less than + the string pointed to by s2. +*/ +#include + .text + +ENTRY(strcmp) +#if defined (__NDS32_EXT_STRING__) +1: + lmwzb.bm $r2, [$r0], $r2, #0 + lmwzb.bm $r3, [$r1], $r3, #0 + ffzmism $r4, $r2, $r3 + beqz $r4, 1b + lb $r2, [$r0+$r4] + lb $r3, [$r1+$r4] + sub $r0, $r2, $r3 + ret $lp +#else /* not (__NDS32_EXT_STRING__) */ + /* If s1 or s2 are unaligned, then compare bytes. */ + or $r5, $r1, $r0 + andi $r5, $r5, #3 + bnez $r5, .Lbyte_mode + + /* If s1 and s2 are word-aligned, compare them a word at a time. */ + lwi $r5, [$r0+(0)] + lwi $r3, [$r1+(0)] +.off_16bit /* Dedicate 4-byte to eliminate NOP caused by ".align 2". */ + bne $r5, $r3, .Lbyte_mode /* A difference was detected, so + search bytewise. */ +.restore_16bit + + + /* It's more efficient to set bit mask outside the word_mode loop. */ + sethi $r4, hi20(0xFEFEFEFF) /* Set $r4 as -0x01010101. */ + ori $r4, $r4, lo12(0xFEFEFEFF) + sethi $r2, hi20(0x80808080) /* Set $r2 as 0x80808080. */ + ori $r2, $r2, lo12(0x80808080) + +.align 2 +.Lword_mode_loop: + /* #define DETECTNULL(X) (((X) - 0x01010101) & ~(X) & 0x80808080) + DETECTNULL returns nonzero if (long)X contains a NULL byte. */ + +/* Force 32-bit instruction to gain better performance. */ +.off_16bit + nor $r3, $r5, $r5 /* $r3 = ~(X). */ + add $r5, $r5, $r4 /* $r5 = ((X) - 0x01010101). */ + and $r5, $r5, $r3 /* $r5 = ~(X) & ((X) - 0x01010101). */ + and $r5, $r5, $r2 /* $r5= r5 & 0x80808080. */ +.restore_16bit + + bnez $r5, .Lfound_null /* Branch if $r5 is nonzero. */ + lmw.aim $r5, [$r0], $r5, 0 + lmw.aim $r3, [$r1], $r3, 0 + beq $r5, $r3, .Lword_mode_loop + +.align 2 +.Lbyte_mode: + /* Byte-mode compare. */ + lbi.bi $r5, [$r0], #1 + lbi.bi $r3, [$r1], #1 + bne $r5, $r3, 1f /* Mismatch, done. */ + bnez $r5, .Lbyte_mode +1: + sub $r0, $r5, $r3 + ret $lp + +.align 2 +.Lfound_null: + /* To get here, *a1 == *a2, thus if we find a null in *a1, + then the strings must be equal, so return zero. */ + movi $r0, #0 + ret $lp + +#endif /* not (__NDS32_EXT_STRING__) */ +END(strcmp) +libc_hidden_builtin_def (strcmp) diff --git a/sysdeps/nds32/strcpy.S b/sysdeps/nds32/strcpy.S new file mode 100644 index 0000000..31fc282 --- /dev/null +++ b/sysdeps/nds32/strcpy.S @@ -0,0 +1,75 @@ +/* Optimized version for Andes nds32. + Copyright (C) 2013-2018 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 + . */ + +/* Function: + strcpy - copy a string. + Syntax: + char *strcpy(char *dest, const char *src); + Description: + This function copies the string pointed to by src into the array + point to by dest (include the teminating null character). + Return value: + strcpy returns the dest as given. */ +#include + .text + +ENTRY(strcpy) + move $r3, $r0 /* Keep $r0 as reture value. */ +#if defined (__NDS32_EXT_STRING__) +1: + lmwzb.bm $r4, [$r1], $r4, #0 + smwzb.bm $r4, [$r3], $r4, #0 + ffzmism $r2, $r4, $r4 + beqz $r2, 1b /* $r2 = 0, no zero byte exist. */ + ret $lp + +#else /* not (__NDS32_EXT_STRING__) */ + GET_GTABLE ($gp) + /* If SRC or DEST is unaligned, then copy bytes. */ + or $r2, $r1, $r0 + andi $r2, $r2, #3 + bnez $r2, .Lbyte_mode + +.Lword_mode: + /* SRC and DEST are both "long int" aligned, try to do "long int" + sized copies. */ + /* #define DETECTNULL(X) (((X) - 0x01010101) & ~(X) & 0x80808080) + DETECTNULL returns nonzero if (long)X contains a NULL byte. */ + lwi $r2, [$r1+(0)] /* $r2 is X. */ + sethi $r4, hi20(0xFEFEFEFF) + ori $r4, $r4, lo12(0xFEFEFEFF) + add $r4, $r2, $r4 /* $r4 = ((X) - 0x01010101). */ + nor $r5, $r2, $r2 /* $r5 = ~(X). */ + and $r4, $r5, $r4 /* $r4 = ~(X) & ((X) - 0x01010101). */ + sethi $r5, hi20(0x80808080) + ori $r5, $r5, lo12(0x80808080) + and $r4, $r4, $r5 /* $r4 = $r4 & 0x80808080. */ + bnez $r4, .Lbyte_mode /* Contains a NULL byte. */ + swi.bi $r2, [$r3], #4 + addi $r1, $r1, #4 + b .Lword_mode + +.Lbyte_mode: + lbi.bi $r4, [$r1], #1 /* $r4 <- *src++. */ + sbi.bi $r4, [$r3], #1 /* $r4 -> *dest++. */ + bnez $r4, .Lbyte_mode + ret $lp +#endif /* not (__NDS32_EXT_STRING__) */ +END(strcpy) +libc_hidden_builtin_def (strcpy) diff --git a/sysdeps/nds32/sysdep.h b/sysdeps/nds32/sysdep.h new file mode 100644 index 0000000..e82121c --- /dev/null +++ b/sysdeps/nds32/sysdep.h @@ -0,0 +1,70 @@ +/* Assembler macros for Andes nds32. + Copyright (C) 2015-2018 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 + +#ifdef __ASSEMBLER__ + +/* Define an entry point visible from C. */ +# ifdef PIC +# define ENTRY(name) \ + .pic \ + .align 2; \ + .globl C_SYMBOL_NAME(name); \ + .func C_SYMBOL_NAME(name); \ + .type C_SYMBOL_NAME(name), @function; \ + C_SYMBOL_NAME(name): \ + cfi_startproc; +# else +# define ENTRY(name) \ + .align 2; \ + .globl C_SYMBOL_NAME(name); \ + .func C_SYMBOL_NAME(name); \ + .type C_SYMBOL_NAME(name), @function; \ + C_SYMBOL_NAME(name): \ + cfi_startproc; +# endif + + +# undef END +# define END(name) \ + cfi_endproc; \ + .endfunc; \ + .size C_SYMBOL_NAME(name), .-C_SYMBOL_NAME(name) + +/* If compiled for profiling, call `mcount' at the start of each function. */ +# ifdef HAVE_ELF +# undef NO_UNDERSCORES +# define NO_UNDERSCORES +# endif + +# ifdef NO_UNDERSCORES +# define syscall_error __syscall_error +# endif + + +# define GET_GTABLE(reg) \ + sethi reg, hi20(_GLOBAL_OFFSET_TABLE_ - 8); \ + ori reg, reg, lo12(_GLOBAL_OFFSET_TABLE_ - 4);\ + add5.pc reg; + + + +#endif /* __ASSEMBLER__ */ + + diff --git a/sysdeps/nds32/tst-audit.h b/sysdeps/nds32/tst-audit.h new file mode 100644 index 0000000..4294bc0 --- /dev/null +++ b/sysdeps/nds32/tst-audit.h @@ -0,0 +1,23 @@ +/* Definitions for testing PLT entry/exit auditing. Andes nds32 version. + Copyright (C) 2013-2018 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_nds32_gnu_pltenter +#define pltexit la_nds32_gnu_pltexit +#define La_regs La_nds32_regs +#define La_retval La_nds32_retval +#define int_retval lrv_reg[0] diff --git a/sysdeps/unix/sysv/linux/nds32/jmp_buf-macros.h b/sysdeps/unix/sysv/linux/nds32/jmp_buf-macros.h new file mode 100644 index 0000000..7d7a141 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/jmp_buf-macros.h @@ -0,0 +1,26 @@ +/* jump buffer constants, Andes nds32. + Copyright (C) 2017-2018 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_SIZE 184 +#define SIGJMP_BUF_SIZE 184 +#define JMP_BUF_ALIGN 8 +#define SIGJMP_BUF_ALIGN 8 +#define MASK_WAS_SAVED_OFFSET 52 +#define SAVED_MASK_OFFSET 56 + diff --git a/sysdeps/unix/sysv/linux/nds32/localplt.data b/sysdeps/unix/sysv/linux/nds32/localplt.data new file mode 100644 index 0000000..14c02cb --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/localplt.data @@ -0,0 +1,19 @@ +# 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: memalign +libc.so: realloc +# The main malloc is interposed into the dynamic linker, for +# allocations after the initial link (when dlopen is used). +ld.so: malloc +ld.so: calloc +ld.so: realloc +ld.so: free +# 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 Sun May 6 14:41:17 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vincent Chen X-Patchwork-Id: 909316 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=sourceware.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=libc-alpha-return-92065-incoming=patchwork.ozlabs.org@sourceware.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=andestech.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.b="s9XDGzV5"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 40f7ky2BlPz9s0q for ; Mon, 7 May 2018 00:42:34 +1000 (AEST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-type; q=dns; s=default; b=ftjtu 3FQNx/vKN9mt7flsRVDeJpIDPA/x5KbAMrz/nFipXdjS0iH7BzfjcPGzHNbZUW8s HVk1hTcEX3uFt2V5dtXukwzBUfOLXMsPAJ6Nr7CA9TTingsHjLg64vMNb/Sz0Lr0 PMMaDCzwsK5HLvEpQRsx4T5hf7peGFxvGwlFEc= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-type; s=default; bh=bgEfdRH3Tr/ z61jYBJlkeI415CE=; b=s9XDGzV5Rw4MMYLXU/ocogo1V4+1meZL7H0mYYYDYJx xer9Km+1v3Fiifc/DfUhbP5pLcy+jUpimXWjzEqHkldnSyRCR9fx4ybB5oA4LOsO a1+/fXO3H6bLFXeV3kY75p2n0WfWwKHPaHnxtCATMpxMe4jBDqlJFzA3g3QD3+zs = Received: (qmail 34084 invoked by alias); 6 May 2018 14:42:09 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 33959 invoked by uid 89); 6 May 2018 14:42:08 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.0 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.2 spammy=REGISTER, TCB, r15, H*RU:sk:mail.an X-HELO: ATCSQR.andestech.com From: vincentc To: CC: , , vincentc Subject: [PATCH 03/11] nds32: Thread-Local Storage Support Date: Sun, 6 May 2018 22:41:17 +0800 Message-ID: <1525617685-32083-4-git-send-email-vincentc@andestech.com> In-Reply-To: <1525617685-32083-1-git-send-email-vincentc@andestech.com> References: <1525617685-32083-1-git-send-email-vincentc@andestech.com> MIME-Version: 1.0 X-DNSRBL: X-MAIL: ATCSQR.andestech.com w46EY4l5047132 This patch implements TLS mechanism for nds32. 4 TLS addressing mode (LE, IE, LD, GD) is supported when running on Linux via NPTL. --- sysdeps/nds32/dl-tls.h | 28 +++++++ sysdeps/nds32/dl-tlsdesc.S | 104 ++++++++++++++++++++++++ sysdeps/nds32/dl-tlsdesc.h | 62 ++++++++++++++ sysdeps/nds32/nptl/tcb-offsets.sym | 7 ++ sysdeps/nds32/nptl/tls.h | 160 +++++++++++++++++++++++++++++++++++++ sysdeps/nds32/tls-macros.h | 75 +++++++++++++++++ sysdeps/nds32/tlsdesc.c | 38 +++++++++ sysdeps/nds32/tlsdesc.sym | 16 ++++ 8 files changed, 490 insertions(+) create mode 100644 sysdeps/nds32/dl-tls.h create mode 100644 sysdeps/nds32/dl-tlsdesc.S create mode 100644 sysdeps/nds32/dl-tlsdesc.h create mode 100644 sysdeps/nds32/nptl/tcb-offsets.sym create mode 100644 sysdeps/nds32/nptl/tls.h create mode 100644 sysdeps/nds32/tls-macros.h create mode 100644 sysdeps/nds32/tlsdesc.c create mode 100644 sysdeps/nds32/tlsdesc.sym diff --git a/sysdeps/nds32/dl-tls.h b/sysdeps/nds32/dl-tls.h new file mode 100644 index 0000000..385d031 --- /dev/null +++ b/sysdeps/nds32/dl-tls.h @@ -0,0 +1,28 @@ +/* Thread-local storage handling in the ELF dynamic linker. Andes nds32 version. + Copyright (C) 2013 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/nds32/dl-tlsdesc.S b/sysdeps/nds32/dl-tlsdesc.S new file mode 100644 index 0000000..d677740 --- /dev/null +++ b/sysdeps/nds32/dl-tlsdesc.S @@ -0,0 +1,104 @@ +/* Thread-local storage handling in the ELF dynamic linker, Andes nds32 version. + Copyright (C) 2006-2013 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 "tlsdesc.h" + + .text + .hidden _dl_tlsdesc_return + .global _dl_tlsdesc_return + .type _dl_tlsdesc_return,#function + cfi_startproc + .align 2 +_dl_tlsdesc_return: + lwi $r0, [$r0 + 4] + add $r0, $r0, $r25 + ret + cfi_endproc + .size _dl_tlsdesc_return, .-_dl_tlsdesc_return + + .hidden _dl_tlsdesc_undefweak + .global _dl_tlsdesc_undefweak + .type _dl_tlsdesc_undefweak,#function + cfi_startproc + .align 2 +_dl_tlsdesc_undefweak: + ret + cfi_endproc + .size _dl_tlsdesc_undefweak, .-_dl_tlsdesc_undefweak + +#ifdef SHARED + /* Handler for dynamic TLS symbols. + Prototype: + _dl_tlsdesc_dynamic (tlsdesc *) ; + + ptrdiff_t + _dl_tlsdesc_dynamic(struct tlsdesc *tdp) + { + struct tlsdesc_dynamic_arg *td = tdp->argument.pointer; + dtv_t *dtv = (dtv_t *)THREAD_DTV(); + if (__builtin_expect (td->gen_count <= dtv[0].counter + && (dtv[td->tlsinfo.ti_module].pointer.val + != TLS_DTV_UNALLOCATED), + 1)) + return dtv[td->tlsinfo.ti_module].pointer.val + + td->tlsinfo.ti_offset; + + return __tls_get_addr (&td->tlsinfo); + } + */ + .hidden _dl_tlsdesc_dynamic + .global _dl_tlsdesc_dynamic + .type _dl_tlsdesc_dynamic,#function + cfi_startproc + .pic + .align 2 + +_dl_tlsdesc_dynamic: + lwi $r0, [$r0 + 4] /* $r0 = td. */ + lwi $r1, [$r0 + #TLSDESC_GEN_COUNT] /* $r1 = td->gen_count. */ + lwi $r2, [$r25 + #DTV_OFFSET] /* $r2 = &dtv[0]. */ + lwi $r3, [$r2] /* $r3 = module id. */ + sub $r1, $r1, $r3 + bgtz $r1, 2f + lwi $r3, [$r0 + #TLSDESC_MODID] + slli $r3, $r3, #3 /* $r3 = module offset = ID * 8. */ + lw $r3, [$r2 + $r3] /* $r3 = &dtc[ID] = &dtv[0]+ module offset. */ + movi $r1, #TLS_DTV_UNALLOCATED + beq $r3, $r1, 2f + lwi $r1, [$r0 + #TLSDESC_MODOFF] + add $r0, $r3, $r1 +1: + ret +2: + smw.adm $sp,[$sp],$sp,#0x6 + .cfi_adjust_cfa_offset 8 + .cfi_rel_offset gp, 0 + .cfi_rel_offset lp, 4 + GET_GTABLE ($gp) + la $r15, HIDDEN_JUMPTARGET (__tls_get_addr@PLT) + jral $r15 + lmw.bim $sp,[$sp],$sp,#0x6 + .cfi_adjust_cfa_offset -8 + .cfi_restore gp + .cfi_restore lp + j 1b + cfi_endproc + .size _dl_tlsdesc_dynamic, .-_dl_tlsdesc_dynamic +#endif /* SHARED */ diff --git a/sysdeps/nds32/dl-tlsdesc.h b/sysdeps/nds32/dl-tlsdesc.h new file mode 100644 index 0000000..16d2270 --- /dev/null +++ b/sysdeps/nds32/dl-tlsdesc.h @@ -0,0 +1,62 @@ +/* Thread-local storage descriptor handling in the ELF dynamic linker. + Andes nds32 version. + Copyright (C) 2005-2013 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; witout 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 _NDS32_DL_TLSDESC_H +# define _NDS32_DL_TLSDESC_H 1 + +/* Type used to represent a TLS descriptor in the GOT. */ +struct tlsdesc +{ + ptrdiff_t (*entry)(struct tlsdesc *); + union + { + void *pointer; + long value; + } argument; +}; + + +typedef struct dl_tls_index +{ + unsigned long int ti_module; + unsigned long int ti_offset; +} tls_index; + +/* Type used as the argument in a TLS descriptor for a symbol that + needs dynamic TLS offsets. */ +struct tlsdesc_dynamic_arg +{ + tls_index tlsinfo; + size_t gen_count; +}; + +extern ptrdiff_t attribute_hidden +_dl_tlsdesc_return(struct tlsdesc *); + +extern ptrdiff_t attribute_hidden +_dl_tlsdesc_undefweak(struct tlsdesc *); + +# ifdef SHARED +extern void *_dl_make_tlsdesc_dynamic (struct link_map *map, size_t ti_offset); + +extern ptrdiff_t attribute_hidden +_dl_tlsdesc_dynamic(struct tlsdesc *); +# endif + +#endif /* nds32/dl-tlsdesc.h */ diff --git a/sysdeps/nds32/nptl/tcb-offsets.sym b/sysdeps/nds32/nptl/tcb-offsets.sym new file mode 100644 index 0000000..333dd53 --- /dev/null +++ b/sysdeps/nds32/nptl/tcb-offsets.sym @@ -0,0 +1,7 @@ +#include +#include + +#define thread_offsetof(mem) (long)(offsetof (struct pthread, mem) - TLS_TCB_OFFSET - TLS_PRE_TCB_SIZE) + +MULTIPLE_THREADS_OFFSET thread_offsetof (header.multiple_threads) +TID_OFFSET thread_offsetof (tid) diff --git a/sysdeps/nds32/nptl/tls.h b/sysdeps/nds32/nptl/tls.h new file mode 100644 index 0000000..59c5557 --- /dev/null +++ b/sysdeps/nds32/nptl/tls.h @@ -0,0 +1,160 @@ +/* Definition for thread-local data handling, Andes NPTL/nds32 version. + Copyright (C) 2011-2018 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 _NDS32_TLS_H +#define _NDS32_TLS_H 1 + +#include + +#ifndef __ASSEMBLER__ +# include +# include +# include +# include + +#else +# include +#endif /* __ASSEMBLER__ */ + + +#ifndef __ASSEMBLER__ + +/* Get system call information. */ +# include + +/* The TP points to the start of the thread blocks. */ +# define TLS_DTV_AT_TP 1 +# define TLS_TCB_AT_TP 0 + +/* We use the multiple_threads field in the pthread struct. */ +# define TLS_MULTIPLE_THREADS_IN_TCB 1 + +/* Get the thread descriptor definition. */ +# include + +typedef struct +{ + dtv_t *dtv; + void *private; +} tcbhead_t; + +/* This is the size of the initial TCB. */ +# define TLS_INIT_TCB_SIZE 0 + +/* Alignment requirements for the initial TCB. */ +# define TLS_INIT_TCB_ALIGN __alignof__ (struct pthread) + +/* This is the size of the TCB. */ +# define TLS_TCB_SIZE 0 + +/* Alignment requirements for the TCB. */ +# define TLS_TCB_ALIGN __alignof__ (struct pthread) + + + +/* This is the size we need before TCB - actually, it includes the TCB. */ +# define TLS_PRE_TCB_SIZE \ + (sizeof (struct pthread) \ + + ((sizeof (tcbhead_t) + TLS_TCB_ALIGN - 1) & ~(TLS_TCB_ALIGN - 1))) + +/* Return the thread descriptor (tp) for the current thread. */ +register void *__thread_pointer asm ("$r25"); + + +/* The thread pointer tp points to the end of the TCB. + * The pthread_descr structure is immediately in front of the TCB. */ +# define TLS_TCB_OFFSET 0 + +/* Install the dtv pointer. The pointer passed is to the element with + index -1 which contain the length. */ +# define INSTALL_DTV(tcbp, dtvp) \ + (((tcbhead_t *) (tcbp))[-1].dtv = (dtvp) + 1) + +/* Install new dtv for current thread. */ +# define INSTALL_NEW_DTV(dtv) (THREAD_DTV() = (dtv)) + +/* Return dtv of given thread descriptor. */ +# define GET_DTV(tcbp) (((tcbhead_t *) (tcbp))[-1].dtv) + +/* Code to initially initialize the thread pointer (tp). */ +# define TLS_INIT_TP(tcbp) \ + (__thread_pointer = (char *)(tcbp) + TLS_TCB_OFFSET, NULL) + +/* Value passed to 'clone' for initialization of the thread register. */ +# define TLS_DEFINE_INIT_TP(tp, pd) \ + void *tp = (void *) (pd) + TLS_TCB_OFFSET + TLS_PRE_TCB_SIZE + +/* Return the address of the dtv for the current thread. */ +# define THREAD_DTV() \ + (((tcbhead_t *) (__thread_pointer - TLS_TCB_OFFSET))[-1].dtv) + +/* Return the thread descriptor for the current thread. */ +# define THREAD_SELF \ + ((struct pthread *) (__thread_pointer \ + - TLS_TCB_OFFSET - TLS_PRE_TCB_SIZE)) + +/* Magic for libthread_db to know how to do THREAD_SELF. */ +# define DB_THREAD_SELF \ + REGISTER (32, 32, 26 * 4, - TLS_TCB_OFFSET - TLS_PRE_TCB_SIZE) + +/* Read member of the thread descriptor directly. */ +# define THREAD_GETMEM(descr, member) (descr->member) + +/* Same as THREAD_GETMEM, but the member offset can be non-constant. */ +# define THREAD_GETMEM_NC(descr, member, idx) \ + (descr->member[idx]) + +/* Set member of the thread descriptor directly. */ +# define THREAD_SETMEM(descr, member, value) \ + (descr->member = (value)) + +/* Same as THREAD_SETMEM, but the member offset can be non-constant. */ +# define THREAD_SETMEM_NC(descr, member, idx, value) \ + (descr->member[idx] = (value)) + + +/* l_tls_offset == 0 is perfectly valid, so we have to use some different + value to mean unset l_tls_offset. */ +# define NO_TLS_OFFSET -1 + +/* 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) +# define THREAD_GSCOPE_WAIT() \ + GL(dl_wait_lookup_done) () + +#endif /* __ASSEMBLER__ */ + +#endif /* tls.h */ diff --git a/sysdeps/nds32/tls-macros.h b/sysdeps/nds32/tls-macros.h new file mode 100644 index 0000000..b6ff5c1 --- /dev/null +++ b/sysdeps/nds32/tls-macros.h @@ -0,0 +1,75 @@ +/* Macros to support TLS testing in times of missing compiler support. + Andes nds32 version. + Copyright (C) 2017-2018 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 TLS_LE(x) \ +({ int *__l; \ + asm("sethi %0, hi20("#x"@TPOFF)\n\t" \ + "ori %0, %0, lo12("#x"@TPOFF)\n\t" \ + "add %0, %0, $r25\n\t" \ + :"=r"(__l)); \ + __l;}) + +#ifdef PIC +# define TLS_IE(x) \ +({ int *__l; \ + asm(".relax_hint begin\n\t" \ + "sethi %0, hi20("#x"@GOTTPOFF)\n\t" \ + ".relax_hint\n\t" \ + "ori %0, %0, lo12("#x"@GOTTPOFF)\n\t" \ + ".relax_hint end\n\t" \ + "lw %0, [%0 + $gp]\n\t" \ + "add %0, %0, $r25\n\t" \ + :"=r"(__l)); \ + __l;}) +#else +# define TLS_IE(x) \ +({ int *__l; \ + asm(".relax_hint begin\n\t" \ + "sethi %0, hi20("#x"@GOTTPOFF)\n\t" \ + ".relax_hint end\n\t" \ + "lwi %0, [%0 + lo12("#x"@GOTTPOFF)]\n\t" \ + "add %0, %0, $r25\n\t" \ + :"=r"(__l)); \ + __l;}) +#endif + +#define TLS_LD(x) TLS_GD(x) + +#define TLS_GD(x) \ +({ int *__l; \ + asm("smw.adm $r1,[$sp],$r5,#0\n\t" \ + "smw.adm $r16,[$sp],$r24,#0\n\t" \ + ".relax_hint begin\n\t" \ + "sethi $r0, hi20("#x"@TLSDESC)\n\t" \ + ".relax_hint\n\t" \ + "ori $r0, $r0, lo12("#x"@TLSDESC)\n\t" \ + ".relax_hint\n\t" \ + "lw $r15, [$r0 + $gp]\n\t" \ + ".relax_hint\n\t" \ + "add $r0, $r0, $gp\n\t" \ + ".relax_hint end\n\t" \ + "jral $r15\n\t" \ + "lmw.bim $r16,[$sp],$r24,#0\n\t" \ + "lmw.bim $r1,[$sp],$r5,#0\n\t" \ + "move %0, $r0\n\t" \ + :"=r"(__l) \ + : \ + :"$r0","$r15"); \ + __l;}) diff --git a/sysdeps/nds32/tlsdesc.c b/sysdeps/nds32/tlsdesc.c new file mode 100644 index 0000000..65d0be0 --- /dev/null +++ b/sysdeps/nds32/tlsdesc.c @@ -0,0 +1,38 @@ +/* Manage TLS descriptors, Andes nds32 version. + Copyright (C) 2005-2013 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 +#define _dl_tlsdesc_resolve_hold 0 +#include + +/* Unmap the dynamic object, but also release its TLS descriptor table + if there is one. */ + +void +_dl_unmap (struct link_map *map) +{ + _dl_unmap_segments (map); + +#ifdef SHARED + if (map->l_mach.tlsdesc_table) + htab_delete (map->l_mach.tlsdesc_table); +#endif +} diff --git a/sysdeps/nds32/tlsdesc.sym b/sysdeps/nds32/tlsdesc.sym new file mode 100644 index 0000000..0a34a74 --- /dev/null +++ b/sysdeps/nds32/tlsdesc.sym @@ -0,0 +1,16 @@ +#include +#include +#include +#include +#include + +#define dtv_offsetof(dtv) (offsetof (tcbhead_t, dtv) - TLS_TCB_OFFSET - sizeof (tcbhead_t)) + +DTV_OFFSET dtv_offsetof (dtv) + +TLSDESC_ARG offsetof (struct tlsdesc, argument.pointer) + +TLSDESC_GEN_COUNT offsetof (struct tlsdesc_dynamic_arg, gen_count) +TLSDESC_MODID offsetof (struct tlsdesc_dynamic_arg, tlsinfo.ti_module) +TLSDESC_MODOFF offsetof (struct tlsdesc_dynamic_arg, tlsinfo.ti_offset) +TLS_DTV_UNALLOCATED TLS_DTV_UNALLOCATED From patchwork Sun May 6 14:41:18 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vincent Chen X-Patchwork-Id: 909317 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=sourceware.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=libc-alpha-return-92066-incoming=patchwork.ozlabs.org@sourceware.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=andestech.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.b="qAPc6+Wi"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 40f7lD5gKfz9s0q for ; Mon, 7 May 2018 00:42:48 +1000 (AEST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-type; q=dns; s=default; b=eZROf zt+GFerXOkphlsXpYPEZQ1raQg5Pk3fS6QWdWlICAbO2YkgERj0nzQs/lriKP2nw JphOKy5LDRKdqaGQEygf8Ele00Qp62sB6Q/7QZ7jyKauBRvS7GIECyBVG3kZFHmP fFidRL1j/DzzG0Nh4agCHM6IvlFQ9d/ZdtDfBk= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-type; s=default; bh=wv/UoH2kwWe r5gkXz9Rcnhiv3nM=; b=qAPc6+WisoGkKhCnXf8jji4E7WFuKtjPKp5tn41/hkF nAhRK/vuMeyT5XQSREJzHfRzmYEqPW+XvVcs+oLRaDiHB3Y1fzkt3TG75+lBNKUJ AytdXNyDRlFSjk3HkgY65dtKIesBBg3vuv5cErzDrH8cmszHx+nS6kYM4nZgAEiI = Received: (qmail 35091 invoked by alias); 6 May 2018 14:42:18 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 34936 invoked by uid 89); 6 May 2018 14:42:17 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-23.2 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_SHORT, KAM_STOCKGEN, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.2 spammy=1124, bounce, unlimited, canonical X-HELO: ATCSQR.andestech.com From: vincentc To: CC: , , vincentc Subject: [PATCH 04/11] nds32: Startup and Dynamic Loader Date: Sun, 6 May 2018 22:41:18 +0800 Message-ID: <1525617685-32083-5-git-send-email-vincentc@andestech.com> In-Reply-To: <1525617685-32083-1-git-send-email-vincentc@andestech.com> References: <1525617685-32083-1-git-send-email-vincentc@andestech.com> MIME-Version: 1.0 X-DNSRBL: X-MAIL: ATCSQR.andestech.com w46EYAEj047147 This patch contains crti.S, crtn.S and the dynamic loader for nds32 system. --- sysdeps/nds32/crti.S | 77 ++++++ sysdeps/nds32/crtn.S | 53 ++++ sysdeps/nds32/dl-machine.h | 410 ++++++++++++++++++++++++++++++ sysdeps/nds32/dl-sysdep.h | 22 ++ sysdeps/nds32/dl-trampoline.S | 164 ++++++++++++ sysdeps/nds32/ldsodefs.h | 44 ++++ sysdeps/nds32/start.S | 124 +++++++++ sysdeps/unix/sysv/linux/nds32/dl-static.c | 84 ++++++ sysdeps/unix/sysv/linux/nds32/ldconfig.h | 27 ++ sysdeps/unix/sysv/linux/nds32/ldsodefs.h | 32 +++ 10 files changed, 1037 insertions(+) create mode 100644 sysdeps/nds32/crti.S create mode 100644 sysdeps/nds32/crtn.S create mode 100644 sysdeps/nds32/dl-machine.h create mode 100644 sysdeps/nds32/dl-sysdep.h create mode 100644 sysdeps/nds32/dl-trampoline.S create mode 100644 sysdeps/nds32/ldsodefs.h create mode 100644 sysdeps/nds32/start.S create mode 100644 sysdeps/unix/sysv/linux/nds32/dl-static.c create mode 100644 sysdeps/unix/sysv/linux/nds32/ldconfig.h create mode 100644 sysdeps/unix/sysv/linux/nds32/ldsodefs.h diff --git a/sysdeps/nds32/crti.S b/sysdeps/nds32/crti.S new file mode 100644 index 0000000..662b988 --- /dev/null +++ b/sysdeps/nds32/crti.S @@ -0,0 +1,77 @@ +/* Special .init and .fini section support for Andes nds32. + Copyright (C) 2012-2018 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file with other + programs, and to distribute those programs without any restriction + coming from the use of this file. (The GNU Lesser General Public + License restrictions do apply in other respects; for example, they + cover modification of the file, and distribution when not linked + into another program.) + + Note that people who make modified versions of this file are not + obligated to grant this special exception for their modified + versions; it is their choice whether to do so. The GNU Lesser + General Public License gives permission to release a modified + version without this exception; this exception also makes it + possible to release a modified version which carries forward this + exception. + + 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 + . */ + +/* crti.S puts a function prologue at the beginning of the .init and + .fini sections and defines global symbols for those addresses, so + they can be called as functions. The symbols _init and _fini are + magic and cause the linker to emit DT_INIT and DT_FINI. */ + +#include +#include + +#ifndef PREINIT_FUNCTION +# define PREINIT_FUNCTION __gmon_start__ +#endif + +#ifndef PREINIT_FUNCTION_WEAK +# define PREINIT_FUNCTION_WEAK 1 +#endif + +#if PREINIT_FUNCTION_WEAK + weak_extern (PREINIT_FUNCTION) +#else + .hidden PREINIT_FUNCTION +#endif + .abi_2 + .pic + .section .init + .align 2 + .globl _init + .type _init, @function +_init: + smw.adm $sp, [$sp], $sp, 6 + sethi $gp, hi20(_GLOBAL_OFFSET_TABLE_ - 8) + ori $gp, $gp, lo12(_GLOBAL_OFFSET_TABLE_ - 4) + add5.pc $gp + la $r0, PREINIT_FUNCTION@GOT + jralnez $r0 + + .section .fini + .align 2 + .globl _fini + .type _fini, @function +_fini: + smw.adm $sp, [$sp], $sp, 6 + GET_GTABLE ($gp) diff --git a/sysdeps/nds32/crtn.S b/sysdeps/nds32/crtn.S new file mode 100644 index 0000000..073d5b4 --- /dev/null +++ b/sysdeps/nds32/crtn.S @@ -0,0 +1,53 @@ +/* Special .init and .fini section support for Andes nds32. + Copyright (C) 2012-2018 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file with other + programs, and to distribute those programs without any restriction + coming from the use of this file. (The GNU Lesser General Public + License restrictions do apply in other respects; for example, they + cover modification of the file, and distribution when not linked + into another program.) + + Note that people who make modified versions of this file are not + obligated to grant this special exception for their modified + versions; it is their choice whether to do so. The GNU Lesser + General Public License gives permission to release a modified + version without this exception; this exception also makes it + possible to release a modified version which carries forward this + exception. + + 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 + . */ + +/* crtn.S puts function epilogues in the .init and .fini sections + corresponding to the prologues in crti.S. */ + + .abi_2 + .pic + .section .init + + lmw.bim $sp, [$sp], $sp, 6 + .hint_func_args 63 + ret + + .section .fini + + lmw.bim $sp, [$sp], $sp, 6 + .hint_func_args 63 + ret + + .weak __gmon_start__ diff --git a/sysdeps/nds32/dl-machine.h b/sysdeps/nds32/dl-machine.h new file mode 100644 index 0000000..0e60019 --- /dev/null +++ b/sysdeps/nds32/dl-machine.h @@ -0,0 +1,410 @@ +/* Machine-dependent ELF dynamic relocation inline functions, Andes nds32 version. + Copyright (C) 2013-2014 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 "NDS32" + +#include +#include +#include + +/* Return nonzero iff ELF header is compatible with the running host. */ +static inline int __attribute__ ((unused)) +elf_machine_matches_host(const ElfW(Ehdr) *ehdr) +{ + return ehdr->e_machine == EM_NDS32; +} + + +/* Return the link-time address of _DYNAMIC. Conveniently, this is the + first element of the GOT, a special entry that is never relocated. */ +static inline ElfW(Addr) __attribute__ ((unused, const)) +elf_machine_dynamic (void) +{ + /* This produces a GOTOFF reloc that resolves to some offset at link time, so in + fact just loads from the GOT register directly. By doing it without + an asm we can let the compiler choose any register. */ + extern const ElfW(Addr) _GLOBAL_OFFSET_TABLE_[] attribute_hidden; + return _GLOBAL_OFFSET_TABLE_[0]; +} + +/* Return the run-time load address of the shared object. */ +static inline ElfW(Addr) __attribute__ ((unused)) +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. */ + extern ElfW(Dyn) bygotoff[] asm ("_DYNAMIC") attribute_hidden; + return (ElfW(Addr)) &bygotoff - elf_machine_dynamic (); +} + + + +/* 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, int lazy, int profile) +{ + + if (l->l_info[DT_JMPREL] && lazy) + { + ElfW(Addr) *got; + extern void _dl_runtime_resolve (ElfW(Word)) attribute_hidden; + extern void _dl_runtime_profile (ElfW(Word)) attribute_hidden; + /* The GOT entries for functions in the PLT have not yet been filled + in. Their initial contents will arrange when called to push an + offset into the .rel.plt section, push _GLOBAL_OFFSET_TABLE_[1], + and then jump to _GLOBAL_OFFSET_TABLE[2]. */ + got = (ElfW(Addr) *) D_PTR (l, l_info[DT_PLTGOT]); + /* If a library is prelinked but we have to relocate anyway, + we have to be able to undo the prelinking of .got.plt. + The prelinker saved us here address of .plt + 0x28. */ + if (got[1]) + { + l->l_mach.plt = got[1] + l->l_addr; + l->l_mach.gotplt = (ElfW(Addr)) &got[3]; + } + got[1] = (ElfW(Addr)) l; /* Identify this shared object. */ + + /* The got[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 (__builtin_expect (profile, 0)) + { + got[2] = (ElfW(Addr)) &_dl_runtime_profile; + + if (GLRO(dl_profile) != NULL && _dl_name_match_p (GLRO(dl_profile), l)) + /* This is the object we are looking for. Say that we really + want profiling and the timers are started. */ + GL(dl_profile_map) = l; + } + else + /* 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. */ + got[2] = (ElfW(Addr)) &_dl_runtime_resolve; + } + + return lazy; +} + +/* Initial entry point code for the dynamic linker. + The C function `_dl_start' is the real entry point; + its return value is the user program's entry point. */ +#define RTLD_START asm (" \ + .text \n\ + .globl _start \n\ + .align 4 \n\ +_start: \n\ + /* We are PIC code, so get global offset table. */ \n\ + mfusr $r15, $PC \n\ + sethi $gp, HI20(_GLOBAL_OFFSET_TABLE_ + 4) \n\ + ori $gp, $gp, LO12(_GLOBAL_OFFSET_TABLE_ + 8) \n\ + add $gp, $r15, $gp \n\ + \n\ + /* At start time, all the args are on the stack. */ \n\ + addi $r0, $sp, 0 \n\ + bal _dl_start@PLT \n\ + /* Save user entry point in $r6 which is callee saved. */ \n\ + addi $r6, $r0, 0 \n\ + /* See if we were run as a command with the executable file \n\ + name as an extra leading argument. \n\ + skip these arguments. */ \n\ + l.w $r2, _dl_skip_args@GOTOFF /* Args to skip. */ \n\ + bnez $r2, 2f \n\ + /* Prepare args to call _dl_init. */ \n\ + addi $r2, $sp, 4 /* argv. */ \n\ +1: \n\ + l.w $r0, _rtld_local@GOTOFF \n\ + lwi $r1, [$sp+0] /* argc. */ \n\ + /* envp =sp +argc * 4 + 8. */ \n\ + slli $r3, $r1, 2 \n\ + addi $r3, $r3, 8 \n\ + add $r3, $r3, $sp /* envp. */ \n\ + bal _dl_init@PLT \n\ + \n\ + /* Load address of _dl_fini finalizer function. */ \n\ + la $r5, _dl_fini@GOTOFF \n\ + /* Jump to the user_s entry point. */ \n\ + jr $r6 \n\ +2: \n\ + lwi $r0, [$sp+0] /* Original argc. */ \n\ + /* Offset for new $sp. */ \n\ + slli $r1, $r2, 2 \n\ + /* Adjust sp to skip args. */ \n\ + add $sp, $sp, $r1 \n\ + sub $r0, $r0, $r2 /* Set new argc. */ \n\ + swi $r0, [$sp+0] /* Save new argc. */ \n\ + andi $r0, $sp, 7 \n\ + beqz $r0, 1b \n\ + \n\ + /* Make stack 8-byte aligned. */ \n\ + bitci $sp, $sp, 7 \n\ + move $r2, $sp \n\ +3: /* argc and argv. */ \n\ + lwi $r0, [$r2+4] \n\ + smw.bim $r0,[$r2],$r0,#0 \n\ + bnez $r0, 3b \n\ + \n\ +3: /* envp. */ \n\ + lwi $r0, [$r2+4] \n\ + smw.bim $r0,[$r2],$r0,#0 \n\ + bnez $r0, 3b \n\ + \n\ +3: /* auxv. */ \n\ + lmw.ai $r0,[$r2],$r1,#0 \n\ + smw.bim $r0,[$r2],$r1,#0 \n\ + bnez $r0, 3b \n\ + \n\ + /* Update _dl_argv. */ \n\ + addi $r2, $sp, 4 \n\ + s.w $r2, _dl_argv@GOTOFF /* Args to skip. */ \n\ + j 1b \n\ + .previous \n\ +"); + +# define elf_machine_type_class(type) \ + (((((type) == R_NDS32_JMP_SLOT) \ + || ((type)== R_NDS32_TLS_TPOFF) \ + || ((type)== R_NDS32_TLS_DESC)) * ELF_RTYPE_CLASS_PLT) \ + | (((type) == R_NDS32_COPY) * ELF_RTYPE_CLASS_COPY) \ + | (((type) == R_NDS32_GLOB_DAT) * ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA)) + + +/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */ +#define ELF_MACHINE_JMP_SLOT R_NDS32_JMP_SLOT + +/* nds32 uses ElfW(Rela) no ElfW(Rel) */ +#define ELF_MACHINE_NO_REL 1 +#define ELF_MACHINE_NO_RELA 0 + +/* 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; +} + +/* Fixup a PLT entry to bounce directly to the function at VALUE. */ +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; +} + +static inline ElfW(Addr) +elf_machine_plt_value (struct link_map *map, const ElfW(Rela) *reloc, + ElfW(Addr) value) +{ + return value + reloc->r_addend ; +} + +/* Names of the architecture-specific auditing callback functions. */ +#define ARCH_LA_PLTENTER nds32_gnu_pltenter +#define ARCH_LA_PLTEXIT nds32_gnu_pltexit + +#endif /* dl_machine_h */ + + +#ifdef RESOLVE_MAP + +# define COPY_UNALIGNED_WORD(swp, twp) \ + { \ + unsigned int __tmp = __builtin_nds32_unaligned_load_w (swp); \ + __builtin_nds32_unaligned_store_w (twp, __tmp); \ + } +/* Perform the relocation specified by RELOC and SYM (which is fully resolved). + MAP is the object containing the reloc. */ + +auto inline void +elf_machine_rela (struct link_map *map, const ElfW(Rela) *reloc, + const ElfW(Sym) *sym, const struct r_found_version *version, + void *const reloc_addr_arg, int skip_ifunc) +{ + + ElfW(Addr) *const reloc_addr = reloc_addr_arg; + const unsigned int r_type = ELF32_R_TYPE (reloc->r_info); + ElfW(Addr) value; + +# if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC + if (__builtin_expect (r_type == R_NDS32_RELATIVE, 0)) + { +# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC + /* This is defined in rtld.c, but nowhere in the static libc.a; + make the reference weak so static programs can still link. + This declaration cannot be done when compiling rtld.c + (i.e. #ifdef RTLD_BOOTSTRAP) because rtld.c contains the + common defn for _dl_rtld_map, which is incompatible with a + weak decl in the same file. */ +# ifndef SHARED + weak_extern (_dl_rtld_map); +# endif + if (map != &GL(dl_rtld_map)) /* Already done in rtld itself. */ +# endif + *reloc_addr = map->l_addr + reloc->r_addend; + } +# endif + else if (__builtin_expect (r_type == R_NDS32_NONE, 0)) + return; + else + { + const ElfW(Sym) *const refsym = sym; + struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type); + value = sym_map == NULL ? 0 : sym_map->l_addr + sym->st_value + reloc->r_addend; + switch (r_type) + { + case R_NDS32_COPY: + if (sym == NULL) + /* This can happen in trace mode if an object could not be + found. */ + break; + if (sym->st_size > refsym->st_size + || (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; + case R_NDS32_GLOB_DAT: + case R_NDS32_JMP_SLOT: + /* These addresses are always aligned. */ + *reloc_addr = value; + break; + case R_NDS32_32_RELA: + COPY_UNALIGNED_WORD (&value, reloc_addr); + break; + case R_NDS32_TLS_TPOFF: + { +# ifdef RTLD_BOOTSTRAP + *reloc_addr = map->l_tls_offset + sym->st_value + reloc->r_addend; +# else + if (sym != NULL) + { + CHECK_STATIC_TLS (map, sym_map); + *reloc_addr = sym_map->l_tls_offset + sym->st_value + reloc->r_addend; + } + else + _dl_error_printf ("sym is NULL in R_NDS32_TLS_TPOFF\n"); +# endif + } + break; + + case R_NDS32_TLS_DESC: + { + struct tlsdesc volatile *td = + (struct tlsdesc volatile *)reloc_addr; +# ifndef RTLD_BOOTSTRAP + if(!sym) + { + td->argument.value = reloc->r_addend; + td->entry = _dl_tlsdesc_undefweak; + } + else +# endif + { + value=sym->st_value + reloc->r_addend; +# ifndef RTLD_BOOTSTRAP +# ifndef SHARED + CHECK_STATIC_TLS (map, sym_map); +# else + if (!TRY_STATIC_TLS (map, sym_map)) + { + td->argument.pointer = _dl_make_tlsdesc_dynamic(sym_map, value); + td->entry = _dl_tlsdesc_dynamic; + } + else +# endif +# endif + { + td->argument.value = value + sym_map->l_tls_offset; + td->entry = _dl_tlsdesc_return; + } + } + } + break; + + default: + _dl_reloc_bad_type (map, r_type, 0); + break; + } + } +} + +auto inline void +__attribute__ ((always_inline)) +elf_machine_rela_relative (ElfW(Addr) l_addr, const ElfW(Rela) *reloc, + void *const reloc_addr_arg) +{ + ElfW(Addr) value; + + if (reloc->r_addend) + value = l_addr + reloc->r_addend; + else + { + COPY_UNALIGNED_WORD (reloc_addr_arg, &value); + value += l_addr; + } + COPY_UNALIGNED_WORD (&value, reloc_addr_arg); + +# undef COPY_UNALIGNED_WORD +} + +auto inline void +__attribute__ ((always_inline)) +elf_machine_lazy_rel (struct link_map *map, + ElfW(Addr) l_addr, const ElfW(Rela) *reloc, int skip_ifunc) +{ + ElfW(Addr) *const reloc_addr = (void *) (l_addr + reloc->r_offset); + /* Check for unexpected PLT reloc type. */ + if (ELF32_R_TYPE (reloc->r_info) == R_NDS32_JMP_SLOT) + { + if (__builtin_expect (map->l_mach.plt, 0) == 0) + *reloc_addr += l_addr; + else + *reloc_addr = + map->l_mach.plt + + (((ElfW(Addr)) reloc_addr) - map->l_mach.gotplt) * 6; + } + else if (ELF32_R_TYPE (reloc->r_info) == R_NDS32_NONE) { + } + else + _dl_reloc_bad_type (map, ELF32_R_TYPE (reloc->r_info), 1); +} +#endif /* RESOLVE_MAP */ + diff --git a/sysdeps/nds32/dl-sysdep.h b/sysdeps/nds32/dl-sysdep.h new file mode 100644 index 0000000..080acb8 --- /dev/null +++ b/sysdeps/nds32/dl-sysdep.h @@ -0,0 +1,22 @@ +/* System-specific settings for dynamic linker code. Andes nds32 version. + Copyright (C) 2002-2018 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_next + +#define DL_ARGV_NOT_RELRO 1 +#define DL_EXTERN_PROTECTED_DATA diff --git a/sysdeps/nds32/dl-trampoline.S b/sysdeps/nds32/dl-trampoline.S new file mode 100644 index 0000000..9141e6d --- /dev/null +++ b/sysdeps/nds32/dl-trampoline.S @@ -0,0 +1,164 @@ +/* PLT trampolines. Andes nds32 version. + Copyright (C) 2006-2018 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 + +ENTRY(_dl_runtime_resolve) + + /* We get called with: + $lp contains the return address from this call. + $r16 contains offset to target reloc entry. + $r17 contains GOT[1] (identity of taget lib). + $r15 is GOT[2] (starting address of _dl_runtime_resolve). */ + + /* Save arguments $r0 - $r3. */ + smw.adm $r0, [$sp], $r5, 6 + .cfi_adjust_cfa_offset 32 + .cfi_rel_offset lp, 28 + .cfi_rel_offset gp, 24 + + GET_GTABLE ($gp) + + move $r0, $r17 + /* Sizeof (ElfW(Rela)) is 12. */ + slli $r1, $r16, 2 + slli $r16, $r16, 3 + add $r1, $r1, $r16 + addi $r2, $lp, 0 + bal _dl_fixup + /* Save the return. */ + addi $r15, $r0, 0 + + lmw.bim $r0, [$sp], $r5, 6 + .cfi_adjust_cfa_offset -32 + .cfi_restore lp + .cfi_restore gp + + /* Jump to the newly found address. */ + jr $r15 +END(_dl_runtime_resolve) +ENTRY(_dl_runtime_profile) + + /* We get called with: + $lp contains the return address from this call. + $r16 contains offset to target reloc entry. + $r17 contains GOT[1] (identity of taget lib). + $r15 is GOT[2] (starting address of this function). + + Stack layout: + 12 - La_nds32_regs (9 registers). + 4 - Saved two arguments to _dl_profile_fixup. + 0 - framesize returned from pltenter. */ + + /* Save La_nds32_regs arguments: $r0 - $r5, $gp, $lp, $sp. */ + move $r15, $sp + smw.adm $r0, [$r15], $r5, 7 + move $sp, $r15 + .cfi_adjust_cfa_offset 36 + .cfi_rel_offset gp, 24 + .cfi_rel_offset lp, 28 + + GET_GTABLE ($gp) + + addi $r0, $r17, 0 + slli $r1, $r16, 2 + slli $r16, $r16, 3 + add $r1, $r1, $r16 + + smw.adm $r0, [$sp], $r1, 0 + .cfi_adjust_cfa_offset 4 + + xor $r4, $r4, $r4 + push $r4 + + move $r2, $lp + addi $r3, $sp, 12 + move $r4, $sp + + bal _dl_profile_fixup + lw $r2, [$sp] + sw $r0, [$sp] + bgez $r2, 1f + cfi_remember_state + + addi $r15, $sp, 12 + lmw.bim $r0, [$r15], $r5, 7 + .cfi_adjust_cfa_offset -48 + .cfi_restore gp + .cfi_restore lp + lwi $r15, [$sp + (-48)] + + /* Jump to the newly found address. */ + jr $r15 +1: + /* The new frame size is in $r2. + + New stack layout: + 16 - La_nds32_regs (9 registers). + 8 - Saved two arguments to _dl_profile_fixup. + 4 - Saved result of _dl_profile_fixup. + 0 - saved $r6. */ + + cfi_restore_state + push $r6 + + /* Make new frame size 8-byte aligned. */ + bitci $r6, $r2, 7 + + + /* Copy stack argument. */ + sub $r0, $sp, $r6 + addi $r1, $sp, 48 + bal memcpy + + /* Jump to the newly found address. */ + addi $r15, $sp, 16 + lmw.bim $r0, [$r15], $r5, 0 + lwi $r15, [$sp +4] + sub $sp, $sp, $r6 + jral $r15 + add $sp, $sp, $r6 + pop $r6 + cfi_def_cfa_register (sp) + /* New stack layout: + 24 - La_nds32_regs (9 registers). + 16 - Saved two arguments to _dl_profile_fixup. + 12 - Saved result of _dl_profile_fixup. + 8 - one dummy word for stack aligned. + 0 - La_nds32_retval. */ + + /* Push $r0, $r1 for La_nds32_retval. */ + /* Push $r2 for dummy word. */ + smw.adm $r0, [$sp], $r2 + .cfi_adjust_cfa_offset 12 + addi $r15, $sp, 16 + lmw.bim $r0, [$r15], $r1 + addi $r2, $sp, 24 + /* $r3 contains outregs. */ + move $r3, $sp + bal _dl_call_pltexit + + lmw.bim $r0, [$sp], $r1 + addi $r15, $sp, 24 + lmw.bim $r2, [$r15], $r5, 7 + .cfi_adjust_cfa_offset -48 + .cfi_restore gp + .cfi_restore lp + ret +END(_dl_runtime_profile) diff --git a/sysdeps/nds32/ldsodefs.h b/sysdeps/nds32/ldsodefs.h new file mode 100644 index 0000000..b674e79 --- /dev/null +++ b/sysdeps/nds32/ldsodefs.h @@ -0,0 +1,44 @@ +/* Run-time dynamic linker data structures for loaded ELF shared objects. + Copyright (C) 2011-2018 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 _NDS32_LDSODEFS_H +#define _NDS32_LDSODEFS_H 1 + +#include + +struct La_nds32_regs; +struct La_nds32_retval; + +#define ARCH_PLTENTER_MEMBERS \ + ElfW(Addr) (*nds32_gnu_pltenter) (ElfW(Sym) *, unsigned int, \ + uintptr_t *, uintptr_t *, \ + struct La_nds32_regs *, \ + unsigned int *, const char *name, \ + long int *framesizep) + +#define ARCH_PLTEXIT_MEMBERS \ + unsigned int (*nds32_gnu_pltexit) (ElfW(Sym) *, unsigned int, \ + uintptr_t *, uintptr_t *, \ + const struct La_nds32_regs *, \ + struct La_nds32_retval *, \ + const char *) + +#include_next + +#endif /* nds32/ldsodefs.h */ diff --git a/sysdeps/nds32/start.S b/sysdeps/nds32/start.S new file mode 100644 index 0000000..3952736 --- /dev/null +++ b/sysdeps/nds32/start.S @@ -0,0 +1,124 @@ +/* Startup code compliant to the ELF nds32 ABI. + Copyright (C) 1995-2018 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. + + In addition to the permissions in the GNU Lesser General Public + License, the Free Software Foundation gives you unlimited + permission to link the compiled version of this file with other + programs, and to distribute those programs without any restriction + coming from the use of this file. (The GNU Lesser General Public + License restrictions do apply in other respects; for example, they + cover modification of the file, and distribution when not linked + into another program.) + + Note that people who make modified versions of this file are not + obligated to grant this special exception for their modified + versions; it is their choice whether to do so. The GNU Lesser + General Public License gives permission to release a modified + version without this exception; this exception also makes it + possible to release a modified version which carries forward this + exception. + + 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 is the canonical entry point, usually the first thing in the text + segment. + + Note that the code in the .init section has already been run. + This includes _init and _libc_init + + + At this entry point, most registers' values are unspecified, except: + + $r5 Contains a function pointer to be registered with `atexit'. + This is how the dynamic linker arranges to have DT_FINI + functions called for shared libraries that have been loaded + before this code runs. + + 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 +*/ +#include + .text + .align 4 + .globl _start + .type _start, @function +#ifdef SHARED + .pic +#endif +_start: + /* clear FP. */ + movi $fp, 0 + /* $r1 = argc. */ + lwi $r1, [$sp + 0] + /* $r2 = argv. */ + addi $r2, $sp, 4 + + /* align sp to 8-byte boundary. */ + movi $r0, -8 + and $sp, $sp, $r0 + /* $r6 = stack top. */ + addi $r6, $sp, 0 + +#ifdef SHARED + /* set $gp register. */ + GET_GTABLE ($gp) + + la $r3, __libc_csu_init@GOTOFF + la $r4, __libc_csu_fini@GOTOFF + la $r0, main@GOT + + /* push everything to stack. + $r5 is rtld_fini, $r7 is used to keep stack align. */ + pushm $r0, $r7 + + /* now start it up. */ + bal __libc_start_main@PLT + + /* should never get here. */ + bal abort@PLT +#else + /* init $gp for small data access. */ + la $gp, _SDA_BASE_ + + la $r3, __libc_csu_init + la $r4, __libc_csu_fini + la $r0, main + + /* push everything to stack, $r5 is rtld_fini and $r7 is garbage */ + pushm $r0, $r7 + + /* now start it up */ + bal __libc_start_main + + /* should never get here */ + bal abort +#endif + + ret + + /* 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/unix/sysv/linux/nds32/dl-static.c b/sysdeps/unix/sysv/linux/nds32/dl-static.c new file mode 100644 index 0000000..2e1608a --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/dl-static.c @@ -0,0 +1,84 @@ +/* Variable initialization, Andes nds32 version. + Copyright (C) 2001-2018 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 + +#ifdef SHARED + +void +_dl_var_init (void *array[]) +{ + /* It has to match "variables" below. */ + enum + { + DL_PAGESIZE = 0 + }; + + GLRO(dl_pagesize) = *((size_t *) array[DL_PAGESIZE]); +} + +#else + +static void *variables[] = +{ + &GLRO(dl_pagesize) +}; + +static void +_dl_unprotect_relro (struct link_map *l) +{ + ElfW(Addr) start = ((l->l_addr + l->l_relro_addr) + & ~(GLRO(dl_pagesize) - 1)); + ElfW(Addr) end = ((l->l_addr + l->l_relro_addr + l->l_relro_size) + & ~(GLRO(dl_pagesize) - 1)); + + if (start != end) + __mprotect ((void *) start, end - start, PROT_READ | PROT_WRITE); +} + +void +_dl_static_init (struct link_map *l) +{ + struct link_map *rtld_map = l; + struct r_scope_elem **scope; + const ElfW(Sym) *ref = NULL; + lookup_t loadbase; + void (*f) (void *[]); + size_t i; + + loadbase = _dl_lookup_symbol_x ("_dl_var_init", l, &ref, l->l_local_scope, + NULL, 0, 1, NULL); + + for (scope = l->l_local_scope; *scope != NULL; scope++) + for (i = 0; i < (*scope)->r_nlist; i++) + if ((*scope)->r_list[i] == loadbase) + { + rtld_map = (*scope)->r_list[i]; + break; + } + + if (ref != NULL) + { + f = (void (*) (void *[])) DL_SYMBOL_ADDRESS (loadbase, ref); + _dl_unprotect_relro (rtld_map); + f (variables); + _dl_protect_relro (rtld_map); + } +} + +#endif diff --git a/sysdeps/unix/sysv/linux/nds32/ldconfig.h b/sysdeps/unix/sysv/linux/nds32/ldconfig.h new file mode 100644 index 0000000..b99d034 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/ldconfig.h @@ -0,0 +1,27 @@ +/* ldconfig default paths and libraries, Andes Linux/nds32 version. + Copyright (C) 2001-2018 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 SYSDEP_KNOWN_INTERPRETER_NAMES \ + { "ld-linux-nds32.so.1", FLAG_ELF_LIBC6 } + +#define SYSDEP_KNOWN_LIBRARY_NAMES \ + { "libc.so.6", FLAG_ELF_LIBC6 }, \ + { "libm.so.6", FLAG_ELF_LIBC6 }, diff --git a/sysdeps/unix/sysv/linux/nds32/ldsodefs.h b/sysdeps/unix/sysv/linux/nds32/ldsodefs.h new file mode 100644 index 0000000..30e868e --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/ldsodefs.h @@ -0,0 +1,32 @@ +/* Andes nds32 dynamic linker data structures for loaded ELF shared objects. + Copyright (C) 2001-2018 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 _LDSODEFS_H + +/* Get the real definitions. */ +#include_next + +/* Now define our stuff. */ + +/* We need special support to initialize DSO loaded for statically linked + binaries. */ +extern void _dl_static_init (struct link_map *map); +#undef DL_STATIC_INIT +#define DL_STATIC_INIT(map) _dl_static_init (map) + +#endif /* ldsodefs.h */ From patchwork Sun May 6 14:41:19 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vincent Chen X-Patchwork-Id: 909318 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=sourceware.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=libc-alpha-return-92067-incoming=patchwork.ozlabs.org@sourceware.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=andestech.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.b="V4iijD2t"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 40f7lS6GZCz9s0q for ; Mon, 7 May 2018 00:43:00 +1000 (AEST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-type; q=dns; s=default; b=k3P7G hHORmIETQyvkQC+/ZnGw/apUtZyPSRDX1858aJ80HZsNav3iyNJKuM5kyUyCny5Y UHY1EM2hblgGj3f2xwDPY8AECUzAbffl4p3xad/OQr+k8F9Op5zBtIidP20zjtjQ AlPJbPEKbz5mDmEynd9veAsi6U0WyPkgIiN2ks= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-type; s=default; bh=6cnOANlL7fc WsLegtOKbYMKUc/w=; b=V4iijD2td59SSjqeOHu+0+Jcny9UW98/39XKo8Zvt9j 7bwUe6uVcA43gPB0q+yJJNfaV173Bcw/DNNG9RiVCSq7vk3eXIF4jP5GJBSPkXoN /LzcVfsZyiCUZj9mFDdSm7RxYfvck89/soRerpg3T6FQNeBfk9R0FmFGYx8k+MFI = Received: (qmail 35191 invoked by alias); 6 May 2018 14:42:19 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 35075 invoked by uid 89); 6 May 2018 14:42:18 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.8 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.2 spammy=cosh, sincos, Real, causing X-HELO: ATCSQR.andestech.com From: vincentc To: CC: , , vincentc Subject: [PATCH 05/11] nds32: Generic and soft-fp Routines Date: Sun, 6 May 2018 22:41:19 +0800 Message-ID: <1525617685-32083-6-git-send-email-vincentc@andestech.com> In-Reply-To: <1525617685-32083-1-git-send-email-vincentc@andestech.com> References: <1525617685-32083-1-git-send-email-vincentc@andestech.com> MIME-Version: 1.0 X-DNSRBL: X-MAIL: ATCSQR.andestech.com w46EYFZA047161 This patch contains the miscellaneous math headers and ulps file for Andes nds32 port. --- sysdeps/nds32/bits/fenv.h | 49 ++++ sysdeps/nds32/math-tests.h | 29 +++ sysdeps/nds32/math_private.h | 52 +++++ sysdeps/nds32/nofpu/libm-test-ulps | 380 ++++++++++++++++++++++++++++++++ sysdeps/nds32/nofpu/libm-test-ulps-name | 1 + sysdeps/nds32/sfp-machine.h | 69 ++++++ 6 files changed, 580 insertions(+) create mode 100644 sysdeps/nds32/bits/fenv.h create mode 100644 sysdeps/nds32/math-tests.h create mode 100644 sysdeps/nds32/math_private.h create mode 100644 sysdeps/nds32/nofpu/libm-test-ulps create mode 100644 sysdeps/nds32/nofpu/libm-test-ulps-name create mode 100644 sysdeps/nds32/sfp-machine.h diff --git a/sysdeps/nds32/bits/fenv.h b/sysdeps/nds32/bits/fenv.h new file mode 100644 index 0000000..c3ce648 --- /dev/null +++ b/sysdeps/nds32/bits/fenv.h @@ -0,0 +1,49 @@ +/* Floating point environment, Andes nds32 version. + Copyright (C) 2012-2018 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 FE_ALL_EXCEPT 0 + +enum + { + __FE_UNDEFINED = 0, + + FE_TONEAREST = +#define FE_TONEAREST 1 + FE_TONEAREST, + }; + +/* 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 *) -1) + +#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/nds32/math-tests.h b/sysdeps/nds32/math-tests.h new file mode 100644 index 0000000..f0c2a3b --- /dev/null +++ b/sysdeps/nds32/math-tests.h @@ -0,0 +1,29 @@ +/* Configuration for math tests. Andes nds32 version. + Copyright (C) 2014-2018 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 + . */ + + +/* Current nds32 soft-float does not support exceptions or rounding + modes. */ +# 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) +# define EXCEPTION_TESTS_float 0 +# define EXCEPTION_TESTS_double 0 +# define EXCEPTION_TESTS_long_double 0 + +#include_next diff --git a/sysdeps/nds32/math_private.h b/sysdeps/nds32/math_private.h new file mode 100644 index 0000000..6160237 --- /dev/null +++ b/sysdeps/nds32/math_private.h @@ -0,0 +1,52 @@ +/* Private floating point rounding and exceptions handling. Andes nds32 version. + Copyright (C) 2014-2018 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 NDS32_MATH_PRIVATE_H +#define NDS32_MATH_PRIVATE_H 1 + +/* Suppress use of exceptions here to avoid build errors if the FE_* + macros aren't defined. + + This does mean that some code will silently fail to report exceptions, + set rounding mode as expected, etc., but it allows math code to compile + that otherwise wouldn't (such as math/s_fma.c) and so is valuable. + + We intentionally ignore the "exception" arguments of functions that + take an exception, since we can't even evaluate the argument + without causing a build failure. The extra level of statement + expression wrapping avoids "statement with no effect" warnings. + Since the callers don't check for errors anyway, we just claim + success in every case. + + The overrides for libc_ functions must happen before we include + the generic math_private.h, and the overrides for regular + functions must happen afterwards, to avoid clashing with + the declarations of those functions. */ + +#define libc_fesetround(rnd) ({ 0; }) +#define libc_fetestexcept(exc) ({ 0; }) +#define libc_feholdexcept_setround(env, exc) ({ (void) (env); 0; }) +#define libc_feupdateenv_test(env, exc) ({ (void) (env); 0; }) + +#include_next + +#define feraiseexcept(excepts) ({ 0; }) +#define __feraiseexcept(excepts) ({ 0; }) +#define feclearexcept(exc) ({ 0; }) + +#endif /* nds32/math_private.h. */ diff --git a/sysdeps/nds32/nofpu/libm-test-ulps b/sysdeps/nds32/nofpu/libm-test-ulps new file mode 100644 index 0000000..ba87887 --- /dev/null +++ b/sysdeps/nds32/nofpu/libm-test-ulps @@ -0,0 +1,380 @@ +# Begin of automatic generation + +# Maximal error of functions: +Function: "acos": +float: 1 +ifloat: 1 + +Function: "acosh": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 + +Function: "asin": +float: 1 +ifloat: 1 + +Function: "asinh": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +Function: "atan": +float: 1 +ifloat: 1 + +Function: "atan2": +float: 1 +ifloat: 1 + +Function: "atanh": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 + +Function: "cabs": +double: 1 +idouble: 1 + +Function: Real part of "cacos": +double: 1 +float: 2 +idouble: 1 +ifloat: 2 + +Function: Imaginary part of "cacos": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 + +Function: Real part of "cacosh": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 + +Function: Imaginary part of "cacosh": +double: 1 +float: 2 +idouble: 1 +ifloat: 2 + +Function: "carg": +float: 1 +ifloat: 1 + +Function: Real part of "casin": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +Function: Imaginary part of "casin": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 + +Function: Real part of "casinh": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 + +Function: Imaginary part of "casinh": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +Function: Real part of "catan": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +Function: Imaginary part of "catan": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +Function: Real part of "catanh": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +Function: Imaginary part of "catanh": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +Function: "cbrt": +double: 3 +float: 1 +idouble: 3 +ifloat: 1 + +Function: Real part of "ccos": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +Function: Imaginary part of "ccos": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +Function: Real part of "ccosh": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +Function: Imaginary part of "ccosh": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +Function: Real part of "cexp": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 + +Function: Imaginary part of "cexp": +double: 1 +float: 2 +idouble: 1 +ifloat: 2 + +Function: Real part of "clog": +double: 3 +float: 3 +idouble: 3 +ifloat: 3 + +Function: Imaginary part of "clog": +float: 1 +ifloat: 1 + +Function: Real part of "clog10": +double: 3 +float: 4 +idouble: 4 +ifloat: 4 + +Function: Imaginary part of "clog10": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 + +Function: "cos": +float: 1 +ifloat: 1 + +Function: "cosh": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +Function: Real part of "cpow": +double: 2 +float: 5 +idouble: 2 +ifloat: 5 + +Function: Imaginary part of "cpow": +float: 2 +ifloat: 2 + +Function: Real part of "csin": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +Function: Real part of "csinh": +float: 1 +ifloat: 1 + +Function: Imaginary part of "csinh": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +Function: Real part of "csqrt": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 + +Function: Imaginary part of "csqrt": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 + +Function: Real part of "ctan": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +Function: Imaginary part of "ctan": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 + +Function: Real part of "ctanh": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 + +Function: Imaginary part of "ctanh": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 + +Function: "erf": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +Function: "erfc": +double: 3 +float: 2 +idouble: 3 +ifloat: 2 + +Function: "exp10": +double: 2 +idouble: 2 + +Function: "exp2": +double: 1 +idouble: 1 + +Function: "expm1": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +Function: "gamma": +double: 4 +float: 3 +idouble: 4 +ifloat: 3 + +Function: "hypot": +double: 1 +idouble: 1 + +Function: "j0": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 + +Function: "j1": +double: 1 +float: 2 +idouble: 1 +ifloat: 2 + +Function: "jn": +double: 4 +float: 4 +idouble: 4 +ifloat: 4 + +Function: "lgamma": +double: 4 +float: 3 +idouble: 4 +ifloat: 3 + +Function: "log10": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 + +Function: "log1p": +double: 1 +float: 1 +idouble: 1 +ifloat: 1 + +Function: "log2": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 + +Function: "sin": +float: 1 +ifloat: 1 + +Function: "sincos": +float: 1 +ifloat: 1 + +Function: "sinh": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 + +Function: "tan": +float: 1 +ifloat: 1 + +Function: "tanh": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 + +Function: "tgamma": +double: 5 +float: 4 +idouble: 5 +ifloat: 4 + +Function: "y0": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 + +Function: "y1": +double: 3 +float: 2 +idouble: 3 +ifloat: 2 + +Function: "yn": +double: 3 +float: 3 +idouble: 3 +ifloat: 3 + +# end of automatic generation diff --git a/sysdeps/nds32/nofpu/libm-test-ulps-name b/sysdeps/nds32/nofpu/libm-test-ulps-name new file mode 100644 index 0000000..e136775 --- /dev/null +++ b/sysdeps/nds32/nofpu/libm-test-ulps-name @@ -0,0 +1 @@ +nds32 soft-fp diff --git a/sysdeps/nds32/sfp-machine.h b/sysdeps/nds32/sfp-machine.h new file mode 100644 index 0000000..4907007 --- /dev/null +++ b/sysdeps/nds32/sfp-machine.h @@ -0,0 +1,69 @@ +/* Andes nds32 softfloat definitions + Copyright (C) 2018 Free Software Foundation, Inc. + + This file is part of 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 + +#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) + +#define _FP_TININESS_AFTER_ROUNDING 0 From patchwork Sun May 6 14:41:20 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vincent Chen X-Patchwork-Id: 909319 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=sourceware.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=libc-alpha-return-92068-incoming=patchwork.ozlabs.org@sourceware.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=andestech.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.b="A4E6DtHk"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 40f7lf4tmVz9s34 for ; Mon, 7 May 2018 00:43:10 +1000 (AEST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-type; q=dns; s=default; b=O8U3M 5hBgTLH3mXXlAuQSXHCWwl5ne299RhKM4r1osMEqiyMWnZDxphIUEPfeIzWR5Hvu cHJyoMXmG1DiBROOAxyfmxFLPBadAr+cJ6csGM0edks/tGhKq197UulaN0aWsowi p3bef2EbjF0JzwtTSQdn7aCjrAtf2ShcBHVbYo= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-type; s=default; bh=vGF9mZtXTgj eKjtZRyCcbBrwqtc=; b=A4E6DtHktop7pfzcxuAV6NnuQarUPnQ5bC4UoA1qbhU ahQ99BV06cuQ+Ex2fQ6aB4qOYqthsw8LW7vwGu9YmYFw6JAHnvokAWZzCey31CU7 gREFTe1OO1UaY2Q7eyaJIOVYd6tfgfCfJc8w1D8nIfSWRyencF87DiDHVBrWrHo8 = Received: (qmail 35646 invoked by alias); 6 May 2018 14:42:23 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 35507 invoked by uid 89); 6 May 2018 14:42:22 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.1 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.2 spammy=sem_t X-HELO: ATCSQR.andestech.com From: vincentc To: CC: , , vincentc Subject: [PATCH 06/11] nds32: Atomic and Locking Routines Date: Sun, 6 May 2018 22:41:20 +0800 Message-ID: <1525617685-32083-7-git-send-email-vincentc@andestech.com> In-Reply-To: <1525617685-32083-1-git-send-email-vincentc@andestech.com> References: <1525617685-32083-1-git-send-email-vincentc@andestech.com> MIME-Version: 1.0 X-DNSRBL: X-MAIL: ATCSQR.andestech.com w46EYKBZ047175 All atomic and locking routines on nds32 are implemented in this patch. --- sysdeps/nds32/atomic-machine.h | 163 ++++++++++++++++++++++++++++ sysdeps/nds32/nptl/bits/pthreadtypes-arch.h | 71 ++++++++++++ sysdeps/nds32/nptl/bits/semaphore.h | 32 ++++++ sysdeps/nds32/nptl/pthread-offsets.h | 24 ++++ 4 files changed, 290 insertions(+) create mode 100644 sysdeps/nds32/atomic-machine.h create mode 100644 sysdeps/nds32/nptl/bits/pthreadtypes-arch.h create mode 100644 sysdeps/nds32/nptl/bits/semaphore.h create mode 100644 sysdeps/nds32/nptl/pthread-offsets.h diff --git a/sysdeps/nds32/atomic-machine.h b/sysdeps/nds32/atomic-machine.h new file mode 100644 index 0000000..9866c62 --- /dev/null +++ b/sysdeps/nds32/atomic-machine.h @@ -0,0 +1,163 @@ +/* Atomic machine setting for Andes nds32. + Copyright (C) 2003-2018 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 _NDS32_ATOMIC_MACHINE_H +#define _NDS32_ATOMIC_MACHINE_H 1 + +#include + +typedef int8_t atomic8_t; +typedef int16_t atomic16_t; +typedef int32_t atomic32_t; +typedef int64_t atomic64_t; + +typedef uint8_t uatomic8_t; +typedef uint16_t uatomic16_t; +typedef uint32_t uatomic32_t; +typedef uint64_t uatomic64_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 0 + +void __nds32_link_error (void); + +#ifndef atomic_full_barrier +# define atomic_full_barrier() __asm ("dsb" ::: "memory") +#endif + +/* Atomic exchange (without compare). */ + +#define __arch_exchange_8_int(mem, newval, model) \ + __atomic_exchange_n (mem, newval, model) + +#define __arch_exchange_16_int(mem, newval, model) \ + __atomic_exchange_n (mem, newval, model) + +#define __arch_exchange_32_int(mem, newval, model) \ + __atomic_exchange_n (mem, newval, model) + +#define __arch_exchange_64_int(mem, newval, model) \ + (__nds32_link_error (), (typeof (*mem)) 0) + +#define atomic_exchange_acq(mem, value) \ + __atomic_val_bysize (__arch_exchange, int, mem, value, __ATOMIC_ACQUIRE) + +#define atomic_exchange_rel(mem, value) \ + __atomic_val_bysize (__arch_exchange, int, mem, value, __ATOMIC_RELEASE) + + +/* Compare and exchange. + For all "bool" routines, we return FALSE if exchange succesful. */ + +#define __arch_compare_and_exchange_bool_8_int(mem, newval, oldval, model) \ + ({ \ + typeof (*mem) __oldval = (oldval); \ + (int)!__atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0, \ + model, __ATOMIC_RELAXED); \ + }) + +#define __arch_compare_and_exchange_bool_16_int(mem, newval, oldval, model) \ + ({ \ + typeof (*mem) __oldval = (oldval); \ + (int)!__atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0, \ + model, __ATOMIC_RELAXED); \ + }) + +#define __arch_compare_and_exchange_bool_32_int(mem, newval, oldval, model) \ + ({ \ + typeof (*mem) __oldval = (oldval); \ + (int)!__atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0, \ + model, __ATOMIC_RELAXED); \ + }) + +#define __arch_compare_and_exchange_bool_64_int(mem, newval, oldval, model) \ + ({__nds32_link_error (); (int) 0;}) + +#define __arch_compare_and_exchange_val_8_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_16_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_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) \ + ({__nds32_link_error (); (typeof (*mem)) 0;}) + + +/* Compare and exchange with "acquire" semantics, ie barrier after. */ + +#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) + +/* Compare and exchange with "release" semantics, ie barrier before. */ + +#define atomic_compare_and_exchange_val_rel(mem, new, old) \ + __atomic_val_bysize (__arch_compare_and_exchange_val, int, \ + mem, new, old, __ATOMIC_RELEASE) + +/* Atomically add value and return the previous (unincremented) value. */ + +#define __arch_exchange_and_add_8_int(mem, value, model) \ + __atomic_fetch_add (mem, value, model) + +#define __arch_exchange_and_add_16_int(mem, value, model) \ + __atomic_fetch_add (mem, value, model) + +#define __arch_exchange_and_add_32_int(mem, value, model) \ + __atomic_fetch_add (mem, value, model) + +#define __arch_exchange_and_add_64_int(mem, value, model) \ + (__nds32_link_error (), (typeof (*mem)) 0) + +#define atomic_exchange_and_add_acq(mem, value) \ + __atomic_val_bysize (__arch_exchange_and_add, int, mem, value, \ + __ATOMIC_ACQUIRE) + +#define atomic_exchange_and_add_rel(mem, value) \ + __atomic_val_bysize (__arch_exchange_and_add, int, mem, value, \ + __ATOMIC_RELEASE) +#endif /* nds32/atomic-machine.h*/ diff --git a/sysdeps/nds32/nptl/bits/pthreadtypes-arch.h b/sysdeps/nds32/nptl/bits/pthreadtypes-arch.h new file mode 100644 index 0000000..27b6fae --- /dev/null +++ b/sysdeps/nds32/nptl/bits/pthreadtypes-arch.h @@ -0,0 +1,71 @@ +/* Machine-specific pthread type layouts, Andes nds32 version. + Copyright (C) 2012-2018 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 + +#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 32 +#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8 +#define __SIZEOF_PTHREAD_BARRIER_T 20 +#define __SIZEOF_PTHREAD_BARRIERATTR_T 4 + + + +#define __PTHREAD_COMPAT_PADDING_MID +#define __PTHREAD_COMPAT_PADDING_END +#define __PTHREAD_MUTEX_NUSERS_AFTER_KIND 0 +#define __PTHREAD_MUTEX_USE_UNION 0 +#define __PTHREAD_MUTEX_LOCK_ELISION 0 + + +#define __LOCK_ALIGNMENT +#define __ONCE_ALIGNMENT + +struct __pthread_rwlock_arch_t +{ + unsigned int __readers; + unsigned int __writers; + unsigned int __wrphase_futex; + unsigned int __writers_futex; + unsigned int __pad3; + unsigned int __pad4; +#if __BYTE_ORDER == __BIG_ENDIAN + unsigned char __pad1; + unsigned char __pad2; + unsigned char __shared; + unsigned char __flags; +#else + unsigned char __flags; + unsigned char __shared; + unsigned char __pad1; + unsigned char __pad2; +#endif + int __cur_writer; +}; + +#define __PTHREAD_RWLOCK_ELISION_EXTRA 0 + + +#endif /* bits/pthreadtypes.h */ diff --git a/sysdeps/nds32/nptl/bits/semaphore.h b/sysdeps/nds32/nptl/bits/semaphore.h new file mode 100644 index 0000000..fe6c4a4 --- /dev/null +++ b/sysdeps/nds32/nptl/bits/semaphore.h @@ -0,0 +1,32 @@ +/* Machine-specific POSIX semaphore type layouts, Andes nds32 version. + Copyright (C) 2002-2018 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 _SEMAPHORE_H +# error "Never use directly; include instead." +#endif + +#define __SIZEOF_SEM_T 16 + +/* Value returned if `sem_open' failed. */ +#define SEM_FAILED ((sem_t *) 0) + +typedef union +{ + char __size[__SIZEOF_SEM_T]; + long int __align; +} sem_t; diff --git a/sysdeps/nds32/nptl/pthread-offsets.h b/sysdeps/nds32/nptl/pthread-offsets.h new file mode 100644 index 0000000..5558c75 --- /dev/null +++ b/sysdeps/nds32/nptl/pthread-offsets.h @@ -0,0 +1,24 @@ +/* pthread offsets for Andes nds32. + Copyright (C) 2017-2018 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 __PTHREAD_MUTEX_NUSERS_OFFSET 12 +#define __PTHREAD_MUTEX_KIND_OFFSET 16 +#define __PTHREAD_MUTEX_SPINS_OFFSET 20 +#define __PTHREAD_MUTEX_ELISION_OFFSET 22 +#define __PTHREAD_MUTEX_LIST_OFFSET 24 From patchwork Sun May 6 14:41:21 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vincent Chen X-Patchwork-Id: 909320 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=sourceware.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=libc-alpha-return-92069-incoming=patchwork.ozlabs.org@sourceware.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=andestech.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.b="rzqFQHEA"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 40f7lr31kVz9s0q for ; Mon, 7 May 2018 00:43:20 +1000 (AEST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-type; q=dns; s=default; b=ATfs9 tS1VcDUVxZ72GkDoyemwmhTQp64gLYF7H9bKAofX78bZ4hCOWEeqv1+FzCOiJQEP cXej6iitxu/vWP9LngzGAuXtYHEu5z6Si13AFRLsd4KQa5hwwMZx72nUwwfVU/z+ itOJc0E4W8mpoQOyNpHC7hWkVAj92D+5KrxfLU= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-type; s=default; bh=8gfSe8csASW x/GI+YUtEdb9YJCc=; b=rzqFQHEA0LDOBZoBiLRLah10veGAqhSFY6VGeWjX35+ 3G2GxeKSIT3az1sCUeCv40bcPd/VW3b1qPBtL2vFquOLjoI8tADsqRVii8cZIbMF yJI5l6MT2Z9WEOK7coxkAzthBufoIvoPHXHnVvE50UTj6nmxhn+gPAJ78OglSIsA = Received: (qmail 36458 invoked by alias); 6 May 2018 14:42:31 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 36351 invoked by uid 89); 6 May 2018 14:42:30 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.3 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.2 spammy=pseudo X-HELO: ATCSQR.andestech.com From: vincentc To: CC: , , vincentc Subject: [PATCH 07/11] nds32: Linux Syscall Interface Date: Sun, 6 May 2018 22:41:21 +0800 Message-ID: <1525617685-32083-8-git-send-email-vincentc@andestech.com> In-Reply-To: <1525617685-32083-1-git-send-email-vincentc@andestech.com> References: <1525617685-32083-1-git-send-email-vincentc@andestech.com> MIME-Version: 1.0 X-DNSRBL: X-MAIL: ATCSQR.andestech.com w46EYPhk047193 This patch contains the Linux system call interface, as well as the definitions of a handful of system calls. --- sysdeps/unix/sysv/linux/nds32/arch-fork.h | 27 ++ sysdeps/unix/sysv/linux/nds32/clone.S | 66 +++++ sysdeps/unix/sysv/linux/nds32/profil-counter.h | 31 +++ sysdeps/unix/sysv/linux/nds32/pt-vfork.S | 1 + sysdeps/unix/sysv/linux/nds32/readahead.c | 36 +++ sysdeps/unix/sysv/linux/nds32/syscall.c | 39 +++ sysdeps/unix/sysv/linux/nds32/syscalls.list | 2 + sysdeps/unix/sysv/linux/nds32/sysdep.c | 30 +++ sysdeps/unix/sysv/linux/nds32/sysdep.h | 337 +++++++++++++++++++++++++ 9 files changed, 569 insertions(+) create mode 100644 sysdeps/unix/sysv/linux/nds32/arch-fork.h create mode 100644 sysdeps/unix/sysv/linux/nds32/clone.S create mode 100644 sysdeps/unix/sysv/linux/nds32/profil-counter.h create mode 100644 sysdeps/unix/sysv/linux/nds32/pt-vfork.S create mode 100644 sysdeps/unix/sysv/linux/nds32/readahead.c create mode 100644 sysdeps/unix/sysv/linux/nds32/syscall.c create mode 100644 sysdeps/unix/sysv/linux/nds32/syscalls.list create mode 100644 sysdeps/unix/sysv/linux/nds32/sysdep.c create mode 100644 sysdeps/unix/sysv/linux/nds32/sysdep.h diff --git a/sysdeps/unix/sysv/linux/nds32/arch-fork.h b/sysdeps/unix/sysv/linux/nds32/arch-fork.h new file mode 100644 index 0000000..e86143a --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/arch-fork.h @@ -0,0 +1,27 @@ +/* ARCH_FORK definition for Linux fork implementation, Andes Linux/nds32 version. + Copyright (C) 2002-2018 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 + +#define ARCH_FORK() \ + INLINE_SYSCALL (clone, 5, \ + CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHLD, 0, \ + NULL, NULL, &THREAD_SELF->tid) + diff --git a/sysdeps/unix/sysv/linux/nds32/clone.S b/sysdeps/unix/sysv/linux/nds32/clone.S new file mode 100644 index 0000000..c7ce891 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/clone.S @@ -0,0 +1,66 @@ +/* Wrapper around clone system call, Andes nds32 version. + Copyright (C) 1996-2018 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 + . */ + +/* clone() is even more special than fork() as it mucks with stacks + and invokes a function in the right context after its all over. */ + +#include +#define _ERRNO_H 1 +#include + +/* int clone(int (*fn)(void *), void *child_stack, int flags, void *arg, + void *parent_tidptr, void *tls, void *child_tidptr). */ + +ENTRY(__clone) + /* Sanity check arguments. */ + beqz $r0, 1f + bnez $r1, 2f +1: + movi $r0, -EINVAL +5: + j SYSCALL_ERROR_LABEL +2: + /* Child's $sp will be $r1, push to child's stack only. */ + addi $r1, $r1, -4 + swi.p $r3, [$r1], -4 + swi $r0, [$r1] + + /* Do the system call. */ + move $r0, $r2 + move $r3, $r5 + move $r2, $r4 + lwi $r4, [$sp] + __do_syscall (clone) + + beqz $r0, 4f + bltz $r0, 5b + ret +4: + .cfi_undefined lp + /* Restore the arg for user's function. */ + pop $r1 /* Function pointer. */ + pop $r0 /* Argument pointer. */ + + /* Call the user's function. */ + bral $r1 + + __do_syscall (exit) + +PSEUDO_END (__clone) +libc_hidden_def (__clone) +weak_alias (__clone, clone) diff --git a/sysdeps/unix/sysv/linux/nds32/profil-counter.h b/sysdeps/unix/sysv/linux/nds32/profil-counter.h new file mode 100644 index 0000000..106371a --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/profil-counter.h @@ -0,0 +1,31 @@ +/* Low-level statistical profiling support function, Andes Linux/nds32 version. + Copyright (C) 1996-2018 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 + +static void +__profil_counter (int signo, struct ucontext_t * scp) +{ + profil_count ((void *) GET_PC (scp)); + + /* This is a hack to prevent the compiler from implementing the + * above function call as a sibcall. The sibcall would overwrite + * the signal context. */ + asm volatile (""); +} diff --git a/sysdeps/unix/sysv/linux/nds32/pt-vfork.S b/sysdeps/unix/sysv/linux/nds32/pt-vfork.S new file mode 100644 index 0000000..1cc8931 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/pt-vfork.S @@ -0,0 +1 @@ +/* Not needed. */ diff --git a/sysdeps/unix/sysv/linux/nds32/readahead.c b/sysdeps/unix/sysv/linux/nds32/readahead.c new file mode 100644 index 0000000..5559619 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/readahead.c @@ -0,0 +1,36 @@ +/* Provide kernel hint to read ahead, Andes nds32 version. + Copyright (C) 2002-2018 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + . */ + +#include +#include +#include + +#include +#include + + +ssize_t +__readahead (int fd, off64_t offset, size_t count) +{ + return INLINE_SYSCALL (readahead, 5, fd, 0, + __LONG_LONG_PAIR ((off_t) (offset >> 32), + (off_t) (offset & 0xffffffff)), + count); +} + +weak_alias (__readahead, readahead) diff --git a/sysdeps/unix/sysv/linux/nds32/syscall.c b/sysdeps/unix/sysv/linux/nds32/syscall.c new file mode 100644 index 0000000..77af6bb --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/syscall.c @@ -0,0 +1,39 @@ +/* System call interface, Andes nds32 version. + Copyright (C) 2001-2018 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 +long int syscall (long int __sysno, ...) +{ + + int result; + unsigned long arg1,arg2,arg3,arg4,arg5,arg6; + va_list arg; + va_start (arg, __sysno); + arg1 = va_arg (arg, unsigned long); + arg2 = va_arg (arg, unsigned long); + arg3 = va_arg (arg, unsigned long); + arg4 = va_arg (arg, unsigned long); + arg5 = va_arg (arg, unsigned long); + arg6 = va_arg (arg, unsigned long); + va_end (arg); + __asm__ volatile ( "" ::: "memory" ); + result = INLINE_SYSCALL_NCS(__sysno,6,arg1,arg2,arg3,arg4,arg5,arg6); + return result; +} diff --git a/sysdeps/unix/sysv/linux/nds32/syscalls.list b/sysdeps/unix/sysv/linux/nds32/syscalls.list new file mode 100644 index 0000000..11cd965 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/syscalls.list @@ -0,0 +1,2 @@ +# File name Caller Syscall name Args Strong name +cacheflush - cacheflush i:pii cacheflush diff --git a/sysdeps/unix/sysv/linux/nds32/sysdep.c b/sysdeps/unix/sysv/linux/nds32/sysdep.c new file mode 100644 index 0000000..9bcf642 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/sysdep.c @@ -0,0 +1,30 @@ +/* Stach an error number into errno + Copyright (C) 2011-2018 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 + +/* This routine is jumped to by all the syscall handlers, to stash + an error number into errno. */ +long +__syscall_error (long err) +{ + __set_errno (- err); + return -1; +} diff --git a/sysdeps/unix/sysv/linux/nds32/sysdep.h b/sysdeps/unix/sysv/linux/nds32/sysdep.h new file mode 100644 index 0000000..20a06a4 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/sysdep.h @@ -0,0 +1,337 @@ +/* Assembly macros for Andes nds32. + Copyright (C) 2011-2018 + 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_NDS32_SYSDEP_H +#define _LINUX_NDS32_SYSDEP_H 1 + +#include +#include +#include + +#include + +#include + +/* In order to get __set_errno() definition in INLINE_SYSCALL. */ +#ifndef __ASSEMBLER__ +# include +#endif + +#undef SYS_ify +#define SYS_ify(syscall_name) __NR_##syscall_name + +#ifdef __ASSEMBLER__ + +# define __do_syscall(syscall_name) \ + movi $r15, SYS_ify (syscall_name); \ + syscall 0x0; + +# define ADJUST_GP \ + smw.adm $sp,[$sp],$sp,#0x6; \ + cfi_startproc; \ + .cfi_adjust_cfa_offset 8; \ + .cfi_rel_offset gp, 0; \ + .cfi_rel_offset lp, 4; \ + GET_GTABLE ($gp) + +# define RECOVER_GP \ + lmw.bim $sp,[$sp],$sp,#0x6; \ + .cfi_adjust_cfa_offset -8; \ + .cfi_restore gp; \ + .cfi_restore lp; \ + cfi_endproc; + +# undef PSEUDO +# define PSEUDO(name, syscall_name, args) \ + .align 2; \ + ENTRY(name); \ + __do_syscall (syscall_name); \ + bgez $r0, 2f; \ + sltsi $r1, $r0, -4096; \ + beqz $r1, SYSCALL_ERROR_LABEL; \ + 2: + +# undef PSEUDO_END +# define PSEUDO_END(sym) \ + cfi_endproc; \ + SYSCALL_ERROR_HANDLER \ + cfi_startproc; \ + END(sym) + +/* Performs a system call, not setting errno. */ +# define PSEUDO_NOERRNO(name, syscall_name, args) \ + ENTRY (name); \ + __do_syscall (syscall_name); + +# undef PSEUDO_END_NOERRNO +# define PSEUDO_END_NOERRNO(name) \ + END (name) + +/* Perfroms a system call, returning the error code. */ +# undef PSEUDO_ERRVAL +# define PSEUDO_ERRVAL(name, syscall_name, args) \ + PSEUDO_NOERRNO (name, syscall_name, args) \ + neg $r0, $r0; + +# undef PSEUDO_END_ERRVAL +# define PSEUDO_END_ERRVAL(sym) END (sym) + +# define ret_ERRVAL ret + +# define ret_NOERRNO ret + +# if !IS_IN (libc) +# if RTLD_PRIVATE_ERRNO +# define SYSCALL_ERROR_HANDLER \ +SYSCALL_ERROR_LABEL: \ + ADJUST_GP \ + la $r1, (rtld_errno@GOT); \ + neg $r0, $r0; \ + sw $r0, [$r1]; \ + li $r0, -1; \ + RECOVER_GP \ + ret; +# else +# ifdef PIC +# define SYSCALL_ERROR_HANDLER \ +SYSCALL_ERROR_LABEL: \ + ADJUST_GP \ + neg $r0, $r0; \ + sethi $r15, hi20(errno@GOTTPOFF); \ + ori $r15, $r15, lo12(errno@GOTTPOFF); \ + lw $r15, [$r15 + $gp]; \ + sw $r0, [$r25 + $r15]; \ + li $r0, -1; \ + RECOVER_GP \ + ret; +# else +# define SYSCALL_ERROR_HANDLER \ +SYSCALL_ERROR_LABEL: \ + neg $r0, $r0; \ + sethi $r15, hi20(errno@GOTTPOFF); \ + lwi $r15, [$r15 + lo12(errno@GOTTPOFF)]; \ + sw $r0, [$r25 + $r15]; \ + li $r0, -1; \ + ret; +# endif /* !PIC */ +# endif +# else +# ifdef PIC +# define SYSCALL_ERROR_HANDLER \ +SYSCALL_ERROR_LABEL: \ + ADJUST_GP \ + bal __syscall_error; \ + RECOVER_GP \ + ret; +# else +# define SYSCALL_ERROR_HANDLER \ +SYSCALL_ERROR_LABEL: \ + b __syscall_error; +# endif /* !PIC */ +# endif /* In LIBC */ + +#else + +/* List of system calls which are supported as vsyscalls. */ +# define HAVE_GETTIMEOFDAY_VSYSCALL 1 +# define HAVE_CLOCK_GETRES_VSYSCALL 1 +# define HAVE_CLOCK_GETTIME_VSYSCALL 1 + +# define __issue_syscall(syscall_name) \ +" syscall 0x0;\n" + +/* Define a macro which expands into the inline wrapper code for a system + call. */ +# undef INLINE_SYSCALL +# define INLINE_SYSCALL(name, nr, args...) \ + ({ \ + INTERNAL_SYSCALL_DECL (err); \ + long result_var = INTERNAL_SYSCALL (name, err, nr, args); \ + if (INTERNAL_SYSCALL_ERROR_P (result_var, err)) \ + { \ + __set_errno (INTERNAL_SYSCALL_ERRNO (result_var, err)); \ + result_var = -1 ; \ + } \ + result_var; \ + }) + +# undef INLINE_SYSCALL_NC +# define INLINE_SYSCALL_NCS(name, nr, args...) \ + ({ \ + INTERNAL_SYSCALL_DECL (err); \ + long result_var = INTERNAL_SYSCALL_NCS (name, err, nr, args); \ + if (INTERNAL_SYSCALL_ERROR_P (result_var, err)) \ + { \ + __set_errno (INTERNAL_SYSCALL_ERRNO (result_var, err)); \ + result_var = -1 ; \ + } \ + result_var; \ + }) +# undef INTERNAL_SYSCALL_DECL +# define INTERNAL_SYSCALL_DECL(err) do { } while (0) + +# undef INTERNAL_SYSCALL_ERROR_P +# define INTERNAL_SYSCALL_ERROR_P(val, err) \ + ((unsigned int) (val) >= 0xfffff001u) + +# undef INTERNAL_SYSCALL_ERRNO +# define INTERNAL_SYSCALL_ERRNO(val, err) (-(val)) + +# undef INTERNAL_SYSCALL +# define INTERNAL_SYSCALL(name, err, nr, args...) \ + internal_syscall##nr (__NR_##name, err, args) + +# undef INTERNAL_SYSCALL_NCS +# define INTERNAL_SYSCALL_NCS(syscallno, err, nr, args...) \ + internal_syscall##nr (syscallno, err, args) + +# define internal_syscall0(name, err, dummy...) \ + ({ \ + register long __res asm ("$r0"); \ + register long __num asm ("$r15") = (long) (name); \ + __asm__ volatile ( \ + __issue_syscall (name) \ + : "=r" (__res) \ + : "r" (__num) \ + : __SYSCALL_CLOBBERS); \ + __res; \ + }) + +# define internal_syscall1(name, err, arg1) \ + ({ \ + register long __res asm ("$r0"); \ + register long __num asm ("$r15") = (long) (name); \ + register long __arg1 asm ("$r0") = (long) (arg1); \ + __asm__ volatile ( \ + __issue_syscall (name) \ + : "=r" (__res) \ + : "r" (__num) \ + , "r" (__arg1) \ + : __SYSCALL_CLOBBERS); \ + __res; \ + }) + +# define internal_syscall2(name, err, arg1, arg2) \ + ({ \ + register long __res asm ("$r0"); \ + register long __num asm ("$r15") = (long) (name); \ + register long __arg1 asm ("$r0") = (long) (arg1); \ + register long __arg2 asm ("$r1") = (long) (arg2); \ + __asm__ volatile ( \ + __issue_syscall (name) \ + : "=r" (__res) \ + : "r" (__num) \ + , "r" (__arg1) \ + , "r" (__arg2) \ + : __SYSCALL_CLOBBERS); \ + __res; \ + }) + +# define internal_syscall3(name, err, arg1, arg2, arg3) \ + ({ \ + register long __res asm ("$r0"); \ + register long __num asm ("$r15") = (long) (name); \ + register long __arg1 asm ("$r0") = (long) (arg1); \ + register long __arg2 asm ("$r1") = (long) (arg2); \ + register long __arg3 asm ("$r2") = (long) (arg3); \ + __asm__ volatile ( \ + __issue_syscall (name) \ + : "=r" (__res) \ + : "r" (__num) \ + , "r" (__arg1) \ + , "r" (__arg2) \ + , "r" (__arg3) \ + : __SYSCALL_CLOBBERS); \ + __res; \ + }) + +# define internal_syscall4(name, err, arg1, arg2, arg3, arg4) \ + ({ \ + register long __res asm ("$r0"); \ + register long __num asm ("$r15") = (long) (name); \ + register long __arg1 asm ("$r0") = (long) (arg1); \ + register long __arg2 asm ("$r1") = (long) (arg2); \ + register long __arg3 asm ("$r2") = (long) (arg3); \ + register long __arg4 asm ("$r3") = (long) (arg4); \ + __asm__ volatile ( \ + __issue_syscall (name) \ + : "=r" (__res) \ + : "r" (__num) \ + , "r" (__arg1) \ + , "r" (__arg2) \ + , "r" (__arg3) \ + , "r" (__arg4) \ + : __SYSCALL_CLOBBERS); \ + __res; \ + }) + +# define internal_syscall5(name, err, arg1, arg2, arg3, arg4, arg5) \ + ({ \ + register long __res asm ("$r0"); \ + register long __num asm ("$r15") = (long) (name); \ + register long __arg1 asm ("$r0") = (long) (arg1); \ + register long __arg2 asm ("$r1") = (long) (arg2); \ + register long __arg3 asm ("$r2") = (long) (arg3); \ + register long __arg4 asm ("$r3") = (long) (arg4); \ + register long __arg5 asm ("$r4") = (long) (arg5); \ + __asm__ volatile ( \ + __issue_syscall (name) \ + : "=r" (__res) \ + : "r" (__num) \ + , "r" (__arg1) \ + , "r" (__arg2) \ + , "r" (__arg3) \ + , "r" (__arg4) \ + , "r" (__arg5) \ + : __SYSCALL_CLOBBERS); \ + __res; \ + }) + +# define internal_syscall6(name, err, arg1, arg2, arg3, arg4, arg5, arg6) \ + ({ \ + register long __res asm ("$r0"); \ + register long __num asm ("$r15") = (long) (name); \ + register long __arg1 asm ("$r0") = (long) (arg1); \ + register long __arg2 asm ("$r1") = (long) (arg2); \ + register long __arg3 asm ("$r2") = (long) (arg3); \ + register long __arg4 asm ("$r3") = (long) (arg4); \ + register long __arg5 asm ("$r4") = (long) (arg5); \ + register long __arg6 asm ("$r5") = (long) (arg6); \ + __asm__ volatile ( \ + __issue_syscall (name) \ + : "=r" (__res) \ + : "r" (__num) \ + , "r" (__arg1) \ + , "r" (__arg2) \ + , "r" (__arg3) \ + , "r" (__arg4) \ + , "r" (__arg5) \ + , "r" (__arg6) \ + : __SYSCALL_CLOBBERS); \ + __res; \ + }) + +#define __SYSCALL_CLOBBERS "memory" + +#endif /* !__ASSEMBLER__ */ + +#define PTR_MANGLE(var) (void) (var) +#define PTR_DEMANGLE(var) (void) (var) + +#endif /* linux/nds32/sysdep.h */ From patchwork Sun May 6 14:41:22 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vincent Chen X-Patchwork-Id: 909321 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=sourceware.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=libc-alpha-return-92070-incoming=patchwork.ozlabs.org@sourceware.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=andestech.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.b="xbIcsC80"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 40f7m60cYwz9s0q for ; Mon, 7 May 2018 00:43:33 +1000 (AEST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-type; q=dns; s=default; b=mW0oY doAH3kgF5ovrtQFrvQYzTlA2XaZGda/Wcb6aI0cGcCWHYT/lVXEzhZ9kh81DYJ3c XlUxWTj8LPnzQTFyYSdDDC4w/5+OMPtiLgIL0SdDt09cOAR9lYLjqyKxXET/BMSk PGF+wu82oF3pKft0AH4gyjNzWwhAcjzRULz7GU= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-type; s=default; bh=ALl/H7Ni7EJ AR5aqMOCN+dpy78Q=; b=xbIcsC80fpnaNxkzdQptu0IjL5dA/eABVa/8xgoTnqM C+EbIc4imUlIlrtHTF5J8oDNbpvRRbU6lHDuFCRNON2ttcD0jjPMxg0m3ja3ow0h CBeuBEG2pmeT/JMO17AOSJfBvhEaSFqtihjl+9wuKaTg2YII0lKSkkn0dwMvuU74 = Received: (qmail 37415 invoked by alias); 6 May 2018 14:42:39 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 37326 invoked by uid 89); 6 May 2018 14:42:38 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.4 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.2 spammy=resident, Allocation, Signal, unlock X-HELO: ATCSQR.andestech.com From: vincentc To: CC: , , vincentc Subject: [PATCH 08/11] nds32: Linux ABI Date: Sun, 6 May 2018 22:41:22 +0800 Message-ID: <1525617685-32083-9-git-send-email-vincentc@andestech.com> In-Reply-To: <1525617685-32083-1-git-send-email-vincentc@andestech.com> References: <1525617685-32083-1-git-send-email-vincentc@andestech.com> MIME-Version: 1.0 X-DNSRBL: X-MAIL: ATCSQR.andestech.com w46EYU0h047206 Linux-specific code that is required for maintaining ABI compatibility. This doesn't contain the actual system call interface, that is split out in order to avoid having a patch that's too big. --- sysdeps/unix/sysv/linux/nds32/bits/fcntl.h | 54 ++++++++++ sysdeps/unix/sysv/linux/nds32/bits/mman.h | 36 +++++++ sysdeps/unix/sysv/linux/nds32/bits/shm.h | 102 +++++++++++++++++++ sysdeps/unix/sysv/linux/nds32/getcontext.S | 52 ++++++++++ sysdeps/unix/sysv/linux/nds32/init-first.c | 50 +++++++++ sysdeps/unix/sysv/linux/nds32/ipc_priv.h | 22 ++++ sysdeps/unix/sysv/linux/nds32/kernel-features.h | 29 ++++++ sysdeps/unix/sysv/linux/nds32/kernel_sigaction.h | 30 ++++++ sysdeps/unix/sysv/linux/nds32/libc-vdso.h | 36 +++++++ sysdeps/unix/sysv/linux/nds32/makecontext.c | 57 +++++++++++ sysdeps/unix/sysv/linux/nds32/setcontext.S | 65 ++++++++++++ sysdeps/unix/sysv/linux/nds32/sigcontextinfo.h | 40 ++++++++ sysdeps/unix/sysv/linux/nds32/swapcontext.S | 57 +++++++++++ sysdeps/unix/sysv/linux/nds32/sys/cachectl.h | 34 +++++++ sysdeps/unix/sysv/linux/nds32/sys/procfs.h | 123 +++++++++++++++++++++++ sysdeps/unix/sysv/linux/nds32/sys/ucontext.h | 85 ++++++++++++++++ sysdeps/unix/sysv/linux/nds32/sys/user.h | 26 +++++ sysdeps/unix/sysv/linux/nds32/sysctl.mk | 1 + sysdeps/unix/sysv/linux/nds32/ucontext_i.sym | 25 +++++ sysdeps/unix/sysv/linux/nds32/vfork.S | 46 +++++++++ 20 files changed, 970 insertions(+) create mode 100644 sysdeps/unix/sysv/linux/nds32/bits/fcntl.h create mode 100644 sysdeps/unix/sysv/linux/nds32/bits/mman.h create mode 100644 sysdeps/unix/sysv/linux/nds32/bits/shm.h create mode 100644 sysdeps/unix/sysv/linux/nds32/getcontext.S create mode 100644 sysdeps/unix/sysv/linux/nds32/init-first.c create mode 100644 sysdeps/unix/sysv/linux/nds32/ipc_priv.h create mode 100644 sysdeps/unix/sysv/linux/nds32/kernel-features.h create mode 100644 sysdeps/unix/sysv/linux/nds32/kernel_sigaction.h create mode 100644 sysdeps/unix/sysv/linux/nds32/libc-vdso.h create mode 100644 sysdeps/unix/sysv/linux/nds32/makecontext.c create mode 100644 sysdeps/unix/sysv/linux/nds32/setcontext.S create mode 100644 sysdeps/unix/sysv/linux/nds32/sigcontextinfo.h create mode 100644 sysdeps/unix/sysv/linux/nds32/swapcontext.S create mode 100644 sysdeps/unix/sysv/linux/nds32/sys/cachectl.h create mode 100644 sysdeps/unix/sysv/linux/nds32/sys/procfs.h create mode 100644 sysdeps/unix/sysv/linux/nds32/sys/ucontext.h create mode 100644 sysdeps/unix/sysv/linux/nds32/sys/user.h create mode 100644 sysdeps/unix/sysv/linux/nds32/sysctl.mk create mode 100644 sysdeps/unix/sysv/linux/nds32/ucontext_i.sym create mode 100644 sysdeps/unix/sysv/linux/nds32/vfork.S diff --git a/sysdeps/unix/sysv/linux/nds32/bits/fcntl.h b/sysdeps/unix/sysv/linux/nds32/bits/fcntl.h new file mode 100644 index 0000000..6a4a5b7 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/bits/fcntl.h @@ -0,0 +1,54 @@ +/* O_*, F_*, FD_* bit values for Andes Linux/nds32. + Copyright (C) 2011-2018 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 _FCNTL_H +# error "Never use directly; include instead." +#endif + +#include + +typedef struct flock + { + short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ + short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ +#ifndef __USE_FILE_OFFSET64 + __off_t l_start; /* Offset where the lock begins. */ + __off_t l_len; /* Size of the locked area; zero means until EOF. */ +#else + __off64_t l_start; /* Offset where the lock begins. */ + __off64_t l_len; /* Size of the locked area; zero means until EOF. */ +#endif + __pid_t l_pid; /* Process holding the lock. */ +} flock_t; + +#ifdef __USE_LARGEFILE64 +struct flock64 + { + short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ + short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ + __off64_t l_start; /* Offset where the lock begins. */ + __off64_t l_len; /* Size of the locked area; zero means until EOF. */ + __pid_t l_pid; /* Process holding the lock. */ + }; +#endif + + +/* Include generic Linux declarations. */ +#include + diff --git a/sysdeps/unix/sysv/linux/nds32/bits/mman.h b/sysdeps/unix/sysv/linux/nds32/bits/mman.h new file mode 100644 index 0000000..045be1f --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/bits/mman.h @@ -0,0 +1,36 @@ +/* Definitions for POSIX memory map interface, Andes Linux/nds32 version. + Copyright (C) 1997-2018 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_MMAN_H +# error "Never use directly; include instead." +#endif + +#ifdef __USE_MISC +# define MAP_GROWSDOWN 0x00100 /* stack-like segment. */ +# define MAP_DENYWRITE 0x00800 /* ETXTBSY. */ +# define MAP_EXECUTABLE 0x01000 /* mark it as an executable. */ +# define MAP_LOCKED 0x02000 /* pages are locked. */ +# define MAP_NORESERVE 0x04000 /* don't check for reservations. */ +# define MAP_POPULATE 0x08000 /* populate (prefault) pagetables. */ +# define MAP_NONBLOCK 0x10000 /* do not block on IO. */ +# define MAP_STACK 0x20000 /* Allocation is for a stack. */ +# define MAP_HUGETLB 0x40000 /* Create huge page mapping. */ +#endif + +/* Include generic Linux declarations. */ +#include diff --git a/sysdeps/unix/sysv/linux/nds32/bits/shm.h b/sysdeps/unix/sysv/linux/nds32/bits/shm.h new file mode 100644 index 0000000..fe96fa2 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/bits/shm.h @@ -0,0 +1,102 @@ +/* The definition for POSIX shared memory, Andes nds32 version + Copyright (C) 1995-2018 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_SHM_H +# error "Never include directly; use instead." +#endif + +#include + +/* Permission flag for shmget. */ +#define SHM_R 0400 /* or S_IRUGO from . */ +#define SHM_W 0200 /* or S_IWUGO from . */ + +/* Flags for `shmat'. */ +#define SHM_RDONLY 010000 /* attach read-only else read-write. */ +#define SHM_RND 020000 /* round attach address to SHMLBA. */ +#define SHM_REMAP 040000 /* take-over region on attach. */ +#define SHM_EXEC 0100000 /* execution access. */ + +/* Commands for `shmctl'. */ +#define SHM_LOCK 11 /* lock segment (root only). */ +#define SHM_UNLOCK 12 /* unlock segment (root only). */ + +__BEGIN_DECLS + +/* Segment low boundary address multiple. */ +#define SHMLBA 0x8000 + +/* Type to count number of attaches. */ +typedef unsigned long int shmatt_t; + +/* Data structure describing a shared memory segment. */ +struct shmid_ds + { + struct ipc_perm shm_perm; /* operation permission struct. */ + size_t shm_segsz; /* size of segment in bytes. */ + __time_t shm_atime; /* time of last shmat(). */ + unsigned long int __glibc_reserved1; + __time_t shm_dtime; /* time of last shmdt(). */ + unsigned long int __glibc_reserved2; + __time_t shm_ctime; /* time of last change by shmctl(). */ + unsigned long int __glibc_reserved3; + __pid_t shm_cpid; /* pid of creator. */ + __pid_t shm_lpid; /* pid of last shmop. */ + shmatt_t shm_nattch; /* number of current attaches. */ + unsigned long int __glibc_reserved4; + unsigned long int __glibc_reserved5; + }; + +#ifdef __USE_MISC + +/* ipcs ctl commands. */ +# define SHM_STAT 13 +# define SHM_INFO 14 + +/* shm_mode upper byte flags. */ +# define SHM_DEST 01000 /* segment will be destroyed on last detach. */ +# define SHM_LOCKED 02000 /* segment will not be swapped. */ +# define SHM_HUGETLB 04000 /* segment is mapped via hugetlb. */ +# define SHM_NORESERVE 010000 /* don't check for reservations. */ + +struct shminfo + { + unsigned long int shmmax; + unsigned long int shmmin; + unsigned long int shmmni; + unsigned long int shmseg; + unsigned long int shmall; + unsigned long int __glibc_reserved1; + unsigned long int __glibc_reserved2; + unsigned long int __glibc_reserved3; + unsigned long int __glibc_reserved4; + }; + +struct shm_info + { + int used_ids; + unsigned long int shm_tot; /* total allocated shm. */ + unsigned long int shm_rss; /* total resident shm. */ + unsigned long int shm_swp; /* total swapped shm. */ + unsigned long int swap_attempts; + unsigned long int swap_successes; + }; + +#endif /* __USE_MISC */ + +__END_DECLS diff --git a/sysdeps/unix/sysv/linux/nds32/getcontext.S b/sysdeps/unix/sysv/linux/nds32/getcontext.S new file mode 100644 index 0000000..e0b4c63 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/getcontext.S @@ -0,0 +1,52 @@ +/* Save current context. + Copyright (C) 2009-2018 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" + +/* __getcontext (const ucontext_t *ucp). */ + +ENTRY(__getcontext) + swi $lp, [$r0 + UCONTEXT_PC] + addi $r15, $r0, UCONTEXT_GREGS + xor $r1, $r1, $r1 + smw.bim $r1, [$r15], $r1 + addi $r15, $r15, 20 + smw.bim $r6, [$r15], $r14 + addi $r15, $r15, 4 + smw.bim $r16, [$r15], $r25, #0xf + +/* rt_sigprocmask (SIG_BLOCK, NULL, &ucp->uc_sigmask, _NSIG8). */ + move $r3, _NSIG8 + addi $r2, $r0, UCONTEXT_SIGMASK + movi $r1, 0 + movi $r0, SIG_BLOCK + movi $r15, SYS_ify(rt_sigprocmask) + syscall 0x0 + bnez $r0, 1f + + ret + +1: + j SYSCALL_ERROR_LABEL + +PSEUDO_END(__getcontext) + +weak_alias (__getcontext, getcontext) + diff --git a/sysdeps/unix/sysv/linux/nds32/init-first.c b/sysdeps/unix/sysv/linux/nds32/init-first.c new file mode 100644 index 0000000..0a2b916 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/init-first.c @@ -0,0 +1,50 @@ +/* VDSO initialization. Andes Nds32 version + Copyright (C) 2007-2018 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 + . */ + +#ifdef SHARED +# include +# include + +int (*VDSO_SYMBOL(gettimeofday)) (struct timeval *, void *) attribute_hidden; +int (*VDSO_SYMBOL(clock_getres)) (clockid_t, struct timespec *); +int (*VDSO_SYMBOL(clock_gettime)) (clockid_t, struct timespec *); + +static inline void +_libc_vdso_platform_setup (void) +{ + PREPARE_VERSION (linux4, "LINUX_4", 14921332); + + void *p = _dl_vdso_vsym ("__vdso_gettimeofday", &linux4); + PTR_MANGLE (p); + VDSO_SYMBOL(gettimeofday) = p; + + p = _dl_vdso_vsym ("__vdso_clock_getres", &linux4); + PTR_MANGLE (p); + VDSO_SYMBOL(clock_getres) = p; + + p = _dl_vdso_vsym ("__vdso_clock_gettime", &linux4); + PTR_MANGLE (p); + VDSO_SYMBOL(clock_gettime) = p; + +} + +# define VDSO_SETUP _libc_vdso_platform_setup +#endif /* SHARED */ + +#include diff --git a/sysdeps/unix/sysv/linux/nds32/ipc_priv.h b/sysdeps/unix/sysv/linux/nds32/ipc_priv.h new file mode 100644 index 0000000..e0732b9 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/ipc_priv.h @@ -0,0 +1,22 @@ +/* Old SysV permission definition for Linux, Andes nds32 version. + Copyright (C) 2018 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 /* For __key_t. */ + +#define __IPC_64 0x0 + diff --git a/sysdeps/unix/sysv/linux/nds32/kernel-features.h b/sysdeps/unix/sysv/linux/nds32/kernel-features.h new file mode 100644 index 0000000..c2bbd38 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/kernel-features.h @@ -0,0 +1,29 @@ +/* Set flags signalling availability of kernel features based on given + kernel version number, Andes nds32 version. + Copyright (C) 2006-2018 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_next + + + +/* Define this if your 32-bit syscall API requires 64-bit register + pairs to start with an even-number register. */ +#define __ASSUME_ALIGNED_REGISTER_PAIRS 1 + +/* nds32 fadvise64_64 reorganize the syscall arguments. */ +#define __ASSUME_FADVISE64_64_6ARG 1 diff --git a/sysdeps/unix/sysv/linux/nds32/kernel_sigaction.h b/sysdeps/unix/sysv/linux/nds32/kernel_sigaction.h new file mode 100644 index 0000000..d7fab19 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/kernel_sigaction.h @@ -0,0 +1,30 @@ +/* Define struct old_kernel_sigaction and kernel_sigaction for Andes nds32. + Copyright (C) 2006-2018 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 + . */ + + +struct old_kernel_sigaction { + __sighandler_t k_sa_handler; + unsigned long sa_mask; + unsigned long sa_flags; +}; + +struct kernel_sigaction { + __sighandler_t k_sa_handler; + unsigned long sa_flags; + sigset_t sa_mask; +}; diff --git a/sysdeps/unix/sysv/linux/nds32/libc-vdso.h b/sysdeps/unix/sysv/linux/nds32/libc-vdso.h new file mode 100644 index 0000000..bbc709b --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/libc-vdso.h @@ -0,0 +1,36 @@ +/* VDSO function declaration, Andes nds32 version. + Copyright (C) 2017-2018 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 _LIBC_VDSO_H +#define _LIBC_VDSO_H + +#ifdef SHARED + +# include + +extern int (*VDSO_SYMBOL (gettimeofday)) (struct timeval *, void *) + attribute_hidden; +extern int (*VDSO_SYMBOL (clock_gettime)) (clockid_t, struct timespec *) + attribute_hidden; +extern int (*VDSO_SYMBOL (clock_getres)) (clockid_t, struct timespec *) + attribute_hidden; + +#endif + +#endif /* libc-vdso.h */ diff --git a/sysdeps/unix/sysv/linux/nds32/makecontext.c b/sysdeps/unix/sysv/linux/nds32/makecontext.c new file mode 100644 index 0000000..1be7f54 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/makecontext.c @@ -0,0 +1,57 @@ +/* Create new context, Andes nds32 version. + Copyright (C) 2001-2018 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 + +void +__makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...) +{ + extern void __startcontext (void); + unsigned long int *sp; + unsigned long *regptr; + va_list ap; + int i; + + sp = (unsigned long int *) + ((uintptr_t) ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size); + + /* Allocate stack for 7-th, 8-th, ..., n-th arguments. */ + sp -= argc <= 6 ? 0 : argc - 6; + + /* Keep the stack aligned. */ + sp = (unsigned long int *) (((uintptr_t) sp) & -8L); + + ucp->uc_mcontext.nds32_r6 = (uintptr_t) ucp->uc_link; + ucp->uc_mcontext.nds32_sp = (uintptr_t) sp; + ucp->uc_mcontext.nds32_ipc = (uintptr_t) func; + ucp->uc_mcontext.nds32_lp = (uintptr_t) &__startcontext; + + va_start (ap, argc); + regptr = &ucp->uc_mcontext.nds32_r0; + for (i = 0; i < argc; ++i) + if (i < 6) + *regptr++ = 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/nds32/setcontext.S b/sysdeps/unix/sysv/linux/nds32/setcontext.S new file mode 100644 index 0000000..808cbb6 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/setcontext.S @@ -0,0 +1,65 @@ +/* Set current context. + Copyright (C) 2009-2018 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). */ + +ENTRY(__setcontext) + move $r4, $r0 + +/* sigprocmask (SIG_SETMASK, &ucp->uc_sigmask, NULL, _NSIG8). */ + move $r0, SIG_SETMASK + addi $r1, $r4, UCONTEXT_SIGMASK + movi $r2, 0 + movi $r3, _NSIG8 + movi $r15, SYS_ify(rt_sigprocmask) + syscall SYS_ify(rt_sigprocmask) + bnez $r0, 1f + + move $r0, $r4 + addi $r15, $r0, UCONTEXT_GREGS + 4 + lmw.bim $r1, [$r15], $r14 + addi $r15, $r15, 4 + lmw.bim $r16, [$r15], $r25, #0xf + lwi $r15, [$r0 + UCONTEXT_PC] + lwi $r0, [$r0 + UCONTEXT_GREGS] + jr $r15 +1: + j SYSCALL_ERROR_LABEL +PSEUDO_END(__setcontext) + +weak_alias (__setcontext, setcontext) + + cfi_startproc + cfi_undefined (lp) + nop16 + cfi_endproc +ENTRY (__startcontext) + beqz $r6, 1f + move $r0, $r6 + jal __setcontext +1: + move $r0, 0 + j HIDDEN_JUMPTARGET(exit) +END (__startcontext) + +.hidden __startcontext + diff --git a/sysdeps/unix/sysv/linux/nds32/sigcontextinfo.h b/sysdeps/unix/sysv/linux/nds32/sigcontextinfo.h new file mode 100644 index 0000000..e96e737 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/sigcontextinfo.h @@ -0,0 +1,40 @@ +/* Definitions for signal handling calling conventions, Andes nds32 version. + Copyright (C) 2000-2018 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 SIGCONTEXT siginfo_t *_si, struct ucontext_t * +#define SIGCONTEXT_EXTRA_ARGS _si, +#define GET_PC(ctx) ((void *) (ctx)->uc_mcontext.nds32_ipc) +#define GET_FRAME(ctx) ((void *) (ctx)->uc_mcontext.nds32_fp) +#define GET_STACK(ctx) ((void *) (ctx)->uc_mcontext.nds32_sp) + +#define CALL_SIGHANDLER(handler, signo, ctx) \ + (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx)) + +/* There is no reliable way to get the sigcontext unless we use a + three-argument signal handler. */ +#define __sigaction(sig, act, oact) ({ \ + (act)->sa_flags |= SA_SIGINFO; \ + (__sigaction) (sig, act, oact); \ +}) + +#define sigaction(sig, act, oact) ({ \ + (act)->sa_flags |= SA_SIGINFO; \ + (sigaction) (sig, act, oact); \ +}) diff --git a/sysdeps/unix/sysv/linux/nds32/swapcontext.S b/sysdeps/unix/sysv/linux/nds32/swapcontext.S new file mode 100644 index 0000000..dd4929c --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/swapcontext.S @@ -0,0 +1,57 @@ +/* Save and set current context. + Copyright (C) 2009-2018 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). */ + +ENTRY(__swapcontext) + move $r5, $r1 + swi $lp, [$r0 + UCONTEXT_PC] + addi $r15, $r0, UCONTEXT_GREGS + xor $r1, $r1, $r1 + smw.bim $r1, [$r15], $r1 + addi $r15, $r15, 20 + smw.bim $r6, [$r15], $r14 + addi $r15, $r15, 4 + smw.bim $r16, [$r15], $r25, #0xf + +/* rt_sigprocmask (SIG_SETMASK, &ucp->uc_sigmask, &oucp->uc_sigmask, _NSIG8). */ + move $r3, _NSIG8 + addi $r2, $r0, UCONTEXT_SIGMASK + addi $r1, $r5, UCONTEXT_SIGMASK + move $r0, SIG_SETMASK + movi $r15, SYS_ify(rt_sigprocmask) + syscall SYS_ify(rt_sigprocmask) + bnez $r0, 1f + + move $r0, $r5 + addi $r15, $r5, UCONTEXT_GREGS + 4 + lmw.bim $r1, [$r15], $r14 + addi $r15, $r15, 4 + lmw.bim $r16, [$r15], $r25, #0xf + lwi $r15, [$r0 + UCONTEXT_PC] + lwi $r0, [$r0 + UCONTEXT_GREGS] + jr $r15 + +1: + j SYSCALL_ERROR_LABEL +PSEUDO_END(__swapcontext) + +weak_alias (__swapcontext, swapcontext) diff --git a/sysdeps/unix/sysv/linux/nds32/sys/cachectl.h b/sysdeps/unix/sysv/linux/nds32/sys/cachectl.h new file mode 100644 index 0000000..2f24724 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/sys/cachectl.h @@ -0,0 +1,34 @@ +/* Andes nds32 cache flushing interface + Copyright (C) 2017-2018 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_CACHECTL_H +#define _SYS_CACHECTL_H 1 + +#include + +/* Get the kernel definition for the __op argument. */ +#include + +__BEGIN_DECLS + +extern int cacheflush (void *__addr, const int __end, const int __op) __THROW; + +__END_DECLS + +#endif /* sys/cachectl.h */ diff --git a/sysdeps/unix/sysv/linux/nds32/sys/procfs.h b/sysdeps/unix/sysv/linux/nds32/sys/procfs.h new file mode 100644 index 0000000..06dce6b --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/sys/procfs.h @@ -0,0 +1,123 @@ +/* Core image file related definitions, Andes nds32 version. + Copyright (C) 1996-2018 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 +#define _SYS_PROCFS_H 1 + +/* This is somewhat modelled after the file of the same name on SVR4 + systems. It provides a definition of the core file format for ELF + used on Linux. It doesn't have anything to do with the /proc file + system, even though Linux has one. + + Anyway, the whole purpose of this file is for GDB and GDB only. + Don't read too much into it. Don't use it for anything other than + GDB unless you know what you are doing. */ + +#include +#include +#include +#include + +__BEGIN_DECLS + +/* Type for a general-purpose register. */ +typedef unsigned long elf_greg_t; + +/* And the whole bunch of them. We could have used `struct + user_regs' directly in the typedef, but tradition says that + the register set is an array, which does have some peculiar + semantics, so leave it that way. */ + +#define ELF_NGREG (sizeof(struct user_pt_regs)/sizeof(elf_greg_t)) +typedef elf_greg_t elf_gregset_t[ELF_NGREG]; + +/* Register set for the floating-point registers. */ +typedef struct user_fpregs elf_fpregset_t; + +/* Signal info. */ +struct elf_siginfo + { + int si_signo; /* Signal number. */ + int si_code; /* Extra code. */ + int si_errno; /* Errno. */ + }; + +/* Definitions to generate Intel SVR4-like core files. These mostly + have the same names as the SVR4 types with "elf_" tacked on the + front to prevent clashes with Linux definitions, and the typedef + forms have been avoided. This is mostly like the SVR4 structure, + but more Linuxy, with things that Linux does not support and which + GDB doesn't really use excluded. */ + +struct elf_prstatus + { + struct elf_siginfo pr_info; /* Info associated with signal. */ + short int pr_cursig; /* Current signal. */ + unsigned long int pr_sigpend; /* Set of pending signals. */ + unsigned long int pr_sighold; /* Set of held signals. */ + __pid_t pr_pid; + __pid_t pr_ppid; + __pid_t pr_pgrp; + __pid_t pr_sid; + struct timeval pr_utime; /* User time. */ + struct timeval pr_stime; /* System time. */ + struct timeval pr_cutime; /* Cumulative user time. */ + struct timeval pr_cstime; /* Cumulative system time. */ + elf_gregset_t pr_reg; /* GP registers. */ + int pr_fpvalid; /* True if math copro being used. */ + }; + + +#define ELF_PRARGSZ (80) /* Number of chars for args. */ + +struct elf_prpsinfo + { + char pr_state; /* Numeric process state. */ + char pr_sname; /* Char for pr_state. */ + char pr_zomb; /* Zombie. */ + char pr_nice; /* Nice val. */ + unsigned long int pr_flag; /* Flags. */ + unsigned short int pr_uid; + unsigned short int pr_gid; + int pr_pid, pr_ppid, pr_pgrp, pr_sid; + char pr_fname[16]; /* Filename of executable. */ + char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ + }; + +/* The rest of this file provides the types for emulation of the + Solaris interfaces that should be implemented by + users of libthread_db. */ + +/* Addresses. */ +typedef void *psaddr_t; + +/* Register sets. Linux has different names. */ +typedef elf_gregset_t prgregset_t; +typedef elf_fpregset_t prfpregset_t; + +/* We don't have any differences between processes and threads, + therefore have only one PID type. */ +typedef __pid_t lwpid_t; + +/* Process status and info. In the end we do provide typedefs for them. */ +typedef struct elf_prstatus prstatus_t; +typedef struct elf_prpsinfo prpsinfo_t; + +__END_DECLS + +#endif /* sys/procfs.h */ diff --git a/sysdeps/unix/sysv/linux/nds32/sys/ucontext.h b/sysdeps/unix/sysv/linux/nds32/sys/ucontext.h new file mode 100644 index 0000000..7a853b3 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/sys/ucontext.h @@ -0,0 +1,85 @@ +/* struct ucontext definition, Andes nds32 version. + Copyright (C) 1997-2018 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_UCONTEXT_H +#define _SYS_UCONTEXT_H 1 + +#include +#include +#include + + +#ifdef __USE_MISC +# define __ctx(fld) fld +#else +# define __ctx(fld) __ ## fld +#endif + +/* Context to describe whole processor state. */ + +typedef struct { + unsigned long __ctx(trap_no); + unsigned long __ctx(error_code); + unsigned long __ctx(oldmask); + unsigned long __ctx(nds32_r0); + unsigned long __ctx(nds32_r1); + unsigned long __ctx(nds32_r2); + unsigned long __ctx(nds32_r3); + unsigned long __ctx(nds32_r4); + unsigned long __ctx(nds32_r5); + unsigned long __ctx(nds32_r6); + unsigned long __ctx(nds32_r7); + unsigned long __ctx(nds32_r8); + unsigned long __ctx(nds32_r9); + unsigned long __ctx(nds32_r10); + unsigned long __ctx(nds32_r11); + unsigned long __ctx(nds32_r12); + unsigned long __ctx(nds32_r13); + unsigned long __ctx(nds32_r14); + unsigned long __ctx(nds32_r15); + unsigned long __ctx(nds32_r16); + unsigned long __ctx(nds32_r17); + unsigned long __ctx(nds32_r18); + unsigned long __ctx(nds32_r19); + unsigned long __ctx(nds32_r20); + unsigned long __ctx(nds32_r21); + unsigned long __ctx(nds32_r22); + unsigned long __ctx(nds32_r23); + unsigned long __ctx(nds32_r24); + unsigned long __ctx(nds32_r25); + unsigned long __ctx(nds32_fp); + unsigned long __ctx(nds32_gp); + unsigned long __ctx(nds32_lp); + unsigned long __ctx(nds32_sp); + unsigned long __ctx(nds32_ipc); + unsigned long __ctx(fault_address); + unsigned long __ctx(used_math_flag); + unsigned long __ctx(zol)[3]; +} mcontext_t; + + +/* Userlevel context. */ +typedef struct ucontext_t + { + unsigned long int __ctx(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/nds32/sys/user.h b/sysdeps/unix/sysv/linux/nds32/sys/user.h new file mode 100644 index 0000000..5a4ab70 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/sys/user.h @@ -0,0 +1,26 @@ +/* Copyright (C) 2017-2018 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_USER_H +#define _SYS_USER_H 1 + +#include + +struct user_fpregs +{ +}; +#endif /* sys/user.h */ diff --git a/sysdeps/unix/sysv/linux/nds32/sysctl.mk b/sysdeps/unix/sysv/linux/nds32/sysctl.mk new file mode 100644 index 0000000..cd10656 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/sysctl.mk @@ -0,0 +1 @@ +# nds32 doesn't support sysctl. diff --git a/sysdeps/unix/sysv/linux/nds32/ucontext_i.sym b/sysdeps/unix/sysv/linux/nds32/ucontext_i.sym new file mode 100644 index 0000000..a341805 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/ucontext_i.sym @@ -0,0 +1,25 @@ +#include +#include +#include + +-- + +SIG_BLOCK +SIG_SETMASK + +_NSIG8 (_NSIG / 8) + +-- Offsets of the fields in the ucontext_t structure. +#define ucontext(member) offsetof (ucontext_t, member) +#define mcontext(member) ucontext (uc_mcontext.member) + + +UCONTEXT_GREGS mcontext (nds32_r0) +UCONTEXT_PC mcontext (nds32_ipc) + + +UCONTEXT_FLAGS ucontext (uc_flags) +UCONTEXT_LINK ucontext (uc_link) +UCONTEXT_STACK ucontext (uc_stack) +UCONTEXT_MCONTEXT ucontext (uc_mcontext) +UCONTEXT_SIGMASK ucontext (uc_sigmask) diff --git a/sysdeps/unix/sysv/linux/nds32/vfork.S b/sysdeps/unix/sysv/linux/nds32/vfork.S new file mode 100644 index 0000000..be5060f --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/vfork.S @@ -0,0 +1,46 @@ +/* vfork for Linux, Andes Linux/nds32 version. + Copyright (C) 2005-2018 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 _ERRNO_H 1 +#include + + +ENTRY (__libc_vfork) +#ifdef PIC +.pic +#endif + + movi $r0, #0x4111 /* 0x4111 = CLONE_VM | CLONE_VFORK | SIGCHLD. */ + move $r1, $sp + movi $r15, __NR_clone + syscall #0x0 + bltz $r0, 2f +1: + ret +2: + sltsi $r1, $r0, -4096 + bnez $r1, 1b; + + j SYSCALL_ERROR_LABEL + +PSEUDO_END (__libc_vfork) + +weak_alias (__libc_vfork, vfork) +strong_alias (__libc_vfork, __vfork) +libc_hidden_def (__vfork) From patchwork Sun May 6 14:41:23 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vincent Chen X-Patchwork-Id: 909324 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=sourceware.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=libc-alpha-return-92073-incoming=patchwork.ozlabs.org@sourceware.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=andestech.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.b="U735icb+"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 40f7mk62vvz9s0q for ; Mon, 7 May 2018 00:44:06 +1000 (AEST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-type; q=dns; s=default; b=JJH3P 3bB0EAPFp/mmXOKIq0328HNkUh9kSWqg6Dx/bDzQ26p6hM4Sm0kAsND7UvwcUHsu xOIdNTNd/U7MiNy+hMAOPSo/2Z8SdbKCX/bR9ijPpNUiSoBeC2fWjxnMnzGJTEmn EgxRje5UZglNvkT7coD9oVFNFgRybM1Cx3uKPc= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-type; s=default; bh=H7/uYwyhF8+ 0HKuM8QGi0mwVfs8=; b=U735icb+xSqna0qJ9/6h2twigsV4Gn4mwiA1GQbIoox 6R0MUCKiep88eeAm3kQfkKtX0i+ahCK4zIXrPDUBI0R01gSu6oZP7CKmOayPYbU3 a9RlsDyvfY7QxV/pHO3aBuePHudr4UXuOAzqe3FOYBHY50ESZFBLT2sz56np9CBU = Received: (qmail 38304 invoked by alias); 6 May 2018 14:42:47 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 38171 invoked by uid 89); 6 May 2018 14:42:46 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.0 required=5.0 tests=GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_PASS, TIME_LIMIT_EXCEEDED autolearn=unavailable version=3.3.2 spammy=ulimit, symlink, ftw, tee X-HELO: ATCSQR.andestech.com From: vincentc To: CC: , , vincentc Subject: [PATCH 09/11] nds32: Add ABI list Date: Sun, 6 May 2018 22:41:23 +0800 Message-ID: <1525617685-32083-10-git-send-email-vincentc@andestech.com> In-Reply-To: <1525617685-32083-1-git-send-email-vincentc@andestech.com> References: <1525617685-32083-1-git-send-email-vincentc@andestech.com> MIME-Version: 1.0 X-DNSRBL: X-MAIL: ATCSQR.andestech.com w46EYZVK047220 --- sysdeps/unix/sysv/linux/nds32/c++-types.data | 67 + sysdeps/unix/sysv/linux/nds32/ld.abilist | 10 + .../unix/sysv/linux/nds32/libBrokenLocale.abilist | 2 + sysdeps/unix/sysv/linux/nds32/libanl.abilist | 5 + sysdeps/unix/sysv/linux/nds32/libc.abilist | 2081 ++++++++++++++++++++ sysdeps/unix/sysv/linux/nds32/libcidn.abilist | 0 sysdeps/unix/sysv/linux/nds32/libcrypt.abilist | 8 + sysdeps/unix/sysv/linux/nds32/libdl.abilist | 10 + sysdeps/unix/sysv/linux/nds32/libm.abilist | 730 +++++++ sysdeps/unix/sysv/linux/nds32/libnsl.abilist | 121 ++ .../unix/sysv/linux/nds32/libnss_compat.abilist | 0 sysdeps/unix/sysv/linux/nds32/libnss_db.abilist | 0 sysdeps/unix/sysv/linux/nds32/libnss_dns.abilist | 0 sysdeps/unix/sysv/linux/nds32/libnss_files.abilist | 0 .../unix/sysv/linux/nds32/libnss_hesiod.abilist | 0 sysdeps/unix/sysv/linux/nds32/libnss_nis.abilist | 0 .../unix/sysv/linux/nds32/libnss_nisplus.abilist | 0 sysdeps/unix/sysv/linux/nds32/libpthread.abilist | 217 ++ sysdeps/unix/sysv/linux/nds32/libresolv.abilist | 80 + sysdeps/unix/sysv/linux/nds32/librt.abilist | 36 + sysdeps/unix/sysv/linux/nds32/libthread_db.abilist | 41 + sysdeps/unix/sysv/linux/nds32/libutil.abilist | 7 + 22 files changed, 3415 insertions(+) create mode 100644 sysdeps/unix/sysv/linux/nds32/c++-types.data create mode 100644 sysdeps/unix/sysv/linux/nds32/ld.abilist create mode 100644 sysdeps/unix/sysv/linux/nds32/libBrokenLocale.abilist create mode 100644 sysdeps/unix/sysv/linux/nds32/libanl.abilist create mode 100644 sysdeps/unix/sysv/linux/nds32/libc.abilist create mode 100644 sysdeps/unix/sysv/linux/nds32/libcidn.abilist create mode 100644 sysdeps/unix/sysv/linux/nds32/libcrypt.abilist create mode 100644 sysdeps/unix/sysv/linux/nds32/libdl.abilist create mode 100644 sysdeps/unix/sysv/linux/nds32/libm.abilist create mode 100644 sysdeps/unix/sysv/linux/nds32/libnsl.abilist create mode 100644 sysdeps/unix/sysv/linux/nds32/libnss_compat.abilist create mode 100644 sysdeps/unix/sysv/linux/nds32/libnss_db.abilist create mode 100644 sysdeps/unix/sysv/linux/nds32/libnss_dns.abilist create mode 100644 sysdeps/unix/sysv/linux/nds32/libnss_files.abilist create mode 100644 sysdeps/unix/sysv/linux/nds32/libnss_hesiod.abilist create mode 100644 sysdeps/unix/sysv/linux/nds32/libnss_nis.abilist create mode 100644 sysdeps/unix/sysv/linux/nds32/libnss_nisplus.abilist create mode 100644 sysdeps/unix/sysv/linux/nds32/libpthread.abilist create mode 100644 sysdeps/unix/sysv/linux/nds32/libresolv.abilist create mode 100644 sysdeps/unix/sysv/linux/nds32/librt.abilist create mode 100644 sysdeps/unix/sysv/linux/nds32/libthread_db.abilist create mode 100644 sysdeps/unix/sysv/linux/nds32/libutil.abilist diff --git a/sysdeps/unix/sysv/linux/nds32/c++-types.data b/sysdeps/unix/sysv/linux/nds32/c++-types.data new file mode 100644 index 0000000..303f457 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/c++-types.data @@ -0,0 +1,67 @@ +blkcnt64_t:x +blkcnt_t:l +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:m +fsfilcnt64_t:y +fsfilcnt_t:m +fsid_t:8__fsid_t +gid_t:j +id_t:j +ino64_t:y +ino_t:m +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:l +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:m +sigset_t:10__sigset_t +size_t:j +socklen_t:j +ssize_t:i +suseconds_t:l +time_t:l +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/nds32/ld.abilist b/sysdeps/unix/sysv/linux/nds32/ld.abilist new file mode 100644 index 0000000..d75adca --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/ld.abilist @@ -0,0 +1,10 @@ +GLIBC_2.28 GLIBC_2.28 A +GLIBC_2.28 __libc_stack_end D 0x4 +GLIBC_2.28 __stack_chk_guard D 0x4 +GLIBC_2.28 __tls_get_addr F +GLIBC_2.28 _dl_mcount F +GLIBC_2.28 _r_debug D 0x14 +GLIBC_2.28 calloc F +GLIBC_2.28 free F +GLIBC_2.28 malloc F +GLIBC_2.28 realloc F diff --git a/sysdeps/unix/sysv/linux/nds32/libBrokenLocale.abilist b/sysdeps/unix/sysv/linux/nds32/libBrokenLocale.abilist new file mode 100644 index 0000000..00c6ddd --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/libBrokenLocale.abilist @@ -0,0 +1,2 @@ +GLIBC_2.28 GLIBC_2.28 A +GLIBC_2.28 __ctype_get_mb_cur_max F diff --git a/sysdeps/unix/sysv/linux/nds32/libanl.abilist b/sysdeps/unix/sysv/linux/nds32/libanl.abilist new file mode 100644 index 0000000..2b4bc13 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/libanl.abilist @@ -0,0 +1,5 @@ +GLIBC_2.28 GLIBC_2.28 A +GLIBC_2.28 gai_cancel F +GLIBC_2.28 gai_error F +GLIBC_2.28 gai_suspend F +GLIBC_2.28 getaddrinfo_a F diff --git a/sysdeps/unix/sysv/linux/nds32/libc.abilist b/sysdeps/unix/sysv/linux/nds32/libc.abilist new file mode 100644 index 0000000..ede049a --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/libc.abilist @@ -0,0 +1,2081 @@ +GLIBC_2.28 GLIBC_2.28 A +GLIBC_2.28 _Exit F +GLIBC_2.28 _IO_2_1_stderr_ D 0xa0 +GLIBC_2.28 _IO_2_1_stdin_ D 0xa0 +GLIBC_2.28 _IO_2_1_stdout_ D 0xa0 +GLIBC_2.28 _IO_adjust_column F +GLIBC_2.28 _IO_adjust_wcolumn F +GLIBC_2.28 _IO_default_doallocate F +GLIBC_2.28 _IO_default_finish F +GLIBC_2.28 _IO_default_pbackfail F +GLIBC_2.28 _IO_default_uflow F +GLIBC_2.28 _IO_default_xsgetn F +GLIBC_2.28 _IO_default_xsputn F +GLIBC_2.28 _IO_do_write F +GLIBC_2.28 _IO_doallocbuf F +GLIBC_2.28 _IO_fclose F +GLIBC_2.28 _IO_fdopen F +GLIBC_2.28 _IO_feof F +GLIBC_2.28 _IO_ferror F +GLIBC_2.28 _IO_fflush F +GLIBC_2.28 _IO_fgetpos F +GLIBC_2.28 _IO_fgetpos64 F +GLIBC_2.28 _IO_fgets F +GLIBC_2.28 _IO_file_attach F +GLIBC_2.28 _IO_file_close F +GLIBC_2.28 _IO_file_close_it F +GLIBC_2.28 _IO_file_doallocate F +GLIBC_2.28 _IO_file_finish F +GLIBC_2.28 _IO_file_fopen F +GLIBC_2.28 _IO_file_init F +GLIBC_2.28 _IO_file_jumps D 0x54 +GLIBC_2.28 _IO_file_open F +GLIBC_2.28 _IO_file_overflow F +GLIBC_2.28 _IO_file_read F +GLIBC_2.28 _IO_file_seek F +GLIBC_2.28 _IO_file_seekoff F +GLIBC_2.28 _IO_file_setbuf F +GLIBC_2.28 _IO_file_stat F +GLIBC_2.28 _IO_file_sync F +GLIBC_2.28 _IO_file_underflow F +GLIBC_2.28 _IO_file_write F +GLIBC_2.28 _IO_file_xsputn F +GLIBC_2.28 _IO_flockfile F +GLIBC_2.28 _IO_flush_all F +GLIBC_2.28 _IO_flush_all_linebuffered F +GLIBC_2.28 _IO_fopen F +GLIBC_2.28 _IO_fprintf F +GLIBC_2.28 _IO_fputs F +GLIBC_2.28 _IO_fread F +GLIBC_2.28 _IO_free_backup_area F +GLIBC_2.28 _IO_free_wbackup_area F +GLIBC_2.28 _IO_fsetpos F +GLIBC_2.28 _IO_fsetpos64 F +GLIBC_2.28 _IO_ftell F +GLIBC_2.28 _IO_ftrylockfile F +GLIBC_2.28 _IO_funlockfile F +GLIBC_2.28 _IO_fwrite F +GLIBC_2.28 _IO_getc F +GLIBC_2.28 _IO_getline F +GLIBC_2.28 _IO_getline_info F +GLIBC_2.28 _IO_gets F +GLIBC_2.28 _IO_init F +GLIBC_2.28 _IO_init_marker F +GLIBC_2.28 _IO_init_wmarker F +GLIBC_2.28 _IO_iter_begin F +GLIBC_2.28 _IO_iter_end F +GLIBC_2.28 _IO_iter_file F +GLIBC_2.28 _IO_iter_next F +GLIBC_2.28 _IO_least_wmarker F +GLIBC_2.28 _IO_link_in F +GLIBC_2.28 _IO_list_all D 0x4 +GLIBC_2.28 _IO_list_lock F +GLIBC_2.28 _IO_list_resetlock F +GLIBC_2.28 _IO_list_unlock F +GLIBC_2.28 _IO_marker_delta F +GLIBC_2.28 _IO_marker_difference F +GLIBC_2.28 _IO_padn F +GLIBC_2.28 _IO_peekc_locked F +GLIBC_2.28 _IO_popen F +GLIBC_2.28 _IO_printf F +GLIBC_2.28 _IO_proc_close F +GLIBC_2.28 _IO_proc_open F +GLIBC_2.28 _IO_putc F +GLIBC_2.28 _IO_puts F +GLIBC_2.28 _IO_remove_marker F +GLIBC_2.28 _IO_seekmark F +GLIBC_2.28 _IO_seekoff F +GLIBC_2.28 _IO_seekpos F +GLIBC_2.28 _IO_seekwmark F +GLIBC_2.28 _IO_setb F +GLIBC_2.28 _IO_setbuffer F +GLIBC_2.28 _IO_setvbuf F +GLIBC_2.28 _IO_sgetn F +GLIBC_2.28 _IO_sprintf F +GLIBC_2.28 _IO_sputbackc F +GLIBC_2.28 _IO_sputbackwc F +GLIBC_2.28 _IO_sscanf F +GLIBC_2.28 _IO_str_init_readonly F +GLIBC_2.28 _IO_str_init_static F +GLIBC_2.28 _IO_str_overflow F +GLIBC_2.28 _IO_str_pbackfail F +GLIBC_2.28 _IO_str_seekoff F +GLIBC_2.28 _IO_str_underflow F +GLIBC_2.28 _IO_sungetc F +GLIBC_2.28 _IO_sungetwc F +GLIBC_2.28 _IO_switch_to_get_mode F +GLIBC_2.28 _IO_switch_to_main_wget_area F +GLIBC_2.28 _IO_switch_to_wbackup_area F +GLIBC_2.28 _IO_switch_to_wget_mode F +GLIBC_2.28 _IO_un_link F +GLIBC_2.28 _IO_ungetc F +GLIBC_2.28 _IO_unsave_markers F +GLIBC_2.28 _IO_unsave_wmarkers F +GLIBC_2.28 _IO_vfprintf F +GLIBC_2.28 _IO_vfscanf F +GLIBC_2.28 _IO_vsprintf F +GLIBC_2.28 _IO_wdefault_doallocate F +GLIBC_2.28 _IO_wdefault_finish F +GLIBC_2.28 _IO_wdefault_pbackfail F +GLIBC_2.28 _IO_wdefault_uflow F +GLIBC_2.28 _IO_wdefault_xsgetn F +GLIBC_2.28 _IO_wdefault_xsputn F +GLIBC_2.28 _IO_wdo_write F +GLIBC_2.28 _IO_wdoallocbuf F +GLIBC_2.28 _IO_wfile_jumps D 0x54 +GLIBC_2.28 _IO_wfile_overflow F +GLIBC_2.28 _IO_wfile_seekoff F +GLIBC_2.28 _IO_wfile_sync F +GLIBC_2.28 _IO_wfile_underflow F +GLIBC_2.28 _IO_wfile_xsputn F +GLIBC_2.28 _IO_wmarker_delta F +GLIBC_2.28 _IO_wsetb F +GLIBC_2.28 ___brk_addr D 0x4 +GLIBC_2.28 __adjtimex F +GLIBC_2.28 __after_morecore_hook D 0x4 +GLIBC_2.28 __argz_count F +GLIBC_2.28 __argz_next F +GLIBC_2.28 __argz_stringify F +GLIBC_2.28 __asprintf F +GLIBC_2.28 __asprintf_chk F +GLIBC_2.28 __assert F +GLIBC_2.28 __assert_fail F +GLIBC_2.28 __assert_perror_fail F +GLIBC_2.28 __backtrace F +GLIBC_2.28 __backtrace_symbols F +GLIBC_2.28 __backtrace_symbols_fd F +GLIBC_2.28 __bsd_getpgrp F +GLIBC_2.28 __bzero F +GLIBC_2.28 __check_rhosts_file D 0x4 +GLIBC_2.28 __chk_fail F +GLIBC_2.28 __clone F +GLIBC_2.28 __close F +GLIBC_2.28 __cmsg_nxthdr F +GLIBC_2.28 __confstr_chk F +GLIBC_2.28 __connect F +GLIBC_2.28 __ctype_b_loc F +GLIBC_2.28 __ctype_get_mb_cur_max F +GLIBC_2.28 __ctype_tolower_loc F +GLIBC_2.28 __ctype_toupper_loc F +GLIBC_2.28 __curbrk D 0x4 +GLIBC_2.28 __cxa_at_quick_exit F +GLIBC_2.28 __cxa_atexit F +GLIBC_2.28 __cxa_finalize F +GLIBC_2.28 __cxa_thread_atexit_impl F +GLIBC_2.28 __cyg_profile_func_enter F +GLIBC_2.28 __cyg_profile_func_exit F +GLIBC_2.28 __daylight D 0x4 +GLIBC_2.28 __dcgettext F +GLIBC_2.28 __default_morecore F +GLIBC_2.28 __dgettext F +GLIBC_2.28 __dprintf_chk F +GLIBC_2.28 __dup2 F +GLIBC_2.28 __duplocale F +GLIBC_2.28 __endmntent F +GLIBC_2.28 __environ D 0x4 +GLIBC_2.28 __errno_location F +GLIBC_2.28 __explicit_bzero_chk F +GLIBC_2.28 __fbufsize F +GLIBC_2.28 __fcntl F +GLIBC_2.28 __fdelt_chk F +GLIBC_2.28 __fdelt_warn F +GLIBC_2.28 __ffs F +GLIBC_2.28 __fgets_chk F +GLIBC_2.28 __fgets_unlocked_chk F +GLIBC_2.28 __fgetws_chk F +GLIBC_2.28 __fgetws_unlocked_chk F +GLIBC_2.28 __finite F +GLIBC_2.28 __finitef F +GLIBC_2.28 __flbf F +GLIBC_2.28 __fork F +GLIBC_2.28 __fpending F +GLIBC_2.28 __fprintf_chk F +GLIBC_2.28 __fpu_control D 0x4 +GLIBC_2.28 __fpurge F +GLIBC_2.28 __fread_chk F +GLIBC_2.28 __fread_unlocked_chk F +GLIBC_2.28 __freadable F +GLIBC_2.28 __freading F +GLIBC_2.28 __free_hook D 0x4 +GLIBC_2.28 __freelocale F +GLIBC_2.28 __fsetlocking F +GLIBC_2.28 __fwprintf_chk F +GLIBC_2.28 __fwritable F +GLIBC_2.28 __fwriting F +GLIBC_2.28 __fxstat F +GLIBC_2.28 __fxstat64 F +GLIBC_2.28 __fxstatat F +GLIBC_2.28 __fxstatat64 F +GLIBC_2.28 __getauxval F +GLIBC_2.28 __getcwd_chk F +GLIBC_2.28 __getdelim F +GLIBC_2.28 __getdomainname_chk F +GLIBC_2.28 __getgroups_chk F +GLIBC_2.28 __gethostname_chk F +GLIBC_2.28 __getlogin_r_chk F +GLIBC_2.28 __getmntent_r F +GLIBC_2.28 __getpagesize F +GLIBC_2.28 __getpgid F +GLIBC_2.28 __getpid F +GLIBC_2.28 __gets_chk F +GLIBC_2.28 __gettimeofday F +GLIBC_2.28 __getwd_chk F +GLIBC_2.28 __gmtime_r F +GLIBC_2.28 __h_errno_location F +GLIBC_2.28 __isalnum_l F +GLIBC_2.28 __isalpha_l F +GLIBC_2.28 __isascii_l F +GLIBC_2.28 __isblank_l F +GLIBC_2.28 __iscntrl_l F +GLIBC_2.28 __isctype F +GLIBC_2.28 __isdigit_l F +GLIBC_2.28 __isgraph_l F +GLIBC_2.28 __isinf F +GLIBC_2.28 __isinff F +GLIBC_2.28 __islower_l F +GLIBC_2.28 __isnan F +GLIBC_2.28 __isnanf F +GLIBC_2.28 __isoc99_fscanf F +GLIBC_2.28 __isoc99_fwscanf F +GLIBC_2.28 __isoc99_scanf F +GLIBC_2.28 __isoc99_sscanf F +GLIBC_2.28 __isoc99_swscanf F +GLIBC_2.28 __isoc99_vfscanf F +GLIBC_2.28 __isoc99_vfwscanf F +GLIBC_2.28 __isoc99_vscanf F +GLIBC_2.28 __isoc99_vsscanf F +GLIBC_2.28 __isoc99_vswscanf F +GLIBC_2.28 __isoc99_vwscanf F +GLIBC_2.28 __isoc99_wscanf F +GLIBC_2.28 __isprint_l F +GLIBC_2.28 __ispunct_l F +GLIBC_2.28 __isspace_l F +GLIBC_2.28 __isupper_l F +GLIBC_2.28 __iswalnum_l F +GLIBC_2.28 __iswalpha_l F +GLIBC_2.28 __iswblank_l F +GLIBC_2.28 __iswcntrl_l F +GLIBC_2.28 __iswctype F +GLIBC_2.28 __iswctype_l F +GLIBC_2.28 __iswdigit_l F +GLIBC_2.28 __iswgraph_l F +GLIBC_2.28 __iswlower_l F +GLIBC_2.28 __iswprint_l F +GLIBC_2.28 __iswpunct_l F +GLIBC_2.28 __iswspace_l F +GLIBC_2.28 __iswupper_l F +GLIBC_2.28 __iswxdigit_l F +GLIBC_2.28 __isxdigit_l F +GLIBC_2.28 __ivaliduser F +GLIBC_2.28 __key_decryptsession_pk_LOCAL D 0x4 +GLIBC_2.28 __key_encryptsession_pk_LOCAL D 0x4 +GLIBC_2.28 __key_gendes_LOCAL D 0x4 +GLIBC_2.28 __libc_allocate_rtsig F +GLIBC_2.28 __libc_calloc F +GLIBC_2.28 __libc_current_sigrtmax F +GLIBC_2.28 __libc_current_sigrtmin F +GLIBC_2.28 __libc_free F +GLIBC_2.28 __libc_freeres F +GLIBC_2.28 __libc_init_first F +GLIBC_2.28 __libc_mallinfo F +GLIBC_2.28 __libc_malloc F +GLIBC_2.28 __libc_mallopt F +GLIBC_2.28 __libc_memalign F +GLIBC_2.28 __libc_pvalloc F +GLIBC_2.28 __libc_realloc F +GLIBC_2.28 __libc_sa_len F +GLIBC_2.28 __libc_start_main F +GLIBC_2.28 __libc_valloc F +GLIBC_2.28 __longjmp_chk F +GLIBC_2.28 __lseek F +GLIBC_2.28 __lxstat F +GLIBC_2.28 __lxstat64 F +GLIBC_2.28 __malloc_hook D 0x4 +GLIBC_2.28 __mbrlen F +GLIBC_2.28 __mbrtowc F +GLIBC_2.28 __mbsnrtowcs_chk F +GLIBC_2.28 __mbsrtowcs_chk F +GLIBC_2.28 __mbstowcs_chk F +GLIBC_2.28 __memalign_hook D 0x4 +GLIBC_2.28 __memcpy_chk F +GLIBC_2.28 __memmove_chk F +GLIBC_2.28 __mempcpy F +GLIBC_2.28 __mempcpy_chk F +GLIBC_2.28 __memset_chk F +GLIBC_2.28 __monstartup F +GLIBC_2.28 __morecore D 0x4 +GLIBC_2.28 __nanosleep F +GLIBC_2.28 __newlocale F +GLIBC_2.28 __nl_langinfo_l F +GLIBC_2.28 __nss_configure_lookup F +GLIBC_2.28 __nss_database_lookup F +GLIBC_2.28 __nss_hostname_digits_dots F +GLIBC_2.28 __nss_next F +GLIBC_2.28 __obstack_printf_chk F +GLIBC_2.28 __obstack_vprintf_chk F +GLIBC_2.28 __open F +GLIBC_2.28 __open64 F +GLIBC_2.28 __open64_2 F +GLIBC_2.28 __open_2 F +GLIBC_2.28 __openat64_2 F +GLIBC_2.28 __openat_2 F +GLIBC_2.28 __overflow F +GLIBC_2.28 __pipe F +GLIBC_2.28 __poll F +GLIBC_2.28 __poll_chk F +GLIBC_2.28 __posix_getopt F +GLIBC_2.28 __ppoll_chk F +GLIBC_2.28 __pread64 F +GLIBC_2.28 __pread64_chk F +GLIBC_2.28 __pread_chk F +GLIBC_2.28 __printf_chk F +GLIBC_2.28 __printf_fp F +GLIBC_2.28 __profile_frequency F +GLIBC_2.28 __progname D 0x4 +GLIBC_2.28 __progname_full D 0x4 +GLIBC_2.28 __ptsname_r_chk F +GLIBC_2.28 __pwrite64 F +GLIBC_2.28 __rawmemchr F +GLIBC_2.28 __rcmd_errstr D 0x4 +GLIBC_2.28 __read F +GLIBC_2.28 __read_chk F +GLIBC_2.28 __readlink_chk F +GLIBC_2.28 __readlinkat_chk F +GLIBC_2.28 __realloc_hook D 0x4 +GLIBC_2.28 __realpath_chk F +GLIBC_2.28 __recv_chk F +GLIBC_2.28 __recvfrom_chk F +GLIBC_2.28 __register_atfork F +GLIBC_2.28 __res_init F +GLIBC_2.28 __res_nclose F +GLIBC_2.28 __res_ninit F +GLIBC_2.28 __res_randomid F +GLIBC_2.28 __res_state F +GLIBC_2.28 __rpc_thread_createerr F +GLIBC_2.28 __rpc_thread_svc_fdset F +GLIBC_2.28 __rpc_thread_svc_max_pollfd F +GLIBC_2.28 __rpc_thread_svc_pollfd F +GLIBC_2.28 __sbrk F +GLIBC_2.28 __sched_cpualloc F +GLIBC_2.28 __sched_cpucount F +GLIBC_2.28 __sched_cpufree F +GLIBC_2.28 __sched_get_priority_max F +GLIBC_2.28 __sched_get_priority_min F +GLIBC_2.28 __sched_getparam F +GLIBC_2.28 __sched_getscheduler F +GLIBC_2.28 __sched_setscheduler F +GLIBC_2.28 __sched_yield F +GLIBC_2.28 __select F +GLIBC_2.28 __send F +GLIBC_2.28 __setmntent F +GLIBC_2.28 __setpgid F +GLIBC_2.28 __sigaction F +GLIBC_2.28 __signbit F +GLIBC_2.28 __signbitf F +GLIBC_2.28 __sigpause F +GLIBC_2.28 __sigsetjmp F +GLIBC_2.28 __sigsuspend F +GLIBC_2.28 __snprintf_chk F +GLIBC_2.28 __sprintf_chk F +GLIBC_2.28 __stack_chk_fail F +GLIBC_2.28 __statfs F +GLIBC_2.28 __stpcpy F +GLIBC_2.28 __stpcpy_chk F +GLIBC_2.28 __stpncpy F +GLIBC_2.28 __stpncpy_chk F +GLIBC_2.28 __strcasecmp F +GLIBC_2.28 __strcasecmp_l F +GLIBC_2.28 __strcasestr F +GLIBC_2.28 __strcat_chk F +GLIBC_2.28 __strcoll_l F +GLIBC_2.28 __strcpy_chk F +GLIBC_2.28 __strdup F +GLIBC_2.28 __strerror_r F +GLIBC_2.28 __strfmon_l F +GLIBC_2.28 __strftime_l F +GLIBC_2.28 __strncasecmp_l F +GLIBC_2.28 __strncat_chk F +GLIBC_2.28 __strncpy_chk F +GLIBC_2.28 __strndup F +GLIBC_2.28 __strsep_g F +GLIBC_2.28 __strtod_internal F +GLIBC_2.28 __strtod_l F +GLIBC_2.28 __strtof_internal F +GLIBC_2.28 __strtof_l F +GLIBC_2.28 __strtok_r F +GLIBC_2.28 __strtol_internal F +GLIBC_2.28 __strtol_l F +GLIBC_2.28 __strtold_internal F +GLIBC_2.28 __strtold_l F +GLIBC_2.28 __strtoll_internal F +GLIBC_2.28 __strtoll_l F +GLIBC_2.28 __strtoul_internal F +GLIBC_2.28 __strtoul_l F +GLIBC_2.28 __strtoull_internal F +GLIBC_2.28 __strtoull_l F +GLIBC_2.28 __strverscmp F +GLIBC_2.28 __strxfrm_l F +GLIBC_2.28 __swprintf_chk F +GLIBC_2.28 __sysconf F +GLIBC_2.28 __syslog_chk F +GLIBC_2.28 __sysv_signal F +GLIBC_2.28 __timezone D 0x4 +GLIBC_2.28 __toascii_l F +GLIBC_2.28 __tolower_l F +GLIBC_2.28 __toupper_l F +GLIBC_2.28 __towctrans F +GLIBC_2.28 __towctrans_l F +GLIBC_2.28 __towlower_l F +GLIBC_2.28 __towupper_l F +GLIBC_2.28 __ttyname_r_chk F +GLIBC_2.28 __tzname D 0x8 +GLIBC_2.28 __uflow F +GLIBC_2.28 __underflow F +GLIBC_2.28 __uselocale F +GLIBC_2.28 __vasprintf_chk F +GLIBC_2.28 __vdprintf_chk F +GLIBC_2.28 __vfork F +GLIBC_2.28 __vfprintf_chk F +GLIBC_2.28 __vfscanf F +GLIBC_2.28 __vfwprintf_chk F +GLIBC_2.28 __vprintf_chk F +GLIBC_2.28 __vsnprintf F +GLIBC_2.28 __vsnprintf_chk F +GLIBC_2.28 __vsprintf_chk F +GLIBC_2.28 __vsscanf F +GLIBC_2.28 __vswprintf_chk F +GLIBC_2.28 __vsyslog_chk F +GLIBC_2.28 __vwprintf_chk F +GLIBC_2.28 __wait F +GLIBC_2.28 __waitpid F +GLIBC_2.28 __wcpcpy_chk F +GLIBC_2.28 __wcpncpy_chk F +GLIBC_2.28 __wcrtomb_chk F +GLIBC_2.28 __wcscasecmp_l F +GLIBC_2.28 __wcscat_chk F +GLIBC_2.28 __wcscoll_l F +GLIBC_2.28 __wcscpy_chk F +GLIBC_2.28 __wcsftime_l F +GLIBC_2.28 __wcsncasecmp_l F +GLIBC_2.28 __wcsncat_chk F +GLIBC_2.28 __wcsncpy_chk F +GLIBC_2.28 __wcsnrtombs_chk F +GLIBC_2.28 __wcsrtombs_chk F +GLIBC_2.28 __wcstod_internal F +GLIBC_2.28 __wcstod_l F +GLIBC_2.28 __wcstof_internal F +GLIBC_2.28 __wcstof_l F +GLIBC_2.28 __wcstol_internal F +GLIBC_2.28 __wcstol_l F +GLIBC_2.28 __wcstold_internal F +GLIBC_2.28 __wcstold_l F +GLIBC_2.28 __wcstoll_internal F +GLIBC_2.28 __wcstoll_l F +GLIBC_2.28 __wcstombs_chk F +GLIBC_2.28 __wcstoul_internal F +GLIBC_2.28 __wcstoul_l F +GLIBC_2.28 __wcstoull_internal F +GLIBC_2.28 __wcstoull_l F +GLIBC_2.28 __wcsxfrm_l F +GLIBC_2.28 __wctomb_chk F +GLIBC_2.28 __wctrans_l F +GLIBC_2.28 __wctype_l F +GLIBC_2.28 __wmemcpy_chk F +GLIBC_2.28 __wmemmove_chk F +GLIBC_2.28 __wmempcpy_chk F +GLIBC_2.28 __wmemset_chk F +GLIBC_2.28 __woverflow F +GLIBC_2.28 __wprintf_chk F +GLIBC_2.28 __write F +GLIBC_2.28 __wuflow F +GLIBC_2.28 __wunderflow F +GLIBC_2.28 __xmknod F +GLIBC_2.28 __xmknodat F +GLIBC_2.28 __xpg_basename F +GLIBC_2.28 __xpg_sigpause F +GLIBC_2.28 __xpg_strerror_r F +GLIBC_2.28 __xstat F +GLIBC_2.28 __xstat64 F +GLIBC_2.28 _authenticate F +GLIBC_2.28 _dl_mcount_wrapper F +GLIBC_2.28 _dl_mcount_wrapper_check F +GLIBC_2.28 _environ D 0x4 +GLIBC_2.28 _exit F +GLIBC_2.28 _flushlbf F +GLIBC_2.28 _libc_intl_domainname D 0x5 +GLIBC_2.28 _longjmp F +GLIBC_2.28 _mcleanup F +GLIBC_2.28 _mcount F +GLIBC_2.28 _nl_default_dirname D 0x12 +GLIBC_2.28 _nl_domain_bindings D 0x4 +GLIBC_2.28 _nl_msg_cat_cntr D 0x4 +GLIBC_2.28 _null_auth D 0xc +GLIBC_2.28 _obstack_allocated_p F +GLIBC_2.28 _obstack_begin F +GLIBC_2.28 _obstack_begin_1 F +GLIBC_2.28 _obstack_free F +GLIBC_2.28 _obstack_memory_used F +GLIBC_2.28 _obstack_newchunk F +GLIBC_2.28 _res D 0x200 +GLIBC_2.28 _res_hconf D 0x30 +GLIBC_2.28 _rpc_dtablesize F +GLIBC_2.28 _seterr_reply F +GLIBC_2.28 _setjmp F +GLIBC_2.28 _sys_errlist D 0x21c +GLIBC_2.28 _sys_nerr D 0x4 +GLIBC_2.28 _sys_siglist D 0x104 +GLIBC_2.28 _tolower F +GLIBC_2.28 _toupper F +GLIBC_2.28 a64l F +GLIBC_2.28 abort F +GLIBC_2.28 abs F +GLIBC_2.28 accept F +GLIBC_2.28 accept4 F +GLIBC_2.28 access F +GLIBC_2.28 acct F +GLIBC_2.28 addmntent F +GLIBC_2.28 addseverity F +GLIBC_2.28 adjtime F +GLIBC_2.28 adjtimex F +GLIBC_2.28 alarm F +GLIBC_2.28 aligned_alloc F +GLIBC_2.28 alphasort F +GLIBC_2.28 alphasort64 F +GLIBC_2.28 argp_err_exit_status D 0x4 +GLIBC_2.28 argp_error F +GLIBC_2.28 argp_failure F +GLIBC_2.28 argp_help F +GLIBC_2.28 argp_parse F +GLIBC_2.28 argp_program_bug_address D 0x4 +GLIBC_2.28 argp_program_version D 0x4 +GLIBC_2.28 argp_program_version_hook D 0x4 +GLIBC_2.28 argp_state_help F +GLIBC_2.28 argp_usage F +GLIBC_2.28 argz_add F +GLIBC_2.28 argz_add_sep F +GLIBC_2.28 argz_append F +GLIBC_2.28 argz_count F +GLIBC_2.28 argz_create F +GLIBC_2.28 argz_create_sep F +GLIBC_2.28 argz_delete F +GLIBC_2.28 argz_extract F +GLIBC_2.28 argz_insert F +GLIBC_2.28 argz_next F +GLIBC_2.28 argz_replace F +GLIBC_2.28 argz_stringify F +GLIBC_2.28 asctime F +GLIBC_2.28 asctime_r F +GLIBC_2.28 asprintf F +GLIBC_2.28 atof F +GLIBC_2.28 atoi F +GLIBC_2.28 atol F +GLIBC_2.28 atoll F +GLIBC_2.28 authdes_create F +GLIBC_2.28 authdes_getucred F +GLIBC_2.28 authdes_pk_create F +GLIBC_2.28 authnone_create F +GLIBC_2.28 authunix_create F +GLIBC_2.28 authunix_create_default F +GLIBC_2.28 backtrace F +GLIBC_2.28 backtrace_symbols F +GLIBC_2.28 backtrace_symbols_fd F +GLIBC_2.28 basename F +GLIBC_2.28 bcmp F +GLIBC_2.28 bcopy F +GLIBC_2.28 bind F +GLIBC_2.28 bind_textdomain_codeset F +GLIBC_2.28 bindresvport F +GLIBC_2.28 bindtextdomain F +GLIBC_2.28 brk F +GLIBC_2.28 bsd_signal F +GLIBC_2.28 bsearch F +GLIBC_2.28 btowc F +GLIBC_2.28 bzero F +GLIBC_2.28 c16rtomb F +GLIBC_2.28 c32rtomb F +GLIBC_2.28 cacheflush F +GLIBC_2.28 calloc F +GLIBC_2.28 callrpc F +GLIBC_2.28 canonicalize_file_name F +GLIBC_2.28 capget F +GLIBC_2.28 capset F +GLIBC_2.28 catclose F +GLIBC_2.28 catgets F +GLIBC_2.28 catopen F +GLIBC_2.28 cbc_crypt F +GLIBC_2.28 cfgetispeed F +GLIBC_2.28 cfgetospeed F +GLIBC_2.28 cfmakeraw F +GLIBC_2.28 cfsetispeed F +GLIBC_2.28 cfsetospeed F +GLIBC_2.28 cfsetspeed F +GLIBC_2.28 chdir F +GLIBC_2.28 chflags F +GLIBC_2.28 chmod F +GLIBC_2.28 chown F +GLIBC_2.28 chroot F +GLIBC_2.28 clearenv F +GLIBC_2.28 clearerr F +GLIBC_2.28 clearerr_unlocked F +GLIBC_2.28 clnt_broadcast F +GLIBC_2.28 clnt_create F +GLIBC_2.28 clnt_pcreateerror F +GLIBC_2.28 clnt_perrno F +GLIBC_2.28 clnt_perror F +GLIBC_2.28 clnt_spcreateerror F +GLIBC_2.28 clnt_sperrno F +GLIBC_2.28 clnt_sperror F +GLIBC_2.28 clntraw_create F +GLIBC_2.28 clnttcp_create F +GLIBC_2.28 clntudp_bufcreate F +GLIBC_2.28 clntudp_create F +GLIBC_2.28 clntunix_create F +GLIBC_2.28 clock F +GLIBC_2.28 clock_adjtime F +GLIBC_2.28 clock_getcpuclockid F +GLIBC_2.28 clock_getres F +GLIBC_2.28 clock_gettime F +GLIBC_2.28 clock_nanosleep F +GLIBC_2.28 clock_settime F +GLIBC_2.28 clone F +GLIBC_2.28 close F +GLIBC_2.28 closedir F +GLIBC_2.28 closelog F +GLIBC_2.28 confstr F +GLIBC_2.28 connect F +GLIBC_2.28 copy_file_range F +GLIBC_2.28 copysign F +GLIBC_2.28 copysignf F +GLIBC_2.28 copysignl F +GLIBC_2.28 creat F +GLIBC_2.28 creat64 F +GLIBC_2.28 ctermid F +GLIBC_2.28 ctime F +GLIBC_2.28 ctime_r F +GLIBC_2.28 cuserid F +GLIBC_2.28 daemon F +GLIBC_2.28 daylight D 0x4 +GLIBC_2.28 dcgettext F +GLIBC_2.28 dcngettext F +GLIBC_2.28 delete_module F +GLIBC_2.28 des_setparity F +GLIBC_2.28 dgettext F +GLIBC_2.28 difftime F +GLIBC_2.28 dirfd F +GLIBC_2.28 dirname F +GLIBC_2.28 div F +GLIBC_2.28 dl_iterate_phdr F +GLIBC_2.28 dngettext F +GLIBC_2.28 dprintf F +GLIBC_2.28 drand48 F +GLIBC_2.28 drand48_r F +GLIBC_2.28 dup F +GLIBC_2.28 dup2 F +GLIBC_2.28 dup3 F +GLIBC_2.28 duplocale F +GLIBC_2.28 dysize F +GLIBC_2.28 eaccess F +GLIBC_2.28 ecb_crypt F +GLIBC_2.28 ecvt F +GLIBC_2.28 ecvt_r F +GLIBC_2.28 endaliasent F +GLIBC_2.28 endfsent F +GLIBC_2.28 endgrent F +GLIBC_2.28 endhostent F +GLIBC_2.28 endmntent F +GLIBC_2.28 endnetent F +GLIBC_2.28 endnetgrent F +GLIBC_2.28 endprotoent F +GLIBC_2.28 endpwent F +GLIBC_2.28 endrpcent F +GLIBC_2.28 endservent F +GLIBC_2.28 endsgent F +GLIBC_2.28 endspent F +GLIBC_2.28 endttyent F +GLIBC_2.28 endusershell F +GLIBC_2.28 endutent F +GLIBC_2.28 endutxent F +GLIBC_2.28 environ D 0x4 +GLIBC_2.28 envz_add F +GLIBC_2.28 envz_entry F +GLIBC_2.28 envz_get F +GLIBC_2.28 envz_merge F +GLIBC_2.28 envz_remove F +GLIBC_2.28 envz_strip F +GLIBC_2.28 epoll_create F +GLIBC_2.28 epoll_create1 F +GLIBC_2.28 epoll_ctl F +GLIBC_2.28 epoll_pwait F +GLIBC_2.28 epoll_wait F +GLIBC_2.28 erand48 F +GLIBC_2.28 erand48_r F +GLIBC_2.28 err F +GLIBC_2.28 error F +GLIBC_2.28 error_at_line F +GLIBC_2.28 error_message_count D 0x4 +GLIBC_2.28 error_one_per_line D 0x4 +GLIBC_2.28 error_print_progname D 0x4 +GLIBC_2.28 errx F +GLIBC_2.28 ether_aton F +GLIBC_2.28 ether_aton_r F +GLIBC_2.28 ether_hostton F +GLIBC_2.28 ether_line F +GLIBC_2.28 ether_ntoa F +GLIBC_2.28 ether_ntoa_r F +GLIBC_2.28 ether_ntohost F +GLIBC_2.28 euidaccess F +GLIBC_2.28 eventfd F +GLIBC_2.28 eventfd_read F +GLIBC_2.28 eventfd_write F +GLIBC_2.28 execl F +GLIBC_2.28 execle F +GLIBC_2.28 execlp F +GLIBC_2.28 execv F +GLIBC_2.28 execve F +GLIBC_2.28 execvp F +GLIBC_2.28 execvpe F +GLIBC_2.28 exit F +GLIBC_2.28 explicit_bzero F +GLIBC_2.28 faccessat F +GLIBC_2.28 fallocate F +GLIBC_2.28 fallocate64 F +GLIBC_2.28 fanotify_init F +GLIBC_2.28 fanotify_mark F +GLIBC_2.28 fattach F +GLIBC_2.28 fchdir F +GLIBC_2.28 fchflags F +GLIBC_2.28 fchmod F +GLIBC_2.28 fchmodat F +GLIBC_2.28 fchown F +GLIBC_2.28 fchownat F +GLIBC_2.28 fclose F +GLIBC_2.28 fcloseall F +GLIBC_2.28 fcntl F +GLIBC_2.28 fcvt F +GLIBC_2.28 fcvt_r F +GLIBC_2.28 fdatasync F +GLIBC_2.28 fdetach F +GLIBC_2.28 fdopen F +GLIBC_2.28 fdopendir F +GLIBC_2.28 feof F +GLIBC_2.28 feof_unlocked F +GLIBC_2.28 ferror F +GLIBC_2.28 ferror_unlocked F +GLIBC_2.28 fexecve F +GLIBC_2.28 fflush F +GLIBC_2.28 fflush_unlocked F +GLIBC_2.28 ffs F +GLIBC_2.28 ffsl F +GLIBC_2.28 ffsll F +GLIBC_2.28 fgetc F +GLIBC_2.28 fgetc_unlocked F +GLIBC_2.28 fgetgrent F +GLIBC_2.28 fgetgrent_r F +GLIBC_2.28 fgetpos F +GLIBC_2.28 fgetpos64 F +GLIBC_2.28 fgetpwent F +GLIBC_2.28 fgetpwent_r F +GLIBC_2.28 fgets F +GLIBC_2.28 fgets_unlocked F +GLIBC_2.28 fgetsgent F +GLIBC_2.28 fgetsgent_r F +GLIBC_2.28 fgetspent F +GLIBC_2.28 fgetspent_r F +GLIBC_2.28 fgetwc F +GLIBC_2.28 fgetwc_unlocked F +GLIBC_2.28 fgetws F +GLIBC_2.28 fgetws_unlocked F +GLIBC_2.28 fgetxattr F +GLIBC_2.28 fileno F +GLIBC_2.28 fileno_unlocked F +GLIBC_2.28 finite F +GLIBC_2.28 finitef F +GLIBC_2.28 finitel F +GLIBC_2.28 flistxattr F +GLIBC_2.28 flock F +GLIBC_2.28 flockfile F +GLIBC_2.28 fmemopen F +GLIBC_2.28 fmtmsg F +GLIBC_2.28 fnmatch F +GLIBC_2.28 fopen F +GLIBC_2.28 fopen64 F +GLIBC_2.28 fopencookie F +GLIBC_2.28 fork F +GLIBC_2.28 fpathconf F +GLIBC_2.28 fprintf F +GLIBC_2.28 fputc F +GLIBC_2.28 fputc_unlocked F +GLIBC_2.28 fputs F +GLIBC_2.28 fputs_unlocked F +GLIBC_2.28 fputwc F +GLIBC_2.28 fputwc_unlocked F +GLIBC_2.28 fputws F +GLIBC_2.28 fputws_unlocked F +GLIBC_2.28 fread F +GLIBC_2.28 fread_unlocked F +GLIBC_2.28 free F +GLIBC_2.28 freeaddrinfo F +GLIBC_2.28 freeifaddrs F +GLIBC_2.28 freelocale F +GLIBC_2.28 fremovexattr F +GLIBC_2.28 freopen F +GLIBC_2.28 freopen64 F +GLIBC_2.28 frexp F +GLIBC_2.28 frexpf F +GLIBC_2.28 frexpl F +GLIBC_2.28 fscanf F +GLIBC_2.28 fseek F +GLIBC_2.28 fseeko F +GLIBC_2.28 fseeko64 F +GLIBC_2.28 fsetpos F +GLIBC_2.28 fsetpos64 F +GLIBC_2.28 fsetxattr F +GLIBC_2.28 fstatfs F +GLIBC_2.28 fstatfs64 F +GLIBC_2.28 fstatvfs F +GLIBC_2.28 fstatvfs64 F +GLIBC_2.28 fsync F +GLIBC_2.28 ftell F +GLIBC_2.28 ftello F +GLIBC_2.28 ftello64 F +GLIBC_2.28 ftime F +GLIBC_2.28 ftok F +GLIBC_2.28 ftruncate F +GLIBC_2.28 ftruncate64 F +GLIBC_2.28 ftrylockfile F +GLIBC_2.28 fts64_children F +GLIBC_2.28 fts64_close F +GLIBC_2.28 fts64_open F +GLIBC_2.28 fts64_read F +GLIBC_2.28 fts64_set F +GLIBC_2.28 fts_children F +GLIBC_2.28 fts_close F +GLIBC_2.28 fts_open F +GLIBC_2.28 fts_read F +GLIBC_2.28 fts_set F +GLIBC_2.28 ftw F +GLIBC_2.28 ftw64 F +GLIBC_2.28 funlockfile F +GLIBC_2.28 futimens F +GLIBC_2.28 futimes F +GLIBC_2.28 futimesat F +GLIBC_2.28 fwide F +GLIBC_2.28 fwprintf F +GLIBC_2.28 fwrite F +GLIBC_2.28 fwrite_unlocked F +GLIBC_2.28 fwscanf F +GLIBC_2.28 gai_strerror F +GLIBC_2.28 gcvt F +GLIBC_2.28 get_avphys_pages F +GLIBC_2.28 get_current_dir_name F +GLIBC_2.28 get_myaddress F +GLIBC_2.28 get_nprocs F +GLIBC_2.28 get_nprocs_conf F +GLIBC_2.28 get_phys_pages F +GLIBC_2.28 getaddrinfo F +GLIBC_2.28 getaliasbyname F +GLIBC_2.28 getaliasbyname_r F +GLIBC_2.28 getaliasent F +GLIBC_2.28 getaliasent_r F +GLIBC_2.28 getauxval F +GLIBC_2.28 getc F +GLIBC_2.28 getc_unlocked F +GLIBC_2.28 getchar F +GLIBC_2.28 getchar_unlocked F +GLIBC_2.28 getcontext F +GLIBC_2.28 getcwd F +GLIBC_2.28 getdate F +GLIBC_2.28 getdate_err D 0x4 +GLIBC_2.28 getdate_r F +GLIBC_2.28 getdelim F +GLIBC_2.28 getdirentries F +GLIBC_2.28 getdirentries64 F +GLIBC_2.28 getdomainname F +GLIBC_2.28 getdtablesize F +GLIBC_2.28 getegid F +GLIBC_2.28 getentropy F +GLIBC_2.28 getenv F +GLIBC_2.28 geteuid F +GLIBC_2.28 getfsent F +GLIBC_2.28 getfsfile F +GLIBC_2.28 getfsspec F +GLIBC_2.28 getgid F +GLIBC_2.28 getgrent F +GLIBC_2.28 getgrent_r F +GLIBC_2.28 getgrgid F +GLIBC_2.28 getgrgid_r F +GLIBC_2.28 getgrnam F +GLIBC_2.28 getgrnam_r F +GLIBC_2.28 getgrouplist F +GLIBC_2.28 getgroups F +GLIBC_2.28 gethostbyaddr F +GLIBC_2.28 gethostbyaddr_r F +GLIBC_2.28 gethostbyname F +GLIBC_2.28 gethostbyname2 F +GLIBC_2.28 gethostbyname2_r F +GLIBC_2.28 gethostbyname_r F +GLIBC_2.28 gethostent F +GLIBC_2.28 gethostent_r F +GLIBC_2.28 gethostid F +GLIBC_2.28 gethostname F +GLIBC_2.28 getifaddrs F +GLIBC_2.28 getipv4sourcefilter F +GLIBC_2.28 getitimer F +GLIBC_2.28 getline F +GLIBC_2.28 getloadavg F +GLIBC_2.28 getlogin F +GLIBC_2.28 getlogin_r F +GLIBC_2.28 getmntent F +GLIBC_2.28 getmntent_r F +GLIBC_2.28 getmsg F +GLIBC_2.28 getnameinfo F +GLIBC_2.28 getnetbyaddr F +GLIBC_2.28 getnetbyaddr_r F +GLIBC_2.28 getnetbyname F +GLIBC_2.28 getnetbyname_r F +GLIBC_2.28 getnetent F +GLIBC_2.28 getnetent_r F +GLIBC_2.28 getnetgrent F +GLIBC_2.28 getnetgrent_r F +GLIBC_2.28 getnetname F +GLIBC_2.28 getopt F +GLIBC_2.28 getopt_long F +GLIBC_2.28 getopt_long_only F +GLIBC_2.28 getpagesize F +GLIBC_2.28 getpass F +GLIBC_2.28 getpeername F +GLIBC_2.28 getpgid F +GLIBC_2.28 getpgrp F +GLIBC_2.28 getpid F +GLIBC_2.28 getpmsg F +GLIBC_2.28 getppid F +GLIBC_2.28 getpriority F +GLIBC_2.28 getprotobyname F +GLIBC_2.28 getprotobyname_r F +GLIBC_2.28 getprotobynumber F +GLIBC_2.28 getprotobynumber_r F +GLIBC_2.28 getprotoent F +GLIBC_2.28 getprotoent_r F +GLIBC_2.28 getpt F +GLIBC_2.28 getpublickey F +GLIBC_2.28 getpw F +GLIBC_2.28 getpwent F +GLIBC_2.28 getpwent_r F +GLIBC_2.28 getpwnam F +GLIBC_2.28 getpwnam_r F +GLIBC_2.28 getpwuid F +GLIBC_2.28 getpwuid_r F +GLIBC_2.28 getrandom F +GLIBC_2.28 getresgid F +GLIBC_2.28 getresuid F +GLIBC_2.28 getrlimit F +GLIBC_2.28 getrlimit64 F +GLIBC_2.28 getrpcbyname F +GLIBC_2.28 getrpcbyname_r F +GLIBC_2.28 getrpcbynumber F +GLIBC_2.28 getrpcbynumber_r F +GLIBC_2.28 getrpcent F +GLIBC_2.28 getrpcent_r F +GLIBC_2.28 getrpcport F +GLIBC_2.28 getrusage F +GLIBC_2.28 gets F +GLIBC_2.28 getsecretkey F +GLIBC_2.28 getservbyname F +GLIBC_2.28 getservbyname_r F +GLIBC_2.28 getservbyport F +GLIBC_2.28 getservbyport_r F +GLIBC_2.28 getservent F +GLIBC_2.28 getservent_r F +GLIBC_2.28 getsgent F +GLIBC_2.28 getsgent_r F +GLIBC_2.28 getsgnam F +GLIBC_2.28 getsgnam_r F +GLIBC_2.28 getsid F +GLIBC_2.28 getsockname F +GLIBC_2.28 getsockopt F +GLIBC_2.28 getsourcefilter F +GLIBC_2.28 getspent F +GLIBC_2.28 getspent_r F +GLIBC_2.28 getspnam F +GLIBC_2.28 getspnam_r F +GLIBC_2.28 getsubopt F +GLIBC_2.28 gettext F +GLIBC_2.28 gettimeofday F +GLIBC_2.28 getttyent F +GLIBC_2.28 getttynam F +GLIBC_2.28 getuid F +GLIBC_2.28 getusershell F +GLIBC_2.28 getutent F +GLIBC_2.28 getutent_r F +GLIBC_2.28 getutid F +GLIBC_2.28 getutid_r F +GLIBC_2.28 getutline F +GLIBC_2.28 getutline_r F +GLIBC_2.28 getutmp F +GLIBC_2.28 getutmpx F +GLIBC_2.28 getutxent F +GLIBC_2.28 getutxid F +GLIBC_2.28 getutxline F +GLIBC_2.28 getw F +GLIBC_2.28 getwc F +GLIBC_2.28 getwc_unlocked F +GLIBC_2.28 getwchar F +GLIBC_2.28 getwchar_unlocked F +GLIBC_2.28 getwd F +GLIBC_2.28 getxattr F +GLIBC_2.28 glob F +GLIBC_2.28 glob64 F +GLIBC_2.28 glob_pattern_p F +GLIBC_2.28 globfree F +GLIBC_2.28 globfree64 F +GLIBC_2.28 gmtime F +GLIBC_2.28 gmtime_r F +GLIBC_2.28 gnu_dev_major F +GLIBC_2.28 gnu_dev_makedev F +GLIBC_2.28 gnu_dev_minor F +GLIBC_2.28 gnu_get_libc_release F +GLIBC_2.28 gnu_get_libc_version F +GLIBC_2.28 grantpt F +GLIBC_2.28 group_member F +GLIBC_2.28 gsignal F +GLIBC_2.28 gtty F +GLIBC_2.28 h_errlist D 0x14 +GLIBC_2.28 h_nerr D 0x4 +GLIBC_2.28 hasmntopt F +GLIBC_2.28 hcreate F +GLIBC_2.28 hcreate_r F +GLIBC_2.28 hdestroy F +GLIBC_2.28 hdestroy_r F +GLIBC_2.28 herror F +GLIBC_2.28 host2netname F +GLIBC_2.28 hsearch F +GLIBC_2.28 hsearch_r F +GLIBC_2.28 hstrerror F +GLIBC_2.28 htonl F +GLIBC_2.28 htons F +GLIBC_2.28 iconv F +GLIBC_2.28 iconv_close F +GLIBC_2.28 iconv_open F +GLIBC_2.28 if_freenameindex F +GLIBC_2.28 if_indextoname F +GLIBC_2.28 if_nameindex F +GLIBC_2.28 if_nametoindex F +GLIBC_2.28 imaxabs F +GLIBC_2.28 imaxdiv F +GLIBC_2.28 in6addr_any D 0x10 +GLIBC_2.28 in6addr_loopback D 0x10 +GLIBC_2.28 index F +GLIBC_2.28 inet6_opt_append F +GLIBC_2.28 inet6_opt_find F +GLIBC_2.28 inet6_opt_finish F +GLIBC_2.28 inet6_opt_get_val F +GLIBC_2.28 inet6_opt_init F +GLIBC_2.28 inet6_opt_next F +GLIBC_2.28 inet6_opt_set_val F +GLIBC_2.28 inet6_option_alloc F +GLIBC_2.28 inet6_option_append F +GLIBC_2.28 inet6_option_find F +GLIBC_2.28 inet6_option_init F +GLIBC_2.28 inet6_option_next F +GLIBC_2.28 inet6_option_space F +GLIBC_2.28 inet6_rth_add F +GLIBC_2.28 inet6_rth_getaddr F +GLIBC_2.28 inet6_rth_init F +GLIBC_2.28 inet6_rth_reverse F +GLIBC_2.28 inet6_rth_segments F +GLIBC_2.28 inet6_rth_space F +GLIBC_2.28 inet_addr F +GLIBC_2.28 inet_aton F +GLIBC_2.28 inet_lnaof F +GLIBC_2.28 inet_makeaddr F +GLIBC_2.28 inet_netof F +GLIBC_2.28 inet_network F +GLIBC_2.28 inet_nsap_addr F +GLIBC_2.28 inet_nsap_ntoa F +GLIBC_2.28 inet_ntoa F +GLIBC_2.28 inet_ntop F +GLIBC_2.28 inet_pton F +GLIBC_2.28 init_module F +GLIBC_2.28 initgroups F +GLIBC_2.28 initstate F +GLIBC_2.28 initstate_r F +GLIBC_2.28 innetgr F +GLIBC_2.28 inotify_add_watch F +GLIBC_2.28 inotify_init F +GLIBC_2.28 inotify_init1 F +GLIBC_2.28 inotify_rm_watch F +GLIBC_2.28 insque F +GLIBC_2.28 ioctl F +GLIBC_2.28 iruserok F +GLIBC_2.28 iruserok_af F +GLIBC_2.28 isalnum F +GLIBC_2.28 isalnum_l F +GLIBC_2.28 isalpha F +GLIBC_2.28 isalpha_l F +GLIBC_2.28 isascii F +GLIBC_2.28 isastream F +GLIBC_2.28 isatty F +GLIBC_2.28 isblank F +GLIBC_2.28 isblank_l F +GLIBC_2.28 iscntrl F +GLIBC_2.28 iscntrl_l F +GLIBC_2.28 isctype F +GLIBC_2.28 isdigit F +GLIBC_2.28 isdigit_l F +GLIBC_2.28 isfdtype F +GLIBC_2.28 isgraph F +GLIBC_2.28 isgraph_l F +GLIBC_2.28 isinf F +GLIBC_2.28 isinff F +GLIBC_2.28 isinfl F +GLIBC_2.28 islower F +GLIBC_2.28 islower_l F +GLIBC_2.28 isnan F +GLIBC_2.28 isnanf F +GLIBC_2.28 isnanl F +GLIBC_2.28 isprint F +GLIBC_2.28 isprint_l F +GLIBC_2.28 ispunct F +GLIBC_2.28 ispunct_l F +GLIBC_2.28 isspace F +GLIBC_2.28 isspace_l F +GLIBC_2.28 isupper F +GLIBC_2.28 isupper_l F +GLIBC_2.28 iswalnum F +GLIBC_2.28 iswalnum_l F +GLIBC_2.28 iswalpha F +GLIBC_2.28 iswalpha_l F +GLIBC_2.28 iswblank F +GLIBC_2.28 iswblank_l F +GLIBC_2.28 iswcntrl F +GLIBC_2.28 iswcntrl_l F +GLIBC_2.28 iswctype F +GLIBC_2.28 iswctype_l F +GLIBC_2.28 iswdigit F +GLIBC_2.28 iswdigit_l F +GLIBC_2.28 iswgraph F +GLIBC_2.28 iswgraph_l F +GLIBC_2.28 iswlower F +GLIBC_2.28 iswlower_l F +GLIBC_2.28 iswprint F +GLIBC_2.28 iswprint_l F +GLIBC_2.28 iswpunct F +GLIBC_2.28 iswpunct_l F +GLIBC_2.28 iswspace F +GLIBC_2.28 iswspace_l F +GLIBC_2.28 iswupper F +GLIBC_2.28 iswupper_l F +GLIBC_2.28 iswxdigit F +GLIBC_2.28 iswxdigit_l F +GLIBC_2.28 isxdigit F +GLIBC_2.28 isxdigit_l F +GLIBC_2.28 jrand48 F +GLIBC_2.28 jrand48_r F +GLIBC_2.28 key_decryptsession F +GLIBC_2.28 key_decryptsession_pk F +GLIBC_2.28 key_encryptsession F +GLIBC_2.28 key_encryptsession_pk F +GLIBC_2.28 key_gendes F +GLIBC_2.28 key_get_conv F +GLIBC_2.28 key_secretkey_is_set F +GLIBC_2.28 key_setnet F +GLIBC_2.28 key_setsecret F +GLIBC_2.28 kill F +GLIBC_2.28 killpg F +GLIBC_2.28 klogctl F +GLIBC_2.28 l64a F +GLIBC_2.28 labs F +GLIBC_2.28 lchmod F +GLIBC_2.28 lchown F +GLIBC_2.28 lckpwdf F +GLIBC_2.28 lcong48 F +GLIBC_2.28 lcong48_r F +GLIBC_2.28 ldexp F +GLIBC_2.28 ldexpf F +GLIBC_2.28 ldexpl F +GLIBC_2.28 ldiv F +GLIBC_2.28 lfind F +GLIBC_2.28 lgetxattr F +GLIBC_2.28 link F +GLIBC_2.28 linkat F +GLIBC_2.28 listen F +GLIBC_2.28 listxattr F +GLIBC_2.28 llabs F +GLIBC_2.28 lldiv F +GLIBC_2.28 llistxattr F +GLIBC_2.28 llseek F +GLIBC_2.28 localeconv F +GLIBC_2.28 localtime F +GLIBC_2.28 localtime_r F +GLIBC_2.28 lockf F +GLIBC_2.28 lockf64 F +GLIBC_2.28 longjmp F +GLIBC_2.28 lrand48 F +GLIBC_2.28 lrand48_r F +GLIBC_2.28 lremovexattr F +GLIBC_2.28 lsearch F +GLIBC_2.28 lseek F +GLIBC_2.28 lseek64 F +GLIBC_2.28 lsetxattr F +GLIBC_2.28 lutimes F +GLIBC_2.28 madvise F +GLIBC_2.28 makecontext F +GLIBC_2.28 mallinfo F +GLIBC_2.28 malloc F +GLIBC_2.28 malloc_info F +GLIBC_2.28 malloc_stats F +GLIBC_2.28 malloc_trim F +GLIBC_2.28 malloc_usable_size F +GLIBC_2.28 mallopt F +GLIBC_2.28 mallwatch D 0x4 +GLIBC_2.28 mblen F +GLIBC_2.28 mbrlen F +GLIBC_2.28 mbrtoc16 F +GLIBC_2.28 mbrtoc32 F +GLIBC_2.28 mbrtowc F +GLIBC_2.28 mbsinit F +GLIBC_2.28 mbsnrtowcs F +GLIBC_2.28 mbsrtowcs F +GLIBC_2.28 mbstowcs F +GLIBC_2.28 mbtowc F +GLIBC_2.28 mcheck F +GLIBC_2.28 mcheck_check_all F +GLIBC_2.28 mcheck_pedantic F +GLIBC_2.28 memalign F +GLIBC_2.28 memccpy F +GLIBC_2.28 memchr F +GLIBC_2.28 memcmp F +GLIBC_2.28 memcpy F +GLIBC_2.28 memfd_create F +GLIBC_2.28 memfrob F +GLIBC_2.28 memmem F +GLIBC_2.28 memmove F +GLIBC_2.28 mempcpy F +GLIBC_2.28 memrchr F +GLIBC_2.28 memset F +GLIBC_2.28 mincore F +GLIBC_2.28 mkdir F +GLIBC_2.28 mkdirat F +GLIBC_2.28 mkdtemp F +GLIBC_2.28 mkfifo F +GLIBC_2.28 mkfifoat F +GLIBC_2.28 mkostemp F +GLIBC_2.28 mkostemp64 F +GLIBC_2.28 mkostemps F +GLIBC_2.28 mkostemps64 F +GLIBC_2.28 mkstemp F +GLIBC_2.28 mkstemp64 F +GLIBC_2.28 mkstemps F +GLIBC_2.28 mkstemps64 F +GLIBC_2.28 mktemp F +GLIBC_2.28 mktime F +GLIBC_2.28 mlock F +GLIBC_2.28 mlock2 F +GLIBC_2.28 mlockall F +GLIBC_2.28 mmap F +GLIBC_2.28 mmap64 F +GLIBC_2.28 modf F +GLIBC_2.28 modff F +GLIBC_2.28 modfl F +GLIBC_2.28 moncontrol F +GLIBC_2.28 monstartup F +GLIBC_2.28 mount F +GLIBC_2.28 mprobe F +GLIBC_2.28 mprotect F +GLIBC_2.28 mrand48 F +GLIBC_2.28 mrand48_r F +GLIBC_2.28 mremap F +GLIBC_2.28 msgctl F +GLIBC_2.28 msgget F +GLIBC_2.28 msgrcv F +GLIBC_2.28 msgsnd F +GLIBC_2.28 msync F +GLIBC_2.28 mtrace F +GLIBC_2.28 munlock F +GLIBC_2.28 munlockall F +GLIBC_2.28 munmap F +GLIBC_2.28 muntrace F +GLIBC_2.28 name_to_handle_at F +GLIBC_2.28 nanosleep F +GLIBC_2.28 netname2host F +GLIBC_2.28 netname2user F +GLIBC_2.28 newlocale F +GLIBC_2.28 nfsservctl F +GLIBC_2.28 nftw F +GLIBC_2.28 nftw64 F +GLIBC_2.28 ngettext F +GLIBC_2.28 nice F +GLIBC_2.28 nl_langinfo F +GLIBC_2.28 nl_langinfo_l F +GLIBC_2.28 nrand48 F +GLIBC_2.28 nrand48_r F +GLIBC_2.28 ntohl F +GLIBC_2.28 ntohs F +GLIBC_2.28 ntp_adjtime F +GLIBC_2.28 ntp_gettime F +GLIBC_2.28 ntp_gettimex F +GLIBC_2.28 obstack_alloc_failed_handler D 0x4 +GLIBC_2.28 obstack_exit_failure D 0x4 +GLIBC_2.28 obstack_free F +GLIBC_2.28 obstack_printf F +GLIBC_2.28 obstack_vprintf F +GLIBC_2.28 on_exit F +GLIBC_2.28 open F +GLIBC_2.28 open64 F +GLIBC_2.28 open_by_handle_at F +GLIBC_2.28 open_memstream F +GLIBC_2.28 open_wmemstream F +GLIBC_2.28 openat F +GLIBC_2.28 openat64 F +GLIBC_2.28 opendir F +GLIBC_2.28 openlog F +GLIBC_2.28 optarg D 0x4 +GLIBC_2.28 opterr D 0x4 +GLIBC_2.28 optind D 0x4 +GLIBC_2.28 optopt D 0x4 +GLIBC_2.28 parse_printf_format F +GLIBC_2.28 passwd2des F +GLIBC_2.28 pathconf F +GLIBC_2.28 pause F +GLIBC_2.28 pclose F +GLIBC_2.28 perror F +GLIBC_2.28 personality F +GLIBC_2.28 pipe F +GLIBC_2.28 pipe2 F +GLIBC_2.28 pivot_root F +GLIBC_2.28 pkey_alloc F +GLIBC_2.28 pkey_free F +GLIBC_2.28 pkey_get F +GLIBC_2.28 pkey_mprotect F +GLIBC_2.28 pkey_set F +GLIBC_2.28 pmap_getmaps F +GLIBC_2.28 pmap_getport F +GLIBC_2.28 pmap_rmtcall F +GLIBC_2.28 pmap_set F +GLIBC_2.28 pmap_unset F +GLIBC_2.28 poll F +GLIBC_2.28 popen F +GLIBC_2.28 posix_fadvise F +GLIBC_2.28 posix_fadvise64 F +GLIBC_2.28 posix_fallocate F +GLIBC_2.28 posix_fallocate64 F +GLIBC_2.28 posix_madvise F +GLIBC_2.28 posix_memalign F +GLIBC_2.28 posix_openpt F +GLIBC_2.28 posix_spawn F +GLIBC_2.28 posix_spawn_file_actions_addclose F +GLIBC_2.28 posix_spawn_file_actions_adddup2 F +GLIBC_2.28 posix_spawn_file_actions_addopen F +GLIBC_2.28 posix_spawn_file_actions_destroy F +GLIBC_2.28 posix_spawn_file_actions_init F +GLIBC_2.28 posix_spawnattr_destroy F +GLIBC_2.28 posix_spawnattr_getflags F +GLIBC_2.28 posix_spawnattr_getpgroup F +GLIBC_2.28 posix_spawnattr_getschedparam F +GLIBC_2.28 posix_spawnattr_getschedpolicy F +GLIBC_2.28 posix_spawnattr_getsigdefault F +GLIBC_2.28 posix_spawnattr_getsigmask F +GLIBC_2.28 posix_spawnattr_init F +GLIBC_2.28 posix_spawnattr_setflags F +GLIBC_2.28 posix_spawnattr_setpgroup F +GLIBC_2.28 posix_spawnattr_setschedparam F +GLIBC_2.28 posix_spawnattr_setschedpolicy F +GLIBC_2.28 posix_spawnattr_setsigdefault F +GLIBC_2.28 posix_spawnattr_setsigmask F +GLIBC_2.28 posix_spawnp F +GLIBC_2.28 ppoll F +GLIBC_2.28 prctl F +GLIBC_2.28 pread F +GLIBC_2.28 pread64 F +GLIBC_2.28 preadv F +GLIBC_2.28 preadv2 F +GLIBC_2.28 preadv64 F +GLIBC_2.28 preadv64v2 F +GLIBC_2.28 printf F +GLIBC_2.28 printf_size F +GLIBC_2.28 printf_size_info F +GLIBC_2.28 prlimit F +GLIBC_2.28 prlimit64 F +GLIBC_2.28 process_vm_readv F +GLIBC_2.28 process_vm_writev F +GLIBC_2.28 profil F +GLIBC_2.28 program_invocation_name D 0x4 +GLIBC_2.28 program_invocation_short_name D 0x4 +GLIBC_2.28 pselect F +GLIBC_2.28 psiginfo F +GLIBC_2.28 psignal F +GLIBC_2.28 pthread_attr_destroy F +GLIBC_2.28 pthread_attr_getdetachstate F +GLIBC_2.28 pthread_attr_getinheritsched F +GLIBC_2.28 pthread_attr_getschedparam F +GLIBC_2.28 pthread_attr_getschedpolicy F +GLIBC_2.28 pthread_attr_getscope F +GLIBC_2.28 pthread_attr_init F +GLIBC_2.28 pthread_attr_setdetachstate F +GLIBC_2.28 pthread_attr_setinheritsched F +GLIBC_2.28 pthread_attr_setschedparam F +GLIBC_2.28 pthread_attr_setschedpolicy F +GLIBC_2.28 pthread_attr_setscope F +GLIBC_2.28 pthread_cond_broadcast F +GLIBC_2.28 pthread_cond_destroy F +GLIBC_2.28 pthread_cond_init F +GLIBC_2.28 pthread_cond_signal F +GLIBC_2.28 pthread_cond_timedwait F +GLIBC_2.28 pthread_cond_wait F +GLIBC_2.28 pthread_condattr_destroy F +GLIBC_2.28 pthread_condattr_init F +GLIBC_2.28 pthread_equal F +GLIBC_2.28 pthread_exit F +GLIBC_2.28 pthread_getschedparam F +GLIBC_2.28 pthread_mutex_destroy F +GLIBC_2.28 pthread_mutex_init F +GLIBC_2.28 pthread_mutex_lock F +GLIBC_2.28 pthread_mutex_unlock F +GLIBC_2.28 pthread_self F +GLIBC_2.28 pthread_setcancelstate F +GLIBC_2.28 pthread_setcanceltype F +GLIBC_2.28 pthread_setschedparam F +GLIBC_2.28 ptrace F +GLIBC_2.28 ptsname F +GLIBC_2.28 ptsname_r F +GLIBC_2.28 putc F +GLIBC_2.28 putc_unlocked F +GLIBC_2.28 putchar F +GLIBC_2.28 putchar_unlocked F +GLIBC_2.28 putenv F +GLIBC_2.28 putgrent F +GLIBC_2.28 putmsg F +GLIBC_2.28 putpmsg F +GLIBC_2.28 putpwent F +GLIBC_2.28 puts F +GLIBC_2.28 putsgent F +GLIBC_2.28 putspent F +GLIBC_2.28 pututline F +GLIBC_2.28 pututxline F +GLIBC_2.28 putw F +GLIBC_2.28 putwc F +GLIBC_2.28 putwc_unlocked F +GLIBC_2.28 putwchar F +GLIBC_2.28 putwchar_unlocked F +GLIBC_2.28 pvalloc F +GLIBC_2.28 pwrite F +GLIBC_2.28 pwrite64 F +GLIBC_2.28 pwritev F +GLIBC_2.28 pwritev2 F +GLIBC_2.28 pwritev64 F +GLIBC_2.28 pwritev64v2 F +GLIBC_2.28 qecvt F +GLIBC_2.28 qecvt_r F +GLIBC_2.28 qfcvt F +GLIBC_2.28 qfcvt_r F +GLIBC_2.28 qgcvt F +GLIBC_2.28 qsort F +GLIBC_2.28 qsort_r F +GLIBC_2.28 quick_exit F +GLIBC_2.28 quotactl F +GLIBC_2.28 raise F +GLIBC_2.28 rand F +GLIBC_2.28 rand_r F +GLIBC_2.28 random F +GLIBC_2.28 random_r F +GLIBC_2.28 rawmemchr F +GLIBC_2.28 rcmd F +GLIBC_2.28 rcmd_af F +GLIBC_2.28 re_comp F +GLIBC_2.28 re_compile_fastmap F +GLIBC_2.28 re_compile_pattern F +GLIBC_2.28 re_exec F +GLIBC_2.28 re_match F +GLIBC_2.28 re_match_2 F +GLIBC_2.28 re_search F +GLIBC_2.28 re_search_2 F +GLIBC_2.28 re_set_registers F +GLIBC_2.28 re_set_syntax F +GLIBC_2.28 re_syntax_options D 0x4 +GLIBC_2.28 read F +GLIBC_2.28 readahead F +GLIBC_2.28 readdir F +GLIBC_2.28 readdir64 F +GLIBC_2.28 readdir64_r F +GLIBC_2.28 readdir_r F +GLIBC_2.28 readlink F +GLIBC_2.28 readlinkat F +GLIBC_2.28 readv F +GLIBC_2.28 realloc F +GLIBC_2.28 reallocarray F +GLIBC_2.28 realpath F +GLIBC_2.28 reboot F +GLIBC_2.28 recv F +GLIBC_2.28 recvfrom F +GLIBC_2.28 recvmmsg F +GLIBC_2.28 recvmsg F +GLIBC_2.28 regcomp F +GLIBC_2.28 regerror F +GLIBC_2.28 regexec F +GLIBC_2.28 regfree F +GLIBC_2.28 register_printf_function F +GLIBC_2.28 register_printf_modifier F +GLIBC_2.28 register_printf_specifier F +GLIBC_2.28 register_printf_type F +GLIBC_2.28 registerrpc F +GLIBC_2.28 remap_file_pages F +GLIBC_2.28 remove F +GLIBC_2.28 removexattr F +GLIBC_2.28 remque F +GLIBC_2.28 rename F +GLIBC_2.28 renameat F +GLIBC_2.28 revoke F +GLIBC_2.28 rewind F +GLIBC_2.28 rewinddir F +GLIBC_2.28 rexec F +GLIBC_2.28 rexec_af F +GLIBC_2.28 rexecoptions D 0x4 +GLIBC_2.28 rindex F +GLIBC_2.28 rmdir F +GLIBC_2.28 rpc_createerr D 0x10 +GLIBC_2.28 rpmatch F +GLIBC_2.28 rresvport F +GLIBC_2.28 rresvport_af F +GLIBC_2.28 rtime F +GLIBC_2.28 ruserok F +GLIBC_2.28 ruserok_af F +GLIBC_2.28 ruserpass F +GLIBC_2.28 sbrk F +GLIBC_2.28 scalbn F +GLIBC_2.28 scalbnf F +GLIBC_2.28 scalbnl F +GLIBC_2.28 scandir F +GLIBC_2.28 scandir64 F +GLIBC_2.28 scandirat F +GLIBC_2.28 scandirat64 F +GLIBC_2.28 scanf F +GLIBC_2.28 sched_get_priority_max F +GLIBC_2.28 sched_get_priority_min F +GLIBC_2.28 sched_getaffinity F +GLIBC_2.28 sched_getcpu F +GLIBC_2.28 sched_getparam F +GLIBC_2.28 sched_getscheduler F +GLIBC_2.28 sched_rr_get_interval F +GLIBC_2.28 sched_setaffinity F +GLIBC_2.28 sched_setparam F +GLIBC_2.28 sched_setscheduler F +GLIBC_2.28 sched_yield F +GLIBC_2.28 secure_getenv F +GLIBC_2.28 seed48 F +GLIBC_2.28 seed48_r F +GLIBC_2.28 seekdir F +GLIBC_2.28 select F +GLIBC_2.28 semctl F +GLIBC_2.28 semget F +GLIBC_2.28 semop F +GLIBC_2.28 semtimedop F +GLIBC_2.28 send F +GLIBC_2.28 sendfile F +GLIBC_2.28 sendfile64 F +GLIBC_2.28 sendmmsg F +GLIBC_2.28 sendmsg F +GLIBC_2.28 sendto F +GLIBC_2.28 setaliasent F +GLIBC_2.28 setbuf F +GLIBC_2.28 setbuffer F +GLIBC_2.28 setcontext F +GLIBC_2.28 setdomainname F +GLIBC_2.28 setegid F +GLIBC_2.28 setenv F +GLIBC_2.28 seteuid F +GLIBC_2.28 setfsent F +GLIBC_2.28 setfsgid F +GLIBC_2.28 setfsuid F +GLIBC_2.28 setgid F +GLIBC_2.28 setgrent F +GLIBC_2.28 setgroups F +GLIBC_2.28 sethostent F +GLIBC_2.28 sethostid F +GLIBC_2.28 sethostname F +GLIBC_2.28 setipv4sourcefilter F +GLIBC_2.28 setitimer F +GLIBC_2.28 setjmp F +GLIBC_2.28 setlinebuf F +GLIBC_2.28 setlocale F +GLIBC_2.28 setlogin F +GLIBC_2.28 setlogmask F +GLIBC_2.28 setmntent F +GLIBC_2.28 setnetent F +GLIBC_2.28 setnetgrent F +GLIBC_2.28 setns F +GLIBC_2.28 setpgid F +GLIBC_2.28 setpgrp F +GLIBC_2.28 setpriority F +GLIBC_2.28 setprotoent F +GLIBC_2.28 setpwent F +GLIBC_2.28 setregid F +GLIBC_2.28 setresgid F +GLIBC_2.28 setresuid F +GLIBC_2.28 setreuid F +GLIBC_2.28 setrlimit F +GLIBC_2.28 setrlimit64 F +GLIBC_2.28 setrpcent F +GLIBC_2.28 setservent F +GLIBC_2.28 setsgent F +GLIBC_2.28 setsid F +GLIBC_2.28 setsockopt F +GLIBC_2.28 setsourcefilter F +GLIBC_2.28 setspent F +GLIBC_2.28 setstate F +GLIBC_2.28 setstate_r F +GLIBC_2.28 settimeofday F +GLIBC_2.28 setttyent F +GLIBC_2.28 setuid F +GLIBC_2.28 setusershell F +GLIBC_2.28 setutent F +GLIBC_2.28 setutxent F +GLIBC_2.28 setvbuf F +GLIBC_2.28 setxattr F +GLIBC_2.28 sgetsgent F +GLIBC_2.28 sgetsgent_r F +GLIBC_2.28 sgetspent F +GLIBC_2.28 sgetspent_r F +GLIBC_2.28 shmat F +GLIBC_2.28 shmctl F +GLIBC_2.28 shmdt F +GLIBC_2.28 shmget F +GLIBC_2.28 shutdown F +GLIBC_2.28 sigaction F +GLIBC_2.28 sigaddset F +GLIBC_2.28 sigaltstack F +GLIBC_2.28 sigandset F +GLIBC_2.28 sigblock F +GLIBC_2.28 sigdelset F +GLIBC_2.28 sigemptyset F +GLIBC_2.28 sigfillset F +GLIBC_2.28 siggetmask F +GLIBC_2.28 sighold F +GLIBC_2.28 sigignore F +GLIBC_2.28 siginterrupt F +GLIBC_2.28 sigisemptyset F +GLIBC_2.28 sigismember F +GLIBC_2.28 siglongjmp F +GLIBC_2.28 signal F +GLIBC_2.28 signalfd F +GLIBC_2.28 sigorset F +GLIBC_2.28 sigpause F +GLIBC_2.28 sigpending F +GLIBC_2.28 sigprocmask F +GLIBC_2.28 sigqueue F +GLIBC_2.28 sigrelse F +GLIBC_2.28 sigreturn F +GLIBC_2.28 sigset F +GLIBC_2.28 sigsetmask F +GLIBC_2.28 sigstack F +GLIBC_2.28 sigsuspend F +GLIBC_2.28 sigtimedwait F +GLIBC_2.28 sigwait F +GLIBC_2.28 sigwaitinfo F +GLIBC_2.28 sleep F +GLIBC_2.28 snprintf F +GLIBC_2.28 sockatmark F +GLIBC_2.28 socket F +GLIBC_2.28 socketpair F +GLIBC_2.28 splice F +GLIBC_2.28 sprintf F +GLIBC_2.28 sprofil F +GLIBC_2.28 srand F +GLIBC_2.28 srand48 F +GLIBC_2.28 srand48_r F +GLIBC_2.28 srandom F +GLIBC_2.28 srandom_r F +GLIBC_2.28 sscanf F +GLIBC_2.28 ssignal F +GLIBC_2.28 sstk F +GLIBC_2.28 statfs F +GLIBC_2.28 statfs64 F +GLIBC_2.28 statvfs F +GLIBC_2.28 statvfs64 F +GLIBC_2.28 stderr D 0x4 +GLIBC_2.28 stdin D 0x4 +GLIBC_2.28 stdout D 0x4 +GLIBC_2.28 stime F +GLIBC_2.28 stpcpy F +GLIBC_2.28 stpncpy F +GLIBC_2.28 strcasecmp F +GLIBC_2.28 strcasecmp_l F +GLIBC_2.28 strcasestr F +GLIBC_2.28 strcat F +GLIBC_2.28 strchr F +GLIBC_2.28 strchrnul F +GLIBC_2.28 strcmp F +GLIBC_2.28 strcoll F +GLIBC_2.28 strcoll_l F +GLIBC_2.28 strcpy F +GLIBC_2.28 strcspn F +GLIBC_2.28 strdup F +GLIBC_2.28 strerror F +GLIBC_2.28 strerror_l F +GLIBC_2.28 strerror_r F +GLIBC_2.28 strfmon F +GLIBC_2.28 strfmon_l F +GLIBC_2.28 strfromd F +GLIBC_2.28 strfromf F +GLIBC_2.28 strfromf32 F +GLIBC_2.28 strfromf32x F +GLIBC_2.28 strfromf64 F +GLIBC_2.28 strfroml F +GLIBC_2.28 strfry F +GLIBC_2.28 strftime F +GLIBC_2.28 strftime_l F +GLIBC_2.28 strlen F +GLIBC_2.28 strncasecmp F +GLIBC_2.28 strncasecmp_l F +GLIBC_2.28 strncat F +GLIBC_2.28 strncmp F +GLIBC_2.28 strncpy F +GLIBC_2.28 strndup F +GLIBC_2.28 strnlen F +GLIBC_2.28 strpbrk F +GLIBC_2.28 strptime F +GLIBC_2.28 strptime_l F +GLIBC_2.28 strrchr F +GLIBC_2.28 strsep F +GLIBC_2.28 strsignal F +GLIBC_2.28 strspn F +GLIBC_2.28 strstr F +GLIBC_2.28 strtod F +GLIBC_2.28 strtod_l F +GLIBC_2.28 strtof F +GLIBC_2.28 strtof32 F +GLIBC_2.28 strtof32_l F +GLIBC_2.28 strtof32x F +GLIBC_2.28 strtof32x_l F +GLIBC_2.28 strtof64 F +GLIBC_2.28 strtof64_l F +GLIBC_2.28 strtof_l F +GLIBC_2.28 strtoimax F +GLIBC_2.28 strtok F +GLIBC_2.28 strtok_r F +GLIBC_2.28 strtol F +GLIBC_2.28 strtol_l F +GLIBC_2.28 strtold F +GLIBC_2.28 strtold_l F +GLIBC_2.28 strtoll F +GLIBC_2.28 strtoll_l F +GLIBC_2.28 strtoq F +GLIBC_2.28 strtoul F +GLIBC_2.28 strtoul_l F +GLIBC_2.28 strtoull F +GLIBC_2.28 strtoull_l F +GLIBC_2.28 strtoumax F +GLIBC_2.28 strtouq F +GLIBC_2.28 strverscmp F +GLIBC_2.28 strxfrm F +GLIBC_2.28 strxfrm_l F +GLIBC_2.28 stty F +GLIBC_2.28 svc_exit F +GLIBC_2.28 svc_fdset D 0x80 +GLIBC_2.28 svc_getreq F +GLIBC_2.28 svc_getreq_common F +GLIBC_2.28 svc_getreq_poll F +GLIBC_2.28 svc_getreqset F +GLIBC_2.28 svc_max_pollfd D 0x4 +GLIBC_2.28 svc_pollfd D 0x4 +GLIBC_2.28 svc_register F +GLIBC_2.28 svc_run F +GLIBC_2.28 svc_sendreply F +GLIBC_2.28 svc_unregister F +GLIBC_2.28 svcauthdes_stats D 0xc +GLIBC_2.28 svcerr_auth F +GLIBC_2.28 svcerr_decode F +GLIBC_2.28 svcerr_noproc F +GLIBC_2.28 svcerr_noprog F +GLIBC_2.28 svcerr_progvers F +GLIBC_2.28 svcerr_systemerr F +GLIBC_2.28 svcerr_weakauth F +GLIBC_2.28 svcfd_create F +GLIBC_2.28 svcraw_create F +GLIBC_2.28 svctcp_create F +GLIBC_2.28 svcudp_bufcreate F +GLIBC_2.28 svcudp_create F +GLIBC_2.28 svcudp_enablecache F +GLIBC_2.28 svcunix_create F +GLIBC_2.28 svcunixfd_create F +GLIBC_2.28 swab F +GLIBC_2.28 swapcontext F +GLIBC_2.28 swapoff F +GLIBC_2.28 swapon F +GLIBC_2.28 swprintf F +GLIBC_2.28 swscanf F +GLIBC_2.28 symlink F +GLIBC_2.28 symlinkat F +GLIBC_2.28 sync F +GLIBC_2.28 sync_file_range F +GLIBC_2.28 syncfs F +GLIBC_2.28 sys_errlist D 0x21c +GLIBC_2.28 sys_nerr D 0x4 +GLIBC_2.28 sys_sigabbrev D 0x104 +GLIBC_2.28 sys_siglist D 0x104 +GLIBC_2.28 syscall F +GLIBC_2.28 sysconf F +GLIBC_2.28 sysinfo F +GLIBC_2.28 syslog F +GLIBC_2.28 system F +GLIBC_2.28 sysv_signal F +GLIBC_2.28 tcdrain F +GLIBC_2.28 tcflow F +GLIBC_2.28 tcflush F +GLIBC_2.28 tcgetattr F +GLIBC_2.28 tcgetpgrp F +GLIBC_2.28 tcgetsid F +GLIBC_2.28 tcsendbreak F +GLIBC_2.28 tcsetattr F +GLIBC_2.28 tcsetpgrp F +GLIBC_2.28 tdelete F +GLIBC_2.28 tdestroy F +GLIBC_2.28 tee F +GLIBC_2.28 telldir F +GLIBC_2.28 tempnam F +GLIBC_2.28 textdomain F +GLIBC_2.28 tfind F +GLIBC_2.28 time F +GLIBC_2.28 timegm F +GLIBC_2.28 timelocal F +GLIBC_2.28 timerfd_create F +GLIBC_2.28 timerfd_gettime F +GLIBC_2.28 timerfd_settime F +GLIBC_2.28 times F +GLIBC_2.28 timespec_get F +GLIBC_2.28 timezone D 0x4 +GLIBC_2.28 tmpfile F +GLIBC_2.28 tmpfile64 F +GLIBC_2.28 tmpnam F +GLIBC_2.28 tmpnam_r F +GLIBC_2.28 toascii F +GLIBC_2.28 tolower F +GLIBC_2.28 tolower_l F +GLIBC_2.28 toupper F +GLIBC_2.28 toupper_l F +GLIBC_2.28 towctrans F +GLIBC_2.28 towctrans_l F +GLIBC_2.28 towlower F +GLIBC_2.28 towlower_l F +GLIBC_2.28 towupper F +GLIBC_2.28 towupper_l F +GLIBC_2.28 tr_break F +GLIBC_2.28 truncate F +GLIBC_2.28 truncate64 F +GLIBC_2.28 tsearch F +GLIBC_2.28 ttyname F +GLIBC_2.28 ttyname_r F +GLIBC_2.28 ttyslot F +GLIBC_2.28 twalk F +GLIBC_2.28 tzname D 0x8 +GLIBC_2.28 tzset F +GLIBC_2.28 ualarm F +GLIBC_2.28 ulckpwdf F +GLIBC_2.28 ulimit F +GLIBC_2.28 umask F +GLIBC_2.28 umount F +GLIBC_2.28 umount2 F +GLIBC_2.28 uname F +GLIBC_2.28 ungetc F +GLIBC_2.28 ungetwc F +GLIBC_2.28 unlink F +GLIBC_2.28 unlinkat F +GLIBC_2.28 unlockpt F +GLIBC_2.28 unsetenv F +GLIBC_2.28 unshare F +GLIBC_2.28 updwtmp F +GLIBC_2.28 updwtmpx F +GLIBC_2.28 uselocale F +GLIBC_2.28 user2netname F +GLIBC_2.28 usleep F +GLIBC_2.28 ustat F +GLIBC_2.28 utime F +GLIBC_2.28 utimensat F +GLIBC_2.28 utimes F +GLIBC_2.28 utmpname F +GLIBC_2.28 utmpxname F +GLIBC_2.28 valloc F +GLIBC_2.28 vasprintf F +GLIBC_2.28 vdprintf F +GLIBC_2.28 verr F +GLIBC_2.28 verrx F +GLIBC_2.28 versionsort F +GLIBC_2.28 versionsort64 F +GLIBC_2.28 vfork F +GLIBC_2.28 vfprintf F +GLIBC_2.28 vfscanf F +GLIBC_2.28 vfwprintf F +GLIBC_2.28 vfwscanf F +GLIBC_2.28 vhangup F +GLIBC_2.28 vlimit F +GLIBC_2.28 vmsplice F +GLIBC_2.28 vprintf F +GLIBC_2.28 vscanf F +GLIBC_2.28 vsnprintf F +GLIBC_2.28 vsprintf F +GLIBC_2.28 vsscanf F +GLIBC_2.28 vswprintf F +GLIBC_2.28 vswscanf F +GLIBC_2.28 vsyslog F +GLIBC_2.28 vtimes F +GLIBC_2.28 vwarn F +GLIBC_2.28 vwarnx F +GLIBC_2.28 vwprintf F +GLIBC_2.28 vwscanf F +GLIBC_2.28 wait F +GLIBC_2.28 wait3 F +GLIBC_2.28 wait4 F +GLIBC_2.28 waitid F +GLIBC_2.28 waitpid F +GLIBC_2.28 warn F +GLIBC_2.28 warnx F +GLIBC_2.28 wcpcpy F +GLIBC_2.28 wcpncpy F +GLIBC_2.28 wcrtomb F +GLIBC_2.28 wcscasecmp F +GLIBC_2.28 wcscasecmp_l F +GLIBC_2.28 wcscat F +GLIBC_2.28 wcschr F +GLIBC_2.28 wcschrnul F +GLIBC_2.28 wcscmp F +GLIBC_2.28 wcscoll F +GLIBC_2.28 wcscoll_l F +GLIBC_2.28 wcscpy F +GLIBC_2.28 wcscspn F +GLIBC_2.28 wcsdup F +GLIBC_2.28 wcsftime F +GLIBC_2.28 wcsftime_l F +GLIBC_2.28 wcslen F +GLIBC_2.28 wcsncasecmp F +GLIBC_2.28 wcsncasecmp_l F +GLIBC_2.28 wcsncat F +GLIBC_2.28 wcsncmp F +GLIBC_2.28 wcsncpy F +GLIBC_2.28 wcsnlen F +GLIBC_2.28 wcsnrtombs F +GLIBC_2.28 wcspbrk F +GLIBC_2.28 wcsrchr F +GLIBC_2.28 wcsrtombs F +GLIBC_2.28 wcsspn F +GLIBC_2.28 wcsstr F +GLIBC_2.28 wcstod F +GLIBC_2.28 wcstod_l F +GLIBC_2.28 wcstof F +GLIBC_2.28 wcstof32 F +GLIBC_2.28 wcstof32_l F +GLIBC_2.28 wcstof32x F +GLIBC_2.28 wcstof32x_l F +GLIBC_2.28 wcstof64 F +GLIBC_2.28 wcstof64_l F +GLIBC_2.28 wcstof_l F +GLIBC_2.28 wcstoimax F +GLIBC_2.28 wcstok F +GLIBC_2.28 wcstol F +GLIBC_2.28 wcstol_l F +GLIBC_2.28 wcstold F +GLIBC_2.28 wcstold_l F +GLIBC_2.28 wcstoll F +GLIBC_2.28 wcstoll_l F +GLIBC_2.28 wcstombs F +GLIBC_2.28 wcstoq F +GLIBC_2.28 wcstoul F +GLIBC_2.28 wcstoul_l F +GLIBC_2.28 wcstoull F +GLIBC_2.28 wcstoull_l F +GLIBC_2.28 wcstoumax F +GLIBC_2.28 wcstouq F +GLIBC_2.28 wcswcs F +GLIBC_2.28 wcswidth F +GLIBC_2.28 wcsxfrm F +GLIBC_2.28 wcsxfrm_l F +GLIBC_2.28 wctob F +GLIBC_2.28 wctomb F +GLIBC_2.28 wctrans F +GLIBC_2.28 wctrans_l F +GLIBC_2.28 wctype F +GLIBC_2.28 wctype_l F +GLIBC_2.28 wcwidth F +GLIBC_2.28 wmemchr F +GLIBC_2.28 wmemcmp F +GLIBC_2.28 wmemcpy F +GLIBC_2.28 wmemmove F +GLIBC_2.28 wmempcpy F +GLIBC_2.28 wmemset F +GLIBC_2.28 wordexp F +GLIBC_2.28 wordfree F +GLIBC_2.28 wprintf F +GLIBC_2.28 write F +GLIBC_2.28 writev F +GLIBC_2.28 wscanf F +GLIBC_2.28 xdecrypt F +GLIBC_2.28 xdr_accepted_reply F +GLIBC_2.28 xdr_array F +GLIBC_2.28 xdr_authdes_cred F +GLIBC_2.28 xdr_authdes_verf F +GLIBC_2.28 xdr_authunix_parms F +GLIBC_2.28 xdr_bool F +GLIBC_2.28 xdr_bytes F +GLIBC_2.28 xdr_callhdr F +GLIBC_2.28 xdr_callmsg F +GLIBC_2.28 xdr_char F +GLIBC_2.28 xdr_cryptkeyarg F +GLIBC_2.28 xdr_cryptkeyarg2 F +GLIBC_2.28 xdr_cryptkeyres F +GLIBC_2.28 xdr_des_block F +GLIBC_2.28 xdr_double F +GLIBC_2.28 xdr_enum F +GLIBC_2.28 xdr_float F +GLIBC_2.28 xdr_free F +GLIBC_2.28 xdr_getcredres F +GLIBC_2.28 xdr_hyper F +GLIBC_2.28 xdr_int F +GLIBC_2.28 xdr_int16_t F +GLIBC_2.28 xdr_int32_t F +GLIBC_2.28 xdr_int64_t F +GLIBC_2.28 xdr_int8_t F +GLIBC_2.28 xdr_key_netstarg F +GLIBC_2.28 xdr_key_netstres F +GLIBC_2.28 xdr_keybuf F +GLIBC_2.28 xdr_keystatus F +GLIBC_2.28 xdr_long F +GLIBC_2.28 xdr_longlong_t F +GLIBC_2.28 xdr_netnamestr F +GLIBC_2.28 xdr_netobj F +GLIBC_2.28 xdr_opaque F +GLIBC_2.28 xdr_opaque_auth F +GLIBC_2.28 xdr_pmap F +GLIBC_2.28 xdr_pmaplist F +GLIBC_2.28 xdr_pointer F +GLIBC_2.28 xdr_quad_t F +GLIBC_2.28 xdr_reference F +GLIBC_2.28 xdr_rejected_reply F +GLIBC_2.28 xdr_replymsg F +GLIBC_2.28 xdr_rmtcall_args F +GLIBC_2.28 xdr_rmtcallres F +GLIBC_2.28 xdr_short F +GLIBC_2.28 xdr_sizeof F +GLIBC_2.28 xdr_string F +GLIBC_2.28 xdr_u_char F +GLIBC_2.28 xdr_u_hyper F +GLIBC_2.28 xdr_u_int F +GLIBC_2.28 xdr_u_long F +GLIBC_2.28 xdr_u_longlong_t F +GLIBC_2.28 xdr_u_quad_t F +GLIBC_2.28 xdr_u_short F +GLIBC_2.28 xdr_uint16_t F +GLIBC_2.28 xdr_uint32_t F +GLIBC_2.28 xdr_uint64_t F +GLIBC_2.28 xdr_uint8_t F +GLIBC_2.28 xdr_union F +GLIBC_2.28 xdr_unixcred F +GLIBC_2.28 xdr_vector F +GLIBC_2.28 xdr_void F +GLIBC_2.28 xdr_wrapstring F +GLIBC_2.28 xdrmem_create F +GLIBC_2.28 xdrrec_create F +GLIBC_2.28 xdrrec_endofrecord F +GLIBC_2.28 xdrrec_eof F +GLIBC_2.28 xdrrec_skiprecord F +GLIBC_2.28 xdrstdio_create F +GLIBC_2.28 xencrypt F +GLIBC_2.28 xprt_register F +GLIBC_2.28 xprt_unregister F diff --git a/sysdeps/unix/sysv/linux/nds32/libcidn.abilist b/sysdeps/unix/sysv/linux/nds32/libcidn.abilist new file mode 100644 index 0000000..e69de29 diff --git a/sysdeps/unix/sysv/linux/nds32/libcrypt.abilist b/sysdeps/unix/sysv/linux/nds32/libcrypt.abilist new file mode 100644 index 0000000..8e676ee --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/libcrypt.abilist @@ -0,0 +1,8 @@ +GLIBC_2.28 GLIBC_2.28 A +GLIBC_2.28 crypt F +GLIBC_2.28 crypt_r F +GLIBC_2.28 encrypt F +GLIBC_2.28 encrypt_r F +GLIBC_2.28 fcrypt F +GLIBC_2.28 setkey F +GLIBC_2.28 setkey_r F diff --git a/sysdeps/unix/sysv/linux/nds32/libdl.abilist b/sysdeps/unix/sysv/linux/nds32/libdl.abilist new file mode 100644 index 0000000..8b08f60 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/libdl.abilist @@ -0,0 +1,10 @@ +GLIBC_2.28 GLIBC_2.28 A +GLIBC_2.28 dladdr F +GLIBC_2.28 dladdr1 F +GLIBC_2.28 dlclose F +GLIBC_2.28 dlerror F +GLIBC_2.28 dlinfo F +GLIBC_2.28 dlmopen F +GLIBC_2.28 dlopen F +GLIBC_2.28 dlsym F +GLIBC_2.28 dlvsym F diff --git a/sysdeps/unix/sysv/linux/nds32/libm.abilist b/sysdeps/unix/sysv/linux/nds32/libm.abilist new file mode 100644 index 0000000..c210e4e --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/libm.abilist @@ -0,0 +1,730 @@ +GLIBC_2.28 GLIBC_2.28 A +GLIBC_2.28 __acos_finite F +GLIBC_2.28 __acosf_finite F +GLIBC_2.28 __acosh_finite F +GLIBC_2.28 __acoshf_finite F +GLIBC_2.28 __asin_finite F +GLIBC_2.28 __asinf_finite F +GLIBC_2.28 __atan2_finite F +GLIBC_2.28 __atan2f_finite F +GLIBC_2.28 __atanh_finite F +GLIBC_2.28 __atanhf_finite F +GLIBC_2.28 __clog10 F +GLIBC_2.28 __clog10f F +GLIBC_2.28 __clog10l F +GLIBC_2.28 __cosh_finite F +GLIBC_2.28 __coshf_finite F +GLIBC_2.28 __exp10_finite F +GLIBC_2.28 __exp10f_finite F +GLIBC_2.28 __exp2_finite F +GLIBC_2.28 __exp2f_finite F +GLIBC_2.28 __exp_finite F +GLIBC_2.28 __expf_finite F +GLIBC_2.28 __finite F +GLIBC_2.28 __finitef F +GLIBC_2.28 __fmod_finite F +GLIBC_2.28 __fmodf_finite F +GLIBC_2.28 __fpclassify F +GLIBC_2.28 __fpclassifyf F +GLIBC_2.28 __gamma_r_finite F +GLIBC_2.28 __gammaf_r_finite F +GLIBC_2.28 __hypot_finite F +GLIBC_2.28 __hypotf_finite F +GLIBC_2.28 __iseqsig F +GLIBC_2.28 __iseqsigf F +GLIBC_2.28 __issignaling F +GLIBC_2.28 __issignalingf F +GLIBC_2.28 __j0_finite F +GLIBC_2.28 __j0f_finite F +GLIBC_2.28 __j1_finite F +GLIBC_2.28 __j1f_finite F +GLIBC_2.28 __jn_finite F +GLIBC_2.28 __jnf_finite F +GLIBC_2.28 __lgamma_r_finite F +GLIBC_2.28 __lgammaf_r_finite F +GLIBC_2.28 __log10_finite F +GLIBC_2.28 __log10f_finite F +GLIBC_2.28 __log2_finite F +GLIBC_2.28 __log2f_finite F +GLIBC_2.28 __log_finite F +GLIBC_2.28 __logf_finite F +GLIBC_2.28 __pow_finite F +GLIBC_2.28 __powf_finite F +GLIBC_2.28 __remainder_finite F +GLIBC_2.28 __remainderf_finite F +GLIBC_2.28 __scalb_finite F +GLIBC_2.28 __scalbf_finite F +GLIBC_2.28 __signbit F +GLIBC_2.28 __signbitf F +GLIBC_2.28 __signgam D 0x4 +GLIBC_2.28 __sinh_finite F +GLIBC_2.28 __sinhf_finite F +GLIBC_2.28 __sqrt_finite F +GLIBC_2.28 __sqrtf_finite F +GLIBC_2.28 __y0_finite F +GLIBC_2.28 __y0f_finite F +GLIBC_2.28 __y1_finite F +GLIBC_2.28 __y1f_finite F +GLIBC_2.28 __yn_finite F +GLIBC_2.28 __ynf_finite F +GLIBC_2.28 acos F +GLIBC_2.28 acosf F +GLIBC_2.28 acosf32 F +GLIBC_2.28 acosf32x F +GLIBC_2.28 acosf64 F +GLIBC_2.28 acosh F +GLIBC_2.28 acoshf F +GLIBC_2.28 acoshf32 F +GLIBC_2.28 acoshf32x F +GLIBC_2.28 acoshf64 F +GLIBC_2.28 acoshl F +GLIBC_2.28 acosl F +GLIBC_2.28 asin F +GLIBC_2.28 asinf F +GLIBC_2.28 asinf32 F +GLIBC_2.28 asinf32x F +GLIBC_2.28 asinf64 F +GLIBC_2.28 asinh F +GLIBC_2.28 asinhf F +GLIBC_2.28 asinhf32 F +GLIBC_2.28 asinhf32x F +GLIBC_2.28 asinhf64 F +GLIBC_2.28 asinhl F +GLIBC_2.28 asinl F +GLIBC_2.28 atan F +GLIBC_2.28 atan2 F +GLIBC_2.28 atan2f F +GLIBC_2.28 atan2f32 F +GLIBC_2.28 atan2f32x F +GLIBC_2.28 atan2f64 F +GLIBC_2.28 atan2l F +GLIBC_2.28 atanf F +GLIBC_2.28 atanf32 F +GLIBC_2.28 atanf32x F +GLIBC_2.28 atanf64 F +GLIBC_2.28 atanh F +GLIBC_2.28 atanhf F +GLIBC_2.28 atanhf32 F +GLIBC_2.28 atanhf32x F +GLIBC_2.28 atanhf64 F +GLIBC_2.28 atanhl F +GLIBC_2.28 atanl F +GLIBC_2.28 cabs F +GLIBC_2.28 cabsf F +GLIBC_2.28 cabsf32 F +GLIBC_2.28 cabsf32x F +GLIBC_2.28 cabsf64 F +GLIBC_2.28 cabsl F +GLIBC_2.28 cacos F +GLIBC_2.28 cacosf F +GLIBC_2.28 cacosf32 F +GLIBC_2.28 cacosf32x F +GLIBC_2.28 cacosf64 F +GLIBC_2.28 cacosh F +GLIBC_2.28 cacoshf F +GLIBC_2.28 cacoshf32 F +GLIBC_2.28 cacoshf32x F +GLIBC_2.28 cacoshf64 F +GLIBC_2.28 cacoshl F +GLIBC_2.28 cacosl F +GLIBC_2.28 canonicalize F +GLIBC_2.28 canonicalizef F +GLIBC_2.28 canonicalizef32 F +GLIBC_2.28 canonicalizef32x F +GLIBC_2.28 canonicalizef64 F +GLIBC_2.28 canonicalizel F +GLIBC_2.28 carg F +GLIBC_2.28 cargf F +GLIBC_2.28 cargf32 F +GLIBC_2.28 cargf32x F +GLIBC_2.28 cargf64 F +GLIBC_2.28 cargl F +GLIBC_2.28 casin F +GLIBC_2.28 casinf F +GLIBC_2.28 casinf32 F +GLIBC_2.28 casinf32x F +GLIBC_2.28 casinf64 F +GLIBC_2.28 casinh F +GLIBC_2.28 casinhf F +GLIBC_2.28 casinhf32 F +GLIBC_2.28 casinhf32x F +GLIBC_2.28 casinhf64 F +GLIBC_2.28 casinhl F +GLIBC_2.28 casinl F +GLIBC_2.28 catan F +GLIBC_2.28 catanf F +GLIBC_2.28 catanf32 F +GLIBC_2.28 catanf32x F +GLIBC_2.28 catanf64 F +GLIBC_2.28 catanh F +GLIBC_2.28 catanhf F +GLIBC_2.28 catanhf32 F +GLIBC_2.28 catanhf32x F +GLIBC_2.28 catanhf64 F +GLIBC_2.28 catanhl F +GLIBC_2.28 catanl F +GLIBC_2.28 cbrt F +GLIBC_2.28 cbrtf F +GLIBC_2.28 cbrtf32 F +GLIBC_2.28 cbrtf32x F +GLIBC_2.28 cbrtf64 F +GLIBC_2.28 cbrtl F +GLIBC_2.28 ccos F +GLIBC_2.28 ccosf F +GLIBC_2.28 ccosf32 F +GLIBC_2.28 ccosf32x F +GLIBC_2.28 ccosf64 F +GLIBC_2.28 ccosh F +GLIBC_2.28 ccoshf F +GLIBC_2.28 ccoshf32 F +GLIBC_2.28 ccoshf32x F +GLIBC_2.28 ccoshf64 F +GLIBC_2.28 ccoshl F +GLIBC_2.28 ccosl F +GLIBC_2.28 ceil F +GLIBC_2.28 ceilf F +GLIBC_2.28 ceilf32 F +GLIBC_2.28 ceilf32x F +GLIBC_2.28 ceilf64 F +GLIBC_2.28 ceill F +GLIBC_2.28 cexp F +GLIBC_2.28 cexpf F +GLIBC_2.28 cexpf32 F +GLIBC_2.28 cexpf32x F +GLIBC_2.28 cexpf64 F +GLIBC_2.28 cexpl F +GLIBC_2.28 cimag F +GLIBC_2.28 cimagf F +GLIBC_2.28 cimagf32 F +GLIBC_2.28 cimagf32x F +GLIBC_2.28 cimagf64 F +GLIBC_2.28 cimagl F +GLIBC_2.28 clog F +GLIBC_2.28 clog10 F +GLIBC_2.28 clog10f F +GLIBC_2.28 clog10f32 F +GLIBC_2.28 clog10f32x F +GLIBC_2.28 clog10f64 F +GLIBC_2.28 clog10l F +GLIBC_2.28 clogf F +GLIBC_2.28 clogf32 F +GLIBC_2.28 clogf32x F +GLIBC_2.28 clogf64 F +GLIBC_2.28 clogl F +GLIBC_2.28 conj F +GLIBC_2.28 conjf F +GLIBC_2.28 conjf32 F +GLIBC_2.28 conjf32x F +GLIBC_2.28 conjf64 F +GLIBC_2.28 conjl F +GLIBC_2.28 copysign F +GLIBC_2.28 copysignf F +GLIBC_2.28 copysignf32 F +GLIBC_2.28 copysignf32x F +GLIBC_2.28 copysignf64 F +GLIBC_2.28 copysignl F +GLIBC_2.28 cos F +GLIBC_2.28 cosf F +GLIBC_2.28 cosf32 F +GLIBC_2.28 cosf32x F +GLIBC_2.28 cosf64 F +GLIBC_2.28 cosh F +GLIBC_2.28 coshf F +GLIBC_2.28 coshf32 F +GLIBC_2.28 coshf32x F +GLIBC_2.28 coshf64 F +GLIBC_2.28 coshl F +GLIBC_2.28 cosl F +GLIBC_2.28 cpow F +GLIBC_2.28 cpowf F +GLIBC_2.28 cpowf32 F +GLIBC_2.28 cpowf32x F +GLIBC_2.28 cpowf64 F +GLIBC_2.28 cpowl F +GLIBC_2.28 cproj F +GLIBC_2.28 cprojf F +GLIBC_2.28 cprojf32 F +GLIBC_2.28 cprojf32x F +GLIBC_2.28 cprojf64 F +GLIBC_2.28 cprojl F +GLIBC_2.28 creal F +GLIBC_2.28 crealf F +GLIBC_2.28 crealf32 F +GLIBC_2.28 crealf32x F +GLIBC_2.28 crealf64 F +GLIBC_2.28 creall F +GLIBC_2.28 csin F +GLIBC_2.28 csinf F +GLIBC_2.28 csinf32 F +GLIBC_2.28 csinf32x F +GLIBC_2.28 csinf64 F +GLIBC_2.28 csinh F +GLIBC_2.28 csinhf F +GLIBC_2.28 csinhf32 F +GLIBC_2.28 csinhf32x F +GLIBC_2.28 csinhf64 F +GLIBC_2.28 csinhl F +GLIBC_2.28 csinl F +GLIBC_2.28 csqrt F +GLIBC_2.28 csqrtf F +GLIBC_2.28 csqrtf32 F +GLIBC_2.28 csqrtf32x F +GLIBC_2.28 csqrtf64 F +GLIBC_2.28 csqrtl F +GLIBC_2.28 ctan F +GLIBC_2.28 ctanf F +GLIBC_2.28 ctanf32 F +GLIBC_2.28 ctanf32x F +GLIBC_2.28 ctanf64 F +GLIBC_2.28 ctanh F +GLIBC_2.28 ctanhf F +GLIBC_2.28 ctanhf32 F +GLIBC_2.28 ctanhf32x F +GLIBC_2.28 ctanhf64 F +GLIBC_2.28 ctanhl F +GLIBC_2.28 ctanl F +GLIBC_2.28 drem F +GLIBC_2.28 dremf F +GLIBC_2.28 dreml F +GLIBC_2.28 erf F +GLIBC_2.28 erfc F +GLIBC_2.28 erfcf F +GLIBC_2.28 erfcf32 F +GLIBC_2.28 erfcf32x F +GLIBC_2.28 erfcf64 F +GLIBC_2.28 erfcl F +GLIBC_2.28 erff F +GLIBC_2.28 erff32 F +GLIBC_2.28 erff32x F +GLIBC_2.28 erff64 F +GLIBC_2.28 erfl F +GLIBC_2.28 exp F +GLIBC_2.28 exp10 F +GLIBC_2.28 exp10f F +GLIBC_2.28 exp10f32 F +GLIBC_2.28 exp10f32x F +GLIBC_2.28 exp10f64 F +GLIBC_2.28 exp10l F +GLIBC_2.28 exp2 F +GLIBC_2.28 exp2f F +GLIBC_2.28 exp2f32 F +GLIBC_2.28 exp2f32x F +GLIBC_2.28 exp2f64 F +GLIBC_2.28 exp2l F +GLIBC_2.28 expf F +GLIBC_2.28 expf32 F +GLIBC_2.28 expf32x F +GLIBC_2.28 expf64 F +GLIBC_2.28 expl F +GLIBC_2.28 expm1 F +GLIBC_2.28 expm1f F +GLIBC_2.28 expm1f32 F +GLIBC_2.28 expm1f32x F +GLIBC_2.28 expm1f64 F +GLIBC_2.28 expm1l F +GLIBC_2.28 fabs F +GLIBC_2.28 fabsf F +GLIBC_2.28 fabsf32 F +GLIBC_2.28 fabsf32x F +GLIBC_2.28 fabsf64 F +GLIBC_2.28 fabsl F +GLIBC_2.28 fdim F +GLIBC_2.28 fdimf F +GLIBC_2.28 fdimf32 F +GLIBC_2.28 fdimf32x F +GLIBC_2.28 fdimf64 F +GLIBC_2.28 fdiml F +GLIBC_2.28 feclearexcept F +GLIBC_2.28 fedisableexcept F +GLIBC_2.28 feenableexcept F +GLIBC_2.28 fegetenv F +GLIBC_2.28 fegetexcept F +GLIBC_2.28 fegetexceptflag F +GLIBC_2.28 fegetmode F +GLIBC_2.28 fegetround F +GLIBC_2.28 feholdexcept F +GLIBC_2.28 feraiseexcept F +GLIBC_2.28 fesetenv F +GLIBC_2.28 fesetexcept F +GLIBC_2.28 fesetexceptflag F +GLIBC_2.28 fesetmode F +GLIBC_2.28 fesetround F +GLIBC_2.28 fetestexcept F +GLIBC_2.28 fetestexceptflag F +GLIBC_2.28 feupdateenv F +GLIBC_2.28 finite F +GLIBC_2.28 finitef F +GLIBC_2.28 finitel F +GLIBC_2.28 floor F +GLIBC_2.28 floorf F +GLIBC_2.28 floorf32 F +GLIBC_2.28 floorf32x F +GLIBC_2.28 floorf64 F +GLIBC_2.28 floorl F +GLIBC_2.28 fma F +GLIBC_2.28 fmaf F +GLIBC_2.28 fmaf32 F +GLIBC_2.28 fmaf32x F +GLIBC_2.28 fmaf64 F +GLIBC_2.28 fmal F +GLIBC_2.28 fmax F +GLIBC_2.28 fmaxf F +GLIBC_2.28 fmaxf32 F +GLIBC_2.28 fmaxf32x F +GLIBC_2.28 fmaxf64 F +GLIBC_2.28 fmaxl F +GLIBC_2.28 fmaxmag F +GLIBC_2.28 fmaxmagf F +GLIBC_2.28 fmaxmagf32 F +GLIBC_2.28 fmaxmagf32x F +GLIBC_2.28 fmaxmagf64 F +GLIBC_2.28 fmaxmagl F +GLIBC_2.28 fmin F +GLIBC_2.28 fminf F +GLIBC_2.28 fminf32 F +GLIBC_2.28 fminf32x F +GLIBC_2.28 fminf64 F +GLIBC_2.28 fminl F +GLIBC_2.28 fminmag F +GLIBC_2.28 fminmagf F +GLIBC_2.28 fminmagf32 F +GLIBC_2.28 fminmagf32x F +GLIBC_2.28 fminmagf64 F +GLIBC_2.28 fminmagl F +GLIBC_2.28 fmod F +GLIBC_2.28 fmodf F +GLIBC_2.28 fmodf32 F +GLIBC_2.28 fmodf32x F +GLIBC_2.28 fmodf64 F +GLIBC_2.28 fmodl F +GLIBC_2.28 frexp F +GLIBC_2.28 frexpf F +GLIBC_2.28 frexpf32 F +GLIBC_2.28 frexpf32x F +GLIBC_2.28 frexpf64 F +GLIBC_2.28 frexpl F +GLIBC_2.28 fromfp F +GLIBC_2.28 fromfpf F +GLIBC_2.28 fromfpf32 F +GLIBC_2.28 fromfpf32x F +GLIBC_2.28 fromfpf64 F +GLIBC_2.28 fromfpl F +GLIBC_2.28 fromfpx F +GLIBC_2.28 fromfpxf F +GLIBC_2.28 fromfpxf32 F +GLIBC_2.28 fromfpxf32x F +GLIBC_2.28 fromfpxf64 F +GLIBC_2.28 fromfpxl F +GLIBC_2.28 gamma F +GLIBC_2.28 gammaf F +GLIBC_2.28 gammal F +GLIBC_2.28 getpayload F +GLIBC_2.28 getpayloadf F +GLIBC_2.28 getpayloadf32 F +GLIBC_2.28 getpayloadf32x F +GLIBC_2.28 getpayloadf64 F +GLIBC_2.28 getpayloadl F +GLIBC_2.28 hypot F +GLIBC_2.28 hypotf F +GLIBC_2.28 hypotf32 F +GLIBC_2.28 hypotf32x F +GLIBC_2.28 hypotf64 F +GLIBC_2.28 hypotl F +GLIBC_2.28 ilogb F +GLIBC_2.28 ilogbf F +GLIBC_2.28 ilogbf32 F +GLIBC_2.28 ilogbf32x F +GLIBC_2.28 ilogbf64 F +GLIBC_2.28 ilogbl F +GLIBC_2.28 j0 F +GLIBC_2.28 j0f F +GLIBC_2.28 j0f32 F +GLIBC_2.28 j0f32x F +GLIBC_2.28 j0f64 F +GLIBC_2.28 j0l F +GLIBC_2.28 j1 F +GLIBC_2.28 j1f F +GLIBC_2.28 j1f32 F +GLIBC_2.28 j1f32x F +GLIBC_2.28 j1f64 F +GLIBC_2.28 j1l F +GLIBC_2.28 jn F +GLIBC_2.28 jnf F +GLIBC_2.28 jnf32 F +GLIBC_2.28 jnf32x F +GLIBC_2.28 jnf64 F +GLIBC_2.28 jnl F +GLIBC_2.28 ldexp F +GLIBC_2.28 ldexpf F +GLIBC_2.28 ldexpf32 F +GLIBC_2.28 ldexpf32x F +GLIBC_2.28 ldexpf64 F +GLIBC_2.28 ldexpl F +GLIBC_2.28 lgamma F +GLIBC_2.28 lgamma_r F +GLIBC_2.28 lgammaf F +GLIBC_2.28 lgammaf32 F +GLIBC_2.28 lgammaf32_r F +GLIBC_2.28 lgammaf32x F +GLIBC_2.28 lgammaf32x_r F +GLIBC_2.28 lgammaf64 F +GLIBC_2.28 lgammaf64_r F +GLIBC_2.28 lgammaf_r F +GLIBC_2.28 lgammal F +GLIBC_2.28 lgammal_r F +GLIBC_2.28 llogb F +GLIBC_2.28 llogbf F +GLIBC_2.28 llogbf32 F +GLIBC_2.28 llogbf32x F +GLIBC_2.28 llogbf64 F +GLIBC_2.28 llogbl F +GLIBC_2.28 llrint F +GLIBC_2.28 llrintf F +GLIBC_2.28 llrintf32 F +GLIBC_2.28 llrintf32x F +GLIBC_2.28 llrintf64 F +GLIBC_2.28 llrintl F +GLIBC_2.28 llround F +GLIBC_2.28 llroundf F +GLIBC_2.28 llroundf32 F +GLIBC_2.28 llroundf32x F +GLIBC_2.28 llroundf64 F +GLIBC_2.28 llroundl F +GLIBC_2.28 log F +GLIBC_2.28 log10 F +GLIBC_2.28 log10f F +GLIBC_2.28 log10f32 F +GLIBC_2.28 log10f32x F +GLIBC_2.28 log10f64 F +GLIBC_2.28 log10l F +GLIBC_2.28 log1p F +GLIBC_2.28 log1pf F +GLIBC_2.28 log1pf32 F +GLIBC_2.28 log1pf32x F +GLIBC_2.28 log1pf64 F +GLIBC_2.28 log1pl F +GLIBC_2.28 log2 F +GLIBC_2.28 log2f F +GLIBC_2.28 log2f32 F +GLIBC_2.28 log2f32x F +GLIBC_2.28 log2f64 F +GLIBC_2.28 log2l F +GLIBC_2.28 logb F +GLIBC_2.28 logbf F +GLIBC_2.28 logbf32 F +GLIBC_2.28 logbf32x F +GLIBC_2.28 logbf64 F +GLIBC_2.28 logbl F +GLIBC_2.28 logf F +GLIBC_2.28 logf32 F +GLIBC_2.28 logf32x F +GLIBC_2.28 logf64 F +GLIBC_2.28 logl F +GLIBC_2.28 lrint F +GLIBC_2.28 lrintf F +GLIBC_2.28 lrintf32 F +GLIBC_2.28 lrintf32x F +GLIBC_2.28 lrintf64 F +GLIBC_2.28 lrintl F +GLIBC_2.28 lround F +GLIBC_2.28 lroundf F +GLIBC_2.28 lroundf32 F +GLIBC_2.28 lroundf32x F +GLIBC_2.28 lroundf64 F +GLIBC_2.28 lroundl F +GLIBC_2.28 modf F +GLIBC_2.28 modff F +GLIBC_2.28 modff32 F +GLIBC_2.28 modff32x F +GLIBC_2.28 modff64 F +GLIBC_2.28 modfl F +GLIBC_2.28 nan F +GLIBC_2.28 nanf F +GLIBC_2.28 nanf32 F +GLIBC_2.28 nanf32x F +GLIBC_2.28 nanf64 F +GLIBC_2.28 nanl F +GLIBC_2.28 nearbyint F +GLIBC_2.28 nearbyintf F +GLIBC_2.28 nearbyintf32 F +GLIBC_2.28 nearbyintf32x F +GLIBC_2.28 nearbyintf64 F +GLIBC_2.28 nearbyintl F +GLIBC_2.28 nextafter F +GLIBC_2.28 nextafterf F +GLIBC_2.28 nextafterf32 F +GLIBC_2.28 nextafterf32x F +GLIBC_2.28 nextafterf64 F +GLIBC_2.28 nextafterl F +GLIBC_2.28 nextdown F +GLIBC_2.28 nextdownf F +GLIBC_2.28 nextdownf32 F +GLIBC_2.28 nextdownf32x F +GLIBC_2.28 nextdownf64 F +GLIBC_2.28 nextdownl F +GLIBC_2.28 nexttoward F +GLIBC_2.28 nexttowardf F +GLIBC_2.28 nexttowardl F +GLIBC_2.28 nextup F +GLIBC_2.28 nextupf F +GLIBC_2.28 nextupf32 F +GLIBC_2.28 nextupf32x F +GLIBC_2.28 nextupf64 F +GLIBC_2.28 nextupl F +GLIBC_2.28 pow F +GLIBC_2.28 powf F +GLIBC_2.28 powf32 F +GLIBC_2.28 powf32x F +GLIBC_2.28 powf64 F +GLIBC_2.28 powl F +GLIBC_2.28 remainder F +GLIBC_2.28 remainderf F +GLIBC_2.28 remainderf32 F +GLIBC_2.28 remainderf32x F +GLIBC_2.28 remainderf64 F +GLIBC_2.28 remainderl F +GLIBC_2.28 remquo F +GLIBC_2.28 remquof F +GLIBC_2.28 remquof32 F +GLIBC_2.28 remquof32x F +GLIBC_2.28 remquof64 F +GLIBC_2.28 remquol F +GLIBC_2.28 rint F +GLIBC_2.28 rintf F +GLIBC_2.28 rintf32 F +GLIBC_2.28 rintf32x F +GLIBC_2.28 rintf64 F +GLIBC_2.28 rintl F +GLIBC_2.28 round F +GLIBC_2.28 roundeven F +GLIBC_2.28 roundevenf F +GLIBC_2.28 roundevenf32 F +GLIBC_2.28 roundevenf32x F +GLIBC_2.28 roundevenf64 F +GLIBC_2.28 roundevenl F +GLIBC_2.28 roundf F +GLIBC_2.28 roundf32 F +GLIBC_2.28 roundf32x F +GLIBC_2.28 roundf64 F +GLIBC_2.28 roundl F +GLIBC_2.28 scalb F +GLIBC_2.28 scalbf F +GLIBC_2.28 scalbl F +GLIBC_2.28 scalbln F +GLIBC_2.28 scalblnf F +GLIBC_2.28 scalblnf32 F +GLIBC_2.28 scalblnf32x F +GLIBC_2.28 scalblnf64 F +GLIBC_2.28 scalblnl F +GLIBC_2.28 scalbn F +GLIBC_2.28 scalbnf F +GLIBC_2.28 scalbnf32 F +GLIBC_2.28 scalbnf32x F +GLIBC_2.28 scalbnf64 F +GLIBC_2.28 scalbnl F +GLIBC_2.28 setpayload F +GLIBC_2.28 setpayloadf F +GLIBC_2.28 setpayloadf32 F +GLIBC_2.28 setpayloadf32x F +GLIBC_2.28 setpayloadf64 F +GLIBC_2.28 setpayloadl F +GLIBC_2.28 setpayloadsig F +GLIBC_2.28 setpayloadsigf F +GLIBC_2.28 setpayloadsigf32 F +GLIBC_2.28 setpayloadsigf32x F +GLIBC_2.28 setpayloadsigf64 F +GLIBC_2.28 setpayloadsigl F +GLIBC_2.28 signgam D 0x4 +GLIBC_2.28 significand F +GLIBC_2.28 significandf F +GLIBC_2.28 significandl F +GLIBC_2.28 sin F +GLIBC_2.28 sincos F +GLIBC_2.28 sincosf F +GLIBC_2.28 sincosf32 F +GLIBC_2.28 sincosf32x F +GLIBC_2.28 sincosf64 F +GLIBC_2.28 sincosl F +GLIBC_2.28 sinf F +GLIBC_2.28 sinf32 F +GLIBC_2.28 sinf32x F +GLIBC_2.28 sinf64 F +GLIBC_2.28 sinh F +GLIBC_2.28 sinhf F +GLIBC_2.28 sinhf32 F +GLIBC_2.28 sinhf32x F +GLIBC_2.28 sinhf64 F +GLIBC_2.28 sinhl F +GLIBC_2.28 sinl F +GLIBC_2.28 sqrt F +GLIBC_2.28 sqrtf F +GLIBC_2.28 sqrtf32 F +GLIBC_2.28 sqrtf32x F +GLIBC_2.28 sqrtf64 F +GLIBC_2.28 sqrtl F +GLIBC_2.28 tan F +GLIBC_2.28 tanf F +GLIBC_2.28 tanf32 F +GLIBC_2.28 tanf32x F +GLIBC_2.28 tanf64 F +GLIBC_2.28 tanh F +GLIBC_2.28 tanhf F +GLIBC_2.28 tanhf32 F +GLIBC_2.28 tanhf32x F +GLIBC_2.28 tanhf64 F +GLIBC_2.28 tanhl F +GLIBC_2.28 tanl F +GLIBC_2.28 tgamma F +GLIBC_2.28 tgammaf F +GLIBC_2.28 tgammaf32 F +GLIBC_2.28 tgammaf32x F +GLIBC_2.28 tgammaf64 F +GLIBC_2.28 tgammal F +GLIBC_2.28 totalorder F +GLIBC_2.28 totalorderf F +GLIBC_2.28 totalorderf32 F +GLIBC_2.28 totalorderf32x F +GLIBC_2.28 totalorderf64 F +GLIBC_2.28 totalorderl F +GLIBC_2.28 totalordermag F +GLIBC_2.28 totalordermagf F +GLIBC_2.28 totalordermagf32 F +GLIBC_2.28 totalordermagf32x F +GLIBC_2.28 totalordermagf64 F +GLIBC_2.28 totalordermagl F +GLIBC_2.28 trunc F +GLIBC_2.28 truncf F +GLIBC_2.28 truncf32 F +GLIBC_2.28 truncf32x F +GLIBC_2.28 truncf64 F +GLIBC_2.28 truncl F +GLIBC_2.28 ufromfp F +GLIBC_2.28 ufromfpf F +GLIBC_2.28 ufromfpf32 F +GLIBC_2.28 ufromfpf32x F +GLIBC_2.28 ufromfpf64 F +GLIBC_2.28 ufromfpl F +GLIBC_2.28 ufromfpx F +GLIBC_2.28 ufromfpxf F +GLIBC_2.28 ufromfpxf32 F +GLIBC_2.28 ufromfpxf32x F +GLIBC_2.28 ufromfpxf64 F +GLIBC_2.28 ufromfpxl F +GLIBC_2.28 y0 F +GLIBC_2.28 y0f F +GLIBC_2.28 y0f32 F +GLIBC_2.28 y0f32x F +GLIBC_2.28 y0f64 F +GLIBC_2.28 y0l F +GLIBC_2.28 y1 F +GLIBC_2.28 y1f F +GLIBC_2.28 y1f32 F +GLIBC_2.28 y1f32x F +GLIBC_2.28 y1f64 F +GLIBC_2.28 y1l F +GLIBC_2.28 yn F +GLIBC_2.28 ynf F +GLIBC_2.28 ynf32 F +GLIBC_2.28 ynf32x F +GLIBC_2.28 ynf64 F +GLIBC_2.28 ynl F diff --git a/sysdeps/unix/sysv/linux/nds32/libnsl.abilist b/sysdeps/unix/sysv/linux/nds32/libnsl.abilist new file mode 100644 index 0000000..8c86607 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/libnsl.abilist @@ -0,0 +1,121 @@ +GLIBC_2.28 GLIBC_2.28 A +GLIBC_2.28 __free_fdresult F +GLIBC_2.28 __nis_default_access F +GLIBC_2.28 __nis_default_group F +GLIBC_2.28 __nis_default_owner F +GLIBC_2.28 __nis_default_ttl F +GLIBC_2.28 __nis_finddirectory F +GLIBC_2.28 __nisbind_connect F +GLIBC_2.28 __nisbind_create F +GLIBC_2.28 __nisbind_destroy F +GLIBC_2.28 __nisbind_next F +GLIBC_2.28 __yp_check F +GLIBC_2.28 nis_add F +GLIBC_2.28 nis_add_entry F +GLIBC_2.28 nis_addmember F +GLIBC_2.28 nis_checkpoint F +GLIBC_2.28 nis_clone_directory F +GLIBC_2.28 nis_clone_object F +GLIBC_2.28 nis_clone_result F +GLIBC_2.28 nis_creategroup F +GLIBC_2.28 nis_destroy_object F +GLIBC_2.28 nis_destroygroup F +GLIBC_2.28 nis_dir_cmp F +GLIBC_2.28 nis_domain_of F +GLIBC_2.28 nis_domain_of_r F +GLIBC_2.28 nis_first_entry F +GLIBC_2.28 nis_free_directory F +GLIBC_2.28 nis_free_object F +GLIBC_2.28 nis_free_request F +GLIBC_2.28 nis_freenames F +GLIBC_2.28 nis_freeresult F +GLIBC_2.28 nis_freeservlist F +GLIBC_2.28 nis_freetags F +GLIBC_2.28 nis_getnames F +GLIBC_2.28 nis_getservlist F +GLIBC_2.28 nis_ismember F +GLIBC_2.28 nis_leaf_of F +GLIBC_2.28 nis_leaf_of_r F +GLIBC_2.28 nis_lerror F +GLIBC_2.28 nis_list F +GLIBC_2.28 nis_local_directory F +GLIBC_2.28 nis_local_group F +GLIBC_2.28 nis_local_host F +GLIBC_2.28 nis_local_principal F +GLIBC_2.28 nis_lookup F +GLIBC_2.28 nis_mkdir F +GLIBC_2.28 nis_modify F +GLIBC_2.28 nis_modify_entry F +GLIBC_2.28 nis_name_of F +GLIBC_2.28 nis_name_of_r F +GLIBC_2.28 nis_next_entry F +GLIBC_2.28 nis_perror F +GLIBC_2.28 nis_ping F +GLIBC_2.28 nis_print_directory F +GLIBC_2.28 nis_print_entry F +GLIBC_2.28 nis_print_group F +GLIBC_2.28 nis_print_group_entry F +GLIBC_2.28 nis_print_link F +GLIBC_2.28 nis_print_object F +GLIBC_2.28 nis_print_result F +GLIBC_2.28 nis_print_rights F +GLIBC_2.28 nis_print_table F +GLIBC_2.28 nis_read_obj F +GLIBC_2.28 nis_remove F +GLIBC_2.28 nis_remove_entry F +GLIBC_2.28 nis_removemember F +GLIBC_2.28 nis_rmdir F +GLIBC_2.28 nis_servstate F +GLIBC_2.28 nis_sperrno F +GLIBC_2.28 nis_sperror F +GLIBC_2.28 nis_sperror_r F +GLIBC_2.28 nis_stats F +GLIBC_2.28 nis_verifygroup F +GLIBC_2.28 nis_write_obj F +GLIBC_2.28 readColdStartFile F +GLIBC_2.28 writeColdStartFile F +GLIBC_2.28 xdr_cback_data F +GLIBC_2.28 xdr_domainname F +GLIBC_2.28 xdr_keydat F +GLIBC_2.28 xdr_mapname F +GLIBC_2.28 xdr_obj_p F +GLIBC_2.28 xdr_peername F +GLIBC_2.28 xdr_valdat F +GLIBC_2.28 xdr_yp_buf F +GLIBC_2.28 xdr_ypall F +GLIBC_2.28 xdr_ypbind_binding F +GLIBC_2.28 xdr_ypbind_resp F +GLIBC_2.28 xdr_ypbind_resptype F +GLIBC_2.28 xdr_ypbind_setdom F +GLIBC_2.28 xdr_ypdelete_args F +GLIBC_2.28 xdr_ypmap_parms F +GLIBC_2.28 xdr_ypmaplist F +GLIBC_2.28 xdr_yppush_status F +GLIBC_2.28 xdr_yppushresp_xfr F +GLIBC_2.28 xdr_ypreq_key F +GLIBC_2.28 xdr_ypreq_nokey F +GLIBC_2.28 xdr_ypreq_xfr F +GLIBC_2.28 xdr_ypresp_all F +GLIBC_2.28 xdr_ypresp_key_val F +GLIBC_2.28 xdr_ypresp_maplist F +GLIBC_2.28 xdr_ypresp_master F +GLIBC_2.28 xdr_ypresp_order F +GLIBC_2.28 xdr_ypresp_val F +GLIBC_2.28 xdr_ypresp_xfr F +GLIBC_2.28 xdr_ypstat F +GLIBC_2.28 xdr_ypupdate_args F +GLIBC_2.28 xdr_ypxfrstat F +GLIBC_2.28 yp_all F +GLIBC_2.28 yp_bind F +GLIBC_2.28 yp_first F +GLIBC_2.28 yp_get_default_domain F +GLIBC_2.28 yp_maplist F +GLIBC_2.28 yp_master F +GLIBC_2.28 yp_match F +GLIBC_2.28 yp_next F +GLIBC_2.28 yp_order F +GLIBC_2.28 yp_unbind F +GLIBC_2.28 yp_update F +GLIBC_2.28 ypbinderr_string F +GLIBC_2.28 yperr_string F +GLIBC_2.28 ypprot_err F diff --git a/sysdeps/unix/sysv/linux/nds32/libnss_compat.abilist b/sysdeps/unix/sysv/linux/nds32/libnss_compat.abilist new file mode 100644 index 0000000..e69de29 diff --git a/sysdeps/unix/sysv/linux/nds32/libnss_db.abilist b/sysdeps/unix/sysv/linux/nds32/libnss_db.abilist new file mode 100644 index 0000000..e69de29 diff --git a/sysdeps/unix/sysv/linux/nds32/libnss_dns.abilist b/sysdeps/unix/sysv/linux/nds32/libnss_dns.abilist new file mode 100644 index 0000000..e69de29 diff --git a/sysdeps/unix/sysv/linux/nds32/libnss_files.abilist b/sysdeps/unix/sysv/linux/nds32/libnss_files.abilist new file mode 100644 index 0000000..e69de29 diff --git a/sysdeps/unix/sysv/linux/nds32/libnss_hesiod.abilist b/sysdeps/unix/sysv/linux/nds32/libnss_hesiod.abilist new file mode 100644 index 0000000..e69de29 diff --git a/sysdeps/unix/sysv/linux/nds32/libnss_nis.abilist b/sysdeps/unix/sysv/linux/nds32/libnss_nis.abilist new file mode 100644 index 0000000..e69de29 diff --git a/sysdeps/unix/sysv/linux/nds32/libnss_nisplus.abilist b/sysdeps/unix/sysv/linux/nds32/libnss_nisplus.abilist new file mode 100644 index 0000000..e69de29 diff --git a/sysdeps/unix/sysv/linux/nds32/libpthread.abilist b/sysdeps/unix/sysv/linux/nds32/libpthread.abilist new file mode 100644 index 0000000..79f1679 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/libpthread.abilist @@ -0,0 +1,217 @@ +GLIBC_2.28 GLIBC_2.28 A +GLIBC_2.28 _IO_flockfile F +GLIBC_2.28 _IO_ftrylockfile F +GLIBC_2.28 _IO_funlockfile F +GLIBC_2.28 __close F +GLIBC_2.28 __connect F +GLIBC_2.28 __errno_location F +GLIBC_2.28 __fcntl F +GLIBC_2.28 __h_errno_location F +GLIBC_2.28 __libc_allocate_rtsig F +GLIBC_2.28 __libc_current_sigrtmax F +GLIBC_2.28 __libc_current_sigrtmin F +GLIBC_2.28 __lseek F +GLIBC_2.28 __nanosleep F +GLIBC_2.28 __open F +GLIBC_2.28 __open64 F +GLIBC_2.28 __pread64 F +GLIBC_2.28 __pthread_cleanup_routine F +GLIBC_2.28 __pthread_getspecific F +GLIBC_2.28 __pthread_key_create F +GLIBC_2.28 __pthread_mutex_destroy F +GLIBC_2.28 __pthread_mutex_init F +GLIBC_2.28 __pthread_mutex_lock F +GLIBC_2.28 __pthread_mutex_trylock F +GLIBC_2.28 __pthread_mutex_unlock F +GLIBC_2.28 __pthread_mutexattr_destroy F +GLIBC_2.28 __pthread_mutexattr_init F +GLIBC_2.28 __pthread_mutexattr_settype F +GLIBC_2.28 __pthread_once F +GLIBC_2.28 __pthread_register_cancel F +GLIBC_2.28 __pthread_register_cancel_defer F +GLIBC_2.28 __pthread_rwlock_destroy F +GLIBC_2.28 __pthread_rwlock_init F +GLIBC_2.28 __pthread_rwlock_rdlock F +GLIBC_2.28 __pthread_rwlock_tryrdlock F +GLIBC_2.28 __pthread_rwlock_trywrlock F +GLIBC_2.28 __pthread_rwlock_unlock F +GLIBC_2.28 __pthread_rwlock_wrlock F +GLIBC_2.28 __pthread_setspecific F +GLIBC_2.28 __pthread_unregister_cancel F +GLIBC_2.28 __pthread_unregister_cancel_restore F +GLIBC_2.28 __pthread_unwind_next F +GLIBC_2.28 __pwrite64 F +GLIBC_2.28 __read F +GLIBC_2.28 __res_state F +GLIBC_2.28 __send F +GLIBC_2.28 __sigaction F +GLIBC_2.28 __wait F +GLIBC_2.28 __write F +GLIBC_2.28 _pthread_cleanup_pop F +GLIBC_2.28 _pthread_cleanup_pop_restore F +GLIBC_2.28 _pthread_cleanup_push F +GLIBC_2.28 _pthread_cleanup_push_defer F +GLIBC_2.28 accept F +GLIBC_2.28 close F +GLIBC_2.28 connect F +GLIBC_2.28 fcntl F +GLIBC_2.28 flockfile F +GLIBC_2.28 fsync F +GLIBC_2.28 ftrylockfile F +GLIBC_2.28 funlockfile F +GLIBC_2.28 lseek F +GLIBC_2.28 lseek64 F +GLIBC_2.28 msync F +GLIBC_2.28 nanosleep F +GLIBC_2.28 open F +GLIBC_2.28 open64 F +GLIBC_2.28 pause F +GLIBC_2.28 pread F +GLIBC_2.28 pread64 F +GLIBC_2.28 pthread_attr_destroy F +GLIBC_2.28 pthread_attr_getaffinity_np F +GLIBC_2.28 pthread_attr_getdetachstate F +GLIBC_2.28 pthread_attr_getguardsize F +GLIBC_2.28 pthread_attr_getinheritsched F +GLIBC_2.28 pthread_attr_getschedparam F +GLIBC_2.28 pthread_attr_getschedpolicy F +GLIBC_2.28 pthread_attr_getscope F +GLIBC_2.28 pthread_attr_getstack F +GLIBC_2.28 pthread_attr_getstackaddr F +GLIBC_2.28 pthread_attr_getstacksize F +GLIBC_2.28 pthread_attr_init F +GLIBC_2.28 pthread_attr_setaffinity_np F +GLIBC_2.28 pthread_attr_setdetachstate F +GLIBC_2.28 pthread_attr_setguardsize F +GLIBC_2.28 pthread_attr_setinheritsched F +GLIBC_2.28 pthread_attr_setschedparam F +GLIBC_2.28 pthread_attr_setschedpolicy F +GLIBC_2.28 pthread_attr_setscope F +GLIBC_2.28 pthread_attr_setstack F +GLIBC_2.28 pthread_attr_setstackaddr F +GLIBC_2.28 pthread_attr_setstacksize F +GLIBC_2.28 pthread_barrier_destroy F +GLIBC_2.28 pthread_barrier_init F +GLIBC_2.28 pthread_barrier_wait F +GLIBC_2.28 pthread_barrierattr_destroy F +GLIBC_2.28 pthread_barrierattr_getpshared F +GLIBC_2.28 pthread_barrierattr_init F +GLIBC_2.28 pthread_barrierattr_setpshared F +GLIBC_2.28 pthread_cancel F +GLIBC_2.28 pthread_cond_broadcast F +GLIBC_2.28 pthread_cond_destroy F +GLIBC_2.28 pthread_cond_init F +GLIBC_2.28 pthread_cond_signal F +GLIBC_2.28 pthread_cond_timedwait F +GLIBC_2.28 pthread_cond_wait F +GLIBC_2.28 pthread_condattr_destroy F +GLIBC_2.28 pthread_condattr_getclock F +GLIBC_2.28 pthread_condattr_getpshared F +GLIBC_2.28 pthread_condattr_init F +GLIBC_2.28 pthread_condattr_setclock F +GLIBC_2.28 pthread_condattr_setpshared F +GLIBC_2.28 pthread_create F +GLIBC_2.28 pthread_detach F +GLIBC_2.28 pthread_equal F +GLIBC_2.28 pthread_exit F +GLIBC_2.28 pthread_getaffinity_np F +GLIBC_2.28 pthread_getattr_default_np F +GLIBC_2.28 pthread_getattr_np F +GLIBC_2.28 pthread_getconcurrency F +GLIBC_2.28 pthread_getcpuclockid F +GLIBC_2.28 pthread_getname_np F +GLIBC_2.28 pthread_getschedparam F +GLIBC_2.28 pthread_getspecific F +GLIBC_2.28 pthread_join F +GLIBC_2.28 pthread_key_create F +GLIBC_2.28 pthread_key_delete F +GLIBC_2.28 pthread_kill F +GLIBC_2.28 pthread_kill_other_threads_np F +GLIBC_2.28 pthread_mutex_consistent F +GLIBC_2.28 pthread_mutex_consistent_np F +GLIBC_2.28 pthread_mutex_destroy F +GLIBC_2.28 pthread_mutex_getprioceiling F +GLIBC_2.28 pthread_mutex_init F +GLIBC_2.28 pthread_mutex_lock F +GLIBC_2.28 pthread_mutex_setprioceiling F +GLIBC_2.28 pthread_mutex_timedlock F +GLIBC_2.28 pthread_mutex_trylock F +GLIBC_2.28 pthread_mutex_unlock F +GLIBC_2.28 pthread_mutexattr_destroy F +GLIBC_2.28 pthread_mutexattr_getkind_np F +GLIBC_2.28 pthread_mutexattr_getprioceiling F +GLIBC_2.28 pthread_mutexattr_getprotocol F +GLIBC_2.28 pthread_mutexattr_getpshared F +GLIBC_2.28 pthread_mutexattr_getrobust F +GLIBC_2.28 pthread_mutexattr_getrobust_np F +GLIBC_2.28 pthread_mutexattr_gettype F +GLIBC_2.28 pthread_mutexattr_init F +GLIBC_2.28 pthread_mutexattr_setkind_np F +GLIBC_2.28 pthread_mutexattr_setprioceiling F +GLIBC_2.28 pthread_mutexattr_setprotocol F +GLIBC_2.28 pthread_mutexattr_setpshared F +GLIBC_2.28 pthread_mutexattr_setrobust F +GLIBC_2.28 pthread_mutexattr_setrobust_np F +GLIBC_2.28 pthread_mutexattr_settype F +GLIBC_2.28 pthread_once F +GLIBC_2.28 pthread_rwlock_destroy F +GLIBC_2.28 pthread_rwlock_init F +GLIBC_2.28 pthread_rwlock_rdlock F +GLIBC_2.28 pthread_rwlock_timedrdlock F +GLIBC_2.28 pthread_rwlock_timedwrlock F +GLIBC_2.28 pthread_rwlock_tryrdlock F +GLIBC_2.28 pthread_rwlock_trywrlock F +GLIBC_2.28 pthread_rwlock_unlock F +GLIBC_2.28 pthread_rwlock_wrlock F +GLIBC_2.28 pthread_rwlockattr_destroy F +GLIBC_2.28 pthread_rwlockattr_getkind_np F +GLIBC_2.28 pthread_rwlockattr_getpshared F +GLIBC_2.28 pthread_rwlockattr_init F +GLIBC_2.28 pthread_rwlockattr_setkind_np F +GLIBC_2.28 pthread_rwlockattr_setpshared F +GLIBC_2.28 pthread_setaffinity_np F +GLIBC_2.28 pthread_setattr_default_np F +GLIBC_2.28 pthread_setcancelstate F +GLIBC_2.28 pthread_setcanceltype F +GLIBC_2.28 pthread_setconcurrency F +GLIBC_2.28 pthread_setname_np F +GLIBC_2.28 pthread_setschedparam F +GLIBC_2.28 pthread_setschedprio F +GLIBC_2.28 pthread_setspecific F +GLIBC_2.28 pthread_sigmask F +GLIBC_2.28 pthread_sigqueue F +GLIBC_2.28 pthread_spin_destroy F +GLIBC_2.28 pthread_spin_init F +GLIBC_2.28 pthread_spin_lock F +GLIBC_2.28 pthread_spin_trylock F +GLIBC_2.28 pthread_spin_unlock F +GLIBC_2.28 pthread_testcancel F +GLIBC_2.28 pthread_timedjoin_np F +GLIBC_2.28 pthread_tryjoin_np F +GLIBC_2.28 pthread_yield F +GLIBC_2.28 pwrite F +GLIBC_2.28 pwrite64 F +GLIBC_2.28 raise F +GLIBC_2.28 read F +GLIBC_2.28 recv F +GLIBC_2.28 recvfrom F +GLIBC_2.28 recvmsg F +GLIBC_2.28 sem_close F +GLIBC_2.28 sem_destroy F +GLIBC_2.28 sem_getvalue F +GLIBC_2.28 sem_init F +GLIBC_2.28 sem_open F +GLIBC_2.28 sem_post F +GLIBC_2.28 sem_timedwait F +GLIBC_2.28 sem_trywait F +GLIBC_2.28 sem_unlink F +GLIBC_2.28 sem_wait F +GLIBC_2.28 send F +GLIBC_2.28 sendmsg F +GLIBC_2.28 sendto F +GLIBC_2.28 sigaction F +GLIBC_2.28 sigwait F +GLIBC_2.28 tcdrain F +GLIBC_2.28 wait F +GLIBC_2.28 waitpid F +GLIBC_2.28 write F diff --git a/sysdeps/unix/sysv/linux/nds32/libresolv.abilist b/sysdeps/unix/sysv/linux/nds32/libresolv.abilist new file mode 100644 index 0000000..e19dee4 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/libresolv.abilist @@ -0,0 +1,80 @@ +GLIBC_2.28 GLIBC_2.28 A +GLIBC_2.28 __b64_ntop F +GLIBC_2.28 __b64_pton F +GLIBC_2.28 __dn_comp F +GLIBC_2.28 __dn_count_labels F +GLIBC_2.28 __dn_expand F +GLIBC_2.28 __dn_skipname F +GLIBC_2.28 __fp_nquery F +GLIBC_2.28 __fp_query F +GLIBC_2.28 __fp_resstat F +GLIBC_2.28 __hostalias F +GLIBC_2.28 __loc_aton F +GLIBC_2.28 __loc_ntoa F +GLIBC_2.28 __p_cdname F +GLIBC_2.28 __p_cdnname F +GLIBC_2.28 __p_class F +GLIBC_2.28 __p_class_syms D 0x54 +GLIBC_2.28 __p_fqname F +GLIBC_2.28 __p_fqnname F +GLIBC_2.28 __p_option F +GLIBC_2.28 __p_query F +GLIBC_2.28 __p_rcode F +GLIBC_2.28 __p_time F +GLIBC_2.28 __p_type F +GLIBC_2.28 __p_type_syms D 0x228 +GLIBC_2.28 __putlong F +GLIBC_2.28 __putshort F +GLIBC_2.28 __res_close F +GLIBC_2.28 __res_dnok F +GLIBC_2.28 __res_hnok F +GLIBC_2.28 __res_hostalias F +GLIBC_2.28 __res_isourserver F +GLIBC_2.28 __res_mailok F +GLIBC_2.28 __res_mkquery F +GLIBC_2.28 __res_nameinquery F +GLIBC_2.28 __res_nmkquery F +GLIBC_2.28 __res_nquery F +GLIBC_2.28 __res_nquerydomain F +GLIBC_2.28 __res_nsearch F +GLIBC_2.28 __res_nsend F +GLIBC_2.28 __res_ownok F +GLIBC_2.28 __res_queriesmatch F +GLIBC_2.28 __res_query F +GLIBC_2.28 __res_querydomain F +GLIBC_2.28 __res_search F +GLIBC_2.28 __res_send F +GLIBC_2.28 __sym_ntop F +GLIBC_2.28 __sym_ntos F +GLIBC_2.28 __sym_ston F +GLIBC_2.28 _getlong F +GLIBC_2.28 _getshort F +GLIBC_2.28 inet_net_ntop F +GLIBC_2.28 inet_net_pton F +GLIBC_2.28 inet_neta F +GLIBC_2.28 ns_datetosecs F +GLIBC_2.28 ns_format_ttl F +GLIBC_2.28 ns_get16 F +GLIBC_2.28 ns_get32 F +GLIBC_2.28 ns_initparse F +GLIBC_2.28 ns_makecanon F +GLIBC_2.28 ns_msg_getflag F +GLIBC_2.28 ns_name_compress F +GLIBC_2.28 ns_name_ntol F +GLIBC_2.28 ns_name_ntop F +GLIBC_2.28 ns_name_pack F +GLIBC_2.28 ns_name_pton F +GLIBC_2.28 ns_name_rollback F +GLIBC_2.28 ns_name_skip F +GLIBC_2.28 ns_name_uncompress F +GLIBC_2.28 ns_name_unpack F +GLIBC_2.28 ns_parse_ttl F +GLIBC_2.28 ns_parserr F +GLIBC_2.28 ns_put16 F +GLIBC_2.28 ns_put32 F +GLIBC_2.28 ns_samedomain F +GLIBC_2.28 ns_samename F +GLIBC_2.28 ns_skiprr F +GLIBC_2.28 ns_sprintrr F +GLIBC_2.28 ns_sprintrrf F +GLIBC_2.28 ns_subdomain F diff --git a/sysdeps/unix/sysv/linux/nds32/librt.abilist b/sysdeps/unix/sysv/linux/nds32/librt.abilist new file mode 100644 index 0000000..34424ba --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/librt.abilist @@ -0,0 +1,36 @@ +GLIBC_2.28 GLIBC_2.28 A +GLIBC_2.28 __mq_open_2 F +GLIBC_2.28 aio_cancel F +GLIBC_2.28 aio_cancel64 F +GLIBC_2.28 aio_error F +GLIBC_2.28 aio_error64 F +GLIBC_2.28 aio_fsync F +GLIBC_2.28 aio_fsync64 F +GLIBC_2.28 aio_init F +GLIBC_2.28 aio_read F +GLIBC_2.28 aio_read64 F +GLIBC_2.28 aio_return F +GLIBC_2.28 aio_return64 F +GLIBC_2.28 aio_suspend F +GLIBC_2.28 aio_suspend64 F +GLIBC_2.28 aio_write F +GLIBC_2.28 aio_write64 F +GLIBC_2.28 lio_listio F +GLIBC_2.28 lio_listio64 F +GLIBC_2.28 mq_close F +GLIBC_2.28 mq_getattr F +GLIBC_2.28 mq_notify F +GLIBC_2.28 mq_open F +GLIBC_2.28 mq_receive F +GLIBC_2.28 mq_send F +GLIBC_2.28 mq_setattr F +GLIBC_2.28 mq_timedreceive F +GLIBC_2.28 mq_timedsend F +GLIBC_2.28 mq_unlink F +GLIBC_2.28 shm_open F +GLIBC_2.28 shm_unlink F +GLIBC_2.28 timer_create F +GLIBC_2.28 timer_delete F +GLIBC_2.28 timer_getoverrun F +GLIBC_2.28 timer_gettime F +GLIBC_2.28 timer_settime F diff --git a/sysdeps/unix/sysv/linux/nds32/libthread_db.abilist b/sysdeps/unix/sysv/linux/nds32/libthread_db.abilist new file mode 100644 index 0000000..72a5ae5 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/libthread_db.abilist @@ -0,0 +1,41 @@ +GLIBC_2.28 GLIBC_2.28 A +GLIBC_2.28 td_init F +GLIBC_2.28 td_log F +GLIBC_2.28 td_symbol_list F +GLIBC_2.28 td_ta_clear_event F +GLIBC_2.28 td_ta_delete F +GLIBC_2.28 td_ta_enable_stats F +GLIBC_2.28 td_ta_event_addr F +GLIBC_2.28 td_ta_event_getmsg F +GLIBC_2.28 td_ta_get_nthreads F +GLIBC_2.28 td_ta_get_ph F +GLIBC_2.28 td_ta_get_stats F +GLIBC_2.28 td_ta_map_id2thr F +GLIBC_2.28 td_ta_map_lwp2thr F +GLIBC_2.28 td_ta_new F +GLIBC_2.28 td_ta_reset_stats F +GLIBC_2.28 td_ta_set_event F +GLIBC_2.28 td_ta_setconcurrency F +GLIBC_2.28 td_ta_thr_iter F +GLIBC_2.28 td_ta_tsd_iter F +GLIBC_2.28 td_thr_clear_event F +GLIBC_2.28 td_thr_dbresume F +GLIBC_2.28 td_thr_dbsuspend F +GLIBC_2.28 td_thr_event_enable F +GLIBC_2.28 td_thr_event_getmsg F +GLIBC_2.28 td_thr_get_info F +GLIBC_2.28 td_thr_getfpregs F +GLIBC_2.28 td_thr_getgregs F +GLIBC_2.28 td_thr_getxregs F +GLIBC_2.28 td_thr_getxregsize F +GLIBC_2.28 td_thr_set_event F +GLIBC_2.28 td_thr_setfpregs F +GLIBC_2.28 td_thr_setgregs F +GLIBC_2.28 td_thr_setprio F +GLIBC_2.28 td_thr_setsigpending F +GLIBC_2.28 td_thr_setxregs F +GLIBC_2.28 td_thr_sigsetmask F +GLIBC_2.28 td_thr_tls_get_addr F +GLIBC_2.28 td_thr_tlsbase F +GLIBC_2.28 td_thr_tsd F +GLIBC_2.28 td_thr_validate F diff --git a/sysdeps/unix/sysv/linux/nds32/libutil.abilist b/sysdeps/unix/sysv/linux/nds32/libutil.abilist new file mode 100644 index 0000000..1fe6467 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/libutil.abilist @@ -0,0 +1,7 @@ +GLIBC_2.28 GLIBC_2.28 A +GLIBC_2.28 forkpty F +GLIBC_2.28 login F +GLIBC_2.28 login_tty F +GLIBC_2.28 logout F +GLIBC_2.28 logwtmp F +GLIBC_2.28 openpty F From patchwork Sun May 6 14:41:24 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vincent Chen X-Patchwork-Id: 909322 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=sourceware.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=libc-alpha-return-92071-incoming=patchwork.ozlabs.org@sourceware.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=andestech.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.b="F6APrxVR"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 40f7mH6JTfz9s0q for ; Mon, 7 May 2018 00:43:43 +1000 (AEST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-type; q=dns; s=default; b=EKATN qPMvC9+C7sOLsj5eGEIqYGl98vxomdqETrFctEv+oUR4qyuelYxlwRwxnBytsoLn lSsRqujXWPBvvrXzjHG9QLI9dxRBr1seeEHOCHs1W8Rt06RZHKmG5p2dkVq02/t2 pNlQhzO+8OKmHUnvhpKtMFP7F6TbVG0ORRIVwQ= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-type; s=default; bh=2TQcAh9CSzo mdwBuYI4qu266eDM=; b=F6APrxVRctgdEF+RPlfdMiGpcL+BrW0tzJcYpZbP7bR NpTIZAGyc2Wid+35oEDcAC+8xyxdSJY4Iw1VRMWCHNbGBmXCabfNV7/Hlzx502dk TBZEGDJuPpXohUN1awWa+UhrRNSyttFv+Xj4Nq2Kwg0h/SCXpT9z5pKDTjt/JhyQ = Received: (qmail 37610 invoked by alias); 6 May 2018 14:42:41 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 37447 invoked by uid 89); 6 May 2018 14:42:40 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.6 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: ATCSQR.andestech.com From: vincentc To: CC: , , vincentc Subject: [PATCH 10/11] Add Andes nds32 dynamic relocation type to elf/elf.h. Date: Sun, 6 May 2018 22:41:24 +0800 Message-ID: <1525617685-32083-11-git-send-email-vincentc@andestech.com> In-Reply-To: <1525617685-32083-1-git-send-email-vincentc@andestech.com> References: <1525617685-32083-1-git-send-email-vincentc@andestech.com> MIME-Version: 1.0 X-DNSRBL: X-MAIL: ATCSQR.andestech.com w46EYedi047233 --- elf/elf.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/elf/elf.h b/elf/elf.h index 954f326..27add77 100644 --- a/elf/elf.h +++ b/elf/elf.h @@ -3855,6 +3855,16 @@ enum #define R_METAG_TLS_LE_HI16 60 #define R_METAG_TLS_LE_LO16 61 +/* NDS32 relocations. */ +#define R_NDS32_NONE 0 +#define R_NDS32_32_RELA 20 +#define R_NDS32_COPY 39 +#define R_NDS32_GLOB_DAT 40 +#define R_NDS32_JMP_SLOT 41 +#define R_NDS32_RELATIVE 42 +#define R_NDS32_TLS_TPOFF 102 +#define R_NDS32_TLS_DESC 119 + __END_DECLS #endif /* elf.h */ From patchwork Sun May 6 14:41:25 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vincent Chen X-Patchwork-Id: 909323 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=sourceware.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=libc-alpha-return-92072-incoming=patchwork.ozlabs.org@sourceware.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=andestech.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.b="jBB6XTVW"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 40f7mT4FFgz9s2t for ; Mon, 7 May 2018 00:43:53 +1000 (AEST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-type; q=dns; s=default; b=hWghu jHlT/Nuzgx4w76CAVz4b8BThg2yVoWyomMgCrIE58Gj024vHt51RybUXO4v4qHqz MUkc6H0Q4c1/HNWc6Pj7aMFQ7SjRloPv+wrcDINX1qgu8yUtQb7rW7Uumc61fCw2 sLbhuFwz6vSdhmu3PIXw14QSyJoBaHSTskBYy4= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-type; s=default; bh=vMwpYMByOPJ zY/hoRFvHEZ5aVXo=; b=jBB6XTVWoeNWc3DcCFAAb2q+0H1E1ooSKCqC/XefddB 6+8usKQPav1dJf2DKl4daxszK0X1enLrSnJK3OvldQZ36gQBy5UOtfrL1Te3doWm N272Mzj06Cq0LQ6AeyrilmGGm2aNskvKxgqztwWtx9wz7FEOH0O8Wm/2pWPDvo+s = Received: (qmail 38078 invoked by alias); 6 May 2018 14:42:46 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 37979 invoked by uid 89); 6 May 2018 14:42:45 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.7 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.2 spammy=Hx-languages-length:460, UD:h.in, 1069 X-HELO: ATCSQR.andestech.com From: vincentc To: CC: , , vincentc Subject: [PATCH 11/11] Add nds32 entries to config.h.in Date: Sun, 6 May 2018 22:41:25 +0800 Message-ID: <1525617685-32083-12-git-send-email-vincentc@andestech.com> In-Reply-To: <1525617685-32083-1-git-send-email-vincentc@andestech.com> References: <1525617685-32083-1-git-send-email-vincentc@andestech.com> MIME-Version: 1.0 X-DNSRBL: X-MAIL: ATCSQR.andestech.com w46EYjMq047252 --- config.h.in | 3 +++ 1 file changed, 3 insertions(+) diff --git a/config.h.in b/config.h.in index b0b7cf2..42065c8 100644 --- a/config.h.in +++ b/config.h.in @@ -106,6 +106,9 @@ /* RISC-V floating-point ABI for ld.so. */ #undef RISCV_ABI_FLEN +/* NDS32 floating-point ABI for ld.so. */ +#undef NDS32_ABI_TYPE + /* Linux specific: minimum supported kernel version. */ #undef __LINUX_KERNEL_VERSION