I successfully built cad/magic with this. ok?
Index: lang/gcc/8/Makefile =================================================================== RCS file: /cvs/ports/lang/gcc/8/Makefile,v retrieving revision 1.36 diff -u -p -r1.36 Makefile --- lang/gcc/8/Makefile 14 Nov 2020 00:00:39 -0000 1.36 +++ lang/gcc/8/Makefile 18 Jan 2021 17:06:37 -0000 @@ -1,7 +1,7 @@ # $OpenBSD: Makefile,v 1.36 2020/11/14 00:00:39 sthen Exp $ -ONLY_FOR_ARCHS = \ - aarch64 alpha amd64 arm hppa i386 mips64 mips64el powerpc sparc64 +ONLY_FOR_ARCHS = aarch64 alpha amd64 arm hppa i386 mips64 mips64el \ + powerpc powerpc64 sparc64 # XXX: sparc64 ONLY_FOR_ARCHS-ada = amd64 hppa i386 mips64 powerpc @@ -18,7 +18,7 @@ DPB_PROPERTIES = parallel V = 8.4.0 FULL_VERSION = $V FULL_PKGVERSION = $V -REVISION = 1 +REVISION = 2 ADASTRAP-amd64 = adastrap-amd64-8.3.0-2.tar.xz ADASTRAP-arm = adastrap-arm-4.9.4-0.tar.xz @@ -66,7 +66,8 @@ EXTRACT_ONLY = ${DISTNAME}.tar.xz BUILD_DEPENDS += devel/bison \ devel/libexecinfo -.if ${MACHINE_ARCH} == "aarch64" || ${MACHINE_ARCH} == "arm" +.if ${MACHINE_ARCH} == "aarch64" || ${MACHINE_ARCH} == "arm" || \ + ${MACHINE_ARCH} == "powerpc64" # would be helpful on i386/amd64 too, but some ports also need the old # ld.bfd in base which can't cope with new gas. BUILD_DEPENDS += devel/gas @@ -174,8 +175,8 @@ PKG_ARGS += -DX86=0 .if ${MACHINE_ARCH} == "aarch64" || ${MACHINE_ARCH} == "alpha" || \ ${MACHINE_ARCH} == "arm" || \ ${MACHINE_ARCH} == "amd64" || ${MACHINE_ARCH} == "i386" || \ - ${MACHINE_ARCH} == "powerpc" || ${MACHINE_ARCH} == "sh" || \ - ${MACHINE_ARCH} == "sparc64" + ${MACHINE_ARCH} == "powerpc" || ${MACHINE_ARCH} == "powerpc64" || \ + ${MACHINE_ARCH} == "sh" || ${MACHINE_ARCH} == "sparc64" PKG_ARGS += -DITM=1 .else PKG_ARGS += -DITM=0 Index: lang/gcc/8/patches/patch-gcc_config_gcc =================================================================== RCS file: /cvs/ports/lang/gcc/8/patches/patch-gcc_config_gcc,v retrieving revision 1.4 diff -u -p -r1.4 patch-gcc_config_gcc --- lang/gcc/8/patches/patch-gcc_config_gcc 4 Sep 2020 09:55:34 -0000 1.4 +++ lang/gcc/8/patches/patch-gcc_config_gcc 18 Jan 2021 17:06:37 -0000 @@ -98,7 +98,7 @@ Index: gcc/config.gcc i[34567]86-*-linux* | i[34567]86-*-kfreebsd*-gnu | i[34567]86-*-gnu* | i[34567]86-*-kopensolaris*-gnu) # Intel 80386's running GNU/* # with ELF format using glibc 2 -@@ -2394,6 +2432,12 @@ pdp11-*-*) +@@ -2394,6 +2432,18 @@ pdp11-*-*) # tmake_file="${tmake_file} rs6000/t-fprules" # extra_headers= # ;; @@ -108,10 +108,16 @@ Index: gcc/config.gcc + tmake_file="${tmake_file} rs6000/t-openbsd" + extra_options="${extra_options} rs6000/sysv4.opt openbsd.opt" + ;; ++powerpc64*-*-openbsd*) ++ tm_defines="${tm_defines} DEFAULT_FLAG_PIE=2" ++ tm_file="${tm_file} dbxelf.h elfos.h openbsd.h openbsd-stdint.h openbsd-libpthread.h freebsd-spec.h rs6000/sysv4.h rs6000/default64.h rs6000/openbsd64.h" ++ tmake_file="${tmake_file} rs6000/t-openbsd64" ++ extra_options="${extra_options} rs6000/sysv4.opt rs6000/linux64.opt openbsd.opt" ++ ;; powerpc-*-darwin*) extra_options="${extra_options} ${cpu_type}/darwin.opt" case ${target} in -@@ -2994,10 +3038,10 @@ sparc64-*-netbsd*) +@@ -2994,10 +3044,10 @@ sparc64-*-netbsd*) tmake_file="${tmake_file} sparc/t-sparc sparc/t-netbsd64" ;; sparc64-*-openbsd*) @@ -123,7 +129,7 @@ Index: gcc/config.gcc gas=yes gnu_ld=yes with_cpu=ultrasparc tmake_file="${tmake_file} sparc/t-sparc" -@@ -3226,6 +3270,12 @@ case ${target} in +@@ -3226,6 +3276,12 @@ case ${target} in else arch=i386 fi Index: lang/gcc/8/patches/patch-gcc_config_rs6000_openbsd64_h =================================================================== RCS file: lang/gcc/8/patches/patch-gcc_config_rs6000_openbsd64_h diff -N lang/gcc/8/patches/patch-gcc_config_rs6000_openbsd64_h --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ lang/gcc/8/patches/patch-gcc_config_rs6000_openbsd64_h 18 Jan 2021 17:06:37 -0000 @@ -0,0 +1,417 @@ +$OpenBSD$ + +Index: gcc/config/rs6000/openbsd64.h +--- gcc/config/rs6000/openbsd64.h.orig ++++ gcc/config/rs6000/openbsd64.h +@@ -0,0 +1,411 @@ ++/* Definitions for 64-bit PowerPC running OpenBSD using the ELF format ++ Copyright (C) 2012-2021 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 ++ <http://www.gnu.org/licenses/>. */ ++ ++/* Override the defaults, which exist to force the proper definition. */ ++ ++#ifdef IN_LIBGCC2 ++#undef TARGET_64BIT ++#ifdef __powerpc64__ ++#define TARGET_64BIT 1 ++#else ++#define TARGET_64BIT 0 ++#endif ++#endif ++ ++#undef TARGET_AIX ++#define TARGET_AIX TARGET_64BIT ++ ++#ifdef HAVE_LD_NO_DOT_SYMS ++/* New ABI uses a local sym for the function entry point. */ ++extern int dot_symbols; ++#undef DOT_SYMBOLS ++#define DOT_SYMBOLS dot_symbols ++#endif ++ ++#define TARGET_USES_LINUX64_OPT 1 ++#ifdef HAVE_LD_LARGE_TOC ++#undef TARGET_CMODEL ++#define TARGET_CMODEL rs6000_current_cmodel ++#define SET_CMODEL(opt) rs6000_current_cmodel = opt ++#else ++#define SET_CMODEL(opt) do {} while (0) ++#endif ++ ++#undef PROCESSOR_DEFAULT ++#define PROCESSOR_DEFAULT PROCESSOR_POWER7 ++#undef PROCESSOR_DEFAULT64 ++#define PROCESSOR_DEFAULT64 PROCESSOR_POWER8 ++ ++/* We don't need to generate entries in .fixup, except when ++ -mrelocatable or -mrelocatable-lib is given. */ ++#undef RELOCATABLE_NEEDS_FIXUP ++#define RELOCATABLE_NEEDS_FIXUP \ ++ (rs6000_isa_flags & rs6000_isa_flags_explicit & OPTION_MASK_RELOCATABLE) ++ ++#undef RS6000_ABI_NAME ++#define RS6000_ABI_NAME "openbsd" ++ ++#define INVALID_64BIT "%<-m%s%> not supported in this configuration" ++#define INVALID_32BIT INVALID_64BIT ++ ++/* OpenBSD/powerpc64 uses the ELF v2 ABI by default. */ ++#define ELFv2_ABI_CHECK (rs6000_elf_abi != 1) ++ ++#undef SUBSUBTARGET_OVERRIDE_OPTIONS ++#define SUBSUBTARGET_OVERRIDE_OPTIONS \ ++ do \ ++ { \ ++ if (!global_options_set.x_rs6000_alignment_flags) \ ++ rs6000_alignment_flags = MASK_ALIGN_NATURAL; \ ++ if (TARGET_64BIT) \ ++ { \ ++ if (DEFAULT_ABI != ABI_AIX) \ ++ { \ ++ rs6000_current_abi = ABI_AIX; \ ++ error (INVALID_64BIT, "call"); \ ++ } \ ++ dot_symbols = !strcmp (rs6000_abi_name, "aixdesc"); \ ++ if (rs6000_isa_flags & OPTION_MASK_RELOCATABLE) \ ++ { \ ++ rs6000_isa_flags &= ~OPTION_MASK_RELOCATABLE; \ ++ error (INVALID_64BIT, "relocatable"); \ ++ } \ ++ if (ELFv2_ABI_CHECK) \ ++ { \ ++ rs6000_current_abi = ABI_ELFv2; \ ++ if (dot_symbols) \ ++ error ("-mcall-aixdesc incompatible with -mabi=elfv2"); \ ++ } \ ++ if (rs6000_isa_flags & OPTION_MASK_EABI) \ ++ { \ ++ rs6000_isa_flags &= ~OPTION_MASK_EABI; \ ++ error (INVALID_64BIT, "eabi"); \ ++ } \ ++ if (TARGET_PROTOTYPE) \ ++ { \ ++ target_prototype = 0; \ ++ error (INVALID_64BIT, "prototype"); \ ++ } \ ++ if ((rs6000_isa_flags & OPTION_MASK_POWERPC64) == 0) \ ++ { \ ++ rs6000_isa_flags |= OPTION_MASK_POWERPC64; \ ++ error ("-m64 requires a PowerPC64 cpu"); \ ++ } \ ++ if ((rs6000_isa_flags_explicit \ ++ & OPTION_MASK_MINIMAL_TOC) != 0) \ ++ { \ ++ if (global_options_set.x_rs6000_current_cmodel \ ++ && rs6000_current_cmodel != CMODEL_SMALL) \ ++ error ("-mcmodel incompatible with other toc options"); \ ++ SET_CMODEL (CMODEL_SMALL); \ ++ } \ ++ else \ ++ { \ ++ if (!global_options_set.x_rs6000_current_cmodel) \ ++ SET_CMODEL (CMODEL_MEDIUM); \ ++ if (rs6000_current_cmodel != CMODEL_SMALL) \ ++ { \ ++ TARGET_NO_FP_IN_TOC = 0; \ ++ TARGET_NO_SUM_IN_TOC = 0; \ ++ } \ ++ } \ ++ } \ ++ } \ ++ while (0) ++ ++#undef ASM_DEFAULT_SPEC ++#undef ASM_SPEC ++ ++#define ASM_DEFAULT_SPEC "-mppc%{!m32:64}" ++#define ASM_SPEC "%{m32:%(asm_spec32)}%{!m32:%(asm_spec64)} %(asm_spec_common)" ++ ++#define ASM_SPEC32 "-a32 \ ++%{mrelocatable} %{mrelocatable-lib} %{" FPIE_OR_FPIC_SPEC ":-K PIC} \ ++%{memb} %{!memb: %{msdata=eabi: -memb}} \ ++%{!mlittle: %{!mlittle-endian: %{!mbig: %{!mbig-endian: \ ++ %{mcall-freebsd: -mbig} \ ++ %{mcall-i960-old: -mlittle} \ ++ %{mcall-linux: -mbig} \ ++ %{mcall-gnu: -mbig} \ ++ %{mcall-netbsd: -mbig} \ ++}}}}" ++ ++#define ASM_SPEC64 "-a64" ++ ++#define ASM_SPEC_COMMON "%(asm_cpu) \ ++%{,assembler|,assembler-with-cpp: %{mregnames} %{mno-regnames}} \ ++%{mlittle} %{mlittle-endian} %{mbig} %{mbig-endian}" ++ ++#undef SUBSUBTARGET_EXTRA_SPECS ++#define SUBSUBTARGET_EXTRA_SPECS \ ++ { "asm_spec_common", ASM_SPEC_COMMON }, \ ++ { "asm_spec32", ASM_SPEC32 }, \ ++ { "asm_spec64", ASM_SPEC64 }, ++ ++#undef MULTILIB_DEFAULTS ++#define MULTILIB_DEFAULTS { "m64" } ++ ++/* OpenBSD/powerpc64 increases natural record alignment to doubleword if ++ the first field is an FP double, only if in power alignment mode. */ ++#undef ROUND_TYPE_ALIGN ++#define ROUND_TYPE_ALIGN(STRUCT, COMPUTED, SPECIFIED) \ ++ ((TARGET_64BIT \ ++ && (TREE_CODE (STRUCT) == RECORD_TYPE \ ++ || TREE_CODE (STRUCT) == UNION_TYPE \ ++ || TREE_CODE (STRUCT) == QUAL_UNION_TYPE) \ ++ && TARGET_ALIGN_NATURAL == 0) \ ++ ? rs6000_special_round_type_align (STRUCT, COMPUTED, SPECIFIED) \ ++ : MAX ((COMPUTED), (SPECIFIED))) ++ ++/* Use the default for compiling target libs. */ ++#ifdef IN_TARGET_LIBS ++#undef TARGET_ALIGN_NATURAL ++#define TARGET_ALIGN_NATURAL 1 ++#endif ++ ++/* Indicate that jump tables go in the text section. */ ++#undef JUMP_TABLES_IN_TEXT_SECTION ++#define JUMP_TABLES_IN_TEXT_SECTION TARGET_64BIT ++ ++/* The linux ppc64 ABI isn't explicit on whether aggregates smaller ++ than a doubleword should be padded upward or downward. You could ++ reasonably assume that they follow the normal rules for structure ++ layout treating the parameter area as any other block of memory, ++ then map the reg param area to registers. i.e. pad upward. ++ Setting both of the following defines results in this behavior. ++ Setting just the first one will result in aggregates that fit in a ++ doubleword being padded downward, and others being padded upward. ++ Not a bad idea as this results in struct { int x; } being passed ++ the same way as an int. */ ++#define AGGREGATE_PADDING_FIXED TARGET_64BIT ++#define AGGREGATES_PAD_UPWARD_ALWAYS 0 ++ ++/* Specify padding for the last element of a block move between ++ registers and memory. FIRST is nonzero if this is the only ++ element. */ ++#define BLOCK_REG_PADDING(MODE, TYPE, FIRST) \ ++ (!(FIRST) ? PAD_UPWARD : targetm.calls.function_arg_padding (MODE, TYPE)) ++ ++/* OpenBSD doesn't support saving and restoring 64-bit regs with a 32-bit ++ kernel. */ ++#define OS_MISSING_POWERPC64 !TARGET_64BIT ++ ++#undef TARGET_OS_CPP_BUILTINS ++#define TARGET_OS_CPP_BUILTINS() \ ++ do \ ++ { \ ++ OPENBSD_OS_CPP_BUILTINS_ELF(); \ ++ builtin_define ("__PPC__"); \ ++ builtin_define ("__ppc__"); \ ++ builtin_define ("__powerpc__"); \ ++ if (TARGET_64BIT) \ ++ { \ ++ builtin_define ("__arch64__"); \ ++ builtin_define ("__LP64__"); \ ++ builtin_define ("__PPC64__"); \ ++ builtin_define ("__powerpc64__"); \ ++ builtin_assert ("cpu=powerpc64"); \ ++ builtin_assert ("machine=powerpc64"); \ ++ } \ ++ else \ ++ { \ ++ builtin_define_std ("PPC"); \ ++ builtin_define_std ("powerpc"); \ ++ builtin_assert ("cpu=powerpc"); \ ++ builtin_assert ("machine=powerpc"); \ ++ TARGET_OS_SYSV_CPP_BUILTINS (); \ ++ } \ ++ } \ ++ while (0) ++ ++#undef CPP_OS_DEFAULT_SPEC ++#define CPP_OS_DEFAULT_SPEC "%(cpp_os_openbsd)" ++ ++#undef LINK_SPEC ++#define LINK_SPEC "%{shared:-shared} \ ++ %{!shared: \ ++ %{!static: \ ++ %{rdynamic:-export-dynamic} \ ++ %{!dynamic-linker:-dynamic-linker /usr/libexec/ld.so}} \ ++ %{static:-static}} \ ++ -L/usr/lib" ++ ++#undef LIB_DEFAULT_SPEC ++#define LIB_DEFAULT_SPEC "%(lib_openbsd)" ++ ++#undef STARTFILE_DEFAULT_SPEC ++#define STARTFILE_DEFAULT_SPEC "%(startfile_openbsd)" ++ ++#undef ENDFILE_DEFAULT_SPEC ++#define ENDFILE_DEFAULT_SPEC "%(endfile_openbsd)" ++ ++#undef LINK_START_DEFAULT_SPEC ++#define LINK_START_DEFAULT_SPEC "%(link_start_openbsd)" ++ ++#undef LINK_OS_DEFAULT_SPEC ++#define LINK_OS_DEFAULT_SPEC "%(link_os_openbsd)" ++ ++/************************[ Target stuff ]***********************************/ ++ ++/* Define the actual types of some ANSI-mandated types. ++ Needs to agree with <machine/ansi.h>. GCC defaults come from c-decl.c, ++ c-common.c, and config/<arch>/<arch>.h. */ ++ ++ ++#undef SIZE_TYPE ++#define SIZE_TYPE (TARGET_64BIT ? "long unsigned int" : "unsigned int") ++ ++#undef PTRDIFF_TYPE ++#define PTRDIFF_TYPE (TARGET_64BIT ? "long int" : "int") ++ ++/* This must agree with <machine/_types.h> */ ++#undef SIZE_TYPE ++#define SIZE_TYPE "long unsigned int" ++ ++#undef PTRDIFF_TYPE ++#define PTRDIFF_TYPE "long int" ++ ++#undef WCHAR_TYPE ++#define WCHAR_TYPE "int" ++ ++#undef WCHAR_TYPE_SIZE ++#define WCHAR_TYPE_SIZE 32 ++ ++/* Override rs6000.h definition. */ ++#undef ASM_APP_ON ++#define ASM_APP_ON "#APP\n" ++ ++/* Override rs6000.h definition. */ ++#undef ASM_APP_OFF ++#define ASM_APP_OFF "#NO_APP\n" ++ ++/* Function profiling bits */ ++#undef RS6000_MCOUNT ++#define RS6000_MCOUNT "_mcount" ++ ++#define PROFILE_HOOK(LABEL) \ ++ do { if (TARGET_64BIT) output_profile_hook (LABEL); } while (0) ++ ++/* _init and _fini functions are built from bits spread across many ++ object files, each potentially with a different TOC pointer. For ++ that reason, place a nop after the call so that the linker can ++ restore the TOC pointer if a TOC adjusting call stub is needed. */ ++#ifdef __powerpc64__ ++#define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \ ++ asm (SECTION_OP "\n" \ ++" bl " #FUNC "\n" \ ++" nop\n" \ ++" .previous"); ++#endif ++ ++/* FP save and restore routines. */ ++#undef SAVE_FP_PREFIX ++#define SAVE_FP_PREFIX (TARGET_64BIT ? "._savef" : "_savefpr_") ++#undef SAVE_FP_SUFFIX ++#define SAVE_FP_SUFFIX "" ++#undef RESTORE_FP_PREFIX ++#define RESTORE_FP_PREFIX (TARGET_64BIT ? "._restf" : "_restfpr_") ++#undef RESTORE_FP_SUFFIX ++#define RESTORE_FP_SUFFIX "" ++ ++/* Select a format to encode pointers in exception handling data. CODE ++ is 0 for data, 1 for code labels, 2 for function pointers. GLOBAL is ++ true if the symbol may be affected by dynamic relocations. */ ++#undef ASM_PREFERRED_EH_DATA_FORMAT ++#define ASM_PREFERRED_EH_DATA_FORMAT(CODE, GLOBAL) \ ++ (TARGET_64BIT || flag_pic \ ++ ? (((GLOBAL) ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel \ ++ | (TARGET_64BIT ? DW_EH_PE_udata8 : DW_EH_PE_sdata4)) \ ++ : DW_EH_PE_absptr) ++ ++/* Static stack checking is supported by means of probes. */ ++#define STACK_CHECK_STATIC_BUILTIN 1 ++ ++/* The default value isn't sufficient in 64-bit mode. */ ++#define STACK_CHECK_PROTECT (TARGET_64BIT ? 16 * 1024 : 12 * 1024) ++ ++/* Use standard DWARF numbering for DWARF debugging information. */ ++#define RS6000_USE_DWARF_NUMBERING ++ ++/* PowerPC64 Linux word-aligns FP doubles when -malign-power is given. */ ++#undef ADJUST_FIELD_ALIGN ++#define ADJUST_FIELD_ALIGN(FIELD, TYPE, COMPUTED) \ ++ (rs6000_special_adjust_field_align_p ((TYPE), (COMPUTED)) \ ++ ? 128 \ ++ : (TARGET_64BIT \ ++ && TARGET_ALIGN_NATURAL == 0 \ ++ && TYPE_MODE (strip_array_types (TYPE)) == DFmode) \ ++ ? MIN ((COMPUTED), 32) \ ++ : (COMPUTED)) ++ ++#undef TOC_SECTION_ASM_OP ++#define TOC_SECTION_ASM_OP \ ++ (TARGET_64BIT \ ++ ? "\t.section\t\".toc\",\"aw\"" \ ++ : "\t.section\t\".got\",\"aw\"") ++ ++#undef MINIMAL_TOC_SECTION_ASM_OP ++#define MINIMAL_TOC_SECTION_ASM_OP \ ++ (TARGET_64BIT \ ++ ? "\t.section\t\".toc1\",\"aw\"" \ ++ : (flag_pic \ ++ ? "\t.section\t\".got2\",\"aw\"" \ ++ : "\t.section\t\".got1\",\"aw\"")) ++ ++/* 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) \ ++ { \ ++ fputs ("\t.size\t", (FILE)); \ ++ if (TARGET_64BIT && DOT_SYMBOLS) \ ++ putc ('.', (FILE)); \ ++ assemble_name ((FILE), (FNAME)); \ ++ fputs (",.-", (FILE)); \ ++ rs6000_output_function_entry (FILE, FNAME); \ ++ putc ('\n', (FILE)); \ ++ } \ ++ } \ ++ while (0) ++ ++#undef ASM_OUTPUT_SPECIAL_POOL_ENTRY_P ++#define ASM_OUTPUT_SPECIAL_POOL_ENTRY_P(X, MODE) \ ++ (TARGET_TOC \ ++ && (GET_CODE (X) == SYMBOL_REF \ ++ || (GET_CODE (X) == CONST && GET_CODE (XEXP (X, 0)) == PLUS \ ++ && GET_CODE (XEXP (XEXP (X, 0), 0)) == SYMBOL_REF) \ ++ || GET_CODE (X) == LABEL_REF \ ++ || (GET_CODE (X) == CONST_INT \ ++ && GET_MODE_BITSIZE (MODE) <= GET_MODE_BITSIZE (Pmode)) \ ++ || (GET_CODE (X) == CONST_DOUBLE \ ++ && ((TARGET_64BIT \ ++ && (TARGET_MINIMAL_TOC \ ++ || (SCALAR_FLOAT_MODE_P (GET_MODE (X)) \ ++ && ! TARGET_NO_FP_IN_TOC))) \ ++ || (!TARGET_64BIT \ ++ && !TARGET_NO_FP_IN_TOC \ ++ && SCALAR_FLOAT_MODE_P (GET_MODE (X)) \ ++ && BITS_PER_WORD == HOST_BITS_PER_INT))))) ++ ++/* Use --as-needed -lgcc_s for eh support. */ ++#ifdef HAVE_LD_AS_NEEDED ++#define USE_LD_AS_NEEDED 1 ++#endif Index: lang/gcc/8/patches/patch-gcc_config_rs6000_sysv4_h =================================================================== RCS file: /cvs/ports/lang/gcc/8/patches/patch-gcc_config_rs6000_sysv4_h,v retrieving revision 1.1.1.1 diff -u -p -r1.1.1.1 patch-gcc_config_rs6000_sysv4_h --- lang/gcc/8/patches/patch-gcc_config_rs6000_sysv4_h 4 Jan 2019 15:50:39 -0000 1.1.1.1 +++ lang/gcc/8/patches/patch-gcc_config_rs6000_sysv4_h 18 Jan 2021 17:06:37 -0000 @@ -2,7 +2,26 @@ $OpenBSD: patch-gcc_config_rs6000_sysv4_ Index: gcc/config/rs6000/sysv4.h --- gcc/config/rs6000/sysv4.h.orig +++ gcc/config/rs6000/sysv4.h -@@ -387,6 +387,7 @@ do { \ +@@ -87,7 +87,8 @@ do { \ + else if (!strcmp (rs6000_abi_name, "aixdesc")) \ + rs6000_current_abi = ABI_AIX; \ + else if (!strcmp (rs6000_abi_name, "freebsd") \ +- || !strcmp (rs6000_abi_name, "linux")) \ ++ || !strcmp (rs6000_abi_name, "linux") \ ++ || !strcmp (rs6000_abi_name, "openbsd")) \ + { \ + if (TARGET_64BIT) \ + rs6000_current_abi = ABI_AIX; \ +@@ -96,8 +97,6 @@ do { \ + } \ + else if (!strcmp (rs6000_abi_name, "netbsd")) \ + rs6000_current_abi = ABI_V4; \ +- else if (!strcmp (rs6000_abi_name, "openbsd")) \ +- rs6000_current_abi = ABI_V4; \ + else if (!strcmp (rs6000_abi_name, "i960-old")) \ + { \ + rs6000_current_abi = ABI_V4; \ +@@ -387,6 +386,7 @@ do { \ asm_fprintf (FILE, "%L%s", PREFIX) /* Globalizing directive for a label. */ @@ -10,7 +29,7 @@ Index: gcc/config/rs6000/sysv4.h #define GLOBAL_ASM_OP "\t.globl " /* This says how to output assembler code to declare an -@@ -851,13 +852,14 @@ ncrtn.o%s" +@@ -851,13 +851,14 @@ ncrtn.o%s" /* OpenBSD support. */ #ifndef LIB_OPENBSD_SPEC @@ -28,7 +47,7 @@ Index: gcc/config/rs6000/sysv4.h #endif #ifndef ENDFILE_OPENBSD_SPEC -@@ -874,7 +876,7 @@ ncrtn.o%s" +@@ -874,7 +875,7 @@ ncrtn.o%s" #endif #ifndef CPP_OS_OPENBSD_SPEC Index: lang/gcc/8/patches/patch-gcc_configure =================================================================== RCS file: /cvs/ports/lang/gcc/8/patches/patch-gcc_configure,v retrieving revision 1.2 diff -u -p -r1.2 patch-gcc_configure --- lang/gcc/8/patches/patch-gcc_configure 4 Sep 2020 09:55:34 -0000 1.2 +++ lang/gcc/8/patches/patch-gcc_configure 18 Jan 2021 17:06:37 -0000 @@ -20,7 +20,26 @@ Index: gcc/configure shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in -@@ -29242,6 +29242,7 @@ else +@@ -28864,7 +28864,7 @@ $as_echo "#define HAVE_LD_PPC_GNU_ATTR_LONG_DOUBLE 1" + esac + + case "$target:$tm_file" in +- powerpc64-*-freebsd* | powerpc64*-*-linux* | powerpc*-*-linux*rs6000/biarch64.h*) ++ powerpc64-*-freebsd* | powerpc64*-*-linux* | powerpc*-*-linux*rs6000/biarch64.h* | powerpc64*-openbsd*) + case "$target" in + *le-*-linux*) + emul_name="-melf64lppc" +@@ -28875,6 +28875,9 @@ case "$target:$tm_file" in + *-*-freebsd*) + emul_name="-melf64ppc_fbsd" + ;; ++ *-*-openbsd*) ++ gcc_cv_ld_large_toc=yes ++ ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking linker support for omitting dot symbols" >&5 + $as_echo_n "checking linker support for omitting dot symbols... " >&6; } +@@ -29242,6 +29245,7 @@ else fi ;; @@ -28,7 +47,7 @@ Index: gcc/configure *) gcc_cv_libc_provides_ssp=no ;; esac fi -@@ -29262,6 +29263,7 @@ if test "${enable_default_ssp+set}" = set; then : +@@ -29262,6 +29266,7 @@ if test "${enable_default_ssp+set}" = set; then : if test x$gcc_cv_libc_provides_ssp = xyes; then case "$target" in ia64*-*-*) enable_default_ssp=no ;; Index: lang/gcc/8/patches/patch-gcc_tree-vect-loop_c =================================================================== RCS file: lang/gcc/8/patches/patch-gcc_tree-vect-loop_c diff -N lang/gcc/8/patches/patch-gcc_tree-vect-loop_c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ lang/gcc/8/patches/patch-gcc_tree-vect-loop_c 18 Jan 2021 17:06:37 -0000 @@ -0,0 +1,14 @@ +$OpenBSD$ + +Index: gcc/tree-vect-loop.c +--- gcc/tree-vect-loop.c.orig ++++ gcc/tree-vect-loop.c +@@ -55,6 +55,8 @@ along with GCC; see the file COPYING3. If not see + #include "vec-perm-indices.h" + #include "tree-eh.h" + ++#define vec_step vec_step_ ++ + /* Loop Vectorization Pass. + + This pass tries to vectorize loops. Index: lang/gcc/8/patches/patch-libgcc_config_host =================================================================== RCS file: /cvs/ports/lang/gcc/8/patches/patch-libgcc_config_host,v retrieving revision 1.2 diff -u -p -r1.2 patch-libgcc_config_host --- lang/gcc/8/patches/patch-libgcc_config_host 11 Aug 2019 20:53:07 -0000 1.2 +++ lang/gcc/8/patches/patch-libgcc_config_host 18 Jan 2021 17:06:37 -0000 @@ -44,7 +44,7 @@ Index: libgcc/config.host powerpc-*-netbsd*) tmake_file="$tmake_file rs6000/t-netbsd rs6000/t-crtstuff" + ;; -+powerpc-*-openbsd*) ++powerpc*-*-openbsd*) + tmake_file="${tmake_file} rs6000/t-ppccomm rs6000/t-crtstuff rs6000/t-openbsd" ;; powerpc-*-eabispe*)