From d31f3e67b8e89225ef2a2a0c12b16255b5e907cb Mon Sep 17 00:00:00 2001 From: Richard W.M. Jones Date: Sep 23 2011 20:16:43 +0000 Subject: - Add arm type directive patch. - Allow more arm arches. - Don't package *.cmxs on arm. (Added by RWMJ on behalf of DJ Delorie) --- diff --git a/debian_patches_0013-ocamlopt-arm-add-.type-directive-for-code-symbols.patch b/debian_patches_0013-ocamlopt-arm-add-.type-directive-for-code-symbols.patch new file mode 100644 index 0000000..a4c0491 --- /dev/null +++ b/debian_patches_0013-ocamlopt-arm-add-.type-directive-for-code-symbols.patch @@ -0,0 +1,125 @@ +From: Stephane Glondu +Date: Fri, 12 Aug 2011 21:13:17 +0200 +Subject: ocamlopt/arm: add .type directive for code symbols + +Bug: http://caml.inria.fr/mantis/view.php?id=5336 +Bug-Ubuntu: https://bugs.launchpad.net/bugs/810402 +Signed-off-by: Stephane Glondu +--- + asmcomp/arm/emit.mlp | 1 + + asmrun/arm.S | 12 ++++++++++++ + 2 files changed, 13 insertions(+), 0 deletions(-) + +diff --git a/asmcomp/arm/emit.mlp b/asmcomp/arm/emit.mlp +index 2003313..a4b2241 100644 +--- a/asmcomp/arm/emit.mlp ++++ b/asmcomp/arm/emit.mlp +@@ -556,6 +556,7 @@ let fundecl fundecl = + ` .text\n`; + ` .align 2\n`; + ` .global {emit_symbol fundecl.fun_name}\n`; ++ ` .type {emit_symbol fundecl.fun_name}, %function\n`; + `{emit_symbol fundecl.fun_name}:\n`; + let n = frame_size() in + ignore(emit_stack_adjustment "sub" n); +diff --git a/asmrun/arm.S b/asmrun/arm.S +index 164f731..1313e9c 100644 +--- a/asmrun/arm.S ++++ b/asmrun/arm.S +@@ -24,6 +24,7 @@ alloc_limit .req r10 + /* Allocation functions and GC interface */ + + .globl caml_call_gc ++ .type caml_call_gc, %function + caml_call_gc: + /* Record return address and desired size */ + /* Can use alloc_limit as a temporary since it will be reloaded by +@@ -41,6 +42,7 @@ caml_call_gc: + bx lr + + .globl caml_alloc1 ++ .type caml_alloc1, %function + caml_alloc1: + sub alloc_ptr, alloc_ptr, #8 + cmp alloc_ptr, alloc_limit +@@ -54,6 +56,7 @@ caml_alloc1: + b caml_alloc1 + + .globl caml_alloc2 ++ .type caml_alloc2, %function + caml_alloc2: + sub alloc_ptr, alloc_ptr, #12 + cmp alloc_ptr, alloc_limit +@@ -67,6 +70,7 @@ caml_alloc2: + b caml_alloc2 + + .globl caml_alloc3 ++ .type caml_alloc3, %function + caml_alloc3: + sub alloc_ptr, alloc_ptr, #16 + cmp alloc_ptr, alloc_limit +@@ -80,6 +84,7 @@ caml_alloc3: + b caml_alloc3 + + .globl caml_allocN ++ .type caml_allocN, %function + caml_allocN: + sub alloc_ptr, alloc_ptr, r12 + cmp alloc_ptr, alloc_limit +@@ -134,6 +139,7 @@ caml_allocN: + /* Function to call is in r12 */ + + .globl caml_c_call ++ .type caml_c_call, %function + caml_c_call: + /* Preserve return address in callee-save register r4 */ + mov r4, lr +@@ -160,6 +166,7 @@ caml_c_call: + /* Start the Caml program */ + + .globl caml_start_program ++ .type caml_start_program, %function + caml_start_program: + ldr r12, .Lcaml_program + +@@ -235,6 +242,7 @@ caml_start_program: + /* Raise an exception from C */ + + .globl caml_raise_exception ++ .type caml_raise_exception, %function + caml_raise_exception: + /* Reload Caml allocation pointers */ + ldr r12, .Lcaml_young_ptr +@@ -250,6 +258,7 @@ caml_raise_exception: + /* Callback from C to Caml */ + + .globl caml_callback_exn ++ .type caml_callback_exn, %function + caml_callback_exn: + /* Initial shuffling of arguments (r0 = closure, r1 = first arg) */ + mov r12, r0 +@@ -259,6 +268,7 @@ caml_callback_exn: + b .Ljump_to_caml + + .globl caml_callback2_exn ++ .type caml_callback2_exn, %function + caml_callback2_exn: + /* Initial shuffling of arguments (r0 = closure, r1 = arg1, r2 = arg2) */ + mov r12, r0 +@@ -269,6 +279,7 @@ caml_callback2_exn: + b .Ljump_to_caml + + .globl caml_callback3_exn ++ .type caml_callback3_exn, %function + caml_callback3_exn: + /* Initial shuffling of arguments */ + /* (r0 = closure, r1 = arg1, r2 = arg2, r3 = arg3) */ +@@ -281,6 +292,7 @@ caml_callback3_exn: + b .Ljump_to_caml + + .globl caml_ml_array_bound_error ++ .type caml_ml_array_bound_error, %function + caml_ml_array_bound_error: + /* Load address of [caml_array_bound_error] in r12 */ + ldr r12, .Lcaml_array_bound_error +-- diff --git a/ocaml.spec b/ocaml.spec index 32eab2b..8a49dd8 100644 --- a/ocaml.spec +++ b/ocaml.spec @@ -2,7 +2,7 @@ Name: ocaml Version: 3.12.0 -Release: 5%{?dist} +Release: 6%{?dist} Summary: Objective Caml compiler and programming environment @@ -27,6 +27,9 @@ Patch1: ocaml-user-cflags.patch # Fix for RHBZ#691896. This is upstream in 3.12.1. Patch2: 0007-Fix-ocamlopt-w.r.t.-binutils-2.21.patch +# Patch from Debian for ARM (sent upstream). +Patch3: debian_patches_0013-ocamlopt-arm-add-.type-directive-for-code-symbols.patch + BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) # Depend on previous version of OCaml so that ocamlobjinfo @@ -58,7 +61,7 @@ Requires: ncurses-devel Requires: gdbm-devel Requires: rpm-build >= 4.8.0 Provides: ocaml(compiler) = %{version} -ExclusiveArch: alpha armv4l %{ix86} ia64 x86_64 ppc sparc sparcv9 ppc64 +ExclusiveArch: alpha %{arm} %{ix86} ia64 x86_64 ppc sparc sparcv9 ppc64 %global __ocaml_requires_opts -c -f %{buildroot}%{_bindir}/ocamlobjinfo %global __ocaml_provides_opts -f %{buildroot}%{_bindir}/ocamlobjinfo @@ -204,6 +207,7 @@ man pages and info files. %patch0 -p1 -b .rpath %patch1 -p1 -b .cflags %patch2 -p1 -b .rhbz691896 +%patch3 -p1 -b .arm-type-dir cp %{SOURCE2} refman.pdf @@ -310,7 +314,9 @@ fi %{_libdir}/ocaml/ld.conf %{_libdir}/ocaml/Makefile.config %{_libdir}/ocaml/*.a +%ifnarch %{arm} %{_libdir}/ocaml/*.cmxs +%endif %{_libdir}/ocaml/*.cmxa %{_libdir}/ocaml/*.cmx %{_libdir}/ocaml/*.mli @@ -446,6 +452,11 @@ fi %changelog +* Fri Sep 23 2011 DJ Delorie - 3.12.0-6 +- Add arm type directive patch. +- Allow more arm arches. +- Don't package *.cmxs on arm. + * Wed Mar 30 2011 Richard W.M. Jones - 3.12.0-5 - Fix for invalid assembler generation (RHBZ#691896).