OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [newlib-1.17.0/] [newlib/] [libc/] [sys/] [linux/] [machine/] [i386/] [socketcall.h] - Blame information for rev 438

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 148 jeremybenn
/* libc/sys/linux/machine/i386/socketcall.h - x86 linux socket system calls */
2
 
3
/* Copyright 2002, Red Hat Inc. */
4
 
5
#ifndef _SOCKETCALL_H
6
 
7
#define _SOCKETCALL_H 
8
 
9
#include <machine/weakalias.h>
10
#include <sys/errno.h>
11
#include <asm/unistd.h>
12
#include "sockops.h"
13
 
14
/*
15
 * PIC uses %ebx, so we need to save it during system calls
16
 */
17
 
18
#ifdef __syscall_return
19
 
20
#define __sockcall_base(type, name) \
21
{ \
22
long __res; \
23
__asm__ volatile ("push %%ebx; movl %2,%%ebx; lea 8(%%ebp),%%ecx; int $0x80; pop %%ebx" \
24
        : "=a" (__res) \
25
        : "0" (__NR_socketcall),"r" (SOCK_##name)); \
26
__syscall_return(type,__res); \
27
}
28
 
29
#else /* !defined(__syscall_return) */
30
 
31
/* FIXME: we need to rewrite this for a vsyscall system.  */
32
 
33
#define __syscall_return(type, res) \
34
do { \
35
  if ((unsigned long)(res) >= (unsigned long)(-125)) { \
36
    errno = -(res); \
37
    res = -1; \
38
  } \
39
  return (type) (res); \
40
} while (0)
41
 
42
#define __sockcall_base(type, name) \
43
{ \
44
long __res; \
45
__asm__ volatile ("push %%ebx; movl %2,%%ebx; lea 8(%%ebp),%%ecx; int $0x80; pop %%ebx" \
46
        : "=a" (__res) \
47
        : "0" (__NR_socketcall),"r" (SOCK_##name)); \
48
__syscall_return(type,__res); \
49
}
50
 
51
#endif /* !defined(__syscall_return) */
52
 
53
#undef _sockcall1
54
#define _sockcall1(type,name,type1,arg1) \
55
type __libc_##name(type1 arg1) \
56
__sockcall_base(type,name) \
57
weak_alias(__libc_##name,name)
58
 
59
#undef _sockcall2
60
#define _sockcall2(type,name,type1,arg1,type2,arg2) \
61
type __libc_##name(type1 arg1, type2 arg2) \
62
__sockcall_base(type,name) \
63
weak_alias(__libc_##name,name)
64
 
65
#undef _sockcall3
66
#define _sockcall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
67
type __libc_##name(type1 arg1, type2 arg2, type3 arg3) \
68
__sockcall_base(type,name) \
69
weak_alias(__libc_##name,name)
70
 
71
#undef _sockcall4
72
#define _sockcall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
73
type __libc_##name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) \
74
__sockcall_base(type,name) \
75
weak_alias(__libc_##name,name)
76
 
77
#undef _sockcall5
78
#define _sockcall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \
79
type __libc_##name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) \
80
__sockcall_base(type,name) \
81
weak_alias(__libc_##name,name)
82
 
83
#undef _sockcall6
84
#define _sockcall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5,type6,arg6) \
85
type __libc_##name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6) \
86
__sockcall_base(type,name) \
87
weak_alias(__libc_##name,name)
88
 
89
#endif /* _SOCKETCALL_H */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.