kern/64169: linux binaries dump core on exit

Michal Pasternak michal at pasternak.w.lub.pl
Sun Mar 14 11:10:57 PST 2004


> convenient access to one running 4.x to MFC this. What I think you
> need to do to get Slackware binaries working is to MFC support for
> the Linux exit_group() syscall.

You are completly right. I've added some entries to syscalls.master (only
minimal changes, so it won't require more MFCing, than it really does). The
file is attached. The file has been tested on 4-STABLE system - it makes
Slackware binaries (or, I rather should say, glibc 2.3.2 binaries) run very
good. Linux module compiles & loads without any errors.

Thanks for your quick help again,
take care,
-- 
mp
-------------- next part --------------
 $FreeBSD: src/sys/i386/linux/syscalls.master,v 1.30.2.8 2003/01/02 20:41:33 kan Exp $

;	@(#)syscalls.master	8.1 (Berkeley) 7/19/93
; System call name/number master file (or rather, slave, from LINUX).
; Processed to create linux_sysent.c, linux_proto.h and linux_syscall.h.

; Columns: number type nargs namespc name alt{name,tag,rtyp}/comments
;	number	system call number, must be in order
;	type	one of STD, OBSOL, UNIMPL, COMPAT
;	namespc one of POSIX, BSD, STD, NOHIDE (I dont care :-) -Peter
;	name	psuedo-prototype of syscall routine
;		If one of the following alts is different, then all appear:
;	altname	name of system call if different
;	alttag	name of args struct tag if different from [o]`name'"_args"
;	altrtyp	return type if not int (bogus - syscalls always return int)
;		for UNIMPL/OBSOL, name continues with comments

; types:
;	STD	always included
;	COMPAT	included on COMPAT #ifdef
;	LIBCOMPAT included on COMPAT #ifdef, and placed in syscall.h
;	OBSOL	obsolete, not included in system, only specifies name
;	UNIMPL	not implemented, placeholder only

#include "opt_compat.h"
#include <sys/param.h>
#include <sys/sysent.h>
#include <sys/sysproto.h>
#include <i386/linux/linux.h>
#include <i386/linux/linux_proto.h>

; #ifdef's, etc. may be included, and are copied to the output files.

0	UNIMPL	LINUX	setup
1	NOPROTO LINUX	{ void sys_exit(int rval); } exit sys_exit_args void
2	STD	LINUX	{ int linux_fork(void); }
3	NOPROTO	LINUX	{ int read(int fd, char *buf, u_int nbyte); }
4	NOPROTO	LINUX	{ int write(int fd, char *buf, u_int nbyte); }
5	STD	LINUX	{ int linux_open(char *path, l_int flags, \
				l_int mode); }
6	NOPROTO	LINUX	{ int close(int fd); }
7	STD	LINUX	{ int linux_waitpid(l_pid_t pid, l_int *status, \
				l_int options); }
8	STD	LINUX	{ int linux_creat(char *path, l_int mode); }
9	STD	LINUX	{ int linux_link(char *path, char *to); }
10	STD	LINUX	{ int linux_unlink(char *path); }
11	STD	LINUX	{ int linux_execve(char *path, char **argp, \
				char **envp); }
12	STD	LINUX	{ int linux_chdir(char *path); }
13	STD	LINUX	{ int linux_time(l_time_t *tm); }
14	STD	LINUX	{ int linux_mknod(char *path, l_int mode, \
				l_dev_t dev); }
15	STD	LINUX	{ int linux_chmod(char *path, l_mode_t mode); }
16	STD	LINUX	{ int linux_lchown16(char *path, l_uid16_t uid, \
				l_gid16_t gid); }
17	UNIMPL	LINUX	break
18	STD	LINUX	{ int linux_stat(char *path, struct ostat *up); }
19	STD	LINUX	{ int linux_lseek(l_uint fdes, l_off_t off, \
				l_int whence); }
20	STD	LINUX	{ int linux_getpid(void); }
21	STD	LINUX	{ int linux_mount(char *specialfile, char *dir, \
				char *filesystemtype, l_ulong rwflag, \
				void *data); }
22	STD	LINUX	{ int linux_oldumount(char *path); }
23	STD	LINUX	{ int linux_setuid16(l_uid16_t uid); }
24	STD	LINUX	{ int linux_getuid16(void); }
25	STD	LINUX	{ int linux_stime(void); }
26	STD	LINUX	{ int linux_ptrace(l_long req, l_long pid, l_long addr, \
                            l_long data); }
27	STD	LINUX	{ int linux_alarm(l_uint secs); }
28	STD	LINUX	{ int linux_fstat(l_uint fd, struct ostat *up); }
29	STD	LINUX	{ int linux_pause(void); }
30	STD	LINUX	{ int linux_utime(char *fname, \
				struct l_utimbuf *times); }
31	UNIMPL	LINUX	stty
32	UNIMPL	LINUX	gtty
33	STD	LINUX	{ int linux_access(char *path, l_int flags); }
34	STD	LINUX	{ int linux_nice(l_int inc); }
35	UNIMPL	LINUX	ftime
36	NOPROTO	LINUX	{ int sync(void); }
37	STD	LINUX	{ int linux_kill(l_int pid, l_int signum); }
38	STD	LINUX	{ int linux_rename(char *from, char *to); }
39	STD	LINUX	{ int linux_mkdir(char *path, l_int mode); }
40	STD	LINUX	{ int linux_rmdir(char *path); }
41	NOPROTO	LINUX	{ int dup(u_int fd); }
42	STD	LINUX	{ int linux_pipe(l_ulong *pipefds); }
43	STD	LINUX	{ int linux_times(struct l_times_argv *buf); }
44	UNIMPL	LINUX	prof
45	STD	LINUX	{ int linux_brk(l_ulong dsend); }
46	STD	LINUX	{ int linux_setgid16(l_gid16_t gid); }
47	STD	LINUX	{ int linux_getgid16(void); }
48	STD	LINUX	{ int linux_signal(l_int sig, l_handler_t handler); }
49	STD	LINUX	{ int linux_geteuid16(void); }
50	STD	LINUX	{ int linux_getegid16(void); }
51	NOPROTO	LINUX	{ int acct(char *path); }
52	STD	LINUX	{ int linux_umount(char *path, l_int flags); }
53	UNIMPL	LINUX	lock
54	STD	LINUX	{ int linux_ioctl(l_uint fd, l_uint cmd, \
				l_ulong arg); }
55	STD	LINUX	{ int linux_fcntl(l_uint fd, l_uint cmd, \
				l_ulong arg); }
56	UNIMPL	LINUX	mpx
57	NOPROTO	LINUX	{ int setpgid(int pid, int pgid); }
58	UNIMPL	LINUX	ulimit
59	STD	LINUX	{ int linux_olduname(void); }
60	NOPROTO	LINUX	{ int umask(int newmask); }
61	NOPROTO	LINUX	{ int chroot(char *path); }
62	STD	LINUX	{ int linux_ustat(l_dev_t dev, struct l_ustat *ubuf); }
63	NOPROTO	LINUX	{ int dup2(u_int from, u_int to); }
64	NOPROTO	LINUX	{ int getppid(void); }
65	NOPROTO	LINUX	{ int getpgrp(void); }
66	NOPROTO	LINUX	{ int setsid(void); }
67	STD	LINUX	{ int linux_sigaction(l_int sig, l_osigaction_t *nsa, \
				l_osigaction_t *osa); }
68	STD	LINUX	{ int linux_sgetmask(void); }
69	STD	LINUX	{ int linux_ssetmask(l_osigset_t mask); }
70	STD	LINUX	{ int linux_setreuid16(l_uid16_t ruid, \
				l_uid16_t euid); }
71	STD	LINUX	{ int linux_setregid16(l_gid16_t rgid, \
				l_gid16_t egid); }
72	STD	LINUX	{ int linux_sigsuspend(l_int hist0, l_int hist1, \
				l_osigset_t mask); }
73	STD	LINUX	{ int linux_sigpending(l_osigset_t *mask); }
74	NOPROTO LINUX	{ int osethostname(char *hostname, u_int len); } \
			    osethostname sethostname_args int
75	STD	LINUX	{ int linux_setrlimit(l_uint resource, \
				struct l_rlimit *rlim); }
76	STD	LINUX	{ int linux_old_getrlimit(l_uint resource, \
				struct l_rlimit *rlim); }
77	NOPROTO	LINUX	{ int getrusage(int who, struct rusage *rusage); }
78	NOPROTO	LINUX	{ int gettimeofday(struct timeval *tp, \
				struct timezone *tzp); }
79	NOPROTO LINUX	{ int settimeofday(struct timeval *tp, \
				struct timezone *tzp); }
80	STD	LINUX	{ int linux_getgroups16(l_uint gidsetsize, \
				l_gid16_t *gidset); }
81	STD	LINUX	{ int linux_setgroups16(l_uint gidsetsize, \
				l_gid16_t *gidset); }
82	STD	LINUX	{ int linux_old_select(struct l_old_select_argv \
				*ptr); }
83	STD	LINUX	{ int linux_symlink(char *path, char *to); }
84	NOPROTO	LINUX	{ int ostat(char *path, struct ostat *up); }
85	STD	LINUX	{ int linux_readlink(char *name, char *buf, \
				l_int count); }
86	STD	LINUX	{ int linux_uselib(char *library); }
87	NOPROTO	LINUX	{ int swapon(char *name); }
88	STD	LINUX	{ int linux_reboot(l_int magic1, l_int magic2, \
				l_uint cmd, void *arg); }
89	STD	LINUX	{ int linux_readdir(l_uint fd, struct l_dirent *dent, \
				l_uint count); }
90	STD	LINUX	{ int linux_mmap(struct l_mmap_argv *ptr); }
91	NOPROTO	LINUX	{ int munmap(caddr_t addr, int len); }
92	STD	LINUX	{ int linux_truncate(char *path, l_ulong length); }
93	NOPROTO	LINUX	{ int oftruncate(int fd, long length); }
94	NOPROTO	LINUX	{ int fchmod(int fd, int mode); }
95	NOPROTO	LINUX	{ int fchown(int fd, int uid, int gid); }
96	NOPROTO	LINUX	{ int getpriority(int which, int who); }
97	NOPROTO	LINUX	{ int setpriority(int which, int who, int prio); }
98	UNIMPL	LINUX	profil
99	STD	LINUX	{ int linux_statfs(char *path, \
				struct l_statfs_buf *buf); }
100	STD	LINUX	{ int linux_fstatfs(l_uint fd, \
				struct l_statfs_buf *buf); }
101	STD	LINUX	{ int linux_ioperm(l_ulong start, l_ulong length, \
				l_int enable); }
102	STD	LINUX	{ int linux_socketcall(l_int what, l_ulong args); }
103	STD	LINUX	{ int linux_syslog(l_int type, char *buf, l_int len); }
104	STD	LINUX	{ int linux_setitimer(l_int which, \
				struct l_itimerval *itv, \
				struct l_itimerval *oitv); }
105	STD	LINUX	{ int linux_getitimer(l_int which, \
				struct l_itimerval *itv); }
106	STD	LINUX	{ int linux_newstat(char *path, \
				struct l_newstat *buf); }
107	STD	LINUX	{ int linux_newlstat(char *path, \
				struct l_newstat *buf); }
108	STD	LINUX	{ int linux_newfstat(l_uint fd, \
				struct l_newstat *buf); }
109	STD	LINUX	{ int linux_uname(void); }
110	STD	LINUX	{ int linux_iopl(l_ulong level); }
111	STD	LINUX	{ int linux_vhangup(void); }
112	UNIMPL	LINUX	idle
113	STD	LINUX	{ int linux_vm86old(void); }
114	STD	LINUX	{ int linux_wait4(l_pid_t pid, l_uint *status, \
				l_int options, struct l_rusage *rusage); }
115	STD	LINUX	{ int linux_swapoff(void); }
116	STD	LINUX	{ int linux_sysinfo(struct l_sysinfo *info); }
117	STD	LINUX	{ int linux_ipc(l_uint what, l_int arg1, l_int arg2, \
				l_int arg3, void *ptr, l_long arg5); }
118	NOPROTO	LINUX	{ int fsync(int fd); }
119	STD	LINUX	{ int linux_sigreturn(struct l_sigframe *sfp); }
120	STD	LINUX	{ int linux_clone(l_int flags, void *stack); }
121	NOPROTO LINUX	{ int setdomainname(char *name, int len); }
122	STD	LINUX	{ int linux_newuname(struct l_new_utsname *buf); }
123	STD	LINUX	{ int linux_modify_ldt(l_int func, void *ptr, \
				l_ulong bytecount); }
124	STD	LINUX	{ int linux_adjtimex(void); }
125	NOPROTO	LINUX	{ int mprotect(caddr_t addr, int len, int prot); }
126	STD	LINUX	{ int linux_sigprocmask(l_int how, l_osigset_t *mask, \
				l_osigset_t *omask); }
127	STD	LINUX	{ int linux_create_module(void); }
128	STD	LINUX	{ int linux_init_module(void); }
129	STD	LINUX	{ int linux_delete_module(void); }
130	STD	LINUX	{ int linux_get_kernel_syms(void); }
131	STD	LINUX	{ int linux_quotactl(void); }
132	NOPROTO	LINUX	{ int getpgid(int pid); }
133	NOPROTO	LINUX	{ int fchdir(int fd); }
134	STD	LINUX	{ int linux_bdflush(void); }
135	STD	LINUX	{ int linux_sysfs(l_int option, l_ulong arg1, \
				l_ulong arg2); }
136	STD	LINUX	{ int linux_personality(l_ulong per); }
137	UNIMPL	LINUX	afs_syscall
138	STD	LINUX	{ int linux_setfsuid16(l_uid16_t uid); }
139	STD	LINUX	{ int linux_setfsgid16(l_gid16_t gid); }
140	STD	LINUX	{ int linux_llseek(l_int fd, l_ulong ohigh, \
				l_ulong olow, l_loff_t *res, l_uint whence); }
141	STD	LINUX	{ int linux_getdents(l_uint fd, void *dent, \
				l_uint count); }
142	STD	LINUX	{ int linux_select(l_int nfds, l_fd_set *readfds, \
				l_fd_set *writefds, l_fd_set *exceptfds, \
				struct l_timeval *timeout); }
143	NOPROTO	LINUX	{ int flock(int fd, int how); }
144	STD	LINUX	{ int linux_msync(l_ulong addr, l_size_t len, \
				l_int fl); }
145	NOPROTO	LINUX	{ int readv(int fd, struct iovec *iovp, \
				u_int iovcnt); }
146	NOPROTO	LINUX	{ int writev(int fd, struct iovec *iovp, \
				u_int iovcnt); }
147	STD	LINUX	{ int linux_getsid(l_pid_t pid); }
148	STD	LINUX	{ int linux_fdatasync(l_uint fd); }
149	STD	LINUX	{ int linux_sysctl(struct l___sysctl_args *args); }
150	NOPROTO	BSD	{ int mlock(const void *addr, size_t len); }
151	NOPROTO	BSD	{ int munlock(const void *addr, size_t len); }
152	NOPROTO	BSD	{ int mlockall(int how); }
153	NOPROTO	BSD	{ int munlockall(void); }
154	NOPROTO	POSIX	{ int sched_setparam(pid_t pid, \
				const struct sched_param *param); }
155	NOPROTO	POSIX	{ int sched_getparam(pid_t pid, \
				struct sched_param *param); }
156	STD	POSIX	{ int linux_sched_setscheduler(l_pid_t pid, \
				l_int policy, struct l_sched_param *param); }
157	STD	POSIX	{ int linux_sched_getscheduler(l_pid_t pid); }
158	NOPROTO	POSIX	{ int sched_yield(void); }
159	STD	POSIX	{ int linux_sched_get_priority_max(l_int policy); }
160	STD	POSIX	{ int linux_sched_get_priority_min(l_int policy); }
161	NOPROTO	POSIX	{ int sched_rr_get_interval(l_pid_t pid, \
				struct l_timespec *interval); }
162	NOPROTO POSIX	{ int nanosleep(const struct timespec *rqtp, \
				struct timespec *rmtp); }
163	STD	LINUX	{ int linux_mremap(l_ulong addr, l_ulong old_len, \
				l_ulong new_len, l_ulong flags, \
				l_ulong new_addr); }
164	STD	LINUX	{ int linux_setresuid16(l_uid16_t ruid, \
				l_uid16_t euid, l_uid16_t suid); }
165	STD	LINUX	{ int linux_getresuid16(l_uid16_t *ruid, \
				l_uid16_t *euid, l_uid16_t *suid); }
166	STD	LINUX	{ int linux_vm86(void); }
167	STD	LINUX	{ int linux_query_module(void); }
168	NOPROTO	LINUX	{ int poll(struct pollfd*, unsigned int nfds, \
				long timeout); }
169	STD	LINUX	{ int linux_nfsservctl(void); }
170	STD	LINUX	{ int linux_setresgid16(l_gid16_t rgid, \
				l_gid16_t egid, l_gid16_t sgid); }
171	STD	LINUX	{ int linux_getresgid16(l_gid16_t *rgid, \
				l_gid16_t *egid, l_gid16_t *sgid); }
172	STD	LINUX	{ int linux_prctl(void); }
173	STD	LINUX	{ int linux_rt_sigreturn(struct l_ucontext *ucp); }
174	STD	LINUX	{ int linux_rt_sigaction(l_int sig, \
				l_sigaction_t *act, l_sigaction_t *oact, \
				l_size_t sigsetsize); }
175	STD	LINUX	{ int linux_rt_sigprocmask(l_int how, \
				l_sigset_t *mask, l_sigset_t *omask, \
				l_size_t sigsetsize); }
176	STD	LINUX	{ int linux_rt_sigpending(void); }
177	STD	LINUX	{ int linux_rt_sigtimedwait(void); }
178	STD	LINUX	{ int linux_rt_sigqueueinfo(void); }
179	STD	LINUX	{ int linux_rt_sigsuspend(l_sigset_t *newset, \
				l_size_t sigsetsize); }
180	STD	LINUX	{ int linux_pread(l_uint fd, char *buf, \
				l_size_t nbyte, l_loff_t offset); }
181	STD	LINUX	{ int linux_pwrite(l_uint fd, char *buf, \
				l_size_t nbyte, l_loff_t offset); }
182	STD	LINUX	{ int linux_chown16(char *path, l_uid16_t uid, \
				l_gid16_t gid); }
183	STD	LINUX	{ int linux_getcwd(char *buf, l_ulong bufsize); }
184	STD	LINUX	{ int linux_capget(void); }
185	STD	LINUX	{ int linux_capset(void); }
186	STD	LINUX	{ int linux_sigaltstack(l_stack_t *uss, \
				l_stack_t *uoss); }
187	STD	LINUX	{ int linux_sendfile(void); }
188	UNIMPL	LINUX	getpmsg
189	UNIMPL	LINUX	putpmsg
190	STD	LINUX	{ int linux_vfork(void); }
191	STD	LINUX	{ int linux_getrlimit(l_uint resource, \
				struct l_rlimit *rlim); }
192	STD	LINUX	{ int linux_mmap2(l_ulong addr, l_ulong len, \
				l_ulong prot, l_ulong flags, l_ulong fd, \
				l_ulong pgoff); }
193	STD	LINUX	{ int linux_truncate64(char *path, l_loff_t length); }
194	STD	LINUX	{ int linux_ftruncate64(l_uint fd, l_loff_t length); }
195	STD	LINUX	{ int linux_stat64(char *filename, \
				struct l_stat64 *statbuf, l_long flags); }
196	STD	LINUX	{ int linux_lstat64(char *filename, \
				struct l_stat64 *statbuf, l_long flags); }
197	STD	LINUX	{ int linux_fstat64(l_ulong fd, \
				struct l_stat64 *statbuf, l_long flags); }
198	STD	LINUX	{ int linux_lchown(char *path, l_uid_t uid, \
				l_gid_t gid); }
199	STD	POSIX	{ int linux_getuid(void); }
200	STD	POSIX	{ int linux_getgid(void); }
201	NOPROTO	POSIX	{ int geteuid(void); }
202	NOPROTO	POSIX	{ int getegid(void); }
203	NOPROTO	LINUX	{ int setreuid(uid_t ruid, uid_t euid); }
204	NOPROTO	LINUX	{ int setregid(gid_t rgid, gid_t egid); }
205	STD	LINUX	{ int linux_getgroups(l_int gidsetsize, \
				l_gid_t *grouplist); }
206	STD	LINUX	{ int linux_setgroups(l_int gidsetsize, \
				l_gid_t *grouplist); }
207	NODEF	LINUX	fchown fchown fchown_args int
208	NOPROTO	LINUX	{ int setresuid(uid_t ruid, uid_t euid, uid_t suid); }
209	NOPROTO	LINUX	{ int getresuid(uid_t *ruid, uid_t *euid, \
				uid_t *suid); }
210	NOPROTO	LINUX	{ int setresgid(gid_t rgid, gid_t egid, gid_t sgid); }
211	NOPROTO	LINUX	{ int getresgid(gid_t *rgid, gid_t *egid, \
				gid_t *sgid); }
212	STD	LINUX	{ int linux_chown(char *path, l_uid_t uid, \
				l_gid_t gid); }
213	NOPROTO	LINUX	{ int setuid(uid_t uid); }
214	NOPROTO	LINUX	{ int setgid(gid_t gid); }
215	STD	LINUX	{ int linux_setfsuid(l_uid_t uid); }
216	STD	LINUX	{ int linux_setfsgid(l_gid_t gid); }
217	STD	LINUX	{ int linux_pivot_root(char *new_root, \
				char *put_old); }
218	STD	LINUX	{ int linux_mincore(l_ulong start, l_size_t len, \
				u_char *vec); }
219	STD	LINUX	{ int linux_madvise(void); }
220	STD	LINUX	{ int linux_getdents64(l_uint fd, void *dirent, \
				l_uint count); }
221	STD	LINUX	{ int linux_fcntl64(l_uint fd, l_uint cmd, \
				l_ulong arg); }
222     UNIMPL
223     UNIMPL
224     UNIMPL  LINUX   linux_gettid
225     UNIMPL  LINUX   linux_readahead
226     UNIMPL
227     UNIMPL
228     UNIMPL
229     UNIMPL
230     UNIMPL
231     UNIMPL
232     UNIMPL
233     UNIMPL
234     UNIMPL
235     UNIMPL
236     UNIMPL
237     UNIMPL
238     UNIMPL  LINUX   linux_tkill
239     UNIMPL  LINUX   linux_sendfile64
240     UNIMPL  LINUX   linux_futex
241     UNIMPL  LINUX   linux_sched_setaffinity
242     UNIMPL  LINUX   linux_sched_getaffinity
243     UNIMPL  LINUX   linux_set_thread_area
244     UNIMPL  LINUX   linux_get_thread_area
245     UNIMPL  LINUX   linux_io_setup
246     UNIMPL  LINUX   linux_io_destroy
247     UNIMPL  LINUX   linux_io_getevents
248     UNIMPL  LINUX   linux_io_submit
249     UNIMPL  LINUX   linux_io_cancel
250	UNIMPL	LINUX	linux_fadvise64
251     UNIMPL
252     NOPROTO LINUX  { void sys_exit(int rval); } exit_group sys_exit_args void


More information about the freebsd-bugs mailing list