Update.
authorUlrich Drepper <drepper@redhat.com>
Sat, 15 Jul 2000 17:04:58 +0000 (17:04 +0000)
committerUlrich Drepper <drepper@redhat.com>
Sat, 15 Jul 2000 17:04:58 +0000 (17:04 +0000)
2000-07-13  Jes Sorensen  <jes@linuxcare.com>

* sysdeps/unix/sysv/linux/ia64/clone.S: New file.
* sysdeps/unix/sysv/linux/ia64/fork.c: New file.

2000-06-05  David Mosberger  <davidm@hpl.hp.com>

* sysdeps/unix/sysv/linux/ia64/bits/siginfo.h: New file
based on sysdeps/unix/sysv/linux/bits/siginfo.h.
Change type of si_band from "int" to "long".
(si_imm) [USE_GNU]: Define
(si_isr) [USE_GNU]: Ditto.
(ILL_BREAK) [USE_GNU]: Ditto.
(FPE_DECOVF) [USE_GNU]: Ditto.
(FPE_DECDIV) [USE_GNU]: Ditto.
(FPE_DECERR) [USE_GNU]: Ditto.
(FPE_INVASC) [USE_GNU]: Ditto.
(FPE_INVDEC) [USE_GNU]: Ditto.
(TRAP_BRANCH) [USE_GNU]: Ditto.
(TRAP_HWBKPT) [USE_GNU]: Ditto.

2000-07-06  Jes Sorensen  <jes@linuxcare.com>

* sysdeps/unix/sysv/linux/ia64/sys/ucontext.h: Do not include
bits/sigcontext as struct mcontext does not depend on it.

* sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h: New file.

2000-07-04  Jes Sorensen  <jes@linuxcare.com>

* sysdeps/unix/sysv/linux/ia64/shmctl.c: Removed.

2000-07-04  David Mosberger-Tang  <davidm@hpl.hp.com>

* sysdeps/unix/sysv/linux/ia64/bits/msq.h: New file.

2000-06-22  Jes Sorensen  <jes@linuxcare.com>

* sysdeps/unix/sysv/linux/ia64/bits/mman.h: New file.

* intl/translit.po: New file.

ChangeLog
intl/translit.po [new file with mode: 0644]
sysdeps/unix/sysv/linux/ia64/bits/mman.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/ia64/bits/msq.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/ia64/bits/sem.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/ia64/bits/siginfo.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/ia64/clone.S [new file with mode: 0644]
sysdeps/unix/sysv/linux/ia64/fork.c [moved from sysdeps/unix/sysv/linux/ia64/shmctl.c with 69% similarity]
sysdeps/unix/sysv/linux/ia64/sys/ucontext.h

index 86c1bb2..3355f2f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,43 @@
+2000-07-13  Jes Sorensen  <jes@linuxcare.com>
+
+       * sysdeps/unix/sysv/linux/ia64/clone.S: New file.
+       * sysdeps/unix/sysv/linux/ia64/fork.c: New file.
+
+2000-06-05  David Mosberger  <davidm@hpl.hp.com>
+
+       * sysdeps/unix/sysv/linux/ia64/bits/siginfo.h: New file
+       based on sysdeps/unix/sysv/linux/bits/siginfo.h.
+       Change type of si_band from "int" to "long".
+       (si_imm) [USE_GNU]: Define
+       (si_isr) [USE_GNU]: Ditto.
+       (ILL_BREAK) [USE_GNU]: Ditto.
+       (FPE_DECOVF) [USE_GNU]: Ditto.
+       (FPE_DECDIV) [USE_GNU]: Ditto.
+       (FPE_DECERR) [USE_GNU]: Ditto.
+       (FPE_INVASC) [USE_GNU]: Ditto.
+       (FPE_INVDEC) [USE_GNU]: Ditto.
+       (TRAP_BRANCH) [USE_GNU]: Ditto.
+       (TRAP_HWBKPT) [USE_GNU]: Ditto.
+
+2000-07-06  Jes Sorensen  <jes@linuxcare.com>
+
+       * sysdeps/unix/sysv/linux/ia64/sys/ucontext.h: Do not include
+       bits/sigcontext as struct mcontext does not depend on it.
+
+       * sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h: New file.
+
+2000-07-04  Jes Sorensen  <jes@linuxcare.com>
+
+       * sysdeps/unix/sysv/linux/ia64/shmctl.c: Removed.
+
+2000-07-04  David Mosberger-Tang  <davidm@hpl.hp.com>
+
+       * sysdeps/unix/sysv/linux/ia64/bits/msq.h: New file.
+
+2000-06-22  Jes Sorensen  <jes@linuxcare.com>
+
+       * sysdeps/unix/sysv/linux/ia64/bits/mman.h: New file.
+
 2000-07-15  Ulrich Drepper  <drepper@redhat.com>
 
        * intl/Makefile (test-srcs): Add tst-translit.
@@ -5,6 +45,7 @@
        Add rules to build and run tst-translit.
        * intl/tst-translit.c: New file.
        * intl/tst-translit.sh: New file.
+       * intl/translit.po: New file.
 
 2000-07-14  Ulrich Drepper  <drepper@redhat.com>
 
diff --git a/intl/translit.po b/intl/translit.po
new file mode 100644 (file)
index 0000000..0dc380f
--- /dev/null
@@ -0,0 +1,9 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+
+msgid "test"
+msgstr "äöüÄÜÖß"
+
+msgid "onemore"
+msgstr "Ässdf"
diff --git a/sysdeps/unix/sysv/linux/ia64/bits/mman.h b/sysdeps/unix/sysv/linux/ia64/bits/mman.h
new file mode 100644 (file)
index 0000000..0b76a1d
--- /dev/null
@@ -0,0 +1,94 @@
+/* Definitions for POSIX memory map interface.  Linux/ia64 version.
+   Copyright (C) 1997, 1998, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _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.  */
+
+
+/* Protections are chosen from these bits, OR'd together.  The
+   implementation does not necessarily support PROT_EXEC or PROT_WRITE
+   without PROT_READ.  The only guarantees are that no writing will be
+   allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */
+
+#define PROT_READ        0x1           /* Page can be read.  */
+#define PROT_WRITE       0x2           /* Page can be written.  */
+#define PROT_EXEC        0x4           /* Page can be executed.  */
+#define PROT_NONE        0x0           /* Page can not be accessed.  */
+
+/* Sharing types (must choose one and only one of these).  */
+#define MAP_SHARED       0x01          /* Share changes.  */
+#define MAP_PRIVATE      0x02          /* Changes are private.  */
+#ifdef __USE_MISC
+# define MAP_TYPE        0x0f          /* Mask for type of mapping.  */
+#endif
+
+/* Other flags.  */
+#define MAP_FIXED        0x10          /* Interpret addr exactly.  */
+#ifdef __USE_MISC
+# define MAP_FILE        0
+# define MAP_ANONYMOUS   0x20          /* Don't use a file.  */
+# define MAP_ANON        MAP_ANONYMOUS
+#endif
+
+/* These are Linux-specific.  */
+#ifdef __USE_MISC
+# define MAP_GROWSDOWN   0x0100        /* Stack-like segment.  */
+# define MAP_GROWSUP     0x0200        /* Register stack-like segment */
+# define MAP_DENYWRITE   0x0800        /* ETXTBSY */
+# define MAP_EXECUTABLE          0x1000        /* Mark it as an executable.  */
+# define MAP_LOCKED      0x2000        /* Lock the mapping.  */
+# define MAP_NORESERVE   0x4000        /* Don't check for reservations.  */
+#endif
+
+/* Flags to `msync'.  */
+#define MS_ASYNC         0x1           /* Sync memory asynchronously.  */
+#define MS_SYNC                  0x2           /* Synchronous memory sync.  */
+#define MS_INVALIDATE    0x4           /* Invalidate the caches.  */
+
+/* Flags for `mlockall'.  */
+#define MCL_CURRENT      0x1           /* Lock all currently mapped pages.  */
+#define MCL_FUTURE       0x2           /* Lock all additions to address
+                                          space.  */
+
+/* Flags for `mremap'.  */
+#ifdef __USE_GNU
+# define MREMAP_MAYMOVE        1
+#endif
+
+/* Advice to `madvise'.  */
+#ifdef __USE_BSD
+# define MADV_NORMAL    0      /* No further special treatment.  */
+# define MADV_RANDOM    1      /* Expect random page references.  */
+# define MADV_SEQUENTIAL 2     /* Expect sequential page references.  */
+# define MADV_WILLNEED  3      /* Will need these pages.  */
+# define MADV_DONTNEED  4      /* Don't need these pages.  */
+#endif
+
+/* The POSIX people had to invent similar names for the same things.  */
+#ifdef __USE_XOPEN2K
+# define POSIX_MADV_NORMAL     0 /* No further special treatment.  */
+# define POSIX_MADV_RANDOM     1 /* Expect random page references.  */
+# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references.  */
+# define POSIX_MADV_WILLNEED   3 /* Will need these pages.  */
+# define POSIX_MADV_DONTNEED   4 /* Don't need these pages.  */
+#endif
diff --git a/sysdeps/unix/sysv/linux/ia64/bits/msq.h b/sysdeps/unix/sysv/linux/ia64/bits/msq.h
new file mode 100644 (file)
index 0000000..8861a59
--- /dev/null
@@ -0,0 +1,69 @@
+/* Copyright (C) 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+       Contribute by David Mosberger-Tang <davidm@hpl.hp.com>
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _SYS_MSG_H
+#error "Never use <bits/msq.h> directly; include <sys/msg.h> instead."
+#endif
+
+#include <sys/types.h>
+
+/* Define options for message queue functions.  */
+#define MSG_NOERROR    010000  /* no error if message is too big */
+#define MSG_EXCEPT     020000  /* recv any msg except of specified type */
+
+
+/* Structure of record for one message inside the kernel.
+   The type `struct __msg' is opaque.  */
+struct msqid_ds
+{
+  struct ipc_perm msg_perm;    /* structure describing operation permission */
+  __time_t msg_stime;          /* time of last msgsnd command */
+  __time_t msg_rtime;          /* time of last msgrcv command */
+  __time_t msg_ctime;          /* time of last change */
+  unsigned long int __msg_cbytes;      /* current number of bytes on queue */
+  unsigned long int msg_qnum;  /* number of messages currently on queue */
+  unsigned long int msg_qbytes;        /* max number of bytes allowed on queue */
+  __pid_t msg_lspid;           /* pid of last msgsnd() */
+  __pid_t msg_lrpid;           /* pid of last msgrcv() */
+  unsigned long int __unused1;
+  unsigned long int __unused2;
+};
+
+#ifdef __USE_MISC
+
+# define msg_cbytes    __msg_cbytes
+
+/* ipcs ctl commands */
+# define MSG_STAT 11
+# define MSG_INFO 12
+
+/* buffer for msgctl calls IPC_INFO, MSG_INFO */
+struct msginfo
+  {
+    int msgpool;
+    int msgmap;
+    int msgmax;
+    int msgmnb;
+    int msgmni;
+    int msgssz;
+    int msgtql;
+    unsigned short int msgseg;
+  };
+
+#endif /* __USE_MISC */
diff --git a/sysdeps/unix/sysv/linux/ia64/bits/sem.h b/sysdeps/unix/sysv/linux/ia64/bits/sem.h
new file mode 100644 (file)
index 0000000..73df578
--- /dev/null
@@ -0,0 +1,87 @@
+/* Copyright (C) 2000
+   Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+       Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _SYS_SEM_H
+# error "Never include <bits/sem.h> directly; use <sys/sem.h> instead."
+#endif
+
+#include <sys/types.h>
+
+/* Flags for `semop'.  */
+#define SEM_UNDO       0x1000          /* undo the operation on exit */
+
+/* Commands for `semctl'.  */
+#define GETPID         11              /* get sempid */
+#define GETVAL         12              /* get semval */
+#define GETALL         13              /* get all semval's */
+#define GETNCNT                14              /* get semncnt */
+#define GETZCNT                15              /* get semzcnt */
+#define SETVAL         16              /* set semval */
+#define SETALL         17              /* set all semval's */
+
+
+/* Data structure describing a set of semaphores.  */
+struct semid_ds
+{
+  struct ipc_perm sem_perm;            /* operation permission struct */
+  __time_t sem_otime;                  /* last semop() time */
+  __time_t sem_ctime;                  /* last time changed by semctl() */
+  unsigned long int sem_nsems;         /* number of semaphores in set */
+  unsigned long int __unused1;
+  unsigned long int __unused2;
+};
+
+/* The user should define a union like the following to use it for arguments
+   for `semctl'.
+
+   union semun
+   {
+     int val;                          <= value for SETVAL
+     struct semid_ds *buf;             <= buffer for IPC_STAT & IPC_SET
+     unsigned short int *array;                <= array for GETALL & SETALL
+     struct seminfo *__buf;            <= buffer for IPC_INFO
+   };
+
+   Previous versions of this file used to define this union but this is
+   incorrect.  One can test the macro _SEM_SEMUN_UNDEFINED to see whether
+   one must define the union or not.  */
+#define _SEM_SEMUN_UNDEFINED   1
+
+#ifdef __USE_MISC
+
+/* ipcs ctl cmds */
+# define SEM_STAT 18
+# define SEM_INFO 19
+
+struct  seminfo
+{
+  int semmap;
+  int semmni;
+  int semmns;
+  int semmnu;
+  int semmsl;
+  int semopm;
+  int semume;
+  int semusz;
+  int semvmx;
+  int semaem;
+};
+
+#endif /* __USE_MISC */
diff --git a/sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h b/sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h
new file mode 100644 (file)
index 0000000..101aad7
--- /dev/null
@@ -0,0 +1,58 @@
+/* Copyright (C) 1996, 1997, 1998,2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Jes Sorensen <jes@linuxcare.com>, July 2000
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H
+# error "Never use <bits/sigcontext.h> directly; include <signal.h> instead."
+#endif
+
+#ifndef sigcontext_struct
+/* Kernel headers before 2.1.1 define a struct sigcontext_struct, but
+   we need sigcontext.  */
+# define sigcontext_struct sigcontext
+#endif
+
+#include <asm/fpu.h>
+#include <bits/sigstack.h>
+
+struct sigcontext
+{
+  unsigned long int sc_flags;  /* see manifest constants above */
+  unsigned long int sc_nat;    /* bit i == 1 iff scratch reg gr[i] is a NaT */
+  stack_t sc_stack;            /* previously active stack */
+
+  unsigned long int sc_ip;     /* instruction pointer */
+  unsigned long int sc_cfm;    /* current frame marker */
+  unsigned long int sc_um;     /* user mask bits */
+  unsigned long int sc_ar_rsc; /* register stack configuration register */
+  unsigned long int sc_ar_bsp; /* backing store pointer */
+  unsigned long int sc_ar_rnat;        /* RSE NaT collection register */
+  unsigned long int sc_ar_ccv; /* compare & exchange compare value register */
+  unsigned long int sc_ar_unat;        /* ar.unat of interrupted context */
+  unsigned long int sc_ar_fpsr;        /* floating-point status register */
+  unsigned long int sc_ar_pfs; /* previous function state */
+  unsigned long int sc_ar_lc;  /* loop count register */
+  unsigned long int sc_pr;     /* predicate registers */
+  unsigned long int sc_br[8];  /* branch registers */
+  unsigned long int sc_gr[32]; /* general registers (static partition) */
+  struct ia64_fpreg sc_fr[128];        /* floating-point registers */
+
+  /* sc_mask is actually an sigset_t but we don't want to
+   * include the kernel headers here. */
+  unsigned long int sc_mask;   /* signal mask to restore after handler returns */
+};
diff --git a/sysdeps/unix/sysv/linux/ia64/bits/siginfo.h b/sysdeps/unix/sysv/linux/ia64/bits/siginfo.h
new file mode 100644 (file)
index 0000000..74dc2b1
--- /dev/null
@@ -0,0 +1,311 @@
+/* siginfo_t, sigevent and constants.  Linux/ia64 version.
+   Copyright (C) 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by David Mosberger-Tang <davidm@hpl.hp.com.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#if !defined _SIGNAL_H && !defined __need_siginfo_t
+# error "Never include this file directly.  Use <signal.h> instead"
+#endif
+
+#if (!defined __have_siginfo_t \
+     && (defined _SIGNAL_H || defined __need_siginfo_t))
+# define __have_siginfo_t      1
+
+/* Type for data associated with a signal.  */
+typedef union sigval
+  {
+    int sival_int;
+    void *sival_ptr;
+  } sigval_t;
+
+# define __SI_MAX_SIZE     128
+# define __SI_PAD_SIZE     ((__SI_MAX_SIZE / sizeof (int)) - 3)
+
+typedef struct siginfo
+  {
+    int si_signo;              /* Signal number.  */
+    int si_errno;              /* If non-zero, an errno value associated with
+                                  this signal, as defined in <errno.h>.  */
+    int si_code;               /* Signal code.  */
+
+    union
+      {
+       int _pad[__SI_PAD_SIZE];
+
+        /* kill().  */
+       struct
+         {
+           __pid_t si_pid;     /* Sending process ID.  */
+           __uid_t si_uid;     /* Real user ID of sending process.  */
+         } _kill;
+
+       /* POSIX.1b timers.  */
+       struct
+         {
+           unsigned int _timer1;
+           unsigned int _timer2;
+         } _timer;
+
+       /* POSIX.1b signals.  */
+       struct
+         {
+           __pid_t si_pid;     /* Sending process ID.  */
+           __uid_t si_uid;     /* Real user ID of sending process.  */
+           sigval_t si_sigval; /* Signal value.  */
+         } _rt;
+
+       /* SIGCHLD.  */
+       struct
+         {
+           __pid_t si_pid;     /* Which child.  */
+           __uid_t si_uid;     /* Real user ID of sending process.  */
+           int si_status;      /* Exit value or signal.  */
+           __clock_t si_utime;
+           __clock_t si_stime;
+         } _sigchld;
+
+       /* SIGILL, SIGFPE, SIGSEGV, SIGBUS.  */
+       struct
+         {
+           void *si_addr;      /* Faulting insn/memory ref.  */
+           int _si_imm;
+           int _si_pad0;
+           unsigned long int _si_isr;
+         } _sigfault;
+
+       /* SIGPOLL.  */
+       struct
+         {
+           long int si_band;   /* Band event for SIGPOLL.  */
+           int si_fd;
+         } _sigpoll;
+      } _sifields;
+  } siginfo_t;
+
+
+/* X/Open requires some more fields with fixed names.  */
+# define si_pid                _sifields._kill.si_pid
+# define si_uid                _sifields._kill.si_uid
+# define si_status     _sifields._sigchld.si_status
+# define si_utime      _sifields._sigchld.si_utime
+# define si_stime      _sifields._sigchld.si_stime
+# define si_value      _sifields._rt.si_sigval
+# define si_int                _sifields._rt.si_sigval.sival_int
+# define si_ptr                _sifields._rt.si_sigval.sival_ptr
+# define si_addr       _sifields._sigfault.si_addr
+# define si_band       _sifields._sigpoll.si_band
+# define si_fd         _sifields._sigpoll.si_fd
+
+#ifdef __USE_GNU
+#  define si_imm       _sifields._sigfault._si_imm
+#  define si_isr       _sifields._sigfault._si_isr
+#endif
+
+/* Values for `si_code'.  Positive values are reserved for kernel-generated
+   signals.  */
+enum
+{
+  SI_SIGIO = -5,               /* Sent by queued SIGIO. */
+# define SI_SIGIO      SI_SIGIO
+  SI_ASYNCIO,                  /* Sent by AIO completion.  */
+# define SI_ASYNCIO    SI_ASYNCIO
+  SI_MESGQ,                    /* Sent by real time mesq state change.  */
+# define SI_MESGQ      SI_MESGQ
+  SI_TIMER,                    /* Sent by timer expiration.  */
+# define SI_TIMER      SI_TIMER
+  SI_QUEUE,                    /* Sent by sigqueue.  */
+# define SI_QUEUE      SI_QUEUE
+  SI_USER                      /* Sent by kill, sigsend, raise.  */
+# define SI_USER       SI_USER
+};
+
+
+/* `si_code' values for SIGILL signal.  */
+enum
+{
+  ILL_ILLOPC = 1,              /* Illegal opcode.  */
+# define ILL_ILLOPC    ILL_ILLOPC
+  ILL_ILLOPN,                  /* Illegal operand.  */
+# define ILL_ILLOPN    ILL_ILLOPN
+  ILL_ILLADR,                  /* Illegal addressing mode.  */
+# define ILL_ILLADR    ILL_ILLADR
+  ILL_ILLTRP,                  /* Illegal trap. */
+# define ILL_ILLTRP    ILL_ILLTRP
+  ILL_PRVOPC,                  /* Privileged opcode.  */
+# define ILL_PRVOPC    ILL_PRVOPC
+  ILL_PRVREG,                  /* Privileged register.  */
+# define ILL_PRVREG    ILL_PRVREG
+  ILL_COPROC,                  /* Coprocessor error.  */
+# define ILL_COPROC    ILL_COPROC
+  ILL_BADSTK                   /* Internal stack error.  */
+# define ILL_BADSTK    ILL_BADSTK
+
+# ifdef __USE_GNU
+   , ILL_BREAK
+#  define ILL_BREAK    __ILL_BREAK
+# endif
+};
+
+/* `si_code' values for SIGFPE signal.  */
+enum
+{
+  FPE_INTDIV = 1,              /* Integer divide by zero.  */
+# define FPE_INTDIV    FPE_INTDIV
+  FPE_INTOVF,                  /* Integer overflow.  */
+# define FPE_INTOVF    FPE_INTOVF
+  FPE_FLTDIV,                  /* Floating point divide by zero.  */
+# define FPE_FLTDIV    FPE_FLTDIV
+  FPE_FLTOVF,                  /* Floating point overflow.  */
+# define FPE_FLTOVF    FPE_FLTOVF
+  FPE_FLTUND,                  /* Floating point underflow.  */
+# define FPE_FLTUND    FPE_FLTUND
+  FPE_FLTRES,                  /* Floating point inexact result.  */
+# define FPE_FLTRES    FPE_FLTRES
+  FPE_FLTINV,                  /* Floating point invalid operation.  */
+# define FPE_FLTINV    FPE_FLTINV
+  FPE_FLTSUB                   /* Subscript out of range.  */
+# define FPE_FLTSUB    FPE_FLTSUB
+# ifdef __USE_GNU
+   , FPE_DECOVF
+#  define FPE_DECOVF   __FPE_DECOVF
+   , FPE_DECDIV
+#  define FPE_DECDIV   __FPE_DECDIV
+   , FPE_DECERR
+#  define FPE_DECERR   __FPE_DECERR
+   , FPE_INVASC
+#  define FPE_INVASC   __FPE_INVASC
+   , FPE_INVDEC
+#  define FPE_INVDEC   __FPE_INVDEC
+# endif
+};
+
+/* `si_code' values for SIGSEGV signal.  */
+enum
+{
+  SEGV_MAPERR = 1,             /* Address not mapped to object.  */
+# define SEGV_MAPERR   SEGV_MAPERR
+  SEGV_ACCERR                  /* Invalid permissions for mapped object.  */
+# define SEGV_ACCERR   SEGV_ACCERR
+};
+
+/* `si_code' values for SIGBUS signal.  */
+enum
+{
+  BUS_ADRALN = 1,              /* Invalid address alignment.  */
+# define BUS_ADRALN    BUS_ADRALN
+  BUS_ADRERR,                  /* Non-existant physical address.  */
+# define BUS_ADRERR    BUS_ADRERR
+  BUS_OBJERR                   /* Object specific hardware error.  */
+# define BUS_OBJERR    BUS_OBJERR
+};
+
+/* `si_code' values for SIGTRAP signal.  */
+enum
+{
+  TRAP_BRKPT = 1,              /* Process breakpoint.  */
+# define TRAP_BRKPT    TRAP_BRKPT
+  TRAP_TRACE                   /* Process trace trap.  */
+# define TRAP_TRACE    TRAP_TRACE
+
+# ifdef __USE_GNU
+  , TRAP_BRANCH
+# define TRAP_BRANCH   TRAP_BRANCH
+  , TRAP_HWBKPT
+# define TRAP_HWBKPT   TRAP_HWBKPT
+# endif
+};
+
+/* `si_code' values for SIGCHLD signal.  */
+enum
+{
+  CLD_EXITED = 1,              /* Child has exited.  */
+# define CLD_EXITED    CLD_EXITED
+  CLD_KILLED,                  /* Child was killed.  */
+# define CLD_KILLED    CLD_KILLED
+  CLD_DUMPED,                  /* Child terminated abnormally.  */
+# define CLD_DUMPED    CLD_DUMPED
+  CLD_TRAPPED,                 /* Traced child has trapped.  */
+# define CLD_TRAPPED   CLD_TRAPPED
+  CLD_STOPPED,                 /* Child has stopped.  */
+# define CLD_STOPPED   CLD_STOPPED
+  CLD_CONTINUED                        /* Stopped child has continued.  */
+# define CLD_CONTINUED CLD_CONTINUED
+};
+
+/* `si_code' values for SIGPOLL signal.  */
+enum
+{
+  POLL_IN = 1,                 /* Data input available.  */
+# define POLL_IN       POLL_IN
+  POLL_OUT,                    /* Output buffers available.  */
+# define POLL_OUT      POLL_OUT
+  POLL_MSG,                    /* Input message available.   */
+# define POLL_MSG      POLL_MSG
+  POLL_ERR,                    /* I/O error.  */
+# define POLL_ERR      POLL_ERR
+  POLL_PRI,                    /* High priority input available.  */
+# define POLL_PRI      POLL_PRI
+  POLL_HUP                     /* Device disconnected.  */
+# define POLL_HUP      POLL_HUP
+};
+
+# undef __need_siginfo_t
+#endif /* !have siginfo_t && (have _SIGNAL_H || need siginfo_t).  */
+
+
+#if defined _SIGNAL_H && !defined __have_sigevent_t
+# define __have_sigevent_t     1
+
+/* Structure to transport application-defined values with signals.  */
+# define __SIGEV_MAX_SIZE      64
+# define __SIGEV_PAD_SIZE      ((__SIGEV_MAX_SIZE / sizeof (int)) - 3)
+
+typedef struct sigevent
+  {
+    sigval_t sigev_value;
+    int sigev_signo;
+    int sigev_notify;
+
+    union
+      {
+       int _pad[__SIGEV_PAD_SIZE];
+
+       struct
+         {
+           void (*_function) __PMT ((sigval_t)); /* Function to start.  */
+           void *_attribute;                     /* Really pthread_attr_t.  */
+         } _sigev_thread;
+      } _sigev_un;
+  } sigevent_t;
+
+/* POSIX names to access some of the members.  */
+# define sigev_notify_function   _sigev_un._sigev_thread._function
+# define sigev_notify_attributes _sigev_un._sigev_thread._attribute
+
+/* `sigev_notify' values.  */
+enum
+{
+  SIGEV_SIGNAL = 0,            /* Notify via signal.  */
+# define SIGEV_SIGNAL  SIGEV_SIGNAL
+  SIGEV_NONE,                  /* Other notification: meaningless.  */
+# define SIGEV_NONE    SIGEV_NONE
+  SIGEV_THREAD                 /* Deliver via thread creation.  */
+# define SIGEV_THREAD  SIGEV_THREAD
+};
+
+#endif /* have _SIGNAL_H.  */
diff --git a/sysdeps/unix/sysv/linux/ia64/clone.S b/sysdeps/unix/sysv/linux/ia64/clone.S
new file mode 100644 (file)
index 0000000..696e7f5
--- /dev/null
@@ -0,0 +1,75 @@
+/* Copyright (C) 1999,2000 Free Software Foundation, Inc.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* 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>
+
+/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg); */
+
+/*
+ * Used for both clone and fork system calls.  Note that if fn is NULL
+ *   then clone was called from fork.
+ */
+
+ENTRY(__clone)
+       add     r2 = -16, r33           // save space for fn and arg
+       cmp.ne  p6,p0 = 0,r33
+       ;;
+(p6)   add     r33 = -16, r33
+       add     r12 = -16, r12
+       ;;
+(p6)   st8     [r2] = r32, 8           // save fn for child
+       st8     [r12] = r32             // save fn for parent
+       ;;
+(p6)   st8     [r2] = r35              // save arg for child
+       mov     r32 = r34               // put flags in out0
+       DO_CALL (SYS_ify (clone))
+1:
+       ld8     r33 = [r12], 8          // recover fn
+       ;;
+       ld8     r32 = [r12], 8          // recover arg
+
+       cmp.eq p6,p0=-1,r10
+(p6)   br.cond.spnt.many __syscall_error // handle error
+
+       cmp.ne p7,p0=0,r8
+(p7)   ret                             // parent process, just return
+
+       cmp.eq p8,p0=0,r33
+(p8)   ret                             // fork call, return
+
+       alloc   loc0 = ar.pfs,2,2,2,0
+       ;;
+       ld8     r2 = [in1], 8           // get address of fn
+       mov     out0 = in0
+       mov     loc1 = gp               // save gp across indirect call
+       ;;
+       ld8     gp = [in1]              // set new gp
+       mov     b6 = r2
+       br.call.sptk b0 = b6            // call thread routine
+       ;;
+
+       mov     ar.pfs = loc0
+       mov     gp = loc1
+       mov     r32 = r8                // exit value
+       br.call.sptk    b0 = _exit      // we're out of here
+
+PSEUDO_END(__clone)
+
+weak_alias (__clone, clone)
similarity index 69%
rename from sysdeps/unix/sysv/linux/ia64/shmctl.c
rename to sysdeps/unix/sysv/linux/ia64/fork.c
index dbf0782..ab9b3bc 100644 (file)
@@ -1,6 +1,7 @@
-/* Copyright (C) 1995, 1997, 1998, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 1998, 2000 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
-   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+   Written by Andreas Schwab, <schwab@issan.informatik.uni-dortmund.de>,
+   December 1995.
 
    The GNU C Library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public License as
    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    Boston, MA 02111-1307, USA.  */
 
-#include <errno.h>
-#include <sys/shm.h>
-#include <ipc_priv.h>
+#include <unistd.h>
+#include <asm/signal.h>
 
-#include <sysdep.h>
-#include <sys/syscall.h>
+extern int __clone (int (*fn)(void *), void *ksp, unsigned long int flags,
+                 void *arg);
 
 int
-shmctl (int shmid, int cmd, struct shmid_ds *buf)
+__fork (void)
 {
-  return INLINE_SYSCALL (ipc, 5, IPCOP_shmctl, shmid, cmd, 0, buf);
+  return __clone (NULL, NULL, SIGCHLD, 0);
 }
+
+weak_alias (__fork, fork)
index c7adaca..babb41d 100644 (file)
@@ -22,7 +22,7 @@
 #include <features.h>
 #include <signal.h>
 
-#include <bits/sigcontext.h>
+#include <bits/sigstack.h>
 
 typedef struct
 {