[Git][ghc/ghc][wip/rts-configure] 18 commits: rts: Move external symbols logic to the configure script
John Ericson (@Ericson2314)
gitlab at gitlab.haskell.org
Fri Dec 30 17:42:07 UTC 2022
John Ericson pushed to branch wip/rts-configure at Glasgow Haskell Compiler / GHC
Commits:
ccedc83f by John Ericson at 2022-12-30T12:38:25-05:00
rts: Move external symbols logic to the configure script
This is much more terse because we are programatically handling the
leading underscore.
Bump the Cabal submodule so we pass the Cabal flag config to configure.
- - - - -
2173ffcb by John Ericson at 2022-12-30T12:39:49-05:00
Move lib{numa,dw} defines to RTS configure
- - - - -
265f5f97 by John Ericson at 2022-12-30T12:41:38-05:00
RTS configure: handle ffi adjustor method
- - - - -
0926caf6 by John Ericson at 2022-12-30T12:41:38-05:00
rts configure: Move over eventfd, __thread, and mem mgmt checks
- - - - -
db90258f by John Ericson at 2022-12-30T12:41:38-05:00
move FP_CHECK_PTHREADS to RTS configure
- - - - -
4c007dcb by John Ericson at 2022-12-30T12:41:38-05:00
Move apple compat check to RTS configure
- - - - -
1965b6b0 by John Ericson at 2022-12-30T12:41:38-05:00
Move visibility and clock_gettime checks to RTS configure
- - - - -
503bf6a5 by John Ericson at 2022-12-30T12:41:38-05:00
Move leading underscore checks to RTS configure
- - - - -
98bf0de4 by John Ericson at 2022-12-30T12:41:38-05:00
Move alloca, fork, const, and big endian checks to RTS configure
- - - - -
1f97e4f1 by John Ericson at 2022-12-30T12:41:38-05:00
Move libdl check to RTS configure
- - - - -
69bba09c by John Ericson at 2022-12-30T12:41:38-05:00
Do FP_FIND_LIBFFI in RTS configure too
- - - - -
e4628019 by John Ericson at 2022-12-30T12:41:38-05:00
Split BFD support to RTS configure
- - - - -
93b556e6 by John Ericson at 2022-12-30T12:41:38-05:00
Split libm check between top level and RTS
- - - - -
4b072754 by John Ericson at 2022-12-30T12:41:38-05:00
Split mingwex check between top level and RTS
- - - - -
da20656b by John Ericson at 2022-12-30T12:41:38-05:00
Move function checks to RTS configure
Some of these functions are used in `base` too, but we can copy the
checks over to its configure if that's an issue.
- - - - -
052b8569 by John Ericson at 2022-12-30T12:41:38-05:00
Move over a number of C-style checks to RTS configure
- - - - -
93a95200 by John Ericson at 2022-12-30T12:41:38-05:00
Move/Copy remaining AC_DEFINE to RTS config
Only exception is the LLVM version macros, which are used for GHC
itself.
- - - - -
94a51526 by John Ericson at 2022-12-30T12:41:38-05:00
Generate ghcplatform.h from RTS configure
- - - - -
19 changed files:
- configure.ac
- hadrian/cabal.project
- hadrian/hadrian.cabal
- hadrian/src/Rules/Generate.hs
- hadrian/src/Rules/Lint.hs
- libraries/Cabal
- m4/fp_bfd_support.m4
- m4/fp_cc_supports__atomics.m4
- m4/fp_check_pthreads.m4
- m4/fp_find_libdw.m4
- m4/fp_find_libnuma.m4
- m4/fptools_set_haskell_platform_vars.m4
- rts/.gitignore
- rts/configure.ac
- + rts/external-symbols.list.in
- + rts/ghcplatform.h.bottom
- + rts/ghcplatform.h.top.in
- + rts/rts.buildinfo.in
- rts/rts.cabal.in
Changes:
=====================================
configure.ac
=====================================
@@ -142,28 +142,6 @@ if test "$EnableDistroToolchain" = "YES"; then
TarballsAutodownload=NO
fi
-AC_ARG_ENABLE(asserts-all-ways,
-[AS_HELP_STRING([--enable-asserts-all-ways],
- [Usually ASSERTs are only compiled in the DEBUG way,
- this will enable them in all ways.])],
- [FP_CAPITALIZE_YES_NO(["$enableval"], [EnableAssertsAllWays])],
- [EnableAssertsAllWays=NO]
-)
-if test "$enable_asserts_all_ways" = "yes" ; then
- AC_DEFINE([USE_ASSERTS_ALL_WAYS], [1], [Compile-in ASSERTs in all ways.])
-fi
-
-AC_ARG_ENABLE(native-io-manager,
-[AS_HELP_STRING([--enable-native-io-manager],
- [Enable the native I/O manager by default.])],
- [FP_CAPITALIZE_YES_NO(["$enableval"], [EnableNativeIOManager])],
- [EnableNativeIOManager=NO]
-)
-if test "$EnableNativeIOManager" = "YES"; then
- AC_DEFINE_UNQUOTED([DEFAULT_NATIVE_IO_MANAGER], [1], [Enable Native I/O manager as default.])
-fi
-
-
dnl CC_STAGE0, LD_STAGE0, AR_STAGE0 are like the "previous" variable
dnl CC, LD, AR (inherited by CC_STAGE[123], etc.)
dnl but instead used by stage0 for bootstrapping stage1
@@ -325,9 +303,6 @@ dnl ** Do a build with tables next to code?
dnl --------------------------------------------------------------
GHC_TABLES_NEXT_TO_CODE
-if test x"$TablesNextToCode" = xYES; then
- AC_DEFINE([TABLES_NEXT_TO_CODE], [1], [Define to 1 if info tables are laid out next to code])
-fi
AC_SUBST(TablesNextToCode)
dnl ** Does target have runtime linker support?
@@ -637,14 +612,17 @@ dnl unregisterised, Sparc, and PPC backends. Also determines whether
dnl linking to libatomic is required for atomic operations, e.g. on
dnl RISCV64 GCC.
FP_CC_SUPPORTS__ATOMICS
+if test "$need_latomic" = 1; then
+ AC_SUBST([NeedLibatomic],[YES])
+else
+ AC_SUBST([NeedLibatomic],[NO])
+fi
FP_GCC_EXTRA_FLAGS
dnl ** look to see if we have a C compiler using an llvm back end.
dnl
FP_CC_LLVM_BACKEND
-AS_IF([test x"$CcLlvmBackend" = x"YES"],
- [AC_DEFINE([CC_LLVM_BACKEND], [1], [Define (to 1) if C compiler has an LLVM back end])])
AC_SUBST(CcLlvmBackend)
FPTOOLS_SET_C_LD_FLAGS([target],[CFLAGS],[LDFLAGS],[IGNORE_LINKER_LD_FLAGS],[CPPFLAGS])
@@ -835,60 +813,8 @@ dnl --------------------------------------------------
dnl ### program checking section ends here ###
dnl --------------------------------------------------
-dnl --------------------------------------------------
-dnl * Platform header file and syscall feature tests
-dnl ### checking the state of the local header files and syscalls ###
-
-dnl ** Enable large file support. NB. do this before testing the type of
-dnl off_t, because it will affect the result of that test.
-AC_SYS_LARGEFILE
-
-dnl ** check for specific header (.h) files that we are interested in
-AC_CHECK_HEADERS([ctype.h dirent.h dlfcn.h errno.h fcntl.h grp.h limits.h locale.h nlist.h pthread.h pwd.h signal.h sys/param.h sys/mman.h sys/resource.h sys/select.h sys/time.h sys/timeb.h sys/timerfd.h sys/timers.h sys/times.h sys/utsname.h sys/wait.h termios.h utime.h windows.h winsock.h sched.h])
-
-dnl sys/cpuset.h needs sys/param.h to be included first on FreeBSD 9.1; #7708
-AC_CHECK_HEADERS([sys/cpuset.h], [], [],
-[[#if HAVE_SYS_PARAM_H
-# include <sys/param.h>
-#endif
-]])
-
-dnl ** check whether a declaration for `environ` is provided by libc.
-FP_CHECK_ENVIRON
-
-dnl ** do we have long longs?
-AC_CHECK_TYPES([long long])
-
-dnl ** what are the sizes of various types
-FP_CHECK_SIZEOF_AND_ALIGNMENT(char)
-FP_CHECK_SIZEOF_AND_ALIGNMENT(double)
-FP_CHECK_SIZEOF_AND_ALIGNMENT(float)
-FP_CHECK_SIZEOF_AND_ALIGNMENT(int)
-FP_CHECK_SIZEOF_AND_ALIGNMENT(long)
-if test "$ac_cv_type_long_long" = yes; then
-FP_CHECK_SIZEOF_AND_ALIGNMENT(long long)
-fi
-FP_CHECK_SIZEOF_AND_ALIGNMENT(short)
-FP_CHECK_SIZEOF_AND_ALIGNMENT(unsigned char)
-FP_CHECK_SIZEOF_AND_ALIGNMENT(unsigned int)
-FP_CHECK_SIZEOF_AND_ALIGNMENT(unsigned long)
-if test "$ac_cv_type_long_long" = yes; then
-FP_CHECK_SIZEOF_AND_ALIGNMENT(unsigned long long)
-fi
-FP_CHECK_SIZEOF_AND_ALIGNMENT(unsigned short)
-FP_CHECK_SIZEOF_AND_ALIGNMENT(void *)
-
-FP_CHECK_SIZEOF_AND_ALIGNMENT(int8_t)
-FP_CHECK_SIZEOF_AND_ALIGNMENT(uint8_t)
-FP_CHECK_SIZEOF_AND_ALIGNMENT(int16_t)
-FP_CHECK_SIZEOF_AND_ALIGNMENT(uint16_t)
-FP_CHECK_SIZEOF_AND_ALIGNMENT(int32_t)
-FP_CHECK_SIZEOF_AND_ALIGNMENT(uint32_t)
-FP_CHECK_SIZEOF_AND_ALIGNMENT(int64_t)
-FP_CHECK_SIZEOF_AND_ALIGNMENT(uint64_t)
-
-
dnl for use in settings file
+AC_CHECK_SIZEOF([void *])
TargetWordSize=$ac_cv_sizeof_void_p
if test "x$TargetWordSize" = x8; then
AC_SUBST([Cabal64bit],[True])
@@ -900,28 +826,6 @@ AC_SUBST(TargetWordSize)
AC_C_BIGENDIAN([TargetWordBigEndian=YES],[TargetWordBigEndian=NO])
AC_SUBST(TargetWordBigEndian)
-FP_CHECK_FUNC([WinExec],
- [@%:@include <windows.h>], [WinExec("",0)])
-
-FP_CHECK_FUNC([GetModuleFileName],
- [@%:@include <windows.h>], [GetModuleFileName((HMODULE)0,(LPTSTR)0,0)])
-
-dnl ** check for more functions
-dnl ** The following have been verified to be used in ghc/, but might be used somewhere else, too.
-AC_CHECK_FUNCS([getclock getrusage gettimeofday setitimer siginterrupt sysconf times ctime_r sched_setaffinity sched_getaffinity setlocale uselocale])
-
-dnl ** On OS X 10.4 (at least), time.h doesn't declare ctime_r if
-dnl ** _POSIX_C_SOURCE is defined
-AC_CHECK_DECLS([ctime_r], , ,
-[#define _POSIX_SOURCE 1
-#define _POSIX_C_SOURCE 199506L
-#include <time.h>])
-
-dnl On Linux we should have program_invocation_short_name
-AC_CHECK_DECLS([program_invocation_short_name], , ,
-[#define _GNU_SOURCE 1
-#include <errno.h>])
-
dnl ** check for mingwex library
AC_CHECK_LIB(
[mingwex],
@@ -929,27 +833,18 @@ AC_CHECK_LIB(
[AC_SUBST([HaveLibMingwEx],[YES])] [AC_SUBST([CabalMingwex],[True])],
[AC_SUBST([HaveLibMingwEx],[NO])] [AC_SUBST([CabalMingwex],[False])])
-if test $HaveLibMingwEx = YES ; then
- AC_DEFINE([HAVE_MINGWEX], [1], [Define to 1 if you have the mingwex library.])
-fi
-
dnl ** check for math library
dnl Keep that check as early as possible.
dnl as we need to know whether we need libm
dnl for math functions or not
dnl (see https://gitlab.haskell.org/ghc/ghc/issues/3730)
-AC_CHECK_LIB(m, atan, HaveLibM=YES, HaveLibM=NO)
-if test $HaveLibM = YES
-then
- AC_DEFINE([HAVE_LIBM], [1], [Define to 1 if you need to link with libm])
- AC_SUBST([UseLibm],[YES])
-else
- AC_SUBST([UseLibm],[NO])
-fi
-TargetHasLibm=$HaveLibM
+AC_CHECK_LIB(m, atan, UseLibm=YES, UseLibm=NO)
+AC_SUBST([UseLibm])
+TargetHasLibm=$UseLibM
AC_SUBST(TargetHasLibm)
FP_BFD_SUPPORT
+AC_SUBST([UseLibbfd],[$haveLibbfd])
dnl ################################################################
dnl Check for libraries
@@ -959,164 +854,27 @@ FP_FIND_LIBFFI
AC_SUBST(UseSystemLibFFI)
dnl ** check whether we need -ldl to get dlopen()
-AC_CHECK_LIB([dl], [dlopen])
-AC_CHECK_LIB([dl], [dlopen], HaveLibdl=YES, HaveLibdl=NO)
-AC_SUBST([UseLibdl],[$HaveLibdl])
-dnl ** check whether we have dlinfo
-AC_CHECK_FUNCS([dlinfo])
-
-dnl --------------------------------------------------
-dnl * Miscellaneous feature tests
-dnl --------------------------------------------------
-
-dnl ** can we get alloca?
-AC_FUNC_ALLOCA
-
-dnl ** working vfork?
-AC_FUNC_FORK
-
-dnl ** determine whether or not const works
-AC_C_CONST
-
-dnl ** are we big endian?
-AC_C_BIGENDIAN
-FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN
+AC_CHECK_LIB([dl], [dlopen], UseLibdl=YES, UseLibdl=NO)
+AC_SUBST([UseLibdl])
dnl ** check for leading underscores in symbol names
FP_LEADING_UNDERSCORE
AC_SUBST([LeadingUnderscore], [`echo $fptools_cv_leading_underscore | sed 'y/yesno/YESNO/'`])
if test x"$fptools_cv_leading_underscore" = xyes; then
AC_SUBST([CabalLeadingUnderscore],[True])
- AC_DEFINE([LEADING_UNDERSCORE], [1], [Define to 1 if C symbols have a leading underscore added by the compiler.])
else
AC_SUBST([CabalLeadingUnderscore],[False])
fi
-FP_VISIBILITY_HIDDEN
-
-FP_MUSTTAIL
-
dnl ** check for librt
-AC_CHECK_LIB([rt], [clock_gettime])
-AC_CHECK_LIB([rt], [clock_gettime], HaveLibrt=YES, HaveLibrt=NO)
-if test $HaveLibrt = YES
-then
- AC_SUBST([UseLibrt],[YES])
-else
- AC_SUBST([UseLibrt],[NO])
-fi
-AC_CHECK_FUNCS(clock_gettime timer_settime)
-FP_CHECK_TIMER_CREATE
-
-dnl ** check for Apple's "interesting" long double compatibility scheme
-AC_MSG_CHECKING(for printf\$LDBLStub)
-AC_LINK_IFELSE([AC_LANG_CALL([], [printf\$LDBLStub])],
- [
- AC_MSG_RESULT(yes)
- AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[1],
- [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
- ],
- [
- AC_MSG_RESULT(no)
- AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[0],
- [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
- ])
+AC_CHECK_LIB([rt], [clock_gettime], UseLibrt=YES, UseLibrt=NO)
+AC_SUBST([UseLibrt])
FP_CHECK_PTHREADS
-
-dnl ** check for eventfd which is needed by the I/O manager
-AC_CHECK_HEADERS([sys/eventfd.h])
-AC_CHECK_FUNCS([eventfd])
-
-AC_CHECK_FUNCS([getpid getuid raise])
-
-dnl ** Check for __thread support in the compiler
-AC_MSG_CHECKING(for __thread support)
-AC_COMPILE_IFELSE(
- [ AC_LANG_SOURCE([[__thread int tester = 0;]]) ],
- [
- AC_MSG_RESULT(yes)
- AC_DEFINE([CC_SUPPORTS_TLS],[1],[Define to 1 if __thread is supported])
- ],
- [
- AC_MSG_RESULT(no)
- AC_DEFINE([CC_SUPPORTS_TLS],[0],[Define to 1 if __thread is supported])
- ])
-
-dnl large address space support (see rts/include/rts/storage/MBlock.h)
-dnl
-dnl Darwin has vm_allocate/vm_protect
-dnl Linux has mmap(MAP_NORESERVE)/madv(MADV_DONTNEED)
-dnl FreeBSD, Solaris and maybe other have MAP_NORESERVE/MADV_FREE
-dnl (They also have MADV_DONTNEED, but it means something else!)
-dnl
-dnl Windows has VirtualAlloc MEM_RESERVE/MEM_COMMIT, however
-dnl it counts page-table space as committed memory, and so quickly
-dnl runs out of paging file when we have multiple processes reserving
-dnl 1TB of address space, we get the following error:
-dnl VirtualAlloc MEM_RESERVE 1099512676352 bytes failed: The paging file is too small for this operation to complete.
-dnl
-
-AC_ARG_ENABLE(large-address-space,
- [AS_HELP_STRING([--enable-large-address-space],
- [Use a single large address space on 64 bit systems (enabled by default on 64 bit platforms)])],
- EnableLargeAddressSpace=$enableval,
- EnableLargeAddressSpace=yes
-)
-
-use_large_address_space=no
-if test "$ac_cv_sizeof_void_p" -eq 8 ; then
- if test "x$EnableLargeAddressSpace" = "xyes" ; then
- if test "$ghc_host_os" = "darwin" ; then
- use_large_address_space=yes
- elif test "$ghc_host_os" = "openbsd" ; then
- # as of OpenBSD 5.8 (2015), OpenBSD does not support mmap with MAP_NORESERVE.
- # The flag MAP_NORESERVE is supported for source compatibility reasons,
- # but is completely ignored by OS mmap
- use_large_address_space=no
- elif test "$ghc_host_os" = "mingw32" ; then
- # as of Windows 8.1/Server 2012 windows does no longer allocate the page
- # tabe for reserved memory eagerly. So we are now free to use LAS there too.
- use_large_address_space=yes
- else
- AC_CHECK_DECLS([MAP_NORESERVE, MADV_FREE, MADV_DONTNEED],[],[],
- [
- #include <unistd.h>
- #include <sys/types.h>
- #include <sys/mman.h>
- #include <fcntl.h>
- ])
- if test "$ac_cv_have_decl_MAP_NORESERVE" = "yes" &&
- test "$ac_cv_have_decl_MADV_FREE" = "yes" ||
- test "$ac_cv_have_decl_MADV_DONTNEED" = "yes" ; then
- use_large_address_space=yes
- fi
- fi
- fi
-fi
-if test "$use_large_address_space" = "yes" ; then
- AC_DEFINE([USE_LARGE_ADDRESS_SPACE], [1], [Enable single heap address space support])
-fi
-
-dnl ** Use MMAP in the runtime linker?
-dnl --------------------------------------------------------------
-
-case ${TargetOS} in
- linux|linux-android|freebsd|dragonfly|netbsd|openbsd|kfreebsdgnu|gnu|solaris2)
- RtsLinkerUseMmap=1
- ;;
- darwin|ios|watchos|tvos)
- RtsLinkerUseMmap=1
- ;;
- *)
- # Windows (which doesn't have mmap) and everything else.
- RtsLinkerUseMmap=0
- ;;
- esac
-
-AC_DEFINE_UNQUOTED([RTS_LINKER_USE_MMAP], [$RtsLinkerUseMmap],
- [Use mmap in the runtime linker])
-
+AS_IF([test x"$need_lpthread" = 1],
+ [UseLibpthread=YES],
+ [UseLibpthread=NO])
+AC_SUBST([UseLibpthread])
GHC_ADJUSTORS_METHOD([Target])
AC_SUBST([UseLibffiForAdjustors])
@@ -1124,7 +882,16 @@ AC_SUBST([UseLibffiForAdjustors])
dnl ** Other RTS features
dnl --------------------------------------------------------------
FP_FIND_LIBDW
+AC_SUBST([UseLibdw])
+
FP_FIND_LIBNUMA
+if test $HaveLibNuma = "1" ; then
+ AC_SUBST([UseLibNuma],[YES])
+ AC_SUBST([CabalHaveLibNuma],[True])
+else
+ AC_SUBST([UseLibNuma],[NO])
+ AC_SUBST([CabalHaveLibNuma],[False])
+fi
dnl ** Documentation
dnl --------------------------------------------------------------
=====================================
hadrian/cabal.project
=====================================
@@ -1,4 +1,5 @@
packages: ./
+packages: ../libraries/Cabal/Cabal, ../libraries/Cabal/Cabal-syntax
-- This essentially freezes the build plan for hadrian
index-state: 2022-11-19T22:13:06Z
=====================================
hadrian/hadrian.cabal
=====================================
@@ -147,7 +147,7 @@ executable hadrian
, BangPatterns
other-extensions: MultiParamTypeClasses
, TypeFamilies
- build-depends: Cabal >= 3.2 && < 3.9
+ build-depends: Cabal >= 3.2 && < 3.10
, base >= 4.8 && < 5
, bytestring >= 0.10 && < 0.12
, containers >= 0.5 && < 0.7
=====================================
hadrian/src/Rules/Generate.hs
=====================================
@@ -146,10 +146,10 @@ generatePackageCode context@(Context stage pkg _ _) = do
when (pkg == rts) $ do
root -/- "**" -/- dir -/- "cmm/AutoApply.cmm" %> \file ->
build $ target context GenApply [] [file]
- let go gen file = generate file (semiEmptyTarget stage) gen
root -/- "**" -/- dir -/- "include/ghcautoconf.h" %> \_ ->
need . pure =<< pkgSetupConfigFile context
- root -/- "**" -/- dir -/- "include/ghcplatform.h" %> go generateGhcPlatformH
+ root -/- "**" -/- dir -/- "include/ghcplatform.h" %> \_ ->
+ need . pure =<< pkgSetupConfigFile context
root -/- "**" -/- dir -/- "include/DerivedConstants.h" %> genPlatformConstantsHeader context
root -/- "**" -/- dir -/- "include/rts/EventLogConstants.h" %> genEventTypes "--event-types-defines"
root -/- "**" -/- dir -/- "include/rts/EventTypes.h" %> genEventTypes "--event-types-array"
@@ -320,59 +320,6 @@ ghcWrapper stage = do
else [])
++ [ "$@" ]
--- | Given a 'String' replace characters '.' and '-' by underscores ('_') so that
--- the resulting 'String' is a valid C preprocessor identifier.
-cppify :: String -> String
-cppify = replaceEq '-' '_' . replaceEq '.' '_'
-
--- | Generate @ghcplatform.h@ header.
-generateGhcPlatformH :: Expr String
-generateGhcPlatformH = do
- trackGenerateHs
- stage <- getStage
- let chooseSetting x y = getSetting $ case stage of { Stage0 {} -> x; _ -> y }
- buildPlatform <- chooseSetting BuildPlatform HostPlatform
- buildArch <- chooseSetting BuildArch HostArch
- buildOs <- chooseSetting BuildOs HostOs
- buildVendor <- chooseSetting BuildVendor HostVendor
- hostPlatform <- chooseSetting HostPlatform TargetPlatform
- hostArch <- chooseSetting HostArch TargetArch
- hostOs <- chooseSetting HostOs TargetOs
- hostVendor <- chooseSetting HostVendor TargetVendor
- ghcUnreg <- getFlag GhcUnregisterised
- return . unlines $
- [ "#if !defined(__GHCPLATFORM_H__)"
- , "#define __GHCPLATFORM_H__"
- , ""
- , "#define BuildPlatform_TYPE " ++ cppify buildPlatform
- , "#define HostPlatform_TYPE " ++ cppify hostPlatform
- , ""
- , "#define " ++ cppify buildPlatform ++ "_BUILD 1"
- , "#define " ++ cppify hostPlatform ++ "_HOST 1"
- , ""
- , "#define " ++ buildArch ++ "_BUILD_ARCH 1"
- , "#define " ++ hostArch ++ "_HOST_ARCH 1"
- , "#define BUILD_ARCH " ++ show buildArch
- , "#define HOST_ARCH " ++ show hostArch
- , ""
- , "#define " ++ buildOs ++ "_BUILD_OS 1"
- , "#define " ++ hostOs ++ "_HOST_OS 1"
- , "#define BUILD_OS " ++ show buildOs
- , "#define HOST_OS " ++ show hostOs
- , ""
- , "#define " ++ buildVendor ++ "_BUILD_VENDOR 1"
- , "#define " ++ hostVendor ++ "_HOST_VENDOR 1"
- , "#define BUILD_VENDOR " ++ show buildVendor
- , "#define HOST_VENDOR " ++ show hostVendor
- , ""
- ]
- ++
- [ "#define UnregisterisedCompiler 1" | ghcUnreg ]
- ++
- [ ""
- , "#endif /* __GHCPLATFORM_H__ */"
- ]
-
-- See Note [tooldir: How GHC finds mingw on Windows]
generateSettings :: Expr String
generateSettings = do
=====================================
hadrian/src/Rules/Lint.hs
=====================================
@@ -20,6 +20,8 @@ lintRules = do
cmd_ (Cwd "libraries/base") "./configure"
"rts" -/- "include" -/- "ghcautoconf.h" %> \_ ->
cmd_ (Cwd "rts") "./configure"
+ "rts" -/- "include" -/- "ghcplatform.h" %> \_ ->
+ cmd_ (Cwd "rts") "./configure"
lint :: Action () -> Action ()
lint lintAction = do
@@ -66,7 +68,6 @@ base = do
let includeDirs =
[ "rts/include"
, "libraries/base/include"
- , stage1RtsInc
]
runHLint includeDirs [] "libraries/base"
=====================================
libraries/Cabal
=====================================
@@ -1 +1 @@
-Subproject commit 6cd29789ca866464dc3af89f62c98c41264ce3cd
+Subproject commit 30f8a46008d164b5c4c6ce0b4453eb93eb5ef46c
=====================================
m4/fp_bfd_support.m4
=====================================
@@ -2,7 +2,7 @@
# ----------------------
# whether to use libbfd for debugging RTS
AC_DEFUN([FP_BFD_SUPPORT], [
- HaveLibbfd=NO
+ haveLibbfd=NO
AC_ARG_ENABLE(bfd-debug,
[AS_HELP_STRING([--enable-bfd-debug],
[Enable symbol resolution for -debug rts ('+RTS -Di') via binutils' libbfd [default=no]])],
@@ -40,10 +40,9 @@ AC_DEFUN([FP_BFD_SUPPORT], [
bfd_get_symbol_info(abfd,symbol_table[0],&info);
}
]])],
- HaveLibbfd=YES,dnl bfd seems to work
+ haveLibbfd=YES dnl bfd seems to work
[AC_MSG_ERROR([can't use 'bfd' library])])
LIBS="$save_LIBS"
]
)
- AC_SUBST([UseLibbfd],[$HaveLibbfd])
])
=====================================
m4/fp_cc_supports__atomics.m4
=====================================
@@ -61,12 +61,4 @@ AC_DEFUN([FP_CC_SUPPORTS__ATOMICS],
AC_MSG_RESULT(no)
AC_MSG_ERROR([C compiler needs to support __atomic primitives.])
])
- AC_DEFINE([HAVE_C11_ATOMICS], [1], [Does C compiler support __atomic primitives?])
- if test "$need_latomic" = 1; then
- AC_SUBST([NeedLibatomic],[YES])
- else
- AC_SUBST([NeedLibatomic],[NO])
- fi
- AC_DEFINE_UNQUOTED([NEED_ATOMIC_LIB], [$need_latomic],
- [Define to 1 if we need -latomic.])
])
=====================================
m4/fp_check_pthreads.m4
=====================================
@@ -12,18 +12,15 @@ AC_DEFUN([FP_CHECK_PTHREADS],
AC_CHECK_FUNC(pthread_create,
[
AC_MSG_RESULT(no)
- AC_SUBST([UseLibpthread],[NO])
need_lpthread=0
],
[
AC_CHECK_LIB(pthread, pthread_create,
[
AC_MSG_RESULT(yes)
- AC_SUBST([UseLibpthread],[YES])
need_lpthread=1
],
[
- AC_SUBST([UseLibpthread],[NO])
AC_MSG_RESULT([no pthreads support found.])
need_lpthread=0
])
=====================================
m4/fp_find_libdw.m4
=====================================
@@ -26,7 +26,6 @@ AC_DEFUN([FP_FIND_LIBDW],
AC_SUBST(LibdwIncludeDir)
UseLibdw=NO
- USE_LIBDW=0
AC_ARG_ENABLE(dwarf-unwind,
[AS_HELP_STRING([--enable-dwarf-unwind],
[Enable DWARF unwinding support in the runtime system via elfutils' libdw [default=no]])])
@@ -44,11 +43,5 @@ AC_DEFUN([FP_FIND_LIBDW],
CFLAGS="$CFLAGS2"
LDFLAGS="$LDFLAGS2"
fi
-
- AC_SUBST(UseLibdw)
- if test $UseLibdw = "YES" ; then
- USE_LIBDW=1
- fi
- AC_DEFINE_UNQUOTED([USE_LIBDW], [$USE_LIBDW], [Set to 1 to use libdw])
])
=====================================
m4/fp_find_libnuma.m4
=====================================
@@ -48,13 +48,4 @@ AC_DEFUN([FP_FIND_LIBNUMA],
CFLAGS="$CFLAGS2"
LDFLAGS="$LDFLAGS2"
fi
-
- AC_DEFINE_UNQUOTED([HAVE_LIBNUMA], [$HaveLibNuma], [Define to 1 if you have libnuma])
- if test $HaveLibNuma = "1" ; then
- AC_SUBST([UseLibNuma],[YES])
- AC_SUBST([CabalHaveLibNuma],[True])
- else
- AC_SUBST([UseLibNuma],[NO])
- AC_SUBST([CabalHaveLibNuma],[False])
- fi
])
=====================================
m4/fptools_set_haskell_platform_vars.m4
=====================================
@@ -162,8 +162,6 @@ AC_DEFUN([GHC_SUBSECTIONS_VIA_SYMBOLS],
TargetHasSubsectionsViaSymbols=NO
else
TargetHasSubsectionsViaSymbols=YES
- AC_DEFINE([HAVE_SUBSECTIONS_VIA_SYMBOLS],[1],
- [Define to 1 if Apple-style dead-stripping is supported.])
fi
],
[TargetHasSubsectionsViaSymbols=NO
=====================================
rts/.gitignore
=====================================
@@ -18,5 +18,7 @@
/config.status
/configure
+/external-symbols.list
/ghcautoconf.h.autoconf.in
/ghcautoconf.h.autoconf
+/include/ghcautoconf.h
=====================================
rts/configure.ac
=====================================
@@ -22,25 +22,376 @@ dnl #define SIZEOF_CHAR 0
dnl recently.
AC_PREREQ([2.69])
+AC_CONFIG_FILES([ghcplatform.h.top])
+
AC_CONFIG_HEADERS([ghcautoconf.h.autoconf])
+AC_ARG_ENABLE(asserts-all-ways,
+[AS_HELP_STRING([--enable-asserts-all-ways],
+ [Usually ASSERTs are only compiled in the DEBUG way,
+ this will enable them in all ways.])],
+ [FP_CAPITALIZE_YES_NO(["$enableval"], [EnableAssertsAllWays])],
+ [EnableAssertsAllWays=NO]
+)
+if test "$enable_asserts_all_ways" = "yes" ; then
+ AC_DEFINE([USE_ASSERTS_ALL_WAYS], [1], [Compile-in ASSERTs in all ways.])
+fi
+
+AC_ARG_ENABLE(native-io-manager,
+[AS_HELP_STRING([--enable-native-io-manager],
+ [Enable the native I/O manager by default.])],
+ [FP_CAPITALIZE_YES_NO(["$enableval"], [EnableNativeIOManager])],
+ [EnableNativeIOManager=NO]
+)
+if test "$EnableNativeIOManager" = "YES"; then
+ AC_DEFINE_UNQUOTED([DEFAULT_NATIVE_IO_MANAGER], [1], [Enable Native I/O manager as default.])
+fi
+
# We have to run these unconditionally, but we may discard their
# results in the following code
AC_CANONICAL_BUILD
AC_CANONICAL_HOST
+dnl ** Do an unregisterised build?
+dnl --------------------------------------------------------------
+
+GHC_UNREGISTERISED
+
+dnl ** Do a build with tables next to code?
+dnl --------------------------------------------------------------
+
+GHC_TABLES_NEXT_TO_CODE
+if test x"$TablesNextToCode" = xYES; then
+ AC_DEFINE([TABLES_NEXT_TO_CODE], [1], [Define to 1 if info tables are laid out next to code])
+fi
+
+dnl detect compiler (prefer gcc over clang) and set $CC (unless CC already set),
+dnl later CC is copied to CC_STAGE{1,2,3}
+AC_PROG_CC([cc gcc clang])
+
+dnl make extensions visible to allow feature-tests to detect them lateron
+AC_USE_SYSTEM_EXTENSIONS
+
+dnl ** Used to determine how to compile ghc-prim's atomics.c, used by
+dnl unregisterised, Sparc, and PPC backends. Also determines whether
+dnl linking to libatomic is required for atomic operations, e.g. on
+dnl RISCV64 GCC.
+FP_CC_SUPPORTS__ATOMICS
+AC_DEFINE([HAVE_C11_ATOMICS], [1], [Does C compiler support __atomic primitives?])
+AC_DEFINE_UNQUOTED([NEED_ATOMIC_LIB], [$need_latomic],
+ [Define to 1 if we need -latomic for sub-word atomic operations.])
+
+dnl ** look to see if we have a C compiler using an llvm back end.
+dnl
+FP_CC_LLVM_BACKEND
+AS_IF([test x"$CcLlvmBackend" = x"YES"],
+ [AC_DEFINE([CC_LLVM_BACKEND], [1], [Define (to 1) if C compiler has an LLVM back end])])
+
+GHC_CONVERT_PLATFORM_PARTS([build], [Build])
+FPTOOLS_SET_PLATFORM_VARS([build],[Build])
+FPTOOLS_SET_HASKELL_PLATFORM_VARS([Build])
+
GHC_CONVERT_PLATFORM_PARTS([host], [Host])
FPTOOLS_SET_PLATFORM_VARS([host], [Host])
FPTOOLS_SET_HASKELL_PLATFORM_VARS([Host])
+GHC_SUBSECTIONS_VIA_SYMBOLS
+AS_IF([test x"${TargetHasSubsectionsViaSymbols}" = x"YES"],
+ [AC_DEFINE([HAVE_SUBSECTIONS_VIA_SYMBOLS],[1],
+ [Define to 1 if Apple-style dead-stripping is supported.])])
+
+dnl --------------------------------------------------
+dnl * Platform header file and syscall feature tests
+dnl ### checking the state of the local header files and syscalls ###
+
+dnl ** Enable large file support. NB. do this before testing the type of
+dnl off_t, because it will affect the result of that test.
+AC_SYS_LARGEFILE
+
+dnl ** check for specific header (.h) files that we are interested in
+AC_CHECK_HEADERS([ctype.h dirent.h dlfcn.h errno.h fcntl.h grp.h limits.h locale.h nlist.h pthread.h pwd.h signal.h sys/param.h sys/mman.h sys/resource.h sys/select.h sys/time.h sys/timeb.h sys/timerfd.h sys/timers.h sys/times.h sys/utsname.h sys/wait.h termios.h utime.h windows.h winsock.h sched.h])
+
+dnl sys/cpuset.h needs sys/param.h to be included first on FreeBSD 9.1; #7708
+AC_CHECK_HEADERS([sys/cpuset.h], [], [],
+[[#if HAVE_SYS_PARAM_H
+# include <sys/param.h>
+#endif
+]])
+
+dnl ** check whether a declaration for `environ` is provided by libc.
+FP_CHECK_ENVIRON
+
+dnl ** do we have long longs?
+AC_CHECK_TYPES([long long])
+
+dnl ** what are the sizes of various types
+FP_CHECK_SIZEOF_AND_ALIGNMENT(char)
+FP_CHECK_SIZEOF_AND_ALIGNMENT(double)
+FP_CHECK_SIZEOF_AND_ALIGNMENT(float)
+FP_CHECK_SIZEOF_AND_ALIGNMENT(int)
+FP_CHECK_SIZEOF_AND_ALIGNMENT(long)
+if test "$ac_cv_type_long_long" = yes; then
+FP_CHECK_SIZEOF_AND_ALIGNMENT(long long)
+fi
+FP_CHECK_SIZEOF_AND_ALIGNMENT(short)
+FP_CHECK_SIZEOF_AND_ALIGNMENT(unsigned char)
+FP_CHECK_SIZEOF_AND_ALIGNMENT(unsigned int)
+FP_CHECK_SIZEOF_AND_ALIGNMENT(unsigned long)
+if test "$ac_cv_type_long_long" = yes; then
+FP_CHECK_SIZEOF_AND_ALIGNMENT(unsigned long long)
+fi
+FP_CHECK_SIZEOF_AND_ALIGNMENT(unsigned short)
+FP_CHECK_SIZEOF_AND_ALIGNMENT(void *)
+
+FP_CHECK_SIZEOF_AND_ALIGNMENT(int8_t)
+FP_CHECK_SIZEOF_AND_ALIGNMENT(uint8_t)
+FP_CHECK_SIZEOF_AND_ALIGNMENT(int16_t)
+FP_CHECK_SIZEOF_AND_ALIGNMENT(uint16_t)
+FP_CHECK_SIZEOF_AND_ALIGNMENT(int32_t)
+FP_CHECK_SIZEOF_AND_ALIGNMENT(uint32_t)
+FP_CHECK_SIZEOF_AND_ALIGNMENT(int64_t)
+FP_CHECK_SIZEOF_AND_ALIGNMENT(uint64_t)
+
+
+FP_CHECK_FUNC([WinExec],
+ [@%:@include <windows.h>], [WinExec("",0)])
+
+FP_CHECK_FUNC([GetModuleFileName],
+ [@%:@include <windows.h>], [GetModuleFileName((HMODULE)0,(LPTSTR)0,0)])
+
+dnl ** check for more functions
+dnl ** The following have been verified to be used in ghc/, but might be used somewhere else, too.
+AC_CHECK_FUNCS([getclock getrusage gettimeofday setitimer siginterrupt sysconf times ctime_r sched_setaffinity sched_getaffinity setlocale uselocale])
+
+dnl ** On OS X 10.4 (at least), time.h doesn't declare ctime_r if
+dnl ** _POSIX_C_SOURCE is defined
+AC_CHECK_DECLS([ctime_r], , ,
+[#define _POSIX_SOURCE 1
+#define _POSIX_C_SOURCE 199506L
+#include <time.h>])
+
+dnl On Linux we should have program_invocation_short_name
+AC_CHECK_DECLS([program_invocation_short_name], , ,
+[#define _GNU_SOURCE 1
+#include <errno.h>])
+
+dnl ** check for mingwex library
+AC_CHECK_LIB(
+ [mingwex],
+ [closedir],
+ [AC_SUBST([HaveLibMingwEx],[YES])],
+ [AC_SUBST([HaveLibMingwEx],[NO])])
+
+if test $HaveLibMingwEx = YES ; then
+ AC_DEFINE([HAVE_MINGWEX], [1], [Define to 1 if you have the mingwex library.])
+fi
+
+dnl ** check for math library
+dnl Keep that check as early as possible.
+dnl as we need to know whether we need libm
+dnl for math functions or not
+dnl (see https://gitlab.haskell.org/ghc/ghc/issues/3730)
+AC_CHECK_LIB(m, atan,
+ [AC_DEFINE([HAVE_LIBM], [1], [Define to 1 if you need to link with libm])])
+
+FP_BFD_SUPPORT
+
+dnl ################################################################
+dnl Check for libraries
+dnl ################################################################
+
+FP_FIND_LIBFFI
+
+dnl ** check whether we need -ldl to get dlopen()
+AC_CHECK_LIB([dl], [dlopen])
+dnl ** check whether we have dlinfo
+AC_CHECK_FUNCS([dlinfo])
+
+dnl --------------------------------------------------
+dnl * Miscellaneous feature tests
+dnl --------------------------------------------------
+
+dnl ** can we get alloca?
+AC_FUNC_ALLOCA
+
+dnl ** working vfork?
+AC_FUNC_FORK
+
+dnl ** determine whether or not const works
+AC_C_CONST
+
+dnl ** are we big endian?
+AC_C_BIGENDIAN
+FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN
+
+dnl ** check for leading underscores in symbol names
+FP_LEADING_UNDERSCORE
+if test x"$fptools_cv_leading_underscore" = xyes; then
+ AC_DEFINE([LEADING_UNDERSCORE], [1], [Define to 1 if C symbols have a leading underscore added by the compiler.])
+fi
+
+FP_VISIBILITY_HIDDEN
+
+FP_MUSTTAIL
+
+dnl ** check for librt
+AC_CHECK_LIB([rt], [clock_gettime])
+AC_CHECK_FUNCS(clock_gettime timer_settime)
+FP_CHECK_TIMER_CREATE
+
+dnl ** check for Apple's "interesting" long double compatibility scheme
+AC_MSG_CHECKING(for printf\$LDBLStub)
+AC_LINK_IFELSE([AC_LANG_CALL([], [printf\$LDBLStub])],
+ [
+ AC_MSG_RESULT(yes)
+ AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[1],
+ [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
+ ],
+ [
+ AC_MSG_RESULT(no)
+ AC_DEFINE([HAVE_PRINTF_LDBLSTUB],[0],
+ [Define to 1 if we have printf$LDBLStub (Apple Mac OS >= 10.4, PPC).])
+ ])
+
+FP_CHECK_PTHREADS
+
+dnl ** check for eventfd which is needed by the I/O manager
+AC_CHECK_HEADERS([sys/eventfd.h])
+AC_CHECK_FUNCS([eventfd])
+
+AC_CHECK_FUNCS([getpid getuid raise])
+
+dnl ** Check for __thread support in the compiler
+AC_MSG_CHECKING(for __thread support)
+AC_COMPILE_IFELSE(
+ [ AC_LANG_SOURCE([[__thread int tester = 0;]]) ],
+ [
+ AC_MSG_RESULT(yes)
+ AC_DEFINE([CC_SUPPORTS_TLS],[1],[Define to 1 if __thread is supported])
+ ],
+ [
+ AC_MSG_RESULT(no)
+ AC_DEFINE([CC_SUPPORTS_TLS],[0],[Define to 1 if __thread is supported])
+ ])
+
+dnl large address space support (see rts/include/rts/storage/MBlock.h)
+dnl
+dnl Darwin has vm_allocate/vm_protect
+dnl Linux has mmap(MAP_NORESERVE)/madv(MADV_DONTNEED)
+dnl FreeBSD, Solaris and maybe other have MAP_NORESERVE/MADV_FREE
+dnl (They also have MADV_DONTNEED, but it means something else!)
+dnl
+dnl Windows has VirtualAlloc MEM_RESERVE/MEM_COMMIT, however
+dnl it counts page-table space as committed memory, and so quickly
+dnl runs out of paging file when we have multiple processes reserving
+dnl 1TB of address space, we get the following error:
+dnl VirtualAlloc MEM_RESERVE 1099512676352 bytes failed: The paging file is too small for this operation to complete.
+dnl
+
+AC_ARG_ENABLE(large-address-space,
+ [AS_HELP_STRING([--enable-large-address-space],
+ [Use a single large address space on 64 bit systems (enabled by default on 64 bit platforms)])],
+ EnableLargeAddressSpace=$enableval,
+ EnableLargeAddressSpace=yes
+)
+
+use_large_address_space=no
+if test "$ac_cv_sizeof_void_p" -eq 8 ; then
+ if test "x$EnableLargeAddressSpace" = "xyes" ; then
+ if test "$ghc_host_os" = "darwin" ; then
+ use_large_address_space=yes
+ elif test "$ghc_host_os" = "openbsd" ; then
+ # as of OpenBSD 5.8 (2015), OpenBSD does not support mmap with MAP_NORESERVE.
+ # The flag MAP_NORESERVE is supported for source compatibility reasons,
+ # but is completely ignored by OS mmap
+ use_large_address_space=no
+ elif test "$ghc_host_os" = "mingw32" ; then
+ # as of Windows 8.1/Server 2012 windows does no longer allocate the page
+ # tabe for reserved memory eagerly. So we are now free to use LAS there too.
+ use_large_address_space=yes
+ else
+ AC_CHECK_DECLS([MAP_NORESERVE, MADV_FREE, MADV_DONTNEED],[],[],
+ [
+ #include <unistd.h>
+ #include <sys/types.h>
+ #include <sys/mman.h>
+ #include <fcntl.h>
+ ])
+ if test "$ac_cv_have_decl_MAP_NORESERVE" = "yes" &&
+ test "$ac_cv_have_decl_MADV_FREE" = "yes" ||
+ test "$ac_cv_have_decl_MADV_DONTNEED" = "yes" ; then
+ use_large_address_space=yes
+ fi
+ fi
+ fi
+fi
+if test "$use_large_address_space" = "yes" ; then
+ AC_DEFINE([USE_LARGE_ADDRESS_SPACE], [1], [Enable single heap address space support])
+fi
+
+dnl ** Use MMAP in the runtime linker?
+dnl --------------------------------------------------------------
+
+case ${HostOS} in
+ linux|linux-android|freebsd|dragonfly|netbsd|openbsd|kfreebsdgnu|gnu|solaris2)
+ RtsLinkerUseMmap=1
+ ;;
+ darwin|ios|watchos|tvos)
+ RtsLinkerUseMmap=1
+ ;;
+ *)
+ # Windows (which doesn't have mmap) and everything else.
+ RtsLinkerUseMmap=0
+ ;;
+ esac
+
+AC_DEFINE_UNQUOTED([RTS_LINKER_USE_MMAP], [$RtsLinkerUseMmap],
+ [Use mmap in the runtime linker])
+
+GHC_ADJUSTORS_METHOD([Host])
+AC_SUBST([UseLibffiForAdjustors])
+
+dnl ** Other RTS features
+dnl --------------------------------------------------------------
+FP_FIND_LIBDW
+if test $UseLibdw = "YES" ; then
+ USE_LIBDW=1
+else
+ USE_LIBDW=0
+fi
+AC_DEFINE_UNQUOTED([USE_LIBDW], [$USE_LIBDW], [Set to 1 to use libdw])
+
+FP_FIND_LIBNUMA
+AC_DEFINE_UNQUOTED([HAVE_LIBNUMA], [$HaveLibNuma], [Define to 1 if you have libnuma])
+
+dnl ** Write config files
+dnl --------------------------------------------------------------
+
AC_OUTPUT
dnl ######################################################################
-dnl Generate ghcautoconf.h
+dnl Generate ghcplatform.h
dnl ######################################################################
[
mkdir -p include
+
+touch include/ghcplatform.h
+> include/ghcplatform.h
+
+cat ghcplatform.h.top >> include/ghcplatform.h
+]
+AS_IF([test x"${Unregisterised}" = x"YES"],
+ [echo "#define UnregisterisedCompiler 1" >> include/ghcplatform.h])
+[
+cat $srcdir/ghcplatform.h.bottom >> include/ghcplatform.h
+]
+
+dnl ######################################################################
+dnl Generate ghcautoconf.h
+dnl ######################################################################
+
+[
touch include/ghcautoconf.h
> include/ghcautoconf.h
@@ -55,3 +406,32 @@ cat $srcdir/../mk/config.h ghcautoconf.h.autoconf | sed \
>> include/ghcautoconf.h
echo "#endif /* __GHCAUTOCONF_H__ */" >> include/ghcautoconf.h
]
+
+dnl ######################################################################
+dnl Generate external symbol flags (-Wl,-u...)
+dnl ######################################################################
+
+cat $srcdir/external-symbols.list.in \
+ | "$CC" -E -P -traditional -Iinclude - -o - \
+ | sed '/^$/d' \
+ > external-symbols.list \
+ || exit 1
+
+mv external-symbols.list external-symbols.tmp
+if [[ -n "$LeadingUnderscore" ]]; then
+ sed 's/^/ -Wl,-u_/' external-symbols.tmp > external-symbols.list
+else
+ sed 's/^/ -Wl,-u/' external-symbols.tmp > external-symbols.list
+fi
+rm -f external-symbols.tmp
+
+dnl ######################################################################
+dnl Generate build-info
+dnl ######################################################################
+
+cat $srcdir/rts.buildinfo.in | \
+ sed -e 's/^ *//' | \
+ "$CC" -E -P -traditional - -o - \
+ > rts.buildinfo
+echo "" >> rts.buildinfo
+rm -f external-symbols.list
=====================================
rts/external-symbols.list.in
=====================================
@@ -0,0 +1,103 @@
+#include "ghcautoconf.h"
+
+#if SIZEOF_VOID_P == 8
+hs_atomic_add64
+hs_atomic_sub64
+hs_atomic_and64
+hs_atomic_nand64
+hs_atomic_or64
+hs_atomic_xor64
+hs_atomicread64
+hs_atomicwrite64
+#endif
+
+#if mingw32_HOST_OS
+base_GHCziEventziWindows_processRemoteCompletion_closure
+#endif
+
+#if darwin_HOST_OS
+#if 0
+See Note [fd_set_overflow]
+#endif
+__darwin_check_fd_set_overflow
+#endif
+
+#if FIND_PTR
+findPtr
+#endif
+
+base_GHCziTopHandler_runIO_closure
+base_GHCziTopHandler_runNonIO_closure
+ghczmprim_GHCziTupleziPrim_Z0T_closure
+ghczmprim_GHCziTypes_True_closure
+ghczmprim_GHCziTypes_False_closure
+base_GHCziPack_unpackCString_closure
+base_GHCziWeakziFinalizze_runFinalizzerBatch_closure
+base_GHCziIOziException_stackOverflow_closure
+base_GHCziIOziException_heapOverflow_closure
+base_GHCziIOziException_allocationLimitExceeded_closure
+base_GHCziIOziException_blockedIndefinitelyOnMVar_closure
+base_GHCziIOziException_blockedIndefinitelyOnSTM_closure
+base_GHCziIOziException_cannotCompactFunction_closure
+base_GHCziIOziException_cannotCompactPinned_closure
+base_GHCziIOziException_cannotCompactMutable_closure
+base_GHCziIOPort_doubleReadException_closure
+base_ControlziExceptionziBase_nonTermination_closure
+base_ControlziExceptionziBase_nestedAtomically_closure
+base_GHCziEventziThread_blockedOnBadFD_closure
+base_GHCziConcziSync_runSparks_closure
+base_GHCziConcziIO_ensureIOManagerIsRunning_closure
+base_GHCziConcziIO_interruptIOManager_closure
+base_GHCziConcziIO_ioManagerCapabilitiesChanged_closure
+base_GHCziConcziSignal_runHandlersPtr_closure
+base_GHCziTopHandler_flushStdHandles_closure
+base_GHCziTopHandler_runMainIO_closure
+ghczmprim_GHCziTypes_Czh_con_info
+ghczmprim_GHCziTypes_Izh_con_info
+ghczmprim_GHCziTypes_Fzh_con_info
+ghczmprim_GHCziTypes_Dzh_con_info
+ghczmprim_GHCziTypes_Wzh_con_info
+base_GHCziPtr_Ptr_con_info
+base_GHCziPtr_FunPtr_con_info
+base_GHCziInt_I8zh_con_info
+base_GHCziInt_I16zh_con_info
+base_GHCziInt_I32zh_con_info
+base_GHCziInt_I64zh_con_info
+base_GHCziWord_W8zh_con_info
+base_GHCziWord_W16zh_con_info
+base_GHCziWord_W32zh_con_info
+base_GHCziWord_W64zh_con_info
+base_GHCziStable_StablePtr_con_info
+hs_atomic_add8
+hs_atomic_add16
+hs_atomic_add32
+hs_atomic_sub8
+hs_atomic_sub16
+hs_atomic_sub32
+hs_atomic_and8
+hs_atomic_and16
+hs_atomic_and32
+hs_atomic_nand8
+hs_atomic_nand16
+hs_atomic_nand32
+hs_atomic_or8
+hs_atomic_or16
+hs_atomic_or32
+hs_atomic_xor8
+hs_atomic_xor16
+hs_atomic_xor32
+hs_cmpxchg8
+hs_cmpxchg16
+hs_cmpxchg32
+hs_cmpxchg64
+hs_xchg8
+hs_xchg16
+hs_xchg32
+hs_xchg64
+hs_atomicread8
+hs_atomicread16
+hs_atomicread32
+hs_atomicwrite8
+hs_atomicwrite16
+hs_atomicwrite32
+base_GHCziStackziCloneStack_StackSnapshot_closure
=====================================
rts/ghcplatform.h.bottom
=====================================
@@ -0,0 +1,2 @@
+
+#endif /* __GHCPLATFORM_H__ */
=====================================
rts/ghcplatform.h.top.in
=====================================
@@ -0,0 +1,23 @@
+#if !defined(__GHCPLATFORM_H__)
+#define __GHCPLATFORM_H__
+
+#define BuildPlatform_TYPE @BuildPlatform_CPP@
+#define HostPlatform_TYPE @HostPlatform_CPP@
+
+#define @BuildPlatform_CPP at _BUILD 1
+#define @HostPlatform_CPP at _HOST 1
+
+#define @BuildArch_CPP at _BUILD_ARCH 1
+#define @HostArch_CPP at _HOST_ARCH 1
+#define BUILD_ARCH "@BuildArch_CPP@"
+#define HOST_ARCH "@HostArch_CPP@"
+
+#define @BuildOS_CPP at _BUILD_OS 1
+#define @HostOS_CPP at _HOST_OS 1
+#define BUILD_OS "@BuildOS_CPP@"
+#define HOST_OS "@HostOS_CPP@"
+
+#define @BuildVendor_CPP at _BUILD_VENDOR 1
+#define @HostVendor_CPP at _HOST_VENDOR 1
+#define BUILD_VENDOR "@BuildVendor_CPP@"
+#define HOST_VENDOR "@HostVendor_CPP@"
=====================================
rts/rts.buildinfo.in
=====================================
@@ -0,0 +1,3 @@
+-- External symbols referenced by the RTS
+ld-options:
+#include "external-symbols.list"
=====================================
rts/rts.cabal.in
=====================================
@@ -14,9 +14,12 @@ build-type: Configure
extra-source-files:
configure
configure.ac
+ external-symbols.list.in
+ rts.buildinfo.in
extra-tmp-files:
autom4te.cache
+ rts.buildinfo
config.log
config.status
@@ -221,7 +224,7 @@ library
include-dirs: include
includes: Rts.h
- autogen-includes: ghcautoconf.h
+ autogen-includes: ghcautoconf.h ghcplatform.h
install-includes: Cmm.h HsFFI.h MachDeps.h Rts.h RtsAPI.h Stg.h
ghcautoconf.h ghcconfig.h ghcplatform.h ghcversion.h
-- ^ from include
@@ -291,200 +294,6 @@ library
stg/SMP.h
stg/Ticky.h
stg/Types.h
- if flag(64bit)
- if flag(leading-underscore)
- ld-options:
- "-Wl,-u,_hs_atomic_add64"
- "-Wl,-u,_hs_atomic_sub64"
- "-Wl,-u,_hs_atomic_and64"
- "-Wl,-u,_hs_atomic_nand64"
- "-Wl,-u,_hs_atomic_or64"
- "-Wl,-u,_hs_atomic_xor64"
- "-Wl,-u,_hs_atomicread64"
- "-Wl,-u,_hs_atomicwrite64"
- else
- ld-options:
- "-Wl,-u,hs_atomic_add64"
- "-Wl,-u,hs_atomic_sub64"
- "-Wl,-u,hs_atomic_and64"
- "-Wl,-u,hs_atomic_nand64"
- "-Wl,-u,hs_atomic_or64"
- "-Wl,-u,hs_atomic_xor64"
- "-Wl,-u,hs_atomicread64"
- "-Wl,-u,hs_atomicwrite64"
- if flag(leading-underscore)
- ld-options:
- "-Wl,-u,_base_GHCziTopHandler_runIO_closure"
- "-Wl,-u,_base_GHCziTopHandler_runNonIO_closure"
- "-Wl,-u,_ghczmprim_GHCziTupleziPrim_Z0T_closure"
- "-Wl,-u,_ghczmprim_GHCziTypes_True_closure"
- "-Wl,-u,_ghczmprim_GHCziTypes_False_closure"
- "-Wl,-u,_base_GHCziPack_unpackCString_closure"
- "-Wl,-u,_base_GHCziWeakziFinalizze_runFinalizzerBatch_closure"
- "-Wl,-u,_base_GHCziIOziException_stackOverflow_closure"
- "-Wl,-u,_base_GHCziIOziException_heapOverflow_closure"
- "-Wl,-u,_base_GHCziIOziException_allocationLimitExceeded_closure"
- "-Wl,-u,_base_GHCziIOziException_blockedIndefinitelyOnMVar_closure"
- "-Wl,-u,_base_GHCziIOziException_blockedIndefinitelyOnSTM_closure"
- "-Wl,-u,_base_GHCziIOziException_cannotCompactFunction_closure"
- "-Wl,-u,_base_GHCziIOziException_cannotCompactPinned_closure"
- "-Wl,-u,_base_GHCziIOziException_cannotCompactMutable_closure"
- "-Wl,-u,_base_GHCziIOPort_doubleReadException_closure"
- "-Wl,-u,_base_ControlziExceptionziBase_nonTermination_closure"
- "-Wl,-u,_base_ControlziExceptionziBase_nestedAtomically_closure"
- "-Wl,-u,_base_GHCziEventziThread_blockedOnBadFD_closure"
- "-Wl,-u,_base_GHCziConcziSync_runSparks_closure"
- "-Wl,-u,_base_GHCziConcziIO_ensureIOManagerIsRunning_closure"
- "-Wl,-u,_base_GHCziConcziIO_interruptIOManager_closure"
- "-Wl,-u,_base_GHCziConcziIO_ioManagerCapabilitiesChanged_closure"
- "-Wl,-u,_base_GHCziConcziSignal_runHandlersPtr_closure"
- "-Wl,-u,_base_GHCziTopHandler_flushStdHandles_closure"
- "-Wl,-u,_base_GHCziTopHandler_runMainIO_closure"
- "-Wl,-u,_ghczmprim_GHCziTypes_Czh_con_info"
- "-Wl,-u,_ghczmprim_GHCziTypes_Izh_con_info"
- "-Wl,-u,_ghczmprim_GHCziTypes_Fzh_con_info"
- "-Wl,-u,_ghczmprim_GHCziTypes_Dzh_con_info"
- "-Wl,-u,_ghczmprim_GHCziTypes_Wzh_con_info"
- "-Wl,-u,_base_GHCziPtr_Ptr_con_info"
- "-Wl,-u,_base_GHCziPtr_FunPtr_con_info"
- "-Wl,-u,_base_GHCziInt_I8zh_con_info"
- "-Wl,-u,_base_GHCziInt_I16zh_con_info"
- "-Wl,-u,_base_GHCziInt_I32zh_con_info"
- "-Wl,-u,_base_GHCziInt_I64zh_con_info"
- "-Wl,-u,_base_GHCziWord_W8zh_con_info"
- "-Wl,-u,_base_GHCziWord_W16zh_con_info"
- "-Wl,-u,_base_GHCziWord_W32zh_con_info"
- "-Wl,-u,_base_GHCziWord_W64zh_con_info"
- "-Wl,-u,_base_GHCziStable_StablePtr_con_info"
- "-Wl,-u,_hs_atomic_add8"
- "-Wl,-u,_hs_atomic_add16"
- "-Wl,-u,_hs_atomic_add32"
- "-Wl,-u,_hs_atomic_sub8"
- "-Wl,-u,_hs_atomic_sub16"
- "-Wl,-u,_hs_atomic_sub32"
- "-Wl,-u,_hs_atomic_and8"
- "-Wl,-u,_hs_atomic_and16"
- "-Wl,-u,_hs_atomic_and32"
- "-Wl,-u,_hs_atomic_nand8"
- "-Wl,-u,_hs_atomic_nand16"
- "-Wl,-u,_hs_atomic_nand32"
- "-Wl,-u,_hs_atomic_or8"
- "-Wl,-u,_hs_atomic_or16"
- "-Wl,-u,_hs_atomic_or32"
- "-Wl,-u,_hs_atomic_xor8"
- "-Wl,-u,_hs_atomic_xor16"
- "-Wl,-u,_hs_atomic_xor32"
- "-Wl,-u,_hs_cmpxchg8"
- "-Wl,-u,_hs_cmpxchg16"
- "-Wl,-u,_hs_cmpxchg32"
- "-Wl,-u,_hs_cmpxchg64"
- "-Wl,-u,_hs_xchg8"
- "-Wl,-u,_hs_xchg16"
- "-Wl,-u,_hs_xchg32"
- "-Wl,-u,_hs_xchg64"
- "-Wl,-u,_hs_atomicread8"
- "-Wl,-u,_hs_atomicread16"
- "-Wl,-u,_hs_atomicread32"
- "-Wl,-u,_hs_atomicwrite8"
- "-Wl,-u,_hs_atomicwrite16"
- "-Wl,-u,_hs_atomicwrite32"
- "-Wl,-u,_base_GHCziStackziCloneStack_StackSnapshot_closure"
-
- if flag(find-ptr)
- -- This symbol is useful in gdb, but not referred to anywhere,
- -- so we need to force it to be included in the binary.
- ld-options: "-Wl,-u,_findPtr"
-
- else
- ld-options:
- "-Wl,-u,base_GHCziTopHandler_runIO_closure"
- "-Wl,-u,base_GHCziTopHandler_runNonIO_closure"
- "-Wl,-u,ghczmprim_GHCziTupleziPrim_Z0T_closure"
- "-Wl,-u,ghczmprim_GHCziTypes_True_closure"
- "-Wl,-u,ghczmprim_GHCziTypes_False_closure"
- "-Wl,-u,base_GHCziPack_unpackCString_closure"
- "-Wl,-u,base_GHCziWeakziFinalizze_runFinalizzerBatch_closure"
- "-Wl,-u,base_GHCziIOziException_stackOverflow_closure"
- "-Wl,-u,base_GHCziIOziException_heapOverflow_closure"
- "-Wl,-u,base_GHCziIOziException_allocationLimitExceeded_closure"
- "-Wl,-u,base_GHCziIOziException_blockedIndefinitelyOnMVar_closure"
- "-Wl,-u,base_GHCziIOziException_blockedIndefinitelyOnSTM_closure"
- "-Wl,-u,base_GHCziIOziException_cannotCompactFunction_closure"
- "-Wl,-u,base_GHCziIOziException_cannotCompactPinned_closure"
- "-Wl,-u,base_GHCziIOziException_cannotCompactMutable_closure"
- "-Wl,-u,base_GHCziIOPort_doubleReadException_closure"
- "-Wl,-u,base_ControlziExceptionziBase_nonTermination_closure"
- "-Wl,-u,base_ControlziExceptionziBase_nestedAtomically_closure"
- "-Wl,-u,base_GHCziEventziThread_blockedOnBadFD_closure"
- "-Wl,-u,base_GHCziConcziSync_runSparks_closure"
- "-Wl,-u,base_GHCziConcziIO_ensureIOManagerIsRunning_closure"
- "-Wl,-u,base_GHCziConcziIO_interruptIOManager_closure"
- "-Wl,-u,base_GHCziConcziIO_ioManagerCapabilitiesChanged_closure"
- "-Wl,-u,base_GHCziConcziSignal_runHandlersPtr_closure"
- "-Wl,-u,base_GHCziTopHandler_flushStdHandles_closure"
- "-Wl,-u,base_GHCziTopHandler_runMainIO_closure"
- "-Wl,-u,ghczmprim_GHCziTypes_Czh_con_info"
- "-Wl,-u,ghczmprim_GHCziTypes_Izh_con_info"
- "-Wl,-u,ghczmprim_GHCziTypes_Fzh_con_info"
- "-Wl,-u,ghczmprim_GHCziTypes_Dzh_con_info"
- "-Wl,-u,ghczmprim_GHCziTypes_Wzh_con_info"
- "-Wl,-u,base_GHCziPtr_Ptr_con_info"
- "-Wl,-u,base_GHCziPtr_FunPtr_con_info"
- "-Wl,-u,base_GHCziInt_I8zh_con_info"
- "-Wl,-u,base_GHCziInt_I16zh_con_info"
- "-Wl,-u,base_GHCziInt_I32zh_con_info"
- "-Wl,-u,base_GHCziInt_I64zh_con_info"
- "-Wl,-u,base_GHCziWord_W8zh_con_info"
- "-Wl,-u,base_GHCziWord_W16zh_con_info"
- "-Wl,-u,base_GHCziWord_W32zh_con_info"
- "-Wl,-u,base_GHCziWord_W64zh_con_info"
- "-Wl,-u,base_GHCziStable_StablePtr_con_info"
- "-Wl,-u,hs_atomic_add8"
- "-Wl,-u,hs_atomic_add16"
- "-Wl,-u,hs_atomic_add32"
- "-Wl,-u,hs_atomic_sub8"
- "-Wl,-u,hs_atomic_sub16"
- "-Wl,-u,hs_atomic_sub32"
- "-Wl,-u,hs_atomic_and8"
- "-Wl,-u,hs_atomic_and16"
- "-Wl,-u,hs_atomic_and32"
- "-Wl,-u,hs_atomic_nand8"
- "-Wl,-u,hs_atomic_nand16"
- "-Wl,-u,hs_atomic_nand32"
- "-Wl,-u,hs_atomic_or8"
- "-Wl,-u,hs_atomic_or16"
- "-Wl,-u,hs_atomic_or32"
- "-Wl,-u,hs_atomic_xor8"
- "-Wl,-u,hs_atomic_xor16"
- "-Wl,-u,hs_atomic_xor32"
- "-Wl,-u,hs_cmpxchg8"
- "-Wl,-u,hs_cmpxchg16"
- "-Wl,-u,hs_cmpxchg32"
- "-Wl,-u,hs_cmpxchg64"
- "-Wl,-u,hs_xchg8"
- "-Wl,-u,hs_xchg16"
- "-Wl,-u,hs_xchg32"
- "-Wl,-u,hs_xchg64"
- "-Wl,-u,hs_atomicread8"
- "-Wl,-u,hs_atomicread16"
- "-Wl,-u,hs_atomicread32"
- "-Wl,-u,hs_atomicwrite8"
- "-Wl,-u,hs_atomicwrite16"
- "-Wl,-u,hs_atomicwrite32"
- "-Wl,-u,base_GHCziStackziCloneStack_StackSnapshot_closure"
-
- if flag(find-ptr)
- -- This symbol is useful in gdb, but not referred to anywhere,
- -- so we need to force it to be included in the binary.
- ld-options: "-Wl,-u,findPtr"
-
- if os(windows)
- if flag(leading-underscore)
- ld-options:
- "-Wl,-u,_base_GHCziEventziWindows_processRemoteCompletion_closure"
- else
- ld-options:
- "-Wl,-u,base_GHCziEventziWindows_processRemoteCompletion_closure"
if os(osx)
ld-options: "-Wl,-search_paths_first"
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/8000483d2fe363f6913c89bf70320265e0cd9686...94a51526cc898d8d510e254f373db835d8cafc94
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/8000483d2fe363f6913c89bf70320265e0cd9686...94a51526cc898d8d510e254f373db835d8cafc94
You're receiving this email because of your account on gitlab.haskell.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20221230/3ac83b08/attachment-0001.html>
More information about the ghc-commits
mailing list