Date: Sat, 25 Nov 2000 22:53:45 -0500 From: "Yonny Cardenas B." <ycardena@yahoo.com> To: hackers@freebsd.org Subject: Link error in the system call Message-ID: <3A208949.8F7AA342@yahoo.com>
next in thread | raw e-mail | index | archive | help
Hello
I have the following link error adding new system
calls to FreeBSD kernel when it uses send()
or recv() with sockets.
> linking kernel
> rtp_unix.o: In function `_sys_send':
> rtp_unix.o(.text+0x1c8): undefined reference to `send'
Perhaps the problem is the system call's type in
syscalls.master file (show it below), because the
rtp_unix.c has calls to socket(), connect()
and bind() and it doesn't have the same problem.
Is the type COMPAT for compatibility with BSD4.3
system calls (COMPAT_43)?
Why?
You can look below in the files generated
from syscalls.master file:
init_sysent.c has the "compat" conditional statement
for send() and recv(). And syscalls.c has entries
"old.send" and "old.recv", for the other sockets
system calls are different.
What should I do to solve this link error ?
Can I change COMPAT type for STD type in
syscalls.master without problems?
Thanks for your help.
/* ---------------- syscalls.master ------------ */
; Processed to created init_sysent.c, syscalls.c and syscall.h.
; Columns: number type nargs namespc name alt{name,tag,rtyp}/comments
; types:
; STD always included
; COMPAT included on COMPAT #ifdef
97 STD BSD { int socket(int domain, int type, int protocol); }
98 STD BSD { int connect(int s, caddr_t name, int namelen); }
99 CPT_NOA BSD { int accept(int s, caddr_t name, int *anamelen); } \
accept accept_args int
101 COMPAT BSD { int send(int s, caddr_t buf, int len, int flags); }
102 COMPAT BSD { int recv(int s, caddr_t buf, int len, int flags); }
104 STD BSD { int bind(int s, caddr_t name, int namelen); }
/* ----------------- init_sysent.c ------------------ */
#ifdef COMPAT_43
#define compat(n, name) n, (sy_call_t *)__CONCAT(o,name)
#else
#define compat(n, name) 0, (sy_call_t *)nosys
#endif
{ 3, (sy_call_t *)socket }, /* 97 = socket */
{ 3, (sy_call_t *)connect }, /* 98 = connect */
{ compat(3,accept) }, /* 99 = old accept */
{ compat(4,send) }, /* 101 = old send */
{ compat(4,recv) }, /* 102 = old recv */
{ 3, (sy_call_t *)bind }, /* 104 = bind */
/* ---------------- syscalls.c ---------------- */
"socket", /* 97 = socket */
"connect", /* 98 = connect */
"old.accept", /* 99 = old accept */
"old.send", /* 101 = old send */
"old.recv", /* 102 = old recv */
"bind", /* 104 = bind */
+------------------------------------------------------------------+
| YONNY CARDENAS B. Apartado Aereo 22828 |
| Systems Engineer Santafe de Bogota D.C. |
| Colombia - South America |
| Student M.Sc. Tel: +571 6095477 |
| UNIVERSIDAD DE LOS ANDES mailto: y-carden@uniandes.edu.co |
| ycardena@computer.org |
| ICQ #: 46933750 |
+------------------------------------------------------------------+
UNIX is BSD, and FreeBSD is an advanced 4.4BSD
__________________________________________________
Do You Yahoo!?
Talk to your friends online with Yahoo! Messenger.
http://im.yahoo.com
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3A208949.8F7AA342>
