summaryrefslogtreecommitdiff
path: root/sysdeps/unix/sysv/linux
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix/sysv/linux')
-rw-r--r--sysdeps/unix/sysv/linux/netatalk/at.h (renamed from sysdeps/unix/sysv/linux/netatalk/atalk.h)0
-rw-r--r--sysdeps/unix/sysv/linux/netinet/ip_icmp.h105
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/Dist3
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/clone.S48
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/kernel_stat.h45
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/statbuf.h79
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/sys/kernel_termios.h43
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/sysdep.h3
8 files changed, 214 insertions, 112 deletions
diff --git a/sysdeps/unix/sysv/linux/netatalk/atalk.h b/sysdeps/unix/sysv/linux/netatalk/at.h
index be3a72d48f..be3a72d48f 100644
--- a/sysdeps/unix/sysv/linux/netatalk/atalk.h
+++ b/sysdeps/unix/sysv/linux/netatalk/at.h
diff --git a/sysdeps/unix/sysv/linux/netinet/ip_icmp.h b/sysdeps/unix/sysv/linux/netinet/ip_icmp.h
index cb50193b37..be7959ee7f 100644
--- a/sysdeps/unix/sysv/linux/netinet/ip_icmp.h
+++ b/sysdeps/unix/sysv/linux/netinet/ip_icmp.h
@@ -24,6 +24,74 @@
__BEGIN_DECLS
+struct icmphdr
+{
+ u_int8_t type; /* message type */
+ u_int8_t code; /* type sub-code */
+ u_int16_t checksum;
+ union
+ {
+ struct
+ {
+ u_int16_t id;
+ u_int16_t sequence;
+ } echo; /* echo datagram */
+ u_int32_t gateway; /* gateway address */
+ struct
+ {
+ u_int16_t __unused;
+ u_int16_t mtu;
+ } frag; /* path mtu discovery */
+ } un;
+};
+
+#define ICMP_ECHOREPLY 0 /* Echo Reply */
+#define ICMP_DEST_UNREACH 3 /* Destination Unreachable */
+#define ICMP_SOURCE_QUENCH 4 /* Source Quench */
+#define ICMP_REDIRECT 5 /* Redirect (change route) */
+#define ICMP_ECHO 8 /* Echo Request */
+#define ICMP_TIME_EXCEEDED 11 /* Time Exceeded */
+#define ICMP_PARAMETERPROB 12 /* Parameter Problem */
+#define ICMP_TIMESTAMP 13 /* Timestamp Request */
+#define ICMP_TIMESTAMPREPLY 14 /* Timestamp Reply */
+#define ICMP_INFO_REQUEST 15 /* Information Request */
+#define ICMP_INFO_REPLY 16 /* Information Reply */
+#define ICMP_ADDRESS 17 /* Address Mask Request */
+#define ICMP_ADDRESSREPLY 18 /* Address Mask Reply */
+#define NR_ICMP_TYPES 18
+
+
+/* Codes for UNREACH. */
+#define ICMP_NET_UNREACH 0 /* Network Unreachable */
+#define ICMP_HOST_UNREACH 1 /* Host Unreachable */
+#define ICMP_PROT_UNREACH 2 /* Protocol Unreachable */
+#define ICMP_PORT_UNREACH 3 /* Port Unreachable */
+#define ICMP_FRAG_NEEDED 4 /* Fragmentation Needed/DF set */
+#define ICMP_SR_FAILED 5 /* Source Route failed */
+#define ICMP_NET_UNKNOWN 6
+#define ICMP_HOST_UNKNOWN 7
+#define ICMP_HOST_ISOLATED 8
+#define ICMP_NET_ANO 9
+#define ICMP_HOST_ANO 10
+#define ICMP_NET_UNR_TOS 11
+#define ICMP_HOST_UNR_TOS 12
+#define ICMP_PKT_FILTERED 13 /* Packet filtered */
+#define ICMP_PREC_VIOLATION 14 /* Precedence violation */
+#define ICMP_PREC_CUTOFF 15 /* Precedence cut off */
+#define NR_ICMP_UNREACH 15 /* instead of hardcoding immediate value */
+
+/* Codes for REDIRECT. */
+#define ICMP_REDIR_NET 0 /* Redirect Net */
+#define ICMP_REDIR_HOST 1 /* Redirect Host */
+#define ICMP_REDIR_NETTOS 2 /* Redirect Net for TOS */
+#define ICMP_REDIR_HOSTTOS 3 /* Redirect Host for TOS */
+
+/* Codes for TIME_EXCEEDED. */
+#define ICMP_EXC_TTL 0 /* TTL count exceeded */
+#define ICMP_EXC_FRAGTIME 1 /* Fragment Reass time exceeded */
+
+
+#ifdef __USE_BSD
/*
* Copyright (c) 1982, 1986, 1993
* The Regents of the University of California. All rights reserved.
@@ -65,31 +133,37 @@ __BEGIN_DECLS
/*
* Internal of an ICMP Router Advertisement
*/
-struct icmp_ra_addr {
- u_int32_t ira_addr;
- u_int32_t ira_preference;
+struct icmp_ra_addr
+{
+ u_int32_t ira_addr;
+ u_int32_t ira_preference;
};
-struct icmp {
+struct icmp
+{
u_int8_t icmp_type; /* type of message, see below */
u_int8_t icmp_code; /* type sub code */
u_int16_t icmp_cksum; /* ones complement checksum of struct */
- union {
+ union
+ {
u_char ih_pptr; /* ICMP_PARAMPROB */
struct in_addr ih_gwaddr; /* gateway address */
- struct ih_idseq { /* echo datagram */
+ struct ih_idseq /* echo datagram */
+ {
u_int16_t icd_id;
u_int16_t icd_seq;
} ih_idseq;
u_int32_t ih_void;
/* ICMP_UNREACH_NEEDFRAG -- Path MTU Discovery (RFC1191) */
- struct ih_pmtu {
+ struct ih_pmtu
+ {
u_int16_t ipm_void;
u_int16_t ipm_nextmtu;
} ih_pmtu;
- struct ih_rtradv {
+ struct ih_rtradv
+ {
u_int8_t irt_num_addrs;
u_int8_t irt_wpa;
u_int16_t irt_lifetime;
@@ -105,13 +179,16 @@ struct icmp {
#define icmp_num_addrs icmp_hun.ih_rtradv.irt_num_addrs
#define icmp_wpa icmp_hun.ih_rtradv.irt_wpa
#define icmp_lifetime icmp_hun.ih_rtradv.irt_lifetime
- union {
- struct {
+ union
+ {
+ struct
+ {
u_int32_t its_otime;
u_int32_t its_rtime;
u_int32_t its_ttime;
} id_ts;
- struct {
+ struct
+ {
struct ip idi_ip;
/* options and then 64 bits of data */
} id_ip;
@@ -149,11 +226,9 @@ struct icmp {
#endif
/* Definition of type and code fields. */
-#define ICMP_ECHOREPLY 0 /* echo reply */
+/* defined above: ICMP_ECHOREPLY, ICMP_REDIRECT, ICMP_ECHO */
#define ICMP_UNREACH 3 /* dest unreachable, codes: */
#define ICMP_SOURCEQUENCH 4 /* packet lost, slow down */
-#define ICMP_REDIRECT 5 /* shorter route, codes: */
-#define ICMP_ECHO 8 /* echo service */
#define ICMP_ROUTERADVERT 9 /* router advertisement */
#define ICMP_ROUTERSOLICIT 10 /* router solicitation */
#define ICMP_TIMXCEED 11 /* time exceeded, code: */
@@ -205,6 +280,8 @@ struct icmp {
(type) == ICMP_IREQ || (type) == ICMP_IREQREPLY || \
(type) == ICMP_MASKREQ || (type) == ICMP_MASKREPLY)
+#endif /* __USE_BSD */
+
__END_DECLS
#endif /* netinet/ip_icmp.h */
diff --git a/sysdeps/unix/sysv/linux/powerpc/Dist b/sysdeps/unix/sysv/linux/powerpc/Dist
index 3df65c325c..c8c265c474 100644
--- a/sysdeps/unix/sysv/linux/powerpc/Dist
+++ b/sysdeps/unix/sysv/linux/powerpc/Dist
@@ -2,3 +2,6 @@ clone.S
ioctl-types.h
termbits.h
termios.h
+kernel_stat.h
+kernel_termios.h
+sys/kernel_termios.h
diff --git a/sysdeps/unix/sysv/linux/powerpc/clone.S b/sysdeps/unix/sysv/linux/powerpc/clone.S
index 0afd0717f4..d255abfe0f 100644
--- a/sysdeps/unix/sysv/linux/powerpc/clone.S
+++ b/sysdeps/unix/sysv/linux/powerpc/clone.S
@@ -27,22 +27,30 @@
/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg); */
-ENTRY(clone)
+ENTRY(__clone)
/* Set up stack frame, save registers. */
- stwu 1,-20(1)
+ stwu 1,-32(1)
stw 31,16(1)
+ stw 30,20(1)
- /* Check for child_stack == NULL, fn == NULL. */
- mr. 31,4
+ /* Check for child_stack == NULL || fn == NULL. */
+ cmpwi 0,4,0
cmpwi 1,3,0
cror 2+0*4,2+0*4,2+1*4
beq- 0,badargs
- /* Save 'fn' and its argument on the new stack. */
- stw 3,0(4)
- stw 6,4(4)
+ /* Set up stack frame for child. */
+ addi 4,4,-16
+ clrrwi 4,4,4
+ li 0,0
+ stw 0,0(4)
- /* 'flags' argument is (only) parameter to clone syscall. */
+ /* Save new stack, fn, args across syscall. */
+ mr 30,3 /* Function in r30. */
+ mr 31,6 /* Arguments in r31. */
+
+ /* 'flags' argument is first parameter to clone syscall. (The other
+ argument is the stack pointer, already in r4.) */
mr 3,5
/* Do the call. */
@@ -51,22 +59,22 @@ ENTRY(clone)
beq child
/* Parent. Restore registers & return. */
- lwz 31,20(1)
- addi 1,1,20
+ lwz 31,16(1)
+ lwz 30,20(1)
+ addi 1,1,32
blr
child:
- /* Get address of procedure to call. */
- lwz 0,0(31)
- /* Set up argument register. */
- lwz 3,4(31)
- mtlr 0
- /* Switch to new stack. */
- mr 1,31
/* Call procedure. */
+ mtlr 30
+ mr 3,31
blrl
/* Call _exit with result from procedure. */
- DO_CALL (SYS_ify (exit))
+#ifdef PIC
+ b _exit@plt
+#else
+ b _exit
+#endif
badargs:
li 3,-EINVAL
@@ -76,3 +84,7 @@ error:
#else
b __syscall_error
#endif
+
+PSEUDO_END (__clone)
+
+weak_alias (__clone, clone)
diff --git a/sysdeps/unix/sysv/linux/powerpc/kernel_stat.h b/sysdeps/unix/sysv/linux/powerpc/kernel_stat.h
new file mode 100644
index 0000000000..c07e182748
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/powerpc/kernel_stat.h
@@ -0,0 +1,45 @@
+/* Definition of `struct stat' used in the kernel.
+ Copyright (C) 1997 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. */
+
+struct kernel_stat
+ {
+ unsigned int st_dev;
+ unsigned int st_ino;
+ unsigned int st_mode;
+ unsigned short st_nlink;
+ unsigned int st_uid;
+ unsigned int st_gid;
+ unsigned int st_rdev;
+ unsigned long int st_size;
+ unsigned long int st_blksize;
+ unsigned long int st_blocks;
+ unsigned long int st_atime;
+ unsigned long int __unused1;
+#define _HAVE___UNUSED1
+ unsigned long int st_mtime;
+ unsigned long int __unused2;
+#define _HAVE___UNUSED2
+ unsigned long int st_ctime;
+ unsigned long int __unused3;
+#define _HAVE___UNUSED3
+ unsigned long int __unused4;
+#define _HAVE___UNUSED4
+ unsigned long int __unused5;
+#define _HAVE___UNUSED5
+ };
diff --git a/sysdeps/unix/sysv/linux/powerpc/statbuf.h b/sysdeps/unix/sysv/linux/powerpc/statbuf.h
deleted file mode 100644
index 5be5736931..0000000000
--- a/sysdeps/unix/sysv/linux/powerpc/statbuf.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* Copyright (C) 1992, 1995, 1996, 1997 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 _STATBUF_H
-#define _STATBUF_H 1
-
-/* Versions of the `struct stat' data structure. */
-#define _STAT_VER_LINUX 1
-#define _STAT_VER_SVR4 2
-#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
- {
- unsigned int st_dev; /* Device. */
- unsigned int st_ino; /* File serial number. */
- unsigned int st_mode; /* File mode. */
- unsigned short int st_nlink; /* Link count. */
- unsigned int st_uid; /* User ID of the file's owner. */
- unsigned int st_gid; /* Group ID of the file's group.*/
- unsigned int st_rdev; /* Device number, if device. */
- long int st_size; /* Size of file, in bytes. */
- unsigned long int st_blksize; /* Optimal block size for I/O. */
-#define _STATBUF_ST_BLKSIZE /* Tell code we have this member. */
-
- unsigned long int st_blocks; /* Number of 512-byte blocks allocated. */
- unsigned long int st_atime; /* Time of last access. */
- unsigned long int __unused1;
- unsigned long int st_mtime; /* Time of last modification. */
- unsigned long int __unused2;
- unsigned long int st_ctime; /* Time of last status change. */
- unsigned long int __unused3;
- unsigned long int __unused4;
- unsigned long int __unused5;
- };
-
-/* 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. */
-
-/* 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. */
-
-#endif /* statbuf.h */
diff --git a/sysdeps/unix/sysv/linux/powerpc/sys/kernel_termios.h b/sysdeps/unix/sysv/linux/powerpc/sys/kernel_termios.h
new file mode 100644
index 0000000000..c5e9e2684a
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/powerpc/sys/kernel_termios.h
@@ -0,0 +1,43 @@
+/* Copyright (C) 1997 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_KERNEL_TERMIOS_H
+#define _SYS_KERNEL_TERMIOS_H 1
+/* The following corresponds to the values from the Linux 2.0.28 kernel. */
+
+/* We need the definition of tcflag_t, cc_t, and speed_t. */
+#include <termbits.h>
+
+#define __KERNEL_NCCS 19
+
+struct __kernel_termios
+ {
+ tcflag_t c_iflag; /* input mode flags */
+ tcflag_t c_oflag; /* output mode flags */
+ tcflag_t c_cflag; /* control mode flags */
+ tcflag_t c_lflag; /* local mode flags */
+ cc_t c_cc[__KERNEL_NCCS]; /* control characters */
+ cc_t c_line; /* line discipline */
+ int c_ispeed; /* input speed */
+ int c_ospeed; /* output speed */
+ };
+
+#define _HAVE_C_ISPEED 1
+#define _HAVE_C_OSPEED 1
+
+#endif /* sys/kernel_termios.h */
diff --git a/sysdeps/unix/sysv/linux/powerpc/sysdep.h b/sysdeps/unix/sysv/linux/powerpc/sysdep.h
index d6d33bf7af..6cad9ae087 100644
--- a/sysdeps/unix/sysv/linux/powerpc/sysdep.h
+++ b/sysdeps/unix/sysv/linux/powerpc/sysdep.h
@@ -43,7 +43,7 @@
#ifdef PIC
#define PSEUDO(name, syscall_name, args) \
- .text; \
+ .section ".text"; \
ENTRY (name) \
DO_CALL (SYS_ify (syscall_name)); \
bnslr; \
@@ -56,6 +56,7 @@
bnslr; \
b __syscall_error
#endif
+
#define ret /* Nothing (should be 'blr', but never reached). */
#endif /* ASSEMBLER */