diff --git a/include/unistd.h b/include/unistd.h --- a/include/unistd.h +++ b/include/unistd.h @@ -463,12 +463,10 @@ #endif /* __XSI_VISIBLE */ #if (__XSI_VISIBLE && __XSI_VISIBLE <= 500) || __BSD_VISIBLE -int brk(const void *); int chroot(const char *); int getdtablesize(void); int getpagesize(void) __pure2; char *getpass(const char *); -void *sbrk(intptr_t); #endif #if (__XSI_VISIBLE && __XSI_VISIBLE <= 600) || __BSD_VISIBLE diff --git a/lib/libc/amd64/Symbol.map b/lib/libc/amd64/Symbol.map --- a/lib/libc/amd64/Symbol.map +++ b/lib/libc/amd64/Symbol.map @@ -18,8 +18,6 @@ amd64_get_gsbase; amd64_set_fsbase; amd64_set_gsbase; - brk; - sbrk; }; FBSD_1.6 { @@ -43,6 +41,5 @@ __signalcontext; signalcontext; __siglongjmp; - _brk; _vfork; }; diff --git a/lib/libc/arm/Symbol.map b/lib/libc/arm/Symbol.map --- a/lib/libc/arm/Symbol.map +++ b/lib/libc/arm/Symbol.map @@ -6,8 +6,6 @@ FBSD_1.0 { __mcount; alloca; - brk; - sbrk; }; FBSD_1.3 { @@ -35,8 +33,6 @@ _signalcontext; __siglongjmp; _vfork; - _brk; - _sbrk; _libc_arm_fpu_present; }; diff --git a/lib/libc/i386/Symbol.map b/lib/libc/i386/Symbol.map --- a/lib/libc/i386/Symbol.map +++ b/lib/libc/i386/Symbol.map @@ -8,7 +8,6 @@ alloca; __flt_rounds; rfork_thread; - brk; i386_clr_watch; i386_get_fsbase; i386_get_gsbase; @@ -20,7 +19,6 @@ i386_set_ldt; i386_set_watch; i386_vm86; - sbrk; ___tls_get_addr; }; @@ -41,5 +39,4 @@ signalcontext; __siglongjmp; _vfork; - _brk; }; diff --git a/lib/libc/powerpc/Symbol.map b/lib/libc/powerpc/Symbol.map --- a/lib/libc/powerpc/Symbol.map +++ b/lib/libc/powerpc/Symbol.map @@ -11,8 +11,6 @@ fpgetsticky; fpsetmask; fpsetround; - brk; - sbrk; }; FBSD_1.3 { diff --git a/lib/libc/powerpc64/Symbol.map b/lib/libc/powerpc64/Symbol.map --- a/lib/libc/powerpc64/Symbol.map +++ b/lib/libc/powerpc64/Symbol.map @@ -11,8 +11,6 @@ fpgetsticky; fpsetmask; fpsetround; - brk; - sbrk; }; FBSDprivate_1.0 { diff --git a/lib/libc/sys/brk.c b/lib/libc/sys/brk.c --- a/lib/libc/sys/brk.c +++ b/lib/libc/sys/brk.c @@ -31,7 +31,11 @@ #include #include -void *__sys_break(char *nsize); +int __freebsd14__brk(const void *addr); +int __freebsd14_brk(const void *addr); +void *__freebsd14_sbrk(intptr_t incr); + +void *freebsd14_break(char *nsize); static uintptr_t curbrk, minbrk; static int curbrk_initted; @@ -42,7 +46,7 @@ void *newbrk; if (!curbrk_initted) { - newbrk = __sys_break(NULL); + newbrk = freebsd14_break(NULL); if (newbrk == (void *)-1) return (-1); curbrk = minbrk = (uintptr_t)newbrk; @@ -61,7 +65,7 @@ errno = EINVAL; return ((void *)-1); } - if (__sys_break(addr) == (void *)-1) + if (freebsd14_break(addr) == (void *)-1) return ((void *)-1); oldbrk = curbrk; curbrk = (uintptr_t)addr; @@ -69,7 +73,7 @@ } int -brk(const void *addr) +__freebsd14_brk(const void *addr) { if (initbrk() == -1) @@ -80,7 +84,7 @@ } int -_brk(const void *addr) +__freebsd14__brk(const void *addr) { if (initbrk() == -1) @@ -89,7 +93,7 @@ } void * -sbrk(intptr_t incr) +__freebsd14_sbrk(intptr_t incr) { if (initbrk() == -1) @@ -102,3 +106,9 @@ } return (mvbrk((void *)(curbrk + incr))); } + +#ifndef __powerpc__ +__sym_compat(_brk, __freebsd14_brk, FBSD_1.0); +#endif +__sym_compat(brk, __freebsd14_brk, FBSD_1.0); +__sym_compat(sbrk, __freebsd14_sbrk, FBSD_1.0); diff --git a/sys/compat/freebsd32/freebsd32_syscall.h b/sys/compat/freebsd32/freebsd32_syscall.h --- a/sys/compat/freebsd32/freebsd32_syscall.h +++ b/sys/compat/freebsd32/freebsd32_syscall.h @@ -21,7 +21,7 @@ #define FREEBSD32_SYS_freebsd11_mknod 14 #define FREEBSD32_SYS_chmod 15 #define FREEBSD32_SYS_chown 16 -#define FREEBSD32_SYS_break 17 +#define FREEBSD32_SYS_freebsd14_break 17 /* 18 is freebsd4 freebsd32_getfsstat */ /* 19 is old freebsd32_lseek */ #define FREEBSD32_SYS_getpid 20 diff --git a/sys/compat/freebsd32/freebsd32_syscalls.c b/sys/compat/freebsd32/freebsd32_syscalls.c --- a/sys/compat/freebsd32/freebsd32_syscalls.c +++ b/sys/compat/freebsd32/freebsd32_syscalls.c @@ -22,7 +22,7 @@ "compat11.mknod", /* 14 = freebsd11 mknod */ "chmod", /* 15 = chmod */ "chown", /* 16 = chown */ - "break", /* 17 = break */ + "compat14.break", /* 17 = freebsd14 break */ "compat4.freebsd32_getfsstat", /* 18 = freebsd4 freebsd32_getfsstat */ "compat.freebsd32_lseek", /* 19 = old freebsd32_lseek */ "getpid", /* 20 = getpid */ diff --git a/sys/compat/freebsd32/freebsd32_sysent.c b/sys/compat/freebsd32/freebsd32_sysent.c --- a/sys/compat/freebsd32/freebsd32_sysent.c +++ b/sys/compat/freebsd32/freebsd32_sysent.c @@ -59,6 +59,12 @@ #define compat13(n, name) .sy_narg = 0, .sy_call = (sy_call_t *)nosys #endif +#ifdef COMPAT_FREEBSD14 +#define compat14(n, name) .sy_narg = n, .sy_call = (sy_call_t *)__CONCAT(freebsd14_, name) +#else +#define compat14(n, name) .sy_narg = 0, .sy_call = (sy_call_t *)nosys +#endif + /* The casts are bogus but will do for now. */ struct sysent freebsd32_sysent[] = { { .sy_narg = 0, .sy_call = (sy_call_t *)nosys, .sy_auevent = AUE_NULL, .sy_flags = 0, .sy_thrcnt = SY_THR_STATIC }, /* 0 = syscall */ @@ -78,7 +84,7 @@ { compat11(AS(freebsd11_mknod_args),mknod), .sy_auevent = AUE_MKNOD, .sy_flags = 0, .sy_thrcnt = SY_THR_STATIC }, /* 14 = freebsd11 mknod */ { .sy_narg = AS(chmod_args), .sy_call = (sy_call_t *)sys_chmod, .sy_auevent = AUE_CHMOD, .sy_flags = 0, .sy_thrcnt = SY_THR_STATIC }, /* 15 = chmod */ { .sy_narg = AS(chown_args), .sy_call = (sy_call_t *)sys_chown, .sy_auevent = AUE_CHOWN, .sy_flags = 0, .sy_thrcnt = SY_THR_STATIC }, /* 16 = chown */ - { .sy_narg = AS(break_args), .sy_call = (sy_call_t *)sys_break, .sy_auevent = AUE_NULL, .sy_flags = SYF_CAPENABLED, .sy_thrcnt = SY_THR_STATIC }, /* 17 = break */ + { compat14(AS(freebsd14_break_args),break), .sy_auevent = AUE_NULL, .sy_flags = SYF_CAPENABLED, .sy_thrcnt = SY_THR_STATIC }, /* 17 = freebsd14 break */ { compat4(AS(freebsd4_freebsd32_getfsstat_args),freebsd32_getfsstat), .sy_auevent = AUE_GETFSSTAT, .sy_flags = 0, .sy_thrcnt = SY_THR_STATIC }, /* 18 = freebsd4 freebsd32_getfsstat */ { compat(AS(ofreebsd32_lseek_args),freebsd32_lseek), .sy_auevent = AUE_LSEEK, .sy_flags = SYF_CAPENABLED, .sy_thrcnt = SY_THR_STATIC }, /* 19 = old freebsd32_lseek */ { .sy_narg = 0, .sy_call = (sy_call_t *)sys_getpid, .sy_auevent = AUE_GETPID, .sy_flags = SYF_CAPENABLED, .sy_thrcnt = SY_THR_STATIC }, /* 20 = getpid */ diff --git a/sys/compat/freebsd32/freebsd32_systrace_args.c b/sys/compat/freebsd32/freebsd32_systrace_args.c --- a/sys/compat/freebsd32/freebsd32_systrace_args.c +++ b/sys/compat/freebsd32/freebsd32_systrace_args.c @@ -121,13 +121,6 @@ *n_args = 3; break; } - /* break */ - case 17: { - struct break_args *p = params; - uarg[a++] = (intptr_t)p->nsize; /* char * */ - *n_args = 1; - break; - } /* getpid */ case 20: { *n_args = 0; @@ -3532,16 +3525,6 @@ break; }; break; - /* break */ - case 17: - switch (ndx) { - case 0: - p = "userland char *"; - break; - default: - break; - }; - break; /* getpid */ case 20: break; @@ -9142,11 +9125,6 @@ if (ndx == 0 || ndx == 1) p = "int"; break; - /* break */ - case 17: - if (ndx == 0 || ndx == 1) - p = "void *"; - break; /* getpid */ case 20: /* mount */ diff --git a/sys/kern/init_sysent.c b/sys/kern/init_sysent.c --- a/sys/kern/init_sysent.c +++ b/sys/kern/init_sysent.c @@ -58,6 +58,12 @@ #define compat13(n, name) .sy_narg = 0, .sy_call = (sy_call_t *)nosys #endif +#ifdef COMPAT_FREEBSD14 +#define compat14(n, name) .sy_narg = n, .sy_call = (sy_call_t *)__CONCAT(freebsd14_, name) +#else +#define compat14(n, name) .sy_narg = 0, .sy_call = (sy_call_t *)nosys +#endif + /* The casts are bogus but will do for now. */ struct sysent sysent[] = { { .sy_narg = 0, .sy_call = (sy_call_t *)nosys, .sy_auevent = AUE_NULL, .sy_flags = 0, .sy_thrcnt = SY_THR_STATIC }, /* 0 = syscall */ @@ -77,7 +83,7 @@ { compat11(AS(freebsd11_mknod_args),mknod), .sy_auevent = AUE_MKNOD, .sy_flags = 0, .sy_thrcnt = SY_THR_STATIC }, /* 14 = freebsd11 mknod */ { .sy_narg = AS(chmod_args), .sy_call = (sy_call_t *)sys_chmod, .sy_auevent = AUE_CHMOD, .sy_flags = 0, .sy_thrcnt = SY_THR_STATIC }, /* 15 = chmod */ { .sy_narg = AS(chown_args), .sy_call = (sy_call_t *)sys_chown, .sy_auevent = AUE_CHOWN, .sy_flags = 0, .sy_thrcnt = SY_THR_STATIC }, /* 16 = chown */ - { .sy_narg = AS(break_args), .sy_call = (sy_call_t *)sys_break, .sy_auevent = AUE_NULL, .sy_flags = SYF_CAPENABLED, .sy_thrcnt = SY_THR_STATIC }, /* 17 = break */ + { compat14(AS(freebsd14_break_args),break), .sy_auevent = AUE_NULL, .sy_flags = SYF_CAPENABLED, .sy_thrcnt = SY_THR_STATIC }, /* 17 = freebsd14 break */ { compat4(AS(freebsd4_getfsstat_args),getfsstat), .sy_auevent = AUE_GETFSSTAT, .sy_flags = 0, .sy_thrcnt = SY_THR_STATIC }, /* 18 = freebsd4 getfsstat */ { compat(AS(olseek_args),lseek), .sy_auevent = AUE_LSEEK, .sy_flags = SYF_CAPENABLED, .sy_thrcnt = SY_THR_STATIC }, /* 19 = old lseek */ { .sy_narg = 0, .sy_call = (sy_call_t *)sys_getpid, .sy_auevent = AUE_GETPID, .sy_flags = SYF_CAPENABLED, .sy_thrcnt = SY_THR_STATIC }, /* 20 = getpid */ diff --git a/sys/kern/syscalls.c b/sys/kern/syscalls.c --- a/sys/kern/syscalls.c +++ b/sys/kern/syscalls.c @@ -22,7 +22,7 @@ "compat11.mknod", /* 14 = freebsd11 mknod */ "chmod", /* 15 = chmod */ "chown", /* 16 = chown */ - "break", /* 17 = break */ + "compat14.break", /* 17 = freebsd14 break */ "compat4.getfsstat", /* 18 = freebsd4 getfsstat */ "compat.lseek", /* 19 = old lseek */ "getpid", /* 20 = getpid */ diff --git a/sys/kern/syscalls.master b/sys/kern/syscalls.master --- a/sys/kern/syscalls.master +++ b/sys/kern/syscalls.master @@ -213,7 +213,7 @@ int gid ); } -17 AUE_NULL STD|CAPENABLED { +17 AUE_NULL COMPAT14|CAPENABLED { void *break( _In_ char *nsize ); diff --git a/sys/kern/systrace_args.c b/sys/kern/systrace_args.c --- a/sys/kern/systrace_args.c +++ b/sys/kern/systrace_args.c @@ -118,13 +118,6 @@ *n_args = 3; break; } - /* break */ - case 17: { - struct break_args *p = params; - uarg[a++] = (intptr_t)p->nsize; /* char * */ - *n_args = 1; - break; - } /* getpid */ case 20: { *n_args = 0; @@ -3619,16 +3612,6 @@ break; }; break; - /* break */ - case 17: - switch (ndx) { - case 0: - p = "userland char *"; - break; - default: - break; - }; - break; /* getpid */ case 20: break; @@ -9287,11 +9270,6 @@ if (ndx == 0 || ndx == 1) p = "int"; break; - /* break */ - case 17: - if (ndx == 0 || ndx == 1) - p = "void *"; - break; /* getpid */ case 20: /* mount */ diff --git a/sys/sys/syscall.h b/sys/sys/syscall.h --- a/sys/sys/syscall.h +++ b/sys/sys/syscall.h @@ -21,7 +21,7 @@ #define SYS_freebsd11_mknod 14 #define SYS_chmod 15 #define SYS_chown 16 -#define SYS_break 17 +#define SYS_freebsd14_break 17 /* 18 is freebsd4 getfsstat */ /* 19 is old lseek */ #define SYS_getpid 20 diff --git a/sys/sys/syscall.mk b/sys/sys/syscall.mk --- a/sys/sys/syscall.mk +++ b/sys/sys/syscall.mk @@ -16,7 +16,7 @@ freebsd11_mknod.o \ chmod.o \ chown.o \ - break.o \ + freebsd14_break.o \ getpid.o \ mount.o \ unmount.o \ diff --git a/sys/sys/sysproto.h b/sys/sys/sysproto.h --- a/sys/sys/sysproto.h +++ b/sys/sys/sysproto.h @@ -85,9 +85,6 @@ char uid_l_[PADL_(int)]; int uid; char uid_r_[PADR_(int)]; char gid_l_[PADL_(int)]; int gid; char gid_r_[PADR_(int)]; }; -struct break_args { - char nsize_l_[PADL_(char *)]; char * nsize; char nsize_r_[PADR_(char *)]; -}; struct getpid_args { syscallarg_t dummy; }; @@ -1883,7 +1880,6 @@ int sys_fchdir(struct thread *, struct fchdir_args *); int sys_chmod(struct thread *, struct chmod_args *); int sys_chown(struct thread *, struct chown_args *); -int sys_break(struct thread *, struct break_args *); int sys_getpid(struct thread *, struct getpid_args *); int sys_mount(struct thread *, struct mount_args *); int sys_unmount(struct thread *, struct unmount_args *); @@ -2762,6 +2758,10 @@ #ifdef COMPAT_FREEBSD14 +struct freebsd14_break_args { + char nsize_l_[PADL_(char *)]; char * nsize; char nsize_r_[PADR_(char *)]; +}; +int freebsd14_break(struct thread *, struct freebsd14_break_args *); #endif /* COMPAT_FREEBSD14 */ @@ -2780,7 +2780,7 @@ #define SYS_AUE_freebsd11_mknod AUE_MKNOD #define SYS_AUE_chmod AUE_CHMOD #define SYS_AUE_chown AUE_CHOWN -#define SYS_AUE_break AUE_NULL +#define SYS_AUE_freebsd14_break AUE_NULL #define SYS_AUE_freebsd4_getfsstat AUE_GETFSSTAT #define SYS_AUE_olseek AUE_LSEEK #define SYS_AUE_getpid AUE_GETPID diff --git a/sys/vm/vm_unix.c b/sys/vm/vm_unix.c --- a/sys/vm/vm_unix.c +++ b/sys/vm/vm_unix.c @@ -59,13 +59,14 @@ #include #include +#ifdef COMPAT_FREEBSD14 #ifndef _SYS_SYSPROTO_H_ -struct break_args { +struct freebsd14_break_args { char *nsize; }; #endif int -sys_break(struct thread *td, struct break_args *uap) +freebsd14_break(struct thread *td, struct freebsd14_break_args *uap) { #if !defined(__aarch64__) && !defined(__riscv) uintptr_t addr; @@ -80,6 +81,7 @@ return (ENOSYS); #endif /* defined(__aarch64__) || defined(__riscv) */ } +#endif int kern_break(struct thread *td, uintptr_t *addr)