[commit: ghc] master, wip/deploy-docs, wip/packaging-fail, wip/run-nofib, wip/windows-32bit: Add a linker test re: section alignment (3cdcc0b)

git at git.haskell.org git at git.haskell.org
Thu Mar 21 17:00:56 UTC 2019


Repository : ssh://git@git.haskell.org/ghc

On branches: master,wip/deploy-docs,wip/packaging-fail,wip/run-nofib,wip/windows-32bit
Link       : http://ghc.haskell.org/trac/ghc/changeset/3cdcc0b55de5f7a35dc12430f021a665b0477e95/ghc

>---------------------------------------------------------------

commit 3cdcc0b55de5f7a35dc12430f021a665b0477e95
Author: Artem Pyanykh <artempyanykh at gmail.com>
Date:   Mon Feb 11 14:05:34 2019 +0300

    Add a linker test re: section alignment


>---------------------------------------------------------------

3cdcc0b55de5f7a35dc12430f021a665b0477e95
 testsuite/tests/rts/linker/Makefile                  |  5 +++++
 testsuite/tests/rts/linker/aligned_mem_access.c      | 14 ++++++++++++++
 testsuite/tests/rts/linker/aligned_mem_access.stdout |  2 ++
 testsuite/tests/rts/linker/all.T                     |  7 +++++++
 4 files changed, 28 insertions(+)

diff --git a/testsuite/tests/rts/linker/Makefile b/testsuite/tests/rts/linker/Makefile
index 838a83a..2320d34 100644
--- a/testsuite/tests/rts/linker/Makefile
+++ b/testsuite/tests/rts/linker/Makefile
@@ -6,3 +6,8 @@ unsigned_reloc_macho_x64:
 	as -o unsigned_reloc_macho_x64.o unsigned_reloc_macho_x64.s
 	'$(TEST_HC)' $(TEST_HC_OPTS_NO_RTSOPTS) -v0 --make -no-rtsopts-suggestions -no-hs-main -o runner runner.c
 	./runner unsigned_reloc_macho_x64.o getAnswer
+
+aligned_mem_access:
+	cc -c -o aligned_mem_access.o aligned_mem_access.c
+	'$(TEST_HC)' $(TEST_HC_OPTS_NO_RTSOPTS) -v0 --make -no-rtsopts-suggestions -no-hs-main -o runner runner.c
+	./runner aligned_mem_access.o foo
diff --git a/testsuite/tests/rts/linker/aligned_mem_access.c b/testsuite/tests/rts/linker/aligned_mem_access.c
new file mode 100644
index 0000000..cef90c3
--- /dev/null
+++ b/testsuite/tests/rts/linker/aligned_mem_access.c
@@ -0,0 +1,14 @@
+#include <stdio.h>
+#include <immintrin.h>
+
+__m128 mvec   = {1.0, 2.0, 3.0, 42.0};
+float  fvec[] = {.0, .0, .0, .0};
+
+/* Uses movaps instruction to move data between XMMn <-> mem. Fails
+ * with segfault when data section is not properly aligned (16 byte).
+ */
+long foo(void)
+{
+        _mm_store_ps(fvec, mvec);
+        return (long) fvec[3];
+}
diff --git a/testsuite/tests/rts/linker/aligned_mem_access.stdout b/testsuite/tests/rts/linker/aligned_mem_access.stdout
new file mode 100644
index 0000000..4b728c2
--- /dev/null
+++ b/testsuite/tests/rts/linker/aligned_mem_access.stdout
@@ -0,0 +1,2 @@
+Linking: path = aligned_mem_access.o, symname = _foo
+42
\ No newline at end of file
diff --git a/testsuite/tests/rts/linker/all.T b/testsuite/tests/rts/linker/all.T
index 66c2156..23d79d3 100644
--- a/testsuite/tests/rts/linker/all.T
+++ b/testsuite/tests/rts/linker/all.T
@@ -7,3 +7,10 @@ test('unsigned_reloc_macho_x64',
          unless(arch('x86_64'), skip)
      ],
      run_command, ['$MAKE -s --no-print-directory unsigned_reloc_macho_x64'])
+
+test('aligned_mem_access',
+     [
+         extra_files(['runner.c', 'aligned_mem_access.c']),
+         unless(opsys('darwin') and arch('x86_64'), expect_broken(13624))
+     ],
+     run_command, ['$MAKE -s --no-print-directory aligned_mem_access'])



More information about the ghc-commits mailing list