-/* Copyright (C) 1985, 1986, 1987, 1988, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1985, 1986, 1987, 1988, 1992, 1993 Free Software Foundation, Inc.
This file is part of GNU Emacs.
GNU Emacs is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 1, or (at your option)
+the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Emacs is distributed in the hope that it will be useful,
#define PERROR(arg) perror (arg); return -1
#else
#define IN_UNEXEC
-#include "config.h"
+#include <config.h>
#define PERROR(file) report_error (file, new)
#endif
#else /* not COFF */
+#ifdef HPUX
+extern void *sbrk ();
+#else
+#if 0
+/* Some systems with __STDC__ compilers still declare this `char *' in some
+ header file, and our declaration conflicts. The return value is always
+ cast, so it should be harmless to leave it undefined. Hopefully
+ machines with different size pointers and ints declare sbrk in a header
+ file. */
#ifdef __STDC__
extern void *sbrk ();
#else
extern char *sbrk ();
+#endif /* __STDC__ */
#endif
+#endif /* HPUX */
#define SYMS_START ((long) N_SYMOFF (ohdr))
#else /* not HPUX */
-#if defined (USG) && !defined (IBMAIX) && !defined (IRIS) && !defined (COFF_ENCAPSULATE)
+#if defined (USG) && !defined (IBMAIX) && !defined (IRIS) && !defined (COFF_ENCAPSULATE) && !defined (LINUX)
static struct bhdr hdr, ohdr;
#define a_magic fmagic
#define a_text tsize
* space.
*/
- bias = bss_end - (f_ohdr.data_start + f_dhdr.s_size);
+ bias = bss_start - (f_ohdr.data_start + f_dhdr.s_size);
#endif
* .lib), adjust the address of where the section data is in the
* file, and write out the header.
*
- * If any section preceeds .text or .data in the file, this code
+ * If any section precedes .text or .data in the file, this code
* will not adjust the file pointer for that section correctly.
*/
*/
ERROR0 ("can't build a COFF file from scratch yet");
#else
- bzero (hdr, sizeof hdr);
+ bzero (&hdr, sizeof hdr);
#endif
}
{
n = size > sizeof (page) ? sizeof (page) : size;
if (read (a_out, page, n) != n || write (new, page, n) != n)
- PERROR ("xemacs");
+ PERROR ("emacs");
}
lseek (a_out, old_a_out_ptr, 0);
}
/* ****************************************************************
* mark_x
*
- * After succesfully building the new a.out, mark it executable
+ * After successfully building the new a.out, mark it executable
*/
static void
mark_x (name)
{
read (new, &auxentry, AUXESZ);
nsyms++;
- if (ISFCN (symentry.n_type)) {
- auxentry.x_sym.x_fcnary.x_fcn.x_lnnoptr += bias;
- lseek (new, -AUXESZ, 1);
- write (new, &auxentry, AUXESZ);
- }
+ if (ISFCN (symentry.n_type) || symentry.n_type == 0x2400)
+ {
+ auxentry.x_sym.x_fcnary.x_fcn.x_lnnoptr += bias;
+ lseek (new, -AUXESZ, 1);
+ write (new, &auxentry, AUXESZ);
+ }
}
}
close (new);