Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Index: Makefile
- ===================================================================
- RCS file: /cvsroot/pkgsrc/editors/mule/Makefile,v
- retrieving revision 1.51
- diff -u -p -d -r1.51 Makefile
- --- Makefile 4 Jul 2015 16:18:29 -0000 1.51
- +++ Makefile 27 Apr 2017 16:07:10 -0000
- @@ -25,7 +25,7 @@ GNU_CONFIGURE_MANDIR= ${PREFIX}/${PKGMAN
- .include "../../mk/bsd.prefs.mk"
- -CFLAGS+= -g
- +CFLAGS+= -g -fno-builtin-malloc -fno-strict-aliasing
- CONFIGURE_ARGS+= ${MACHINE_ARCH}--${LOWER_OPSYS} --with-x --with-x-toolkit=lucid
- CONFIGURE_ARGS+= --terminal-face --mcpath --canna-libraries=${PREFIX}/lib
- Index: distinfo
- ===================================================================
- RCS file: /cvsroot/pkgsrc/editors/mule/distinfo,v
- retrieving revision 1.14
- diff -u -p -d -r1.14 distinfo
- --- distinfo 3 Nov 2015 03:32:18 -0000 1.14
- +++ distinfo 27 Apr 2017 16:07:10 -0000
- @@ -4,8 +4,8 @@ SHA1 (mule-2.3.tar.gz) = 52737767955caf2
- RMD160 (mule-2.3.tar.gz) = 52b93e746a7a796549a44104ab1898954df044bf
- SHA512 (mule-2.3.tar.gz) = 5f6a9047e6c9d752787d6cab3573516c6efd65cd901fbab74d314a5967e6c68b2dc7c2aa7454d8588d421553530c87dd3ee9692d523d818e01739580cb1201fd
- Size (mule-2.3.tar.gz) = 10240256 bytes
- -SHA1 (patch-aa) = 927ec514204ef97101fb3f4ab77eec1c71af23f1
- -SHA1 (patch-ab) = 7c2cf683e87320190af0306cf7d04b3638600944
- +SHA1 (patch-aa) = 4beddc75ea9d58423d62a9ff786a6c2b60caadca
- +SHA1 (patch-ab) = da4f43df6bddba83909989e60c1c0342f5d9d6ef
- SHA1 (patch-ac) = 170fa4f6c17c805dd32a90e8bfb3e38c48a9fc20
- SHA1 (patch-ad) = 7a52802cd614441320221f450cf97d4e30f40f2b
- SHA1 (patch-ae) = 1f020aaeb75cd7dd2b827ab34382e472add09719
- @@ -75,7 +75,7 @@ SHA1 (patch-lib-src_profile_c) = b4e74a5
- SHA1 (patch-lib-src_sorted-doc_c) = 9965f6a6722c2735dfc609a7a15c669f3df8fae4
- SHA1 (patch-lib-src_yow_c) = 38fb3e70395525ce8bb4816acd1b9e64c20f3735
- SHA1 (patch-src_abbrev_c) = c8dc21ca974625b8fe20e96bea37c61f709fbc1a
- -SHA1 (patch-src_alloc_c) = a5db486e10072ec3738df001aa555e35ae5a5a07
- +SHA1 (patch-src_alloc_c) = aaa4315c2487e3b32deb13940609fbcf4b895bce
- SHA1 (patch-src_buffer_h) = 3d2d0dba98a37265cc4df54bd14b6b51941d9c42
- SHA1 (patch-src_bytecode_c) = 93508ddb17e3ba2c7bb921caf85ce1e4e15791f3
- SHA1 (patch-src_callint_c) = 0b44807e049c12d2625c950efb14fd5409aba058
- Index: patches/patch-aa
- ===================================================================
- RCS file: /cvsroot/pkgsrc/editors/mule/patches/patch-aa,v
- retrieving revision 1.2
- diff -u -p -d -r1.2 patch-aa
- --- patches/patch-aa 1 Dec 2005 18:13:24 -0000 1.2
- +++ patches/patch-aa 27 Apr 2017 16:07:10 -0000
- @@ -1,6 +1,6 @@
- $NetBSD: patch-aa,v 1.2 2005/12/01 18:13:24 wiz Exp $
- ---- src/s/netbsd.h.orig 1995-10-12 11:53:15.000000000 +0100
- +--- src/s/netbsd.h.orig 1995-10-12 10:53:15.000000000 +0000
- +++ src/s/netbsd.h
- @@ -3,6 +3,10 @@
- /* Get most of the stuff from bsd4.3 */
- @@ -13,18 +13,21 @@ $NetBSD: patch-aa,v 1.2 2005/12/01 18:13
- /* For mem-limits.h. */
- #define BSD4_2
- -@@ -30,8 +34,8 @@
- +@@ -30,9 +34,10 @@
- #define NO_TERMIO
- #define LIBS_DEBUG
- -/* -lutil is not needed for NetBSD >0.9. */
- -#define LIBS_SYSTEM -lutil -lcrypt
- +-#define LIBS_TERMCAP -ltermcap
- +#define LIBS_SYSTEM -lcrypt
- +
- - #define LIBS_TERMCAP -ltermcap
- ++#define TERMINFO
- ++#define LIBS_TERMCAP -lterminfo
- #define NEED_ERRNO
- -@@ -40,7 +44,9 @@
- + #define SYSV_SYSTEM_DIR
- +@@ -40,7 +45,9 @@
- /* Netbsd has POSIX-style pgrp behavior. */
- #undef BSD_PGRPS
- @@ -35,7 +38,7 @@ $NetBSD: patch-aa,v 1.2 2005/12/01 18:13
- /* These definitions should work for either dynamic or static linking,
- whichever is the default for `cc -nostdlib'. */
- #define HAVE_TEXT_START /* No need to define `start_of_text'. */
- -@@ -54,14 +60,34 @@
- +@@ -54,14 +61,34 @@
- #define N_BSSADDR(x) (N_ALIGN(x, N_DATADDR(x)+x.a_data))
- #define N_TRELOFF(x) N_RELOFF(x)
- #endif
- Index: patches/patch-ab
- ===================================================================
- RCS file: /cvsroot/pkgsrc/editors/mule/patches/patch-ab,v
- retrieving revision 1.3
- diff -u -p -d -r1.3 patch-ab
- --- patches/patch-ab 24 Dec 2011 17:07:07 -0000 1.3
- +++ patches/patch-ab 27 Apr 2017 16:07:10 -0000
- @@ -1,9 +1,10 @@
- $NetBSD: patch-ab,v 1.3 2011/12/24 17:07:07 dholland Exp $
- ---- src/unexelf.c.orig 1994-10-21 05:21:00.000000000 +0100
- +--- src/unexelf.c.orig 1994-10-21 04:21:00.000000000 +0000
- +++ src/unexelf.c
- @@ -1,19 +1,22 @@
- - /* Copyright (C) 1985, 1986, 1987, 1988, 1990, 1992
- +-/* Copyright (C) 1985, 1986, 1987, 1988, 1990, 1992
- ++/* Copyright (C) 1985, 1986, 1987, 1988, 1990, 1992, 1999, 2000, 01, 02
- Free Software Foundation, Inc.
- - This program is free software; you can redistribute it and/or modify
- @@ -57,245 +58,36 @@ $NetBSD: patch-ab,v 1.3 2011/12/24 17:07
- *
- * The boundaries within the a.out file may be adjusted with the data_start
- * and bss_start arguments. Either or both may be given as 0 for defaults.
- -@@ -98,64 +101,64 @@ temacs:
- - Link Info Adralgn Entsize
- -
- - [1] 1 2 0x80480d4 0xd4 0x13 .interp
- -- 0 0 0x1 0
- -+ 0 0 0x1 0
- -
- - [2] 5 2 0x80480e8 0xe8 0x388 .hash
- -- 3 0 0x4 0x4
- -+ 3 0 0x4 0x4
- -
- - [3] 11 2 0x8048470 0x470 0x7f0 .dynsym
- -- 4 1 0x4 0x10
- -+ 4 1 0x4 0x10
- -
- - [4] 3 2 0x8048c60 0xc60 0x3ad .dynstr
- -- 0 0 0x1 0
- -+ 0 0 0x1 0
- -
- - [5] 9 2 0x8049010 0x1010 0x338 .rel.plt
- -- 3 7 0x4 0x8
- -+ 3 7 0x4 0x8
- -
- - [6] 1 6 0x8049348 0x1348 0x3 .init
- -- 0 0 0x4 0
- -+ 0 0 0x4 0
- -
- - [7] 1 6 0x804934c 0x134c 0x680 .plt
- -- 0 0 0x4 0x4
- -+ 0 0 0x4 0x4
- -
- - [8] 1 6 0x80499cc 0x19cc 0x3c56f .text
- -- 0 0 0x4 0
- -+ 0 0 0x4 0
- -
- - [9] 1 6 0x8085f3c 0x3df3c 0x3 .fini
- -- 0 0 0x4 0
- -+ 0 0 0x4 0
- -
- - [10] 1 2 0x8085f40 0x3df40 0x69c .rodata
- -- 0 0 0x4 0
- -+ 0 0 0x4 0
- -
- - [11] 1 2 0x80865dc 0x3e5dc 0xd51 .rodata1
- -- 0 0 0x4 0
- -+ 0 0 0x4 0
- -
- - [12] 1 3 0x8088330 0x3f330 0x20afc .data
- -- 0 0 0x4 0
- -+ 0 0 0x4 0
- -
- - [13] 1 3 0x80a8e2c 0x5fe2c 0x89d .data1
- -- 0 0 0x4 0
- -+ 0 0 0x4 0
- -
- - [14] 1 3 0x80a96cc 0x606cc 0x1a8 .got
- -- 0 0 0x4 0x4
- -+ 0 0 0x4 0x4
- -
- - [15] 6 3 0x80a9874 0x60874 0x80 .dynamic
- -- 4 0 0x4 0x8
- -+ 4 0 0x4 0x8
- -
- - [16] 8 3 0x80a98f4 0x608f4 0x449c .bss
- -- 0 0 0x4 0
- -+ 0 0 0x4 0
- -
- - [17] 2 0 0 0x608f4 0x9b90 .symtab
- -- 18 371 0x4 0x10
- -+ 18 371 0x4 0x10
- -
- - [18] 3 0 0 0x6a484 0x8526 .strtab
- -- 0 0 0x1 0
- -+ 0 0 0x1 0
- -
- - [19] 3 0 0 0x729aa 0x93 .shstrtab
- -- 0 0 0x1 0
- -+ 0 0 0x1 0
- -
- - [20] 1 0 0 0x72a3d 0x68b7 .comment
- -- 0 0 0x1 0
- -+ 0 0 0x1 0
- -
- - raid:/nfs/raid/src/dist-18.56/src> dump -h xemacs
- -
- -@@ -166,67 +169,67 @@ xemacs:
- - Link Info Adralgn Entsize
- -
- - [1] 1 2 0x80480d4 0xd4 0x13 .interp
- -- 0 0 0x1 0
- -+ 0 0 0x1 0
- -
- - [2] 5 2 0x80480e8 0xe8 0x388 .hash
- -- 3 0 0x4 0x4
- -+ 3 0 0x4 0x4
- -
- - [3] 11 2 0x8048470 0x470 0x7f0 .dynsym
- -- 4 1 0x4 0x10
- -+ 4 1 0x4 0x10
- -
- - [4] 3 2 0x8048c60 0xc60 0x3ad .dynstr
- -- 0 0 0x1 0
- -+ 0 0 0x1 0
- -
- - [5] 9 2 0x8049010 0x1010 0x338 .rel.plt
- -- 3 7 0x4 0x8
- -+ 3 7 0x4 0x8
- -
- - [6] 1 6 0x8049348 0x1348 0x3 .init
- -- 0 0 0x4 0
- -+ 0 0 0x4 0
- -
- - [7] 1 6 0x804934c 0x134c 0x680 .plt
- -- 0 0 0x4 0x4
- -+ 0 0 0x4 0x4
- -
- - [8] 1 6 0x80499cc 0x19cc 0x3c56f .text
- -- 0 0 0x4 0
- -+ 0 0 0x4 0
- -
- - [9] 1 6 0x8085f3c 0x3df3c 0x3 .fini
- -- 0 0 0x4 0
- -+ 0 0 0x4 0
- -
- - [10] 1 2 0x8085f40 0x3df40 0x69c .rodata
- -- 0 0 0x4 0
- -+ 0 0 0x4 0
- -
- - [11] 1 2 0x80865dc 0x3e5dc 0xd51 .rodata1
- -- 0 0 0x4 0
- -+ 0 0 0x4 0
- -
- - [12] 1 3 0x8088330 0x3f330 0x20afc .data
- -- 0 0 0x4 0
- -+ 0 0 0x4 0
- -
- - [13] 1 3 0x80a8e2c 0x5fe2c 0x89d .data1
- -- 0 0 0x4 0
- -+ 0 0 0x4 0
- -
- - [14] 1 3 0x80a96cc 0x606cc 0x1a8 .got
- -- 0 0 0x4 0x4
- -+ 0 0 0x4 0x4
- -
- - [15] 6 3 0x80a9874 0x60874 0x80 .dynamic
- -- 4 0 0x4 0x8
- -+ 4 0 0x4 0x8
- -
- - [16] 8 3 0x80c6800 0x7d800 0 .bss
- -- 0 0 0x4 0
- -+ 0 0 0x4 0
- -
- - [17] 2 0 0 0x7d800 0x9b90 .symtab
- -- 18 371 0x4 0x10
- -+ 18 371 0x4 0x10
- -
- - [18] 3 0 0 0x87390 0x8526 .strtab
- -- 0 0 0x1 0
- -+ 0 0 0x1 0
- -
- - [19] 3 0 0 0x8f8b6 0x93 .shstrtab
- -- 0 0 0x1 0
- -+ 0 0 0x1 0
- -
- - [20] 1 0 0 0x8f949 0x68b7 .comment
- -- 0 0 0x1 0
- -+ 0 0 0x1 0
- -
- - [21] 1 3 0x80a98f4 0x608f4 0x1cf0c .data
- -- 0 0 0x4 0
- -+ 0 0 0x4 0
- -
- - * This is an example of how the file header is changed. "Shoff" is
- - * the section header offset within the file. Since that table is
- -@@ -276,20 +279,20 @@ temacs:
- - Type Offset Vaddr Paddr
- - Filesz Memsz Flags Align
- -
- --6 0x34 0x8048034 0
- --0xa0 0xa0 5 0
- -+6 0x34 0x8048034 0
- -+0xa0 0xa0 5 0
- -
- --3 0xd4 0 0
- --0x13 0 4 0
- -+3 0xd4 0 0
- -+0x13 0 4 0
- -
- --1 0x34 0x8048034 0
- --0x3f2f9 0x3f2f9 5 0x1000
- -+1 0x34 0x8048034 0
- -+0x3f2f9 0x3f2f9 5 0x1000
- -
- --1 0x3f330 0x8088330 0
- --0x215c4 0x25a60 7 0x1000
- -+1 0x3f330 0x8088330 0
- -+0x215c4 0x25a60 7 0x1000
- -
- --2 0x60874 0x80a9874 0
- --0x80 0 7 0
- -+2 0x60874 0x80a9874 0
- -+0x80 0 7 0
- -
- - raid:/nfs/raid/src/dist-18.56/src> dump -o xemacs
- -
- -@@ -298,42 +301,42 @@ xemacs:
- - Type Offset Vaddr Paddr
- - Filesz Memsz Flags Align
- -
- --6 0x34 0x8048034 0
- --0xa0 0xa0 5 0
- -+6 0x34 0x8048034 0
- -+0xa0 0xa0 5 0
- -
- --3 0xd4 0 0
- --0x13 0 4 0
- -+3 0xd4 0 0
- -+0x13 0 4 0
- -
- --1 0x34 0x8048034 0
- --0x3f2f9 0x3f2f9 5 0x1000
- -+1 0x34 0x8048034 0
- -+0x3f2f9 0x3f2f9 5 0x1000
- -
- --1 0x3f330 0x8088330 0
- --0x3e4d0 0x3e4d0 7 0x1000
- -+1 0x3f330 0x8088330 0
- -+0x3e4d0 0x3e4d0 7 0x1000
- +@@ -49,11 +52,6 @@ what you give them. Help stamp out sof
- + * The value you specify may be rounded down to a suitable boundary
- + * as required by the machine you are using.
- + *
- +- * Specifying zero for data_start means the boundary between text and data
- +- * should not be the same as when the program was loaded.
- +- * If NO_REMAP is defined, the argument data_start is ignored and the
- +- * segment boundaries are never changed.
- +- *
- + * Bss_start indicates how much of the data segment is to be saved in the
- + * a.out file and restored when the program is executed. It gives the lowest
- + * unsaved address, and is rounded up to a page boundary. The default when 0
- +@@ -63,9 +61,6 @@ what you give them. Help stamp out sof
- + *
- + * The new file is set up to start at entry_address.
- + *
- +- * If you make improvements I'd like to get them too.
- +- * harpo!utah-cs!thomas, thomas@Utah-20
- +- *
- + */
- --2 0x60874 0x80a9874 0
- --0x80 0 7 0
- -+2 0x60874 0x80a9874 0
- -+0x80 0 7 0
- + /* Even more heavily modified by james@bigtex.cactus.org of Dell Computer Co.
- +@@ -315,25 +310,25 @@ Filesz Memsz Flags Alig
- */
- -
- +-
- -/* Modified by wtien@urbana.mcd.mot.com of Motorola Inc.
- - *
- ++
- +/* Modified by wtien@urbana.mcd.mot.com of Motorola Inc.
- + *
- * The above mechanism does not work if the unexeced ELF file is being
- @@ -325,7 +117,7 @@ $NetBSD: patch-ab,v 1.3 2011/12/24 17:07
- * 1. ELF header e_shstrndx field.
- * 2. section header sh_link and sh_info field.
- * 3. symbol table entry st_shndx field.
- -@@ -345,67 +348,67 @@ Filesz Memsz Flags Alig
- +@@ -345,85 +340,214 @@ Filesz Memsz Flags Alig
- Link Info Adralgn Entsize
- [1] 1 2 0x80480d4 0xd4 0x13 .interp
- @@ -414,7 +206,35 @@ $NetBSD: patch-ab,v 1.3 2011/12/24 17:07
- */
- -@@ -417,15 +420,130 @@ Filesz Memsz Flags Alig
- ++/*
- ++ * Modified by rdh@yottayotta.com of Yotta Yotta Incorporated.
- ++ *
- ++ * The code originally used mmap() to create a memory image of the new
- ++ * and old object files. This had a few handy features: (1) you get
- ++ * to use a cool system call like mmap, (2) no need to explicitly
- ++ * write out the new file before the close, and (3) no swap space
- ++ * requirements. Unfortunately, mmap() often fails to work with
- ++ * nfs-mounted file systems.
- ++ *
- ++ * So, instead of relying on the vm subsystem to do the file i/o for
- ++ * us, it's now done explicitly. A buffer of the right size for the
- ++ * file is dynamically allocated, and either the old_name is read into
- ++ * it, or it is initialized with the correct new executable contents,
- ++ * and then written to new_name.
- ++ */
- ++
- ++#ifndef emacs
- ++#define fatal(a, b, c) fprintf (stderr, a, b, c), exit (1)
- ++#include <string.h>
- ++#else
- ++#include "config.h"
- ++#endif
- ++
- + #include <sys/types.h>
- + #include <stdio.h>
- + #include <sys/stat.h>
- + #include <memory.h>
- +-#include <string.h>
- #include <errno.h>
- #include <unistd.h>
- #include <fcntl.h>
- @@ -422,10 +242,34 @@ $NetBSD: patch-ab,v 1.3 2011/12/24 17:07
- #include <elf.h>
- +#endif
- #include <sys/mman.h>
- +-
- +-#ifndef emacs
- +-#define fatal(a, b, c) fprintf (stderr, a, b, c), exit (1)
- +#if defined (__sony_news) && defined (_SYSTYPE_SYSV)
- +#include <sys/elf_mips.h>
- +#include <sym.h>
- +#endif /* __sony_news && _SYSTYPE_SYSV */
- ++#if __sgi
- ++#include <syms.h> /* for HDRR declaration */
- ++#endif /* __sgi */
- ++
- ++#ifndef MAP_ANON
- ++#ifdef MAP_ANONYMOUS
- ++#define MAP_ANON MAP_ANONYMOUS
- + #else
- +-extern void fatal (char *, ...);
- ++#define MAP_ANON 0
- ++#endif
- ++#endif
- ++
- ++#ifdef MCPATH /* hir, 1993.8.4 */
- ++#undef open
- ++#undef chmod
- ++#endif
- ++
- ++#ifndef MAP_FAILED
- ++#define MAP_FAILED ((void *) -1)
- ++#endif
- +
- +#if defined (__alpha__) && !defined (__NetBSD__) && !defined (__OpenBSD__)
- +/* Declare COFF debugging symbol table. This used to be in
- @@ -466,51 +310,27 @@ $NetBSD: patch-ab,v 1.3 2011/12/24 17:07
- +/*
- + * NetBSD does not have normal-looking user-land ELF support.
- + */
- -+# if defined(__alpha__) || defined(__x86_64__) || defined(__sparc64__) || defined(_LP64)
- -+# define ELFSIZE 64
- -+# else
- -+# define ELFSIZE 32
- -+# endif
- +# include <sys/exec_elf.h>
- +
- -+#ifndef PT_LOAD
- -+# define PT_LOAD Elf_pt_load
- -+# define SHT_SYMTAB Elf_sht_symtab
- -+# define SHT_DYNSYM Elf_sht_dynsym
- -+# define SHT_NULL Elf_sht_null
- -+# define SHT_NOBITS Elf_sht_nobits
- -+# define SHT_REL Elf_sht_rel
- -+# define SHT_RELA Elf_sht_rela
- -+
- -+# define SHN_UNDEF Elf_eshn_undefined
- -+# define SHN_ABS Elf_eshn_absolute
- -+# define SHN_COMMON Elf_eshn_common
- -+#endif
- -+
- -+/*
- -+ * The magic of picking the right size types is handled by the ELFSIZE
- -+ * definition above.
- -+ */
- -+# ifdef __STDC__
- -+# define ElfW(type) Elf_##type
- -+# else
- -+# define ElfW(type) Elf_/**/type
- -+# endif
- -+
- -+# ifdef __alpha__
- -+# include <sys/exec_ecoff.h>
- -+# define HDRR struct ecoff_symhdr
- -+# define pHDRR HDRR *
- -+# endif /* __alpha__*/
- ++# ifndef PT_LOAD
- ++# define PT_LOAD Elf_pt_load
- ++# if 0 /* was in pkgsrc patches for 20.7 */
- ++# define SHT_PROGBITS Elf_sht_progbits
- ++# endif
- ++# define SHT_SYMTAB Elf_sht_symtab
- ++# define SHT_DYNSYM Elf_sht_dynsym
- ++# define SHT_NULL Elf_sht_null
- ++# define SHT_NOBITS Elf_sht_nobits
- ++# define SHT_REL Elf_sht_rel
- ++# define SHT_RELA Elf_sht_rela
- +
- -+# ifdef __mips__
- -+# define SHT_MIPS_DEBUG DT_MIPS_FLAGS
- -+# define HDRR struct Elf_Shdr
- -+# endif /* __mips__ */
- ++# define SHN_UNDEF Elf_eshn_undefined
- ++# define SHN_ABS Elf_eshn_absolute
- ++# define SHN_COMMON Elf_eshn_common
- ++# endif /* !PT_LOAD */
- +
- +#endif /* __NetBSD__ */
- +
- -+
- +#ifdef __OpenBSD__
- +# include <sys/exec_elf.h>
- +#endif
- @@ -521,35 +341,28 @@ $NetBSD: patch-ab,v 1.3 2011/12/24 17:07
- +
- +#ifndef ElfW
- +# ifdef __STDC__
- -+# define ElfW(type) Elf32_##type
- ++# define ElfBitsW(bits, type) Elf##bits##_##type
- +# else
- -+# define ElfW(type) Elf32_/**/type
- ++# define ElfBitsW(bits, type) Elf/**/bits/**/_/**/type
- +# endif
- -+#endif
- -
- - #ifndef emacs
- - #define fatal(a, b, c) fprintf (stderr, a, b, c), exit (1)
- - #else
- -+#include <config.h>
- - extern void fatal (char *, ...);
- ++# ifndef ELFSIZE
- ++# ifdef _LP64
- ++# define ELFSIZE 64
- ++# else
- ++# define ELFSIZE 32
- ++# endif
- ++# endif
- ++ /* This macro expands `bits' before invoking ElfBitsW. */
- ++# define ElfExpandBitsW(bits, type) ElfBitsW (bits, type)
- ++# define ElfW(type) ElfExpandBitsW (ELFSIZE, type)
- #endif
- -+#if defined ( __sony_news) && defined (_SYSTYPE_SYSV)
- -+# define HAVE_MIPS_SBSS
- -+#endif
- -+
- -+#if (defined (__mips__) || defined (__powerpc__)) && (defined(__NetBSD__) || defined(__OpenBSD__))
- -+# define HAVE_MIPS_SBSS
- -+#endif
- -+
- #ifndef ELF_BSS_SECTION_NAME
- - #define ELF_BSS_SECTION_NAME ".bss"
- - #endif
- -@@ -433,15 +551,38 @@ extern void fatal (char *, ...);
- +@@ -433,15 +557,38 @@ extern void fatal (char *, ...);
- /* Get the address of a particular section or program header entry,
- * accounting for the size of the entries.
- */
- -+/*
- ++/*
- + On PPC Reference Platform running Solaris 2.5.1
- + the plt section is also of type NOBI like the bss section.
- + (not really stored) and therefore sections after the bss
- @@ -558,7 +371,7 @@ $NetBSD: patch-ab,v 1.3 2011/12/24 17:07
- + Thus, we modify the test from
- + if (NEW_SECTION_H (nn).sh_offset >= new_data2_offset)
- + to
- -+ if (NEW_SECTION_H (nn).sh_offset >=
- ++ if (NEW_SECTION_H (nn).sh_offset >=
- + OLD_SECTION_H (old_bss_index-1).sh_offset)
- + This is just a hack. We should put the new data section
- + before the .plt section.
- @@ -588,67 +401,78 @@ $NetBSD: patch-ab,v 1.3 2011/12/24 17:07
- #define PATCH_INDEX(n) \
- do { \
- -@@ -451,9 +592,9 @@ typedef unsigned char byte;
- +@@ -451,9 +598,8 @@ typedef unsigned char byte;
- /* Round X up to a multiple of Y. */
- -int
- -+ElfW(Addr)
- - round_up (x, y)
- +-round_up (x, y)
- - int x, y;
- -+ ElfW(Addr) x, y;
- ++static ElfW(Addr)
- ++round_up (ElfW(Addr) x, ElfW(Addr) y)
- {
- int rem = x % y;
- if (rem == 0)
- -@@ -461,6 +602,47 @@ round_up (x, y)
- +@@ -461,6 +607,39 @@ round_up (x, y)
- return x - rem + y;
- }
- -+#if defined(__alpha__) || (defined ( __sony_news) && defined (_SYSTYPE_SYSV))
- -+/* We are using ECOFF symbols embedded in ELF. */
- ++/* Return the index of the section named NAME.
- ++ SECTION_NAMES, FILE_NAME and FILE_H give information
- ++ about the file we are looking in.
- +
- -+void
- -+relocate_ecoff_symhdr(symhdr, diff)
- -+ HDRR *symhdr;
- -+ ElfW(Word) diff;
- -+{
- -+ symhdr->cbLineOffset += diff;
- -+ symhdr->cbDnOffset += diff;
- -+ symhdr->cbPdOffset += diff;
- -+ symhdr->cbSymOffset += diff;
- -+ symhdr->cbOptOffset += diff;
- -+ symhdr->cbAuxOffset += diff;
- -+ symhdr->cbSsOffset += diff;
- -+ symhdr->cbSsExtOffset += diff;
- -+ symhdr->cbFdOffset += diff;
- -+ symhdr->cbRfdOffset += diff;
- -+ symhdr->cbExtOffset += diff;
- -+}
- -+#endif /* __alpha__ or __sony_news and systype_sysv */
- ++ If we don't find the section NAME, that is a fatal error
- ++ if NOERROR is 0; we return -1 if NOERROR is nonzero. */
- +
- -+#ifdef notyet
- -+void
- -+relocate_elf_proghdr(p, diff)
- -+ HDRR *symhdr;
- -+ ElfW(Word) diff;
- ++static int
- ++find_section (char *name, char *section_names, char *file_name, ElfW(Ehdr) *old_file_h, ElfW(Shdr) *old_section_h, int noerror)
- +{
- -+ phdr->sh_name += diff;
- -+ phdr->sh_type += diff;
- -+ phdr->sh_flags += diff;
- -+ phdr->sh_addr += diff;
- -+ phdr->sh_offset += diff;
- -+ phdr->sh_size += diff;
- -+ phdr->sh_link += diff;
- -+ phdr->sh_info += diff;
- -+ phdr->sh_addralign += diff;
- -+ phdr->sh_entsize += diff;
- -+};
- -+#endif /* notyet */
- ++ int idx;
- ++
- ++ for (idx = 1; idx < old_file_h->e_shnum; idx++)
- ++ {
- ++#ifdef DEBUG
- ++ fprintf (stderr, "Looking for %s - found %s\n", name,
- ++ section_names + OLD_SECTION_H (idx).sh_name);
- ++#endif
- ++ if (!strcmp (section_names + OLD_SECTION_H (idx).sh_name,
- ++ name))
- ++ break;
- ++ }
- ++ if (idx == old_file_h->e_shnum)
- ++ {
- ++ if (noerror)
- ++ return -1;
- ++ else
- ++ fatal ("Can't find %s in %s.\n", name, file_name);
- ++ }
- ++
- ++ return idx;
- ++}
- +
- /* ****************************************************************
- * unexec
- *
- -@@ -483,19 +665,23 @@ unexec (new_name, old_name, data_start,
- +@@ -471,34 +650,45 @@ round_up (x, y)
- + *
- + */
- + void
- +-unexec (new_name, old_name, data_start, bss_start, entry_address)
- +- char *new_name, *old_name;
- +- unsigned data_start, bss_start, entry_address;
- ++unexec (char *new_name, char *old_name, unsigned data_start, unsigned bss_start, unsigned entry_address)
- + {
- + int new_file, old_file, new_file_size;
- +
- + /* Pointers to the base of the image of the two files. */
- + caddr_t old_base, new_base;
- +
- ++#if MAP_ANON == 0
- ++ int mmap_fd;
- ++#else
- ++# define mmap_fd -1
- ++#endif
- ++
- /* Pointers to the file, program and section headers for the old and new
- * files.
- */
- @@ -666,30 +490,57 @@ $NetBSD: patch-ab,v 1.3 2011/12/24 17:07
- - 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, new_data2_index;
- + ElfW(Addr) old_bss_addr, new_bss_addr;
- + ElfW(Word) old_bss_size, new_data2_size;
- + ElfW(Off) new_data2_offset;
- + ElfW(Addr) new_data2_addr;
- -
- - int n, nn, old_bss_index, old_data_index, new_data2_index;
- -+#ifdef HAVE_MIPS_SBSS
- -+ int old_sbss_index, old_mdebug_index;
- -+ int bss_phdr_index;
- -+#endif /* HAVE_MIPS_SBSS */
- ++ ElfW(Off) old_bss_offset;
- ++ ElfW(Word) new_data2_incr, new_data2_shincr;
- ++
- ++ int n, nn;
- ++ int old_bss_index, old_sbss_index;
- ++ int old_data_index, new_data2_index;
- ++ int old_mdebug_index;
- struct stat stat_buf;
- ++ int old_file_size;
- - /* Open the old file & map it into the address space. */
- -@@ -508,7 +694,8 @@ unexec (new_name, old_name, data_start,
- +- /* Open the old file & map it into the address space. */
- ++ /* Open the old file, allocate a buffer of the right size, and read
- ++ * in the file contents. */
- +
- + old_file = open (old_name, O_RDONLY);
- +
- +@@ -508,90 +698,127 @@ unexec (new_name, old_name, data_start,
- if (fstat (old_file, &stat_buf) == -1)
- fatal ("Can't fstat (%s): errno %d\n", old_name, errno);
- - old_base = mmap (0, stat_buf.st_size, PROT_READ, MAP_SHARED, old_file, 0);
- -+ old_base = mmap ((caddr_t) 0, stat_buf.st_size, PROT_READ, MAP_SHARED,
- -+ old_file, 0);
- ++#if MAP_ANON == 0
- ++ mmap_fd = open ("/dev/zero", O_RDONLY);
- ++ if (mmap_fd < 0)
- ++ fatal ("Can't open /dev/zero for reading: errno %d\n", errno);
- ++#endif
- - if (old_base == (caddr_t) -1)
- - fatal ("Can't mmap (%s): errno %d\n", old_name, errno);
- -@@ -520,9 +707,9 @@ unexec (new_name, old_name, data_start,
- +- if (old_base == (caddr_t) -1)
- +- fatal ("Can't mmap (%s): errno %d\n", old_name, errno);
- ++ /* We cannot use malloc here because that may use sbrk. If it does,
- ++ we'd dump our temporary buffers with Emacs, and we'd have to be
- ++ extra careful to use the correct value of sbrk(0) after
- ++ allocating all buffers in the code below, which we aren't. */
- ++ old_file_size = stat_buf.st_size;
- ++ old_base = mmap (NULL, old_file_size, PROT_READ | PROT_WRITE,
- ++ MAP_ANON | MAP_PRIVATE, mmap_fd, 0);
- ++ if (old_base == MAP_FAILED)
- ++ fatal ("Can't allocate buffer for %s\n", old_name);
- +
- +-#ifdef DEBUG
- +- fprintf (stderr, "mmap (%s, %x) -> %x\n", old_name, stat_buf.st_size,
- +- old_base);
- +-#endif
- ++ if (read (old_file, old_base, stat_buf.st_size) != stat_buf.st_size)
- ++ fatal ("Didn't read all of %s: errno %d\n", old_name, errno);
- /* Get pointers to headers & section names */
- @@ -702,57 +553,61 @@ $NetBSD: patch-ab,v 1.3 2011/12/24 17:07
- old_section_names = (char *) old_base
- + OLD_SECTION_H (old_file_h->e_shstrndx).sh_offset;
- -@@ -544,16 +731,61 @@ unexec (new_name, old_name, data_start,
- - if (old_bss_index == old_file_h->e_shnum)
- - fatal ("Can't find .bss in %s.\n", old_name, 0);
- ++ /* Find the mdebug section, if any. */
- ++
- ++ old_mdebug_index = find_section (".mdebug", old_section_names,
- ++ old_name, old_file_h, old_section_h, 1);
- ++
- + /* Find the old .bss section. Figure out parameters of the new
- + * data2 and bss sections.
- + */
- -+#ifdef HAVE_MIPS_SBSS
- -+ for (old_sbss_index = 1; old_sbss_index < (int) old_file_h->e_shnum;
- -+ old_sbss_index++)
- -+ {
- -+#ifdef DEBUG
- -+ fprintf (stderr, "Looking for .sbss - found %s\n",
- -+ old_section_names + OLD_SECTION_H (old_sbss_index).sh_name);
- -+#endif
- -+ if (!strcmp (old_section_names + OLD_SECTION_H (old_sbss_index).sh_name,
- -+ ".sbss"))
- -+ break;
- -+ }
- -+ if (old_sbss_index == old_file_h->e_shnum)
- -+ {
- -+ old_bss_addr = OLD_SECTION_H(old_bss_index).sh_addr;
- -+ old_bss_size = OLD_SECTION_H(old_bss_index).sh_size;
- -+ new_data2_offset = OLD_SECTION_H(old_bss_index).sh_offset;
- +- for (old_bss_index = 1; old_bss_index < (int) old_file_h->e_shnum;
- +- old_bss_index++)
- ++ old_bss_index = find_section (".bss", old_section_names,
- ++ old_name, old_file_h, old_section_h, 0);
- ++
- ++ old_sbss_index = find_section (".sbss", old_section_names,
- ++ old_name, old_file_h, old_section_h, 1);
- ++ if (old_sbss_index != -1)
- ++ if (OLD_SECTION_H (old_sbss_index).sh_type == SHT_PROGBITS)
- ++ old_sbss_index = -1;
- ++
- ++ if (old_sbss_index == -1)
- + {
- +-#ifdef DEBUG
- +- fprintf (stderr, "Looking for .bss - found %s\n",
- +- old_section_names + OLD_SECTION_H (old_bss_index).sh_name);
- +-#endif
- +- if (!strcmp (old_section_names + OLD_SECTION_H (old_bss_index).sh_name,
- +- ELF_BSS_SECTION_NAME))
- +- break;
- ++ old_bss_addr = OLD_SECTION_H (old_bss_index).sh_addr;
- ++ old_bss_size = OLD_SECTION_H (old_bss_index).sh_size;
- ++ old_bss_offset = OLD_SECTION_H (old_bss_index).sh_offset;
- + new_data2_index = old_bss_index;
- + }
- + else
- + {
- -+ old_bss_addr = OLD_SECTION_H(old_sbss_index).sh_addr;
- -+ old_bss_size = OLD_SECTION_H(old_bss_index).sh_size
- -+ + OLD_SECTION_H(old_sbss_index).sh_size;
- -+ new_data2_offset = OLD_SECTION_H(old_sbss_index).sh_offset;
- ++ old_bss_addr = OLD_SECTION_H (old_sbss_index).sh_addr;
- ++ old_bss_size = OLD_SECTION_H (old_bss_index).sh_size
- ++ + OLD_SECTION_H (old_sbss_index).sh_size;
- ++ old_bss_offset = OLD_SECTION_H (old_sbss_index).sh_offset;
- + new_data2_index = old_sbss_index;
- -+ }
- -+
- -+ for (old_mdebug_index = 1; old_mdebug_index < (int) old_file_h->e_shnum;
- -+ old_mdebug_index++)
- -+ {
- -+#ifdef DEBUG
- -+ fprintf (stderr, "Looking for .mdebug - found %s\n",
- -+ old_section_names + OLD_SECTION_H (old_mdebug_index).sh_name);
- -+#endif
- -+ if (!strcmp (old_section_names + OLD_SECTION_H (old_mdebug_index).sh_name,
- -+ ".mdebug"))
- -+ break;
- -+ }
- -+ if (old_mdebug_index == old_file_h->e_shnum)
- -+ old_mdebug_index = 0;
- -+#else /* not HAVE_MIPS_SBSS */
- - old_bss_addr = OLD_SECTION_H (old_bss_index).sh_addr;
- - old_bss_size = OLD_SECTION_H (old_bss_index).sh_size;
- + }
- +- if (old_bss_index == old_file_h->e_shnum)
- +- fatal ("Can't find .bss in %s.\n", old_name, 0);
- +
- +- 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 = (Elf32_Addr) sbrk (0);
- -+#endif /* not HAVE_MIPS_SBSS */
- ++ /* Find the old .data section. Figure out parameters of
- ++ the new data2 and bss sections. */
- ++
- ++ old_data_index = find_section (".data", old_section_names,
- ++ old_name, old_file_h, old_section_h, 0);
- ++
- +#if defined (emacs) || !defined (DEBUG)
- + new_bss_addr = (ElfW(Addr)) sbrk (0);
- #else
- @@ -760,72 +615,131 @@ $NetBSD: patch-ab,v 1.3 2011/12/24 17:07
- #endif
- new_data2_addr = old_bss_addr;
- new_data2_size = new_bss_addr - old_bss_addr;
- -+#ifndef HAVE_MIPS_SBSS
- - new_data2_offset = OLD_SECTION_H (old_bss_index).sh_offset;
- -+#endif /* not HAVE_MIPS_SBSS */
- +- new_data2_offset = OLD_SECTION_H (old_bss_index).sh_offset;
- ++ new_data2_offset = OLD_SECTION_H (old_data_index).sh_offset
- ++ + (new_data2_addr - OLD_SECTION_H (old_data_index).sh_addr);
- ++ /* This is the amount by which the sections following the bss sections
- ++ must be shifted in the image. It can differ from new_data2_size if
- ++ the end of the old .data section (and thus the offset of the .bss
- ++ section) was unaligned. */
- ++ new_data2_incr = new_data2_size + (new_data2_offset - old_bss_offset);
- ++ new_data2_shincr = round_up(new_data2_incr, old_program_h->p_align);
- #ifdef DEBUG
- fprintf (stderr, "old_bss_index %d\n", old_bss_index);
- -@@ -582,15 +814,20 @@ unexec (new_name, old_name, data_start,
- + fprintf (stderr, "old_bss_addr %x\n", old_bss_addr);
- + fprintf (stderr, "old_bss_size %x\n", old_bss_size);
- ++ fprintf (stderr, "old_bss_offset %x\n", old_bss_offset);
- + 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);
- ++ fprintf (stderr, "new_data2_incr %x\n", new_data2_incr);
- + #endif
- +
- + 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
- +- * pointers to various interesting objects. stat_buf still has
- +- * old_file data.
- ++ /* Set the output file to the right size. Allocate a buffer to hold
- ++ * the image of the new file. Set pointers to various interesting
- ++ * objects. stat_buf still has old_file data.
- + */
- +
- + new_file = open (new_name, O_RDWR | O_CREAT, 0666);
- + if (new_file < 0)
- + fatal ("Can't creat (%s): errno %d\n", new_name, errno);
- +
- +- new_file_size = stat_buf.st_size + old_file_h->e_shentsize + new_data2_size;
- ++ new_file_size = stat_buf.st_size + old_file_h->e_shentsize + new_data2_shincr;
- +
- if (ftruncate (new_file, new_file_size))
- fatal ("Can't ftruncate (%s): errno %d\n", new_name, errno);
- - new_base = mmap (0, new_file_size, PROT_READ | PROT_WRITE, MAP_SHARED,
- - new_file, 0);
- -+#ifdef UNEXEC_USE_MAP_PRIVATE
- -+ new_base = mmap ((caddr_t) 0, new_file_size, PROT_READ | PROT_WRITE,
- -+ MAP_PRIVATE, new_file, 0);
- -+#else
- -+ new_base = mmap ((caddr_t) 0, new_file_size, PROT_READ | PROT_WRITE,
- -+ MAP_SHARED, new_file, 0);
- -+#endif
- -
- - if (new_base == (caddr_t) -1)
- - fatal ("Can't mmap (%s): errno %d\n", new_name, errno);
- -
- +-
- +- if (new_base == (caddr_t) -1)
- +- fatal ("Can't mmap (%s): errno %d\n", new_name, errno);
- +-
- - 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);
- ++ new_base = mmap (NULL, new_file_size, PROT_READ | PROT_WRITE,
- ++ MAP_ANON | MAP_PRIVATE, mmap_fd, 0);
- ++ if (new_base == MAP_FAILED)
- ++ fatal ("Can't allocate buffer for %s\n", old_name);
- ++
- + 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) *)
- - ((byte *) new_base + old_file_h->e_shoff + new_data2_size);
- ++ ((byte *) new_base + old_file_h->e_shoff + new_data2_shincr);
- /* Make our new file, program and section headers as copies of the
- -@@ -633,8 +870,14 @@ unexec (new_name, old_name, data_start,
- + * originals.
- +@@ -608,7 +835,7 @@ unexec (new_name, old_name, data_start,
- + * further away now.
- + */
- +
- +- new_file_h->e_shoff += new_data2_size;
- ++ new_file_h->e_shoff += new_data2_shincr;
- + new_file_h->e_shnum += 1;
- +
- + #ifdef DEBUG
- +@@ -629,12 +856,22 @@ unexec (new_name, old_name, data_start,
- + for (n = new_file_h->e_phnum - 1; n >= 0; n--)
- + {
- + /* Compute maximum of all requirements for alignment of section. */
- +- int alignment = (NEW_PROGRAM_H (n)).p_align;
- ++ ElfW(Word) 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;
- -+#ifdef HAVE_MIPS_SBSS
- +- if (NEW_PROGRAM_H (n).p_vaddr + NEW_PROGRAM_H (n).p_filesz > old_bss_addr)
- +- fatal ("Program segment above .bss in %s\n", old_name, 0);
- ++#ifdef __sgi
- ++ /* According to r02kar@x4u2.desy.de (Karsten Kuenne)
- ++ and oliva@gnu.org (Alexandre Oliva), on IRIX 5.2, we
- ++ always get "Program segment above .bss" when dumping
- ++ when the executable doesn't have an sbss section. */
- ++ if (old_sbss_index != -1)
- ++#endif /* __sgi */
- + if (NEW_PROGRAM_H (n).p_vaddr + NEW_PROGRAM_H (n).p_filesz
- -+ > round_up (old_bss_addr, alignment))
- -+ fatal ("Program segment above .bss in %s\n", old_name, 0);
- -+#else /* not HAVE_MIPS_SBSS */
- - if (NEW_PROGRAM_H (n).p_vaddr + NEW_PROGRAM_H (n).p_filesz > old_bss_addr)
- - fatal ("Program segment above .bss in %s\n", old_name, 0);
- -+#endif /* not HAVE_MIPS_SBSS */
- ++ > (old_sbss_index == -1
- ++ ? old_bss_addr
- ++ : round_up (old_bss_addr, alignment)))
- ++ fatal ("Program segment above .bss in %s\n", old_name, 0);
- if (NEW_PROGRAM_H (n).p_type == PT_LOAD
- && (round_up ((NEW_PROGRAM_H (n)).p_vaddr
- -@@ -646,9 +889,16 @@ unexec (new_name, old_name, data_start,
- +@@ -646,10 +883,12 @@ unexec (new_name, old_name, data_start,
- if (n < 0)
- fatal ("Couldn't find segment next to .bss in %s\n", old_name, 0);
- - NEW_PROGRAM_H (n).p_filesz += new_data2_size;
- -+#ifdef HAVE_MIPS_SBSS
- -+ bss_phdr_index = n;
- -+#endif
- -+
- + /* Make sure that the size includes any padding before the old .bss
- + section. */
- + NEW_PROGRAM_H (n).p_filesz = new_bss_addr - NEW_PROGRAM_H (n).p_vaddr;
- NEW_PROGRAM_H (n).p_memsz = NEW_PROGRAM_H (n).p_filesz;
- -+
- - #if 0 /* Maybe allow section after data2 - does this ever happen? */
- +-#if 0 /* Maybe allow section after data2 - does this ever happen? */
- ++#ifdef IRIX5 /* allow section after data2 */
- for (n = new_file_h->e_phnum - 1; n >= 0; n--)
- {
- -@@ -675,18 +925,27 @@ unexec (new_name, old_name, data_start,
- + if (NEW_PROGRAM_H (n).p_vaddr
- +@@ -657,7 +896,7 @@ unexec (new_name, old_name, data_start,
- + NEW_PROGRAM_H (n).p_vaddr += new_data2_size - old_bss_size;
- +
- + if (NEW_PROGRAM_H (n).p_offset >= new_data2_offset)
- +- NEW_PROGRAM_H (n).p_offset += new_data2_size;
- ++ NEW_PROGRAM_H (n).p_offset += new_data2_incr;
- + }
- + #endif
- +
- +@@ -675,18 +914,20 @@ unexec (new_name, old_name, data_start,
- if (old_data_index == old_file_h->e_shnum)
- fatal ("Can't find .data in %s.\n", old_name, 0);
- @@ -837,17 +751,10 @@ $NetBSD: patch-ab,v 1.3 2011/12/24 17:07
- caddr_t src;
- - /* If it is bss section, insert the new data2 section before it. */
- - if (n == old_bss_index)
- -+ int temp_index;
- -+#ifdef HAVE_MIPS_SBSS
- + /* If it is (s)bss section, insert the new data2 section before it. */
- + /* new_data2_index is the index of either old_sbss or old_bss, that was
- + chosen as a section for new_data2. */
- -+ temp_index = new_data2_index;
- -+#else /* not HAVE_MIPS_SBSS */
- -+ /* If it is bss section, insert the new data2 section before it. */
- -+ temp_index = old_bss_index;
- -+#endif /* not HAVE_MIPS_SBSS */
- -+ if (n == temp_index)
- ++ if (n == new_data2_index)
- {
- /* Steal the data section header for this data2 section. */
- memcpy (&NEW_SECTION_H (nn), &OLD_SECTION_H (old_data_index),
- @@ -857,7 +764,7 @@ $NetBSD: patch-ab,v 1.3 2011/12/24 17:07
- NEW_SECTION_H (nn).sh_addr = new_data2_addr;
- NEW_SECTION_H (nn).sh_offset = new_data2_offset;
- NEW_SECTION_H (nn).sh_size = new_data2_size;
- -@@ -696,37 +955,87 @@ unexec (new_name, old_name, data_start,
- +@@ -696,73 +937,235 @@ unexec (new_name, old_name, data_start,
- NEW_SECTION_H (nn).sh_addralign = OLD_SECTION_H (n).sh_addralign;
- /* Now copy over what we have in the memory now. */
- @@ -873,49 +780,29 @@ $NetBSD: patch-ab,v 1.3 2011/12/24 17:07
- +
- + memcpy (&NEW_SECTION_H (nn), &OLD_SECTION_H (n),
- old_file_h->e_shentsize);
- -
- +-
- - /* The new bss section's size is zero, and its file offset and virtual
- - address should be off by NEW_DATA2_SIZE. */
- - if (n == old_bss_index)
- ++
- + if (n == old_bss_index
- -+#ifdef HAVE_MIPS_SBSS
- + /* The new bss and sbss section's size is zero, and its file offset
- + and virtual address should be off by NEW_DATA2_SIZE. */
- + || n == old_sbss_index
- -+#endif /* HAVE_MIPS_SBSS */
- + )
- {
- - /* NN should be `old_bss_index + 1' at this point. */
- - NEW_SECTION_H (nn).sh_offset += new_data2_size;
- - NEW_SECTION_H (nn).sh_addr += new_data2_size;
- +- /* NN should be `old_bss_index + 1' at this point. */
- +- NEW_SECTION_H (nn).sh_offset += new_data2_size;
- +- NEW_SECTION_H (nn).sh_addr += new_data2_size;
- ++ /* NN should be `old_s?bss_index + 1' at this point. */
- ++ NEW_SECTION_H (nn).sh_offset = new_data2_offset + new_data2_size;
- ++ NEW_SECTION_H (nn).sh_addr = new_data2_addr + new_data2_size;
- /* Let the new bss section address alignment be the same as the
- - section address alignment followed the old bss section, so
- + section address alignment followed the old bss section, so
- this section will be placed in exactly the same place. */
- NEW_SECTION_H (nn).sh_addralign = OLD_SECTION_H (nn).sh_addralign;
- NEW_SECTION_H (nn).sh_size = 0;
- -+
- -+#ifdef HAVE_MIPS_SBSS
- -+ /* On ELF mips, the new data section replaces both .sbss and .bss
- -+ (we have, after all, written to them.). Adding new_data2_size
- -+ to the sh_addr and sh_offset of sbss puts sbss at the end of
- -+ the new data section. setting the size to zero makes it empty.
- -+ But then, adding the new_data2_size to the bss address puts
- -+ its start beyond the end of the original bss. If the sbss size
- -+ was bigger than a page, the bss ends up not covered by the
- -+ program header. This breaks strip. Since both sbss and bss
- -+ are zero-sized, just use the same address and file offset for
- -+ both, guaranteeing other tools will assign them to the same
- -+ program section (asssuming no sections are loaded at higher
- -+ offsets.) */
- -+ if (n == old_bss_index) {
- -+ int new_sbss_bss_padding = NEW_SECTION_H(nn).sh_addr -
- -+ NEW_SECTION_H(nn - 1).sh_addr;
- -+ printf("sbss to bss offset =0x%x\n", new_sbss_bss_padding);
- -+ NEW_SECTION_H(nn).sh_addr =NEW_SECTION_H(nn - 1).sh_addr;
- -+ NEW_SECTION_H(nn).sh_offset =NEW_SECTION_H(nn - 1).sh_offset;
- -+ }
- -+#endif /* HAVE_MIPS_SBSS */
- }
- - /* Any section that was original placed AFTER the bss section should now
- - be off by NEW_DATA2_SIZE. */
- @@ -925,7 +812,12 @@ $NetBSD: patch-ab,v 1.3 2011/12/24 17:07
- + else
- + {
- + /* Any section that was original placed AFTER the bss
- -+ section should now be off by NEW_DATA2_SIZE. */
- ++ section should now be off by NEW_DATA2_INCR. If a
- ++ section overlaps the .bss section, consider it to be
- ++ placed after the .bss section. Overlap can occur if the
- ++ section just before .bss has less-strict alignment; this
- ++ was observed between .symtab and .bss on Solaris 2.5.1
- ++ (sparc) with GCC snapshot 960602. */
- +#ifdef SOLARIS_POWERPC
- + /* On PPC Reference Platform running Solaris 2.5.1
- + the plt section is also of type NOBI like the bss section.
- @@ -937,12 +829,10 @@ $NetBSD: patch-ab,v 1.3 2011/12/24 17:07
- + Erik Deumens, deumens@qtp.ufl.edu. */
- + if (NEW_SECTION_H (nn).sh_offset
- + >= OLD_SECTION_H (old_bss_index-1).sh_offset)
- -+ NEW_SECTION_H (nn).sh_offset += new_data2_size;
- ++ NEW_SECTION_H (nn).sh_offset += new_data2_incr;
- +#else
- -+ if (round_up (NEW_SECTION_H (nn).sh_offset,
- -+ OLD_SECTION_H (old_bss_index).sh_addralign)
- -+ >= new_data2_offset)
- -+ NEW_SECTION_H (nn).sh_offset += new_data2_size;
- ++ if (NEW_SECTION_H (nn).sh_offset >= old_bss_offset)
- ++ NEW_SECTION_H (nn).sh_offset += new_data2_incr;
- +#endif
- + /* Any section that was originally placed after the section
- + header table should now be off by the size of one section
- @@ -960,7 +850,20 @@ $NetBSD: patch-ab,v 1.3 2011/12/24 17:07
- PATCH_INDEX (NEW_SECTION_H (nn).sh_link);
- /* For symbol tables, info is a symbol table index,
- so don't change it. */
- -@@ -738,7 +1047,7 @@ unexec (new_name, old_name, data_start,
- + if (NEW_SECTION_H (nn).sh_type != SHT_SYMTAB
- + && NEW_SECTION_H (nn).sh_type != SHT_DYNSYM)
- + PATCH_INDEX (NEW_SECTION_H (nn).sh_info);
- ++
- ++ if (old_sbss_index != -1)
- ++ if (!strcmp (old_section_names + NEW_SECTION_H (nn).sh_name, ".sbss"))
- ++ {
- ++ NEW_SECTION_H (nn).sh_offset =
- ++ round_up (NEW_SECTION_H (nn).sh_offset,
- ++ NEW_SECTION_H (nn).sh_addralign);
- ++ NEW_SECTION_H (nn).sh_type = SHT_PROGBITS;
- ++ }
- +
- + /* Now, start to copy the content of sections. */
- if (NEW_SECTION_H (nn).sh_type == SHT_NULL
- || NEW_SECTION_H (nn).sh_type == SHT_NOBITS)
- continue;
- @@ -969,20 +872,39 @@ $NetBSD: patch-ab,v 1.3 2011/12/24 17:07
- /* Write out the sections. .data and .data1 (and data2, called
- ".data" in the strings table) get copied from the current process
- instead of the old file. */
- -@@ -747,22 +1056,54 @@ unexec (new_name, old_name, data_start,
- - || !strcmp ((old_section_names + NEW_SECTION_H(n).sh_name),
- - ".sdata")
- - #endif
- -+#ifdef HAVE_MIPS_SBSS
- + if (!strcmp (old_section_names + NEW_SECTION_H (n).sh_name, ".data")
- +-#ifdef _nec_ews_svr4 /* hir, 1994.6.13 */
- +- || !strcmp ((old_section_names + NEW_SECTION_H(n).sh_name),
- + || !strcmp ((old_section_names + NEW_SECTION_H (n).sh_name),
- -+ ".sdata")
- + ".sdata")
- + || !strcmp ((old_section_names + NEW_SECTION_H (n).sh_name),
- + ".lit4")
- + || !strcmp ((old_section_names + NEW_SECTION_H (n).sh_name),
- + ".lit8")
- -+#endif /* HAVE_MIPS_SBSS */
- ++ /* The conditional bit below was in Oliva's original code
- ++ (1999-08-25) and seems to have been dropped by mistake
- ++ subsequently. It prevents a crash at startup under X in
- ++ `IRIX64 6.5 6.5.17m' with c_dev 7.3.1.3m. It causes no
- ++ trouble on the other ELF platforms I could test (Irix
- ++ 6.5.15m, Solaris 8, Debian Potato x86, Debian Woody
- ++ SPARC); however, it's reported to cause crashes under
- ++ some version of GNU/Linux. It's not yet clear what's
- ++ changed in that Irix version to cause the problem, or why
- ++ the fix sometimes fails under GNU/Linux. There's
- ++ probably no good reason to have something Irix-specific
- ++ here, but this will have to do for now. IRIX6_5 is the
- ++ most specific macro we have to test. -- fx 2002-10-01 */
- ++#ifdef IRIX6_5
- ++ || !strcmp ((old_section_names + NEW_SECTION_H (n).sh_name),
- ++ ".got")
- + #endif
- || !strcmp ((old_section_names + NEW_SECTION_H (n).sh_name),
- - ".data1"))
- +- ".data1"))
- ++ ".sdata1")
- ++ || !strcmp ((old_section_names + NEW_SECTION_H (n).sh_name),
- ++ ".data1")
- ++ || !strcmp ((old_section_names + NEW_SECTION_H (n).sh_name),
- ++ ".sbss"))
- src = (caddr_t) OLD_SECTION_H (n).sh_addr;
- else
- src = old_base + OLD_SECTION_H (n).sh_offset;
- @@ -991,18 +913,30 @@ $NetBSD: patch-ab,v 1.3 2011/12/24 17:07
- memcpy (NEW_SECTION_H (nn).sh_offset + new_base, src,
- NEW_SECTION_H (nn).sh_size);
- -+#ifdef __alpha__
- ++#if defined(__alpha__) && !defined(__NetBSD__)
- + /* 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);
- -+ relocate_ecoff_symhdr(symhdr, new_data2_size);
- ++
- ++ 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 defined (__sony_news) && defined (_SYSTYPE_SYSV)
- -+ if (NEW_SECTION_H (nn).sh_type == SHT_MIPS_DEBUG && old_mdebug_index)
- ++ if (NEW_SECTION_H (nn).sh_type == SHT_MIPS_DEBUG
- ++ && old_mdebug_index != -1)
- + {
- + int diff = NEW_SECTION_H(nn).sh_offset
- + - OLD_SECTION_H(old_mdebug_index).sh_offset;
- @@ -1010,10 +944,75 @@ $NetBSD: patch-ab,v 1.3 2011/12/24 17:07
- +
- + if (diff)
- + {
- -+ relocate_ecoff_symhdr(phdr, diff);
- ++ phdr->cbLineOffset += diff;
- ++ phdr->cbDnOffset += diff;
- ++ phdr->cbPdOffset += diff;
- ++ phdr->cbSymOffset += diff;
- ++ phdr->cbOptOffset += diff;
- ++ phdr->cbAuxOffset += diff;
- ++ phdr->cbSsOffset += diff;
- ++ phdr->cbSsExtOffset += diff;
- ++ phdr->cbFdOffset += diff;
- ++ phdr->cbRfdOffset += diff;
- ++ phdr->cbExtOffset += diff;
- + }
- + }
- -+#endif /* __sony_news and systype_sysv */
- ++#endif /* __sony_news && _SYSTYPE_SYSV */
- ++
- ++#if __sgi
- ++ /* Adjust the HDRR offsets in .mdebug and copy the
- ++ line data if it's in its usual 'hole' in the object.
- ++ Makes the new file debuggable with dbx.
- ++ patches up two problems: the absolute file offsets
- ++ in the HDRR record of .mdebug (see /usr/include/syms.h), and
- ++ the ld bug that gets the line table in a hole in the
- ++ elf file rather than in the .mdebug section proper.
- ++ David Anderson. davea@sgi.com Jan 16,1994. */
- ++ if (n == old_mdebug_index)
- ++ {
- ++#define MDEBUGADJUST(__ct,__fileaddr) \
- ++ if (n_phdrr->__ct > 0) \
- ++ { \
- ++ n_phdrr->__fileaddr += movement; \
- ++ }
- ++
- ++ HDRR * o_phdrr = (HDRR *)((byte *)old_base + OLD_SECTION_H (n).sh_offset);
- ++ HDRR * n_phdrr = (HDRR *)((byte *)new_base + NEW_SECTION_H (nn).sh_offset);
- ++ unsigned movement = new_data2_size;
- ++
- ++ MDEBUGADJUST (idnMax, cbDnOffset);
- ++ MDEBUGADJUST (ipdMax, cbPdOffset);
- ++ MDEBUGADJUST (isymMax, cbSymOffset);
- ++ MDEBUGADJUST (ioptMax, cbOptOffset);
- ++ MDEBUGADJUST (iauxMax, cbAuxOffset);
- ++ MDEBUGADJUST (issMax, cbSsOffset);
- ++ MDEBUGADJUST (issExtMax, cbSsExtOffset);
- ++ MDEBUGADJUST (ifdMax, cbFdOffset);
- ++ MDEBUGADJUST (crfd, cbRfdOffset);
- ++ MDEBUGADJUST (iextMax, cbExtOffset);
- ++ /* The Line Section, being possible off in a hole of the object,
- ++ requires special handling. */
- ++ if (n_phdrr->cbLine > 0)
- ++ {
- ++ if (o_phdrr->cbLineOffset > (OLD_SECTION_H (n).sh_offset
- ++ + OLD_SECTION_H (n).sh_size))
- ++ {
- ++ /* line data is in a hole in elf. do special copy and adjust
- ++ for this ld mistake.
- ++ */
- ++ n_phdrr->cbLineOffset += movement;
- ++
- ++ memcpy (n_phdrr->cbLineOffset + new_base,
- ++ o_phdrr->cbLineOffset + old_base, n_phdrr->cbLine);
- ++ }
- ++ else
- ++ {
- ++ /* somehow line data is in .mdebug as it is supposed to be. */
- ++ MDEBUGADJUST (cbLine, cbLineOffset);
- ++ }
- ++ }
- ++ }
- ++#endif /* __sgi */
- +
- /* If it is the symbol table, its st_shndx field needs to be patched. */
- if (NEW_SECTION_H (nn).sh_type == SHT_SYMTAB
- @@ -1027,7 +1026,7 @@ $NetBSD: patch-ab,v 1.3 2011/12/24 17:07
- new_base);
- for (; num--; sym++)
- {
- -@@ -770,7 +1111,7 @@ unexec (new_name, old_name, data_start,
- +@@ -770,7 +1173,7 @@ unexec (new_name, old_name, data_start,
- || (sym->st_shndx == SHN_ABS)
- || (sym->st_shndx == SHN_COMMON))
- continue;
- @@ -1036,7 +1035,7 @@ $NetBSD: patch-ab,v 1.3 2011/12/24 17:07
- PATCH_INDEX (sym->st_shndx);
- }
- }
- -@@ -780,22 +1121,72 @@ unexec (new_name, old_name, data_start,
- +@@ -780,30 +1183,101 @@ unexec (new_name, old_name, data_start,
- for (n = new_file_h->e_shnum - 1; n; n--)
- {
- byte *symnames;
- @@ -1064,6 +1063,7 @@ $NetBSD: patch-ab,v 1.3 2011/12/24 17:07
- memcpy (&symp->st_value, &new_bss_addr, sizeof (new_bss_addr));
- }
- +- /* Close the files and make the new file executable. */
- + /* This loop seeks out relocation sections for the data section, so
- + that it can undo relocations performed by the runtime linker. */
- + for (n = new_file_h->e_shnum - 1; n; n--)
- @@ -1080,6 +1080,18 @@ $NetBSD: patch-ab,v 1.3 2011/12/24 17:07
- + nn = section.sh_info;
- + if (!strcmp (old_section_names + NEW_SECTION_H (nn).sh_name, ".data")
- + || !strcmp ((old_section_names + NEW_SECTION_H (nn).sh_name),
- ++ ".sdata")
- ++ || !strcmp ((old_section_names + NEW_SECTION_H (nn).sh_name),
- ++ ".lit4")
- ++ || !strcmp ((old_section_names + NEW_SECTION_H (nn).sh_name),
- ++ ".lit8")
- ++#ifdef IRIX6_5 /* see above */
- ++ || !strcmp ((old_section_names + NEW_SECTION_H (nn).sh_name),
- ++ ".got")
- ++#endif
- ++ || !strcmp ((old_section_names + NEW_SECTION_H (nn).sh_name),
- ++ ".sdata1")
- ++ || !strcmp ((old_section_names + NEW_SECTION_H (nn).sh_name),
- + ".data1"))
- + {
- + ElfW(Addr) offset = NEW_SECTION_H (nn).sh_addr -
- @@ -1102,15 +1114,34 @@ $NetBSD: patch-ab,v 1.3 2011/12/24 17:07
- + break;
- + }
- + }
- -+
- -+#ifdef UNEXEC_USE_MAP_PRIVATE
- -+ if (lseek (new_file, 0, SEEK_SET) == -1)
- -+ fatal ("Can't rewind (%s): errno %d\n", new_name, errno);
- +
- +- if (close (old_file))
- +- fatal ("Can't close (%s): errno %d\n", old_name, errno);
- ++ /* Write out new_file, close it, and free the buffer containing its
- ++ * contents */
- +
- + if (write (new_file, new_base, new_file_size) != new_file_size)
- -+ fatal ("Can't write (%s): errno %d\n", new_name, errno);
- ++ fatal ("Didn't write %d bytes to %s: errno %d\n",
- ++ new_file_size, new_base, errno);
- +
- + if (close (new_file))
- + fatal ("Can't close (%s): errno %d\n", new_name, errno);
- +
- ++ munmap (new_base, new_file_size);
- ++
- ++ /* Close old_file, and free the corresponding buffer */
- ++
- ++#if MAP_ANON == 0
- ++ close (mmap_fd);
- +#endif
- +
- - /* Close the files and make the new file executable. */
- ++ if (close (old_file))
- ++ fatal ("Can't close (%s): errno %d\n", old_name, errno);
- ++
- ++ munmap (old_base, old_file_size);
- ++
- ++ /* Make the new file executable */
- ++
- + if (stat (new_name, &stat_buf) == -1)
- + fatal ("Can't stat (%s): errno %d\n", new_name, errno);
- - if (close (old_file))
- Index: patches/patch-src_alloc_c
- ===================================================================
- RCS file: /cvsroot/pkgsrc/editors/mule/patches/patch-src_alloc_c,v
- retrieving revision 1.2
- diff -u -p -d -r1.2 patch-src_alloc_c
- --- patches/patch-src_alloc_c 24 Dec 2011 17:07:07 -0000 1.2
- +++ patches/patch-src_alloc_c 27 Apr 2017 16:07:10 -0000
- @@ -1,9 +1,6 @@
- $NetBSD: patch-src_alloc_c,v 1.2 2011/12/24 17:07:07 dholland Exp $
- - use standard includes
- -- add an empty asm() destroying memory that prevents gcc from
- - optimizing out __malloc_hook and friends (which leads to
- - SIGSEGV in temacs during build)
- --- src/alloc.c.orig 1994-10-24 11:37:41.000000000 +0000
- +++ src/alloc.c
- @@ -15,33 +12,3 @@ $NetBSD: patch-src_alloc_c,v 1.2 2011/12
- #include <config.h>
- #include "lisp.h"
- -@@ -240,6 +241,9 @@ emacs_blocked_free (ptr)
- - {
- - BLOCK_INPUT;
- - __free_hook = old_free_hook;
- -+#ifdef __GNUC__
- -+ __asm __volatile("":::"memory");
- -+#endif
- - free (ptr);
- - __free_hook = emacs_blocked_free;
- - UNBLOCK_INPUT;
- -@@ -253,6 +257,9 @@ emacs_blocked_malloc (size)
- -
- - BLOCK_INPUT;
- - __malloc_hook = old_malloc_hook;
- -+#ifdef __GNUC__
- -+ __asm __volatile("":::"memory");
- -+#endif
- - value = (void *) malloc (size);
- - __malloc_hook = emacs_blocked_malloc;
- - UNBLOCK_INPUT;
- -@@ -269,6 +276,9 @@ emacs_blocked_realloc (ptr, size)
- -
- - BLOCK_INPUT;
- - __realloc_hook = old_realloc_hook;
- -+#ifdef __GNUC__
- -+ __asm __volatile("":::"memory");
- -+#endif
- - value = (void *) realloc (ptr, size);
- - __realloc_hook = emacs_blocked_realloc;
- - UNBLOCK_INPUT;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement