|
Re: bug in System.system on ghc-6.2.1: msg#00024lang.haskell.glasgow.bugs
"Simon Marlow" <simonmar@xxxxxxxxxxxxx> writes: > > import System.Cmd > > main = do v <- system("ghc --version 2>&1") > > print v > > Are you sure your shell understands the '>&' syntax? Not all do. Yes, on RH7.2, /bin/sh is bash. > Assuming you're using the same shell in both cases, this could indicate > a problem somewhere. Could you try strace on the binary? There doesn't seem to be much significant difference. Here are the relevant chunks of strace output, first for the working 6.2.1 on glibc-2.3: vfork() = 3552 wait4(3552, The Glorious Glasgow Haskell Compilation System, version 6.2.1 [WIFEXITED(s) && WEXITSTATUS(s) == 0], 0, NULL) = 3552 --- SIGCHLD (Child exited) --- ioctl(1, SNDCTL_TMR_TIMEBASE, 0xbfffd6f0) = -1 EINVAL (Invalid argument) times({tms_utime=0, tms_stime=0, tms_cutime=1, tms_cstime=0}) = 9887108 write(1, "ExitSuccess\n", 12) = 12 and for the non-working 6.2.1 on glibc-2.2: vfork() = 10120 --- SIGCHLD (Child exited) --- wait4(10120, [WIFEXITED(s) && WEXITSTATUS(s) == 127], 0, NULL) = 10120 ioctl(1, 0x5401, {B38400 opost isig icanon echo ...}) = 0 write(1, "ExitFailure 127\n", 16) = 16 I notice from an strace of the same program compiled with ghc-5.04.2 that earlier versions of ghc used a plain fork instead of a vfork. Unfortunately, the use of vfork rather than fork prevents me from examining the child process's system calls with strace -f. For instance, with ghc-5.04.2 I can see fork() = 10363 [pid 10362] wait4(10363, <unfinished ...> [pid 10363] setitimer(ITIMER_REAL, {it_interval={0, 0}, it_value={0, 0}}, NULL) = 0 [pid 10363] setitimer(ITIMER_VIRTUAL, {it_interval={0, 0}, it_value={0, 0}}, NULL) = 0 [pid 10363] setitimer(ITIMER_PROF, {it_interval={0, 0}, it_value={0, 0}}, NULL) = 0 [pid 10363] execve("/bin/sh", ["sh", "-c", "ghc --version 2>&1"], [/* 31 vars */]) = 0 ... The exit status of 127 indicates that the command ("ghc") could not be found. Considering the possibility of a bash configuration problem on RH7.2, I tried compiling essentially the same code in C: main () { int v = system("ghc --version 2>&1"); printf("Exit %d\n",v); } but it too works fine. Is it possible that there are #ifdef's around some of the internals of the ghc system primitive, that are somehow misconfigured when built on RedHat 7.2? > The '2>&1' will be passed as a raw argument to GHC in this case. > Fortunately GHC is ignoring it. Yes, I realised that, but it is irrelevant to the problem at hand. Regards, Malcolm
|
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| Previous by Date: | RE: bug in System.system on ghc-6.2.1, Simon Marlow |
|---|---|
| Next by Date: | RE: bug in System.system on ghc-6.2.1, Simon Marlow |
| Previous by Thread: | RE: bug in System.system on ghc-6.2.1, Simon Marlow |
| Next by Thread: | RE: bug in System.system on ghc-6.2.1, Simon Marlow |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
| News | FAQ | advertise |