Tue Jun 11 23:23:30 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
authorRoland McGrath <roland@gnu.org>
Wed, 12 Jun 1996 04:00:32 +0000 (04:00 +0000)
committerRoland McGrath <roland@gnu.org>
Wed, 12 Jun 1996 04:00:32 +0000 (04:00 +0000)
* Makerules (LDFLAGS-c.so): Use __libc_main instead of
__libc_print_version as entry point for shared object.
* version.c [HAVE_ELF] (__libc_main): New function.

* elf/dl-load.c (_dl_map_object_from_fd): Relocate l_entry with the
load address.

ChangeLog
Makerules
elf/dl-load.c
version.c

index 0eb13bd..1adcc3f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+Tue Jun 11 23:23:30 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>
+
+       * Makerules (LDFLAGS-c.so): Use __libc_main instead of
+       __libc_print_version as entry point for shared object.
+       * version.c [HAVE_ELF] (__libc_main): New function.
+
+       * elf/dl-load.c (_dl_map_object_from_fd): Relocate l_entry with the
+       load address.
+
 Tue Jun 11 19:13:04 1996  Richard Henderson  <rth@tamu.edu>
 
        * elf/dl-close.c: Include <string.h> for memcpy.
index 5320ff4..412b217 100644 (file)
--- a/Makerules
+++ b/Makerules
@@ -491,7 +491,7 @@ endef
 # since we define our own `.init' section specially.
 LDFLAGS-c.so = -nostdlib -nostartfiles
 # Give libc.so an entry point and make it directly runnable itself.
-LDFLAGS-c.so += -e __libc_print_version
+LDFLAGS-c.so += -e __libc_main
 # Use our own special initializer and finalizer files for libc.so.
 elfobjdir := $(firstword $(objdir) $(patsubst ../$(subdir),.,$(..)elf))
 $(common-objpfx)libc.so: $(elfobjdir)/soinit.so \
index b9f4aa1..4821073 100644 (file)
@@ -357,6 +357,8 @@ _dl_map_object_from_fd (const char *name, int fd, char *realname,
     l->l_phdr = (void *) ((const ElfW(Ehdr) *) l->l_addr)->e_phoff;
   (ElfW(Addr)) l->l_phdr += l->l_addr;
 
+  l->l_entry += l->l_addr;
+
   elf_get_dynamic_info (l->l_ld, l->l_info);
   if (l->l_info[DT_HASH])
     _dl_setup_hash (l);
index 3405ed5..e62504d 100644 (file)
--- a/version.c
+++ b/version.c
@@ -36,6 +36,20 @@ This is free software; see the source for copying conditions.\n\
 There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n\
 PARTICULAR PURPOSE.");
 }
+
+#ifdef HAVE_ELF
+/* This function is the entry point for the shared object.
+   Running the library as a program will get here.  */
+
+#include <stdlib.h>
+
+void
+__libc_main (void)
+{
+  __libc_print_version ();
+  exit (0);
+}
+#endif
 \f
 /*
    Local Variables: