diff options
author | marino <marino@pkgsrc.org> | 2016-08-28 17:59:36 +0000 |
---|---|---|
committer | marino <marino@pkgsrc.org> | 2016-08-28 17:59:36 +0000 |
commit | 2ce2fe9b2d95ab5100d2bddea3293c7a9a7806aa (patch) | |
tree | 9bcf59f52a80a7748fe03b4cbb7c98b0710324a9 /lang/gcc5-aux/files | |
parent | 394425273cd175c8947084aad9f70029a389db1d (diff) | |
download | pkgsrc-2ce2fe9b2d95ab5100d2bddea3293c7a9a7806aa.tar.gz |
lang/gcc5-aux: Upgrade version 20150422 => 20160603 (GCC 5.1 => 5.4)
The signal trampoline detection for NetBSD 7 and later is still broken.
Support for NetBSD 6.99 has been removed along with supporte for
32-bit DragonFly. The modifications to the testsuite were misguided and
have also been removed.
Diffstat (limited to 'lang/gcc5-aux/files')
-rw-r--r-- | lang/gcc5-aux/files/diff-ada | 47 | ||||
-rw-r--r-- | lang/gcc5-aux/files/diff-core | 262 | ||||
-rw-r--r-- | lang/gcc5-aux/files/diff-cxx | 111 | ||||
-rw-r--r-- | lang/gcc5-aux/files/diff-cxx-testsuite | 2 | ||||
-rw-r--r-- | lang/gcc5-aux/files/diff-fortran | 4 |
5 files changed, 184 insertions, 242 deletions
diff --git a/lang/gcc5-aux/files/diff-ada b/lang/gcc5-aux/files/diff-ada index 8039c96be20..bde7fedac0a 100644 --- a/lang/gcc5-aux/files/diff-ada +++ b/lang/gcc5-aux/files/diff-ada @@ -1045,23 +1045,36 @@ Gcc_Path : String_Access := null; Non_Empty_Node : constant Project_Node_Id := 1; ---- gcc/ada/s-osinte-android.ads.orig -+++ gcc/ada/s-osinte-android.ads -@@ -597,11 +597,11 @@ +--- gcc/ada/s-oscons-tmplt.c.orig ++++ gcc/ada/s-oscons-tmplt.c +@@ -402,7 +402,7 @@ - type pid_t is new int; + /* ioctl(2) requests are "int" in UNIX, but "unsigned long" on FreeBSD */ -- type time_t is new long; -+ type time_t is new Long_Long_Integer; +-#ifdef __FreeBSD__ ++#if defined (__FreeBSD__) || defined (__DragonFly__) + # define CNI CNU + # define IOCTL_Req_T "unsigned" + #else +@@ -1014,7 +1014,7 @@ - type timespec is record -- tv_sec : time_t; -- tv_nsec : long; -+ ts_sec : time_t; -+ ts_nsec : long; - end record; - pragma Convention (C, timespec); + */ +-#if defined (__FreeBSD__) || defined (linux) ++#if defined (__FreeBSD__) || defined (linux) || defined (__DragonFly__) + # define PTY_Library "-lutil" + #else + # define PTY_Library "" +@@ -1435,7 +1435,8 @@ + #endif + CND(CLOCK_THREAD_CPUTIME_ID, "Thread CPU clock") + +-#if defined(__FreeBSD__) || (defined(_AIX) && defined(_AIXVERSION_530)) ++#if defined(__FreeBSD__) || (defined(_AIX) && defined(_AIXVERSION_530)) \ ++ || defined(__DragonFly__) + /** On these platforms use system provided monotonic clock instead of + ** the default CLOCK_REALTIME. We then need to set up cond var attributes + ** appropriately (see thread.c). --- /dev/null +++ gcc/ada/s-osinte-dragonfly.adb @@ -0,0 +1,116 @@ @@ -3620,7 +3633,7 @@ THREADSLIB = -lposix4 -lthread MISCLIB = -lposix4 -lnsl -lsocket SO_OPTS = -Wl,-h, -@@ -1420,8 +1424,11 @@ +@@ -1416,8 +1420,11 @@ ifeq ($(strip $(filter-out %86 freebsd%,$(target_cpu) $(target_os))),) LIBGNAT_TARGET_PAIRS = \ a-intnam.ads<a-intnam-freebsd.ads \ @@ -3632,7 +3645,7 @@ s-osinte.adb<s-osinte-freebsd.adb \ s-osinte.ads<s-osinte-freebsd.ads \ s-osprim.adb<s-osprim-posix.adb \ -@@ -1436,6 +1443,8 @@ +@@ -1432,6 +1439,8 @@ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb GNATLIB_SHARED = gnatlib-shared-dual @@ -3641,7 +3654,7 @@ EXTRA_GNATRTL_NONTASKING_OBJS=g-sse.o g-ssvety.o EH_MECHANISM=-gcc -@@ -1449,8 +1458,11 @@ +@@ -1445,8 +1454,11 @@ ifeq ($(strip $(filter-out %86_64 freebsd%,$(target_cpu) $(target_os))),) LIBGNAT_TARGET_PAIRS = \ a-intnam.ads<a-intnam-freebsd.ads \ @@ -3653,7 +3666,7 @@ s-osinte.adb<s-osinte-freebsd.adb \ s-osinte.ads<s-osinte-freebsd.ads \ s-osprim.adb<s-osprim-posix.adb \ -@@ -1465,6 +1477,110 @@ +@@ -1461,6 +1473,110 @@ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb GNATLIB_SHARED = gnatlib-shared-dual diff --git a/lang/gcc5-aux/files/diff-core b/lang/gcc5-aux/files/diff-core index c192081f502..d06edb2fb54 100644 --- a/lang/gcc5-aux/files/diff-core +++ b/lang/gcc5-aux/files/diff-core @@ -11,13 +11,11 @@ #undef LINK_SPEC --- gcc/config/i386/freebsd.h.orig +++ gcc/config/i386/freebsd.h -@@ -90,6 +90,14 @@ +@@ -77,6 +77,12 @@ When the -shared link option is used a final link is not being done. */ -+#if FBSD_MAJOR < 9 -+#define ELF_HASH_STYLE "" -+#elif FBSD_MAJOR < 10 ++#if FBSD_MAJOR < 10 +#define ELF_HASH_STYLE "--hash-style=both " +#else +#define ELF_HASH_STYLE "--hash-style=gnu " @@ -26,7 +24,7 @@ #undef LINK_SPEC #define LINK_SPEC "\ %{p:%nconsider using '-pg' instead of '-p' with gprof(1)} \ -@@ -101,6 +109,7 @@ +@@ -88,6 +94,7 @@ %{rdynamic:-export-dynamic} \ -dynamic-linker %(fbsd_dynamic_linker) } \ %{static:-Bstatic}} \ @@ -43,182 +41,6 @@ + %{!static:" ELF_HASH_STYLE "-rpath @PREFIX@/@GCCAUX@/lib} \ %{symbolic:-Bsymbolic}" --- /dev/null -+++ libgcc/config/i386/freebsd-unwind.h -@@ -0,0 +1,173 @@ -+/* DWARF2 EH unwinding support for FreeBSD: AMD x86-64 and x86. -+ Copyright (C) 2015 Free Software Foundation, Inc. -+ Contributed by John Marino <gnugcc@marino.st> -+ -+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. -+ -+Under Section 7 of GPL version 3, you are granted additional -+permissions described in the GCC Runtime Library Exception, version -+3.1, as published by the Free Software Foundation. -+ -+You should have received a copy of the GNU General Public License and -+a copy of the GCC Runtime Library Exception along with this program; -+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -+<http://www.gnu.org/licenses/>. */ -+ -+/* Do code reading to identify a signal frame, and set the frame -+ state data appropriately. See unwind-dw2.c for the structs. */ -+ -+#include <sys/types.h> -+#include <signal.h> -+#include <sys/ucontext.h> -+#include <machine/sigframe.h> -+ -+#define REG_NAME(reg) sf_uc.uc_mcontext.mc_## reg -+ -+#ifdef __x86_64__ -+#define MD_FALLBACK_FRAME_STATE_FOR x86_64_freebsd_fallback_frame_state -+ -+static _Unwind_Reason_Code -+x86_64_freebsd_fallback_frame_state -+(struct _Unwind_Context *context, _Unwind_FrameState *fs) -+{ -+ struct sigframe *sf; -+ long new_cfa; -+ -+ /* Prior to FreeBSD 9, the signal trampoline was located immediately -+ before the ps_strings. To support non-executable stacks on AMD64, -+ the sigtramp was moved to a shared page for FreeBSD 9. Unfortunately -+ this means looking frame patterns again (sys/amd64/amd64/sigtramp.S) -+ rather than using the robust and convenient KERN_PS_STRINGS trick. -+ -+ <pc + 00>: lea 0x10(%rsp),%rdi -+ <pc + 05>: pushq $0x0 -+ <pc + 17>: mov $0x1a1,%rax -+ <pc + 14>: syscall -+ -+ If we can't find this pattern, we're at the end of the stack. -+ */ -+ -+ if (!( *(unsigned int *)(context->ra) == 0x247c8d48 -+ && *(unsigned int *)(context->ra + 4) == 0x48006a10 -+ && *(unsigned int *)(context->ra + 8) == 0x01a1c0c7 -+ && *(unsigned int *)(context->ra + 12) == 0x050f0000 )) -+ return _URC_END_OF_STACK; -+ -+ sf = (struct sigframe *) context->cfa; -+ new_cfa = sf->REG_NAME(rsp); -+ fs->regs.cfa_how = CFA_REG_OFFSET; -+ /* Register 7 is rsp */ -+ fs->regs.cfa_reg = 7; -+ fs->regs.cfa_offset = new_cfa - (long) context->cfa; -+ -+ /* The SVR4 register numbering macros aren't usable in libgcc. */ -+ fs->regs.reg[0].how = REG_SAVED_OFFSET; -+ fs->regs.reg[0].loc.offset = (long)&sf->REG_NAME(rax) - new_cfa; -+ fs->regs.reg[1].how = REG_SAVED_OFFSET; -+ fs->regs.reg[1].loc.offset = (long)&sf->REG_NAME(rdx) - new_cfa; -+ fs->regs.reg[2].how = REG_SAVED_OFFSET; -+ fs->regs.reg[2].loc.offset = (long)&sf->REG_NAME(rcx) - new_cfa; -+ fs->regs.reg[3].how = REG_SAVED_OFFSET; -+ fs->regs.reg[3].loc.offset = (long)&sf->REG_NAME(rbx) - new_cfa; -+ fs->regs.reg[4].how = REG_SAVED_OFFSET; -+ fs->regs.reg[4].loc.offset = (long)&sf->REG_NAME(rsi) - new_cfa; -+ fs->regs.reg[5].how = REG_SAVED_OFFSET; -+ fs->regs.reg[5].loc.offset = (long)&sf->REG_NAME(rdi) - new_cfa; -+ fs->regs.reg[6].how = REG_SAVED_OFFSET; -+ fs->regs.reg[6].loc.offset = (long)&sf->REG_NAME(rbp) - new_cfa; -+ fs->regs.reg[8].how = REG_SAVED_OFFSET; -+ fs->regs.reg[8].loc.offset = (long)&sf->REG_NAME(r8) - new_cfa; -+ fs->regs.reg[9].how = REG_SAVED_OFFSET; -+ fs->regs.reg[9].loc.offset = (long)&sf->REG_NAME(r9) - new_cfa; -+ fs->regs.reg[10].how = REG_SAVED_OFFSET; -+ fs->regs.reg[10].loc.offset = (long)&sf->REG_NAME(r10) - new_cfa; -+ fs->regs.reg[11].how = REG_SAVED_OFFSET; -+ fs->regs.reg[11].loc.offset = (long)&sf->REG_NAME(r11) - new_cfa; -+ fs->regs.reg[12].how = REG_SAVED_OFFSET; -+ fs->regs.reg[12].loc.offset = (long)&sf->REG_NAME(r12) - new_cfa; -+ fs->regs.reg[13].how = REG_SAVED_OFFSET; -+ fs->regs.reg[13].loc.offset = (long)&sf->REG_NAME(r13) - new_cfa; -+ fs->regs.reg[14].how = REG_SAVED_OFFSET; -+ fs->regs.reg[14].loc.offset = (long)&sf->REG_NAME(r14) - new_cfa; -+ fs->regs.reg[15].how = REG_SAVED_OFFSET; -+ fs->regs.reg[15].loc.offset = (long)&sf->REG_NAME(r15) - new_cfa; -+ fs->regs.reg[16].how = REG_SAVED_OFFSET; -+ fs->regs.reg[16].loc.offset = (long)&sf->REG_NAME(rip) - new_cfa; -+ fs->retaddr_column = 16; -+ fs->signal_frame = 1; -+ return _URC_NO_REASON; -+} -+ -+#else /* Next section is for i386 */ -+ -+#define MD_FALLBACK_FRAME_STATE_FOR x86_freebsd_fallback_frame_state -+ -+/* -+ * We can't use KERN_PS_STRINGS anymore if we want to support FreeBSD32 -+ * compat on AMD64. The sigtramp is in a shared page in that case so the -+ * x86_sigtramp_range only works on a true i386 system. We have to -+ * search for the sigtramp frame if we want it working everywhere. -+ */ -+ -+static _Unwind_Reason_Code -+x86_freebsd_fallback_frame_state -+(struct _Unwind_Context *context, _Unwind_FrameState *fs) -+{ -+ struct sigframe *sf; -+ long new_cfa; -+ -+/* -+ * i386 sigtramp frame we are looking for follows. -+ * Apparently PSL_VM is variable, so we can't look past context->ra + 4 -+ * <sigcode>: -+ * 0: ff 54 24 10 call *0x10(%esp) *SIGF_HANDLER -+ * 4: 8d 44 24 20 lea 0x20(%esp),%eax SIGF_UC -+ * 8: 50 push %eax -+ * 9: f7 40 54 00 00 02 00 testl $0x20000,0x54(%eax) $PSL_VM -+ * 10: 75 03 jne 15 <sigcode+0x15> -+ * 12: 8e 68 14 mov 0x14(%eax),%gs UC_GS -+ * 15: b8 a1 01 00 00 mov 0x1a1,%eax $SYS_sigreturn -+ */ -+ -+ if (!( *(unsigned int *)(context->ra - 4) == 0x102454ff -+ && *(unsigned int *)(context->ra) == 0x2024448d )) -+ return _URC_END_OF_STACK; -+ -+ sf = (struct sigframe *) context->cfa; -+ new_cfa = sf->REG_NAME(esp); -+ fs->regs.cfa_how = CFA_REG_OFFSET; -+ fs->regs.cfa_reg = 4; -+ fs->regs.cfa_offset = new_cfa - (long) context->cfa; -+ -+ /* The SVR4 register numbering macros aren't usable in libgcc. */ -+ fs->regs.reg[0].how = REG_SAVED_OFFSET; -+ fs->regs.reg[0].loc.offset = (long)&sf->REG_NAME(eax) - new_cfa; -+ fs->regs.reg[3].how = REG_SAVED_OFFSET; -+ fs->regs.reg[3].loc.offset = (long)&sf->REG_NAME(ebx) - new_cfa; -+ fs->regs.reg[1].how = REG_SAVED_OFFSET; -+ fs->regs.reg[1].loc.offset = (long)&sf->REG_NAME(ecx) - new_cfa; -+ fs->regs.reg[2].how = REG_SAVED_OFFSET; -+ fs->regs.reg[2].loc.offset = (long)&sf->REG_NAME(edx) - new_cfa; -+ fs->regs.reg[6].how = REG_SAVED_OFFSET; -+ fs->regs.reg[6].loc.offset = (long)&sf->REG_NAME(esi) - new_cfa; -+ fs->regs.reg[7].how = REG_SAVED_OFFSET; -+ fs->regs.reg[7].loc.offset = (long)&sf->REG_NAME(edi) - new_cfa; -+ fs->regs.reg[5].how = REG_SAVED_OFFSET; -+ fs->regs.reg[5].loc.offset = (long)&sf->REG_NAME(ebp) - new_cfa; -+ fs->regs.reg[8].how = REG_SAVED_OFFSET; -+ fs->regs.reg[8].loc.offset = (long)&sf->REG_NAME(eip) - new_cfa; -+ fs->retaddr_column = 8; -+ fs->signal_frame = 1; -+ return _URC_NO_REASON; -+} -+#endif /* ifdef __x86_64__ */ ---- /dev/null +++ libgcc/config/i386/netbsd-unwind.h @@ -0,0 +1,178 @@ +/* DWARF2 EH unwinding support for NetBSD: AMD x86-64 and x86. @@ -430,7 +252,7 @@ } --- gcc/config.gcc.orig +++ gcc/config.gcc -@@ -1393,12 +1393,16 @@ +@@ -1399,12 +1399,16 @@ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h ${fbsd_tm_file} i386/x86-64.h i386/freebsd.h i386/freebsd64.h" ;; i[34567]86-*-netbsdelf*) @@ -451,7 +273,7 @@ tm_file="i386/i386.h i386/unix.h i386/bsd.h i386/gas.h i386/gstabs.h openbsd-oldgas.h openbsd.h i386/openbsd.h" --- gcc/configure.orig +++ gcc/configure -@@ -27806,6 +27806,13 @@ +@@ -27961,6 +27961,13 @@ gcc_cv_target_dl_iterate_phdr=no fi ;; @@ -527,9 +349,34 @@ && defined(__OpenBSD__) # define ElfW(type) Elf_##type # define USE_PT_GNU_EH_FRAME +--- libgcc/config.host.orig ++++ libgcc/config.host +@@ -240,7 +240,8 @@ + extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o" + ;; + *-*-netbsd*) +- tmake_file="$tmake_file t-crtstuff-pic t-libgcc-pic t-slibgcc t-slibgcc-gld t-slibgcc-elf-ver" ++ tmake_file="$tmake_file t-crtstuff-pic t-libgcc-pic t-eh-dw2-dip" ++ tmake_file="$tmake_file t-slibgcc t-slibgcc-gld t-slibgcc-elf-ver" + # NetBSD 1.7 and later are set up to use GCC's crtstuff for + # ELF configurations. We will clear extra_parts in the + # a.out configurations. +@@ -579,9 +580,12 @@ + md_unwind_header=i386/freebsd-unwind.h + ;; + i[34567]86-*-netbsdelf*) ++ tmake_file="${tmake_file} i386/t-crtstuff" ++ md_unwind_header=i386/netbsd-unwind.h + ;; + x86_64-*-netbsd*) + tmake_file="${tmake_file} i386/t-crtstuff" ++ md_unwind_header=i386/netbsd-unwind.h + ;; + i[34567]86-*-openbsd2.*|i[34567]86-*openbsd3.[0123]) + ;; --- gcc/Makefile.in.orig +++ gcc/Makefile.in -@@ -1156,7 +1156,6 @@ +@@ -1163,7 +1163,6 @@ insn-emit.o \ insn-extract.o \ insn-latencytab.o \ @@ -537,7 +384,7 @@ insn-opinit.o \ insn-output.o \ insn-peep.o \ -@@ -1511,6 +1510,7 @@ +@@ -1518,6 +1517,7 @@ $(OBJS-libcommon-target) @TREEBROWSER@ main.o c-family/cppspec.o \ $(COLLECT2_OBJS) $(EXTRA_GCC_OBJS) $(GCOV_OBJS) $(GCOV_DUMP_OBJS) \ $(GCOV_TOOL_OBJS) $(GENGTYPE_OBJS) gcc-ar.o gcc-nm.o gcc-ranlib.o \ @@ -545,7 +392,7 @@ lto-wrapper.o collect-utils.o # This lists all host object files, whether they are included in this -@@ -1518,6 +1518,11 @@ +@@ -1525,6 +1525,11 @@ ALL_HOST_OBJS = $(ALL_HOST_FRONTEND_OBJS) $(ALL_HOST_BACKEND_OBJS) BACKEND = libbackend.a main.o @TREEBROWSER@ libcommon-target.a libcommon.a \ @@ -557,7 +404,7 @@ $(CPPLIB) $(LIBDECNUMBER) # This is defined to "yes" if Tree checking is enabled, which roughly means -@@ -2164,6 +2169,7 @@ +@@ -2171,6 +2176,7 @@ insn-modes.c: s-modes; @true insn-modes.h: s-modes-h; @true @@ -565,7 +412,7 @@ min-insn-modes.c: s-modes-m; @true s-modes: build/genmodes$(build_exeext) -@@ -2181,6 +2187,12 @@ +@@ -2188,6 +2194,12 @@ $(SHELL) $(srcdir)/../move-if-change tmp-min-modes.c min-insn-modes.c $(STAMP) s-modes-m @@ -578,7 +425,7 @@ insn-preds.c: s-preds; @true tm-preds.h: s-preds-h; @true tm-constrs.h: s-constrs-h; @true -@@ -3326,6 +3338,9 @@ +@@ -3333,6 +3345,9 @@ ( cd $(DESTDIR)$(bindir) && \ $(LN) $(GCC_INSTALL_NAME)$(exeext) $(FULL_DRIVER_NAME) ); \ fi; \ @@ -588,35 +435,8 @@ if [ ! -f gcc-cross$(exeext) ] \ && [ "$(GCC_INSTALL_NAME)" != "$(GCC_TARGET_INSTALL_NAME)" ]; then \ rm -f $(DESTDIR)$(bindir)/$(target_noncanonical)-gcc-tmp$(exeext); \ ---- libgcc/config.host.orig -+++ libgcc/config.host -@@ -240,7 +240,8 @@ - extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o" - ;; - *-*-netbsd*) -- tmake_file="$tmake_file t-crtstuff-pic t-libgcc-pic t-slibgcc t-slibgcc-gld t-slibgcc-elf-ver" -+ tmake_file="$tmake_file t-crtstuff-pic t-libgcc-pic t-eh-dw2-dip" -+ tmake_file="$tmake_file t-slibgcc t-slibgcc-gld t-slibgcc-elf-ver" - # NetBSD 1.7 and later are set up to use GCC's crtstuff for - # ELF configurations. We will clear extra_parts in the - # a.out configurations. -@@ -567,14 +568,19 @@ - ;; - i[34567]86-*-freebsd*) - tmake_file="${tmake_file} i386/t-freebsd i386/t-crtstuff" -+ md_unwind_header=i386/freebsd-unwind.h - ;; - x86_64-*-freebsd*) - tmake_file="${tmake_file} i386/t-freebsd i386/t-crtstuff" -+ md_unwind_header=i386/freebsd-unwind.h - ;; - i[34567]86-*-netbsdelf*) -+ tmake_file="${tmake_file} i386/t-crtstuff" -+ md_unwind_header=i386/netbsd-unwind.h - ;; - x86_64-*-netbsd*) - tmake_file="${tmake_file} i386/t-crtstuff" -+ md_unwind_header=i386/netbsd-unwind.h - ;; - i[34567]86-*-openbsd2.*|i[34567]86-*openbsd3.[0123]) - ;; +--- libgcc/config/i386/t-dragonfly.orig ++++ libgcc/config/i386/t-dragonfly +@@ -0,0 +1,2 @@ ++# Required for -fcilkplus support ++SHLIB_MAPFILES += $(srcdir)/config/i386/libgcc-bsd.ver diff --git a/lang/gcc5-aux/files/diff-cxx b/lang/gcc5-aux/files/diff-cxx index 182ef7e811b..a2beecdc514 100644 --- a/lang/gcc5-aux/files/diff-cxx +++ b/lang/gcc5-aux/files/diff-cxx @@ -1,3 +1,112 @@ +--- libstdc++-v3/config/locale/dragonfly/c_locale.cc.orig ++++ libstdc++-v3/config/locale/dragonfly/c_locale.cc +@@ -36,6 +36,7 @@ + #include <locale> + #include <limits> + ++#include <xlocale.h> + #ifdef _GLIBCXX_HAVE_IEEEFP_H + #include <ieeefp.h> + #endif +@@ -206,61 +207,45 @@ + delete [] __sav; + } + +- +- /* DragonFly's implementation of setlocale won't accept something like +- "de_DE". According to nls manpage, the expected format is: +- language[_territory][.codeset][@modifier], but it seems that both +- the _territory and .codeset components are required. +- +- As an attempt to correct for this, we'll tack on ".UTF-8" if +- a period is not detected in the locale string. +- +- There are no locales with modifiers on DragonFly so if found, they +- will just be stripped off silently. e.g "de_DE@euro" will be reduced +- to "de_DE". The UTF-8 default would be added after that. +- */ +- + void + locale::facet::_S_create_c_locale(__c_locale& __cloc, const char* __s, +- __c_locale) ++ __c_locale __old) + { +- const size_t size__s = (__s == NULL) ? 1 : strlen (__s); +- const char UTF8[] = ".UTF-8"; +- char localspec[size__s + 6 + 1]; +- +- if (__s == NULL) { +- localspec[0] = '\0'; +- } else { +- strcpy (localspec, __s); +- char * pch = strchr (localspec, '@'); +- if (pch != NULL) +- *pch = 0; +- +- if ( (strchr (__s, '.') == NULL) +- && (strcmp (__s, "C") != 0) +- && (strcmp (__s, "POSIX") != 0)) +- strncat (localspec, UTF8, 6); +- } +- +- const char * result = std::setlocale(LC_ALL, localspec); ++ __cloc = (__c_locale)newlocale(LC_ALL_MASK, __s, (locale_t)__old); + +- if ((strcmp(result, "C") != 0) && (strcmp (result, localspec) != 0)) ++ if (!__cloc) + __throw_runtime_error(__N("locale::facet::_S_create_c_locale " + "name not valid")); +- __cloc = 0; + } + + void + locale::facet::_S_destroy_c_locale(__c_locale& __cloc) +- { __cloc = 0; } ++ { ++ if (__cloc && _S_get_c_locale() != __cloc) ++ freelocale((locale_t)__cloc); ++ } + + __c_locale +- locale::facet::_S_clone_c_locale(__c_locale&) throw() +- { return __c_locale(); } ++ locale::facet::_S_clone_c_locale(__c_locale& __cloc) throw() ++ { return (__c_locale)duplocale((locale_t)__cloc); } + + __c_locale +- locale::facet::_S_lc_ctype_c_locale(__c_locale, const char*) +- { return __c_locale(); } ++ locale::facet::_S_lc_ctype_c_locale(__c_locale __cloc, const char* __s) ++ { ++ __c_locale __dup = (__c_locale)duplocale((locale_t)__cloc); ++ if (__dup == __c_locale(0)) ++ __throw_runtime_error(__N("locale::facet::_S_lc_ctype_c_locale " ++ "duplocale error")); ++ __c_locale __changed = (__c_locale)newlocale(LC_CTYPE_MASK, __s, ++ (locale_t)__dup); ++ if (__changed == __c_locale(0)) ++ { ++ freelocale((locale_t)__dup); ++ __throw_runtime_error(__N("locale::facet::_S_lc_ctype_c_locale " ++ "newlocale error")); ++ } ++ return __changed; ++ } + + _GLIBCXX_END_NAMESPACE_VERSION + } // namespace +--- libstdc++-v3/config/os/bsd/dragonfly/os_defines.h.orig ++++ libstdc++-v3/config/os/bsd/dragonfly/os_defines.h +@@ -29,4 +29,9 @@ + // System-specific #define, typedefs, corrections, etc, go here. This + // file will come before all others. + ++#define _GLIBCXX_USE_C99_CHECK 1 ++#define _GLIBCXX_USE_C99_DYNAMIC (!(__ISO_C_VISIBLE >= 1999)) ++#define _GLIBCXX_USE_C99_LONG_LONG_CHECK 1 ++#define _GLIBCXX_USE_C99_LONG_LONG_DYNAMIC (_GLIBCXX_USE_C99_DYNAMIC || !defined __LONG_LONG_SUPPORTED) ++ + #endif --- libstdc++-v3/config/os/bsd/netbsd/ctype_base.h.orig +++ libstdc++-v3/config/os/bsd/netbsd/ctype_base.h @@ -43,9 +43,22 @@ @@ -100,7 +209,7 @@ --- libstdc++-v3/configure.host.orig +++ libstdc++-v3/configure.host -@@ -268,6 +268,9 @@ +@@ -270,6 +270,9 @@ dragonfly*) os_include_dir="os/bsd/dragonfly" ;; diff --git a/lang/gcc5-aux/files/diff-cxx-testsuite b/lang/gcc5-aux/files/diff-cxx-testsuite index 4f7388a9a66..228965b8d35 100644 --- a/lang/gcc5-aux/files/diff-cxx-testsuite +++ b/lang/gcc5-aux/files/diff-cxx-testsuite @@ -1,6 +1,6 @@ --- libstdc++-v3/testsuite/lib/libstdc++.exp.orig +++ libstdc++-v3/testsuite/lib/libstdc++.exp -@@ -898,17 +898,18 @@ +@@ -902,17 +902,18 @@ set f [open $src "w"] puts $f "#include <locale>" puts $f "#include <cstdio>" diff --git a/lang/gcc5-aux/files/diff-fortran b/lang/gcc5-aux/files/diff-fortran index 269950890e9..be542e9b0cb 100644 --- a/lang/gcc5-aux/files/diff-fortran +++ b/lang/gcc5-aux/files/diff-fortran @@ -11,7 +11,7 @@ ;; --- libgfortran/configure.orig +++ libgfortran/configure -@@ -26447,7 +26447,7 @@ +@@ -26456,7 +26456,7 @@ fi case "$host" in @@ -22,7 +22,7 @@ --- gcc/fortran/f95-lang.c.orig +++ gcc/fortran/f95-lang.c -@@ -776,10 +776,17 @@ +@@ -777,10 +777,17 @@ gfc_define_builtin ("__builtin_cabsl", func_clongdouble_longdouble, BUILT_IN_CABSL, "cabsl", ATTR_CONST_NOTHROW_LEAF_LIST); |