summary refs log tree commit diff
path: root/pkgs/development/compilers/ocaml
diff options
context:
space:
mode:
authorLluís Batlle i Rossell <viric@vicerveza.homeunix.net>2010-10-07 22:10:37 +0000
committerLluís Batlle i Rossell <viric@vicerveza.homeunix.net>2010-10-07 22:10:37 +0000
commit86d8c5385e83831783c9c3245d7dc8ad064e0b76 (patch)
treeb77e49c9cb92699945d090b82b128e0e7fec84ff /pkgs/development/compilers/ocaml
parentbf6f39fb7cef08cacd402405d9b16684533c0207 (diff)
downloadnixpkgs-86d8c5385e83831783c9c3245d7dc8ad064e0b76.tar
nixpkgs-86d8c5385e83831783c9c3245d7dc8ad064e0b76.tar.gz
nixpkgs-86d8c5385e83831783c9c3245d7dc8ad064e0b76.tar.bz2
nixpkgs-86d8c5385e83831783c9c3245d7dc8ad064e0b76.tar.lz
nixpkgs-86d8c5385e83831783c9c3245d7dc8ad064e0b76.tar.xz
nixpkgs-86d8c5385e83831783c9c3245d7dc8ad064e0b76.tar.zst
nixpkgs-86d8c5385e83831783c9c3245d7dc8ad064e0b76.zip
Adding a patch for ocaml I forgot (mips related)
svn path=/nixpkgs/branches/stdenv-updates/; revision=24159
Diffstat (limited to 'pkgs/development/compilers/ocaml')
-rw-r--r--pkgs/development/compilers/ocaml/mips64.patch204
1 files changed, 204 insertions, 0 deletions
diff --git a/pkgs/development/compilers/ocaml/mips64.patch b/pkgs/development/compilers/ocaml/mips64.patch
new file mode 100644
index 00000000000..adfebe000d0
--- /dev/null
+++ b/pkgs/development/compilers/ocaml/mips64.patch
@@ -0,0 +1,204 @@
+http://www.mail-archive.com/caml-list@yquem.inria.fr/msg04424.html
+
+diff -u -r ocaml-3.11.1/asmcomp/mips/arch.ml my_ocaml/asmcomp/mips/arch.ml
+--- ocaml-3.11.1/asmcomp/mips/arch.ml 2002-11-29 16:03:36.000000000 +0100
++++ my_ocaml/asmcomp/mips/arch.ml 2009-08-09 23:18:31.000000000 +0200
+@@ -35,7 +35,7 @@
+ 
+ let big_endian =
+   match Config.system with
+-    "ultrix" -> false
++    "ultrix" | "gnu" -> false
+   | "irix" -> true
+   | _ -> fatal_error "Arch_mips.big_endian"
+ 
+diff -u -r ocaml-3.11.1/asmcomp/mips/emit.mlp my_ocaml/asmcomp/mips/emit.mlp
+--- ocaml-3.11.1/asmcomp/mips/emit.mlp  2004-01-05 21:25:56.000000000 +0100
++++ my_ocaml/asmcomp/mips/emit.mlp  2009-08-23 12:11:58.000000000 +0200
+@@ -252,7 +252,7 @@
+     | Lop(Icall_ind) ->
+         `  move  $25, {emit_reg i.arg.(0)}\n`;
+         liveregs i live_25;
+-        `  jal {emit_reg i.arg.(0)}\n`;
++        `  jal $25\n`; (* {emit_reg i.arg.(0)}\n; Equivalent but avoids "Warning: MIPS PIC call to register other than $25" on GNU as *)
+         `{record_frame i.live}\n`
+     | Lop(Icall_imm s) ->
+         liveregs i 0;
+@@ -269,7 +269,7 @@
+         liveregs i 0;
+         `  move  $25, {emit_reg i.arg.(0)}\n`;
+         liveregs i live_25;
+-        `  j {emit_reg i.arg.(0)}\n`
++        `  j $25\n`
+     | Lop(Itailcall_imm s) ->
+         if s = !function_name then begin
+           `  b {emit_label !tailrec_entry_point}\n`
+@@ -277,11 +277,11 @@
+           let n = frame_size() in
+           if !contains_calls then
+             `  lw  $31, {emit_int(n - 4)}($sp)\n`;
++          `  la  $25, {emit_symbol s}\n`;
+           if !uses_gp then
+             `  lw  $gp, {emit_int(n - 8)}($sp)\n`;
+           if n > 0 then
+             `  addu  $sp, $sp, {emit_int n}\n`;
+-          `  la  $25, {emit_symbol s}\n`;
+           liveregs i live_25;
+           `  j $25\n`
+         end
+@@ -305,8 +305,13 @@
+         begin match chunk with
+           Double_u ->
+             (* Destination is not 8-aligned, hence cannot use l.d *)
+-            `  ldl $24, {emit_addressing addr i.arg 0}\n`;
+-            `  ldr $24, {emit_addressing (offset_addressing addr 7) i.arg 0}\n`;
++            if big_endian then begin
++              `  ldl $24, {emit_addressing addr i.arg 0}\n`;
++              `  ldr $24, {emit_addressing (offset_addressing addr 7) i.arg 0}\n`
++            end else begin
++              `  ldl $24, {emit_addressing (offset_addressing addr 7) i.arg 0}\n`;
++              `  ldr $24, {emit_addressing addr i.arg 0}\n`
++            end;
+             `  dmtc1 $24, {emit_reg dest}\n`
+         | Single ->
+             `  l.s {emit_reg dest}, {emit_addressing addr i.arg 0}\n`;
+@@ -328,8 +333,13 @@
+           Double_u ->
+             (* Destination is not 8-aligned, hence cannot use l.d *)
+             `  dmfc1 $24, {emit_reg src}\n`;
+-            `  sdl $24, {emit_addressing addr i.arg 1}\n`;
+-            `  sdr $24, {emit_addressing (offset_addressing addr 7) i.arg 1}\n`
++            if big_endian then begin
++              `  sdl $24, {emit_addressing addr i.arg 1}\n`;
++              `  sdr $24, {emit_addressing (offset_addressing addr 7) i.arg 1}\n`
++            end else begin
++              `  sdl $24, {emit_addressing (offset_addressing addr 7) i.arg 1}\n`;
++              `  sdr $24, {emit_addressing addr i.arg 1}\n`
++            end
+         | Single ->
+             `  cvt.s.d $f31, {emit_reg src}\n`;
+             `  s.s $f31, {emit_addressing addr i.arg 1}\n`
+@@ -552,16 +562,18 @@
+   (* There are really two groups of registers:
+       $sp and $30 always point to stack locations
+       $2 - $21 never point to stack locations. *)
+-  `  .noalias $2,$sp;  .noalias $2,$30;  .noalias $3,$sp;  .noalias $3,$30\n`;
+-  `  .noalias $4,$sp;  .noalias $4,$30;  .noalias $5,$sp;  .noalias $5,$30\n`;
+-  `  .noalias $6,$sp;  .noalias $6,$30;  .noalias $7,$sp;  .noalias $7,$30\n`;
+-  `  .noalias $8,$sp;  .noalias $8,$30;  .noalias $9,$sp;  .noalias $9,$30\n`;
+-  `  .noalias $10,$sp; .noalias $10,$30; .noalias $11,$sp; .noalias $11,$30\n`;
+-  `  .noalias $12,$sp; .noalias $12,$30; .noalias $13,$sp; .noalias $13,$30\n`;
+-  `  .noalias $14,$sp; .noalias $14,$30; .noalias $15,$sp; .noalias $15,$30\n`;
+-  `  .noalias $16,$sp; .noalias $16,$30; .noalias $17,$sp; .noalias $17,$30\n`;
+-  `  .noalias $18,$sp; .noalias $18,$30; .noalias $19,$sp; .noalias $19,$30\n`;
+-  `  .noalias $20,$sp; .noalias $20,$30; .noalias $21,$sp; .noalias $21,$30\n\n`;
++  if Config.system = "irix" then begin
++    `  .noalias $2,$sp;  .noalias $2,$30;  .noalias $3,$sp;  .noalias $3,$30\n`;
++    `  .noalias $4,$sp;  .noalias $4,$30;  .noalias $5,$sp;  .noalias $5,$30\n`;
++    `  .noalias $6,$sp;  .noalias $6,$30;  .noalias $7,$sp;  .noalias $7,$30\n`;
++    `  .noalias $8,$sp;  .noalias $8,$30;  .noalias $9,$sp;  .noalias $9,$30\n`;
++    `  .noalias $10,$sp; .noalias $10,$30; .noalias $11,$sp; .noalias $11,$30\n`;
++    `  .noalias $12,$sp; .noalias $12,$30; .noalias $13,$sp; .noalias $13,$30\n`;
++    `  .noalias $14,$sp; .noalias $14,$30; .noalias $15,$sp; .noalias $15,$30\n`;
++    `  .noalias $16,$sp; .noalias $16,$30; .noalias $17,$sp; .noalias $17,$30\n`;
++    `  .noalias $18,$sp; .noalias $18,$30; .noalias $19,$sp; .noalias $19,$30\n`;
++    `  .noalias $20,$sp; .noalias $20,$30; .noalias $21,$sp; .noalias $21,$30\n\n`
++  end;
+   let lbl_begin = Compilenv.make_symbol (Some "data_begin") in
+   `  .data\n`;
+   `  .globl  {emit_symbol lbl_begin}\n`;
+diff -u -r ocaml-3.11.1/asmrun/mips.s my_ocaml/asmrun/mips.s
+--- ocaml-3.11.1/asmrun/mips.s  2004-07-13 14:18:53.000000000 +0200
++++ my_ocaml/asmrun/mips.s  2009-08-20 09:34:36.000000000 +0200
+@@ -187,7 +187,7 @@
+         sw      $30, caml_exception_pointer
+     /* Call C function */
+         move    $25, $24
+-        jal     $24
++        jal     $25
+     /* Reload return address, alloc ptr, alloc limit */
+         lw      $31, 0($16)     /* caml_last_return_address */
+         lw      $22, 0($17)     /* caml_young_ptr */
+@@ -254,7 +254,7 @@
+         sw      $0, caml_last_return_address
+     /* Call the Caml code */
+         move    $25, $24
+-        jal     $24
++        jal     $25
+ $104:
+     /* Pop the trap frame, restoring caml_exception_pointer */
+         lw      $24, 0($sp)
+diff -u -r ocaml-3.11.1/configure my_ocaml/configure
+--- ocaml-3.11.1/configure  2009-05-20 17:33:09.000000000 +0200
++++ my_ocaml/configure  2009-08-23 10:55:44.000000000 +0200
+@@ -40,7 +40,7 @@
+ verbose=no
+ withcurses=yes
+ withsharedlibs=yes
+-gcc_warnings="-Wall"
++gcc_warnings="-W -Wall"
+ partialld="ld -r"
+ 
+ # Try to turn internationalization off, can cause config.guess to malfunction!
+@@ -292,6 +292,9 @@
+     # (For those who want to force "cc -64")
+     # Turn off warning "unused library"
+     bytecclinkopts="-Wl,-woff,84";;
++  gcc*,mips64el-*)
++    bytecccompopts=""
++    bytecclinkopts="-fno-defer-pop $gcc_warnings -Wl,-O1 -Wl,--as-needed";;
+   *,alpha*-*-unicos*)
+     # For the Cray T3E
+     bytecccompopts="-DUMK";;
+@@ -468,6 +471,8 @@
+         echo "64-bit integers must be doubleword-aligned."
+         echo "#define ARCH_ALIGN_INT64" >> m.h
+       fi;;
++    mips64el-*)
++     echo "#define ARCH_ALIGN_INT64" >> m.h;;
+     *)
+       sh ./runtest int64align.c
+       case $? in
+@@ -636,6 +641,7 @@
+                                 fi;;
+   i[3456]86-*-gnu*)             arch=i386; system=gnu;;
+   mips-*-irix6*)                arch=mips; system=irix;;
++  mips*-gnu*)                   arch=mips; system=gnu;;
+   hppa1.1-*-hpux*)              arch=hppa; system=hpux;;
+   hppa2.0*-*-hpux*)             arch=hppa; system=hpux;;
+   hppa*-*-linux*)               arch=hppa; system=linux;;
+@@ -672,7 +678,7 @@
+ if test -z "$ccoption"; then
+   case "$arch,$system,$cc" in
+     alpha,digital,gcc*) nativecc=cc;;
+-    mips,*,gcc*) nativecc=cc;;
++    mips,irix,gcc*) nativecc=cc;;
+     *) nativecc="$bytecc";;
+   esac
+ else
+@@ -687,6 +693,9 @@
+   alpha,cc*,digital,*) nativecccompopts=-std1;;
+   mips,cc*,irix,*)     nativecccompopts=-n32
+                        nativecclinkopts="-n32 -Wl,-woff,84";;
++  mips,gcc*,gnu,mips64el-*)
++                       nativecccompopts="$gcc_warnings -fPIC"
++                       nativecclinkopts="--as-needed";;
+   *,*,nextstep,*)      nativecccompopts="$gcc_warnings -U__GNUC__ -posix"
+                        nativecclinkopts="-posix";;
+   *,*,rhapsody,*darwin[1-5].*)
+@@ -725,6 +734,8 @@
+                     aspp='gcc -c -Wa,-xexplicit';;
+   mips,*,irix)      as='as -n32 -O2 -nocpp -g0'
+                     aspp='as -n32 -O2';;
++  mips,*,gnu)       as='as -KPIC'
++                    aspp='gcc -c -fPIC';;  # got bus error without fPIC ?
+   power,*,elf)      as='as -u -m ppc'
+                     aspp='gcc -c';;
+   power,*,bsd)      as='as'
+@@ -756,6 +767,7 @@
+     case "$nativecc" in gcc*) ;; *) cc_profile='-xpg';; esac;;
+   amd64,*,linux) profiling='prof';;
+   amd64,*,gnu) profiling='prof';;
++  mips,*,gnu) profiling='prof';;
+   *) profiling='noprof';;
+ esac