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
  • 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
  • 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
  • rkirkman/ghc
  • gulin.serge/ghc-windows-aarch64-bootstrap
  • iris/ghc
  • kwxm/ghc
  • maralorn/ghc
  • rafl/ghc
  • nikshalark/ghc
  • mrcjkb/ghc
  • blackheaven/ghc
647 results
Show changes
Commits on Source (2)
  • Ryan Scott's avatar
    Windows: Remove mingwex dependency · 14ee7a04
    Ryan Scott authored and Tamar Christina's avatar Tamar Christina committed
    The clang based toolchain uses ucrt as its math library
    and so mingwex is no longer needed.  In fact using mingwex
    will cause incompatibilities as the default routines in both
    have differing ULPs and string formatting modifiers.
    
    ```
    $ LIBRARY_PATH=/mingw64/lib ghc/_build/stage1/bin/ghc Bug.hs -fforce-recomp && ./Bug.exe
    [1 of 2] Compiling Main             ( Bug.hs, Bug.o )
    ghc.exe:  | C:\Users\winferno\Software\ghc\_build\stage1\lib\x86_64-windows-ghc-9.5.20220908\base-4.17.0.0\libHSbase-4.17.0.0.a: unknown symbol `__imp___p__environ'
    ghc.exe:  | C:\Users\winferno\Software\ghc\_build\stage1\lib\x86_64-windows-ghc-9.5.20220908\base-4.17.0.0\libHSbase-4.17.0.0.a: unknown symbol `__hscore_get_errno'
    ghc.exe:  | C:\Users\winferno\Software\ghc\_build\stage1\lib\x86_64-windows-ghc-9.5.20220908\base-4.17.0.0\libHSbase-4.17.0.0.a: unknown symbol `base_ForeignziCziError_errnoToIOError_info'
    ghc.exe:  | C:\Users\winferno\Software\ghc\_build\stage1\lib\x86_64-windows-ghc-9.5.20220908\base-4.17.0.0\libHSbase-4.17.0.0.a: unknown symbol `base_GHCziWindows_failIf2_closure'
    ghc.exe:  | C:\Users\winferno\Software\ghc\_build\stage1\lib\x86_64-windows-ghc-9.5.20220908\base-4.17.0.0\libHSbase-4.17.0.0.a: unknown symbol `base_GHCziIOziEncodingziCodePageziAPI_mkCodePageEncoding_info'
    ghc.exe:  | C:\Users\winferno\Software\ghc\_build\stage1\lib\x86_64-windows-ghc-9.5.20220908\base-4.17.0.0\libHSbase-4.17.0.0.a: unknown symbol `base_GHCziIOziEncodingziCodePage_currentCodePage_closure'
    ghc.exe:  | C:\Users\winferno\Software\ghc\_build\stage1\lib\x86_64-windows-ghc-9.5.20220908\base-4.17.0.0\libHSbase-4.17.0.0.a: unknown symbol `base_GHCziIOziEncoding_getForeignEncoding_closure'
    ghc.exe:  | C:\Users\winferno\Software\ghc\_build\stage1\lib\x86_64-windows-ghc-9.5.20220908\base-4.17.0.0\libHSbase-4.17.0.0.a: unknown symbol `base_ForeignziCziString_withCStringLen1_info'
    ghc.exe:  | C:\Users\winferno\Software\ghc\_build\stage1\lib\x86_64-windows-ghc-9.5.20220908\base-4.17.0.0\libHSbase-4.17.0.0.a: unknown symbol `base_GHCziIOziHandleziInternals_zdwflushCharReadBuffer_info'
    ghc.exe:  | C:\Users\winferno\Software\ghc\_build\stage1\lib\x86_64-windows-ghc-9.5.20220908\base-4.17.0.0\libHSbase-4.17.0.0.a: unknown symbol `base_GHCziIOziHandleziText_hGetBuf1_info'
    ghc.exe:  | C:\Users\winferno\Software\ghc\_build\stage1\lib\x86_64-windows-ghc-9.5.20220908\base-4.17.0.0\libHSbase-4.17.0.0.a: unknown symbol `base_GHCziFingerprint_fingerprintString_closure'
    ghc.exe:  | C:\Users\winferno\Software\ghc\_build\stage1\lib\x86_64-windows-ghc-9.5.20220908\base-4.17.0.0\libHSbase-4.17.0.0.a: unknown symbol `base_DataziTypeableziInternal_mkTrCon_closure'
    ghc.exe:  | C:\Users\winferno\Software\ghc\_build\stage1\lib\x86_64-windows-ghc-9.5.20220908\base-4.17.0.0\libHSbase-4.17.0.0.a: unknown symbol `base_GHCziException_errorCallWithCallStackException_closure'
    ghc.exe:  | C:\Users\winferno\Software\ghc\_build\stage1\lib\x86_64-windows-ghc-9.5.20220908\base-4.17.0.0\libHSbase-4.17.0.0.a: unknown symbol `base_GHCziErr_error_info'
    ghc.exe:  | C:\Users\winferno\Software\ghc\_build\stage1\lib\x86_64-windows-ghc-9.5.20220908\template-haskell-2.19.0.0\libHStemplate-haskell-2.19.0.0.a: unknown symbol `base_DataziMaybe_fromJust1_info'
    ghc.exe:  | C:\Users\winferno\Software\ghc\_build\stage1\lib\x86_64-windows-ghc-9.5.20220908\template-haskell-2.19.0.0\libHStemplate-haskell-2.19.0.0.a: unknown symbol `templatezmhaskell_LanguageziHaskellziTHziSyntax_IntPrimL_con_info'
    ghc.exe: ^^ Could not load 'templatezmhaskell_LanguageziHaskellziTHziLibziInternal_stringL_closure', dependency unresolved. See top entry above.
    
    <no location info>: error:
    
    GHC.ByteCode.Linker.lookupCE
    During interactive linking, GHCi couldn't find the following symbol:
      templatezmhaskell_LanguageziHaskellziTHziLibziInternal_stringL_closure
    This may be due to you not asking GHCi to load extra object files,
    archives or DLLs needed by your current session.  Restart GHCi, specifying
    the missing library using the -L/path/to/object/dir and -lmissinglibname
    flags, or simply by naming the relevant files on the GHCi command line.
    Alternatively, this link failure might indicate a bug in GHCi.
    If you suspect the latter, please report this as a GHC bug:
      https://www.haskell.org/ghc/reportabug
    ```
    14ee7a04
  • Tamar Christina's avatar
    linker: Fix BFD import libraries · 6658c45d
    Tamar Christina authored and Matthew Pickering's avatar Matthew Pickering committed
    6658c45d
Showing
with 211 additions and 287 deletions
......@@ -922,17 +922,6 @@ AC_CHECK_DECLS([program_invocation_short_name], , ,
[#define _GNU_SOURCE 1
#include <errno.h>])
dnl ** check for mingwex library
AC_CHECK_LIB(
[mingwex],
[closedir],
[AC_SUBST([HaveLibMingwEx],[YES])] [AC_SUBST([CabalMingwex],[True])],
[AC_SUBST([HaveLibMingwEx],[NO])] [AC_SUBST([CabalMingwex],[False])])
if test $HaveLibMingwEx = YES ; then
AC_DEFINE([HAVE_MINGWEX], [1], [Define to 1 if you have the mingwex library.])
fi
dnl ** check for math library
dnl Keep that check as early as possible.
dnl as we need to know whether we need libm
......
......@@ -204,7 +204,6 @@ libnuma-lib-dir = @LibNumaLibDir@
use-lib-dw = @UseLibdw@
use-lib-numa = @UseLibNuma@
use-lib-mingw-ex = @HaveLibMingwEx@
use-lib-m = @UseLibm@
use-lib-rt = @UseLibrt@
use-lib-dl = @UseLibdl@
......
......@@ -33,7 +33,6 @@ data Flag = ArSupportsAtFile
| UseLibffiForAdjustors
| UseLibdw
| UseLibnuma
| UseLibmingwex
| UseLibm
| UseLibrt
| UseLibdl
......@@ -63,7 +62,6 @@ flag f = do
UseLibffiForAdjustors -> "use-libffi-for-adjustors"
UseLibdw -> "use-lib-dw"
UseLibnuma -> "use-lib-numa"
UseLibmingwex -> "use-lib-mingw-ex"
UseLibm -> "use-lib-m"
UseLibrt -> "use-lib-rt"
UseLibdl -> "use-lib-dl"
......
......@@ -266,7 +266,6 @@ templateRules = do
target_word_size <- settingWord TargetWordSize
lib_dw <- flag UseLibdw
lib_numa <- flag UseLibnuma
lib_mingwex <- flag UseLibmingwex
lib_m <- flag UseLibm
lib_rt <- flag UseLibrt
lib_dl <- flag UseLibdl
......@@ -283,7 +282,6 @@ templateRules = do
subst = replace "@ProjectVersion@" project_version
. replace "@ProjectVersionMunged@" project_version_munged
. replace "@Cabal64bit@" (cabal_bool (target_word_size == 8))
. replace "@CabalMingwex@" (cabal_bool lib_mingwex)
. replace "@CabalHaveLibdw@" (cabal_bool lib_dw)
. replace "@CabalHaveLibm@" (cabal_bool lib_m)
. replace "@CabalHaveLibrt@" (cabal_bool lib_rt)
......
......@@ -404,8 +404,7 @@ rtsPackageArgs = package rts ? do
, builder HsCpp ? pure
[ "-DTOP=" ++ show top ]
, builder HsCpp ? flag UseLibdw ? arg "-DUSE_LIBDW"
, builder HsCpp ? flag UseLibmingwex ? arg "-DHAVE_LIBMINGWEX" ]
, builder HsCpp ? flag UseLibdw ? arg "-DUSE_LIBDW" ]
-- Compile various performance-critical pieces *without* -fPIC -dynamic
-- even when building a shared library. If we don't do this, then the
......
......@@ -452,7 +452,6 @@ foreign import ccall unsafe "HsBase.h __hscore_fstat"
foreign import ccall unsafe "HsBase.h __hscore_lstat"
lstat :: CFilePath -> Ptr CStat -> IO CInt
#endif
#if defined(js_HOST_ARCH)
......@@ -592,109 +591,95 @@ foreign import javascript unsafe "(($1,$2,$3_1,$3_2) => { return h$base_c_fcntl_
#else
{- Note: Win32 POSIX functions
Functions that are not part of the POSIX standards were
at some point deprecated by Microsoft. This deprecation
was performed by renaming the functions according to the
C++ ABI Section 17.6.4.3.2b. This was done to free up the
namespace of normal Windows programs since Windows isn't
POSIX compliant anyway.
#if defined(mingw32_HOST_OS)
-- See Note [Windows types]
foreign import capi unsafe "HsBase.h _read"
c_read :: CInt -> Ptr Word8 -> CUInt -> IO CInt
These were working before since the RTS was re-exporting
these symbols under the undeprecated names. This is no longer
being done. See #11223
-- See Note [Windows types]
foreign import capi safe "HsBase.h _read"
c_safe_read :: CInt -> Ptr Word8 -> CUInt -> IO CInt
See https://msdn.microsoft.com/en-us/library/ms235384.aspx
for more.
foreign import ccall unsafe "HsBase.h _umask"
c_umask :: CMode -> IO CMode
However since we can't hope to get people to support Windows
packages we should support the deprecated names. See #12497
-}
foreign import capi unsafe "unistd.h lseek"
c_lseek :: CInt -> COff -> CInt -> IO COff
-- See Note [Windows types]
foreign import capi unsafe "HsBase.h _write"
c_write :: CInt -> Ptr Word8 -> CUInt -> IO CInt
foreign import ccall unsafe "HsBase.h access"
-- See Note [Windows types]
foreign import capi safe "HsBase.h _write"
c_safe_write :: CInt -> Ptr Word8 -> CUInt -> IO CInt
foreign import ccall unsafe "HsBase.h _pipe"
c_pipe :: Ptr CInt -> IO CInt
foreign import capi unsafe "HsBase.h _lseeki64"
c_lseek :: CInt -> Int64 -> CInt -> IO Int64
foreign import capi unsafe "HsBase.h _access"
c_access :: CString -> CInt -> IO CInt
#if !defined(HAVE_CHMOD)
c_chmod :: CString -> CMode -> IO CInt
c_chmod _ _ = ioError (ioeSetLocation unsupportedOperation "chmod")
c_chmod _ _ = ioError (ioeSetLocation unsupportedOperation "_chmod")
#else
foreign import ccall unsafe "HsBase.h chmod"
foreign import ccall unsafe "HsBase.h _chmod"
c_chmod :: CString -> CMode -> IO CInt
#endif
foreign import ccall unsafe "HsBase.h close"
foreign import capi unsafe "HsBase.h _close"
c_close :: CInt -> IO CInt
foreign import ccall unsafe "HsBase.h creat"
foreign import capi unsafe "HsBase.h _creat"
c_creat :: CString -> CMode -> IO CInt
#if !defined(HAVE_DUP)
c_dup :: CInt -> IO CInt
c_dup _ = ioError (ioeSetLocation unsupportedOperation "dup")
c_dup _ = ioError (ioeSetLocation unsupportedOperation "_dup")
c_dup2 :: CInt -> CInt -> IO CInt
c_dup2 _ _ = ioError (ioeSetLocation unsupportedOperation "dup2")
c_dup2 _ _ = ioError (ioeSetLocation unsupportedOperation "_dup2")
#else
foreign import ccall unsafe "HsBase.h dup"
foreign import ccall unsafe "HsBase.h _dup"
c_dup :: CInt -> IO CInt
foreign import ccall unsafe "HsBase.h dup2"
foreign import ccall unsafe "HsBase.h _dup2"
c_dup2 :: CInt -> CInt -> IO CInt
#endif
foreign import ccall unsafe "HsBase.h isatty"
foreign import capi unsafe "HsBase.h _isatty"
c_isatty :: CInt -> IO CInt
#if defined(mingw32_HOST_OS)
-- See Note: Windows types
foreign import capi unsafe "HsBase.h _read"
c_read :: CInt -> Ptr Word8 -> CUInt -> IO CInt
-- See Note: Windows types
foreign import capi safe "HsBase.h _read"
c_safe_read :: CInt -> Ptr Word8 -> CUInt -> IO CInt
foreign import ccall unsafe "HsBase.h _umask"
c_umask :: CMode -> IO CMode
-- See Note: Windows types
foreign import capi unsafe "HsBase.h _write"
c_write :: CInt -> Ptr Word8 -> CUInt -> IO CInt
foreign import capi unsafe "HsBase.h _unlink"
c_unlink :: CString -> IO CInt
-- See Note: Windows types
foreign import capi safe "HsBase.h _write"
c_safe_write :: CInt -> Ptr Word8 -> CUInt -> IO CInt
foreign import capi unsafe "HsBase.h _utime"
c_utime :: CString -> Ptr CUtimbuf -> IO CInt
foreign import ccall unsafe "HsBase.h _pipe"
c_pipe :: Ptr CInt -> IO CInt
foreign import capi unsafe "HsBase.h _getpid"
c_getpid :: IO CPid
#else
-- We use CAPI as on some OSs (eg. Linux) this is wrapped by a macro
-- which redirects to the 64-bit-off_t versions when large file
-- support is enabled.
-- See Note: Windows types
-- See Note [Windows types]
foreign import capi unsafe "HsBase.h read"
c_read :: CInt -> Ptr Word8 -> CSize -> IO CSsize
-- See Note: Windows types
-- See Note [Windows types]
foreign import capi safe "HsBase.h read"
c_safe_read :: CInt -> Ptr Word8 -> CSize -> IO CSsize
#if defined(HAVE_UMASK)
foreign import ccall unsafe "HsBase.h umask"
c_umask :: CMode -> IO CMode
#else
c_umask :: CMode -> IO CMode
c_umask _ = ioError (ioeSetLocation unsupportedOperation "umask")
#endif
-- See Note: Windows types
-- See Note [Windows types]
foreign import capi unsafe "HsBase.h write"
c_write :: CInt -> Ptr Word8 -> CSize -> IO CSsize
-- See Note: Windows types
-- See Note [Windows types]
foreign import capi safe "HsBase.h write"
c_safe_write :: CInt -> Ptr Word8 -> CSize -> IO CSsize
......@@ -705,8 +690,44 @@ c_pipe _ = ioError (ioeSetLocation unsupportedOperation "pipe")
foreign import ccall unsafe "HsBase.h pipe"
c_pipe :: Ptr CInt -> IO CInt
#endif
foreign import capi unsafe "unistd.h lseek"
c_lseek :: CInt -> COff -> CInt -> IO COff
foreign import ccall unsafe "HsBase.h access"
c_access :: CString -> CInt -> IO CInt
#if !defined(HAVE_CHMOD)
c_chmod :: CString -> CMode -> IO CInt
c_chmod _ _ = ioError (ioeSetLocation unsupportedOperation "chmod")
#else
foreign import ccall unsafe "HsBase.h chmod"
c_chmod :: CString -> CMode -> IO CInt
#endif
foreign import ccall unsafe "HsBase.h close"
c_close :: CInt -> IO CInt
foreign import ccall unsafe "HsBase.h creat"
c_creat :: CString -> CMode -> IO CInt
#if !defined(HAVE_DUP)
c_dup :: CInt -> IO CInt
c_dup _ = ioError (ioeSetLocation unsupportedOperation "dup")
c_dup2 :: CInt -> CInt -> IO CInt
c_dup2 _ _ = ioError (ioeSetLocation unsupportedOperation "dup2")
#else
foreign import ccall unsafe "HsBase.h dup"
c_dup :: CInt -> IO CInt
foreign import ccall unsafe "HsBase.h dup2"
c_dup2 :: CInt -> CInt -> IO CInt
#endif
foreign import ccall unsafe "HsBase.h isatty"
c_isatty :: CInt -> IO CInt
foreign import ccall unsafe "HsBase.h unlink"
c_unlink :: CString -> IO CInt
......@@ -720,6 +741,7 @@ c_getpid = pure 1
foreign import ccall unsafe "HsBase.h getpid"
c_getpid :: IO CPid
#endif
#endif
#if !defined(js_HOST_ARCH)
foreign import ccall unsafe "HsBase.h __hscore_stat"
......@@ -881,7 +903,8 @@ foreign import capi unsafe "stdio.h value SEEK_END" sEEK_END :: CInt
#endif
{-
Note: Windows types
Note [Windows types]
~~~~~~~~~~~~~~~~~~~~
Windows' _read and _write have types that differ from POSIX. They take an
unsigned int for length and return a signed int where POSIX uses size_t and
......
......@@ -396,7 +396,6 @@ Library
if os(windows)
-- Windows requires some extra libraries for linking because the RTS
-- is no longer re-exporting them.
-- mingwex: provides C99 compatibility. libm is a stub on MingW.
-- mingw32: Unfortunately required because of a resource leak between
-- mingwex and mingw32. the __math_err symbol is defined in
-- mingw32 which is required by mingwex.
......@@ -409,7 +408,7 @@ Library
-- advapi32: provides advanced kernel functions
extra-libraries:
wsock32, user32, shell32, mingw32, kernel32, advapi32,
mingwex, ws2_32, shlwapi, ole32, rpcrt4, ntdll
ws2_32, shlwapi, ole32, rpcrt4, ntdll
-- Minimum supported Windows version.
-- These numbers can be found at:
-- https://msdn.microsoft.com/en-us/library/windows/desktop/aa383745(v=vs.85).aspx
......
......@@ -39,7 +39,7 @@ AC_CHECK_LIB([rt], [clock_gettime])
AC_CHECK_FUNCS([clock_gettime])
AC_CHECK_DECLS([CLOCK_PROCESS_CPUTIME_ID], [], [], [[#include <time.h>]])
AC_CHECK_FUNCS([getclock getrusage times])
AC_CHECK_FUNCS([_chsize ftruncate])
AC_CHECK_FUNCS([_chsize_s ftruncate])
# event-related fun
# The line below already defines HAVE_KQUEUE and HAVE_POLL, so technically some of the
......
......@@ -280,15 +280,12 @@ __hscore_o_nonblock( void )
INLINE int
__hscore_ftruncate( int fd, off_t where )
{
#if defined(HAVE_FTRUNCATE)
#if defined(HAVE__CHSIZE_S)
return _chsize_s(fd,where);
#elif defined(HAVE_FTRUNCATE)
return ftruncate(fd,where);
#elif defined(HAVE__CHSIZE)
return _chsize(fd,where);
#else
// ToDo: we should use _chsize_s() on Windows which allows a 64-bit
// offset, but it doesn't seem to be available from mingw at this time
// --SDM (01/2008)
#error at least ftruncate or _chsize functions are required to build
#error at least _chsize_s or ftruncate functions are required to build
#endif
}
......
......@@ -66,15 +66,14 @@ Library
if os(windows)
-- Windows requires some extra libraries for linking because the RTS
-- is no longer re-exporting them (see #11223)
-- msvcrt: standard C library. The RTS will automatically include this,
-- but is added for completeness.
-- mingwex: provides C99 compatibility. libm is a stub on MingW.
-- ucrt: standard C library. The RTS will automatically include this,
-- but is added for completeness.
-- mingw32: Unfortunately required because of a resource leak between
-- mingwex and mingw32. the __math_err symbol is defined in
-- mingw32 which is required by mingwex.
-- user32: provides access to apis to modify user components (UI etc)
-- on Windows. Required because of mingw32.
extra-libraries: user32, mingw32, mingwex, ucrt
extra-libraries: user32, mingw32, ucrt
if os(linux)
-- we need libm, but for musl and other's we might need libc, as libm
......
......@@ -135,7 +135,7 @@ extern void iconv();
This is to enable lazy loading of symbols. Eager loading is problematic
as it means that all symbols must be available, even those which we will
never use. This is especially painful on Windows, where the number of
libraries required to link things like mingwex grows to be quite high.
libraries required to link things like QT or WxWidgets grows to be quite high.
We proceed through these stages as follows,
......@@ -193,7 +193,7 @@ extern void iconv();
1) Dependency chains, if A.o required a .o in libB but A.o isn't required to link
then we don't need to load libB. This means the dependency chain for libraries
such as mingw32 and mingwex can be broken down.
such as ucrt can be broken down.
2) The number of duplicate symbols, since now only symbols that are
true duplicates will display the error.
......@@ -226,7 +226,7 @@ static void ghciRemoveSymbolTable(StrHashTable *table, const SymbolName* key,
static const char *
symbolTypeString (SymType type)
{
switch (type) {
switch (type & ~SYM_TYPE_DUP_DISCARD) {
case SYM_TYPE_CODE: return "code";
case SYM_TYPE_DATA: return "data";
case SYM_TYPE_INDIRECT_DATA: return "indirect-data";
......@@ -275,14 +275,18 @@ int ghciInsertSymbolTable(
insertStrHashTable(table, key, pinfo);
return 1;
}
else if (pinfo->type != type)
else if (pinfo->type ^ type)
{
debugBelch("Symbol type mismatch.\n");
debugBelch("Symbol %s was defined by %" PATH_FMT " to be a %s symbol.\n",
key, obj_name, symbolTypeString(type));
debugBelch(" yet was defined by %" PATH_FMT " to be a %s symbol.\n",
pinfo->owner ? pinfo->owner->fileName : WSTR("<builtin>"),
symbolTypeString(pinfo->type));
/* We were asked to discard the symbol on duplicates, do so quietly. */
if (!(type & SYM_TYPE_DUP_DISCARD))
{
debugBelch("Symbol type mismatch.\n");
debugBelch("Symbol %s was defined by %" PATH_FMT " to be a %s symbol.\n",
key, obj_name, symbolTypeString(type));
debugBelch(" yet was defined by %" PATH_FMT " to be a %s symbol.\n",
pinfo->owner ? pinfo->owner->fileName : WSTR("<builtin>"),
symbolTypeString(pinfo->type));
}
return 1;
}
else if (pinfo->strength == STRENGTH_STRONG)
......
......@@ -54,11 +54,16 @@ typedef struct _Section Section;
*/
/* What kind of thing a symbol identifies. We need to know this to determine how
* to process overflowing relocations. See Note [Processing overflowed relocations]. */
* to process overflowing relocations. See Note [Processing overflowed relocations].
* This is bitfield however only the option SYM_TYPE_DUP_DISCARD can be combined
* with the other values. */
typedef enum _SymType {
SYM_TYPE_CODE, /* the symbol is a function and can be relocated via a jump island */
SYM_TYPE_DATA, /* the symbol is data */
SYM_TYPE_INDIRECT_DATA, /* see Note [_iob_func symbol] */
SYM_TYPE_CODE = 1 << 0, /* the symbol is a function and can be relocated via a jump island */
SYM_TYPE_DATA = 1 << 1, /* the symbol is data */
SYM_TYPE_INDIRECT_DATA = 1 << 2, /* see Note [_iob_func symbol] */
SYM_TYPE_DUP_DISCARD = 1 << 3, /* the symbol is a symbol in a BFD import library
however if a duplicate is found with a mismatching
SymType then discard this one. */
} SymType;
......
......@@ -113,26 +113,6 @@ extern char **environ;
* by the RtsSymbols entry. To avoid this we introduce a horrible special case
* in `ghciInsertSymbolTable`, ensure that `atexit` is never overridden.
*/
/*
* Note [Symbols for MinGW's printf]
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* The printf offered by Microsoft's libc implementation, msvcrt, is quite
* incomplete, lacking support for even %ull. Consequently mingw-w64 offers its
* own implementation which we enable. However, to be thread-safe the
* implementation uses _lock_file. This would be fine except msvcrt.dll doesn't
* export _lock_file, only numbered versions do (e.g. msvcrt90.dll).
*
* To work around this mingw-w64 packages a static archive of msvcrt which
* includes their own implementation of _lock_file. However, this means that
* the archive contains things which the dynamic library does not; consequently
* we need to ensure that the runtime linker provides this symbol.
*
* It's all just so terrible.
*
* See also:
* https://sourceforge.net/p/mingw-w64/wiki2/gnu%20printf/
* https://sourceforge.net/p/mingw-w64/discussion/723797/thread/55520785/
*/
/* Note [_iob_func symbol]
* ~~~~~~~~~~~~~~~~~~~~~~~
* Microsoft in VS2013 to VS2015 transition made a backwards incompatible change
......@@ -170,12 +150,6 @@ extern char **environ;
SymI_NeedsProto(__mingw_module_is_dll) \
RTS_WIN32_ONLY(SymI_NeedsProto(___chkstk_ms)) \
RTS_WIN64_ONLY(SymI_NeedsProto(___chkstk_ms)) \
RTS_WIN64_ONLY(SymI_HasProto(__stdio_common_vswprintf_s)) \
RTS_WIN64_ONLY(SymI_HasProto(__stdio_common_vswprintf)) \
RTS_WIN64_ONLY(SymI_HasProto(_errno)) \
/* see Note [Symbols for MinGW's printf] */ \
SymI_HasProto(_lock_file) \
SymI_HasProto(_unlock_file) \
SymI_HasProto(__mingw_vsnwprintf) \
/* ^^ Need to figure out why this is needed. */ \
/* See Note [_iob_func symbol] */ \
......@@ -187,120 +161,8 @@ extern char **environ;
/* ^^ Need to figure out why this is needed. */ \
SymI_HasProto(__mingw_vfprintf) \
/* ^^ Need to figure out why this is needed. */
#define RTS_MINGW_COMPAT_SYMBOLS \
SymI_HasProto_deprecated(access) \
SymI_HasProto_deprecated(cabs) \
SymI_HasProto_deprecated(cgets) \
SymI_HasProto_deprecated(chdir) \
SymI_HasProto_deprecated(chmod) \
SymI_HasProto_deprecated(chsize) \
SymI_HasProto_deprecated(close) \
SymI_HasProto_deprecated(cprintf) \
SymI_HasProto_deprecated(cputs) \
SymI_HasProto_deprecated(creat) \
SymI_HasProto_deprecated(cscanf) \
SymI_HasProto_deprecated(cwait) \
SymI_HasProto_deprecated(dup) \
SymI_HasProto_deprecated(dup2) \
SymI_HasProto_deprecated(ecvt) \
SymI_HasProto_deprecated(eof) \
SymI_HasProto_deprecated(execl) \
SymI_HasProto_deprecated(execle) \
SymI_HasProto_deprecated(execlp) \
SymI_HasProto_deprecated(execlpe) \
SymI_HasProto_deprecated(execv) \
SymI_HasProto_deprecated(execve) \
SymI_HasProto_deprecated(execvp) \
SymI_HasProto_deprecated(execvpe) \
SymI_HasProto_deprecated(fcloseall) \
SymI_HasProto_deprecated(fcvt) \
SymI_HasProto_deprecated(fdopen) \
SymI_HasProto_deprecated(fgetchar) \
SymI_HasProto_deprecated(filelength) \
SymI_HasProto_deprecated(fileno) \
SymI_HasProto_deprecated(flushall) \
SymI_HasProto_deprecated(fputchar) \
SymI_HasProto_deprecated(gcvt) \
SymI_HasProto_deprecated(getch) \
SymI_HasProto_deprecated(getche) \
SymI_HasProto_deprecated(getcwd) \
SymI_HasProto_deprecated(getpid) \
SymI_HasProto_deprecated(getw) \
SymI_HasProto_deprecated(hypot) \
SymI_HasProto_deprecated(inp) \
SymI_HasProto_deprecated(inpw) \
SymI_HasProto_deprecated(isascii) \
SymI_HasProto_deprecated(isatty) \
SymI_HasProto_deprecated(iscsym) \
SymI_HasProto_deprecated(iscsymf) \
SymI_HasProto_deprecated(itoa) \
SymI_HasProto_deprecated(j0) \
SymI_HasProto_deprecated(j1) \
SymI_HasProto_deprecated(jn) \
SymI_HasProto_deprecated(kbhit) \
SymI_HasProto_deprecated(lfind) \
SymI_HasProto_deprecated(locking) \
SymI_HasProto_deprecated(lsearch) \
SymI_HasProto_deprecated(lseek) \
SymI_HasProto_deprecated(ltoa) \
SymI_HasProto_deprecated(memccpy) \
SymI_HasProto_deprecated(memicmp) \
SymI_HasProto_deprecated(mkdir) \
SymI_HasProto_deprecated(mktemp) \
SymI_HasProto_deprecated(open) \
SymI_HasProto_deprecated(outp) \
SymI_HasProto_deprecated(outpw) \
SymI_HasProto_deprecated(putch) \
SymI_HasProto_deprecated(putenv) \
SymI_HasProto_deprecated(putw) \
SymI_HasProto_deprecated(read) \
SymI_HasProto_deprecated(rmdir) \
SymI_HasProto_deprecated(rmtmp) \
SymI_HasProto_deprecated(setmode) \
SymI_HasProto_deprecated(sopen) \
SymI_HasProto_deprecated(spawnl) \
SymI_HasProto_deprecated(spawnle) \
SymI_HasProto_deprecated(spawnlp) \
SymI_HasProto_deprecated(spawnlpe) \
SymI_HasProto_deprecated(spawnv) \
SymI_HasProto_deprecated(spawnve) \
SymI_HasProto_deprecated(spawnvp) \
SymI_HasProto_deprecated(spawnvpe) \
SymI_HasProto_deprecated(strcmpi) \
SymI_HasProto_deprecated(strdup) \
SymI_HasProto_deprecated(stricmp) \
SymI_HasProto_deprecated(strlwr) \
SymI_HasProto_deprecated(strnicmp) \
SymI_HasProto_deprecated(strnset) \
SymI_HasProto_deprecated(strrev) \
SymI_HasProto_deprecated(strset) \
SymI_HasProto_deprecated(strupr) \
SymI_HasProto_deprecated(swab) \
SymI_HasProto_deprecated(tell) \
SymI_HasProto_deprecated(tempnam) \
SymI_HasProto_deprecated(toascii) \
SymI_HasProto_deprecated(tzset) \
SymI_HasProto_deprecated(ultoa) \
SymI_HasProto_deprecated(umask) \
SymI_HasProto_deprecated(ungetch) \
SymI_HasProto_deprecated(unlink) \
SymI_HasProto_deprecated(wcsdup) \
SymI_HasProto_deprecated(wcsicmp) \
SymI_HasProto_deprecated(wcsicoll) \
SymI_HasProto_deprecated(wcslwr) \
SymI_HasProto_deprecated(wcsnicmp) \
SymI_HasProto_deprecated(wcsnset) \
SymI_HasProto_deprecated(wcsrev) \
SymI_HasProto_deprecated(wcsset) \
SymI_HasProto_deprecated(wcsupr) \
SymI_HasProto_deprecated(write) \
SymI_HasProto_deprecated(y0) \
SymI_HasProto_deprecated(y1) \
SymI_HasProto_deprecated(yn)
#else
#define RTS_MINGW_ONLY_SYMBOLS /**/
#define RTS_MINGW_COMPAT_SYMBOLS /**/
#endif
......@@ -1122,7 +984,6 @@ extern char **environ;
#define SymI_HasProto(vvv) /**/
#define SymI_HasDataProto(vvv) /**/
#define SymI_HasProto_redirect(vvv,xxx,strength,ty) /**/
#define SymI_HasProto_deprecated(vvv) /**/
RTS_SYMBOLS
RTS_RET_SYMBOLS
......@@ -1140,7 +1001,6 @@ RTS_LIBFFI_SYMBOLS
#undef SymI_HasProto
#undef SymI_HasDataProto
#undef SymI_HasProto_redirect
#undef SymI_HasProto_deprecated
#undef SymE_HasProto
#undef SymE_HasDataProto
#undef SymE_NeedsProto
......@@ -1166,22 +1026,11 @@ RTS_LIBFFI_SYMBOLS
{ MAYBE_LEADING_UNDERSCORE_STR(#vvv), \
(void*)(&(xxx)), strength, ty },
// SymI_HasProto_deprecated allows us to redirect references from their deprecated
// names to the undeprecated ones. e.g. access -> _access.
// We use the hexspeak for unallocated memory 0xBAADF00D to signal the RTS
// that this needs to be loaded from somewhere else.
// These are inserted as weak symbols to prevent us overriding packages that do
// define them, since on Windows these functions shouldn't be in the top level
// namespace, but we have them for POSIX compatibility.
#define SymI_HasProto_deprecated(vvv) \
{ #vvv, (void*)0xBAADF00D, STRENGTH_WEAK, SYM_TYPE_CODE },
RtsSymbolVal rtsSyms[] = {
RTS_SYMBOLS
RTS_RET_SYMBOLS
RTS_POSIX_ONLY_SYMBOLS
RTS_MINGW_ONLY_SYMBOLS
RTS_MINGW_COMPAT_SYMBOLS
RTS_DARWIN_ONLY_SYMBOLS
RTS_OPENBSD_ONLY_SYMBOLS
RTS_LIBGCC_SYMBOLS
......
......@@ -261,6 +261,54 @@
.asciiz "libfoo_data"
Note [GHC Linking model and import libraries]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The above describes how import libraries work for static linking.
Fundamentally this does not apply to dynamic linking as we do in GHC.
The issue is two-folds:
1. In the linking model above it is expected that the .idata sections be
materialized into PLTs during linking. However in GHC we never create
PLTs, but have out own mechanism for this which is the jump island
machinery. This is required for efficiency. For one materializing the
.idata sections would result in wasting pages. We'd use one page for
every ~100 bytes. This is extremely wasteful and also fragments the
memory. Secondly the dynamic linker is lazy. We only perform the final
loading if the symbol is used, however with an import library we can
discard the actual OC immediately after reading it. This prevents us from
keeping ~1k in memory per symbol for no reason.
2. GHC itself does not observe symbol visibility correctly during NGC. This
in itself isn't an academic exercise. The issue stems from GHC using one
mechanism for providing two incompatible linking modes:
a) The first mode is generating Haskell shared libraries which are
intended to be used by other Haskell code. This requires us to
export the info, data and closures. For this GHC just re-exports
all symbols. But it doesn't correcly mark data/code. Symbol
visibility is overwritten by telling the linker to export all
symbols.
b) The second code is producing code that's supposed to be call-able
through a C insterface. This in reality does not require the
export of closures and info tables. But also does not require the
inclusion of the RTS inside the DLL. Hover this is done today
because we don't properly have the RTS as a dynamic library.
i.e. GHC does not only export symbols denoted by foreign export.
Also GHC should depend on an RTS library, but at the moment it
cannot because of TNTC is incompatible with dynamic linking.
These two issues mean that for GHC we need to take a different approach
to handling import libraries. For normal C libraries we have proper
differentiation between CODE and DATA. For GHC produced import libraries
we do not. As such the SYM_TYPE_DUP_DISCARD tells the linker that if a
duplicate symbol is found, and we were going to discard it anyway, just do
so quitely. This works because the RTS symbols themselves are provided by
the currently loaded RTS as built-in symbols.
Secondly we cannot rely on a text symbol being available. As such we
should only depend on the symbols as defined in the .idata sections,
otherwise we would not be able to correctly link against GHC produced
import libraries.
Note [Memory allocation]
~~~~~~~~~~~~~~~~~~~~~~~~
The loading of an object begins in `preloadObjectFile`, which allocates a buffer,
......@@ -1658,7 +1706,10 @@ ocGetNames_PEi386 ( ObjectCode* oc )
if ( secNumber != IMAGE_SYM_UNDEFINED
&& secNumber > 0
&& section
&& section->kind != SECTIONKIND_BFD_IMPORT_LIBRARY) {
/* Skip all BFD import sections. */
&& section->kind != SECTIONKIND_IMPORT
&& section->kind != SECTIONKIND_BFD_IMPORT_LIBRARY
&& section->kind != SECTIONKIND_BFD_IMPORT_LIBRARY_HEAD) {
/* This symbol is global and defined, viz, exported */
/* for IMAGE_SYMCLASS_EXTERNAL
&& !IMAGE_SYM_UNDEFINED,
......@@ -1691,12 +1742,49 @@ ocGetNames_PEi386 ( ObjectCode* oc )
IF_DEBUG(linker_verbose, debugBelch("bss symbol @ %p %u\n", addr, symValue));
}
else if (section && section->kind == SECTIONKIND_BFD_IMPORT_LIBRARY) {
setImportSymbol(oc, sname);
/* Disassembly of section .idata$5:
0000000000000000 <__imp_Insert>:
...
0: IMAGE_REL_AMD64_ADDR32NB .idata$6
The first two bytes contain the ordinal of the function
in the format of lowpart highpart. The two bytes combined
for the total range of 16 bits which is the function export limit
of DLLs. See note [GHC Linking model and import libraries]. */
sname = (SymbolName*)section->start+2;
COFF_symbol* sym = &oc->info->symbols[info->numberOfSymbols-1];
addr = get_sym_name( getSymShortName (info, sym), oc);
IF_DEBUG(linker,
debugBelch("addImportSymbol `%s' => `%s'\n",
sname, (char*)addr));
/* We're going to free the any data associated with the import
library without copying the sections. So we have to duplicate
the symbol name and values before the pointers become invalid. */
sname = strdup (sname);
addr = strdup (addr);
type = has_code_section ? SYM_TYPE_CODE : SYM_TYPE_DATA;
type |= SYM_TYPE_DUP_DISCARD;
if (!ghciInsertSymbolTable(oc->fileName, symhash, sname,
addr, false, type, oc)) {
releaseOcInfo (oc);
stgFree (oc->image);
oc->image = NULL;
return false;
}
setImportSymbol (oc, sname);
/* Don't process this oc any further. Just exit. */
oc->n_symbols = 0;
oc->symbols = NULL;
stgFree (oc->image);
oc->image = NULL;
releaseOcInfo (oc);
// There is nothing that we need to resolve in this object since we
// will never call the import stubs in its text section
oc->status = OBJECT_DONT_RESOLVE;
IF_DEBUG(linker_verbose, debugBelch("import symbol %s\n", sname));
return true;
}
else if (secNumber > 0
&& section
......@@ -2171,21 +2259,7 @@ SymbolAddr *lookupSymbol_PEi386(SymbolName *lbl, ObjectCode *dependent, SymType
} else {
if (type) *type = pinfo->type;
// If Windows, perform initialization of uninitialized
// Symbols from the C runtime which was loaded above.
// We do this on lookup to prevent the hit when
// The symbol isn't being used.
if (pinfo->value == (void*)0xBAADF00D)
{
char symBuffer[50];
const char *crt_impl = "ucrtbase";
sprintf(symBuffer, "_%s", lbl);
static HMODULE crt = NULL;
if (!crt) crt = GetModuleHandle(crt_impl);
pinfo->value = GetProcAddress(crt, symBuffer);
return pinfo->value;
}
else if (pinfo && pinfo->owner && isSymbolImport (pinfo->owner, lbl))
if (pinfo && pinfo->owner && isSymbolImport (pinfo->owner, lbl))
{
/* See Note [BFD import library]. */
HINSTANCE dllInstance = (HINSTANCE)lookupDependentSymbol(pinfo->value, dependent, type);
......
......@@ -24,8 +24,6 @@ flag need-pthread
default: @CabalNeedLibpthread@
flag libbfd
default: @CabalHaveLibbfd@
flag mingwex
default: @CabalMingwex@
flag need-atomic
default: @CabalNeedLibatomic@
flag libdw
......@@ -68,7 +66,6 @@ library
exposed: True
exposed-modules:
if os(ghcjs)
include-dirs: include
......@@ -194,8 +191,6 @@ library
if flag(libbfd)
-- for debugging
extra-libraries: bfd iberty
if flag(mingwex)
extra-libraries: mingwex
if flag(libdw)
-- for backtraces
extra-libraries: elf dw
......
......@@ -88,10 +88,6 @@ compile_libAB_dyn:
.PHONY: compile_libAS_impl_gcc
compile_libAS_impl_gcc:
rm -rf bin_impl_gcc
mkdir bin_impl_gcc
'$(TEST_HC)' $(MY_TEST_HC_OPTS) -odir "bin_impl_gcc" -shared A.c -o "bin_impl_gcc/$(call DLL,ASimpL)"
mv bin_impl_gcc/libASimpL.dll.a bin_impl_gcc/libASx.dll.a
echo "main" | '$(TEST_HC)' $(TEST_HC_OPTS_INTERACTIVE) T11072.hs -lASx -L./bin_impl_gcc
.PHONY: compile_libAS_impl_msvc
......
......@@ -41,9 +41,9 @@ test('T10458',
extra_hc_opts('-L"$PWD/T10458dir" -lAS')],
ghci_script, ['T10458.script'])
test('T11072gcc', [extra_files(['A.c', 'T11072.hs']),
expect_broken(18718),
unless(doing_ghci, skip), unless(opsys('mingw32'), skip)],
test('T11072gcc', [extra_files(['A.c', 'T11072.hs', 'bin_impl_gcc/']),
unless(doing_ghci, skip), unless(opsys('mingw32'), skip),
unless(arch('x86_64'), skip)],
makefile_test, ['compile_libAS_impl_gcc'])
test('T11072msvc', [extra_files(['A.c', 'T11072.hs', 'libAS.def', 'i686/', 'x86_64/']),
......
File added
File added
......@@ -410,7 +410,7 @@ test('T10296b', [only_ways(['threaded2'])], compile_and_run, [''])
test('numa001', [ extra_run_opts('8'), unless(unregisterised(), extra_ways(['debug_numa'])) ]
, compile_and_run, [''])
test('T12497', [ unless(opsys('mingw32'), skip)
test('T12497', [ unless(opsys('mingw32'), skip), expect_broken(22694)
],
makefile_test, ['T12497'])
......