From: Matt Thomas Date: Wed, 31 Jul 2019 14:11:16 +0000 (+0000) Subject: config.gcc (hppa*-*-netbsd*): New target. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=428642b132a4f2ce6c368398ec7f2ff307f33f8a;p=gcc.git config.gcc (hppa*-*-netbsd*): New target. gcc/ChangeLog: * config.gcc (hppa*-*-netbsd*): New target. * config/pa/pa-netbsd.h: New file. * config/pa/pa32-netbsd.h: New file. libgcc/ChangeLog: * config.host (hppa*-*-netbsd*): New case. * config/pa/t-netbsd: New file. Co-Authored-By: Matthew Green Co-Authored-By: Maya Rashish Co-Authored-By: Nick Hudson From-SVN: r273933 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a883b23cc21..812465757c0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2019-07-31 Matt Thomas + Nick Hudson + Matthew Green + Maya Rashish + + * config.gcc (hppa*-*-netbsd*): New target. + * config/pa/pa-netbsd.h: New file. + * config/pa/pa32-netbsd.h: New file. + 2019-07-31 Jakub Jelinek PR tree-optimization/91201 diff --git a/gcc/config.gcc b/gcc/config.gcc index caab0a486ea..291e2881f96 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -1522,6 +1522,14 @@ hppa*-*-openbsd*) gas=yes gnu_ld=yes ;; +hppa*-*-netbsd*) + target_cpu_default="MASK_PA_11|MASK_NO_SPACE_REGS" + tm_file="${tm_file} dbxelf.h elfos.h ${nbsd_tm_file} \ + pa/pa-netbsd.h pa/pa32-regs.h pa/pa32-netbsd.h" + tmake_file="${tmake_file}" + tm_defines="${tm_defines} CHAR_FAST8=1 SHORT_FAST16=1" + extra_options="${extra_options} netbsd.opt netbsd-elf.opt" + ;; hppa[12]*-*-hpux10*) case ${target} in hppa1.1-*-* | hppa2*-*-*) diff --git a/gcc/config/pa/pa-netbsd.h b/gcc/config/pa/pa-netbsd.h new file mode 100644 index 00000000000..af07444bc1c --- /dev/null +++ b/gcc/config/pa/pa-netbsd.h @@ -0,0 +1,137 @@ +/* Definitions for PA_RISC with ELF format + Copyright (C) 1999-2019 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 3, 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 COPYING3. If not see +. */ + + +#undef TARGET_OS_CPP_BUILTINS +#define TARGET_OS_CPP_BUILTINS() \ + do \ + { \ + NETBSD_OS_CPP_BUILTINS_ELF(); \ + builtin_assert ("machine=bigendian"); \ + } \ + while (0) + +#undef CPP_SPEC +#define CPP_SPEC NETBSD_CPP_SPEC + +#undef ASM_SPEC +#define ASM_SPEC \ + "%{v:-V} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*}" + +#undef EXTRA_SPECS +#define EXTRA_SPECS NETBSD_SUBTARGET_EXTRA_SPECS +#undef SUBTARGET_EXTRA_SPECS + +#define NETBSD_ENTRY_POINT "__start" + +#undef LINK_SPEC +#define LINK_SPEC NETBSD_LINK_SPEC_ELF + +/* NetBSD profiling functions don't need gcc to allocate counters. */ +#define NO_DEFERRED_PROFILE_COUNTERS 1 + +/* Define the strings used for the special svr4 .type and .size directives. + These strings generally do not vary from one system running svr4 to + another, but if a given system (e.g. m88k running svr) needs to use + different pseudo-op names for these, they may be overridden in the + file which includes this one. */ + +#undef STRING_ASM_OP +#define STRING_ASM_OP "\t.stringz\t" + +#define TEXT_SECTION_ASM_OP "\t.text" +#define DATA_SECTION_ASM_OP "\t.data" +#define BSS_SECTION_ASM_OP "\t.section\t.bss" + +#define TARGET_ASM_FILE_START pa_linux_file_start + +/* We want local labels to start with period if made with asm_fprintf. */ +#undef LOCAL_LABEL_PREFIX +#define LOCAL_LABEL_PREFIX "." + +/* Define these to generate the Linux/ELF/SysV style of internal + labels all the time - i.e. to be compatible with + ASM_GENERATE_INTERNAL_LABEL in . Compare these with the + ones in pa.h and note the lack of dollar signs in these. FIXME: + shouldn't we fix pa.h to use ASM_GENERATE_INTERNAL_LABEL instead? */ + +#undef ASM_OUTPUT_ADDR_VEC_ELT +#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \ + fprintf (FILE, "\t.word .L%d\n", VALUE) + +#undef ASM_OUTPUT_ADDR_DIFF_ELT +#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ + fprintf (FILE, "\t.word .L%d-.L%d\n", VALUE, REL) + +/* Use the default. */ +#undef ASM_OUTPUT_LABEL + +/* NOTE: (*targetm.asm_out.internal_label)() is defined for us by elfos.h, and + does what we want (i.e. uses colons). It must be compatible with + ASM_GENERATE_INTERNAL_LABEL(), so do not define it here. */ + +/* Use the default. */ +#undef ASM_OUTPUT_INTERNAL_LABEL + +/* Use the default. */ +#undef TARGET_ASM_GLOBALIZE_LABEL +/* Globalizing directive for a label. */ +#define GLOBAL_ASM_OP ".globl " + +/* FIXME: Hacked from the one so that we avoid multiple + labels in a function declaration (since pa.c seems determined to do + it differently) */ + +#undef ASM_DECLARE_FUNCTION_NAME +#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ + do \ + { \ + ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "function"); \ + ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL)); \ + } \ + while (0) + +/* As well as globalizing the label, we need to encode the label + to ensure a plabel is generated in an indirect call. */ + +#undef ASM_OUTPUT_EXTERNAL_LIBCALL +#define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, FUN) \ + do \ + { \ + if (!FUNCTION_NAME_P (XSTR (FUN, 0))) \ + pa_encode_label (FUN); \ + (*targetm.asm_out.globalize_label) (FILE, XSTR (FUN, 0)); \ + } \ + while (0) + +/* NetBSD always uses gas. */ +#undef TARGET_GAS +#define TARGET_GAS 1 + +/* Use long int for these type to make hppa64 compatibility easier. */ +#undef SIZE_TYPE +#define SIZE_TYPE "long unsigned int" + +#undef PTRDIFF_TYPE +#define PTRDIFF_TYPE "long int" + +#if 0 +#undef TARGET_SYNC_LIBCALL +#define TARGET_SYNC_LIBCALL 1 +#endif diff --git a/gcc/config/pa/pa32-netbsd.h b/gcc/config/pa/pa32-netbsd.h new file mode 100644 index 00000000000..43a435c82d2 --- /dev/null +++ b/gcc/config/pa/pa32-netbsd.h @@ -0,0 +1,37 @@ +/* Definitions for PA_RISC with ELF-32 format + Copyright (C) 2000-2019 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. */ + +/* Turn off various SOM crap we don't want. */ +#undef TARGET_ELF32 +#define TARGET_ELF32 1 + +/* The libcall __canonicalize_funcptr_for_compare is referenced in + crtend.o and the reference isn't resolved in objects that don't + compare function pointers. Thus, we need to play games to provide + a reference in crtbegin.o. The rest of the define is the same + as that in crtstuff.c */ +#define CTOR_LIST_BEGIN \ + asm (".type __canonicalize_funcptr_for_compare,@function\n" \ +" .text\n" \ +" .word __canonicalize_funcptr_for_compare-$PIC_pcrel$0"); \ + STATIC func_ptr __CTOR_LIST__[1] \ + __attribute__ ((__used__, section(".ctors"), \ + aligned(sizeof(func_ptr)))) \ + = { (func_ptr) (-1) } diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index c9aea1dde15..33b6fa874fc 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,11 @@ +2019-07-31 Matt Thomas + Nick Hudson + Matthew Green + Maya Rashish + + * config.host (hppa*-*-netbsd*): New case. + * config/pa/t-netbsd: New file. + 2019-07-31 Joel Hutton * config/arm/cmse.c (cmse_check_address_range): Add diff --git a/libgcc/config.host b/libgcc/config.host index f5ca779b878..503ebb6be20 100644 --- a/libgcc/config.host +++ b/libgcc/config.host @@ -634,6 +634,9 @@ hppa[12]*-*-hpux11*) hppa*-*-openbsd*) tmake_file="$tmake_file pa/t-openbsd" ;; +hppa*-*-netbsd*) + tmake_file="$tmake_file pa/t-netbsd" + ;; i[34567]86-*-darwin*) tmake_file="$tmake_file i386/t-crtpc t-crtfm i386/t-msabi" tm_file="$tm_file i386/darwin-lib.h" diff --git a/libgcc/config/pa/t-netbsd b/libgcc/config/pa/t-netbsd new file mode 100644 index 00000000000..8b99068ce42 --- /dev/null +++ b/libgcc/config/pa/t-netbsd @@ -0,0 +1,9 @@ +#Plug millicode routines into libgcc.a We want these on both native and +#cross compiles. We use the "64-bit" routines because the "32-bit" code +#is broken for certain corner cases. +LIB1ASMSRC = pa/milli64.S +LIB1ASMFUNCS = _divI _divU _remI _remU _div_const _mulI _dyncall + +HOST_LIBGCC2_CFLAGS += -DELF=1 -DLINUX=1 + +LIB2ADD = $(srcdir)/config/pa/fptr.c