Module Name:    src
Committed By:   mrg
Date:           Sun Jul 30 06:15:17 UTC 2023

Modified Files:
        src/external/gpl3/gcc/dist/gcc: cfgexpand.cc cppbuiltin.cc
            cppdefault.cc dse.cc expr.cc file-prefix-map.cc gcc.cc genemit.cc
            genrecog.cc ggc-common.cc ipa-inline.cc opts-global.cc opts.cc
            reload.cc targhooks.cc tree-cfg.cc tree-ssa-ccp.cc
        src/external/gpl3/gcc/dist/gcc/c-family: c-cppbuiltin.cc c-format.cc
            c-opts.cc
        src/external/gpl3/gcc/dist/gcc/common/config/aarch64: aarch64-common.cc
        src/external/gpl3/gcc/dist/gcc/common/config/arm: arm-common.cc
        src/external/gpl3/gcc/dist/gcc/config: host-darwin.cc
        src/external/gpl3/gcc/dist/gcc/config/aarch64: aarch64-builtins.cc
            driver-aarch64.cc
        src/external/gpl3/gcc/dist/gcc/config/i386: i386.h netbsd-elf.h
            netbsd64.h
        src/external/gpl3/gcc/dist/gcc/config/mips: mips.cc
        src/external/gpl3/gcc/dist/gcc/config/pa: pa.cc
        src/external/gpl3/gcc/dist/gcc/config/rs6000: rs6000-logue.cc rs6000.cc
        src/external/gpl3/gcc/dist/libcpp: files.cc lex.cc macro.cc

Log Message:
GCC 12.3.0: merge our old changes into the renamed .cc files.


To generate a diff of this commit:
cvs rdiff -u -r1.1.1.1 -r1.2 src/external/gpl3/gcc/dist/gcc/cfgexpand.cc \
    src/external/gpl3/gcc/dist/gcc/cppbuiltin.cc \
    src/external/gpl3/gcc/dist/gcc/cppdefault.cc \
    src/external/gpl3/gcc/dist/gcc/dse.cc \
    src/external/gpl3/gcc/dist/gcc/expr.cc \
    src/external/gpl3/gcc/dist/gcc/file-prefix-map.cc \
    src/external/gpl3/gcc/dist/gcc/gcc.cc \
    src/external/gpl3/gcc/dist/gcc/genemit.cc \
    src/external/gpl3/gcc/dist/gcc/genrecog.cc \
    src/external/gpl3/gcc/dist/gcc/ggc-common.cc \
    src/external/gpl3/gcc/dist/gcc/ipa-inline.cc \
    src/external/gpl3/gcc/dist/gcc/opts-global.cc \
    src/external/gpl3/gcc/dist/gcc/opts.cc \
    src/external/gpl3/gcc/dist/gcc/reload.cc \
    src/external/gpl3/gcc/dist/gcc/targhooks.cc \
    src/external/gpl3/gcc/dist/gcc/tree-cfg.cc \
    src/external/gpl3/gcc/dist/gcc/tree-ssa-ccp.cc
cvs rdiff -u -r1.1.1.1 -r1.2 \
    src/external/gpl3/gcc/dist/gcc/c-family/c-cppbuiltin.cc \
    src/external/gpl3/gcc/dist/gcc/c-family/c-format.cc \
    src/external/gpl3/gcc/dist/gcc/c-family/c-opts.cc
cvs rdiff -u -r1.1.1.1 -r1.2 \
    src/external/gpl3/gcc/dist/gcc/common/config/aarch64/aarch64-common.cc
cvs rdiff -u -r1.1.1.1 -r1.2 \
    src/external/gpl3/gcc/dist/gcc/common/config/arm/arm-common.cc
cvs rdiff -u -r1.1.1.1 -r1.2 \
    src/external/gpl3/gcc/dist/gcc/config/host-darwin.cc
cvs rdiff -u -r1.1.1.1 -r1.2 \
    src/external/gpl3/gcc/dist/gcc/config/aarch64/aarch64-builtins.cc \
    src/external/gpl3/gcc/dist/gcc/config/aarch64/driver-aarch64.cc
cvs rdiff -u -r1.16 -r1.17 src/external/gpl3/gcc/dist/gcc/config/i386/i386.h \
    src/external/gpl3/gcc/dist/gcc/config/i386/netbsd-elf.h \
    src/external/gpl3/gcc/dist/gcc/config/i386/netbsd64.h
cvs rdiff -u -r1.1.1.1 -r1.2 \
    src/external/gpl3/gcc/dist/gcc/config/mips/mips.cc
cvs rdiff -u -r1.1.1.1 -r1.2 src/external/gpl3/gcc/dist/gcc/config/pa/pa.cc
cvs rdiff -u -r1.1.1.1 -r1.2 \
    src/external/gpl3/gcc/dist/gcc/config/rs6000/rs6000-logue.cc \
    src/external/gpl3/gcc/dist/gcc/config/rs6000/rs6000.cc
cvs rdiff -u -r1.1.1.1 -r1.2 src/external/gpl3/gcc/dist/libcpp/files.cc \
    src/external/gpl3/gcc/dist/libcpp/lex.cc \
    src/external/gpl3/gcc/dist/libcpp/macro.cc

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/external/gpl3/gcc/dist/gcc/cfgexpand.cc
diff -u src/external/gpl3/gcc/dist/gcc/cfgexpand.cc:1.1.1.1 src/external/gpl3/gcc/dist/gcc/cfgexpand.cc:1.2
--- src/external/gpl3/gcc/dist/gcc/cfgexpand.cc:1.1.1.1	Sun Jul 30 05:20:50 2023
+++ src/external/gpl3/gcc/dist/gcc/cfgexpand.cc	Sun Jul 30 06:15:16 2023
@@ -1909,7 +1909,9 @@ stack_protect_classify_type (tree type)
 	  else
 	    len = tree_to_uhwi (TYPE_SIZE_UNIT (type));
 
-	  if (len < max)
+	  if (len == 0)
+	    ret = SPCT_HAS_ARRAY;
+	  else if (len < max)
 	    ret = SPCT_HAS_SMALL_CHAR_ARRAY | SPCT_HAS_ARRAY;
 	  else
 	    ret = SPCT_HAS_LARGE_CHAR_ARRAY | SPCT_HAS_ARRAY;
Index: src/external/gpl3/gcc/dist/gcc/cppbuiltin.cc
diff -u src/external/gpl3/gcc/dist/gcc/cppbuiltin.cc:1.1.1.1 src/external/gpl3/gcc/dist/gcc/cppbuiltin.cc:1.2
--- src/external/gpl3/gcc/dist/gcc/cppbuiltin.cc:1.1.1.1	Sun Jul 30 05:20:45 2023
+++ src/external/gpl3/gcc/dist/gcc/cppbuiltin.cc	Sun Jul 30 06:15:16 2023
@@ -96,6 +96,12 @@ define_builtin_macros_for_compilation_fl
   if (flag_sanitize & SANITIZE_HWADDRESS)
     cpp_define (pfile, "__SANITIZE_HWADDRESS__");
 
+  if (flag_sanitize & SANITIZE_UNDEFINED)
+    cpp_define (pfile, "__SANITIZE_UNDEFINED__");
+
+  if (flag_sanitize & SANITIZE_LEAK)
+    cpp_define (pfile, "__SANITIZE_LEAK__");
+
   if (flag_sanitize & SANITIZE_THREAD)
     cpp_define (pfile, "__SANITIZE_THREAD__");
 
Index: src/external/gpl3/gcc/dist/gcc/cppdefault.cc
diff -u src/external/gpl3/gcc/dist/gcc/cppdefault.cc:1.1.1.1 src/external/gpl3/gcc/dist/gcc/cppdefault.cc:1.2
--- src/external/gpl3/gcc/dist/gcc/cppdefault.cc:1.1.1.1	Sun Jul 30 05:20:49 2023
+++ src/external/gpl3/gcc/dist/gcc/cppdefault.cc	Sun Jul 30 06:15:16 2023
@@ -61,8 +61,12 @@ const struct default_include cpp_include
       GPLUSPLUS_LIBCXX_INCLUDE_DIR_ADD_SYSROOT, 0 },
 #endif
 #ifdef GCC_INCLUDE_DIR
+#ifndef GCC_INCLUDE_DIR_ADD_SYSROOT
+#define GCC_INCLUDE_DIR_ADD_SYSROOT 0
+#endif
     /* This is the dir for gcc's private headers.  */
-    { GCC_INCLUDE_DIR, "GCC", 0, 0, 0, 0 },
+    { GCC_INCLUDE_DIR, "GCC", 0, 0,
+      GCC_INCLUDE_DIR_ADD_SYSROOT, 0 },
 #endif
 #ifdef LOCAL_INCLUDE_DIR
     /* /usr/local/include comes before the fixincluded header files.  */
Index: src/external/gpl3/gcc/dist/gcc/dse.cc
diff -u src/external/gpl3/gcc/dist/gcc/dse.cc:1.1.1.1 src/external/gpl3/gcc/dist/gcc/dse.cc:1.2
--- src/external/gpl3/gcc/dist/gcc/dse.cc:1.1.1.1	Sun Jul 30 05:20:54 2023
+++ src/external/gpl3/gcc/dist/gcc/dse.cc	Sun Jul 30 06:15:16 2023
@@ -301,6 +301,11 @@ static unsigned HOST_WIDE_INT
 lowpart_bitmask (int n)
 {
   unsigned HOST_WIDE_INT mask = HOST_WIDE_INT_M1U;
+#if 1 // XXXMRG
+  gcc_assert(n >= 0 && n <= HOST_BITS_PER_WIDE_INT);
+  if (n == 0)
+    return 0;
+#endif
   return mask >> (HOST_BITS_PER_WIDE_INT - n);
 }
 
Index: src/external/gpl3/gcc/dist/gcc/expr.cc
diff -u src/external/gpl3/gcc/dist/gcc/expr.cc:1.1.1.1 src/external/gpl3/gcc/dist/gcc/expr.cc:1.2
--- src/external/gpl3/gcc/dist/gcc/expr.cc:1.1.1.1	Sun Jul 30 05:20:46 2023
+++ src/external/gpl3/gcc/dist/gcc/expr.cc	Sun Jul 30 06:15:16 2023
@@ -4688,7 +4688,8 @@ emit_push_insn (rtx x, machine_mode mode
   int overlapping = 0;
 
   if (mode == BLKmode
-      || (STRICT_ALIGNMENT && align < GET_MODE_ALIGNMENT (mode)))
+      || (STRICT_ALIGNMENT && align < GET_MODE_ALIGNMENT (mode)
+	  && type != NULL_TREE))
     {
       /* Copy a block into the stack, entirely or partially.  */
 
Index: src/external/gpl3/gcc/dist/gcc/file-prefix-map.cc
diff -u src/external/gpl3/gcc/dist/gcc/file-prefix-map.cc:1.1.1.1 src/external/gpl3/gcc/dist/gcc/file-prefix-map.cc:1.2
--- src/external/gpl3/gcc/dist/gcc/file-prefix-map.cc:1.1.1.1	Sun Jul 30 05:20:54 2023
+++ src/external/gpl3/gcc/dist/gcc/file-prefix-map.cc	Sun Jul 30 06:15:16 2023
@@ -40,7 +40,8 @@ static void
 add_prefix_map (file_prefix_map *&maps, const char *arg, const char *opt)
 {
   file_prefix_map *map;
-  const char *p;
+  const char *p, *old;
+  size_t oldlen;
 
   /* Note: looking for the last '='. The thinking is we can control the paths
      inside our projects but not where the users build them.  */
@@ -50,9 +51,28 @@ add_prefix_map (file_prefix_map *&maps, 
       error ("invalid argument %qs to %qs", arg, opt);
       return;
     }
+  if (*arg == '$')
+    {
+      char *env = xstrndup (arg + 1, p - (arg + 1));
+      old = getenv(env);
+      if (!old)
+	{
+	  warning (0, "environment variable %qs not set in argument to "
+		   "%s", env, opt);
+	  free(env);
+	  return;
+	}
+      oldlen = strlen(old);
+      free(env);
+    }
+  else
+    {
+      old = xstrndup (arg, p - arg);
+      oldlen = p - arg;
+    }
   map = XNEW (file_prefix_map);
-  map->old_prefix = xstrndup (arg, p - arg);
-  map->old_len = p - arg;
+  map->old_prefix = old;
+  map->old_len = oldlen;
   p++;
   map->new_prefix = xstrdup (p);
   map->new_len = strlen (p);
@@ -132,6 +152,8 @@ remap_macro_filename (const char *filena
   return remap_filename (macro_prefix_maps, filename);
 }
 
+/* Original GCC version disabled. The NetBSD version handles regex */
+#if 0
 /* Remap using -fdebug-prefix-map.  Return the GC-allocated new name
    corresponding to FILENAME or FILENAME if no remapping was performed.  */
 const char *
@@ -139,6 +161,118 @@ remap_debug_filename (const char *filena
 {
   return remap_filename (debug_prefix_maps, filename);
 }
+#endif
+
+/*****
+ ***** The following code is a NetBSD extension that allows regex and
+ ***** \[0-9] substitutition arguments.
+ *****/
+
+/* Perform user-specified mapping of debug filename prefixes.  Return
+   the new name corresponding to FILENAME.  */
+
+static const char *
+remap_debug_prefix_filename (const char *filename)
+{
+  file_prefix_map *map;
+  char *s;
+  const char *name;
+  size_t name_len;
+
+  for (map = debug_prefix_maps; map; map = map->next)
+    if (filename_ncmp (filename, map->old_prefix, map->old_len) == 0)
+      break;
+  if (!map)
+    return filename;
+  name = filename + map->old_len;
+  name_len = strlen (name) + 1;
+  s = (char *) alloca (name_len + map->new_len);
+  memcpy (s, map->new_prefix, map->new_len);
+  memcpy (s + map->new_len, name, name_len);
+  return ggc_strdup (s);
+}
+
+#include <regex.h>
+
+typedef struct debug_regex_map
+{
+  regex_t re;
+  const char *sub;
+  struct debug_regex_map *next;
+} debug_regex_map;
+
+/* Linked list of such structures.  */
+debug_regex_map *debug_regex_maps;
+
+
+/* Record a debug file regex mapping.  ARG is the argument to
+   -fdebug-regex-map and must be of the form OLD=NEW.  */
+
+void
+add_debug_regex_map (const char *arg)
+{
+  debug_regex_map *map;
+  const char *p;
+  char *old;
+  char buf[1024];
+  regex_t re;
+  int e;
+
+  p = strchr (arg, '=');
+  if (!p)
+    {
+      error ("invalid argument %qs to -fdebug-regex-map", arg);
+      return;
+    }
+  
+  old = xstrndup (arg, p - arg);
+  if ((e = regcomp(&re, old, REG_EXTENDED)) != 0)
+    {
+      regerror(e, &re, buf, sizeof(buf));
+      warning (0, "regular expression compilation for %qs in argument to "
+	       "-fdebug-regex-map failed: %qs", old, buf);
+      free(old);
+      return;
+    }
+  free(old);
+
+  map = XNEW (debug_regex_map);
+  map->re = re;
+  p++;
+  map->sub = xstrdup (p);
+  map->next = debug_regex_maps;
+  debug_regex_maps = map;
+}
+
+extern "C" ssize_t regasub(char **, const char *,
+  const regmatch_t *rm, const char *);
+
+/* Perform user-specified mapping of debug filename regular expressions.  Return
+   the new name corresponding to FILENAME.  */
+
+static const char *
+remap_debug_regex_filename (const char *filename)
+{
+  debug_regex_map *map;
+  char *s;
+  regmatch_t rm[10];
+
+  for (map = debug_regex_maps; map; map = map->next)
+    if (regexec (&map->re, filename, 10, rm, 0) == 0
+       && regasub (&s, map->sub, rm, filename) >= 0)
+      {
+	 const char *name = ggc_strdup(s);
+	 free(s);
+	 return name;
+      }
+  return filename;
+}
+
+const char *
+remap_debug_filename (const char *filename)
+{
+   return remap_debug_regex_filename (remap_debug_prefix_filename (filename));
+}
 
 /* Remap using -fprofile-prefix-map.  Return the GC-allocated new name
    corresponding to FILENAME or FILENAME if no remapping was performed.  */
Index: src/external/gpl3/gcc/dist/gcc/gcc.cc
diff -u src/external/gpl3/gcc/dist/gcc/gcc.cc:1.1.1.1 src/external/gpl3/gcc/dist/gcc/gcc.cc:1.2
--- src/external/gpl3/gcc/dist/gcc/gcc.cc:1.1.1.1	Sun Jul 30 05:20:54 2023
+++ src/external/gpl3/gcc/dist/gcc/gcc.cc	Sun Jul 30 06:15:16 2023
@@ -1097,23 +1097,23 @@ proper position among the other output f
 /* Linker command line options for -fsanitize= early on the command line.  */
 #ifndef SANITIZER_EARLY_SPEC
 #define SANITIZER_EARLY_SPEC "\
-%{!nostdlib:%{!r:%{!nodefaultlibs:%{%:sanitize(address):" LIBASAN_EARLY_SPEC "} \
+%{!shared:%{!nostdlib:%{!r:%{!nodefaultlibs:%{%:sanitize(address):" LIBASAN_EARLY_SPEC "} \
     %{%:sanitize(hwaddress):" LIBHWASAN_EARLY_SPEC "} \
     %{%:sanitize(thread):" LIBTSAN_EARLY_SPEC "} \
-    %{%:sanitize(leak):" LIBLSAN_EARLY_SPEC "}}}}"
+    %{%:sanitize(leak):" LIBLSAN_EARLY_SPEC "}}}}}"
 #endif
 
 /* Linker command line options for -fsanitize= late on the command line.  */
 #ifndef SANITIZER_SPEC
 #define SANITIZER_SPEC "\
-%{!nostdlib:%{!r:%{!nodefaultlibs:%{%:sanitize(address):" LIBASAN_SPEC "\
+%{!shared:%{!nostdlib:%{!r:%{!nodefaultlibs:%{%:sanitize(address):" LIBASAN_SPEC "\
     %{static:%ecannot specify -static with -fsanitize=address}}\
     %{%:sanitize(hwaddress):" LIBHWASAN_SPEC "\
 	%{static:%ecannot specify -static with -fsanitize=hwaddress}}\
     %{%:sanitize(thread):" LIBTSAN_SPEC "\
     %{static:%ecannot specify -static with -fsanitize=thread}}\
     %{%:sanitize(undefined):" LIBUBSAN_SPEC "}\
-    %{%:sanitize(leak):" LIBLSAN_SPEC "}}}}"
+    %{%:sanitize(leak):" LIBLSAN_SPEC "}}}}}"
 #endif
 
 #ifndef POST_LINK_SPEC
@@ -4737,6 +4737,10 @@ process_command (unsigned int decoded_op
   /* FIXME: make_relative_prefix doesn't yet work for VMS.  */
   if (!gcc_exec_prefix)
     {
+#ifdef NETBSD_NATIVE
+      add_prefix (&exec_prefixes, standard_libexec_prefix, "GCC",
+		  PREFIX_PRIORITY_LAST, 0, 0);
+#else
       gcc_exec_prefix = get_relative_prefix (decoded_options[0].arg,
 					     standard_bindir_prefix,
 					     standard_exec_prefix);
@@ -4745,6 +4749,7 @@ process_command (unsigned int decoded_op
 					     standard_libexec_prefix);
       if (gcc_exec_prefix)
 	xputenv (concat ("GCC_EXEC_PREFIX=", gcc_exec_prefix, NULL));
+#endif
     }
   else
     {
@@ -8354,6 +8359,7 @@ driver::set_up_specs () const
   spec_machine_suffix = just_machine_suffix;
 #endif
 
+#ifndef NETBSD_NATIVE
   /* We need to check standard_exec_prefix/spec_machine_suffix/specs
      for any override of as, ld and libraries.  */
   specs_file = (char *) alloca (strlen (standard_exec_prefix)
@@ -8363,6 +8369,7 @@ driver::set_up_specs () const
   strcat (specs_file, "specs");
   if (access (specs_file, R_OK) == 0)
     read_specs (specs_file, true, false);
+#endif
 
   /* Process any configure-time defaults specified for the command line
      options, via OPTION_DEFAULT_SPECS.  */
@@ -8458,14 +8465,17 @@ driver::set_up_specs () const
 			      PREFIX_PRIORITY_LAST, 0, 1);
       else if (*cross_compile == '0')
 	{
+#if !defined(NETBSD_NATIVE) && !defined(NETBSD_TOOLS)
 	  add_prefix (&startfile_prefixes,
 		      concat (gcc_exec_prefix
 			      ? gcc_exec_prefix : standard_exec_prefix,
 			      machine_suffix,
 			      standard_startfile_prefix, NULL),
 		      NULL, PREFIX_PRIORITY_LAST, 0, 1);
+#endif /* NETBSD_NATIVE */
 	}
 
+#if !defined(NETBSD_NATIVE) && !defined(NETBSD_TOOLS)
       /* Sysrooted prefixes are relocated because target_system_root is
 	 also relocated by gcc_exec_prefix.  */
       if (*standard_startfile_prefix_1)
@@ -8476,6 +8486,7 @@ driver::set_up_specs () const
 	add_sysrooted_prefix (&startfile_prefixes,
 			      standard_startfile_prefix_2, "BINUTILS",
 			      PREFIX_PRIORITY_LAST, 0, 1);
+#endif /* NETBSD_NATIVE */
     }
 
   /* Process any user specified specs in the order given on the command
Index: src/external/gpl3/gcc/dist/gcc/genemit.cc
diff -u src/external/gpl3/gcc/dist/gcc/genemit.cc:1.1.1.1 src/external/gpl3/gcc/dist/gcc/genemit.cc:1.2
--- src/external/gpl3/gcc/dist/gcc/genemit.cc:1.1.1.1	Sun Jul 30 05:20:50 2023
+++ src/external/gpl3/gcc/dist/gcc/genemit.cc	Sun Jul 30 06:15:16 2023
@@ -186,7 +186,9 @@ gen_exp (rtx x, enum rtx_code subroutine
       else
 	{
 	  printf ("GEN_INT (");
-	  printf (HOST_WIDE_INT_PRINT_DEC_C, INTVAL (x));
+	  printf ("HOST_WIDE_INT_C (");
+	  printf (HOST_WIDE_INT_PRINT_DEC, INTVAL (x));
+	  printf (")");
 	  printf (")");
 	}
       return;
Index: src/external/gpl3/gcc/dist/gcc/genrecog.cc
diff -u src/external/gpl3/gcc/dist/gcc/genrecog.cc:1.1.1.1 src/external/gpl3/gcc/dist/gcc/genrecog.cc:1.2
--- src/external/gpl3/gcc/dist/gcc/genrecog.cc:1.1.1.1	Sun Jul 30 05:20:51 2023
+++ src/external/gpl3/gcc/dist/gcc/genrecog.cc	Sun Jul 30 06:15:16 2023
@@ -4526,9 +4526,9 @@ print_host_wide_int (uint64_t val)
 {
   uint64_t min = uint64_t (1) << (HOST_BITS_PER_WIDE_INT - 1);
   if (val == min)
-    printf ("(" HOST_WIDE_INT_PRINT_DEC_C " - 1)", val + 1);
+    printf ("( HOST_WIDE_INT_C (" HOST_WIDE_INT_PRINT_DEC ") - 1)", val + 1);
   else
-    printf (HOST_WIDE_INT_PRINT_DEC_C, val);
+    printf (" HOST_WIDE_INT_C (" HOST_WIDE_INT_PRINT_DEC ")", val);
 }
 
 /* Print the C expression for actual parameter PARAM.  */
Index: src/external/gpl3/gcc/dist/gcc/ggc-common.cc
diff -u src/external/gpl3/gcc/dist/gcc/ggc-common.cc:1.1.1.1 src/external/gpl3/gcc/dist/gcc/ggc-common.cc:1.2
--- src/external/gpl3/gcc/dist/gcc/ggc-common.cc:1.1.1.1	Sun Jul 30 05:20:47 2023
+++ src/external/gpl3/gcc/dist/gcc/ggc-common.cc	Sun Jul 30 06:15:16 2023
@@ -726,6 +726,8 @@ gt_pch_restore (FILE *f)
   size_t i;
   struct mmap_info mmi;
   int result;
+  struct line_maps * old_line_table = line_table;
+  location_t old_input_loc = input_location;
 
   /* We are about to reload the line maps along with the rest of the PCH
      data, which means that the (loaded) ones cannot be guaranteed to be
@@ -745,7 +747,11 @@ gt_pch_restore (FILE *f)
   for (rt = gt_pch_scalar_rtab; *rt; rt++)
     for (rti = *rt; rti->base != NULL; rti++)
       if (fread (rti->base, rti->stride, 1, f) != 1)
-	fatal_error (input_location, "cannot read PCH file: %m");
+	{
+          line_table = old_line_table;
+	  input_location = old_input_loc;
+	  fatal_error (input_location, "cannot read PCH file: %m");
+        }
 
   /* Read in all the global pointers, in 6 easy loops.  */
   bool error_reading_pointers = false;
@@ -764,7 +770,11 @@ gt_pch_restore (FILE *f)
     fatal_error (input_location, "cannot read PCH file: %m");
 
   if (fread (&mmi, sizeof (mmi), 1, f) != 1)
-    fatal_error (input_location, "cannot read PCH file: %m");
+    {
+      line_table = old_line_table;
+      input_location = old_input_loc;
+      fatal_error (input_location, "cannot read PCH file: %m");
+    }
 
   void *orig_preferred_base = mmi.preferred_base;
   result = host_hooks.gt_pch_use_address (mmi.preferred_base, mmi.size,
@@ -774,6 +784,8 @@ gt_pch_restore (FILE *f)
      address needed.  */
   if (result < 0)
     {
+      line_table = old_line_table;
+      input_location = old_input_loc;
       sorry_at (input_location, "PCH allocation failure");
       /* There is no point in continuing from here, we will only end up
 	 with a crashed (most likely hanging) compiler.  */
@@ -787,14 +799,26 @@ gt_pch_restore (FILE *f)
     {
       if (fseek (f, mmi.offset, SEEK_SET) != 0
 	  || fread (mmi.preferred_base, mmi.size, 1, f) != 1)
-	fatal_error (input_location, "cannot read PCH file: %m");
+	{
+          line_table = old_line_table;
+          input_location = old_input_loc;
+	  fatal_error (input_location, "cannot read PCH file: %m");
+	}
     }
   else if (fseek (f, mmi.offset + mmi.size, SEEK_SET) != 0)
-    fatal_error (input_location, "cannot read PCH file: %m");
+    {
+      line_table = old_line_table;
+      input_location = old_input_loc;
+      fatal_error (input_location, "cannot read PCH file: %m");
+    }
 
   size_t reloc_addrs_size;
   if (fread (&reloc_addrs_size, sizeof (reloc_addrs_size), 1, f) != 1)
-    fatal_error (input_location, "cannot read PCH file: %m");
+    {
+      line_table = old_line_table;
+      input_location = old_input_loc;
+      fatal_error (input_location, "cannot read PCH file: %m");
+    }
 
   if (orig_preferred_base != mmi.preferred_base)
     {
@@ -829,7 +853,11 @@ gt_pch_restore (FILE *f)
 	    = MIN (reloc_addrs_size,
 		   (size_t) (4096 - (uleb128_ptr - uleb128_buf)));
 	  if (fread (uleb128_ptr, 1, this_size, f) != this_size)
-	    fatal_error (input_location, "cannot read PCH file: %m");
+	    {
+              line_table = old_line_table;
+              input_location = old_input_loc;
+	      fatal_error (input_location, "cannot read PCH file: %m");
+	    }
 	  unsigned char *uleb128_end = uleb128_ptr + this_size;
 	  if (this_size != reloc_addrs_size)
 	    uleb128_end -= 2 * sizeof (size_t);
@@ -866,7 +894,11 @@ gt_pch_restore (FILE *f)
   unsigned num_callbacks;
   if (fread (&pch_save, sizeof (pch_save), 1, f) != 1
       || fread (&num_callbacks, sizeof (num_callbacks), 1, f) != 1)
-    fatal_error (input_location, "cannot read PCH file: %m");
+    {
+      line_table = old_line_table;
+      input_location = old_input_loc;
+      fatal_error (input_location, "cannot read PCH file: %m");
+    }
   if (pch_save != &gt_pch_save)
     {
       uintptr_t binbias = (uintptr_t) &gt_pch_save - (uintptr_t) pch_save;
@@ -876,7 +908,11 @@ gt_pch_restore (FILE *f)
 	= (uintptr_t) mmi.preferred_base - (uintptr_t) orig_preferred_base;
 
       if (fread (ptrs, sizeof (void *), num_callbacks, f) != num_callbacks)
-	fatal_error (input_location, "cannot read PCH file: %m");
+        {
+          line_table = old_line_table;
+          input_location = old_input_loc;
+	  fatal_error (input_location, "cannot read PCH file: %m");
+	}
       for (i = 0; i < num_callbacks; ++i)
 	{
 	  void *ptr = (void *) ((uintptr_t) ptrs[i] + bias);
Index: src/external/gpl3/gcc/dist/gcc/ipa-inline.cc
diff -u src/external/gpl3/gcc/dist/gcc/ipa-inline.cc:1.1.1.1 src/external/gpl3/gcc/dist/gcc/ipa-inline.cc:1.2
--- src/external/gpl3/gcc/dist/gcc/ipa-inline.cc:1.1.1.1	Sun Jul 30 05:20:56 2023
+++ src/external/gpl3/gcc/dist/gcc/ipa-inline.cc	Sun Jul 30 06:15:16 2023
@@ -2714,7 +2714,11 @@ ipa_inline (void)
      could remove other nodes with flatten attribute.  See PR82801.  */
   struct cgraph_node_hook_list *node_removal_hook_holder = NULL;
   hash_set<struct cgraph_node *> *flatten_removed_nodes = NULL;
-  if (j < nnodes - 2)
+  /*
+   * XXXMRG: added "nnodes > 1" as -O2 (but not -O) warn:
+   *    "assuming signed overflow does not occur"
+   */
+  if (nnodes > 1 && j < nnodes - 2)
     {
       flatten_removed_nodes = new hash_set<struct cgraph_node *>;
       node_removal_hook_holder
Index: src/external/gpl3/gcc/dist/gcc/opts-global.cc
diff -u src/external/gpl3/gcc/dist/gcc/opts-global.cc:1.1.1.1 src/external/gpl3/gcc/dist/gcc/opts-global.cc:1.2
--- src/external/gpl3/gcc/dist/gcc/opts-global.cc:1.1.1.1	Sun Jul 30 05:20:47 2023
+++ src/external/gpl3/gcc/dist/gcc/opts-global.cc	Sun Jul 30 06:15:16 2023
@@ -382,6 +382,10 @@ handle_common_deferred_options (void)
 	  add_debug_prefix_map (opt->arg);
 	  break;
 
+	case OPT_fdebug_regex_map_:
+	  add_debug_regex_map (opt->arg);
+	  break;
+
 	case OPT_ffile_prefix_map_:
 	  add_file_prefix_map (opt->arg);
 	  break;
Index: src/external/gpl3/gcc/dist/gcc/opts.cc
diff -u src/external/gpl3/gcc/dist/gcc/opts.cc:1.1.1.1 src/external/gpl3/gcc/dist/gcc/opts.cc:1.2
--- src/external/gpl3/gcc/dist/gcc/opts.cc:1.1.1.1	Sun Jul 30 05:20:51 2023
+++ src/external/gpl3/gcc/dist/gcc/opts.cc	Sun Jul 30 06:15:16 2023
@@ -2756,6 +2756,10 @@ common_handle_option (struct gcc_options
       /* Deferred.  */
       break;
 
+    case OPT_fdebug_regex_map_:
+      /* Deferred.  */
+      break;
+
     case OPT_fcallgraph_info:
       opts->x_flag_callgraph_info = CALLGRAPH_INFO_NAKED;
       break;
Index: src/external/gpl3/gcc/dist/gcc/reload.cc
diff -u src/external/gpl3/gcc/dist/gcc/reload.cc:1.1.1.1 src/external/gpl3/gcc/dist/gcc/reload.cc:1.2
--- src/external/gpl3/gcc/dist/gcc/reload.cc:1.1.1.1	Sun Jul 30 05:20:56 2023
+++ src/external/gpl3/gcc/dist/gcc/reload.cc	Sun Jul 30 06:15:16 2023
@@ -838,6 +838,7 @@ static bool
 reload_inner_reg_of_subreg (rtx x, machine_mode mode, bool output)
 {
   rtx inner;
+  int regno;
 
   /* Only SUBREGs are problematical.  */
   if (GET_CODE (x) != SUBREG)
@@ -849,10 +850,20 @@ reload_inner_reg_of_subreg (rtx x, machi
   if (CONSTANT_P (inner) || GET_CODE (inner) == PLUS)
     return true;
 
-  /* If INNER is not a hard register, then INNER will not need reloading.  */
-  if (!(REG_P (inner) && HARD_REGISTER_P (inner)))
+  /* If INNER is not a register, then INNER will not need reloading.  */
+  if (!REG_P (inner))
     return false;
 
+  regno = REGNO (inner);
+
+  /* If INNER is not a hard register, then INNER will not need reloading
+     unless it's a mode dependent memory reference.  */
+  if (regno >= FIRST_PSEUDO_REGISTER)
+    return !output
+	   && reg_equiv_mem (regno) != 0
+	   && mode_dependent_address_p (XEXP (reg_equiv_mem (regno), 0),
+					MEM_ADDR_SPACE (reg_equiv_mem (regno)));
+
   /* If INNER is not ok for MODE, then INNER will need reloading.  */
   if (!targetm.hard_regno_mode_ok (subreg_regno (x), mode))
     return true;
@@ -1138,7 +1149,7 @@ push_reload (rtx in, rtx out, rtx *inloc
 
   if (in != 0 && reload_inner_reg_of_subreg (in, inmode, false))
     {
-      if (REG_P (SUBREG_REG (in)))
+      if (REG_P (SUBREG_REG (in)) && HARD_REGISTER_P (SUBREG_REG (in)))
 	subreg_in_class
 	  = find_valid_class (inmode, GET_MODE (SUBREG_REG (in)),
 			      subreg_regno_offset (REGNO (SUBREG_REG (in)),
@@ -1146,8 +1157,13 @@ push_reload (rtx in, rtx out, rtx *inloc
 						   SUBREG_BYTE (in),
 						   GET_MODE (in)),
 			      REGNO (SUBREG_REG (in)));
+#if 1 // XXXMRG
+      else if (REG_P (SUBREG_REG (in))
+               || GET_CODE (SUBREG_REG (in)) == SYMBOL_REF)
+#else
       else if (CONSTANT_P (SUBREG_REG (in))
                || GET_CODE (SUBREG_REG (in)) == PLUS)
+#endif
 	subreg_in_class = find_valid_class_1 (inmode,
 					      GET_MODE (SUBREG_REG (in)),
 					      rclass);
Index: src/external/gpl3/gcc/dist/gcc/targhooks.cc
diff -u src/external/gpl3/gcc/dist/gcc/targhooks.cc:1.1.1.1 src/external/gpl3/gcc/dist/gcc/targhooks.cc:1.2
--- src/external/gpl3/gcc/dist/gcc/targhooks.cc:1.1.1.1	Sun Jul 30 05:20:56 2023
+++ src/external/gpl3/gcc/dist/gcc/targhooks.cc	Sun Jul 30 06:15:16 2023
@@ -961,7 +961,17 @@ default_hidden_stack_protect_fail (void)
       DECL_ARTIFICIAL (t) = 1;
       DECL_IGNORED_P (t) = 1;
       DECL_VISIBILITY_SPECIFIED (t) = 1;
+#if 1
+      /*
+       * This is a hack:
+       * It appears that our gas does not generate @PLT for hidden
+       * symbols. It could be that we need a newer version, or that
+       * this local function is handled differently on linux.
+       */
+      DECL_VISIBILITY (t) = VISIBILITY_DEFAULT;
+#else
       DECL_VISIBILITY (t) = VISIBILITY_HIDDEN;
+#endif
 
       stack_chk_fail_decl = t;
     }
Index: src/external/gpl3/gcc/dist/gcc/tree-cfg.cc
diff -u src/external/gpl3/gcc/dist/gcc/tree-cfg.cc:1.1.1.1 src/external/gpl3/gcc/dist/gcc/tree-cfg.cc:1.2
--- src/external/gpl3/gcc/dist/gcc/tree-cfg.cc:1.1.1.1	Sun Jul 30 05:20:58 2023
+++ src/external/gpl3/gcc/dist/gcc/tree-cfg.cc	Sun Jul 30 06:15:16 2023
@@ -9508,7 +9508,11 @@ pass_warn_function_return::execute (func
 	}
       if (location == UNKNOWN_LOCATION)
 	location = cfun->function_end_locus;
-      warning_at (location, 0, "%<noreturn%> function does return");
+
+#ifdef notyet
+      if (warn_missing_noreturn)
+        warning_at (location, 0, "%<noreturn%> function does return");
+#endif
     }
 
   /* If we see "return;" in some basic block, then we do reach the end
Index: src/external/gpl3/gcc/dist/gcc/tree-ssa-ccp.cc
diff -u src/external/gpl3/gcc/dist/gcc/tree-ssa-ccp.cc:1.1.1.1 src/external/gpl3/gcc/dist/gcc/tree-ssa-ccp.cc:1.2
--- src/external/gpl3/gcc/dist/gcc/tree-ssa-ccp.cc:1.1.1.1	Sun Jul 30 05:20:51 2023
+++ src/external/gpl3/gcc/dist/gcc/tree-ssa-ccp.cc	Sun Jul 30 06:15:16 2023
@@ -4641,3 +4641,49 @@ make_pass_post_ipa_warn (gcc::context *c
 {
   return new pass_post_ipa_warn (ctxt);
 }
+
+#if defined(__NetBSD__) && defined(NETBSD_NATIVE)
+/*
+ * This is a big, ugly, temporary hack:
+ *    http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59958
+ * To make sure we have configured all our targets correctly, mimic the
+ * #ifdef cascade from src/lib/libc/stdlib/jemalloc.c here and compile
+ * time assert that the value matches gcc's MALLOC_ABI_ALIGNMENT here.
+ */
+
+#if defined(__hppa__)
+#define	JEMALLOC_TINY_MIN_2POW	4
+#elif defined(__alpha__) || defined(__amd64__) || defined(__sparc64__)	\
+     ||	(defined(__arm__) && defined(__ARM_EABI__)) \
+     || defined(__ia64__) || defined(__powerpc__) \
+     || defined(__aarch64__) \
+     || ((defined(__mips__) || defined(__riscv__)) && defined(_LP64))
+#define	JEMALLOC_TINY_MIN_2POW	3
+#endif
+
+#ifndef JEMALLOC_TINY_MIN_2POW
+#define	JEMALLOC_TINY_MIN_2POW	2
+#endif
+
+/* make sure we test the (native) 64bit variant for targets supporting -m32 */
+#undef	TARGET_64BIT
+#ifdef _LP64
+#define	TARGET_64BIT	1
+#else
+#ifdef __sh__
+#undef UNITS_PER_WORD
+#define	UNITS_PER_WORD	4	/* original definition varies depending on cpu */
+#endif
+#define	TARGET_64BIT	0
+#endif
+
+/* ARM has a non-constant MALLOC_ABI_ALIGNMENT since GCC 5.  */
+#if !defined(__arm__)
+#ifdef __CTASSERT
+__CTASSERT((8<<JEMALLOC_TINY_MIN_2POW) == MALLOC_ABI_ALIGNMENT);
+#else
+#error compiling on an older NetBSD version?
+#endif
+#endif
+
+#endif

Index: src/external/gpl3/gcc/dist/gcc/c-family/c-cppbuiltin.cc
diff -u src/external/gpl3/gcc/dist/gcc/c-family/c-cppbuiltin.cc:1.1.1.1 src/external/gpl3/gcc/dist/gcc/c-family/c-cppbuiltin.cc:1.2
--- src/external/gpl3/gcc/dist/gcc/c-family/c-cppbuiltin.cc:1.1.1.1	Sun Jul 30 05:21:14 2023
+++ src/external/gpl3/gcc/dist/gcc/c-family/c-cppbuiltin.cc	Sun Jul 30 06:15:16 2023
@@ -532,22 +532,35 @@ builtin_define_stdint_macros (void)
       builtin_define_type_max ("__UINT_LEAST64_MAX__", uint_least64_type_node);
       builtin_define_constants ("__UINT64_C", uint_least64_type_node);
     }
+/*
+ * NetBSD/sparc64 long ago defined signed and unsigned fast{8,16,32} to be
+ * different to the common sparc64 definitions, and they are not the same
+ * size for the same bitsize.  GCC 7 introduced checks that they are the
+ * same size below that trigger here.
+ *
+ * NETBSD_TOOLS/NETBSD_NATIVE is wrong for this, but it will do for now.
+ */
+#if defined(NETBSD_TOOLS) || defined(NETBSD_NATIVE)
+#define builtin_define_type_width_nb(a,b,c)	builtin_define_type_width(a,b,NULL_TREE)
+#else
+#define builtin_define_type_width_nb(a,b,c)	builtin_define_type_width(a,b,c)
+#endif
   if (int_fast8_type_node)
     {
       builtin_define_type_max ("__INT_FAST8_MAX__", int_fast8_type_node);
-      builtin_define_type_width ("__INT_FAST8_WIDTH__", int_fast8_type_node,
+      builtin_define_type_width_nb ("__INT_FAST8_WIDTH__", int_fast8_type_node,
 				 uint_fast8_type_node);
     }
   if (int_fast16_type_node)
     {
       builtin_define_type_max ("__INT_FAST16_MAX__", int_fast16_type_node);
-      builtin_define_type_width ("__INT_FAST16_WIDTH__", int_fast16_type_node,
+      builtin_define_type_width_nb ("__INT_FAST16_WIDTH__", int_fast16_type_node,
 				 uint_fast16_type_node);
     }
   if (int_fast32_type_node)
     {
       builtin_define_type_max ("__INT_FAST32_MAX__", int_fast32_type_node);
-      builtin_define_type_width ("__INT_FAST32_WIDTH__", int_fast32_type_node,
+      builtin_define_type_width_nb ("__INT_FAST32_WIDTH__", int_fast32_type_node,
 				 uint_fast32_type_node);
     }
   if (int_fast64_type_node)
@@ -556,6 +569,7 @@ builtin_define_stdint_macros (void)
       builtin_define_type_width ("__INT_FAST64_WIDTH__", int_fast64_type_node,
 				 uint_fast64_type_node);
     }
+#undef builtin_define_type_width_nb
   if (uint_fast8_type_node)
     builtin_define_type_max ("__UINT_FAST8_MAX__", uint_fast8_type_node);
   if (uint_fast16_type_node)
Index: src/external/gpl3/gcc/dist/gcc/c-family/c-format.cc
diff -u src/external/gpl3/gcc/dist/gcc/c-family/c-format.cc:1.1.1.1 src/external/gpl3/gcc/dist/gcc/c-family/c-format.cc:1.2
--- src/external/gpl3/gcc/dist/gcc/c-family/c-format.cc:1.1.1.1	Sun Jul 30 05:21:14 2023
+++ src/external/gpl3/gcc/dist/gcc/c-family/c-format.cc	Sun Jul 30 06:15:16 2023
@@ -926,43 +926,43 @@ static const format_kind_info format_typ
     printf_flag_specs, printf_flag_pairs,
     FMT_FLAG_ARG_CONVERT|FMT_FLAG_DOLLAR_MULTIPLE|FMT_FLAG_USE_DOLLAR|FMT_FLAG_EMPTY_PREC_OK,
     'w', 0, 'p', 0, 'L', 0,
-    &integer_type_node, &integer_type_node
+    &integer_type_node, &integer_type_node, format_type_error
   },
   { "asm_fprintf",   asm_fprintf_length_specs,  asm_fprintf_char_table, " +#0-", NULL,
     asm_fprintf_flag_specs, asm_fprintf_flag_pairs,
     FMT_FLAG_ARG_CONVERT|FMT_FLAG_EMPTY_PREC_OK,
     'w', 0, 'p', 0, 'L', 0,
-    NULL, NULL
+    NULL, NULL, format_type_error
   },
   { "gcc_diag",   gcc_diag_length_specs,  gcc_diag_char_table, "q+#", NULL,
     gcc_diag_flag_specs, gcc_diag_flag_pairs,
-    FMT_FLAG_ARG_CONVERT,
+    FMT_FLAG_ARG_CONVERT|FMT_FLAG_M_OK,
     0, 0, 'p', 0, 'L', 0,
-    NULL, &integer_type_node
+    NULL, &integer_type_node, format_type_error
   },
   { "gcc_tdiag",   gcc_tdiag_length_specs,  gcc_tdiag_char_table, "q+#", NULL,
     gcc_tdiag_flag_specs, gcc_tdiag_flag_pairs,
-    FMT_FLAG_ARG_CONVERT,
+    FMT_FLAG_ARG_CONVERT|FMT_FLAG_M_OK,
     0, 0, 'p', 0, 'L', 0,
-    NULL, &integer_type_node
+    NULL, &integer_type_node, format_type_error
   },
   { "gcc_cdiag",   gcc_cdiag_length_specs,  gcc_cdiag_char_table, "q+#", NULL,
     gcc_cdiag_flag_specs, gcc_cdiag_flag_pairs,
-    FMT_FLAG_ARG_CONVERT,
+    FMT_FLAG_ARG_CONVERT|FMT_FLAG_M_OK,
     0, 0, 'p', 0, 'L', 0,
-    NULL, &integer_type_node
+    NULL, &integer_type_node, format_type_error
   },
   { "gcc_cxxdiag",   gcc_cxxdiag_length_specs,  gcc_cxxdiag_char_table, "q+#", NULL,
     gcc_cxxdiag_flag_specs, gcc_cxxdiag_flag_pairs,
-    FMT_FLAG_ARG_CONVERT,
+    FMT_FLAG_ARG_CONVERT|FMT_FLAG_M_OK,
     0, 0, 'p', 0, 'L', 0,
-    NULL, &integer_type_node
+    NULL, &integer_type_node, format_type_error
   },
   { "gcc_gfc", gcc_gfc_length_specs, gcc_gfc_char_table, "q+#", NULL,
     gcc_gfc_flag_specs, gcc_gfc_flag_pairs,
-    FMT_FLAG_ARG_CONVERT,
+    FMT_FLAG_ARG_CONVERT|FMT_FLAG_M_OK,
     0, 0, 0, 0, 0, 0,
-    NULL, NULL
+    NULL, NULL, format_type_error
   },
   { "gcc_dump_printf",   gcc_dump_printf_length_specs,
     gcc_dump_printf_char_table, "q+#", NULL,
@@ -974,24 +974,30 @@ static const format_kind_info format_typ
   { "NSString",   NULL,  NULL, NULL, NULL,
     NULL, NULL,
     FMT_FLAG_ARG_CONVERT|FMT_FLAG_PARSE_ARG_CONVERT_EXTERNAL, 0, 0, 0, 0, 0, 0,
-    NULL, NULL
+    NULL, NULL, format_type_error
   },
   { "gnu_scanf",    scanf_length_specs,   scan_char_table,  "*'I", NULL,
     scanf_flag_specs, scanf_flag_pairs,
     FMT_FLAG_ARG_CONVERT|FMT_FLAG_SCANF_A_KLUDGE|FMT_FLAG_USE_DOLLAR|FMT_FLAG_ZERO_WIDTH_BAD|FMT_FLAG_DOLLAR_GAP_POINTER_OK,
     'w', 0, 0, '*', 'L', 'm',
-    NULL, NULL
+    NULL, NULL, format_type_error
   },
   { "gnu_strftime", NULL,                 time_char_table,  "_-0^#", "EO",
     strftime_flag_specs, strftime_flag_pairs,
-    FMT_FLAG_FANCY_PERCENT_OK, 'w', 0, 0, 0, 0, 0,
-    NULL, NULL
+    FMT_FLAG_FANCY_PERCENT_OK|FMT_FLAG_M_OK, 'w', 0, 0, 0, 0, 0,
+    NULL, NULL, format_type_error
   },
   { "gnu_strfmon",  strfmon_length_specs, monetary_char_table, "=^+(!-", NULL,
     strfmon_flag_specs, strfmon_flag_pairs,
     FMT_FLAG_ARG_CONVERT, 'w', '#', 'p', 0, 'L', 0,
-    NULL, NULL
-  }
+    NULL, NULL, format_type_error
+  },
+  { "gnu_syslog",   printf_length_specs,  print_char_table, " +#0-'I", NULL,
+    printf_flag_specs, printf_flag_pairs,
+    FMT_FLAG_ARG_CONVERT|FMT_FLAG_DOLLAR_MULTIPLE|FMT_FLAG_USE_DOLLAR|FMT_FLAG_EMPTY_PREC_OK|FMT_FLAG_M_OK,
+    'w', 0, 'p', 0, 'L', 0,
+    &integer_type_node, &integer_type_node, printf_format_type
+  },
 };
 
 /* This layer of indirection allows GCC to reassign format_types with
@@ -1187,6 +1193,7 @@ check_function_format (const_tree fntype
 		params = tree_cons (NULL_TREE, argarray[i], params);
 	      check_format_info (&info, params, arglocs);
 	    }
+	  const format_kind_info *fi = &format_types[info.format_type];
 
 	  /* Attempt to detect whether the current function might benefit
 	     from the format attribute if the called function is decorated
@@ -1195,8 +1202,7 @@ check_function_format (const_tree fntype
 	  if (warn_suggest_attribute_format
 	      && current_function_decl != NULL_TREE
 	      && info.first_arg_num == 0
-	      && (format_types[info.format_type].flags
-		  & (int) FMT_FLAG_ARG_CONVERT)
+	      && (fi->flags & (int) FMT_FLAG_ARG_CONVERT)
 	      /* c_strlen will fail for a function parameter but succeed
 		 for a literal or constant array.  */
 	      && !c_strlen (argarray[info.format_num - 1], 1))
@@ -1205,11 +1211,17 @@ check_function_format (const_tree fntype
 	      for (c = TYPE_ATTRIBUTES (TREE_TYPE (current_function_decl));
 		   c;
 		   c = TREE_CHAIN (c))
-		if (is_attribute_p ("format", get_attribute_name (c))
-		    && (decode_format_type (IDENTIFIER_POINTER
-					    (TREE_VALUE (TREE_VALUE (c))))
-			== info.format_type))
-		  break;
+		{
+		  if (!is_attribute_p ("format", TREE_PURPOSE (c)))
+		     continue;
+		  int format_type = decode_format_type (
+		      IDENTIFIER_POINTER (TREE_VALUE (TREE_VALUE (c))));
+		  if (format_type == format_type_error)
+		     continue;
+		  if (format_type == info.format_type ||
+		      format_type == fi->parent_format_type)
+		    break;
+		}
 	      if (c == NULL_TREE)
 		{
 		  /* Check if the current function has a parameter to which
@@ -3891,6 +3903,14 @@ check_format_info_main (format_check_res
 			     "conversion lacks type at end of format");
 	  continue;
 	}
+
+      if (format_char == 'm' && !(fki->flags & FMT_FLAG_M_OK))
+        {
+	  warning (OPT_Wformat_,
+	      "%%m is only allowed in syslog(3) like functions");
+	  continue;
+	}
+
       format_chars++;
 
       const format_char_info * const fci
@@ -5093,6 +5113,7 @@ extern const target_ovr_attr TARGET_OVER
 static const target_ovr_attr gnu_target_overrides_format_attributes[] =
 {
   { "gnu_printf",   "printf" },
+  { "gnu_syslog",   "syslog" },
   { "gnu_scanf",    "scanf" },
   { "gnu_strftime", "strftime" },
   { "gnu_strfmon",  "strfmon" },
Index: src/external/gpl3/gcc/dist/gcc/c-family/c-opts.cc
diff -u src/external/gpl3/gcc/dist/gcc/c-family/c-opts.cc:1.1.1.1 src/external/gpl3/gcc/dist/gcc/c-family/c-opts.cc:1.2
--- src/external/gpl3/gcc/dist/gcc/c-family/c-opts.cc:1.1.1.1	Sun Jul 30 05:21:14 2023
+++ src/external/gpl3/gcc/dist/gcc/c-family/c-opts.cc	Sun Jul 30 06:15:16 2023
@@ -320,6 +320,10 @@ c_common_handle_option (size_t scode, co
       cpp_opts->discard_comments_in_macro_exp = 0;
       break;
 
+    case OPT_cxx_isystem:
+      add_path (xstrdup (arg), INC_SYSTEM, 1, true);
+      break;
+
     case OPT_D:
       defer_opt (code, arg);
       break;
@@ -585,6 +589,10 @@ c_common_handle_option (size_t scode, co
       add_path (xstrdup (arg), INC_QUOTE, 0, true);
       break;
 
+    case OPT_iremap:
+      add_cpp_remap_path (arg);
+      break;
+
     case OPT_isysroot:
       sysroot = arg;
       break;

Index: src/external/gpl3/gcc/dist/gcc/common/config/aarch64/aarch64-common.cc
diff -u src/external/gpl3/gcc/dist/gcc/common/config/aarch64/aarch64-common.cc:1.1.1.1 src/external/gpl3/gcc/dist/gcc/common/config/aarch64/aarch64-common.cc:1.2
--- src/external/gpl3/gcc/dist/gcc/common/config/aarch64/aarch64-common.cc:1.1.1.1	Sun Jul 30 05:21:11 2023
+++ src/external/gpl3/gcc/dist/gcc/common/config/aarch64/aarch64-common.cc	Sun Jul 30 06:15:16 2023
@@ -313,9 +313,9 @@ aarch64_option_init_struct (struct gcc_o
        to calculate the feature strings is called on every options push,
        pop and attribute change (arm_neon headers, lto etc all cause this to
        happen quite frequently).  It is a trade-off between time and space and
-       so time won.  */
+       so time won.  Keep NULL entry last.  */
     int n_extensions
-      = sizeof (all_extensions) / sizeof (struct aarch64_option_extension);
+      = sizeof (all_extensions_by_on) / sizeof (all_extensions_by_on[0]) - 1;
     qsort (&all_extensions_by_on, n_extensions,
 	   sizeof (struct aarch64_option_extension), opt_ext_cmp);
 }

Index: src/external/gpl3/gcc/dist/gcc/common/config/arm/arm-common.cc
diff -u src/external/gpl3/gcc/dist/gcc/common/config/arm/arm-common.cc:1.1.1.1 src/external/gpl3/gcc/dist/gcc/common/config/arm/arm-common.cc:1.2
--- src/external/gpl3/gcc/dist/gcc/common/config/arm/arm-common.cc:1.1.1.1	Sun Jul 30 05:21:11 2023
+++ src/external/gpl3/gcc/dist/gcc/common/config/arm/arm-common.cc	Sun Jul 30 06:15:16 2023
@@ -55,6 +55,9 @@ arm_except_unwind_info (struct gcc_optio
     return UI_SJLJ;
 #endif
 
+  if (ARM_DWARF_UNWIND_TABLES)
+    return UI_DWARF2;
+
   /* If not using ARM EABI unwind tables... */
   if (ARM_UNWIND_INFO)
     {

Index: src/external/gpl3/gcc/dist/gcc/config/host-darwin.cc
diff -u src/external/gpl3/gcc/dist/gcc/config/host-darwin.cc:1.1.1.1 src/external/gpl3/gcc/dist/gcc/config/host-darwin.cc:1.2
--- src/external/gpl3/gcc/dist/gcc/config/host-darwin.cc:1.1.1.1	Sun Jul 30 05:21:02 2023
+++ src/external/gpl3/gcc/dist/gcc/config/host-darwin.cc	Sun Jul 30 06:15:17 2023
@@ -23,6 +23,8 @@
 #include "options.h"
 #include "diagnostic-core.h"
 #include "config/host-darwin.h"
+#include "hosthooks.h"
+#include "hosthooks-def.h"
 #include <errno.h>
 
 /* For Darwin (macOS only) platforms, without ASLR (PIE) enabled on the
@@ -78,6 +80,8 @@ darwin_gt_pch_get_address (size_t sz, in
   if (addr == (void *) TRY_EMPTY_VM_SPACE)
     return addr;
 
+
+const struct host_hooks host_hooks = HOST_HOOKS_INITIALIZER;
   /* OK try to find a space without the constraint.  */
   addr = mmap ((void *) TRY_EMPTY_VM_SPACE, sz, PROT_READ | PROT_WRITE,
 	       MAP_PRIVATE, fd, 0);

Index: src/external/gpl3/gcc/dist/gcc/config/aarch64/aarch64-builtins.cc
diff -u src/external/gpl3/gcc/dist/gcc/config/aarch64/aarch64-builtins.cc:1.1.1.1 src/external/gpl3/gcc/dist/gcc/config/aarch64/aarch64-builtins.cc:1.2
--- src/external/gpl3/gcc/dist/gcc/config/aarch64/aarch64-builtins.cc:1.1.1.1	Sun Jul 30 05:21:04 2023
+++ src/external/gpl3/gcc/dist/gcc/config/aarch64/aarch64-builtins.cc	Sun Jul 30 06:15:17 2023
@@ -1561,7 +1561,7 @@ aarch64_init_rng_builtins (void)
 }
 
 /* Initialize the memory tagging extension (MTE) builtins.  */
-struct
+struct aarch64_mte
 {
   tree ftype;
   enum insn_code icode;
Index: src/external/gpl3/gcc/dist/gcc/config/aarch64/driver-aarch64.cc
diff -u src/external/gpl3/gcc/dist/gcc/config/aarch64/driver-aarch64.cc:1.1.1.1 src/external/gpl3/gcc/dist/gcc/config/aarch64/driver-aarch64.cc:1.2
--- src/external/gpl3/gcc/dist/gcc/config/aarch64/driver-aarch64.cc:1.1.1.1	Sun Jul 30 05:21:04 2023
+++ src/external/gpl3/gcc/dist/gcc/config/aarch64/driver-aarch64.cc	Sun Jul 30 06:15:17 2023
@@ -26,6 +26,7 @@
 #include "coretypes.h"
 #include "tm.h"
 #include "aarch64-protos.h"
+#include "diagnostic-core.h"
 
 struct aarch64_arch_extension
 {
@@ -244,6 +245,14 @@ contains_core_p (unsigned *arr, unsigned
    ARGC and ARGV are set depending on the actual arguments given
    in the spec.  */
 
+#ifdef __NetBSD__
+/* The NetBSD/arm64 platform may not export linux-style /proc/cpuinfo,
+   but the data is available via a sysctl(3) interface.  */
+#include <sys/param.h>
+#include <sys/sysctl.h>
+#include <aarch64/armreg.h>
+#endif
+
 const char *
 host_detect_local_cpu (int argc, const char **argv)
 {
@@ -282,6 +291,7 @@ host_detect_local_cpu (int argc, const c
   if (!arch && !tune && !cpu)
     goto not_found;
 
+#ifndef __NetBSD__
   fcpu_info = getenv ("GCC_CPUINFO");
   if (fcpu_info)
     f = fopen (fcpu_info, "r");
@@ -374,6 +384,145 @@ host_detect_local_cpu (int argc, const c
 
   fclose (f);
   f = NULL;
+#else
+  unsigned int curcpu;
+  size_t len;
+  char impl_buf[8];
+  int mib[2], ncpu;
+
+  mib[0] = CTL_HW;
+  mib[1] = HW_NCPU; 
+  len = sizeof(ncpu);
+  if (sysctl(mib, 2, &ncpu, &len, NULL, 0) == -1)
+    goto not_found;
+
+  for (curcpu = 0; curcpu < ncpu; curcpu++)
+    {
+      char path[128];
+      struct aarch64_sysctl_cpu_id id;
+
+      len = sizeof id;
+      snprintf(path, sizeof path, "machdep.cpu%d.cpu_id", curcpu);
+      if (sysctlbyname(path, &id, &len, NULL, 0) != 0)
+        goto not_found;
+
+      unsigned cimp = __SHIFTOUT(id.ac_midr, MIDR_EL1_IMPL);
+      if (cimp == INVALID_IMP)
+        goto not_found;
+
+      if (imp == INVALID_IMP)
+        imp = cimp;
+	/* FIXME: BIG.little implementers are always equal. */
+      else if (imp != cimp)
+        goto not_found;
+  
+      unsigned cvariant = __SHIFTOUT(id.ac_midr, MIDR_EL1_VARIANT);
+      if (!contains_core_p (variants, cvariant))
+        {
+          if (n_variants == 2)
+            goto not_found;
+  
+          variants[n_variants++] = cvariant;
+  	}
+
+      unsigned ccore = __SHIFTOUT(id.ac_midr, MIDR_EL1_PARTNUM);
+      if (!contains_core_p (cores, ccore))
+  	{
+  	  if (n_cores == 2)
+  	    goto not_found;
+  
+  	  cores[n_cores++] = ccore;
+  	}
+
+      if (!tune && !processed_exts)
+        {
+          std::string exts;
+
+	  /* These are all the extensions from aarch64-option-extensions.def.  */
+          if (__SHIFTOUT(id.ac_aa64pfr0, ID_AA64PFR0_EL1_FP) == ID_AA64PFR0_EL1_FP_IMPL)
+	    exts += "fp ";
+          if (__SHIFTOUT(id.ac_aa64pfr0, ID_AA64PFR0_EL1_ADVSIMD) == ID_AA64PFR0_EL1_ADV_SIMD_IMPL)
+	    exts += "asimd ";
+#ifdef ID_AA64ISAR0_EL1_RDM
+          if (__SHIFTOUT(id.ac_aa64isar0, ID_AA64ISAR0_EL1_RDM) == ID_AA64ISAR0_EL1_RDM_SQRDML)
+	    exts += "asimdrdm ";
+          if (__SHIFTOUT(id.ac_aa64isar0, ID_AA64ISAR0_EL1_DP) == ID_AA64ISAR0_EL1_DP_UDOT)
+	    exts += "asimddp ";
+          if (__SHIFTOUT(id.ac_aa64isar0, ID_AA64ISAR0_EL1_FHM) == ID_AA64ISAR0_EL1_FHM_FMLAL)
+	    exts += "asimdfml ";
+#endif
+          if (__SHIFTOUT(id.ac_aa64isar0, ID_AA64ISAR0_EL1_AES) == ID_AA64ISAR0_EL1_AES_AES)
+	    exts += "aes ";
+          if (__SHIFTOUT(id.ac_aa64isar0, ID_AA64ISAR0_EL1_AES) == ID_AA64ISAR0_EL1_AES_PMUL)
+	    exts += "aes pmull ";
+          if (__SHIFTOUT(id.ac_aa64isar0, ID_AA64ISAR0_EL1_CRC32) == ID_AA64ISAR0_EL1_CRC32_CRC32X)
+	    exts += "crc32 ";
+#ifdef ID_AA64ISAR0_EL1_ATOMIC
+          if (__SHIFTOUT(id.ac_aa64isar0, ID_AA64ISAR0_EL1_ATOMIC) == ID_AA64ISAR0_EL1_ATOMIC_SWP)
+	    exts += "atomics ";
+#endif
+          if ((__SHIFTOUT(id.ac_aa64isar0, ID_AA64ISAR0_EL1_SHA1) & ID_AA64ISAR0_EL1_SHA1_SHA1CPMHSU) != 0)
+	    exts += "sha1 ";
+          if ((__SHIFTOUT(id.ac_aa64isar0, ID_AA64ISAR0_EL1_SHA2) & ID_AA64ISAR0_EL1_SHA2_SHA256HSU) != 0)
+	    exts += "sha2 ";
+#ifdef ID_AA64ISAR0_EL1_SHA2_SHA512HSU
+          if ((__SHIFTOUT(id.ac_aa64isar0, ID_AA64ISAR0_EL1_SHA2) & ID_AA64ISAR0_EL1_SHA2_SHA512HSU) != 0)
+	    exts += "sha512 ";
+          if ((__SHIFTOUT(id.ac_aa64isar0, ID_AA64ISAR0_EL1_SHA3) & ID_AA64ISAR0_EL1_SHA3_EOR3) != 0)
+	    exts += "sha3 ";
+          if (__SHIFTOUT(id.ac_aa64isar0, ID_AA64ISAR0_EL1_SM3) == ID_AA64ISAR0_EL1_SM3_SM3)
+	    exts += "sm3 ";
+          if (__SHIFTOUT(id.ac_aa64isar0, ID_AA64ISAR0_EL1_SM4) == ID_AA64ISAR0_EL1_SM4_SM4)
+	    exts += "sm4 ";
+          if (__SHIFTOUT(id.ac_aa64pfr0, ID_AA64PFR0_EL1_SVE) == ID_AA64PFR0_EL1_SVE_IMPL)
+	    exts += "sve ";
+          if (__SHIFTOUT(id.ac_aa64isar1, ID_AA64ISAR1_EL1_LRCPC) == ID_AA64ISAR1_EL1_LRCPC_PR)
+	    exts += "lrcpc ";
+#endif
+
+          for (i = 0; i < num_exts; i++)
+            {
+	      const char *p = aarch64_extensions[i].feat_string;
+
+	      /* If the feature contains no HWCAPS string then ignore it for the
+		 auto detection.  */
+	      if (*p == '\0')
+		continue;
+
+	      bool enabled = true;
+
+	      /* This may be a multi-token feature string.  We need
+		 to match all parts, which could be in any order.  */
+	      size_t len = strlen (exts.c_str());
+	      do
+		{
+		  const char *end = strchr (p, ' ');
+		  if (end == NULL)
+		    end = strchr (p, '\0');
+		  if (memmem (exts.c_str(), len, p, end - p) == NULL)
+		    {
+		      /* Failed to match this token.  Turn off the
+			 features we'd otherwise enable.  */
+		      enabled = false;
+		      break;
+		    }
+		  if (*end == '\0')
+		    break;
+		  p = end + 1;
+		}
+	      while (1);
+
+              if (enabled)
+                extension_flags |= aarch64_extensions[i].flag;
+              else
+                extension_flags &= ~(aarch64_extensions[i].flag);
+            }
+
+          processed_exts = true;
+	}
+    }
+  /* End of NetBSD specific section.  */
+#endif
 
   /* Weird cpuinfo format that we don't know how to handle.  */
   if (n_cores == 0

Index: src/external/gpl3/gcc/dist/gcc/config/i386/i386.h
diff -u src/external/gpl3/gcc/dist/gcc/config/i386/i386.h:1.16 src/external/gpl3/gcc/dist/gcc/config/i386/i386.h:1.17
--- src/external/gpl3/gcc/dist/gcc/config/i386/i386.h:1.16	Sun Jul 30 05:51:25 2023
+++ src/external/gpl3/gcc/dist/gcc/config/i386/i386.h	Sun Jul 30 06:15:17 2023
@@ -2878,9 +2878,6 @@ extern enum attr_cpu ix86_schedule;
 #define LIBGCC2_UNWIND_ATTRIBUTE __attribute__((target ("no-mmx,no-sse")))
 #endif
 
-/* Standard location for 32-bit ASAN shadow map.  */
-#define X86_32_ASAN_BIT_OFFSET 29
-
 /*
 Local variables:
 version-control: t
Index: src/external/gpl3/gcc/dist/gcc/config/i386/netbsd-elf.h
diff -u src/external/gpl3/gcc/dist/gcc/config/i386/netbsd-elf.h:1.16 src/external/gpl3/gcc/dist/gcc/config/i386/netbsd-elf.h:1.17
--- src/external/gpl3/gcc/dist/gcc/config/i386/netbsd-elf.h:1.16	Sun Jul 30 05:51:25 2023
+++ src/external/gpl3/gcc/dist/gcc/config/i386/netbsd-elf.h	Sun Jul 30 06:15:17 2023
@@ -114,6 +114,7 @@ along with GCC; see the file COPYING3.  
 #undef PREFERRED_STACK_BOUNDARY_DEFAULT
 #define PREFERRED_STACK_BOUNDARY_DEFAULT MIN_STACK_BOUNDARY
 
-/* NetBSD/x86 on 32-bit places the ASAN shadow map at 0x40000000.  */
-#undef X86_32_ASAN_BIT_OFFSET
-#define X86_32_ASAN_BIT_OFFSET 30
+/* Define the shadow offsets for asan.  */
+#undef SUBTARGET_SHADOW_OFFSET
+#define SUBTARGET_SHADOW_OFFSET \
+  (TARGET_LP64 ? HOST_WIDE_INT_1 << 46 : HOST_WIDE_INT_1 << 30)
Index: src/external/gpl3/gcc/dist/gcc/config/i386/netbsd64.h
diff -u src/external/gpl3/gcc/dist/gcc/config/i386/netbsd64.h:1.16 src/external/gpl3/gcc/dist/gcc/config/i386/netbsd64.h:1.17
--- src/external/gpl3/gcc/dist/gcc/config/i386/netbsd64.h:1.16	Sun Jul 30 05:51:25 2023
+++ src/external/gpl3/gcc/dist/gcc/config/i386/netbsd64.h	Sun Jul 30 06:15:17 2023
@@ -74,6 +74,7 @@ along with GCC; see the file COPYING3.  
 
 #define HAVE_ENABLE_EXECUTE_STACK
 
-/* NetBSD/x86 on 32-bit places the ASAN shadow map at 0x40000000.  */
-#undef X86_32_ASAN_BIT_OFFSET
-#define X86_32_ASAN_BIT_OFFSET 30
+/* Define the shadow offsets for asan.  */
+#undef SUBTARGET_SHADOW_OFFSET
+#define SUBTARGET_SHADOW_OFFSET \
+  (TARGET_LP64 ? HOST_WIDE_INT_1 << 46 : HOST_WIDE_INT_1 << 30)

Index: src/external/gpl3/gcc/dist/gcc/config/mips/mips.cc
diff -u src/external/gpl3/gcc/dist/gcc/config/mips/mips.cc:1.1.1.1 src/external/gpl3/gcc/dist/gcc/config/mips/mips.cc:1.2
--- src/external/gpl3/gcc/dist/gcc/config/mips/mips.cc:1.1.1.1	Sun Jul 30 05:21:02 2023
+++ src/external/gpl3/gcc/dist/gcc/config/mips/mips.cc	Sun Jul 30 06:15:17 2023
@@ -9579,7 +9579,7 @@ mips_output_external (FILE *file, tree d
 
 /* Implement TARGET_ASM_OUTPUT_SOURCE_FILENAME.  */
 
-static void
+static void ATTRIBUTE_UNUSED
 mips_output_filename (FILE *stream, const char *name)
 {
   /* If we are emitting DWARF-2, let dwarf2out handle the ".file"
@@ -22992,8 +22992,10 @@ mips_asm_file_end (void)
 #undef TARGET_TRAMPOLINE_INIT
 #define TARGET_TRAMPOLINE_INIT mips_trampoline_init
 
+#ifndef MIPS_USE_GCC_DEFAULT_OUTPUT_SOURCE_FILENAME
 #undef TARGET_ASM_OUTPUT_SOURCE_FILENAME
 #define TARGET_ASM_OUTPUT_SOURCE_FILENAME mips_output_filename
+#endif	/* MIPS_USE_GCC_DEFAULT_OUTPUT_SOURCE_FILENAME */
 
 #undef TARGET_SHIFT_TRUNCATION_MASK
 #define TARGET_SHIFT_TRUNCATION_MASK mips_shift_truncation_mask

Index: src/external/gpl3/gcc/dist/gcc/config/pa/pa.cc
diff -u src/external/gpl3/gcc/dist/gcc/config/pa/pa.cc:1.1.1.1 src/external/gpl3/gcc/dist/gcc/config/pa/pa.cc:1.2
--- src/external/gpl3/gcc/dist/gcc/config/pa/pa.cc:1.1.1.1	Sun Jul 30 05:21:08 2023
+++ src/external/gpl3/gcc/dist/gcc/config/pa/pa.cc	Sun Jul 30 06:15:17 2023
@@ -1128,9 +1128,9 @@ hppa_legitimize_address (rtx x, rtx oldx
 	  || GET_CODE (XEXP (x, 0)) == REG))
     {
       rtx int_part, ptr_reg;
-      int newoffset;
-      int offset = INTVAL (XEXP (x, 1));
-      int mask;
+      HOST_WIDE_INT newoffset;
+      HOST_WIDE_INT offset = INTVAL (XEXP (x, 1));
+      HOST_WIDE_INT mask;
 
       mask = (GET_MODE_CLASS (mode) == MODE_FLOAT
 	      && !INT14_OK_STRICT ? 0x1f : 0x3fff);
@@ -1185,7 +1185,7 @@ hppa_legitimize_address (rtx x, rtx oldx
     {
       /* If we were given a MULT, we must fix the constant
 	 as we're going to create the ASHIFT form.  */
-      int shift_val = INTVAL (XEXP (XEXP (x, 0), 1));
+      HOST_WIDE_INT shift_val = INTVAL (XEXP (XEXP (x, 0), 1));
       if (GET_CODE (XEXP (x, 0)) == MULT)
 	shift_val = exact_log2 (shift_val);
 
@@ -1268,7 +1268,7 @@ hppa_legitimize_address (rtx x, rtx oldx
 	  && INTVAL (XEXP (idx, 1)) % INTVAL (XEXP (XEXP (idx, 0), 1)) == 0)
 	{
 	  /* Divide the CONST_INT by the scale factor, then add it to A.  */
-	  int val = INTVAL (XEXP (idx, 1));
+	  HOST_WIDE_INT val = INTVAL (XEXP (idx, 1));
 	  val /= (1 << shift_val);
 
 	  reg1 = XEXP (XEXP (idx, 0), 0);
@@ -1372,7 +1372,7 @@ hppa_legitimize_address (rtx x, rtx oldx
 	      && INTVAL (XEXP (y, 1)) >= -4096
 	      && INTVAL (XEXP (y, 1)) <= 4095)
 	    {
-	      int shift_val = INTVAL (XEXP (XEXP (x, 0), 1));
+	      HOST_WIDE_INT shift_val = INTVAL (XEXP (XEXP (x, 0), 1));
 
 	      /* If we were given a MULT, we must fix the constant
 		 as we're going to create the ASHIFT form.  */
@@ -3005,8 +3005,8 @@ find_addr_reg (rtx addr)
 const char *
 pa_output_block_move (rtx *operands, int size_is_constant ATTRIBUTE_UNUSED)
 {
-  int align = INTVAL (operands[5]);
-  unsigned long n_bytes = INTVAL (operands[4]);
+  HOST_WIDE_INT align = INTVAL (operands[5]);
+  unsigned HOST_WIDE_INT n_bytes = INTVAL (operands[4]);
 
   /* We can't move more than a word at a time because the PA
      has no longer integer move insns.  (Could use fp mem ops?)  */
@@ -3133,8 +3133,8 @@ static int
 compute_cpymem_length (rtx_insn *insn)
 {
   rtx pat = PATTERN (insn);
-  unsigned int align = INTVAL (XEXP (XVECEXP (pat, 0, 7), 0));
-  unsigned long n_bytes = INTVAL (XEXP (XVECEXP (pat, 0, 6), 0));
+  unsigned HOST_WIDE_INT align = INTVAL (XEXP (XVECEXP (pat, 0, 7), 0));
+  unsigned HOST_WIDE_INT n_bytes = INTVAL (XEXP (XVECEXP (pat, 0, 6), 0));
   unsigned int n_insns = 0;
 
   /* We can't move more than four bytes at a time because the PA
@@ -3169,8 +3169,8 @@ compute_cpymem_length (rtx_insn *insn)
 const char *
 pa_output_block_clear (rtx *operands, int size_is_constant ATTRIBUTE_UNUSED)
 {
-  int align = INTVAL (operands[3]);
-  unsigned long n_bytes = INTVAL (operands[2]);
+  HOST_WIDE_INT align = INTVAL (operands[3]);
+  unsigned HOST_WIDE_INT n_bytes = INTVAL (operands[2]);
 
   /* We can't clear more than a word at a time because the PA
      has no longer integer move insns.  */
@@ -3275,8 +3275,8 @@ static int
 compute_clrmem_length (rtx_insn *insn)
 {
   rtx pat = PATTERN (insn);
-  unsigned int align = INTVAL (XEXP (XVECEXP (pat, 0, 4), 0));
-  unsigned long n_bytes = INTVAL (XEXP (XVECEXP (pat, 0, 3), 0));
+  unsigned HOST_WIDE_INT align = INTVAL (XEXP (XVECEXP (pat, 0, 4), 0));
+  unsigned HOST_WIDE_INT n_bytes = INTVAL (XEXP (XVECEXP (pat, 0, 3), 0));
   unsigned int n_insns = 0;
 
   /* We can't clear more than a word at a time because the PA
@@ -5797,7 +5797,7 @@ pa_som_file_start (void)
 static void
 pa_linux_file_start (void)
 {
-  pa_file_start_file (1);
+  pa_file_start_file (0);
   pa_file_start_level ();
   pa_file_start_mcount ("CODE");
 }
@@ -6022,7 +6022,7 @@ pa_emit_hpdiv_const (rtx *operands, int 
 const char *
 pa_output_div_insn (rtx *operands, int unsignedp, rtx_insn *insn)
 {
-  int divisor;
+  HOST_WIDE_INT divisor;
 
   /* If the divisor is a constant, try to use one of the special
      opcodes .*/

Index: src/external/gpl3/gcc/dist/gcc/config/rs6000/rs6000-logue.cc
diff -u src/external/gpl3/gcc/dist/gcc/config/rs6000/rs6000-logue.cc:1.1.1.1 src/external/gpl3/gcc/dist/gcc/config/rs6000/rs6000-logue.cc:1.2
--- src/external/gpl3/gcc/dist/gcc/config/rs6000/rs6000-logue.cc:1.1.1.1	Sun Jul 30 05:21:06 2023
+++ src/external/gpl3/gcc/dist/gcc/config/rs6000/rs6000-logue.cc	Sun Jul 30 06:15:17 2023
@@ -2277,7 +2277,8 @@ rs6000_savres_routine_name (int regno, i
     }
   else if (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2)
     {
-#if !defined (POWERPC_LINUX) && !defined (POWERPC_FREEBSD)
+#if !defined (POWERPC_LINUX) && !defined (POWERPC_FREEBSD) \
+    && !defined(POWERPC_NETBSD)
       /* No out-of-line save/restore routines for GPRs on AIX.  */
       gcc_assert (!TARGET_AIX || (sel & SAVRES_REG) != SAVRES_GPR);
 #endif
@@ -2289,7 +2290,8 @@ rs6000_savres_routine_name (int regno, i
 		  : ((sel & SAVRES_LR) ? "_restgpr0_" : "_restgpr1_"));
       else if ((sel & SAVRES_REG) == SAVRES_FPR)
 	{
-#if defined (POWERPC_LINUX) || defined (POWERPC_FREEBSD)
+#if defined (POWERPC_LINUX) || defined (POWERPC_FREEBSD) \
+    || defined(POWERPC_NETBSD)
 	  if ((sel & SAVRES_LR))
 	    prefix = ((sel & SAVRES_SAVE) ? "_savefpr_" : "_restfpr_");
 	  else
Index: src/external/gpl3/gcc/dist/gcc/config/rs6000/rs6000.cc
diff -u src/external/gpl3/gcc/dist/gcc/config/rs6000/rs6000.cc:1.1.1.1 src/external/gpl3/gcc/dist/gcc/config/rs6000/rs6000.cc:1.2
--- src/external/gpl3/gcc/dist/gcc/config/rs6000/rs6000.cc:1.1.1.1	Sun Jul 30 05:21:06 2023
+++ src/external/gpl3/gcc/dist/gcc/config/rs6000/rs6000.cc	Sun Jul 30 06:15:17 2023
@@ -97,7 +97,7 @@ extern tree rs6000_builtin_reciprocal (t
      of the include files, so that POWERPC_LINUX and POWERPC_FREEBSD are
      properly defined.  */
 #ifndef TARGET_IEEEQUAD_DEFAULT
-#if !defined (POWERPC_LINUX) && !defined (POWERPC_FREEBSD)
+#if !defined (POWERPC_LINUX) && !defined (POWERPC_FREEBSD) && !defined(POWERPC_NETBSD)
 #define TARGET_IEEEQUAD_DEFAULT 1
 #else
 #define TARGET_IEEEQUAD_DEFAULT 0
@@ -20755,7 +20755,11 @@ rs6000_elf_reloc_rw_mask (void)
   if (flag_pic)
     return 3;
   else if (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_ELFv2)
+#if defined (POWERPC_NETBSD)
+    return 3;
+#else
     return 2;
+#endif
   else
     return 0;
 }

Index: src/external/gpl3/gcc/dist/libcpp/files.cc
diff -u src/external/gpl3/gcc/dist/libcpp/files.cc:1.1.1.1 src/external/gpl3/gcc/dist/libcpp/files.cc:1.2
--- src/external/gpl3/gcc/dist/libcpp/files.cc:1.1.1.1	Sun Jul 30 05:20:39 2023
+++ src/external/gpl3/gcc/dist/libcpp/files.cc	Sun Jul 30 06:15:17 2023
@@ -222,20 +222,32 @@ static bool check_file_against_entries (
 static bool
 open_file (_cpp_file *file)
 {
+  const char *cpp_restricted;
+
+  cpp_restricted = getenv ("CPP_RESTRICTED");
+
   if (file->path[0] == '\0')
     {
       file->fd = 0;
       set_stdin_to_binary_mode ();
     }
   else
-    file->fd = open (file->path, O_RDONLY | O_NOCTTY | O_BINARY, 0666);
+    file->fd = open (file->path, O_RDONLY | O_NOCTTY | O_BINARY
+		     | ((cpp_restricted != NULL) ? O_NONBLOCK : 0), 0666);
+
 
   if (file->fd != -1)
     {
       if (fstat (file->fd, &file->st) == 0)
 	{
 	  if (!S_ISDIR (file->st.st_mode))
+	  if (cpp_restricted != NULL
+	      ? S_ISREG (file->st.st_mode) : !S_ISDIR (file->st.st_mode))
+
 	    {
+	      if (cpp_restricted)
+		fcntl(file->fd, F_SETFL,
+		      fcntl(file->fd, F_GETFL, 0) & ~O_NONBLOCK);
 	      file->err_no = 0;
 	      return true;
 	    }
Index: src/external/gpl3/gcc/dist/libcpp/lex.cc
diff -u src/external/gpl3/gcc/dist/libcpp/lex.cc:1.1.1.1 src/external/gpl3/gcc/dist/libcpp/lex.cc:1.2
--- src/external/gpl3/gcc/dist/libcpp/lex.cc:1.1.1.1	Sun Jul 30 05:20:40 2023
+++ src/external/gpl3/gcc/dist/libcpp/lex.cc	Sun Jul 30 06:15:17 2023
@@ -2775,6 +2775,8 @@ save_comment (cpp_reader *pfile, cpp_tok
 {
   unsigned char *buffer;
   unsigned int len, clen, i;
+  int convert_to_c = (pfile->state.in_directive || pfile->state.parsing_args)
+    && type == '/';
 
   len = pfile->buffer->cur - from + 1; /* + 1 for the initial '/'.  */
 
@@ -2789,8 +2791,7 @@ save_comment (cpp_reader *pfile, cpp_tok
 
      Note that the only time we encounter a directive here is
      when we are saving comments in a "#define".  */
-  clen = ((pfile->state.in_directive || pfile->state.parsing_args)
-	  && type == '/') ? len + 2 : len;
+  clen = convert_to_c ? len + 2 : len;
 
   buffer = _cpp_unaligned_alloc (pfile, clen);
 
@@ -2802,7 +2803,7 @@ save_comment (cpp_reader *pfile, cpp_tok
   memcpy (buffer + 1, from, len - 1);
 
   /* Finish conversion to a C comment, if necessary.  */
-  if ((pfile->state.in_directive || pfile->state.parsing_args) && type == '/')
+  if (convert_to_c)
     {
       buffer[1] = '*';
       buffer[clen - 2] = '*';
Index: src/external/gpl3/gcc/dist/libcpp/macro.cc
diff -u src/external/gpl3/gcc/dist/libcpp/macro.cc:1.1.1.1 src/external/gpl3/gcc/dist/libcpp/macro.cc:1.2
--- src/external/gpl3/gcc/dist/libcpp/macro.cc:1.1.1.1	Sun Jul 30 05:20:40 2023
+++ src/external/gpl3/gcc/dist/libcpp/macro.cc	Sun Jul 30 06:15:17 2023
@@ -483,6 +483,61 @@ static const char * const monthnames[] =
   "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
 };
 
+static size_t remap_pairs;
+static char **remap_src;
+static char **remap_dst;
+
+void
+add_cpp_remap_path (const char *arg)
+{
+	const char *arg_dst;
+	size_t len;
+
+	arg_dst = strchr(arg, ':');
+	if (arg_dst == NULL) {
+		fprintf(stderr, "Invalid argument for -iremap");
+		exit(1);
+	}
+	len = arg_dst - arg;
+	++arg_dst;
+
+	remap_src = (char **) xrealloc(remap_src, sizeof(char *) * (remap_pairs + 1));
+	remap_dst = (char **) xrealloc(remap_dst, sizeof(char *) * (remap_pairs + 1));
+
+	remap_src[remap_pairs] = (char *) xmalloc(len + 1);
+	memcpy(remap_src[remap_pairs], arg, len);
+	remap_src[remap_pairs][len] = '\0';
+	remap_dst[remap_pairs] = xstrdup(arg_dst);
+	++remap_pairs;
+}
+
+static const char *
+cpp_remap_file (const char *arg, char **tmp_name)
+{
+	char *result;
+	size_t i, len;
+
+	for (i = 0; i < remap_pairs; ++i) {
+		len = strlen (remap_src[i]);
+		if (strncmp (remap_src[i], arg, len))
+			continue;
+		if (arg[len] == '\0')
+			return remap_dst[i];
+		if (arg[len] != '/')
+			continue;
+		arg += len;
+		len = strlen (remap_dst[i]);
+		result = (char *) xmalloc (len + strlen (arg) + 1);
+		memcpy(result, remap_dst[i], len);
+		strcpy(result + len, arg);
+		*tmp_name = result;
+
+		return result;
+	}
+
+	return arg;
+}
+
 /* Helper function for builtin_macro.  Returns the text generated by
    a builtin macro. */
 const uchar *
@@ -547,6 +602,7 @@ _cpp_builtin_macro_text (cpp_reader *pfi
       {
 	unsigned int len;
 	const char *name;
+	char *tmp_name;
 	uchar *buf;
 
 	if (node->value.builtin == BT_FILE
@@ -565,11 +621,14 @@ _cpp_builtin_macro_text (cpp_reader *pfi
 	  }
 	if (pfile->cb.remap_filename)
 	  name = pfile->cb.remap_filename (name);
+	tmp_name = NULL;
+	name = cpp_remap_file (name, &tmp_name);
 	len = strlen (name);
 	buf = _cpp_unaligned_alloc (pfile, len * 2 + 3);
 	result = buf;
 	*buf = '"';
 	buf = cpp_quote_string (buf + 1, (const unsigned char *) name, len);
+	free (tmp_name);
 	*buf++ = '"';
 	*buf = '\0';
       }

Reply via email to