1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-10 15:56:18 +00:00

Undo previous change.

This commit is contained in:
Karl Heuer 1996-07-16 22:39:31 +00:00
parent 9f80a1c889
commit d283640e03
9 changed files with 53 additions and 141 deletions

View File

@ -979,7 +979,7 @@ dnl checks for Unix variants
AC_AIX
dnl checks for header files
AC_CHECK_HEADERS(sys/select.h sys/timeb.h sys/time.h unistd.h utime.h linux/version.h termios.h)
AC_CHECK_HEADERS(sys/select.h sys/timeb.h sys/time.h unistd.h utime.h linux/version.h)
AC_HEADER_STDC
AC_HEADER_TIME
AC_DECL_SYS_SIGLIST

View File

@ -36,10 +36,6 @@ Boston, MA 02111-1307, USA. */
#include <stdio.h>
#ifdef __GNU_LIBRARY__
# include <string.h>
#endif
char *malloc ();
char *realloc ();
char *getenv ();

View File

@ -85,12 +85,7 @@ int
main ()
{
char system_name[32];
int s, infd;
#ifdef __GNU_LIBRARY__
size_t fromlen;
#else
int fromlen;
#endif
int s, infd, fromlen;
struct sockaddr_un server, fromunix;
char *homedir;
char *str, string[BUFSIZ], code[BUFSIZ];

View File

@ -8,10 +8,6 @@
#include <stdio.h>
#include <ctype.h>
#ifdef __GNU_LIBRARY__
# include <string.h>
#endif
extern char *malloc ();
char *xmalloc ();

View File

@ -14,10 +14,6 @@
#include <ctype.h>
#include <../src/paths.h> /* For PATH_DATA. */
#ifdef __GNU_LIBRARY__
# include <string.h>
#endif
#define BUFSIZE 80
#define SEP '\0'

View File

@ -100,12 +100,7 @@ struct cm
extern struct cm Wcm; /* Terminal capabilities */
extern char PC; /* Pad character */
#ifdef HAVE_TERMIOS
# include <termios.h>
extern speed_t ospeed;
#else
extern short ospeed; /* Output speed (from sg_ospeed) */
#endif
/* Shorthand */
#ifndef NoCMShortHand

View File

@ -122,7 +122,6 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#undef HAVE_UNISTD_H
#undef HAVE_UTIME_H
#undef HAVE_LINUX_VERSION_H
#undef HAVE_TERMIOS_H
#undef STDC_HEADERS
#undef TIME_WITH_SYS_TIME

View File

@ -139,21 +139,6 @@ NOTE-END
/* #define NO_SOCK_SIGIO */
#ifdef __ELF__
/* With ELF, make sure that all common symbols get allocated to in the
data section. Otherwise, the dump of temacs may miss variables in
the shared library that have been initialized. For example, with
GNU libc, __malloc_initialized would normally be resolved to the
shared library's .bss section, which is fatal. */
# ifdef __GNUC__
# define C_SWITCH_MACHINE -fno-common
# else
# error What gives? Fix me if DEC Unix supports ELF now.
# endif
#endif
#ifndef __ELF__
/* Describe layout of the address space in an executing process. */
#define TEXT_START 0x120000000
@ -164,12 +149,6 @@ NOTE-END
#define DATA_SEG_BITS 0x140000000
/* The program to be used for unexec. */
#define UNEXEC unexalpha.o
#endif /* ! __ELF__ */
#ifdef OSF1
#define ORDINARY_LINK
@ -196,11 +175,15 @@ NOTE-END
#define START_FILES pre-crt0.o
#endif
#if defined(LINUX) && __GNU_LIBRARY__ - 0 < 6
#ifdef LINUX
/* This controls a conditional in main. */
#define LINUX_SBRK_BUG
#endif
/* The program to be used for unexec. */
#define UNEXEC unexalpha.o
#define PNTR_COMPARISON_TYPE unsigned long
@ -290,14 +273,12 @@ extern void r_alloc_free ();
while (0)
#endif
/* On the Alpha it's best to avoid including TERMIO since struct
termio and struct termios are mutually incompatible. */
#ifdef linux
#define COFF
/* Linux/Alpha doesn't like it if termio.h and termios.h get included
simultaneously. */
#define NO_TERMIO
#ifdef LINUX
# define TEXT_END ({ extern int _etext; &_etext; })
# ifndef __ELF__
# define COFF
# define DATA_END ({ extern int _EDATA; &_EDATA; })
# endif /* ! __ELF__ */
#define TEXT_END ({ extern int _etext; &_etext; })
#define DATA_END ({ extern int _EDATA; &_EDATA; })
#endif

View File

@ -423,22 +423,6 @@ Filesz Memsz Flags Align
#include <elf.h>
#include <sys/mman.h>
#ifdef __alpha__
# include <sym.h> /* get COFF debugging symbol table declaration */
#endif
#ifdef __GNU_LIBRARY__
# include <link.h> /* get definition of ElfW */
#endif
#ifndef ElfW
# ifdef __STDC__
# define ElfW(type) Elf32_##type
# else
# define ElfW(type) Elf32_/**/type
# endif
#endif
#ifndef emacs
#define fatal(a, b, c) fprintf (stderr, a, b, c), exit (1)
#else
@ -478,13 +462,13 @@ extern void fatal (char *, ...);
*/
#define OLD_SECTION_H(n) \
(*(ElfW(Shdr) *) ((byte *) old_section_h + old_file_h->e_shentsize * (n)))
(*(Elf32_Shdr *) ((byte *) old_section_h + old_file_h->e_shentsize * (n)))
#define NEW_SECTION_H(n) \
(*(ElfW(Shdr) *) ((byte *) new_section_h + new_file_h->e_shentsize * (n)))
(*(Elf32_Shdr *) ((byte *) new_section_h + new_file_h->e_shentsize * (n)))
#define OLD_PROGRAM_H(n) \
(*(ElfW(Phdr) *) ((byte *) old_program_h + old_file_h->e_phentsize * (n)))
(*(Elf32_Phdr *) ((byte *) old_program_h + old_file_h->e_phentsize * (n)))
#define NEW_PROGRAM_H(n) \
(*(ElfW(Phdr) *) ((byte *) new_program_h + new_file_h->e_phentsize * (n)))
(*(Elf32_Phdr *) ((byte *) new_program_h + new_file_h->e_phentsize * (n)))
#define PATCH_INDEX(n) \
do { \
@ -526,19 +510,19 @@ unexec (new_name, old_name, data_start, bss_start, entry_address)
/* Pointers to the file, program and section headers for the old and new
* files.
*/
ElfW(Ehdr) *old_file_h, *new_file_h;
ElfW(Phdr) *old_program_h, *new_program_h;
ElfW(Shdr) *old_section_h, *new_section_h;
Elf32_Ehdr *old_file_h, *new_file_h;
Elf32_Phdr *old_program_h, *new_program_h;
Elf32_Shdr *old_section_h, *new_section_h;
/* Point to the section name table in the old file */
char *old_section_names;
ElfW(Addr) old_bss_addr, new_bss_addr;
ElfW(Addr) old_bss_size, new_data2_size;
ElfW(Off) new_data2_offset;
ElfW(Addr) new_data2_addr;
Elf32_Addr old_bss_addr, new_bss_addr;
Elf32_Word old_bss_size, new_data2_size;
Elf32_Off new_data2_offset;
Elf32_Addr new_data2_addr;
int n, nn, old_bss_index, old_data_index;
int n, nn, old_bss_index, old_data_index, new_data2_index;
struct stat stat_buf;
/* Open the old file & map it into the address space. */
@ -557,15 +541,15 @@ unexec (new_name, old_name, data_start, bss_start, entry_address)
fatal ("Can't mmap (%s): errno %d\n", old_name, errno);
#ifdef DEBUG
fprintf (stderr, "mmap (%s, %lx) -> %lx\n", old_name, stat_buf.st_size,
(unsigned long) old_base);
fprintf (stderr, "mmap (%s, %x) -> %x\n", old_name, stat_buf.st_size,
old_base);
#endif
/* Get pointers to headers & section names */
old_file_h = (ElfW(Ehdr) *) old_base;
old_program_h = (ElfW(Phdr) *) ((byte *) old_base + old_file_h->e_phoff);
old_section_h = (ElfW(Shdr) *) ((byte *) old_base + old_file_h->e_shoff);
old_file_h = (Elf32_Ehdr *) old_base;
old_program_h = (Elf32_Phdr *) ((byte *) old_base + old_file_h->e_phoff);
old_section_h = (Elf32_Shdr *) ((byte *) old_base + old_file_h->e_shoff);
old_section_names = (char *) old_base
+ OLD_SECTION_H (old_file_h->e_shstrndx).sh_offset;
@ -590,7 +574,7 @@ unexec (new_name, old_name, data_start, bss_start, entry_address)
old_bss_addr = OLD_SECTION_H (old_bss_index).sh_addr;
old_bss_size = OLD_SECTION_H (old_bss_index).sh_size;
#if defined(emacs) || !defined(DEBUG)
new_bss_addr = (ElfW(Addr)) sbrk (0);
new_bss_addr = (Elf32_Addr) sbrk (0);
#else
new_bss_addr = old_bss_addr + old_bss_size + 0x1234;
#endif
@ -600,16 +584,15 @@ unexec (new_name, old_name, data_start, bss_start, entry_address)
#ifdef DEBUG
fprintf (stderr, "old_bss_index %d\n", old_bss_index);
fprintf (stderr, "old_bss_addr %lx\n", old_bss_addr);
fprintf (stderr, "old_bss_size %lx\n", old_bss_size);
fprintf (stderr, "new_bss_addr %lx\n", new_bss_addr);
fprintf (stderr, "new_data2_addr %lx\n", new_data2_addr);
fprintf (stderr, "new_data2_size %lx\n", new_data2_size);
fprintf (stderr, "new_data2_offset %lx\n", new_data2_offset);
fprintf (stderr, "old_bss_addr %x\n", old_bss_addr);
fprintf (stderr, "old_bss_size %x\n", old_bss_size);
fprintf (stderr, "new_bss_addr %x\n", new_bss_addr);
fprintf (stderr, "new_data2_addr %x\n", new_data2_addr);
fprintf (stderr, "new_data2_size %x\n", new_data2_size);
fprintf (stderr, "new_data2_offset %x\n", new_data2_offset);
#endif
if ((unsigned long) new_bss_addr
< (unsigned long) old_bss_addr + old_bss_size)
if ((unsigned) new_bss_addr < (unsigned) old_bss_addr + old_bss_size)
fatal (".bss shrank when undumping???\n", 0, 0);
/* Set the output file to the right size and mmap it. Set
@ -637,9 +620,9 @@ unexec (new_name, old_name, data_start, bss_start, entry_address)
if (new_base == (caddr_t) -1)
fatal ("Can't mmap (%s): errno %d\n", new_name, errno);
new_file_h = (ElfW(Ehdr) *) new_base;
new_program_h = (ElfW(Phdr) *) ((byte *) new_base + old_file_h->e_phoff);
new_section_h = (ElfW(Shdr) *)
new_file_h = (Elf32_Ehdr *) new_base;
new_program_h = (Elf32_Phdr *) ((byte *) new_base + old_file_h->e_phoff);
new_section_h = (Elf32_Shdr *)
((byte *) new_base + old_file_h->e_shoff + new_data2_size);
/* Make our new file, program and section headers as copies of the
@ -661,9 +644,9 @@ unexec (new_name, old_name, data_start, bss_start, entry_address)
new_file_h->e_shnum += 1;
#ifdef DEBUG
fprintf (stderr, "Old section offset %lx\n", old_file_h->e_shoff);
fprintf (stderr, "Old section offset %x\n", old_file_h->e_shoff);
fprintf (stderr, "Old section count %d\n", old_file_h->e_shnum);
fprintf (stderr, "New section offset %lx\n", new_file_h->e_shoff);
fprintf (stderr, "New section offset %x\n", new_file_h->e_shoff);
fprintf (stderr, "New section count %d\n", new_file_h->e_shnum);
#endif
@ -678,7 +661,7 @@ unexec (new_name, old_name, data_start, bss_start, entry_address)
for (n = new_file_h->e_phnum - 1; n >= 0; n--)
{
/* Compute maximum of all requirements for alignment of section. */
unsigned int alignment = (NEW_PROGRAM_H (n)).p_align;
int alignment = (NEW_PROGRAM_H (n)).p_align;
if ((OLD_SECTION_H (old_bss_index)).sh_addralign > alignment)
alignment = OLD_SECTION_H (old_bss_index).sh_addralign;
@ -825,34 +808,13 @@ unexec (new_name, old_name, data_start, bss_start, entry_address)
memcpy (NEW_SECTION_H (nn).sh_offset + new_base, src,
NEW_SECTION_H (nn).sh_size);
#ifdef __alpha__
/* Update Alpha COFF symbol table: */
if (strcmp (old_section_names + OLD_SECTION_H (n).sh_name, ".mdebug")
== 0)
{
pHDRR symhdr = (pHDRR) (NEW_SECTION_H (nn).sh_offset + new_base);
symhdr->cbLineOffset += new_data2_size;
symhdr->cbDnOffset += new_data2_size;
symhdr->cbPdOffset += new_data2_size;
symhdr->cbSymOffset += new_data2_size;
symhdr->cbOptOffset += new_data2_size;
symhdr->cbAuxOffset += new_data2_size;
symhdr->cbSsOffset += new_data2_size;
symhdr->cbSsExtOffset += new_data2_size;
symhdr->cbFdOffset += new_data2_size;
symhdr->cbRfdOffset += new_data2_size;
symhdr->cbExtOffset += new_data2_size;
}
#endif /* __alpha__ */
/* If it is the symbol table, its st_shndx field needs to be patched. */
if (NEW_SECTION_H (nn).sh_type == SHT_SYMTAB
|| NEW_SECTION_H (nn).sh_type == SHT_DYNSYM)
{
ElfW(Shdr) *spt = &NEW_SECTION_H (nn);
Elf32_Shdr *spt = &NEW_SECTION_H (nn);
unsigned int num = spt->sh_size / spt->sh_entsize;
ElfW(Sym) * sym = (ElfW(Sym) *) (NEW_SECTION_H (nn).sh_offset +
Elf32_Sym * sym = (Elf32_Sym *) (NEW_SECTION_H (nn).sh_offset +
new_base);
for (; num--; sym++)
{
@ -870,7 +832,7 @@ unexec (new_name, old_name, data_start, bss_start, entry_address)
for (n = new_file_h->e_shnum - 1; n; n--)
{
byte *symnames;
ElfW(Sym) *symp, *symendp;
Elf32_Sym *symp, *symendp;
if (NEW_SECTION_H (n).sh_type != SHT_DYNSYM
&& NEW_SECTION_H (n).sh_type != SHT_SYMTAB)
@ -878,8 +840,8 @@ unexec (new_name, old_name, data_start, bss_start, entry_address)
symnames = ((byte *) new_base
+ NEW_SECTION_H (NEW_SECTION_H (n).sh_link).sh_offset);
symp = (ElfW(Sym) *) (NEW_SECTION_H (n).sh_offset + new_base);
symendp = (ElfW(Sym) *) ((byte *)symp + NEW_SECTION_H (n).sh_size);
symp = (Elf32_Sym *) (NEW_SECTION_H (n).sh_offset + new_base);
symendp = (Elf32_Sym *) ((byte *)symp + NEW_SECTION_H (n).sh_size);
for (; symp < symendp; symp ++)
if (strcmp ((char *) (symnames + symp->st_name), "_end") == 0
@ -891,7 +853,7 @@ unexec (new_name, old_name, data_start, bss_start, entry_address)
that it can undo relocations performed by the runtime linker. */
for (n = new_file_h->e_shnum - 1; n; n--)
{
ElfW(Shdr) section = NEW_SECTION_H (n);
Elf32_Shdr section = NEW_SECTION_H (n);
switch (section.sh_type) {
default:
break;
@ -905,22 +867,14 @@ unexec (new_name, old_name, data_start, bss_start, entry_address)
|| !strcmp ((old_section_names + NEW_SECTION_H (nn).sh_name),
".data1"))
{
ElfW(Addr) offset = NEW_SECTION_H (nn).sh_addr -
Elf32_Addr offset = NEW_SECTION_H (nn).sh_addr -
NEW_SECTION_H (nn).sh_offset;
caddr_t reloc = old_base + section.sh_offset, end;
for (end = reloc + section.sh_size; reloc < end;
reloc += section.sh_entsize)
{
ElfW(Addr) addr;
#ifdef __alpha__
/* The Alpha ELF binutils currently have a bug that
sometimes results in relocs that contain all
zeroes. Work around this for now... */
if (((ElfW(Rel) *) reloc)->r_offset == 0)
continue;
#endif
addr = ((ElfW(Rel) *) reloc)->r_offset - offset;
memcpy (new_base + addr, old_base + addr, sizeof(ElfW(Addr)));
Elf32_Addr addr = ((Elf32_Rel *) reloc)->r_offset - offset;
memcpy (new_base + addr, old_base + addr, 4);
}
}
break;