Skip to content

Commit

Permalink
Fix compile when using tcc >0.9.27 (#238)
Browse files Browse the repository at this point in the history
This allows ksh to be compiled with versions of tcc that define
__dso_handle in libtcc1.a, i.e., versions as of this commit:
https://repo.or.cz/tinycc.git/commit/dd60b20c

Older versions of tcc still fail to compile ksh, although now they
fail after reaching the libdll feature test. I'm not sure if fixing
that is feasible since even if I hack out the failing libdll
feature test, ksh fails to link with a '__dso_handle' error.

src/lib/libast/comp/atexit.c,
src/lib/libast/features/lib,
src/lib/libast/vmalloc/vmexit.c:
- From what I've been able to gather the only OSes with support
  for on_exit are Linux and SunOS 4. However, on_exit takes two
  arguments, so the macro that defines it as taking one argument
  is incorrect. Since Solaris (SunOS 5) no longer has this call
  and the macro breaks on Linux, the clean fix is to remove it
  (atexit(3) is used instead).

src/lib/libast/include/ast.h:
- When compiling with tcc on FreeBSD, pretend to be gcc 2.95.3
  instead of gcc 9.3.0. This stops /usr/include/math.h from
  activating gcc 3.0+ math compiler builtins that don't exist on
  tcc, while still identifying as gcc which is needed to avoid
  other FreeBSD system header breakage.

src/cmd/builtin/Mamfile,
src/cmd/builtin/features/pty,
src/lib/libdll/Mamfile,
src/lib/libdll/features/dll:
- tcc forbids combining the -c compiler flag with -l* linker flags.
  Use the -lm flag in the iffe feature tests instead of the
  Mamfiles. This avoids iffe combining -lm with the -c flag.

src/lib/libast/vmalloc/malloc.c:
- Fix failure to compile with -D_std_malloc.
  This patch is from OpenSUSE:
  https://build.opensuse.org/package/view_file/shells/ksh/ksh93-malloc-hook.dif
  As it turns out tcc needs this change to build ksh with
  -D_std_malloc, so it has been applied.

Co-authored-by: Martijn Dekker <martijn@inlv.org>
Resolves: #232
  • Loading branch information
JohnoKing and McDutchie authored Mar 23, 2021
1 parent ca3ec20 commit 22e044c
Show file tree
Hide file tree
Showing 9 changed files with 20 additions and 15 deletions.
2 changes: 1 addition & 1 deletion src/cmd/builtin/Mamfile
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ make install
meta FEATURE/pty features/%>FEATURE/% features/pty pty
make features/pty
done features/pty
exec - iffe ${IFFEFLAGS} -v -c "${CC} ${mam_cc_FLAGS} ${KSH_RELFLAGS} ${CCFLAGS} ${LDFLAGS} -lm" ref ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libast} ${mam_libcmd} : run features/pty
exec - iffe ${IFFEFLAGS} -v -c "${CC} ${mam_cc_FLAGS} ${KSH_RELFLAGS} ${CCFLAGS} ${LDFLAGS}" ref ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libast} ${mam_libcmd} : run features/pty
done FEATURE/pty generated
make ${PACKAGE_ast_INCLUDE}/ast_time.h implicit
done ${PACKAGE_ast_INCLUDE}/ast_time.h
Expand Down
2 changes: 1 addition & 1 deletion src/cmd/builtin/features/pty
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ lib openpty,_getpty,ptsname -lutil
lib grantpt,unlockpt,posix_openpt stdlib.h
lib cfmakeraw termios.h

tst - output{
tst - -lm output{
#include <fcntl.h>
#if _lib_ptsname
#include <stdlib.h>
Expand Down
6 changes: 1 addition & 5 deletions src/lib/libast/comp/atexit.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,7 @@ NoN(atexit)

#else

#if _lib_onexit || _lib_on_exit

#if !_lib_onexit
#define onexit on_exit
#endif
#if _lib_onexit

extern int onexit(void(*)(void));

Expand Down
2 changes: 1 addition & 1 deletion src/lib/libast/features/lib
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ lib getopt,getsubopt,getopt_long,getopt_long_only
lib glob,index,iswblank,iswctype,killpg,link,localeconv,madvise
lib mbtowc,mbrtowc,memalign,memchr,memcpy,memdup,memmove,memset
lib mkdir,mkfifo,mktemp,mktime
lib mount,on_exit,onexit,opendir,pathconf
lib mount,onexit,opendir,pathconf
lib readlink,remove,rename,rewinddir,rindex,rmdir,setlocale
lib setpgid,setpgrp,setpgrp2,setreuid,setsid,setuid,sigaction
lib sigprocmask,sigsetmask,sigunblock,sigvec,socketpair
Expand Down
13 changes: 13 additions & 0 deletions src/lib/libast/include/ast.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,19 @@ struct _sfio_s;
#endif
#endif

/*
* tcc on FreeBSD: Avoid using nonexistent math
* builtins by pretending to be an ancient gcc.
*/
#if __TINYC__ && __GNUC__ >= 3 && __FreeBSD__
#undef __GNUC__
#undef __GNUC_MINOR__
#undef __GNUC_PATCHLEVEL__
#define __GNUC__ 2
#define __GNUC_MINOR__ 95
#define __GNUC_PATCHLEVEL__ 3
#endif

/*
* exit() support -- this matches shell exit codes
*/
Expand Down
4 changes: 0 additions & 4 deletions src/lib/libast/vmalloc/malloc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1040,12 +1040,8 @@ extern Void_t* F1(_ast_valloc, size_t,n) { return valloc(n); }

#if !_UWIN

#if !_malloc_hook

#include <malloc.h>

#endif

typedef struct mallinfo Mallinfo_t;
typedef struct mstats Mstats_t;

Expand Down
2 changes: 1 addition & 1 deletion src/lib/libast/vmalloc/vmexit.c
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ int type;
return type;
}

#endif /* _lib_onexit || _lib_on_exit */
#endif /* _lib_onexit */

#endif /*!PACKAGE_ast*/

Expand Down
2 changes: 1 addition & 1 deletion src/lib/libdll/Mamfile
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ make install
done features/dll
bind -ldl dontcare
bind -last
exec - iffe ${IFFEFLAGS} -v -c "${CC} ${mam_cc_FLAGS} ${KSH_RELFLAGS} ${CCFLAGS} ${LDFLAGS} -lm" ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdl} ${mam_libast} : run features/dll
exec - iffe ${IFFEFLAGS} -v -c "${CC} ${mam_cc_FLAGS} ${KSH_RELFLAGS} ${CCFLAGS} ${LDFLAGS}" ref ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -I${PACKAGE_ast_INCLUDE} -I${INSTALLROOT}/include ${mam_libdl} ${mam_libast} : run features/dll
done FEATURE/dll generated
exec - cmp 2>/dev/null -s FEATURE/dll dlldefs.h || { rm -f dlldefs.h; silent test -d . || mkdir .; cp FEATURE/dll dlldefs.h; }
done dlldefs.h generated
Expand Down
2 changes: 1 addition & 1 deletion src/lib/libdll/features/dll
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ tst run{
esac
echo "#define _DLL_NEXT_PATH \"$lib\""
}end
tst - output{
tst - -lm output{
#include <math.h>
#if defined(__MVS__) && !defined(__SUSV3)
#define __SUSV3 1
Expand Down

0 comments on commit 22e044c

Please sign in to comment.