summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKarl Heuer <kwzh@gnu.org>1996-07-16 22:39:31 +0000
committerKarl Heuer <kwzh@gnu.org>1996-07-16 22:39:31 +0000
commit7653e4c65ef5ac8757744f4863b2cf9f1ba327e0 (patch)
tree50e92ce0c6b5678b299ea45d92e18edddd1c7383 /src
parent02773e4e5127c144a939b811a1c44a24e2805593 (diff)
downloademacs-7653e4c65ef5ac8757744f4863b2cf9f1ba327e0.tar.gz
Undo previous change.
Diffstat (limited to 'src')
-rw-r--r--src/cm.h5
-rw-r--r--src/config.in1
-rw-r--r--src/m/alpha.h41
-rw-r--r--src/unexelf.c126
4 files changed, 51 insertions, 122 deletions
diff --git a/src/cm.h b/src/cm.h
index 0b23bc9eb36..80e945b4607 100644
--- a/src/cm.h
+++ b/src/cm.h
@@ -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
diff --git a/src/config.in b/src/config.in
index d20afd3258d..9f5f0161ad2 100644
--- a/src/config.in
+++ b/src/config.in
@@ -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
diff --git a/src/m/alpha.h b/src/m/alpha.h
index 7b07f6cd9b7..606b7aab469 100644
--- a/src/m/alpha.h
+++ b/src/m/alpha.h
@@ -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
diff --git a/src/unexelf.c b/src/unexelf.c
index 1575b23b51d..60e82cc6a95 100644
--- a/src/unexelf.c
+++ b/src/unexelf.c
@@ -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;