Commit ed23bd30 by Geoffrey Keating Committed by Geoffrey Keating

config.host: Add a section for generic hosts, and a subsection for Darwin.

	* config.host: Add a section for generic hosts, and a subsection
	for Darwin.  Add a case for x86-darwin.  Update ppc-darwin case.
	* config/host-darwin.c: New, split out of config/rs6000/host-darwin.c.
	* config/host-darwin.h: New.
	* config/x-darwin: New.
	* config/i386/host-i386-darwin.c: New.
	* config/i386/x-darwin: New.
	* config/rs6000/host-darwin.c: Include host-darwin.h.
	(darwin_rs6000_gt_pch_get_address): Move to config/host-darwin.c.
	(darwin_rs6000_gt_pch_use_address): Likewise.
	* config/rs6000/x-darwin: Change name of .o built, update
	dependencies for changes to rs6000/host-darwin.c.

From-SVN: r97709
parent 0df9bf63
2005-04-06 Geoffrey Keating <geoffk@apple.com>
* config.host: Add a section for generic hosts, and a subsection
for Darwin. Add a case for x86-darwin. Update ppc-darwin case.
* config/host-darwin.c: New, split out of config/rs6000/host-darwin.c.
* config/host-darwin.h: New.
* config/x-darwin: New.
* config/i386/host-i386-darwin.c: New.
* config/i386/x-darwin: New.
* config/rs6000/host-darwin.c: Include host-darwin.h.
(darwin_rs6000_gt_pch_get_address): Move to config/host-darwin.c.
(darwin_rs6000_gt_pch_use_address): Likewise.
* config/rs6000/x-darwin: Change name of .o built, update
dependencies for changes to rs6000/host-darwin.c.
2005-04-06 Ralf Corsepius <ralf.corsepius@rtems.org> 2005-04-06 Ralf Corsepius <ralf.corsepius@rtems.org>
PR target/17824 PR target/17824
......
...@@ -85,6 +85,15 @@ case ${host} in ...@@ -85,6 +85,15 @@ case ${host} in
;; ;;
esac esac
# Common parts for widely ported systems.
case ${target} in
*-darwin*)
# Generic darwin host support.
out_host_hook_obj=host-darwin.o
host_xmake_file=x-darwin
;;
esac
# Machine-specific settings. # Machine-specific settings.
case ${host} in case ${host} in
alpha*-dec-*vms*) alpha*-dec-*vms*)
...@@ -164,6 +173,10 @@ case ${host} in ...@@ -164,6 +173,10 @@ case ${host} in
i[34567]86-*-interix3*) i[34567]86-*-interix3*)
host_xmake_file="x-interix" host_xmake_file="x-interix"
;; ;;
i[34567]86-*-darwin*)
out_host_hook_obj="${out_host_hook_obj} host-i386-darwin.o"
host_xmake_file="${host_xmake_file} i386/x-darwin"
;;
i860-*-sysv4*) i860-*-sysv4*)
host_xmake_file=i860/x-sysv4 host_xmake_file=i860/x-sysv4
;; ;;
...@@ -171,9 +184,8 @@ case ${host} in ...@@ -171,9 +184,8 @@ case ${host} in
host_can_use_collect2=no host_can_use_collect2=no
;; ;;
powerpc-*-darwin*) powerpc-*-darwin*)
# powerpc-darwin host support. out_host_hook_obj="${out_host_hook_obj} host-ppc-darwin.o"
out_host_hook_obj=host-darwin.o host_xmake_file="${host_xmake_file} rs6000/x-darwin"
host_xmake_file=rs6000/x-darwin
;; ;;
*-*-solaris2*) *-*-solaris2*)
out_host_hook_obj=host-solaris.o out_host_hook_obj=host-solaris.o
......
/* Darwin host-specific hook definitions.
Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
This file is part of GCC.
GCC 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 2, or (at your
option) any later version.
GCC 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 GCC; see the file COPYING. If not, write to the
Free Software Foundation, 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA. */
#include "config.h"
#include "system.h"
#include "coretypes.h"
#include <sys/mman.h>
#include "toplev.h"
#include "config/host-darwin.h"
/* Yes, this is really supposed to work. */
static char pch_address_space[1024*1024*1024] __attribute__((aligned (4096)));
/* Return the address of the PCH address space, if the PCH will fit in it. */
void *
darwin_gt_pch_get_address (size_t sz, int fd ATTRIBUTE_UNUSED)
{
if (sz <= sizeof (pch_address_space))
return pch_address_space;
else
return NULL;
}
/* Check ADDR and SZ for validity, and deallocate (using munmap) that part of
pch_address_space beyond SZ. */
int
darwin_gt_pch_use_address (void *addr, size_t sz, int fd, size_t off)
{
const size_t pagesize = getpagesize();
void *mmap_result;
int ret;
if ((size_t)pch_address_space % pagesize != 0
|| sizeof (pch_address_space) % pagesize != 0)
abort ();
ret = (addr == pch_address_space && sz <= sizeof (pch_address_space));
if (! ret)
sz = 0;
/* Round the size to a whole page size. Normally this is a no-op. */
sz = (sz + pagesize - 1) / pagesize * pagesize;
if (munmap (pch_address_space + sz, sizeof (pch_address_space) - sz) != 0)
fatal_error ("couldn't unmap pch_address_space: %m\n");
if (ret)
{
mmap_result = mmap (addr, sz,
PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_FIXED,
fd, off);
/* The file might not be mmap-able. */
ret = mmap_result != (void *) MAP_FAILED;
/* Sanity check for broken MAP_FIXED. */
if (ret && mmap_result != addr)
abort ();
}
return ret;
}
/* Darwin host-specific hook definitions.
Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
This file is part of GCC.
GCC 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 2, or (at your
option) any later version.
GCC 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 GCC; see the file COPYING. If not, write to the
Free Software Foundation, 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA. */
extern void * darwin_gt_pch_get_address (size_t sz, int fd);
extern int darwin_gt_pch_use_address (void *addr, size_t sz, int fd,
size_t off);
#undef HOST_HOOKS_GT_PCH_GET_ADDRESS
#define HOST_HOOKS_GT_PCH_GET_ADDRESS darwin_gt_pch_get_address
#undef HOST_HOOKS_GT_PCH_USE_ADDRESS
#define HOST_HOOKS_GT_PCH_USE_ADDRESS darwin_gt_pch_use_address
/* i386-darwin host-specific hook definitions.
Copyright (C) 2003, 2005 Free Software Foundation, Inc.
This file is part of GCC.
GCC 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 2, or (at your option) any later
version.
GCC 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 GCC; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
#include "config.h"
#include "system.h"
#include "coretypes.h"
#include "hosthooks.h"
#include "hosthooks-def.h"
#include "config/host-darwin.h"
/* Darwin doesn't do anything special for x86 hosts; this file exists just
to include config/host-darwin.h. */
const struct host_hooks host_hooks = HOST_HOOKS_INITIALIZER;
host-i386-darwin.o : $(srcdir)/config/i386/host-i386-darwin.c \
$(CONFIG_H) $(SYSTEM_H) coretypes.h hosthooks.h $(HOSTHOOKS_DEF_H) \
config/host-darwin.h
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<
/* Darwin/powerpc host-specific hook definitions. /* Darwin/powerpc host-specific hook definitions.
Copyright (C) 2003, 2004 Free Software Foundation, Inc. Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
This file is part of GCC. This file is part of GCC.
...@@ -23,11 +23,11 @@ ...@@ -23,11 +23,11 @@
#include "coretypes.h" #include "coretypes.h"
#include <signal.h> #include <signal.h>
#include <sys/ucontext.h> #include <sys/ucontext.h>
#include <sys/mman.h>
#include "hosthooks.h" #include "hosthooks.h"
#include "hosthooks-def.h" #include "hosthooks-def.h"
#include "toplev.h" #include "toplev.h"
#include "diagnostic.h" #include "diagnostic.h"
#include "config/host-darwin.h"
static void segv_crash_handler (int); static void segv_crash_handler (int);
static void segv_handler (int, siginfo_t *, void *); static void segv_handler (int, siginfo_t *, void *);
...@@ -137,65 +137,5 @@ darwin_rs6000_extra_signals (void) ...@@ -137,65 +137,5 @@ darwin_rs6000_extra_signals (void)
fatal_error ("While setting up signal handler: %m"); fatal_error ("While setting up signal handler: %m");
} }
#undef HOST_HOOKS_GT_PCH_GET_ADDRESS
#define HOST_HOOKS_GT_PCH_GET_ADDRESS darwin_rs6000_gt_pch_get_address
#undef HOST_HOOKS_GT_PCH_USE_ADDRESS
#define HOST_HOOKS_GT_PCH_USE_ADDRESS darwin_rs6000_gt_pch_use_address
/* Yes, this is really supposed to work. */
static char pch_address_space[1024*1024*1024] __attribute__((aligned (4096)));
/* Return the address of the PCH address space, if the PCH will fit in it. */
static void *
darwin_rs6000_gt_pch_get_address (size_t sz, int fd ATTRIBUTE_UNUSED)
{
if (sz <= sizeof (pch_address_space))
return pch_address_space;
else
return NULL;
}
/* Check ADDR and SZ for validity, and deallocate (using munmap) that part of
pch_address_space beyond SZ. */
static int
darwin_rs6000_gt_pch_use_address (void *addr, size_t sz, int fd, size_t off)
{
const size_t pagesize = getpagesize();
void *mmap_result;
int ret;
if ((size_t)pch_address_space % pagesize != 0
|| sizeof (pch_address_space) % pagesize != 0)
abort ();
ret = (addr == pch_address_space && sz <= sizeof (pch_address_space));
if (! ret)
sz = 0;
/* Round the size to a whole page size. Normally this is a no-op. */
sz = (sz + pagesize - 1) / pagesize * pagesize;
if (munmap (pch_address_space + sz, sizeof (pch_address_space) - sz) != 0)
fatal_error ("couldn't unmap pch_address_space: %m\n");
if (ret)
{
mmap_result = mmap (addr, sz,
PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_FIXED,
fd, off);
/* The file might not be mmap-able. */
ret = mmap_result != (void *) MAP_FAILED;
/* Sanity check for broken MAP_FIXED. */
if (ret && mmap_result != addr)
abort ();
}
return ret;
}
const struct host_hooks host_hooks = HOST_HOOKS_INITIALIZER; const struct host_hooks host_hooks = HOST_HOOKS_INITIALIZER;
host-darwin.o : $(srcdir)/config/rs6000/host-darwin.c $(CONFIG_H) $(SYSTEM_H) \ host-ppc-darwin.o : $(srcdir)/config/rs6000/host-darwin.c \
coretypes.h hosthooks.h hosthooks-def.h toplev.h diagnostic.h $(HOOKS_H) $(CONFIG_H) $(SYSTEM_H) coretypes.h hosthooks.h $(HOSTHOOKS_DEF_H) toplev.h \
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ diagnostic.h config/host-darwin.h
$(srcdir)/config/rs6000/host-darwin.c $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< -o $@
host-darwin.o : $(srcdir)/config/host-darwin.c $(CONFIG_H) $(SYSTEM_H) \
coretypes.h toplev.h config/host-darwin.h
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment