mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-21 12:30:06 +00:00
Commit nios2 port to master.
This commit is contained in:
parent
026eb207ed
commit
522e6ee3b4
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>
|
||||
|
||||
[BZ #17844]
|
||||
|
2
NEWS
2
NEWS
@ -19,6 +19,8 @@ Version 2.21
|
||||
17744, 17745, 17746, 17747, 17748, 17775, 17777, 17780, 17781, 17782,
|
||||
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
|
||||
implementations for powerpc64/powerpc64le.
|
||||
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)
|
Loading…
Reference in New Issue
Block a user