From 1d83257a1db3a9b87675a0dfc68cb4964cecaa09 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Tue, 24 Oct 2017 12:54:28 -0700 Subject: [PATCH] Port to QNX Simplified version of a patch proposed by Elad Lahav in: https://lists.gnu.org/archive/html/emacs-devel/2017-10/msg00716.html which is based on a previous patch I proposed in: https://lists.gnu.org/archive/html/emacs-devel/2017-10/msg00707.html * configure.ac (opsys, CFLAGS, LIBS_SYSTEM, hybrid_malloc) (system_alloc, FIRST_PTY_LETTER, CYGWIN_OBJ): Set appropriately for QNX. * src/unexelf.c [__QNX__]: Include instead of . (unexec): Check for sbrk failure, and fall back on old BSS end. --- configure.ac | 15 +++++++++++++-- src/unexelf.c | 15 +++++++++------ 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/configure.ac b/configure.ac index 646a637cf34..ca75136474e 100644 --- a/configure.ac +++ b/configure.ac @@ -699,6 +699,12 @@ case "${canonical}" in esac ;; + ## QNX Neutrino + *-nto-qnx* ) + opsys=qnxnto + CFLAGS="$CFLAGS -D__NO_EXT_QNX" + ;; + ## Intel 386 machines where we don't care about the manufacturer. i[3456]86-*-* ) case "${canonical}" in @@ -1507,6 +1513,8 @@ case "$opsys" in hpux*) LIBS_SYSTEM="-l:libdld.sl" ;; + qnxnto) LIBS_SYSTEM="-lsocket" ;; + sol2*) LIBS_SYSTEM="-lsocket -lnsl" ;; ## Motif needs -lgen. @@ -2210,7 +2218,8 @@ test "$CANNOT_DUMP" = yes || case "$opsys" in ## darwin ld insists on the use of malloc routines in the System framework. darwin | mingw32 | nacl | sol2-10) ;; - cygwin) hybrid_malloc=yes + cygwin | qnxto) + hybrid_malloc=yes system_malloc= ;; *) test "$ac_cv_func_sbrk" = yes && system_malloc=$emacs_cv_sanitize_address;; esac @@ -4603,7 +4612,7 @@ case $opsys in AC_DEFINE(PTY_TTY_NAME_SPRINTF, []) ;; - gnu | openbsd ) + gnu | openbsd | qnxnto ) AC_DEFINE(FIRST_PTY_LETTER, ['p']) ;; @@ -5144,6 +5153,8 @@ elif test "$opsys" = "mingw32"; then CYGWIN_OBJ= PRE_ALLOC_OBJ= POST_ALLOC_OBJ=lastfile.o +elif test "$opsys" = "qnxnto"; then + CYGWIN_OBJ=sheap.o else CYGWIN_OBJ= PRE_ALLOC_OBJ=lastfile.o diff --git a/src/unexelf.c b/src/unexelf.c index 1cdcfeb44e4..756de5835ce 100644 --- a/src/unexelf.c +++ b/src/unexelf.c @@ -58,9 +58,11 @@ what you give them. Help stamp out software-hoarding! */ #include #include -#if !defined (__NetBSD__) && !defined (__OpenBSD__) -#include -#endif /* not __NetBSD__ and not __OpenBSD__ */ +#ifdef __QNX__ +# include +#elif !defined __NetBSD__ && !defined __OpenBSD__ +# include +#endif #include #if defined (_SYSTYPE_SYSV) #include @@ -222,7 +224,6 @@ unexec (const char *new_name, const char *old_name) { int new_file, old_file; off_t new_file_size; - void *new_break; /* Pointers to the base of the image of the two files. */ caddr_t old_base, new_base; @@ -326,11 +327,13 @@ unexec (const char *new_name, const char *old_name) if (old_bss_index == -1) fatal ("no bss section found"); + void *no_break = (void *) (intptr_t) -1; + void *new_break = no_break; #ifdef HAVE_SBRK new_break = sbrk (0); -#else - new_break = (byte *) old_bss_addr + old_bss_size; #endif + if (new_break == no_break) + new_break = (byte *) old_bss_addr + old_bss_size; new_bss_addr = (ElfW (Addr)) new_break; bss_size_growth = new_bss_addr - old_bss_addr; new_data2_size = bss_size_growth; -- 2.39.2