guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

03/09: gnu: fpc: Fix building on i686-linux.


From: guix-commits
Subject: 03/09: gnu: fpc: Fix building on i686-linux.
Date: Sat, 16 Dec 2023 12:22:43 -0500 (EST)

efraim pushed a commit to branch master
in repository guix.

commit 7b949bc318ef4ce3bfefa00962440d49aac82919
Author: Efraim Flashner <efraim@flashner.co.il>
AuthorDate: Fri Dec 15 15:32:59 2023 +0200

    gnu: fpc: Fix building on i686-linux.
    
    * gnu/packages/pascal.scm (fpc)[source]: Add patch.
    * gnu/packages/patches/fpc-glibc-2.34-compat.patch: New file.
    * gnu/local.mk (dist_patch_DATA): Register it.
    
    Change-Id: I6fde62de63171d7e16754b36db460f4073b1979d
---
 gnu/local.mk                                     |   1 +
 gnu/packages/pascal.scm                          |   3 +-
 gnu/packages/patches/fpc-glibc-2.34-compat.patch | 190 +++++++++++++++++++++++
 3 files changed, 193 insertions(+), 1 deletion(-)

diff --git a/gnu/local.mk b/gnu/local.mk
index 8b4e525206..c404d2f52f 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1183,6 +1183,7 @@ dist_patch_DATA =                                         
\
   %D%/packages/patches/fp16-implicit-double.patch              \
   %D%/packages/patches/fp16-system-libraries.patch             \
   %D%/packages/patches/fpc-reproducibility.patch               \
+  %D%/packages/patches/fpc-glibc-2.34-compat.patch             \
   %D%/packages/patches/fpm-newer-clamp-fix.patch               \
   %D%/packages/patches/freedink-engine-fix-sdl-hints.patch     \
   %D%/packages/patches/freeimage-libtiff-compat.patch          \
diff --git a/gnu/packages/pascal.scm b/gnu/packages/pascal.scm
index 49583c220d..47fec7f417 100644
--- a/gnu/packages/pascal.scm
+++ b/gnu/packages/pascal.scm
@@ -76,7 +76,8 @@
               (sha256
                (base32
                 "07qna2pvlpa7j0i2wdixjxpizdvffv51nbr1waczk0xv8cq9kvw5"))
-              (patches (search-patches "fpc-reproducibility.patch"))
+              (patches (search-patches "fpc-reproducibility.patch"
+                                       "fpc-glibc-2.34-compat.patch"))
               (modules '((guix build utils)))
               (snippet
                '(begin
diff --git a/gnu/packages/patches/fpc-glibc-2.34-compat.patch 
b/gnu/packages/patches/fpc-glibc-2.34-compat.patch
new file mode 100644
index 0000000000..4d78d6e028
--- /dev/null
+++ b/gnu/packages/patches/fpc-glibc-2.34-compat.patch
@@ -0,0 +1,190 @@
+https://sources.debian.org/data/main/f/fpc/3.2.2%2Bdfsg-22/debian/patches/glibc2.34.patch
+
+Description: Adjust startup code for glibc 2.34
+ Based on the corresponding changes made in glibc:
+ 
https://sourceware.org/git/?p=glibc.git;a=commit;h=035c012e32c11e84d64905efaf55e74f704d3668
+Bug: https://gitlab.com/freepascal.org/fpc/source/-/issues/39295
+Author: Graham Inggs <ginggs@debian.org>
+Last-Update: 2022-08-12
+
+--- a/fpcsrc/rtl/linux/powerpc64/cprt0.as
++++ b/fpcsrc/rtl/linux/powerpc64/cprt0.as
+@@ -351,8 +351,8 @@
+ start_addresses:
+     .quad   0 /* was _SDA_BASE_  but not in 64-bit ABI*/
+     .quad   main_stub
+-    .quad   __libc_csu_init
+-    .quad   __libc_csu_fini
++    .quad   0
++    .quad   0
+     .size   start_adresses, .-start_addresses
+ 
+ /*
+--- a/fpcsrc/rtl/linux/powerpc64/gprt0.as
++++ b/fpcsrc/rtl/linux/powerpc64/gprt0.as
+@@ -351,8 +351,8 @@
+ start_addresses:
+     .quad   0 /* was _SDA_BASE_  but not in 64-bit ABI*/
+     .quad   main_stub
+-    .quad   __libc_csu_init
+-    .quad   __libc_csu_fini
++    .quad   0
++    .quad   0
+     .size   start_adresses, .-start_addresses
+ 
+ /*
+--- a/fpcsrc/rtl/linux/aarch64/cprt0.as
++++ b/fpcsrc/rtl/linux/aarch64/cprt0.as
+@@ -41,10 +41,8 @@
+                            init, fini, rtld_fini, stack_end) */
+       adrp    x0,:got:PASCALMAIN
+       ldr     x0,[x0,#:got_lo12:PASCALMAIN]
+-      adrp    x3,:got:__libc_csu_init
+-      ldr     x3,[x3,#:got_lo12:__libc_csu_init]
+-      adrp    x4,:got:__libc_csu_fini
+-      ldr     x4,[x4,#:got_lo12:__libc_csu_fini]
++      mov     x3, #0
++      mov     x4, #0
+       bl      __libc_start_main
+ 
+       /* This should never happen */
+--- a/fpcsrc/rtl/linux/i386/si_c21.inc
++++ b/fpcsrc/rtl/linux/i386/si_c21.inc
+@@ -35,8 +35,6 @@
+ 
+ {$asmmode att}
+ 
+-procedure __libc_csu_init; cdecl; external;
+-procedure __libc_csu_fini; cdecl; external;
+ procedure libc_start_main; external name '__libc_start_main';
+ procedure libc_exit(code: longint); cdecl; external name 'exit';
+ 
+@@ -93,8 +91,8 @@
+         pushl %esp                    { stack_end }
+         pushl %edx                    { function to be registered with
+                                                 atexit(), passed by loader }
+-        pushl $__libc_csu_fini
+-        pushl $__libc_csu_init
++        pushl $0
++        pushl $0
+         pushl %esi                      { Push second argument: argv.  }
+         pushl %ecx                      { Push first argument: argc.  }
+ 
+--- a/fpcsrc/rtl/linux/x86_64/cprt0.as
++++ b/fpcsrc/rtl/linux/x86_64/cprt0.as
+@@ -61,9 +61,8 @@
+          which grow downwards).  */
+       pushq %rsp
+ 
+-      /* Pass address of our own entry points to .fini and .init.  */
+-      movq __libc_csu_init@GOTPCREL(%rip), %rcx
+-      movq __libc_csu_fini@GOTPCREL(%rip), %r8
++      xorl %r8d, %r8d
++      xorl %ecx, %ecx
+ 
+       movq main_stub@GOTPCREL(%rip), %rdi
+ 
+--- a/fpcsrc/rtl/linux/arm/cprt0.as
++++ b/fpcsrc/rtl/linux/arm/cprt0.as
+@@ -82,10 +82,10 @@
+ 
+         /* Set up the other arguments in registers */
+         ldr a1, =PASCALMAIN
+-        ldr a4, =_init
++        ldr a4, = #0
+ 
+         /* Push fini */
+-        str ip, [sp, #-4]!
++        str a4, [sp, #-4]!
+ 
+         /* __libc_start_main (main, argc, argv, init, fini, rtld_fini, 
stack_end) */
+ 
+--- a/fpcsrc/rtl/linux/powerpc64/si_g.inc
++++ b/fpcsrc/rtl/linux/powerpc64/si_g.inc
+@@ -657,9 +657,6 @@
+                           Process start/halt
+  
******************************************************************************}
+ 
+-procedure __libc_csu_init; cdecl; external;
+-procedure __libc_csu_fini; cdecl; external;
+-
+ procedure __libc_start_main(r3,r4,r5,r6,r7,r8,r9: pointer); cdecl; external;
+ 
+ type
+@@ -745,8 +742,8 @@
+   end
+   = (sda_base: nil; {* was _SDA_BASE_  but not in 64-bit ABI }
+      main: @main_stub;
+-     libc_csu_init: @__libc_csu_init;
+-     libc_csu_fini: @__libc_csu_fini
++     libc_csu_init: pointer(0);
++     libc_csu_fini: pointer(0)
+     );
+ 
+ procedure call_libc_start_main(r3,r4,r5,r6,r7,r8,r9: pointer); cdecl;
+--- a/fpcsrc/rtl/linux/powerpc64/si_c.inc
++++ b/fpcsrc/rtl/linux/powerpc64/si_c.inc
+@@ -657,9 +657,6 @@
+                           Process start/halt
+  
******************************************************************************}
+ 
+-procedure __libc_csu_init; cdecl; external;
+-procedure __libc_csu_fini; cdecl; external;
+-
+ procedure __libc_start_main(r3,r4,r5,r6,r7,r8,r9: pointer); cdecl; external;
+ 
+ var
+@@ -724,8 +721,8 @@
+   end
+   = (sda_base: nil; {* was _SDA_BASE_  but not in 64-bit ABI }
+      main: @main_stub;
+-     libc_csu_init: @__libc_csu_init;
+-     libc_csu_fini: @__libc_csu_fini
++     libc_csu_init: pointer(0);
++     libc_csu_fini: pointer(0)
+     );
+ 
+ 
+--- a/fpcsrc/rtl/linux/powerpc/cprt0.as
++++ b/fpcsrc/rtl/linux/powerpc/cprt0.as
+@@ -35,8 +35,8 @@
+ start_addresses:
+     .long     _SDA_BASE_
+     .long     main_stub
+-    .long     __libc_csu_init
+-    .long     __libc_csu_fini
++    .long     0
++    .long     0
+     .size   start_adresses, .-start_addresses
+ 
+     .section ".text"
+--- a/fpcsrc/rtl/linux/mips/cprt0.as
++++ b/fpcsrc/rtl/linux/mips/cprt0.as
+@@ -113,10 +113,9 @@
+  and $29, -2 * 4
+  subu $29, 32
+ 
+- lw $7,%got(__libc_csu_init)($gp) /* init */
+- lw $8,%got(__libc_csu_fini)($gp) /* fini */
++ move $7, $0
+ 
+- sw $8, 16($29)                               /* fini */
++ sw $0, 16($29)
+  sw $2, 20($29)                               /* rtld_fini */
+  sw $29, 24($29)                      /* stack_end */
+ 
+--- a/fpcsrc/rtl/linux/m68k/cprt0.as
++++ b/fpcsrc/rtl/linux/m68k/cprt0.as
+@@ -41,8 +41,10 @@
+ 
+         pea      (%sp)         /* highest available stack address */
+         pea      (%a1)         /* termination function provided by kernel */
+-        pea      __libc_csu_fini
+-        pea      __libc_csu_init
++
++        clr.l    -(%sp)
++        clr.l    -(%sp)
++
+         pea      (%a0)         /* argv */
+         move.l   %d0,-(%sp)    /* argc */
+         pea      PASCALMAIN



reply via email to

[Prev in Thread] Current Thread [Next in Thread]