Recently I wrote a shell script, made a syntax error and watched ksh93 dump core. To reproduce, create a file with the following content a() { b } then try to run this as a ksh93 shell script. The result looks like this: $ ksh93 ksh_crash.sh ksh_crash.sh: syntax error at line 2: `{' unmatched Memory fault(coredump) This is the version reported by ksh93: $ echo $KSH_VERSION Version AJM 93u+ 2012-08-01
I believe this is no longer occuring with 93v- 2014-12-24
Hello, the patches are attached to the ksh93 port update at https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=211164
Is this still relevant?
The problem still occurs with ksh93 from pkg and with ksh93 built from ports, so it's still open.
cy: can you have a look ? or merge ksh93 and -devel ?
This has been fixed in ksh93-devel. slippy$ ksh93 ksh_crash.sh ksh_crash.sh: syntax error at line 2: `{' unmatched slippy$ We could update to 93v. The tag is there but we will need to fetch from github instead of http://www2.research.att.com/~astopen/download/tgz/. The tags we can use are: slippy$ git tag 2017.0.0-devel 93u 93v ksh93u ksh93v slippy$ Perusing through the repo, looks like 93v and ksh93v are the same. Repocopying shells/ksh93 with -devel isn't as straight forward as it appears. ksh93-devel uses meson and ninja whereas ksh93v does not. Suggest we use PR/211164 except fetch the file from github rather than some random file hosting site. Unless packaged by the author and mirrored, there are fewer exposures through github rather than rolled by someone else or rolled by the port maintainer. Let's reopen PR/211164 and update the Makefile to use github instead. You won't need INIT either.
I've reopened 211164 and have updated the patch to fetch from att/ast on GH.
Let's move the discussion to 211164.
The patch in PR/211164 doesn't work with 93v from att/ast and I've spent too much time on it already. Suggest we either: a) Delete shells/ksh93 and use shells/ksh93-devel instead, or b) Live with the brokenness until att/ast tags a new tag from which to update shell/ksh93. c) svn copy ksh93-devel at some point and leave it. (What would the point of ksh93 be then?) I can't spend any more time on this as there is more important FreeBSD work that needs to get done first. pi@, do you want to take this PR back? Do we want to simply close this PR instead?
(In reply to Cy Schubert from comment #9) What could I do to fix it ? The update-PR 211164 is closed/rejected by the maintainer, so what can be done ? I'm in no position to find a patch for the non-devel ksh93 to fix the bug. > Do we want to simply close this PR instead? The bug raised in 208098 is a valid bug. In general, I think both versions should be merged to fix the bug. But if both maintainers disagree on that, there's no sensible way forward.
Let's deprecate/delete shells/ksh93 and use ksh93-devel instead. diff --git a/shells/ksh93/Makefile b/shells/ksh93/Makefile index 5535114ff480..d24b6e148c97 100644 --- a/shells/ksh93/Makefile +++ b/shells/ksh93/Makefile @@ -23,6 +23,8 @@ MAINTAINER= saper@saper.info COMMENT= Official AT&T release of KornShell 93 LICENSE= EPL +DEPRECATED= Contains many bugs, unmaintainable, superceeded by ksh93-devel +EXPIRATION_DATE= 2019-03-31 CONFLICTS= ksh93-devel-*
Requested maintainer approval to deprecate and delete shells/ksh93.
See https://reviews.freebsd.org/D19331.
Hello, I have a working set of patches based on the GitHub ksh93v release: > echo $KSH_VERSION Version ABIJM 93v- 2014-12-24 This pulls off last AT&T release from https://github.com/att/ast/archive/ksh93v.tar.gz and applies patches. I need to test it on newer FreeBSD versions and I'll post it here.
Excellent!
Created attachment 202345 [details] Update ksh93 to 2014-12-24 (or rather 2016-01-10 beta) Work in progress: Here is my first attempt to fix the problem. I still need to decide which date should be assigned to this release (since it includes library code updated on 2016-10-01). Since this is a stripped down build (not a full AST package), need to bring back tests and also review test results. Builds fine on 10.x and 11.2. Need to try 12.x and -CURRENT Feedback welcome!
the patch submitted also as https://reviews.freebsd.org/D19343
I'm still of the opinion that we deprecate and delete shells/ksh93. ksh93-devel addresses this bug and many more. We can consider resurrecting ksh93 after att/ast create a new release. Should I submit a review for deprecation, expiry and deletion?
Created attachment 202831 [details] Update ksh93 to 2014-12-24 (or rather 2016-01-10 beta) from GitHub Now using arcanist to create the patch
Comment on attachment 202345 [details] Update ksh93 to 2014-12-24 (or rather 2016-01-10 beta) >diff -ruN /usr/ports/shells/ksh93/distinfo ./distinfo >--- /usr/ports/shells/ksh93/distinfo 2013-08-09 21:01:58.000000000 +0200 >+++ ./distinfo 2019-02-25 09:07:46.017130000 +0100 >@@ -1,4 +1,3 @@ >-SHA256 (ksh93/INIT.2013-05-24.tgz) = 118b2c8a4d651727fcd680289be69941d3045951bf9e3a4d45dcb42f0658f014 >-SIZE (ksh93/INIT.2013-05-24.tgz) = 383979 >-SHA256 (ksh93/ast-ksh.2012-08-01.tgz) = e6192cfa52a6a9fd20618cbaf3fa81f0cc9fd83525500757e83017275e962851 >-SIZE (ksh93/ast-ksh.2012-08-01.tgz) = 2053532 >+TIMESTAMP = 1551054883 >+SHA256 (ksh93/ksh93v.tar.gz) = 89e5aeec66c28692aa392105552c06053ba60b09a62e94dc555dadf967bca643 >+SIZE (ksh93/ksh93v.tar.gz) = 26409086 >diff -ruN /usr/ports/shells/ksh93/files/patch-src_cmd_INIT_iffe.sh ./files/patch-src_cmd_INIT_iffe.sh >--- /usr/ports/shells/ksh93/files/patch-src_cmd_INIT_iffe.sh 2017-02-09 21:26:22.000000000 +0100 >+++ ./files/patch-src_cmd_INIT_iffe.sh 1970-01-01 01:00:00.000000000 +0100 >@@ -1,20 +0,0 @@ >---- src/cmd/INIT/iffe.sh.orig 2013-03-06 16:33:17 UTC >-+++ src/cmd/INIT/iffe.sh >-@@ -3414,7 +3414,7 @@ $src >- (eval "$src") <&$nullin || e=1 >- ;; >- mac*|nomac*) >-- if compile $cc -E $tmp.c <&$nullin >$tmp.i >-+ if compile $cc -E -P $tmp.c <&$nullin >$tmp.i >- then sed -e '/<<[ ]*".*"[ ]*>>/!d' -e 's/<<[ ]*"//g' -e 's/"[ ]*>>//g' $tmp.i >- else e=1 >- fi >-@@ -3705,7 +3705,7 @@ $inc >- <<\"#define $v\">> $v <<\"/* native $v */\">> >- <<\"#endif\">> >- #endif" > $tmp.c >-- if compile $cc -E $tmp.c <&$nullin >$tmp.i >-+ if compile $cc -E -P $tmp.c <&$nullin >$tmp.i >- then sed -e '/<<[ ]*".*"[ ]*>>/!d' -e 's/<<[ ]*"//g' -e 's/"[ ]*>>//g' $tmp.i > $tmp.t >- if test -s $tmp.t >- then success >diff -ruN /usr/ports/shells/ksh93/files/patch-src_cmd_proto_proto.c ./files/patch-src_cmd_proto_proto.c >--- /usr/ports/shells/ksh93/files/patch-src_cmd_proto_proto.c 1970-01-01 01:00:00.000000000 +0100 >+++ ./files/patch-src_cmd_proto_proto.c 2019-02-25 09:07:46.017607000 +0100 >@@ -0,0 +1,18 @@ >+--- src/cmd/proto/proto.c.orig 2017-11-30 22:35:04 UTC >++++ src/cmd/proto/proto.c >+@@ -396,6 +396,15 @@ proto(char* file, char* license, char* o >+ >+ #if !PROTO_STANDALONE >+ #undef error >++void >++error( int xit, const char *msg, ... ) >++{ >++ va_list ap; >++ va_start( ap, msg ); >++ vfprintf( stderr, msg, ap ); >++ va_end( ap ); >++ exit( xit ); >++} >+ #endif >+ >+ typedef struct Sufcom_s >diff -ruN /usr/ports/shells/ksh93/files/patch-src_cmd_std_features_procfs ./files/patch-src_cmd_std_features_procfs >--- /usr/ports/shells/ksh93/files/patch-src_cmd_std_features_procfs 1970-01-01 01:00:00.000000000 +0100 >+++ ./files/patch-src_cmd_std_features_procfs 2019-02-25 09:07:46.017964000 +0100 >@@ -0,0 +1,36 @@ >+--- src/cmd/std/features/procfs.orig 2017-11-30 22:35:04 UTC >++++ src/cmd/std/features/procfs >+@@ -1,6 +1,6 @@ >+ hdr kvm,procinfo,pstat,asm/param >+ >+-sys procfs,sysctl >++sys procfs,sysctl,user >+ >+ lib getprocs >+ lib kvm_open,kvm_getprocs kvm.h sys/time.h sys/param.h sys/proc.h sys/sysctl.h -lkvm >+@@ -10,7 +10,11 @@ mem extern_proc.p_pid,extern_proc.p_star >+ mem procsinfo64.pi_pri procinfo.h >+ mem prpsinfo.pr_clname,prpsinfo.pr_cstime,prpsinfo.pr_cstime.tv_sec,prpsinfo.pr_ctime,prpsinfo.pr_cutime,prpsinfo.pr_gid,prpsinfo.pr_lttydev,prpsinfo.pr_ntpid,prpsinfo.pr_pgid,prpsinfo.pr_pgrp,prpsinfo.pr_psargs,prpsinfo.pr_refcount,prpsinfo.pr_rssize,prpsinfo.pr_sid,prpsinfo.pr_sonproc,prpsinfo.pr_start,prpsinfo.pr_start.tv_sec,prpsinfo.pr_starttime,prpsinfo.pr_starttime.tv_sec,prpsinfo.pr_state,prpsinfo.pr_stime,prpsinfo.pr_tgrp,prpsinfo.pr_time,prpsinfo.pr_time.tv_sec,prpsinfo.pr_utime,prpsinfo.pr_zomb,prpsinfo.pr_pctcpu,prpsinfo.pr_cpu,prpsinfo.pr_lwp.pr_pctcpu,prpsinfo.pr_lwp.pr_cpu -D_STRUCTURED_PROC -Dprpsinfo=psinfo sys/types.h sys/procfs.h >+ >++num PIOCPSINFO >++ >+ typ struct.prpsinfo -D_STRUCTURED_PROC -Dprpsinfo=psinfo sys/types.h sys/procfs.h >++typ struct.kinfo_proc sys/types.h sys/procfs.h sys/user.h >++typ struct.kp_proc sys/types.h sys/procfs.h sys/user.h >+ >+ tst lib_info note{ info(2) kernel table api }end link{ >+ #include <info.h> >+@@ -587,11 +591,11 @@ cat{ >+ #define PSS_METHOD PSS_METHOD_getprocs >+ #endif >+ >+-#if !PSS_METHOD && defined(_PS_dir) >++#if !PSS_METHOD && defined(_PS_dir) && (_PS_scan_binary || _num_PIOCPSINFO) >+ #define PSS_METHOD PSS_METHOD_procfs >+ #endif >+ >+-#if !PSS_METHOD && _hdr_kvm && _sys_sysctl && _lib_kvm_open && _lib_kvm_getprocs >++#if !PSS_METHOD && _hdr_kvm && _sys_sysctl && _lib_kvm_open && _lib_kvm_getprocs && _typ_struct_kinfo_proc && _typ_struct_kp_proc >+ #define PSS_METHOD PSS_METHOD_kvm >+ #endif >+ >diff -ruN /usr/ports/shells/ksh93/files/patch-src_cmd_std_pss-kvm.c ./files/patch-src_cmd_std_pss-kvm.c >--- /usr/ports/shells/ksh93/files/patch-src_cmd_std_pss-kvm.c 1970-01-01 01:00:00.000000000 +0100 >+++ ./files/patch-src_cmd_std_pss-kvm.c 2019-02-25 09:07:46.018260000 +0100 >@@ -0,0 +1,12 @@ >+--- src/cmd/std/pss-kvm.c.orig 2017-11-30 22:35:04 UTC >++++ src/cmd/std/pss-kvm.c >+@@ -43,6 +43,9 @@ NoN(pss_kvm) >+ #if _sys_proc >+ #include <sys/proc.h> >+ #endif >++#if _sys_user >++#include <sys/user.h> >++#endif >+ #include <sys/sysctl.h> >+ #include <sys/tty.h> >+ >diff -ruN /usr/ports/shells/ksh93/files/patch-src_lib_libast_comp_setlocale.c ./files/patch-src_lib_libast_comp_setlocale.c >--- /usr/ports/shells/ksh93/files/patch-src_lib_libast_comp_setlocale.c 1970-01-01 01:00:00.000000000 +0100 >+++ ./files/patch-src_lib_libast_comp_setlocale.c 2019-02-25 09:07:46.018555000 +0100 >@@ -0,0 +1,10 @@ >+--- src/lib/libast/comp/setlocale.c.orig 2017-11-30 22:35:04 UTC >++++ src/lib/libast/comp/setlocale.c >+@@ -38,6 +38,7 @@ >+ #include <namval.h> >+ #include <iconv.h> >+ #include <codeset.h> >++#include <errno.h> >+ >+ #if ( _lib_wcwidth || _lib_wctomb ) && _hdr_wctype >+ #include <wctype.h> >diff -ruN /usr/ports/shells/ksh93/files/patch-src_lib_libast_features_mmap ./files/patch-src_lib_libast_features_mmap >--- /usr/ports/shells/ksh93/files/patch-src_lib_libast_features_mmap 1970-01-01 01:00:00.000000000 +0100 >+++ ./files/patch-src_lib_libast_features_mmap 2019-02-25 09:07:46.018937000 +0100 >@@ -0,0 +1,191 @@ >+--- src/lib/libast/features/mmap.orig 2016-02-28 17:09:23 UTC >++++ src/lib/libast/features/mmap >+@@ -16,14 +16,7 @@ tst lib_mmap note{ standard mmap interfa >+ >+ #define Failed(file) (remove(file),1) >+ >+- int >+- #if _STD_ >+- main(int argc, char** argv) >+- #else >+- main(argc,argv) >+- int argc; >+- char** argv; >+- #endif >++ int main(int argc, char** argv) >+ { >+ caddr_t mm; >+ char *file; >+@@ -165,169 +158,18 @@ tst lib_mmap64 -D_LARGEFILE64_SOURCE not >+ } >+ }end >+ >+-tst mmap_anon note{ use mmap MAP_ANON to get raw memory }end execute{ >+- #if !_lib_mmap >+- ( >+- #endif >+- #include <unistd.h> >+- #include <fcntl.h> >+- #include <sys/types.h> >+- #include <sys/mman.h> >+- #if defined(MAP_ANONYMOUS) && !defined(MAP_ANON) >+- #define MAP_ANON MAP_ANONYMOUS >+- #endif >+- int >+- main() >+- { void *addr; >+- addr = mmap(0,1024*1024,PROT_READ|PROT_WRITE,MAP_ANON|MAP_PRIVATE,-1,0); >+- return (addr && addr != (void*)(-1)) ? 0 : 1; >+- } >+-}end >+- >+-tst mmap_devzero note{ use mmap on /dev/zero to get raw memory }end execute{ >+- #if !_lib_mmap >+- ( >+- #endif >+- #include <unistd.h> >+- #include <fcntl.h> >+- #include <sys/types.h> >+- #include <sys/mman.h> >+- int >+- main() >+- { int fd; >+- void *addr; >+- if((fd = open("/dev/zero", O_RDWR)) < 0) >+- return 1; >+- addr = mmap(0,1024*1024,PROT_READ|PROT_WRITE,MAP_PRIVATE,fd,0); >+- return (addr && addr != (void*)(-1)) ? 0 : 1; >+- } >+-}end >+- >+-tst -D_LARGEFILE64_SOURCE note{ mmap is worth using }end output{ >+- #if !_lib_mmap >+- ( >+- #endif >+- #include <unistd.h> >+- #include <fcntl.h> >+- #include <string.h> >+- #include <sys/types.h> >+- #include <sys/mman.h> >+- #include <sys/stat.h> >+- #include <sys/times.h> >+- >+- #if _lib_mmap64 >+- #undef mmap >+- #define mmap mmap64 >+- #endif >+- >+- #if _lib_munmap64 >+- #undef munmap >+- #define munmap munmap64 >+- #endif >+- >+- #define MAPSIZE (64*1024) >+- #define BUFSIZE (MAPSIZE/8) >+- #define WRITE (64) >+- #define RUN (64) >+- >+- #define Failed(file) (remove(file),1) >+- >+- int >+- #if _STD_ >+- main(int argc, char** argv) >+- #else >+- main(argc,argv) >+- int argc; >+- char** argv; >+- #endif >+- { >+- caddr_t mm; >+- char *file, *t; >+- int i, fd, k, run; >+- char buf[MAPSIZE]; >+- struct tms stm, etm; >+- clock_t rdtm, mmtm; >+- >+- file = argv[1]; >+- if ((fd = open(file, O_CREAT|O_TRUNC|O_WRONLY, 0666)) < 0) >+- return 1; >+- >+- for (i = 0; i < sizeof(buf); ++i) >+- buf[i] = '0' + (i%10); >+- for (i = 0; i < WRITE; ++i) >+- if (write(fd,buf,sizeof(buf)) != sizeof(buf)) >+- return Failed(file); >+- close(fd); >+- >+- /* read time */ >+- times(&stm); >+- for(run = 0; run < RUN; ++run) >+- { if((fd = open(file, O_RDWR)) < 0) >+- return Failed(file); >+- for (i = 0; i < WRITE; ++i) >+- { for(k = 0; k < MAPSIZE; k += BUFSIZE) >+- if (read(fd,buf,BUFSIZE) != BUFSIZE) >+- return Failed(file); >+- } >+- close(fd); >+- } >+- times(&etm); >+- rdtm = (etm.tms_utime-stm.tms_utime) + (etm.tms_stime-stm.tms_stime); >+- >+- /* mmap time */ >+- times(&stm); >+- for(run = 0; run < RUN; ++run) >+- { if ((fd = open(file, O_RDWR)) < 0) >+- return Failed(file); >+- for(i = 0, mm = (caddr_t)0; i < WRITE; ++i) >+- { if(mm) >+- munmap(mm, MAPSIZE); >+- mm = (caddr_t)mmap((caddr_t)0, MAPSIZE, >+- (PROT_READ|PROT_WRITE), >+- MAP_PRIVATE, fd, i*MAPSIZE ); >+- if(mm == (caddr_t)(-1) || mm == (caddr_t)0) >+- return Failed(file); >+- >+- /* the memcpy is < BUFSIZE to simulate the >+- fact that functions like sfreserve/sfgetr do >+- not do buffer copying. >+- */ >+- t = (char*)mm; >+- for(k = 0; k < MAPSIZE; k += BUFSIZE, t += BUFSIZE) >+- memcpy(buf,t,(3*BUFSIZE)/4); >+- } >+- close(fd); >+- } >+- times(&etm); >+- mmtm = (etm.tms_utime-stm.tms_utime) + (etm.tms_stime-stm.tms_stime); >+- >+- remove(file); >+- >+- if(4*mmtm <= 3*rdtm) >+- printf("#define _mmap_worthy 2 /* mmap outperforms read on 64Ki buffers -- use it */\n"); >+- else if(4*mmtm <= 5*rdtm) >+- printf("#define _mmap_worthy 2 /* mmap is slightly better than read on 64Ki buffers -- use it */\n"); >+- else >+- printf("#define _mmap_worthy 2 /* mmap worse than read on 64Ki buffers -- use it anyway */\n"); >+- >+- return 0; >+- } >+-}end >+- >+ cat{ >++ /* assume MAP_ANON works */ >++ #define _mmap_anon 1 >+ >+ /* some systems get it wrong but escape concise detection */ >+- #ifndef _NO_MMAP >+ #if __CYGWIN__ >+ #define _NO_MMAP 1 >+ #endif >+- #endif >+ >+ #if _NO_MMAP >+ #undef _lib_mmap >+ #undef _lib_mmap64 >+- #undef _mmap_anon >+- #undef _mmap_devzero >+- #undef _mmap_worthy >++ #undef _mmap_anon >+ #endif >+ }end >diff -ruN /usr/ports/shells/ksh93/files/patch-src_lib_libast_features_standards ./files/patch-src_lib_libast_features_standards >--- /usr/ports/shells/ksh93/files/patch-src_lib_libast_features_standards 1970-01-01 01:00:00.000000000 +0100 >+++ ./files/patch-src_lib_libast_features_standards 2019-02-25 09:07:46.019260000 +0100 >@@ -0,0 +1,23 @@ >+--- src/lib/libast/features/standards.orig 2017-11-30 22:35:04 UTC >++++ src/lib/libast/features/standards >+@@ -1,5 +1,19 @@ >+ set stdio >+-if tst note{ _GNU_SOURCE works }end compile{ >++# In FreeBSD, definitions like _POSIX_SOURCE and such are used to *limit* >++# functionality to known API; they don't enable anything. The general intent in >++# BSD is to enable everything by default (effectively, providing the >++# _KITCHEN_SINK_SOURCE mentioned below). So we look for that here, but stay >++# careful that we don't get fooled by presence of FreeBSD that underpins some >++# subsystems in Mac OS X; there are other Apple-specific portability hacks >++# elsewhere we should not interfere with. >++if tst note{ FreeBSD }end compile{ >++ #include <sys/param.h> >++ #if !defined(__FreeBSD__) || defined(APPLE) >++ #error not a FreeBSD system >++ #endif >++ }end { >++ } >++elif tst note{ _GNU_SOURCE works }end compile{ >+ #define _GNU_SOURCE 1 >+ #include <sys/types.h> >+ #include <sys/stat.h> >diff -ruN /usr/ports/shells/ksh93/files/patch-src_lib_libast_features_vmalloc ./files/patch-src_lib_libast_features_vmalloc >--- /usr/ports/shells/ksh93/files/patch-src_lib_libast_features_vmalloc 1970-01-01 01:00:00.000000000 +0100 >+++ ./files/patch-src_lib_libast_features_vmalloc 2019-02-25 09:07:46.019540000 +0100 >@@ -0,0 +1,10 @@ >+--- src/lib/libast/features/vmalloc.orig 2016-02-28 17:09:23 UTC >++++ src/lib/libast/features/vmalloc >+@@ -217,7 +217,4 @@ cat{ >+ #if _mmap_anon >+ #define _mem_mmap_anon 1 >+ #endif >+- #if _mmap_devzero >+- #define _mem_mmap_zero 1 >+- #endif >+ }end >diff -ruN /usr/ports/shells/ksh93/files/patch-src_lib_libast_features_wchar ./files/patch-src_lib_libast_features_wchar >--- /usr/ports/shells/ksh93/files/patch-src_lib_libast_features_wchar 1970-01-01 01:00:00.000000000 +0100 >+++ ./files/patch-src_lib_libast_features_wchar 2019-02-25 09:07:46.019884000 +0100 >@@ -0,0 +1,10 @@ >+--- src/lib/libast/features/wchar.orig 2017-11-30 22:35:04 UTC >++++ src/lib/libast/features/wchar >+@@ -6,6 +6,7 @@ set include . >+ cat{ >+ #ifndef _AST_WCHAR_H >+ #define _AST_WCHAR_H 1 >++ #define _STDFILE_DECLARED >+ }end >+ >+ lib mbstowcs,wctomb,wcscmp,wcscoll,wcslen,wcstombs,wcsxfrm,wcwidth stdlib.h stdio.h wchar.h >diff -ruN /usr/ports/shells/ksh93/files/patch-src_lib_libast_port_astcopy.c ./files/patch-src_lib_libast_port_astcopy.c >--- /usr/ports/shells/ksh93/files/patch-src_lib_libast_port_astcopy.c 1970-01-01 01:00:00.000000000 +0100 >+++ ./files/patch-src_lib_libast_port_astcopy.c 2019-02-25 09:07:46.020170000 +0100 >@@ -0,0 +1,17 @@ >+--- src/lib/libast/port/astcopy.c.orig 2016-02-28 17:09:23 UTC >++++ src/lib/libast/port/astcopy.c >+@@ -30,14 +30,10 @@ >+ #include <ast.h> >+ #include <ast_mmap.h> >+ >+-#if _mmap_worthy > 1 >+- >+ #include <ls.h> >+ >+ #define MAPSIZE (1024*256) >+ >+-#endif >+- >+ #undef BUFSIZ >+ #define BUFSIZ 4096 >+ >diff -ruN /usr/ports/shells/ksh93/files/patch-src_lib_libast_sfio_sfclose.c ./files/patch-src_lib_libast_sfio_sfclose.c >--- /usr/ports/shells/ksh93/files/patch-src_lib_libast_sfio_sfclose.c 1970-01-01 01:00:00.000000000 +0100 >+++ ./files/patch-src_lib_libast_sfio_sfclose.c 2019-02-25 09:07:46.020465000 +0100 >@@ -0,0 +1,14 @@ >+--- src/lib/libast/sfio/sfclose.c.orig 2016-02-28 17:09:23 UTC >++++ src/lib/libast/sfio/sfclose.c >+@@ -104,11 +104,9 @@ Sfio_t* f; >+ >+ if(f->data && (!local || (f->flags&SF_STRING) || (f->bits&SF_MMAP) ) ) >+ { /* free buffer */ >+-#if _mmap_worthy >+ if(f->bits&SF_MMAP) >+ SFMUNMAP(f,f->data,f->endb-f->data); >+ else >+-#endif >+ if(f->flags&SF_MALLOC) >+ data = (Void_t*)f->data; >+ >diff -ruN /usr/ports/shells/ksh93/files/patch-src_lib_libast_sfio_sfhdr.h ./files/patch-src_lib_libast_sfio_sfhdr.h >--- /usr/ports/shells/ksh93/files/patch-src_lib_libast_sfio_sfhdr.h 1970-01-01 01:00:00.000000000 +0100 >+++ ./files/patch-src_lib_libast_sfio_sfhdr.h 2019-02-25 09:07:46.020760000 +0100 >@@ -0,0 +1,12 @@ >+--- src/lib/libast/sfio/sfhdr.h.orig 2016-02-28 17:09:23 UTC >++++ src/lib/libast/sfio/sfhdr.h >+@@ -209,9 +209,6 @@ >+ >+ /* see if we can use memory mapping for io */ >+ #if _LARGEFILE64_SOURCE && !_lib_mmap64 >+-#undef _mmap_worthy >+-#endif >+-#if !_mmap_worthy >+ #undef _hdr_mman >+ #undef _sys_mman >+ #endif >diff -ruN /usr/ports/shells/ksh93/files/patch-src_lib_libast_sfio_sfmode.c ./files/patch-src_lib_libast_sfio_sfmode.c >--- /usr/ports/shells/ksh93/files/patch-src_lib_libast_sfio_sfmode.c 1970-01-01 01:00:00.000000000 +0100 >+++ ./files/patch-src_lib_libast_sfio_sfmode.c 2019-02-25 09:07:46.021080000 +0100 >@@ -0,0 +1,45 @@ >+--- src/lib/libast/sfio/sfmode.c.orig 2016-02-28 17:09:23 UTC >++++ src/lib/libast/sfio/sfmode.c >+@@ -404,7 +404,6 @@ reg int local; /* a local call */ >+ >+ if(f->mode&SF_GETR) >+ { f->mode &= ~SF_GETR; >+-#if _mmap_worthy >+ if(f->bits&SF_MMAP) >+ { >+ if (!++f->ngetr) >+@@ -415,7 +414,6 @@ reg int local; /* a local call */ >+ f->ngetr = f->tiny[0] = 0; >+ } >+ } >+-#endif >+ if(f->getr) >+ { f->next[-1] = f->getr; >+ f->getr = 0; >+@@ -519,12 +517,10 @@ reg int local; /* a local call */ >+ if((f->flags&(SF_SHARE|SF_PUBLIC)) == (SF_SHARE|SF_PUBLIC) && >+ (addr = SFSK(f,0,SEEK_CUR,f->disc)) != f->here) >+ { >+-#if _mmap_worthy >+ if((f->bits&SF_MMAP) && f->data) >+ { SFMUNMAP(f,f->data,f->endb-f->data); >+ f->data = NIL(uchar*); >+ } >+-#endif >+ f->endb = f->endr = f->endw = f->next = f->data; >+ f->here = addr; >+ } >+@@ -567,13 +563,11 @@ reg int local; /* a local call */ >+ } >+ >+ f->mode = SF_WRITE|SF_LOCK; >+-#if _mmap_worthy >+ if(f->bits&SF_MMAP) >+ { if(f->data) >+ SFMUNMAP(f,f->data,f->endb-f->data); >+ (void)SFSETBUF(f,(Void_t*)f->tiny,(size_t)SF_UNBOUND); >+ } >+-#endif >+ if(f->data == f->tiny) >+ { f->endb = f->data = f->next = NIL(uchar*); >+ f->size = 0; >diff -ruN /usr/ports/shells/ksh93/files/patch-src_lib_libast_sfio_sfpurge.c ./files/patch-src_lib_libast_sfio_sfpurge.c >--- /usr/ports/shells/ksh93/files/patch-src_lib_libast_sfio_sfpurge.c 1970-01-01 01:00:00.000000000 +0100 >+++ ./files/patch-src_lib_libast_sfio_sfpurge.c 2019-02-25 09:07:46.021368000 +0100 >@@ -0,0 +1,18 @@ >+--- src/lib/libast/sfio/sfpurge.c.orig 2016-02-28 17:09:23 UTC >++++ src/lib/libast/sfio/sfpurge.c >+@@ -54,7 +54,6 @@ Sfio_t* f; >+ SFLOCK(f,0); >+ >+ /* if memory map must be a read stream, pretend data is gone */ >+-#if _mmap_worthy >+ if(f->bits&SF_MMAP) >+ { f->here -= f->endb - f->next; >+ if(f->data) >+@@ -64,7 +63,6 @@ Sfio_t* f; >+ SFOPEN(f,0); >+ SFMTXRETURN(f, 0); >+ } >+-#endif >+ >+ switch(f->mode&~SF_LOCK) >+ { >diff -ruN /usr/ports/shells/ksh93/files/patch-src_lib_libast_sfio_sfrd.c ./files/patch-src_lib_libast_sfio_sfrd.c >--- /usr/ports/shells/ksh93/files/patch-src_lib_libast_sfio_sfrd.c 1970-01-01 01:00:00.000000000 +0100 >+++ ./files/patch-src_lib_libast_sfio_sfrd.c 2019-02-25 09:07:46.021661000 +0100 >@@ -0,0 +1,31 @@ >+--- src/lib/libast/sfio/sfrd.c.orig 2016-02-28 17:09:23 UTC >++++ src/lib/libast/sfio/sfrd.c >+@@ -92,12 +92,10 @@ Sfdisc_t* disc; >+ { f->endb = f->next = f->endr = f->data; >+ f->mode &= ~SF_SYNCED; >+ } >+-#if _mmap_worthy >+ if((f->bits&SF_MMAP) && f->data) >+ { SFMUNMAP(f, f->data, f->endb-f->data); >+ f->data = NIL(uchar*); >+ } >+-#endif >+ f->next = f->endb = f->endr = f->endw = f->data; >+ } >+ } >+@@ -132,7 +130,6 @@ Sfdisc_t* disc; >+ } >+ } >+ >+-#if _mmap_worthy >+ if(f->bits&SF_MMAP) >+ { reg ssize_t a, round; >+ sfstat_t st; >+@@ -230,7 +227,6 @@ Sfdisc_t* disc; >+ } >+ } >+ } >+-#endif >+ >+ /* sync unseekable write streams to prevent deadlock */ >+ if(!dosync && f->extent < 0) >diff -ruN /usr/ports/shells/ksh93/files/patch-src_lib_libast_sfio_sfseek.c ./files/patch-src_lib_libast_sfio_sfseek.c >--- /usr/ports/shells/ksh93/files/patch-src_lib_libast_sfio_sfseek.c 1970-01-01 01:00:00.000000000 +0100 >+++ ./files/patch-src_lib_libast_sfio_sfseek.c 2019-02-25 09:07:46.021985000 +0100 >@@ -0,0 +1,43 @@ >+--- src/lib/libast/sfio/sfseek.c.orig 2016-02-28 17:09:23 UTC >++++ src/lib/libast/sfio/sfseek.c >+@@ -34,12 +34,10 @@ Sfio_t* f; >+ Sfoff_t p; >+ #endif >+ { >+-#if _mmap_worthy >+ if((f->bits&SF_MMAP) && f->data) >+ { SFMUNMAP(f, f->data, f->endb-f->data); >+ f->data = NIL(uchar*); >+ } >+-#endif >+ f->next = f->endr = f->endw = f->data; >+ f->endb = (f->mode&SF_WRITE) ? f->data+f->size : f->data; >+ if((f->here = p) < 0) >+@@ -201,23 +199,13 @@ int type; /* 0: from org, 1: from here, >+ if((p += type == SEEK_CUR ? s : 0) < 0) >+ goto done; >+ >+-#if _mmap_worthy >+ if(f->bits&SF_MMAP) >+ { /* if mmap is not great, stop mmaping if moving around too much */ >+-#if _mmap_worthy < 2 >+- if((f->next - f->data) < ((f->endb - f->data)/4) ) >+- { SFSETBUF(f,(Void_t*)f->tiny,(size_t)SF_UNBOUND); >+- hardseek = 1; /* this forces a hard seek below */ >+- } >+- else >+-#endif >+- { /* for mmap, f->here can be virtual except for hardseek */ >+- newpos(f,p); >+- if(!hardseek) >+- goto done; >+- } >++ /* for mmap, f->here can be virtual except for hardseek */ >++ newpos(f,p); >++ if(!hardseek) >++ goto done; >+ } >+-#endif >+ >+ if(f->endb > f->next) >+ { /* reduce wastage in future buffer fillings */ >diff -ruN /usr/ports/shells/ksh93/files/patch-src_lib_libast_sfio_sfsetbuf.c ./files/patch-src_lib_libast_sfio_sfsetbuf.c >--- /usr/ports/shells/ksh93/files/patch-src_lib_libast_sfio_sfsetbuf.c 1970-01-01 01:00:00.000000000 +0100 >+++ ./files/patch-src_lib_libast_sfio_sfsetbuf.c 2019-02-25 09:07:46.022312000 +0100 >@@ -0,0 +1,34 @@ >+--- src/lib/libast/sfio/sfsetbuf.c.orig 2016-02-28 17:09:23 UTC >++++ src/lib/libast/sfio/sfsetbuf.c >+@@ -302,7 +302,6 @@ size_t size; /* buffer size, -1 for defa >+ okmmap = (buf || (f->flags&SF_STRING) || (f->flags&SF_RDWR) == SF_RDWR) ? 0 : 1; >+ >+ /* save old buffer info */ >+-#if _mmap_worthy >+ if(f->bits&SF_MMAP) >+ { if(f->data) >+ { if(f->getr && (f->mode&SF_GETR) && f->next) >+@@ -311,7 +310,6 @@ size_t size; /* buffer size, -1 for defa >+ f->data = NIL(uchar*); >+ } >+ } else >+-#endif >+ if(f->data == f->tiny) >+ { f->data = NIL(uchar*); >+ f->size = 0; >+@@ -438,7 +436,6 @@ size_t size; /* buffer size, -1 for defa >+ } >+ } >+ >+-#if _mmap_worthy >+ if(okmmap && size && (f->mode&SF_READ) && f->extent >= 0 ) >+ { /* see if we can try memory mapping */ >+ if(!disc) >+@@ -457,7 +454,6 @@ size_t size; /* buffer size, -1 for defa >+ } >+ } >+ } >+-#endif >+ >+ /* get buffer space */ >+ setbuf: >diff -ruN /usr/ports/shells/ksh93/files/patch-src_lib_libast_sfio_sfsetfd.c ./files/patch-src_lib_libast_sfio_sfsetfd.c >--- /usr/ports/shells/ksh93/files/patch-src_lib_libast_sfio_sfsetfd.c 1970-01-01 01:00:00.000000000 +0100 >+++ ./files/patch-src_lib_libast_sfio_sfsetfd.c 2019-02-25 09:07:46.022673000 +0100 >@@ -0,0 +1,15 @@ >+--- src/lib/libast/sfio/sfsetfd.c.orig 2016-02-28 17:09:23 UTC >++++ src/lib/libast/sfio/sfsetfd.c >+@@ -108,12 +108,10 @@ int newfd; >+ SFMTXRETURN(f, -1); >+ } >+ >+-#if _mmap_worthy >+ if((f->bits&SF_MMAP) && f->data) >+ { SFMUNMAP(f,f->data,f->endb-f->data); >+ f->data = NIL(uchar*); >+ } >+-#endif >+ >+ /* make stream appears uninitialized */ >+ f->endb = f->endr = f->endw = f->data; >diff -ruN /usr/ports/shells/ksh93/files/patch-src_lib_libast_sfio_sfsize.c ./files/patch-src_lib_libast_sfio_sfsize.c >--- /usr/ports/shells/ksh93/files/patch-src_lib_libast_sfio_sfsize.c 1970-01-01 01:00:00.000000000 +0100 >+++ ./files/patch-src_lib_libast_sfio_sfsize.c 2019-02-25 09:07:46.022980000 +0100 >@@ -0,0 +1,15 @@ >+--- src/lib/libast/sfio/sfsize.c.orig 2016-02-28 17:09:23 UTC >++++ src/lib/libast/sfio/sfsize.c >+@@ -80,12 +80,10 @@ Sfio_t* f; >+ >+ if(f->here != s && (f->mode&SF_READ) ) >+ { /* buffered data is known to be invalid */ >+-#if _mmap_worthy >+ if((f->bits&SF_MMAP) && f->data) >+ { SFMUNMAP(f,f->data,f->endb-f->data); >+ f->data = NIL(uchar*); >+ } >+-#endif >+ f->next = f->endb = f->endr = f->endw = f->data; >+ } >+ >diff -ruN /usr/ports/shells/ksh93/files/patch-src_lib_libast_sfio_sfsk.c ./files/patch-src_lib_libast_sfio_sfsk.c >--- /usr/ports/shells/ksh93/files/patch-src_lib_libast_sfio_sfsk.c 1970-01-01 01:00:00.000000000 +0100 >+++ ./files/patch-src_lib_libast_sfio_sfsk.c 2019-02-25 09:07:46.023267000 +0100 >@@ -0,0 +1,15 @@ >+--- src/lib/libast/sfio/sfsk.c.orig 2016-02-28 17:09:23 UTC >++++ src/lib/libast/sfio/sfsk.c >+@@ -49,12 +49,10 @@ Sfdisc_t* disc; >+ SFMTXRETURN(f, (Sfoff_t)(-1)); >+ if(SFSYNC(f) < 0) >+ SFMTXRETURN(f, (Sfoff_t)(-1)); >+-#if _mmap_worthy >+ if(f->mode == SF_READ && (f->bits&SF_MMAP) && f->data) >+ { SFMUNMAP(f, f->data, f->endb-f->data); >+ f->data = NIL(uchar*); >+ } >+-#endif >+ f->next = f->endb = f->endr = f->endw = f->data; >+ } >+ >diff -ruN /usr/ports/shells/ksh93/files/patch-src_lib_libast_string_strexpr.c ./files/patch-src_lib_libast_string_strexpr.c >--- /usr/ports/shells/ksh93/files/patch-src_lib_libast_string_strexpr.c 1970-01-01 01:00:00.000000000 +0100 >+++ ./files/patch-src_lib_libast_string_strexpr.c 2019-02-25 09:07:46.023598000 +0100 >@@ -0,0 +1,87 @@ >+--- src/lib/libast/string/strexpr.c.orig 2017-11-30 22:35:04 UTC >++++ src/lib/libast/string/strexpr.c >+@@ -44,7 +44,7 @@ >+ #define peekchr(ex) (*(ex)->nextchr) >+ #define ungetchr(ex) ((ex)->nextchr--) >+ >+-#define error(ex,msg) return(seterror(ex,msg)) >++#define err(ex,msg) return(seterror(ex,msg)) >+ >+ typedef struct /* expression handle */ >+ { >+@@ -87,7 +87,7 @@ expr(register Expr_t* ex, register int p >+ case 0: >+ ungetchr(ex); >+ if (!precedence) return(0); >+- error(ex, "more tokens expected"); >++ err(ex, "more tokens expected"); >+ case '-': >+ n = -expr(ex, 13); >+ break; >+@@ -113,17 +113,17 @@ expr(register Expr_t* ex, register int p >+ case 0: >+ goto done; >+ case ')': >+- if (!precedence) error(ex, "too many )'s"); >++ if (!precedence) err(ex, "too many )'s"); >+ goto done; >+ case '(': >+ n = expr(ex, 1); >+ if (getchr(ex) != ')') >+ { >+ ungetchr(ex); >+- error(ex, "closing ) expected"); >++ err(ex, "closing ) expected"); >+ } >+ gotoperand: >+- if (operand) error(ex, "operator expected"); >++ if (operand) err(ex, "operator expected"); >+ operand = 1; >+ continue; >+ case '?': >+@@ -140,7 +140,7 @@ expr(register Expr_t* ex, register int p >+ if (getchr(ex) != ':') >+ { >+ ungetchr(ex); >+- error(ex, ": expected for ? operator"); >++ err(ex, ": expected for ? operator"); >+ } >+ if (n) >+ { >+@@ -189,7 +189,7 @@ expr(register Expr_t* ex, register int p >+ break; >+ case '=': >+ case '!': >+- if (peekchr(ex) != '=') error(ex, "operator syntax error"); >++ if (peekchr(ex) != '=') err(ex, "operator syntax error"); >+ if (precedence > 7) goto done; >+ getchr(ex); >+ x = expr(ex, 8); >+@@ -237,7 +237,7 @@ expr(register Expr_t* ex, register int p >+ if (precedence > 11) goto done; >+ x = expr(ex, 12); >+ if (c == '*') n *= x; >+- else if (x == 0) error(ex, "divide by zero"); >++ else if (x == 0) err(ex, "divide by zero"); >+ else if (c == '/') n /= x; >+ else n %= x; >+ break; >+@@ -246,15 +246,15 @@ expr(register Expr_t* ex, register int p >+ pos = --ex->nextchr; >+ if (isdigit(c)) n = strton(ex->nextchr, &ex->nextchr, NiL, 0); >+ else if (ex->convert) n = (*ex->convert)(ex->nextchr, &ex->nextchr, ex->handle); >+- if (ex->nextchr == pos) error(ex, "syntax error"); >++ if (ex->nextchr == pos) err(ex, "syntax error"); >+ goto gotoperand; >+ } >+ if (ex->errmsg) return(0); >+- if (!operand) error(ex, "operand expected"); >++ if (!operand) err(ex, "operand expected"); >+ } >+ done: >+ ungetchr(ex); >+- if (!operand) error(ex, "operand expected"); >++ if (!operand) err(ex, "operand expected"); >+ return(n); >+ } >+ >diff -ruN /usr/ports/shells/ksh93/files/patch-src_lib_libast_vmalloc_malloc.c ./files/patch-src_lib_libast_vmalloc_malloc.c >--- /usr/ports/shells/ksh93/files/patch-src_lib_libast_vmalloc_malloc.c 1970-01-01 01:00:00.000000000 +0100 >+++ ./files/patch-src_lib_libast_vmalloc_malloc.c 2019-02-25 09:07:46.023917000 +0100 >@@ -0,0 +1,20 @@ >+--- src/lib/libast/vmalloc/malloc.c.orig 2016-02-28 17:09:23 UTC >++++ src/lib/libast/vmalloc/malloc.c >+@@ -906,7 +906,7 @@ union Alloca_u >+ { char* addr; >+ Alloca_t* next; >+ } head; >+- char array[ALIGN]; >++ char array[MEM_ALIGN]; >+ }; >+ struct Alloca_s >+ { union Alloca_u head; >+@@ -914,7 +914,7 @@ struct Alloca_s >+ }; >+ >+ extern Void_t* alloca(size_t size) >+-{ char array[ALIGN]; >++{ char array[MEM_ALIGN]; >+ char* file; >+ int line; >+ Void_t* func; >diff -ruN /usr/ports/shells/ksh93/files/patch-src_lib_libast_vmalloc_vmbest.c ./files/patch-src_lib_libast_vmalloc_vmbest.c >--- /usr/ports/shells/ksh93/files/patch-src_lib_libast_vmalloc_vmbest.c 1970-01-01 01:00:00.000000000 +0100 >+++ ./files/patch-src_lib_libast_vmalloc_vmbest.c 2019-02-25 09:07:46.024313000 +0100 >@@ -0,0 +1,101 @@ >+--- src/lib/libast/vmalloc/vmbest.c.orig 2016-02-28 17:09:23 UTC >++++ src/lib/libast/vmalloc/vmbest.c >+@@ -64,19 +64,19 @@ void _STUB_vmbest(){} >+ #define PK_ALLOW 128 /* min #packs allowed to be created */ >+ >+ /* Small requests are rounded to 0%SM_RNDx */ >+-#define SM_RND0 (1*ALIGN) /* round value: 1*ALIGN == 16 */ >++#define SM_RND0 (1*MEM_ALIGN) /* round value: 1*MEM_ALIGN == 16 */ >+ #define SM_BIT0 4 /* (1<<SM_BIT0) == SM_RND0 */ >+ #define SM_CNT0 16 /* # caches as rounded by SM_RND0 */ >+ #define SM_IDX0 0 /* starting cache index of this group */ >+ #define SM_MAX0 (SM_CNT0*SM_RND0) >+ >+-#define SM_RND1 (2*ALIGN) /* round value: 2*ALIGN == 32 */ >++#define SM_RND1 (2*MEM_ALIGN) /* round value: 2*MEM_ALIGN == 32 */ >+ #define SM_CNT1 8 >+ #define SM_BIT1 5 >+ #define SM_IDX1 (SM_IDX0+SM_CNT0) >+ #define SM_MAX1 (SM_MAX0 + SM_CNT1*SM_RND1) >+ >+-#define SM_RND2 (4*ALIGN) /* round value: 4*ALIGN == 64 */ >++#define SM_RND2 (4*MEM_ALIGN) /* round value: 4*MEM_ALIGN == 64 */ >+ #define SM_BIT2 6 >+ #define SM_CNT2 8 >+ #define SM_IDX2 (SM_IDX1+SM_CNT1) >+@@ -167,7 +167,7 @@ static int chktree(Pack_t* pack, Block_t >+ if(_Vmassert & VM_check_reg) >+ { if(!node) /* the empty tree is always good */ >+ return 0; >+- /**/DEBUG_ASSERT(BDSZ(node) >= BODYSIZE && (BDSZ(node)%ALIGN) == 0 ); >++ /**/DEBUG_ASSERT(BDSZ(node) >= BODYSIZE && (BDSZ(node)%MEM_ALIGN) == 0 ); >+ >+ if(SIZE(node) & (BUSY|PFREE)) /* should be BITS-free */ >+ { /**/DEBUG_MESSAGE("Free block corrupted"); /**/DEBUG_ASSERT(0); return -1; } >+@@ -252,7 +252,7 @@ static int bestfree(Vmalloc_t* vm, Void_ >+ if((Vmuchar_t*)data < vm->data->segmin || (Vmuchar_t*)data >= vm->data->segmax) >+ return -1; >+ >+- blk = BLOCK(data); /**/DEBUG_ASSERT((SIZE(blk)&BUSY) && (BDSZ(blk)%ALIGN) == 0 ); >++ blk = BLOCK(data); /**/DEBUG_ASSERT((SIZE(blk)&BUSY) && (BDSZ(blk)%MEM_ALIGN) == 0 ); >+ pack = PACK(blk); /**/DEBUG_ASSERT(pack->best == (Vmbest_t*)vm->data); >+ if((sz = SIZE(blk))&SMALL ) >+ listp = &pack->small[SMDECODE(sz)].free; >+@@ -339,7 +339,7 @@ static Block_t* bestpackextend(Vmalloc_t >+ >+ /**/DEBUG_ASSERT(!wild || (PACK(wild) == pack && BDSZ(wild) < size && PACKWILD(pack,wild)) ); >+ blkz = BDSZ(pack->pblk); /**/DEBUG_ASSERT(blkz >= _Vmpagesize); >+- size += blkz - (wild ? BDSZ(wild) : 0) + EXTRA(pack); /**/DEBUG_ASSERT(size%ALIGN == 0); >++ size += blkz - (wild ? BDSZ(wild) : 0) + EXTRA(pack); /**/DEBUG_ASSERT(size%MEM_ALIGN == 0); >+ if(_Vmassert & VM_debug) debug_printf(2, "%s:%d: PACK(%p) WILD(%p)=%zd BDSZ(%p)=%zd blkz=%zd size=%zu\n", __FILE__, __LINE__, pack, wild, wild ? BDSZ(wild) : 0, pack->pblk, BDSZ(pack->pblk), blkz, size); >+ if(!(pblk = (*_Vmsegalloc)(vm, pack->pblk, size, segtype)) ) >+ pblk = pack->pblk; >+@@ -383,7 +383,7 @@ static Block_t* bestpackextract(Pack_t* >+ >+ l = r = &link; >+ if((root = pack->root) ) do /* top-down splay tree search */ >+- { /**/DEBUG_ASSERT((size%ALIGN) == 0 && !(SIZE(root)&(BUSY|PFREE)) ); >++ { /**/DEBUG_ASSERT((size%MEM_ALIGN) == 0 && !(SIZE(root)&(BUSY|PFREE)) ); >+ if(size == (sz = BDSZ(root)) ) >+ break; >+ if(size < sz) >+@@ -508,7 +508,7 @@ static int bestlistreclaim(Vmalloc_t* vm >+ continue; >+ >+ /**/DEBUG_ASSERT((SIZE(fp)&(BUSY|MARK)) == (BUSY|MARK) ); >+- /**/DEBUG_ASSERT(BDSZ(fp) >= sizeof(Body_t) && BDSZ(fp)%ALIGN == 0); >++ /**/DEBUG_ASSERT(BDSZ(fp) >= sizeof(Body_t) && BDSZ(fp)%MEM_ALIGN == 0); >+ SIZE(fp) &= ~BITS; >+ t = NEXT(fp); >+ SIZE(t) |= PFREE; /**/DEBUG_ASSERT(SIZE(NEXT(fp))&BUSY); >+@@ -563,7 +563,7 @@ static Block_t* bestpackalloc(Vmalloc_t* >+ ssize_t sz; >+ Block_t *tp, *np, *pblk; >+ Vmbest_t *best = (Vmbest_t*)vm->data; >+- /**/DEBUG_ASSERT(size >= sizeof(Body_t) && size%ALIGN == 0); >++ /**/DEBUG_ASSERT(size >= sizeof(Body_t) && size%MEM_ALIGN == 0); >+ >+ if((tp = pack->alloc) ) /* fast allocation from recent memory */ >+ { pack->alloc = NIL(Block_t*); >+@@ -719,9 +719,9 @@ static Void_t* bestalloc(Vmalloc_t* vm, >+ asospindecl(); >+ >+ /**/DEBUG_COUNT(N_alloc); >+- /**/DEBUG_ASSERT((ALIGN%(BITS+1)) == 0 ); >+- /**/DEBUG_ASSERT((sizeof(Head_t)%ALIGN) == 0 ); >+- /**/DEBUG_ASSERT((sizeof(Body_t)%ALIGN) == 0 ); >++ /**/DEBUG_ASSERT((MEM_ALIGN%(BITS+1)) == 0 ); >++ /**/DEBUG_ASSERT((sizeof(Head_t)%MEM_ALIGN) == 0 ); >++ /**/DEBUG_ASSERT((sizeof(Body_t)%MEM_ALIGN) == 0 ); >+ /**/DEBUG_ASSERT(sizeof(Block_t) == (sizeof(Body_t)+sizeof(Head_t)) ); >+ /**/DEBUG_ASSERT(chkregion((Vmbest_t*)vm->data, local) >= 0); >+ >+@@ -902,7 +902,7 @@ static Void_t* bestalign(Vmalloc_t* vm, >+ return NIL(Void_t*); >+ >+ algz = LGROUND(size); >+- algn = (*_Vmlcm)(align,ALIGN); >++ algn = (*_Vmlcm)(align,MEM_ALIGN); >+ >+ /* non-Vmbest methods may require extra header space */ >+ if(METHOD(best) != VM_MTBEST && vm->meth.eventf) >diff -ruN /usr/ports/shells/ksh93/files/patch-src_lib_libast_vmalloc_vmdcshare.c ./files/patch-src_lib_libast_vmalloc_vmdcshare.c >--- /usr/ports/shells/ksh93/files/patch-src_lib_libast_vmalloc_vmdcshare.c 1970-01-01 01:00:00.000000000 +0100 >+++ ./files/patch-src_lib_libast_vmalloc_vmdcshare.c 2019-02-25 09:07:46.024614000 +0100 >@@ -0,0 +1,20 @@ >+--- src/lib/libast/vmalloc/vmdcshare.c.orig 2016-02-28 17:09:23 UTC >++++ src/lib/libast/vmalloc/vmdcshare.c >+@@ -61,7 +61,7 @@ void _STUB_vmdcshare(){} >+ #define MM_REMOVE 02 /* remove files/segments */ >+ >+ /* macros to get the data section and size */ >+-#define MMHEAD(name) ROUND(sizeof(Mmvm_t)+strlen(name), ALIGN) >++#define MMHEAD(name) ROUND(sizeof(Mmvm_t)+strlen(name), MEM_ALIGN) >+ #define MMDATA(mmvm) ((Vmuchar_t*)(mmvm)->base + MMHEAD(mmvm->name)) >+ #define MMSIZE(mmvm) ((mmvm)->size - MMHEAD(mmvm->name)) >+ >+@@ -178,7 +178,7 @@ static int mminit(Mmdisc_t* mmdc) >+ /* fixed size region so make it reasonably large */ >+ if((size = mmdc->size) < MM_MINSIZE ) >+ size = MM_MINSIZE; >+- size += MMHEAD(mmdc->name) + ALIGN; >++ size += MMHEAD(mmdc->name) + MEM_ALIGN; >+ size = ROUND(size, _Vmpagesize); >+ >+ /* get/create the initial segment of data */ >diff -ruN /usr/ports/shells/ksh93/files/patch-src_lib_libast_vmalloc_vmdcsystem.c ./files/patch-src_lib_libast_vmalloc_vmdcsystem.c >--- /usr/ports/shells/ksh93/files/patch-src_lib_libast_vmalloc_vmdcsystem.c 1970-01-01 01:00:00.000000000 +0100 >+++ ./files/patch-src_lib_libast_vmalloc_vmdcsystem.c 2019-02-25 09:07:46.025015000 +0100 >@@ -0,0 +1,126 @@ >+--- src/lib/libast/vmalloc/vmdcsystem.c.orig 2016-02-28 17:09:23 UTC >++++ src/lib/libast/vmalloc/vmdcsystem.c >+@@ -66,18 +66,16 @@ static Vmemory_f _Vmemoryf = 0; >+ >+ #if _std_malloc >+ #undef _mem_mmap_anon >+-#undef _mem_mmap_zero >+ #undef _mem_sbrk >+ #undef _mem_win32 >+ #endif >+ >+ #if _mem_win32 >+ #undef _mem_mmap_anon >+-#undef _mem_mmap_zero >+ #undef _mem_sbrk >+ #endif >+ >+-#if _mem_mmap_anon || _mem_mmap_zero /* may get space using mmap */ >++#if _mem_mmap_anon /* may get space using mmap */ >+ #include <sys/mman.h> >+ #ifndef MAP_ANON >+ #ifdef MAP_ANONYMOUS >+@@ -86,7 +84,7 @@ static Vmemory_f _Vmemoryf = 0; >+ #define MAP_ANON 0 >+ #endif /*MAP_ANONYMOUS*/ >+ #endif /*MAP_ANON*/ >+-#endif /*_mem_mmap_anon || _mem_mmap_zero*/ >++#endif /*_mem_mmap_anon*/ >+ >+ /* >+ * hint at "transparent huge pages" (=largepages) if >+@@ -259,73 +257,6 @@ static Void_t* mmapanonmem(Vmalloc_t* vm >+ } >+ #endif /* _mem_mmap_anon */ >+ >+-#if _mem_mmap_zero /* get space by mmapping from /dev/zero */ >+-#include <fcntl.h> >+-#ifndef OPEN_MAX >+-#define OPEN_MAX 64 >+-#endif >+-#define FD_PRIVATE (3*OPEN_MAX/4) /* private file descriptor */ >+-#define FD_NONE (-2) /* no mapping with file desc */ >+- >+-/* this is called after an initial successful call of mmapzeromeminit() */ >+-static Void_t* mmapzeromem(Vmalloc_t* vm, Void_t* caddr, size_t csize, size_t nsize, Vmdisc_t* disc) >+-{ >+- Memdisc_t* mmdc = (Memdisc_t*)disc; >+- off_t offset; >+- >+- GETMEMCHK(vm, caddr, csize, nsize, disc); >+- if(csize == 0) >+- { nsize = ROUND(nsize, _Vmpagesize); >+- offset = asoaddoff(&mmdc->offset, nsize); >+- RESTARTMEM(caddr, mmap(NIL(Void_t*), nsize, PROT_READ|PROT_WRITE, MAP_PRIVATE, mmdc->fd, offset)); >+- ADVISE(vm, caddr, nsize); >+- RETURN(vm, caddr, nsize); >+- } >+- else if(nsize == 0) >+- { Vmuchar_t *addr = (Vmuchar_t*)sbrk(0); >+- if(addr < (Vmuchar_t*)caddr ) /* in sbrk space */ >+- return NIL(Void_t*); >+- (void)munmap(caddr, csize); >+- RETURN(vm, caddr, nsize); >+- } >+- else return NIL(Void_t*); >+-} >+- >+-/* if this call succeeds then mmapzeromem() is the implementation */ >+-static Void_t* mmapzeromeminit(Vmalloc_t* vm, Void_t* caddr, size_t csize, size_t nsize, Vmdisc_t* disc) >+-{ >+- Memdisc_t* mmdc = (Memdisc_t*)disc; >+- int fd; >+- >+- GETMEMCHK(vm, caddr, csize, nsize, disc); >+- if(mmdc->fd != FD_INIT) >+- return NIL(Void_t*); >+- RESTARTSYS(fd, open("/dev/zero", O_RDONLY|O_CLOEXEC)); >+- if(fd < 0) >+- { mmdc->fd = FD_NONE; >+- return NIL(Void_t*); >+- } >+-#if O_CLOEXEC == 0 >+- else >+- SETCLOEXEC(fd); >+-#endif >+- if(fd >= FD_PRIVATE || (mmdc->fd = fcntl(fd, F_DUPFD_CLOEXEC, FD_PRIVATE)) < 0) >+- mmdc->fd = fd; >+- else >+- { close(fd); >+-#if F_DUPFD_CLOEXEC == F_DUPFD >+- SETCLOEXEC(mmdc->fd); >+-#endif >+- } >+- RESTARTMEM(caddr, mmapzeromem(vm, caddr, csize, nsize, disc)); >+- if(!caddr) >+- { close(mmdc->fd); >+- mmdc->fd = FD_NONE; >+- } >+- RETURN(vm, caddr, nsize); >+-} >+-#endif /* _mem_mmap_zero */ >+- >+ #if _std_malloc /* using native malloc as a last resort */ >+ static Void_t* mallocmem(Vmalloc_t* vm, Void_t* caddr, size_t csize, size_t nsize, Vmdisc_t* disc) >+ { >+@@ -364,12 +295,6 @@ static Void_t* getmemory(Vmalloc_t* vm, >+ return (Void_t*)addr; >+ } >+ #endif >+-#if _mem_mmap_zero >+- if((_Vmassert & VM_zero) && (addr = mmapzeromeminit(vm, caddr, csize, nsize, disc))) >+- { GETMEMUSE(mmapzeromem, disc); >+- return (Void_t*)addr; >+- } >+-#endif >+ #if _mem_sbrk >+ if((_Vmassert & VM_break) && (addr = sbrkmem(vm, caddr, csize, nsize, disc))) >+ { GETMEMUSE(sbrkmem, disc); >+@@ -386,6 +311,7 @@ static Void_t* getmemory(Vmalloc_t* vm, >+ if((_Vmassert & VM_native) && (addr = mallocmem(vm, caddr, csize, nsize, disc))) >+ { GETMEMUSE(mallocmem, disc); >+ return (Void_t*)addr; >++ } >+ #endif >+ write(2, "vmalloc: panic: all memory allocation disciplines failed\n", 57); >+ abort(); >diff -ruN /usr/ports/shells/ksh93/files/patch-src_lib_libast_vmalloc_vmdebug.c ./files/patch-src_lib_libast_vmalloc_vmdebug.c >--- /usr/ports/shells/ksh93/files/patch-src_lib_libast_vmalloc_vmdebug.c 1970-01-01 01:00:00.000000000 +0100 >+++ ./files/patch-src_lib_libast_vmalloc_vmdebug.c 2019-02-25 09:07:46.025346000 +0100 >@@ -0,0 +1,29 @@ >+--- src/lib/libast/vmalloc/vmdebug.c.orig 2016-02-28 17:09:23 UTC >++++ src/lib/libast/vmalloc/vmdebug.c >+@@ -335,7 +335,7 @@ int local; >+ if(vm->data->mode&VM_DBCHECK) >+ vmdbcheck(vm); >+ >+- sz = ROUND(size,ALIGN) + DB_EXTRA; >++ sz = ROUND(size,MEM_ALIGN) + DB_EXTRA; >+ sz = sz >= sizeof(Body_t) ? sz : sizeof(Body_t); >+ if(!(data = (Vmuchar_t*)KPVALLOC(vm, sz, (*(Vmbest->allocf))) ) ) >+ { dbwarn(vm, NIL(Vmuchar_t*), DB_ALLOC, file, line, func, DB_ALLOC); >+@@ -483,7 +483,7 @@ int local; >+ oldline = DBLINE(addr); >+ >+ /* do the resize */ >+- sz = ROUND(size,ALIGN) + DB_EXTRA; >++ sz = ROUND(size,MEM_ALIGN) + DB_EXTRA; >+ sz = sz >= sizeof(Body_t) ? sz : sizeof(Body_t); >+ data = (Vmuchar_t*)KPVRESIZE(vm, (Void_t*)data, sz, (type&~VM_RSZERO), (*(Vmbest->resizef)) ); >+ if(!data) /* failed, reset data for old block */ >+@@ -632,7 +632,7 @@ int local; >+ >+ asolock(&vm->data->dlck, KEY_DEBUG, ASO_LOCK); >+ >+- if((sz = ROUND(size,ALIGN) + DB_EXTRA) < sizeof(Body_t)) >++ if((sz = ROUND(size,MEM_ALIGN) + DB_EXTRA) < sizeof(Body_t)) >+ sz = sizeof(Body_t); >+ >+ if((data = (Vmuchar_t*)KPVALIGN(vm, sz, align, (*(Vmbest->alignf)))) ) >diff -ruN /usr/ports/shells/ksh93/files/patch-src_lib_libast_vmalloc_vmhdr.h ./files/patch-src_lib_libast_vmalloc_vmhdr.h >--- /usr/ports/shells/ksh93/files/patch-src_lib_libast_vmalloc_vmhdr.h 1970-01-01 01:00:00.000000000 +0100 >+++ ./files/patch-src_lib_libast_vmalloc_vmhdr.h 2019-02-25 09:07:46.025698000 +0100 >@@ -0,0 +1,86 @@ >+--- src/lib/libast/vmalloc/vmhdr.h.orig 2016-02-28 17:09:23 UTC >++++ src/lib/libast/vmalloc/vmhdr.h >+@@ -86,7 +86,7 @@ >+ #if defined(_WIN32) >+ #define _mem_win32 1 /* use the VirtualAlloc interface */ >+ #endif >+-#if !_mem_win32 && !_mem_sbrk && !_mem_mmap_anon && !_mem_mmap_zero >++#if !_mem_win32 && !_mem_sbrk && !_mem_mmap_anon >+ #undef _std_malloc >+ #define _std_malloc 1 /* use native malloc/free/realloc */ >+ #endif >+@@ -160,11 +160,11 @@ extern void _vmmessage _ARG_((const cha >+ (ABORT() ? (abort(),0) : PAUSE() ? (pause(),0) : 0)) ) >+ #define COUNT(n) ((n) += 1) >+ #define ACCOUNT(a,b) ((a) += (b)) >+-#define INITMEMORY(m,z) ((m) ? (memset((m), 'i', (z) > 2*ALIGN ? 2*ALIGN : (z)), 0) : 0 ) >+-#define SETBUSYMEM(m,z) (memset(((char*)(m))+2*ALIGN, 'b', (z) <= 2*ALIGN ? 0 : ALIGN ) ) >+-#define CHKBUSYMEM(m,z) (memcmp(((char*)(m))+2*ALIGN, "bbbbbbbb", (z) <= 2*ALIGN ? 0 : 8) == 0 ? 1 : 0 ) >+-#define SETFREEMEM(m,z) (memset(((char*)(m))+2*ALIGN, 'f', (z) <= 2*ALIGN ? 0 : ALIGN ) ) >+-#define CHKFREEMEM(m,z) (memcmp(((char*)(m))+2*ALIGN, "ffffffff", (z) <= 2*ALIGN ? 0 : 8) == 0 ? 1 : 0 ) >++#define INITMEMORY(m,z) ((m) ? (memset((m), 'i', (z) > 2*MEM_ALIGN ? 2*MEM_ALIGN : (z)), 0) : 0 ) >++#define SETBUSYMEM(m,z) (memset(((char*)(m))+2*MEM_ALIGN, 'b', (z) <= 2*MEM_ALIGN ? 0 : MEM_ALIGN ) ) >++#define CHKBUSYMEM(m,z) (memcmp(((char*)(m))+2*MEM_ALIGN, "bbbbbbbb", (z) <= 2*MEM_ALIGN ? 0 : 8) == 0 ? 1 : 0 ) >++#define SETFREEMEM(m,z) (memset(((char*)(m))+2*MEM_ALIGN, 'f', (z) <= 2*MEM_ALIGN ? 0 : MEM_ALIGN ) ) >++#define CHKFREEMEM(m,z) (memcmp(((char*)(m))+2*MEM_ALIGN, "ffffffff", (z) <= 2*MEM_ALIGN ? 0 : 8) == 0 ? 1 : 0 ) >+ #define DEBUGDECL(_ty_,_ob_) _ty_ _ob_; >+ #else >+ #define ABORT() (0) >+@@ -203,7 +203,7 @@ extern void _vmmessage _ARG_((const cha >+ #define BITS (BUSY|PFREE|SMALL|MARK) >+ #define ALIGNB (BITS+1) /* to guarantee blksize == 0%(BITS+1) */ >+ >+-/* ALIGN is chosen for three conditions: >++/* MEM_ALIGN is chosen for three conditions: >+ ** 1. Able to address all primitive types. >+ ** 2. A multiple of ALIGNB==(BITS+1) as discussed above. >+ ** 3. Large enough to cover two pointers. Note that on some machines >+@@ -238,9 +238,9 @@ struct _two_s >+ void* two; >+ }; >+ #define ALIGNA (sizeof(struct _a_s) - sizeof(union _align_u)) >+-#undef ALIGN /* Blocks will be aligned on both ALIGNA & ALIGNB */ >++#undef MEM_ALIGN /* Blocks will be aligned on both ALIGNA & ALIGNB */ >+ #define ALIGNAB MULTIPLE(ALIGNA,ALIGNB) >+-#define ALIGN MULTIPLE(ALIGNAB, sizeof(struct _two_s)) >++#define MEM_ALIGN MULTIPLE(ALIGNAB, sizeof(struct _two_s)) >+ >+ typedef union _word_u >+ { size_t size; /* to store a size_t */ >+@@ -252,7 +252,7 @@ struct _head_s /* a block header has two >+ { Word_t one; >+ Word_t two; >+ }; >+-#define HEADSIZE ROUND(sizeof(struct _head_s), ALIGN) >++#define HEADSIZE ROUND(sizeof(struct _head_s), MEM_ALIGN) >+ union _head_u >+ { Vmuchar_t data[HEADSIZE]; /* to standardize size */ >+ struct _head_s head; >+@@ -264,15 +264,15 @@ struct _body_s /* Note that self is actu >+ Block_t* left; /* left child in free tree */ >+ Block_t** self; /* self pointer when free */ >+ }; >+-#define BODYSIZE ROUND(sizeof(struct _body_s), ALIGN) >++#define BODYSIZE ROUND(sizeof(struct _body_s), MEM_ALIGN) >+ union _body_u >+ { Vmuchar_t data[BODYSIZE]; /* to standardize size */ >+ struct _body_s body; >+ }; >+ >+ /* After all the songs and dances, we should now have: >+-** sizeof(Head_t)%ALIGN == 0 >+-** sizeof(Body_t)%ALIGN == 0 >++** sizeof(Head_t)%MEM_ALIGN == 0 >++** sizeof(Body_t)%MEM_ALIGN == 0 >+ ** and sizeof(Block_t) = sizeof(Head_t)+sizeof(Body_t) >+ */ >+ struct _block_s >+@@ -321,7 +321,7 @@ struct _block_s >+ #define ENDB(sgb) ((Block_t*)((Vmuchar_t*)NEXT(sgb) - sizeof(Head_t)) ) >+ >+ /* the start of allocatable memory in a segment */ >+-#define SEGDATA(sg) ((Vmuchar_t*)(sg) + ROUND(sizeof(Seg_t),ALIGN) ) >++#define SEGDATA(sg) ((Vmuchar_t*)(sg) + ROUND(sizeof(Seg_t),MEM_ALIGN) ) >+ >+ /* testing to see if "sg" is the root segment of a region */ >+ #define SEGROOT(sg) ((Vmuchar_t*)(sg)->vmdt >= (sg)->base && \ >diff -ruN /usr/ports/shells/ksh93/files/patch-src_lib_libast_vmalloc_vmlast.c ./files/patch-src_lib_libast_vmalloc_vmlast.c >--- /usr/ports/shells/ksh93/files/patch-src_lib_libast_vmalloc_vmlast.c 1970-01-01 01:00:00.000000000 +0100 >+++ ./files/patch-src_lib_libast_vmalloc_vmlast.c 2019-02-25 09:07:46.026063000 +0100 >@@ -0,0 +1,40 @@ >+--- src/lib/libast/vmalloc/vmlast.c.orig 2016-02-28 17:09:23 UTC >++++ src/lib/libast/vmalloc/vmlast.c >+@@ -61,7 +61,7 @@ int local; >+ >+ LASTLOCK(last, local); >+ >+- size = size < ALIGN ? ALIGN : ROUND(size,ALIGN); >++ size = size < MEM_ALIGN ? MEM_ALIGN : ROUND(size,MEM_ALIGN); >+ >+ last->last = NIL(Vmuchar_t*); /* wipe record of last allocation */ >+ >+@@ -119,7 +119,7 @@ int local; >+ if(data != (Void_t*)last->last ) >+ data = NIL(Void_t*); >+ else >+- { size = last->data - last->last; /**/DEBUG_ASSERT(size > 0 && size%ALIGN == 0); >++ { size = last->data - last->last; /**/DEBUG_ASSERT(size > 0 && size%MEM_ALIGN == 0); >+ last->data -= size; >+ last->size += size; >+ last->last = NIL(Vmuchar_t*); >+@@ -166,8 +166,8 @@ int local; >+ if(data != (Void_t*)last->last ) >+ data = NIL(Void_t*); >+ else >+- { oldz = last->data - last->last; /**/DEBUG_ASSERT(oldz > 0 && oldz%ALIGN == 0); >+- size = ROUND(size, ALIGN); >++ { oldz = last->data - last->last; /**/DEBUG_ASSERT(oldz > 0 && oldz%MEM_ALIGN == 0); >++ size = ROUND(size, MEM_ALIGN); >+ if(size <= oldz) /* getting smaller */ >+ { sz = oldz - size; >+ last->data -= sz; >+@@ -249,7 +249,7 @@ int local; >+ >+ LASTLOCK(last, local); >+ >+- size = ROUND(size,ALIGN); >++ size = ROUND(size,MEM_ALIGN); >+ align = (*_Vmlcm)(align, 2*sizeof(Block_t)); >+ >+ if((data = (Vmuchar_t*)KPVALLOC(vm, size + align, lastalloc)) ) >diff -ruN /usr/ports/shells/ksh93/files/patch-src_lib_libast_vmalloc_vmmaddress.c ./files/patch-src_lib_libast_vmalloc_vmmaddress.c >--- /usr/ports/shells/ksh93/files/patch-src_lib_libast_vmalloc_vmmaddress.c 1970-01-01 01:00:00.000000000 +0100 >+++ ./files/patch-src_lib_libast_vmalloc_vmmaddress.c 2019-02-25 09:07:46.026379000 +0100 >@@ -0,0 +1,11 @@ >+--- src/lib/libast/vmalloc/vmmaddress.c.orig 2016-02-28 17:09:23 UTC >++++ src/lib/libast/vmalloc/vmmaddress.c >+@@ -96,7 +96,7 @@ ssize_t _vmpagesize(void) >+ if ((_Vmpagesize = getpagesize()) <= 0) >+ #endif >+ _Vmpagesize = VM_PAGESIZE; >+- _Vmpagesize = (*_Vmlcm)(_Vmpagesize, ALIGN); >++ _Vmpagesize = (*_Vmlcm)(_Vmpagesize, MEM_ALIGN); >+ } >+ #if VMCHKMEM >+ _Vmchkmem = _vmchkmem; /* _vmchkmem() can check memory availability */ >diff -ruN /usr/ports/shells/ksh93/files/patch-src_lib_libast_vmalloc_vmopen.c ./files/patch-src_lib_libast_vmalloc_vmopen.c >--- /usr/ports/shells/ksh93/files/patch-src_lib_libast_vmalloc_vmopen.c 1970-01-01 01:00:00.000000000 +0100 >+++ ./files/patch-src_lib_libast_vmalloc_vmopen.c 2019-02-25 09:07:46.026715000 +0100 >@@ -0,0 +1,61 @@ >+--- src/lib/libast/vmalloc/vmopen.c.orig 2016-02-28 17:09:23 UTC >++++ src/lib/libast/vmalloc/vmopen.c >+@@ -97,10 +97,10 @@ int mode; /* type of region */ >+ write(9, "vmalloc: panic: heap initialization error #2\n", 45); >+ return NIL(Vmalloc_t*); >+ } >+- /**/DEBUG_ASSERT(VMLONG(vd)%ALIGN == 0); >++ /**/DEBUG_ASSERT(VMLONG(vd)%MEM_ALIGN == 0); >+ >+ if(vd->mode & VM_MEMORYF) /* point addr to Vmalloc_t */ >+- addr -= ROUND(sizeof(Vmalloc_t), ALIGN); >++ addr -= ROUND(sizeof(Vmalloc_t), MEM_ALIGN); >+ } >+ } >+ >+@@ -110,7 +110,7 @@ int mode; /* type of region */ >+ incr = disc->round <= 0 ? _Vmpagesize : ROUND(disc->round, _Vmpagesize); >+ >+ /* size of Vmalloc_t if embedded in the same initial segment */ >+- vmsz = (mode&VM_MEMORYF) ? ROUND(sizeof(Vmalloc_t),ALIGN) : 0; >++ vmsz = (mode&VM_MEMORYF) ? ROUND(sizeof(Vmalloc_t),MEM_ALIGN) : 0; >+ >+ vdsz = 0; /* get actual size of Vmdata_t including method specific data */ >+ if(!meth->eventf || (*meth->eventf)(vmp, VM_OPEN, &vdsz) < 0 || vdsz <= 0 ) >+@@ -118,13 +118,13 @@ int mode; /* type of region */ >+ write(9, "vmalloc: panic: heap initialization error #3\n", 45); >+ return NIL(Vmalloc_t*); >+ } >+- vdsz = ROUND(vdsz, ALIGN); >++ vdsz = ROUND(vdsz, MEM_ALIGN); >+ >+- sgsz = ROUND(sizeof(Seg_t), ALIGN); /* size of segment structure */ >++ sgsz = ROUND(sizeof(Seg_t), MEM_ALIGN); /* size of segment structure */ >+ >+ /* get initial memory segment containing Vmdata_t, Seg_t and some extra */ >+ size = vmsz + vdsz + sgsz + 8*_Vmpagesize; >+- size = ROUND(size,incr); /**/DEBUG_ASSERT(size%ALIGN == 0 ); >++ size = ROUND(size,incr); /**/DEBUG_ASSERT(size%MEM_ALIGN == 0 ); >+ if(!(base = (Vmuchar_t*)(*disc->memoryf)(vmp, NIL(Void_t*), 0, size, disc)) ) >+ { if(initheap) >+ write(9, "vmalloc: panic: heap initialization error #4\n", 45); >+@@ -136,14 +136,14 @@ int mode; /* type of region */ >+ memset(base, 0, vmsz + vdsz + sgsz); >+ >+ /* make sure memory is properly aligned */ >+- if((algn = (ssize_t)(VMLONG(base)%ALIGN)) == 0 ) >++ if((algn = (ssize_t)(VMLONG(base)%MEM_ALIGN)) == 0 ) >+ addr = base; >+- else addr = base + (ALIGN-algn); >+- /**/DEBUG_ASSERT(VMLONG(addr)%ALIGN == 0 ); >++ else addr = base + (MEM_ALIGN-algn); >++ /**/DEBUG_ASSERT(VMLONG(addr)%MEM_ALIGN == 0 ); >+ >+ /* addresses of Vmdata_t and root segment */ >+- vd = (Vmdata_t*)(addr + vmsz); /**/DEBUG_ASSERT(VMLONG(vd)%ALIGN == 0); >+- seg = (Seg_t*)(addr + vmsz + vdsz); /**/DEBUG_ASSERT(VMLONG(seg)%ALIGN == 0); >++ vd = (Vmdata_t*)(addr + vmsz); /**/DEBUG_ASSERT(VMLONG(vd)%MEM_ALIGN == 0); >++ seg = (Seg_t*)(addr + vmsz + vdsz); /**/DEBUG_ASSERT(VMLONG(seg)%MEM_ALIGN == 0); >+ >+ /* set Vmdata_t data */ >+ vd->mode = mode; >diff -ruN /usr/ports/shells/ksh93/files/patch-src_lib_libast_vmalloc_vmpool.c ./files/patch-src_lib_libast_vmalloc_vmpool.c >--- /usr/ports/shells/ksh93/files/patch-src_lib_libast_vmalloc_vmpool.c 1970-01-01 01:00:00.000000000 +0100 >+++ ./files/patch-src_lib_libast_vmalloc_vmpool.c 2019-02-25 09:07:46.027059000 +0100 >@@ -0,0 +1,20 @@ >+--- src/lib/libast/vmalloc/vmpool.c.orig 2016-02-28 17:09:23 UTC >++++ src/lib/libast/vmalloc/vmpool.c >+@@ -47,7 +47,7 @@ typedef struct _vmpool_s >+ Pool_t* free; /* list of free blocks */ >+ } Vmpool_t; >+ >+-#define POOLSIZE(sz) ROUND(ROUND((sz), sizeof(Pool_t)), ALIGN) >++#define POOLSIZE(sz) ROUND(ROUND((sz), sizeof(Pool_t)), MEM_ALIGN) >+ >+ #ifdef DEBUG >+ static int N_pool; /* counter for Vmpool calls */ >+@@ -206,7 +206,7 @@ static int poolstat(Vmalloc_t* vm, Vmsta >+ if(pool->size <= 0 ) >+ return -1; >+ >+- size = ROUND(pool->size, ALIGN); >++ size = ROUND(pool->size, MEM_ALIGN); >+ >+ for(pl = pool->free; pl; pl = pl->next ) >+ st->n_free += 1; >diff -ruN /usr/ports/shells/ksh93/files/patch-src_lib_libast_vmalloc_vmsegment.c ./files/patch-src_lib_libast_vmalloc_vmsegment.c >--- /usr/ports/shells/ksh93/files/patch-src_lib_libast_vmalloc_vmsegment.c 1970-01-01 01:00:00.000000000 +0100 >+++ ./files/patch-src_lib_libast_vmalloc_vmsegment.c 2019-02-25 09:07:46.027365000 +0100 >@@ -0,0 +1,32 @@ >+--- src/lib/libast/vmalloc/vmsegment.c.orig 2016-02-28 17:09:23 UTC >++++ src/lib/libast/vmalloc/vmsegment.c >+@@ -194,7 +194,7 @@ static Block_t* _vmseginit(Vmdata_t* vmd >+ >+ /* available memory in Seg_t for allocation usage */ >+ size = (base+size) - SEGDATA(seg); >+- size = (size/ALIGN)*ALIGN; /* must be multiple of ALIGN's */ >++ size = (size/MEM_ALIGN)*MEM_ALIGN; /* must be multiple of MEM_ALIGN's */ >+ >+ /* block at start of memory */ >+ seg->begb = (Block_t*)SEGDATA(seg); >+@@ -256,7 +256,7 @@ static Block_t* _vmsegalloc(Vmalloc_t* v >+ static size_t Segunit = 0; >+ /**/DEBUG_COUNT(N_segalloc); >+ /**/DEBUG_ASSERT(!blk || (isblock(vmdt, blk) && (SIZE(blk)&BUSY) ) ); >+- /**/DEBUG_ASSERT(_Vmpagesize > 0 && _Vmpagesize%ALIGN == 0 ); >++ /**/DEBUG_ASSERT(_Vmpagesize > 0 && _Vmpagesize%MEM_ALIGN == 0 ); >+ >+ /* transition to a fixed place to unlock before returning */ >+ #undef RETURN >+@@ -381,9 +381,9 @@ static Block_t* _vmsegalloc(Vmalloc_t* v >+ } >+ >+ /* segment must start at an aligned address */ >+- if((sz = (size_t)(VMLONG(base)%ALIGN)) == 0) >++ if((sz = (size_t)(VMLONG(base)%MEM_ALIGN)) == 0) >+ seg = (Seg_t*)base; >+- else seg = (Seg_t*)(base + ALIGN-sz); >++ else seg = (Seg_t*)(base + MEM_ALIGN-sz); >+ blk = _vmseginit(vmdt, seg, base, segsz, 0); >+ } >+ >diff -ruN /usr/ports/shells/ksh93/files/patch-src_lib_libcmd_ls.c ./files/patch-src_lib_libcmd_ls.c >--- /usr/ports/shells/ksh93/files/patch-src_lib_libcmd_ls.c 1970-01-01 01:00:00.000000000 +0100 >+++ ./files/patch-src_lib_libcmd_ls.c 2019-02-25 09:07:46.027661000 +0100 >@@ -0,0 +1,32 @@ >+--- src/lib/libcmd/ls.c.orig 2017-11-30 22:35:04 UTC >++++ src/lib/libcmd/ls.c >+@@ -1257,7 +1257,7 @@ ls(State_t* state, register FTSENT* ent) >+ if (!VISIBLE(state, ent)) >+ { >+ fts_set(NiL, ent, FTS_SKIP); >+- return; >++ return 0; >+ } >+ switch (ent->fts_info) >+ { >+@@ -1265,17 +1265,17 @@ ls(State_t* state, register FTSENT* ent) >+ if (ent->fts_parent->fts_info == FTS_DNX) >+ break; >+ error(2, "%s: not found", ent->fts_path); >+- return; >++ return 1; >+ case FTS_DC: >+ if (state->lsflags & LS_DIRECTORY) >+ break; >+ error(2, "%s: directory causes cycle", ent->fts_path); >+- return; >++ return 1; >+ case FTS_DNR: >+ if (state->lsflags & LS_DIRECTORY) >+ break; >+ error(2, "%s: cannot read directory", ent->fts_path); >+- return 0; >++ return 1; >+ case FTS_DOT: >+ #if 0 >+ fts_set(NiL, ent, FTS_SKIP); >diff -ruN /usr/ports/shells/ksh93/files/patch-src-lib-libast-features-wchar ./files/patch-src-lib-libast-features-wchar >--- /usr/ports/shells/ksh93/files/patch-src-lib-libast-features-wchar 2016-10-28 17:08:14.000000000 +0200 >+++ ./files/patch-src-lib-libast-features-wchar 1970-01-01 01:00:00.000000000 +0100 >@@ -1,10 +0,0 @@ >---- src/lib/libast/features/wchar.orig 2012-01-12 07:40:22 UTC >-+++ src/lib/libast/features/wchar >-@@ -51,6 +51,7 @@ endif >- run{ >- cat <<! >- #if _hdr_wchar && defined(_nxt_wchar) >-+ #define _STDFILE_DECLARED >- #include ${_nxt_wchar-_nxt_wchar} /* the native wchar.h */ >- #endif >- >diff -ruN /usr/ports/shells/ksh93/files/patch-src-lib-libast-hash-hashalloc.c ./files/patch-src-lib-libast-hash-hashalloc.c >--- /usr/ports/shells/ksh93/files/patch-src-lib-libast-hash-hashalloc.c 2016-10-28 17:08:14.000000000 +0200 >+++ ./files/patch-src-lib-libast-hash-hashalloc.c 1970-01-01 01:00:00.000000000 +0100 >@@ -1,19 +0,0 @@ >---- src/lib/libast/hash/hashalloc.c.orig 2006-11-07 22:29:04 UTC >-+++ src/lib/libast/hash/hashalloc.c >-@@ -151,7 +151,16 @@ hashalloc(Hash_table_t* ref, ...) >- va_copy(*vp, ap); >- vp++; >- } >-+#if __clang__ && __SIZEOF_POINTER__ == 4 >-+ { >-+ va_list np; >-+ >-+ np = va_listval(va_arg(ap, va_listarg)); >-+ va_copy(ap, np); >-+ } >-+#else >- va_copy(ap, va_listval(va_arg(ap, va_listarg))); >-+#endif >- break; >- case 0: >- if (vp > va) >diff -ruN /usr/ports/shells/ksh93/files/patch-src-lib-libast-string-tokscan.c ./files/patch-src-lib-libast-string-tokscan.c >--- /usr/ports/shells/ksh93/files/patch-src-lib-libast-string-tokscan.c 2016-10-28 17:08:14.000000000 +0200 >+++ ./files/patch-src-lib-libast-string-tokscan.c 1970-01-01 01:00:00.000000000 +0100 >@@ -1,19 +0,0 @@ >---- src/lib/libast/string/tokscan.c.orig 2006-11-07 22:29:31 UTC >-+++ src/lib/libast/string/tokscan.c >-@@ -233,7 +233,16 @@ tokscan(register char* s, char** nxt, co >- prv_f = f; >- f = va_arg(ap, char*); >- va_copy(prv_ap, ap); >-+#if __clang__ && __SIZEOF_POINTER__ == 4 >-+ { >-+ va_list np; >-+ >-+ np = va_listval(va_arg(ap, va_listarg)); >-+ va_copy(ap, np); >-+ } >-+#else >- va_copy(ap, va_listval(va_arg(ap, va_listarg))); >-+#endif >- continue; >- case 'c': >- p_char = va_arg(ap, char*); >diff -ruN /usr/ports/shells/ksh93/Makefile ./Makefile >--- /usr/ports/shells/ksh93/Makefile 2018-11-02 14:32:34.000000000 +0100 >+++ ./Makefile 2019-02-25 10:44:53.343309000 +0100 >@@ -12,39 +12,35 @@ > > PORTNAME= ksh93 > PORTVERSION= ${KSHVERSION:S/-//g} >-PORTREVISION= 2 > CATEGORIES= shells >-MASTER_SITES= http://www2.research.att.com/~astopen/download/tgz/ \ >- LOCAL/sunpoet/${PORTNAME} >-DISTFILES= INIT.${INITVERSION}.tgz ast-ksh.${KSHVERSION}.tgz >+MASTER_SITES= https://github.com/att/ast/archive/ >+DISTNAME= ${PORTNAME}v > DIST_SUBDIR= ${PORTNAME} > > MAINTAINER= saper@saper.info >-COMMENT= Official AT&T release of KornShell 93 >+COMMENT= KornShell 93 > > LICENSE= EPL > >+BROKEN_aarch64= Fails to compile: needs sbrk >+ > CONFLICTS= ksh93-devel-* > > OPTIONS_DEFINE= EXAMPLES STATIC > >-FETCH_ENV= HTTP_AUTH=basic:*:I\ accept\ www.opensource.org/licenses/cpl:. > LDFLAGS+= -lm >-MAKE_ENV= CCFLAGS="${CFLAGS}" >-NO_WRKSUBDIR= yes >+MAKE_ENV= CCFLAGS="-Wno-unused-value -Wno-parentheses -Wno-logical-op-parentheses ${CFLAGS}" >+WRKSRC= ${WRKDIR}/ast-${PORTNAME}v > >-INITVERSION= 2013-05-24 >-KSHVERSION= 2012-08-01 >+KSHVERSION= 2014-12-24 > > STATIC_MAKE_ENV= LDFLAGS+=-static > >-BROKEN_aarch64= Fails to compile: needs sbrk >- > post-patch: > @${REINPLACE_CMD} -e 's|SF_FLAGS|SFIO_FLAGS|g' ${WRKSRC}/src/lib/libast/include/sfio*.h ${WRKSRC}/src/lib/libast/sfio/*.c > > do-build: >- @cd ${WRKSRC}/ && ${SETENV} -i ${MAKE_ENV} ${SH} bin/package flat make >+ @cd ${WRKSRC}/ && ${SETENV} -i ${MAKE_ENV} ${SH} bin/package flat make ksh93 > > do-install: > ${INSTALL_PROGRAM} ${WRKSRC}/bin/ksh ${STAGEDIR}${PREFIX}/bin/ksh93
(In reply to Marcin Cieślak from comment #20) er, sorry for this junk...
Checking out the phab review.
https://reviews.freebsd.org/D19343?id=55482 has been submitted for review, it should address all issues raised so far.
The latest rev on phabricator builds ok and resolves this PR. I'll wait for linimon@ and Piotr to determine if it looks good for gcc-based arches (the port ignores USE_GCC= so I can't test on amd64). We'll see what Mark and Piotr have to say about gcc before committing it.
A commit references this bug: Author: cy Date: Sun Apr 21 17:29:55 UTC 2019 New revision: 499547 URL: https://svnweb.freebsd.org/changeset/ports/499547 Log: shells/ksh93: Update to 93v 2014-12-24 PR: 208098 (fixed) Submitted by: saper@saper.info (maintainer) Reported by: fuz@fuz.su Reviewed by: cy@, pkubaj@ Approved by: maintainer (implicit, submitter) Differential Revision: https://reviews.freebsd.org/D19343 Changes: head/shells/ksh93/Makefile head/shells/ksh93/distinfo head/shells/ksh93/files/patch-src-lib-libast-features-wchar head/shells/ksh93/files/patch-src-lib-libast-hash-hashalloc.c head/shells/ksh93/files/patch-src-lib-libast-string-tokscan.c head/shells/ksh93/files/patch-src_cmd_INIT_iffe.sh head/shells/ksh93/files/patch-src_cmd_proto_proto.c head/shells/ksh93/files/patch-src_cmd_std_features_procfs head/shells/ksh93/files/patch-src_cmd_std_pss-kvm.c head/shells/ksh93/files/patch-src_lib_libast_comp_setlocale.c head/shells/ksh93/files/patch-src_lib_libast_features_mmap head/shells/ksh93/files/patch-src_lib_libast_features_standards head/shells/ksh93/files/patch-src_lib_libast_features_vmalloc head/shells/ksh93/files/patch-src_lib_libast_features_wchar head/shells/ksh93/files/patch-src_lib_libast_port_astcopy.c head/shells/ksh93/files/patch-src_lib_libast_sfio_sfclose.c head/shells/ksh93/files/patch-src_lib_libast_sfio_sfhdr.h head/shells/ksh93/files/patch-src_lib_libast_sfio_sfmode.c head/shells/ksh93/files/patch-src_lib_libast_sfio_sfpurge.c head/shells/ksh93/files/patch-src_lib_libast_sfio_sfrd.c head/shells/ksh93/files/patch-src_lib_libast_sfio_sfseek.c head/shells/ksh93/files/patch-src_lib_libast_sfio_sfsetbuf.c head/shells/ksh93/files/patch-src_lib_libast_sfio_sfsetfd.c head/shells/ksh93/files/patch-src_lib_libast_sfio_sfsize.c head/shells/ksh93/files/patch-src_lib_libast_sfio_sfsk.c head/shells/ksh93/files/patch-src_lib_libast_string_strexpr.c head/shells/ksh93/files/patch-src_lib_libast_vmalloc_malloc.c head/shells/ksh93/files/patch-src_lib_libast_vmalloc_vmbest.c head/shells/ksh93/files/patch-src_lib_libast_vmalloc_vmdcshare.c head/shells/ksh93/files/patch-src_lib_libast_vmalloc_vmdcsystem.c head/shells/ksh93/files/patch-src_lib_libast_vmalloc_vmdebug.c head/shells/ksh93/files/patch-src_lib_libast_vmalloc_vmhdr.h head/shells/ksh93/files/patch-src_lib_libast_vmalloc_vmlast.c head/shells/ksh93/files/patch-src_lib_libast_vmalloc_vmmaddress.c head/shells/ksh93/files/patch-src_lib_libast_vmalloc_vmopen.c head/shells/ksh93/files/patch-src_lib_libast_vmalloc_vmpool.c head/shells/ksh93/files/patch-src_lib_libast_vmalloc_vmsegment.c head/shells/ksh93/files/patch-src_lib_libcmd_ls.c
Fixed.