1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-12-24 17:51:17 +03:00

Move m68k from ports to libc

This commit is contained in:
Andreas Schwab
2014-02-10 20:05:01 +01:00
parent 87569616d2
commit 73588a7223
402 changed files with 21 additions and 1 deletions

View File

@@ -0,0 +1,24 @@
# Linux/m68k uses Motorola asm syntax and the ELF format.
m68k-syntax-flag = -DMOTOROLA_SYNTAX
ifeq ($(subdir),csu)
sysdep_routines += m68k-helpers
endif
ifeq ($(subdir),misc)
sysdep_routines += mremap
sysdep_headers += sys/reg.h
endif
ifeq ($(subdir),elf)
sysdep-dl-routines += dl-static
sysdep_routines += dl-vdso libc-m68k-vdso dl-static
sysdep-rtld-routines += m68k-vdso dl-static
sysdep-others += lddlibc4
install-bin += lddlibc4
endif
ifeq ($(subdir),resource)
sysdep_routines += oldgetrlimit64
endif

View File

@@ -0,0 +1,54 @@
ld {
GLIBC_PRIVATE {
_dl_var_init;
}
}
libc {
GLIBC_2.0 {
# Exception handling support functions from libgcc
__register_frame; __register_frame_table; __deregister_frame;
__frame_state_for; __register_frame_info_table;
# c*
cacheflush;
}
GLIBC_2.2 {
# functions used in other libraries
__xstat64; __fxstat64; __lxstat64;
# a*
alphasort64;
# g*
glob64;
# New rlimit interface
getrlimit; setrlimit; getrlimit64;
# r*
readdir64; readdir64_r;
# s*
scandir64;
# v*
versionsort64;
}
GLIBC_2.11 {
fallocate64;
}
GLIBC_2.12 {
__m68k_read_tp;
}
GLIBC_PRIVATE {
__vdso_atomic_cmpxchg_32; __vdso_atomic_barrier;
}
}
ld {
GLIBC_PRIVATE {
__rtld___vdso_read_tp;
__rtld___vdso_atomic_cmpxchg_32;
__rtld___vdso_atomic_barrier;
}
}

View File

@@ -0,0 +1,38 @@
/* Copyright (C) 2009-2014 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
#include <stdio.h>
#include <signal.h>
#include <sysdep.h>
#define __longjmp ____longjmp_chk
#define CHECK_SP(sp) \
do { \
register unsigned long this_sp asm ("sp"); \
if ((unsigned long) (sp) < this_sp) \
{ \
struct sigaltstack oss; \
INTERNAL_SYSCALL_DECL (err); \
int result = INTERNAL_SYSCALL (sigaltstack, err, 2, NULL, &oss); \
if (!INTERNAL_SYSCALL_ERROR_P (result, err) \
&& ((oss.ss_flags & SS_ONSTACK) == 0 \
|| ((unsigned long) oss.ss_sp + oss.ss_size \
- (unsigned long) (sp)) < oss.ss_size)) \
__fortify_fail ("longjmp causes uninitialized stack frame"); \
} \
} while (0)
#include <__longjmp.c>

View File

@@ -0,0 +1 @@
#include <sysdeps/unix/sysv/linux/i386/alphasort64.c>

View File

@@ -0,0 +1,3 @@
#ifndef __A_OUT_GNU_H__
# error "Never use <bits/a.out.h> directly; include <a.out.h> instead."
#endif

View File

@@ -0,0 +1,54 @@
/* O_*, F_*, FD_* bit values for Linux.
Copyright (C) 2000-2014 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
#ifndef _FCNTL_H
# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
#endif
#define __O_DIRECTORY 040000 /* Must be a directory. */
#define __O_NOFOLLOW 0100000 /* Do not follow links. */
#define __O_DIRECT 0200000 /* Direct disk access. */
#define __O_LARGEFILE 0400000
struct flock
{
short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */
short int l_whence; /* Where `l_start' is relative to (like `lseek'). */
#ifndef __USE_FILE_OFFSET64
__off_t l_start; /* Offset where the lock begins. */
__off_t l_len; /* Size of the locked area; zero means until EOF. */
#else
__off64_t l_start; /* Offset where the lock begins. */
__off64_t l_len; /* Size of the locked area; zero means until EOF. */
#endif
__pid_t l_pid; /* Process holding the lock. */
};
#ifdef __USE_LARGEFILE64
struct flock64
{
short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */
short int l_whence; /* Where `l_start' is relative to (like `lseek'). */
__off64_t l_start; /* Offset where the lock begins. */
__off64_t l_len; /* Size of the locked area; zero means until EOF. */
__pid_t l_pid; /* Process holding the lock. */
};
#endif
/* Include generic Linux declarations. */
#include <bits/fcntl-linux.h>

View File

@@ -0,0 +1,60 @@
/* Resolve function pointers to VDSO functions.
Copyright (C) 2010-2014 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Maxim Kuvyrkov <maxim@codesourcery.com>, 2010.
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 _M68K_VDSO_H
#define _M68K_VDSO_H
#ifdef SHARED
# ifdef IS_IN_rtld
# define M68K_VDSO_SYMBOL(name) __rtld_##name
# define STR_M68K_VDSO_SYMBOL(name) "__rtld_" #name
# else
# define M68K_VDSO_SYMBOL(name) name
# define STR_M68K_VDSO_SYMBOL(name) #name
# endif
# ifndef __ASSEMBLER__
/* We define __rtld_* copies for rtld.
We need them visible in libc to initialize. */
# if defined IS_IN_rtld || !defined NOT_IN_libc
extern void *__rtld___vdso_read_tp;
extern void *__rtld___vdso_atomic_cmpxchg_32;
extern void *__rtld___vdso_atomic_barrier;
/* These stubs are meant to be invoked only from the assembly. */
extern void __vdso_read_tp_stub (void);
extern void __vdso_atomic_cmpxchg_32_stub (void);
extern void __vdso_atomic_barrier_stub (void);
# endif /* IS_IN_rtld || !NOT_IN_libc */
/* RTLD should only use its own copies. */
# ifndef IS_IN_rtld
extern void *__vdso_read_tp;
extern void *__vdso_atomic_cmpxchg_32;
extern void *__vdso_atomic_barrier;
# endif /* !IS_IN_rtld */
# endif /* !__ASSEMBLER__ */
#endif /* SHARED */
#endif /* _M68K_VDSO_H */

View File

@@ -0,0 +1,40 @@
/* Definitions for POSIX memory map interface. Linux/m68k version.
Copyright (C) 1997-2014 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<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>

View File

@@ -0,0 +1,49 @@
/* Copyright (C) 1997-2014 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
#ifndef _SYS_POLL_H
# error "Never use <bits/poll.h> directly; include <sys/poll.h> instead."
#endif
/* Event types that can be polled for. These bits may be set in `events'
to indicate the interesting event types; they will appear in `revents'
to indicate the status of the file descriptor. */
#define POLLIN 0x001 /* There is data to read. */
#define POLLPRI 0x002 /* There is urgent data to read. */
#define POLLOUT 0x004 /* Writing now will not block. */
#if defined __USE_XOPEN || defined __USE_XOPEN2K8
/* These values are defined in XPG4.2. */
# define POLLRDNORM 0x040 /* Normal data may be read. */
# define POLLRDBAND 0x080 /* Priority data may be read. */
# define POLLWRNORM POLLOUT /* Writing now will not block. */
# define POLLWRBAND 0x100 /* Priority data may be written. */
#endif
#ifdef __USE_GNU
/* These are extensions for Linux. */
# define POLLMSG 0x400
# define POLLREMOVE 0x1000
# define POLLRDHUP 0x2000
#endif
/* Event types always implicitly polled for. These bits need not be set in
`events', but they will appear in `revents' to indicate the status of
the file descriptor. */
#define POLLERR 0x008 /* Error condition. */
#define POLLHUP 0x010 /* Hung up. */
#define POLLNVAL 0x020 /* Invalid polling request. */

View File

@@ -0,0 +1,172 @@
/* Copyright (C) 1992-2014 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
#if !defined _SYS_STAT_H && !defined _FCNTL_H
# error "Never include <bits/stat.h> directly; use <sys/stat.h> instead."
#endif
#ifndef _BITS_STAT_H
#define _BITS_STAT_H 1
/* Versions of the `struct stat' data structure. */
#define _STAT_VER_LINUX_OLD 1
#define _STAT_VER_KERNEL 1
#define _STAT_VER_SVR4 2
#define _STAT_VER_LINUX 3
#define _STAT_VER _STAT_VER_LINUX /* The one defined below. */
/* Versions of the `xmknod' interface. */
#define _MKNOD_VER_LINUX 1
#define _MKNOD_VER_SVR4 2
#define _MKNOD_VER _MKNOD_VER_LINUX /* The bits defined below. */
struct stat
{
__dev_t st_dev; /* Device. */
unsigned short int __pad1;
#ifndef __USE_FILE_OFFSET64
__ino_t st_ino; /* File serial number. */
#else
__ino_t __st_ino; /* 32bit file serial number. */
#endif
__mode_t st_mode; /* File mode. */
__nlink_t st_nlink; /* Link count. */
__uid_t st_uid; /* User ID of the file's owner. */
__gid_t st_gid; /* Group ID of the file's group.*/
__dev_t st_rdev; /* Device number, if device. */
unsigned short int __pad2;
#ifndef __USE_FILE_OFFSET64
__off_t st_size; /* Size of file, in bytes. */
#else
__off64_t st_size; /* Size of file, in bytes. */
#endif
__blksize_t st_blksize; /* Optimal block size for I/O. */
#ifndef __USE_FILE_OFFSET64
__blkcnt_t st_blocks; /* Number 512-byte blocks allocated. */
#else
__blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */
#endif
#if defined __USE_MISC || defined __USE_XOPEN2K8
/* Nanosecond resolution timestamps are stored in a format
equivalent to 'struct timespec'. This is the type used
whenever possible but the Unix namespace rules do not allow the
identifier 'timespec' to appear in the <sys/stat.h> header.
Therefore we have to handle the use of this header in strictly
standard-compliant sources special. */
struct timespec st_atim; /* Time of last access. */
struct timespec st_mtim; /* Time of last modification. */
struct timespec st_ctim; /* Time of last status change. */
# define st_atime st_atim.tv_sec /* Backward compatibility. */
# define st_mtime st_mtim.tv_sec
# define st_ctime st_ctim.tv_sec
#else
__time_t st_atime; /* Time of last access. */
unsigned long int st_atimensec; /* Nscecs of last access. */
__time_t st_mtime; /* Time of last modification. */
unsigned long int st_mtimensec; /* Nsecs of last modification. */
__time_t st_ctime; /* Time of last status change. */
unsigned long int st_ctimensec; /* Nsecs of last status change. */
#endif
#ifndef __USE_FILE_OFFSET64
unsigned long int __glibc_reserved4;
unsigned long int __glibc_reserved5;
#else
__ino64_t st_ino; /* File serial number. */
#endif
};
#ifdef __USE_LARGEFILE64
struct stat64
{
__dev_t st_dev; /* Device. */
unsigned short int __pad1;
__ino_t __st_ino; /* 32bit file serial number. */
__mode_t st_mode; /* File mode. */
__nlink_t st_nlink; /* Link count. */
__uid_t st_uid; /* User ID of the file's owner. */
__gid_t st_gid; /* Group ID of the file's group.*/
__dev_t st_rdev; /* Device number, if device. */
unsigned short int __pad2;
__off64_t st_size; /* Size of file, in bytes. */
__blksize_t st_blksize; /* Optimal block size for I/O. */
__blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */
# if defined __USE_MISC || defined __USE_XOPEN2K8
/* Nanosecond resolution timestamps are stored in a format
equivalent to 'struct timespec'. This is the type used
whenever possible but the Unix namespace rules do not allow the
identifier 'timespec' to appear in the <sys/stat.h> header.
Therefore we have to handle the use of this header in strictly
standard-compliant sources special. */
struct timespec st_atim; /* Time of last access. */
struct timespec st_mtim; /* Time of last modification. */
struct timespec st_ctim; /* Time of last status change. */
# else
__time_t st_atime; /* Time of last access. */
unsigned long int st_atimensec; /* Nscecs of last access. */
__time_t st_mtime; /* Time of last modification. */
unsigned long int st_mtimensec; /* Nsecs of last modification. */
__time_t st_ctime; /* Time of last status change. */
unsigned long int st_ctimensec; /* Nsecs of last status change. */
# endif
__ino64_t st_ino; /* File serial number. */
};
#endif
/* Tell code we have these members. */
#define _STATBUF_ST_BLKSIZE
#define _STATBUF_ST_RDEV
/* Nanosecond resolution time values are supported. */
#define _STATBUF_ST_NSEC
/* Encoding of the file mode. */
#define __S_IFMT 0170000 /* These bits determine file type. */
/* File types. */
#define __S_IFDIR 0040000 /* Directory. */
#define __S_IFCHR 0020000 /* Character device. */
#define __S_IFBLK 0060000 /* Block device. */
#define __S_IFREG 0100000 /* Regular file. */
#define __S_IFIFO 0010000 /* FIFO. */
#define __S_IFLNK 0120000 /* Symbolic link. */
#define __S_IFSOCK 0140000 /* Socket. */
/* POSIX.1b objects. Note that these macros always evaluate to zero. But
they do it by enforcing the correct use of the macros. */
#define __S_TYPEISMQ(buf) ((buf)->st_mode - (buf)->st_mode)
#define __S_TYPEISSEM(buf) ((buf)->st_mode - (buf)->st_mode)
#define __S_TYPEISSHM(buf) ((buf)->st_mode - (buf)->st_mode)
/* Protection bits. */
#define __S_ISUID 04000 /* Set user ID on execution. */
#define __S_ISGID 02000 /* Set group ID on execution. */
#define __S_ISVTX 01000 /* Save swapped text after use (sticky). */
#define __S_IREAD 0400 /* Read by owner. */
#define __S_IWRITE 0200 /* Write by owner. */
#define __S_IEXEC 0100 /* Execute by owner. */
#ifdef __USE_ATFILE
# define UTIME_NOW ((1l << 30) - 1l)
# define UTIME_OMIT ((1l << 30) - 2l)
#endif
#endif /* bits/stat.h */

View File

@@ -0,0 +1,47 @@
/* brk system call for Linux/m68k.
Copyright (C) 1996-2014 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
#include <errno.h>
#include <unistd.h>
#include <sysdep.h>
void *__curbrk = 0;
/* Old braindamage in GCC's crtstuff.c requires this symbol in an attempt
to work around different old braindamage in the old Linux/x86 ELF
dynamic linker. Sigh. */
weak_alias (__curbrk, ___brk_addr)
int
__brk (void *addr)
{
void *newbrk;
INTERNAL_SYSCALL_DECL (err);
newbrk = (void *) INTERNAL_SYSCALL (brk, err, 1, addr);
__curbrk = newbrk;
if (newbrk < addr)
{
__set_errno (ENOMEM);
return -1;
}
return 0;
}
weak_alias (__brk, brk)

View File

@@ -0,0 +1,134 @@
/* Copyright (C) 1996-2014 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Andreas Schwab (schwab@issan.informatik.uni-dortmund.de)
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>
#ifdef RESET_PID
#include <tls.h>
#endif
#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. */
movel #-EINVAL, %d0
movel 4(%sp), %a0 /* no NULL function pointers */
tstl %a0
jeq SYSCALL_ERROR_LABEL
movel 8(%sp), %a1 /* no NULL stack pointers */
tstl %a1
jeq SYSCALL_ERROR_LABEL
/* Allocate space and copy the argument onto the new stack. */
movel 16(%sp), -(%a1)
/* Do the system call */
movel 12+0(%sp), %d1 /* get flags */
movel %d3, -(%a1) /* save %d3 and get parent_tidptr */
movel %d3, -(%sp)
cfi_adjust_cfa_offset (4)
cfi_rel_offset (%d3, 0)
movel 20+4(%sp), %d3
movel %d4, -(%a1) /* save %d4 and get child_tidptr */
movel %d4, -(%sp)
cfi_adjust_cfa_offset (4)
cfi_rel_offset (%d4, 0)
movel 28+8(%sp), %d4
movel %d5, -(%a1) /* save %d5 and get tls */
movel %d5, -(%sp)
cfi_adjust_cfa_offset (4)
cfi_rel_offset (%d5, 0)
movel 24+12(%sp), %d5
/* save %d2 and get stack pointer */
#ifdef __mcoldfire__
movel %d2, -(%a1)
movel %d2, -(%sp)
cfi_adjust_cfa_offset (4)
cfi_rel_offset (%d2, 0)
movel %a1, %d2
#else
exg %d2, %a1 /* save %d2 and get stack pointer */
cfi_register (%d2, %a1)
#endif
movel #SYS_ify (clone), %d0
/* End FDE now, because in the child the unwind info will be
wrong. */
cfi_endproc
trap #0
#ifdef __mcoldfire__
movel (%sp)+, %d2
#else
exg %d2, %a1 /* restore %d2 */
#endif
movel (%sp)+, %d5 /* restore %d5, %d4 and %d3 */
movel (%sp)+, %d4
movel (%sp)+, %d3
tstl %d0
jmi SYSCALL_ERROR_LABEL
jeq thread_start
rts
thread_start:
cfi_startproc
cfi_undefined (pc) /* Mark end of stack */
subl %fp, %fp /* terminate the stack frame */
#ifdef RESET_PID
/* Check and see if we need to reset the PID. */
movel %d1, %a1
andl #CLONE_THREAD, %d1
jne donepid
movel %a1, %d1
movel #-1, %d0
andl #CLONE_VM, %d1
jne gotpid
movel #SYS_ify (getpid), %d0
trap #0
gotpid:
movel %a0, -(%sp)
movel %d0, -(%sp)
bsrl __m68k_read_tp@PLTPC
movel (%sp)+, %d0
movel %d0, PID_OFFSET(%a0)
movel %d0, TID_OFFSET(%a0)
movel (%sp)+, %a0
donepid:
#endif
jsr (%a0)
movel %d0, %d1
movel #SYS_ify (exit), %d0
trap #0
cfi_endproc
cfi_startproc
PSEUDO_END (__clone)
weak_alias (__clone, clone)

View File

@@ -0,0 +1,104 @@
/* Copyright (C) 2010-2014 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Maxim Kuvyrkov <maxim@codesourcery.com>, 2010.
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_ATOMIC_H
#define _BITS_ATOMIC_H 1
#include <stdint.h>
#include <sysdep.h>
#include <bits/m68k-vdso.h>
/* Coldfire has no atomic compare-and-exchange operation, but the
kernel provides userspace atomicity operations. Use them. */
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;
/* The only basic operation needed is compare and exchange. */
/* For ColdFire we'll have to trap into the kernel mode anyway,
so trap from the library rather then from the kernel wrapper. */
#ifdef SHARED
# define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \
({ \
/* Use temporary variables to workaround call-clobberness of \
the registers. */ \
__typeof (mem) _mem = mem; \
__typeof (oldval) _oldval = oldval; \
__typeof (newval) _newval = newval; \
register __typeof (mem) _a0 asm ("a0") = _mem; \
register __typeof (oldval) _d0 asm ("d0") = _oldval; \
register __typeof (newval) _d1 asm ("d1") = _newval; \
void *tmp; \
\
asm ("movel #_GLOBAL_OFFSET_TABLE_@GOTPC, %2\n\t" \
"lea (-6, %%pc, %2), %2\n\t" \
"movel " STR_M68K_VDSO_SYMBOL (__vdso_atomic_cmpxchg_32) \
"@GOT(%2), %2\n\t" \
"movel (%2), %2\n\t" \
"jsr (%2)\n\t" \
: "+d" (_d0), "+m" (*_a0), "=&a" (tmp) \
: "a" (_a0), "d" (_d1)); \
_d0; \
})
#else
# define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \
({ \
/* Use temporary variables to workaround call-clobberness of \
the registers. */ \
__typeof (mem) _mem = mem; \
__typeof (oldval) _oldval = oldval; \
__typeof (newval) _newval = newval; \
register __typeof (oldval) _d0 asm ("d0") \
= (__typeof (oldval)) SYS_ify (atomic_cmpxchg_32); \
register __typeof (mem) _a0 asm ("a0") = _mem; \
register __typeof (oldval) _d2 asm ("d2") = _oldval; \
register __typeof (newval) _d1 asm ("d1") = _newval; \
\
asm ("trap #0" \
: "+d" (_d0), "+m" (*_a0) \
: "a" (_a0), "d" (_d2), "d" (_d1)); \
_d0; \
})
#endif
#ifdef SHARED
# define atomic_full_barrier() \
({ \
void *tmp; \
\
asm ("movel #_GLOBAL_OFFSET_TABLE_@GOTPC, %0\n\t" \
"lea (-6, %pc, %0), %0\n\t" \
"movel " STR_M68K_VDSO_SYMBOL (__vdso_atomic_barrier) \
"@GOT(%0), %0\n\t" \
"movel (%0), %0\n\t" \
"jsr (%0)\n\t" \
: "=&a" (tmp)); \
})
#else
# define atomic_full_barrier() \
(INTERNAL_SYSCALL (atomic_barrier, , 0), (void) 0)
#endif
#endif

View File

@@ -0,0 +1,12 @@
GLIBC_2.4
GLIBC_2.4 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

View File

@@ -0,0 +1,3 @@
GLIBC_2.4
GLIBC_2.4 A
__ctype_get_mb_cur_max F

View File

@@ -0,0 +1,6 @@
GLIBC_2.4
GLIBC_2.4 A
gai_cancel F
gai_error F
gai_suspend F
getaddrinfo_a F

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,9 @@
GLIBC_2.4
GLIBC_2.4 A
crypt F
crypt_r F
encrypt F
encrypt_r F
fcrypt F
setkey F
setkey_r F

View File

@@ -0,0 +1,11 @@
GLIBC_2.4
GLIBC_2.4 A
dladdr F
dladdr1 F
dlclose F
dlerror F
dlinfo F
dlmopen F
dlopen F
dlsym F
dlvsym F

View File

@@ -0,0 +1,374 @@
GLIBC_2.15
GLIBC_2.15 A
__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
__cosh_finite F
__coshf_finite F
__exp10_finite F
__exp10f_finite F
__exp2_finite F
__exp2f_finite F
__exp_finite F
__expf_finite F
__fmod_finite F
__fmodf_finite F
__gamma_r_finite F
__gammaf_r_finite F
__hypot_finite F
__hypotf_finite 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
__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
GLIBC_2.18
GLIBC_2.18 A
__issignaling F
__issignalingf F
GLIBC_2.4
GLIBC_2.4 A
_LIB_VERSION D 0x4
__clog10 F
__clog10f F
__clog10l F
__finite F
__finitef F
__finitel F
__fpclassify F
__fpclassifyf F
__signbit F
__signbitf 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

View File

@@ -0,0 +1,123 @@
GLIBC_2.4
GLIBC_2.4 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

View File

@@ -0,0 +1,232 @@
GLIBC_2.11
GLIBC_2.11 A
pthread_sigqueue F
GLIBC_2.12
GLIBC_2.12 A
pthread_getname_np F
pthread_mutex_consistent F
pthread_mutexattr_getrobust F
pthread_mutexattr_setrobust F
pthread_setname_np F
GLIBC_2.18
GLIBC_2.18 A
pthread_getattr_default_np F
pthread_setattr_default_np F
GLIBC_2.4
GLIBC_2.4 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
__vfork 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_np F
pthread_getconcurrency F
pthread_getcpuclockid 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_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_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_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_setcancelstate F
pthread_setcanceltype F
pthread_setconcurrency F
pthread_setschedparam F
pthread_setschedprio F
pthread_setspecific F
pthread_sigmask 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
vfork F
wait F
waitpid F
write F

View File

@@ -0,0 +1,95 @@
GLIBC_2.4
GLIBC_2.4 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
res_gethostbyaddr F
res_gethostbyname F
res_gethostbyname2 F
res_send_setqhook F
res_send_setrhook F
GLIBC_2.9
GLIBC_2.9 A
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

View File

@@ -0,0 +1,44 @@
GLIBC_2.4
GLIBC_2.4 A
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
clock_getcpuclockid F
clock_getres F
clock_gettime F
clock_nanosleep F
clock_settime 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
GLIBC_2.7
GLIBC_2.7 A
__mq_open_2 F

View File

@@ -0,0 +1,42 @@
GLIBC_2.4
GLIBC_2.4 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

View File

@@ -0,0 +1,8 @@
GLIBC_2.4
GLIBC_2.4 A
forkpty F
login F
login_tty F
logout F
logwtmp F
openpty F

View File

@@ -0,0 +1,29 @@
/* Copyright (C) 2010-2014 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
#ifndef _LINUX_M68K_COLDFIRE_SYSDEP_H
#define _LINUX_M68K_COLDFIRE_SYSDEP_H 1
#include <sysdeps/unix/sysdep.h>
#include <sysdeps/m68k/coldfire/sysdep.h>
#include <sysdeps/unix/sysv/linux/m68k/sysdep.h>
#define SYSCALL_ERROR_LOAD_GOT(reg) \
move.l &_GLOBAL_OFFSET_TABLE_@GOTPC, reg; \
lea (-6, %pc, reg), reg
#endif

View File

@@ -0,0 +1,9 @@
# This file is generated from configure.ac by Autoconf. DO NOT EDIT!
case $machine in
m68k/coldfire)
;;
*)
libc_cv_gcc_unwind_find_fde=yes
;;
esac
ldd_rewrite_script=sysdeps/unix/sysv/linux/ldd-rewrite.sed

View File

@@ -0,0 +1,10 @@
sinclude(./aclocal.m4)dnl Autoconf lossage
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
case $machine in
m68k/coldfire)
;;
*)
libc_cv_gcc_unwind_find_fde=yes
;;
esac
ldd_rewrite_script=sysdeps/unix/sysv/linux/ldd-rewrite.sed

View File

@@ -0,0 +1 @@
#include <sysdeps/unix/sysv/linux/i386/dl-librecon.h>

View File

@@ -0,0 +1,84 @@
/* Variable initialization. M68K version.
Copyright (C) 2013-2014 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <ldsodefs.h>
#ifdef SHARED
void
_dl_var_init (void *array[])
{
/* It has to match "variables" below. */
enum
{
DL_PAGESIZE = 0,
};
GLRO(dl_pagesize) = *(size_t *) array[DL_PAGESIZE];
}
#else
static void *variables[] =
{
&GLRO(dl_pagesize)
};
static void
_dl_unprotect_relro (struct link_map *l)
{
ElfW(Addr) start = ((l->l_addr + l->l_relro_addr)
& ~(GLRO(dl_pagesize) - 1));
ElfW(Addr) end = ((l->l_addr + l->l_relro_addr + l->l_relro_size)
& ~(GLRO(dl_pagesize) - 1));
if (start != end)
__mprotect ((void *) start, end - start, PROT_READ | PROT_WRITE);
}
void
_dl_static_init (struct link_map *l)
{
struct link_map *rtld_map = l;
struct r_scope_elem **scope;
const ElfW(Sym) *ref = NULL;
lookup_t loadbase;
void (*f) (void *[]);
size_t i;
loadbase = _dl_lookup_symbol_x ("_dl_var_init", l, &ref, l->l_local_scope,
NULL, 0, 1, NULL);
for (scope = l->l_local_scope; *scope != NULL; scope++)
for (i = 0; i < (*scope)->r_nlist; i++)
if ((*scope)->r_list[i] == loadbase)
{
rtld_map = (*scope)->r_list[i];
break;
}
if (ref != NULL)
{
f = (void (*) (void *[])) DL_SYMBOL_ADDRESS (loadbase, ref);
_dl_unprotect_relro (rtld_map);
f (variables);
_dl_protect_relro (rtld_map);
}
}
#endif

View File

@@ -0,0 +1 @@
#include <sysdeps/unix/sysv/linux/i386/fchown.c>

View File

@@ -0,0 +1 @@
#include <sysdeps/unix/sysv/linux/i386/fchownat.c>

View File

@@ -0,0 +1 @@
#include <sysdeps/unix/sysv/linux/i386/fcntl.c>

View File

@@ -0,0 +1 @@
#include <sysdeps/unix/sysv/linux/i386/fxstat.c>

View File

@@ -0,0 +1 @@
#include <sysdeps/unix/sysv/linux/i386/fxstatat.c>

View File

@@ -0,0 +1 @@
#include <sysdeps/unix/sysv/linux/i386/getdents64.c>

View File

@@ -0,0 +1 @@
#include <sysdeps/unix/sysv/linux/i386/getegid.c>

View File

@@ -0,0 +1 @@
#include <sysdeps/unix/sysv/linux/i386/geteuid.c>

View File

@@ -0,0 +1 @@
#include <sysdeps/unix/sysv/linux/i386/getgid.c>

View File

@@ -0,0 +1,2 @@
/* We also have to rewrite the kernel gid_t to the user land type. */
#include <sysdeps/unix/sysv/linux/i386/getgroups.c>

View File

@@ -0,0 +1 @@
#include <sysdeps/unix/sysv/linux/i386/getmsg.c>

View File

@@ -0,0 +1,49 @@
/* Copyright (C) 2000-2014 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Andreas Schwab <schwab@suse.de>.
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 <unistd.h>
#include <sys/param.h>
#include <errno.h>
#include <ldsodefs.h>
#include <sysdep.h>
#include <sys/syscall.h>
/* Return the system page size. */
int
__getpagesize (void)
{
#ifdef __NR_getpagesize
int result;
#endif
if (GLRO(dl_pagesize) != 0)
return GLRO(dl_pagesize);
#ifdef __NR_getpagesize
INTERNAL_SYSCALL_DECL (err);
result = INTERNAL_SYSCALL (getpagesize, err, 0);
/* The only possible error is ENOSYS. */
if (!INTERNAL_SYSCALL_ERROR_P (result, err))
return result;
#endif
return 4096;
}
libc_hidden_def (__getpagesize)
weak_alias (__getpagesize, getpagesize)

View File

@@ -0,0 +1 @@
#include <sysdeps/unix/sysv/linux/i386/getresgid.c>

View File

@@ -0,0 +1 @@
#include <sysdeps/unix/sysv/linux/i386/getresuid.c>

View File

@@ -0,0 +1 @@
#include <sysdeps/unix/sysv/linux/i386/getrlimit64.c>

View File

@@ -0,0 +1,37 @@
/* Determine various system internal values, Linux/m68k version.
Copyright (C) 2003-2014 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Andreas Schwab <schwab@suse.de>
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/>. */
/* We need to define a special parser for /proc/cpuinfo. */
#define GET_NPROCS_PARSER(FD, BUFFER, CP, RE, BUFFER_END, RESULT) \
do \
{ \
(RESULT) = 0; \
/* Read all lines and count the lines starting with the string \
"CPU:". We don't have to fear extremely long lines since \
the kernel will not generate them. 8192 bytes are really \
enough. */ \
char *l; \
while ((l = next_line (FD, BUFFER, &CP, &RE, BUFFER_END)) != NULL) \
if (strncmp (l, "CPU:", 4) == 0) \
++(RESULT); \
} \
while (0)
#include <sysdeps/unix/sysv/linux/getsysstats.c>

View File

@@ -0,0 +1 @@
#include <sysdeps/unix/sysv/linux/i386/getuid.c>

View File

@@ -0,0 +1 @@
#include <sysdeps/unix/sysv/linux/i386/glob64.c>

View File

@@ -0,0 +1,74 @@
/* Initialization code run first thing by the ELF startup code. Linux/m68k.
Copyright (C) 2010-2014 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Maxim Kuvyrkov <maxim@codesourcery.com>, 2010.
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/>. */
/* Note: linking in vDSO to a static binary requires changes to
the main GLIBC proper. Not yet implemented. */
#ifdef SHARED
#include <dl-vdso.h>
#include <bits/m68k-vdso.h>
static inline void
_libc_vdso_platform_setup (void)
{
void *p;
PREPARE_VERSION (linux26, "LINUX_2.6", 61765110);
/* It may happen that rtld didn't initialize the vDSO, so fallback
to the syscall implementations if _dl_vdso_vsym returns NULL.
This may happen when a static executable dlopen's a dynamic library.
This really is nothing more than a workaround for rtld/csu
deficiency. Ideally, init code would setup the vDSO for static
binaries too. */
p = _dl_vdso_vsym ("__kernel_read_tp", &linux26);
if (p != NULL)
{
__vdso_read_tp = p;
__rtld___vdso_read_tp = p;
}
else
assert (__vdso_read_tp == (void *) __vdso_read_tp_stub);
p = _dl_vdso_vsym ("__kernel_atomic_cmpxchg_32", &linux26);
if (p != NULL)
{
__vdso_atomic_cmpxchg_32 = p;
__rtld___vdso_atomic_cmpxchg_32 = p;
}
else
assert (__vdso_atomic_cmpxchg_32
== (void *) __vdso_atomic_cmpxchg_32_stub);
p = _dl_vdso_vsym ("__kernel_atomic_barrier", &linux26);
if (p != NULL)
{
__vdso_atomic_barrier = p;
__rtld___vdso_atomic_barrier = p;
}
else
assert (__vdso_atomic_barrier == (void *) __vdso_atomic_barrier_stub);
}
#define VDSO_SETUP _libc_vdso_platform_setup
#endif /* SHARED */
#include <csu/init-first.c>

View File

@@ -0,0 +1,55 @@
/* Set flags signalling availability of kernel features based on given
kernel version number.
Copyright (C) 2008-2014 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
/* Many syscalls were added in 2.6.10 for m68k. */
#define __ASSUME_UTIMES 1
/* Support for various CLOEXEC and NONBLOCK flags was added 2.6.23. */
#if __LINUX_KERNEL_VERSION >= 0x020617
# define __ASSUME_O_CLOEXEC 1
#endif
/* Support for various CLOEXEC and NONBLOCK flags was added in 2.6.27. */
#if __LINUX_KERNEL_VERSION >= 0x02061b
# define __ASSUME_SOCK_CLOEXEC 1
# define __ASSUME_IN_NONBLOCK 1
# define __ASSUME_PIPE2 1
# define __ASSUME_EVENTFD2 1
# define __ASSUME_SIGNALFD4 1
# define __ASSUME_DUP3 1
#endif
/* Support for the accept4 syscall was added in 2.6.28. */
#if __LINUX_KERNEL_VERSION >= 0x02061c
# define __ASSUME_ACCEPT4 1
#endif
#include_next <kernel-features.h>
/* These syscalls were added only in 3.0 for m68k. */
#if __LINUX_KERNEL_VERSION < 0x030000
# undef __ASSUME_PSELECT
# undef __ASSUME_PPOLL
#endif
/* No support for PI futexes or robust mutexes before 3.10 for m68k. */
#if __LINUX_KERNEL_VERSION < 0x030a00
# undef __ASSUME_REQUEUE_PI
# undef __ASSUME_SET_ROBUST_LIST
#endif

View File

@@ -0,0 +1 @@
#include <sysdeps/unix/sysv/linux/i386/lchown.c>

View File

@@ -0,0 +1 @@
#include <sysdeps/unix/sysv/linux/i386/ldconfig.h>

View File

@@ -0,0 +1,32 @@
/* Run-time dynamic linker data structures for loaded ELF shared objects. M68K.
Copyright (C) 2013-2014 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#ifndef _LDSODEFS_H
/* Get the real definitions. */
#include_next <ldsodefs.h>
/* Now define our stuff. */
/* We need special support to initialize DSO loaded for statically linked
binaries. */
extern void _dl_static_init (struct link_map *map);
#undef DL_STATIC_INIT
#define DL_STATIC_INIT(map) _dl_static_init (map)
#endif /* ldsodefs.h */

View File

@@ -0,0 +1 @@
#include "m68k-vdso.c"

View File

@@ -0,0 +1 @@
#include <sysdeps/unix/sysv/linux/i386/lockf64.c>

View File

@@ -0,0 +1,2 @@
#include <sysdeps/unix/sysv/linux/i386/lxstat.c>

View File

@@ -0,0 +1,3 @@
ifeq ($(subdir),stdlib)
gen-as-const-headers += ucontext_i.sym
endif

View File

@@ -0,0 +1,63 @@
/* Save current context.
Copyright (C) 2012-2014 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <sysdep.h>
#include "ucontext_i.h"
ENTRY(__getcontext)
/* Load address of the context data structure. */
move.l 4(%sp), %a0
/* Save the preserved registers and the return address. */
movem.l %d2-%d7, oGREGS+2*4(%a0)
movem.l %a2-%a6, oGREGS+10*4(%a0)
lea 4(%sp), %a1
move.l %a1, oSP(%a0)
move.l (%sp), oPC(%a0)
fmovem.l %fpsr/%fpcr/%fpiar, oFPREGS(%a0)
fmovem.x %fp2-%fp7, oFP2(%a0)
cfi_def_cfa (%a0, 0)
cfi_offset (%d2, oGREGS+2*4)
cfi_offset (%d3, oGREGS+3*4)
cfi_offset (%pc, oPC)
/* Save the current signal mask. */
lea oSIGMASK(%a0), %a1
move.l %a1, %d3
clr.l %d2
move.l #SIG_SETMASK, %d1
move.l #__NR_sigprocmask, %d0
trap #0
/* Restore registers. */
move.l oGREGS+2*4(%a0), %d2
cfi_restore (%d2)
move.l oGREGS+3*4(%a0), %d3
cfi_restore (%d3)
cfi_def_cfa (%sp, 4)
cfi_offset (%pc, -4)
cmp.l #-4095, %d0 /* Check %d0 for error. */
jcc SYSCALL_ERROR_LABEL /* Jump to error handler. */
0: /* All done, return 0 for success. */
clr.l %d0
rts
PSEUDO_END(__getcontext)
weak_alias (__getcontext, getcontext)

View File

@@ -0,0 +1,100 @@
/* Create new context.
Copyright (C) 2012-2014 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <sysdep.h>
#include "ucontext_i.h"
ENTRY(__makecontext)
move.l 4(%sp), %a0
/* Get the address of the function we are supposed to run. */
move.l 8(%sp), oPC(%a0)
/* Compute the address of the stack. The information comes from
to us_stack element. */
move.l oSS_SP(%a0), %a1
add.l oSS_SIZE(%a0), %a1
/* Remember the number of parameters for the exit handler since
it has to remove them. We store the number in the D7 register
which the function we will call must preserve. */
move.l 12(%sp), %d1
move.l %d1, oGREGS+7*4(%a0)
/* Make room on the new stack for the parameters.
Room for the arguments, return address (== 1f) and
oLINK pointer is needed. */
neg.l %d1
lea -8(%a1,%d1.l*4), %a1
neg.l %d1
/* Store the future stack pointer. */
move.l %a1, oSP(%a0)
/* Put the next context on the new stack (from the uc_link
element). */
move.l oLINK(%a0), 4(%a1,%d1.l*4)
/* Copy all the parameters. */
1: subq.l #1,%d1
jmi 2f
move.l 16(%sp,%d1.l*4), 4(%a1,%d1.l*4)
jra 1b
2:
/* If the function we call returns we must continue with the
context which is given in the uc_link element. To do this
set the return address for the function the user provides
to a little bit of helper code which does the magic (see
below). */
lea 1f(%pc), %a0
move.l %a0, (%a1)
/* 'makecontext' returns no value. */
rts
/* This is the helper code which gets called if a function which
is registered with 'makecontext' returns. In this case we
have to install the context listed in the uc_link element of
the context 'makecontext' manipulated at the time of the
'makecontext' call. If the pointer is NULL the process must
terminate. */
cfi_endproc
1:
/* This removes the parameters passed to the function given to
'makecontext' from the stack. D7 contains the number of
parameters (see above). */
lea (%sp,%d7.l*4), %sp
tst.l (%sp) /* Check the next context. */
jeq 2f /* If it is zero exit. */
jbsr JUMPTARGET(__setcontext)
/* If this returns (which can happen if the syscall fails) we'll
exit the program with the return error value (-1). */
move.l %d0, (%sp)
2: jbsr HIDDEN_JUMPTARGET(exit)
/* The 'exit' call should never return. In case it does cause
the process to terminate. */
illegal
cfi_startproc
END(__makecontext)
weak_alias (__makecontext, makecontext)

View File

@@ -0,0 +1,18 @@
GLIBC_2.0
GLIBC_2.0 A
__libc_memalign F
_r_debug D 0x14
calloc F
free F
malloc F
realloc F
GLIBC_2.1
GLIBC_2.1 A
__libc_stack_end D 0x4
_dl_mcount F
GLIBC_2.3
GLIBC_2.3 A
__tls_get_addr F
GLIBC_2.4
GLIBC_2.4 A
__stack_chk_guard D 0x4

View File

@@ -0,0 +1,3 @@
GLIBC_2.0
GLIBC_2.0 A
__ctype_get_mb_cur_max F

View File

@@ -0,0 +1,6 @@
GLIBC_2.2.3
GLIBC_2.2.3 A
gai_cancel F
gai_error F
gai_suspend F
getaddrinfo_a F

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,9 @@
GLIBC_2.0
GLIBC_2.0 A
crypt F
crypt_r F
encrypt F
encrypt_r F
fcrypt F
setkey F
setkey_r F

View File

@@ -0,0 +1,18 @@
GLIBC_2.0
GLIBC_2.0 A
dladdr F
dlclose F
dlerror F
dlopen F
dlsym F
GLIBC_2.1
GLIBC_2.1 A
dlopen F
dlvsym F
GLIBC_2.3.3
GLIBC_2.3.3 A
dladdr1 F
dlinfo F
GLIBC_2.3.4
GLIBC_2.3.4 A
dlmopen F

View File

@@ -0,0 +1,417 @@
GLIBC_2.0
GLIBC_2.0 A
_LIB_VERSION D 0x4
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
cbrt F
cbrtf F
cbrtl F
ceil F
ceilf F
ceill F
copysign F
copysignf F
copysignl F
cos F
cosf F
cosh F
coshf F
coshl F
cosl F
drem F
dremf F
dreml F
erf F
erfc F
erfcf F
erfcl F
erff F
erfl F
exp F
expf F
expl F
expm1 F
expm1f F
expm1l F
fabs F
fabsf F
fabsl F
finite F
finitef F
finitel F
floor F
floorf F
floorl 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
log F
log10 F
log10f F
log10l F
log1p F
log1pf F
log1pl F
logb F
logbf F
logbl F
logf F
logl F
matherr F
modf F
modff F
modfl F
nextafter F
nextafterf F
nextafterl F
pow F
powf F
powl F
remainder F
remainderf F
remainderl F
rint F
rintf F
rintl F
scalb F
scalbf F
scalbl F
scalbn F
scalbnf F
scalbnl F
signgam D 0x4
significand F
significandf F
significandl F
sin 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
y0 F
y0f F
y0l F
y1 F
y1f F
y1l F
yn F
ynf F
ynl F
GLIBC_2.1
GLIBC_2.1 A
__clog10 F
__clog10f F
__clog10l F
__finite F
__finitef F
__finitel F
__fpclassify F
__fpclassifyf F
__fpclassifyl F
__signbit F
__signbitf F
__signbitl 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
ccos F
ccosf F
ccosh F
ccoshf F
ccoshl F
ccosl 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
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
exp10 F
exp10f F
exp10l F
exp2 F
exp2f F
exp2l F
fdim F
fdimf F
fdiml F
feclearexcept F
fegetenv F
fegetexceptflag F
fegetround F
feholdexcept F
feraiseexcept F
fesetenv F
fesetexceptflag F
fesetround F
fetestexcept F
feupdateenv F
fma F
fmaf F
fmal F
fmax F
fmaxf F
fmaxl F
fmin F
fminf F
fminl F
llrint F
llrintf F
llrintl F
llround F
llroundf F
llroundl F
log2 F
log2f F
log2l F
lrint F
lrintf F
lrintl F
lround F
lroundf F
lroundl F
nan F
nanf F
nanl F
nearbyint F
nearbyintf F
nearbyintl F
nexttoward F
nexttowardf F
nexttowardl F
pow10 F
pow10f F
pow10l F
remquo F
remquof F
remquol F
round F
roundf F
roundl F
scalbln F
scalblnf F
scalblnl F
sincos F
sincosf F
sincosl F
tgamma F
tgammaf F
tgammal F
trunc F
truncf F
truncl F
GLIBC_2.15
GLIBC_2.15 A
__acos_finite F
__acosf_finite F
__acosh_finite F
__acoshf_finite F
__acoshl_finite F
__acosl_finite F
__asin_finite F
__asinf_finite F
__asinl_finite F
__atan2_finite F
__atan2f_finite F
__atan2l_finite F
__atanh_finite F
__atanhf_finite F
__atanhl_finite F
__cosh_finite F
__coshf_finite F
__coshl_finite F
__exp10_finite F
__exp10f_finite F
__exp10l_finite F
__exp2_finite F
__exp2f_finite F
__exp2l_finite F
__exp_finite F
__expf_finite F
__expl_finite F
__fmod_finite F
__fmodf_finite F
__fmodl_finite F
__gamma_r_finite F
__gammaf_r_finite F
__gammal_r_finite F
__hypot_finite F
__hypotf_finite F
__hypotl_finite F
__j0_finite F
__j0f_finite F
__j0l_finite F
__j1_finite F
__j1f_finite F
__j1l_finite F
__jn_finite F
__jnf_finite F
__jnl_finite F
__lgamma_r_finite F
__lgammaf_r_finite F
__lgammal_r_finite F
__log10_finite F
__log10f_finite F
__log10l_finite F
__log2_finite F
__log2f_finite F
__log2l_finite F
__log_finite F
__logf_finite F
__logl_finite F
__pow_finite F
__powf_finite F
__powl_finite F
__remainder_finite F
__remainderf_finite F
__remainderl_finite F
__scalb_finite F
__scalbf_finite F
__scalbl_finite F
__sinh_finite F
__sinhf_finite F
__sinhl_finite F
__sqrt_finite F
__sqrtf_finite F
__sqrtl_finite F
__y0_finite F
__y0f_finite F
__y0l_finite F
__y1_finite F
__y1f_finite F
__y1l_finite F
__yn_finite F
__ynf_finite F
__ynl_finite F
GLIBC_2.18
GLIBC_2.18 A
__issignaling F
__issignalingf F
__issignalingl F
GLIBC_2.2
GLIBC_2.2 A
feclearexcept F
fedisableexcept F
feenableexcept F
fegetenv F
fegetexcept F
fegetexceptflag F
feraiseexcept F
fesetenv F
fesetexceptflag F
feupdateenv F
GLIBC_2.4
GLIBC_2.4 A

View File

@@ -0,0 +1,127 @@
GLIBC_2.0
GLIBC_2.0 A
__yp_check F
xdr_domainname F
xdr_keydat F
xdr_mapname F
xdr_peername F
xdr_valdat F
xdr_yp_buf 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
GLIBC_2.1
GLIBC_2.1 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
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_obj_p F
GLIBC_2.2
GLIBC_2.2 A
xdr_ypall F

View File

@@ -0,0 +1,271 @@
GLIBC_2.0
GLIBC_2.0 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
__lseek F
__open 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_setspecific F
__read 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
msync F
nanosleep F
open F
pause F
pthread_atfork F
pthread_attr_destroy F
pthread_attr_getdetachstate F
pthread_attr_getinheritsched F
pthread_attr_getschedparam F
pthread_attr_getschedpolicy F
pthread_attr_getscope F
pthread_attr_init F
pthread_attr_setdetachstate F
pthread_attr_setinheritsched F
pthread_attr_setschedparam F
pthread_attr_setschedpolicy F
pthread_attr_setscope 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_init F
pthread_create F
pthread_detach F
pthread_equal F
pthread_exit 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_destroy F
pthread_mutex_init F
pthread_mutex_lock F
pthread_mutex_trylock F
pthread_mutex_unlock F
pthread_mutexattr_destroy F
pthread_mutexattr_getkind_np F
pthread_mutexattr_init F
pthread_mutexattr_setkind_np F
pthread_once F
pthread_self F
pthread_setcancelstate F
pthread_setcanceltype F
pthread_setschedparam F
pthread_setspecific F
pthread_sigmask F
pthread_testcancel F
raise F
read F
recv F
recvfrom F
recvmsg F
sem_destroy F
sem_getvalue F
sem_init F
sem_post F
sem_trywait F
sem_wait F
send F
sendmsg F
sendto F
sigaction F
siglongjmp F
sigwait F
system F
tcdrain F
vfork F
wait F
waitpid F
write F
GLIBC_2.1
GLIBC_2.1 A
__libc_allocate_rtsig F
__libc_current_sigrtmax F
__libc_current_sigrtmin F
pthread_attr_getguardsize F
pthread_attr_getstackaddr F
pthread_attr_getstacksize F
pthread_attr_init F
pthread_attr_setguardsize F
pthread_attr_setstackaddr F
pthread_attr_setstacksize F
pthread_create F
pthread_getconcurrency F
pthread_mutexattr_gettype F
pthread_mutexattr_settype 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_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_setconcurrency F
sem_destroy F
sem_getvalue F
sem_init F
sem_post F
sem_trywait F
sem_wait F
GLIBC_2.1.1
GLIBC_2.1.1 A
sem_close F
sem_open F
sem_unlink F
GLIBC_2.1.2
GLIBC_2.1.2 A
__vfork F
GLIBC_2.11
GLIBC_2.11 A
pthread_sigqueue F
GLIBC_2.12
GLIBC_2.12 A
pthread_getname_np F
pthread_mutex_consistent F
pthread_mutexattr_getrobust F
pthread_mutexattr_setrobust F
pthread_setname_np F
GLIBC_2.18
GLIBC_2.18 A
pthread_getattr_default_np F
pthread_setattr_default_np F
GLIBC_2.2
GLIBC_2.2 A
__open64 F
__pread64 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
__pwrite64 F
__res_state F
lseek64 F
open64 F
pread F
pread64 F
pthread_attr_getstack F
pthread_attr_setstack F
pthread_barrier_destroy F
pthread_barrier_init F
pthread_barrier_wait F
pthread_barrierattr_destroy F
pthread_barrierattr_init F
pthread_barrierattr_setpshared F
pthread_condattr_getpshared F
pthread_condattr_setpshared F
pthread_getcpuclockid F
pthread_mutex_timedlock F
pthread_mutexattr_getpshared F
pthread_mutexattr_setpshared F
pthread_rwlock_timedrdlock F
pthread_rwlock_timedwrlock F
pthread_spin_destroy F
pthread_spin_init F
pthread_spin_lock F
pthread_spin_trylock F
pthread_spin_unlock F
pthread_yield F
pwrite F
pwrite64 F
sem_timedwait F
GLIBC_2.2.3
GLIBC_2.2.3 A
pthread_getattr_np F
GLIBC_2.2.6
GLIBC_2.2.6 A
__nanosleep F
GLIBC_2.3.2
GLIBC_2.3.2 A
pthread_cond_broadcast F
pthread_cond_destroy F
pthread_cond_init F
pthread_cond_signal F
pthread_cond_timedwait F
pthread_cond_wait F
GLIBC_2.3.3
GLIBC_2.3.3 A
__pthread_cleanup_routine F
__pthread_register_cancel F
__pthread_register_cancel_defer F
__pthread_unregister_cancel F
__pthread_unregister_cancel_restore F
__pthread_unwind_next F
pthread_attr_getaffinity_np F
pthread_attr_setaffinity_np F
pthread_barrierattr_getpshared F
pthread_condattr_getclock F
pthread_condattr_setclock F
pthread_getaffinity_np F
pthread_setaffinity_np F
pthread_timedjoin_np F
pthread_tryjoin_np F
GLIBC_2.3.4
GLIBC_2.3.4 A
pthread_attr_getaffinity_np F
pthread_attr_setaffinity_np F
pthread_getaffinity_np F
pthread_setaffinity_np F
pthread_setschedprio F
GLIBC_2.4
GLIBC_2.4 A
pthread_mutex_consistent_np F
pthread_mutex_getprioceiling F
pthread_mutex_setprioceiling F
pthread_mutexattr_getprioceiling F
pthread_mutexattr_getprotocol F
pthread_mutexattr_getrobust_np F
pthread_mutexattr_setprioceiling F
pthread_mutexattr_setprotocol F
pthread_mutexattr_setrobust_np F

View File

@@ -0,0 +1,104 @@
GLIBC_2.0
GLIBC_2.0 A
__b64_ntop F
__b64_pton F
__dn_comp F
__dn_count_labels 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_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_isourserver F
__res_mailok F
__res_nameinquery F
__res_ownok F
__res_queriesmatch 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
dn_expand F
inet_net_ntop F
inet_net_pton F
inet_neta F
res_gethostbyaddr F
res_gethostbyname F
res_gethostbyname2 F
res_mkquery F
res_query F
res_querydomain F
res_search F
res_send_setqhook F
res_send_setrhook F
GLIBC_2.2
GLIBC_2.2 A
__dn_expand F
__res_hostalias F
__res_mkquery F
__res_nmkquery F
__res_nquery F
__res_nquerydomain F
__res_nsearch F
__res_nsend F
__res_query F
__res_querydomain F
__res_search F
GLIBC_2.3.2
GLIBC_2.3.2 A
__p_rcode F
GLIBC_2.9
GLIBC_2.9 A
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

View File

@@ -0,0 +1,52 @@
GLIBC_2.1
GLIBC_2.1 A
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
GLIBC_2.2
GLIBC_2.2 A
clock_getcpuclockid F
clock_getres F
clock_gettime F
clock_nanosleep F
clock_settime F
shm_open F
shm_unlink F
timer_create F
timer_delete F
timer_getoverrun F
timer_gettime F
timer_settime F
GLIBC_2.3.4
GLIBC_2.3.4 A
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
GLIBC_2.4
GLIBC_2.4 A
lio_listio F
lio_listio64 F
GLIBC_2.7
GLIBC_2.7 A
__mq_open_2 F

View File

@@ -0,0 +1,48 @@
GLIBC_2.1.3
GLIBC_2.1.3 A
td_init F
td_log 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_tsd F
td_thr_validate F
GLIBC_2.2.3
GLIBC_2.2.3 A
td_symbol_list F
GLIBC_2.3
GLIBC_2.3 A
td_thr_tls_get_addr F
GLIBC_2.3.3
GLIBC_2.3.3 A
td_thr_tlsbase F

View File

@@ -0,0 +1,8 @@
GLIBC_2.0
GLIBC_2.0 A
forkpty F
login F
login_tty F
logout F
logwtmp F
openpty F

View File

@@ -0,0 +1,94 @@
/* Install given context.
Copyright (C) 2012-2014 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <sysdep.h>
#include "ucontext_i.h"
ENTRY(__setcontext)
/* Load address of the context data structure. */
move.l 4(%sp), %a0
/* Get the current signal mask. Note that we preserve D2/D3 in case
the system call fails and we return from the function with an
error. */
move.l %d3, -(%sp)
cfi_adjust_cfa_offset (4)
cfi_rel_offset (%d3, 0)
move.l %d2, -(%sp)
cfi_adjust_cfa_offset (4)
cfi_rel_offset (%d2, 0)
clr.l %d3
lea oSIGMASK(%a0), %a1
move.l %a1, %d2
move.l #SIG_SETMASK, %d1
move.l #__NR_sigprocmask, %d0
trap #0
cmp.l #-4095, %d0 /* Check %d0 for error. */
jcs 0f
move.l (%sp)+, %d2
cfi_adjust_cfa_offset (-4)
cfi_restore (d2)
move.l (%sp)+, %d3
cfi_adjust_cfa_offset (-4)
cfi_restore (d3)
jra SYSCALL_ERROR_LABEL /* Jump to error handler if error. */
0: /* Load the new stack pointer. */
move.l oSP(%a0), %sp
cfi_def_cfa (%a0, 0)
cfi_offset (%d2, oGREGS+2*4)
cfi_offset (%d3, oGREGS+3*4)
cfi_offset (%d4, oGREGS+4*4)
cfi_offset (%d5, oGREGS+5*4)
cfi_offset (%d6, oGREGS+6*4)
cfi_offset (%d7, oGREGS+7*4)
cfi_offset (%a2, oGREGS+10*4)
cfi_offset (%a3, oGREGS+11*4)
cfi_offset (%a4, oGREGS+12*4)
cfi_offset (%a5, oGREGS+13*4)
cfi_offset (%a6, oGREGS+14*4)
cfi_offset (%fp2, oFP2+0*12)
cfi_offset (%fp3, oFP2+1*12)
cfi_offset (%fp4, oFP2+2*12)
cfi_offset (%fp5, oFP2+3*12)
cfi_offset (%fp6, oFP2+4*12)
cfi_offset (%fp7, oFP2+5*12)
cfi_offset (%pc, oPC)
/* Load the values of all the preserved registers (except SP). */
movem.l oGREGS+2*4(%a0), %d2-%d7
movem.l oGREGS+10*4(%a0), %a2-%a6
fmovem.l oFPREGS(%a0), %fpsr/%fpcr/%fpiar
fmovem.x oFP2(%a0), %fp2-%fp7
clr.l %d0
/* Fetch the address to return to. */
movl oPC(%a0), %a1
/* End FDE here, we fall into another context. */
cfi_endproc
cfi_startproc
cfi_register (%pc, %a1)
jmp (%a1)
cfi_offset (%pc, -4)
PSEUDO_END(__setcontext)
weak_alias (__setcontext, setcontext)

View File

@@ -0,0 +1,108 @@
/* Save current context and install the given one.
Copyright (C) 2012-2014 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <sysdep.h>
#include "ucontext_i.h"
ENTRY(__swapcontext)
/* Load address of the context data structure we save in. */
move.l 4(%sp), %a0
/* Save the preserved registers and the return address. */
movem.l %d2-%d7, oGREGS+2*4(%a0)
movem.l %a2-%a6, oGREGS+10*4(%a0)
lea 4(%sp), %a1
move.l %a1, oSP(%a0)
move.l (%sp), oPC(%a0)
fmovem.l %fpsr/%fpcr/%fpiar, oFPREGS(%a0)
fmovem.x %fp2-%fp7, oFP2(%a0)
cfi_def_cfa (%a0, 0)
cfi_offset (%d2, oGREGS+2*4)
cfi_offset (%d3, oGREGS+3*4)
cfi_offset (%a2, oGREGS+10*4)
cfi_offset (%pc, oPC)
/* Load address of the context data structure we have to load. */
move.l 8(%sp), %a1
/* Save the current signal mask and install the new one. */
lea oSIGMASK(%a0), %a2
move.l %a2, %d3
lea oSIGMASK(%a1), %a2
move.l %a2, %d2
move.l #SIG_SETMASK, %d1
move.l #__NR_sigprocmask, %d0
trap #0
cmp.l #-4095, %d0 /* Check %d0 for error. */
jcs 0f
/* Restore registers. */
move.l oGREGS+2*4(%a0), %d2
cfi_restore (%d2)
move.l oGREGS+3*4(%a0), %d3
cfi_restore (%d3)
move.l oGREGS+10*4(%a0), %a2
cfi_restore (%a2)
jra SYSCALL_ERROR_LABEL /* Jump to error handler. */
0: /* Load the new stack pointer. */
move.l oSP(%a1), %sp
cfi_def_cfa (%a1, 0)
cfi_offset (%d2, oGREGS+2*4)
cfi_offset (%d3, oGREGS+3*4)
cfi_offset (%d4, oGREGS+4*4)
cfi_offset (%d5, oGREGS+5*4)
cfi_offset (%d6, oGREGS+6*4)
cfi_offset (%d7, oGREGS+7*4)
cfi_offset (%a2, oGREGS+10*4)
cfi_offset (%a3, oGREGS+11*4)
cfi_offset (%a4, oGREGS+12*4)
cfi_offset (%a5, oGREGS+13*4)
cfi_offset (%a6, oGREGS+14*4)
cfi_offset (%fp2, oFP2+0*12)
cfi_offset (%fp3, oFP2+1*12)
cfi_offset (%fp4, oFP2+2*12)
cfi_offset (%fp5, oFP2+3*12)
cfi_offset (%fp6, oFP2+4*12)
cfi_offset (%fp7, oFP2+5*12)
cfi_offset (%pc, oPC)
/* Load the values of all the preserved registers (except SP). */
movem.l oGREGS+2*4(%a1), %d2-%d7
movem.l oGREGS+10*4(%a1), %a2-%a6
fmovem.l oFPREGS(%a1), %fpsr/%fpcr/%fpiar
fmovem.x oFP2(%a1), %fp2-%fp7
/* Clear D0 to indicate success. */
clr.l %d0
/* Fetch the address to return to. */
move.l oPC(%a1), %a0
/* End FDE here, we fall into another context. */
cfi_endproc
cfi_startproc
cfi_register (%pc, %a0)
jmp (%a0)
cfi_offset (%pc, -4)
PSEUDO_END(__swapcontext)
weak_alias (__swapcontext, swapcontext)

View File

@@ -0,0 +1,4 @@
# File name Caller Syscall name Args Strong name Weak names
oldgetrlimit EXTRA getrlimit i:ip __old_getrlimit getrlimit@GLIBC_2.0
oldsetrlimit EXTRA setrlimit i:ip __old_setrlimit setrlimit@GLIBC_2.0

View File

@@ -0,0 +1,28 @@
/* Copyright (C) 2010-2014 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
#ifndef _LINUX_M68K_M680X0_SYSDEP_H
#define _LINUX_M68K_M680X0_SYSDEP_H 1
#include <sysdeps/unix/sysdep.h>
#include <sysdeps/m68k/m680x0/sysdep.h>
#include <sysdeps/unix/sysv/linux/m68k/sysdep.h>
#define SYSCALL_ERROR_LOAD_GOT(reg) \
lea (_GLOBAL_OFFSET_TABLE_@GOTPC, %pc), reg
#endif

View File

@@ -0,0 +1,20 @@
#include <stddef.h>
#include <signal.h>
#include <sys/ucontext.h>
--
SIG_SETMASK
#define ucontext(member) offsetof (ucontext_t, member)
#define mcontext(member) ucontext (uc_mcontext.member)
oLINK ucontext (uc_link)
oSS_SP ucontext (uc_stack.ss_sp)
oSS_SIZE ucontext (uc_stack.ss_size)
oGREGS mcontext (gregs)
oSP mcontext (gregs[R_SP])
oPC mcontext (gregs[R_PC])
oFPREGS mcontext (fpregs)
oFP2 mcontext (fpregs.f_fpregs[2])
oSIGMASK ucontext (uc_sigmask)

View File

@@ -0,0 +1,95 @@
/* Copyright (C) 2010-2014 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Maxim Kuvyrkov <maxim@codesourcery.com>, 2010.
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/>. */
#include <sysdep.h>
#include <bits/m68k-vdso.h>
.text
.hidden __vdso_read_tp_stub
ENTRY (__vdso_read_tp_stub)
move.l #__NR_get_thread_area, %d0
trap #0
move.l %d0, %a0
rts
END (__vdso_read_tp_stub)
# ifdef SHARED
/* GCC will emit calls to this routine. Linux has an
equivalent helper function (which clobbers fewer registers than
a normal function call) in a vdso; tail call to the
helper. */
# ifdef IS_IN_rtld
/* rtld gets a hidden copy of __m68k_read_tp. */
.hidden __m68k_read_tp
# endif
ENTRY (__m68k_read_tp)
LOAD_GOT (%a0)
move.l M68K_VDSO_SYMBOL (__vdso_read_tp)@GOT(%a0), %a0
move.l (%a0), %a0
jmp (%a0)
END (__m68k_read_tp)
/* The following two stubs are for macros in atomic.h, they can't
clobber anything. */
.hidden __vdso_atomic_cmpxchg_32_stub
ENTRY (__vdso_atomic_cmpxchg_32_stub)
move.l %d2, -(%sp)
cfi_adjust_cfa_offset (4)
cfi_rel_offset (%d2, 0)
move.l %d0, %d2
move.l #SYS_ify (atomic_cmpxchg_32), %d0
trap #0
move.l (%sp)+, %d2
cfi_adjust_cfa_offset (-4)
cfi_restore (%d2)
rts
END (__vdso_atomic_cmpxchg_32_stub)
.hidden __vdso_atomic_barrier_stub
ENTRY (__vdso_atomic_barrier_stub)
move.l %d0, -(%sp)
cfi_adjust_cfa_offset (4)
move.l #SYS_ify (atomic_barrier), %d0
trap #0
move.l (%sp)+, %d0
cfi_adjust_cfa_offset (-4)
rts
END (__vdso_atomic_barrier_stub)
# else /* !SHARED */
/* If the vDSO is not available, use a syscall to get TP. */
strong_alias (__vdso_read_tp_stub, __m68k_read_tp)
# endif /* SHARED */

View File

@@ -0,0 +1,34 @@
/* Copyright (C) 2010-2014 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Maxim Kuvyrkov <maxim@codesourcery.com>, 2010.
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/>. */
#ifdef SHARED
#include <bits/m68k-vdso.h>
/* Because these pointers are used from other libraries than libc,
they are exported at GLIBC_PRIVATE version.
We initialize them to syscall implementation so that they will be ready
to use from the very beginning. */
void * M68K_VDSO_SYMBOL (__vdso_read_tp)
= (void *) __vdso_read_tp_stub;
void * M68K_VDSO_SYMBOL (__vdso_atomic_cmpxchg_32)
= (void *) __vdso_atomic_cmpxchg_32_stub;
void * M68K_VDSO_SYMBOL (__vdso_atomic_barrier)
= (void *) __vdso_atomic_barrier_stub;
#endif /* SHARED */

View File

@@ -0,0 +1,42 @@
/* Copyright (C) 1996-2014 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
#include <sysdep.h>
.text
ENTRY (__mmap)
move.l #SYS_ify (mmap), %d0 /* System call number in %d0. */
lea 4(%sp), %a0 /* Address of args is 1st arg. */
move.l %a0, %d1
/* Do the system call trap. */
trap #0
/* Kludge: negative numbers are among the legal return values.
If %d0 is between -4096 and 0 then there was an error. */
cmp.l #-4096, %d0
jhi SYSCALL_ERROR_LABEL
/* Successful; return the syscall's value. Copy it to %a0 because
mmap is declared to return a pointer. */
move.l %d0, %a0
rts
PSEUDO_END (__mmap)
weak_alias (__mmap, mmap)

View File

@@ -0,0 +1,5 @@
/* ColdFire and Sun 3 kernels have PAGE_SHIFT set to 13 and expect
mmap2 offset to be provided in 8K pages. Determine the shift
dynamically with getpagesize. */
#define MMAP2_PAGE_SHIFT -1
#include <sysdeps/unix/sysv/linux/mmap64.c>

View File

@@ -0,0 +1,28 @@
/* Copyright (C) 1996-2014 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */
#include <sysdep.h>
/* The mremap system call is special because it needs to return
its value in register %a0. */
.text
PSEUDO (__mremap, mremap, 5)
move.l %d0, %a0
rts
PSEUDO_END (__mremap)
weak_alias (__mremap, mremap)

View File

@@ -0,0 +1 @@
#include <sysdeps/unix/sysv/linux/i386/msgctl.c>

View File

@@ -0,0 +1,175 @@
/* Copyright (C) 2010-2014 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Maxim Kuvyrkov <maxim@codesourcery.com>, 2010.
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 __attribute__ ((__aligned__ (4)));
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];
int __align;
} pthread_mutexattr_t;
/* Data structure for conditional variable handling. The structure of
the attribute type is deliberately not exposed. */
typedef union
{
struct
{
int __lock __attribute__ ((__aligned__ (4)));
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];
int __align;
} pthread_condattr_t;
/* Keys for thread-specific data */
typedef unsigned int pthread_key_t;
/* Once-only execution */
typedef int __attribute__ ((__aligned__ (4))) 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 __attribute__ ((__aligned__ (4)));
unsigned int __nr_readers;
unsigned int __readers_wakeup;
unsigned int __writer_wakeup;
unsigned int __nr_readers_queued;
unsigned int __nr_writers_queued;
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;
int __writer;
} __data;
char __size[__SIZEOF_PTHREAD_RWLOCK_T];
long int __align;
} pthread_rwlock_t;
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 __attribute__ ((__aligned__ (4)));
} pthread_barrier_t;
typedef union
{
char __size[__SIZEOF_PTHREAD_BARRIERATTR_T];
int __align;
} pthread_barrierattr_t;
#endif
#endif /* bits/pthreadtypes.h */

View File

@@ -0,0 +1,35 @@
/* Copyright (C) 2010-2014 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Maxim Kuvyrkov <maxim@codesourcery.com>, 2010.
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 __attribute__ ((__aligned__ (4)));
} sem_t;

View File

@@ -0,0 +1,67 @@
blkcnt64_t:x
blkcnt_t:l
blksize_t:l
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

View File

@@ -0,0 +1,2 @@
#define RESET_PID
#include "../clone.S"

View File

@@ -0,0 +1,24 @@
/* Copyright (C) 2010-2014 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Maxim Kuvyrkov <maxim@codesourcery.com>, 2010.
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/>. */
/* Value passed to 'clone' for initialization of the thread register. */
#define TLS_VALUE ((void *) (pd) \
+ TLS_TCB_OFFSET + TLS_PRE_TCB_SIZE)
/* Get the real implementation. */
#include <nptl/sysdeps/pthread/createthread.c>

View File

@@ -0,0 +1,29 @@
/* Copyright (C) 2010-2014 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Maxim Kuvyrkov <maxim@codesourcery.com>, 2010.
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>
#define ARCH_FORK() \
INLINE_SYSCALL (clone, 5, \
CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHLD, 0, \
NULL, &THREAD_SELF->tid, NULL)
#include <sysdeps/unix/sysv/linux/fork.c>

View File

@@ -0,0 +1,8 @@
libc.so: _Unwind_Find_FDE
libc.so: __m68k_read_tp
libc.so: calloc
libc.so: free
libc.so: malloc
libc.so: memalign
libc.so: realloc
libm.so: matherr

View File

@@ -0,0 +1,320 @@
/* Copyright (C) 2010-2014 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Maxim Kuvyrkov <maxim@codesourcery.com>, 2010.
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/>. */
/* Borrowed from ARM's version. */
#ifndef _LOWLEVELLOCK_H
#define _LOWLEVELLOCK_H 1
#include <time.h>
#include <sys/param.h>
#include <bits/pthreadtypes.h>
#include <atomic.h>
#include <kernel-features.h>
#define FUTEX_WAIT 0
#define FUTEX_WAKE 1
#define FUTEX_REQUEUE 3
#define FUTEX_CMP_REQUEUE 4
#define FUTEX_WAKE_OP 5
#define FUTEX_OP_CLEAR_WAKE_IF_GT_ONE ((4 << 24) | 1)
#define FUTEX_LOCK_PI 6
#define FUTEX_UNLOCK_PI 7
#define FUTEX_TRYLOCK_PI 8
#define FUTEX_WAIT_BITSET 9
#define FUTEX_WAKE_BITSET 10
#define FUTEX_WAIT_REQEUE_PI 11
#define FUTEX_CMP_REQEUE_PI 12
#define FUTEX_PRIVATE_FLAG 128
#define FUTEX_CLOCK_REALTIME 256
#define FUTEX_BITSET_MATCH_ANY 0xffffffff
/* Values for 'private' parameter of locking macros. Yes, the
definition seems to be backwards. But it is not. The bit will be
reversed before passing to the system call. */
#define LLL_PRIVATE 0
#define LLL_SHARED FUTEX_PRIVATE_FLAG
#if !defined NOT_IN_libc || defined IS_IN_rtld
/* In libc.so or ld.so all futexes are private. */
# ifdef __ASSUME_PRIVATE_FUTEX
# define __lll_private_flag(fl, private) \
((fl) | FUTEX_PRIVATE_FLAG)
# else
# define __lll_private_flag(fl, private) \
((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex))
# endif
#else
# ifdef __ASSUME_PRIVATE_FUTEX
# define __lll_private_flag(fl, private) \
(((fl) | FUTEX_PRIVATE_FLAG) ^ (private))
# else
# define __lll_private_flag(fl, private) \
(__builtin_constant_p (private) \
? ((private) == 0 \
? ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex)) \
: (fl)) \
: ((fl) | (((private) ^ FUTEX_PRIVATE_FLAG) \
& THREAD_GETMEM (THREAD_SELF, header.private_futex))))
# endif
#endif
#define lll_futex_wait(futexp, val, private) \
lll_futex_timed_wait(futexp, val, NULL, private)
#define lll_futex_timed_wait(futexp, val, timespec, private) \
({ \
INTERNAL_SYSCALL_DECL (__err); \
long int __ret; \
__ret = INTERNAL_SYSCALL (futex, __err, 4, (futexp), \
__lll_private_flag (FUTEX_WAIT, private), \
(val), (timespec)); \
__ret; \
})
#define lll_futex_timed_wait_bitset(futexp, val, timespec, clockbit, private) \
({ \
INTERNAL_SYSCALL_DECL (__err); \
long int __ret; \
int __op = FUTEX_WAIT_BITSET | clockbit; \
__ret = INTERNAL_SYSCALL (futex, __err, 6, (long) (futexp), \
__lll_private_flag (__op, private), \
(val), (timespec), NULL /* Unused. */, \
FUTEX_BITSET_MATCH_ANY); \
__ret; \
})
#define lll_futex_wake(futexp, nr, private) \
({ \
INTERNAL_SYSCALL_DECL (__err); \
long int __ret; \
__ret = INTERNAL_SYSCALL (futex, __err, 4, (futexp), \
__lll_private_flag (FUTEX_WAKE, private), \
(nr), 0); \
__ret; \
})
#define lll_robust_dead(futexv, private) \
do \
{ \
int *__futexp = &(futexv); \
atomic_or (__futexp, FUTEX_OWNER_DIED); \
lll_futex_wake (__futexp, 1, private); \
} \
while (0)
/* Returns non-zero if error happened, zero if success. */
#define lll_futex_requeue(futexp, nr_wake, nr_move, mutex, val, private) \
({ \
INTERNAL_SYSCALL_DECL (__err); \
long int __ret; \
__ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp), \
__lll_private_flag (FUTEX_CMP_REQUEUE, private),\
(nr_wake), (nr_move), (mutex), (val)); \
INTERNAL_SYSCALL_ERROR_P (__ret, __err); \
})
/* Returns non-zero if error happened, zero if success. */
#define lll_futex_wake_unlock(futexp, nr_wake, nr_wake2, futexp2, private) \
({ \
INTERNAL_SYSCALL_DECL (__err); \
long int __ret; \
__ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp), \
__lll_private_flag (FUTEX_WAKE_OP, private), \
(nr_wake), (nr_wake2), (futexp2), \
FUTEX_OP_CLEAR_WAKE_IF_GT_ONE); \
INTERNAL_SYSCALL_ERROR_P (__ret, __err); \
})
/* Priority Inheritance support. */
#define lll_futex_wait_requeue_pi(futexp, val, mutex, private) \
lll_futex_timed_wait_requeue_pi (futexp, val, NULL, 0, mutex, private)
#define lll_futex_timed_wait_requeue_pi(futexp, val, timespec, clockbit, \
mutex, private) \
({ \
INTERNAL_SYSCALL_DECL (__err); \
long int __ret; \
int __op = FUTEX_WAIT_REQUEUE_PI | clockbit; \
\
__ret = INTERNAL_SYSCALL (futex, __err, 5, (futexp), \
__lll_private_flag (__op, private), \
(val), (timespec), mutex); \
__ret; \
})
#define lll_futex_cmp_requeue_pi(futexp, nr_wake, nr_move, mutex, val, priv) \
({ \
INTERNAL_SYSCALL_DECL (__err); \
long int __ret; \
__ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp), \
__lll_private_flag (FUTEX_CMP_REQUEUE_PI, priv),\
(nr_wake), (nr_move), (mutex), (val)); \
INTERNAL_SYSCALL_ERROR_P (__ret, __err); \
})
#define lll_trylock(lock) \
atomic_compare_and_exchange_val_acq (&(lock), 1, 0)
#define lll_cond_trylock(lock) \
atomic_compare_and_exchange_val_acq (&(lock), 2, 0)
#define lll_robust_trylock(lock, id) \
atomic_compare_and_exchange_val_acq (&(lock), id, 0)
extern void __lll_lock_wait_private (int *futex) attribute_hidden;
extern void __lll_lock_wait (int *futex, int private) attribute_hidden;
extern int __lll_robust_lock_wait (int *futex, int private) attribute_hidden;
#define __lll_lock(futex, private) \
((void) ({ \
int *__futex = (futex); \
if (__builtin_expect (atomic_compare_and_exchange_val_acq (__futex, \
1, 0), 0)) \
{ \
if (__builtin_constant_p (private) && (private) == LLL_PRIVATE) \
__lll_lock_wait_private (__futex); \
else \
__lll_lock_wait (__futex, private); \
} \
}))
#define lll_lock(futex, private) __lll_lock (&(futex), private)
#define __lll_robust_lock(futex, id, private) \
({ \
int *__futex = (futex); \
int __val = 0; \
\
if (__builtin_expect (atomic_compare_and_exchange_bool_acq (__futex, id, \
0), 0)) \
__val = __lll_robust_lock_wait (__futex, private); \
__val; \
})
#define lll_robust_lock(futex, id, private) \
__lll_robust_lock (&(futex), id, private)
#define __lll_cond_lock(futex, private) \
((void) ({ \
int *__futex = (futex); \
if (__builtin_expect (atomic_exchange_acq (__futex, 2), 0)) \
__lll_lock_wait (__futex, private); \
}))
#define lll_cond_lock(futex, private) __lll_cond_lock (&(futex), private)
#define lll_robust_cond_lock(futex, id, private) \
__lll_robust_lock (&(futex), (id) | FUTEX_WAITERS, private)
extern int __lll_timedlock_wait (int *futex, const struct timespec *,
int private) attribute_hidden;
extern int __lll_robust_timedlock_wait (int *futex, const struct timespec *,
int private) attribute_hidden;
#define __lll_timedlock(futex, abstime, private) \
({ \
int *__futex = (futex); \
int __val = 0; \
\
if (__builtin_expect (atomic_exchange_acq (__futex, 1), 0)) \
__val = __lll_timedlock_wait (__futex, abstime, private); \
__val; \
})
#define lll_timedlock(futex, abstime, private) \
__lll_timedlock (&(futex), abstime, private)
#define __lll_robust_timedlock(futex, abstime, id, private) \
({ \
int *__futex = (futex); \
int __val = 0; \
\
if (__builtin_expect (atomic_compare_and_exchange_bool_acq (__futex, id, \
0), 0)) \
__val = __lll_robust_timedlock_wait (__futex, abstime, private); \
__val; \
})
#define lll_robust_timedlock(futex, abstime, id, private) \
__lll_robust_timedlock (&(futex), abstime, id, private)
#define __lll_unlock(futex, private) \
(void) \
({ int *__futex = (futex); \
int __oldval = atomic_exchange_rel (__futex, 0); \
if (__builtin_expect (__oldval > 1, 0)) \
lll_futex_wake (__futex, 1, private); \
})
#define lll_unlock(futex, private) __lll_unlock(&(futex), private)
#define __lll_robust_unlock(futex, private) \
(void) \
({ int *__futex = (futex); \
int __oldval = atomic_exchange_rel (__futex, 0); \
if (__builtin_expect (__oldval & FUTEX_WAITERS, 0)) \
lll_futex_wake (__futex, 1, private); \
})
#define lll_robust_unlock(futex, private) \
__lll_robust_unlock(&(futex), private)
#define lll_islocked(futex) \
(futex != 0)
/* Our internal lock implementation is identical to the binary-compatible
mutex implementation. */
/* Initializers for lock. */
#define LLL_LOCK_INITIALIZER (0)
#define LLL_LOCK_INITIALIZER_LOCKED (1)
/* The states of a lock are:
0 - untaken
1 - taken by one user
>1 - taken by more users */
/* The kernel notifies a process which uses CLONE_CHILD_CLEARTID via futex
wakeup when the clone terminates. The memory location contains the
thread ID while the clone is running and is reset to zero
afterwards. */
#define lll_wait_tid(tid) \
do { \
__typeof (tid) __tid; \
while ((__tid = (tid)) != 0) \
lll_futex_wait (&(tid), __tid, LLL_SHARED); \
} while (0)
extern int __lll_timedwait_tid (int *, const struct timespec *)
attribute_hidden;
#define lll_timedwait_tid(tid, abstime) \
({ \
int __res = 0; \
if ((tid) != 0) \
__res = __lll_timedwait_tid (&(tid), (abstime)); \
__res; \
})
#endif /* lowlevellock.h */

View File

@@ -0,0 +1 @@
#include <nptl/sysdeps/unix/sysv/linux/i386/not-cancel.h>

View File

@@ -0,0 +1,35 @@
/* Copyright (C) 2010-2014 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Maxim Kuvyrkov <maxim@codesourcery.com>, 2010.
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 <tcb-offsets.h>
#define SAVE_PID \
bsrl __m68k_read_tp@PLTPC ; /* Get the thread pointer. */ \
movel %a0, %a1 ; /* Save TP for RESTORE_PID. */ \
movel PID_OFFSET(%a1), %d0 ; /* Get the PID. */ \
movel %d0, %d1 ; /* Save PID for RESTORE_PID. */ \
negl %d0 ; /* Negate the PID. */ \
movel %d0, PID_OFFSET(%a1) ; /* Store the temporary PID. */
#define RESTORE_PID \
tstl %d0 ; \
beq 1f ; /* If we are the parent... */ \
movel %d1, PID_OFFSET(%a1) ; /* Restore the PID. */ \
1:
#include <sysdeps/unix/sysv/linux/m68k/vfork.S>

View File

@@ -0,0 +1,90 @@
/* Copyright (C) 2010-2014 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Maxim Kuvyrkov <maxim@codesourcery.com>, 2010.
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 "pthreadP.h"
#include <lowlevellock.h>
unsigned long int __fork_generation attribute_hidden;
static void
clear_once_control (void *arg)
{
pthread_once_t *once_control = (pthread_once_t *) arg;
*once_control = 0;
lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
}
int
__pthread_once (pthread_once_t *once_control, void (*init_routine) (void))
{
for (;;)
{
int oldval;
int newval;
/* Pseudo code:
newval = __fork_generation | 1;
oldval = *once_control;
if ((oldval & 2) == 0)
*once_control = newval;
Do this atomically.
*/
do
{
newval = __fork_generation | 1;
oldval = *once_control;
if (oldval & 2)
break;
} while (atomic_compare_and_exchange_val_acq (once_control, newval, oldval) != oldval);
/* Check if the initializer has already been done. */
if ((oldval & 2) != 0)
return 0;
/* Check if another thread already runs the initializer. */
if ((oldval & 1) == 0)
break;
/* Check whether the initializer execution was interrupted by a fork. */
if (oldval != newval)
break;
/* Same generation, some other thread was faster. Wait. */
lll_futex_wait (once_control, oldval, LLL_PRIVATE);
}
/* This thread is the first here. Do the initialization.
Register a cleanup handler so that in case the thread gets
interrupted the initialization can be restarted. */
pthread_cleanup_push (clear_once_control, once_control);
init_routine ();
pthread_cleanup_pop (0);
/* Say that the initialisation is done. */
*once_control = __fork_generation | 2;
/* Wake up all other threads. */
lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
return 0;
}
weak_alias (__pthread_once, pthread_once)
hidden_def (__pthread_once)

View File

@@ -0,0 +1,138 @@
/* Copyright (C) 2010-2014 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Maxim Kuvyrkov <maxim@codesourcery.com>, 2010.
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 !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt
# undef PSEUDO
# define PSEUDO(name, syscall_name, args) \
.text; \
ENTRY (name) \
SINGLE_THREAD_P; \
jne .Lpseudo_cancel; \
.type __##syscall_name##_nocancel,@function; \
.globl __##syscall_name##_nocancel; \
__##syscall_name##_nocancel: \
DO_CALL (syscall_name, args); \
cmp.l &-4095, %d0; \
jcc SYSCALL_ERROR_LABEL; \
rts; \
.size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
.Lpseudo_cancel: \
CENABLE; \
DOCARGS_##args \
move.l %d0, -(%sp); /* Save result of CENABLE. */ \
cfi_adjust_cfa_offset (4); \
move.l &SYS_ify (syscall_name), %d0; \
trap &0; \
move.l %d0, %d2; \
CDISABLE; \
addq.l &4, %sp; /* Remove result of CENABLE from the stack. */ \
cfi_adjust_cfa_offset (-4); \
move.l %d2, %d0; \
UNDOCARGS_##args \
cmp.l &-4095, %d0; \
jcc SYSCALL_ERROR_LABEL
/* Note: we use D2 to save syscall's return value as D0 will be clobbered in
CDISABLE. */
# define DOCARGS_0 move.l %d2, -(%sp); \
cfi_adjust_cfa_offset (4); cfi_rel_offset (%d2, 0);
# define UNDOCARGS_0 move.l (%sp)+, %d2; \
cfi_adjust_cfa_offset (-4); cfi_restore (%d2);
# define DOCARGS_1 _DOCARGS_1 (4); DOCARGS_0
# define _DOCARGS_1(n) move.l n(%sp), %d1;
# define UNDOCARGS_1 UNDOCARGS_0
# define DOCARGS_2 _DOCARGS_2 (8)
# define _DOCARGS_2(n) DOCARGS_0 move.l n+4(%sp), %d2; _DOCARGS_1 (n)
# define UNDOCARGS_2 UNDOCARGS_0
# define DOCARGS_3 _DOCARGS_3 (12)
# define _DOCARGS_3(n) move.l %d3, -(%sp); \
cfi_adjust_cfa_offset (4); cfi_rel_offset (%d3, 0); \
move.l n+4(%sp), %d3; _DOCARGS_2 (n)
# define UNDOCARGS_3 UNDOCARGS_2 move.l (%sp)+, %d3; \
cfi_adjust_cfa_offset (-4); cfi_restore (%d3);
# define DOCARGS_4 _DOCARGS_4 (16)
# define _DOCARGS_4(n) move.l %d4, -(%sp); \
cfi_adjust_cfa_offset (4); cfi_rel_offset (%d4, 0); \
move.l n+4(%sp), %d4; _DOCARGS_3 (n)
# define UNDOCARGS_4 UNDOCARGS_3 move.l (%sp)+, %d4; \
cfi_adjust_cfa_offset (-4); cfi_restore (%d4);
# define DOCARGS_5 _DOCARGS_5 (20)
# define _DOCARGS_5(n) move.l %d5, -(%sp); \
cfi_adjust_cfa_offset (4); cfi_rel_offset (%d5, 0); \
move.l n+4(%sp), %d5; _DOCARGS_4 (n)
# define UNDOCARGS_5 UNDOCARGS_4 move.l (%sp)+, %d5; \
cfi_adjust_cfa_offset (-4); cfi_restore (%d5);
# define DOCARGS_6 _DOCARGS_6 (24)
# define _DOCARGS_6(n) move.l n(%sp), %a0; _DOCARGS_5 (n-4)
# define UNDOCARGS_6 UNDOCARGS_5
# ifdef PIC
# define PSEUDO_JMP(sym) jbsr sym ## @PLTPC
# else
# define PSEUDO_JMP(sym) jbsr sym
# endif
# ifdef IS_IN_libpthread
# define CENABLE PSEUDO_JMP (__pthread_enable_asynccancel)
# define CDISABLE PSEUDO_JMP (__pthread_disable_asynccancel)
# elif !defined NOT_IN_libc
# define CENABLE PSEUDO_JMP (__libc_enable_asynccancel)
# define CDISABLE PSEUDO_JMP (__libc_disable_asynccancel)
# elif defined IS_IN_librt
# define CENABLE PSEUDO_JMP (__librt_enable_asynccancel)
# define CDISABLE PSEUDO_JMP (__librt_disable_asynccancel)
# 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 \
PSEUDO_JMP (__m68k_read_tp); \
tst.l MULTIPLE_THREADS_OFFSET(%a0)
# 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

View File

@@ -0,0 +1,37 @@
/* Copyright (C) 2010-2014 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Maxim Kuvyrkov <maxim@codesourcery.com>, 2010.
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 <tcb-offsets.h>
#define SAVE_PID \
bsrl __m68k_read_tp@PLTPC ; /* Get the thread pointer. */ \
movel %a0, %a1 ; /* Save TP for RESTORE_PID. */ \
movel PID_OFFSET(%a1), %d0 ; /* Get the PID. */ \
movel %d0, %d1 ; /* Save PID for RESTORE_PID. */ \
negl %d0 ; /* Negate the PID. */ \
bne 1f ; /* If it was zero... */ \
movel #0x80000000, %d0 ; /* use 0x80000000 instead. */ \
1: movel %d0, PID_OFFSET(%a1) ; /* Store the temporary PID. */
#define RESTORE_PID \
tstl %d0 ; \
beq 1f ; /* If we are the parent... */ \
movel %d1, PID_OFFSET(%a1) ; /* Restore the PID. */ \
1:
#include <sysdeps/unix/sysv/linux/m68k/vfork.S>

View File

@@ -0,0 +1 @@
#include <sysdeps/unix/sysv/linux/i386/oldgetrlimit64.c>

View File

@@ -0,0 +1 @@
#include <sysdeps/unix/sysv/linux/i386/putmsg.c>

View File

@@ -0,0 +1 @@
#include <sysdeps/unix/sysv/linux/i386/readdir64.c>

Some files were not shown because too many files have changed in this diff Show More