Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • ghc/ghc
  • bgamari/ghc
  • syd/ghc
  • ggreif/ghc
  • watashi/ghc
  • RolandSenn/ghc
  • mpickering/ghc
  • DavidEichmann/ghc
  • carter/ghc
  • harpocrates/ghc
  • ethercrow/ghc
  • mijicd/ghc
  • adamse/ghc
  • alexbiehl/ghc
  • gridaphobe/ghc
  • trofi/ghc
  • supersven/ghc
  • ppk/ghc
  • ulysses4ever/ghc
  • AndreasK/ghc
  • ghuntley/ghc
  • shayne-fletcher-da/ghc
  • fgaz/ghc
  • yav/ghc
  • osa1/ghc
  • mbbx6spp/ghc
  • JulianLeviston/ghc
  • reactormonk/ghc
  • rae/ghc
  • takenobu-hs/ghc
  • michalt/ghc
  • andrewthad/ghc
  • hsyl20/ghc
  • scottgw/ghc
  • sjakobi/ghc
  • angerman/ghc
  • RyanGlScott/ghc
  • hvr/ghc
  • howtonotwin/ghc
  • chessai/ghc
  • m-renaud/ghc
  • brprice/ghc
  • stevehartdata/ghc
  • sighingnow/ghc
  • kgardas/ghc
  • ckoparkar/ghc
  • alp/ghc
  • smaeul/ghc
  • kakkun61/ghc
  • sykloid/ghc
  • newhoggy/ghc
  • toonn/ghc
  • nineonine/ghc
  • Phyx/ghc
  • ezyang/ghc
  • tweag/ghc
  • langston/ghc
  • ndmitchell/ghc
  • rockbmb/ghc
  • artempyanykh/ghc
  • mniip/ghc
  • mynguyenbmc/ghc
  • alexfmpe/ghc
  • crockeea/ghc
  • nh2/ghc
  • vaibhavsagar/ghc
  • phadej/ghc
  • Haskell-mouse/ghc
  • lolotp/ghc
  • spacekitteh/ghc
  • michaelpj/ghc
  • mgsloan/ghc
  • HPCohen/ghc
  • tmobile/ghc
  • radrow/ghc
  • simonmar/ghc
  • _deepfire/ghc
  • Ericson2314/ghc
  • leitao/ghc
  • fumieval/ghc
  • trac-isovector/ghc
  • cblp/ghc
  • xich/ghc
  • ciil/ghc
  • erthalion/ghc
  • xldenis/ghc
  • autotaker/ghc
  • haskell-wasm/ghc
  • kcsongor/ghc
  • agander/ghc
  • Baranowski/ghc
  • trac-dredozubov/ghc
  • 23Skidoo/ghc
  • iustin/ghc
  • ningning/ghc
  • josefs/ghc
  • kabuhr/ghc
  • gallais/ghc
  • dten/ghc
  • expipiplus1/ghc
  • Pluralia/ghc
  • rohanjr/ghc
  • intricate/ghc
  • kirelagin/ghc
  • Javran/ghc
  • DanielG/ghc
  • trac-mizunashi_mana/ghc
  • pparkkin/ghc
  • bollu/ghc
  • ntc2/ghc
  • jaspervdj/ghc
  • JoshMeredith/ghc
  • wz1000/ghc
  • zkourouma/ghc
  • code5hot/ghc
  • jdprice/ghc
  • tdammers/ghc
  • J-mie6/ghc
  • trac-lantti/ghc
  • ch1bo/ghc
  • cgohla/ghc
  • lucamolteni/ghc
  • acairncross/ghc
  • amerocu/ghc
  • chreekat/ghc
  • txsmith/ghc
  • trupill/ghc
  • typetetris/ghc
  • sergv/ghc
  • fryguybob/ghc
  • erikd/ghc
  • trac-roland/ghc
  • setupminimal/ghc
  • Friede80/ghc
  • SkyWriter/ghc
  • xplorld/ghc
  • abrar/ghc
  • obsidiansystems/ghc
  • Icelandjack/ghc
  • adinapoli/ghc
  • trac-matthewbauer/ghc
  • heatsink/ghc
  • dwijnand/ghc
  • Cmdv/ghc
  • alinab/ghc
  • pepeiborra/ghc
  • fommil/ghc
  • luochen1990/ghc
  • rlupton20/ghc
  • applePrincess/ghc
  • lehins/ghc
  • ronmrdechai/ghc
  • leeadam/ghc
  • harendra/ghc
  • mightymosquito1991/ghc
  • trac-gershomb/ghc
  • lucajulian/ghc
  • Rizary/ghc
  • VictorCMiraldo/ghc
  • jamesbrock/ghc
  • andrewdmeier/ghc
  • luke/ghc
  • pranaysashank/ghc
  • cocreature/ghc
  • hithroc/ghc
  • obreitwi/ghc
  • slrtbtfs/ghc
  • kaol/ghc
  • yairchu/ghc
  • Mathemagician98/ghc
  • trac-taylorfausak/ghc
  • leungbk/ghc
  • MichaWiedenmann/ghc
  • chris-martin/ghc
  • TDecki/ghc
  • adithyaov/ghc
  • trac-gelisam/ghc
  • Lysxia/ghc
  • complyue/ghc
  • bwignall/ghc
  • sternmull/ghc
  • sonika/ghc
  • leif/ghc
  • broadwaylamb/ghc
  • myszon/ghc
  • danbroooks/ghc
  • Mechachleopteryx/ghc
  • zardyh/ghc
  • trac-vdukhovni/ghc
  • OmarKhaledAbdo/ghc
  • arrowd/ghc
  • Bodigrim/ghc
  • matheus23/ghc
  • cardenaso11/ghc
  • trac-Athas/ghc
  • mb720/ghc
  • DylanZA/ghc
  • liff/ghc
  • typedrat/ghc
  • trac-claude/ghc
  • jbm/ghc
  • Gertjan423/ghc
  • PHO/ghc
  • JKTKops/ghc
  • kockahonza/ghc
  • msakai/ghc
  • Sir4ur0n/ghc
  • barambani/ghc
  • vishnu.c/ghc
  • dcoutts/ghc
  • trac-runeks/ghc
  • trac-MaxGabriel/ghc
  • lexi.lambda/ghc
  • strake/ghc
  • spavikevik/ghc
  • JakobBruenker/ghc
  • rmanne/ghc
  • gdziadkiewicz/ghc
  • ani/ghc
  • iliastsi/ghc
  • smunix/ghc
  • judah/ghc
  • blackgnezdo/ghc
  • emilypi/ghc
  • trac-bpfoley/ghc
  • muesli4/ghc
  • trac-gkaracha/ghc
  • Kleidukos/ghc
  • nek0/ghc
  • TristanCacqueray/ghc
  • dwulive/ghc
  • mbakke/ghc
  • arybczak/ghc
  • Yang123321/ghc
  • maksbotan/ghc
  • QuietMisdreavus/ghc
  • trac-olshanskydr/ghc
  • emekoi/ghc
  • samuela/ghc
  • josephcsible/ghc
  • dramforever/ghc
  • lpsmith/ghc
  • DenisFrezzato/ghc
  • michivi/ghc
  • jneira/ghc
  • jeffhappily/ghc
  • Ivan-Yudin/ghc
  • nakaji-dayo/ghc
  • gdevanla/ghc
  • galen/ghc
  • fendor/ghc
  • yaitskov/ghc
  • rcythr/ghc
  • awpr/ghc
  • jeremyschlatter/ghc
  • Aver1y/ghc
  • mitchellvitez/ghc
  • merijn/ghc
  • tomjaguarpaw1/ghc
  • trac-NoidedSuper/ghc
  • erewok/ghc
  • trac-junji.hashimoto/ghc
  • adamwespiser/ghc
  • bjaress/ghc
  • jhrcek/ghc
  • leonschoorl/ghc
  • lukasz-golebiewski/ghc
  • sheaf/ghc
  • last-g/ghc
  • carassius1014/ghc
  • eschwartz/ghc
  • dwincort/ghc
  • felixwiemuth/ghc
  • TimWSpence/ghc
  • marcusmonteirodesouza/ghc
  • WJWH/ghc
  • vtols/ghc
  • theobat/ghc
  • BinderDavid/ghc
  • ckoparkar0/ghc
  • alexander-kjeldaas/ghc
  • dme2/ghc
  • philderbeast/ghc
  • aaronallen8455/ghc
  • rayshih/ghc
  • benkard/ghc
  • mpardalos/ghc
  • saidelman/ghc
  • leiftw/ghc
  • ca333/ghc
  • bwroga/ghc
  • nmichael44/ghc
  • trac-crobbins/ghc
  • felixonmars/ghc
  • adityagupta1089/ghc
  • hgsipiere/ghc
  • treeowl/ghc
  • alexpeits/ghc
  • CraigFe/ghc
  • dnlkrgr/ghc
  • kerckhove_ts/ghc
  • cptwunderlich/ghc
  • eiais/ghc
  • hahohihu/ghc
  • sanchayan/ghc
  • lemmih/ghc
  • sehqlr/ghc
  • trac-dbeacham/ghc
  • luite/ghc
  • trac-f-a/ghc
  • vados/ghc
  • luntain/ghc
  • fatho/ghc
  • alexbiehl-gc/ghc
  • dcbdan/ghc
  • tvh/ghc
  • liam-ly/ghc
  • timbobbarnes/ghc
  • GovanifY/ghc
  • shanth2600/ghc
  • gliboc/ghc
  • duog/ghc
  • moxonsghost/ghc
  • zander/ghc
  • masaeedu/ghc
  • georgefst/ghc
  • guibou/ghc
  • nicuveo/ghc
  • mdebruijne/ghc
  • stjordanis/ghc
  • emiflake/ghc
  • wygulmage/ghc
  • frasertweedale/ghc
  • coot/ghc
  • aratamizuki/ghc
  • tsandstr/ghc
  • mrBliss/ghc
  • Anton-Latukha/ghc
  • tadfisher/ghc
  • vapourismo/ghc
  • Sorokin-Anton/ghc
  • basile-henry/ghc
  • trac-mightybyte/ghc
  • AbsoluteNikola/ghc
  • cobrien99/ghc
  • songzh/ghc
  • blamario/ghc
  • aj4ayushjain/ghc
  • trac-utdemir/ghc
  • tangcl/ghc
  • hdgarrood/ghc
  • maerwald/ghc
  • arjun/ghc
  • ratherforky/ghc
  • haskieLambda/ghc
  • EmilGedda/ghc
  • Bogicevic/ghc
  • eddiejessup/ghc
  • kozross/ghc
  • AlistairB/ghc
  • 3Rafal/ghc
  • christiaanb/ghc
  • trac-bit/ghc
  • matsumonkie/ghc
  • trac-parsonsmatt/ghc
  • chisui/ghc
  • jaro/ghc
  • trac-kmiyazato/ghc
  • davidsd/ghc
  • Tritlo/ghc
  • I-B-3/ghc
  • lykahb/ghc
  • AriFordsham/ghc
  • turion1/ghc
  • berberman/ghc
  • christiantakle/ghc
  • zyklotomic/ghc
  • trac-ocramz/ghc
  • CSEdd/ghc
  • doyougnu/ghc
  • mmhat/ghc
  • why-not-try-calmer/ghc
  • plutotulp/ghc
  • kjekac/ghc
  • Manvi07/ghc
  • teo/ghc
  • cactus/ghc
  • CarrieMY/ghc
  • abel/ghc
  • yihming/ghc
  • tsakki/ghc
  • jessicah/ghc
  • oliverbunting/ghc
  • meld/ghc
  • friedbrice/ghc
  • Joald/ghc
  • abarbu/ghc
  • DigitalBrains1/ghc
  • sterni/ghc
  • alexDarcy/ghc
  • hexchain/ghc
  • minimario/ghc
  • zliu41/ghc
  • tommd/ghc
  • jazcarate/ghc
  • peterbecich/ghc
  • alirezaghey/ghc
  • solomon/ghc
  • mikael.urankar/ghc
  • davjam/ghc
  • int-index/ghc
  • MorrowM/ghc
  • nrnrnr/ghc
  • Sonfamm/ghc-test-only
  • afzt1/ghc
  • nguyenhaibinh-tpc/ghc
  • trac-lierdakil/ghc
  • MichaWiedenmann1/ghc
  • jmorag/ghc
  • Ziharrk/ghc
  • trac-MitchellSalad/ghc
  • juampe/ghc
  • jwaldmann/ghc
  • snowleopard/ghc
  • juhp/ghc
  • normalcoder/ghc
  • ksqsf/ghc
  • trac-jberryman/ghc
  • roberth/ghc
  • 1ntEgr8/ghc
  • epworth/ghc
  • MrAdityaAlok/ghc
  • JunmingZhao42/ghc
  • jappeace/ghc
  • trac-Gabriel439/ghc
  • alt-romes/ghc
  • HugoPeters1024/ghc
  • 10ne1/ghc-fork
  • agentultra/ghc
  • Garfield1002/ghc
  • ChickenProp/ghc
  • clyring/ghc
  • MaxHearnden/ghc
  • jumper149/ghc
  • vem/ghc
  • ketzacoatl/ghc
  • Rosuavio/ghc
  • jackohughes/ghc
  • p4l1ly/ghc
  • konsumlamm/ghc
  • shlevy/ghc
  • torsten.schmits/ghc
  • andremarianiello/ghc
  • amesgen/ghc
  • googleson78/ghc
  • InfiniteVerma/ghc
  • uhbif19/ghc
  • yiyunliu/ghc
  • raehik/ghc
  • mrkun/ghc
  • telser/ghc
  • 1Jajen1/ghc
  • slotThe/ghc
  • WinstonHartnett/ghc
  • mpilgrem/ghc
  • dreamsmasher/ghc
  • schuelermine/ghc
  • trac-Viwor/ghc
  • undergroundquizscene/ghc
  • evertedsphere/ghc
  • coltenwebb/ghc
  • oberblastmeister/ghc
  • agrue/ghc
  • lf-/ghc
  • zacwood9/ghc
  • steshaw/ghc
  • high-cloud/ghc
  • SkamDart/ghc
  • PiDelport/ghc
  • maoif/ghc
  • RossPaterson/ghc
  • CharlesTaylor7/ghc
  • ribosomerocker/ghc
  • trac-ramirez7/ghc
  • daig/ghc
  • NicolasT/ghc
  • FinleyMcIlwaine/ghc
  • lawtonnichols/ghc
  • jmtd/ghc
  • ozkutuk/ghc
  • wildsebastian/ghc
  • nikshalark/ghc
  • lrzlin/ghc
  • tobias/ghc
  • fw/ghc
  • hawkinsw/ghc
  • type-dance/ghc
  • rui314/ghc
  • ocharles/ghc
  • wavewave/ghc
  • TheKK/ghc
  • nomeata/ghc
  • trac-csabahruska/ghc
  • jonathanjameswatson/ghc
  • L-as/ghc
  • Axman6/ghc
  • barracuda156/ghc
  • trac-jship/ghc
  • jake-87/ghc
  • meooow/ghc
  • rebeccat/ghc
  • hamana55/ghc
  • Enigmage/ghc
  • kokobd/ghc
  • agevelt/ghc
  • gshen42/ghc
  • chrismwendt/ghc
  • MangoIV/ghc
  • teto/ghc
  • Sookr1/ghc
  • trac-thomasjm/ghc
  • barci2/ghc-dev
  • trac-m4dc4p/ghc
  • dixonary/ghc
  • breakerzirconia/ghc
  • alexsio27444/ghc
  • glocq/ghc
  • sourabhxyz/ghc
  • ryantrinkle/ghc
  • Jade/ghc
  • scedfaliako/ghc
  • martijnbastiaan/ghc
  • trac-george.colpitts/ghc
  • ammarbinfaisal/ghc
  • mimi.vx/ghc
  • lortabac/ghc
  • trac-zyla/ghc
  • benbellick/ghc
  • aadaa-fgtaa/ghc
  • jvanbruegge/ghc
  • archbung/ghc
  • gilmi/ghc
  • mfonism/ghc
  • alex-mckenna/ghc
  • Ei30metry/ghc
  • DiegoDiverio/ghc
  • jorgecunhamendes/ghc
  • liesnikov/ghc
  • akrmn/ghc
  • trac-simplifierticks/ghc
  • jacco/ghc
  • rhendric/ghc
  • damhiya/ghc
  • ryndubei/ghc
  • DaveBarton/ghc
  • trac-Profpatsch/ghc
  • GZGavinZhao/ghc
  • ncfavier/ghc
  • jameshaydon/ghc
  • ajccosta/ghc
  • dschrempf/ghc
  • cydparser/ghc
  • LinuxUserGD/ghc
  • elodielander/ghc
  • facundominguez/ghc
  • psilospore/ghc
  • lachrimae/ghc
  • dylan-thinnes/ghc-type-errors-plugin
  • hamishmack/ghc
  • Leary/ghc
  • lzszt/ghc
  • lyokha/ghc
  • trac-glaubitz/ghc
  • Rewbert/ghc
  • andreabedini/ghc
  • Jasagredo/ghc
  • sol/ghc
  • OlegAlexander/ghc
  • trac-sthibaul/ghc
  • avdv/ghc
  • Wendaolee/ghc
  • ur4t/ghc
  • daylily/ghc
  • boltzmannrain/ghc
  • mmzk1526/ghc
  • trac-fizzixnerd/ghc
  • soulomoon/ghc
  • rwmjones/ghc
  • j14i/ghc
  • tracsis/ghc
  • gesh/ghc
  • flip101/ghc
  • eldritch-cookie/ghc
  • LemonjamesD/ghc
  • pgujjula/ghc
  • skeuchel/ghc
  • noteed/ghc
  • gulin.serge/ghc
  • Torrekie/ghc
  • jlwoodwa/ghc
  • ayanamists/ghc
  • husong998/ghc
  • trac-edmundnoble/ghc
  • josephf/ghc
  • contrun/ghc
  • baulig/ghc
  • edsko/ghc
  • mzschr/ghc-issue-24732
  • ulidtko/ghc
  • Arsen/ghc
  • trac-sjoerd_visscher/ghc
  • crumbtoo/ghc
  • L0neGamer/ghc
  • DrewFenwick/ghc
  • benz0li/ghc
  • MaciejWas/ghc
  • jordanrule/ghc
  • trac-qqwy/ghc
  • LiamGoodacre/ghc
  • isomorpheme/ghc
  • trac-danidiaz/ghc
  • Kariim/ghc
  • MTaimoorZaeem/ghc
  • hololeap/ghc
  • ticat-fp/ghc
  • meritamen/ghc
  • criskell/ghc
  • trac-kraai/ghc
  • aergus/ghc
  • jdral/ghc
  • SamB/ghc
  • Tristian/ghc
  • ywgrit/ghc
  • KatsuPatrick/ghc
  • OsePedro/ghc
  • mpscholten/ghc
  • fp/ghc
  • zaquest/ghc
  • fangyi-zhou/ghc
  • augyg/ghc
640 results
Show changes
Commits on Source (2)
......@@ -15,33 +15,26 @@ import GHC.Exts
import GHC.Base (IO(IO))
-- | Test that we can allocate 'ByteArray#'s outside of the @HEAP_ALLOCED()@
-- address space without upsetting the GC. To be extra sure we attach weak
-- pointers with C finalizers to the 'ByteArray#'s. We keep them alive and run
-- a major GC so that the GC has to trace the live 'ByteArray#'s.
-- | Test that we can allocate 'ByteArray#'s outside of the @HEAP_ALLOCED()@ address space without
-- upsetting the GC. To be extra sure we attach weak pointers with C finalizers to the
-- 'ByteArray#'s. We keep them alive and run a major GC so that the GC has to trace the live
-- 'ByteArray#'s.
--
-- On older GHC versions this upsets the GC because it does not expect heap
-- objects with closure type @ARR_WORDS@ to exist outside the heap.
-- On older GHC versions this upsets the GC because it does not expect heap objects with closure
-- type @ARR_WORDS@ to exist outside the heap.
--
-- > internal error: evacuate(static): strange closure type 42
--
-- Finally we allow everything to be GC'd again, and check that the C
-- finalizers did run.
-- Finally we free the backing memory with `unsafeFreeByteArray`. Then we rerun the GC'd again.
-- Note: When connecting finalizers they seem to fire on shutdown of the RTS not on a major GC
-- invocation.
--
main :: IO ()
main = do
heapallocedTest
n1 <- getMallocByteArrayCount
putStrLn ("malloc_count = " ++ show n1)
bytearrayTest
-- check that all the C finalizers ran to free() the things we allocated
performMajorGC
n2 <- getMallocByteArrayCount
putStrLn ("malloc_count = " ++ show n1)
-- | This checks that the CMM impl of HEAP_ALLOCED matches the behaviour of
-- the C version. This test lives here since the CMM HEAP_ALLOCED is used by
-- the isByteArrayPinned# primop now that it supports byte arrays that are
......@@ -55,10 +48,17 @@ heapallocedTest = do
putStrLn ("HEAP_ALLOCED = " ++ show same
++ "\t(c_HEAP_ALLOCED ptr == cmm_HEAP_ALLOCED ptr)")
where
heapStart = 0x4200000000
-- For values selected here see OSMem.c
heapLowerbound = 8 * (2^30) -- 8GB lower bound starting index of the heap
heapDefaultStart = 0x4200000000 -- > 32GB default starting address of the heap
heapSizes = [0 -- Check the heap lower starting bound
, 2^40, 2^38] -- Check the heap upper bounds at both 1TB and 1/4TB of virtual memory
addrs
-- Addresses around the start of the heap
= [heapStart + offset | offset <- [-1000..1000]]
= [heapStart + heapSize + offset
| heapStart <- [heapLowerbound, heapDefaultStart]
, heapSize <- heapSizes
, offset <- [-1000..1000]] -- Area of the bounds check
-- 2k address probes, appropriate to the address space
++ case sizeOf (nullPtr :: Ptr ()) of
4 -> [0, 2^21 .. 2^32-1] -- 0 to 4Gb-1 in 2Mb jumps
......@@ -67,31 +67,48 @@ heapallocedTest = do
bytearrayTest :: IO ()
bytearrayTest = do
printMallocCount "initial"
let byteLengths = [0..99]
-- malloc() a bunch of ByteArray#s on the C heap
foreignBAs <- mapM newForeignHeapByteArray [0..99]
n1 <- getMallocByteArrayCount
putStrLn ("malloc_count = " ++ show n1)
(foreignPtrs, foreignBAs) <- unzip <$> mapM newForeignHeapByteArray byteLengths
printMallocCount "alloced"
-- allocate a bunch of ByteArray#s on the GHC heap
nativeBAs <- mapM newNativeHeapByteArray [0..99]
nativeBAs <- mapM newNativeHeapByteArray byteLengths
-- as a sanity check compare them to each other
let same = and (zipWith equalByteArrays foreignBAs nativeBAs)
putStrLn ("arrays equal = " ++ show same
++ "\t(and (zipWith equalByteArrays foreignBAs nativeBAs))")
-- and test the isByteArrayPinned# primop on them all
let pinned = all isByteArrayPinned foreignBAs
putStrLn ("arrays pinned = " ++ show pinned
-- and test the isByteArrayPinned# primop on them foreign byte arrays
let pinnedForeign = all isByteArrayPinned foreignBAs
putStrLn ("arrays pinned = " ++ show pinnedForeign
++ "\t(all isByteArrayPinned foreignBAs)")
-- and test the isByteArrayPinned# primop on them native byte arrays
let pinnedNative = all isByteArrayPinned nativeBAs
putStrLn ("arrays pinned = " ++ show pinnedNative
++ "\t(all isByteArrayPinned nativeBAs)")
-- while they're still live, have the GC inspect them all
performMajorGC
n2 <- getMallocByteArrayCount
putStrLn ("malloc_count = " ++ show n2)
printMallocCount "alive"
mapM_ touchByteArray foreignBAs
-- after they have been freed, have another GC run
mapM_ unsafeFreeByteArray foreignPtrs
-- WARNING: DO NOT USE `foreignPtrs` OR `foreignBAs` AFTER THIS POINT
-- We have released the memory backing the byte arrays
performMajorGC
printMallocCount "final"
printMallocCount :: String -> IO ()
printMallocCount phase = do
n <- getMallocByteArrayCount
putStrLn ("malloc_count = " ++ show n ++ "\t" ++ phase)
data ByteArray = ByteArray ByteArray#
data MutableByteArray = MutableByteArray (MutableByteArray# RealWorld)
......@@ -101,12 +118,14 @@ newNativeHeapByteArray n = do
mba <- newByteArray n
fillAndFreezeByteArray mba n
newForeignHeapByteArray :: Int -> IO ByteArray
newForeignHeapByteArray :: Int -> IO (Ptr a, ByteArray)
newForeignHeapByteArray n = do
-- mallocByteArray also allocates memory for the header of a ByteArray#
ptr <- mallocByteArray (fromIntegral n)
-- placeByteArray# writes the ByteArray# header in this additionally allocated memory
mba <- placeByteArray ptr n
addCFinalizerToByteArray mba freeByteArray ptr
fillAndFreezeByteArray mba n
ba <- fillAndFreezeByteArray mba n
pure (ptr, ba)
newByteArray :: Int -> IO MutableByteArray
newByteArray (I# n#) =
......@@ -128,18 +147,6 @@ fillAndFreezeByteArray (MutableByteArray mba#) (I# n#) =
case unsafeFreezeByteArray# mba# s1 of
(# s2, ba# #) -> (# s2, ByteArray ba# #)
addCFinalizerToByteArray :: MutableByteArray
-> FunPtr (Ptr a -> IO ())
-> Ptr a
-> IO ()
addCFinalizerToByteArray (MutableByteArray ba#) (FunPtr cfunptr#) (Ptr ptr#) =
IO $ \s0 ->
case mkWeakNoFinalizer# ba# () s0 of
(# s1, weak# #) ->
-- 0# flag here means don't pass any env ptr to the finalizer
case addCFinalizerToWeak# cfunptr# ptr# 0# nullAddr# weak# s1 of
(# s2, _success# #) -> (# s2, () #)
touchByteArray :: ByteArray -> IO ()
touchByteArray (ByteArray ba#) =
IO $ \s0 ->
......@@ -164,8 +171,8 @@ cmm_HEAP_ALLOCED (Ptr addr#) = I# (cmm_HEAP_ALLOCED# addr#)
foreign import ccall unsafe "mallocByteArray"
mallocByteArray :: CInt -> IO (Ptr a)
foreign import ccall unsafe "&freeByteArray"
freeByteArray :: FunPtr (Ptr a -> IO ())
foreign import ccall unsafe "unsafeFreeByteArray"
unsafeFreeByteArray :: Ptr a -> IO ()
foreign import ccall unsafe "getMallocByteArrayCount"
getMallocByteArrayCount :: IO CInt
......@@ -175,4 +182,3 @@ foreign import ccall unsafe "c_HEAP_ALLOCED"
foreign import prim "cmm_HEAP_ALLOCED"
cmm_HEAP_ALLOCED# :: Addr# -> Int#
HEAP_ALLOCED = True (c_HEAP_ALLOCED ptr == cmm_HEAP_ALLOCED ptr)
malloc_count = 0
malloc_count = 100
malloc_count = 0 initial
malloc_count = 100 alloced
arrays equal = True (and (zipWith equalByteArrays foreignBAs nativeBAs))
arrays pinned = True (all isByteArrayPinned foreignBAs)
malloc_count = 100
malloc_count = 0
arrays pinned = False (all isByteArrayPinned nativeBAs)
malloc_count = 100 alive
malloc_count = 0 final
......@@ -11,7 +11,7 @@ void *mallocByteArray (StgWord len)
return malloc(sizeof(StgArrBytes) + len);
}
void freeByteArray (void *arr)
void unsafeFreeByteArray (void *arr)
{
free(arr);
malloc_count--;
......@@ -26,4 +26,3 @@ int c_HEAP_ALLOCED(void * p)
{
return HEAP_ALLOCED(p);
}
......@@ -532,7 +532,10 @@ test('T17747',
[# This test tries to allocate virtual memory outside of the managed heap.
# The required primops are not available on the following platforms:
when(arch('javascript'), expect_fail),
when(arch('wasm32'), expect_fail)],
when(arch('wasm32'), expect_fail),
# Cross compiling fails for:
# x86_64-linux-alpine3_17-wasm-cross_wasm32-wasi-release+fully_static
when(isCross(), expect_fail)],
makefile_test,
['T17747'])
......