Commit f982f805 by Jason Thorpe Committed by Jason Thorpe

netbsd.h (TARGET_HAS_F_SETLKW): define.

* config/netbsd.h (TARGET_HAS_F_SETLKW): define.
Split a.out-specific bits into...
* config/netbsd-aout.h: ...this.
* config/netbsd-elf.h: New file.
* config/alpha/netbsd-elf.h: Remove.
* config/alpha/netbsd.h: Rewrite for a NetBSD/alpha ELF target.
* config/i386/netbsd-elf.h (LIB_SPEC): Remove.
(STARTFILE_SPEC): Remove redundant definition.
(ENDFILE_SPEC): Likewise.
(LINK_SPEC): Likewise.
(CPP_SPEC): Likewise.
(ASM_SPEC): Likewise.
(LIB_SPEC): Likewise.
(SWITCH_TAKES_ARG): Likewise.
(TARGET_MEM_FUNCTIONS): Likewise.
(CPP_PREDEFINES): Redefine.
(ASM_FINAL_SPEC): Remove redefinition.
(ASM_COMMENT_START): Redefine.
(FUNCTION_PROFILER): Define.
(TARGET_VERSION): Redefine.
Comment and formatting cleanup.
* config/i386/netbsd.h: Include <netbsd-aout.h>.
* config/m68k/netbsd.h: Include <netbsd-aout.h>.
* config/mips/netbsd.h: Rewrite for NetBSD/mips ELF target,
big- or little-endian.
* config/ns32k/netbsd.h: Include <netbsd-aout.h>.
* config.gcc (*-*-netbsd*): Add definitions common to all
NetBSD configs.
(alpha*-*-netbsd*): Remove redundant xm_defines, gas, and
gnu_ld definitions.  Add netbsd-elf.h to and remove
alpha/netbsd-elf.h from tm_file.  Remove alpha/t-crtfm from
tmake_file, and don't lose previous tmake_file contents.
(arm*-*-netbsd*): Add netbsd-aout.h to tm_file.
(i[34567]86-*-netbsdelf*): Remove redundant xm_defines, gas, and
gnu_ld definitions.  Add netbsd-elf.h to tm_file.
(mips-dec-netbsd*): Remove as alias for mipsel-*-netbsd*.
(mipsel-*-netbsd*): Rename this to...
(mips*-*-netbsd*): ...this.  Add elfos.h to tm_file.  Add
mips/little.h to tm_file for mips*el-*.
(powerpc-*-netbsd*): Remove redundant xm_defines definition.
(sparc-*-netbsd*): Add netbsd-aout.h to tm_file.
(vax-*-netbsd*): Add netbsd-aout.h to tm_file.

From-SVN: r49064
parent 58dbcf05
2002-01-21 Jason Thorpe <thorpej@wasabisystems.com>
* config/netbsd.h (TARGET_HAS_F_SETLKW): define.
Split a.out-specific bits into...
* config/netbsd-aout.h: ...this.
* config/netbsd-elf.h: New file.
* config/alpha/netbsd-elf.h: Remove.
* config/alpha/netbsd.h: Rewrite for a NetBSD/alpha ELF target.
* config/i386/netbsd-elf.h (LIB_SPEC): Remove.
(STARTFILE_SPEC): Remove redundant definition.
(ENDFILE_SPEC): Likewise.
(LINK_SPEC): Likewise.
(CPP_SPEC): Likewise.
(ASM_SPEC): Likewise.
(LIB_SPEC): Likewise.
(SWITCH_TAKES_ARG): Likewise.
(TARGET_MEM_FUNCTIONS): Likewise.
(CPP_PREDEFINES): Redefine.
(ASM_FINAL_SPEC): Remove redefinition.
(ASM_COMMENT_START): Redefine.
(FUNCTION_PROFILER): Define.
(TARGET_VERSION): Redefine.
Comment and formatting cleanup.
* config/i386/netbsd.h: Include <netbsd-aout.h>.
* config/m68k/netbsd.h: Include <netbsd-aout.h>.
* config/mips/netbsd.h: Rewrite for NetBSD/mips ELF target,
big- or little-endian.
* config/ns32k/netbsd.h: Include <netbsd-aout.h>.
* config.gcc (*-*-netbsd*): Add definitions common to all
NetBSD configs.
(alpha*-*-netbsd*): Remove redundant xm_defines, gas, and
gnu_ld definitions. Add netbsd-elf.h to and remove
alpha/netbsd-elf.h from tm_file. Remove alpha/t-crtfm from
tmake_file, and don't lose previous tmake_file contents.
(arm*-*-netbsd*): Add netbsd-aout.h to tm_file.
(i[34567]86-*-netbsdelf*): Remove redundant xm_defines, gas, and
gnu_ld definitions. Add netbsd-elf.h to tm_file.
(mips-dec-netbsd*): Remove as alias for mipsel-*-netbsd*.
(mipsel-*-netbsd*): Rename this to...
(mips*-*-netbsd*): ...this. Add elfos.h to tm_file. Add
mips/little.h to tm_file for mips*el-*.
(powerpc-*-netbsd*): Remove redundant xm_defines definition.
(sparc-*-netbsd*): Add netbsd-aout.h to tm_file.
(vax-*-netbsd*): Add netbsd-aout.h to tm_file.
2002-01-21 John David Anglin <dave@hiauly1.hia.nrc.ca>
* pa-protos.h (reg_before_reload_operand): New function prototype.
......
......@@ -277,7 +277,7 @@ case $machine in
;;
esac
# Common parts for GNU/Linux, GNU/Hurd, OpenBSD and FreeBSD systems.
# Common parts for GNU/Linux, GNU/Hurd, OpenBSD, NetBSD, and FreeBSD systems.
case $machine in
*-*-linux*)
xm_defines=POSIX
......@@ -312,6 +312,12 @@ case $machine in
tmake_file="${tmake_file} t-openbsd-thread"
fi
;;
*-*-netbsd*)
tmake_file="t-libc-ok t-netbsd"
xm_defines=POSIX
gas=yes
gnu_ld=yes
;;
*-*-freebsd[12] | *-*-freebsd[12].* | *-*-freebsd*aout*)
# This is the place-holder for the generic a.out configuration
# of FreeBSD. No actual configuration resides here since
......@@ -469,11 +475,9 @@ alpha*-*-freebsd*)
tmake_file="${tmake_file} alpha/t-crtbe alpha/t-crtfm alpha/t-alpha alpha/t-ieee"
;;
alpha*-*-netbsd*)
xm_defines=POSIX
tm_file="${tm_file} alpha/elf.h alpha/netbsd.h alpha/netbsd-elf.h"
tm_file="${tm_file} netbsd.h alpha/elf.h netbsd-elf.h alpha/netbsd.h"
target_cpu_default="MASK_GAS"
tmake_file="alpha/t-crtbe alpha/t-crtfm alpha/t-alpha alpha/t-ieee"
gas=yes gnu_ld=yes
tmake_file="${tmake_file} alpha/t-alpha alpha/t-crtbe alpha/t-ieee"
;;
alpha*-*-openbsd*)
......@@ -613,7 +617,7 @@ arm*-*-freebsd*|strongarm*-*-freebsd*)
tmake_file="${tmake_file} arm/t-strongarm-elf"
;;
arm*-*-netbsd*)
tm_file="arm/aout.h arm/arm.h netbsd.h arm/netbsd.h"
tm_file="arm/aout.h arm/arm.h netbsd.h netbsd-aout.h arm/netbsd.h"
tmake_file="t-netbsd arm/t-netbsd"
use_collect2=yes
;;
......@@ -1124,10 +1128,7 @@ i[34567]86-*-freebsd*)
tm_file="${tm_file} i386/att.h dbxelf.h elfos.h svr4.h ${fbsd_tm_file} i386/freebsd.h"
;;
i[34567]86-*-netbsdelf*)
xm_defines=POSIX
tm_file="${tm_file} i386/att.h dbxelf.h elfos.h svr4.h i386/netbsd-elf.h"
tmake_file=t-netbsd
gnu_ld=yes
tm_file="${tm_file} i386/att.h dbxelf.h elfos.h netbsd.h netbsd-elf.h i386/netbsd-elf.h"
float_format=i386
;;
i[34567]86-*-netbsd*)
......@@ -2231,10 +2232,13 @@ mips-dec-bsd*) # Decstation running 4.4 BSD
use_collect2=yes
fi
;;
mipsel-*-netbsd* | mips-dec-netbsd*) # Decstation running NetBSD
tm_file=mips/netbsd.h
# On NetBSD, the headers are already okay, except for math.h.
tmake_file=t-netbsd
mips*-*-netbsd*) # NetBSD/mips, either endian.
tm_file="elfos.h mips/netbsd.h"
case $machine in
mips*el-*)
tm_file="mips/little.h $tm_file"
;;
esac
;;
mips*-*-linux*) # Linux MIPS, either endian.
tm_file="dbxelf.h elfos.h svr4.h linux.h mips/linux.h"
......@@ -2650,7 +2654,6 @@ powerpc-*-sysv*)
tmake_file="rs6000/t-ppcos rs6000/t-ppccomm"
;;
powerpc-*-netbsd*)
xm_defines=POSIX
tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/netbsd.h"
tmake_file="rs6000/t-ppcos rs6000/t-ppccomm"
;;
......@@ -2892,7 +2895,7 @@ sparc-*-aout*)
tm_file="sparc/sparc.h aoutos.h sparc/aout.h libgloss.h"
;;
sparc-*-netbsd*)
tm_file="${tm_file} sparc/aout.h netbsd.h sparc/netbsd.h"
tm_file="${tm_file} sparc/aout.h netbsd.h netbsd-aout.h sparc/netbsd.h"
tmake_file=t-netbsd
use_collect2=yes
;;
......@@ -3206,7 +3209,7 @@ vax-*-sysv*) # VAXen running system V
float_format=vax
;;
vax-*-netbsd*)
tm_file="${tm_file} netbsd.h vax/netbsd.h"
tm_file="${tm_file} netbsd.h netbsd-aout.h vax/netbsd.h"
tmake_file=t-netbsd
float_format=vax
use_collect2=yes
......
/* Definitions of target machine for GNU compiler
for Alpha NetBSD systems using ELF.
Copyright (C) 1998 Free Software Foundation, Inc.
This file is part of GNU CC.
GNU CC 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.
GNU CC 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 CC; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#undef TARGET_VERSION
#define TARGET_VERSION fprintf (stderr, " (Alpha NetBSD/ELF)");
#undef SUB_CPP_PREDEFINES
#define SUB_CPP_PREDEFINES "-D__ELF__"
#undef SUBTARGET_EXTRA_SPECS
#define SUBTARGET_EXTRA_SPECS \
{ "elf_dynamic_linker", ELF_DYNAMIC_LINKER },
#define ELF_DYNAMIC_LINKER "/usr/libexec/ld.elf_so"
/* Definitions of target machine for GNU compiler,
for Alpha NetBSD systems.
Copyright (C) 1998 Free Software Foundation, Inc.
Copyright (C) 1998, 2002 Free Software Foundation, Inc.
This file is part of GNU CC.
......@@ -23,11 +23,75 @@ Boston, MA 02111-1307, USA. */
#define TARGET_DEFAULT (MASK_FP | MASK_FPREGS | MASK_GAS)
#undef CPP_PREDEFINES
#define CPP_PREDEFINES "-D_LONGLONG -Dnetbsd -Dunix " SUB_CPP_PREDEFINES
#define CPP_PREDEFINES \
"-D__NetBSD__ -D__ELF__ -Asystem=unix -Asystem=NetBSD"
#undef LIB_SPEC
#define LIB_SPEC "%{pg:-lgmon} %{pg:-lc_p} %{!pg:-lc}"
/* Show that we need a GP when profiling. */
#undef TARGET_PROFILING_NEEDS_GP
#define TARGET_PROFILING_NEEDS_GP 1
/* Provide a CPP_SPEC appropriate for NetBSD/alpha. In addition to
the standard NetBSD specs, we also handle Alpha FP mode indications. */
#undef CPP_SPEC
#define CPP_SPEC \
"%{mieee:-D_IEEE_FP} \
%{mieee-with-inexact:-D_IEEE_FP -D_IEEE_FP_INEXACT} \
%(cpp_cpu) %(cpp_subtarget)"
#undef CPP_SUBTARGET_SPEC
#define CPP_SUBTARGET_SPEC \
"%{posix:-D_POSIX_SOURCE}"
/* Provide a LINK_SPEC appropriate for a NetBSD/alpha ELF target.
This is a copy of LINK_SPEC from <netbsd-elf.h> tweaked for
the alpha target. */
#undef LINK_SPEC
#define LINK_SPEC \
"%{G*} %{relax:-relax} \
%{O*:-O3} %{!O*:-O1} \
%{assert*} %{R*} \
%{shared:-shared} \
%{!shared: \
-dc -dp \
%{!nostdlib: \
%{!r*: \
%{!e*:-e __start}}} \
%{!static: \
%{rdynamic:-export-dynamic} \
%{!dynamic-linker:-dynamic-linker /usr/libexec/ld.elf_so}} \
%{static:-static}}"
/* Provide an ENDFILE_SPEC appropriate for NetBSD/alpha ELF. Here we
add crtend.o, which provides part of the support for getting
C++ file-scope static objects deconstructed after exiting "main".
We also need to handle the GCC option `-ffast-math'. */
#undef ENDFILE_SPEC
#define ENDFILE_SPEC \
"%{ffast-math|funsafe-math-optimizations:crtfm%O%s} \
%{!shared:crtend%O%s} %{shared:crtendS%O%s}"
/* Make gcc agree with <machine/ansi.h> */
#undef WCHAR_TYPE
#define WCHAR_TYPE "int"
#undef WCHAR_UNSIGNED
#define WCHAR_UNSIGNED 0
#undef WCHAR_TYPE_SIZE
#define WCHAR_TYPE_SIZE 32
#undef WINT_TYPE
#define WINT_TYPE "int"
#undef TARGET_VERSION
#define TARGET_VERSION fprintf (stderr, " (NetBSD/alpha ELF)");
/* Definitions of target machine for GNU compiler,
for i386/ELF NetBSD systems.
Copyright (C) 2001 Free Software Foundation, Inc.
Copyright (C) 2001, 2002 Free Software Foundation, Inc.
Contributed by matthew green <mrg@eterna.com.au>
This file is part of GNU CC.
......@@ -20,87 +20,28 @@ along with GNU CC; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* Provide a LIB_SPEC appropriate for NetBSD. Just select the appropriate
libc, depending on whether we're doing profiling; if `-posix' is specified,
link against the appropriate libposix first. */
#undef LIB_SPEC
#define LIB_SPEC \
"%{posix:%{!p:%{!pg:-lposix}}%{p:-lposix_p}%{pg:-lposix_p}} \
%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}"
/* Provide a STARTFILE_SPEC appropriate for NetBSD ELF targets. Here we
provide support for the special GCC option -static. On ELF targets,
we also add the crtbegin.o file which provides part of the support
for getting C++ file-scope static objects constructed before entering
`main'. We use the NetBSD crt0. */
#undef STARTFILE_SPEC
#define STARTFILE_SPEC \
"%{!shared: \
%{pg:gcrt0%O%s} \
%{!pg: \
%{p:gcrt0%O%s} \
%{!p:crt0%O%s}}} \
%{!shared:crtbegin%O%s} %{shared:crtbeginS%O%s}"
/* Provide an ENDFILE_SPEC appropriate for NetBSD ELF targets. Here we
add crtend.o, which provides part of the support for getting C++
file-scope static objects deconstructed after exiting `main'. */
#undef ENDFILE_SPEC
#define ENDFILE_SPEC \
"%{!shared:crtend%O%s} %{shared:crtendS%O%s}"
/* Provide a LINK_SPEC appropriate for a NetBSD/i386 ELF target. Only
the linker emulation is i386-specific. The rest are
common to all ELF targets, except for the name of the start function. */
/* Provide a LINK_SPEC appropriate for a NetBSD/i386 ELF target.
This is a copy of LINK_SPEC from <netbsd-elf.h> tweaked for
the i386 target. */
#undef LINK_SPEC
#define LINK_SPEC \
"-m elf_i386 \
%{assert*} %{R*} \
%{shared:-shared} \
%{!shared: \
-dp \
%{!nostdlib:%{!r*:%{!e*:-e __start}}} \
%{!static: \
-dy %{rdynamic:-export-dynamic} \
%{!dynamic-linker:-dynamic-linker /usr/libexec/ld.elf_so}} \
#define LINK_SPEC \
"%{assert*} %{R*} \
%{shared:-shared} \
%{!shared: \
-dc -dp \
%{!nostdlib: \
%{!r*: \
%{!e*:-e __start}}} \
%{!static: \
%{rdynamic:-export-dynamic} \
%{!dynamic-linker:-dynamic-linker /usr/libexec/ld.elf_so}} \
%{static:-static}}"
/* Provide a CPP_SPEC appropriate for NetBSD. Current we just deal with
the GCC option `-posix'. */
#undef CPP_SPEC
#define CPP_SPEC "%{posix:-D_POSIX_SOURCE}"
/* Provide an ASM_SPEC appropriate for NetBSD. Currently we only deal
with the options for generating PIC code. */
#undef ASM_SPEC
#define ASM_SPEC " %| %{fpic:-k} %{fPIC:-k -K}"
/* Provide a LIB_SPEC appropriate for NetBSD. Just select the appropriate
libc, depending on whether we're doing profiling. */
#undef LIB_SPEC
#define LIB_SPEC "%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}"
/* This defines which switch letters take arguments. */
#undef SWITCH_TAKES_ARG
#define SWITCH_TAKES_ARG(CHAR) \
(DEFAULT_SWITCH_TAKES_ARG(CHAR) \
|| (CHAR) == 'R')
/* Implicit library calls should use memcpy, not bcopy, etc. */
#define TARGET_MEM_FUNCTIONS
/* Names to predefine in the preprocessor for this target machine. */
#define CPP_PREDEFINES "\
-Di386 -D__NetBSD__ -D__ELF__ -Asystem(unix) -Asystem(NetBSD)"
#define CPP_PREDEFINES \
"-D__NetBSD__ -D__ELF__ -Asystem=unix -Asystem=NetBSD"
/* Make gcc agree with <machine/ansi.h> */
......@@ -122,10 +63,6 @@ Boston, MA 02111-1307, USA. */
#undef WINT_TYPE
#define WINT_TYPE "int"
/* Output assembler code to FILE to increment profiler label # LABELNO
for profiling a function entry. Under NetBSD/i386, the assembler does
nothing special with -pg. */
#undef ASM_APP_ON
#define ASM_APP_ON "#APP\n"
......@@ -133,14 +70,29 @@ Boston, MA 02111-1307, USA. */
#define ASM_APP_OFF "#NO_APP\n"
#undef ASM_FINAL_SPEC
#define ASM_FINAL_SPEC "%{pipe:-}"
#undef ASM_COMMENT_START
#define ASM_COMMENT_START "#"
#undef DBX_REGISTER_NUMBER
#define DBX_REGISTER_NUMBER(n) svr4_dbx_register_map[n]
#undef NO_PROFILE_COUNTERS
/* Output assembler code to FILE to call the profiler. */
#undef NO_PROFILE_COUNTERS
#define NO_PROFILE_COUNTERS
#undef FUNCTION_PROFILER
#define FUNCTION_PROFILER(FILE, LABELNO) \
{ \
if (flag_pic) \
fprintf (FILE, "\tcall __mcount@PLT\n"); \
else \
fprintf (FILE, "\tcall __mcount\n"); \
}
#undef HAS_INIT_SECTION
/* This is how we tell the assembler that two symbols have the same value. */
......@@ -158,16 +110,15 @@ Boston, MA 02111-1307, USA. */
This is used to align code labels according to Intel recommendations. */
#ifdef HAVE_GAS_MAX_SKIP_P2ALIGN
#define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE, LOG, MAX_SKIP) \
if ((LOG) != 0) { \
#define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE, LOG, MAX_SKIP) \
if ((LOG) != 0) { \
if ((MAX_SKIP) == 0) fprintf ((FILE), "\t.p2align %d\n", (LOG)); \
else fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \
}
#endif
/*
* We always use gas here, so we don't worry about ECOFF assembler problems.
*/
/* We always use gas here, so we don't worry about ECOFF assembler
problems. */
#undef TARGET_GAS
#define TARGET_GAS 1
......@@ -176,4 +127,4 @@ Boston, MA 02111-1307, USA. */
#define DEFAULT_PCC_STRUCT_RETURN 1
#undef TARGET_VERSION
#define TARGET_VERSION fprintf (stderr, " (NetBSD/i386 ELF target)");
#define TARGET_VERSION fprintf (stderr, " (NetBSD/i386 ELF)");
......@@ -5,6 +5,7 @@
/* Get generic NetBSD definitions. */
#include <netbsd.h>
#include <netbsd-aout.h>
/* This goes away when the math-emulator is fixed */
#undef TARGET_SUBTARGET_DEFAULT
......
......@@ -3,6 +3,7 @@
/* Get generic NetBSD definitions. */
#include <netbsd.h>
#include <netbsd-aout.h>
#define TARGET_DEFAULT (MASK_BITFIELD|MASK_68881|MASK_68020)
......
/* Common configuration file for NetBSD a.out targets.
Copyright (C) 2002 Free Software Foundation, Inc.
Contributed by Wasabi Systems, Inc.
This file is part of GNU CC.
GNU CC 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.
GNU CC 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 CC; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* This defines which switch letters take arguments. */
#undef SWITCH_TAKES_ARG
#define SWITCH_TAKES_ARG(CHAR) \
(DEFAULT_SWITCH_TAKES_ARG(CHAR) \
|| (CHAR) == 'R')
/* Provide an ASM_SPEC appropriate for NetBSD. Currently we only deal
with the options for generating PIC code. */
#undef ASM_SPEC
#define ASM_SPEC " %| %{fpic:-k} %{fPIC:-k -K}"
/* Provide a STARTFILE_SPEC appropriate for NetBSD a.out. Here we
provide support for the special GCC option -static. */
#undef STARTFILE_SPEC
#define STARTFILE_SPEC \
"%{!shared: \
%{pg:gcrt0%O%s} \
%{!pg: \
%{p:mcrt0%O%s} \
%{!p: \
%{!static:crt0%O%s} \
%{static:scrt0%O%s}}}} \
%{shared:c++rt0%O%s}"
/* Provide a LINK_SPEC appropriate for NetBSD a.out. Here we provide
support for the special GCC options -static, -assert, and -nostdlib. */
#undef LINK_SPEC
#define LINK_SPEC \
"%{nostdlib:-nostdlib} \
%{!shared: \
%{!nostdlib: \
%{!r*: \
%{!e*:-e start}}} \
-dc -dp \
%{static:-Bstatic}} \
%{shared:-Bshareable} \
%{R*} \
%{assert*}"
/* Some imports from svr4.h in support of shared libraries. */
/* Define the strings used for the .type, .size, and .set directives.
These strings generally do not vary from one system running NetBSD
to another, but if a given system needs to use different pseudo-op
names for these, they may be overridden in the file included after
this one. */
#undef TYPE_ASM_OP
#undef SIZE_ASM_OP
#undef SET_ASM_OP
#define TYPE_ASM_OP "\t.type\t"
#define SIZE_ASM_OP "\t.size\t"
#define SET_ASM_OP "\t.set\t"
/* This is how we tell the assembler that a symbol is weak. */
#undef ASM_WEAKEN_LABEL
#define ASM_WEAKEN_LABEL(FILE,NAME) \
do \
{ \
fputs ("\t.globl\t", FILE); assemble_name (FILE, NAME); \
fputc ('\n', FILE); \
fputs ("\t.weak\t", FILE); assemble_name (FILE, NAME); \
fputc ('\n', FILE); \
} \
while (0)
/* The following macro defines the format used to output the second
operand of the .type assembler directive. Different svr4 assemblers
expect various different forms of this operand. The one given here
is just a default. You may need to override it in your machine-
specific tm.h file (depending on the particulars of your assembler). */
#undef TYPE_OPERAND_FMT
#define TYPE_OPERAND_FMT "@%s"
/* Write the extra assembler code needed to declare a function's result.
Most svr4 assemblers don't require any special declaration of the
result value, but there are exceptions. */
#ifndef ASM_DECLARE_RESULT
#define ASM_DECLARE_RESULT(FILE, RESULT)
#endif
/* These macros generate the special .type and .size directives which
are used to set the corresponding fields of the linker symbol table
entries in an ELF object file under SVR4 (and a.out on NetBSD).
These macros also output the starting labels for the relevant
functions/objects. */
/* Write the extra assembler code needed to declare a function properly.
Some svr4 assemblers need to also have something extra said about the
function's return value. We allow for that here. */
#undef ASM_DECLARE_FUNCTION_NAME
#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \
do \
{ \
fprintf (FILE, "%s", TYPE_ASM_OP); \
assemble_name (FILE, NAME); \
putc (',', FILE); \
fprintf (FILE, TYPE_OPERAND_FMT, "function"); \
putc ('\n', FILE); \
ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL)); \
ASM_OUTPUT_LABEL(FILE, NAME); \
} \
while (0)
/* Write the extra assembler code needed to declare an object properly. */
#undef ASM_DECLARE_OBJECT_NAME
#define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL) \
do \
{ \
fprintf (FILE, "%s", TYPE_ASM_OP); \
assemble_name (FILE, NAME); \
putc (',', FILE); \
fprintf (FILE, TYPE_OPERAND_FMT, "object"); \
putc ('\n', FILE); \
size_directive_output = 0; \
if (!flag_inhibit_size_directive && DECL_SIZE (DECL)) \
{ \
size_directive_output = 1; \
fprintf (FILE, "%s", SIZE_ASM_OP); \
assemble_name (FILE, NAME); \
fprintf (FILE, ",%d\n", \
int_size_in_bytes (TREE_TYPE (DECL))); \
} \
ASM_OUTPUT_LABEL(FILE, NAME); \
}
while (0)
/* Output the size directive for a decl in rest_of_decl_compilation
in the case where we did not do so before the initializer.
Once we find the error_mark_node, we know that the value of
size_directive_output was set
by ASM_DECLARE_OBJECT_NAME when it was run for the same decl. */
#undef ASM_FINISH_DECLARE_OBJECT
#define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END) \
do \
{ \
const char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0); \
if (!flag_inhibit_size_directive && DECL_SIZE (DECL) \
&& ! AT_END && TOP_LEVEL \
&& DECL_INITIAL (DECL) == error_mark_node \
&& !size_directive_output) \
{ \
size_directive_output = 1; \
fprintf (FILE, "%s", SIZE_ASM_OP); \
assemble_name (FILE, name); \
fprintf (FILE, ",%d\n", \
int_size_in_bytes (TREE_TYPE (DECL))); \
} \
} \
while (0)
/* This is how to declare the size of a function. */
#undef ASM_DECLARE_FUNCTION_SIZE
#define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL) \
do \
{ \
if (!flag_inhibit_size_directive) \
{ \
char label[256]; \
static int labelno; \
labelno++; \
ASM_GENERATE_INTERNAL_LABEL (label, "Lfe", labelno); \
ASM_OUTPUT_INTERNAL_LABEL (FILE, "Lfe", labelno); \
fprintf (FILE, "%s", SIZE_ASM_OP); \
assemble_name (FILE, (FNAME)); \
fprintf (FILE, ","); \
assemble_name (FILE, label); \
fprintf (FILE, "-"); \
assemble_name (FILE, (FNAME)); \
putc ('\n', FILE); \
} \
} \
while (0)
/* Common configuration file for NetBSD ELF targets.
Copyright (C) 2002 Free Software Foundation, Inc.
Contributed by Wasabi Systems, Inc.
This file is part of GNU CC.
GNU CC 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.
GNU CC 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 CC; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* This defines which switch letters take arguments. On NetBSD, most
of the normal cases (defined by gcc.c) apply, and we also have -h*
and -z* options (for the linker) (coming from SVR4). */
#undef SWITCH_TAKES_ARG
#define SWITCH_TAKES_ARG(CHAR) \
(DEFAULT_SWITCH_TAKES_ARG (CHAR) \
|| (CHAR) == 'h' \
|| (CHAR) == 'z' \
|| (CHAR) == 'R')
/* Provide a STARTFILE_SPEC appropriate for NetBSD ELF. Here we
provide support for the special GCC option -static. On ELF
targets, we also add the crtbegin.o file, which provides part
of the support for getting C++ file-scope static objects
constructed before entering "main". */
#undef STARTFILE_SPEC
#define STARTFILE_SPEC \
"%{!shared: \
%{pg:gcrt0%O%s} \
%{!pg: \
%{p:gcrt0%O%s} \
%{!p:crt0%O%s}}} \
%{!shared:crtbegin%O%s} %{shared:crtbeginS%O%s}"
/* Provide an ENDFILE_SPEC appropriate for NetBSD ELF. Here we
add crtend.o, which provides part of the support for getting
C++ file-scope static objects deconstructed after exiting "main". */
#undef ENDFILE_SPEC
#define ENDFILE_SPEC \
"%{!shared:crtend%O%s} %{shared:crtendS%O%s}"
/* Provide a LINK_SPEC appropriate for NetBSD ELF. Here we provide
support for the special GCC options -assert, -R, -rpath, -shared,
-nostdlib, -static, -rdynamic, and -dynamic-linker. */
#undef LINK_SPEC
#define LINK_SPEC \
"%{assert*} %{R*} %{rpath*} \
%{shared:-shared} \
%{!shared: \
-dc -dp \
%{!nostdlib: \
%{!r*: \
%{!e*:-e __start}}} \
%{!static: \
%{rdynamic:-export-dynamic} \
%{!dynamic-linker:-dynamic-linker /usr/libexec/ld.elf_so}} \
%{static:-static}}"
......@@ -32,33 +32,51 @@
#undef STANDARD_STARTFILE_PREFIX
#define STANDARD_STARTFILE_PREFIX "/usr/lib/"
#endif
#endif /* NETBSD_NATIVE */
/* Provide a CPP_SPEC appropriate for NetBSD. Current we just deal with
/* Provide a CPP_SPEC appropriate for NetBSD. Currently we just deal with
the GCC option `-posix'. */
#undef CPP_SPEC
#define CPP_SPEC "%{posix:-D_POSIX_SOURCE}"
/* Provide an ASM_SPEC appropriate for NetBSD. Currently we only deal
with the options for generating PIC code. */
#define CPP_SPEC "%(cpp_cpu) %{posix:-D_POSIX_SOURCE}"
#undef ASM_SPEC
#define ASM_SPEC " %| %{fpic:-k} %{fPIC:-k -K}"
/* Provide a LIB_SPEC appropriate for NetBSD. Just select the appropriate
libc, depending on whether we're doing profiling. */
libc, depending on whether we're doing profiling; if `-posix' is specified,
link against the appropriate libposix first. Don't include libc when
linking a shared library. */
#undef LIB_SPEC
#define LIB_SPEC "%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}"
/* Provide a LINK_SPEC appropriate for NetBSD. Here we provide support
for the special GCC options -shared, -static, -assert, and -nostdlib. */
#undef LINK_SPEC
#define LINK_SPEC \
"%{!shared:%{!nostdlib:%{!r*:%{!e*:-e start}}} -dc -dp %{R*} %{static:-Bstatic}} %{shared} %{assert*}"
#define LIB_SPEC \
"%{posix: \
%{!p: \
%{!pg:-lposix}} \
%{p:-lposix_p} \
%{pg:-lposix_p}} \
%{!shared: \
%{!symbolic: \
%{!p: \
%{!pg:-lc}} \
%{p:-lc_p} \
%{pg:-lc_p}}}"
/* Provide a LIBGCC_SPEC appropriate for NetBSD. We also want to exclude
libgcc with -symbolic. */
#undef LIBGCC_SPEC
#ifdef NETBSD_NATIVE
#define LIBGCC_SPEC \
"%{!symbolic: \
%{!shared: \
%{!p: \
%{!pg:-lgcc}}} \
%{shared:-lgcc_pic} \
%{p:-lgcc_p} \
%{pg:-lgcc_p}}"
#else
#define LIBGCC_SPEC "%{!shared:%{!symbolic:-lgcc}}"
#endif
/* When building shared libraries, the initialization and finalization
functions for the library are .init and .fini respectively. */
......@@ -75,11 +93,13 @@
fprintf ((STREAM), "void __fini() {\n\t%s();\n}\n", (FUNC)); \
} while (0)
/* This defines which switch letters take arguments. */
#undef SWITCH_TAKES_ARG
#define SWITCH_TAKES_ARG(CHAR) \
(DEFAULT_SWITCH_TAKES_ARG(CHAR) \
|| (CHAR) == 'R')
/* Allow #sccs in preprocessor. */
#undef SCCS_DIRECTIVE
#define SCCS_DIRECTIVE
#undef TARGET_HAS_F_SETLKW
#define TARGET_HAS_F_SETLKW
/* Implicit library calls should use memcpy, not bcopy, etc. */
......@@ -89,133 +109,3 @@
/* Handle #pragma weak and #pragma pack. */
#define HANDLE_SYSV_PRAGMA
/*
* Some imports from svr4.h in support of shared libraries.
* Currently, we need the DECLARE_OBJECT_SIZE stuff.
*/
/* Define the strings used for the .type, .size, and .set directives.
These strings generally do not vary from one system running netbsd
to another, but if a given system needs to use different pseudo-op
names for these, they may be overridden in the file which includes
this one. */
#undef TYPE_ASM_OP
#undef SIZE_ASM_OP
#undef SET_ASM_OP
#define TYPE_ASM_OP "\t.type\t"
#define SIZE_ASM_OP "\t.size\t"
#define SET_ASM_OP "\t.set\t"
/* This is how we tell the assembler that a symbol is weak. */
#undef ASM_WEAKEN_LABEL
#define ASM_WEAKEN_LABEL(FILE,NAME) \
do { fputs ("\t.globl\t", FILE); assemble_name (FILE, NAME); \
fputc ('\n', FILE); \
fputs ("\t.weak\t", FILE); assemble_name (FILE, NAME); \
fputc ('\n', FILE); } while (0)
/* The following macro defines the format used to output the second
operand of the .type assembler directive. Different svr4 assemblers
expect various different forms for this operand. The one given here
is just a default. You may need to override it in your machine-
specific tm.h file (depending upon the particulars of your assembler). */
#undef TYPE_OPERAND_FMT
#define TYPE_OPERAND_FMT "@%s"
/* Write the extra assembler code needed to declare a function's result.
Most svr4 assemblers don't require any special declaration of the
result value, but there are exceptions. */
#ifndef ASM_DECLARE_RESULT
#define ASM_DECLARE_RESULT(FILE, RESULT)
#endif
/* These macros generate the special .type and .size directives which
are used to set the corresponding fields of the linker symbol table
entries in an ELF object file under SVR4. These macros also output
the starting labels for the relevant functions/objects. */
/* Write the extra assembler code needed to declare a function properly.
Some svr4 assemblers need to also have something extra said about the
function's return value. We allow for that here. */
#undef ASM_DECLARE_FUNCTION_NAME
#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \
do { \
fprintf (FILE, "%s", TYPE_ASM_OP); \
assemble_name (FILE, NAME); \
putc (',', FILE); \
fprintf (FILE, TYPE_OPERAND_FMT, "function"); \
putc ('\n', FILE); \
ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL)); \
ASM_OUTPUT_LABEL(FILE, NAME); \
} while (0)
/* Write the extra assembler code needed to declare an object properly. */
#undef ASM_DECLARE_OBJECT_NAME
#define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL) \
do { \
fprintf (FILE, "%s", TYPE_ASM_OP); \
assemble_name (FILE, NAME); \
putc (',', FILE); \
fprintf (FILE, TYPE_OPERAND_FMT, "object"); \
putc ('\n', FILE); \
size_directive_output = 0; \
if (!flag_inhibit_size_directive && DECL_SIZE (DECL)) \
{ \
size_directive_output = 1; \
fprintf (FILE, "%s", SIZE_ASM_OP); \
assemble_name (FILE, NAME); \
fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL))); \
} \
ASM_OUTPUT_LABEL(FILE, NAME); \
} while (0)
/* Output the size directive for a decl in rest_of_decl_compilation
in the case where we did not do so before the initializer.
Once we find the error_mark_node, we know that the value of
size_directive_output was set
by ASM_DECLARE_OBJECT_NAME when it was run for the same decl. */
#undef ASM_FINISH_DECLARE_OBJECT
#define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END) \
do { \
const char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0); \
if (!flag_inhibit_size_directive && DECL_SIZE (DECL) \
&& ! AT_END && TOP_LEVEL \
&& DECL_INITIAL (DECL) == error_mark_node \
&& !size_directive_output) \
{ \
size_directive_output = 1; \
fprintf (FILE, "%s", SIZE_ASM_OP); \
assemble_name (FILE, name); \
fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL))); \
} \
} while (0)
/* This is how to declare the size of a function. */
#undef ASM_DECLARE_FUNCTION_SIZE
#define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL) \
do { \
if (!flag_inhibit_size_directive) \
{ \
char label[256]; \
static int labelno; \
labelno++; \
ASM_GENERATE_INTERNAL_LABEL (label, "Lfe", labelno); \
ASM_OUTPUT_INTERNAL_LABEL (FILE, "Lfe", labelno); \
fprintf (FILE, "%s", SIZE_ASM_OP); \
assemble_name (FILE, (FNAME)); \
fprintf (FILE, ","); \
assemble_name (FILE, label); \
fprintf (FILE, "-"); \
assemble_name (FILE, (FNAME)); \
putc ('\n', FILE); \
} \
} while (0)
......@@ -66,6 +66,7 @@ Boston, MA 02111-1307, USA.
/* Get generic NetBSD definitions. */
#include <netbsd.h>
#include <netbsd-aout.h>
/* Names to predefine in the preprocessor for this target machine. */
......
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