| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In order to make the packages in this repo "reinstallable", we need to
associate source code with a specific packages. Having a top level
`/includes` dir that mixes concerns (which packages' includes?) gets in
the way of this.
To start, I have moved everything to `rts/`, which is mostly correct.
There are a few things however that really don't belong in the rts (like
the generated constants haskell type, `CodeGen.Platform.h`). Those
needed to be manually adjusted.
Things of note:
- No symlinking for sake of windows, so we hard-link at configure time.
- `CodeGen.Platform.h` no longer as `.hs` extension (in addition to
being moved to `compiler/`) so as not to confuse anyone, since it is
next to Haskell files.
- Blanket `-Iincludes` is gone in both build systems, include paths now
more strictly respect per-package dependencies.
- `deriveConstants` has been taught to not require a `--target-os` flag
when generating the platform-agnostic Haskell type. Make takes
advantage of this, but Hadrian has yet to.
|
|
|
|
|
|
| |
is used outside of the rts so we do this rather than just fish it out of
the repo in ad-hoc way, in order to make packages in this repo more
self-contained.
|
| |
|
|
|
|
|
| |
This moves all URL references to Trac tickets to their corresponding
GitLab counterparts.
|
|
|
|
|
|
|
|
|
|
| |
Reviewers: bgamari, austin, hvr, dfeuer
Reviewed By: dfeuer
Subscribers: syd, dfeuer, rwbarton, thomie
Differential Revision: https://phabricator.haskell.org/D4012
|
|
|
|
|
|
|
|
|
|
| |
Reviewers: bgamari, Phyx, austin, hvr, simonmar
Reviewed By: bgamari
Subscribers: syd, rwbarton, thomie
Differential Revision: https://phabricator.haskell.org/D4041
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
On 64-bit UNIX and Windows, Haskell `Int` has 64 bits
but C `int msecs` has 32 bits, resulting in an overflow.
This commit fixes it by switching fdReady() to take int64_t,
into which a Haskell `Int` will always fit.
(Note we could not switch to `long long` because that is
32 bit on 64-bit Windows machines.)
Further, to be able to actually wait longer than ~49 days,
we put loops around the waiting syscalls (they all accept only
32-bit integers).
Note the timer signal would typically interrupt the syscalls
before the ~49 days are over, but you can run Haskell programs
without the timer signal, an we want it to be correct in all
cases.
Reviewers: bgamari, austin, hvr, NicolasT, Phyx
Reviewed By: bgamari, Phyx
Subscribers: syd, Phyx, rwbarton, thomie
GHC Trac Issues: #14262
Differential Revision: https://phabricator.haskell.org/D4011
|
|
|
|
|
|
|
|
|
|
| |
Reviewers: bgamari, austin, hvr, Phyx
Reviewed By: Phyx
Subscribers: Phyx, rwbarton, thomie
Differential Revision: https://phabricator.haskell.org/D4010
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Btw, -Wconversion is off by default and not included in -Wall, -Wextra
or -pedantic, so I used it temporarily with -optc-Wconversion.
Reviewers: bgamari, austin, hvr
Reviewed By: bgamari
Subscribers: rwbarton, thomie
Differential Revision: https://phabricator.haskell.org/D3965
|
|
|
|
|
|
|
|
|
|
| |
Reviewers: bgamari, austin, hvr
Reviewed By: bgamari
Subscribers: rwbarton, thomie
Differential Revision: https://phabricator.haskell.org/D3962
|
|
|
|
|
|
|
|
|
|
| |
Reviewers: bgamari, austin, hvr
Reviewed By: bgamari
Subscribers: rwbarton, thomie
Differential Revision: https://phabricator.haskell.org/D3960
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
See the added comment for details.
It's "less likely" because it can still fail if the socket happens to
have an FD larger than 1023, which can happen if many files are opened.
Until now, basic socket programs that use `hWaitForInput` were broken on
Windows.
That is because on Windows `FD_SETSIZE` defaults to 64, but pretty much
all GHC programs seem to have > 64 FDs open, so you can't actually
create a socket on which you can `select()`.
It errors with `fdReady: fd is too big` even with an example as simple
as the following (in this case, on my machine the `fd` is `284`):
{-# LANGUAGE OverloadedStrings #-}
import Control.Monad (forever)
import Network.Socket
import System.IO
-- Simple echo server: Reads up to 10 chars from network, echoes them back.
-- Uses the Handle API so that `hWaitForInput` can be used.
main :: IO ()
main = do
sock <- socket AF_INET Stream 0
setSocketOption sock ReuseAddr 1
bind sock (SockAddrInet 1234 0x0100007f)
-- 0x0100007f == 127.0.0.1 localhost
listen sock 2
forever $ do
(connSock, _connAddr) <- accept sock
putStrLn "Got connection"
h <- socketToHandle connSock ReadWriteMode
hSetBuffering h NoBuffering
ready <- hWaitForInput h (5 * 1000) -- 5 seconds
putStrLn $ "Ready: " ++ show ready
line <- hGetLine h
putStrLn "Got line"
hPutStrLn h ("Got: " ++ line)
hClose h
I'm not sure how this was not discovered earlier; for #13525 (where
`fdReady()` breaking completely was also discovered late) at least it
failed only when the timeout was non-zero, which is not used in ghc
beyond in `hWaitForInput`, but in this Windows socket case it breaks
even on the 0-timeout.
Maybe there is not actually anybody who uses sockets as handles on
Windows?
The workaround for now is to increase `FD_SETSIZE` on Windows;
increasing it is possible on Windows and BSD, see
https://stackoverflow.com/questions/7976388/increasing-limit-of-fd-setsi
ze-and-select
A real fix would be to move to IO Completion Ports on Windows, and thus
get rid of the last uses of `select()` (the other platforms already use
`poll()` but Windows doesn't have that).
Reviewers: bgamari, austin, hvr, erikd, simonmar
Reviewed By: bgamari
Subscribers: rwbarton, thomie
Differential Revision: https://phabricator.haskell.org/D3959
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
See https://ghc.haskell.org/trac/ghc/ticket/13497#comment:17
Until now, the program
import System.IO
main = hWaitForInput stdin (5 * 1000)
didn't wait 5 seconds for input on Winodws, it terminated immediately.
This was because the `PeekNamedPipe()` function introduced in commit
94fee9e7 really only peeks, it doesn't block. So if there's no data,
`fdReady(fd, msec)` would return immediately even when the given `msec`
timeout is not zero.
This commit fixes it by looping around `PeekNamedPipe()` with a `sleep(1
ms)`.
Apparently there's no better way to do this on Windows without switching
to IOCP.
In any case, this change should be strictly better than what was there
before.
Reviewers: bgamari, austin, hvr
Reviewed By: bgamari
Subscribers: Phyx, rwbarton, thomie
Differential Revision: https://phabricator.haskell.org/D3956
|
|
|
|
|
|
|
|
|
|
| |
Reviewers: bgamari, austin, hvr
Reviewed By: bgamari
Subscribers: rwbarton, thomie
Differential Revision: https://phabricator.haskell.org/D3955
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This fixes #13497 for Windows -- at least for the `if (isSock)` part; I
haven't investigated the case where it's not a socket yet.
Solved by copying the new current-time based waiting logic from the
non-Windows implementation above.
Reviewers: bgamari, austin, hvr
Reviewed By: bgamari
Subscribers: rwbarton, thomie
Differential Revision: https://phabricator.haskell.org/D3954
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is done by reusing the existing cross-platform
`getProcessElapsedTime()` function, which already provides nanosecond
monotonic clocks, and fallback for platforms that don't have those.
To do this, `getProcessElapsedTime()` had to be moved from a private RTS
symbol into the public interface.
Accuracy is improved in 2 ways:
* Use of the monotonic clock where available
* Measuring the total time spent waiting instead of a sum
of intervals (between which there are small gaps)
Reviewers: bgamari, austin, hvr, erikd, simonmar
Reviewed By: bgamari
Subscribers: rwbarton, thomie
Differential Revision: https://phabricator.haskell.org/D3953
|
|
|
|
|
|
|
|
|
|
| |
Reviewers: bgamari, austin, hvr
Reviewed By: bgamari
Subscribers: rwbarton, thomie
Differential Revision: https://phabricator.haskell.org/D3952
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This was previously broken (#13252) by
f46369b8a1bf90a3bdc30f2b566c3a7e03672518, which ported the fdReady
function from `select` to `poll` and in so doing dropping support for
timeouts. Unfortunately, while `select` tells us the amount of time not
slept (on Linux anyways; it turns out this is implementation dependent),
`poll` does not give us this luxury. Consequently, we manually need to
track time slept in this case.
Unfortunately, portably measuring time is hard. Ideally we would use
`clock_gettime` with the monotonic clock here, but sadly this isn't
supported on most versions of Darwin. Consequently, we instead use
`gettimeofday`, running the risk of system time changes messing us up.
Test Plan: Validate
Reviewers: simonmar, austin, hvr
Reviewed By: simonmar
Subscribers: rwbarton, thomie
GHC Trac Issues: #13252
Differential Revision: https://phabricator.haskell.org/D3473
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
select() is limited to 1024 file descriptors. This actually blew up
in a very hard-to-debug way in our production system when using the
hinotify package.
Test Plan:
libraries/tests pass, paricularly hGetBuf001 which exercises this
code.
Reviewers: niteria, erikd, austin, hvr, bgamari
Reviewed By: bgamari
Subscribers: thomie
Differential Revision: https://phabricator.haskell.org/D2785
GHC Trac Issues: #12912
|
|
|
|
|
|
|
| |
Simplify some preprocessor expressions involving `_MSC_VER` because
`_WIN32` is always defined when `_MSC_VER` is.
Differential Revision: https://phabricator.haskell.org/D981
|
|
|
|
|
|
|
|
|
|
| |
In Haskell files, replace `__MINGW32__` by `mingw32_HOST_OS`.
In .c and .h files, delete `__MINGW32__` when `_WIN32` is also tested
because `_WIN32` is always defined when `__MINGW32__` is. Also replace
`__MINGW32__` by `_WIN32` when used standalone for consistency.
Differential Revision: https://phabricator.haskell.org/D971
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
libraries/base/cbits/inputReady.c had no limits on file descriptors.
Add a limit as non-threaded RTS does.
Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
Test Plan: none
Reviewers: austin, simonmar
Reviewed By: austin, simonmar
Subscribers: simonmar, relrod, carter
Differential Revision: https://phabricator.haskell.org/D28
|
|
|
|
|
| |
Now we do the appropriate magic in fdReady() to detect when there is
real input available, as opposed to uninteresting console events.
|
|
|
|
|
| |
See #1198. This doesn't fully fix it, because hReady still always
returns False on file handles. I'm not really sure how to fix that.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Now, we only set O_NONBLOCK on file descriptors that we create
ourselves. File descriptors that we inherit (stdin, stdout, stderr)
are kept in blocking mode. The way we deal with this differs between
the threaded and non-threaded runtimes:
- with -threaded, we just make a safe foreign call to read(), which
may block, but this is ok.
- without -threaded, we test the descriptor with select() before
attempting any I/O. This isn't completely safe - someone else
might read the data between the select() and the read() - but it's
a reasonable compromise and doesn't seem to measurably affect
performance.
|
|
|
|
|
|
|
| |
The only remaining use is in cbits/dirUtils.h, which tests solaris2_HOST_OS
(Also System.Info uses ghcplatform.h and several modules import MachDeps.h
to get SIZEOF_* and ALIGNMENT_* from ghcautoconf.h)
|
|
|
|
|
|
|
| |
Catch up with updates to platform #defines.
Generally: use _HOST_ rather than _TARGET_ (except in Cabal where we
have to retain compatibility with previous GHC versions).
|
|
|
|
|
| |
Win32: attempt to make inputReady() work on pipes too. Fixes bug
#995658.
|
|
|
|
|
| |
inputReady(): the time calculation for select() was wrong, forgetting
to multiply the milliseconds value by 1000 to get microseconds.
|
|
|
|
|
|
|
| |
inputReady(): using MsgWaitForMultipleObjects() instead of
WaitForMultipleObjects() on file handles is nicer from within a
message pump, but here it is less confusing to use the latter (and
simply just block message delivery for its duration.)
|
|
|
|
| |
Merge inputReady.c from ghc/lib/std
|
|
|
|
|
|
|
|
|
|
| |
Various updates after rearranging the directory structure in the
repository (there wasn't any history worth keeping, and it's better to
do this now before we go 'live').
Packages under 'compat' are backwards-compatibility packages which
should provide an interface equivalent to the current hslibs setup.
There are a few packages still missing.
|
|
|
|
|
| |
Merge up to the ghc/lib/std on the HEAD (tagged as
new-libraries-last-merged).
|
|
|
|
| |
Track updates to ghc/lib/std and hslibs.
|
|
|
|
| |
Catch up with changes in the main tree.
|
|
First cut of the Haskell Core Libraries
=======================================
NOTE: it's not meant to be a working snapshot. The code is just here
to look at and so the NHC/Hugs guys can start playing around with it.
There is no build system. For GHC, the libraries tree is intended to
be grafted onto an existing fptools/ tree, and the Makefile in
libraries/core is a quick hack for that setup. This won't work at the
moment without the other changes needed in fptools/ghc, which I
haven't committed because they'll cause breakage. However, with the
changes required these sources build a working Prelude and libraries.
The layout mostly follows the one we agreed on, with one or two minor
changes; in particular the Data/Array layout probably isn't final
(there are several choices here).
The document is in libraries/core/doc as promised.
The cbits stuff is just a copy of ghc/lib/std/cbits and has
GHC-specific stuff in it. We should really separate the
compiler-specific C support from any compiler-independent C support
there might be.
Don't pay too much attention to the portability or stability status
indicated in the header of each source file at the moment - I haven't
gone through to make sure they're all consistent and make sense.
I'm using non-literate source outside of GHC/. Hope that's ok with
everyone.
We need to discuss how the build system is going to work...
|