This is the mail archive of the libc-hacker@sourceware.cygnus.com mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: RFC: Hurd startup code in current glibc development version


   Date: Mon, 22 Jun 1998 11:00:53 -0400
   From: tb@MIT.EDU (Thomas Bushnell, n/BSG)

   I agree with you on all counts.  Thanks for doing this work; can you
   submit the patches so they can make it into the libc source?

Ok, here we go.

These changes implement seperate startup code for statically linked
binaries under the Hurd.  There are some additional changes to the
part of the startup code that is included in `libc.a' itself, that
parallel changes made to the generic/Linux-specific code.  I haven't
tested yet if crt0.o is properly installed, due to a lack of
disk-space.

Note that in order to make gcc pick up the correct startup code, one
needs to make some changes to the gcc specs file.  Once this code is
stable, I will report the change to the gcc maintainers.

Mark

PS After looking at the latest changes checked in by Uli yesterday, I
realize that __libc_uid is no longer necessary, and should be
eliminated.  Unfortunately my sources sit on my PC at home so I cannot
generate a new patch right now.


1998-06-20  Mark Kettenis  <kettenis@phys.uva.nl>

	* sysdeps/mach/hurd/i386/Makefile: New file.
	* sysdeps/mach/hurd/i386/init-first.c (__libc_uid): New
	variable.
	[!PIC] (init1): Call __libc_init_secure.
	(_hurd_stack_setup): Renamed
	from __libc_init_first.
	(__libc_init_first): New function.
	* sysdeps/mach/hurd/i386/static-start.S: New file.

1998-05-30  Mark Kettenis  <kettenis@phys.uva.nl>

	* sysdeps/mach/hurd/i386/init-first.c


Index: sysdeps/mach/hurd/i386/init-first.c
--- sysdeps/mach/hurd/i386/init-first.c.orig Sun, 31 May 1998 11:39:24 +0200 kettenis (libc/13_init-first 1.1 644) 0.17
+++ sysdeps/mach/hurd/i386/init-first.c      Sat, 20 Jun 1998 11:04:19 +0200 kettenis (libc/13_init-first 1.4 644) local.32(w)
@@ -1,5 +1,5 @@
 /* Initialization code run first thing by the ELF startup code.  For i386/Hurd.
-   Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+   Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -21,11 +21,13 @@
 #include <stdio.h>
 #include <unistd.h>
 #include <string.h>
+#include <sysdep.h>
+#include <set-hooks.h>
 #include "hurdstartup.h"
-#include "set-hooks.h"
 #include "hurdmalloc.h"		/* XXX */
 
 extern void __mach_init (void);
+extern void __libc_init_secure (void);
 extern void __libc_init (int, char **, char **);
 extern void __getopt_clean_environment (char **);
 extern void __libc_global_ctors (void);
@@ -39,8 +41,9 @@
 extern int __libc_argc;
 extern char **__libc_argv;
 
-/* We often need the PID.  Cache this value.  */
-pid_t __libc_pid;
+/* We often need the PID and UID.  Cache this value.  */
+pid_t __libc_pid = 0xf00baa;
+uid_t __libc_uid = 0xf00baa;
 
 void *(*_cthread_init_routine) (void); /* Returns new SP to use.  */
 void (*_cthread_exit_routine) (int status) __attribute__ ((__noreturn__));
@@ -59,6 +62,7 @@
   __libc_argc = argc;
   __libc_argv = argv;
   __environ = envp;
+
   while (*envp)
     ++envp;
   d = (void *) ++envp;
@@ -106,6 +110,10 @@
 		d->portarray, d->portarraysize,
 		d->intarray, d->intarraysize);
 
+#ifndef PIC
+  __libc_init_secure ();
+#endif
+
   __libc_init (argc, argv, __environ);
 
   /* This is a hack to make the special getopt in GNU libc working.  */
@@ -214,8 +222,6 @@
    pointer in the dynamic section based solely on that.  It is convention
    for this function to be in the `.init' section, but the symbol name is
    the only thing that really matters!!  */
-/*void _init (int argc, ...) __attribute__ ((unused, section (".init")));*/
-
 void
 _init (int argc, ...)
 {
@@ -231,6 +237,12 @@
 
 void
 __libc_init_first (int argc __attribute__ ((unused)), ...)
+{
+}
+
+
+void
+_hurd_stack_setup (int argc __attribute__ ((unused)), ...)
 {
 #ifndef PIC
   void doinit (int *data)
Index: sysdeps/mach/hurd/i386/static-start.S
--- sysdeps/mach/hurd/i386/static-start.S.orig Tue, 23 Jun 1998 01:05:15 +0200 kettenis ()
+++ sysdeps/mach/hurd/i386/static-start.S      Tue, 23 Jun 1998 01:04:41 +0200 kettenis (libc/24_static-sta 1.1 644)
@@ -0,0 +1,28 @@
+/* Startup code for statically linked Hurd/i386 binaries.
+   Copyright (C) 1998 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+	.text
+	.globl _start
+_start:
+	call _hurd_stack_setup
+	xorl %edx, %edx
+	jmp _start1
+
+#define _start _start1
+#include <sysdeps/i386/elf/start.S>
Index: sysdeps/mach/hurd/i386/Makefile
--- sysdeps/mach/hurd/i386/Makefile.orig Tue, 23 Jun 1998 01:05:15 +0200 kettenis ()
+++ sysdeps/mach/hurd/i386/Makefile      Mon, 22 Jun 1998 21:03:08 +0200 kettenis (libc/25_Makefile 1.1 644)
@@ -0,0 +1,7 @@
+ifeq ($(subdir),csu)
+extra-objs += crt0.o
+install-lib += crt0.o
+
+$(objpfx)crt0.o: $(objpfx)static-start.o $(objpfx)abi-note.o $(objpfx)init.o
+	$(link-relocatable)
+endif



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]