lang/ocaml: fix build on powerpc64 elfv2
LLVM miscompiles ocaml on powerpc64 elfv2: ld: error: bytecomp/printlambda.ml:23:(.text+0x16): relocation R_PPC64_TOC16_DS out of range: 73024 is not in [-32768, 32767] Use GCC instead on powerpc64. Add a conditional patch enabled only on powerpc64 elfv2 to use elfv2 abi instead of elfv1. Add a bunch of other patches to correctly check for abi instead of relying on endianness. PR: 242389 Approved by: michipili@gmail.com (maintainer)
This commit is contained in:
parent
a78a32ab3d
commit
b17864ac26
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=520254
@ -101,6 +101,11 @@ PLIST_SUB+= PROF="@comment "
|
||||
PLIST_SUB+= PROF=""
|
||||
.endif
|
||||
|
||||
.if defined(PPC_ABI) && ${PPC_ABI} == ELFv2
|
||||
EXTRA_PATCHES= ${PATCHDIR}/extra-patch-asmcomp_power_arch.ml
|
||||
USE_GCC= yes
|
||||
.endif
|
||||
|
||||
post-extract:
|
||||
.if ${PORT_OPTIONS:MDOCS}
|
||||
@if ! (cd ${WRKDIR} && \
|
||||
|
11
lang/ocaml/files/extra-patch-asmcomp_power_arch.ml
Normal file
11
lang/ocaml/files/extra-patch-asmcomp_power_arch.ml
Normal file
@ -0,0 +1,11 @@
|
||||
--- asmcomp/power/arch.ml.orig 2019-12-02 10:44:34 UTC
|
||||
+++ asmcomp/power/arch.ml
|
||||
@@ -28,7 +28,7 @@ type abi = ELF32 | ELF64v1 | ELF64v2
|
||||
let abi =
|
||||
match Config.model with
|
||||
| "ppc" -> ELF32
|
||||
- | "ppc64" -> ELF64v1
|
||||
+ | "ppc64" -> ELF64v2
|
||||
| "ppc64le" -> ELF64v2
|
||||
| _ -> assert false
|
||||
|
99
lang/ocaml/files/patch-asmrun_power.S
Normal file
99
lang/ocaml/files/patch-asmrun_power.S
Normal file
@ -0,0 +1,99 @@
|
||||
--- asmrun/power.S.orig 2019-12-02 12:34:04 UTC
|
||||
+++ asmrun/power.S
|
||||
@@ -13,7 +13,7 @@
|
||||
/* */
|
||||
/**************************************************************************/
|
||||
|
||||
-#if defined(MODEL_ppc64le)
|
||||
+#if _CALL_ELF == 2
|
||||
.abiversion 2
|
||||
#endif
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
#define CALLBACK_LINK_SIZE 16
|
||||
#define CALLBACK_LINK_OFFSET 0
|
||||
#endif
|
||||
-#if defined(MODEL_ppc64)
|
||||
+#if _CALL_ELF == 1
|
||||
#define RESERVED_STACK 48
|
||||
#define PARAM_SAVE_AREA (8*8)
|
||||
#define LR_SAVE 16
|
||||
@@ -54,7 +54,7 @@
|
||||
#define CALLBACK_LINK_SIZE 32
|
||||
#define CALLBACK_LINK_OFFSET 48
|
||||
#endif
|
||||
-#if defined(MODEL_ppc64le)
|
||||
+#if _CALL_ELF == 2
|
||||
#define RESERVED_STACK 32
|
||||
#define PARAM_SAVE_AREA 0
|
||||
#define LR_SAVE 16
|
||||
@@ -82,7 +82,7 @@
|
||||
|
||||
#endif
|
||||
|
||||
-#if defined(MODEL_ppc64)
|
||||
+#if _CALL_ELF == 1
|
||||
#define FUNCTION(name) \
|
||||
.section ".opd","aw"; \
|
||||
.align 3; \
|
||||
@@ -98,7 +98,7 @@
|
||||
|
||||
#endif
|
||||
|
||||
-#if defined(MODEL_ppc64le)
|
||||
+#if _CALL_ELF == 2
|
||||
#define FUNCTION(name) \
|
||||
.section ".text"; \
|
||||
.globl name; \
|
||||
@@ -157,7 +157,7 @@
|
||||
|
||||
#endif
|
||||
|
||||
-#if defined(MODEL_ppc64)
|
||||
+#if _CALL_ELF == 1
|
||||
.section ".opd","aw"
|
||||
#else
|
||||
.section ".text"
|
||||
@@ -338,14 +338,14 @@ FUNCTION(caml_c_call)
|
||||
#if defined(MODEL_ppc)
|
||||
mtctr 28
|
||||
bctrl
|
||||
-#elif defined(MODEL_ppc64)
|
||||
+#elif _CALL_ELF == 1
|
||||
ld 0, 0(28)
|
||||
mr 26, 2 /* save current TOC in a callee-save register */
|
||||
mtctr 0
|
||||
ld 2, 8(28)
|
||||
bctrl
|
||||
mr 2, 26 /* restore current TOC */
|
||||
-#elif defined(MODEL_ppc64le)
|
||||
+#elif _CALL_ELF == 2
|
||||
mtctr 28
|
||||
mr 12, 28
|
||||
mr 26, 2 /* save current TOC in a callee-save register */
|
||||
@@ -514,14 +514,14 @@ FUNCTION(caml_start_program)
|
||||
#if defined(MODEL_ppc)
|
||||
mtctr 12
|
||||
.L105: bctrl
|
||||
-#elif defined(MODEL_ppc64)
|
||||
+#elif _CALL_ELF == 1
|
||||
ld 0, 0(12)
|
||||
mtctr 0
|
||||
std 2, TOC_SAVE(1)
|
||||
ld 2, 8(12)
|
||||
.L105: bctrl
|
||||
ld 2, TOC_SAVE(1)
|
||||
-#elif defined(MODEL_ppc64le)
|
||||
+#elif _CALL_ELF == 2
|
||||
mtctr 12
|
||||
std 2, TOC_SAVE(1)
|
||||
.L105: bctrl
|
||||
@@ -634,7 +634,7 @@ FUNCTION(caml_callback3_exn)
|
||||
b .L102
|
||||
ENDFUNCTION(caml_callback3_exn)
|
||||
|
||||
-#if defined(MODEL_ppc64)
|
||||
+#if _CALL_ELF == 1
|
||||
.section ".opd","aw"
|
||||
#else
|
||||
.section ".text"
|
15
lang/ocaml/files/patch-byterun_caml_stack.h
Normal file
15
lang/ocaml/files/patch-byterun_caml_stack.h
Normal file
@ -0,0 +1,15 @@
|
||||
--- byterun/caml/stack.h.orig 2017-07-13 08:56:44 UTC
|
||||
+++ byterun/caml/stack.h
|
||||
@@ -40,10 +40,10 @@
|
||||
#if defined(MODEL_ppc)
|
||||
#define Saved_return_address(sp) *((intnat *)((sp) - 4))
|
||||
#define Callback_link(sp) ((struct caml_context *)((sp) + 16))
|
||||
-#elif defined(MODEL_ppc64)
|
||||
+#elif _CALL_ELF == 1
|
||||
#define Saved_return_address(sp) *((intnat *)((sp) + 16))
|
||||
#define Callback_link(sp) ((struct caml_context *)((sp) + (48 + 32)))
|
||||
-#elif defined(MODEL_ppc64le)
|
||||
+#elif _CALL_ELF == 2
|
||||
#define Saved_return_address(sp) *((intnat *)((sp) + 16))
|
||||
#define Callback_link(sp) ((struct caml_context *)((sp) + (32 + 32)))
|
||||
#else
|
62
lang/ocaml/files/patch-testsuite_tests_asmcomp_power.S
Normal file
62
lang/ocaml/files/patch-testsuite_tests_asmcomp_power.S
Normal file
@ -0,0 +1,62 @@
|
||||
--- testsuite/tests/asmcomp/power.S.orig 2019-12-02 12:36:28 UTC
|
||||
+++ testsuite/tests/asmcomp/power.S
|
||||
@@ -26,11 +26,11 @@
|
||||
#define RESERVED_STACK 16
|
||||
#define LR_SAVE_AREA 4
|
||||
#endif
|
||||
-#if defined(MODEL_ppc64)
|
||||
+#if _CALL_ELF == 1
|
||||
#define RESERVED_STACK 48
|
||||
#define LR_SAVE_AREA 16
|
||||
#endif
|
||||
-#if defined(MODEL_ppc64le)
|
||||
+#if _CALL_ELF == 2
|
||||
#define RESERVED_STACK 32
|
||||
#define LR_SAVE_AREA 16
|
||||
#endif
|
||||
@@ -46,7 +46,7 @@
|
||||
name:
|
||||
#endif
|
||||
|
||||
-#if defined(MODEL_ppc64)
|
||||
+#if _CALL_ELF == 1
|
||||
#define FUNCTION(name) \
|
||||
.section ".opd","aw"; \
|
||||
.align 3; \
|
||||
@@ -58,7 +58,7 @@
|
||||
.L.name:
|
||||
#endif
|
||||
|
||||
-#if defined(MODEL_ppc64le)
|
||||
+#if _CALL_ELF == 2
|
||||
#define FUNCTION(name) \
|
||||
.section ".text"; \
|
||||
.globl name; \
|
||||
@@ -118,11 +118,11 @@ FUNCTION(call_gen_code)
|
||||
/* Get function pointer in CTR */
|
||||
#if defined(MODEL_ppc)
|
||||
mtctr 3
|
||||
-#elif defined(MODEL_ppc64)
|
||||
+#elif _CALL_ELF == 1
|
||||
ld 0, 0(3)
|
||||
mtctr 0
|
||||
ld 2, 8(3)
|
||||
-#elif defined(MODEL_ppc64le)
|
||||
+#elif _CALL_ELF == 2
|
||||
mtctr 3
|
||||
mr 12, 3
|
||||
#else
|
||||
@@ -184,11 +184,11 @@ FUNCTION(caml_c_call)
|
||||
/* Jump to C function (address in r28) */
|
||||
#if defined(MODEL_ppc)
|
||||
mtctr 28
|
||||
-#elif defined(MODEL_ppc64)
|
||||
+#elif _CALL_ELF == 1
|
||||
ld 0, 0(28)
|
||||
mtctr 0
|
||||
ld 2, 8(28)
|
||||
-#elif defined(MODEL_ppc64le)
|
||||
+#elif _CALL_ELF == 2
|
||||
mtctr 28
|
||||
mr 12, 28
|
||||
#else
|
Loading…
Reference in New Issue
Block a user