Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 16 Dec 2019 12:56:06 +0000 (UTC)
From:      Piotr Kubaj <pkubaj@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r520254 - in head/lang/ocaml: . files
Message-ID:  <201912161256.xBGCu6Jk088198@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: pkubaj
Date: Mon Dec 16 12:56:06 2019
New Revision: 520254
URL: https://svnweb.freebsd.org/changeset/ports/520254

Log:
  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)

Added:
  head/lang/ocaml/files/extra-patch-asmcomp_power_arch.ml   (contents, props changed)
  head/lang/ocaml/files/patch-asmrun_power.S   (contents, props changed)
  head/lang/ocaml/files/patch-byterun_caml_stack.h   (contents, props changed)
  head/lang/ocaml/files/patch-testsuite_tests_asmcomp_power.S   (contents, props changed)
Modified:
  head/lang/ocaml/Makefile

Modified: head/lang/ocaml/Makefile
==============================================================================
--- head/lang/ocaml/Makefile	Mon Dec 16 12:50:58 2019	(r520253)
+++ head/lang/ocaml/Makefile	Mon Dec 16 12:56:06 2019	(r520254)
@@ -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} && \

Added: head/lang/ocaml/files/extra-patch-asmcomp_power_arch.ml
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/lang/ocaml/files/extra-patch-asmcomp_power_arch.ml	Mon Dec 16 12:56:06 2019	(r520254)
@@ -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
+ 

Added: head/lang/ocaml/files/patch-asmrun_power.S
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/lang/ocaml/files/patch-asmrun_power.S	Mon Dec 16 12:56:06 2019	(r520254)
@@ -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"

Added: head/lang/ocaml/files/patch-byterun_caml_stack.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/lang/ocaml/files/patch-byterun_caml_stack.h	Mon Dec 16 12:56:06 2019	(r520254)
@@ -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

Added: head/lang/ocaml/files/patch-testsuite_tests_asmcomp_power.S
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/lang/ocaml/files/patch-testsuite_tests_asmcomp_power.S	Mon Dec 16 12:56:06 2019	(r520254)
@@ -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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201912161256.xBGCu6Jk088198>