Skip to content

Instantly share code, notes, and snippets.

@lewurm
Created April 26, 2012 21:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lewurm/2503293 to your computer and use it in GitHub Desktop.
Save lewurm/2503293 to your computer and use it in GitHub Desktop.
ghc: segmentation fault under strange conditions
*.hi
stackoverflow_segv
$ # see http://stackoverflow.com/questions/10341943/ghc-segmentation-fault-under-strange-conditions
$ make
./stackoverflow_segv
entry point: 0x0a0e97e0
welcome back
$ # however, when executing the binary from shell...
$ ./stackoverflow_segv
entry point: 0x0916b7e0
Segmentation fault (core dumped)
# some information about the system
$ cat /etc/issue
Ubuntu 12.04 LTS \n \l
$ uname -a
Linux matevm-dev 3.2.0-23-generic #36-Ubuntu SMP Tue Apr 10 20:41:14 UTC 2012 i686 athlon i386 GNU/Linux
$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 7.4.1
$ gcc --version
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ make --version
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
This program built for i686-pc-linux-gnu
$ ghc-pkg list
/var/lib/ghc/package.conf.d:
Cabal-1.14.0
array-0.4.0.0
base-4.5.0.0
bin-package-db-0.0.0.0
binary-0.5.1.0
bytestring-0.9.2.1
containers-0.4.2.1
deepseq-1.3.0.0
directory-1.1.0.2
extensible-exceptions-0.1.1.4
filepath-1.3.0.0
(ghc-7.4.1)
ghc-prim-0.2.0.0
(haskell2010-1.1.0.1)
(haskell98-2.0.0.1)
hoopl-3.8.7.3
hpc-0.5.1.1
integer-gmp-0.4.0.0
old-locale-1.0.0.4
old-time-1.1.0.0
pretty-1.1.1.0
process-1.1.0.1
rts-1.0
template-haskell-2.7.0.0
time-1.4
unix-2.5.1.0
/home/lewurm/.ghc/i386-linux-7.4.1/package.conf.d:
HUnit-1.2.4.2
MissingH-1.1.1.0
QuickCheck-2.4.2
binary-state-0.1.1
control-monad-exception-0.10.2
data-binary-ieee754-0.4.2.1
disassembler-0.1.0.1
failure-0.2.0.1
ghc-paths-0.1.0.8
harpy-0.4.3.0
haskell-src-1.0.1.5
heap-1.0.0
hs-java-0.2
hslogger-1.1.5
monadloc-0.6
mtl-1.1.1.1
mtl-2.1.1
network-2.3.0.13
parsec-2.1.0.1
plugins-1.5.2.1
random-1.0.1.1
regex-base-0.93.2
regex-compat-0.95.1
regex-posix-0.95.1
syb-0.3.6.1
transformers-0.3.0.0
utf8-string-0.3.7
{-# LANGUAGE ForeignFunctionInterface #-}
module Main where
import Data.Word
import Text.Printf
import Foreign
foreign import ccall "dynamic"
code_void :: FunPtr (IO ()) -> (IO ())
main :: IO ()
main = do
entryPtr <- (mallocBytes 2)
poke entryPtr (0xc390 :: Word16) -- nop (0x90); ret(0xc3) (little endian order)
_ <- printf "entry point: 0x%08x\n" ((fromIntegral $ ptrToIntPtr entryPtr) :: Int)
_ <- getLine -- for debugging
code_void $ castPtrToFunPtr entryPtr
putStrLn "welcome back"
NAME := stackoverflow_segv
all: $(NAME)
./$<
$(NAME): Main.hs
ghc --make -Wall -O2 $^ -o $@
clean:
rm -f *.hi *.o $(NAME)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment