diff options
author | Artem Pyanykh <artem.pyanykh@gmail.com> | 2019-04-16 19:10:31 +0300 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2019-04-21 09:19:29 -0400 |
commit | 687152f288dc37a1038094ed9e9c1ee2759706b1 (patch) | |
tree | b612bf897ea98c557798904ecbb6c19f67d761dc /testsuite | |
parent | 0e96d1205905707369b82ce024afdfed3fd7bdf8 (diff) | |
download | haskell-687152f288dc37a1038094ed9e9c1ee2759706b1.tar.gz |
testsuite: move tests related to linker under tests/rts/linker
Diffstat (limited to 'testsuite')
-rw-r--r-- | testsuite/tests/rts/Makefile | 83 | ||||
-rw-r--r-- | testsuite/tests/rts/all.T | 79 | ||||
-rw-r--r-- | testsuite/tests/rts/linker/LinkerUnload.hs (renamed from testsuite/tests/rts/LinkerUnload.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/rts/linker/Makefile | 85 | ||||
-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.T | 85 | ||||
-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 |