mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-29 11:41:21 +03:00
Commit nios2 port to master.
This commit is contained in:
104
ChangeLog
104
ChangeLog
@ -1,3 +1,107 @@
|
|||||||
|
2015-01-18 Chung-Lin Tang <cltang@codesourcery.com>
|
||||||
|
Sandra Loosemore <sandra@codesourcery.com>
|
||||||
|
Andrew Jenner <andrew@codesourcery.com>
|
||||||
|
Joseph Myers <joseph@codesourcery.com>
|
||||||
|
Nathan Sidwell <nathan@codesourcery.com>
|
||||||
|
|
||||||
|
* NEWS: Mention new Nios II port.
|
||||||
|
* sysdeps/nios2/Implies: New file.
|
||||||
|
* sysdeps/nios2/Makefile: New file.
|
||||||
|
* sysdeps/nios2/Subdirs: New file.
|
||||||
|
* sysdeps/nios2/Versions: New file.
|
||||||
|
* sysdeps/nios2/__longjmp.S: New file.
|
||||||
|
* sysdeps/nios2/abort-instr.h: New file.
|
||||||
|
* sysdeps/nios2/backtrace.c: New file.
|
||||||
|
* sysdeps/nios2/bits/endian.h: New file.
|
||||||
|
* sysdeps/nios2/bits/fenv.h: New file.
|
||||||
|
* sysdeps/nios2/bits/link.h: New file.
|
||||||
|
* sysdeps/nios2/bits/setjmp.h: New file.
|
||||||
|
* sysdeps/nios2/bsd-_setjmp.S: New file.
|
||||||
|
* sysdeps/nios2/bsd-setjmp.S: New file.
|
||||||
|
* sysdeps/nios2/configure: New generated file.
|
||||||
|
* sysdeps/nios2/configure.ac: New file.
|
||||||
|
* sysdeps/nios2/crti.S: New file.
|
||||||
|
* sysdeps/nios2/crtn.S: New file.
|
||||||
|
* sysdeps/nios2/dl-init.c: New file.
|
||||||
|
* sysdeps/nios2/dl-machine.h: New file.
|
||||||
|
* sysdeps/nios2/dl-sysdep.h: New file.
|
||||||
|
* sysdeps/nios2/dl-tls.h: New file.
|
||||||
|
* sysdeps/nios2/dl-trampoline.S: New file.
|
||||||
|
* sysdeps/nios2/gccframe.h: New file.
|
||||||
|
* sysdeps/nios2/gmp-mparam.h: New file.
|
||||||
|
* sysdeps/nios2/jmpbuf-offsets.h: New file.
|
||||||
|
* sysdeps/nios2/jmpbuf-unwind.h: New file.
|
||||||
|
* sysdeps/nios2/ldsodefs.h: New file.
|
||||||
|
* sysdeps/nios2/libc-tls.c: New file.
|
||||||
|
* sysdeps/nios2/libm-test-ulps: New file.
|
||||||
|
* sysdeps/nios2/machine-gmon.h: New file.
|
||||||
|
* sysdeps/nios2/math-tests.h: New file.
|
||||||
|
* sysdeps/nios2/math_private.h: New file.
|
||||||
|
* sysdeps/nios2/memusage.h: New file.
|
||||||
|
* sysdeps/nios2/nptl/Makefile: New file.
|
||||||
|
* sysdeps/nios2/nptl/bits/pthreadtypes.h: New file.
|
||||||
|
* sysdeps/nios2/nptl/bits/semaphore.h: New file.
|
||||||
|
* sysdeps/nios2/nptl/pthread_spin_lock.c: New file.
|
||||||
|
* sysdeps/nios2/nptl/pthreaddef.h: New file.
|
||||||
|
* sysdeps/nios2/nptl/tcb-offsets.sym: New file.
|
||||||
|
* sysdeps/nios2/nptl/tls.h: New file.
|
||||||
|
* sysdeps/nios2/preconfigure: New file.
|
||||||
|
* sysdeps/nios2/s_fma.c: New file.
|
||||||
|
* sysdeps/nios2/s_fmaf.c: New file.
|
||||||
|
* sysdeps/nios2/setjmp.S: New file.
|
||||||
|
* sysdeps/nios2/sfp-machine.h: New file.
|
||||||
|
* sysdeps/nios2/sotruss-lib.c: New file.
|
||||||
|
* sysdeps/nios2/stackguard-macros.h: New file.
|
||||||
|
* sysdeps/nios2/stackinfo.h: New file.
|
||||||
|
* sysdeps/nios2/start.S: New file.
|
||||||
|
* sysdeps/nios2/sysdep.h: New file.
|
||||||
|
* sysdeps/nios2/tls-macros.h: New file.
|
||||||
|
* sysdeps/nios2/tst-audit.h: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/Implies: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/Makefile: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/Versions: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/arch-fork.h: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/bits/atomic.h: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/bits/mman.h: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/cacheflush.c: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/clone.S: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/configure: New generated file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/configure.ac: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/getcontext.S: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/kernel-features.h: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/kernel_rt_sigframe.h: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/makecontext.c: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/profil-counter.h: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/setcontext.S: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/shlib-versions: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/sigcontextinfo.h: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/swapcontext.S: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/sys/cachectl.h: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/sys/procfs.h: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/sys/ucontext.h: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/sys/user.h: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/syscall.S: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/sysdep.S: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/sysdep.h: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/ucontext_i.sym: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/vfork.S: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/c++-types.data: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/ld.abilist: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/libBrokenLocale.abilist: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/libanl.abilist: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/libc.abilist: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/libcrypt.abilist: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/libdl.abilist: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/libm.abilist: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/libnsl.abilist: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/libpthread.abilist: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/libresolv.abilist: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/librt.abilist: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/libthread_db.abilist: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/libutil.abilist: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/nios2/localplt.data: New file.
|
||||||
|
|
||||||
2015-01-16 Stefan Liebler <stli@linux.vnet.ibm.com>
|
2015-01-16 Stefan Liebler <stli@linux.vnet.ibm.com>
|
||||||
|
|
||||||
[BZ #17844]
|
[BZ #17844]
|
||||||
|
2
NEWS
2
NEWS
@ -19,6 +19,8 @@ Version 2.21
|
|||||||
17744, 17745, 17746, 17747, 17748, 17775, 17777, 17780, 17781, 17782,
|
17744, 17745, 17746, 17747, 17748, 17775, 17777, 17780, 17781, 17782,
|
||||||
17791, 17793, 17796, 17797, 17803, 17806, 17834, 17844, 17848
|
17791, 17793, 17796, 17797, 17803, 17806, 17834, 17844, 17848
|
||||||
|
|
||||||
|
* Port to Altera Nios II has been contributed by Mentor Graphics.
|
||||||
|
|
||||||
* Optimized strcpy, stpcpy, strncpy, stpncpy, strcmp, and strncmp
|
* Optimized strcpy, stpcpy, strncpy, stpncpy, strcmp, and strncmp
|
||||||
implementations for powerpc64/powerpc64le.
|
implementations for powerpc64/powerpc64le.
|
||||||
Implemented by Adhemerval Zanella (IBM).
|
Implemented by Adhemerval Zanella (IBM).
|
||||||
|
3
sysdeps/nios2/Implies
Normal file
3
sysdeps/nios2/Implies
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
wordsize-32
|
||||||
|
ieee754/dbl-64
|
||||||
|
ieee754/flt-32
|
35
sysdeps/nios2/Makefile
Normal file
35
sysdeps/nios2/Makefile
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
# Copyright (C) 1993-2015 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
|
||||||
|
# <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
pic-ccflag = -fpic
|
||||||
|
|
||||||
|
# We don't support long doubles as a distinct type. We don't need to set
|
||||||
|
# this variable; it's here mostly for documentational purposes.
|
||||||
|
long-double-fcts = no
|
||||||
|
|
||||||
|
ifeq ($(subdir),soft-fp)
|
||||||
|
sysdep_routines += $(filter-out sqrtsf2,$(gcc-single-routines)) \
|
||||||
|
$(filter-out sqrtdf2,$(gcc-double-routines))
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(subdir),csu)
|
||||||
|
gen-as-const-headers += tcb-offsets.sym
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(subdir),debug)
|
||||||
|
CFLAGS-backtrace.c += -funwind-tables
|
||||||
|
endif
|
1
sysdeps/nios2/Subdirs
Normal file
1
sysdeps/nios2/Subdirs
Normal file
@ -0,0 +1 @@
|
|||||||
|
soft-fp
|
12
sysdeps/nios2/Versions
Normal file
12
sysdeps/nios2/Versions
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
libc {
|
||||||
|
GLIBC_2.21 {
|
||||||
|
__adddf3; __addsf3; __divdf3; __divsf3; __eqdf2; __eqsf2; __extendsfdf2;
|
||||||
|
__fixdfdi; __fixdfsi; __fixsfdi; __fixsfsi;
|
||||||
|
__fixunsdfdi; __fixunsdfsi; __fixunssfdi; __fixunssfsi;
|
||||||
|
__floatdidf; __floatdisf; __floatsidf; __floatsisf;
|
||||||
|
__floatundidf; __floatundisf; __floatunsidf; __floatunsisf;
|
||||||
|
__gedf2; __gesf2; __gtdf2; __gtsf2; __ledf2; __lesf2; __ltdf2; __ltsf2;
|
||||||
|
__muldf3; __mulsf3; __nedf2; __nesf2; __negdf2; __negsf2;
|
||||||
|
__subdf3; __subsf3; __truncdfsf2; __unorddf2; __unordsf2;
|
||||||
|
}
|
||||||
|
}
|
80
sysdeps/nios2/__longjmp.S
Normal file
80
sysdeps/nios2/__longjmp.S
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
/* longjmp for Nios II.
|
||||||
|
Copyright (C) 2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#include <sysdep.h>
|
||||||
|
#include <jmpbuf-offsets.h>
|
||||||
|
|
||||||
|
/* __longjmp(jmpbuf, val) */
|
||||||
|
|
||||||
|
ENTRY (__longjmp)
|
||||||
|
mov r2, r5
|
||||||
|
bne r5, zero, 1f
|
||||||
|
movi r2, 1
|
||||||
|
1:
|
||||||
|
#ifdef PTR_DEMANGLE
|
||||||
|
PTR_MANGLE_GUARD (r3)
|
||||||
|
ldw r5, (JB_RA*4)(r4)
|
||||||
|
ldw r6, (JB_SP*4)(r4)
|
||||||
|
PTR_DEMANGLE (r5, r5, r3)
|
||||||
|
PTR_DEMANGLE (r6, r6, r3)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
cfi_def_cfa (r4, 0)
|
||||||
|
cfi_offset (r16, JB_R16*4)
|
||||||
|
cfi_offset (r17, JB_R17*4)
|
||||||
|
cfi_offset (r18, JB_R18*4)
|
||||||
|
cfi_offset (r19, JB_R19*4)
|
||||||
|
cfi_offset (r20, JB_R20*4)
|
||||||
|
cfi_offset (r21, JB_R21*4)
|
||||||
|
cfi_offset (r22, JB_R22*4)
|
||||||
|
cfi_offset (fp, JB_FP*4)
|
||||||
|
#ifdef PTR_DEMANGLE
|
||||||
|
cfi_register (ra, r5)
|
||||||
|
cfi_register (sp, r7)
|
||||||
|
#else
|
||||||
|
cfi_offset (ra, JB_RA*4)
|
||||||
|
cfi_offset (sp, JB_SP*4)
|
||||||
|
#endif
|
||||||
|
ldw r16, (JB_R16*4)(r4)
|
||||||
|
ldw r17, (JB_R17*4)(r4)
|
||||||
|
ldw r18, (JB_R18*4)(r4)
|
||||||
|
ldw r19, (JB_R19*4)(r4)
|
||||||
|
ldw r20, (JB_R20*4)(r4)
|
||||||
|
ldw r21, (JB_R21*4)(r4)
|
||||||
|
ldw r22, (JB_R22*4)(r4)
|
||||||
|
ldw fp, (JB_FP*4)(r4)
|
||||||
|
#ifdef PTR_DEMANGLE
|
||||||
|
mov ra, r5
|
||||||
|
mov sp, r6
|
||||||
|
#else
|
||||||
|
ldw ra, (JB_RA*4)(r4)
|
||||||
|
ldw sp, (JB_SP*4)(r4)
|
||||||
|
#endif
|
||||||
|
cfi_same_value (r16)
|
||||||
|
cfi_same_value (r17)
|
||||||
|
cfi_same_value (r18)
|
||||||
|
cfi_same_value (r19)
|
||||||
|
cfi_same_value (r20)
|
||||||
|
cfi_same_value (r21)
|
||||||
|
cfi_same_value (r22)
|
||||||
|
cfi_same_value (fp)
|
||||||
|
cfi_same_value (ra)
|
||||||
|
cfi_same_value (sp)
|
||||||
|
|
||||||
|
ret
|
||||||
|
END (__longjmp)
|
2
sysdeps/nios2/abort-instr.h
Normal file
2
sysdeps/nios2/abort-instr.h
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
/* An instruction which should crash any program is an unused trap. */
|
||||||
|
#define ABORT_INSTRUCTION asm ("trap 31")
|
1
sysdeps/nios2/backtrace.c
Normal file
1
sysdeps/nios2/backtrace.c
Normal file
@ -0,0 +1 @@
|
|||||||
|
#include <sysdeps/x86_64/backtrace.c>
|
12
sysdeps/nios2/bits/endian.h
Normal file
12
sysdeps/nios2/bits/endian.h
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
/* The Nios II architecture has selectable endianness. */
|
||||||
|
|
||||||
|
#ifndef _ENDIAN_H
|
||||||
|
# error "Never use <bits/endian.h> directly; include <endian.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __nios2_big_endian__
|
||||||
|
# define __BYTE_ORDER __BIG_ENDIAN
|
||||||
|
#endif
|
||||||
|
#ifdef __nios2_little_endian__
|
||||||
|
# define __BYTE_ORDER __LITTLE_ENDIAN
|
||||||
|
#endif
|
44
sysdeps/nios2/bits/fenv.h
Normal file
44
sysdeps/nios2/bits/fenv.h
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
/* Copyright (C) 2012-2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _FENV_H
|
||||||
|
# error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* The Altera specified Nios II hardware FPU does not support exceptions,
|
||||||
|
nor does the software floating-point support. */
|
||||||
|
#define FE_ALL_EXCEPT 0
|
||||||
|
|
||||||
|
/* Nios II supports only round-to-nearest. The software
|
||||||
|
floating-point support also acts this way. */
|
||||||
|
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)
|
54
sysdeps/nios2/bits/link.h
Normal file
54
sysdeps/nios2/bits/link.h
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
/* Machine-specific declarations for dynamic linker interface, Nios II version.
|
||||||
|
Copyright (C) 2009-2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _LINK_H
|
||||||
|
# error "Never include <bits/link.h> directly; use <link.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Registers for entry into PLT on Nios II. */
|
||||||
|
typedef struct La_nios2_regs
|
||||||
|
{
|
||||||
|
uint32_t lr_reg[4]; /* r4 through r7 */
|
||||||
|
uint32_t lr_ra;
|
||||||
|
uint32_t lr_sp;
|
||||||
|
} La_nios2_regs;
|
||||||
|
|
||||||
|
/* Return values for calls from PLT on Nios II. */
|
||||||
|
typedef struct La_nios2_retval
|
||||||
|
{
|
||||||
|
uint32_t lrv_r2;
|
||||||
|
uint32_t lrv_r3;
|
||||||
|
} La_nios2_retval;
|
||||||
|
|
||||||
|
__BEGIN_DECLS
|
||||||
|
|
||||||
|
extern Elf32_Addr la_nios2_gnu_pltenter (Elf32_Sym *__sym, unsigned int __ndx,
|
||||||
|
uintptr_t *__refcook,
|
||||||
|
uintptr_t *__defcook,
|
||||||
|
La_nios2_regs *__regs,
|
||||||
|
unsigned int *__flags,
|
||||||
|
const char *__symname,
|
||||||
|
long int *__framesizep);
|
||||||
|
extern unsigned int la_nios2_gnu_pltexit (Elf32_Sym *__sym, unsigned int __ndx,
|
||||||
|
uintptr_t *__refcook,
|
||||||
|
uintptr_t *__defcook,
|
||||||
|
const La_nios2_regs *__inregs,
|
||||||
|
La_nios2_retval *__outregs,
|
||||||
|
const char *symname);
|
||||||
|
|
||||||
|
__END_DECLS
|
30
sysdeps/nios2/bits/setjmp.h
Normal file
30
sysdeps/nios2/bits/setjmp.h
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
/* Define the machine-dependent type `jmp_buf'. Nios II version.
|
||||||
|
Copyright (C) 1992-2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _NIOS2_BITS_SETJMP_H
|
||||||
|
#define _NIOS2_BITS_SETJMP_H 1
|
||||||
|
|
||||||
|
#if !defined(_SETJMP_H) && !defined(_PTHREAD_H)
|
||||||
|
# error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Saves r16-r22 (callee-saved, including GOT pointer), fp (frame pointer),
|
||||||
|
ra (return address), and sp (stack pointer). */
|
||||||
|
typedef int __jmp_buf[10];
|
||||||
|
|
||||||
|
#endif /* _NIOS2_BITS_SETJMP_H */
|
1
sysdeps/nios2/bsd-_setjmp.S
Normal file
1
sysdeps/nios2/bsd-_setjmp.S
Normal file
@ -0,0 +1 @@
|
|||||||
|
/* _setjmp is in setjmp.S */
|
1
sysdeps/nios2/bsd-setjmp.S
Normal file
1
sysdeps/nios2/bsd-setjmp.S
Normal file
@ -0,0 +1 @@
|
|||||||
|
/* setjmp is in setjmp.S */
|
162
sysdeps/nios2/configure
vendored
Normal file
162
sysdeps/nios2/configure
vendored
Normal file
@ -0,0 +1,162 @@
|
|||||||
|
# This file is generated from configure.ac by Autoconf. DO NOT EDIT!
|
||||||
|
# Local configure fragment for sysdeps/nios2.
|
||||||
|
|
||||||
|
# Nios II big endian is not yet supported.
|
||||||
|
|
||||||
|
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
|
||||||
|
$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
|
||||||
|
if ${ac_cv_path_GREP+:} false; then :
|
||||||
|
$as_echo_n "(cached) " >&6
|
||||||
|
else
|
||||||
|
if test -z "$GREP"; then
|
||||||
|
ac_path_GREP_found=false
|
||||||
|
# Loop through the user's path and test for each of PROGNAME-LIST
|
||||||
|
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
||||||
|
for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
|
||||||
|
do
|
||||||
|
IFS=$as_save_IFS
|
||||||
|
test -z "$as_dir" && as_dir=.
|
||||||
|
for ac_prog in grep ggrep; do
|
||||||
|
for ac_exec_ext in '' $ac_executable_extensions; do
|
||||||
|
ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
|
||||||
|
{ test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
|
||||||
|
# Check for GNU ac_path_GREP and select it if it is found.
|
||||||
|
# Check for GNU $ac_path_GREP
|
||||||
|
case `"$ac_path_GREP" --version 2>&1` in
|
||||||
|
*GNU*)
|
||||||
|
ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
|
||||||
|
*)
|
||||||
|
ac_count=0
|
||||||
|
$as_echo_n 0123456789 >"conftest.in"
|
||||||
|
while :
|
||||||
|
do
|
||||||
|
cat "conftest.in" "conftest.in" >"conftest.tmp"
|
||||||
|
mv "conftest.tmp" "conftest.in"
|
||||||
|
cp "conftest.in" "conftest.nl"
|
||||||
|
$as_echo 'GREP' >> "conftest.nl"
|
||||||
|
"$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
|
||||||
|
diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
|
||||||
|
as_fn_arith $ac_count + 1 && ac_count=$as_val
|
||||||
|
if test $ac_count -gt ${ac_path_GREP_max-0}; then
|
||||||
|
# Best one so far, save it but keep looking for a better one
|
||||||
|
ac_cv_path_GREP="$ac_path_GREP"
|
||||||
|
ac_path_GREP_max=$ac_count
|
||||||
|
fi
|
||||||
|
# 10*(2^10) chars as input seems more than enough
|
||||||
|
test $ac_count -gt 10 && break
|
||||||
|
done
|
||||||
|
rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
$ac_path_GREP_found && break 3
|
||||||
|
done
|
||||||
|
done
|
||||||
|
done
|
||||||
|
IFS=$as_save_IFS
|
||||||
|
if test -z "$ac_cv_path_GREP"; then
|
||||||
|
as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
ac_cv_path_GREP=$GREP
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
|
||||||
|
$as_echo "$ac_cv_path_GREP" >&6; }
|
||||||
|
GREP="$ac_cv_path_GREP"
|
||||||
|
|
||||||
|
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
|
||||||
|
$as_echo_n "checking for egrep... " >&6; }
|
||||||
|
if ${ac_cv_path_EGREP+:} false; then :
|
||||||
|
$as_echo_n "(cached) " >&6
|
||||||
|
else
|
||||||
|
if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
|
||||||
|
then ac_cv_path_EGREP="$GREP -E"
|
||||||
|
else
|
||||||
|
if test -z "$EGREP"; then
|
||||||
|
ac_path_EGREP_found=false
|
||||||
|
# Loop through the user's path and test for each of PROGNAME-LIST
|
||||||
|
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
||||||
|
for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
|
||||||
|
do
|
||||||
|
IFS=$as_save_IFS
|
||||||
|
test -z "$as_dir" && as_dir=.
|
||||||
|
for ac_prog in egrep; do
|
||||||
|
for ac_exec_ext in '' $ac_executable_extensions; do
|
||||||
|
ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
|
||||||
|
{ test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
|
||||||
|
# Check for GNU ac_path_EGREP and select it if it is found.
|
||||||
|
# Check for GNU $ac_path_EGREP
|
||||||
|
case `"$ac_path_EGREP" --version 2>&1` in
|
||||||
|
*GNU*)
|
||||||
|
ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
|
||||||
|
*)
|
||||||
|
ac_count=0
|
||||||
|
$as_echo_n 0123456789 >"conftest.in"
|
||||||
|
while :
|
||||||
|
do
|
||||||
|
cat "conftest.in" "conftest.in" >"conftest.tmp"
|
||||||
|
mv "conftest.tmp" "conftest.in"
|
||||||
|
cp "conftest.in" "conftest.nl"
|
||||||
|
$as_echo 'EGREP' >> "conftest.nl"
|
||||||
|
"$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
|
||||||
|
diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
|
||||||
|
as_fn_arith $ac_count + 1 && ac_count=$as_val
|
||||||
|
if test $ac_count -gt ${ac_path_EGREP_max-0}; then
|
||||||
|
# Best one so far, save it but keep looking for a better one
|
||||||
|
ac_cv_path_EGREP="$ac_path_EGREP"
|
||||||
|
ac_path_EGREP_max=$ac_count
|
||||||
|
fi
|
||||||
|
# 10*(2^10) chars as input seems more than enough
|
||||||
|
test $ac_count -gt 10 && break
|
||||||
|
done
|
||||||
|
rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
$ac_path_EGREP_found && break 3
|
||||||
|
done
|
||||||
|
done
|
||||||
|
done
|
||||||
|
IFS=$as_save_IFS
|
||||||
|
if test -z "$ac_cv_path_EGREP"; then
|
||||||
|
as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
ac_cv_path_EGREP=$EGREP
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
|
||||||
|
$as_echo "$ac_cv_path_EGREP" >&6; }
|
||||||
|
EGREP="$ac_cv_path_EGREP"
|
||||||
|
|
||||||
|
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for big endian" >&5
|
||||||
|
$as_echo_n "checking for big endian... " >&6; }
|
||||||
|
if ${libc_cv_nios2_be+:} false; then :
|
||||||
|
$as_echo_n "(cached) " >&6
|
||||||
|
else
|
||||||
|
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||||
|
/* end confdefs.h. */
|
||||||
|
#ifdef __nios2_big_endian__
|
||||||
|
yes
|
||||||
|
#endif
|
||||||
|
|
||||||
|
_ACEOF
|
||||||
|
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
|
||||||
|
$EGREP "yes" >/dev/null 2>&1; then :
|
||||||
|
libc_cv_nios2_be=yes
|
||||||
|
else
|
||||||
|
libc_cv_nios2_be=no
|
||||||
|
fi
|
||||||
|
rm -f conftest*
|
||||||
|
|
||||||
|
fi
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_nios2_be" >&5
|
||||||
|
$as_echo "$libc_cv_nios2_be" >&6; }
|
||||||
|
if test $libc_cv_nios2_be = yes; then
|
||||||
|
as_fn_error $? "Big endian not supported for Nios II" "$LINENO" 5
|
||||||
|
fi
|
13
sysdeps/nios2/configure.ac
Normal file
13
sysdeps/nios2/configure.ac
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
|
||||||
|
# Local configure fragment for sysdeps/nios2.
|
||||||
|
|
||||||
|
# Nios II big endian is not yet supported.
|
||||||
|
AC_CACHE_CHECK([for big endian],
|
||||||
|
[libc_cv_nios2_be],
|
||||||
|
[AC_EGREP_CPP(yes,[#ifdef __nios2_big_endian__
|
||||||
|
yes
|
||||||
|
#endif
|
||||||
|
], libc_cv_nios2_be=yes, libc_cv_nios2_be=no)])
|
||||||
|
if test $libc_cv_nios2_be = yes; then
|
||||||
|
AC_MSG_ERROR([Big endian not supported for Nios II])
|
||||||
|
fi
|
96
sysdeps/nios2/crti.S
Normal file
96
sysdeps/nios2/crti.S
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
/* Special .init and .fini section support for Nios II.
|
||||||
|
Copyright (C) 2012-2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
/* 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 <libc-symbols.h>
|
||||||
|
|
||||||
|
#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
|
||||||
|
|
||||||
|
.section .init,"ax",@progbits
|
||||||
|
.align 2
|
||||||
|
.global _init
|
||||||
|
.type _init, @function
|
||||||
|
_init:
|
||||||
|
addi sp, sp, -8
|
||||||
|
stw r22, 0(sp)
|
||||||
|
nextpc r22
|
||||||
|
1:
|
||||||
|
movhi r8, %hiadj(_gp_got - 1b)
|
||||||
|
addi r8, r8, %lo(_gp_got - 1b)
|
||||||
|
add r22, r22, r8
|
||||||
|
stw ra, 4(sp)
|
||||||
|
#if PREINIT_FUNCTION_WEAK
|
||||||
|
movhi r2, %got_hiadj(PREINIT_FUNCTION)
|
||||||
|
addi r2, r2, %got_lo(PREINIT_FUNCTION)
|
||||||
|
add r2, r2, r22
|
||||||
|
ldw r2, 0(r2)
|
||||||
|
beq r2, zero, .L5
|
||||||
|
#endif
|
||||||
|
movhi r2, %call_hiadj(PREINIT_FUNCTION)
|
||||||
|
addi r2, r2, %call_lo(PREINIT_FUNCTION)
|
||||||
|
add r2, r2, r22
|
||||||
|
ldw r2, 0(r2)
|
||||||
|
callr r2
|
||||||
|
.L5:
|
||||||
|
|
||||||
|
.section .fini,"ax",@progbits
|
||||||
|
.align 2
|
||||||
|
.global _fini
|
||||||
|
.type _fini, @function
|
||||||
|
_fini:
|
||||||
|
addi sp, sp, -8
|
||||||
|
stw r22, 0(sp)
|
||||||
|
nextpc r22
|
||||||
|
1:
|
||||||
|
movhi r8, %hiadj(_gp_got - 1b)
|
||||||
|
addi r8, r8, %lo(_gp_got - 1b)
|
||||||
|
stw ra, 4(sp)
|
||||||
|
add r22, r22, r8
|
49
sysdeps/nios2/crtn.S
Normal file
49
sysdeps/nios2/crtn.S
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
/* Special .init and .fini section support for Nios II.
|
||||||
|
Copyright (C) 2012-2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
/* crtn.S puts function epilogues in the .init and .fini sections
|
||||||
|
corresponding to the prologues in crti.S. */
|
||||||
|
|
||||||
|
.section .init,"ax",@progbits
|
||||||
|
ldw ra, 4(sp)
|
||||||
|
ldw r22, 0(sp)
|
||||||
|
addi sp, sp, 8
|
||||||
|
ret
|
||||||
|
|
||||||
|
.section .fini,"ax",@progbits
|
||||||
|
ldw ra, 4(sp)
|
||||||
|
ldw r22, 0(sp)
|
||||||
|
addi sp, sp, 8
|
||||||
|
ret
|
30
sysdeps/nios2/dl-init.c
Normal file
30
sysdeps/nios2/dl-init.c
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
/* Nios II specific procedures for initializing code.
|
||||||
|
Copyright (C) 2008-2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#include <elf/dl-init.c>
|
||||||
|
|
||||||
|
unsigned int
|
||||||
|
internal_function
|
||||||
|
_dl_nios2_get_gp_value (struct link_map *main_map)
|
||||||
|
{
|
||||||
|
ElfW(Dyn) *dyn = main_map->l_ld;
|
||||||
|
for (dyn = main_map->l_ld; dyn->d_tag != DT_NULL; ++dyn)
|
||||||
|
if (dyn->d_tag == DT_NIOS2_GP)
|
||||||
|
return (unsigned int)(dyn->d_un.d_ptr);
|
||||||
|
return 0;
|
||||||
|
}
|
335
sysdeps/nios2/dl-machine.h
Normal file
335
sysdeps/nios2/dl-machine.h
Normal file
@ -0,0 +1,335 @@
|
|||||||
|
/* Machine-dependent ELF dynamic relocation inline functions. Nios II version.
|
||||||
|
Copyright (C) 1995-2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef dl_machine_h
|
||||||
|
#define dl_machine_h
|
||||||
|
|
||||||
|
#define ELF_MACHINE_NAME "nios2"
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <link.h>
|
||||||
|
#include <dl-tls.h>
|
||||||
|
|
||||||
|
/* Return nonzero iff ELF header is compatible with the running host. */
|
||||||
|
static inline int
|
||||||
|
elf_machine_matches_host (const Elf32_Ehdr *ehdr)
|
||||||
|
{
|
||||||
|
return ehdr->e_machine == EM_ALTERA_NIOS2;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Return the link-time address of _DYNAMIC. Conveniently, this is the
|
||||||
|
first element of the GOT. */
|
||||||
|
static inline Elf32_Addr
|
||||||
|
elf_machine_dynamic (void)
|
||||||
|
{
|
||||||
|
Elf32_Addr *dynamic;
|
||||||
|
int tmp;
|
||||||
|
asm ("nextpc\t%0\n\t"
|
||||||
|
"1: movhi\t%1, %%hiadj(_GLOBAL_OFFSET_TABLE_ - 1b)\n\t"
|
||||||
|
"addi\t%1, %1, %%lo(_GLOBAL_OFFSET_TABLE_ - 1b)\n\t"
|
||||||
|
"add\t%0, %0, %1\n"
|
||||||
|
: "=r" (dynamic), "=r" (tmp));
|
||||||
|
return *dynamic;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Return the run-time load address of the shared object. */
|
||||||
|
static inline Elf32_Addr
|
||||||
|
elf_machine_load_address (void)
|
||||||
|
{
|
||||||
|
Elf32_Addr result;
|
||||||
|
int tmp;
|
||||||
|
asm ("nextpc\t%0\n\t"
|
||||||
|
"1: movhi\t%1, %%hiadj(1b)\n\t"
|
||||||
|
"addi\t%1, %1, %%lo(1b)\n\t"
|
||||||
|
"sub\t%0, %0, %1\n"
|
||||||
|
: "=r" (result), "=r" (tmp));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 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__ ((always_inline))
|
||||||
|
elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
|
||||||
|
{
|
||||||
|
extern void _dl_runtime_resolve (Elf32_Word);
|
||||||
|
|
||||||
|
if (l->l_info[DT_JMPREL] && lazy)
|
||||||
|
{
|
||||||
|
/* The GOT entries for functions in the PLT have not yet been filled
|
||||||
|
in. Their initial contents will arrange when called to load r15 with
|
||||||
|
an offset into the .got section, load r14 with
|
||||||
|
_GLOBAL_OFFSET_TABLE_[1], and then jump to _GLOBAL_OFFSET_TABLE[2].
|
||||||
|
*/
|
||||||
|
Elf32_Addr *got = (Elf32_Addr *) D_PTR (l, l_info[DT_PLTGOT]);
|
||||||
|
got[1] = (Elf32_Addr) l; /* Identify this shared object. */
|
||||||
|
|
||||||
|
/* 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] = (Elf32_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\
|
||||||
|
.type _start, %function\n\
|
||||||
|
_start:\n\
|
||||||
|
/* At start time, all the args are on the stack. */\n\
|
||||||
|
mov r4, sp\n\
|
||||||
|
\n\
|
||||||
|
/* Start the calculation of the GOT pointer. */\n\
|
||||||
|
nextpc r22\n\
|
||||||
|
1: movhi r8, %hiadj(_gp_got - 1b)\n\
|
||||||
|
addi r8, r8, %lo(_gp_got - 1b)\n\
|
||||||
|
\n\
|
||||||
|
/* Figure out where _dl_start will need to return to. */\n\
|
||||||
|
movhi ra, %hiadj(2f - 1b)\n\
|
||||||
|
addi ra, ra, %lo(2f - 1b)\n\
|
||||||
|
add ra, ra, r22\n\
|
||||||
|
\n\
|
||||||
|
/* Finish the calculation of the GOT pointer. */\n\
|
||||||
|
add r22, r22, r8\n\
|
||||||
|
\n\
|
||||||
|
br _dl_start\n\
|
||||||
|
\n\
|
||||||
|
/* Save the returned user entry point. */\n\
|
||||||
|
2: mov r16, r2\n\
|
||||||
|
\n\
|
||||||
|
/* Initialize gp. */\n\
|
||||||
|
ldw r4, %got(_rtld_local)(r22)\n\
|
||||||
|
ldw r4, 0(r4)\n\
|
||||||
|
ldw r8, %call(_dl_nios2_get_gp_value)(r22)\n\
|
||||||
|
callr r8\n\
|
||||||
|
mov gp, r2\n\
|
||||||
|
\n\
|
||||||
|
/* Find the number of arguments to skip. */\n\
|
||||||
|
ldw r8, %got(_dl_skip_args)(r22)\n\
|
||||||
|
ldw r8, 0(r8)\n\
|
||||||
|
\n\
|
||||||
|
/* Find the main_map from the GOT. */\n\
|
||||||
|
ldw r4, %got(_rtld_local)(r22)\n\
|
||||||
|
ldw r4, 0(r4)\n\
|
||||||
|
\n\
|
||||||
|
/* Find argc. */\n\
|
||||||
|
ldw r5, 0(sp)\n\
|
||||||
|
sub r5, r5, r8\n\
|
||||||
|
stw r5, 0(sp)\n\
|
||||||
|
\n\
|
||||||
|
/* Find the first unskipped argument. */\n\
|
||||||
|
slli r8, r8, 2\n\
|
||||||
|
addi r6, sp, 4\n\
|
||||||
|
add r9, r6, r8\n\
|
||||||
|
mov r10, r6\n\
|
||||||
|
\n\
|
||||||
|
/* Shuffle argv down. */\n\
|
||||||
|
3: ldw r11, 0(r9)\n\
|
||||||
|
stw r11, 0(r10)\n\
|
||||||
|
addi r9, r9, 4\n\
|
||||||
|
addi r10, r10, 4\n\
|
||||||
|
bne r11, zero, 3b\n\
|
||||||
|
\n\
|
||||||
|
/* Shuffle envp down. */\n\
|
||||||
|
mov r7, r10\n\
|
||||||
|
4: ldw r11, 0(r9)\n\
|
||||||
|
stw r11, 0(r10)\n\
|
||||||
|
addi r9, r9, 4\n\
|
||||||
|
addi r10, r10, 4\n\
|
||||||
|
bne r11, zero, 4b\n\
|
||||||
|
\n\
|
||||||
|
/* Shuffle auxv down. */\n\
|
||||||
|
5: ldw r11, 4(r9)\n\
|
||||||
|
stw r11, 4(r10)\n\
|
||||||
|
ldw r11, 0(r9)\n\
|
||||||
|
stw r11, 0(r10)\n\
|
||||||
|
addi r9, r9, 8\n\
|
||||||
|
addi r10, r10, 8\n\
|
||||||
|
bne r11, zero, 5b\n\
|
||||||
|
\n\
|
||||||
|
/* Update _dl_argv. */\n\
|
||||||
|
ldw r2, %got(_dl_argv)(r22)\n\
|
||||||
|
stw r6, 0(r2)\n\
|
||||||
|
\n\
|
||||||
|
/* Call _dl_init through the PLT. */\n\
|
||||||
|
ldw r8, %call(_dl_init)(r22)\n\
|
||||||
|
callr r8\n\
|
||||||
|
\n\
|
||||||
|
/* Find the finalization function. */\n\
|
||||||
|
ldw r4, %got(_dl_fini)(r22)\n\
|
||||||
|
\n\
|
||||||
|
/* Jump to the user's entry point. */\n\
|
||||||
|
jmp r16\n\
|
||||||
|
");
|
||||||
|
|
||||||
|
/* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry, so
|
||||||
|
PLT entries should not be allowed to define the value.
|
||||||
|
ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one
|
||||||
|
of the main executable's symbols, as for a COPY reloc. */
|
||||||
|
#define elf_machine_type_class(type) \
|
||||||
|
((((type) == R_NIOS2_JUMP_SLOT \
|
||||||
|
|| (type) == R_NIOS2_TLS_DTPMOD \
|
||||||
|
|| (type) == R_NIOS2_TLS_DTPREL \
|
||||||
|
|| (type) == R_NIOS2_TLS_TPREL) * ELF_RTYPE_CLASS_PLT) \
|
||||||
|
| (((type) == R_NIOS2_COPY) * ELF_RTYPE_CLASS_COPY))
|
||||||
|
|
||||||
|
/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries. */
|
||||||
|
#define ELF_MACHINE_JMP_SLOT R_NIOS2_JUMP_SLOT
|
||||||
|
|
||||||
|
/* The Nios II never uses Elf32_Rel relocations. */
|
||||||
|
#define ELF_MACHINE_NO_REL 1
|
||||||
|
#define ELF_MACHINE_NO_RELA 0
|
||||||
|
|
||||||
|
/* Fixup a PLT entry to bounce directly to the function at VALUE. */
|
||||||
|
|
||||||
|
static inline Elf32_Addr
|
||||||
|
elf_machine_fixup_plt (struct link_map *map, lookup_t t,
|
||||||
|
const Elf32_Rela *reloc,
|
||||||
|
Elf32_Addr *reloc_addr, Elf32_Addr value)
|
||||||
|
{
|
||||||
|
return *reloc_addr = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Return the final value of a plt relocation. */
|
||||||
|
static inline Elf32_Addr
|
||||||
|
elf_machine_plt_value (struct link_map *map, const Elf32_Rela *reloc,
|
||||||
|
Elf32_Addr value)
|
||||||
|
{
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Names of the architecture-specific auditing callback functions. */
|
||||||
|
#define ARCH_LA_PLTENTER nios2_gnu_pltenter
|
||||||
|
#define ARCH_LA_PLTEXIT nios2_gnu_pltexit
|
||||||
|
|
||||||
|
#endif /* dl_machine_h */
|
||||||
|
|
||||||
|
#ifdef RESOLVE_MAP
|
||||||
|
|
||||||
|
/* Perform the relocation specified by RELOC and SYM (which is fully resolved).
|
||||||
|
LOADADDR is the load address of the object; INFO is an array indexed
|
||||||
|
by DT_* of the .dynamic section info. */
|
||||||
|
|
||||||
|
auto inline void __attribute__ ((always_inline))
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
Elf32_Addr *const reloc_addr = reloc_addr_arg;
|
||||||
|
const unsigned int r_type = ELF32_R_TYPE (reloc->r_info);
|
||||||
|
|
||||||
|
if (__glibc_unlikely (r_type == R_NIOS2_RELATIVE))
|
||||||
|
*reloc_addr = map->l_addr + reloc->r_addend;
|
||||||
|
else if (__glibc_unlikely (r_type == R_NIOS2_NONE))
|
||||||
|
return;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const Elf32_Sym *const refsym = sym;
|
||||||
|
struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type);
|
||||||
|
Elf32_Addr value = sym == NULL ? 0 : sym_map->l_addr + sym->st_value;
|
||||||
|
|
||||||
|
switch (r_type)
|
||||||
|
{
|
||||||
|
case R_NIOS2_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 void *) 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 ?: "<program name unknown>",
|
||||||
|
strtab + refsym->st_name);
|
||||||
|
}
|
||||||
|
memcpy (reloc_addr_arg, (void *) value,
|
||||||
|
MIN (sym->st_size, refsym->st_size));
|
||||||
|
break;
|
||||||
|
case R_NIOS2_GLOB_DAT:
|
||||||
|
case R_NIOS2_JUMP_SLOT:
|
||||||
|
# ifdef RTLD_BOOTSTRAP
|
||||||
|
/* Fix weak undefined references. */
|
||||||
|
if (sym != NULL && sym->st_value == 0)
|
||||||
|
*reloc_addr = 0;
|
||||||
|
else
|
||||||
|
# endif
|
||||||
|
*reloc_addr = value;
|
||||||
|
break;
|
||||||
|
#ifndef RTLD_BOOTSTRAP
|
||||||
|
case R_NIOS2_TLS_DTPMOD:
|
||||||
|
/* Get the information from the link map returned by the
|
||||||
|
resolv function. */
|
||||||
|
if (sym_map != NULL)
|
||||||
|
*reloc_addr = sym_map->l_tls_modid;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case R_NIOS2_TLS_DTPREL:
|
||||||
|
*reloc_addr = reloc->r_addend + TLS_DTPREL_VALUE(sym);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case R_NIOS2_TLS_TPREL:
|
||||||
|
if (sym != NULL)
|
||||||
|
{
|
||||||
|
CHECK_STATIC_TLS (map, sym_map);
|
||||||
|
*reloc_addr = reloc->r_addend + TLS_TPREL_VALUE(sym_map, sym);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
case R_NIOS2_BFD_RELOC_32:
|
||||||
|
*reloc_addr = value + reloc->r_addend;
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
Elf32_Addr *const reloc_addr = reloc_addr_arg;
|
||||||
|
*reloc_addr = l_addr + reloc->r_addend;
|
||||||
|
}
|
||||||
|
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
Elf32_Addr *const reloc_addr = (void *) (l_addr + reloc->r_offset);
|
||||||
|
if (ELF32_R_TYPE (reloc->r_info) == R_NIOS2_JUMP_SLOT)
|
||||||
|
*reloc_addr += l_addr;
|
||||||
|
else
|
||||||
|
_dl_reloc_bad_type (map, ELF32_R_TYPE (reloc->r_info), 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* RESOLVE_MAP */
|
23
sysdeps/nios2/dl-sysdep.h
Normal file
23
sysdeps/nios2/dl-sysdep.h
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
/* System-specific settings for dynamic linker code. Nios II version.
|
||||||
|
Copyright (C) 2009-2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#include_next <dl-sysdep.h>
|
||||||
|
|
||||||
|
/* _dl_argv cannot be attribute_relro, because _dl_start_user
|
||||||
|
might write into it after _dl_start returns. */
|
||||||
|
#define DL_ARGV_NOT_RELRO 1
|
48
sysdeps/nios2/dl-tls.h
Normal file
48
sysdeps/nios2/dl-tls.h
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
/* Thread-local storage handling in the ELF dynamic linker. Nios II version.
|
||||||
|
Copyright (C) 2012-2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
|
||||||
|
/* 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;
|
||||||
|
|
||||||
|
/* The thread pointer points 0x7000 past the first static TLS block. */
|
||||||
|
#define TLS_TP_OFFSET 0x7000
|
||||||
|
|
||||||
|
/* Dynamic thread vector pointers point 0x8000 past the start of each
|
||||||
|
TLS block. */
|
||||||
|
#define TLS_DTV_OFFSET 0x8000
|
||||||
|
|
||||||
|
/* Compute the value for a GOTTPREL reloc. */
|
||||||
|
#define TLS_TPREL_VALUE(sym_map, sym) \
|
||||||
|
((sym_map)->l_tls_offset + (sym)->st_value - TLS_TP_OFFSET)
|
||||||
|
|
||||||
|
/* Compute the value for a DTPREL reloc. */
|
||||||
|
#define TLS_DTPREL_VALUE(sym) \
|
||||||
|
((sym)->st_value - TLS_DTV_OFFSET)
|
||||||
|
|
||||||
|
extern void *__tls_get_addr (tls_index *ti);
|
||||||
|
|
||||||
|
# define GET_ADDR_OFFSET (ti->ti_offset + TLS_DTV_OFFSET)
|
||||||
|
# define __TLS_GET_ADDR(__ti) (__tls_get_addr (__ti) - TLS_DTV_OFFSET)
|
||||||
|
|
||||||
|
/* Value used for dtv entries for which the allocation is delayed. */
|
||||||
|
#define TLS_DTV_UNALLOCATED ((void *) -1l)
|
79
sysdeps/nios2/dl-trampoline.S
Normal file
79
sysdeps/nios2/dl-trampoline.S
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
/* PLT trampolines. Nios II version.
|
||||||
|
Copyright (C) 2005-2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#include <sysdep.h>
|
||||||
|
#include <libc-symbols.h>
|
||||||
|
|
||||||
|
.text
|
||||||
|
.globl _dl_runtime_resolve
|
||||||
|
cfi_startproc
|
||||||
|
_dl_runtime_resolve:
|
||||||
|
/* The runtime resolver receives the original function arguments in r4
|
||||||
|
through r7, the shared library identifier from GOT[1]? in r14, and the
|
||||||
|
relocation index times four in r15. It updates the corresponding PLT GOT
|
||||||
|
entry so that the PLT entry will transfer control directly to the target
|
||||||
|
in the future, and then transfers control to the target. */
|
||||||
|
/* Save arguments and return address. */
|
||||||
|
subi sp, sp, 28
|
||||||
|
cfi_adjust_cfa_offset (28)
|
||||||
|
stw r22, 24(sp)
|
||||||
|
cfi_rel_offset (r22, 24)
|
||||||
|
stw r8, 20(sp) /* save r8, because this might be a call to mcount */
|
||||||
|
cfi_rel_offset (r8, 20)
|
||||||
|
stw r7, 16(sp)
|
||||||
|
cfi_rel_offset (r7, 16)
|
||||||
|
stw r6, 12(sp)
|
||||||
|
cfi_rel_offset (r6, 12)
|
||||||
|
stw r5, 8(sp)
|
||||||
|
cfi_rel_offset (r5, 8)
|
||||||
|
stw r4, 4(sp)
|
||||||
|
cfi_rel_offset (r4, 4)
|
||||||
|
stw ra, 0(sp)
|
||||||
|
cfi_rel_offset (ra, 0)
|
||||||
|
|
||||||
|
/* Get pointer to linker struct. */
|
||||||
|
mov r4, r14
|
||||||
|
|
||||||
|
/* Get the relocation offset. We're given a multiple of 4 and
|
||||||
|
need a multiple of 12, so multiply by 3. */
|
||||||
|
slli r5, r15, 1
|
||||||
|
add r5, r5, r15
|
||||||
|
|
||||||
|
/* Call the fixup routine. */
|
||||||
|
nextpc r22
|
||||||
|
1: movhi r2, %hiadj(_gp_got - 1b)
|
||||||
|
addi r2, r2, %lo(_gp_got - 1b)
|
||||||
|
add r22, r22, r2
|
||||||
|
ldw r2, %call(_dl_fixup)(r22)
|
||||||
|
callr r2
|
||||||
|
|
||||||
|
/* Restore the arguments and return address. */
|
||||||
|
ldw ra, 0(sp)
|
||||||
|
ldw r4, 4(sp)
|
||||||
|
ldw r5, 8(sp)
|
||||||
|
ldw r6, 12(sp)
|
||||||
|
ldw r7, 16(sp)
|
||||||
|
ldw r8, 20(sp)
|
||||||
|
ldw r22, 24(sp)
|
||||||
|
addi sp, sp, 28
|
||||||
|
cfi_adjust_cfa_offset (-28)
|
||||||
|
|
||||||
|
/* Jump to the newly found address. */
|
||||||
|
jmp r2
|
||||||
|
|
||||||
|
cfi_endproc
|
21
sysdeps/nios2/gccframe.h
Normal file
21
sysdeps/nios2/gccframe.h
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
/* Definition of object in frame unwind info. Nios II version.
|
||||||
|
Copyright (C) 2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#define FIRST_PSEUDO_REGISTER 40
|
||||||
|
|
||||||
|
#include <sysdeps/generic/gccframe.h>
|
23
sysdeps/nios2/gmp-mparam.h
Normal file
23
sysdeps/nios2/gmp-mparam.h
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
/* gmp-mparam.h -- Compiler/machine parameter header file.
|
||||||
|
|
||||||
|
Copyright (C) 2015 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of the GNU MP Library.
|
||||||
|
|
||||||
|
The GNU MP 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 MP 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 MP Library; see the file COPYING.LIB. If not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#include <sysdeps/generic/gmp-mparam.h>
|
||||||
|
|
||||||
|
#define IEEE_DOUBLE_BIG_ENDIAN 0
|
48
sysdeps/nios2/jmpbuf-offsets.h
Normal file
48
sysdeps/nios2/jmpbuf-offsets.h
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
/* Private macros for accessing __jmp_buf contents. Nios II version.
|
||||||
|
Copyright (C) 2006-2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
/* Save offsets within __jmp_buf. */
|
||||||
|
#define JB_R16 0
|
||||||
|
#define JB_R17 1
|
||||||
|
#define JB_R18 2
|
||||||
|
#define JB_R19 3
|
||||||
|
#define JB_R20 4
|
||||||
|
#define JB_R21 5
|
||||||
|
#define JB_R22 6
|
||||||
|
#define JB_FP 7
|
||||||
|
#define JB_RA 8
|
||||||
|
#define JB_SP 9
|
||||||
|
|
||||||
|
#ifndef __ASSEMBLER__
|
||||||
|
#include <setjmp.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <sysdep.h>
|
||||||
|
|
||||||
|
static inline uintptr_t __attribute__ ((unused))
|
||||||
|
_jmpbuf_sp (__jmp_buf jmpbuf)
|
||||||
|
{
|
||||||
|
uintptr_t sp = jmpbuf[JB_SP];
|
||||||
|
#ifdef PTR_DEMANGLE
|
||||||
|
PTR_DEMANGLE (sp);
|
||||||
|
#endif
|
||||||
|
return sp;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Helper for generic ____longjmp_chk(). */
|
||||||
|
#define JB_FRAME_ADDRESS(buf) ((void *) _jmpbuf_sp (buf))
|
37
sysdeps/nios2/jmpbuf-unwind.h
Normal file
37
sysdeps/nios2/jmpbuf-unwind.h
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
/* Examine __jmp_buf for unwinding frames. Nios II version.
|
||||||
|
Copyright (C) 2005-2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#include <setjmp.h>
|
||||||
|
#include <jmpbuf-offsets.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <unwind.h>
|
||||||
|
|
||||||
|
/* Test if longjmp to JMPBUF would unwind the frame
|
||||||
|
containing a local variable at ADDRESS. */
|
||||||
|
|
||||||
|
#define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \
|
||||||
|
((void *) (address) < (void *) demangle (jmpbuf[JB_SP]))
|
||||||
|
|
||||||
|
#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
|
||||||
|
_JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
|
||||||
|
|
||||||
|
#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
|
||||||
|
((uintptr_t) (_address) - (_adj) < (uintptr_t) (_jmpbuf_sp (_jmpbuf) - (_adj)))
|
||||||
|
|
||||||
|
/* We use the normal longjmp for unwinding. */
|
||||||
|
#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val)
|
43
sysdeps/nios2/ldsodefs.h
Normal file
43
sysdeps/nios2/ldsodefs.h
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
/* Run-time dynamic linker data structures for loaded ELF shared objects.
|
||||||
|
Copyright (C) 2000-2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _NIOS2_LDSODEFS_H
|
||||||
|
#define _NIOS2_LDSODEFS_H 1
|
||||||
|
|
||||||
|
#include <elf.h>
|
||||||
|
|
||||||
|
struct La_nios2_regs;
|
||||||
|
struct La_nios2_retval;
|
||||||
|
|
||||||
|
#define ARCH_PLTENTER_MEMBERS \
|
||||||
|
ElfW(Addr) (*nios2_gnu_pltenter) (ElfW(Sym) *, unsigned int, \
|
||||||
|
uintptr_t *, uintptr_t *, \
|
||||||
|
const struct La_nios2_regs *, \
|
||||||
|
unsigned int *, const char *, \
|
||||||
|
long int *);
|
||||||
|
|
||||||
|
#define ARCH_PLTEXIT_MEMBERS \
|
||||||
|
unsigned int (*nios2_gnu_pltexit) (ElfW(Sym) *, unsigned int, \
|
||||||
|
uintptr_t *, uintptr_t *, \
|
||||||
|
const struct La_nios2_regs *, \
|
||||||
|
struct La_nios2_retval *, \
|
||||||
|
const char *);
|
||||||
|
|
||||||
|
#include_next <ldsodefs.h>
|
||||||
|
|
||||||
|
#endif
|
32
sysdeps/nios2/libc-tls.c
Normal file
32
sysdeps/nios2/libc-tls.c
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
/* Thread-local storage handling in the ELF dynamic linker. Nios II version.
|
||||||
|
Copyright (C) 2005-2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#include <csu/libc-tls.c>
|
||||||
|
#include <dl-tls.h>
|
||||||
|
|
||||||
|
/* On Nios II, linker optimizations are not required, so __tls_get_addr
|
||||||
|
can be called even in statically linked binaries. In this case module
|
||||||
|
must be always 1 and PT_TLS segment exist in the binary, otherwise it
|
||||||
|
would not link. */
|
||||||
|
|
||||||
|
void *
|
||||||
|
__tls_get_addr (tls_index *ti)
|
||||||
|
{
|
||||||
|
dtv_t *dtv = THREAD_DTV ();
|
||||||
|
return (char *) dtv[1].pointer.val + GET_ADDR_OFFSET;
|
||||||
|
}
|
333
sysdeps/nios2/libm-test-ulps
Normal file
333
sysdeps/nios2/libm-test-ulps
Normal file
@ -0,0 +1,333 @@
|
|||||||
|
# Begin of automatic generation
|
||||||
|
|
||||||
|
# Maximal error of functions:
|
||||||
|
Function: "acosh":
|
||||||
|
double: 1
|
||||||
|
idouble: 1
|
||||||
|
|
||||||
|
Function: "asinh":
|
||||||
|
double: 1
|
||||||
|
float: 1
|
||||||
|
ifloat: 1
|
||||||
|
|
||||||
|
Function: "atan2":
|
||||||
|
float: 1
|
||||||
|
ifloat: 1
|
||||||
|
|
||||||
|
Function: "atanh":
|
||||||
|
float: 1
|
||||||
|
ifloat: 1
|
||||||
|
|
||||||
|
Function: Real part of "cacos":
|
||||||
|
double: 1
|
||||||
|
float: 2
|
||||||
|
idouble: 1
|
||||||
|
ifloat: 2
|
||||||
|
|
||||||
|
Function: Imaginary part of "cacos":
|
||||||
|
double: 1
|
||||||
|
float: 2
|
||||||
|
idouble: 1
|
||||||
|
ifloat: 2
|
||||||
|
|
||||||
|
Function: Real part of "cacosh":
|
||||||
|
double: 1
|
||||||
|
float: 2
|
||||||
|
idouble: 1
|
||||||
|
ifloat: 2
|
||||||
|
|
||||||
|
Function: Imaginary part of "cacosh":
|
||||||
|
double: 1
|
||||||
|
float: 2
|
||||||
|
idouble: 1
|
||||||
|
ifloat: 2
|
||||||
|
|
||||||
|
Function: Real part of "casin":
|
||||||
|
double: 1
|
||||||
|
float: 1
|
||||||
|
idouble: 1
|
||||||
|
ifloat: 1
|
||||||
|
|
||||||
|
Function: Imaginary part of "casin":
|
||||||
|
double: 1
|
||||||
|
float: 2
|
||||||
|
idouble: 1
|
||||||
|
ifloat: 2
|
||||||
|
|
||||||
|
Function: Real part of "casinh":
|
||||||
|
double: 1
|
||||||
|
float: 2
|
||||||
|
idouble: 1
|
||||||
|
ifloat: 2
|
||||||
|
|
||||||
|
Function: Imaginary part of "casinh":
|
||||||
|
double: 1
|
||||||
|
float: 1
|
||||||
|
idouble: 1
|
||||||
|
ifloat: 1
|
||||||
|
|
||||||
|
Function: Real part of "catan":
|
||||||
|
float: 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":
|
||||||
|
float: 1
|
||||||
|
ifloat: 1
|
||||||
|
|
||||||
|
Function: "cbrt":
|
||||||
|
double: 1
|
||||||
|
float: 1
|
||||||
|
idouble: 1
|
||||||
|
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: 1
|
||||||
|
float: 1
|
||||||
|
idouble: 1
|
||||||
|
ifloat: 1
|
||||||
|
|
||||||
|
Function: Imaginary part of "clog":
|
||||||
|
float: 1
|
||||||
|
ifloat: 1
|
||||||
|
|
||||||
|
Function: Real part of "clog10":
|
||||||
|
double: 2
|
||||||
|
float: 2
|
||||||
|
idouble: 2
|
||||||
|
ifloat: 2
|
||||||
|
|
||||||
|
Function: Imaginary part of "clog10":
|
||||||
|
double: 1
|
||||||
|
float: 1
|
||||||
|
idouble: 1
|
||||||
|
ifloat: 1
|
||||||
|
|
||||||
|
Function: "cos":
|
||||||
|
float: 1
|
||||||
|
ifloat: 1
|
||||||
|
|
||||||
|
Function: "cosh":
|
||||||
|
double: 1
|
||||||
|
float: 1
|
||||||
|
idouble: 1
|
||||||
|
ifloat: 1
|
||||||
|
|
||||||
|
Function: Real part of "cpow":
|
||||||
|
double: 2
|
||||||
|
float: 4
|
||||||
|
idouble: 2
|
||||||
|
ifloat: 4
|
||||||
|
|
||||||
|
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: 1
|
||||||
|
float: 1
|
||||||
|
idouble: 1
|
||||||
|
ifloat: 1
|
||||||
|
|
||||||
|
Function: Imaginary part of "csqrt":
|
||||||
|
double: 1
|
||||||
|
float: 1
|
||||||
|
idouble: 1
|
||||||
|
ifloat: 1
|
||||||
|
|
||||||
|
Function: Real part of "ctan":
|
||||||
|
double: 1
|
||||||
|
float: 1
|
||||||
|
idouble: 1
|
||||||
|
ifloat: 1
|
||||||
|
|
||||||
|
Function: Imaginary part of "ctan":
|
||||||
|
double: 2
|
||||||
|
float: 1
|
||||||
|
idouble: 2
|
||||||
|
ifloat: 1
|
||||||
|
|
||||||
|
Function: Real part of "ctanh":
|
||||||
|
double: 2
|
||||||
|
float: 1
|
||||||
|
idouble: 2
|
||||||
|
ifloat: 1
|
||||||
|
|
||||||
|
Function: Imaginary part of "ctanh":
|
||||||
|
double: 2
|
||||||
|
float: 2
|
||||||
|
idouble: 2
|
||||||
|
ifloat: 2
|
||||||
|
|
||||||
|
Function: "erf":
|
||||||
|
double: 1
|
||||||
|
idouble: 1
|
||||||
|
|
||||||
|
Function: "erfc":
|
||||||
|
double: 1
|
||||||
|
float: 1
|
||||||
|
idouble: 1
|
||||||
|
ifloat: 1
|
||||||
|
|
||||||
|
Function: "exp10":
|
||||||
|
double: 1
|
||||||
|
idouble: 1
|
||||||
|
|
||||||
|
Function: "expm1":
|
||||||
|
double: 1
|
||||||
|
float: 1
|
||||||
|
idouble: 1
|
||||||
|
ifloat: 1
|
||||||
|
|
||||||
|
Function: "gamma":
|
||||||
|
double: 1
|
||||||
|
float: 1
|
||||||
|
idouble: 1
|
||||||
|
ifloat: 1
|
||||||
|
|
||||||
|
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: 1
|
||||||
|
float: 1
|
||||||
|
idouble: 1
|
||||||
|
ifloat: 1
|
||||||
|
|
||||||
|
Function: "log":
|
||||||
|
float: 1
|
||||||
|
ifloat: 1
|
||||||
|
|
||||||
|
Function: "log10":
|
||||||
|
double: 1
|
||||||
|
float: 2
|
||||||
|
idouble: 1
|
||||||
|
ifloat: 2
|
||||||
|
|
||||||
|
Function: "log1p":
|
||||||
|
float: 1
|
||||||
|
ifloat: 1
|
||||||
|
|
||||||
|
Function: "pow":
|
||||||
|
float: 1
|
||||||
|
ifloat: 1
|
||||||
|
|
||||||
|
Function: "pow10":
|
||||||
|
double: 1
|
||||||
|
idouble: 1
|
||||||
|
|
||||||
|
Function: "sin":
|
||||||
|
float: 1
|
||||||
|
ifloat: 1
|
||||||
|
|
||||||
|
Function: "sincos":
|
||||||
|
float: 1
|
||||||
|
ifloat: 1
|
||||||
|
|
||||||
|
Function: "tgamma":
|
||||||
|
double: 4
|
||||||
|
float: 3
|
||||||
|
idouble: 4
|
||||||
|
ifloat: 3
|
||||||
|
|
||||||
|
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: 2
|
||||||
|
idouble: 3
|
||||||
|
ifloat: 2
|
||||||
|
|
||||||
|
# end of automatic generation
|
64
sysdeps/nios2/machine-gmon.h
Normal file
64
sysdeps/nios2/machine-gmon.h
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
/* Machine-dependent definitions for profiling support. Nios II version.
|
||||||
|
Copyright (C) 1996-2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#include <sysdep.h>
|
||||||
|
|
||||||
|
#define _MCOUNT_DECL(frompc, selfpc) \
|
||||||
|
static void __attribute_used__ __mcount_internal (u_long frompc, u_long selfpc)
|
||||||
|
|
||||||
|
/* This macro/func MUST save r4, r5, r6, r7 and r8 because the compiler inserts
|
||||||
|
blind calls to mcount(), ignoring the fact that mcount may clobber
|
||||||
|
registers; therefore, mcount may NOT clobber registers. */
|
||||||
|
|
||||||
|
#if defined(__PIC__) || defined(PIC)
|
||||||
|
#define NIOS2_MCOUNT_CALL \
|
||||||
|
"nextpc r3\n\t" \
|
||||||
|
"1: movhi r2, %hiadj(_gp_got - 1b)\n\t" \
|
||||||
|
"addi r2, r2, %lo(_gp_got - 1b)\n\t" \
|
||||||
|
"add r2, r2, r3\n\t" \
|
||||||
|
"ldw r2, %call(__mcount_internal)(r2)\n\t" \
|
||||||
|
"callr r2\n\t"
|
||||||
|
#else
|
||||||
|
#define NIOS2_MCOUNT_CALL \
|
||||||
|
"call\tmcount_internal\n\t"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define MCOUNT \
|
||||||
|
asm (".globl _mcount\n\t" \
|
||||||
|
".type _mcount,@function\n\t" \
|
||||||
|
"_mcount:\n\t" \
|
||||||
|
"subi sp, sp, 24\n\t" \
|
||||||
|
"stw ra, 20(sp)\n\t" \
|
||||||
|
"stw r8, 16(sp)\n\t" \
|
||||||
|
"stw r7, 12(sp)\n\t" \
|
||||||
|
"stw r6, 8(sp)\n\t" \
|
||||||
|
"stw r5, 4(sp)\n\t" \
|
||||||
|
"stw r4, 0(sp)\n\t" \
|
||||||
|
"mov r4, r8\n\t" \
|
||||||
|
"mov r5, ra\n\t" \
|
||||||
|
NIOS2_MCOUNT_CALL \
|
||||||
|
"ldw ra, 20(sp)\n\t" \
|
||||||
|
"ldw r8, 16(sp)\n\t" \
|
||||||
|
"ldw r7, 12(sp)\n\t" \
|
||||||
|
"ldw r6, 8(sp)\n\t" \
|
||||||
|
"ldw r5, 4(sp)\n\t" \
|
||||||
|
"ldw r4, 0(sp)\n\t" \
|
||||||
|
"addi sp, sp, 24\n\t" \
|
||||||
|
"ret\n\t" \
|
||||||
|
".size _mcount, . - _mcount\n\t" \
|
||||||
|
);
|
28
sysdeps/nios2/math-tests.h
Normal file
28
sysdeps/nios2/math-tests.h
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
/* Configuration for math tests. Nios II version.
|
||||||
|
Copyright (C) 2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
/* Current Nios II 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 <math-tests.h>
|
33
sysdeps/nios2/math_private.h
Normal file
33
sysdeps/nios2/math_private.h
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
#ifndef _MATH_PRIVATE_H
|
||||||
|
|
||||||
|
/* Suppress use of exceptions here to avoid build errors if the FE_*
|
||||||
|
macros aren't defined. Only allow rounding modes implemented for Nios II.
|
||||||
|
|
||||||
|
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
|
||||||
|
<fenv.h> 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 <math_private.h>
|
||||||
|
|
||||||
|
#define feraiseexcept(excepts) ({ 0; })
|
||||||
|
#define __feraiseexcept(excepts) ({ 0; })
|
||||||
|
#define feclearexcept(exc) ({ 0; })
|
||||||
|
|
||||||
|
#endif
|
23
sysdeps/nios2/memusage.h
Normal file
23
sysdeps/nios2/memusage.h
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
/* Machine-specific definitions for memory usage profiling, Nios II version.
|
||||||
|
Copyright (C) 2000-2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#define GETSP() ({ register uintptr_t stack_ptr asm ("%sp"); stack_ptr; })
|
||||||
|
|
||||||
|
#define uatomic32_t unsigned int
|
||||||
|
|
||||||
|
#include <sysdeps/generic/memusage.h>
|
22
sysdeps/nios2/nptl/Makefile
Normal file
22
sysdeps/nios2/nptl/Makefile
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
# NPTL makefile fragment for Nios II.
|
||||||
|
# Copyright (C) 2005-2015 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
|
||||||
|
# <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
ifeq ($(subdir),csu)
|
||||||
|
gen-as-const-headers += tcb-offsets.sym
|
||||||
|
endif
|
189
sysdeps/nios2/nptl/bits/pthreadtypes.h
Normal file
189
sysdeps/nios2/nptl/bits/pthreadtypes.h
Normal file
@ -0,0 +1,189 @@
|
|||||||
|
/* Machine-specific pthread type layouts. Nios II version.
|
||||||
|
Copyright (C) 2012-2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _BITS_PTHREADTYPES_H
|
||||||
|
#define _BITS_PTHREADTYPES_H 1
|
||||||
|
|
||||||
|
#include <endian.h>
|
||||||
|
|
||||||
|
#define __SIZEOF_PTHREAD_ATTR_T 36
|
||||||
|
#define __SIZEOF_PTHREAD_MUTEX_T 24
|
||||||
|
#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
|
||||||
|
|
||||||
|
|
||||||
|
/* Thread identifiers. The structure of the attribute type is
|
||||||
|
deliberately not exposed. */
|
||||||
|
typedef unsigned long int pthread_t;
|
||||||
|
|
||||||
|
|
||||||
|
union pthread_attr_t
|
||||||
|
{
|
||||||
|
char __size[__SIZEOF_PTHREAD_ATTR_T];
|
||||||
|
long int __align;
|
||||||
|
};
|
||||||
|
#ifndef __have_pthread_attr_t
|
||||||
|
typedef union pthread_attr_t pthread_attr_t;
|
||||||
|
# define __have_pthread_attr_t 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct __pthread_internal_slist
|
||||||
|
{
|
||||||
|
struct __pthread_internal_slist *__next;
|
||||||
|
} __pthread_slist_t;
|
||||||
|
|
||||||
|
|
||||||
|
/* Data structures for mutex handling. The structure of the attribute
|
||||||
|
type is deliberately not exposed. */
|
||||||
|
typedef union
|
||||||
|
{
|
||||||
|
struct __pthread_mutex_s
|
||||||
|
{
|
||||||
|
int __lock;
|
||||||
|
unsigned int __count;
|
||||||
|
int __owner;
|
||||||
|
/* KIND must stay at this position in the structure to maintain
|
||||||
|
binary compatibility. */
|
||||||
|
int __kind;
|
||||||
|
unsigned int __nusers;
|
||||||
|
__extension__ union
|
||||||
|
{
|
||||||
|
int __spins;
|
||||||
|
__pthread_slist_t __list;
|
||||||
|
};
|
||||||
|
} __data;
|
||||||
|
char __size[__SIZEOF_PTHREAD_MUTEX_T];
|
||||||
|
long int __align;
|
||||||
|
} pthread_mutex_t;
|
||||||
|
|
||||||
|
typedef union
|
||||||
|
{
|
||||||
|
char __size[__SIZEOF_PTHREAD_MUTEXATTR_T];
|
||||||
|
long int __align;
|
||||||
|
} pthread_mutexattr_t;
|
||||||
|
|
||||||
|
/* Mutex __spins initializer used by PTHREAD_MUTEX_INITIALIZER. */
|
||||||
|
#define __PTHREAD_SPINS 0
|
||||||
|
|
||||||
|
|
||||||
|
/* Data structure for conditional variable handling. The structure of
|
||||||
|
the attribute type is deliberately not exposed. */
|
||||||
|
typedef union
|
||||||
|
{
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
int __lock;
|
||||||
|
unsigned int __futex;
|
||||||
|
__extension__ unsigned long long int __total_seq;
|
||||||
|
__extension__ unsigned long long int __wakeup_seq;
|
||||||
|
__extension__ unsigned long long int __woken_seq;
|
||||||
|
void *__mutex;
|
||||||
|
unsigned int __nwaiters;
|
||||||
|
unsigned int __broadcast_seq;
|
||||||
|
} __data;
|
||||||
|
char __size[__SIZEOF_PTHREAD_COND_T];
|
||||||
|
__extension__ long long int __align;
|
||||||
|
} pthread_cond_t;
|
||||||
|
|
||||||
|
typedef union
|
||||||
|
{
|
||||||
|
char __size[__SIZEOF_PTHREAD_CONDATTR_T];
|
||||||
|
long int __align;
|
||||||
|
} pthread_condattr_t;
|
||||||
|
|
||||||
|
|
||||||
|
/* Keys for thread-specific data */
|
||||||
|
typedef unsigned int pthread_key_t;
|
||||||
|
|
||||||
|
|
||||||
|
/* Once-only execution */
|
||||||
|
typedef int pthread_once_t;
|
||||||
|
|
||||||
|
|
||||||
|
#if defined __USE_UNIX98 || defined __USE_XOPEN2K
|
||||||
|
/* Data structure for read-write lock variable handling. The
|
||||||
|
structure of the attribute type is deliberately not exposed. */
|
||||||
|
typedef union
|
||||||
|
{
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
int __lock;
|
||||||
|
unsigned int __nr_readers;
|
||||||
|
unsigned int __readers_wakeup;
|
||||||
|
unsigned int __writer_wakeup;
|
||||||
|
unsigned int __nr_readers_queued;
|
||||||
|
unsigned int __nr_writers_queued;
|
||||||
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
||||||
|
unsigned char __pad1;
|
||||||
|
unsigned char __pad2;
|
||||||
|
unsigned char __shared;
|
||||||
|
/* FLAGS must stay at this position in the structure to maintain
|
||||||
|
binary compatibility. */
|
||||||
|
unsigned char __flags;
|
||||||
|
#else
|
||||||
|
/* FLAGS must stay at this position in the structure to maintain
|
||||||
|
binary compatibility. */
|
||||||
|
unsigned char __flags;
|
||||||
|
unsigned char __shared;
|
||||||
|
unsigned char __pad1;
|
||||||
|
unsigned char __pad2;
|
||||||
|
#endif
|
||||||
|
int __writer;
|
||||||
|
} __data;
|
||||||
|
char __size[__SIZEOF_PTHREAD_RWLOCK_T];
|
||||||
|
long int __align;
|
||||||
|
} pthread_rwlock_t;
|
||||||
|
|
||||||
|
#define __PTHREAD_RWLOCK_ELISION_EXTRA 0
|
||||||
|
|
||||||
|
typedef union
|
||||||
|
{
|
||||||
|
char __size[__SIZEOF_PTHREAD_RWLOCKATTR_T];
|
||||||
|
long int __align;
|
||||||
|
} pthread_rwlockattr_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __USE_XOPEN2K
|
||||||
|
/* POSIX spinlock data type. */
|
||||||
|
typedef volatile int pthread_spinlock_t;
|
||||||
|
|
||||||
|
|
||||||
|
/* POSIX barriers data type. The structure of the type is
|
||||||
|
deliberately not exposed. */
|
||||||
|
typedef union
|
||||||
|
{
|
||||||
|
char __size[__SIZEOF_PTHREAD_BARRIER_T];
|
||||||
|
long int __align;
|
||||||
|
} pthread_barrier_t;
|
||||||
|
|
||||||
|
typedef union
|
||||||
|
{
|
||||||
|
char __size[__SIZEOF_PTHREAD_BARRIERATTR_T];
|
||||||
|
int __align;
|
||||||
|
} pthread_barrierattr_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* bits/pthreadtypes.h */
|
32
sysdeps/nios2/nptl/bits/semaphore.h
Normal file
32
sysdeps/nios2/nptl/bits/semaphore.h
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
/* Machine-specific POSIX semaphore type layouts. Nios II version.
|
||||||
|
Copyright (C) 2002-2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _SEMAPHORE_H
|
||||||
|
# error "Never use <bits/semaphore.h> directly; include <semaphore.h> 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;
|
24
sysdeps/nios2/nptl/pthread_spin_lock.c
Normal file
24
sysdeps/nios2/nptl/pthread_spin_lock.c
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
/* pthread spin-lock implementation for Nios II.
|
||||||
|
Copyright (C) 2005-2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#define SPIN_LOCK_READS_BETWEEN_CMPXCHG 1000
|
||||||
|
|
||||||
|
/* We can't use the normal "#include <nptl/pthread_spin_lock.c>" because
|
||||||
|
it will resolve to this very file. Using "sysdeps/.." as reference to the
|
||||||
|
top level directory does the job. */
|
||||||
|
#include <sysdeps/../nptl/pthread_spin_lock.c>
|
32
sysdeps/nios2/nptl/pthreaddef.h
Normal file
32
sysdeps/nios2/nptl/pthreaddef.h
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
/* pthread machine parameter definitions, Nios II version.
|
||||||
|
Copyright (C) 2002-2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
/* Default stack size. */
|
||||||
|
#define ARCH_STACK_DEFAULT_SIZE (2 * 1024 * 1024)
|
||||||
|
|
||||||
|
/* Required stack pointer alignment at beginning. */
|
||||||
|
#define STACK_ALIGN 4
|
||||||
|
|
||||||
|
/* Minimal stack size after allocating thread descriptor and guard size. */
|
||||||
|
#define MINIMAL_REST_STACK 2048
|
||||||
|
|
||||||
|
/* Alignment requirement for TCB. */
|
||||||
|
#define TCB_ALIGNMENT 4
|
||||||
|
|
||||||
|
/* Location of current stack frame. */
|
||||||
|
#define CURRENT_STACK_FRAME __builtin_frame_address (0)
|
14
sysdeps/nios2/nptl/tcb-offsets.sym
Normal file
14
sysdeps/nios2/nptl/tcb-offsets.sym
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#include <sysdep.h>
|
||||||
|
#include <tls.h>
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
-- Abuse tls.h macros to derive offsets relative to the thread register.
|
||||||
|
# undef __thread_self
|
||||||
|
# define __thread_self ((void *) 0)
|
||||||
|
# define thread_offsetof(mem) ((ptrdiff_t) THREAD_SELF + offsetof (struct pthread, mem))
|
||||||
|
|
||||||
|
MULTIPLE_THREADS_OFFSET thread_offsetof (header.multiple_threads)
|
||||||
|
PID_OFFSET thread_offsetof (pid)
|
||||||
|
TID_OFFSET thread_offsetof (tid)
|
||||||
|
POINTER_GUARD (offsetof (tcbhead_t, pointer_guard) - TLS_TCB_OFFSET - sizeof (tcbhead_t))
|
174
sysdeps/nios2/nptl/tls.h
Normal file
174
sysdeps/nios2/nptl/tls.h
Normal file
@ -0,0 +1,174 @@
|
|||||||
|
/* Definition for thread-local data handling. NPTL/Nios II version.
|
||||||
|
Copyright (C) 2012-2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _TLS_H
|
||||||
|
#define _TLS_H 1
|
||||||
|
|
||||||
|
#include <dl-sysdep.h>
|
||||||
|
|
||||||
|
#ifndef __ASSEMBLER__
|
||||||
|
# include <stdbool.h>
|
||||||
|
# include <stddef.h>
|
||||||
|
# include <stdint.h>
|
||||||
|
|
||||||
|
/* Type for the dtv. */
|
||||||
|
typedef union dtv
|
||||||
|
{
|
||||||
|
size_t counter;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
void *val;
|
||||||
|
bool is_static;
|
||||||
|
} pointer;
|
||||||
|
} dtv_t;
|
||||||
|
|
||||||
|
#else /* __ASSEMBLER__ */
|
||||||
|
# include <tcb-offsets.h>
|
||||||
|
#endif /* __ASSEMBLER__ */
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __ASSEMBLER__
|
||||||
|
|
||||||
|
/* Get system call information. */
|
||||||
|
# include <sysdep.h>
|
||||||
|
|
||||||
|
/* The TP points to the start of the thread blocks. */
|
||||||
|
# define TLS_DTV_AT_TP 1
|
||||||
|
# define TLS_TCB_AT_TP 0
|
||||||
|
|
||||||
|
/* Get the thread descriptor definition. */
|
||||||
|
# include <nptl/descr.h>
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
dtv_t *dtv;
|
||||||
|
uintptr_t pointer_guard;
|
||||||
|
unsigned spare[6];
|
||||||
|
} tcbhead_t;
|
||||||
|
|
||||||
|
register struct pthread *__thread_self __asm__("r23");
|
||||||
|
|
||||||
|
#define READ_THREAD_POINTER() ((void *) __thread_self)
|
||||||
|
|
||||||
|
/* This is the size of the initial TCB. Because our TCB is before the thread
|
||||||
|
pointer, we don't need this. */
|
||||||
|
# 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. Because our TCB is before the thread
|
||||||
|
pointer, we don't need this. */
|
||||||
|
# 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)))
|
||||||
|
|
||||||
|
/* The thread pointer (in hardware register r23) points to the end of
|
||||||
|
the TCB + 0x7000, as for PowerPC and MIPS. */
|
||||||
|
# define TLS_TCB_OFFSET 0x7000
|
||||||
|
|
||||||
|
/* 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. */
|
||||||
|
# define TLS_INIT_TP(tcbp) \
|
||||||
|
(__thread_self = (struct pthread *) ((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 *) (READ_THREAD_POINTER () - TLS_TCB_OFFSET))[-1].dtv)
|
||||||
|
|
||||||
|
/* Return the thread descriptor for the current thread. */
|
||||||
|
# define THREAD_SELF \
|
||||||
|
((struct pthread *) (READ_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, 23 * 4, -TLS_PRE_TCB_SIZE - TLS_TCB_OFFSET)
|
||||||
|
|
||||||
|
/* Access to data in the thread descriptor is easy. */
|
||||||
|
# define THREAD_GETMEM(descr, member) \
|
||||||
|
descr->member
|
||||||
|
# define THREAD_GETMEM_NC(descr, member, idx) \
|
||||||
|
descr->member[idx]
|
||||||
|
# define THREAD_SETMEM(descr, member, value) \
|
||||||
|
descr->member = (value)
|
||||||
|
# define THREAD_SETMEM_NC(descr, member, idx, value) \
|
||||||
|
descr->member[idx] = (value)
|
||||||
|
|
||||||
|
# define THREAD_GET_POINTER_GUARD() \
|
||||||
|
(((tcbhead_t *) (READ_THREAD_POINTER () \
|
||||||
|
- TLS_TCB_OFFSET))[-1].pointer_guard)
|
||||||
|
# define THREAD_SET_POINTER_GUARD(value) \
|
||||||
|
(THREAD_GET_POINTER_GUARD () = (value))
|
||||||
|
# define THREAD_COPY_POINTER_GUARD(descr) \
|
||||||
|
(((tcbhead_t *) ((void *) (descr) \
|
||||||
|
+ TLS_PRE_TCB_SIZE))[-1].pointer_guard \
|
||||||
|
= THREAD_GET_POINTER_GUARD())
|
||||||
|
|
||||||
|
/* l_tls_offset == 0 is perfectly valid on Nios II, 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 */
|
6
sysdeps/nios2/preconfigure
Normal file
6
sysdeps/nios2/preconfigure
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
case "$machine" in
|
||||||
|
nios2*)
|
||||||
|
base_machine=nios2
|
||||||
|
machine=nios2
|
||||||
|
;;
|
||||||
|
esac
|
1
sysdeps/nios2/s_fma.c
Normal file
1
sysdeps/nios2/s_fma.c
Normal file
@ -0,0 +1 @@
|
|||||||
|
#include <soft-fp/fmadf4.c>
|
1
sysdeps/nios2/s_fmaf.c
Normal file
1
sysdeps/nios2/s_fmaf.c
Normal file
@ -0,0 +1 @@
|
|||||||
|
#include <soft-fp/fmasf4.c>
|
73
sysdeps/nios2/setjmp.S
Normal file
73
sysdeps/nios2/setjmp.S
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
/* setjmp for Nios II.
|
||||||
|
Copyright (C) 1991-2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#include <sysdep.h>
|
||||||
|
#include <jmpbuf-offsets.h>
|
||||||
|
|
||||||
|
.text
|
||||||
|
ENTRY(setjmp)
|
||||||
|
movi r5, 1
|
||||||
|
br __sigsetjmp
|
||||||
|
END(setjmp)
|
||||||
|
|
||||||
|
ENTRY(_setjmp)
|
||||||
|
mov r5, zero
|
||||||
|
br __sigsetjmp
|
||||||
|
END(_setjmp)
|
||||||
|
libc_hidden_def (_setjmp)
|
||||||
|
|
||||||
|
/* Save the current program position in ENV and return 0. */
|
||||||
|
ENTRY(__sigsetjmp)
|
||||||
|
#ifdef PTR_MANGLE
|
||||||
|
PTR_MANGLE_GUARD (r9)
|
||||||
|
#endif
|
||||||
|
stw r16, (JB_R16*4)(r4)
|
||||||
|
stw r17, (JB_R17*4)(r4)
|
||||||
|
stw r18, (JB_R18*4)(r4)
|
||||||
|
stw r19, (JB_R19*4)(r4)
|
||||||
|
stw r20, (JB_R20*4)(r4)
|
||||||
|
stw r21, (JB_R21*4)(r4)
|
||||||
|
stw r22, (JB_R22*4)(r4)
|
||||||
|
stw fp, (JB_FP*4)(r4)
|
||||||
|
#ifdef PTR_MANGLE
|
||||||
|
PTR_MANGLE (r6, ra, r9)
|
||||||
|
PTR_MANGLE (r7, sp, r9)
|
||||||
|
stw r6, (JB_RA*4)(r4)
|
||||||
|
stw r7, (JB_SP*4)(r4)
|
||||||
|
#else
|
||||||
|
stw ra, (JB_RA*4)(r4)
|
||||||
|
stw sp, (JB_SP*4)(r4)
|
||||||
|
#endif
|
||||||
|
#if IS_IN (rtld)
|
||||||
|
/* In ld.so we never save the signal mask. */
|
||||||
|
mov r2, zero
|
||||||
|
ret
|
||||||
|
#else
|
||||||
|
/* Save the signal mask if requested. */
|
||||||
|
#if defined(__PIC__) || defined(PIC)
|
||||||
|
nextpc r2
|
||||||
|
1: movhi r3, %hiadj(__sigjmp_save - 1b)
|
||||||
|
addi r3, r3, %lo(__sigjmp_save - 1b)
|
||||||
|
add r2, r2, r3
|
||||||
|
jmp r2
|
||||||
|
#else
|
||||||
|
jmpi __sigjmp_save
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
END (__sigsetjmp)
|
||||||
|
libc_hidden_def (__sigsetjmp)
|
51
sysdeps/nios2/sfp-machine.h
Normal file
51
sysdeps/nios2/sfp-machine.h
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
#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
|
||||||
|
|
||||||
|
/* This is arbitrarily taken from the PowerPC version. */
|
||||||
|
#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
|
51
sysdeps/nios2/sotruss-lib.c
Normal file
51
sysdeps/nios2/sotruss-lib.c
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
/* Override generic sotruss-lib.c to define actual functions for Nios II.
|
||||||
|
Copyright (C) 2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#define HAVE_ARCH_PLTENTER
|
||||||
|
#define HAVE_ARCH_PLTEXIT
|
||||||
|
|
||||||
|
#include <elf/sotruss-lib.c>
|
||||||
|
|
||||||
|
ElfW(Addr)
|
||||||
|
la_nios2_gnu_pltenter (ElfW(Sym) *sym __attribute__ ((unused)),
|
||||||
|
unsigned int ndx __attribute__ ((unused)),
|
||||||
|
uintptr_t *refcook, uintptr_t *defcook,
|
||||||
|
La_nios2_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_nios2_gnu_pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook,
|
||||||
|
uintptr_t *defcook,
|
||||||
|
const struct La_nios2_regs *inregs,
|
||||||
|
struct La_nios2_retval *outregs, const char *symname)
|
||||||
|
{
|
||||||
|
print_exit (refcook, defcook, symname, outregs->lrv_r2);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
6
sysdeps/nios2/stackguard-macros.h
Normal file
6
sysdeps/nios2/stackguard-macros.h
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
extern uintptr_t __stack_chk_guard;
|
||||||
|
#define STACK_CHK_GUARD __stack_chk_guard
|
||||||
|
|
||||||
|
#define POINTER_CHK_GUARD THREAD_GET_POINTER_GUARD()
|
33
sysdeps/nios2/stackinfo.h
Normal file
33
sysdeps/nios2/stackinfo.h
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
/* Stack environment definitions for Nios II.
|
||||||
|
Copyright (C) 2012-2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
/* This file contains a bit of information about the stack allocation
|
||||||
|
of the processor. */
|
||||||
|
|
||||||
|
#ifndef _STACKINFO_H
|
||||||
|
#define _STACKINFO_H 1
|
||||||
|
|
||||||
|
#include <elf.h>
|
||||||
|
|
||||||
|
/* On Nios II the stack grows down. */
|
||||||
|
#define _STACK_GROWS_DOWN 1
|
||||||
|
|
||||||
|
/* Default to a non-executable stack. */
|
||||||
|
#define DEFAULT_STACK_PERMS (PF_R|PF_W)
|
||||||
|
|
||||||
|
#endif /* stackinfo.h */
|
146
sysdeps/nios2/start.S
Normal file
146
sysdeps/nios2/start.S
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
/* Startup code for Nios II
|
||||||
|
Copyright (C) 1995-2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
/* 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
|
||||||
|
|
||||||
|
The stack pointer, sp, will point to the argument count on the stack.
|
||||||
|
The initial state of the stack when a userspace process is started is:
|
||||||
|
|
||||||
|
Purpose Start Address Length
|
||||||
|
Unspecified High Addresses
|
||||||
|
Referenced strings, etc. Varies
|
||||||
|
Unspecified
|
||||||
|
Null auxilliary vector entry 4bytes
|
||||||
|
Auxilliary vector entries 8bytes each
|
||||||
|
NULL terminator for envp 4bytes
|
||||||
|
Environment pointers sp+8+4*argc 4bytes each
|
||||||
|
NULL terminator for argv sp+4+4*argc 4bytes
|
||||||
|
Argument pointers sp+4 4bytes each
|
||||||
|
Argument count sp 4bytes
|
||||||
|
Unspecified Low Addresses
|
||||||
|
|
||||||
|
If the application should register a destructor function with atexit,
|
||||||
|
the pointer will be placed in r4. Otherwise r4 will be zero.
|
||||||
|
|
||||||
|
The contents of all other registers are unspecified. User code should
|
||||||
|
set fp to zero to mark the end of the frame chain.
|
||||||
|
|
||||||
|
The auxilliary vector is a series of pairs of 32-bit tag and 32-bit
|
||||||
|
value, terminated by an AT_NULL tag.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.text
|
||||||
|
.globl _start
|
||||||
|
.type _start,%function
|
||||||
|
_start:
|
||||||
|
/* Set up the global pointer. */
|
||||||
|
movhi gp, %hiadj(_gp)
|
||||||
|
addi gp, gp, %lo(_gp)
|
||||||
|
|
||||||
|
/* Save the stack pointer. */
|
||||||
|
mov r2, sp
|
||||||
|
|
||||||
|
/* Create room on the stack for the fini, rtld_fini and stack_end args
|
||||||
|
to __libc_start_main. */
|
||||||
|
subi sp, sp, 12
|
||||||
|
|
||||||
|
/* Push stack_end */
|
||||||
|
stw r2, 8(sp)
|
||||||
|
|
||||||
|
/* Push rtld_fini */
|
||||||
|
stw r4, 4(sp)
|
||||||
|
|
||||||
|
/* Set up the GOT pointer. */
|
||||||
|
nextpc r22
|
||||||
|
1: movhi r2, %hiadj(_gp_got - 1b)
|
||||||
|
addi r2, r2, %lo(_gp_got - 1b)
|
||||||
|
add r22, r22, r2
|
||||||
|
|
||||||
|
/* Push fini */
|
||||||
|
movhi r8, %call_hiadj(__libc_csu_fini)
|
||||||
|
addi r8, r8, %call_lo(__libc_csu_fini)
|
||||||
|
add r8, r8, r22
|
||||||
|
ldw r8, 0(r8)
|
||||||
|
stw r8, 0(sp)
|
||||||
|
|
||||||
|
/* r7 == init */
|
||||||
|
movhi r7, %call_hiadj(__libc_csu_init)
|
||||||
|
addi r7, r7, %call_lo(__libc_csu_init)
|
||||||
|
add r7, r7, r22
|
||||||
|
ldw r7, 0(r7)
|
||||||
|
|
||||||
|
/* r6 == argv */
|
||||||
|
addi r6, sp, 16
|
||||||
|
|
||||||
|
/* r5 == argc */
|
||||||
|
ldw r5, 12(sp)
|
||||||
|
|
||||||
|
/* r4 == main */
|
||||||
|
movhi r4, %call_hiadj(main)
|
||||||
|
addi r4, r4, %call_lo(main)
|
||||||
|
add r4, r4, r22
|
||||||
|
ldw r4, 0(r4)
|
||||||
|
|
||||||
|
/* fp == 0 */
|
||||||
|
mov fp, zero
|
||||||
|
|
||||||
|
/* __libc_start_main (main, argc, argv, init, fini, rtld_fini,
|
||||||
|
stack_end) */
|
||||||
|
|
||||||
|
/* Let the libc call main and exit with its return code. */
|
||||||
|
movhi r2, %call_hiadj(__libc_start_main)
|
||||||
|
addi r2, r2, %call_lo(__libc_start_main)
|
||||||
|
add r2, r2, r22
|
||||||
|
ldw r2, 0(r2)
|
||||||
|
callr r2
|
||||||
|
|
||||||
|
/* should never get here....*/
|
||||||
|
movhi r2, %call_hiadj(abort)
|
||||||
|
addi r2, r2, %call_lo(abort)
|
||||||
|
add r2, r2, r22
|
||||||
|
ldw r2, 0(r2)
|
||||||
|
callr r2
|
||||||
|
|
||||||
|
/* 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
|
65
sysdeps/nios2/sysdep.h
Normal file
65
sysdeps/nios2/sysdep.h
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
/* Assembler macros for Nios II.
|
||||||
|
Copyright (C) 2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#include <sysdeps/generic/sysdep.h>
|
||||||
|
|
||||||
|
#ifdef __ASSEMBLER__
|
||||||
|
|
||||||
|
/* Syntactic details of assembler. */
|
||||||
|
|
||||||
|
#define ASM_SIZE_DIRECTIVE(name) .size name,.-name
|
||||||
|
|
||||||
|
#define ENTRY(name) \
|
||||||
|
.globl C_SYMBOL_NAME(name); \
|
||||||
|
.type C_SYMBOL_NAME(name),%function; \
|
||||||
|
C_LABEL(name) \
|
||||||
|
cfi_startproc; \
|
||||||
|
CALL_MCOUNT;
|
||||||
|
|
||||||
|
#undef END
|
||||||
|
#define END(name) \
|
||||||
|
cfi_endproc; \
|
||||||
|
ASM_SIZE_DIRECTIVE(name)
|
||||||
|
|
||||||
|
#ifdef PROF
|
||||||
|
|
||||||
|
# ifdef __PIC__
|
||||||
|
# define CALL_MCOUNT \
|
||||||
|
mov r8, ra; \
|
||||||
|
nextpc r2; \
|
||||||
|
1: \
|
||||||
|
movhi r3, %hiadj(_gp_got - 1b); \
|
||||||
|
addi r3, r3, %lo(_gp_got - 1b); \
|
||||||
|
add r2, r2, r3; \
|
||||||
|
ldw r2, %call(_mcount)(r2); \
|
||||||
|
callr r2; \
|
||||||
|
mov ra, r8; \
|
||||||
|
ret;
|
||||||
|
# else
|
||||||
|
# define CALL_MCOUNT \
|
||||||
|
mov r8, ra; \
|
||||||
|
call _mount; \
|
||||||
|
mov ra, r8; \
|
||||||
|
ret;
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#else
|
||||||
|
# define CALL_MCOUNT /* Do nothing. */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __ASSEMBLER__ */
|
46
sysdeps/nios2/tls-macros.h
Normal file
46
sysdeps/nios2/tls-macros.h
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
#define TLS_LE(x) \
|
||||||
|
({ int *__result; \
|
||||||
|
asm ("addi %0, r23, %%tls_le(" #x ")" \
|
||||||
|
: "=r" (__result)); \
|
||||||
|
__result; })
|
||||||
|
|
||||||
|
#define TLS_IE(x) \
|
||||||
|
({ int *__result; \
|
||||||
|
int __tmp; \
|
||||||
|
asm ("nextpc %0 ; " \
|
||||||
|
"1: movhi %1, %%hiadj(_gp_got - 1b) ; " \
|
||||||
|
"addi %1, %1, %%lo(_gp_got - 1b) ; " \
|
||||||
|
"add %0, %0, %1 ; " \
|
||||||
|
"ldw %1, %%tls_ie(" #x ")(%0) ; " \
|
||||||
|
"add %1, r23, %1" \
|
||||||
|
: "=&r" (__tmp), "=&r" (__result)); \
|
||||||
|
__result; })
|
||||||
|
|
||||||
|
#define TLS_LD(x) \
|
||||||
|
({ char *__result; \
|
||||||
|
char *__result2; \
|
||||||
|
int *__result3; \
|
||||||
|
int __tmp; \
|
||||||
|
extern void *__tls_get_addr (void *); \
|
||||||
|
asm ("nextpc %0 ; " \
|
||||||
|
"1: movhi %1, %%hiadj(_gp_got - 1b) ; " \
|
||||||
|
"addi %1, %1, %%lo(_gp_got - 1b) ; " \
|
||||||
|
"add %0, %0, %1 ; " \
|
||||||
|
"addi %0, %0, %%tls_ldm(" #x ")" \
|
||||||
|
: "=r" (__result), "=r" (__tmp)); \
|
||||||
|
__result2 = (char *)__tls_get_addr (__result); \
|
||||||
|
asm ("addi %0, %1, %%tls_ldo(" #x ")" \
|
||||||
|
: "=r" (__result3) : "r" (__result2)); \
|
||||||
|
__result3; })
|
||||||
|
|
||||||
|
#define TLS_GD(x) \
|
||||||
|
({ int *__result; \
|
||||||
|
int __tmp; \
|
||||||
|
extern void *__tls_get_addr (void *); \
|
||||||
|
asm ("nextpc %0 ; " \
|
||||||
|
"1: movhi %1, %%hiadj(_gp_got - 1b) ; " \
|
||||||
|
"addi %1, %1, %%lo(_gp_got - 1b) ; " \
|
||||||
|
"add %0, %0, %1 ; " \
|
||||||
|
"addi %0, %0, %%tls_gd(" #x ")" \
|
||||||
|
: "=r" (__result), "=r" (__tmp)); \
|
||||||
|
(int *)__tls_get_addr (__result); })
|
23
sysdeps/nios2/tst-audit.h
Normal file
23
sysdeps/nios2/tst-audit.h
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
/* Definitions for testing PLT entry/exit auditing. Nios II version.
|
||||||
|
Copyright (C) 2009-2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#define pltenter la_nios2_gnu_pltenter
|
||||||
|
#define pltexit la_nios2_gnu_pltexit
|
||||||
|
#define La_regs La_nios2_regs
|
||||||
|
#define La_retval La_nios2_retval
|
||||||
|
#define int_retval lrv_r2
|
3
sysdeps/unix/sysv/linux/nios2/Implies
Normal file
3
sysdeps/unix/sysv/linux/nios2/Implies
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
nios2/nptl
|
||||||
|
unix/sysv/linux/generic/wordsize-32
|
||||||
|
unix/sysv/linux/generic
|
13
sysdeps/unix/sysv/linux/nios2/Makefile
Normal file
13
sysdeps/unix/sysv/linux/nios2/Makefile
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
ifeq ($(subdir),stdlib)
|
||||||
|
gen-as-const-headers += ucontext_i.sym
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(subdir),misc)
|
||||||
|
# MIPS/Tile-style cacheflush routine
|
||||||
|
sysdep_headers += sys/cachectl.h
|
||||||
|
sysdep_routines += cacheflush
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(subdir),nptl)
|
||||||
|
libpthread-routines := $(filter-out pt-vfork,$(libpthread-routines))
|
||||||
|
endif
|
6
sysdeps/unix/sysv/linux/nios2/Versions
Normal file
6
sysdeps/unix/sysv/linux/nios2/Versions
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
libc {
|
||||||
|
GLIBC_2.21 {
|
||||||
|
_flush_cache;
|
||||||
|
cacheflush;
|
||||||
|
}
|
||||||
|
}
|
33
sysdeps/unix/sysv/linux/nios2/arch-fork.h
Normal file
33
sysdeps/unix/sysv/linux/nios2/arch-fork.h
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
/* ARCH_FORK definition for Linux fork implementation. Nios II version.
|
||||||
|
Copyright (C) 2005-2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#include <sched.h>
|
||||||
|
#include <signal.h>
|
||||||
|
#include <sysdep.h>
|
||||||
|
#include <tls.h>
|
||||||
|
|
||||||
|
/* Argument 1 - Clone flags.
|
||||||
|
2 - Child stack pointer.
|
||||||
|
3 - Parent tid pointer.
|
||||||
|
4 - Child tid pointer.
|
||||||
|
5 - New TLS area pointer. */
|
||||||
|
|
||||||
|
#define ARCH_FORK() \
|
||||||
|
INLINE_SYSCALL (clone, 5, \
|
||||||
|
CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHLD, \
|
||||||
|
NULL, NULL, &THREAD_SELF->tid, NULL)
|
92
sysdeps/unix/sysv/linux/nios2/bits/atomic.h
Normal file
92
sysdeps/unix/sysv/linux/nios2/bits/atomic.h
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
/* Low-level functions for atomic operations. Nios II version.
|
||||||
|
Copyright (C) 2012-2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _NIOS2_BITS_ATOMIC_H
|
||||||
|
#define _NIOS2_BITS_ATOMIC_H 1
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
typedef int32_t atomic32_t;
|
||||||
|
typedef uint32_t uatomic32_t;
|
||||||
|
typedef int_fast32_t atomic_fast32_t;
|
||||||
|
typedef uint_fast32_t uatomic_fast32_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 0
|
||||||
|
|
||||||
|
#define __arch_compare_and_exchange_val_8_acq(mem, newval, oldval) \
|
||||||
|
(abort (), (__typeof (*mem)) 0)
|
||||||
|
#define __arch_compare_and_exchange_val_16_acq(mem, newval, oldval) \
|
||||||
|
(abort (), (__typeof (*mem)) 0)
|
||||||
|
#define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \
|
||||||
|
(abort (), (__typeof (*mem)) 0)
|
||||||
|
|
||||||
|
#define __arch_compare_and_exchange_bool_8_acq(mem, newval, oldval) \
|
||||||
|
(abort (), 0)
|
||||||
|
#define __arch_compare_and_exchange_bool_16_acq(mem, newval, oldval) \
|
||||||
|
(abort (), 0)
|
||||||
|
#define __arch_compare_and_exchange_bool_64_acq(mem, newval, oldval) \
|
||||||
|
(abort (), 0)
|
||||||
|
|
||||||
|
#define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval) \
|
||||||
|
({ \
|
||||||
|
register int r2 asm ("r2"); \
|
||||||
|
register int* r4 asm ("r4") = (int*)(mem); \
|
||||||
|
register int r5 asm ("r5"); \
|
||||||
|
register int r6 asm ("r6") = (int)(newval); \
|
||||||
|
int retval, orig_oldval = (int)(oldval); \
|
||||||
|
long kernel_cmpxchg = 0x1004; \
|
||||||
|
while (1) \
|
||||||
|
{ \
|
||||||
|
r5 = *r4; \
|
||||||
|
if (r5 != orig_oldval) \
|
||||||
|
{ \
|
||||||
|
retval = r5; \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
|
asm volatile ("callr %1\n" \
|
||||||
|
: "=r" (r2) \
|
||||||
|
: "r" (kernel_cmpxchg), "r" (r4), "r" (r5), "r" (r6) \
|
||||||
|
: "ra", "memory"); \
|
||||||
|
if (!r2) { retval = orig_oldval; break; } \
|
||||||
|
} \
|
||||||
|
(__typeof (*(mem))) retval; \
|
||||||
|
})
|
||||||
|
|
||||||
|
#define __arch_compare_and_exchange_bool_32_acq(mem, newval, oldval) \
|
||||||
|
({ \
|
||||||
|
register int r2 asm ("r2"); \
|
||||||
|
register int *r4 asm ("r4") = (int*)(mem); \
|
||||||
|
register int r5 asm ("r5") = (int)(oldval); \
|
||||||
|
register int r6 asm ("r6") = (int)(newval); \
|
||||||
|
long kernel_cmpxchg = 0x1004; \
|
||||||
|
asm volatile ("callr %1\n" \
|
||||||
|
: "=r" (r2) \
|
||||||
|
: "r" (kernel_cmpxchg), "r" (r4), "r" (r5), "r" (r6) \
|
||||||
|
: "ra", "memory"); \
|
||||||
|
r2; \
|
||||||
|
})
|
||||||
|
|
||||||
|
#define atomic_full_barrier() ({ asm volatile ("sync"); })
|
||||||
|
|
||||||
|
#endif /* _NIOS2_BITS_ATOMIC_H */
|
42
sysdeps/unix/sysv/linux/nios2/bits/mman.h
Normal file
42
sysdeps/unix/sysv/linux/nios2/bits/mman.h
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
/* Definitions for POSIX memory map interface. Linux/Nios II version.
|
||||||
|
|
||||||
|
Copyright (C) 1997-2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _SYS_MMAN_H
|
||||||
|
# error "Never use <bits/mman.h> directly; include <sys/mman.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* The following definitions basically come from the kernel headers.
|
||||||
|
But the kernel header is not namespace clean. */
|
||||||
|
|
||||||
|
/* These are Linux-specific. */
|
||||||
|
#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 /* Lock the mapping. */
|
||||||
|
# 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 <bits/mman-linux.h>
|
67
sysdeps/unix/sysv/linux/nios2/c++-types.data
Normal file
67
sysdeps/unix/sysv/linux/nios2/c++-types.data
Normal file
@ -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
|
29
sysdeps/unix/sysv/linux/nios2/cacheflush.c
Normal file
29
sysdeps/unix/sysv/linux/nios2/cacheflush.c
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
/* cacheflush system call for Nios II Linux.
|
||||||
|
Copyright (C) 2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#include <sysdep.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
/* Flush cache(s). */
|
||||||
|
int
|
||||||
|
_flush_cache (char *addr, const int nbytes, const int op)
|
||||||
|
{
|
||||||
|
return INLINE_SYSCALL (cacheflush, 3, addr, nbytes, op);
|
||||||
|
}
|
||||||
|
weak_alias (_flush_cache, cacheflush)
|
107
sysdeps/unix/sysv/linux/nios2/clone.S
Normal file
107
sysdeps/unix/sysv/linux/nios2/clone.S
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
/* clone() implementation for Nios II.
|
||||||
|
Copyright (C) 2008-2015 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Andrew Jenner <andrew@codesourcery.com>, 2008.
|
||||||
|
|
||||||
|
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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
/* 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 <sysdep.h>
|
||||||
|
#define _ERRNO_H 1
|
||||||
|
#include <bits/errno.h>
|
||||||
|
#include <tcb-offsets.h>
|
||||||
|
|
||||||
|
#define CLONE_VM 0x00000100
|
||||||
|
#define CLONE_THREAD 0x00010000
|
||||||
|
|
||||||
|
/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg,
|
||||||
|
void *parent_tidptr, void *tls, void *child_tidptr) */
|
||||||
|
|
||||||
|
.text
|
||||||
|
ENTRY(__clone)
|
||||||
|
/* Sanity check arguments. */
|
||||||
|
movi r2, EINVAL
|
||||||
|
/* No NULL function pointers. */
|
||||||
|
beq r4, zero, SYSCALL_ERROR_LABEL
|
||||||
|
/* No NULL stack pointers. */
|
||||||
|
beq r5, zero, SYSCALL_ERROR_LABEL
|
||||||
|
|
||||||
|
subi r5, r5, 8 /* Reserve argument save space. */
|
||||||
|
stw r4, 4(r5) /* Save function pointer. */
|
||||||
|
stw r7, 0(r5) /* Save argument pointer. */
|
||||||
|
|
||||||
|
/* Load arguments. */
|
||||||
|
mov r4, r6
|
||||||
|
ldw r6, 0(sp)
|
||||||
|
ldw r7, 8(sp)
|
||||||
|
ldw r8, 4(sp)
|
||||||
|
|
||||||
|
/* Do the system call. */
|
||||||
|
movi r2, SYS_ify (clone)
|
||||||
|
|
||||||
|
/* End FDE now, because in the child the unwind info will be
|
||||||
|
wrong. */
|
||||||
|
cfi_endproc
|
||||||
|
trap
|
||||||
|
|
||||||
|
/* Check for errors. */
|
||||||
|
bne r7, zero, SYSCALL_ERROR_LABEL
|
||||||
|
/* See if we're on the newly created thread. */
|
||||||
|
beq r2, zero, thread_start
|
||||||
|
/* Successful return from the parent */
|
||||||
|
ret
|
||||||
|
|
||||||
|
thread_start:
|
||||||
|
cfi_startproc
|
||||||
|
cfi_undefined (ra)
|
||||||
|
|
||||||
|
/* We expect the argument registers to be preserved across system
|
||||||
|
calls and across task cloning, so flags should be in r4 here. */
|
||||||
|
andhi r2, r4, %hi(CLONE_THREAD)
|
||||||
|
bne r2, zero, 2f
|
||||||
|
andi r3, r4, CLONE_VM
|
||||||
|
movi r2, -1
|
||||||
|
bne r3, zero, 3f
|
||||||
|
DO_CALL (getpid, 0)
|
||||||
|
3:
|
||||||
|
stw r2, PID_OFFSET(r23)
|
||||||
|
stw r2, TID_OFFSET(r23)
|
||||||
|
2:
|
||||||
|
ldw r5, 4(sp) /* Function pointer. */
|
||||||
|
ldw r4, 0(sp) /* Argument pointer. */
|
||||||
|
addi sp, sp, 8
|
||||||
|
|
||||||
|
/* Call the user's function. */
|
||||||
|
callr r5
|
||||||
|
|
||||||
|
/* _exit with the result. */
|
||||||
|
mov r4, r2
|
||||||
|
#ifdef PIC
|
||||||
|
nextpc r22
|
||||||
|
1: movhi r8, %hiadj(_gp_got - 1b)
|
||||||
|
addi r8, r8, %lo(_gp_got - 1b)
|
||||||
|
add r22, r22, r8
|
||||||
|
ldw r8, %call(HIDDEN_JUMPTARGET(_exit))(r22)
|
||||||
|
jmp r8
|
||||||
|
#else
|
||||||
|
jmpi _exit
|
||||||
|
#endif
|
||||||
|
cfi_endproc
|
||||||
|
|
||||||
|
cfi_startproc
|
||||||
|
PSEUDO_END (__clone)
|
||||||
|
weak_alias (__clone, clone)
|
4
sysdeps/unix/sysv/linux/nios2/configure
vendored
Normal file
4
sysdeps/unix/sysv/linux/nios2/configure
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
# This file is generated from configure.in by Autoconf. DO NOT EDIT!
|
||||||
|
# Local configure fragment for sysdeps/unix/sysv/linux/nios2.
|
||||||
|
|
||||||
|
arch_minimum_kernel=3.19.0
|
4
sysdeps/unix/sysv/linux/nios2/configure.ac
Normal file
4
sysdeps/unix/sysv/linux/nios2/configure.ac
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
|
||||||
|
# Local configure fragment for sysdeps/unix/sysv/linux/nios2.
|
||||||
|
|
||||||
|
arch_minimum_kernel=3.19.0
|
66
sysdeps/unix/sysv/linux/nios2/getcontext.S
Normal file
66
sysdeps/unix/sysv/linux/nios2/getcontext.S
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
/* Save current context.
|
||||||
|
Copyright (C) 2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#include <sysdep.h>
|
||||||
|
#include "ucontext_i.h"
|
||||||
|
|
||||||
|
/* int getcontext (ucontext_t *ucp)
|
||||||
|
|
||||||
|
Returns 0 on success -1 and errno on failure.
|
||||||
|
*/
|
||||||
|
.text
|
||||||
|
ENTRY(__getcontext)
|
||||||
|
stw r16, (UCONTEXT_MCONTEXT + 16*4)(r4)
|
||||||
|
stw r17, (UCONTEXT_MCONTEXT + 17*4)(r4)
|
||||||
|
stw r18, (UCONTEXT_MCONTEXT + 18*4)(r4)
|
||||||
|
stw r19, (UCONTEXT_MCONTEXT + 19*4)(r4)
|
||||||
|
stw r20, (UCONTEXT_MCONTEXT + 20*4)(r4)
|
||||||
|
stw r21, (UCONTEXT_MCONTEXT + 21*4)(r4)
|
||||||
|
stw r22, (UCONTEXT_MCONTEXT + 22*4)(r4)
|
||||||
|
stw ra, (UCONTEXT_MCONTEXT + 24*4)(r4)
|
||||||
|
stw fp, (UCONTEXT_MCONTEXT + 25*4)(r4)
|
||||||
|
stw gp, (UCONTEXT_MCONTEXT + 26*4)(r4)
|
||||||
|
/* Store return address at place for EA. */
|
||||||
|
stw ra, (UCONTEXT_MCONTEXT + 28*4)(r4)
|
||||||
|
stw sp, (UCONTEXT_MCONTEXT + 29*4)(r4)
|
||||||
|
/* Store zero for return success. */
|
||||||
|
stw zero, (UCONTEXT_MCONTEXT + 2*4)(r4)
|
||||||
|
|
||||||
|
/* Store value "1" at uc_flags to recognize as getcontext created. */
|
||||||
|
movi r2, 1
|
||||||
|
stw r2, UCONTEXT_FLAGS(r4)
|
||||||
|
|
||||||
|
/* Store MCONTEXT_VERSION at first word of mcontext_t. */
|
||||||
|
movi r2, MCONTEXT_VERSION
|
||||||
|
stw r2, UCONTEXT_MCONTEXT(r4)
|
||||||
|
|
||||||
|
/* Get signal mask. */
|
||||||
|
/* rt_sigprocmask (SIG_BLOCK, NULL, &ucp->uc_sigmask, _NSIG8) */
|
||||||
|
movi r7, _NSIG8
|
||||||
|
addi r6, r4, UCONTEXT_SIGMASK
|
||||||
|
mov r5, zero
|
||||||
|
movi r4, SIG_BLOCK
|
||||||
|
movi r2, SYS_ify (rt_sigprocmask)
|
||||||
|
trap
|
||||||
|
bne r7, zero, SYSCALL_ERROR_LABEL
|
||||||
|
|
||||||
|
mov r2, zero
|
||||||
|
ret
|
||||||
|
|
||||||
|
PSEUDO_END(__getcontext)
|
||||||
|
weak_alias(__getcontext, getcontext)
|
31
sysdeps/unix/sysv/linux/nios2/kernel-features.h
Normal file
31
sysdeps/unix/sysv/linux/nios2/kernel-features.h
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
/* Set flags signalling availability of kernel features based on given
|
||||||
|
kernel version number.
|
||||||
|
|
||||||
|
Copyright (C) 2009-2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#include <linux/version.h>
|
||||||
|
|
||||||
|
/* The minimum supported kernel version for Nios II is 3.19.0,
|
||||||
|
guaranteeing many kernel features. */
|
||||||
|
|
||||||
|
#define __ASSUME_ACCEPT4_SYSCALL 1
|
||||||
|
#define __ASSUME_RECVMMSG_SYSCALL 1
|
||||||
|
#define __ASSUME_SENDMMSG_SYSCALL 1
|
||||||
|
|
||||||
|
#include_next <kernel-features.h>
|
26
sysdeps/unix/sysv/linux/nios2/kernel_rt_sigframe.h
Normal file
26
sysdeps/unix/sysv/linux/nios2/kernel_rt_sigframe.h
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
/* Linux kernel struct rt_sigframe declaration for Nios II.
|
||||||
|
Copyright (C) 2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
/* This structure must have the same shape as the Linux kernel
|
||||||
|
equivalent. */
|
||||||
|
|
||||||
|
struct kernel_rt_sigframe
|
||||||
|
{
|
||||||
|
siginfo_t info;
|
||||||
|
struct ucontext uc;
|
||||||
|
};
|
12
sysdeps/unix/sysv/linux/nios2/ld.abilist
Normal file
12
sysdeps/unix/sysv/linux/nios2/ld.abilist
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
GLIBC_2.21
|
||||||
|
GLIBC_2.21 A
|
||||||
|
__libc_memalign F
|
||||||
|
__libc_stack_end D 0x4
|
||||||
|
__stack_chk_guard D 0x4
|
||||||
|
__tls_get_addr F
|
||||||
|
_dl_mcount F
|
||||||
|
_r_debug D 0x14
|
||||||
|
calloc F
|
||||||
|
free F
|
||||||
|
malloc F
|
||||||
|
realloc F
|
3
sysdeps/unix/sysv/linux/nios2/libBrokenLocale.abilist
Normal file
3
sysdeps/unix/sysv/linux/nios2/libBrokenLocale.abilist
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
GLIBC_2.21
|
||||||
|
GLIBC_2.21 A
|
||||||
|
__ctype_get_mb_cur_max F
|
6
sysdeps/unix/sysv/linux/nios2/libanl.abilist
Normal file
6
sysdeps/unix/sysv/linux/nios2/libanl.abilist
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
GLIBC_2.21
|
||||||
|
GLIBC_2.21 A
|
||||||
|
gai_cancel F
|
||||||
|
gai_error F
|
||||||
|
gai_suspend F
|
||||||
|
getaddrinfo_a F
|
2123
sysdeps/unix/sysv/linux/nios2/libc.abilist
Normal file
2123
sysdeps/unix/sysv/linux/nios2/libc.abilist
Normal file
File diff suppressed because it is too large
Load Diff
9
sysdeps/unix/sysv/linux/nios2/libcrypt.abilist
Normal file
9
sysdeps/unix/sysv/linux/nios2/libcrypt.abilist
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
GLIBC_2.21
|
||||||
|
GLIBC_2.21 A
|
||||||
|
crypt F
|
||||||
|
crypt_r F
|
||||||
|
encrypt F
|
||||||
|
encrypt_r F
|
||||||
|
fcrypt F
|
||||||
|
setkey F
|
||||||
|
setkey_r F
|
11
sysdeps/unix/sysv/linux/nios2/libdl.abilist
Normal file
11
sysdeps/unix/sysv/linux/nios2/libdl.abilist
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
GLIBC_2.21
|
||||||
|
GLIBC_2.21 A
|
||||||
|
dladdr F
|
||||||
|
dladdr1 F
|
||||||
|
dlclose F
|
||||||
|
dlerror F
|
||||||
|
dlinfo F
|
||||||
|
dlmopen F
|
||||||
|
dlopen F
|
||||||
|
dlsym F
|
||||||
|
dlvsym F
|
370
sysdeps/unix/sysv/linux/nios2/libm.abilist
Normal file
370
sysdeps/unix/sysv/linux/nios2/libm.abilist
Normal file
@ -0,0 +1,370 @@
|
|||||||
|
GLIBC_2.21
|
||||||
|
GLIBC_2.21 A
|
||||||
|
_LIB_VERSION D 0x4
|
||||||
|
__acos_finite F
|
||||||
|
__acosf_finite F
|
||||||
|
__acosh_finite F
|
||||||
|
__acoshf_finite F
|
||||||
|
__asin_finite F
|
||||||
|
__asinf_finite F
|
||||||
|
__atan2_finite F
|
||||||
|
__atan2f_finite F
|
||||||
|
__atanh_finite F
|
||||||
|
__atanhf_finite F
|
||||||
|
__clog10 F
|
||||||
|
__clog10f F
|
||||||
|
__clog10l F
|
||||||
|
__cosh_finite F
|
||||||
|
__coshf_finite F
|
||||||
|
__exp10_finite F
|
||||||
|
__exp10f_finite F
|
||||||
|
__exp2_finite F
|
||||||
|
__exp2f_finite F
|
||||||
|
__exp_finite F
|
||||||
|
__expf_finite F
|
||||||
|
__finite F
|
||||||
|
__finitef F
|
||||||
|
__finitel F
|
||||||
|
__fmod_finite F
|
||||||
|
__fmodf_finite F
|
||||||
|
__fpclassify F
|
||||||
|
__fpclassifyf F
|
||||||
|
__gamma_r_finite F
|
||||||
|
__gammaf_r_finite F
|
||||||
|
__hypot_finite F
|
||||||
|
__hypotf_finite F
|
||||||
|
__issignaling F
|
||||||
|
__issignalingf F
|
||||||
|
__j0_finite F
|
||||||
|
__j0f_finite F
|
||||||
|
__j1_finite F
|
||||||
|
__j1f_finite F
|
||||||
|
__jn_finite F
|
||||||
|
__jnf_finite F
|
||||||
|
__lgamma_r_finite F
|
||||||
|
__lgammaf_r_finite F
|
||||||
|
__log10_finite F
|
||||||
|
__log10f_finite F
|
||||||
|
__log2_finite F
|
||||||
|
__log2f_finite F
|
||||||
|
__log_finite F
|
||||||
|
__logf_finite F
|
||||||
|
__pow_finite F
|
||||||
|
__powf_finite F
|
||||||
|
__remainder_finite F
|
||||||
|
__remainderf_finite F
|
||||||
|
__scalb_finite F
|
||||||
|
__scalbf_finite F
|
||||||
|
__signbit F
|
||||||
|
__signbitf F
|
||||||
|
__sinh_finite F
|
||||||
|
__sinhf_finite F
|
||||||
|
__sqrt_finite F
|
||||||
|
__sqrtf_finite F
|
||||||
|
__y0_finite F
|
||||||
|
__y0f_finite F
|
||||||
|
__y1_finite F
|
||||||
|
__y1f_finite F
|
||||||
|
__yn_finite F
|
||||||
|
__ynf_finite F
|
||||||
|
acos F
|
||||||
|
acosf F
|
||||||
|
acosh F
|
||||||
|
acoshf F
|
||||||
|
acoshl F
|
||||||
|
acosl F
|
||||||
|
asin F
|
||||||
|
asinf F
|
||||||
|
asinh F
|
||||||
|
asinhf F
|
||||||
|
asinhl F
|
||||||
|
asinl F
|
||||||
|
atan F
|
||||||
|
atan2 F
|
||||||
|
atan2f F
|
||||||
|
atan2l F
|
||||||
|
atanf F
|
||||||
|
atanh F
|
||||||
|
atanhf F
|
||||||
|
atanhl F
|
||||||
|
atanl F
|
||||||
|
cabs F
|
||||||
|
cabsf F
|
||||||
|
cabsl F
|
||||||
|
cacos F
|
||||||
|
cacosf F
|
||||||
|
cacosh F
|
||||||
|
cacoshf F
|
||||||
|
cacoshl F
|
||||||
|
cacosl F
|
||||||
|
carg F
|
||||||
|
cargf F
|
||||||
|
cargl F
|
||||||
|
casin F
|
||||||
|
casinf F
|
||||||
|
casinh F
|
||||||
|
casinhf F
|
||||||
|
casinhl F
|
||||||
|
casinl F
|
||||||
|
catan F
|
||||||
|
catanf F
|
||||||
|
catanh F
|
||||||
|
catanhf F
|
||||||
|
catanhl F
|
||||||
|
catanl F
|
||||||
|
cbrt F
|
||||||
|
cbrtf F
|
||||||
|
cbrtl F
|
||||||
|
ccos F
|
||||||
|
ccosf F
|
||||||
|
ccosh F
|
||||||
|
ccoshf F
|
||||||
|
ccoshl F
|
||||||
|
ccosl F
|
||||||
|
ceil F
|
||||||
|
ceilf F
|
||||||
|
ceill F
|
||||||
|
cexp F
|
||||||
|
cexpf F
|
||||||
|
cexpl F
|
||||||
|
cimag F
|
||||||
|
cimagf F
|
||||||
|
cimagl F
|
||||||
|
clog F
|
||||||
|
clog10 F
|
||||||
|
clog10f F
|
||||||
|
clog10l F
|
||||||
|
clogf F
|
||||||
|
clogl F
|
||||||
|
conj F
|
||||||
|
conjf F
|
||||||
|
conjl F
|
||||||
|
copysign F
|
||||||
|
copysignf F
|
||||||
|
copysignl F
|
||||||
|
cos F
|
||||||
|
cosf F
|
||||||
|
cosh F
|
||||||
|
coshf F
|
||||||
|
coshl F
|
||||||
|
cosl F
|
||||||
|
cpow F
|
||||||
|
cpowf F
|
||||||
|
cpowl F
|
||||||
|
cproj F
|
||||||
|
cprojf F
|
||||||
|
cprojl F
|
||||||
|
creal F
|
||||||
|
crealf F
|
||||||
|
creall F
|
||||||
|
csin F
|
||||||
|
csinf F
|
||||||
|
csinh F
|
||||||
|
csinhf F
|
||||||
|
csinhl F
|
||||||
|
csinl F
|
||||||
|
csqrt F
|
||||||
|
csqrtf F
|
||||||
|
csqrtl F
|
||||||
|
ctan F
|
||||||
|
ctanf F
|
||||||
|
ctanh F
|
||||||
|
ctanhf F
|
||||||
|
ctanhl F
|
||||||
|
ctanl F
|
||||||
|
drem F
|
||||||
|
dremf F
|
||||||
|
dreml F
|
||||||
|
erf F
|
||||||
|
erfc F
|
||||||
|
erfcf F
|
||||||
|
erfcl F
|
||||||
|
erff F
|
||||||
|
erfl F
|
||||||
|
exp F
|
||||||
|
exp10 F
|
||||||
|
exp10f F
|
||||||
|
exp10l F
|
||||||
|
exp2 F
|
||||||
|
exp2f F
|
||||||
|
exp2l F
|
||||||
|
expf F
|
||||||
|
expl F
|
||||||
|
expm1 F
|
||||||
|
expm1f F
|
||||||
|
expm1l F
|
||||||
|
fabs F
|
||||||
|
fabsf F
|
||||||
|
fabsl F
|
||||||
|
fdim F
|
||||||
|
fdimf F
|
||||||
|
fdiml F
|
||||||
|
feclearexcept F
|
||||||
|
fedisableexcept F
|
||||||
|
feenableexcept F
|
||||||
|
fegetenv F
|
||||||
|
fegetexcept F
|
||||||
|
fegetexceptflag F
|
||||||
|
fegetround F
|
||||||
|
feholdexcept F
|
||||||
|
feraiseexcept F
|
||||||
|
fesetenv F
|
||||||
|
fesetexceptflag F
|
||||||
|
fesetround F
|
||||||
|
fetestexcept F
|
||||||
|
feupdateenv F
|
||||||
|
finite F
|
||||||
|
finitef F
|
||||||
|
finitel F
|
||||||
|
floor F
|
||||||
|
floorf F
|
||||||
|
floorl F
|
||||||
|
fma F
|
||||||
|
fmaf F
|
||||||
|
fmal F
|
||||||
|
fmax F
|
||||||
|
fmaxf F
|
||||||
|
fmaxl F
|
||||||
|
fmin F
|
||||||
|
fminf F
|
||||||
|
fminl F
|
||||||
|
fmod F
|
||||||
|
fmodf F
|
||||||
|
fmodl F
|
||||||
|
frexp F
|
||||||
|
frexpf F
|
||||||
|
frexpl F
|
||||||
|
gamma F
|
||||||
|
gammaf F
|
||||||
|
gammal F
|
||||||
|
hypot F
|
||||||
|
hypotf F
|
||||||
|
hypotl F
|
||||||
|
ilogb F
|
||||||
|
ilogbf F
|
||||||
|
ilogbl F
|
||||||
|
j0 F
|
||||||
|
j0f F
|
||||||
|
j0l F
|
||||||
|
j1 F
|
||||||
|
j1f F
|
||||||
|
j1l F
|
||||||
|
jn F
|
||||||
|
jnf F
|
||||||
|
jnl F
|
||||||
|
ldexp F
|
||||||
|
ldexpf F
|
||||||
|
ldexpl F
|
||||||
|
lgamma F
|
||||||
|
lgamma_r F
|
||||||
|
lgammaf F
|
||||||
|
lgammaf_r F
|
||||||
|
lgammal F
|
||||||
|
lgammal_r F
|
||||||
|
llrint F
|
||||||
|
llrintf F
|
||||||
|
llrintl F
|
||||||
|
llround F
|
||||||
|
llroundf F
|
||||||
|
llroundl F
|
||||||
|
log F
|
||||||
|
log10 F
|
||||||
|
log10f F
|
||||||
|
log10l F
|
||||||
|
log1p F
|
||||||
|
log1pf F
|
||||||
|
log1pl F
|
||||||
|
log2 F
|
||||||
|
log2f F
|
||||||
|
log2l F
|
||||||
|
logb F
|
||||||
|
logbf F
|
||||||
|
logbl F
|
||||||
|
logf F
|
||||||
|
logl F
|
||||||
|
lrint F
|
||||||
|
lrintf F
|
||||||
|
lrintl F
|
||||||
|
lround F
|
||||||
|
lroundf F
|
||||||
|
lroundl F
|
||||||
|
matherr F
|
||||||
|
modf F
|
||||||
|
modff F
|
||||||
|
modfl F
|
||||||
|
nan F
|
||||||
|
nanf F
|
||||||
|
nanl F
|
||||||
|
nearbyint F
|
||||||
|
nearbyintf F
|
||||||
|
nearbyintl F
|
||||||
|
nextafter F
|
||||||
|
nextafterf F
|
||||||
|
nextafterl F
|
||||||
|
nexttoward F
|
||||||
|
nexttowardf F
|
||||||
|
nexttowardl F
|
||||||
|
pow F
|
||||||
|
pow10 F
|
||||||
|
pow10f F
|
||||||
|
pow10l F
|
||||||
|
powf F
|
||||||
|
powl F
|
||||||
|
remainder F
|
||||||
|
remainderf F
|
||||||
|
remainderl F
|
||||||
|
remquo F
|
||||||
|
remquof F
|
||||||
|
remquol F
|
||||||
|
rint F
|
||||||
|
rintf F
|
||||||
|
rintl F
|
||||||
|
round F
|
||||||
|
roundf F
|
||||||
|
roundl F
|
||||||
|
scalb F
|
||||||
|
scalbf F
|
||||||
|
scalbl F
|
||||||
|
scalbln F
|
||||||
|
scalblnf F
|
||||||
|
scalblnl F
|
||||||
|
scalbn F
|
||||||
|
scalbnf F
|
||||||
|
scalbnl F
|
||||||
|
signgam D 0x4
|
||||||
|
significand F
|
||||||
|
significandf F
|
||||||
|
significandl F
|
||||||
|
sin F
|
||||||
|
sincos F
|
||||||
|
sincosf F
|
||||||
|
sincosl F
|
||||||
|
sinf F
|
||||||
|
sinh F
|
||||||
|
sinhf F
|
||||||
|
sinhl F
|
||||||
|
sinl F
|
||||||
|
sqrt F
|
||||||
|
sqrtf F
|
||||||
|
sqrtl F
|
||||||
|
tan F
|
||||||
|
tanf F
|
||||||
|
tanh F
|
||||||
|
tanhf F
|
||||||
|
tanhl F
|
||||||
|
tanl F
|
||||||
|
tgamma F
|
||||||
|
tgammaf F
|
||||||
|
tgammal F
|
||||||
|
trunc F
|
||||||
|
truncf F
|
||||||
|
truncl F
|
||||||
|
y0 F
|
||||||
|
y0f F
|
||||||
|
y0l F
|
||||||
|
y1 F
|
||||||
|
y1f F
|
||||||
|
y1l F
|
||||||
|
yn F
|
||||||
|
ynf F
|
||||||
|
ynl F
|
123
sysdeps/unix/sysv/linux/nios2/libnsl.abilist
Normal file
123
sysdeps/unix/sysv/linux/nios2/libnsl.abilist
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
GLIBC_2.21
|
||||||
|
GLIBC_2.21 A
|
||||||
|
__free_fdresult F
|
||||||
|
__nis_default_access F
|
||||||
|
__nis_default_group F
|
||||||
|
__nis_default_owner F
|
||||||
|
__nis_default_ttl F
|
||||||
|
__nis_finddirectory F
|
||||||
|
__nis_hash F
|
||||||
|
__nisbind_connect F
|
||||||
|
__nisbind_create F
|
||||||
|
__nisbind_destroy F
|
||||||
|
__nisbind_next F
|
||||||
|
__yp_check F
|
||||||
|
nis_add F
|
||||||
|
nis_add_entry F
|
||||||
|
nis_addmember F
|
||||||
|
nis_checkpoint F
|
||||||
|
nis_clone_directory F
|
||||||
|
nis_clone_object F
|
||||||
|
nis_clone_result F
|
||||||
|
nis_creategroup F
|
||||||
|
nis_destroy_object F
|
||||||
|
nis_destroygroup F
|
||||||
|
nis_dir_cmp F
|
||||||
|
nis_domain_of F
|
||||||
|
nis_domain_of_r F
|
||||||
|
nis_first_entry F
|
||||||
|
nis_free_directory F
|
||||||
|
nis_free_object F
|
||||||
|
nis_free_request F
|
||||||
|
nis_freenames F
|
||||||
|
nis_freeresult F
|
||||||
|
nis_freeservlist F
|
||||||
|
nis_freetags F
|
||||||
|
nis_getnames F
|
||||||
|
nis_getservlist F
|
||||||
|
nis_ismember F
|
||||||
|
nis_leaf_of F
|
||||||
|
nis_leaf_of_r F
|
||||||
|
nis_lerror F
|
||||||
|
nis_list F
|
||||||
|
nis_local_directory F
|
||||||
|
nis_local_group F
|
||||||
|
nis_local_host F
|
||||||
|
nis_local_principal F
|
||||||
|
nis_lookup F
|
||||||
|
nis_mkdir F
|
||||||
|
nis_modify F
|
||||||
|
nis_modify_entry F
|
||||||
|
nis_name_of F
|
||||||
|
nis_name_of_r F
|
||||||
|
nis_next_entry F
|
||||||
|
nis_perror F
|
||||||
|
nis_ping F
|
||||||
|
nis_print_directory F
|
||||||
|
nis_print_entry F
|
||||||
|
nis_print_group F
|
||||||
|
nis_print_group_entry F
|
||||||
|
nis_print_link F
|
||||||
|
nis_print_object F
|
||||||
|
nis_print_result F
|
||||||
|
nis_print_rights F
|
||||||
|
nis_print_table F
|
||||||
|
nis_read_obj F
|
||||||
|
nis_remove F
|
||||||
|
nis_remove_entry F
|
||||||
|
nis_removemember F
|
||||||
|
nis_rmdir F
|
||||||
|
nis_servstate F
|
||||||
|
nis_sperrno F
|
||||||
|
nis_sperror F
|
||||||
|
nis_sperror_r F
|
||||||
|
nis_stats F
|
||||||
|
nis_verifygroup F
|
||||||
|
nis_write_obj F
|
||||||
|
readColdStartFile F
|
||||||
|
writeColdStartFile F
|
||||||
|
xdr_cback_data F
|
||||||
|
xdr_domainname F
|
||||||
|
xdr_keydat F
|
||||||
|
xdr_mapname F
|
||||||
|
xdr_obj_p F
|
||||||
|
xdr_peername F
|
||||||
|
xdr_valdat F
|
||||||
|
xdr_yp_buf F
|
||||||
|
xdr_ypall F
|
||||||
|
xdr_ypbind_binding F
|
||||||
|
xdr_ypbind_resp F
|
||||||
|
xdr_ypbind_resptype F
|
||||||
|
xdr_ypbind_setdom F
|
||||||
|
xdr_ypdelete_args F
|
||||||
|
xdr_ypmap_parms F
|
||||||
|
xdr_ypmaplist F
|
||||||
|
xdr_yppush_status F
|
||||||
|
xdr_yppushresp_xfr F
|
||||||
|
xdr_ypreq_key F
|
||||||
|
xdr_ypreq_nokey F
|
||||||
|
xdr_ypreq_xfr F
|
||||||
|
xdr_ypresp_all F
|
||||||
|
xdr_ypresp_key_val F
|
||||||
|
xdr_ypresp_maplist F
|
||||||
|
xdr_ypresp_master F
|
||||||
|
xdr_ypresp_order F
|
||||||
|
xdr_ypresp_val F
|
||||||
|
xdr_ypresp_xfr F
|
||||||
|
xdr_ypstat F
|
||||||
|
xdr_ypupdate_args F
|
||||||
|
xdr_ypxfrstat F
|
||||||
|
yp_all F
|
||||||
|
yp_bind F
|
||||||
|
yp_first F
|
||||||
|
yp_get_default_domain F
|
||||||
|
yp_maplist F
|
||||||
|
yp_master F
|
||||||
|
yp_match F
|
||||||
|
yp_next F
|
||||||
|
yp_order F
|
||||||
|
yp_unbind F
|
||||||
|
yp_update F
|
||||||
|
ypbinderr_string F
|
||||||
|
yperr_string F
|
||||||
|
ypprot_err F
|
224
sysdeps/unix/sysv/linux/nios2/libpthread.abilist
Normal file
224
sysdeps/unix/sysv/linux/nios2/libpthread.abilist
Normal file
@ -0,0 +1,224 @@
|
|||||||
|
GLIBC_2.21
|
||||||
|
GLIBC_2.21 A
|
||||||
|
_IO_flockfile F
|
||||||
|
_IO_ftrylockfile F
|
||||||
|
_IO_funlockfile F
|
||||||
|
__close F
|
||||||
|
__connect F
|
||||||
|
__errno_location F
|
||||||
|
__fcntl F
|
||||||
|
__fork F
|
||||||
|
__h_errno_location F
|
||||||
|
__libc_allocate_rtsig F
|
||||||
|
__libc_current_sigrtmax F
|
||||||
|
__libc_current_sigrtmin F
|
||||||
|
__lseek F
|
||||||
|
__nanosleep F
|
||||||
|
__open F
|
||||||
|
__open64 F
|
||||||
|
__pread64 F
|
||||||
|
__pthread_cleanup_routine F
|
||||||
|
__pthread_getspecific F
|
||||||
|
__pthread_key_create F
|
||||||
|
__pthread_mutex_destroy F
|
||||||
|
__pthread_mutex_init F
|
||||||
|
__pthread_mutex_lock F
|
||||||
|
__pthread_mutex_trylock F
|
||||||
|
__pthread_mutex_unlock F
|
||||||
|
__pthread_mutexattr_destroy F
|
||||||
|
__pthread_mutexattr_init F
|
||||||
|
__pthread_mutexattr_settype F
|
||||||
|
__pthread_once F
|
||||||
|
__pthread_register_cancel F
|
||||||
|
__pthread_register_cancel_defer F
|
||||||
|
__pthread_rwlock_destroy F
|
||||||
|
__pthread_rwlock_init F
|
||||||
|
__pthread_rwlock_rdlock F
|
||||||
|
__pthread_rwlock_tryrdlock F
|
||||||
|
__pthread_rwlock_trywrlock F
|
||||||
|
__pthread_rwlock_unlock F
|
||||||
|
__pthread_rwlock_wrlock F
|
||||||
|
__pthread_setspecific F
|
||||||
|
__pthread_unregister_cancel F
|
||||||
|
__pthread_unregister_cancel_restore F
|
||||||
|
__pthread_unwind_next F
|
||||||
|
__pwrite64 F
|
||||||
|
__read F
|
||||||
|
__res_state F
|
||||||
|
__send F
|
||||||
|
__sigaction F
|
||||||
|
__wait F
|
||||||
|
__write F
|
||||||
|
_pthread_cleanup_pop F
|
||||||
|
_pthread_cleanup_pop_restore F
|
||||||
|
_pthread_cleanup_push F
|
||||||
|
_pthread_cleanup_push_defer F
|
||||||
|
accept F
|
||||||
|
close F
|
||||||
|
connect F
|
||||||
|
fcntl F
|
||||||
|
flockfile F
|
||||||
|
fork F
|
||||||
|
fsync F
|
||||||
|
ftrylockfile F
|
||||||
|
funlockfile F
|
||||||
|
longjmp F
|
||||||
|
lseek F
|
||||||
|
lseek64 F
|
||||||
|
msync F
|
||||||
|
nanosleep F
|
||||||
|
open F
|
||||||
|
open64 F
|
||||||
|
pause F
|
||||||
|
pread F
|
||||||
|
pread64 F
|
||||||
|
pthread_attr_destroy F
|
||||||
|
pthread_attr_getaffinity_np F
|
||||||
|
pthread_attr_getdetachstate F
|
||||||
|
pthread_attr_getguardsize F
|
||||||
|
pthread_attr_getinheritsched F
|
||||||
|
pthread_attr_getschedparam F
|
||||||
|
pthread_attr_getschedpolicy F
|
||||||
|
pthread_attr_getscope F
|
||||||
|
pthread_attr_getstack F
|
||||||
|
pthread_attr_getstackaddr F
|
||||||
|
pthread_attr_getstacksize F
|
||||||
|
pthread_attr_init F
|
||||||
|
pthread_attr_setaffinity_np F
|
||||||
|
pthread_attr_setdetachstate F
|
||||||
|
pthread_attr_setguardsize F
|
||||||
|
pthread_attr_setinheritsched F
|
||||||
|
pthread_attr_setschedparam F
|
||||||
|
pthread_attr_setschedpolicy F
|
||||||
|
pthread_attr_setscope F
|
||||||
|
pthread_attr_setstack F
|
||||||
|
pthread_attr_setstackaddr F
|
||||||
|
pthread_attr_setstacksize F
|
||||||
|
pthread_barrier_destroy F
|
||||||
|
pthread_barrier_init F
|
||||||
|
pthread_barrier_wait F
|
||||||
|
pthread_barrierattr_destroy F
|
||||||
|
pthread_barrierattr_getpshared F
|
||||||
|
pthread_barrierattr_init F
|
||||||
|
pthread_barrierattr_setpshared F
|
||||||
|
pthread_cancel F
|
||||||
|
pthread_cond_broadcast F
|
||||||
|
pthread_cond_destroy F
|
||||||
|
pthread_cond_init F
|
||||||
|
pthread_cond_signal F
|
||||||
|
pthread_cond_timedwait F
|
||||||
|
pthread_cond_wait F
|
||||||
|
pthread_condattr_destroy F
|
||||||
|
pthread_condattr_getclock F
|
||||||
|
pthread_condattr_getpshared F
|
||||||
|
pthread_condattr_init F
|
||||||
|
pthread_condattr_setclock F
|
||||||
|
pthread_condattr_setpshared F
|
||||||
|
pthread_create F
|
||||||
|
pthread_detach F
|
||||||
|
pthread_equal F
|
||||||
|
pthread_exit F
|
||||||
|
pthread_getaffinity_np F
|
||||||
|
pthread_getattr_default_np F
|
||||||
|
pthread_getattr_np F
|
||||||
|
pthread_getconcurrency F
|
||||||
|
pthread_getcpuclockid F
|
||||||
|
pthread_getname_np F
|
||||||
|
pthread_getschedparam F
|
||||||
|
pthread_getspecific F
|
||||||
|
pthread_join F
|
||||||
|
pthread_key_create F
|
||||||
|
pthread_key_delete F
|
||||||
|
pthread_kill F
|
||||||
|
pthread_kill_other_threads_np F
|
||||||
|
pthread_mutex_consistent F
|
||||||
|
pthread_mutex_consistent_np F
|
||||||
|
pthread_mutex_destroy F
|
||||||
|
pthread_mutex_getprioceiling F
|
||||||
|
pthread_mutex_init F
|
||||||
|
pthread_mutex_lock F
|
||||||
|
pthread_mutex_setprioceiling F
|
||||||
|
pthread_mutex_timedlock F
|
||||||
|
pthread_mutex_trylock F
|
||||||
|
pthread_mutex_unlock F
|
||||||
|
pthread_mutexattr_destroy F
|
||||||
|
pthread_mutexattr_getkind_np F
|
||||||
|
pthread_mutexattr_getprioceiling F
|
||||||
|
pthread_mutexattr_getprotocol F
|
||||||
|
pthread_mutexattr_getpshared F
|
||||||
|
pthread_mutexattr_getrobust F
|
||||||
|
pthread_mutexattr_getrobust_np F
|
||||||
|
pthread_mutexattr_gettype F
|
||||||
|
pthread_mutexattr_init F
|
||||||
|
pthread_mutexattr_setkind_np F
|
||||||
|
pthread_mutexattr_setprioceiling F
|
||||||
|
pthread_mutexattr_setprotocol F
|
||||||
|
pthread_mutexattr_setpshared F
|
||||||
|
pthread_mutexattr_setrobust F
|
||||||
|
pthread_mutexattr_setrobust_np F
|
||||||
|
pthread_mutexattr_settype F
|
||||||
|
pthread_once F
|
||||||
|
pthread_rwlock_destroy F
|
||||||
|
pthread_rwlock_init F
|
||||||
|
pthread_rwlock_rdlock F
|
||||||
|
pthread_rwlock_timedrdlock F
|
||||||
|
pthread_rwlock_timedwrlock F
|
||||||
|
pthread_rwlock_tryrdlock F
|
||||||
|
pthread_rwlock_trywrlock F
|
||||||
|
pthread_rwlock_unlock F
|
||||||
|
pthread_rwlock_wrlock F
|
||||||
|
pthread_rwlockattr_destroy F
|
||||||
|
pthread_rwlockattr_getkind_np F
|
||||||
|
pthread_rwlockattr_getpshared F
|
||||||
|
pthread_rwlockattr_init F
|
||||||
|
pthread_rwlockattr_setkind_np F
|
||||||
|
pthread_rwlockattr_setpshared F
|
||||||
|
pthread_self F
|
||||||
|
pthread_setaffinity_np F
|
||||||
|
pthread_setattr_default_np F
|
||||||
|
pthread_setcancelstate F
|
||||||
|
pthread_setcanceltype F
|
||||||
|
pthread_setconcurrency F
|
||||||
|
pthread_setname_np F
|
||||||
|
pthread_setschedparam F
|
||||||
|
pthread_setschedprio F
|
||||||
|
pthread_setspecific F
|
||||||
|
pthread_sigmask F
|
||||||
|
pthread_sigqueue F
|
||||||
|
pthread_spin_destroy F
|
||||||
|
pthread_spin_init F
|
||||||
|
pthread_spin_lock F
|
||||||
|
pthread_spin_trylock F
|
||||||
|
pthread_spin_unlock F
|
||||||
|
pthread_testcancel F
|
||||||
|
pthread_timedjoin_np F
|
||||||
|
pthread_tryjoin_np F
|
||||||
|
pthread_yield F
|
||||||
|
pwrite F
|
||||||
|
pwrite64 F
|
||||||
|
raise F
|
||||||
|
read F
|
||||||
|
recv F
|
||||||
|
recvfrom F
|
||||||
|
recvmsg F
|
||||||
|
sem_close F
|
||||||
|
sem_destroy F
|
||||||
|
sem_getvalue F
|
||||||
|
sem_init F
|
||||||
|
sem_open F
|
||||||
|
sem_post F
|
||||||
|
sem_timedwait F
|
||||||
|
sem_trywait F
|
||||||
|
sem_unlink F
|
||||||
|
sem_wait F
|
||||||
|
send F
|
||||||
|
sendmsg F
|
||||||
|
sendto F
|
||||||
|
sigaction F
|
||||||
|
siglongjmp F
|
||||||
|
sigwait F
|
||||||
|
system F
|
||||||
|
tcdrain F
|
||||||
|
wait F
|
||||||
|
waitpid F
|
||||||
|
write F
|
93
sysdeps/unix/sysv/linux/nios2/libresolv.abilist
Normal file
93
sysdeps/unix/sysv/linux/nios2/libresolv.abilist
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
GLIBC_2.21
|
||||||
|
GLIBC_2.21 A
|
||||||
|
__b64_ntop F
|
||||||
|
__b64_pton F
|
||||||
|
__dn_comp F
|
||||||
|
__dn_count_labels F
|
||||||
|
__dn_expand F
|
||||||
|
__dn_skipname F
|
||||||
|
__fp_nquery F
|
||||||
|
__fp_query F
|
||||||
|
__fp_resstat F
|
||||||
|
__hostalias F
|
||||||
|
__loc_aton F
|
||||||
|
__loc_ntoa F
|
||||||
|
__p_cdname F
|
||||||
|
__p_cdnname F
|
||||||
|
__p_class F
|
||||||
|
__p_class_syms D 0x54
|
||||||
|
__p_fqname F
|
||||||
|
__p_fqnname F
|
||||||
|
__p_option F
|
||||||
|
__p_query F
|
||||||
|
__p_rcode F
|
||||||
|
__p_secstodate F
|
||||||
|
__p_time F
|
||||||
|
__p_type F
|
||||||
|
__p_type_syms D 0x228
|
||||||
|
__putlong F
|
||||||
|
__putshort F
|
||||||
|
__res_close F
|
||||||
|
__res_dnok F
|
||||||
|
__res_hnok F
|
||||||
|
__res_hostalias F
|
||||||
|
__res_isourserver F
|
||||||
|
__res_mailok F
|
||||||
|
__res_mkquery F
|
||||||
|
__res_nameinquery F
|
||||||
|
__res_nmkquery F
|
||||||
|
__res_nquery F
|
||||||
|
__res_nquerydomain F
|
||||||
|
__res_nsearch F
|
||||||
|
__res_nsend F
|
||||||
|
__res_ownok F
|
||||||
|
__res_queriesmatch F
|
||||||
|
__res_query F
|
||||||
|
__res_querydomain F
|
||||||
|
__res_search F
|
||||||
|
__res_send F
|
||||||
|
__sym_ntop F
|
||||||
|
__sym_ntos F
|
||||||
|
__sym_ston F
|
||||||
|
_gethtbyaddr F
|
||||||
|
_gethtbyname F
|
||||||
|
_gethtbyname2 F
|
||||||
|
_gethtent F
|
||||||
|
_getlong F
|
||||||
|
_getshort F
|
||||||
|
_res_opcodes D 0x40
|
||||||
|
_sethtent F
|
||||||
|
inet_net_ntop F
|
||||||
|
inet_net_pton F
|
||||||
|
inet_neta F
|
||||||
|
ns_datetosecs F
|
||||||
|
ns_format_ttl F
|
||||||
|
ns_get16 F
|
||||||
|
ns_get32 F
|
||||||
|
ns_initparse F
|
||||||
|
ns_makecanon F
|
||||||
|
ns_msg_getflag F
|
||||||
|
ns_name_compress F
|
||||||
|
ns_name_ntol F
|
||||||
|
ns_name_ntop F
|
||||||
|
ns_name_pack F
|
||||||
|
ns_name_pton F
|
||||||
|
ns_name_rollback F
|
||||||
|
ns_name_skip F
|
||||||
|
ns_name_uncompress F
|
||||||
|
ns_name_unpack F
|
||||||
|
ns_parse_ttl F
|
||||||
|
ns_parserr F
|
||||||
|
ns_put16 F
|
||||||
|
ns_put32 F
|
||||||
|
ns_samedomain F
|
||||||
|
ns_samename F
|
||||||
|
ns_skiprr F
|
||||||
|
ns_sprintrr F
|
||||||
|
ns_sprintrrf F
|
||||||
|
ns_subdomain F
|
||||||
|
res_gethostbyaddr F
|
||||||
|
res_gethostbyname F
|
||||||
|
res_gethostbyname2 F
|
||||||
|
res_send_setqhook F
|
||||||
|
res_send_setrhook F
|
37
sysdeps/unix/sysv/linux/nios2/librt.abilist
Normal file
37
sysdeps/unix/sysv/linux/nios2/librt.abilist
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
GLIBC_2.21
|
||||||
|
GLIBC_2.21 A
|
||||||
|
__mq_open_2 F
|
||||||
|
aio_cancel F
|
||||||
|
aio_cancel64 F
|
||||||
|
aio_error F
|
||||||
|
aio_error64 F
|
||||||
|
aio_fsync F
|
||||||
|
aio_fsync64 F
|
||||||
|
aio_init F
|
||||||
|
aio_read F
|
||||||
|
aio_read64 F
|
||||||
|
aio_return F
|
||||||
|
aio_return64 F
|
||||||
|
aio_suspend F
|
||||||
|
aio_suspend64 F
|
||||||
|
aio_write F
|
||||||
|
aio_write64 F
|
||||||
|
lio_listio F
|
||||||
|
lio_listio64 F
|
||||||
|
mq_close F
|
||||||
|
mq_getattr F
|
||||||
|
mq_notify F
|
||||||
|
mq_open F
|
||||||
|
mq_receive F
|
||||||
|
mq_send F
|
||||||
|
mq_setattr F
|
||||||
|
mq_timedreceive F
|
||||||
|
mq_timedsend F
|
||||||
|
mq_unlink F
|
||||||
|
shm_open F
|
||||||
|
shm_unlink F
|
||||||
|
timer_create F
|
||||||
|
timer_delete F
|
||||||
|
timer_getoverrun F
|
||||||
|
timer_gettime F
|
||||||
|
timer_settime F
|
42
sysdeps/unix/sysv/linux/nios2/libthread_db.abilist
Normal file
42
sysdeps/unix/sysv/linux/nios2/libthread_db.abilist
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
GLIBC_2.21
|
||||||
|
GLIBC_2.21 A
|
||||||
|
td_init F
|
||||||
|
td_log F
|
||||||
|
td_symbol_list F
|
||||||
|
td_ta_clear_event F
|
||||||
|
td_ta_delete F
|
||||||
|
td_ta_enable_stats F
|
||||||
|
td_ta_event_addr F
|
||||||
|
td_ta_event_getmsg F
|
||||||
|
td_ta_get_nthreads F
|
||||||
|
td_ta_get_ph F
|
||||||
|
td_ta_get_stats F
|
||||||
|
td_ta_map_id2thr F
|
||||||
|
td_ta_map_lwp2thr F
|
||||||
|
td_ta_new F
|
||||||
|
td_ta_reset_stats F
|
||||||
|
td_ta_set_event F
|
||||||
|
td_ta_setconcurrency F
|
||||||
|
td_ta_thr_iter F
|
||||||
|
td_ta_tsd_iter F
|
||||||
|
td_thr_clear_event F
|
||||||
|
td_thr_dbresume F
|
||||||
|
td_thr_dbsuspend F
|
||||||
|
td_thr_event_enable F
|
||||||
|
td_thr_event_getmsg F
|
||||||
|
td_thr_get_info F
|
||||||
|
td_thr_getfpregs F
|
||||||
|
td_thr_getgregs F
|
||||||
|
td_thr_getxregs F
|
||||||
|
td_thr_getxregsize F
|
||||||
|
td_thr_set_event F
|
||||||
|
td_thr_setfpregs F
|
||||||
|
td_thr_setgregs F
|
||||||
|
td_thr_setprio F
|
||||||
|
td_thr_setsigpending F
|
||||||
|
td_thr_setxregs F
|
||||||
|
td_thr_sigsetmask F
|
||||||
|
td_thr_tls_get_addr F
|
||||||
|
td_thr_tlsbase F
|
||||||
|
td_thr_tsd F
|
||||||
|
td_thr_validate F
|
8
sysdeps/unix/sysv/linux/nios2/libutil.abilist
Normal file
8
sysdeps/unix/sysv/linux/nios2/libutil.abilist
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
GLIBC_2.21
|
||||||
|
GLIBC_2.21 A
|
||||||
|
forkpty F
|
||||||
|
login F
|
||||||
|
login_tty F
|
||||||
|
logout F
|
||||||
|
logwtmp F
|
||||||
|
openpty F
|
35
sysdeps/unix/sysv/linux/nios2/localplt.data
Normal file
35
sysdeps/unix/sysv/linux/nios2/localplt.data
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
libc.so: realloc
|
||||||
|
libc.so: __eqsf2
|
||||||
|
libc.so: __floatsisf
|
||||||
|
libc.so: __ltdf2
|
||||||
|
libc.so: __gedf2
|
||||||
|
libc.so: malloc
|
||||||
|
libc.so: __nesf2
|
||||||
|
libc.so: memalign
|
||||||
|
libc.so: __mulsf3
|
||||||
|
libc.so: __floatunsisf
|
||||||
|
libc.so: __addsf3
|
||||||
|
libc.so: __fixsfsi
|
||||||
|
libc.so: __subsf3
|
||||||
|
libc.so: calloc
|
||||||
|
libc.so: __muldf3
|
||||||
|
libc.so: __signbit
|
||||||
|
libc.so: free
|
||||||
|
libc.so: __subdf3
|
||||||
|
libc.so: __adddf3
|
||||||
|
libc.so: __divdf3
|
||||||
|
libc.so: __floatsidf
|
||||||
|
libc.so: __divsf3
|
||||||
|
libc.so: __nedf2
|
||||||
|
libc.so: __eqdf2
|
||||||
|
libm.so: __signbitf
|
||||||
|
libm.so: __signbit
|
||||||
|
libm.so: matherr
|
||||||
|
# The dynamic loader uses __libc_memalign internally to allocate aligned
|
||||||
|
# TLS storage. The other malloc family of functions are expected to allow
|
||||||
|
# user symbol interposition.
|
||||||
|
ld.so: __libc_memalign
|
||||||
|
ld.so: malloc
|
||||||
|
ld.so: calloc
|
||||||
|
ld.so: realloc
|
||||||
|
ld.so: free
|
79
sysdeps/unix/sysv/linux/nios2/makecontext.c
Normal file
79
sysdeps/unix/sysv/linux/nios2/makecontext.c
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
/* Create new context.
|
||||||
|
Copyright (C) 2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#include <sysdep.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <ucontext.h>
|
||||||
|
|
||||||
|
/* makecontext sets up a stack and the registers for the
|
||||||
|
user context. The stack looks like this:
|
||||||
|
|
||||||
|
+-----------------------+
|
||||||
|
| padding as required |
|
||||||
|
+-----------------------+
|
||||||
|
sp -> | parameters 5 to n |
|
||||||
|
+-----------------------+
|
||||||
|
|
||||||
|
The registers are set up like this:
|
||||||
|
r4--r7 : parameter 1 to 4
|
||||||
|
r16 : uc_link
|
||||||
|
sp : stack pointer.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void
|
||||||
|
__makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...)
|
||||||
|
{
|
||||||
|
extern void __startcontext (void);
|
||||||
|
unsigned long *sp;
|
||||||
|
va_list ap;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
sp = (unsigned long *)
|
||||||
|
((uintptr_t) ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size);
|
||||||
|
|
||||||
|
/* Allocate stack arguments. */
|
||||||
|
sp -= argc < 4 ? 0 : argc - 4;
|
||||||
|
|
||||||
|
/* Keep the stack aligned. */
|
||||||
|
sp = (unsigned long*) (((uintptr_t) sp) & -4L);
|
||||||
|
|
||||||
|
/* Init version field. */
|
||||||
|
ucp->uc_mcontext.version = 2;
|
||||||
|
/* Keep uc_link in r16. */
|
||||||
|
ucp->uc_mcontext.regs[15] = (uintptr_t) ucp->uc_link;
|
||||||
|
/* Return address points to __startcontext(). */
|
||||||
|
ucp->uc_mcontext.regs[23] = (uintptr_t) &__startcontext;
|
||||||
|
/* Frame pointer is null. */
|
||||||
|
ucp->uc_mcontext.regs[24] = (uintptr_t) 0;
|
||||||
|
/* Restart in user-space starting at 'func'. */
|
||||||
|
ucp->uc_mcontext.regs[27] = (uintptr_t) func;
|
||||||
|
/* Set stack pointer. */
|
||||||
|
ucp->uc_mcontext.regs[28] = (uintptr_t) sp;
|
||||||
|
|
||||||
|
va_start (ap, argc);
|
||||||
|
for (i = 0; i < argc; ++i)
|
||||||
|
if (i < 4)
|
||||||
|
ucp->uc_mcontext.regs[i + 3] = va_arg (ap, unsigned long);
|
||||||
|
else
|
||||||
|
sp[i - 4] = va_arg (ap, unsigned long);
|
||||||
|
|
||||||
|
va_end (ap);
|
||||||
|
}
|
||||||
|
|
||||||
|
weak_alias (__makecontext, makecontext)
|
2
sysdeps/unix/sysv/linux/nios2/profil-counter.h
Normal file
2
sysdeps/unix/sysv/linux/nios2/profil-counter.h
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
/* We can use the ix86 version. */
|
||||||
|
#include <sysdeps/unix/sysv/linux/i386/profil-counter.h>
|
103
sysdeps/unix/sysv/linux/nios2/setcontext.S
Normal file
103
sysdeps/unix/sysv/linux/nios2/setcontext.S
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
/* Set current context.
|
||||||
|
Copyright (C) 2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#include <sysdep.h>
|
||||||
|
#include "ucontext_i.h"
|
||||||
|
|
||||||
|
/* int setcontext (const ucontext_t *ucp) */
|
||||||
|
.text
|
||||||
|
ENTRY(__setcontext)
|
||||||
|
ldw r5, UCONTEXT_FLAGS(r4)
|
||||||
|
movi r6, 1
|
||||||
|
bne r5, r6, .Lsigreturn
|
||||||
|
|
||||||
|
mov r10, r4
|
||||||
|
|
||||||
|
/* Restore signal mask. */
|
||||||
|
/* rt_sigprocmask (SIG_SETMASK, NULL, &ucp->uc_sigmask, _NSIG8) */
|
||||||
|
movi r7, _NSIG8
|
||||||
|
addi r6, r4, UCONTEXT_SIGMASK
|
||||||
|
mov r5, zero
|
||||||
|
movi r4, SIG_SETMASK
|
||||||
|
movi r2, SYS_ify (rt_sigprocmask)
|
||||||
|
trap
|
||||||
|
bne r7, zero, SYSCALL_ERROR_LABEL
|
||||||
|
|
||||||
|
/* Restore argument registers, for the makecontext() case. */
|
||||||
|
ldw r4, (UCONTEXT_MCONTEXT + 4*4)(r10)
|
||||||
|
ldw r5, (UCONTEXT_MCONTEXT + 5*4)(r10)
|
||||||
|
ldw r6, (UCONTEXT_MCONTEXT + 6*4)(r10)
|
||||||
|
ldw r7, (UCONTEXT_MCONTEXT + 7*4)(r10)
|
||||||
|
|
||||||
|
ldw r16, (UCONTEXT_MCONTEXT + 16*4)(r10)
|
||||||
|
ldw r17, (UCONTEXT_MCONTEXT + 17*4)(r10)
|
||||||
|
ldw r18, (UCONTEXT_MCONTEXT + 18*4)(r10)
|
||||||
|
ldw r19, (UCONTEXT_MCONTEXT + 19*4)(r10)
|
||||||
|
ldw r20, (UCONTEXT_MCONTEXT + 20*4)(r10)
|
||||||
|
ldw r21, (UCONTEXT_MCONTEXT + 21*4)(r10)
|
||||||
|
ldw r22, (UCONTEXT_MCONTEXT + 22*4)(r10)
|
||||||
|
ldw ra, (UCONTEXT_MCONTEXT + 24*4)(r10)
|
||||||
|
ldw fp, (UCONTEXT_MCONTEXT + 25*4)(r10)
|
||||||
|
ldw gp, (UCONTEXT_MCONTEXT + 26*4)(r10)
|
||||||
|
/* Load address to continue execution. */
|
||||||
|
ldw r3, (UCONTEXT_MCONTEXT + 28*4)(r10)
|
||||||
|
ldw sp, (UCONTEXT_MCONTEXT + 29*4)(r10)
|
||||||
|
|
||||||
|
mov r2, zero
|
||||||
|
jmp r3
|
||||||
|
|
||||||
|
.Lsigreturn:
|
||||||
|
addi sp, sp, -RT_SIGFRAME_SIZE
|
||||||
|
cfi_adjust_cfa_offset (RT_SIGFRAME_SIZE)
|
||||||
|
|
||||||
|
addi r2, sp, RT_SIGFRAME_UCONTEXT
|
||||||
|
movi r3, UCONTEXT_SIZE-4
|
||||||
|
1:
|
||||||
|
add r6, r4, r3
|
||||||
|
ldw r5, 0(r6)
|
||||||
|
add r7, r2, r3
|
||||||
|
addi r3, r3, -4
|
||||||
|
stw r5, 0(r7)
|
||||||
|
bgt r3, zero, 1b
|
||||||
|
|
||||||
|
movi r2, SYS_ify (rt_sigreturn)
|
||||||
|
trap
|
||||||
|
|
||||||
|
addi sp, sp, RT_SIGFRAME_SIZE
|
||||||
|
cfi_adjust_cfa_offset (-RT_SIGFRAME_SIZE)
|
||||||
|
br SYSCALL_ERROR_LABEL
|
||||||
|
|
||||||
|
PSEUDO_END (__setcontext)
|
||||||
|
weak_alias (__setcontext, setcontext)
|
||||||
|
|
||||||
|
ENTRY(__startcontext)
|
||||||
|
mov r4, r16
|
||||||
|
bne r4, zero, __setcontext
|
||||||
|
|
||||||
|
/* If uc_link == zero, call _exit. */
|
||||||
|
#ifdef PIC
|
||||||
|
nextpc r22
|
||||||
|
1: movhi r8, %hiadj(_gp_got - 1b)
|
||||||
|
addi r8, r8, %lo(_gp_got - 1b)
|
||||||
|
add r22, r22, r8
|
||||||
|
ldw r8, %call(HIDDEN_JUMPTARGET(_exit))(r22)
|
||||||
|
jmp r8
|
||||||
|
#else
|
||||||
|
jmpi _exit
|
||||||
|
#endif
|
||||||
|
END(__startcontext)
|
2
sysdeps/unix/sysv/linux/nios2/shlib-versions
Normal file
2
sysdeps/unix/sysv/linux/nios2/shlib-versions
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
DEFAULT GLIBC_2.21
|
||||||
|
ld=ld-linux-nios2.so.1
|
35
sysdeps/unix/sysv/linux/nios2/sigcontextinfo.h
Normal file
35
sysdeps/unix/sysv/linux/nios2/sigcontextinfo.h
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
/* Nios II definitions for signal handling calling conventions.
|
||||||
|
Copyright (C) 2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#include <sys/ucontext.h>
|
||||||
|
#include "kernel-features.h"
|
||||||
|
|
||||||
|
#define SIGCONTEXT siginfo_t *_si, struct ucontext *
|
||||||
|
#define GET_PC(ctx) ((void *) (ctx)->uc_mcontext.regs[27])
|
||||||
|
|
||||||
|
/* 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); \
|
||||||
|
})
|
125
sysdeps/unix/sysv/linux/nios2/swapcontext.S
Normal file
125
sysdeps/unix/sysv/linux/nios2/swapcontext.S
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
/* Modify saved context.
|
||||||
|
Copyright (C) 2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#include <sysdep.h>
|
||||||
|
#include "ucontext_i.h"
|
||||||
|
|
||||||
|
/* int swapcontext (ucontext_t *oucp, const ucontext_t *ucp) */
|
||||||
|
.text
|
||||||
|
ENTRY(__swapcontext)
|
||||||
|
|
||||||
|
/* Same as getcontext(). */
|
||||||
|
stw r16, (UCONTEXT_MCONTEXT + 16*4)(r4)
|
||||||
|
stw r17, (UCONTEXT_MCONTEXT + 17*4)(r4)
|
||||||
|
stw r18, (UCONTEXT_MCONTEXT + 18*4)(r4)
|
||||||
|
stw r19, (UCONTEXT_MCONTEXT + 19*4)(r4)
|
||||||
|
stw r20, (UCONTEXT_MCONTEXT + 20*4)(r4)
|
||||||
|
stw r21, (UCONTEXT_MCONTEXT + 21*4)(r4)
|
||||||
|
stw r22, (UCONTEXT_MCONTEXT + 22*4)(r4)
|
||||||
|
stw ra, (UCONTEXT_MCONTEXT + 24*4)(r4)
|
||||||
|
stw fp, (UCONTEXT_MCONTEXT + 25*4)(r4)
|
||||||
|
stw gp, (UCONTEXT_MCONTEXT + 26*4)(r4)
|
||||||
|
/* Store return address at place for EA. */
|
||||||
|
stw ra, (UCONTEXT_MCONTEXT + 28*4)(r4)
|
||||||
|
stw sp, (UCONTEXT_MCONTEXT + 29*4)(r4)
|
||||||
|
/* Store zero for return success. */
|
||||||
|
stw zero, (UCONTEXT_MCONTEXT + 2*4)(r4)
|
||||||
|
|
||||||
|
/* Store value "1" at uc_flags to recognize as getcontext created. */
|
||||||
|
movi r2, 1
|
||||||
|
stw r2, UCONTEXT_FLAGS(r4)
|
||||||
|
|
||||||
|
/* Store MCONTEXT_VERSION at first word of mcontext_t. */
|
||||||
|
movi r2, MCONTEXT_VERSION
|
||||||
|
stw r2, UCONTEXT_MCONTEXT(r4)
|
||||||
|
|
||||||
|
/* Save ucp to non-argument syscall preserved register. */
|
||||||
|
mov r10, r5
|
||||||
|
|
||||||
|
/* Get signal mask. */
|
||||||
|
/* rt_sigprocmask (SIG_BLOCK, NULL, &ucp->uc_sigmask, _NSIG8) */
|
||||||
|
movi r7, _NSIG8
|
||||||
|
addi r6, r4, UCONTEXT_SIGMASK
|
||||||
|
mov r5, zero
|
||||||
|
movi r4, SIG_BLOCK
|
||||||
|
movi r2, SYS_ify (rt_sigprocmask)
|
||||||
|
trap
|
||||||
|
bne r7, zero, SYSCALL_ERROR_LABEL
|
||||||
|
|
||||||
|
|
||||||
|
/* Same as setcontext(). */
|
||||||
|
ldw r5, UCONTEXT_FLAGS(r10)
|
||||||
|
movi r6, 1
|
||||||
|
bne r5, r6, .Lsigreturn
|
||||||
|
|
||||||
|
/* Restore signal mask. */
|
||||||
|
/* rt_sigprocmask (SIG_SETMASK, NULL, &ucp->uc_sigmask, _NSIG8) */
|
||||||
|
movi r7, _NSIG8
|
||||||
|
addi r6, r10, UCONTEXT_SIGMASK
|
||||||
|
mov r5, zero
|
||||||
|
movi r4, SIG_SETMASK
|
||||||
|
movi r2, SYS_ify (rt_sigprocmask)
|
||||||
|
trap
|
||||||
|
bne r7, zero, SYSCALL_ERROR_LABEL
|
||||||
|
|
||||||
|
/* Restore argument registers, for the makecontext() case. */
|
||||||
|
ldw r4, (UCONTEXT_MCONTEXT + 4*4)(r10)
|
||||||
|
ldw r5, (UCONTEXT_MCONTEXT + 5*4)(r10)
|
||||||
|
ldw r6, (UCONTEXT_MCONTEXT + 6*4)(r10)
|
||||||
|
ldw r7, (UCONTEXT_MCONTEXT + 7*4)(r10)
|
||||||
|
|
||||||
|
ldw r16, (UCONTEXT_MCONTEXT + 16*4)(r10)
|
||||||
|
ldw r17, (UCONTEXT_MCONTEXT + 17*4)(r10)
|
||||||
|
ldw r18, (UCONTEXT_MCONTEXT + 18*4)(r10)
|
||||||
|
ldw r19, (UCONTEXT_MCONTEXT + 19*4)(r10)
|
||||||
|
ldw r20, (UCONTEXT_MCONTEXT + 20*4)(r10)
|
||||||
|
ldw r21, (UCONTEXT_MCONTEXT + 21*4)(r10)
|
||||||
|
ldw r22, (UCONTEXT_MCONTEXT + 22*4)(r10)
|
||||||
|
ldw ra, (UCONTEXT_MCONTEXT + 24*4)(r10)
|
||||||
|
ldw fp, (UCONTEXT_MCONTEXT + 25*4)(r10)
|
||||||
|
ldw gp, (UCONTEXT_MCONTEXT + 26*4)(r10)
|
||||||
|
/* Load address to continue execution. */
|
||||||
|
ldw r3, (UCONTEXT_MCONTEXT + 28*4)(r10)
|
||||||
|
ldw sp, (UCONTEXT_MCONTEXT + 29*4)(r10)
|
||||||
|
|
||||||
|
mov r2, zero
|
||||||
|
jmp r3
|
||||||
|
|
||||||
|
.Lsigreturn:
|
||||||
|
addi sp, sp, -RT_SIGFRAME_SIZE
|
||||||
|
cfi_adjust_cfa_offset (RT_SIGFRAME_SIZE)
|
||||||
|
|
||||||
|
addi r2, sp, RT_SIGFRAME_UCONTEXT
|
||||||
|
movi r3, UCONTEXT_SIZE-4
|
||||||
|
1:
|
||||||
|
add r6, r4, r3
|
||||||
|
ldw r5, 0(r6)
|
||||||
|
add r7, r2, r3
|
||||||
|
addi r3, r3, -4
|
||||||
|
stw r5, 0(r7)
|
||||||
|
bgt r3, zero, 1b
|
||||||
|
|
||||||
|
movi r2, SYS_ify (rt_sigreturn)
|
||||||
|
trap
|
||||||
|
|
||||||
|
addi sp, sp, RT_SIGFRAME_SIZE
|
||||||
|
cfi_adjust_cfa_offset (-RT_SIGFRAME_SIZE)
|
||||||
|
br SYSCALL_ERROR_LABEL
|
||||||
|
|
||||||
|
PSEUDO_END (__swapcontext)
|
||||||
|
weak_alias (__swapcontext, swapcontext)
|
36
sysdeps/unix/sysv/linux/nios2/sys/cachectl.h
Normal file
36
sysdeps/unix/sysv/linux/nios2/sys/cachectl.h
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
/* cacheflush - flush contents of instruction and/or data cache.
|
||||||
|
Copyright (C) 2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _SYS_CACHECTL_H
|
||||||
|
#define _SYS_CACHECTL_H 1
|
||||||
|
|
||||||
|
#include <features.h>
|
||||||
|
|
||||||
|
/* Get the kernel definition for the op bits. */
|
||||||
|
#include <asm/cachectl.h>
|
||||||
|
|
||||||
|
__BEGIN_DECLS
|
||||||
|
|
||||||
|
#ifdef __USE_MISC
|
||||||
|
extern int cacheflush (void *__addr, const int __nbytes, const int __op) __THROW;
|
||||||
|
#endif
|
||||||
|
extern int _flush_cache (char *__addr, const int __nbytes, const int __op) __THROW;
|
||||||
|
|
||||||
|
__END_DECLS
|
||||||
|
|
||||||
|
#endif /* sys/cachectl.h */
|
123
sysdeps/unix/sysv/linux/nios2/sys/procfs.h
Normal file
123
sysdeps/unix/sysv/linux/nios2/sys/procfs.h
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
/* Core image file related definitions, Nios II version.
|
||||||
|
Copyright (C) 1996-2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#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 <features.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/user.h>
|
||||||
|
|
||||||
|
__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_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;
|
||||||
|
/* Lots missing */
|
||||||
|
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 <proc_service.h> 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 */
|
48
sysdeps/unix/sysv/linux/nios2/sys/ucontext.h
Normal file
48
sysdeps/unix/sysv/linux/nios2/sys/ucontext.h
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
/* struct ucontext definition, Nios II version.
|
||||||
|
Copyright (C) 2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
/* System V/Nios II ABI compliant context switching support. */
|
||||||
|
|
||||||
|
#ifndef _SYS_UCONTEXT_H
|
||||||
|
#define _SYS_UCONTEXT_H 1
|
||||||
|
|
||||||
|
#include <features.h>
|
||||||
|
#include <signal.h>
|
||||||
|
|
||||||
|
/* These definitions must be in sync with the kernel. */
|
||||||
|
|
||||||
|
#define MCONTEXT_VERSION 2
|
||||||
|
|
||||||
|
/* Context to describe whole processor state. */
|
||||||
|
typedef struct mcontext
|
||||||
|
{
|
||||||
|
int version;
|
||||||
|
unsigned long regs[32];
|
||||||
|
} mcontext_t;
|
||||||
|
|
||||||
|
/* Userlevel context. */
|
||||||
|
typedef struct ucontext
|
||||||
|
{
|
||||||
|
unsigned long uc_flags;
|
||||||
|
struct ucontext *uc_link;
|
||||||
|
stack_t uc_stack;
|
||||||
|
mcontext_t uc_mcontext;
|
||||||
|
__sigset_t uc_sigmask;
|
||||||
|
} ucontext_t;
|
||||||
|
|
||||||
|
#endif /* sys/ucontext.h */
|
58
sysdeps/unix/sysv/linux/nios2/sys/user.h
Normal file
58
sysdeps/unix/sysv/linux/nios2/sys/user.h
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
/* ptrace register data format definitions.
|
||||||
|
Copyright (C) 1998-2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _SYS_USER_H
|
||||||
|
#define _SYS_USER_H 1
|
||||||
|
|
||||||
|
/* 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. */
|
||||||
|
|
||||||
|
struct user_fpregs
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
|
struct user_regs
|
||||||
|
{
|
||||||
|
unsigned long int uregs[49];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct user
|
||||||
|
{
|
||||||
|
struct user_regs regs; /* General registers */
|
||||||
|
int u_fpvalid; /* True if math co-processor being used. */
|
||||||
|
|
||||||
|
unsigned long int u_tsize; /* Text segment size (pages). */
|
||||||
|
unsigned long int u_dsize; /* Data segment size (pages). */
|
||||||
|
unsigned long int u_ssize; /* Stack segment size (pages). */
|
||||||
|
|
||||||
|
unsigned long start_code; /* Starting virtual address of text. */
|
||||||
|
unsigned long start_stack; /* Starting virtual address of stack. */
|
||||||
|
|
||||||
|
long int signal; /* Signal that caused the core dump. */
|
||||||
|
int reserved; /* No longer used */
|
||||||
|
struct user_regs *u_ar0; /* help gdb to find the general registers. */
|
||||||
|
|
||||||
|
unsigned long magic; /* uniquely identify a core file */
|
||||||
|
char u_comm[32]; /* User command that was responsible */
|
||||||
|
int u_debugreg[8];
|
||||||
|
struct user_fpregs u_fp; /* Floating point registers */
|
||||||
|
struct user_fpregs *u_fp0; /* help gdb to find the FP registers. */
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* sys/user.h */
|
36
sysdeps/unix/sysv/linux/nios2/syscall.S
Normal file
36
sysdeps/unix/sysv/linux/nios2/syscall.S
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
/* syscall - indirect system call.
|
||||||
|
Copyright (C) 2005-2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#include <sysdep.h>
|
||||||
|
|
||||||
|
/* We don't need a special syscall to implement syscall(). It won't work
|
||||||
|
reliably with 64-bit arguments (but that is true on many modern platforms).
|
||||||
|
*/
|
||||||
|
|
||||||
|
ENTRY (syscall)
|
||||||
|
mov r2, r4
|
||||||
|
mov r4, r5
|
||||||
|
mov r5, r6
|
||||||
|
mov r6, r7
|
||||||
|
ldw r7, 0(sp)
|
||||||
|
ldw r8, 4(sp)
|
||||||
|
ldw r9, 8(sp)
|
||||||
|
trap
|
||||||
|
bne r7, zero, SYSCALL_ERROR_LABEL
|
||||||
|
ret
|
||||||
|
PSEUDO_END (syscall)
|
141
sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h
Normal file
141
sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h
Normal file
@ -0,0 +1,141 @@
|
|||||||
|
/* Assembler macros with cancellation support, Nios II version.
|
||||||
|
Copyright (C) 2003-2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#include <sysdep.h>
|
||||||
|
#include <tls.h>
|
||||||
|
#ifndef __ASSEMBLER__
|
||||||
|
# include <nptl/pthreadP.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
|
||||||
|
|
||||||
|
# undef PSEUDO
|
||||||
|
# define PSEUDO(name, syscall_name, args) \
|
||||||
|
.type __##syscall_name##_nocancel, @function; \
|
||||||
|
.globl __##syscall_name##_nocancel; \
|
||||||
|
__##syscall_name##_nocancel: \
|
||||||
|
cfi_startproc; \
|
||||||
|
DO_CALL (syscall_name, args); \
|
||||||
|
bne r7, zero, SYSCALL_ERROR_LABEL; \
|
||||||
|
ret; \
|
||||||
|
cfi_endproc; \
|
||||||
|
.size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
|
||||||
|
ENTRY (name) \
|
||||||
|
SINGLE_THREAD_P(r2); \
|
||||||
|
bne r2, zero, pseudo_cancel; \
|
||||||
|
DO_CALL (syscall_name, args); \
|
||||||
|
bne r7, zero, SYSCALL_ERROR_LABEL; \
|
||||||
|
ret; \
|
||||||
|
pseudo_cancel: \
|
||||||
|
SAVESTK_##args; /* save syscall args and adjust stack */ \
|
||||||
|
SAVEREG(ra, 0); /* save return address */ \
|
||||||
|
SAVEREG(r22, 4); /* save GOT pointer */ \
|
||||||
|
nextpc r22; \
|
||||||
|
1: movhi r2, %hiadj(_gp_got - 1b); \
|
||||||
|
addi r2, r2, %lo(_gp_got - 1b); \
|
||||||
|
add r22, r22, r2; \
|
||||||
|
CENABLE; \
|
||||||
|
callr r3; \
|
||||||
|
stw r2, 8(sp); /* save mask */ \
|
||||||
|
LOADARGS_##args; \
|
||||||
|
movi r2, SYS_ify(syscall_name); \
|
||||||
|
trap; \
|
||||||
|
stw r2, 12(sp); /* save syscall result */ \
|
||||||
|
stw r7, 16(sp); /* save syscall error flag */ \
|
||||||
|
ldw r4, 8(sp); /* pass mask as argument 1 */ \
|
||||||
|
CDISABLE; \
|
||||||
|
callr r3; \
|
||||||
|
ldw r7, 16(sp); /* restore syscall error flag */ \
|
||||||
|
ldw r2, 12(sp); /* restore syscall result */ \
|
||||||
|
ldw ra, 0(sp); /* restore return address */ \
|
||||||
|
ldw r22, 4(sp); /* restore GOT pointer */ \
|
||||||
|
RESTORESTK_##args; \
|
||||||
|
bne r7, zero, SYSCALL_ERROR_LABEL;
|
||||||
|
|
||||||
|
|
||||||
|
# undef PSEUDO_END
|
||||||
|
# define PSEUDO_END(sym) \
|
||||||
|
SYSCALL_ERROR_HANDLER \
|
||||||
|
END (sym)
|
||||||
|
|
||||||
|
#define SAVEREG(REG, LOC) stw REG, LOC(sp); cfi_rel_offset (REG, LOC)
|
||||||
|
#define SAVESTK(X) subi sp, sp, X; cfi_adjust_cfa_offset(X)
|
||||||
|
#define SAVESTK_0 SAVESTK(20)
|
||||||
|
#define SAVEARG_1 SAVEREG(r4, 20)
|
||||||
|
#define SAVESTK_1 SAVESTK(24); SAVEARG_1
|
||||||
|
#define SAVEARG_2 SAVEREG(r5, 24); SAVEARG_1
|
||||||
|
#define SAVESTK_2 SAVESTK(28); SAVEARG_2
|
||||||
|
#define SAVEARG_3 SAVEREG(r6, 28); SAVEARG_2
|
||||||
|
#define SAVESTK_3 SAVESTK(32); SAVEARG_3
|
||||||
|
#define SAVEARG_4 SAVEREG(r7, 32); SAVEARG_3
|
||||||
|
#define SAVESTK_4 SAVESTK(36); SAVEARG_4
|
||||||
|
#define SAVESTK_5 SAVESTK_4
|
||||||
|
#define SAVESTK_6 SAVESTK_5
|
||||||
|
|
||||||
|
#define LOADARGS_0
|
||||||
|
#define LOADARGS_1 ldw r4, 20(sp)
|
||||||
|
#define LOADARGS_2 LOADARGS_1; ldw r5, 24(sp)
|
||||||
|
#define LOADARGS_3 LOADARGS_2; ldw r6, 28(sp)
|
||||||
|
#define LOADARGS_4 LOADARGS_3; ldw r7, 32(sp)
|
||||||
|
#define LOADARGS_5 LOADARGS_4; ldw r8, 36(sp)
|
||||||
|
#define LOADARGS_6 LOADARGS_5; ldw r9, 40(sp)
|
||||||
|
|
||||||
|
#define RESTORESTK(X) addi sp, sp, X; cfi_adjust_cfa_offset(-X)
|
||||||
|
#define RESTORESTK_0 RESTORESTK(20)
|
||||||
|
#define RESTORESTK_1 RESTORESTK(24)
|
||||||
|
#define RESTORESTK_2 RESTORESTK(28)
|
||||||
|
#define RESTORESTK_3 RESTORESTK(32)
|
||||||
|
#define RESTORESTK_4 RESTORESTK(36)
|
||||||
|
#define RESTORESTK_5 RESTORESTK(36)
|
||||||
|
#define RESTORESTK_6 RESTORESTK(36)
|
||||||
|
|
||||||
|
# if IS_IN (libpthread)
|
||||||
|
# define CENABLE ldw r3, %call(__pthread_enable_asynccancel)(r22)
|
||||||
|
# define CDISABLE ldw r3, %call(__pthread_disable_asynccancel)(r22)
|
||||||
|
# elif IS_IN (librt)
|
||||||
|
# define CENABLE ldw r3, %call(__librt_enable_asynccancel)(r22)
|
||||||
|
# define CDISABLE ldw r3, %call(__librt_disable_asynccancel)(r22)
|
||||||
|
# elif IS_IN (libc)
|
||||||
|
# define CENABLE ldw r3, %call(__libc_enable_asynccancel)(r22)
|
||||||
|
# define CDISABLE ldw r3, %call(__libc_disable_asynccancel)(r22)
|
||||||
|
# else
|
||||||
|
# error Unsupported library
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifndef __ASSEMBLER__
|
||||||
|
# define SINGLE_THREAD_P \
|
||||||
|
__builtin_expect (THREAD_GETMEM (THREAD_SELF, \
|
||||||
|
header.multiple_threads) \
|
||||||
|
== 0, 1)
|
||||||
|
# else
|
||||||
|
# define SINGLE_THREAD_P(reg) \
|
||||||
|
ldw reg, MULTIPLE_THREADS_OFFSET(r23)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#elif !defined __ASSEMBLER__
|
||||||
|
|
||||||
|
# define SINGLE_THREAD_P 1
|
||||||
|
# define NO_CANCELLATION 1
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __ASSEMBLER__
|
||||||
|
# define RTLD_SINGLE_THREAD_P \
|
||||||
|
__builtin_expect (THREAD_GETMEM (THREAD_SELF, \
|
||||||
|
header.multiple_threads) == 0, 1)
|
||||||
|
#endif
|
50
sysdeps/unix/sysv/linux/nios2/sysdep.S
Normal file
50
sysdeps/unix/sysv/linux/nios2/sysdep.S
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
/* Static library error handling code fragment for Nios II.
|
||||||
|
Copyright (C) 2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#include <sysdep.h>
|
||||||
|
|
||||||
|
/* The following code is only used in the static library. In the shared
|
||||||
|
library, the error handling code is at the end of each function. */
|
||||||
|
|
||||||
|
#ifndef PIC
|
||||||
|
|
||||||
|
/* In the static library, the syscall stubs jump here when they detect
|
||||||
|
an error. */
|
||||||
|
|
||||||
|
# undef CALL_MCOUNT
|
||||||
|
# define CALL_MCOUNT /* Don't insert the profiling call, it clobbers r2. */
|
||||||
|
|
||||||
|
# if IS_IN (libc)
|
||||||
|
# define SYSCALL_ERROR_ERRNO __libc_errno
|
||||||
|
# else
|
||||||
|
# define SYSCALL_ERROR_ERRNO errno
|
||||||
|
# endif
|
||||||
|
.text
|
||||||
|
ENTRY (__syscall_error)
|
||||||
|
nextpc r3
|
||||||
|
1:
|
||||||
|
movhi r8, %hiadj(_gp_got - 1b)
|
||||||
|
addi r8, r8, %lo(_gp_got - 1b)
|
||||||
|
add r3, r3, r8
|
||||||
|
ldw r3, %tls_ie(SYSCALL_ERROR_ERRNO)(r3)
|
||||||
|
add r3, r23, r3
|
||||||
|
stw r2, 0(r3)
|
||||||
|
movi r2, -1
|
||||||
|
ret
|
||||||
|
END (__syscall_error)
|
||||||
|
#endif
|
260
sysdeps/unix/sysv/linux/nios2/sysdep.h
Normal file
260
sysdeps/unix/sysv/linux/nios2/sysdep.h
Normal file
@ -0,0 +1,260 @@
|
|||||||
|
/* Assembler macros for Nios II.
|
||||||
|
Copyright (C) 2000-2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _LINUX_NIOS2_SYSDEP_H
|
||||||
|
#define _LINUX_NIOS2_SYSDEP_H 1
|
||||||
|
|
||||||
|
#include <asm/unistd.h>
|
||||||
|
#include <sysdeps/unix/sysdep.h>
|
||||||
|
#include <sysdeps/nios2/sysdep.h>
|
||||||
|
#include <sysdeps/unix/sysv/linux/generic/sysdep.h>
|
||||||
|
|
||||||
|
/* For RTLD_PRIVATE_ERRNO. */
|
||||||
|
#include <dl-sysdep.h>
|
||||||
|
|
||||||
|
#include <tls.h>
|
||||||
|
|
||||||
|
/* For Linux we can use the system call table in the header file
|
||||||
|
/usr/include/asm/unistd.h
|
||||||
|
of the kernel. But these symbols do not follow the SYS_* syntax
|
||||||
|
so we have to redefine the `SYS_ify' macro here. */
|
||||||
|
#undef SYS_ify
|
||||||
|
#define SYS_ify(syscall_name) __NR_##syscall_name
|
||||||
|
|
||||||
|
#ifdef __ASSEMBLER__
|
||||||
|
|
||||||
|
#define SYSCALL_ERROR_LABEL __local_syscall_error
|
||||||
|
|
||||||
|
#undef PSEUDO
|
||||||
|
#define PSEUDO(name, syscall_name, args) \
|
||||||
|
ENTRY (name) \
|
||||||
|
DO_CALL (syscall_name, args) \
|
||||||
|
bne r7, zero, SYSCALL_ERROR_LABEL; \
|
||||||
|
|
||||||
|
#undef PSEUDO_END
|
||||||
|
#define PSEUDO_END(name) \
|
||||||
|
SYSCALL_ERROR_HANDLER \
|
||||||
|
END (name)
|
||||||
|
|
||||||
|
#undef PSEUDO_NOERRNO
|
||||||
|
#define PSEUDO_NOERRNO(name, syscall_name, args) \
|
||||||
|
ENTRY (name) \
|
||||||
|
DO_CALL (syscall_name, args)
|
||||||
|
|
||||||
|
#undef PSEUDO_END_NOERRNO
|
||||||
|
#define PSEUDO_END_NOERRNO(name) \
|
||||||
|
END (name)
|
||||||
|
|
||||||
|
#undef ret_NOERRNO
|
||||||
|
#define ret_NOERRNO ret
|
||||||
|
|
||||||
|
#undef DO_CALL
|
||||||
|
#define DO_CALL(syscall_name, args) \
|
||||||
|
DOARGS_##args \
|
||||||
|
movi r2, SYS_ify(syscall_name); \
|
||||||
|
trap;
|
||||||
|
|
||||||
|
#if defined(__PIC__) || defined(PIC)
|
||||||
|
|
||||||
|
# if RTLD_PRIVATE_ERRNO
|
||||||
|
|
||||||
|
# define SYSCALL_ERROR_HANDLER \
|
||||||
|
SYSCALL_ERROR_LABEL: \
|
||||||
|
nextpc r3; \
|
||||||
|
1: \
|
||||||
|
movhi r8, %hiadj(rtld_errno - 1b); \
|
||||||
|
addi r8, r8, %lo(rtld_errno - 1b); \
|
||||||
|
add r3, r3, r8; \
|
||||||
|
stw r2, 0(r3); \
|
||||||
|
movi r2, -1; \
|
||||||
|
ret;
|
||||||
|
|
||||||
|
# else
|
||||||
|
|
||||||
|
# if IS_IN (libc)
|
||||||
|
# define SYSCALL_ERROR_ERRNO __libc_errno
|
||||||
|
# else
|
||||||
|
# define SYSCALL_ERROR_ERRNO errno
|
||||||
|
# endif
|
||||||
|
# define SYSCALL_ERROR_HANDLER \
|
||||||
|
SYSCALL_ERROR_LABEL: \
|
||||||
|
nextpc r3; \
|
||||||
|
1: \
|
||||||
|
movhi r8, %hiadj(_gp_got - 1b); \
|
||||||
|
addi r8, r8, %lo(_gp_got - 1b); \
|
||||||
|
add r3, r3, r8; \
|
||||||
|
ldw r3, %tls_ie(SYSCALL_ERROR_ERRNO)(r3); \
|
||||||
|
add r3, r23, r3; \
|
||||||
|
stw r2, 0(r3); \
|
||||||
|
movi r2, -1; \
|
||||||
|
ret;
|
||||||
|
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
/* We can use a single error handler in the static library. */
|
||||||
|
#define SYSCALL_ERROR_HANDLER \
|
||||||
|
SYSCALL_ERROR_LABEL: \
|
||||||
|
jmpi __syscall_error;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define DOARGS_0 /* nothing */
|
||||||
|
#define DOARGS_1 /* nothing */
|
||||||
|
#define DOARGS_2 /* nothing */
|
||||||
|
#define DOARGS_3 /* nothing */
|
||||||
|
#define DOARGS_4 /* nothing */
|
||||||
|
#define DOARGS_5 ldw r8, 0(sp);
|
||||||
|
#define DOARGS_6 ldw r9, 4(sp); ldw r8, 0(sp);
|
||||||
|
|
||||||
|
/* The function has to return the error code. */
|
||||||
|
#undef PSEUDO_ERRVAL
|
||||||
|
#define PSEUDO_ERRVAL(name, syscall_name, args) \
|
||||||
|
ENTRY (name) \
|
||||||
|
DO_CALL (syscall_name, args)
|
||||||
|
|
||||||
|
#undef PSEUDO_END_ERRVAL
|
||||||
|
#define PSEUDO_END_ERRVAL(name) \
|
||||||
|
END (name)
|
||||||
|
|
||||||
|
#define ret_ERRVAL ret
|
||||||
|
|
||||||
|
#else /* __ASSEMBLER__ */
|
||||||
|
|
||||||
|
/* In order to get __set_errno() definition in INLINE_SYSCALL. */
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
/* 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); \
|
||||||
|
unsigned int 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 = -1L; \
|
||||||
|
} \
|
||||||
|
(int) result_var; })
|
||||||
|
|
||||||
|
#undef INTERNAL_SYSCALL_DECL
|
||||||
|
#define INTERNAL_SYSCALL_DECL(err) unsigned int err __attribute__((unused))
|
||||||
|
|
||||||
|
#undef INTERNAL_SYSCALL_ERROR_P
|
||||||
|
#define INTERNAL_SYSCALL_ERROR_P(val, err) ((void) (val), (unsigned int) (err))
|
||||||
|
|
||||||
|
#undef INTERNAL_SYSCALL_ERRNO
|
||||||
|
#define INTERNAL_SYSCALL_ERRNO(val, err) ((void) (err), val)
|
||||||
|
|
||||||
|
#undef INTERNAL_SYSCALL_RAW
|
||||||
|
#define INTERNAL_SYSCALL_RAW(name, err, nr, args...) \
|
||||||
|
({ unsigned int _sys_result; \
|
||||||
|
{ \
|
||||||
|
/* Load argument values in temporary variables
|
||||||
|
to perform side effects like function calls
|
||||||
|
before the call-used registers are set. */ \
|
||||||
|
LOAD_ARGS_##nr (args) \
|
||||||
|
LOAD_REGS_##nr \
|
||||||
|
register int _r2 asm ("r2") = (int)(name); \
|
||||||
|
register int _err asm ("r7"); \
|
||||||
|
asm volatile ("trap" \
|
||||||
|
: "+r" (_r2), "=r" (_err) \
|
||||||
|
: ASM_ARGS_##nr \
|
||||||
|
: __SYSCALL_CLOBBERS); \
|
||||||
|
_sys_result = _r2; \
|
||||||
|
err = _err; \
|
||||||
|
} \
|
||||||
|
(int) _sys_result; })
|
||||||
|
|
||||||
|
#undef INTERNAL_SYSCALL
|
||||||
|
#define INTERNAL_SYSCALL(name, err, nr, args...) \
|
||||||
|
INTERNAL_SYSCALL_RAW(SYS_ify(name), err, nr, args)
|
||||||
|
|
||||||
|
#undef INTERNAL_SYSCALL_NCS
|
||||||
|
#define INTERNAL_SYSCALL_NCS(number, err, nr, args...) \
|
||||||
|
INTERNAL_SYSCALL_RAW(number, err, nr, args)
|
||||||
|
|
||||||
|
#define LOAD_ARGS_0()
|
||||||
|
#define LOAD_REGS_0
|
||||||
|
#define ASM_ARGS_0
|
||||||
|
#define LOAD_ARGS_1(a1) \
|
||||||
|
LOAD_ARGS_0 () \
|
||||||
|
int __arg1 = (int) (a1);
|
||||||
|
#define LOAD_REGS_1 \
|
||||||
|
register int _r4 asm ("r4") = __arg1; \
|
||||||
|
LOAD_REGS_0
|
||||||
|
#define ASM_ARGS_1 "r" (_r4)
|
||||||
|
#define LOAD_ARGS_2(a1, a2) \
|
||||||
|
LOAD_ARGS_1 (a1) \
|
||||||
|
int __arg2 = (int) (a2);
|
||||||
|
#define LOAD_REGS_2 \
|
||||||
|
register int _r5 asm ("r5") = __arg2; \
|
||||||
|
LOAD_REGS_1
|
||||||
|
#define ASM_ARGS_2 ASM_ARGS_1, "r" (_r5)
|
||||||
|
#define LOAD_ARGS_3(a1, a2, a3) \
|
||||||
|
LOAD_ARGS_2 (a1, a2) \
|
||||||
|
int __arg3 = (int) (a3);
|
||||||
|
#define LOAD_REGS_3 \
|
||||||
|
register int _r6 asm ("r6") = __arg3; \
|
||||||
|
LOAD_REGS_2
|
||||||
|
#define ASM_ARGS_3 ASM_ARGS_2, "r" (_r6)
|
||||||
|
#define LOAD_ARGS_4(a1, a2, a3, a4) \
|
||||||
|
LOAD_ARGS_3 (a1, a2, a3) \
|
||||||
|
int __arg4 = (int) (a4);
|
||||||
|
#define LOAD_REGS_4 \
|
||||||
|
register int _r7 asm ("r7") = __arg4; \
|
||||||
|
LOAD_REGS_3
|
||||||
|
#define ASM_ARGS_4 ASM_ARGS_3, "r" (_r7)
|
||||||
|
#define LOAD_ARGS_5(a1, a2, a3, a4, a5) \
|
||||||
|
LOAD_ARGS_4 (a1, a2, a3, a4) \
|
||||||
|
int __arg5 = (int) (a5);
|
||||||
|
#define LOAD_REGS_5 \
|
||||||
|
register int _r8 asm ("r8") = __arg5; \
|
||||||
|
LOAD_REGS_4
|
||||||
|
#define ASM_ARGS_5 ASM_ARGS_4, "r" (_r8)
|
||||||
|
#define LOAD_ARGS_6(a1, a2, a3, a4, a5, a6) \
|
||||||
|
LOAD_ARGS_5 (a1, a2, a3, a4, a5) \
|
||||||
|
int __arg6 = (int) (a6);
|
||||||
|
#define LOAD_REGS_6 \
|
||||||
|
register int _r9 asm ("r9") = __arg6; \
|
||||||
|
LOAD_REGS_5
|
||||||
|
#define ASM_ARGS_6 ASM_ARGS_5, "r" (_r9)
|
||||||
|
|
||||||
|
#define __SYSCALL_CLOBBERS "memory"
|
||||||
|
|
||||||
|
#endif /* __ASSEMBLER__ */
|
||||||
|
|
||||||
|
/* Pointer mangling support. */
|
||||||
|
#if IS_IN (rtld)
|
||||||
|
/* We cannot use the thread descriptor because in ld.so we use setjmp
|
||||||
|
earlier than the descriptor is initialized. */
|
||||||
|
#else
|
||||||
|
# ifdef __ASSEMBLER__
|
||||||
|
# define PTR_MANGLE_GUARD(guard) ldw guard, POINTER_GUARD(r23)
|
||||||
|
# define PTR_MANGLE(dst, src, guard) xor dst, src, guard
|
||||||
|
# define PTR_DEMANGLE(dst, src, guard) PTR_MANGLE (dst, src, guard)
|
||||||
|
# else
|
||||||
|
# define PTR_MANGLE(var) \
|
||||||
|
(var) = (__typeof (var)) ((uintptr_t) (var) ^ THREAD_GET_POINTER_GUARD ())
|
||||||
|
# define PTR_DEMANGLE(var) PTR_MANGLE (var)
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* linux/nios2/sysdep.h */
|
29
sysdeps/unix/sysv/linux/nios2/ucontext_i.sym
Normal file
29
sysdeps/unix/sysv/linux/nios2/ucontext_i.sym
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
#include <inttypes.h>
|
||||||
|
#include <signal.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <sys/ucontext.h>
|
||||||
|
|
||||||
|
#include "kernel_rt_sigframe.h"
|
||||||
|
|
||||||
|
SIG_BLOCK
|
||||||
|
SIG_SETMASK
|
||||||
|
|
||||||
|
_NSIG8 (_NSIG / 8)
|
||||||
|
|
||||||
|
MCONTEXT_VERSION
|
||||||
|
|
||||||
|
-- Offsets of the fields in the kernel rt_sigframe_t structure.
|
||||||
|
#define rt_sigframe(member) offsetof (struct kernel_rt_sigframe, member)
|
||||||
|
|
||||||
|
RT_SIGFRAME_SIZE sizeof (struct kernel_rt_sigframe)
|
||||||
|
RT_SIGFRAME_UCONTEXT rt_sigframe (uc)
|
||||||
|
|
||||||
|
-- Offsets of the fields in the ucontext_t structure.
|
||||||
|
#define ucontext(member) offsetof (ucontext_t, member)
|
||||||
|
|
||||||
|
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)
|
||||||
|
UCONTEXT_SIZE sizeof (ucontext_t)
|
44
sysdeps/unix/sysv/linux/nios2/vfork.S
Normal file
44
sysdeps/unix/sysv/linux/nios2/vfork.S
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
/* vfork for Nios II Linux.
|
||||||
|
Copyright (C) 2005-2015 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
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#include <sysdep.h>
|
||||||
|
#include <tcb-offsets.h>
|
||||||
|
|
||||||
|
ENTRY(__vfork)
|
||||||
|
|
||||||
|
ldw r6, PID_OFFSET(r23)
|
||||||
|
sub r7, zero, r6
|
||||||
|
bne r7, zero, 2f
|
||||||
|
movhi r7, %hi(0x80000000)
|
||||||
|
2:
|
||||||
|
stw r7, PID_OFFSET(r23)
|
||||||
|
|
||||||
|
movi r4, 0x4111 /* (CLONE_VM | CLONE_VFORK | SIGCHLD) */
|
||||||
|
mov r5, zero
|
||||||
|
DO_CALL (clone, 2)
|
||||||
|
|
||||||
|
beq r2, zero, 1f
|
||||||
|
stw r6, PID_OFFSET(r23)
|
||||||
|
1:
|
||||||
|
bne r7, zero, SYSCALL_ERROR_LABEL
|
||||||
|
ret
|
||||||
|
|
||||||
|
PSEUDO_END (__vfork)
|
||||||
|
libc_hidden_def (__vfork)
|
||||||
|
|
||||||
|
weak_alias (__vfork, vfork)
|
Reference in New Issue
Block a user