Source-Changes-HG archive

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

[src/trunk]: src/sys/compat/osf1 update for current reality



details:   https://anonhg.NetBSD.org/src/rev/d9b75ba879c5
branches:  trunk
changeset: 472323:d9b75ba879c5
user:      cgd <cgd%NetBSD.org@localhost>
date:      Tue Apr 27 16:08:40 1999 +0000

description:
update for current reality

diffstat:

 sys/compat/osf1/README.dynamic |  110 +++++++++++++++-------------------------
 1 files changed, 42 insertions(+), 68 deletions(-)

diffs (126 lines):

diff -r 696efc141125 -r d9b75ba879c5 sys/compat/osf1/README.dynamic
--- a/sys/compat/osf1/README.dynamic    Tue Apr 27 15:42:37 1999 +0000
+++ b/sys/compat/osf1/README.dynamic    Tue Apr 27 16:08:40 1999 +0000
@@ -1,80 +1,54 @@
-$NetBSD: README.dynamic,v 1.2 1999/04/27 06:39:49 cgd Exp $
-
-XXX As of right now, dynamically linked programs are supported, and
-XXX this document is out of date.  I'll update it when i get the chance.
+$NetBSD: README.dynamic,v 1.3 1999/04/27 16:08:40 cgd Exp $
 
-Currently, the NetBSD OSF/1 emulation code only supports statically
-linked OSF/1 binaries.  This document is meant to be a quick
-description of what would need to happen to support dynamically linked
-OSF/1 binaries, and to provide an indication of the amount of work
-that would be required to add such support.
+Dynamically linked programs are supported by NetBSD's Digital UNIX
+(formerly DEC OSF/1) emulation.  The OSF/1 dynamic linker scheme is
+described in fair detail in:
 
-To support dynamically linked OSF/1 binaries, three steps would have
-to be taken:
-       (1) The osf1_exec_with_loader() syscall emulation code would
-               have to be written.
-       (2) Execve() would have to be changed to support invocation of
-               a loader for dynamically linked binaries.
-       (3) The pmap code would have to be extended to allow process
-               virtual spaces that are much larger than are currently
-               allowed.
-
-1. Implementing osf1_exec_with_loader().
-
-The description of osf1_exec_with_loader is as follows:
+       %A Larry W. Allen
+       %A Harminder G. Singh
+       %A Kevin G. Wallace
+       %A Melanie B. Weaver
+       %T Program Loading in OSF/1
+       %P 145-160
+       %I USENIX
+       %B USENIX Conference Proceedings
+       %D January 21-25, 1991
+       %C Dallas, TX
+       %W Open Software Foundation
 
-       int exec_with_loader(int flags, const char *loader,
-               const char *file, char * const argv[],
-               char * const envp[]);
+Additionally, the object file formats in use are described in the
+Digital UNIX _Assembly Language Programmer's Guide_ which can be
+found (among other places) on a version-specific page off of:
 
-It invokes the program named by file, with the given argv and envp,
-by starting the specified loader (or /sbin/loader) and somehow passing
-the flags, file name, argv, and envp in such a way that the
-appropriate things will happen with them.  This interface is
-completely undocumented (in the documentation that we have available),
-and so the only way to figure it out is to disassemble the OSF/1
-kernel and/or /sbin/loader.
+       http://www.unix.digital.com/faqs/publications/pub_page/doc_list.html
 
-2. Changing execve() to support OSF/1 dynamically linked executables.
+Finally, the actual representation of Auxiliary Vectors came from information
+in the Digital UNIX auxv.h header file.
 
-Normally, dynamically linked executables are invoked using execve(),
-in the normal fashion.  The kernel transforms that request into one
-that uses the loader, and causes the loader to be invoked with the
-appropriate information to run the target executable.
+There are at least two potential issues with the implementation as it
+currently exists:
+
+1. exec_with_loader() is not emulated.
 
-The mechanism by which this is done is unknown; it may be possible to
-completely replace the OSF/1 loader with one designed for NetBSD, but
-that is rather prohibitive.  (Additionally, it wouldn't solve the
-problem of needing to implement the osf1_exec_with_loader()
-functionality.)
+       Most uses of dynamically linked programs come through execve()
+       and use the default loader (/sbin/loader).  In Digital UNIX
+       (and OSF/1) you can also force a specific loader to always be
+       invoked to load an executable by using the exec_with_loader()
+       system call.  Few, if any, programs use this feature.
 
-In any case, this would not be insignificant; it and/or the
-implementation of osf1_exec_with_loader() would probably require a
-complete rewrite or duplication of the current execve() code.
-
-3. Extending the pmap code to handle larger virtual spaces.
+2. It is not immediately obvious that the right values are used for
+   text and data locations when invoking a dynamically linked executable.
 
-OSF/1's /sbin/loader wants to be loaded at 0x3ff80000000.  Currently,
-because of a simplifying assumption (specifically, to only use the
-first level-one pte for user-space mappings, effectively turning the
-pmap into one that looks much like one for a mc68030), only 8Gb
-(0x200000000 bytes) of user virtual space are supported.
-
-It is unclear that the extra virtual space is necessary for any
-applications that NetBSD/Alpha would be used for, and support for it
-would add a significant amount of complexity to the pmap module.
-Adding that support would probably require a from-scratch rewrite of
-the pmap module.
+       The text and data sections, and the break, are set up as if
+       /sbin/loader itself had been executed.  It's not clear that this
+       is correct, but /sbin/loader seems to expect that at least the
+       break will be set up this way.
 
+       This has certain implications for the way mmap() behaves.  See
+       the comment in the osf1_mmap() function in osf1_misc.c.
 
-Because of the difficulties in emulating the system call interface
-used to run dynamic executables, and the difficulties in allowing
-support for the address space the OSF/1 loader needs, I do not think
-that it is feasible to support dynamically linked OSF/1 executables
-with the OSF/1 loading mechanism.  It may be possible to do so with a
-new loading mechanism which could be written for NetBSD, but it is
-unclear that the necessary interfaces to do even that could be
-discovered, and the effort required to implement a new loading
-mechanism would be prohibitive.
+3. The stack location is used is the normal NetBSD/alpha stack location.
 
--- cgd
+       No attempt is made to put the stack in the place where
+       Digital UNIX would normally put it.  This may confuse some
+       programs.



Home | Main Index | Thread Index | Old Index