mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-13 19:41:22 +08:00
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:
parent
0df9bf6371
commit
ed23bd30c1
@ -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
|
||||
|
@ -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
81
gcc/config/host-darwin.c
Normal 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
28
gcc/config/host-darwin.h
Normal 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
|
31
gcc/config/i386/host-i386-darwin.c
Normal file
31
gcc/config/i386/host-i386-darwin.c
Normal 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
4
gcc/config/i386/x-darwin
Normal 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) $<
|
@ -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;
|
||||
|
@ -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
3
gcc/config/x-darwin
Normal 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) $<
|
Loading…
x
Reference in New Issue
Block a user