From owner-freebsd-amd64@FreeBSD.ORG Thu Dec 18 00:34:17 2003 Return-Path: Delivered-To: freebsd-amd64@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 5E9A516A4CE for ; Thu, 18 Dec 2003 00:34:17 -0800 (PST) Received: from bigtex.jrv.org (rrcs-sw-24-73-246-106.biz.rr.com [24.73.246.106]) by mx1.FreeBSD.org (Postfix) with ESMTP id C588443D36 for ; Thu, 18 Dec 2003 00:34:11 -0800 (PST) (envelope-from james@bigtex.jrv.org) Received: from bigtex.jrv.org (localhost [127.0.0.1]) by bigtex.jrv.org (8.12.1/8.12.1) with ESMTP id hBI8YAo8086088 (version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO) for ; Thu, 18 Dec 2003 02:34:10 -0600 (CST) Received: (from james@localhost) by bigtex.jrv.org (8.12.1/8.12.1/Submit) id hBI8YA9S086085; Thu, 18 Dec 2003 02:34:10 -0600 (CST) Date: Thu, 18 Dec 2003 02:34:10 -0600 (CST) Message-Id: <200312180834.hBI8YA9S086085@bigtex.jrv.org> From: James Van Artsdalen To: freebsd-amd64@freebsd.org Subject: port editors/emacs21 patch X-BeenThere: freebsd-amd64@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Porting FreeBSD to the AMD64 platform List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Dec 2003 08:34:17 -0000 I got port editors/emacs21 to build and run on Freebsd-5.2-current x86-64. There are three changes: 1. An AMD64 machine file is needed but not present in the emacs21 sources. I derived this file from alpha.h, removed a bunch of obsolete conditional code, and named this file amd64.h. 2. An rlimit value is stored 32-bit int, truncating the value. This is in the emacs21 sources. 3. A configure.in change is needed to recognize target amd64--freebsd. Without this emasc21 tries to compile with machine file "m/.h". This patch changes code created by FreeBSD ports patch file patch-configure.in, not code in the emacs21 base sources. --- src/m/amd64.h~ Wed Dec 31 18:00:00 1969 +++ src/m/amd64.h Thu Dec 18 00:21:51 2003 @@ -0,0 +1,181 @@ +/* machine description file For the amd64 chip. + Copyright (C) 1994, 1997, 1999 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) +any later version. + +GNU Emacs is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU Emacs; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + + +/* The following line tells the configuration script what sort of + operating system this machine is likely to run. + USUAL-OPSYS="note" + +NOTE-START +Use -opsystem=freebsd +NOTE-END + +*/ + +#define BITS_PER_LONG 64 +#define BITS_PER_EMACS_INT 64 +#ifndef _LP64 +#define _LP64 +#endif + +/* Define WORDS_BIG_ENDIAN iff lowest-numbered byte in a word + is the most significant byte. */ + +#undef WORDS_BIG_ENDIAN + +/* Define NO_ARG_ARRAY if you cannot take the address of the first of a + * group of arguments and treat it as an array of the arguments. */ + +#define NO_ARG_ARRAY + +/* Now define a symbol for the cpu type, if your compiler + does not define it automatically: + Ones defined so far include vax, m68000, ns16000, pyramid, + orion, tahoe, APOLLO and many others */ + +/* __amd64__ defined automatically */ + + +/* Use type EMACS_INT rather than a union, to represent Lisp_Object */ +/* This is desirable for most machines. */ + +#define NO_UNION_TYPE + +/* Define the type to use. */ +#define EMACS_INT long +#define EMACS_UINT unsigned long +#define SPECIAL_EMACS_INT + +/* Define EXPLICIT_SIGN_EXTEND if XINT must explicitly sign-extend + the 24-bit bit field into an int. In other words, if bit fields + are always unsigned. + + If you use NO_UNION_TYPE, this flag does not matter. */ + +#undef EXPLICIT_SIGN_EXTEND + +/* Data type of load average, as read out of kmem. */ + +#define LOAD_AVE_TYPE long + +/* Convert that into an integer that is 100 for a load average of 1.0 */ + +#define LOAD_AVE_CVT(x) (int) (((double) (x)) * 100.0 / FSCALE) + +/* Define C_ALLOCA if this machine does not support a true alloca + and the one written in C should be used instead. + Define HAVE_ALLOCA to say that the system provides a properly + working alloca function and it should be used. + Define neither one if an assembler-language alloca + in the file alloca.s should be used. */ + +#define HAVE_ALLOCA + +/* GNU malloc and the relocating allocator do not work together + with X. [Who wrote that?] */ + +/* May 1995: reportedly [Rainer Schoepf ] both the + system and the gnu malloc system work with "alpha-dec-osf3.0" and + "alpha-dec-osf3.2". */ + +/* May 1995: it seems to me [Morten Welinder ] that both + mallocs work with "alpha-dec-osf2.0", but I daren't break anything + right now. Feel free to play if you want. */ + +/* #define SYSTEM_MALLOC */ + +#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 + +#if defined(__OpenBSD__) +#define ORDINARY_LINK +#endif + +#ifdef __ELF__ +#undef UNEXEC +#define UNEXEC unexelf.o +#endif + +#if defined (LINUX) && __GNU_LIBRARY__ - 0 < 6 +/* This controls a conditional in main. */ +#define LINUX_SBRK_BUG +#endif + + +#define PNTR_COMPARISON_TYPE unsigned long + +/* On the 64 bit architecture, we can use 60 bits for addresses */ + +#define VALBITS 60 + + +/* This definition of MARKBIT is necessary because of the comparison of + ARRAY_MARK_FLAG and MARKBIT in an #if in lisp.h, which cpp doesn't like. */ + +/* #define MARKBIT 0x8000000000000000L */ + + +/* Define XINT and XUINT so that they can take arguments of type int */ + +#define XINT(a) (((long) (a) << (BITS_PER_LONG - VALBITS)) >> (BITS_PER_LONG - VALBITS)) +#define XUINT(a) ((long) (a) & VALMASK) + +/* Define XPNTR to avoid or'ing with DATA_SEG_BITS */ + +#define XPNTR(a) XUINT (a) + +#ifndef NOT_C_CODE +/* We need these because pointers are larger than the default ints. */ +#if !defined(__NetBSD__) && !defined(__OpenBSD__) && !defined(__FreeBSD__) +#include +#endif +#endif /* not NOT_C_CODE */ + +/* On the Alpha it's best to avoid including TERMIO since struct + termio and struct termios are mutually incompatible. */ +/* #define NO_TERMIO */ + +#if defined (LINUX) || defined (__NetBSD__) || defined (__OpenBSD__) +# define TEXT_END ({ extern int _etext; &_etext; }) +# ifndef __ELF__ +# define COFF +# define DATA_END ({ extern int _EDATA; &_EDATA; }) +# endif /* notdef __ELF__ */ +#endif + +#if (defined (__NetBSD__) || defined (__OpenBSD__)) && defined (__ELF__) +#define HAVE_TEXT_START +#endif + +/* Many Alpha implementations (e.g. gas 2.8) can't handle DBL_MIN: + they generate code that uses a signaling NaN instead of DBL_MIN. + Define DBL_MIN_REPLACEMENT to be the next value larger than DBL_MIN: + this avoids the assembler bug. */ +/* #define DBL_MIN_REPLACEMENT 2.2250738585072019e-308 */ --- src/mem-limits.h.~1~ Wed Mar 8 12:49:46 2000 +++ src/mem-limits.h Wed Dec 17 03:15:24 2003 @@ -98,7 +98,7 @@ static POINTER data_space_start; /* Number of bytes of writable memory we can expect to be able to get */ -static unsigned long lim_data; +static rlim_t lim_data; #ifdef NO_LIM_DATA static void --- configure.in~ Tue Dec 16 23:54:24 2003 +++ configure.in Thu Dec 18 00:29:35 2003 @@ -184,6 +184,7 @@ opsys=freebsd case "${canonical}" in alpha*-*-freebsd*) machine=alpha ;; + amd64-*-freebsd*) machine=amd64 ;; i[3456]86-*-freebsd*) machine=intel386 ;; sparc64-*-freebsd*) machine=sparc ;; esac