HCoop
/
bpt
/
emacs.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
(Fsingle_key_description): For an invalid char, retuen
[bpt/emacs.git]
/
src
/
unexsunos4.c
diff --git
a/src/unexsunos4.c
b/src/unexsunos4.c
index
7b97d07
..
19d982f
100644
(file)
--- a/
src/unexsunos4.c
+++ b/
src/unexsunos4.c
@@
-1,5
+1,6
@@
/* Unexec for Sunos 4 using shared libraries.
/* Unexec for Sunos 4 using shared libraries.
- Copyright (C) 1990, 1994 Free Software Foundation, Inc.
+ Copyright (C) 1990, 1994, 1999, 2002, 2003, 2004,
+ 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Emacs.
This file is part of GNU Emacs.
@@
-15,7
+16,8
@@
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Emacs; see the file COPYING. If not, write to
You should have received a copy of the GNU General Public License
along with GNU Emacs; see the file COPYING. If not, write to
-the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
+the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+Boston, MA 02110-1301, USA. */
/* Contributed by Viktor Dukhovni. */
/*
/* Contributed by Viktor Dukhovni. */
/*
@@
-42,6
+44,11
@@
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
* is somewhat abused here) is loaded first!
*
*/
* is somewhat abused here) is loaded first!
*
*/
+
+#ifdef emacs
+#include <config.h>
+#endif
+
#include <sys/param.h>
#include <sys/mman.h>
#include <sys/file.h>
#include <sys/param.h>
#include <sys/mman.h>
#include <sys/file.h>
@@
-50,12
+57,6
@@
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#include <stdio.h>
#include <a.out.h>
#include <stdio.h>
#include <a.out.h>
-/* Do this after the above #include's in case a configuration file wants
- to define things for this file based on what <a.out.h> defines. */
-#ifdef emacs
-#include <config.h>
-#endif
-
#if defined (SUNOS4) || defined (__FreeBSD__) || defined (__NetBSD__)
#define UNDO_RELOCATION
#endif
#if defined (SUNOS4) || defined (__FreeBSD__) || defined (__NetBSD__)
#define UNDO_RELOCATION
#endif
@@
-98,7
+99,7
@@
static int rd_only_len;
static long cookie;
static long cookie;
-unexec (new_name, a_name, bndry, bss_start, entry)
+unexec (new_name, a_name, bndry, bss_start, entry)
char *new_name, *a_name;
unsigned bndry, bss_start, entry;
{
char *new_name, *a_name;
unsigned bndry, bss_start, entry;
{
@@
-163,7
+164,7
@@
unexec (new_name, a_name, bndry, bss_start, entry)
/* Have to do this some time before dumping the data */
initialized = 1;
#endif
/* Have to do this some time before dumping the data */
initialized = 1;
#endif
-
+
/* Handle new data and bss sizes and optional new entry point.
No one actually uses bss_start and entry, but tradition compels
one to support them.
/* Handle new data and bss sizes and optional new entry point.
No one actually uses bss_start and entry, but tradition compels
one to support them.
@@
-171,7
+172,7
@@
unexec (new_name, a_name, bndry, bss_start, entry)
but the caller is *supposed* to know what she is doing. */
nhdr.a_data = (bss_start ? bss_start : brk_value) - N_DATADDR (nhdr);
nhdr.a_bss = bss_start ? brk_value - bss_start : 0;
but the caller is *supposed* to know what she is doing. */
nhdr.a_data = (bss_start ? bss_start : brk_value) - N_DATADDR (nhdr);
nhdr.a_bss = bss_start ? brk_value - bss_start : 0;
- if (entry)
+ if (entry)
nhdr.a_entry = entry;
/*
nhdr.a_entry = entry;
/*
@@
-215,10
+216,14
@@
unexec (new_name, a_name, bndry, bss_start, entry)
unsigned long daddr = N_DATADDR (ohdr);
unsigned long rel, erel;
#ifdef SUNOS4
unsigned long daddr = N_DATADDR (ohdr);
unsigned long rel, erel;
#ifdef SUNOS4
+#ifdef SUNOS4_SHARED_LIBRARIES
extern struct link_dynamic _DYNAMIC;
/* SunOS4.x's ld_rel is relative to N_TXTADDR. */
extern struct link_dynamic _DYNAMIC;
/* SunOS4.x's ld_rel is relative to N_TXTADDR. */
- if (_DYNAMIC.ld_version < 2)
+ if (!ohdr.a_dynamic)
+ /* This was statically linked. */
+ rel = erel = 0;
+ else if (_DYNAMIC.ld_version < 2)
{
rel = _DYNAMIC.ld_un.ld_1->ld_rel + N_TXTADDR (ohdr);
erel = _DYNAMIC.ld_un.ld_1->ld_hash + N_TXTADDR (ohdr);
{
rel = _DYNAMIC.ld_un.ld_1->ld_rel + N_TXTADDR (ohdr);
erel = _DYNAMIC.ld_un.ld_1->ld_hash + N_TXTADDR (ohdr);
@@
-228,6
+233,9
@@
unexec (new_name, a_name, bndry, bss_start, entry)
rel = _DYNAMIC.ld_un.ld_2->ld_rel + N_TXTADDR (ohdr);
erel = _DYNAMIC.ld_un.ld_2->ld_hash + N_TXTADDR (ohdr);
}
rel = _DYNAMIC.ld_un.ld_2->ld_rel + N_TXTADDR (ohdr);
erel = _DYNAMIC.ld_un.ld_2->ld_hash + N_TXTADDR (ohdr);
}
+#else /* not SUNOS4_SHARED_LIBRARIES */
+ rel = erel = 0;
+#endif /* not SUNOS4_SHARED_LIBRARIES */
#ifdef sparc
#define REL_INFO_TYPE struct reloc_info_sparc
#else
#ifdef sparc
#define REL_INFO_TYPE struct reloc_info_sparc
#else
@@
-289,14
+297,14
@@
run_time_remap (progname)
* First try argv[0], will almost always succeed as shells tend to give
* the full path from the hash list rather than using execvp ()
*/
* First try argv[0], will almost always succeed as shells tend to give
* the full path from the hash list rather than using execvp ()
*/
- if (is_it (progname))
+ if (is_it (progname))
return;
/*
* If argv[0] is a full path and does not exist, not much sense in
* searching further
*/
return;
/*
* If argv[0] is a full path and does not exist, not much sense in
* searching further
*/
- if (strchr (progname, '/'))
+ if (strchr (progname, '/'))
return;
/*
return;
/*
@@
-368,3
+376,6
@@
is_it (filename)
}
return 0;
}
}
return 0;
}
+
+/* arch-tag: 30227420-2c6f-4700-a4f8-9e45e52f53b1
+ (do not change this comment) */