Browse Source

+ glibc 2.1 support

peter 26 years ago
parent
commit
5ba991d803
3 changed files with 244 additions and 9 deletions
  1. 26 9
      rtl/linux/Makefile
  2. 102 0
      rtl/linux/i386/cprt21.as
  3. 116 0
      rtl/linux/i386/gprt21.as

+ 26 - 9
rtl/linux/Makefile

@@ -59,18 +59,22 @@ PRT=prt1
 endif
 
 LOADERAS=$(CPU)/$(PRT).as
-CLOADERAS=$(CPU)/c$(PRT).as
 GLOADERAS=$(CPU)/g$(PRT).as
 
-LOADEROBJECTS=prt0 cprt0 gprt0
+LOADEROBJECTS=prt0 gprt0
+
+ifndef AOUT
+LOADEROBJECTS+=cprt0 cprt21 gprt21
+endif
+
 
 # Unit Objects
 UNITOBJECTS=$(SYSTEMUNIT) objpas strings \
             linux ports \
             dos crt objects printer graph \
-	    sysutils typinfo math \
-	    cpu mmx getopts heaptrc \
-	    errors sockets graph
+            sysutils typinfo math \
+            cpu mmx getopts heaptrc \
+            errors sockets graph
 
 
 #####################################################################
@@ -175,12 +179,22 @@ vpath %$(PASEXT) $(INC) $(PROCINC)
 prt0$(OEXT) : $(LOADERAS)
 	$(AS) -o prt0$(OEXT) $(LOADERAS)
 
-cprt0$(OEXT) : $(CLOADERAS)
-	$(AS) -o cprt0$(OEXT) $(CLOADERAS)
-
 gprt0$(OEXT) : $(GLOADERAS)
 	$(AS) -o gprt0$(OEXT) $(GLOADERAS)
 
+ifndef AOUT
+
+cprt0$(OEXT) : $(CPU)/cprt1.as
+	$(AS) -o cprt0$(OEXT) $(CPU)/cprt1.as
+
+cprt21$(OEXT) : $(CPU)/cprt21.as
+	$(AS) -o cprt21$(OEXT) $(CPU)/cprt21.as 
+
+gprt21$(OEXT) : $(CPU)/gprt21.as
+	$(AS) -o gprt21$(OEXT) $(CPU)/gprt21.as
+
+endif
+
 #
 # System Units (System, Objpas, Strings)
 #
@@ -259,7 +273,10 @@ ipc$(PPUEXT) : ipc.pp linux$(PPUEXT) $(SYSTEMPPU)
 
 #
 # $Log$
-# Revision 1.20  1999-04-22 10:56:32  peter
+# Revision 1.21  1999-05-03 21:29:35  peter
+#   + glibc 2.1 support
+#
+# Revision 1.20  1999/04/22 10:56:32  peter
 #   * fixed sysutils dependencys
 #   * objpas files are agian in the main Makefile, makefile.op is obsolete
 #

+ 102 - 0
rtl/linux/i386/cprt21.as

@@ -0,0 +1,102 @@
+#
+#   $Id$
+#   This file is part of the Free Pascal run time library.
+#   Copyright (c) 1993,97 by Michael Van Canneyt and Peter Vreman
+#   members of the Free Pascal development team.
+#
+#   See the file COPYING.FPC, included in this distribution,
+#   for details about the copyright.
+#
+#   This program is distributed in the hope that it will be useful,
+#   but WITHOUT ANY WARRANTY;without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#
+#**********************************************************************}
+#
+# Linux ELF startup code for Free Pascal
+#
+
+        .file   "prt1.as"
+        .text
+        .globl  _start
+        .type   _start,@function
+_start:
+        /* First locate the start of the environment variables */
+        popl    %esi
+        movl    %eax,%edi
+
+        movl    %esp,%ebx               /* Points to the arguments */
+        movl    %esi,%eax
+        incl    %eax
+        shll    $2,%eax
+        addl    %esp,%eax
+        andl    $0xfffffff8,%esp        /* Align stack */
+
+        movl    %eax,U_SYSLINUX_ENVP    /* Move the environment pointer */
+        movl    %esi,U_SYSLINUX_ARGC    /* Move the argument counter    */
+        movl    %ebx,U_SYSLINUX_ARGV    /* Move the argument pointer    */
+
+        xorl    %ebp,%ebp
+        pushl   %edi
+        pushl   %esp
+        pushl   %edx
+        pushl   $_fini
+        pushl   $_init
+        pushl   %ebx
+        pushl   %esi
+        pushl   $main
+        call    __libc_start_main
+        hlt
+
+/* fake main routine which will be run from libc */
+main:
+        /* save return address */
+        popl    %eax
+        movl    %eax,___fpc_ret
+        movl    %ebx,___fpc_ret_ebx
+        pushl   %eax
+
+        /* start the program */
+        call    PASCALMAIN
+
+        .globl _haltproc
+        .type _haltproc,@function
+_haltproc:
+        xorl    %eax,%eax               /* load and save exitcode */
+        movw    U_SYSLINUX_EXITCODE,%ax
+
+        movl    ___fpc_ret,%edx         /* return to libc */
+        movl    ___fpc_ret_ebx,%ebx
+        push    %edx
+        ret
+
+.data
+        .align  4
+
+        .globl  ___fpc_brk_addr         /* heap management */
+        .type   ___fpc_brk_addr,@object
+        .size   ___fpc_brk_addr,4
+___fpc_brk_addr:
+        .long   0
+
+___fpc_ret:                             /* return address to libc */
+        .long   0
+___fpc_ret_ebx:
+        .long   0
+
+
+#
+# $Log$
+# Revision 1.1  1999-05-03 21:29:36  peter
+#   + glibc 2.1 support
+#
+# Revision 1.3  1998/11/04 10:16:25  peter
+#   + xorl ebp,ebp to indicate end of backtrace
+#
+# Revision 1.2  1998/10/14 21:28:46  peter
+#   * initialize fpu so sigfpe is finally generated for fpu errors
+#
+# Revision 1.1  1998/08/12 19:16:09  peter
+#   + loader including libc init and exit
+#
+#

+ 116 - 0
rtl/linux/i386/gprt21.as

@@ -0,0 +1,116 @@
+#
+#   $Id$
+#   This file is part of the Free Pascal run time library.
+#   Copyright (c) 1993,97 by Michael Van Canneyt and Peter Vreman
+#   members of the Free Pascal development team.
+#
+#   See the file COPYING.FPC, included in this distribution,
+#   for details about the copyright.
+#
+#   This program is distributed in the hope that it will be useful,
+#   but WITHOUT ANY WARRANTY;without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#
+#**********************************************************************}
+#
+# Linux ELF startup code for Free Pascal
+#
+
+        .file   "prt1.as"
+        .text
+        .globl  _start
+        .type   _start,@function
+_start:
+        /* First locate the start of the environment variables */
+        popl    %esi
+        movl    %eax,%edi
+
+        movl    %esp,%ebx               /* Points to the arguments */
+        movl    %esi,%eax
+        incl    %eax
+        shll    $2,%eax
+        addl    %esp,%eax
+        andl    $0xfffffff8,%esp        /* Align stack */
+
+        movl    %eax,U_SYSLINUX_ENVP    /* Move the environment pointer */
+        movl    %esi,U_SYSLINUX_ARGC    /* Move the argument counter    */
+        movl    %ebx,U_SYSLINUX_ARGV    /* Move the argument pointer    */
+
+        xorl    %ebp,%ebp
+        pushl   %edi
+        pushl   %esp
+        pushl   %edx
+        pushl   $_fini
+        pushl   $_init
+        pushl   %ebx
+        pushl   %esi
+        pushl   $main
+        call    __libc_start_main
+        hlt
+
+/* fake main routine which will be run from libc */
+        .globl  cmain
+        .type   cmain,@object
+cmain:
+        /* save return address */
+        popl    %eax
+        movl    %eax,___fpc_ret
+        movl    %ebx,___fpc_ret_ebx
+        pushl   %eax
+
+        /* start the program */
+        call    PASCALMAIN
+
+        .globl _haltproc
+        .type _haltproc,@function
+_haltproc:
+        xorl    %eax,%eax               /* load and save exitcode */
+        movw    U_SYSLINUX_EXITCODE,%ax
+
+        movl    ___fpc_ret,%edx         /* return to libc */
+        movl    ___fpc_ret_ebx,%ebx
+        push    %edx
+        ret
+
+        .globl  __gmon_start__
+        .type   __gmon_start__,@object
+__gmon_start__:
+        pushl   $etext                  /* Initialize gmon */
+        pushl   $_start
+        call    monstartup
+        addl    $8,%esp
+        pushl   $_mcleanup
+        call    atexit
+        addl    $4,%esp
+        ret
+
+.data
+        .align  4
+
+        .globl  ___fpc_brk_addr         /* heap management */
+        .type   ___fpc_brk_addr,@object
+        .size   ___fpc_brk_addr,4
+___fpc_brk_addr:
+        .long   0
+
+___fpc_ret:                             /* return address to libc */
+        .long   0
+___fpc_ret_ebx:
+        .long   0
+
+
+#
+# $Log$
+# Revision 1.1  1999-05-03 21:29:36  peter
+#   + glibc 2.1 support
+#
+# Revision 1.3  1998/11/04 10:16:25  peter
+#   + xorl ebp,ebp to indicate end of backtrace
+#
+# Revision 1.2  1998/10/14 21:28:46  peter
+#   * initialize fpu so sigfpe is finally generated for fpu errors
+#
+# Revision 1.1  1998/08/12 19:16:09  peter
+#   + loader including libc init and exit
+#
+#