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
This commit is contained in:
Geoffrey Keating 2005-04-06 08:41:37 +00:00 committed by Geoffrey Keating
parent 0df9bf6371
commit ed23bd30c1
9 changed files with 183 additions and 69 deletions

View File

@ -1,3 +1,18 @@
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>
PR target/17824

View File

@ -85,6 +85,15 @@ case ${host} in
;;
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.
case ${host} in
alpha*-dec-*vms*)
@ -164,6 +173,10 @@ case ${host} in
i[34567]86-*-interix3*)
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*)
host_xmake_file=i860/x-sysv4
;;
@ -171,9 +184,8 @@ case ${host} in
host_can_use_collect2=no
;;
powerpc-*-darwin*)
# powerpc-darwin host support.
out_host_hook_obj=host-darwin.o
host_xmake_file=rs6000/x-darwin
out_host_hook_obj="${out_host_hook_obj} host-ppc-darwin.o"
host_xmake_file="${host_xmake_file} rs6000/x-darwin"
;;
*-*-solaris2*)
out_host_hook_obj=host-solaris.o

81
gcc/config/host-darwin.c Normal file
View File

@ -0,0 +1,81 @@
/* 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;
}

28
gcc/config/host-darwin.h Normal file
View File

@ -0,0 +1,28 @@
/* 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

View File

@ -0,0 +1,31 @@
/* 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;

4
gcc/config/i386/x-darwin Normal file
View File

@ -0,0 +1,4 @@
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) $<

View File

@ -1,5 +1,5 @@
/* 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.
@ -23,11 +23,11 @@
#include "coretypes.h"
#include <signal.h>
#include <sys/ucontext.h>
#include <sys/mman.h>
#include "hosthooks.h"
#include "hosthooks-def.h"
#include "toplev.h"
#include "diagnostic.h"
#include "config/host-darwin.h"
static void segv_crash_handler (int);
static void segv_handler (int, siginfo_t *, void *);
@ -137,65 +137,5 @@ darwin_rs6000_extra_signals (void)
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;

View File

@ -1,4 +1,4 @@
host-darwin.o : $(srcdir)/config/rs6000/host-darwin.c $(CONFIG_H) $(SYSTEM_H) \
coretypes.h hosthooks.h hosthooks-def.h toplev.h diagnostic.h $(HOOKS_H)
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
$(srcdir)/config/rs6000/host-darwin.c
host-ppc-darwin.o : $(srcdir)/config/rs6000/host-darwin.c \
$(CONFIG_H) $(SYSTEM_H) coretypes.h hosthooks.h $(HOSTHOOKS_DEF_H) toplev.h \
diagnostic.h config/host-darwin.h
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< -o $@

3
gcc/config/x-darwin Normal file
View File

@ -0,0 +1,3 @@
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) $<