Skip to content
Snippets Groups Projects
Commit 839ac52e authored by Cheng Shao's avatar Cheng Shao
Browse files

ghci: use plain malloc for mkConInfoTable on non-TNTC platforms

This patch avoids using mmap() to allocate executable memory for
mkConInfoTable on platforms without tables-next-to-code, see added
comment for explanation.
parent 90891962
No related branches found
No related tags found
No related merge requests found
......@@ -324,7 +324,19 @@ newExecConItbl tables_next_to_code obj con_desc = do
-- with a 32-bit offset relative to the info table, so if we
-- allocated the string separately it might be out of range.
ex_ptr <- fillExecBuffer (sz + fromIntegral lcon_desc) $ \wr_ptr ex_ptr -> do
-- Just use plain malloc on platforms without TNTC, since we
-- don't need to allocate executable memory anyway. This is
-- much faster than mmap(), and is crucial for wasm since it
-- doesn't support mmap() at all, not to mention executable
-- memory.
fill_exec_buffer = if tables_next_to_code
then fillExecBuffer
else \n cont -> do
p <- mallocBytes $ fromIntegral n
cont p p
pure p
ex_ptr <- fill_exec_buffer (sz + fromIntegral lcon_desc) $ \wr_ptr ex_ptr -> do
let cinfo = StgConInfoTable { conDesc = ex_ptr `plusPtr` fromIntegral sz
, infoTable = obj }
pokeConItbl tables_next_to_code wr_ptr ex_ptr cinfo
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment