From 19ec87cc26cd1dd5da098e0d9c4d8ee8b8b85a22 Mon Sep 17 00:00:00 2001 From: Cheng Shao <terrorjack@type.dance> Date: Fri, 4 Oct 2024 00:00:41 +0000 Subject: [PATCH] driver: use interpreterDynamic predicate in preloadLib This commit use the interpreterDynamic predicate in preloadLib to decide if we should do dynLoadObjs instead of loadObj. Previously we used hostIsDynamic which was only written with non-cross internal interpreter in mind. The testsuite is also adjusted to remove hard-wired -fPIC flag for cbits (doesn't work in i386 RTS linker in vanilla way, #25260) and properly pass ghc_th_way_flags to ghc. (cherry picked from commit 80aa89831c18162ce5591400c41b4cd8f77db0e4) --- compiler/GHC/Linker/Loader.hs | 4 ++-- testsuite/tests/quasiquotation/Makefile | 6 +++--- testsuite/tests/quasiquotation/all.T | 2 +- testsuite/tests/th/all.T | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/compiler/GHC/Linker/Loader.hs b/compiler/GHC/Linker/Loader.hs index 43dbb2f8f2c..bcf4ba9cc59 100644 --- a/compiler/GHC/Linker/Loader.hs +++ b/compiler/GHC/Linker/Loader.hs @@ -564,7 +564,7 @@ preloadLib interp hsc_env lib_paths framework_paths pls lib_spec = do preload_statics _paths names = do b <- or <$> mapM doesFileExist names if not b then return (False, pls) - else if hostIsDynamic + else if interpreterDynamic interp then do pls1 <- dynLoadObjs interp hsc_env pls names return (True, pls1) else do mapM_ (loadObj interp) names @@ -573,7 +573,7 @@ preloadLib interp hsc_env lib_paths framework_paths pls lib_spec = do preload_static_archive _paths name = do b <- doesFileExist name if not b then return False - else do if hostIsDynamic + else do if interpreterDynamic interp then throwGhcExceptionIO $ CmdLineError dynamic_msg else loadArchive interp name diff --git a/testsuite/tests/quasiquotation/Makefile b/testsuite/tests/quasiquotation/Makefile index 9a9db1ead9b..0f246c31eb0 100644 --- a/testsuite/tests/quasiquotation/Makefile +++ b/testsuite/tests/quasiquotation/Makefile @@ -10,6 +10,6 @@ T4150: -'$(TEST_HC)' $(TEST_HC_OPTS) -v0 -c T4150.hs T14028: - '$(TEST_HC)' $(TEST_HC_OPTS) -v0 T14028Quote.hs - '$(TEST_HC)' $(TEST_HC_OPTS) -v0 -fPIC -c T14028C.c - '$(TEST_HC)' $(TEST_HC_OPTS) -v0 -fexternal-interpreter T14028 T14028C.o + '$(TEST_HC)' $(TEST_HC_OPTS) $(ghcThWayFlags) -v0 T14028Quote.hs + '$(TEST_HC)' $(TEST_HC_OPTS) $(ghcThWayFlags) -v0 -c T14028C.c -o T14028C.o + '$(TEST_HC)' $(TEST_HC_OPTS) $(ghcThWayFlags) -v0 -fexternal-interpreter T14028 T14028C.o diff --git a/testsuite/tests/quasiquotation/all.T b/testsuite/tests/quasiquotation/all.T index 875d38a6016..5c9e7560ec7 100644 --- a/testsuite/tests/quasiquotation/all.T +++ b/testsuite/tests/quasiquotation/all.T @@ -10,4 +10,4 @@ test('T14028', only_ways([config.ghc_th_way]), unless(config.have_ext_interp, skip), when(opsys('freebsd'), expect_broken(19723))], - makefile_test, ['T14028']) + makefile_test, ['T14028 ghcThWayFlags=' + config.ghc_th_way_flags]) diff --git a/testsuite/tests/th/all.T b/testsuite/tests/th/all.T index 0705ac9d2e4..9732adc1eac 100644 --- a/testsuite/tests/th/all.T +++ b/testsuite/tests/th/all.T @@ -591,7 +591,7 @@ test('T23829_hasty', normal, compile_fail, ['']) test('T23829_hasty_b', normal, compile_fail, ['']) test('T23927', normal, compile_and_run, ['']) test('T23954', normal, compile_and_run, ['']) -test('T23309', [extra_files(['T23309A.hs']), req_c], multimod_compile, ['T23309', '-v0 T23309.c -optc-fPIC']) +test('T23309', [extra_files(['T23309A.hs']), req_c], multimod_compile, ['T23309', '-v0 T23309.c ' + config.ghc_th_way_flags]) test('T23378', [extra_files(['T23378A.hs']), js_skip], multimod_compile, ['T23378', '-v0']) test('T23962', normal, compile_and_run, ['']) test('T23968', normal, compile_and_run, ['']) -- GitLab