summaryrefslogtreecommitdiff
path: root/testsuite
diff options
context:
space:
mode:
authorArtem Pyanykh <artem.pyanykh@gmail.com>2019-04-16 19:10:31 +0300
committerMarge Bot <ben+marge-bot@smart-cactus.org>2019-04-21 09:19:29 -0400
commit687152f288dc37a1038094ed9e9c1ee2759706b1 (patch)
treeb612bf897ea98c557798904ecbb6c19f67d761dc /testsuite
parent0e96d1205905707369b82ce024afdfed3fd7bdf8 (diff)
downloadhaskell-687152f288dc37a1038094ed9e9c1ee2759706b1.tar.gz
testsuite: move tests related to linker under tests/rts/linker
Diffstat (limited to 'testsuite')
-rw-r--r--testsuite/tests/rts/Makefile83
-rw-r--r--testsuite/tests/rts/all.T79
-rw-r--r--testsuite/tests/rts/linker/LinkerUnload.hs (renamed from testsuite/tests/rts/LinkerUnload.hs)0
-rw-r--r--testsuite/tests/rts/linker/Makefile85
-rw-r--r--testsuite/tests/rts/linker/T11223/Makefile (renamed from testsuite/tests/rts/T11223/Makefile)0
-rw-r--r--testsuite/tests/rts/linker/T11223/T11223_link_order_a_b_2_fail.stderr (renamed from testsuite/tests/rts/T11223/T11223_link_order_a_b_2_fail.stderr)0
-rw-r--r--testsuite/tests/rts/linker/T11223/T11223_link_order_a_b_2_fail.stderr-ws-32-mingw32 (renamed from testsuite/tests/rts/T11223/T11223_link_order_a_b_2_fail.stderr-ws-32-mingw32)0
-rw-r--r--testsuite/tests/rts/linker/T11223/T11223_link_order_a_b_2_fail.stderr-ws-64-mingw32 (renamed from testsuite/tests/rts/T11223/T11223_link_order_a_b_2_fail.stderr-ws-64-mingw32)0
-rw-r--r--testsuite/tests/rts/linker/T11223/T11223_link_order_a_b_succeed.stdout (renamed from testsuite/tests/rts/T11223/T11223_link_order_a_b_succeed.stdout)0
-rw-r--r--testsuite/tests/rts/linker/T11223/T11223_link_order_b_a_2_succeed.stdout (renamed from testsuite/tests/rts/T11223/T11223_link_order_b_a_2_succeed.stdout)0
-rw-r--r--testsuite/tests/rts/linker/T11223/T11223_link_order_b_a_succeed.stdout (renamed from testsuite/tests/rts/T11223/T11223_link_order_b_a_succeed.stdout)0
-rw-r--r--testsuite/tests/rts/linker/T11223/T11223_simple_duplicate_lib.stderr (renamed from testsuite/tests/rts/T11223/T11223_simple_duplicate_lib.stderr)0
-rw-r--r--testsuite/tests/rts/linker/T11223/T11223_simple_duplicate_lib.stderr-ws-32-mingw32 (renamed from testsuite/tests/rts/T11223/T11223_simple_duplicate_lib.stderr-ws-32-mingw32)0
-rw-r--r--testsuite/tests/rts/linker/T11223/T11223_simple_duplicate_lib.stderr-ws-64-mingw32 (renamed from testsuite/tests/rts/T11223/T11223_simple_duplicate_lib.stderr-ws-64-mingw32)0
-rw-r--r--testsuite/tests/rts/linker/T11223/T11223_simple_link.stdout (renamed from testsuite/tests/rts/T11223/T11223_simple_link.stdout)0
-rw-r--r--testsuite/tests/rts/linker/T11223/T11223_simple_link_lib.stdout (renamed from testsuite/tests/rts/T11223/T11223_simple_link_lib.stdout)0
-rw-r--r--testsuite/tests/rts/linker/T11223/T11223_simple_unused_duplicate_lib.stdout (renamed from testsuite/tests/rts/T11223/T11223_simple_unused_duplicate_lib.stdout)0
-rw-r--r--testsuite/tests/rts/linker/T11223/all.T (renamed from testsuite/tests/rts/T11223/all.T)0
-rw-r--r--testsuite/tests/rts/linker/T11223/bar.c (renamed from testsuite/tests/rts/T11223/bar.c)0
-rw-r--r--testsuite/tests/rts/linker/T11223/foo.c (renamed from testsuite/tests/rts/T11223/foo.c)0
-rw-r--r--testsuite/tests/rts/linker/T11223/foo.hs (renamed from testsuite/tests/rts/T11223/foo.hs)0
-rw-r--r--testsuite/tests/rts/linker/T11223/foo2.hs (renamed from testsuite/tests/rts/T11223/foo2.hs)0
-rw-r--r--testsuite/tests/rts/linker/T11223/foo3.hs (renamed from testsuite/tests/rts/T11223/foo3.hs)0
-rw-r--r--testsuite/tests/rts/linker/T11223/power.c (renamed from testsuite/tests/rts/T11223/power.c)0
-rw-r--r--testsuite/tests/rts/linker/T11223/power.hs (renamed from testsuite/tests/rts/T11223/power.hs)0
-rw-r--r--testsuite/tests/rts/linker/T11223/power3.hs (renamed from testsuite/tests/rts/T11223/power3.hs)0
-rw-r--r--testsuite/tests/rts/linker/T11223/power_slow.c (renamed from testsuite/tests/rts/T11223/power_slow.c)0
-rw-r--r--testsuite/tests/rts/linker/T2615.hs (renamed from testsuite/tests/rts/T2615.hs)0
-rw-r--r--testsuite/tests/rts/linker/T2615.stdout (renamed from testsuite/tests/rts/T2615.stdout)0
-rw-r--r--testsuite/tests/rts/linker/T5435.hs (renamed from testsuite/tests/rts/T5435.hs)0
-rw-r--r--testsuite/tests/rts/linker/T5435_asm.c (renamed from testsuite/tests/rts/T5435_asm.c)0
-rw-r--r--testsuite/tests/rts/linker/T5435_dyn_asm.stdout (renamed from testsuite/tests/rts/T5435_dyn_asm.stdout)0
-rw-r--r--testsuite/tests/rts/linker/T5435_dyn_asm.stdout-darwin (renamed from testsuite/tests/rts/T5435_dyn_asm.stdout-darwin)0
-rw-r--r--testsuite/tests/rts/linker/T5435_dyn_asm.stdout-mingw32 (renamed from testsuite/tests/rts/T5435_dyn_asm.stdout-mingw32)0
-rw-r--r--testsuite/tests/rts/linker/T5435_dyn_gcc.stdout (renamed from testsuite/tests/rts/T5435_dyn_gcc.stdout)0
-rw-r--r--testsuite/tests/rts/linker/T5435_gcc.c (renamed from testsuite/tests/rts/T5435_gcc.c)0
-rw-r--r--testsuite/tests/rts/linker/T5435_v_asm.stdout (renamed from testsuite/tests/rts/T5435_v_asm.stdout)0
-rw-r--r--testsuite/tests/rts/linker/T5435_v_asm_a.stdout (renamed from testsuite/tests/rts/T5435_v_asm_a.stdout)0
-rw-r--r--testsuite/tests/rts/linker/T5435_v_asm_a.stdout-darwin (renamed from testsuite/tests/rts/T5435_v_asm_a.stdout-darwin)0
-rw-r--r--testsuite/tests/rts/linker/T5435_v_asm_a.stdout-mingw32 (renamed from testsuite/tests/rts/T5435_v_asm_a.stdout-mingw32)0
-rw-r--r--testsuite/tests/rts/linker/T5435_v_asm_b.stdout (renamed from testsuite/tests/rts/T5435_v_asm_b.stdout)0
-rw-r--r--testsuite/tests/rts/linker/T5435_v_gcc.stdout (renamed from testsuite/tests/rts/T5435_v_gcc.stdout)0
-rw-r--r--testsuite/tests/rts/linker/Test.hs (renamed from testsuite/tests/rts/Test.hs)0
-rw-r--r--testsuite/tests/rts/linker/all.T85
-rw-r--r--testsuite/tests/rts/linker/libfoo_T2615.c (renamed from testsuite/tests/rts/libfoo_T2615.c)0
-rw-r--r--testsuite/tests/rts/linker/libfoo_script_T2615.so (renamed from testsuite/tests/rts/libfoo_script_T2615.so)0
-rw-r--r--testsuite/tests/rts/linker/linker_error.c (renamed from testsuite/tests/rts/linker_error.c)0
-rw-r--r--testsuite/tests/rts/linker/linker_error2.c (renamed from testsuite/tests/rts/linker_error2.c)0
-rw-r--r--testsuite/tests/rts/linker/linker_error3.c (renamed from testsuite/tests/rts/linker_error3.c)0
-rw-r--r--testsuite/tests/rts/linker/linker_unload.c (renamed from testsuite/tests/rts/linker_unload.c)0
-rw-r--r--testsuite/tests/rts/linker/linker_unload.stdout (renamed from testsuite/tests/rts/linker_unload.stdout)0
-rw-r--r--testsuite/tests/rts/linker/rdynamic.hs (renamed from testsuite/tests/rts/rdynamic.hs)0
-rw-r--r--testsuite/tests/rts/linker/rdynamic.stdout (renamed from testsuite/tests/rts/rdynamic.stdout)0
53 files changed, 170 insertions, 162 deletions
diff --git a/testsuite/tests/rts/Makefile b/testsuite/tests/rts/Makefile
index 08d2051891..32c2b17e27 100644
--- a/testsuite/tests/rts/Makefile
+++ b/testsuite/tests/rts/Makefile
@@ -16,11 +16,6 @@ outofmem2::
$(MAKE) -s --no-print-directory outofmem2-prep
@ulimit -m 1000000 2>/dev/null; ./outofmem2 +RTS -M5m -RTS || echo "exit($$?)"
-T2615-prep:
- $(RM) libfoo_T2615.so
- '$(TEST_HC)' $(TEST_HC_OPTS) -fPIC -c libfoo_T2615.c -o libfoo_T2615.o
- '$(TEST_HC)' $(filter-out -rtsopts, $(TEST_HC_OPTS)) -shared -no-auto-link-packages libfoo_T2615.o -o libfoo_T2615.so
-
.PHONY: T4059
T4059:
$(RM) T4059_c.o T4059.o T4059.hi
@@ -62,38 +57,6 @@ T9405:
# | asm // manually laid out sections
# $(0) = obj-src
-define run_T5435_v
-$(RM) T5435_load_v_$(1) T5435_v_$(1)$(exeext)
-'$(TEST_HC)' $(TEST_HC_OPTS) -optc-D$(HostOS)_HOST_OS -optc-DLOAD_CONSTR=$(2) -v0 -c T5435_$(1).c -o T5435_load_v_$(1).o
-'$(TEST_HC)' $(TEST_HC_OPTS) -v0 T5435.hs -osuf main_v_$(1)_o -o T5435_v_$(1)$(exeext)
-./T5435_v_$(1) v ./T5435_load_v_$(1).o
-endef
-
-define run_T5435_dyn
-$(RM) T5435_load_dyn_$(1) T5435_dyn_$(1)$(exeext)
-'$(TEST_HC)' $(filter-out -rtsopts, $(TEST_HC_OPTS)) -optc-D$(HostOS)_HOST_OS -v0 -fPIC -shared -c T5435_$(1).c -osuf dyn_$(1)_o -o T5435_load_dyn_$(1)$(dllext)
-'$(TEST_HC)' $(TEST_HC_OPTS) -v0 T5435.hs -osuf main_dyn_$(1)_o -o T5435_dyn_$(1)$(exeext)
-./T5435_dyn_$(1) dyn ./T5435_load_dyn_$(1)$(dllext)
-endef
-
-.PHONY: T5435_v_gcc
-T5435_v_gcc :
- $(call run_T5435_v,gcc,0)
-
-.PHONY: T5435_v_asm_a T5435_v_asm_b
-T5435_v_asm_a :
- $(call run_T5435_v,asm,0)
-T5435_v_asm_b :
- $(call run_T5435_v,asm,1)
-
-.PHONY: T5435_dyn_gcc
-T5435_dyn_gcc :
- $(call run_T5435_dyn,gcc)
-
-.PHONY: T5435_dyn_asm
-T5435_dyn_asm :
- $(call run_T5435_dyn,asm)
-
T6006_setup :
'$(TEST_HC)' $(TEST_HC_OPTS) -c T6006.hs
@@ -121,52 +84,6 @@ T10296a:
'$(TEST_HC)' $(TEST_HC_OPTS) -v0 -threaded T10296a.hs T10296a_c.c -o T10296a
./T10296a +RTS -N2
-.PHONY: linker_unload
-linker_unload:
- $(RM) Test.o Test.hi
- "$(TEST_HC)" $(TEST_HC_OPTS) -c Test.hs -v0
- # -rtsopts causes a warning
- "$(TEST_HC)" LinkerUnload.hs -package ghc $(filter-out -rtsopts, $(TEST_HC_OPTS)) linker_unload.c -o linker_unload -no-hs-main -optc-Werror
- ./linker_unload "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`"
-
-# -----------------------------------------------------------------------------
-# Testing failures in the RTS linker. We should be able to repeatedly
-# load bogus object files of various kinds without crashing and
-# without any memory leaks.
-#
-# Check for memory leaks manually by running e.g.
-#
-# make linker_error1
-# valgrind --leak-check=full --show-reachable=yes ./linker_error1 linker_error1_o.o
-
-# linker_error1: not a valid object file
-
-.PHONY: linker_error1
-linker_error1:
- "$(TEST_HC)" -c linker_error.c -o linker_error1.o
- "$(TEST_HC)" linker_error1.o -o linker_error1 -no-hs-main -optc-g -debug -threaded
- ./linker_error1 linker_error.c
-
-# linker_error2: the object file has an unknown symbol (fails in
-# resolveObjs())
-
-.PHONY: linker_error2
-linker_error2:
- "$(TEST_HC)" -c linker_error.c -o linker_error2.o
- "$(TEST_HC)" -c linker_error2.c -o linker_error2_o.o
- "$(TEST_HC)" linker_error2.o -o linker_error2 -no-hs-main -optc-g -debug -threaded
- ./linker_error2 linker_error2_o.o
-
-# linker_error3: the object file duplicates an existing symbol (fails
-# in loadObj())
-
-.PHONY: linker_error3
-linker_error3:
- "$(TEST_HC)" -c linker_error.c -o linker_error3.o
- "$(TEST_HC)" -c linker_error3.c -o linker_error3_o.o
- "$(TEST_HC)" linker_error3.o -o linker_error3 -no-hs-main -optc-g -debug -threaded
- ./linker_error3 linker_error3_o.o
-
.PHONY: T11788
T11788:
"$(TEST_HC)" -c T11788.c -o T11788_obj.o
diff --git a/testsuite/tests/rts/all.T b/testsuite/tests/rts/all.T
index 4d2be2b1c4..86f79c26f9 100644
--- a/testsuite/tests/rts/all.T
+++ b/testsuite/tests/rts/all.T
@@ -119,21 +119,6 @@ test('rtsflags001', [ only_ways(['normal']), exit_code(1), extra_run_opts('+RTS
# Crashed with 7.2 and earlier
test('rtsflags002', [ only_ways(['normal']) ], compile_and_run, ['-with-rtsopts="-B -B -B"'])
-# Test to see if linker scripts link properly to real ELF files
-test('T2615',
- [extra_files(['libfoo_T2615.c', 'libfoo_script_T2615.so']),
- when(opsys('mingw32'), skip),
- # OS X doesn't seem to support linker scripts
- when(opsys('darwin'), skip),
- # Solaris' linker does not support GNUish linker scripts
- when(opsys('solaris2'), skip),
- pre_cmd('$MAKE -s --no-print-directory T2615-prep'),
- # Add current directory to dlopen search path
- cmd_prefix('LD_LIBRARY_PATH=$LD_LIBRARY_PATH:. '),
- extra_clean(['libfoo_T2615.so', 'libfoo_T2615.o'])],
- compile_and_run,
- ['-package ghc'])
-
# omit dyn and profiling ways, because we don't build dyn_l or p_l
# variants of the RTS by default
test('traceEvent', [ omit_ways(['dyn', 'ghci'] + prof_ways),
@@ -185,49 +170,6 @@ test('T5250', [extra_files(['spalign.c']),
test('T5423', [], makefile_test, ['T5423'])
-# Workaround bug #8458: old dlopen opens sections in the wrong order,
-# so we just accept both orders.
-def checkDynAsm(actual_file, normaliser):
- actual_raw = read_no_crs(actual_file)
- actual_str = normaliser(actual_raw)
- actual = actual_str.split()
- if actual == ['initArray1', 'initArray2', 'success']:
- return True
- elif opsys('darwin') and actual == ['modInitFunc1', 'modInitFunc2', 'success']:
- return True
- elif opsys('mingw32') and actual == ['ctors1', 'ctors2', 'success']:
- return True
- else:
- if_verbose(1, 'T5435_dyn_asm failed with %s, see all.T for details' % actual)
- return False
-
-# T5435_v_asm got split into two tests because depending
-# on the linker, .init_array and .ctors sections are loaded
-# in a different order (but all entries within a section
-# do get loaded in a deterministic order). So we test each
-# separately now.
-# These should have extra_clean() arguments, but I need
-# to somehow extract out the name of DLLs to do that
-test('T5435_v_asm_a', [extra_files(['T5435.hs', 'T5435_asm.c']),
- when(arch('powerpc64') or arch('powerpc64le'),
- expect_broken(11259))],
- makefile_test, ['T5435_v_asm_a'])
-# this one just needs to run on linux, as darwin/mingw32 are covered
-# by the _a test already.
-test('T5435_v_asm_b', [extra_files(['T5435.hs', 'T5435_asm.c']),
- when(arch('powerpc64') or arch('powerpc64le'),
- expect_broken(11259)),
- when(opsys('darwin') or opsys('mingw32'), skip)],
- makefile_test, ['T5435_v_asm_b'])
-test('T5435_v_gcc', [extra_files(['T5435.hs', 'T5435_gcc.c']),
- when(arch('powerpc64') or arch('powerpc64le'),
- expect_broken(11259))],
- makefile_test, ['T5435_v_gcc'])
-test('T5435_dyn_asm', [extra_files(['T5435.hs', 'T5435_asm.c']),
- check_stdout(checkDynAsm)],
- makefile_test, ['T5435_dyn_asm'])
-test('T5435_dyn_gcc', extra_files(['T5435.hs', 'T5435_gcc.c']) , makefile_test, ['T5435_dyn_gcc'])
-
test('T5993', extra_run_opts('+RTS -k8 -RTS'), compile_and_run, [''])
test('T6006', [ omit_ways(prof_ways + ['ghci']),
@@ -277,11 +219,6 @@ test('T7919', [when(fast(), skip), omit_ways(prof_ways)], compile_and_run,
test('T8035', normal, compile_and_run, [''])
-test('linker_unload',
- [extra_files(['LinkerUnload.hs', 'Test.hs']),
- when(arch('powerpc64') or arch('powerpc64le'), expect_broken(11259))],
- makefile_test, ['linker_unload'])
-
test('T8209', [ req_smp, only_ways(threaded_ways), ignore_stdout ],
compile_and_run, [''])
@@ -312,13 +249,6 @@ test('T10017', [ when(opsys('mingw32'), skip)
test('T11108', normal, compile_and_run, [''])
-test('rdynamic', [ unless(opsys('linux') or opsys('mingw32'), skip)
- # this needs runtime infrastructure to do in ghci:
- # '-rdynamic' ghc, load modules only via dlopen(RTLD_BLOBAL) and more.
- , omit_ways(['ghci'])
- ],
- compile_and_run, ['-rdynamic -package ghc'])
-
test('GcStaticPointers', [when(doing_ghci(), extra_hc_opts('-fobject-code'))],
compile_and_run, [''])
test('ListStaticPointers', [when(doing_ghci(), extra_hc_opts('-fobject-code'))],
@@ -330,15 +260,6 @@ test('overflow1', [ exit_code(251), when(wordsize(32), expect_broken(15255)) ],
test('overflow2', [ exit_code(251) ], compile_and_run, [''])
test('overflow3', [ exit_code(251) ], compile_and_run, [''])
-test('linker_error1', [extra_files(['linker_error.c']),
- ignore_stderr], makefile_test, ['linker_error1'])
-
-test('linker_error2', [extra_files(['linker_error.c']),
- ignore_stderr], makefile_test, ['linker_error2'])
-
-test('linker_error3', [extra_files(['linker_error.c']),
- ignore_stderr], makefile_test, ['linker_error3'])
-
def grep_stderr(pattern):
def wrapper(cmd, pattern=pattern):
swap12 = '3>&1 1>&2 2>&3 3>&-' # Swap file descriptors 1 and 2.
diff --git a/testsuite/tests/rts/LinkerUnload.hs b/testsuite/tests/rts/linker/LinkerUnload.hs
index 9d6b243256..9d6b243256 100644
--- a/testsuite/tests/rts/LinkerUnload.hs
+++ b/testsuite/tests/rts/linker/LinkerUnload.hs
diff --git a/testsuite/tests/rts/linker/Makefile b/testsuite/tests/rts/linker/Makefile
index edbd291ecb..de4c19b0ce 100644
--- a/testsuite/tests/rts/linker/Makefile
+++ b/testsuite/tests/rts/linker/Makefile
@@ -11,3 +11,88 @@ section_alignment:
cc -c -o section_alignment.o section_alignment.c
'$(TEST_HC)' $(TEST_HC_OPTS_NO_RTSOPTS) -v0 --make -no-rtsopts-suggestions -no-hs-main -o runner runner.c
./runner section_alignment.o isAligned
+
+T2615-prep:
+ $(RM) libfoo_T2615.so
+ '$(TEST_HC)' $(TEST_HC_OPTS) -fPIC -c libfoo_T2615.c -o libfoo_T2615.o
+ '$(TEST_HC)' $(filter-out -rtsopts, $(TEST_HC_OPTS)) -shared -no-auto-link-packages libfoo_T2615.o -o libfoo_T2615.so
+
+#--------------------------------------------------------------------
+define run_T5435_v
+$(RM) T5435_load_v_$(1) T5435_v_$(1)$(exeext)
+'$(TEST_HC)' $(TEST_HC_OPTS) -optc-D$(HostOS)_HOST_OS -optc-DLOAD_CONSTR=$(2) -v0 -c T5435_$(1).c -o T5435_load_v_$(1).o
+'$(TEST_HC)' $(TEST_HC_OPTS) -v0 T5435.hs -osuf main_v_$(1)_o -o T5435_v_$(1)$(exeext)
+./T5435_v_$(1) v ./T5435_load_v_$(1).o
+endef
+
+define run_T5435_dyn
+$(RM) T5435_load_dyn_$(1) T5435_dyn_$(1)$(exeext)
+'$(TEST_HC)' $(filter-out -rtsopts, $(TEST_HC_OPTS)) -optc-D$(HostOS)_HOST_OS -v0 -fPIC -shared -c T5435_$(1).c -osuf dyn_$(1)_o -o T5435_load_dyn_$(1)$(dllext)
+'$(TEST_HC)' $(TEST_HC_OPTS) -v0 T5435.hs -osuf main_dyn_$(1)_o -o T5435_dyn_$(1)$(exeext)
+./T5435_dyn_$(1) dyn ./T5435_load_dyn_$(1)$(dllext)
+endef
+
+.PHONY: T5435_v_gcc
+T5435_v_gcc :
+ $(call run_T5435_v,gcc,0)
+
+.PHONY: T5435_v_asm_a T5435_v_asm_b
+T5435_v_asm_a :
+ $(call run_T5435_v,asm,0)
+T5435_v_asm_b :
+ $(call run_T5435_v,asm,1)
+
+.PHONY: T5435_dyn_gcc
+T5435_dyn_gcc :
+ $(call run_T5435_dyn,gcc)
+
+.PHONY: T5435_dyn_asm
+T5435_dyn_asm :
+ $(call run_T5435_dyn,asm)
+
+#--------------------------------------------------------------------
+.PHONY: linker_unload
+linker_unload:
+ $(RM) Test.o Test.hi
+ "$(TEST_HC)" $(TEST_HC_OPTS) -c Test.hs -v0
+ # -rtsopts causes a warning
+ "$(TEST_HC)" LinkerUnload.hs -package ghc $(filter-out -rtsopts, $(TEST_HC_OPTS)) linker_unload.c -o linker_unload -no-hs-main -optc-Werror
+ ./linker_unload "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`"
+
+# -----------------------------------------------------------------------------
+# Testing failures in the RTS linker. We should be able to repeatedly
+# load bogus object files of various kinds without crashing and
+# without any memory leaks.
+#
+# Check for memory leaks manually by running e.g.
+#
+# make linker_error1
+# valgrind --leak-check=full --show-reachable=yes ./linker_error1 linker_error1_o.o
+
+# linker_error1: not a valid object file
+
+.PHONY: linker_error1
+linker_error1:
+ "$(TEST_HC)" -c linker_error.c -o linker_error1.o
+ "$(TEST_HC)" linker_error1.o -o linker_error1 -no-hs-main -optc-g -debug -threaded
+ ./linker_error1 linker_error.c
+
+# linker_error2: the object file has an unknown symbol (fails in
+# resolveObjs())
+
+.PHONY: linker_error2
+linker_error2:
+ "$(TEST_HC)" -c linker_error.c -o linker_error2.o
+ "$(TEST_HC)" -c linker_error2.c -o linker_error2_o.o
+ "$(TEST_HC)" linker_error2.o -o linker_error2 -no-hs-main -optc-g -debug -threaded
+ ./linker_error2 linker_error2_o.o
+
+# linker_error3: the object file duplicates an existing symbol (fails
+# in loadObj())
+
+.PHONY: linker_error3
+linker_error3:
+ "$(TEST_HC)" -c linker_error.c -o linker_error3.o
+ "$(TEST_HC)" -c linker_error3.c -o linker_error3_o.o
+ "$(TEST_HC)" linker_error3.o -o linker_error3 -no-hs-main -optc-g -debug -threaded
+ ./linker_error3 linker_error3_o.o
diff --git a/testsuite/tests/rts/T11223/Makefile b/testsuite/tests/rts/linker/T11223/Makefile
index c0d8420a38..c0d8420a38 100644
--- a/testsuite/tests/rts/T11223/Makefile
+++ b/testsuite/tests/rts/linker/T11223/Makefile
diff --git a/testsuite/tests/rts/T11223/T11223_link_order_a_b_2_fail.stderr b/testsuite/tests/rts/linker/T11223/T11223_link_order_a_b_2_fail.stderr
index 30d756f058..30d756f058 100644
--- a/testsuite/tests/rts/T11223/T11223_link_order_a_b_2_fail.stderr
+++ b/testsuite/tests/rts/linker/T11223/T11223_link_order_a_b_2_fail.stderr
diff --git a/testsuite/tests/rts/T11223/T11223_link_order_a_b_2_fail.stderr-ws-32-mingw32 b/testsuite/tests/rts/linker/T11223/T11223_link_order_a_b_2_fail.stderr-ws-32-mingw32
index 1b32baf67e..1b32baf67e 100644
--- a/testsuite/tests/rts/T11223/T11223_link_order_a_b_2_fail.stderr-ws-32-mingw32
+++ b/testsuite/tests/rts/linker/T11223/T11223_link_order_a_b_2_fail.stderr-ws-32-mingw32
diff --git a/testsuite/tests/rts/T11223/T11223_link_order_a_b_2_fail.stderr-ws-64-mingw32 b/testsuite/tests/rts/linker/T11223/T11223_link_order_a_b_2_fail.stderr-ws-64-mingw32
index d38e1c00ec..d38e1c00ec 100644
--- a/testsuite/tests/rts/T11223/T11223_link_order_a_b_2_fail.stderr-ws-64-mingw32
+++ b/testsuite/tests/rts/linker/T11223/T11223_link_order_a_b_2_fail.stderr-ws-64-mingw32
diff --git a/testsuite/tests/rts/T11223/T11223_link_order_a_b_succeed.stdout b/testsuite/tests/rts/linker/T11223/T11223_link_order_a_b_succeed.stdout
index 0cfbf08886..0cfbf08886 100644
--- a/testsuite/tests/rts/T11223/T11223_link_order_a_b_succeed.stdout
+++ b/testsuite/tests/rts/linker/T11223/T11223_link_order_a_b_succeed.stdout
diff --git a/testsuite/tests/rts/T11223/T11223_link_order_b_a_2_succeed.stdout b/testsuite/tests/rts/linker/T11223/T11223_link_order_b_a_2_succeed.stdout
index 9183bf03fc..9183bf03fc 100644
--- a/testsuite/tests/rts/T11223/T11223_link_order_b_a_2_succeed.stdout
+++ b/testsuite/tests/rts/linker/T11223/T11223_link_order_b_a_2_succeed.stdout
diff --git a/testsuite/tests/rts/T11223/T11223_link_order_b_a_succeed.stdout b/testsuite/tests/rts/linker/T11223/T11223_link_order_b_a_succeed.stdout
index b8626c4cff..b8626c4cff 100644
--- a/testsuite/tests/rts/T11223/T11223_link_order_b_a_succeed.stdout
+++ b/testsuite/tests/rts/linker/T11223/T11223_link_order_b_a_succeed.stdout
diff --git a/testsuite/tests/rts/T11223/T11223_simple_duplicate_lib.stderr b/testsuite/tests/rts/linker/T11223/T11223_simple_duplicate_lib.stderr
index 0f54eab090..0f54eab090 100644
--- a/testsuite/tests/rts/T11223/T11223_simple_duplicate_lib.stderr
+++ b/testsuite/tests/rts/linker/T11223/T11223_simple_duplicate_lib.stderr
diff --git a/testsuite/tests/rts/T11223/T11223_simple_duplicate_lib.stderr-ws-32-mingw32 b/testsuite/tests/rts/linker/T11223/T11223_simple_duplicate_lib.stderr-ws-32-mingw32
index 6226dda848..6226dda848 100644
--- a/testsuite/tests/rts/T11223/T11223_simple_duplicate_lib.stderr-ws-32-mingw32
+++ b/testsuite/tests/rts/linker/T11223/T11223_simple_duplicate_lib.stderr-ws-32-mingw32
diff --git a/testsuite/tests/rts/T11223/T11223_simple_duplicate_lib.stderr-ws-64-mingw32 b/testsuite/tests/rts/linker/T11223/T11223_simple_duplicate_lib.stderr-ws-64-mingw32
index 5b9103e606..5b9103e606 100644
--- a/testsuite/tests/rts/T11223/T11223_simple_duplicate_lib.stderr-ws-64-mingw32
+++ b/testsuite/tests/rts/linker/T11223/T11223_simple_duplicate_lib.stderr-ws-64-mingw32
diff --git a/testsuite/tests/rts/T11223/T11223_simple_link.stdout b/testsuite/tests/rts/linker/T11223/T11223_simple_link.stdout
index 900731ffd5..900731ffd5 100644
--- a/testsuite/tests/rts/T11223/T11223_simple_link.stdout
+++ b/testsuite/tests/rts/linker/T11223/T11223_simple_link.stdout
diff --git a/testsuite/tests/rts/T11223/T11223_simple_link_lib.stdout b/testsuite/tests/rts/linker/T11223/T11223_simple_link_lib.stdout
index 900731ffd5..900731ffd5 100644
--- a/testsuite/tests/rts/T11223/T11223_simple_link_lib.stdout
+++ b/testsuite/tests/rts/linker/T11223/T11223_simple_link_lib.stdout
diff --git a/testsuite/tests/rts/T11223/T11223_simple_unused_duplicate_lib.stdout b/testsuite/tests/rts/linker/T11223/T11223_simple_unused_duplicate_lib.stdout
index 900731ffd5..900731ffd5 100644
--- a/testsuite/tests/rts/T11223/T11223_simple_unused_duplicate_lib.stdout
+++ b/testsuite/tests/rts/linker/T11223/T11223_simple_unused_duplicate_lib.stdout
diff --git a/testsuite/tests/rts/T11223/all.T b/testsuite/tests/rts/linker/T11223/all.T
index 1fc09e3cfd..1fc09e3cfd 100644
--- a/testsuite/tests/rts/T11223/all.T
+++ b/testsuite/tests/rts/linker/T11223/all.T
diff --git a/testsuite/tests/rts/T11223/bar.c b/testsuite/tests/rts/linker/T11223/bar.c
index de5702061a..de5702061a 100644
--- a/testsuite/tests/rts/T11223/bar.c
+++ b/testsuite/tests/rts/linker/T11223/bar.c
diff --git a/testsuite/tests/rts/T11223/foo.c b/testsuite/tests/rts/linker/T11223/foo.c
index cd6e4aca4c..cd6e4aca4c 100644
--- a/testsuite/tests/rts/T11223/foo.c
+++ b/testsuite/tests/rts/linker/T11223/foo.c
diff --git a/testsuite/tests/rts/T11223/foo.hs b/testsuite/tests/rts/linker/T11223/foo.hs
index ff7aa58ba4..ff7aa58ba4 100644
--- a/testsuite/tests/rts/T11223/foo.hs
+++ b/testsuite/tests/rts/linker/T11223/foo.hs
diff --git a/testsuite/tests/rts/T11223/foo2.hs b/testsuite/tests/rts/linker/T11223/foo2.hs
index 1c9ebce024..1c9ebce024 100644
--- a/testsuite/tests/rts/T11223/foo2.hs
+++ b/testsuite/tests/rts/linker/T11223/foo2.hs
diff --git a/testsuite/tests/rts/T11223/foo3.hs b/testsuite/tests/rts/linker/T11223/foo3.hs
index 642de2b528..642de2b528 100644
--- a/testsuite/tests/rts/T11223/foo3.hs
+++ b/testsuite/tests/rts/linker/T11223/foo3.hs
diff --git a/testsuite/tests/rts/T11223/power.c b/testsuite/tests/rts/linker/T11223/power.c
index f94c7e7749..f94c7e7749 100644
--- a/testsuite/tests/rts/T11223/power.c
+++ b/testsuite/tests/rts/linker/T11223/power.c
diff --git a/testsuite/tests/rts/T11223/power.hs b/testsuite/tests/rts/linker/T11223/power.hs
index c7951c3fed..c7951c3fed 100644
--- a/testsuite/tests/rts/T11223/power.hs
+++ b/testsuite/tests/rts/linker/T11223/power.hs
diff --git a/testsuite/tests/rts/T11223/power3.hs b/testsuite/tests/rts/linker/T11223/power3.hs
index fcc2b1336f..fcc2b1336f 100644
--- a/testsuite/tests/rts/T11223/power3.hs
+++ b/testsuite/tests/rts/linker/T11223/power3.hs
diff --git a/testsuite/tests/rts/T11223/power_slow.c b/testsuite/tests/rts/linker/T11223/power_slow.c
index a1ae8d1e61..a1ae8d1e61 100644
--- a/testsuite/tests/rts/T11223/power_slow.c
+++ b/testsuite/tests/rts/linker/T11223/power_slow.c
diff --git a/testsuite/tests/rts/T2615.hs b/testsuite/tests/rts/linker/T2615.hs
index a7aa5dd40d..a7aa5dd40d 100644
--- a/testsuite/tests/rts/T2615.hs
+++ b/testsuite/tests/rts/linker/T2615.hs
diff --git a/testsuite/tests/rts/T2615.stdout b/testsuite/tests/rts/linker/T2615.stdout
index 16a9ae1c20..16a9ae1c20 100644
--- a/testsuite/tests/rts/T2615.stdout
+++ b/testsuite/tests/rts/linker/T2615.stdout
diff --git a/testsuite/tests/rts/T5435.hs b/testsuite/tests/rts/linker/T5435.hs
index d3862a5667..d3862a5667 100644
--- a/testsuite/tests/rts/T5435.hs
+++ b/testsuite/tests/rts/linker/T5435.hs
diff --git a/testsuite/tests/rts/T5435_asm.c b/testsuite/tests/rts/linker/T5435_asm.c
index 90813aa839..90813aa839 100644
--- a/testsuite/tests/rts/T5435_asm.c
+++ b/testsuite/tests/rts/linker/T5435_asm.c
diff --git a/testsuite/tests/rts/T5435_dyn_asm.stdout b/testsuite/tests/rts/linker/T5435_dyn_asm.stdout
index 429c314309..429c314309 100644
--- a/testsuite/tests/rts/T5435_dyn_asm.stdout
+++ b/testsuite/tests/rts/linker/T5435_dyn_asm.stdout
diff --git a/testsuite/tests/rts/T5435_dyn_asm.stdout-darwin b/testsuite/tests/rts/linker/T5435_dyn_asm.stdout-darwin
index 8827792585..8827792585 100644
--- a/testsuite/tests/rts/T5435_dyn_asm.stdout-darwin
+++ b/testsuite/tests/rts/linker/T5435_dyn_asm.stdout-darwin
diff --git a/testsuite/tests/rts/T5435_dyn_asm.stdout-mingw32 b/testsuite/tests/rts/linker/T5435_dyn_asm.stdout-mingw32
index 293bd12fb0..293bd12fb0 100644
--- a/testsuite/tests/rts/T5435_dyn_asm.stdout-mingw32
+++ b/testsuite/tests/rts/linker/T5435_dyn_asm.stdout-mingw32
diff --git a/testsuite/tests/rts/T5435_dyn_gcc.stdout b/testsuite/tests/rts/linker/T5435_dyn_gcc.stdout
index ef3b86d88e..ef3b86d88e 100644
--- a/testsuite/tests/rts/T5435_dyn_gcc.stdout
+++ b/testsuite/tests/rts/linker/T5435_dyn_gcc.stdout
diff --git a/testsuite/tests/rts/T5435_gcc.c b/testsuite/tests/rts/linker/T5435_gcc.c
index 0655dcae73..0655dcae73 100644
--- a/testsuite/tests/rts/T5435_gcc.c
+++ b/testsuite/tests/rts/linker/T5435_gcc.c
diff --git a/testsuite/tests/rts/T5435_v_asm.stdout b/testsuite/tests/rts/linker/T5435_v_asm.stdout
index 1893d0f56a..1893d0f56a 100644
--- a/testsuite/tests/rts/T5435_v_asm.stdout
+++ b/testsuite/tests/rts/linker/T5435_v_asm.stdout
diff --git a/testsuite/tests/rts/T5435_v_asm_a.stdout b/testsuite/tests/rts/linker/T5435_v_asm_a.stdout
index 3124fa8559..3124fa8559 100644
--- a/testsuite/tests/rts/T5435_v_asm_a.stdout
+++ b/testsuite/tests/rts/linker/T5435_v_asm_a.stdout
diff --git a/testsuite/tests/rts/T5435_v_asm_a.stdout-darwin b/testsuite/tests/rts/linker/T5435_v_asm_a.stdout-darwin
index 8827792585..8827792585 100644
--- a/testsuite/tests/rts/T5435_v_asm_a.stdout-darwin
+++ b/testsuite/tests/rts/linker/T5435_v_asm_a.stdout-darwin
diff --git a/testsuite/tests/rts/T5435_v_asm_a.stdout-mingw32 b/testsuite/tests/rts/linker/T5435_v_asm_a.stdout-mingw32
index 293bd12fb0..293bd12fb0 100644
--- a/testsuite/tests/rts/T5435_v_asm_a.stdout-mingw32
+++ b/testsuite/tests/rts/linker/T5435_v_asm_a.stdout-mingw32
diff --git a/testsuite/tests/rts/T5435_v_asm_b.stdout b/testsuite/tests/rts/linker/T5435_v_asm_b.stdout
index 318d66e12b..318d66e12b 100644
--- a/testsuite/tests/rts/T5435_v_asm_b.stdout
+++ b/testsuite/tests/rts/linker/T5435_v_asm_b.stdout
diff --git a/testsuite/tests/rts/T5435_v_gcc.stdout b/testsuite/tests/rts/linker/T5435_v_gcc.stdout
index ef3b86d88e..ef3b86d88e 100644
--- a/testsuite/tests/rts/T5435_v_gcc.stdout
+++ b/testsuite/tests/rts/linker/T5435_v_gcc.stdout
diff --git a/testsuite/tests/rts/Test.hs b/testsuite/tests/rts/linker/Test.hs
index a65e7d3d56..a65e7d3d56 100644
--- a/testsuite/tests/rts/Test.hs
+++ b/testsuite/tests/rts/linker/Test.hs
diff --git a/testsuite/tests/rts/linker/all.T b/testsuite/tests/rts/linker/all.T
index be2e972e82..f57edc4eef 100644
--- a/testsuite/tests/rts/linker/all.T
+++ b/testsuite/tests/rts/linker/all.T
@@ -8,9 +8,94 @@ test('unsigned_reloc_macho_x64',
],
run_command, ['$MAKE -s --no-print-directory unsigned_reloc_macho_x64'])
+######################################
test('section_alignment',
[
extra_files(['runner.c', 'section_alignment.c']),
unless(opsys('darwin') and arch('x86_64'), expect_broken(13624))
],
run_command, ['$MAKE -s --no-print-directory section_alignment'])
+
+######################################
+# Test to see if linker scripts link properly to real ELF files
+test('T2615',
+ [extra_files(['libfoo_T2615.c', 'libfoo_script_T2615.so']),
+ when(opsys('mingw32'), skip),
+ # OS X doesn't seem to support linker scripts
+ when(opsys('darwin'), skip),
+ # Solaris' linker does not support GNUish linker scripts
+ when(opsys('solaris2'), skip),
+ pre_cmd('$MAKE -s --no-print-directory T2615-prep'),
+ # Add current directory to dlopen search path
+ cmd_prefix('LD_LIBRARY_PATH=$LD_LIBRARY_PATH:. '),
+ extra_clean(['libfoo_T2615.so', 'libfoo_T2615.o'])],
+ compile_and_run,
+ ['-package ghc'])
+
+######################################
+# Workaround bug #8458: old dlopen opens sections in the wrong order,
+# so we just accept both orders.
+def checkDynAsm(actual_file, normaliser):
+ actual_raw = read_no_crs(actual_file)
+ actual_str = normaliser(actual_raw)
+ actual = actual_str.split()
+ if actual == ['initArray1', 'initArray2', 'success']:
+ return True
+ elif opsys('darwin') and actual == ['modInitFunc1', 'modInitFunc2', 'success']:
+ return True
+ elif opsys('mingw32') and actual == ['ctors1', 'ctors2', 'success']:
+ return True
+ else:
+ if_verbose(1, 'T5435_dyn_asm failed with %s, see all.T for details' % actual)
+ return False
+
+# T5435_v_asm got split into two tests because depending
+# on the linker, .init_array and .ctors sections are loaded
+# in a different order (but all entries within a section
+# do get loaded in a deterministic order). So we test each
+# separately now.
+# These should have extra_clean() arguments, but I need
+# to somehow extract out the name of DLLs to do that
+test('T5435_v_asm_a', [extra_files(['T5435.hs', 'T5435_asm.c']),
+ when(arch('powerpc64') or arch('powerpc64le'),
+ expect_broken(11259))],
+ makefile_test, ['T5435_v_asm_a'])
+# this one just needs to run on linux, as darwin/mingw32 are covered
+# by the _a test already.
+test('T5435_v_asm_b', [extra_files(['T5435.hs', 'T5435_asm.c']),
+ when(arch('powerpc64') or arch('powerpc64le'),
+ expect_broken(11259)),
+ when(opsys('darwin') or opsys('mingw32'), skip)],
+ makefile_test, ['T5435_v_asm_b'])
+test('T5435_v_gcc', [extra_files(['T5435.hs', 'T5435_gcc.c']),
+ when(arch('powerpc64') or arch('powerpc64le'),
+ expect_broken(11259))],
+ makefile_test, ['T5435_v_gcc'])
+test('T5435_dyn_asm', [extra_files(['T5435.hs', 'T5435_asm.c']),
+ check_stdout(checkDynAsm)],
+ makefile_test, ['T5435_dyn_asm'])
+test('T5435_dyn_gcc', extra_files(['T5435.hs', 'T5435_gcc.c']) , makefile_test, ['T5435_dyn_gcc'])
+
+######################################
+test('linker_unload',
+ [extra_files(['LinkerUnload.hs', 'Test.hs']),
+ when(arch('powerpc64') or arch('powerpc64le'), expect_broken(11259))],
+ makefile_test, ['linker_unload'])
+
+######################################
+test('linker_error1', [extra_files(['linker_error.c']),
+ ignore_stderr], makefile_test, ['linker_error1'])
+
+test('linker_error2', [extra_files(['linker_error.c']),
+ ignore_stderr], makefile_test, ['linker_error2'])
+
+test('linker_error3', [extra_files(['linker_error.c']),
+ ignore_stderr], makefile_test, ['linker_error3'])
+
+######################################
+test('rdynamic', [ unless(opsys('linux') or opsys('mingw32'), skip)
+ # this needs runtime infrastructure to do in ghci:
+ # '-rdynamic' ghc, load modules only via dlopen(RTLD_BLOBAL) and more.
+ , omit_ways(['ghci'])
+ ],
+ compile_and_run, ['-rdynamic -package ghc'])
diff --git a/testsuite/tests/rts/libfoo_T2615.c b/testsuite/tests/rts/linker/libfoo_T2615.c
index a83cb18e7a..a83cb18e7a 100644
--- a/testsuite/tests/rts/libfoo_T2615.c
+++ b/testsuite/tests/rts/linker/libfoo_T2615.c
diff --git a/testsuite/tests/rts/libfoo_script_T2615.so b/testsuite/tests/rts/linker/libfoo_script_T2615.so
index d744ae9604..d744ae9604 100644
--- a/testsuite/tests/rts/libfoo_script_T2615.so
+++ b/testsuite/tests/rts/linker/libfoo_script_T2615.so
diff --git a/testsuite/tests/rts/linker_error.c b/testsuite/tests/rts/linker/linker_error.c
index 264c95d710..264c95d710 100644
--- a/testsuite/tests/rts/linker_error.c
+++ b/testsuite/tests/rts/linker/linker_error.c
diff --git a/testsuite/tests/rts/linker_error2.c b/testsuite/tests/rts/linker/linker_error2.c
index 2687833ff5..2687833ff5 100644
--- a/testsuite/tests/rts/linker_error2.c
+++ b/testsuite/tests/rts/linker/linker_error2.c
diff --git a/testsuite/tests/rts/linker_error3.c b/testsuite/tests/rts/linker/linker_error3.c
index 00faa741c7..00faa741c7 100644
--- a/testsuite/tests/rts/linker_error3.c
+++ b/testsuite/tests/rts/linker/linker_error3.c
diff --git a/testsuite/tests/rts/linker_unload.c b/testsuite/tests/rts/linker/linker_unload.c
index acf41cb86c..acf41cb86c 100644
--- a/testsuite/tests/rts/linker_unload.c
+++ b/testsuite/tests/rts/linker/linker_unload.c
diff --git a/testsuite/tests/rts/linker_unload.stdout b/testsuite/tests/rts/linker/linker_unload.stdout
index 84697b99ba..84697b99ba 100644
--- a/testsuite/tests/rts/linker_unload.stdout
+++ b/testsuite/tests/rts/linker/linker_unload.stdout
diff --git a/testsuite/tests/rts/rdynamic.hs b/testsuite/tests/rts/linker/rdynamic.hs
index bbbe9e898d..bbbe9e898d 100644
--- a/testsuite/tests/rts/rdynamic.hs
+++ b/testsuite/tests/rts/linker/rdynamic.hs
diff --git a/testsuite/tests/rts/rdynamic.stdout b/testsuite/tests/rts/linker/rdynamic.stdout
index fe9b7b1f2f..fe9b7b1f2f 100644
--- a/testsuite/tests/rts/rdynamic.stdout
+++ b/testsuite/tests/rts/linker/rdynamic.stdout