From 463e148b7581de66898a9675fc7dd5dfc88f8b0e Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Wed, 12 Jun 1996 04:00:32 +0000 Subject: [PATCH] Tue Jun 11 23:23:30 1996 Roland McGrath * 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 | 9 +++++++++ Makerules | 2 +- elf/dl-load.c | 2 ++ version.c | 14 ++++++++++++++ 4 files changed, 26 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 0eb13bd181..1adcc3f4cc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +Tue Jun 11 23:23:30 1996 Roland McGrath + + * 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 * elf/dl-close.c: Include for memcpy. diff --git a/Makerules b/Makerules index 5320ff4a9b..412b217184 100644 --- 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 \ diff --git a/elf/dl-load.c b/elf/dl-load.c index b9f4aa184b..48210731cc 100644 --- a/elf/dl-load.c +++ b/elf/dl-load.c @@ -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); diff --git a/version.c b/version.c index 3405ed5a68..e62504d2f9 100644 --- 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 + +void +__libc_main (void) +{ + __libc_print_version (); + exit (0); +} +#endif /* Local Variables: -- 2.11.4.GIT