public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH 0/3] Option handling: add documentation URLs
@ 2023-11-10 21:42 David Malcolm
  2023-11-10 21:42 ` [PATCH 1/3] options: add gcc/regenerate-opt-urls.py David Malcolm
                   ` (3 more replies)
  0 siblings, 4 replies; 47+ messages in thread
From: David Malcolm @ 2023-11-10 21:42 UTC (permalink / raw)
  To: gcc-patches, Joseph Myers; +Cc: David Malcolm

In r14-5118-gc5db4d8ba5f3de I added a mechanism to automatically add
URLs to quoted strings in diagnostics.  This was based on a data table
mapping strings to URLs, with placeholder data covering various pragmas
and a couple of options.

The following patches add automatic URLification in our diagnostic
messages to mentions of *all* of our options in quoted strings, linking
to our HTML documentation.

For example, with these patches, given:

  ./xgcc -B. -S t.c -Wctad-maybe-unsupported
  cc1: warning: command-line option ‘-Wctad-maybe-unsupported’ is valid for C++/ObjC++ but not for C

the quoted string '-Wctad-maybe-unsupported' gets automatically URLified
in a sufficiently modern terminal to:
  https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Dialect-Options.html#index-Wctad-maybe-unsupported

Objectives:
- integrate with DOCUMENTATION_ROOT_URL
- integrate with the existing .opt mechanisms
- automate keeping the URLs up-to-date
- work with target-specific options based on current configuration
- work with lang-specific options based on current configuration
- keep autogenerated material separate from the human-maintained .opt
  files
- no new build-time requirements (by using awk at build time)
- be maintainable

The approach is a new regenerate-opt-urls.py which:
- scrapes the generated HTML documentation finding anchors
  for options,
- reads all the .opt files in the source tree
- for each .opt file, generates a .opt.urls file; for each
  option in the .opt file it has either a UrlSuffix directives giving
  the final part of the URL of that option's documentation (relative
  to DOCUMENTATION_ROOT_URL), or a comment describing the problem.

regenerate-opt-urls.py is written in Python 3, and has unit tests.
I tested it with Python 3.8, and it probably works with earlier
releases of Python 3.
The .opt.urls files it generates become part of the source tree, and
would be regenerated by maintainers whenever new options are added.
Forgetting to update the files (or not having Python 3 handy) merely
means that URLs might be missing or out of date until someone else
regenerates them.

At build time, the .opt.urls are added to .opt files when regenerating
the optionslist file.  A new "options-urls-cc-gen.awk" is run at build
time on the optionslist to generate a "options-urls.cc" file containing
a big array of strings for all of the options present in the
configuration:

const char * const opt_url_suffixes[] =
{
  [...snip...]

  /* [563] (OPT_Wclass_memaccess) = */
  "gcc/C_002b_002b-Dialect-Options.html#index-Wclass-memaccess",

  /* [564] (OPT_Wclobbered) = */
  "gcc/Warning-Options.html#index-Wclobbered",

  [...snip...]
};

and this is then used by the gcc_urlifier class when emitting
diagnostics.

Successfully bootstrapped & regrtested on x86_64-pc-linux-gnu.
OK for trunk?

David Malcolm (3):
  options: add gcc/regenerate-opt-urls.py
  Add generated .opt.urls files
  diagnostics: use the .opt.urls files to urlify quoted text

 gcc/Makefile.in                              |   18 +-
 gcc/ada/gcc-interface/lang.opt.urls          |   28 +
 gcc/analyzer/analyzer.opt.urls               |  206 ++
 gcc/c-family/c.opt.urls                      | 1404 ++++++++++++++
 gcc/common.opt.urls                          | 1823 ++++++++++++++++++
 gcc/config/aarch64/aarch64.opt.urls          |   84 +
 gcc/config/alpha/alpha.opt.urls              |   76 +
 gcc/config/alpha/elf.opt.urls                |    2 +
 gcc/config/arc/arc-tables.opt.urls           |    2 +
 gcc/config/arc/arc.opt.urls                  |  260 +++
 gcc/config/arm/arm-tables.opt.urls           |    2 +
 gcc/config/arm/arm.opt.urls                  |  149 ++
 gcc/config/arm/vxworks.opt.urls              |    2 +
 gcc/config/avr/avr.opt.urls                  |   71 +
 gcc/config/bfin/bfin.opt.urls                |   61 +
 gcc/config/bpf/bpf.opt.urls                  |   35 +
 gcc/config/c6x/c6x-tables.opt.urls           |    2 +
 gcc/config/c6x/c6x.opt.urls                  |   18 +
 gcc/config/cris/cris.opt.urls                |   65 +
 gcc/config/cris/elf.opt.urls                 |    8 +
 gcc/config/csky/csky.opt.urls                |  104 +
 gcc/config/csky/csky_tables.opt.urls         |    2 +
 gcc/config/darwin.opt.urls                   |  221 +++
 gcc/config/dragonfly.opt.urls                |    9 +
 gcc/config/epiphany/epiphany.opt.urls        |   52 +
 gcc/config/fr30/fr30.opt.urls                |    8 +
 gcc/config/freebsd.opt.urls                  |    9 +
 gcc/config/frv/frv.opt.urls                  |  111 ++
 gcc/config/ft32/ft32.opt.urls                |   20 +
 gcc/config/fused-madd.opt.urls               |    4 +
 gcc/config/g.opt.urls                        |    5 +
 gcc/config/gcn/gcn.opt.urls                  |   23 +
 gcc/config/gnu-user.opt.urls                 |    9 +
 gcc/config/h8300/h8300.opt.urls              |   29 +
 gcc/config/hpux11.opt.urls                   |    6 +
 gcc/config/i386/cygming.opt.urls             |   30 +
 gcc/config/i386/cygwin.opt.urls              |    6 +
 gcc/config/i386/djgpp.opt.urls               |    2 +
 gcc/config/i386/i386.opt.urls                |  602 ++++++
 gcc/config/i386/mingw-w64.opt.urls           |    5 +
 gcc/config/i386/mingw.opt.urls               |   12 +
 gcc/config/i386/nto.opt.urls                 |    5 +
 gcc/config/ia64/ia64.opt.urls                |  122 ++
 gcc/config/ia64/ilp32.opt.urls               |    8 +
 gcc/config/ia64/vms.opt.urls                 |    2 +
 gcc/config/iq2000/iq2000.opt.urls            |   14 +
 gcc/config/linux-android.opt.urls            |   11 +
 gcc/config/linux.opt.urls                    |   14 +
 gcc/config/lm32/lm32.opt.urls                |   14 +
 gcc/config/loongarch/loongarch.opt.urls      |   60 +
 gcc/config/lynx.opt.urls                     |    5 +
 gcc/config/m32c/m32c.opt.urls                |    8 +
 gcc/config/m32r/m32r.opt.urls                |   27 +
 gcc/config/m68k/ieee.opt.urls                |    4 +
 gcc/config/m68k/m68k-tables.opt.urls         |    2 +
 gcc/config/m68k/m68k.opt.urls                |  107 +
 gcc/config/m68k/uclinux.opt.urls             |    2 +
 gcc/config/mcore/mcore.opt.urls              |   38 +
 gcc/config/microblaze/microblaze.opt.urls    |   59 +
 gcc/config/mips/mips-tables.opt.urls         |    2 +
 gcc/config/mips/mips.opt.urls                |  269 +++
 gcc/config/mips/sde.opt.urls                 |    2 +
 gcc/config/mmix/mmix.opt.urls                |   44 +
 gcc/config/mn10300/mn10300.opt.urls          |   32 +
 gcc/config/moxie/moxie.opt.urls              |   14 +
 gcc/config/msp430/msp430.opt.urls            |   53 +
 gcc/config/nds32/nds32-elf.opt.urls          |    5 +
 gcc/config/nds32/nds32-linux.opt.urls        |    5 +
 gcc/config/nds32/nds32.opt.urls              |   57 +
 gcc/config/netbsd-elf.opt.urls               |    5 +
 gcc/config/netbsd.opt.urls                   |    6 +
 gcc/config/nios2/elf.opt.urls                |   14 +
 gcc/config/nios2/nios2.opt.urls              |   50 +
 gcc/config/nvptx/nvptx-gen.opt.urls          |    2 +
 gcc/config/nvptx/nvptx.opt.urls              |   29 +
 gcc/config/openbsd.opt.urls                  |    6 +
 gcc/config/or1k/elf.opt.urls                 |    8 +
 gcc/config/or1k/or1k.opt.urls                |   46 +
 gcc/config/pa/pa-hpux.opt.urls               |   11 +
 gcc/config/pa/pa-hpux1010.opt.urls           |    2 +
 gcc/config/pa/pa-hpux1111.opt.urls           |    2 +
 gcc/config/pa/pa-hpux1131.opt.urls           |    2 +
 gcc/config/pa/pa.opt.urls                    |   71 +
 gcc/config/pa/pa64-hpux.opt.urls             |    8 +
 gcc/config/pdp11/pdp11.opt.urls              |   41 +
 gcc/config/pru/pru.opt.urls                  |   17 +
 gcc/config/riscv/riscv.opt.urls              |   88 +
 gcc/config/rl78/rl78.opt.urls                |   31 +
 gcc/config/rpath.opt.urls                    |    2 +
 gcc/config/rs6000/476.opt.urls               |    2 +
 gcc/config/rs6000/aix64.opt.urls             |   23 +
 gcc/config/rs6000/darwin.opt.urls            |   14 +
 gcc/config/rs6000/linux64.opt.urls           |    4 +
 gcc/config/rs6000/rs6000-tables.opt.urls     |    2 +
 gcc/config/rs6000/rs6000.opt.urls            |  214 ++
 gcc/config/rs6000/sysv4.opt.urls             |   87 +
 gcc/config/rtems.opt.urls                    |    6 +
 gcc/config/rx/elf.opt.urls                   |   14 +
 gcc/config/rx/rx.opt.urls                    |   54 +
 gcc/config/s390/s390.opt.urls                |   92 +
 gcc/config/s390/tpf.opt.urls                 |    8 +
 gcc/config/sh/sh.opt.urls                    |  174 ++
 gcc/config/sh/superh.opt.urls                |    4 +
 gcc/config/sol2.opt.urls                     |   21 +
 gcc/config/sparc/long-double-switch.opt.urls |    6 +
 gcc/config/sparc/sparc.opt.urls              |  108 ++
 gcc/config/stormy16/stormy16.opt.urls        |    5 +
 gcc/config/v850/v850.opt.urls                |   60 +
 gcc/config/vax/elf.opt.urls                  |    2 +
 gcc/config/vax/vax.opt.urls                  |   10 +
 gcc/config/visium/visium.opt.urls            |   29 +
 gcc/config/vms/vms.opt.urls                  |    8 +
 gcc/config/vxworks-smp.opt.urls              |    5 +
 gcc/config/vxworks.opt.urls                  |   20 +
 gcc/config/xtensa/elf.opt.urls               |    5 +
 gcc/config/xtensa/uclinux.opt.urls           |    2 +
 gcc/config/xtensa/xtensa.opt.urls            |   37 +
 gcc/d/lang.opt.urls                          |   95 +
 gcc/doc/options.texi                         |   17 +
 gcc/fortran/lang.opt.urls                    |  153 ++
 gcc/gcc-urlifier.cc                          |  106 +-
 gcc/gcc-urlifier.def                         |    2 -
 gcc/gcc-urlifier.h                           |    2 +-
 gcc/gcc.cc                                   |    2 +-
 gcc/go/lang.opt.urls                         |   15 +
 gcc/lto/lang.opt.urls                        |    8 +
 gcc/m2/lang.opt.urls                         |  110 ++
 gcc/opt-functions.awk                        |    7 +
 gcc/options-urls-cc-gen.awk                  |   79 +
 gcc/opts.cc                                  |   75 +-
 gcc/opts.h                                   |    4 +
 gcc/params.opt.urls                          |    2 +
 gcc/regenerate-opt-urls.py                   |  366 ++++
 gcc/rust/lang.opt.urls                       |   27 +
 gcc/testsuite/lib/gcc-dg.exp                 |    6 +
 gcc/toplev.cc                                |    2 +-
 136 files changed, 9044 insertions(+), 61 deletions(-)
 create mode 100644 gcc/ada/gcc-interface/lang.opt.urls
 create mode 100644 gcc/analyzer/analyzer.opt.urls
 create mode 100644 gcc/c-family/c.opt.urls
 create mode 100644 gcc/common.opt.urls
 create mode 100644 gcc/config/aarch64/aarch64.opt.urls
 create mode 100644 gcc/config/alpha/alpha.opt.urls
 create mode 100644 gcc/config/alpha/elf.opt.urls
 create mode 100644 gcc/config/arc/arc-tables.opt.urls
 create mode 100644 gcc/config/arc/arc.opt.urls
 create mode 100644 gcc/config/arm/arm-tables.opt.urls
 create mode 100644 gcc/config/arm/arm.opt.urls
 create mode 100644 gcc/config/arm/vxworks.opt.urls
 create mode 100644 gcc/config/avr/avr.opt.urls
 create mode 100644 gcc/config/bfin/bfin.opt.urls
 create mode 100644 gcc/config/bpf/bpf.opt.urls
 create mode 100644 gcc/config/c6x/c6x-tables.opt.urls
 create mode 100644 gcc/config/c6x/c6x.opt.urls
 create mode 100644 gcc/config/cris/cris.opt.urls
 create mode 100644 gcc/config/cris/elf.opt.urls
 create mode 100644 gcc/config/csky/csky.opt.urls
 create mode 100644 gcc/config/csky/csky_tables.opt.urls
 create mode 100644 gcc/config/darwin.opt.urls
 create mode 100644 gcc/config/dragonfly.opt.urls
 create mode 100644 gcc/config/epiphany/epiphany.opt.urls
 create mode 100644 gcc/config/fr30/fr30.opt.urls
 create mode 100644 gcc/config/freebsd.opt.urls
 create mode 100644 gcc/config/frv/frv.opt.urls
 create mode 100644 gcc/config/ft32/ft32.opt.urls
 create mode 100644 gcc/config/fused-madd.opt.urls
 create mode 100644 gcc/config/g.opt.urls
 create mode 100644 gcc/config/gcn/gcn.opt.urls
 create mode 100644 gcc/config/gnu-user.opt.urls
 create mode 100644 gcc/config/h8300/h8300.opt.urls
 create mode 100644 gcc/config/hpux11.opt.urls
 create mode 100644 gcc/config/i386/cygming.opt.urls
 create mode 100644 gcc/config/i386/cygwin.opt.urls
 create mode 100644 gcc/config/i386/djgpp.opt.urls
 create mode 100644 gcc/config/i386/i386.opt.urls
 create mode 100644 gcc/config/i386/mingw-w64.opt.urls
 create mode 100644 gcc/config/i386/mingw.opt.urls
 create mode 100644 gcc/config/i386/nto.opt.urls
 create mode 100644 gcc/config/ia64/ia64.opt.urls
 create mode 100644 gcc/config/ia64/ilp32.opt.urls
 create mode 100644 gcc/config/ia64/vms.opt.urls
 create mode 100644 gcc/config/iq2000/iq2000.opt.urls
 create mode 100644 gcc/config/linux-android.opt.urls
 create mode 100644 gcc/config/linux.opt.urls
 create mode 100644 gcc/config/lm32/lm32.opt.urls
 create mode 100644 gcc/config/loongarch/loongarch.opt.urls
 create mode 100644 gcc/config/lynx.opt.urls
 create mode 100644 gcc/config/m32c/m32c.opt.urls
 create mode 100644 gcc/config/m32r/m32r.opt.urls
 create mode 100644 gcc/config/m68k/ieee.opt.urls
 create mode 100644 gcc/config/m68k/m68k-tables.opt.urls
 create mode 100644 gcc/config/m68k/m68k.opt.urls
 create mode 100644 gcc/config/m68k/uclinux.opt.urls
 create mode 100644 gcc/config/mcore/mcore.opt.urls
 create mode 100644 gcc/config/microblaze/microblaze.opt.urls
 create mode 100644 gcc/config/mips/mips-tables.opt.urls
 create mode 100644 gcc/config/mips/mips.opt.urls
 create mode 100644 gcc/config/mips/sde.opt.urls
 create mode 100644 gcc/config/mmix/mmix.opt.urls
 create mode 100644 gcc/config/mn10300/mn10300.opt.urls
 create mode 100644 gcc/config/moxie/moxie.opt.urls
 create mode 100644 gcc/config/msp430/msp430.opt.urls
 create mode 100644 gcc/config/nds32/nds32-elf.opt.urls
 create mode 100644 gcc/config/nds32/nds32-linux.opt.urls
 create mode 100644 gcc/config/nds32/nds32.opt.urls
 create mode 100644 gcc/config/netbsd-elf.opt.urls
 create mode 100644 gcc/config/netbsd.opt.urls
 create mode 100644 gcc/config/nios2/elf.opt.urls
 create mode 100644 gcc/config/nios2/nios2.opt.urls
 create mode 100644 gcc/config/nvptx/nvptx-gen.opt.urls
 create mode 100644 gcc/config/nvptx/nvptx.opt.urls
 create mode 100644 gcc/config/openbsd.opt.urls
 create mode 100644 gcc/config/or1k/elf.opt.urls
 create mode 100644 gcc/config/or1k/or1k.opt.urls
 create mode 100644 gcc/config/pa/pa-hpux.opt.urls
 create mode 100644 gcc/config/pa/pa-hpux1010.opt.urls
 create mode 100644 gcc/config/pa/pa-hpux1111.opt.urls
 create mode 100644 gcc/config/pa/pa-hpux1131.opt.urls
 create mode 100644 gcc/config/pa/pa.opt.urls
 create mode 100644 gcc/config/pa/pa64-hpux.opt.urls
 create mode 100644 gcc/config/pdp11/pdp11.opt.urls
 create mode 100644 gcc/config/pru/pru.opt.urls
 create mode 100644 gcc/config/riscv/riscv.opt.urls
 create mode 100644 gcc/config/rl78/rl78.opt.urls
 create mode 100644 gcc/config/rpath.opt.urls
 create mode 100644 gcc/config/rs6000/476.opt.urls
 create mode 100644 gcc/config/rs6000/aix64.opt.urls
 create mode 100644 gcc/config/rs6000/darwin.opt.urls
 create mode 100644 gcc/config/rs6000/linux64.opt.urls
 create mode 100644 gcc/config/rs6000/rs6000-tables.opt.urls
 create mode 100644 gcc/config/rs6000/rs6000.opt.urls
 create mode 100644 gcc/config/rs6000/sysv4.opt.urls
 create mode 100644 gcc/config/rtems.opt.urls
 create mode 100644 gcc/config/rx/elf.opt.urls
 create mode 100644 gcc/config/rx/rx.opt.urls
 create mode 100644 gcc/config/s390/s390.opt.urls
 create mode 100644 gcc/config/s390/tpf.opt.urls
 create mode 100644 gcc/config/sh/sh.opt.urls
 create mode 100644 gcc/config/sh/superh.opt.urls
 create mode 100644 gcc/config/sol2.opt.urls
 create mode 100644 gcc/config/sparc/long-double-switch.opt.urls
 create mode 100644 gcc/config/sparc/sparc.opt.urls
 create mode 100644 gcc/config/stormy16/stormy16.opt.urls
 create mode 100644 gcc/config/v850/v850.opt.urls
 create mode 100644 gcc/config/vax/elf.opt.urls
 create mode 100644 gcc/config/vax/vax.opt.urls
 create mode 100644 gcc/config/visium/visium.opt.urls
 create mode 100644 gcc/config/vms/vms.opt.urls
 create mode 100644 gcc/config/vxworks-smp.opt.urls
 create mode 100644 gcc/config/vxworks.opt.urls
 create mode 100644 gcc/config/xtensa/elf.opt.urls
 create mode 100644 gcc/config/xtensa/uclinux.opt.urls
 create mode 100644 gcc/config/xtensa/xtensa.opt.urls
 create mode 100644 gcc/d/lang.opt.urls
 create mode 100644 gcc/fortran/lang.opt.urls
 create mode 100644 gcc/go/lang.opt.urls
 create mode 100644 gcc/lto/lang.opt.urls
 create mode 100644 gcc/m2/lang.opt.urls
 create mode 100644 gcc/options-urls-cc-gen.awk
 create mode 100644 gcc/params.opt.urls
 create mode 100755 gcc/regenerate-opt-urls.py
 create mode 100644 gcc/rust/lang.opt.urls

-- 
2.26.3


^ permalink raw reply	[flat|nested] 47+ messages in thread

* [PATCH 1/3] options: add gcc/regenerate-opt-urls.py
  2023-11-10 21:42 [PATCH 0/3] Option handling: add documentation URLs David Malcolm
@ 2023-11-10 21:42 ` David Malcolm
  2023-11-10 21:42 ` [PATCH 2/3] Add generated .opt.urls files David Malcolm
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 47+ messages in thread
From: David Malcolm @ 2023-11-10 21:42 UTC (permalink / raw)
  To: gcc-patches, Joseph Myers; +Cc: David Malcolm

gcc/ChangeLog:
	* doc/options.texi (Option properties): Add UrlSuffix and
	description of regenerate-opt-urls.py.
	* regenerate-opt-urls.py: New file.
---
 gcc/doc/options.texi       |  17 ++
 gcc/regenerate-opt-urls.py | 366 +++++++++++++++++++++++++++++++++++++
 2 files changed, 383 insertions(+)
 create mode 100755 gcc/regenerate-opt-urls.py

diff --git a/gcc/doc/options.texi b/gcc/doc/options.texi
index 715f0a1479c7..1ea4b33bc765 100644
--- a/gcc/doc/options.texi
+++ b/gcc/doc/options.texi
@@ -597,4 +597,21 @@ This warning option corresponds to @code{cpplib.h} warning reason code
 @var{CPP_W_Enum}.  This should only be used for warning options of the
 C-family front-ends.
 
+@item UrlSuffix(@var{url_suffix})
+Adjacent to each human-written @code{.opt} file in the source tree is
+a corresponding file with a @code{.opt.urls} extension.  These files
+contain @code{UrlSuffix} directives giving the ending part of the URL
+for the documentation of the option, such as:
+
+@smallexample
+Wabi-tag
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wabi-tag)
+@end smallexample
+
+These URL suffixes are relative to @code{DOCUMENTATION_ROOT_URL}.
+
+There files are generated from the @code{.opt} files and the generated
+HTML documentation by @code{regenerate-opt-urls.py}, and should be
+regenerated when adding new options.
+
 @end table
diff --git a/gcc/regenerate-opt-urls.py b/gcc/regenerate-opt-urls.py
new file mode 100755
index 000000000000..e2c63c27cbad
--- /dev/null
+++ b/gcc/regenerate-opt-urls.py
@@ -0,0 +1,366 @@
+#!/usr/bin/env python3
+
+# Copyright (C) 2023 Free Software Foundation, Inc.
+#
+# Script to regenerate FOO.opt.urls files for each FOO.opt in the
+# source tree.
+#
+# 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/>.  */
+
+DESCRIPTION = """
+Parses the generated HTML (from "make html") to locate anchors
+for options, then parses the .opt files within the source tree,
+and generates a .opt.urls in the source tree for each .opt file,
+giving URLs for each option, where it can.
+
+Usage (from build/gcc subdirectory):
+  ../../src/gcc/regenerate-opt-urls.py HTML/gcc-14.0.0/ ../../src
+
+To run unit tests:
+  ../../src/gcc/regenerate-opt-urls.py HTML/gcc-14.0.0/ ../../src --unit-test
+"""
+
+import argparse
+import json
+import os
+from pathlib import Path
+from pprint import pprint
+import sys
+import re
+import unittest
+
+def canonicalize_option_name(option_name):
+    if option_name.endswith('='):
+        option_name = option_name[0:-1]
+    return option_name
+
+
+def canonicalize_url_suffix(url_suffix):
+    """
+    Various options have anchors for both the positive and
+    negative form.  For example -Wcpp has both:
+      'gcc/Warning-Options.html#index-Wno-cpp'
+      'gcc/Warning-Options.html#index-Wcpp'
+
+    Return a canonicalized version of the url_suffix that
+    strips out any "no-" prefixes, for use in deduplication.
+    Note that the resulting url suffix might not correspond to
+    an actual anchor in the HTML.
+    """
+    url_suffix = re.sub('index-Wno-', 'index-W', url_suffix)
+    url_suffix = re.sub('index-fno-', 'index-f', url_suffix)
+    url_suffix = re.sub('_003d$', '', url_suffix)
+    url_suffix = re.sub('-([0-9]+)$', '', url_suffix)
+    return url_suffix
+
+
+class Index:
+    def __init__(self):
+        # Map from option name to set of URL suffixes
+        self.entries = {}
+
+    def add_entry(self, matched_text, url_suffix, verbose=False):
+        if 'Attributes.html' in url_suffix:
+            return
+        matched_text = canonicalize_option_name(matched_text)
+        if matched_text in self.entries:
+            # Partition by canonicalized url_suffixes; add the
+            # first url_suffix in each such partition.
+            c_new = canonicalize_url_suffix(url_suffix)
+            for entry in self.entries[matched_text]:
+                c_entry = canonicalize_url_suffix(entry)
+                if c_new == c_entry:
+                    return
+            self.entries[matched_text].add(url_suffix)
+        else:
+            self.entries[matched_text] = set([url_suffix])
+
+    def get_url_suffixes(self, text):
+        text = canonicalize_option_name(text)
+        return self.entries.get(text)
+
+    def parse_option_index(self, input_filename, verbose=False):
+        with open(input_filename) as f:
+            for line in f:
+                self.parse_html_line_option_index(line, verbose)
+
+    def parse_html_line_option_index(self, line, verbose=False):
+        if verbose:
+            print(repr(line))
+
+        # Update for this in the GCC website's bin/preprocess process_html_file:
+        #   | sed -e 's/_002d/-/g' -e 's/_002a/*/g' \
+        line = line.replace('_002d', '-')
+        line = line.replace('_002a', '*')
+
+        # e.g. <a href="Optimize-Options.html#index-fmodulo_002dsched"><code>fmodulo-sched</code></a>
+        m = re.search(r'<a href="([\S]+)"><code>([\S]+)</code></a>', line)
+        if not m:
+            return
+        if verbose:
+            print(m.groups())
+        url_suffix, index_text = m.groups()
+        #print(f'{url_suffix=} {index_text=}')
+        option = '-' + index_text
+
+        # Strip off "no-" prefixes from options
+        if option[:5] == '-Wno-':
+            option = '-W' + option[5:]
+        if option[:5] == '-fno-':
+            option = '-f' + option[5:]
+
+        url_suffix = 'gcc/' + url_suffix
+        self.add_entry(option, url_suffix, verbose)
+
+
+class TestParsingIndex(unittest.TestCase):
+    def test_parse_line(self):
+        index = Index()
+        index.parse_html_line_option_index('<a href="Optimize-Options.html#index-fmodulo_002dsched"><code>fmodulo-sched</code></a>')
+        self.assertEqual(index.get_url_suffixes('-fmodulo-sched'),
+                         {'gcc/Optimize-Options.html#index-fmodulo-sched'})
+
+    def test_negated_flag(self):
+        index = Index()
+        index.parse_html_line_option_index('<tr><td></td><td valign="top"><a href="Static-Analyzer-Options.html#index-fno_002danalyzer"><code>fno-analyzer</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Static-Analyzer-Options.html">Static Analyzer Options</a></td></tr>\n')
+        self.assertEqual(index.get_url_suffixes('-fno-analyzer'), None)
+        self.assertEqual(index.get_url_suffixes('-fanalyzer'),
+                         {'gcc/Static-Analyzer-Options.html#index-fno-analyzer'})
+
+    def test_negated_warning(self):
+        index = Index()
+        index.parse_html_line_option_index('<tr><td></td><td valign="top"><a href="Warning-Options.html#index-Wno_002dalloca"><code>Wno-alloca</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Warning-Options.html">Warning Options</a></td></tr>\n')
+        self.assertEqual(index.get_url_suffixes('-Wno-alloca'),
+                         None)
+        self.assertEqual(index.get_url_suffixes('-Walloca'),
+                         {'gcc/Warning-Options.html#index-Wno-alloca'})
+
+    def test_parse_option_index(self):
+        index = Index()
+        index.parse_option_index(INPUT_HTML_PATH / 'gcc/Option-Index.html')
+        self.assertEqual(index.get_url_suffixes('-fmodulo-sched'),
+                         {'gcc/Optimize-Options.html#index-fmodulo-sched'})
+        self.assertEqual(index.get_url_suffixes('-O'),
+                         {'gcc/Optimize-Options.html#index-O'})
+        self.assertEqual(index.get_url_suffixes('-O0'),
+                         {'gcc/Optimize-Options.html#index-O0'})
+        self.assertEqual(index.get_url_suffixes('-Wframe-larger-than='),
+                         {'gcc/Warning-Options.html#index-Wframe-larger-than_003d'})
+
+        # Check an option with duplicates: '-march'
+        # The url_suffixes will be of the form
+        #  'gcc/HPPA-Options.html#index-march-5',
+        #  'gcc/LoongArch-Options.html#index-march-7',
+        # etc, where the trailing number is, unfortunately, likely to
+        # change from release to release.
+        # Replace them with 'NN' for the purpose of this test:
+        em_arch_url_suffixes = [re.sub('(-[0-9]+)', '-NN', s)
+                                for s in index.get_url_suffixes('-march')]
+        if 0:
+            print(em_arch_url_suffixes)
+        self.assertIn('gcc/ARM-Options.html#index-march-NN', em_arch_url_suffixes)
+        self.assertIn('gcc/x86-Options.html#index-march-NN', em_arch_url_suffixes)
+
+        self.assertEqual(index.get_url_suffixes('-Wcpp'),
+                         {'gcc/Warning-Options.html#index-Wcpp'})
+
+        self.assertNotEqual(index.get_url_suffixes('-march'), None)
+        self.assertNotEqual(index.get_url_suffixes('-march='), None)
+
+class OptFile:
+    def __init__(self, opt_path, rel_path):
+        """
+        Parse a .opt file.  Similar to opt-gather.awk.
+        """
+        self.rel_path = rel_path
+        assert rel_path.startswith('gcc')
+        # self.filename = os.path.basename(path)
+        self.records = []
+        with open(opt_path) as f:
+            flag = 0
+            for line in f:
+                #print(repr(line))
+                if re.match(r'[ \t]*(;|$)', line):
+                    flag = 0
+                else:
+                    if flag == 0:
+                        self.records.append([line])
+                        flag = 1
+                    else:
+                        self.records[-1].append(line)
+
+# Mapping from target-specific page to subdirectory containing .opt files
+# documented on that page.
+
+TARGET_SPECIFIC_PAGES = {
+    'gcc/AArch64-Options.html' : 'gcc/config/aarch64/',
+    'gcc/AMD-GCN-Options.html' : 'gcc/config/gcn/',
+    'gcc/ARC-Options.html' : 'gcc/config/arc/',
+    'gcc/ARC-Options.html' : 'gcc/config/arc/',
+    'gcc/ARM-Options.html' : 'gcc/config/arm/',
+    'gcc/AVR-Options.html' : 'gcc/config/avr/',
+    'gcc/Adapteva-Epiphany-Options.html' : 'gcc/config/epiphany/',
+    'gcc/Blackfin-Options.html' : 'gcc/config/bfin/',
+    'gcc/C-SKY-Options.html' : 'gcc/config/csky/',
+    'gcc/C6X-Options.html' : 'gcc/config/c6x/',
+    'gcc/CRIS-Options.html' : 'gcc/config/cris/',
+    'gcc/DEC-Alpha-Options.html' : 'gcc/config/alpha/',
+    'gcc/FR30-Options.html' : 'gcc/config/fr30/',
+    'gcc/FRV-Options.html' : 'gcc/config/frv/',
+    'gcc/FT32-Options.html' : 'gcc/config/ft32/',
+    'gcc/H8_002f300-Options.html' : 'gcc/config/h8300/',
+    'gcc/HPPA-Options.html' : 'gcc/config/pa/',
+    'gcc/IA-64-Options.html' : 'gcc/config/ia64/',
+    'gcc/LoongArch-Options.html' : 'gcc/config/loongarch/',
+    'gcc/M32C-Options.html' : 'gcc/config/m32c/',
+    'gcc/M32R_002fD-Options.html' : 'gcc/config/m32r/',
+    'gcc/M680x0-Options.html' : 'gcc/config/m68k/',
+    'gcc/MCore-Options.html' : 'gcc/config/mcore/',
+    'gcc/MIPS-Options.html' : 'gcc/config/mips/',
+    'gcc/MMIX-Options.html' : 'gcc/config/mmix/',
+    'gcc/MN10300-Options.html' : 'gcc/config/mn10300/',
+    'gcc/MSP430-Options.html' : 'gcc/config/msp430/',
+    'gcc/MicroBlaze-Options.html' : 'gcc/config/microblaze/',
+    'gcc/Moxie-Options.html' : 'gcc/config/moxie/',
+    'gcc/NDS32-Options.html' : 'gcc/config/nds32/',
+    'gcc/Nios-II-Options.html' : 'gcc/config/nios2/',
+    'gcc/Nvidia-PTX-Options.html' : 'gcc/config/nvptx/',
+    'gcc/OpenRISC-Options.html' : 'gcc/config/or1k/',
+    'gcc/PDP-11-Options.html' : 'gcc/config/pdp11',
+    'gcc/PRU-Options.html' : 'gcc/config/pru/',
+    'gcc/RISC-V-Options.html' : 'gcc/config/riscv/',
+    'gcc/RL78-Options.html' : 'gcc/config/rl78/',
+    'gcc/RS_002f6000-and-PowerPC-Options.html' : 'gcc/config/rs6000/',
+    'gcc/RX-Options.html' : 'gcc/config/rx/',
+    'gcc/SH-Options.html' : 'gcc/config/sh/',
+    'gcc/SPARC-Options.html' : 'gcc/config/sparc/',
+    'gcc/S_002f390-and-zSeries-Options.html' : 'gcc/config/s390',
+    'gcc/V850-Options.html' : 'gcc/config/vax/',
+    'gcc/VAX-Options.html' : 'gcc/config/v850/',
+    'gcc/Visium-Options.html' : 'gcc/config/visium/',
+    'gcc/Xstormy16-Options.html' : 'gcc/config/stormy16/',
+    'gcc/Xtensa-Options.html' : 'gcc/config/xtensa/',
+    'gcc/eBPF-Options.html' : 'gcc/config/bpf/',
+    'gcc/x86-Options.html' : 'gcc/config/i386/',
+}
+
+def target_specific(url_suffix):
+    for page_prefix, subdir in TARGET_SPECIFIC_PAGES.items():
+        if url_suffix.startswith(page_prefix):
+            return subdir
+
+def filter_urlsuffixes_for_optfile(optfile, url_suffixes):
+    """
+    Filter out target-specific options for the wrong target.
+    """
+    result = set()
+    for url_suffix in url_suffixes:
+        subdir = target_specific(url_suffix)
+        if subdir:
+            if 0:
+                print(f'{optfile.rel_path=}')
+                print(f'{url_suffixes=}')
+                print(f'{subdir=}')
+            if not optfile.rel_path.startswith(subdir):
+                # Skip this
+                continue
+        result.add(url_suffix)
+    return result
+
+
+class TestFiltering(unittest.TestCase):
+    def test_target_specific(self):
+        self.assertEqual(target_specific('gcc/Preprocessor-Options.html#index-A'),
+                         None)
+        self.assertEqual(target_specific('gcc/MMIX-Options.html#index-mknuthdiv'),
+                         'gcc/config/mmix/')
+
+    def test_filter(self):
+        s = {'gcc/MIPS-Options.html#index-munaligned-access-1',
+             'gcc/ARM-Options.html#index-munaligned-access'}
+        arm_optfile = OptFile('/dev/null', 'gcc/config/arm/arm.opt')
+        mips_optfile = OptFile('/dev/null', 'gcc/config/mips/mips.opt')
+        self.assertEqual(
+            filter_urlsuffixes_for_optfile(arm_optfile, s),
+            {'gcc/ARM-Options.html#index-munaligned-access'})
+        self.assertEqual(
+            filter_urlsuffixes_for_optfile(mips_optfile, s),
+            {'gcc/MIPS-Options.html#index-munaligned-access-1'})
+
+
+def write_url_file(index, optfile, dstfile):
+    dstfile.write('; Autogenerated by regenerate-opt-urls.py from %s'
+                  ' and generated HTML\n\n'
+                  % optfile.rel_path)
+    for record in optfile.records:
+        opt = '-' + record[0].strip()
+        if 0:
+            dstfile.write('; entry for %s\n' % record)
+            dstfile.write('; opt=%r\n' % opt)
+        url_suffixes = index.get_url_suffixes(opt)
+        if 0:
+            dstfile.write('; url_suffixes=%r\n' % url_suffixes)
+        if url_suffixes:
+            url_suffixes = filter_urlsuffixes_for_optfile(optfile, url_suffixes)
+            if url_suffixes:
+                if len(url_suffixes) == 1:
+                    dstfile.write('%s\n' % opt[1:])
+                    dstfile.write('UrlSuffix(%s)\n' % list(url_suffixes)[0])
+                else:
+                    dstfile.write('; skipping %r due to multiple URLs:\n'
+                                  % opt[1:])
+                    for u in sorted(url_suffixes):
+                        dstfile.write(';   duplicate: %r\n' % u)
+            else:
+                dstfile.write('; skipping %r due to finding no URLs\n'
+                              % opt[1:])
+            dstfile.write('\n')
+
+
+def main(args):
+    index = Index()
+    index.parse_option_index(args.base_html_dir / 'gcc/Option-Index.html')
+    if 0:
+        pprint(index.entries)
+    for root, dirs, files in os.walk(args.src_gcc_dir):
+        for f in files:
+            if f.endswith('.opt'):
+                opt_path = os.path.join(root, f)
+                rel_path = os.path.relpath(opt_path, args.src_gcc_dir)
+                optfile = OptFile(opt_path, rel_path)
+                if 0:
+                    pprint(optfile.path)
+                    pprint(optfile.records)
+                dstname = f + '.urls'
+                urlfile = os.path.join(root, dstname)
+                with open(urlfile, 'w') as dstfile:
+                    write_url_file(index, optfile, dstfile)
+
+
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser(description=DESCRIPTION,
+                                     formatter_class=argparse.RawDescriptionHelpFormatter)
+    parser.add_argument('base_html_dir', type=Path)
+    parser.add_argument('src_gcc_dir', type=Path)
+    parser.add_argument('--unit-test', action='store_true')
+    args = parser.parse_args()
+
+    if args.unit_test:
+        INPUT_HTML_PATH = args.base_html_dir
+        unittest.main(argv=[sys.argv[0], '-v'])
+    else:
+        main(args)
-- 
2.26.3


^ permalink raw reply	[flat|nested] 47+ messages in thread

* [PATCH 2/3] Add generated .opt.urls files
  2023-11-10 21:42 [PATCH 0/3] Option handling: add documentation URLs David Malcolm
  2023-11-10 21:42 ` [PATCH 1/3] options: add gcc/regenerate-opt-urls.py David Malcolm
@ 2023-11-10 21:42 ` David Malcolm
  2023-11-12 10:56   ` Iain Buclaw
  2023-11-13 13:11   ` Marc Poulhiès
  2023-11-10 21:42 ` [PATCH 3/3] diagnostics: use the .opt.urls files to urlify quoted text David Malcolm
  2023-11-14  0:12 ` [PATCH 0/3] Option handling: add documentation URLs Joseph Myers
  3 siblings, 2 replies; 47+ messages in thread
From: David Malcolm @ 2023-11-10 21:42 UTC (permalink / raw)
  To: gcc-patches, Joseph Myers; +Cc: David Malcolm

gcc/ada/ChangeLog:
	* gcc-interface/lang.opt.urls: New file, autogenerated by
	regenerate-opt-urls.py.

gcc/analyzer/ChangeLog:
	* analyzer.opt.urls: New file, autogenerated by
	regenerate-opt-urls.py.

gcc/c-family/ChangeLog:
	* c.opt.urls: New file, autogenerated by regenerate-opt-urls.py.

gcc/ChangeLog:
	* common.opt.urls: New file, autogenerated by
	regenerate-opt-urls.py.
	* config/aarch64/aarch64.opt.urls: Likewise.
	* config/alpha/alpha.opt.urls: Likewise.
	* config/alpha/elf.opt.urls: Likewise.
	* config/arc/arc-tables.opt.urls: Likewise.
	* config/arc/arc.opt.urls: Likewise.
	* config/arm/arm-tables.opt.urls: Likewise.
	* config/arm/arm.opt.urls: Likewise.
	* config/arm/vxworks.opt.urls: Likewise.
	* config/avr/avr.opt.urls: Likewise.
	* config/bpf/bpf.opt.urls: Likewise.
	* config/c6x/c6x-tables.opt.urls: Likewise.
	* config/c6x/c6x.opt.urls: Likewise.
	* config/cris/cris.opt.urls: Likewise.
	* config/cris/elf.opt.urls: Likewise.
	* config/csky/csky.opt.urls: Likewise.
	* config/csky/csky_tables.opt.urls: Likewise.
	* config/darwin.opt.urls: Likewise.
	* config/dragonfly.opt.urls: Likewise.
	* config/epiphany/epiphany.opt.urls: Likewise.
	* config/fr30/fr30.opt.urls: Likewise.
	* config/freebsd.opt.urls: Likewise.
	* config/frv/frv.opt.urls: Likewise.
	* config/ft32/ft32.opt.urls: Likewise.
	* config/fused-madd.opt.urls: Likewise.
	* config/g.opt.urls: Likewise.
	* config/gcn/gcn.opt.urls: Likewise.
	* config/gnu-user.opt.urls: Likewise.
	* config/h8300/h8300.opt.urls: Likewise.
	* config/hpux11.opt.urls: Likewise.
	* config/i386/cygming.opt.urls: Likewise.
	* config/i386/cygwin.opt.urls: Likewise.
	* config/i386/djgpp.opt.urls: Likewise.
	* config/i386/i386.opt.urls: Likewise.
	* config/i386/mingw-w64.opt.urls: Likewise.
	* config/i386/mingw.opt.urls: Likewise.
	* config/i386/nto.opt.urls: Likewise.
	* config/ia64/ia64.opt.urls: Likewise.
	* config/ia64/ilp32.opt.urls: Likewise.
	* config/ia64/vms.opt.urls: Likewise.
	* config/iq2000/iq2000.opt.urls: Likewise.
	* config/linux-android.opt.urls: Likewise.
	* config/linux.opt.urls: Likewise.
	* config/lm32/lm32.opt.urls: Likewise.
	* config/loongarch/loongarch.opt.urls: Likewise.
	* config/lynx.opt.urls: Likewise.
	* config/m32c/m32c.opt.urls: Likewise.
	* config/m32r/m32r.opt.urls: Likewise.
	* config/m68k/ieee.opt.urls: Likewise.
	* config/m68k/m68k-tables.opt.urls: Likewise.
	* config/m68k/m68k.opt.urls: Likewise.
	* config/m68k/uclinux.opt.urls: Likewise.
	* config/mcore/mcore.opt.urls: Likewise.
	* config/microblaze/microblaze.opt.urls: Likewise.
	* config/mips/mips-tables.opt.urls: Likewise.
	* config/mips/mips.opt.urls: Likewise.
	* config/mips/sde.opt.urls: Likewise.
	* config/mmix/mmix.opt.urls: Likewise.
	* config/mn10300/mn10300.opt.urls: Likewise.
	* config/moxie/moxie.opt.urls: Likewise.
	* config/msp430/msp430.opt.urls: Likewise.
	* config/nds32/nds32-elf.opt.urls: Likewise.
	* config/nds32/nds32-linux.opt.urls: Likewise.
	* config/nds32/nds32.opt.urls: Likewise.
	* config/netbsd-elf.opt.urls: Likewise.
	* config/netbsd.opt.urls: Likewise.
	* config/nios2/elf.opt.urls: Likewise.
	* config/nios2/nios2.opt.urls: Likewise.
	* config/nvptx/nvptx-gen.opt.urls: Likewise.
	* config/nvptx/nvptx.opt.urls: Likewise.
	* config/openbsd.opt.urls: Likewise.
	* config/or1k/elf.opt.urls: Likewise.
	* config/or1k/or1k.opt.urls: Likewise.
	* config/pa/pa-hpux.opt.urls: Likewise.
	* config/pa/pa-hpux1010.opt.urls: Likewise.
	* config/pa/pa-hpux1111.opt.urls: Likewise.
	* config/pa/pa-hpux1131.opt.urls: Likewise.
	* config/pa/pa.opt.urls: Likewise.
	* config/pa/pa64-hpux.opt.urls: Likewise.
	* config/pdp11/pdp11.opt.urls: Likewise.
	* config/pru/pru.opt.urls: Likewise.
	* config/riscv/riscv.opt.urls: Likewise.
	* config/rl78/rl78.opt.urls: Likewise.
	* config/rpath.opt.urls: Likewise.
	* config/rs6000/476.opt.urls: Likewise.
	* config/rs6000/aix64.opt.urls: Likewise.
	* config/rs6000/darwin.opt.urls: Likewise.
	* config/rs6000/linux64.opt.urls: Likewise.
	* config/rs6000/rs6000-tables.opt.urls: Likewise.
	* config/rs6000/rs6000.opt.urls: Likewise.
	* config/rs6000/sysv4.opt.urls: Likewise.
	* config/rtems.opt.urls: Likewise.
	* config/rx/elf.opt.urls: Likewise.
	* config/rx/rx.opt.urls: Likewise.
	* config/s390/s390.opt.urls: Likewise.
	* config/s390/tpf.opt.urls: Likewise.
	* config/sh/sh.opt.urls: Likewise.
	* config/sh/superh.opt.urls: Likewise.
	* config/sol2.opt.urls: Likewise.
	* config/sparc/long-double-switch.opt.urls: Likewise.
	* config/sparc/sparc.opt.urls: Likewise.
	* config/stormy16/stormy16.opt.urls: Likewise.
	* config/v850/v850.opt.urls: Likewise.
	* config/vax/elf.opt.urls: Likewise.
	* config/vax/vax.opt.urls: Likewise.
	* config/visium/visium.opt.urls: Likewise.
	* config/vms/vms.opt.urls: Likewise.
	* config/vxworks-smp.opt.urls: Likewise.
	* config/vxworks.opt.urls: Likewise.
	* config/xtensa/elf.opt.urls: Likewise.
	* config/xtensa/uclinux.opt.urls: Likewise.
	* config/xtensa/xtensa.opt.urls: Likewise.

gcc/d/ChangeLog:
	* lang.opt.urls: New file, autogenerated by
	regenerate-opt-urls.py.

gcc/fortran/ChangeLog:
	* lang.opt.urls: New file, autogenerated by
	regenerate-opt-urls.py.

gcc/go/ChangeLog:
	* lang.opt.urls: New file, autogenerated by
	regenerate-opt-urls.py.

gcc/lto/ChangeLog:
	* lang.opt.urls: New file, autogenerated by
	regenerate-opt-urls.py.

gcc/m2/ChangeLog:
	* lang.opt.urls: New file, autogenerated by
	regenerate-opt-urls.py.

gcc/ChangeLog:
	* params.opt.urls: New file, autogenerated by
	regenerate-opt-urls.py.

gcc/rust/ChangeLog:
	* lang.opt.urls: New file, autogenerated by
	regenerate-opt-urls.py.
---
 gcc/ada/gcc-interface/lang.opt.urls          |   28 +
 gcc/analyzer/analyzer.opt.urls               |  206 ++
 gcc/c-family/c.opt.urls                      | 1404 ++++++++++++++
 gcc/common.opt.urls                          | 1823 ++++++++++++++++++
 gcc/config/aarch64/aarch64.opt.urls          |   84 +
 gcc/config/alpha/alpha.opt.urls              |   76 +
 gcc/config/alpha/elf.opt.urls                |    2 +
 gcc/config/arc/arc-tables.opt.urls           |    2 +
 gcc/config/arc/arc.opt.urls                  |  260 +++
 gcc/config/arm/arm-tables.opt.urls           |    2 +
 gcc/config/arm/arm.opt.urls                  |  149 ++
 gcc/config/arm/vxworks.opt.urls              |    2 +
 gcc/config/avr/avr.opt.urls                  |   71 +
 gcc/config/bfin/bfin.opt.urls                |   61 +
 gcc/config/bpf/bpf.opt.urls                  |   35 +
 gcc/config/c6x/c6x-tables.opt.urls           |    2 +
 gcc/config/c6x/c6x.opt.urls                  |   18 +
 gcc/config/cris/cris.opt.urls                |   65 +
 gcc/config/cris/elf.opt.urls                 |    8 +
 gcc/config/csky/csky.opt.urls                |  104 +
 gcc/config/csky/csky_tables.opt.urls         |    2 +
 gcc/config/darwin.opt.urls                   |  221 +++
 gcc/config/dragonfly.opt.urls                |    9 +
 gcc/config/epiphany/epiphany.opt.urls        |   52 +
 gcc/config/fr30/fr30.opt.urls                |    8 +
 gcc/config/freebsd.opt.urls                  |    9 +
 gcc/config/frv/frv.opt.urls                  |  111 ++
 gcc/config/ft32/ft32.opt.urls                |   20 +
 gcc/config/fused-madd.opt.urls               |    4 +
 gcc/config/g.opt.urls                        |    5 +
 gcc/config/gcn/gcn.opt.urls                  |   23 +
 gcc/config/gnu-user.opt.urls                 |    9 +
 gcc/config/h8300/h8300.opt.urls              |   29 +
 gcc/config/hpux11.opt.urls                   |    6 +
 gcc/config/i386/cygming.opt.urls             |   30 +
 gcc/config/i386/cygwin.opt.urls              |    6 +
 gcc/config/i386/djgpp.opt.urls               |    2 +
 gcc/config/i386/i386.opt.urls                |  602 ++++++
 gcc/config/i386/mingw-w64.opt.urls           |    5 +
 gcc/config/i386/mingw.opt.urls               |   12 +
 gcc/config/i386/nto.opt.urls                 |    5 +
 gcc/config/ia64/ia64.opt.urls                |  122 ++
 gcc/config/ia64/ilp32.opt.urls               |    8 +
 gcc/config/ia64/vms.opt.urls                 |    2 +
 gcc/config/iq2000/iq2000.opt.urls            |   14 +
 gcc/config/linux-android.opt.urls            |   11 +
 gcc/config/linux.opt.urls                    |   14 +
 gcc/config/lm32/lm32.opt.urls                |   14 +
 gcc/config/loongarch/loongarch.opt.urls      |   60 +
 gcc/config/lynx.opt.urls                     |    5 +
 gcc/config/m32c/m32c.opt.urls                |    8 +
 gcc/config/m32r/m32r.opt.urls                |   27 +
 gcc/config/m68k/ieee.opt.urls                |    4 +
 gcc/config/m68k/m68k-tables.opt.urls         |    2 +
 gcc/config/m68k/m68k.opt.urls                |  107 +
 gcc/config/m68k/uclinux.opt.urls             |    2 +
 gcc/config/mcore/mcore.opt.urls              |   38 +
 gcc/config/microblaze/microblaze.opt.urls    |   59 +
 gcc/config/mips/mips-tables.opt.urls         |    2 +
 gcc/config/mips/mips.opt.urls                |  269 +++
 gcc/config/mips/sde.opt.urls                 |    2 +
 gcc/config/mmix/mmix.opt.urls                |   44 +
 gcc/config/mn10300/mn10300.opt.urls          |   32 +
 gcc/config/moxie/moxie.opt.urls              |   14 +
 gcc/config/msp430/msp430.opt.urls            |   53 +
 gcc/config/nds32/nds32-elf.opt.urls          |    5 +
 gcc/config/nds32/nds32-linux.opt.urls        |    5 +
 gcc/config/nds32/nds32.opt.urls              |   57 +
 gcc/config/netbsd-elf.opt.urls               |    5 +
 gcc/config/netbsd.opt.urls                   |    6 +
 gcc/config/nios2/elf.opt.urls                |   14 +
 gcc/config/nios2/nios2.opt.urls              |   50 +
 gcc/config/nvptx/nvptx-gen.opt.urls          |    2 +
 gcc/config/nvptx/nvptx.opt.urls              |   29 +
 gcc/config/openbsd.opt.urls                  |    6 +
 gcc/config/or1k/elf.opt.urls                 |    8 +
 gcc/config/or1k/or1k.opt.urls                |   46 +
 gcc/config/pa/pa-hpux.opt.urls               |   11 +
 gcc/config/pa/pa-hpux1010.opt.urls           |    2 +
 gcc/config/pa/pa-hpux1111.opt.urls           |    2 +
 gcc/config/pa/pa-hpux1131.opt.urls           |    2 +
 gcc/config/pa/pa.opt.urls                    |   71 +
 gcc/config/pa/pa64-hpux.opt.urls             |    8 +
 gcc/config/pdp11/pdp11.opt.urls              |   41 +
 gcc/config/pru/pru.opt.urls                  |   17 +
 gcc/config/riscv/riscv.opt.urls              |   88 +
 gcc/config/rl78/rl78.opt.urls                |   31 +
 gcc/config/rpath.opt.urls                    |    2 +
 gcc/config/rs6000/476.opt.urls               |    2 +
 gcc/config/rs6000/aix64.opt.urls             |   23 +
 gcc/config/rs6000/darwin.opt.urls            |   14 +
 gcc/config/rs6000/linux64.opt.urls           |    4 +
 gcc/config/rs6000/rs6000-tables.opt.urls     |    2 +
 gcc/config/rs6000/rs6000.opt.urls            |  214 ++
 gcc/config/rs6000/sysv4.opt.urls             |   87 +
 gcc/config/rtems.opt.urls                    |    6 +
 gcc/config/rx/elf.opt.urls                   |   14 +
 gcc/config/rx/rx.opt.urls                    |   54 +
 gcc/config/s390/s390.opt.urls                |   92 +
 gcc/config/s390/tpf.opt.urls                 |    8 +
 gcc/config/sh/sh.opt.urls                    |  174 ++
 gcc/config/sh/superh.opt.urls                |    4 +
 gcc/config/sol2.opt.urls                     |   21 +
 gcc/config/sparc/long-double-switch.opt.urls |    6 +
 gcc/config/sparc/sparc.opt.urls              |  108 ++
 gcc/config/stormy16/stormy16.opt.urls        |    5 +
 gcc/config/v850/v850.opt.urls                |   60 +
 gcc/config/vax/elf.opt.urls                  |    2 +
 gcc/config/vax/vax.opt.urls                  |   10 +
 gcc/config/visium/visium.opt.urls            |   29 +
 gcc/config/vms/vms.opt.urls                  |    8 +
 gcc/config/vxworks-smp.opt.urls              |    5 +
 gcc/config/vxworks.opt.urls                  |   20 +
 gcc/config/xtensa/elf.opt.urls               |    5 +
 gcc/config/xtensa/uclinux.opt.urls           |    2 +
 gcc/config/xtensa/xtensa.opt.urls            |   37 +
 gcc/d/lang.opt.urls                          |   95 +
 gcc/fortran/lang.opt.urls                    |  153 ++
 gcc/go/lang.opt.urls                         |   15 +
 gcc/lto/lang.opt.urls                        |    8 +
 gcc/m2/lang.opt.urls                         |  110 ++
 gcc/params.opt.urls                          |    2 +
 gcc/rust/lang.opt.urls                       |   27 +
 123 files changed, 8419 insertions(+)
 create mode 100644 gcc/ada/gcc-interface/lang.opt.urls
 create mode 100644 gcc/analyzer/analyzer.opt.urls
 create mode 100644 gcc/c-family/c.opt.urls
 create mode 100644 gcc/common.opt.urls
 create mode 100644 gcc/config/aarch64/aarch64.opt.urls
 create mode 100644 gcc/config/alpha/alpha.opt.urls
 create mode 100644 gcc/config/alpha/elf.opt.urls
 create mode 100644 gcc/config/arc/arc-tables.opt.urls
 create mode 100644 gcc/config/arc/arc.opt.urls
 create mode 100644 gcc/config/arm/arm-tables.opt.urls
 create mode 100644 gcc/config/arm/arm.opt.urls
 create mode 100644 gcc/config/arm/vxworks.opt.urls
 create mode 100644 gcc/config/avr/avr.opt.urls
 create mode 100644 gcc/config/bfin/bfin.opt.urls
 create mode 100644 gcc/config/bpf/bpf.opt.urls
 create mode 100644 gcc/config/c6x/c6x-tables.opt.urls
 create mode 100644 gcc/config/c6x/c6x.opt.urls
 create mode 100644 gcc/config/cris/cris.opt.urls
 create mode 100644 gcc/config/cris/elf.opt.urls
 create mode 100644 gcc/config/csky/csky.opt.urls
 create mode 100644 gcc/config/csky/csky_tables.opt.urls
 create mode 100644 gcc/config/darwin.opt.urls
 create mode 100644 gcc/config/dragonfly.opt.urls
 create mode 100644 gcc/config/epiphany/epiphany.opt.urls
 create mode 100644 gcc/config/fr30/fr30.opt.urls
 create mode 100644 gcc/config/freebsd.opt.urls
 create mode 100644 gcc/config/frv/frv.opt.urls
 create mode 100644 gcc/config/ft32/ft32.opt.urls
 create mode 100644 gcc/config/fused-madd.opt.urls
 create mode 100644 gcc/config/g.opt.urls
 create mode 100644 gcc/config/gcn/gcn.opt.urls
 create mode 100644 gcc/config/gnu-user.opt.urls
 create mode 100644 gcc/config/h8300/h8300.opt.urls
 create mode 100644 gcc/config/hpux11.opt.urls
 create mode 100644 gcc/config/i386/cygming.opt.urls
 create mode 100644 gcc/config/i386/cygwin.opt.urls
 create mode 100644 gcc/config/i386/djgpp.opt.urls
 create mode 100644 gcc/config/i386/i386.opt.urls
 create mode 100644 gcc/config/i386/mingw-w64.opt.urls
 create mode 100644 gcc/config/i386/mingw.opt.urls
 create mode 100644 gcc/config/i386/nto.opt.urls
 create mode 100644 gcc/config/ia64/ia64.opt.urls
 create mode 100644 gcc/config/ia64/ilp32.opt.urls
 create mode 100644 gcc/config/ia64/vms.opt.urls
 create mode 100644 gcc/config/iq2000/iq2000.opt.urls
 create mode 100644 gcc/config/linux-android.opt.urls
 create mode 100644 gcc/config/linux.opt.urls
 create mode 100644 gcc/config/lm32/lm32.opt.urls
 create mode 100644 gcc/config/loongarch/loongarch.opt.urls
 create mode 100644 gcc/config/lynx.opt.urls
 create mode 100644 gcc/config/m32c/m32c.opt.urls
 create mode 100644 gcc/config/m32r/m32r.opt.urls
 create mode 100644 gcc/config/m68k/ieee.opt.urls
 create mode 100644 gcc/config/m68k/m68k-tables.opt.urls
 create mode 100644 gcc/config/m68k/m68k.opt.urls
 create mode 100644 gcc/config/m68k/uclinux.opt.urls
 create mode 100644 gcc/config/mcore/mcore.opt.urls
 create mode 100644 gcc/config/microblaze/microblaze.opt.urls
 create mode 100644 gcc/config/mips/mips-tables.opt.urls
 create mode 100644 gcc/config/mips/mips.opt.urls
 create mode 100644 gcc/config/mips/sde.opt.urls
 create mode 100644 gcc/config/mmix/mmix.opt.urls
 create mode 100644 gcc/config/mn10300/mn10300.opt.urls
 create mode 100644 gcc/config/moxie/moxie.opt.urls
 create mode 100644 gcc/config/msp430/msp430.opt.urls
 create mode 100644 gcc/config/nds32/nds32-elf.opt.urls
 create mode 100644 gcc/config/nds32/nds32-linux.opt.urls
 create mode 100644 gcc/config/nds32/nds32.opt.urls
 create mode 100644 gcc/config/netbsd-elf.opt.urls
 create mode 100644 gcc/config/netbsd.opt.urls
 create mode 100644 gcc/config/nios2/elf.opt.urls
 create mode 100644 gcc/config/nios2/nios2.opt.urls
 create mode 100644 gcc/config/nvptx/nvptx-gen.opt.urls
 create mode 100644 gcc/config/nvptx/nvptx.opt.urls
 create mode 100644 gcc/config/openbsd.opt.urls
 create mode 100644 gcc/config/or1k/elf.opt.urls
 create mode 100644 gcc/config/or1k/or1k.opt.urls
 create mode 100644 gcc/config/pa/pa-hpux.opt.urls
 create mode 100644 gcc/config/pa/pa-hpux1010.opt.urls
 create mode 100644 gcc/config/pa/pa-hpux1111.opt.urls
 create mode 100644 gcc/config/pa/pa-hpux1131.opt.urls
 create mode 100644 gcc/config/pa/pa.opt.urls
 create mode 100644 gcc/config/pa/pa64-hpux.opt.urls
 create mode 100644 gcc/config/pdp11/pdp11.opt.urls
 create mode 100644 gcc/config/pru/pru.opt.urls
 create mode 100644 gcc/config/riscv/riscv.opt.urls
 create mode 100644 gcc/config/rl78/rl78.opt.urls
 create mode 100644 gcc/config/rpath.opt.urls
 create mode 100644 gcc/config/rs6000/476.opt.urls
 create mode 100644 gcc/config/rs6000/aix64.opt.urls
 create mode 100644 gcc/config/rs6000/darwin.opt.urls
 create mode 100644 gcc/config/rs6000/linux64.opt.urls
 create mode 100644 gcc/config/rs6000/rs6000-tables.opt.urls
 create mode 100644 gcc/config/rs6000/rs6000.opt.urls
 create mode 100644 gcc/config/rs6000/sysv4.opt.urls
 create mode 100644 gcc/config/rtems.opt.urls
 create mode 100644 gcc/config/rx/elf.opt.urls
 create mode 100644 gcc/config/rx/rx.opt.urls
 create mode 100644 gcc/config/s390/s390.opt.urls
 create mode 100644 gcc/config/s390/tpf.opt.urls
 create mode 100644 gcc/config/sh/sh.opt.urls
 create mode 100644 gcc/config/sh/superh.opt.urls
 create mode 100644 gcc/config/sol2.opt.urls
 create mode 100644 gcc/config/sparc/long-double-switch.opt.urls
 create mode 100644 gcc/config/sparc/sparc.opt.urls
 create mode 100644 gcc/config/stormy16/stormy16.opt.urls
 create mode 100644 gcc/config/v850/v850.opt.urls
 create mode 100644 gcc/config/vax/elf.opt.urls
 create mode 100644 gcc/config/vax/vax.opt.urls
 create mode 100644 gcc/config/visium/visium.opt.urls
 create mode 100644 gcc/config/vms/vms.opt.urls
 create mode 100644 gcc/config/vxworks-smp.opt.urls
 create mode 100644 gcc/config/vxworks.opt.urls
 create mode 100644 gcc/config/xtensa/elf.opt.urls
 create mode 100644 gcc/config/xtensa/uclinux.opt.urls
 create mode 100644 gcc/config/xtensa/xtensa.opt.urls
 create mode 100644 gcc/d/lang.opt.urls
 create mode 100644 gcc/fortran/lang.opt.urls
 create mode 100644 gcc/go/lang.opt.urls
 create mode 100644 gcc/lto/lang.opt.urls
 create mode 100644 gcc/m2/lang.opt.urls
 create mode 100644 gcc/params.opt.urls
 create mode 100644 gcc/rust/lang.opt.urls

diff --git a/gcc/ada/gcc-interface/lang.opt.urls b/gcc/ada/gcc-interface/lang.opt.urls
new file mode 100644
index 000000000000..e24210bcb12a
--- /dev/null
+++ b/gcc/ada/gcc-interface/lang.opt.urls
@@ -0,0 +1,28 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/ada/gcc-interface/lang.opt and generated HTML
+
+I
+UrlSuffix(gcc/Directory-Options.html#index-I)
+
+; skipping 'Wall' due to multiple URLs:
+;   duplicate: 'gcc/Standard-Libraries.html#index-Wall-1'
+;   duplicate: 'gcc/Warning-Options.html#index-Wall'
+
+nostdinc
+UrlSuffix(gcc/Directory-Options.html#index-nostdinc)
+
+nostdlib
+UrlSuffix(gcc/Link-Options.html#index-nostdlib)
+
+; skipping 'fshort-enums' due to multiple URLs:
+;   duplicate: 'gcc/Code-Gen-Options.html#index-fshort-enums'
+;   duplicate: 'gcc/Non-bugs.html#index-fshort-enums-3'
+;   duplicate: 'gcc/Structures-unions-enumerations-and-bit-fields-implementation.html#index-fshort-enums-1'
+
+; skipping 'fsigned-char' due to multiple URLs:
+;   duplicate: 'gcc/C-Dialect-Options.html#index-fsigned-char'
+;   duplicate: 'gcc/Characters-implementation.html#index-fsigned-char-1'
+
+; skipping 'funsigned-char' due to multiple URLs:
+;   duplicate: 'gcc/C-Dialect-Options.html#index-funsigned-char'
+;   duplicate: 'gcc/Characters-implementation.html#index-funsigned-char-1'
+
diff --git a/gcc/analyzer/analyzer.opt.urls b/gcc/analyzer/analyzer.opt.urls
new file mode 100644
index 000000000000..9f7d33ff434c
--- /dev/null
+++ b/gcc/analyzer/analyzer.opt.urls
@@ -0,0 +1,206 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/analyzer/analyzer.opt and generated HTML
+
+Wanalyzer-allocation-size
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-allocation-size)
+
+Wanalyzer-deref-before-check
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-deref-before-check)
+
+Wanalyzer-double-fclose
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-double-fclose)
+
+Wanalyzer-double-free
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-double-free)
+
+Wanalyzer-exposure-through-output-file
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-exposure-through-output-file)
+
+Wanalyzer-exposure-through-uninit-copy
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-exposure-through-uninit-copy)
+
+Wanalyzer-fd-access-mode-mismatch
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-access-mode-mismatch)
+
+Wanalyzer-fd-double-close
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-double-close)
+
+Wanalyzer-fd-leak
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-leak)
+
+Wanalyzer-fd-phase-mismatch
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-phase-mismatch)
+
+Wanalyzer-fd-type-mismatch
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-type-mismatch)
+
+Wanalyzer-fd-use-after-close
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-use-after-close)
+
+Wanalyzer-fd-use-without-check
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-use-without-check)
+
+Wanalyzer-file-leak
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-file-leak)
+
+Wanalyzer-free-of-non-heap
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-free-of-non-heap)
+
+Wanalyzer-imprecise-fp-arithmetic
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-imprecise-fp-arithmetic)
+
+Wanalyzer-infinite-recursion
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-infinite-recursion)
+
+Wanalyzer-jump-through-null
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-jump-through-null)
+
+Wanalyzer-malloc-leak
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-malloc-leak)
+
+Wanalyzer-mismatching-deallocation
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-mismatching-deallocation)
+
+Wanalyzer-out-of-bounds
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-out-of-bounds)
+
+Wanalyzer-overlapping-buffers
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-overlapping-buffers)
+
+Wanalyzer-possible-null-argument
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-possible-null-argument)
+
+Wanalyzer-possible-null-dereference
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-possible-null-dereference)
+
+Wanalyzer-unsafe-call-within-signal-handler
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-unsafe-call-within-signal-handler)
+
+Wanalyzer-null-argument
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-null-argument)
+
+Wanalyzer-null-dereference
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-null-dereference)
+
+Wanalyzer-putenv-of-auto-var
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-putenv-of-auto-var)
+
+Wanalyzer-shift-count-negative
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-shift-count-negative)
+
+Wanalyzer-shift-count-overflow
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-shift-count-overflow)
+
+Wanalyzer-stale-setjmp-buffer
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-stale-setjmp-buffer)
+
+Wanalyzer-tainted-allocation-size
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-allocation-size)
+
+Wanalyzer-tainted-array-index
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-array-index)
+
+Wanalyzer-tainted-assertion
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-assertion)
+
+Wanalyzer-tainted-divisor
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-divisor)
+
+Wanalyzer-tainted-offset
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-offset)
+
+Wanalyzer-tainted-size
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-size)
+
+Wanalyzer-use-after-free
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-use-after-free)
+
+Wanalyzer-use-of-pointer-in-stale-stack-frame
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-use-of-pointer-in-stale-stack-frame)
+
+Wanalyzer-va-arg-type-mismatch
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-va-arg-type-mismatch)
+
+Wanalyzer-va-list-exhausted
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-va-list-exhausted)
+
+Wanalyzer-va-list-leak
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-va-list-leak)
+
+Wanalyzer-va-list-use-after-va-end
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-va-list-use-after-va-end)
+
+Wanalyzer-write-to-const
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-const)
+
+Wanalyzer-write-to-string-literal
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-string-literal)
+
+Wanalyzer-use-of-uninitialized-value
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-use-of-uninitialized-value)
+
+Wanalyzer-too-complex
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-too-complex)
+
+fanalyzer-checker=
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-checker)
+
+fanalyzer-debug-text-art
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-debug-text-art)
+
+fanalyzer-fine-grained
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-fine-grained)
+
+fanalyzer-feasibility
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-feasibility)
+
+fanalyzer-show-duplicate-count
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-show-duplicate-count)
+
+fanalyzer-state-purge
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-state-purge)
+
+fanalyzer-state-merge
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-state-merge)
+
+fanalyzer-suppress-followups
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-suppress-followups)
+
+fanalyzer-transitivity
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-transitivity)
+
+fanalyzer-show-events-in-system-headers
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-show-events-in-system-headers)
+
+fanalyzer-call-summaries
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-call-summaries)
+
+fanalyzer-undo-inlining
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-undo-inlining)
+
+fdump-analyzer
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fdump-analyzer)
+
+fdump-analyzer-stderr
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fdump-analyzer-stderr)
+
+fdump-analyzer-callgraph
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fdump-analyzer-callgraph)
+
+fdump-analyzer-exploded-graph
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fdump-analyzer-exploded-graph)
+
+fdump-analyzer-exploded-paths
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fdump-analyzer-exploded-paths)
+
+fdump-analyzer-json
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fdump-analyzer-json)
+
+fdump-analyzer-state-purge
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fdump-analyzer-state-purge)
+
+fdump-analyzer-supergraph
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fdump-analyzer-supergraph)
+
+fdump-analyzer-untracked
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fdump-analyzer-untracked)
+
diff --git a/gcc/c-family/c.opt.urls b/gcc/c-family/c.opt.urls
new file mode 100644
index 000000000000..0c5ed7f49e4d
--- /dev/null
+++ b/gcc/c-family/c.opt.urls
@@ -0,0 +1,1404 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/c-family/c.opt and generated HTML
+
+A
+UrlSuffix(gcc/Preprocessor-Options.html#index-A)
+
+C
+UrlSuffix(gcc/Preprocessor-Options.html#index-C)
+
+CC
+UrlSuffix(gcc/Preprocessor-Options.html#index-CC)
+
+D
+UrlSuffix(gcc/Preprocessor-Options.html#index-D-1)
+
+; skipping 'E' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-E-1'
+;   duplicate: 'gcc/Overall-Options.html#index-E'
+
+F
+UrlSuffix(gcc/Darwin-Options.html#index-F)
+
+fgimple
+UrlSuffix(gcc/C-Dialect-Options.html#index-fgimple)
+
+H
+UrlSuffix(gcc/Preprocessor-Options.html#index-H)
+
+I
+UrlSuffix(gcc/Directory-Options.html#index-I)
+
+M
+UrlSuffix(gcc/Preprocessor-Options.html#index-M)
+
+MD
+UrlSuffix(gcc/Preprocessor-Options.html#index-MD)
+
+MF
+UrlSuffix(gcc/Preprocessor-Options.html#index-MF)
+
+MG
+UrlSuffix(gcc/Preprocessor-Options.html#index-MG)
+
+MM
+UrlSuffix(gcc/Preprocessor-Options.html#index-MM)
+
+MMD
+UrlSuffix(gcc/Preprocessor-Options.html#index-MMD)
+
+Mno-modules
+UrlSuffix(gcc/Preprocessor-Options.html#index-Mno-modules)
+
+MP
+UrlSuffix(gcc/Preprocessor-Options.html#index-MP)
+
+MQ
+UrlSuffix(gcc/Preprocessor-Options.html#index-MQ)
+
+MT
+UrlSuffix(gcc/Preprocessor-Options.html#index-MT)
+
+fdeps-format=
+UrlSuffix(gcc/C-Dialect-Options.html#index-fdeps-format)
+
+fdeps-file=
+UrlSuffix(gcc/C-Dialect-Options.html#index-fdeps-file)
+
+fdeps-target=
+UrlSuffix(gcc/C-Dialect-Options.html#index-fdeps-target)
+
+P
+UrlSuffix(gcc/Preprocessor-Options.html#index-P)
+
+U
+UrlSuffix(gcc/Preprocessor-Options.html#index-U)
+
+Wabi
+UrlSuffix(gcc/Warning-Options.html#index-Wabi)
+
+Wabi=
+UrlSuffix(gcc/Warning-Options.html#index-Wabi)
+
+Wabi-tag
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wabi-tag)
+
+Wabsolute-value
+UrlSuffix(gcc/Warning-Options.html#index-Wabsolute-value)
+
+Waddress
+UrlSuffix(gcc/Warning-Options.html#index-Waddress)
+
+Waligned-new
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Waligned-new)
+
+Waligned-new=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Waligned-new)
+
+; skipping 'Wall' due to multiple URLs:
+;   duplicate: 'gcc/Standard-Libraries.html#index-Wall-1'
+;   duplicate: 'gcc/Warning-Options.html#index-Wall'
+
+Walloca
+UrlSuffix(gcc/Warning-Options.html#index-Walloca)
+
+Walloc-size-larger-than=
+UrlSuffix(gcc/Warning-Options.html#index-Walloc-size-larger-than_003d)
+
+Walloc-zero
+UrlSuffix(gcc/Warning-Options.html#index-Walloc-zero)
+
+Walloca-larger-than=
+UrlSuffix(gcc/Warning-Options.html#index-Walloca-larger-than_003d)
+
+Warray-bounds=
+UrlSuffix(gcc/Warning-Options.html#index-Warray-bounds)
+
+Warray-compare
+UrlSuffix(gcc/Warning-Options.html#index-Warray-compare)
+
+Warray-parameter
+UrlSuffix(gcc/Warning-Options.html#index-Wno-array-parameter)
+
+Warray-parameter=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-array-parameter)
+
+Wzero-length-bounds
+UrlSuffix(gcc/Warning-Options.html#index-Wzero-length-bounds)
+
+Wassign-intercept
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-Wassign-intercept)
+
+Wbad-function-cast
+UrlSuffix(gcc/Warning-Options.html#index-Wbad-function-cast)
+
+Wbidi-chars
+UrlSuffix(gcc/Warning-Options.html#index-Wbidi-chars)
+
+Wbidi-chars=
+UrlSuffix(gcc/Warning-Options.html#index-Wbidi-chars)
+
+Wbool-compare
+UrlSuffix(gcc/Warning-Options.html#index-Wbool-compare)
+
+Wbool-operation
+UrlSuffix(gcc/Warning-Options.html#index-Wbool-operation)
+
+Wframe-address
+UrlSuffix(gcc/Warning-Options.html#index-Wframe-address)
+
+Wbuiltin-declaration-mismatch
+UrlSuffix(gcc/Warning-Options.html#index-Wbuiltin-declaration-mismatch)
+
+Wbuiltin-macro-redefined
+UrlSuffix(gcc/Warning-Options.html#index-Wbuiltin-macro-redefined)
+
+Wc11-c2x-compat
+UrlSuffix(gcc/Warning-Options.html#index-Wc11-c2x-compat)
+
+Wc90-c99-compat
+UrlSuffix(gcc/Warning-Options.html#index-Wc90-c99-compat)
+
+Wc99-c11-compat
+UrlSuffix(gcc/Warning-Options.html#index-Wc99-c11-compat)
+
+Wc++-compat
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b-compat)
+
+Wc++11-compat
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b11-compat)
+
+Wc++14-compat
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b14-compat)
+
+Wc++17-compat
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b17-compat)
+
+Wc++20-compat
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b20-compat)
+
+Wc++11-extensions
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b11-extensions)
+
+Wc++14-extensions
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b14-extensions)
+
+Wc++17-extensions
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b17-extensions)
+
+Wc++20-extensions
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b20-extensions)
+
+Wc++23-extensions
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b23-extensions)
+
+Wcast-function-type
+UrlSuffix(gcc/Warning-Options.html#index-Wcast-function-type)
+
+Wcast-qual
+UrlSuffix(gcc/Warning-Options.html#index-Wcast-qual)
+
+Wcatch-value
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wcatch-value)
+
+Wcatch-value=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wcatch-value)
+
+Wchar-subscripts
+UrlSuffix(gcc/Warning-Options.html#index-Wchar-subscripts)
+
+Wclobbered
+UrlSuffix(gcc/Warning-Options.html#index-Wclobbered)
+
+Wcomma-subscript
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wcomma-subscript)
+
+Wcomment
+UrlSuffix(gcc/Warning-Options.html#index-Wcomment)
+
+Wcomments
+UrlSuffix(gcc/Warning-Options.html#index-Wcomments)
+
+Wconditionally-supported
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wconditionally-supported)
+
+Wconversion
+UrlSuffix(gcc/Warning-Options.html#index-Wconversion)
+
+Wconversion-null
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wconversion-null)
+
+Wcpp
+UrlSuffix(gcc/Warning-Options.html#index-Wcpp)
+
+Wctad-maybe-unsupported
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wctad-maybe-unsupported)
+
+Wctor-dtor-privacy
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wctor-dtor-privacy)
+
+Wdangling-else
+UrlSuffix(gcc/Warning-Options.html#index-Wdangling-else)
+
+Wdangling-pointer
+UrlSuffix(gcc/Warning-Options.html#index-Wdangling-pointer)
+
+Wdangling-pointer=
+UrlSuffix(gcc/Warning-Options.html#index-Wdangling-pointer)
+
+Wdangling-reference
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wdangling-reference)
+
+Wdate-time
+UrlSuffix(gcc/Warning-Options.html#index-Wdate-time)
+
+Wdeclaration-after-statement
+UrlSuffix(gcc/Warning-Options.html#index-Wdeclaration-after-statement)
+
+Wdelete-incomplete
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wdelete-incomplete)
+
+Wdelete-non-virtual-dtor
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wdelete-non-virtual-dtor)
+
+Wdeprecated
+UrlSuffix(gcc/Warning-Options.html#index-Wdeprecated)
+
+Wdeprecated-copy
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-copy)
+
+Wdeprecated-enum-enum-conversion
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-enum-enum-conversion)
+
+Wdeprecated-enum-float-conversion
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-enum-float-conversion)
+
+Wdesignated-init
+UrlSuffix(gcc/Warning-Options.html#index-Wdesignated-init)
+
+Wdiscarded-array-qualifiers
+UrlSuffix(gcc/Warning-Options.html#index-Wdiscarded-array-qualifiers)
+
+Wdiscarded-qualifiers
+UrlSuffix(gcc/Warning-Options.html#index-Wdiscarded-qualifiers)
+
+Wdiv-by-zero
+UrlSuffix(gcc/Warning-Options.html#index-Wdiv-by-zero)
+
+Wduplicated-branches
+UrlSuffix(gcc/Warning-Options.html#index-Wduplicated-branches)
+
+Wduplicated-cond
+UrlSuffix(gcc/Warning-Options.html#index-Wduplicated-cond)
+
+Weffc++
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Weffc_002b_002b)
+
+Wempty-body
+UrlSuffix(gcc/Warning-Options.html#index-Wempty-body)
+
+Wendif-labels
+UrlSuffix(gcc/Warning-Options.html#index-Wendif-labels)
+
+Wenum-compare
+UrlSuffix(gcc/Warning-Options.html#index-Wenum-compare)
+
+Wenum-conversion
+UrlSuffix(gcc/Warning-Options.html#index-Wenum-conversion)
+
+Wenum-int-mismatch
+UrlSuffix(gcc/Warning-Options.html#index-Wenum-int-mismatch)
+
+Werror
+UrlSuffix(gcc/Warning-Options.html#index-Werror)
+
+Wexceptions
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wexceptions)
+
+Wextra
+UrlSuffix(gcc/Warning-Options.html#index-Wextra)
+
+Wextra-semi
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wextra-semi)
+
+Wfloat-conversion
+UrlSuffix(gcc/Warning-Options.html#index-Wfloat-conversion)
+
+Wfloat-equal
+UrlSuffix(gcc/Warning-Options.html#index-Wfloat-equal)
+
+Wformat
+UrlSuffix(gcc/Warning-Options.html#index-Wformat)
+
+Wformat-contains-nul
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-contains-nul)
+
+Wformat-extra-args
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-extra-args)
+
+Wformat-nonliteral
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-nonliteral)
+
+Wformat-overflow
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-overflow)
+
+Wformat-security
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-security)
+
+Wformat-signedness
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-signedness)
+
+Wformat-truncation
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-truncation)
+
+Wformat-y2k
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-y2k)
+
+Wformat-zero-length
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-zero-length)
+
+Wformat=
+UrlSuffix(gcc/Warning-Options.html#index-Wformat)
+
+Wformat-overflow=
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-overflow)
+
+Wformat-truncation=
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-truncation)
+
+Wflex-array-member-not-at-end
+UrlSuffix(gcc/Warning-Options.html#index-Wflex-array-member-not-at-end)
+
+Wif-not-aligned
+UrlSuffix(gcc/Warning-Options.html#index-Wif-not-aligned)
+
+Wignored-qualifiers
+UrlSuffix(gcc/Warning-Options.html#index-Wignored-qualifiers)
+
+Wignored-attributes
+UrlSuffix(gcc/Warning-Options.html#index-Wignored-attributes)
+
+Winaccessible-base
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Winaccessible-base)
+
+Wincompatible-pointer-types
+UrlSuffix(gcc/Warning-Options.html#index-Wincompatible-pointer-types)
+
+Winfinite-recursion
+UrlSuffix(gcc/Warning-Options.html#index-Winfinite-recursion)
+
+Waddress-of-packed-member
+UrlSuffix(gcc/Warning-Options.html#index-Waddress-of-packed-member)
+
+Winit-self
+UrlSuffix(gcc/Warning-Options.html#index-Winit-self)
+
+Winit-list-lifetime
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Winit-list-lifetime)
+
+Winterference-size
+UrlSuffix(gcc/Warning-Options.html#index-Winterference-size)
+
+Wimplicit
+UrlSuffix(gcc/Warning-Options.html#index-Wimplicit)
+
+Wimplicit-fallthrough=
+UrlSuffix(gcc/Warning-Options.html#index-Wimplicit-fallthrough)
+
+Wdouble-promotion
+UrlSuffix(gcc/Warning-Options.html#index-Wdouble-promotion)
+
+Wexpansion-to-defined
+UrlSuffix(gcc/Warning-Options.html#index-Wexpansion-to-defined)
+
+Wimplicit-function-declaration
+UrlSuffix(gcc/Warning-Options.html#index-Wimplicit-function-declaration)
+
+Wimplicit-int
+UrlSuffix(gcc/Warning-Options.html#index-Wimplicit-int)
+
+Winherited-variadic-ctor
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Winherited-variadic-ctor)
+
+Wint-conversion
+UrlSuffix(gcc/Warning-Options.html#index-Wint-conversion)
+
+Wint-in-bool-context
+UrlSuffix(gcc/Warning-Options.html#index-Wint-in-bool-context)
+
+Wint-to-pointer-cast
+UrlSuffix(gcc/Warning-Options.html#index-Wint-to-pointer-cast)
+
+Winvalid-constexpr
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Winvalid-constexpr)
+
+Winvalid-offsetof
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Winvalid-offsetof)
+
+Winvalid-pch
+UrlSuffix(gcc/Warning-Options.html#index-Winvalid-pch)
+
+Winvalid-utf8
+UrlSuffix(gcc/Warning-Options.html#index-Winvalid-utf8)
+
+Wjump-misses-init
+UrlSuffix(gcc/Warning-Options.html#index-Wjump-misses-init)
+
+Wliteral-suffix
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wliteral-suffix)
+
+Wlogical-op
+UrlSuffix(gcc/Warning-Options.html#index-Wlogical-op)
+
+Wlogical-not-parentheses
+UrlSuffix(gcc/Warning-Options.html#index-Wlogical-not-parentheses)
+
+Wlong-long
+UrlSuffix(gcc/Warning-Options.html#index-Wlong-long)
+
+Wmain
+UrlSuffix(gcc/Warning-Options.html#index-Wmain)
+
+Wmain
+UrlSuffix(gcc/Warning-Options.html#index-Wmain)
+
+Wmemset-transposed-args
+UrlSuffix(gcc/Warning-Options.html#index-Wmemset-transposed-args)
+
+Wmemset-elt-size
+UrlSuffix(gcc/Warning-Options.html#index-Wmemset-elt-size)
+
+Wmisleading-indentation
+UrlSuffix(gcc/Warning-Options.html#index-Wmisleading-indentation)
+
+Wmismatched-dealloc
+UrlSuffix(gcc/Warning-Options.html#index-Wmismatched-dealloc)
+
+Wmismatched-new-delete
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wmismatched-new-delete)
+
+Wmismatched-tags
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wmismatched-tags)
+
+Wmissing-braces
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-braces)
+
+Wmissing-declarations
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-declarations)
+
+Wmissing-field-initializers
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-field-initializers)
+
+Wmissing-requires
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-requires)
+
+Wmissing-template-keyword
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-template-keyword)
+
+Wmultistatement-macros
+UrlSuffix(gcc/Warning-Options.html#index-Wmultistatement-macros)
+
+Wmultiple-inheritance
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wmultiple-inheritance)
+
+Wnamespaces
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wnamespaces)
+
+Wnrvo
+UrlSuffix(gcc/Warning-Options.html#index-Wno-nrvo)
+
+Wpacked-not-aligned
+UrlSuffix(gcc/Warning-Options.html#index-Wno-packed-not-aligned)
+
+Wrange-loop-construct
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-range-loop-construct)
+
+Wredundant-tags
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-redundant-tags)
+
+Wsized-deallocation
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-sized-deallocation)
+
+Wsizeof-pointer-div
+UrlSuffix(gcc/Warning-Options.html#index-Wno-sizeof-pointer-div)
+
+Wsizeof-array-div
+UrlSuffix(gcc/Warning-Options.html#index-Wno-sizeof-array-div)
+
+Wsizeof-pointer-memaccess
+UrlSuffix(gcc/Warning-Options.html#index-Wno-sizeof-pointer-memaccess)
+
+Wsizeof-array-argument
+UrlSuffix(gcc/Warning-Options.html#index-Wno-sizeof-array-argument)
+
+Wstring-compare
+UrlSuffix(gcc/Warning-Options.html#index-Wno-string-compare)
+
+Wstringop-overflow
+UrlSuffix(gcc/Warning-Options.html#index-Wno-stringop-overflow)
+
+Wstringop-overflow=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-stringop-overflow)
+
+Wstringop-overread
+UrlSuffix(gcc/Warning-Options.html#index-Wno-stringop-overread)
+
+Wstringop-truncation
+UrlSuffix(gcc/Warning-Options.html#index-Wno-stringop-truncation)
+
+Wstrict-flex-arrays
+UrlSuffix(gcc/Warning-Options.html#index-Wno-strict-flex-arrays)
+
+Wsuggest-attribute=format
+UrlSuffix(gcc/Warning-Options.html#index-Wno-suggest-attribute_003dformat)
+
+Wsuggest-override
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-suggest-override)
+
+Wswitch
+UrlSuffix(gcc/Warning-Options.html#index-Wno-switch)
+
+Wswitch-default
+UrlSuffix(gcc/Warning-Options.html#index-Wno-switch-default)
+
+Wswitch-enum
+UrlSuffix(gcc/Warning-Options.html#index-Wno-switch-enum)
+
+Wswitch-bool
+UrlSuffix(gcc/Warning-Options.html#index-Wno-switch-bool)
+
+Wswitch-outside-range
+UrlSuffix(gcc/Warning-Options.html#index-Wno-switch-outside-range)
+
+Wtemplates
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-templates)
+
+Wmissing-attributes
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-attributes)
+
+Wmissing-format-attribute
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-format-attribute)
+
+Wmissing-include-dirs
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-include-dirs)
+
+Wmissing-parameter-type
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-parameter-type)
+
+Wmissing-prototypes
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-prototypes)
+
+Wmissing-variable-declarations
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-variable-declarations)
+
+Wmultichar
+UrlSuffix(gcc/Warning-Options.html#index-Wmultichar)
+
+Wnarrowing
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wnarrowing)
+
+Wnested-externs
+UrlSuffix(gcc/Warning-Options.html#index-Wnested-externs)
+
+Wnoexcept
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-noexcept)
+
+Wnoexcept-type
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-noexcept-type)
+
+Wnon-template-friend
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-non-template-friend)
+
+Wclass-conversion
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wclass-conversion)
+
+Wclass-memaccess
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wclass-memaccess)
+
+Wnon-virtual-dtor
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-non-virtual-dtor)
+
+Wnonnull
+UrlSuffix(gcc/Warning-Options.html#index-Wno-nonnull)
+
+Wnonnull
+UrlSuffix(gcc/Warning-Options.html#index-Wno-nonnull)
+
+Wnonnull-compare
+UrlSuffix(gcc/Warning-Options.html#index-Wno-nonnull-compare)
+
+Wnormalized
+UrlSuffix(gcc/Warning-Options.html#index-Wno-normalized)
+
+Wnormalized=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-normalized)
+
+Wobjc-root-class
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-Wobjc-root-class)
+
+Wold-style-cast
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-old-style-cast)
+
+Wold-style-declaration
+UrlSuffix(gcc/Warning-Options.html#index-Wno-old-style-declaration)
+
+Wold-style-definition
+UrlSuffix(gcc/Warning-Options.html#index-Wno-old-style-definition)
+
+Wopenacc-parallelism
+UrlSuffix(gcc/Warning-Options.html#index-Wno-openacc-parallelism)
+
+Wopenmp-simd
+UrlSuffix(gcc/Warning-Options.html#index-Wno-openmp-simd)
+
+Woverlength-strings
+UrlSuffix(gcc/Warning-Options.html#index-Wno-overlength-strings)
+
+Woverloaded-virtual
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-overloaded-virtual)
+
+Woverloaded-virtual=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-overloaded-virtual)
+
+Woverride-init
+UrlSuffix(gcc/Warning-Options.html#index-Wno-override-init)
+
+Woverride-init-side-effects
+UrlSuffix(gcc/Warning-Options.html#index-Wno-override-init-side-effects)
+
+Wpacked-bitfield-compat
+UrlSuffix(gcc/Warning-Options.html#index-Wno-packed-bitfield-compat)
+
+Wparentheses
+UrlSuffix(gcc/Warning-Options.html#index-Wno-parentheses)
+
+Wpedantic
+UrlSuffix(gcc/Warning-Options.html#index-Wno-pedantic)
+
+Wpessimizing-move
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-pessimizing-move)
+
+; skipping 'Wpmf-conversions' due to multiple URLs:
+;   duplicate: 'gcc/Bound-member-functions.html#index-Wno-pmf-conversions-1'
+;   duplicate: 'gcc/C_002b_002b-Dialect-Options.html#index-Wno-pmf-conversions'
+
+; skipping 'Wpointer-arith' due to multiple URLs:
+;   duplicate: 'gcc/Pointer-Arith.html#index-Wpointer-arith-1'
+;   duplicate: 'gcc/Warning-Options.html#index-Wno-pointer-arith'
+
+Wpointer-sign
+UrlSuffix(gcc/Warning-Options.html#index-Wno-pointer-sign)
+
+Wpointer-compare
+UrlSuffix(gcc/Warning-Options.html#index-Wno-pointer-compare)
+
+Wpointer-to-int-cast
+UrlSuffix(gcc/Warning-Options.html#index-Wno-pointer-to-int-cast)
+
+Wpragmas
+UrlSuffix(gcc/Warning-Options.html#index-Wno-pragmas)
+
+Wprio-ctor-dtor
+UrlSuffix(gcc/Warning-Options.html#index-Wno-prio-ctor-dtor)
+
+Wproperty-assign-default
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-Wno-property-assign-default)
+
+Wprotocol
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-Wno-protocol)
+
+Wplacement-new
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-placement-new)
+
+Wplacement-new=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-placement-new)
+
+Wredundant-decls
+UrlSuffix(gcc/Warning-Options.html#index-Wno-redundant-decls)
+
+Wredundant-move
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-redundant-move)
+
+Wregister
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-register)
+
+Wreorder
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-reorder)
+
+Wreturn-type
+UrlSuffix(gcc/Warning-Options.html#index-Wno-return-type)
+
+Wscalar-storage-order
+UrlSuffix(gcc/Warning-Options.html#index-Wno-scalar-storage-order)
+
+Wselector
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-Wno-selector)
+
+Wself-move
+UrlSuffix(gcc/Warning-Options.html#index-Wno-self-move)
+
+Wsequence-point
+UrlSuffix(gcc/Warning-Options.html#index-Wno-sequence-point)
+
+Wshadow-ivar
+UrlSuffix(gcc/Warning-Options.html#index-Wno-shadow-ivar)
+
+Wshift-overflow
+UrlSuffix(gcc/Warning-Options.html#index-Wno-shift-overflow)
+
+Wshift-overflow=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-shift-overflow)
+
+Wshift-count-negative
+UrlSuffix(gcc/Warning-Options.html#index-Wno-shift-count-negative)
+
+Wshift-count-overflow
+UrlSuffix(gcc/Warning-Options.html#index-Wno-shift-count-overflow)
+
+Wshift-negative-value
+UrlSuffix(gcc/Warning-Options.html#index-Wno-shift-negative-value)
+
+Warith-conversion
+UrlSuffix(gcc/Warning-Options.html#index-Warith-conversion)
+
+Wsign-compare
+UrlSuffix(gcc/Warning-Options.html#index-Wno-sign-compare)
+
+Wsign-compare
+UrlSuffix(gcc/Warning-Options.html#index-Wno-sign-compare)
+
+Wsign-conversion
+UrlSuffix(gcc/Warning-Options.html#index-Wno-sign-conversion)
+
+Wsign-promo
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-sign-promo)
+
+Wstrict-null-sentinel
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-strict-null-sentinel)
+
+Wstrict-prototypes
+UrlSuffix(gcc/Warning-Options.html#index-Wno-strict-prototypes)
+
+Wstrict-aliasing=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-strict-aliasing)
+
+Wstrict-overflow=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-strict-overflow)
+
+Wstrict-selector-match
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-Wno-strict-selector-match)
+
+Wsync-nand
+UrlSuffix(gcc/Warning-Options.html#index-Wno-sync-nand)
+
+Wsystem-headers
+UrlSuffix(gcc/Warning-Options.html#index-Wno-system-headers)
+
+Wtautological-compare
+UrlSuffix(gcc/Warning-Options.html#index-Wno-tautological-compare)
+
+Wterminate
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-terminate)
+
+Wtraditional
+UrlSuffix(gcc/Warning-Options.html#index-Wno-traditional)
+
+Wtraditional-conversion
+UrlSuffix(gcc/Warning-Options.html#index-Wno-traditional-conversion)
+
+Wtrigraphs
+UrlSuffix(gcc/Warning-Options.html#index-Wtrigraphs)
+
+Wundeclared-selector
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-Wno-undeclared-selector)
+
+Wundef
+UrlSuffix(gcc/Warning-Options.html#index-Wno-undef)
+
+Wunicode
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unicode)
+
+Wuninitialized
+UrlSuffix(gcc/Warning-Options.html#index-Wno-uninitialized)
+
+Wmaybe-uninitialized
+UrlSuffix(gcc/Warning-Options.html#index-Wmaybe-uninitialized)
+
+Wunknown-pragmas
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unknown-pragmas)
+
+Wunsuffixed-float-constants
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unsuffixed-float-constants)
+
+Wunused
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused)
+
+Wunused-local-typedefs
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-local-typedefs)
+
+Wunused-macros
+UrlSuffix(gcc/Warning-Options.html#index-Wunused-macros)
+
+Wunused-result
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-result)
+
+Wunused-variable
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-variable)
+
+Wunused-const-variable
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-const-variable)
+
+Wunused-const-variable=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-const-variable)
+
+Wuse-after-free=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-use-after-free)
+
+Wvariadic-macros
+UrlSuffix(gcc/Warning-Options.html#index-Wno-variadic-macros)
+
+Wvarargs
+UrlSuffix(gcc/Warning-Options.html#index-Wno-varargs)
+
+Wvexing-parse
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-vexing-parse)
+
+Wvla
+UrlSuffix(gcc/Warning-Options.html#index-Wno-vla)
+
+Wvla-larger-than=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-vla-larger-than)
+
+Wvla-parameter
+UrlSuffix(gcc/Warning-Options.html#index-Wno-vla-parameter)
+
+Wvolatile
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-volatile)
+
+Wvolatile-register-var
+UrlSuffix(gcc/Warning-Options.html#index-Wno-volatile-register-var)
+
+Wvirtual-inheritance
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-virtual-inheritance)
+
+Wvirtual-move-assign
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-virtual-move-assign)
+
+Wwrite-strings
+UrlSuffix(gcc/Warning-Options.html#index-Wno-write-strings)
+
+Wxor-used-as-pow
+UrlSuffix(gcc/Warning-Options.html#index-Wno-xor-used-as-pow)
+
+Wzero-as-null-pointer-constant
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-zero-as-null-pointer-constant)
+
+Wuseless-cast
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-useless-cast)
+
+Wsubobject-linkage
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-subobject-linkage)
+
+Welaborated-enum-base
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Welaborated-enum-base)
+
+Wduplicate-decl-specifier
+UrlSuffix(gcc/Warning-Options.html#index-Wduplicate-decl-specifier)
+
+Wrestrict
+UrlSuffix(gcc/Warning-Options.html#index-Wno-restrict)
+
+; skipping 'ansi' due to multiple URLs:
+;   duplicate: 'gcc/C-Dialect-Options.html#index-ansi-1'
+;   duplicate: 'gcc/Non-bugs.html#index-ansi-3'
+;   duplicate: 'gcc/Other-Builtins.html#index-ansi-2'
+;   duplicate: 'gcc/Standards.html#index-ansi'
+
+; skipping 'd' due to multiple URLs:
+;   duplicate: 'gcc/Developer-Options.html#index-d-1'
+;   duplicate: 'gcc/Preprocessor-Options.html#index-d'
+
+fabi-compat-version=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fabi-compat-version)
+
+faccess-control
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-faccess-control)
+
+fada-spec-parent=
+UrlSuffix(gcc/Overall-Options.html#index-fada-spec-parent)
+
+faligned-new
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-faligned-new)
+
+faligned-new=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-faligned-new)
+
+fasm
+UrlSuffix(gcc/C-Dialect-Options.html#index-fasm)
+
+; skipping 'fbuiltin' due to multiple URLs:
+;   duplicate: 'gcc/C-Dialect-Options.html#index-fbuiltin'
+;   duplicate: 'gcc/Other-Builtins.html#index-fno-builtin-3'
+;   duplicate: 'gcc/Warning-Options.html#index-fno-builtin-1'
+
+fcanonical-system-headers
+UrlSuffix(gcc/Preprocessor-Options.html#index-fno-canonical-system-headers)
+
+fchar8_t
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fchar8_005ft)
+
+fconcepts
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fconcepts)
+
+fconcepts-ts
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fconcepts-ts)
+
+fcond-mismatch
+UrlSuffix(gcc/C-Dialect-Options.html#index-fcond-mismatch)
+
+fconstant-string-class=
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fconstant-string-class)
+
+fconstexpr-depth=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fconstexpr-depth)
+
+fconstexpr-cache-depth=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fconstexpr-cache-depth)
+
+fconstexpr-fp-except
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fconstexpr-fp-except)
+
+fconstexpr-loop-limit=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fconstexpr-loop-limit)
+
+fconstexpr-ops-limit=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fconstexpr-ops-limit)
+
+fcontracts
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fcontracts)
+
+fcontract-assumption-mode=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fcontract-assumption-mode)
+
+fcontract-build-level=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fcontract-build-level)
+
+fcontract-strict-declarations=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fcontract-strict-declarations)
+
+fcontract-mode=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fcontract-mode)
+
+fcontract-continuation-mode=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fcontract-continuation-mode)
+
+fcontract-role=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fcontract-role)
+
+fcoroutines
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fcoroutines)
+
+fdebug-cpp
+UrlSuffix(gcc/Preprocessor-Options.html#index-fdebug-cpp)
+
+fdeclone-ctor-dtor
+UrlSuffix(gcc/Optimize-Options.html#index-fdeclone-ctor-dtor)
+
+fdefault-inline
+UrlSuffix(gcc/Inline.html#index-fno-default-inline)
+
+fdiagnostics-show-template-tree
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-show-template-tree)
+
+fdirectives-only
+UrlSuffix(gcc/Preprocessor-Options.html#index-fdirectives-only)
+
+; skipping 'fdollars-in-identifiers' due to multiple URLs:
+;   duplicate: 'gcc/Interoperation.html#index-fdollars-in-identifiers-1'
+;   duplicate: 'gcc/Preprocessor-Options.html#index-fdollars-in-identifiers'
+
+fmacro-prefix-map=
+UrlSuffix(gcc/Preprocessor-Options.html#index-fmacro-prefix-map)
+
+fdump-ada-spec
+UrlSuffix(gcc/Overall-Options.html#index-fdump-ada-spec)
+
+felide-constructors
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-felide-constructors)
+
+felide-type
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-felide-type)
+
+fenforce-eh-specs
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fenforce-eh-specs)
+
+fexec-charset=
+UrlSuffix(gcc/Preprocessor-Options.html#index-fexec-charset)
+
+fextended-identifiers
+UrlSuffix(gcc/Preprocessor-Options.html#index-fextended-identifiers)
+
+finput-charset=
+UrlSuffix(gcc/Preprocessor-Options.html#index-finput-charset)
+
+fextern-tls-init
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fextern-tls-init)
+
+ffold-simple-inlines
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-ffold-simple-inlines)
+
+; skipping 'ffreestanding' due to multiple URLs:
+;   duplicate: 'gcc/C-Dialect-Options.html#index-ffreestanding-1'
+;   duplicate: 'gcc/Standards.html#index-ffreestanding'
+;   duplicate: 'gcc/Warning-Options.html#index-ffreestanding-2'
+
+fgnu-keywords
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fgnu-keywords)
+
+fgnu-runtime
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fgnu-runtime)
+
+fgnu89-inline
+UrlSuffix(gcc/C-Dialect-Options.html#index-fgnu89-inline)
+
+fhosted
+UrlSuffix(gcc/C-Dialect-Options.html#index-fhosted)
+
+; skipping 'fimplement-inlines' due to multiple URLs:
+;   duplicate: 'gcc/C_002b_002b-Dialect-Options.html#index-fimplement-inlines'
+;   duplicate: 'gcc/C_002b_002b-Interface.html#index-fno-implement-inlines-1'
+
+fimplicit-constexpr
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fimplicit-constexpr)
+
+fimplicit-inline-templates
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fimplicit-inline-templates)
+
+; skipping 'fimplicit-templates' due to multiple URLs:
+;   duplicate: 'gcc/C_002b_002b-Dialect-Options.html#index-fimplicit-templates'
+;   duplicate: 'gcc/Template-Instantiation.html#index-fno-implicit-templates-1'
+
+fnew-inheriting-ctors
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fnew-inheriting-ctors)
+
+fkeep-inline-dllexport
+UrlSuffix(gcc/Optimize-Options.html#index-fkeep-inline-dllexport)
+
+flax-vector-conversions
+UrlSuffix(gcc/C-Dialect-Options.html#index-flax-vector-conversions)
+
+fmodules-ts
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fmodules-ts)
+
+fmodule-header
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fmodule-header)
+
+fmodule-header=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fmodule-header)
+
+fmodule-implicit-inline
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fmodule-implicit-inline)
+
+fmodule-only
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fmodule-only)
+
+fmodule-mapper=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fmodule-mapper)
+
+fmodule-lazy
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fmodule-lazy)
+
+Winvalid-imported-macros
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Winvalid-imported-macros)
+
+Wcompare-distinct-pointer-types
+UrlSuffix(gcc/Warning-Options.html#index-Wcompare-distinct-pointer-types)
+
+flang-info-include-translate
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-flang-info-include-translate)
+
+flang-info-include-translate-not
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-flang-info-include-translate-not)
+
+flang-info-include-translate=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-flang-info-include-translate)
+
+flang-info-module-cmi
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-flang-info-module-cmi)
+
+flang-info-module-cmi=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-flang-info-module-cmi)
+
+fmax-include-depth=
+UrlSuffix(gcc/Preprocessor-Options.html#index-fmax-include-depth)
+
+; skipping 'fms-extensions' due to multiple URLs:
+;   duplicate: 'gcc/C-Dialect-Options.html#index-fms-extensions'
+;   duplicate: 'gcc/C_002b_002b-Dialect-Options.html#index-fms-extensions-1'
+;   duplicate: 'gcc/Unnamed-Fields.html#index-fms-extensions-2'
+
+fnew-ttp-matching
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fnew-ttp-matching)
+
+fnext-runtime
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fnext-runtime)
+
+fnil-receivers
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fnil-receivers)
+
+flocal-ivars
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-flocal-ivars)
+
+fivar-visibility=
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fivar-visibility)
+
+fnonansi-builtins
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fno-nonansi-builtins)
+
+fnothrow-opt
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fnothrow-opt)
+
+fobjc-abi-version=
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fobjc-abi-version)
+
+fobjc-call-cxx-cdtors
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fobjc-call-cxx-cdtors)
+
+fobjc-direct-dispatch
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fobjc-direct-dispatch)
+
+fobjc-exceptions
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fobjc-exceptions)
+
+fobjc-gc
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fobjc-gc)
+
+fobjc-nilcheck
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fobjc-nilcheck)
+
+fopenacc
+UrlSuffix(gcc/C-Dialect-Options.html#index-fopenacc)
+
+fopenacc-dim=
+UrlSuffix(gcc/C-Dialect-Options.html#index-fopenacc-dim)
+
+fopenmp
+UrlSuffix(gcc/C-Dialect-Options.html#index-fopenmp)
+
+fopenmp-simd
+UrlSuffix(gcc/C-Dialect-Options.html#index-fopenmp-simd)
+
+foperator-names
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fno-operator-names)
+
+foptional-diags
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fno-optional-diags)
+
+fpch-deps
+UrlSuffix(gcc/Preprocessor-Options.html#index-fpch-deps)
+
+fpch-preprocess
+UrlSuffix(gcc/Preprocessor-Options.html#index-fpch-preprocess)
+
+fpermissive
+UrlSuffix(gcc/Warning-Options.html#index-fpermissive)
+
+; skipping 'fplan9-extensions' due to multiple URLs:
+;   duplicate: 'gcc/C-Dialect-Options.html#index-fplan9-extensions'
+;   duplicate: 'gcc/Unnamed-Fields.html#index-fplan9-extensions-1'
+
+fpreprocessed
+UrlSuffix(gcc/Preprocessor-Options.html#index-fpreprocessed)
+
+ftrack-macro-expansion
+UrlSuffix(gcc/Preprocessor-Options.html#index-ftrack-macro-expansion)
+
+ftrack-macro-expansion=
+UrlSuffix(gcc/Preprocessor-Options.html#index-ftrack-macro-expansion)
+
+fpretty-templates
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fno-pretty-templates)
+
+fprintf-return-value
+UrlSuffix(gcc/Optimize-Options.html#index-fno-printf-return-value)
+
+freplace-objc-classes
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-freplace-objc-classes)
+
+frtti
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fno-rtti)
+
+; skipping 'fshort-enums' due to multiple URLs:
+;   duplicate: 'gcc/Code-Gen-Options.html#index-fshort-enums'
+;   duplicate: 'gcc/Non-bugs.html#index-fshort-enums-3'
+;   duplicate: 'gcc/Structures-unions-enumerations-and-bit-fields-implementation.html#index-fshort-enums-1'
+
+fshort-wchar
+UrlSuffix(gcc/Code-Gen-Options.html#index-fshort-wchar)
+
+; skipping 'fsigned-bitfields' due to multiple URLs:
+;   duplicate: 'gcc/C-Dialect-Options.html#index-fno-signed-bitfields'
+;   duplicate: 'gcc/Non-bugs.html#index-fsigned-bitfields-1'
+
+; skipping 'fsigned-char' due to multiple URLs:
+;   duplicate: 'gcc/C-Dialect-Options.html#index-fsigned-char'
+;   duplicate: 'gcc/Characters-implementation.html#index-fsigned-char-1'
+
+fsized-deallocation
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fsized-deallocation)
+
+fstrict-flex-arrays
+UrlSuffix(gcc/C-Dialect-Options.html#index-fno-strict-flex-arrays)
+
+fstrict-flex-arrays=
+UrlSuffix(gcc/C-Dialect-Options.html#index-fno-strict-flex-arrays)
+
+fsso-struct=
+UrlSuffix(gcc/C-Dialect-Options.html#index-fsso-struct)
+
+fstats
+UrlSuffix(gcc/Developer-Options.html#index-fstats)
+
+fstrict-enums
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fstrict-enums)
+
+fstrong-eval-order
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fstrong-eval-order)
+
+fstrong-eval-order=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fstrong-eval-order)
+
+ftemplate-backtrace-limit=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-ftemplate-backtrace-limit)
+
+ftemplate-depth=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-ftemplate-depth)
+
+fthreadsafe-statics
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fno-threadsafe-statics)
+
+; skipping 'funsigned-bitfields' due to multiple URLs:
+;   duplicate: 'gcc/C-Dialect-Options.html#index-fno-unsigned-bitfields'
+;   duplicate: 'gcc/Non-bugs.html#index-funsigned-bitfields-2'
+;   duplicate: 'gcc/Structures-unions-enumerations-and-bit-fields-implementation.html#index-funsigned-bitfields-1'
+
+; skipping 'funsigned-char' due to multiple URLs:
+;   duplicate: 'gcc/C-Dialect-Options.html#index-funsigned-char'
+;   duplicate: 'gcc/Characters-implementation.html#index-funsigned-char-1'
+
+fuse-cxa-atexit
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fuse-cxa-atexit)
+
+fuse-cxa-get-exception-ptr
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fno-use-cxa-get-exception-ptr)
+
+fvisibility-inlines-hidden
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fvisibility-inlines-hidden)
+
+fvisibility-ms-compat
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fvisibility-ms-compat)
+
+fweak
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fno-weak)
+
+fwide-exec-charset=
+UrlSuffix(gcc/Preprocessor-Options.html#index-fwide-exec-charset)
+
+fworking-directory
+UrlSuffix(gcc/Preprocessor-Options.html#index-fno-working-directory)
+
+fzero-link
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fzero-link)
+
+gen-decls
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-gen-decls)
+
+femit-struct-debug-baseonly
+UrlSuffix(gcc/Debugging-Options.html#index-femit-struct-debug-baseonly)
+
+femit-struct-debug-reduced
+UrlSuffix(gcc/Debugging-Options.html#index-femit-struct-debug-reduced)
+
+femit-struct-debug-detailed=
+UrlSuffix(gcc/Debugging-Options.html#index-femit-struct-debug-detailed)
+
+fext-numeric-literals
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fext-numeric-literals)
+
+idirafter
+UrlSuffix(gcc/Directory-Options.html#index-idirafter)
+
+imacros
+UrlSuffix(gcc/Preprocessor-Options.html#index-imacros)
+
+imultilib
+UrlSuffix(gcc/Directory-Options.html#index-imultilib)
+
+include
+UrlSuffix(gcc/Preprocessor-Options.html#index-include)
+
+iprefix
+UrlSuffix(gcc/Directory-Options.html#index-iprefix)
+
+isysroot
+UrlSuffix(gcc/Directory-Options.html#index-isysroot)
+
+isystem
+UrlSuffix(gcc/Directory-Options.html#index-isystem)
+
+iquote
+UrlSuffix(gcc/Directory-Options.html#index-iquote)
+
+iwithprefix
+UrlSuffix(gcc/Directory-Options.html#index-iwithprefix)
+
+iwithprefixbefore
+UrlSuffix(gcc/Directory-Options.html#index-iwithprefixbefore)
+
+no-integrated-cpp
+UrlSuffix(gcc/Preprocessor-Options.html#index-no-integrated-cpp)
+
+nostdinc
+UrlSuffix(gcc/Directory-Options.html#index-nostdinc)
+
+; skipping 'nostdinc++' due to multiple URLs:
+;   duplicate: 'gcc/C_002b_002b-Dialect-Options.html#index-nostdinc_002b_002b'
+;   duplicate: 'gcc/Directory-Options.html#index-nostdinc_002b_002b-1'
+
+o
+UrlSuffix(gcc/Overall-Options.html#index-o)
+
+; skipping 'pedantic' due to multiple URLs:
+;   duplicate: 'gcc/Alternate-Keywords.html#index-pedantic-3'
+;   duplicate: 'gcc/C-Extensions.html#index-pedantic-2'
+;   duplicate: 'gcc/Standards.html#index-pedantic'
+;   duplicate: 'gcc/Warning-Options.html#index-pedantic-1'
+;   duplicate: 'gcc/Warnings-and-Errors.html#index-pedantic-4'
+
+print-objc-runtime-info
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-print-objc-runtime-info)
+
+remap
+UrlSuffix(gcc/Preprocessor-Options.html#index-remap)
+
+stdlib=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-stdlib)
+
+; skipping 'traditional' due to multiple URLs:
+;   duplicate: 'gcc/Incompatibilities.html#index-traditional-1'
+;   duplicate: 'gcc/Preprocessor-Options.html#index-traditional'
+
+traditional-cpp
+UrlSuffix(gcc/Preprocessor-Options.html#index-traditional-cpp)
+
+trigraphs
+UrlSuffix(gcc/Preprocessor-Options.html#index-trigraphs)
+
+undef
+UrlSuffix(gcc/Preprocessor-Options.html#index-undef)
+
+v
+UrlSuffix(gcc/Overall-Options.html#index-v)
+
+w
+UrlSuffix(gcc/Warning-Options.html#index-w)
+
diff --git a/gcc/common.opt.urls b/gcc/common.opt.urls
new file mode 100644
index 000000000000..4123ee6a79b5
--- /dev/null
+++ b/gcc/common.opt.urls
@@ -0,0 +1,1823 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/common.opt and generated HTML
+
+###
+UrlSuffix(gcc/Overall-Options.html#index-_0023_0023_0023)
+
+B
+UrlSuffix(gcc/Directory-Options.html#index-B)
+
+; skipping 'E' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-E-1'
+;   duplicate: 'gcc/Overall-Options.html#index-E'
+
+L
+UrlSuffix(gcc/Directory-Options.html#index-L)
+
+O
+UrlSuffix(gcc/Optimize-Options.html#index-O)
+
+Os
+UrlSuffix(gcc/Optimize-Options.html#index-Os)
+
+Ofast
+UrlSuffix(gcc/Optimize-Options.html#index-Ofast)
+
+Og
+UrlSuffix(gcc/Optimize-Options.html#index-Og)
+
+Oz
+UrlSuffix(gcc/Optimize-Options.html#index-Oz)
+
+Q
+UrlSuffix(gcc/Developer-Options.html#index-Q)
+
+Qn
+UrlSuffix(gcc/System-V-Options.html#index-Qn)
+
+Qy
+UrlSuffix(gcc/System-V-Options.html#index-Qy)
+
+; skipping 'S' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-S-1'
+;   duplicate: 'gcc/Overall-Options.html#index-S'
+
+T
+UrlSuffix(gcc/Link-Options.html#index-T)
+
+; skipping 'W' due to multiple URLs:
+;   duplicate: 'gcc/Incompatibilities.html#index-W-3'
+;   duplicate: 'gcc/Warning-Options.html#index-W'
+
+Waggregate-return
+UrlSuffix(gcc/Warning-Options.html#index-Waggregate-return)
+
+Waggressive-loop-optimizations
+UrlSuffix(gcc/Warning-Options.html#index-Waggressive-loop-optimizations)
+
+Warray-bounds
+UrlSuffix(gcc/Warning-Options.html#index-Warray-bounds)
+
+Warray-bounds=
+UrlSuffix(gcc/Warning-Options.html#index-Warray-bounds)
+
+Wuse-after-free
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-use-after-free)
+
+Wuse-after-free=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-use-after-free)
+
+Wattributes
+UrlSuffix(gcc/Warning-Options.html#index-Wattributes)
+
+Wattributes=
+UrlSuffix(gcc/Warning-Options.html#index-Wattributes)
+
+Wattribute-alias
+UrlSuffix(gcc/Warning-Options.html#index-Wattribute-alias)
+
+Wattribute-alias=
+UrlSuffix(gcc/Warning-Options.html#index-Wattribute-alias)
+
+Wcast-align
+UrlSuffix(gcc/Warning-Options.html#index-Wcast-align)
+
+Wcast-align=strict
+UrlSuffix(gcc/Warning-Options.html#index-Wcast-align_003dstrict)
+
+Wcomplain-wrong-lang
+UrlSuffix(gcc/Warning-Options.html#index-Wcomplain-wrong-lang)
+
+Wcpp
+UrlSuffix(gcc/Warning-Options.html#index-Wcpp)
+
+Wattribute-warning
+UrlSuffix(gcc/Warning-Options.html#index-Wattribute-warning)
+
+Wdeprecated
+UrlSuffix(gcc/Warning-Options.html#index-Wdeprecated)
+
+Wdeprecated-declarations
+UrlSuffix(gcc/Warning-Options.html#index-Wdeprecated-declarations)
+
+Wdisabled-optimization
+UrlSuffix(gcc/Warning-Options.html#index-Wdisabled-optimization)
+
+Werror
+UrlSuffix(gcc/Warning-Options.html#index-Werror)
+
+Werror=
+UrlSuffix(gcc/Warning-Options.html#index-Werror)
+
+Wextra
+UrlSuffix(gcc/Warning-Options.html#index-Wextra)
+
+Wfatal-errors
+UrlSuffix(gcc/Warning-Options.html#index-Wfatal-errors)
+
+Wframe-larger-than=
+UrlSuffix(gcc/Warning-Options.html#index-Wframe-larger-than_003d)
+
+Wfree-nonheap-object
+UrlSuffix(gcc/Warning-Options.html#index-Wfree-nonheap-object)
+
+Wimplicit-fallthrough
+UrlSuffix(gcc/Warning-Options.html#index-Wimplicit-fallthrough)
+
+Wimplicit-fallthrough=
+UrlSuffix(gcc/Warning-Options.html#index-Wimplicit-fallthrough)
+
+Winfinite-recursion
+UrlSuffix(gcc/Warning-Options.html#index-Winfinite-recursion)
+
+; skipping 'Winline' due to multiple URLs:
+;   duplicate: 'gcc/Inline.html#index-Winline-1'
+;   duplicate: 'gcc/Warning-Options.html#index-Winline'
+
+Winvalid-memory-model
+UrlSuffix(gcc/Warning-Options.html#index-Winvalid-memory-model)
+
+Wlarger-than=
+UrlSuffix(gcc/Warning-Options.html#index-Wlarger-than_003d)
+
+Wnonnull-compare
+UrlSuffix(gcc/Warning-Options.html#index-Wno-nonnull-compare)
+
+Wnull-dereference
+UrlSuffix(gcc/Warning-Options.html#index-Wno-null-dereference)
+
+Wunsafe-loop-optimizations
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unsafe-loop-optimizations)
+
+Wmissing-noreturn
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-noreturn)
+
+Wodr
+UrlSuffix(gcc/Warning-Options.html#index-Wno-odr)
+
+Woverflow
+UrlSuffix(gcc/Warning-Options.html#index-Wno-overflow)
+
+Wlto-type-mismatch
+UrlSuffix(gcc/Warning-Options.html#index-Wlto-type-mismatch)
+
+Wpacked
+UrlSuffix(gcc/Warning-Options.html#index-Wno-packed)
+
+Wpadded
+UrlSuffix(gcc/Warning-Options.html#index-Wno-padded)
+
+Wpedantic
+UrlSuffix(gcc/Warning-Options.html#index-Wno-pedantic)
+
+Wreturn-local-addr
+UrlSuffix(gcc/Warning-Options.html#index-Wno-return-local-addr)
+
+Wshadow
+UrlSuffix(gcc/Warning-Options.html#index-Wno-shadow)
+
+Wshadow=global
+UrlSuffix(gcc/Warning-Options.html#index-Wshadow_003dglobal)
+
+Wshadow=local
+UrlSuffix(gcc/Warning-Options.html#index-Wshadow_003dlocal)
+
+Wshadow=compatible-local
+UrlSuffix(gcc/Warning-Options.html#index-Wshadow_003dcompatible-local)
+
+Wstack-protector
+UrlSuffix(gcc/Warning-Options.html#index-Wno-stack-protector)
+
+Wstack-usage=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-stack-usage)
+
+Wstrict-aliasing
+UrlSuffix(gcc/Warning-Options.html#index-Wno-strict-aliasing)
+
+Wstrict-aliasing=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-strict-aliasing)
+
+Wstrict-overflow
+UrlSuffix(gcc/Warning-Options.html#index-Wno-strict-overflow)
+
+Wstrict-overflow=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-strict-overflow)
+
+Wsuggest-attribute=cold
+UrlSuffix(gcc/Warning-Options.html#index-Wno-suggest-attribute_003dcold)
+
+Wsuggest-attribute=const
+UrlSuffix(gcc/Warning-Options.html#index-Wno-suggest-attribute_003dconst)
+
+Wsuggest-attribute=pure
+UrlSuffix(gcc/Warning-Options.html#index-Wno-suggest-attribute_003dpure)
+
+Wsuggest-attribute=noreturn
+UrlSuffix(gcc/Warning-Options.html#index-Wno-suggest-attribute_003dnoreturn)
+
+Wsuggest-attribute=malloc
+UrlSuffix(gcc/Warning-Options.html#index-Wno-suggest-attribute_003dmalloc)
+
+Wsuggest-final-types
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-suggest-final-types)
+
+Wsuggest-final-methods
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-suggest-final-methods)
+
+Wswitch-unreachable
+UrlSuffix(gcc/Warning-Options.html#index-Wno-switch-unreachable)
+
+Wsystem-headers
+UrlSuffix(gcc/Warning-Options.html#index-Wno-system-headers)
+
+Wtrampolines
+UrlSuffix(gcc/Warning-Options.html#index-Wno-trampolines)
+
+Wtrivial-auto-var-init
+UrlSuffix(gcc/Warning-Options.html#index-Wno-trivial-auto-var-init)
+
+Wtype-limits
+UrlSuffix(gcc/Warning-Options.html#index-Wno-type-limits)
+
+Wuninitialized
+UrlSuffix(gcc/Warning-Options.html#index-Wno-uninitialized)
+
+Wmaybe-uninitialized
+UrlSuffix(gcc/Warning-Options.html#index-Wmaybe-uninitialized)
+
+Wunused
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused)
+
+Wunused-but-set-parameter
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-but-set-parameter)
+
+Wunused-but-set-variable
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-but-set-variable)
+
+Wunused-function
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-function)
+
+Wunused-label
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-label)
+
+Wunused-parameter
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-parameter)
+
+Wunused-value
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-value)
+
+Wunused-variable
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-variable)
+
+Wcoverage-mismatch
+UrlSuffix(gcc/Warning-Options.html#index-Wcoverage-mismatch)
+
+Wcoverage-invalid-line-number
+UrlSuffix(gcc/Warning-Options.html#index-Wcoverage-invalid-line-number)
+
+Wmissing-profile
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-profile)
+
+Wvector-operation-performance
+UrlSuffix(gcc/Warning-Options.html#index-Wno-vector-operation-performance)
+
+Wtsan
+UrlSuffix(gcc/Warning-Options.html#index-Wno-tsan)
+
+Xassembler
+UrlSuffix(gcc/Assembler-Options.html#index-Xassembler)
+
+Xlinker
+UrlSuffix(gcc/Link-Options.html#index-Xlinker)
+
+Xpreprocessor
+UrlSuffix(gcc/Preprocessor-Options.html#index-Xpreprocessor)
+
+aux-info
+UrlSuffix(gcc/C-Dialect-Options.html#index-aux-info)
+
+aux-info=
+UrlSuffix(gcc/C-Dialect-Options.html#index-aux-info)
+
+coverage
+UrlSuffix(gcc/Instrumentation-Options.html#index-coverage)
+
+; skipping 'c' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-c-1'
+;   duplicate: 'gcc/Overall-Options.html#index-c'
+
+; skipping 'd' due to multiple URLs:
+;   duplicate: 'gcc/Developer-Options.html#index-d-1'
+;   duplicate: 'gcc/Preprocessor-Options.html#index-d'
+
+dumpbase
+UrlSuffix(gcc/Overall-Options.html#index-dumpbase)
+
+dumpbase-ext
+UrlSuffix(gcc/Overall-Options.html#index-dumpbase-ext)
+
+dumpdir
+UrlSuffix(gcc/Overall-Options.html#index-dumpdir)
+
+dumpmachine
+UrlSuffix(gcc/Developer-Options.html#index-dumpmachine)
+
+dumpspecs
+UrlSuffix(gcc/Developer-Options.html#index-dumpspecs)
+
+dumpversion
+UrlSuffix(gcc/Developer-Options.html#index-dumpversion)
+
+dumpfullversion
+UrlSuffix(gcc/Developer-Options.html#index-dumpfullversion)
+
+e
+UrlSuffix(gcc/Link-Options.html#index-e)
+
+fabi-version=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fabi-version)
+
+faggressive-loop-optimizations
+UrlSuffix(gcc/Optimize-Options.html#index-faggressive-loop-optimizations)
+
+falign-functions
+UrlSuffix(gcc/Optimize-Options.html#index-falign-functions)
+
+falign-functions=
+UrlSuffix(gcc/Optimize-Options.html#index-falign-functions)
+
+falign-jumps
+UrlSuffix(gcc/Optimize-Options.html#index-falign-jumps)
+
+falign-jumps=
+UrlSuffix(gcc/Optimize-Options.html#index-falign-jumps)
+
+falign-labels
+UrlSuffix(gcc/Optimize-Options.html#index-falign-labels)
+
+falign-labels=
+UrlSuffix(gcc/Optimize-Options.html#index-falign-labels)
+
+falign-loops
+UrlSuffix(gcc/Optimize-Options.html#index-falign-loops)
+
+falign-loops=
+UrlSuffix(gcc/Optimize-Options.html#index-falign-loops)
+
+fallow-store-data-races
+UrlSuffix(gcc/Optimize-Options.html#index-fallow-store-data-races)
+
+fanalyzer
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer)
+
+fasan-shadow-offset=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fasan-shadow-offset)
+
+fsanitize-sections=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fsanitize-sections)
+
+fsanitize-recover=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fno-sanitize-recover)
+
+fsanitize-recover
+UrlSuffix(gcc/Instrumentation-Options.html#index-fno-sanitize-recover)
+
+fsanitize-trap=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fno-sanitize-trap)
+
+fsanitize-trap
+UrlSuffix(gcc/Instrumentation-Options.html#index-fno-sanitize-trap)
+
+fsanitize-address-use-after-scope
+UrlSuffix(gcc/Instrumentation-Options.html#index-fsanitize-address-use-after-scope)
+
+fsanitize-undefined-trap-on-error
+UrlSuffix(gcc/Instrumentation-Options.html#index-fsanitize-undefined-trap-on-error)
+
+fasynchronous-unwind-tables
+UrlSuffix(gcc/Code-Gen-Options.html#index-fasynchronous-unwind-tables)
+
+fauto-inc-dec
+UrlSuffix(gcc/Optimize-Options.html#index-fauto-inc-dec)
+
+fauto-profile
+UrlSuffix(gcc/Optimize-Options.html#index-fauto-profile)
+
+fauto-profile=
+UrlSuffix(gcc/Optimize-Options.html#index-fauto-profile)
+
+fbranch-count-reg
+UrlSuffix(gcc/Optimize-Options.html#index-fbranch-count-reg)
+
+fbranch-probabilities
+UrlSuffix(gcc/Optimize-Options.html#index-fbranch-probabilities)
+
+fcallgraph-info
+UrlSuffix(gcc/Developer-Options.html#index-fcallgraph-info)
+
+fcallgraph-info=
+UrlSuffix(gcc/Developer-Options.html#index-fcallgraph-info)
+
+fcaller-saves
+UrlSuffix(gcc/Optimize-Options.html#index-fcaller-saves)
+
+fcheck-new
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fcheck-new)
+
+fchecking
+UrlSuffix(gcc/Developer-Options.html#index-fchecking)
+
+fchecking=
+UrlSuffix(gcc/Developer-Options.html#index-fchecking)
+
+fcanon-prefix-map
+UrlSuffix(gcc/Overall-Options.html#index-fcanon-prefix-map)
+
+fcode-hoisting
+UrlSuffix(gcc/Optimize-Options.html#index-fcode-hoisting)
+
+fcombine-stack-adjustments
+UrlSuffix(gcc/Optimize-Options.html#index-fcombine-stack-adjustments)
+
+fcommon
+UrlSuffix(gcc/Code-Gen-Options.html#index-fcommon)
+
+fcompare-debug
+UrlSuffix(gcc/Developer-Options.html#index-fcompare-debug)
+
+fcompare-debug=
+UrlSuffix(gcc/Developer-Options.html#index-fcompare-debug)
+
+fcompare-debug-second
+UrlSuffix(gcc/Developer-Options.html#index-fcompare-debug-second)
+
+fcompare-elim
+UrlSuffix(gcc/Optimize-Options.html#index-fcompare-elim)
+
+fconserve-stack
+UrlSuffix(gcc/Optimize-Options.html#index-fconserve-stack)
+
+fcprop-registers
+UrlSuffix(gcc/Optimize-Options.html#index-fcprop-registers)
+
+ffold-mem-offsets
+UrlSuffix(gcc/Optimize-Options.html#index-ffold-mem-offsets)
+
+fcrossjumping
+UrlSuffix(gcc/Optimize-Options.html#index-fcrossjumping)
+
+fcse-follow-jumps
+UrlSuffix(gcc/Optimize-Options.html#index-fcse-follow-jumps)
+
+fcse-skip-blocks
+UrlSuffix(gcc/Optimize-Options.html#index-fcse-skip-blocks)
+
+fcx-limited-range
+UrlSuffix(gcc/Optimize-Options.html#index-fcx-limited-range)
+
+fcx-fortran-rules
+UrlSuffix(gcc/Optimize-Options.html#index-fcx-fortran-rules)
+
+fdata-sections
+UrlSuffix(gcc/Optimize-Options.html#index-fdata-sections)
+
+fdbg-cnt-list
+UrlSuffix(gcc/Developer-Options.html#index-fdbg-cnt-list)
+
+fdbg-cnt=
+UrlSuffix(gcc/Developer-Options.html#index-fdbg-cnt)
+
+fdebug-prefix-map=
+UrlSuffix(gcc/Debugging-Options.html#index-fdebug-prefix-map)
+
+ffile-prefix-map=
+UrlSuffix(gcc/Overall-Options.html#index-ffile-prefix-map)
+
+fdebug-types-section
+UrlSuffix(gcc/Debugging-Options.html#index-fdebug-types-section)
+
+fdefer-pop
+UrlSuffix(gcc/Optimize-Options.html#index-fdefer-pop)
+
+fdelayed-branch
+UrlSuffix(gcc/Optimize-Options.html#index-fdelayed-branch)
+
+fdelete-dead-exceptions
+UrlSuffix(gcc/Code-Gen-Options.html#index-fdelete-dead-exceptions)
+
+fdelete-null-pointer-checks
+UrlSuffix(gcc/Optimize-Options.html#index-fdelete-null-pointer-checks)
+
+fdevirtualize-at-ltrans
+UrlSuffix(gcc/Optimize-Options.html#index-fdevirtualize-at-ltrans)
+
+fdevirtualize-speculatively
+UrlSuffix(gcc/Optimize-Options.html#index-fdevirtualize-speculatively)
+
+fdevirtualize
+UrlSuffix(gcc/Optimize-Options.html#index-fdevirtualize)
+
+fdiagnostics-show-location=
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-show-location)
+
+fdiagnostics-show-caret
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-show-caret)
+
+fdiagnostics-show-labels
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-show-labels)
+
+fdiagnostics-show-line-numbers
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-show-line-numbers)
+
+fdiagnostics-color
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-color)
+
+fdiagnostics-color=
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-color)
+
+fdiagnostics-urls=
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-urls)
+
+fdiagnostics-column-unit=
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-column-unit)
+
+fdiagnostics-column-origin=
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-column-origin)
+
+fdiagnostics-format=
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format)
+
+fdiagnostics-escape-format=
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-escape-format)
+
+fdiagnostics-parseable-fixits
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-parseable-fixits)
+
+fdiagnostics-generate-patch
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-generate-patch)
+
+fdiagnostics-show-option
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-show-option)
+
+fdiagnostics-show-cwe
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-show-cwe)
+
+fdiagnostics-show-rules
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-show-rules)
+
+fdiagnostics-path-format=
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-path-format)
+
+ftabstop=
+UrlSuffix(gcc/Preprocessor-Options.html#index-ftabstop)
+
+fdiagnostics-show-path-depths
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-show-path-depths)
+
+fdiagnostics-text-art-charset=
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-text-art-charset)
+
+fdiagnostics-minimum-margin-width=
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-minimum-margin-width)
+
+fdisable-
+UrlSuffix(gcc/Developer-Options.html#index-fdisable-)
+
+fenable-
+UrlSuffix(gcc/Developer-Options.html#index-fenable-)
+
+fdump-final-insns
+UrlSuffix(gcc/Developer-Options.html#index-fdump-final-insns)
+
+fdump-final-insns=
+UrlSuffix(gcc/Developer-Options.html#index-fdump-final-insns)
+
+fdump-go-spec=
+UrlSuffix(gcc/Overall-Options.html#index-fdump-go-spec)
+
+fdump-noaddr
+UrlSuffix(gcc/Developer-Options.html#index-fdump-noaddr)
+
+freport-bug
+UrlSuffix(gcc/Developer-Options.html#index-freport-bug)
+
+fdump-passes
+UrlSuffix(gcc/Developer-Options.html#index-fdump-passes)
+
+fdump-unnumbered
+UrlSuffix(gcc/Developer-Options.html#index-fdump-unnumbered)
+
+fdump-unnumbered-links
+UrlSuffix(gcc/Developer-Options.html#index-fdump-unnumbered-links)
+
+fdwarf2-cfi-asm
+UrlSuffix(gcc/Debugging-Options.html#index-fdwarf2-cfi-asm)
+
+fearly-inlining
+UrlSuffix(gcc/Optimize-Options.html#index-fearly-inlining)
+
+fipa-sra
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-sra)
+
+feliminate-unused-debug-symbols
+UrlSuffix(gcc/Debugging-Options.html#index-feliminate-unused-debug-symbols)
+
+feliminate-unused-debug-types
+UrlSuffix(gcc/Debugging-Options.html#index-feliminate-unused-debug-types)
+
+femit-class-debug-always
+UrlSuffix(gcc/Debugging-Options.html#index-femit-class-debug-always)
+
+fexceptions
+UrlSuffix(gcc/Code-Gen-Options.html#index-fexceptions)
+
+fexpensive-optimizations
+UrlSuffix(gcc/Optimize-Options.html#index-fexpensive-optimizations)
+
+fexcess-precision=
+UrlSuffix(gcc/Optimize-Options.html#index-fexcess-precision)
+
+fpermitted-flt-eval-methods=
+UrlSuffix(gcc/C-Dialect-Options.html#index-fpermitted-flt-eval-methods)
+
+ffast-math
+UrlSuffix(gcc/Optimize-Options.html#index-ffast-math)
+
+ffat-lto-objects
+UrlSuffix(gcc/Optimize-Options.html#index-ffat-lto-objects)
+
+ffinite-math-only
+UrlSuffix(gcc/Optimize-Options.html#index-ffinite-math-only)
+
+ffinite-loops
+UrlSuffix(gcc/Optimize-Options.html#index-ffinite-loops)
+
+; skipping 'ffloat-store' due to multiple URLs:
+;   duplicate: 'gcc/Disappointments.html#index-ffloat-store-1'
+;   duplicate: 'gcc/Optimize-Options.html#index-ffloat-store'
+
+fforward-propagate
+UrlSuffix(gcc/Optimize-Options.html#index-fforward-propagate)
+
+ffp-contract=
+UrlSuffix(gcc/Optimize-Options.html#index-ffp-contract)
+
+ffp-int-builtin-inexact
+UrlSuffix(gcc/Optimize-Options.html#index-ffp-int-builtin-inexact)
+
+ffunction-cse
+UrlSuffix(gcc/Optimize-Options.html#index-ffunction-cse)
+
+ffunction-sections
+UrlSuffix(gcc/Optimize-Options.html#index-ffunction-sections)
+
+fgcse
+UrlSuffix(gcc/Optimize-Options.html#index-fgcse)
+
+fgcse-lm
+UrlSuffix(gcc/Optimize-Options.html#index-fgcse-lm)
+
+fgcse-sm
+UrlSuffix(gcc/Optimize-Options.html#index-fgcse-sm)
+
+fgcse-las
+UrlSuffix(gcc/Optimize-Options.html#index-fgcse-las)
+
+fgcse-after-reload
+UrlSuffix(gcc/Optimize-Options.html#index-fgcse-after-reload)
+
+fgraphite-identity
+UrlSuffix(gcc/Optimize-Options.html#index-fgraphite-identity)
+
+fhoist-adjacent-loads
+UrlSuffix(gcc/Optimize-Options.html#index-fhoist-adjacent-loads)
+
+flarge-source-files
+UrlSuffix(gcc/Preprocessor-Options.html#index-flarge-source-files)
+
+floop-parallelize-all
+UrlSuffix(gcc/Optimize-Options.html#index-floop-parallelize-all)
+
+floop-strip-mine
+UrlSuffix(gcc/Optimize-Options.html#index-floop-strip-mine)
+
+floop-interchange
+UrlSuffix(gcc/Optimize-Options.html#index-floop-interchange)
+
+floop-block
+UrlSuffix(gcc/Optimize-Options.html#index-floop-block)
+
+floop-unroll-and-jam
+UrlSuffix(gcc/Optimize-Options.html#index-floop-unroll-and-jam)
+
+fgnu-tm
+UrlSuffix(gcc/C-Dialect-Options.html#index-fgnu-tm)
+
+fgnu-unique
+UrlSuffix(gcc/Code-Gen-Options.html#index-fgnu-unique)
+
+floop-nest-optimize
+UrlSuffix(gcc/Optimize-Options.html#index-floop-nest-optimize)
+
+fstrict-volatile-bitfields
+UrlSuffix(gcc/Code-Gen-Options.html#index-fstrict-volatile-bitfields)
+
+fstore-merging
+UrlSuffix(gcc/Optimize-Options.html#index-fstore-merging)
+
+fguess-branch-probability
+UrlSuffix(gcc/Optimize-Options.html#index-fguess-branch-probability)
+
+fharden-compares
+UrlSuffix(gcc/Instrumentation-Options.html#index-fharden-compares)
+
+fharden-conditional-branches
+UrlSuffix(gcc/Instrumentation-Options.html#index-fharden-conditional-branches)
+
+fharden-control-flow-redundancy
+UrlSuffix(gcc/Instrumentation-Options.html#index-fharden-control-flow-redundancy)
+
+fhardcfr-skip-leaf
+UrlSuffix(gcc/Instrumentation-Options.html#index-fhardcfr-skip-leaf)
+
+fhardcfr-check-returning-calls
+UrlSuffix(gcc/Instrumentation-Options.html#index-fhardcfr-check-returning-calls)
+
+fhardcfr-check-exceptions
+UrlSuffix(gcc/Instrumentation-Options.html#index-fhardcfr-check-exceptions)
+
+fhardcfr-check-noreturn-calls=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fhardcfr-check-noreturn-calls)
+
+fident
+UrlSuffix(gcc/Code-Gen-Options.html#index-fident)
+
+fif-conversion
+UrlSuffix(gcc/Optimize-Options.html#index-fif-conversion)
+
+fif-conversion2
+UrlSuffix(gcc/Optimize-Options.html#index-fif-conversion2)
+
+ftree-loop-if-convert
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-loop-if-convert)
+
+finhibit-size-directive
+UrlSuffix(gcc/Code-Gen-Options.html#index-finhibit-size-directive)
+
+findirect-inlining
+UrlSuffix(gcc/Optimize-Options.html#index-findirect-inlining)
+
+finline
+UrlSuffix(gcc/Optimize-Options.html#index-finline)
+
+finline-small-functions
+UrlSuffix(gcc/Optimize-Options.html#index-finline-small-functions)
+
+finline-functions
+UrlSuffix(gcc/Optimize-Options.html#index-finline-functions)
+
+finline-functions-called-once
+UrlSuffix(gcc/Optimize-Options.html#index-finline-functions-called-once)
+
+finline-limit=
+UrlSuffix(gcc/Optimize-Options.html#index-finline-limit)
+
+fcf-protection
+UrlSuffix(gcc/Instrumentation-Options.html#index-fcf-protection)
+
+fcf-protection=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fcf-protection)
+
+finstrument-functions
+UrlSuffix(gcc/Instrumentation-Options.html#index-finstrument-functions)
+
+finstrument-functions-once
+UrlSuffix(gcc/Instrumentation-Options.html#index-finstrument-functions-once)
+
+finstrument-functions-exclude-function-list=
+UrlSuffix(gcc/Instrumentation-Options.html#index-finstrument-functions-exclude-function-list)
+
+finstrument-functions-exclude-file-list=
+UrlSuffix(gcc/Instrumentation-Options.html#index-finstrument-functions-exclude-file-list)
+
+fipa-cp
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-cp)
+
+fipa-cp-clone
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-cp-clone)
+
+fipa-bit-cp
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-bit-cp)
+
+fipa-modref
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-modref)
+
+fipa-profile
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-profile)
+
+fipa-pta
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-pta)
+
+fipa-pure-const
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-pure-const)
+
+fipa-icf
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-icf)
+
+fipa-reference
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-reference)
+
+fipa-reference-addressable
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-reference-addressable)
+
+fipa-stack-alignment
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-stack-alignment)
+
+fipa-vrp
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-vrp)
+
+fira-algorithm=
+UrlSuffix(gcc/Optimize-Options.html#index-fira-algorithm)
+
+fipa-strict-aliasing
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-strict-aliasing)
+
+fira-region=
+UrlSuffix(gcc/Optimize-Options.html#index-fira-region)
+
+fira-hoist-pressure
+UrlSuffix(gcc/Optimize-Options.html#index-fira-hoist-pressure)
+
+fira-loop-pressure
+UrlSuffix(gcc/Optimize-Options.html#index-fira-loop-pressure)
+
+fira-share-save-slots
+UrlSuffix(gcc/Optimize-Options.html#index-fira-share-save-slots)
+
+fira-share-spill-slots
+UrlSuffix(gcc/Optimize-Options.html#index-fira-share-spill-slots)
+
+fira-verbose=
+UrlSuffix(gcc/Developer-Options.html#index-fira-verbose)
+
+fivopts
+UrlSuffix(gcc/Optimize-Options.html#index-fivopts)
+
+fjump-tables
+UrlSuffix(gcc/Code-Gen-Options.html#index-fjump-tables)
+
+fbit-tests
+UrlSuffix(gcc/Code-Gen-Options.html#index-fbit-tests)
+
+; skipping 'fkeep-inline-functions' due to multiple URLs:
+;   duplicate: 'gcc/Inline.html#index-fkeep-inline-functions-1'
+;   duplicate: 'gcc/Optimize-Options.html#index-fkeep-inline-functions'
+
+fkeep-static-functions
+UrlSuffix(gcc/Optimize-Options.html#index-fkeep-static-functions)
+
+fkeep-static-consts
+UrlSuffix(gcc/Optimize-Options.html#index-fkeep-static-consts)
+
+fleading-underscore
+UrlSuffix(gcc/Code-Gen-Options.html#index-fleading-underscore)
+
+flra-remat
+UrlSuffix(gcc/Optimize-Options.html#index-flra-remat)
+
+flto
+UrlSuffix(gcc/Optimize-Options.html#index-flto)
+
+flto=
+UrlSuffix(gcc/Optimize-Options.html#index-flto)
+
+flto-partition=
+UrlSuffix(gcc/Optimize-Options.html#index-flto-partition)
+
+flto-compression-level=
+UrlSuffix(gcc/Optimize-Options.html#index-flto-compression-level)
+
+flto-report
+UrlSuffix(gcc/Developer-Options.html#index-flto-report)
+
+flto-report-wpa
+UrlSuffix(gcc/Developer-Options.html#index-flto-report-wpa)
+
+fmath-errno
+UrlSuffix(gcc/Optimize-Options.html#index-fmath-errno)
+
+fmax-errors=
+UrlSuffix(gcc/Warning-Options.html#index-fmax-errors)
+
+fmem-report
+UrlSuffix(gcc/Developer-Options.html#index-fmem-report)
+
+fmem-report-wpa
+UrlSuffix(gcc/Developer-Options.html#index-fmem-report-wpa)
+
+fmerge-all-constants
+UrlSuffix(gcc/Optimize-Options.html#index-fmerge-all-constants)
+
+fmerge-constants
+UrlSuffix(gcc/Optimize-Options.html#index-fmerge-constants)
+
+fmerge-debug-strings
+UrlSuffix(gcc/Debugging-Options.html#index-fmerge-debug-strings)
+
+fmessage-length=
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fmessage-length)
+
+fmodulo-sched
+UrlSuffix(gcc/Optimize-Options.html#index-fmodulo-sched)
+
+fmodulo-sched-allow-regmoves
+UrlSuffix(gcc/Optimize-Options.html#index-fmodulo-sched-allow-regmoves)
+
+fmove-loop-invariants
+UrlSuffix(gcc/Optimize-Options.html#index-fmove-loop-invariants)
+
+fmove-loop-stores
+UrlSuffix(gcc/Optimize-Options.html#index-fmove-loop-stores)
+
+fmultiflags
+UrlSuffix(gcc/Developer-Options.html#index-fmultiflags)
+
+fdce
+UrlSuffix(gcc/Optimize-Options.html#index-fdce)
+
+fdse
+UrlSuffix(gcc/Optimize-Options.html#index-fdse)
+
+freschedule-modulo-scheduled-loops
+UrlSuffix(gcc/Optimize-Options.html#index-freschedule-modulo-scheduled-loops)
+
+fnon-call-exceptions
+UrlSuffix(gcc/Code-Gen-Options.html#index-fnon-call-exceptions)
+
+foffload=
+UrlSuffix(gcc/C-Dialect-Options.html#index-foffload)
+
+foffload-options=
+UrlSuffix(gcc/C-Dialect-Options.html#index-foffload-options)
+
+fomit-frame-pointer
+UrlSuffix(gcc/Optimize-Options.html#index-fomit-frame-pointer)
+
+fopenmp-target-simd-clone
+UrlSuffix(gcc/C-Dialect-Options.html#index-fopenmp-target-simd-clone)
+
+fopenmp-target-simd-clone=
+UrlSuffix(gcc/C-Dialect-Options.html#index-fopenmp-target-simd-clone)
+
+fopt-info
+UrlSuffix(gcc/Developer-Options.html#index-fopt-info)
+
+fsave-optimization-record
+UrlSuffix(gcc/Developer-Options.html#index-fsave-optimization-record)
+
+foptimize-sibling-calls
+UrlSuffix(gcc/Optimize-Options.html#index-foptimize-sibling-calls)
+
+fpartial-inlining
+UrlSuffix(gcc/Optimize-Options.html#index-fpartial-inlining)
+
+fpre-ipa-mem-report
+UrlSuffix(gcc/Developer-Options.html#index-fpre-ipa-mem-report)
+
+fpost-ipa-mem-report
+UrlSuffix(gcc/Developer-Options.html#index-fpost-ipa-mem-report)
+
+fpack-struct
+UrlSuffix(gcc/Code-Gen-Options.html#index-fpack-struct)
+
+fpack-struct=
+UrlSuffix(gcc/Code-Gen-Options.html#index-fpack-struct)
+
+; skipping 'fpcc-struct-return' due to multiple URLs:
+;   duplicate: 'gcc/Code-Gen-Options.html#index-fpcc-struct-return'
+;   duplicate: 'gcc/Incompatibilities.html#index-fpcc-struct-return-1'
+
+fpeel-loops
+UrlSuffix(gcc/Optimize-Options.html#index-fpeel-loops)
+
+fpeephole
+UrlSuffix(gcc/Optimize-Options.html#index-fno-peephole)
+
+fpeephole2
+UrlSuffix(gcc/Optimize-Options.html#index-fno-peephole2)
+
+fPIC
+UrlSuffix(gcc/Code-Gen-Options.html#index-fPIC)
+
+fPIE
+UrlSuffix(gcc/Code-Gen-Options.html#index-fPIE)
+
+fpic
+UrlSuffix(gcc/Code-Gen-Options.html#index-fpic)
+
+fpie
+UrlSuffix(gcc/Code-Gen-Options.html#index-fpie)
+
+fplt
+UrlSuffix(gcc/Code-Gen-Options.html#index-fno-plt)
+
+fplugin=
+UrlSuffix(gcc/Overall-Options.html#index-fplugin)
+
+fpredictive-commoning
+UrlSuffix(gcc/Optimize-Options.html#index-fpredictive-commoning)
+
+fprefetch-loop-arrays
+UrlSuffix(gcc/Optimize-Options.html#index-fprefetch-loop-arrays)
+
+fprofile-abs-path
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-abs-path)
+
+; skipping 'fprofile-arcs' due to multiple URLs:
+;   duplicate: 'gcc/Instrumentation-Options.html#index-fprofile-arcs'
+;   duplicate: 'gcc/Other-Builtins.html#index-fprofile-arcs-1'
+
+fprofile-dir=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-dir)
+
+fprofile-note=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-note)
+
+fprofile-correction
+UrlSuffix(gcc/Optimize-Options.html#index-fprofile-correction)
+
+fprofile-update=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-update)
+
+fprofile-filter-files=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-filter-files)
+
+fprofile-exclude-files=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-exclude-files)
+
+fprofile-reproducible=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-reproducible)
+
+fprofile-prefix-path=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-prefix-path)
+
+fprofile-prefix-map=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-prefix-map)
+
+fprofile-generate
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-generate)
+
+fprofile-generate=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-generate)
+
+fprofile-info-section
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-info-section)
+
+fprofile-info-section=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-info-section)
+
+fprofile-partial-training
+UrlSuffix(gcc/Optimize-Options.html#index-fprofile-partial-training)
+
+fprofile-use
+UrlSuffix(gcc/Optimize-Options.html#index-fprofile-use)
+
+fprofile-use=
+UrlSuffix(gcc/Optimize-Options.html#index-fprofile-use)
+
+fprofile-values
+UrlSuffix(gcc/Optimize-Options.html#index-fprofile-values)
+
+fprofile-report
+UrlSuffix(gcc/Developer-Options.html#index-fprofile-report)
+
+fprofile-reorder-functions
+UrlSuffix(gcc/Optimize-Options.html#index-fprofile-reorder-functions)
+
+fpatchable-function-entry=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fpatchable-function-entry)
+
+frandom-seed
+UrlSuffix(gcc/Developer-Options.html#index-frandom-seed)
+
+frandom-seed=
+UrlSuffix(gcc/Developer-Options.html#index-frandom-seed)
+
+frecord-gcc-switches
+UrlSuffix(gcc/Code-Gen-Options.html#index-frecord-gcc-switches)
+
+freg-struct-return
+UrlSuffix(gcc/Code-Gen-Options.html#index-freg-struct-return)
+
+flifetime-dse
+UrlSuffix(gcc/Optimize-Options.html#index-flifetime-dse)
+
+flifetime-dse=
+UrlSuffix(gcc/Optimize-Options.html#index-flifetime-dse)
+
+flive-patching
+UrlSuffix(gcc/Optimize-Options.html#index-flive-patching)
+
+flive-patching=
+UrlSuffix(gcc/Optimize-Options.html#index-flive-patching)
+
+fallocation-dce
+UrlSuffix(gcc/Optimize-Options.html#index-fno-allocation-dce)
+
+flive-range-shrinkage
+UrlSuffix(gcc/Optimize-Options.html#index-flive-range-shrinkage)
+
+frename-registers
+UrlSuffix(gcc/Optimize-Options.html#index-frename-registers)
+
+fschedule-fusion
+UrlSuffix(gcc/Optimize-Options.html#index-fschedule-fusion)
+
+freorder-blocks
+UrlSuffix(gcc/Optimize-Options.html#index-freorder-blocks)
+
+freorder-blocks-algorithm=
+UrlSuffix(gcc/Optimize-Options.html#index-freorder-blocks-algorithm)
+
+freorder-blocks-and-partition
+UrlSuffix(gcc/Optimize-Options.html#index-freorder-blocks-and-partition)
+
+freorder-functions
+UrlSuffix(gcc/Optimize-Options.html#index-freorder-functions)
+
+frerun-cse-after-loop
+UrlSuffix(gcc/Optimize-Options.html#index-frerun-cse-after-loop)
+
+frounding-math
+UrlSuffix(gcc/Optimize-Options.html#index-frounding-math)
+
+fsched-interblock
+UrlSuffix(gcc/Optimize-Options.html#index-fno-sched-interblock)
+
+fsched-pressure
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-pressure)
+
+fsched-spec
+UrlSuffix(gcc/Optimize-Options.html#index-fno-sched-spec)
+
+fsched-spec-load
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-spec-load)
+
+fsched-spec-load-dangerous
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-spec-load-dangerous)
+
+fsched-verbose=
+UrlSuffix(gcc/Developer-Options.html#index-fsched-verbose)
+
+fsched2-use-superblocks
+UrlSuffix(gcc/Optimize-Options.html#index-fsched2-use-superblocks)
+
+fschedule-insns
+UrlSuffix(gcc/Optimize-Options.html#index-fschedule-insns)
+
+fschedule-insns2
+UrlSuffix(gcc/Optimize-Options.html#index-fschedule-insns2)
+
+fselective-scheduling
+UrlSuffix(gcc/Optimize-Options.html#index-fselective-scheduling)
+
+fselective-scheduling2
+UrlSuffix(gcc/Optimize-Options.html#index-fselective-scheduling2)
+
+fsel-sched-pipelining
+UrlSuffix(gcc/Optimize-Options.html#index-fsel-sched-pipelining)
+
+fsel-sched-pipelining-outer-loops
+UrlSuffix(gcc/Optimize-Options.html#index-fsel-sched-pipelining-outer-loops)
+
+fsemantic-interposition
+UrlSuffix(gcc/Optimize-Options.html#index-fsemantic-interposition)
+
+fsched-stalled-insns
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-stalled-insns)
+
+fsched-stalled-insns=
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-stalled-insns)
+
+fsched-stalled-insns-dep
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-stalled-insns-dep)
+
+fsched-stalled-insns-dep=
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-stalled-insns-dep)
+
+fsched-group-heuristic
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-group-heuristic)
+
+fsched-critical-path-heuristic
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-critical-path-heuristic)
+
+fsched-spec-insn-heuristic
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-spec-insn-heuristic)
+
+fsched-rank-heuristic
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-rank-heuristic)
+
+fsched-last-insn-heuristic
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-last-insn-heuristic)
+
+fsched-dep-count-heuristic
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-dep-count-heuristic)
+
+fsection-anchors
+UrlSuffix(gcc/Optimize-Options.html#index-fsection-anchors)
+
+free
+UrlSuffix(gcc/Optimize-Options.html#index-free-1)
+
+fshow-column
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fno-show-column)
+
+fshrink-wrap
+UrlSuffix(gcc/Optimize-Options.html#index-fshrink-wrap)
+
+fshrink-wrap-separate
+UrlSuffix(gcc/Optimize-Options.html#index-fshrink-wrap-separate)
+
+fsignaling-nans
+UrlSuffix(gcc/Optimize-Options.html#index-fsignaling-nans)
+
+fsigned-zeros
+UrlSuffix(gcc/Optimize-Options.html#index-fno-signed-zeros)
+
+fsingle-precision-constant
+UrlSuffix(gcc/Optimize-Options.html#index-fsingle-precision-constant)
+
+fsplit-ivs-in-unroller
+UrlSuffix(gcc/Optimize-Options.html#index-fsplit-ivs-in-unroller)
+
+fsplit-stack
+UrlSuffix(gcc/Instrumentation-Options.html#index-fsplit-stack)
+
+fsplit-wide-types
+UrlSuffix(gcc/Optimize-Options.html#index-fsplit-wide-types)
+
+fsplit-wide-types-early
+UrlSuffix(gcc/Optimize-Options.html#index-fsplit-wide-types-early)
+
+fssa-backprop
+UrlSuffix(gcc/Optimize-Options.html#index-fssa-backprop)
+
+fssa-phiopt
+UrlSuffix(gcc/Optimize-Options.html#index-fssa-phiopt)
+
+fstdarg-opt
+UrlSuffix(gcc/Optimize-Options.html#index-fstdarg-opt)
+
+fvariable-expansion-in-unroller
+UrlSuffix(gcc/Optimize-Options.html#index-fvariable-expansion-in-unroller)
+
+fstack-check=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fstack-check)
+
+fstack-check
+UrlSuffix(gcc/Instrumentation-Options.html#index-fstack-check)
+
+fstack-clash-protection
+UrlSuffix(gcc/Instrumentation-Options.html#index-fstack-clash-protection)
+
+fstack-limit
+UrlSuffix(gcc/Instrumentation-Options.html#index-fno-stack-limit)
+
+fstack-limit-register=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fstack-limit-register)
+
+fstack-limit-symbol=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fstack-limit-symbol)
+
+fstack-protector
+UrlSuffix(gcc/Instrumentation-Options.html#index-fstack-protector)
+
+fstack-protector-all
+UrlSuffix(gcc/Instrumentation-Options.html#index-fstack-protector-all)
+
+fstack-protector-strong
+UrlSuffix(gcc/Instrumentation-Options.html#index-fstack-protector-strong)
+
+fstack-protector-explicit
+UrlSuffix(gcc/Instrumentation-Options.html#index-fstack-protector-explicit)
+
+fstack-usage
+UrlSuffix(gcc/Developer-Options.html#index-fstack-usage)
+
+fstrict-aliasing
+UrlSuffix(gcc/Optimize-Options.html#index-fstrict-aliasing)
+
+fstrict-overflow
+UrlSuffix(gcc/Code-Gen-Options.html#index-fstrict-overflow)
+
+fsync-libcalls
+UrlSuffix(gcc/Code-Gen-Options.html#index-fsync-libcalls)
+
+fsyntax-only
+UrlSuffix(gcc/Warning-Options.html#index-fsyntax-only)
+
+ftest-coverage
+UrlSuffix(gcc/Instrumentation-Options.html#index-ftest-coverage)
+
+fthread-jumps
+UrlSuffix(gcc/Optimize-Options.html#index-fthread-jumps)
+
+ftime-report
+UrlSuffix(gcc/Developer-Options.html#index-ftime-report)
+
+ftime-report-details
+UrlSuffix(gcc/Developer-Options.html#index-ftime-report-details)
+
+ftls-model=
+UrlSuffix(gcc/Code-Gen-Options.html#index-ftls-model)
+
+ftoplevel-reorder
+UrlSuffix(gcc/Optimize-Options.html#index-fno-toplevel-reorder)
+
+ftracer
+UrlSuffix(gcc/Optimize-Options.html#index-ftracer)
+
+ftrampolines
+UrlSuffix(gcc/Code-Gen-Options.html#index-ftrampolines)
+
+ftrampoline-impl=
+UrlSuffix(gcc/Code-Gen-Options.html#index-ftrampoline-impl)
+
+ftrapping-math
+UrlSuffix(gcc/Optimize-Options.html#index-fno-trapping-math)
+
+ftrapv
+UrlSuffix(gcc/Code-Gen-Options.html#index-ftrapv)
+
+ftree-ccp
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-ccp)
+
+ftree-bit-ccp
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-bit-ccp)
+
+ftree-ch
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-ch)
+
+ftree-coalesce-vars
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-coalesce-vars)
+
+ftree-copy-prop
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-copy-prop)
+
+ftree-switch-conversion
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-switch-conversion)
+
+ftree-dce
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-dce)
+
+ftree-dominator-opts
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-dominator-opts)
+
+ftree-tail-merge
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-tail-merge)
+
+ftree-dse
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-dse)
+
+ftree-forwprop
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-forwprop)
+
+ftree-fre
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-fre)
+
+foptimize-strlen
+UrlSuffix(gcc/Optimize-Options.html#index-foptimize-strlen)
+
+fisolate-erroneous-paths-dereference
+UrlSuffix(gcc/Optimize-Options.html#index-fisolate-erroneous-paths-dereference)
+
+fisolate-erroneous-paths-attribute
+UrlSuffix(gcc/Optimize-Options.html#index-fisolate-erroneous-paths-attribute)
+
+ftree-loop-distribution
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-loop-distribution)
+
+ftree-loop-distribute-patterns
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-loop-distribute-patterns)
+
+ftree-loop-im
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-loop-im)
+
+ftree-loop-linear
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-loop-linear)
+
+ftree-loop-ivcanon
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-loop-ivcanon)
+
+ftree-loop-optimize
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-loop-optimize)
+
+ftree-parallelize-loops=
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-parallelize-loops)
+
+ftree-phiprop
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-phiprop)
+
+ftree-pre
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-pre)
+
+ftree-partial-pre
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-partial-pre)
+
+ftree-pta
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-pta)
+
+ftree-reassoc
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-reassoc)
+
+ftree-sink
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-sink)
+
+ftree-slsr
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-slsr)
+
+ftree-sra
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-sra)
+
+ftree-ter
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-ter)
+
+ftree-vrp
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-vrp)
+
+fsplit-paths
+UrlSuffix(gcc/Optimize-Options.html#index-fsplit-paths)
+
+funconstrained-commons
+UrlSuffix(gcc/Optimize-Options.html#index-funconstrained-commons)
+
+funit-at-a-time
+UrlSuffix(gcc/Optimize-Options.html#index-funit-at-a-time)
+
+funreachable-traps
+UrlSuffix(gcc/Optimize-Options.html#index-funreachable-traps)
+
+funroll-loops
+UrlSuffix(gcc/Optimize-Options.html#index-funroll-loops)
+
+funroll-all-loops
+UrlSuffix(gcc/Optimize-Options.html#index-funroll-all-loops)
+
+fassociative-math
+UrlSuffix(gcc/Optimize-Options.html#index-fassociative-math)
+
+freciprocal-math
+UrlSuffix(gcc/Optimize-Options.html#index-freciprocal-math)
+
+funsafe-math-optimizations
+UrlSuffix(gcc/Optimize-Options.html#index-funsafe-math-optimizations)
+
+funswitch-loops
+UrlSuffix(gcc/Optimize-Options.html#index-funswitch-loops)
+
+fsplit-loops
+UrlSuffix(gcc/Optimize-Options.html#index-fsplit-loops)
+
+fversion-loops-for-strides
+UrlSuffix(gcc/Optimize-Options.html#index-fversion-loops-for-strides)
+
+funwind-tables
+UrlSuffix(gcc/Code-Gen-Options.html#index-funwind-tables)
+
+fuse-ld=bfd
+UrlSuffix(gcc/Link-Options.html#index-fuse-ld_003dbfd)
+
+fuse-ld=gold
+UrlSuffix(gcc/Link-Options.html#index-fuse-ld_003dgold)
+
+fuse-ld=lld
+UrlSuffix(gcc/Link-Options.html#index-fuse-ld_003dlld)
+
+fuse-ld=mold
+UrlSuffix(gcc/Link-Options.html#index-fuse-ld_003dmold)
+
+fuse-linker-plugin
+UrlSuffix(gcc/Optimize-Options.html#index-fuse-linker-plugin)
+
+fvar-tracking
+UrlSuffix(gcc/Debugging-Options.html#index-fvar-tracking)
+
+fvar-tracking-assignments
+UrlSuffix(gcc/Debugging-Options.html#index-fno-var-tracking-assignments)
+
+fvar-tracking-assignments-toggle
+UrlSuffix(gcc/Developer-Options.html#index-fno-var-tracking-assignments-toggle)
+
+ftree-vectorize
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-vectorize)
+
+ftree-loop-vectorize
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-loop-vectorize)
+
+ftree-slp-vectorize
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-slp-vectorize)
+
+fvect-cost-model=
+UrlSuffix(gcc/Optimize-Options.html#index-fvect-cost-model)
+
+fsimd-cost-model=
+UrlSuffix(gcc/Optimize-Options.html#index-fsimd-cost-model)
+
+fvect-cost-model
+UrlSuffix(gcc/Optimize-Options.html#index-fvect-cost-model)
+
+ftree-scev-cprop
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-scev-cprop)
+
+ftrivial-auto-var-init=
+UrlSuffix(gcc/Optimize-Options.html#index-ftrivial-auto-var-init)
+
+fverbose-asm
+UrlSuffix(gcc/Code-Gen-Options.html#index-fverbose-asm)
+
+fvisibility=
+UrlSuffix(gcc/Code-Gen-Options.html#index-fvisibility)
+
+fvtable-verify=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fvtable-verify)
+
+fvtv-counts
+UrlSuffix(gcc/Instrumentation-Options.html#index-fvtv-counts)
+
+fvtv-debug
+UrlSuffix(gcc/Instrumentation-Options.html#index-fvtv-debug)
+
+fvpt
+UrlSuffix(gcc/Optimize-Options.html#index-fvpt)
+
+fweb
+UrlSuffix(gcc/Optimize-Options.html#index-fweb)
+
+ftree-builtin-call-dce
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-builtin-call-dce)
+
+fwhole-program
+UrlSuffix(gcc/Optimize-Options.html#index-fwhole-program)
+
+fwrapv-pointer
+UrlSuffix(gcc/Code-Gen-Options.html#index-fwrapv-pointer)
+
+fwrapv
+UrlSuffix(gcc/Code-Gen-Options.html#index-fwrapv)
+
+fzero-initialized-in-bss
+UrlSuffix(gcc/Optimize-Options.html#index-fno-zero-initialized-in-bss)
+
+fzero-call-used-regs=
+UrlSuffix(gcc/Optimize-Options.html#index-fzero-call-used-regs)
+
+g
+UrlSuffix(gcc/Debugging-Options.html#index-g)
+
+gas-loc-support
+UrlSuffix(gcc/Debugging-Options.html#index-gas-loc-support)
+
+gas-locview-support
+UrlSuffix(gcc/Debugging-Options.html#index-gas-locview-support)
+
+gcodeview
+UrlSuffix(gcc/Debugging-Options.html#index-gcodeview)
+
+gcolumn-info
+UrlSuffix(gcc/Debugging-Options.html#index-gcolumn-info)
+
+gctf
+UrlSuffix(gcc/Debugging-Options.html#index-gctf)
+
+gbtf
+UrlSuffix(gcc/Debugging-Options.html#index-gbtf)
+
+gdwarf
+UrlSuffix(gcc/Debugging-Options.html#index-gdwarf)
+
+gdwarf32
+UrlSuffix(gcc/Debugging-Options.html#index-gdwarf32)
+
+gdwarf64
+UrlSuffix(gcc/Debugging-Options.html#index-gdwarf64)
+
+ggdb
+UrlSuffix(gcc/Debugging-Options.html#index-ggdb)
+
+ginline-points
+UrlSuffix(gcc/Debugging-Options.html#index-ginline-points)
+
+ginternal-reset-location-views
+UrlSuffix(gcc/Debugging-Options.html#index-ginternal-reset-location-views)
+
+gpubnames
+UrlSuffix(gcc/Debugging-Options.html#index-gpubnames)
+
+ggnu-pubnames
+UrlSuffix(gcc/Debugging-Options.html#index-ggnu-pubnames)
+
+grecord-gcc-switches
+UrlSuffix(gcc/Debugging-Options.html#index-grecord-gcc-switches)
+
+gsplit-dwarf
+UrlSuffix(gcc/Debugging-Options.html#index-gsplit-dwarf)
+
+gstatement-frontiers
+UrlSuffix(gcc/Debugging-Options.html#index-gstatement-frontiers)
+
+gstrict-dwarf
+UrlSuffix(gcc/Debugging-Options.html#index-gstrict-dwarf)
+
+gdescribe-dies
+UrlSuffix(gcc/Debugging-Options.html#index-gdescribe-dies)
+
+gtoggle
+UrlSuffix(gcc/Developer-Options.html#index-gtoggle)
+
+gvariable-location-views
+UrlSuffix(gcc/Debugging-Options.html#index-gvariable-location-views)
+
+gvariable-location-views=incompat5
+UrlSuffix(gcc/Debugging-Options.html#index-gvariable-location-views_003dincompat5)
+
+gvms
+UrlSuffix(gcc/Debugging-Options.html#index-gvms)
+
+gz
+UrlSuffix(gcc/Debugging-Options.html#index-gz)
+
+gz=
+UrlSuffix(gcc/Debugging-Options.html#index-gz)
+
+iplugindir=
+UrlSuffix(gcc/Directory-Options.html#index-iplugindir_003d)
+
+l
+UrlSuffix(gcc/Link-Options.html#index-l)
+
+no-canonical-prefixes
+UrlSuffix(gcc/Directory-Options.html#index-no-canonical-prefixes)
+
+nodefaultlibs
+UrlSuffix(gcc/Link-Options.html#index-nodefaultlibs)
+
+nostartfiles
+UrlSuffix(gcc/Link-Options.html#index-nostartfiles)
+
+nolibc
+UrlSuffix(gcc/Link-Options.html#index-nolibc)
+
+nostdlib
+UrlSuffix(gcc/Link-Options.html#index-nostdlib)
+
+nostdlib++
+UrlSuffix(gcc/Link-Options.html#index-nostdlib_002b_002b)
+
+o
+UrlSuffix(gcc/Overall-Options.html#index-o)
+
+p
+UrlSuffix(gcc/Instrumentation-Options.html#index-p)
+
+pass-exit-codes
+UrlSuffix(gcc/Overall-Options.html#index-pass-exit-codes)
+
+; skipping 'pedantic' due to multiple URLs:
+;   duplicate: 'gcc/Alternate-Keywords.html#index-pedantic-3'
+;   duplicate: 'gcc/C-Extensions.html#index-pedantic-2'
+;   duplicate: 'gcc/Standards.html#index-pedantic'
+;   duplicate: 'gcc/Warning-Options.html#index-pedantic-1'
+;   duplicate: 'gcc/Warnings-and-Errors.html#index-pedantic-4'
+
+; skipping 'pedantic-errors' due to multiple URLs:
+;   duplicate: 'gcc/Non-bugs.html#index-pedantic-errors-2'
+;   duplicate: 'gcc/Standards.html#index-pedantic-errors'
+;   duplicate: 'gcc/Warning-Options.html#index-pedantic-errors-1'
+;   duplicate: 'gcc/Warnings-and-Errors.html#index-pedantic-errors-3'
+
+pg
+UrlSuffix(gcc/Instrumentation-Options.html#index-pg)
+
+pipe
+UrlSuffix(gcc/Overall-Options.html#index-pipe)
+
+print-file-name=
+UrlSuffix(gcc/Developer-Options.html#index-print-file-name)
+
+print-libgcc-file-name
+UrlSuffix(gcc/Developer-Options.html#index-print-libgcc-file-name)
+
+print-multi-directory
+UrlSuffix(gcc/Developer-Options.html#index-print-multi-directory)
+
+print-multi-lib
+UrlSuffix(gcc/Developer-Options.html#index-print-multi-lib)
+
+print-multi-os-directory
+UrlSuffix(gcc/Developer-Options.html#index-print-multi-os-directory)
+
+print-multiarch
+UrlSuffix(gcc/Developer-Options.html#index-print-multiarch)
+
+print-prog-name=
+UrlSuffix(gcc/Developer-Options.html#index-print-prog-name)
+
+print-search-dirs
+UrlSuffix(gcc/Developer-Options.html#index-print-search-dirs)
+
+print-sysroot
+UrlSuffix(gcc/Developer-Options.html#index-print-sysroot)
+
+print-sysroot-headers-suffix
+UrlSuffix(gcc/Developer-Options.html#index-print-sysroot-headers-suffix)
+
+r
+UrlSuffix(gcc/Link-Options.html#index-r)
+
+s
+UrlSuffix(gcc/Link-Options.html#index-s)
+
+save-temps
+UrlSuffix(gcc/Developer-Options.html#index-save-temps)
+
+save-temps=
+UrlSuffix(gcc/Developer-Options.html#index-save-temps)
+
+time
+UrlSuffix(gcc/Developer-Options.html#index-time)
+
+time=
+UrlSuffix(gcc/Developer-Options.html#index-time)
+
+u
+UrlSuffix(gcc/Link-Options.html#index-u)
+
+undef
+UrlSuffix(gcc/Preprocessor-Options.html#index-undef)
+
+v
+UrlSuffix(gcc/Overall-Options.html#index-v)
+
+version
+UrlSuffix(gcc/Overall-Options.html#index-version)
+
+w
+UrlSuffix(gcc/Warning-Options.html#index-w)
+
+wrapper
+UrlSuffix(gcc/Overall-Options.html#index-wrapper)
+
+x
+UrlSuffix(gcc/Overall-Options.html#index-x)
+
+shared
+UrlSuffix(gcc/Link-Options.html#index-shared)
+
+shared-libgcc
+UrlSuffix(gcc/Link-Options.html#index-shared-libgcc)
+
+specs
+UrlSuffix(gcc/Overall-Options.html#index-specs)
+
+specs=
+UrlSuffix(gcc/Overall-Options.html#index-specs)
+
+; skipping 'static' due to multiple URLs:
+;   duplicate: 'gcc/Darwin-Options.html#index-static-1'
+;   duplicate: 'gcc/Link-Options.html#index-static'
+
+static-libgcc
+UrlSuffix(gcc/Link-Options.html#index-static-libgcc)
+
+static-libstdc++
+UrlSuffix(gcc/Link-Options.html#index-static-libstdc_002b_002b)
+
+static-libasan
+UrlSuffix(gcc/Link-Options.html#index-static-libasan)
+
+static-libtsan
+UrlSuffix(gcc/Link-Options.html#index-static-libtsan)
+
+static-liblsan
+UrlSuffix(gcc/Link-Options.html#index-static-liblsan)
+
+static-libubsan
+UrlSuffix(gcc/Link-Options.html#index-static-libubsan)
+
+symbolic
+UrlSuffix(gcc/Link-Options.html#index-symbolic)
+
+no-pie
+UrlSuffix(gcc/Link-Options.html#index-no-pie)
+
+pie
+UrlSuffix(gcc/Link-Options.html#index-pie)
+
+static-pie
+UrlSuffix(gcc/Link-Options.html#index-static-pie)
+
+z
+UrlSuffix(gcc/Link-Options.html#index-z)
+
+fipa-ra
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-ra)
+
diff --git a/gcc/config/aarch64/aarch64.opt.urls b/gcc/config/aarch64/aarch64.opt.urls
new file mode 100644
index 000000000000..e008686db225
--- /dev/null
+++ b/gcc/config/aarch64/aarch64.opt.urls
@@ -0,0 +1,84 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/aarch64/aarch64.opt and generated HTML
+
+mbig-endian
+UrlSuffix(gcc/AArch64-Options.html#index-mbig-endian)
+
+mgeneral-regs-only
+UrlSuffix(gcc/AArch64-Options.html#index-mgeneral-regs-only)
+
+mharden-sls=
+UrlSuffix(gcc/AArch64-Options.html#index-mharden-sls)
+
+mfix-cortex-a53-835769
+UrlSuffix(gcc/AArch64-Options.html#index-mfix-cortex-a53-835769)
+
+mfix-cortex-a53-843419
+UrlSuffix(gcc/AArch64-Options.html#index-mfix-cortex-a53-843419)
+
+mlittle-endian
+UrlSuffix(gcc/AArch64-Options.html#index-mlittle-endian)
+
+; skipping 'mcmodel=' due to finding no URLs
+
+mtp=
+UrlSuffix(gcc/AArch64-Options.html#index-mtp)
+
+mstrict-align
+UrlSuffix(gcc/AArch64-Options.html#index-mstrict-align)
+
+momit-leaf-frame-pointer
+UrlSuffix(gcc/AArch64-Options.html#index-momit-leaf-frame-pointer)
+
+; skipping 'mtls-dialect=' due to finding no URLs
+
+mtls-size=
+UrlSuffix(gcc/AArch64-Options.html#index-mtls-size)
+
+march=
+UrlSuffix(gcc/AArch64-Options.html#index-march)
+
+mcpu=
+UrlSuffix(gcc/AArch64-Options.html#index-mcpu)
+
+mtune=
+UrlSuffix(gcc/AArch64-Options.html#index-mtune)
+
+mabi=
+UrlSuffix(gcc/AArch64-Options.html#index-mabi)
+
+moverride=
+UrlSuffix(gcc/AArch64-Options.html#index-moverride)
+
+mpc-relative-literal-loads
+UrlSuffix(gcc/AArch64-Options.html#index-mpc-relative-literal-loads)
+
+mbranch-protection=
+UrlSuffix(gcc/AArch64-Options.html#index-mbranch-protection)
+
+msign-return-address=
+UrlSuffix(gcc/AArch64-Options.html#index-msign-return-address)
+
+mlow-precision-recip-sqrt
+UrlSuffix(gcc/AArch64-Options.html#index-mlow-precision-recip-sqrt)
+
+mlow-precision-sqrt
+UrlSuffix(gcc/AArch64-Options.html#index-mlow-precision-sqrt)
+
+mlow-precision-div
+UrlSuffix(gcc/AArch64-Options.html#index-mlow-precision-div)
+
+msve-vector-bits=
+UrlSuffix(gcc/AArch64-Options.html#index-msve-vector-bits)
+
+mverbose-cost-dump
+UrlSuffix(gcc/AArch64-Options.html#index-mverbose-cost-dump)
+
+mstack-protector-guard=
+UrlSuffix(gcc/AArch64-Options.html#index-mstack-protector-guard)
+
+mstack-protector-guard-reg=
+UrlSuffix(gcc/AArch64-Options.html#index-mstack-protector-guard-reg)
+
+mstack-protector-guard-offset=
+UrlSuffix(gcc/AArch64-Options.html#index-mstack-protector-guard-offset)
+
diff --git a/gcc/config/alpha/alpha.opt.urls b/gcc/config/alpha/alpha.opt.urls
new file mode 100644
index 000000000000..96d44b9c98c1
--- /dev/null
+++ b/gcc/config/alpha/alpha.opt.urls
@@ -0,0 +1,76 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/alpha/alpha.opt and generated HTML
+
+msoft-float
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-msoft-float-2)
+
+; skipping 'mgas' due to finding no URLs
+
+mieee-conformant
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mieee-conformant)
+
+mieee
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mieee)
+
+mieee-with-inexact
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mieee-with-inexact)
+
+mbuild-constants
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mbuild-constants)
+
+mfloat-vax
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mfloat-vax)
+
+mfloat-ieee
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mfloat-ieee)
+
+mbwx
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mbwx)
+
+mmax
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mmax)
+
+mfix
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mfix)
+
+mcix
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mcix)
+
+mexplicit-relocs
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mexplicit-relocs)
+
+msmall-data
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-msmall-data)
+
+mlarge-data
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mlarge-data)
+
+msmall-text
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-msmall-text)
+
+mlarge-text
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mlarge-text)
+
+; skipping 'mlong-double-128' due to finding no URLs
+
+; skipping 'mlong-double-64' due to finding no URLs
+
+mcpu=
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mcpu-4)
+
+mtune=
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mtune-6)
+
+mfp-rounding-mode=
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mfp-rounding-mode)
+
+mfp-trap-mode=
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mfp-trap-mode)
+
+mtrap-precision=
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mtrap-precision)
+
+mmemory-latency=
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mmemory-latency)
+
+; skipping 'mtls-size=' due to finding no URLs
+
diff --git a/gcc/config/alpha/elf.opt.urls b/gcc/config/alpha/elf.opt.urls
new file mode 100644
index 000000000000..d97d0fe0f6a1
--- /dev/null
+++ b/gcc/config/alpha/elf.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/alpha/elf.opt and generated HTML
+
diff --git a/gcc/config/arc/arc-tables.opt.urls b/gcc/config/arc/arc-tables.opt.urls
new file mode 100644
index 000000000000..1e177e874064
--- /dev/null
+++ b/gcc/config/arc/arc-tables.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/arc/arc-tables.opt and generated HTML
+
diff --git a/gcc/config/arc/arc.opt.urls b/gcc/config/arc/arc.opt.urls
new file mode 100644
index 000000000000..b427a5573a6a
--- /dev/null
+++ b/gcc/config/arc/arc.opt.urls
@@ -0,0 +1,260 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/arc/arc.opt and generated HTML
+
+mbig-endian
+UrlSuffix(gcc/ARC-Options.html#index-mbig-endian-1)
+
+mlittle-endian
+UrlSuffix(gcc/ARC-Options.html#index-mlittle-endian-1)
+
+mno-cond-exec
+UrlSuffix(gcc/ARC-Options.html#index-mno-cond-exec)
+
+mA6
+UrlSuffix(gcc/ARC-Options.html#index-mA6)
+
+mARC600
+UrlSuffix(gcc/ARC-Options.html#index-mARC600)
+
+mARC601
+UrlSuffix(gcc/ARC-Options.html#index-mARC601)
+
+mA7
+UrlSuffix(gcc/ARC-Options.html#index-mA7)
+
+mARC700
+UrlSuffix(gcc/ARC-Options.html#index-mARC700)
+
+mjli-always
+UrlSuffix(gcc/ARC-Options.html#index-mjli-always)
+
+mmpy-option=
+UrlSuffix(gcc/ARC-Options.html#index-mmpy-option)
+
+mdiv-rem
+UrlSuffix(gcc/ARC-Options.html#index-mdiv-rem)
+
+mcode-density
+UrlSuffix(gcc/ARC-Options.html#index-mcode-density)
+
+mmixed-code
+UrlSuffix(gcc/ARC-Options.html#index-mmixed-code)
+
+mvolatile-cache
+UrlSuffix(gcc/ARC-Options.html#index-mvolatile-cache)
+
+mno-volatile-cache
+UrlSuffix(gcc/ARC-Options.html#index-mno-volatile-cache)
+
+mbarrel-shifter
+UrlSuffix(gcc/ARC-Options.html#index-mbarrel-shifter)
+
+mnorm
+UrlSuffix(gcc/ARC-Options.html#index-mnorm)
+
+mswap
+UrlSuffix(gcc/ARC-Options.html#index-mswap)
+
+mmul64
+UrlSuffix(gcc/ARC-Options.html#index-mmul64)
+
+mno-mpy
+UrlSuffix(gcc/ARC-Options.html#index-mno-mpy)
+
+mea
+UrlSuffix(gcc/ARC-Options.html#index-mea)
+
+msoft-float
+UrlSuffix(gcc/ARC-Options.html#index-msoft-float)
+
+mlong-calls
+UrlSuffix(gcc/ARC-Options.html#index-mlong-calls-1)
+
+mno-brcc
+UrlSuffix(gcc/ARC-Options.html#index-mno-brcc)
+
+msdata
+UrlSuffix(gcc/ARC-Options.html#index-msdata)
+
+mmillicode
+UrlSuffix(gcc/ARC-Options.html#index-mmillicode)
+
+mspfp
+UrlSuffix(gcc/ARC-Options.html#index-mspfp)
+
+mspfp-compact
+UrlSuffix(gcc/ARC-Options.html#index-mspfp-compact)
+
+mspfp-fast
+UrlSuffix(gcc/ARC-Options.html#index-mspfp-fast)
+
+margonaut
+UrlSuffix(gcc/ARC-Options.html#index-margonaut)
+
+mdpfp
+UrlSuffix(gcc/ARC-Options.html#index-mdpfp)
+
+mdpfp-compact
+UrlSuffix(gcc/ARC-Options.html#index-mdpfp-compact)
+
+mdpfp-fast
+UrlSuffix(gcc/ARC-Options.html#index-mdpfp-fast)
+
+mno-dpfp-lrsr
+UrlSuffix(gcc/ARC-Options.html#index-mno-dpfp-lrsr)
+
+msimd
+UrlSuffix(gcc/ARC-Options.html#index-msimd)
+
+mcpu=
+UrlSuffix(gcc/ARC-Options.html#index-mcpu-1)
+
+msize-level=
+UrlSuffix(gcc/ARC-Options.html#index-msize-level)
+
+misize
+UrlSuffix(gcc/ARC-Options.html#index-misize)
+
+mmultcost=
+UrlSuffix(gcc/ARC-Options.html#index-mmultcost)
+
+mtune=
+UrlSuffix(gcc/ARC-Options.html#index-mtune-2)
+
+mindexed-loads
+UrlSuffix(gcc/ARC-Options.html#index-mindexed-loads)
+
+mauto-modify-reg
+UrlSuffix(gcc/ARC-Options.html#index-mauto-modify-reg)
+
+mmul32x16
+UrlSuffix(gcc/ARC-Options.html#index-mmul32x16)
+
+munalign-prob-threshold=
+UrlSuffix(gcc/ARC-Options.html#index-munalign-prob-threshold)
+
+mmedium-calls
+UrlSuffix(gcc/ARC-Options.html#index-mmedium-calls)
+
+mannotate-align
+UrlSuffix(gcc/ARC-Options.html#index-mannotate-align)
+
+malign-call
+UrlSuffix(gcc/ARC-Options.html#index-malign-call)
+
+mRcq
+UrlSuffix(gcc/ARC-Options.html#index-mRcq)
+
+mRcw
+UrlSuffix(gcc/ARC-Options.html#index-mRcw)
+
+mearly-cbranchsi
+UrlSuffix(gcc/ARC-Options.html#index-mearly-cbranchsi)
+
+mbbit-peephole
+UrlSuffix(gcc/ARC-Options.html#index-mbbit-peephole)
+
+mcase-vector-pcrel
+UrlSuffix(gcc/ARC-Options.html#index-mcase-vector-pcrel)
+
+mcompact-casesi
+UrlSuffix(gcc/ARC-Options.html#index-mcompact-casesi)
+
+mq-class
+UrlSuffix(gcc/ARC-Options.html#index-mq-class)
+
+mexpand-adddi
+UrlSuffix(gcc/ARC-Options.html#index-mexpand-adddi)
+
+; skipping 'mcrc' due to finding no URLs
+
+mdsp-packa
+UrlSuffix(gcc/ARC-Options.html#index-mdsp-packa)
+
+mdvbf
+UrlSuffix(gcc/ARC-Options.html#index-mdvbf)
+
+mmac-d16
+UrlSuffix(gcc/ARC-Options.html#index-mmac-d16)
+
+mmac-24
+UrlSuffix(gcc/ARC-Options.html#index-mmac-24)
+
+mtelephony
+UrlSuffix(gcc/ARC-Options.html#index-mtelephony)
+
+mxy
+UrlSuffix(gcc/ARC-Options.html#index-mxy)
+
+mlock
+UrlSuffix(gcc/ARC-Options.html#index-mlock)
+
+mswape
+UrlSuffix(gcc/ARC-Options.html#index-mswape)
+
+mrtsc
+UrlSuffix(gcc/ARC-Options.html#index-mrtsc)
+
+EB
+UrlSuffix(gcc/ARC-Options.html#index-EB)
+
+EL
+UrlSuffix(gcc/ARC-Options.html#index-EL)
+
+marclinux
+UrlSuffix(gcc/ARC-Options.html#index-marclinux)
+
+marclinux_prof
+UrlSuffix(gcc/ARC-Options.html#index-marclinux_005fprof)
+
+mlra
+UrlSuffix(gcc/ARC-Options.html#index-mlra)
+
+mlra-priority-none
+UrlSuffix(gcc/ARC-Options.html#index-mlra-priority-none)
+
+mlra-priority-compact
+UrlSuffix(gcc/ARC-Options.html#index-mlra-priority-compact)
+
+mlra-priority-noncompact
+UrlSuffix(gcc/ARC-Options.html#index-mlra-priority-noncompact)
+
+mEA
+UrlSuffix(gcc/ARC-Options.html#index-mEA)
+
+multcost=
+UrlSuffix(gcc/ARC-Options.html#index-multcost)
+
+matomic
+UrlSuffix(gcc/ARC-Options.html#index-matomic)
+
+mll64
+UrlSuffix(gcc/ARC-Options.html#index-mll64)
+
+mfpu=
+UrlSuffix(gcc/ARC-Options.html#index-mfpu)
+
+mtp-regno=
+UrlSuffix(gcc/ARC-Options.html#index-mtp-regno)
+
+; skipping 'mbitops' due to finding no URLs
+
+; skipping 'munaligned-access' due to finding no URLs
+
+mirq-ctrl-saved=
+UrlSuffix(gcc/ARC-Options.html#index-mirq-ctrl-saved)
+
+mrgf-banked-regs=
+UrlSuffix(gcc/ARC-Options.html#index-mrgf-banked-regs)
+
+mlpc-width=
+UrlSuffix(gcc/ARC-Options.html#index-mlpc-width)
+
+mrf16
+UrlSuffix(gcc/ARC-Options.html#index-mrf16)
+
+mbranch-index
+UrlSuffix(gcc/ARC-Options.html#index-mbranch-index)
+
+mcode-density-frame
+UrlSuffix(gcc/ARC-Options.html#index-mcode-density-frame)
+
diff --git a/gcc/config/arm/arm-tables.opt.urls b/gcc/config/arm/arm-tables.opt.urls
new file mode 100644
index 000000000000..f0a6f8e1600c
--- /dev/null
+++ b/gcc/config/arm/arm-tables.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/arm/arm-tables.opt and generated HTML
+
diff --git a/gcc/config/arm/arm.opt.urls b/gcc/config/arm/arm.opt.urls
new file mode 100644
index 000000000000..11959708a212
--- /dev/null
+++ b/gcc/config/arm/arm.opt.urls
@@ -0,0 +1,149 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/arm/arm.opt and generated HTML
+
+mabi=
+UrlSuffix(gcc/ARM-Options.html#index-mabi-1)
+
+mabort-on-noreturn
+UrlSuffix(gcc/ARM-Options.html#index-mabort-on-noreturn)
+
+mapcs
+UrlSuffix(gcc/ARM-Options.html#index-mapcs)
+
+mapcs-frame
+UrlSuffix(gcc/ARM-Options.html#index-mapcs-frame)
+
+march=
+UrlSuffix(gcc/ARM-Options.html#index-march-2)
+
+marm
+UrlSuffix(gcc/ARM-Options.html#index-marm)
+
+mbig-endian
+UrlSuffix(gcc/ARM-Options.html#index-mbig-endian-2)
+
+mcallee-super-interworking
+UrlSuffix(gcc/ARM-Options.html#index-mcallee-super-interworking)
+
+mcaller-super-interworking
+UrlSuffix(gcc/ARM-Options.html#index-mcaller-super-interworking)
+
+mcpu=
+UrlSuffix(gcc/ARM-Options.html#index-mcpu-2)
+
+mfloat-abi=
+UrlSuffix(gcc/ARM-Options.html#index-mfloat-abi)
+
+mcmse
+UrlSuffix(gcc/ARM-Options.html#index-mcmse)
+
+mflip-thumb
+UrlSuffix(gcc/ARM-Options.html#index-mflip-thumb)
+
+mfp16-format=
+UrlSuffix(gcc/ARM-Options.html#index-mfp16-format)
+
+mfpu=
+UrlSuffix(gcc/ARM-Options.html#index-mfpu-1)
+
+; skipping 'mhard-float' due to finding no URLs
+
+mlittle-endian
+UrlSuffix(gcc/ARM-Options.html#index-mlittle-endian-2)
+
+mlong-calls
+UrlSuffix(gcc/ARM-Options.html#index-mlong-calls-2)
+
+mpic-data-is-text-relative
+UrlSuffix(gcc/ARM-Options.html#index-mpic-data-is-text-relative)
+
+mpic-register=
+UrlSuffix(gcc/ARM-Options.html#index-mpic-register)
+
+mpoke-function-name
+UrlSuffix(gcc/ARM-Options.html#index-mpoke-function-name)
+
+msched-prolog
+UrlSuffix(gcc/ARM-Options.html#index-msched-prolog)
+
+msingle-pic-base
+UrlSuffix(gcc/ARM-Options.html#index-msingle-pic-base)
+
+; skipping 'msoft-float' due to finding no URLs
+
+mstructure-size-boundary=
+UrlSuffix(gcc/ARM-Options.html#index-mstructure-size-boundary)
+
+mthumb
+UrlSuffix(gcc/ARM-Options.html#index-mthumb)
+
+mthumb-interwork
+UrlSuffix(gcc/ARM-Options.html#index-mthumb-interwork)
+
+mtls-dialect=
+UrlSuffix(gcc/ARM-Options.html#index-mtls-dialect)
+
+mtp=
+UrlSuffix(gcc/ARM-Options.html#index-mtp-1)
+
+mtpcs-frame
+UrlSuffix(gcc/ARM-Options.html#index-mtpcs-frame)
+
+mtpcs-leaf-frame
+UrlSuffix(gcc/ARM-Options.html#index-mtpcs-leaf-frame)
+
+mtune=
+UrlSuffix(gcc/ARM-Options.html#index-mtune-4)
+
+mprint-tune-info
+UrlSuffix(gcc/ARM-Options.html#index-mprint-tune-info)
+
+mverbose-cost-dump
+UrlSuffix(gcc/ARM-Options.html#index-mverbose-cost-dump-1)
+
+mword-relocations
+UrlSuffix(gcc/ARM-Options.html#index-mword-relocations)
+
+mrestrict-it
+UrlSuffix(gcc/ARM-Options.html#index-mrestrict-it)
+
+mfix-cortex-m3-ldrd
+UrlSuffix(gcc/ARM-Options.html#index-mfix-cortex-m3-ldrd)
+
+mfix-cmse-cve-2021-35465
+UrlSuffix(gcc/ARM-Options.html#index-mfix-cmse-cve-2021-35465)
+
+munaligned-access
+UrlSuffix(gcc/ARM-Options.html#index-munaligned-access)
+
+mneon-for-64bits
+UrlSuffix(gcc/ARM-Options.html#index-mneon-for-64bits)
+
+mslow-flash-data
+UrlSuffix(gcc/ARM-Options.html#index-mslow-flash-data)
+
+masm-syntax-unified
+UrlSuffix(gcc/ARM-Options.html#index-masm-syntax-unified)
+
+mpure-code
+UrlSuffix(gcc/ARM-Options.html#index-mpure-code)
+
+mbe8
+UrlSuffix(gcc/ARM-Options.html#index-mbe8)
+
+; skipping 'mbranch-cost=' due to finding no URLs
+
+mbranch-protection=
+UrlSuffix(gcc/ARM-Options.html#index-mbranch-protection-1)
+
+mgeneral-regs-only
+UrlSuffix(gcc/ARM-Options.html#index-mgeneral-regs-only-1)
+
+mfdpic
+UrlSuffix(gcc/ARM-Options.html#index-mfdpic)
+
+mstack-protector-guard=
+UrlSuffix(gcc/ARM-Options.html#index-mstack-protector-guard-1)
+
+mstack-protector-guard-offset=
+UrlSuffix(gcc/ARM-Options.html#index-mstack-protector-guard-offset-1)
+
diff --git a/gcc/config/arm/vxworks.opt.urls b/gcc/config/arm/vxworks.opt.urls
new file mode 100644
index 000000000000..8fe7eec22783
--- /dev/null
+++ b/gcc/config/arm/vxworks.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/arm/vxworks.opt and generated HTML
+
diff --git a/gcc/config/avr/avr.opt.urls b/gcc/config/avr/avr.opt.urls
new file mode 100644
index 000000000000..7af677199cc4
--- /dev/null
+++ b/gcc/config/avr/avr.opt.urls
@@ -0,0 +1,71 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/avr/avr.opt and generated HTML
+
+mcall-prologues
+UrlSuffix(gcc/AVR-Options.html#index-mcall-prologues)
+
+mmcu=
+UrlSuffix(gcc/AVR-Options.html#index-mmcu)
+
+mgas-isr-prologues
+UrlSuffix(gcc/AVR-Options.html#index-mgas-isr-prologues)
+
+mn-flash=
+UrlSuffix(gcc/AVR-Options.html#index-mn-flash)
+
+mrmw
+UrlSuffix(gcc/AVR-Options.html#index-mrmw)
+
+mshort-calls
+UrlSuffix(gcc/AVR-Options.html#index-mshort-calls)
+
+mint8
+UrlSuffix(gcc/AVR-Options.html#index-mint8)
+
+mno-interrupts
+UrlSuffix(gcc/AVR-Options.html#index-mno-interrupts)
+
+mbranch-cost=
+UrlSuffix(gcc/AVR-Options.html#index-mbranch-cost-1)
+
+mmain-is-OS_task
+UrlSuffix(gcc/AVR-Options.html#index-mmain-is-OS_005ftask)
+
+mtiny-stack
+UrlSuffix(gcc/AVR-Options.html#index-mtiny-stack)
+
+mrelax
+UrlSuffix(gcc/AVR-Options.html#index-mrelax)
+
+maccumulate-args
+UrlSuffix(gcc/AVR-Options.html#index-maccumulate-args)
+
+mstrict-X
+UrlSuffix(gcc/AVR-Options.html#index-mstrict-X)
+
+msp8
+UrlSuffix(gcc/AVR-Options.html#index-msp8)
+
+Waddr-space-convert
+UrlSuffix(gcc/AVR-Options.html#index-Waddr-space-convert)
+
+Wmisspelled-isr
+UrlSuffix(gcc/AVR-Options.html#index-Wmisspelled-isr)
+
+mfract-convert-truncate
+UrlSuffix(gcc/AVR-Options.html#index-mfract-convert-truncate)
+
+mabsdata
+UrlSuffix(gcc/AVR-Options.html#index-mabsdata)
+
+mdouble=
+UrlSuffix(gcc/AVR-Options.html#index-mdouble)
+
+mlong-double=
+UrlSuffix(gcc/AVR-Options.html#index-mlong-double)
+
+nodevicelib
+UrlSuffix(gcc/AVR-Options.html#index-nodevicelib)
+
+nodevicespecs
+UrlSuffix(gcc/AVR-Options.html#index-nodevicespecs)
+
diff --git a/gcc/config/bfin/bfin.opt.urls b/gcc/config/bfin/bfin.opt.urls
new file mode 100644
index 000000000000..99836a30924b
--- /dev/null
+++ b/gcc/config/bfin/bfin.opt.urls
@@ -0,0 +1,61 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/bfin/bfin.opt and generated HTML
+
+msim
+UrlSuffix(gcc/Blackfin-Options.html#index-msim)
+
+mcpu=
+UrlSuffix(gcc/Blackfin-Options.html#index-mcpu_003d)
+
+momit-leaf-frame-pointer
+UrlSuffix(gcc/Blackfin-Options.html#index-momit-leaf-frame-pointer-1)
+
+mlow64k
+UrlSuffix(gcc/Blackfin-Options.html#index-mlow64k)
+
+mcsync-anomaly
+UrlSuffix(gcc/Blackfin-Options.html#index-mcsync-anomaly)
+
+mspecld-anomaly
+UrlSuffix(gcc/Blackfin-Options.html#index-mspecld-anomaly)
+
+mid-shared-library
+UrlSuffix(gcc/Blackfin-Options.html#index-mid-shared-library)
+
+mleaf-id-shared-library
+UrlSuffix(gcc/Blackfin-Options.html#index-mleaf-id-shared-library)
+
+mshared-library-id=
+UrlSuffix(gcc/Blackfin-Options.html#index-mshared-library-id)
+
+msep-data
+UrlSuffix(gcc/Blackfin-Options.html#index-msep-data)
+
+mlong-calls
+UrlSuffix(gcc/Blackfin-Options.html#index-mlong-calls-3)
+
+mfast-fp
+UrlSuffix(gcc/Blackfin-Options.html#index-mfast-fp)
+
+; skipping 'mfdpic' due to finding no URLs
+
+minline-plt
+UrlSuffix(gcc/Blackfin-Options.html#index-minline-plt)
+
+mstack-check-l1
+UrlSuffix(gcc/Blackfin-Options.html#index-mstack-check-l1)
+
+mmulticore
+UrlSuffix(gcc/Blackfin-Options.html#index-mmulticore)
+
+mcorea
+UrlSuffix(gcc/Blackfin-Options.html#index-mcorea)
+
+mcoreb
+UrlSuffix(gcc/Blackfin-Options.html#index-mcoreb)
+
+msdram
+UrlSuffix(gcc/Blackfin-Options.html#index-msdram)
+
+micplb
+UrlSuffix(gcc/Blackfin-Options.html#index-micplb)
+
diff --git a/gcc/config/bpf/bpf.opt.urls b/gcc/config/bpf/bpf.opt.urls
new file mode 100644
index 000000000000..8c1e5f86d5cc
--- /dev/null
+++ b/gcc/config/bpf/bpf.opt.urls
@@ -0,0 +1,35 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/bpf/bpf.opt and generated HTML
+
+mbig-endian
+UrlSuffix(gcc/eBPF-Options.html#index-mbig-endian-5)
+
+mlittle-endian
+UrlSuffix(gcc/eBPF-Options.html#index-mlittle-endian-5)
+
+mco-re
+UrlSuffix(gcc/eBPF-Options.html#index-mco-re)
+
+mjmpext
+UrlSuffix(gcc/eBPF-Options.html#index-mjmpext)
+
+malu32
+UrlSuffix(gcc/eBPF-Options.html#index-malu32)
+
+mjmp32
+UrlSuffix(gcc/eBPF-Options.html#index-mjmp32)
+
+mv3-atomics
+UrlSuffix(gcc/eBPF-Options.html#index-mv3-atomics)
+
+mbswap
+UrlSuffix(gcc/eBPF-Options.html#index-mbswap)
+
+msdiv
+UrlSuffix(gcc/eBPF-Options.html#index-msdiv)
+
+msmov
+UrlSuffix(gcc/eBPF-Options.html#index-msmov)
+
+mcpu=
+UrlSuffix(gcc/eBPF-Options.html#index-mcpu-5)
+
diff --git a/gcc/config/c6x/c6x-tables.opt.urls b/gcc/config/c6x/c6x-tables.opt.urls
new file mode 100644
index 000000000000..35d14c753e2c
--- /dev/null
+++ b/gcc/config/c6x/c6x-tables.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/c6x/c6x-tables.opt and generated HTML
+
diff --git a/gcc/config/c6x/c6x.opt.urls b/gcc/config/c6x/c6x.opt.urls
new file mode 100644
index 000000000000..51a6a6068baa
--- /dev/null
+++ b/gcc/config/c6x/c6x.opt.urls
@@ -0,0 +1,18 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/c6x/c6x.opt and generated HTML
+
+mbig-endian
+UrlSuffix(gcc/C6X-Options.html#index-mbig-endian-3)
+
+mlittle-endian
+UrlSuffix(gcc/C6X-Options.html#index-mlittle-endian-3)
+
+msim
+UrlSuffix(gcc/C6X-Options.html#index-msim-1)
+
+; skipping 'msdata=' due to finding no URLs
+
+; skipping 'mlong-calls' due to finding no URLs
+
+march=
+UrlSuffix(gcc/C6X-Options.html#index-march-3)
+
diff --git a/gcc/config/cris/cris.opt.urls b/gcc/config/cris/cris.opt.urls
new file mode 100644
index 000000000000..56eeaa25da1c
--- /dev/null
+++ b/gcc/config/cris/cris.opt.urls
@@ -0,0 +1,65 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/cris/cris.opt and generated HTML
+
+mmul-bug-workaround
+UrlSuffix(gcc/CRIS-Options.html#index-mmul-bug-workaround)
+
+metrax4
+UrlSuffix(gcc/CRIS-Options.html#index-metrax4)
+
+metrax100
+UrlSuffix(gcc/CRIS-Options.html#index-metrax100)
+
+mpdebug
+UrlSuffix(gcc/CRIS-Options.html#index-mpdebug)
+
+mcc-init
+UrlSuffix(gcc/CRIS-Options.html#index-mcc-init)
+
+mside-effects
+UrlSuffix(gcc/CRIS-Options.html#index-mside-effects)
+
+mno-side-effects
+UrlSuffix(gcc/CRIS-Options.html#index-mno-side-effects)
+
+mstack-align
+UrlSuffix(gcc/CRIS-Options.html#index-mstack-align)
+
+mno-stack-align
+UrlSuffix(gcc/CRIS-Options.html#index-mno-stack-align)
+
+mdata-align
+UrlSuffix(gcc/CRIS-Options.html#index-mdata-align)
+
+mno-data-align
+UrlSuffix(gcc/CRIS-Options.html#index-mno-data-align)
+
+mconst-align
+UrlSuffix(gcc/CRIS-Options.html#index-mconst-align)
+
+mno-const-align
+UrlSuffix(gcc/CRIS-Options.html#index-mno-const-align)
+
+m32-bit
+UrlSuffix(gcc/CRIS-Options.html#index-m32-bit)
+
+m16-bit
+UrlSuffix(gcc/CRIS-Options.html#index-m16-bit)
+
+m8-bit
+UrlSuffix(gcc/CRIS-Options.html#index-m8-bit)
+
+mprologue-epilogue
+UrlSuffix(gcc/CRIS-Options.html#index-mprologue-epilogue)
+
+mno-prologue-epilogue
+UrlSuffix(gcc/CRIS-Options.html#index-mno-prologue-epilogue)
+
+mcpu=
+UrlSuffix(gcc/CRIS-Options.html#index-mcpu-3)
+
+march=
+UrlSuffix(gcc/CRIS-Options.html#index-march-4)
+
+mtune=
+UrlSuffix(gcc/CRIS-Options.html#index-mtune-5)
+
diff --git a/gcc/config/cris/elf.opt.urls b/gcc/config/cris/elf.opt.urls
new file mode 100644
index 000000000000..bdfa01e97a49
--- /dev/null
+++ b/gcc/config/cris/elf.opt.urls
@@ -0,0 +1,8 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/cris/elf.opt and generated HTML
+
+melf
+UrlSuffix(gcc/CRIS-Options.html#index-melf)
+
+sim
+UrlSuffix(gcc/CRIS-Options.html#index-sim)
+
diff --git a/gcc/config/csky/csky.opt.urls b/gcc/config/csky/csky.opt.urls
new file mode 100644
index 000000000000..96b0b174f7c9
--- /dev/null
+++ b/gcc/config/csky/csky.opt.urls
@@ -0,0 +1,104 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/csky/csky.opt and generated HTML
+
+march=
+UrlSuffix(gcc/C-SKY-Options.html#index-march_003d)
+
+mcpu=
+UrlSuffix(gcc/C-SKY-Options.html#index-mcpu_003d-1)
+
+mbig-endian
+UrlSuffix(gcc/C-SKY-Options.html#index-mbig-endian-4)
+
+EB
+UrlSuffix(gcc/C-SKY-Options.html#index-EB-1)
+
+mlittle-endian
+UrlSuffix(gcc/C-SKY-Options.html#index-mlittle-endian-4)
+
+EL
+UrlSuffix(gcc/C-SKY-Options.html#index-EL-1)
+
+mhard-float
+UrlSuffix(gcc/C-SKY-Options.html#index-mhard-float)
+
+msoft-float
+UrlSuffix(gcc/C-SKY-Options.html#index-msoft-float-1)
+
+mfloat-abi=
+UrlSuffix(gcc/C-SKY-Options.html#index-mfloat-abi-1)
+
+mfpu=
+UrlSuffix(gcc/C-SKY-Options.html#index-mfpu_003d)
+
+mdouble-float
+UrlSuffix(gcc/C-SKY-Options.html#index-mdouble-float)
+
+mfdivdu
+UrlSuffix(gcc/C-SKY-Options.html#index-mfdivdu)
+
+melrw
+UrlSuffix(gcc/C-SKY-Options.html#index-melrw)
+
+mistack
+UrlSuffix(gcc/C-SKY-Options.html#index-mistack)
+
+mmp
+UrlSuffix(gcc/C-SKY-Options.html#index-mmp)
+
+mcp
+UrlSuffix(gcc/C-SKY-Options.html#index-mcp)
+
+mcache
+UrlSuffix(gcc/C-SKY-Options.html#index-mcache)
+
+msecurity
+UrlSuffix(gcc/C-SKY-Options.html#index-msecurity)
+
+mtrust
+UrlSuffix(gcc/C-SKY-Options.html#index-mtrust)
+
+mdsp
+UrlSuffix(gcc/C-SKY-Options.html#index-mdsp)
+
+medsp
+UrlSuffix(gcc/C-SKY-Options.html#index-medsp)
+
+mvdsp
+UrlSuffix(gcc/C-SKY-Options.html#index-mvdsp)
+
+mdiv
+UrlSuffix(gcc/C-SKY-Options.html#index-mdiv)
+
+msmart
+UrlSuffix(gcc/C-SKY-Options.html#index-msmart)
+
+mhigh-registers
+UrlSuffix(gcc/C-SKY-Options.html#index-mhigh-registers)
+
+manchor
+UrlSuffix(gcc/C-SKY-Options.html#index-manchor)
+
+mpushpop
+UrlSuffix(gcc/C-SKY-Options.html#index-mpushpop)
+
+mmultiple-stld
+UrlSuffix(gcc/C-SKY-Options.html#index-mmultiple-stld)
+
+mconstpool
+UrlSuffix(gcc/C-SKY-Options.html#index-mconstpool)
+
+mstack-size
+UrlSuffix(gcc/C-SKY-Options.html#index-mstack-size-1)
+
+mccrt
+UrlSuffix(gcc/C-SKY-Options.html#index-mccrt)
+
+mbranch-cost=
+UrlSuffix(gcc/C-SKY-Options.html#index-mbranch-cost_003d)
+
+msched-prolog
+UrlSuffix(gcc/C-SKY-Options.html#index-msched-prolog-1)
+
+msim
+UrlSuffix(gcc/C-SKY-Options.html#index-msim-2)
+
diff --git a/gcc/config/csky/csky_tables.opt.urls b/gcc/config/csky/csky_tables.opt.urls
new file mode 100644
index 000000000000..eaa247bc897c
--- /dev/null
+++ b/gcc/config/csky/csky_tables.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/csky/csky_tables.opt and generated HTML
+
diff --git a/gcc/config/darwin.opt.urls b/gcc/config/darwin.opt.urls
new file mode 100644
index 000000000000..74b61767d684
--- /dev/null
+++ b/gcc/config/darwin.opt.urls
@@ -0,0 +1,221 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/darwin.opt and generated HTML
+
+dependency-file
+UrlSuffix(gcc/Darwin-Options.html#index-dependency-file)
+
+fconstant-cfstrings
+UrlSuffix(gcc/Darwin-Options.html#index-fconstant-cfstrings)
+
+iframework
+UrlSuffix(gcc/Darwin-Options.html#index-iframework)
+
+mconstant-cfstrings
+UrlSuffix(gcc/Darwin-Options.html#index-mconstant-cfstrings)
+
+; skipping 'mdynamic-no-pic' due to finding no URLs
+
+mfix-and-continue
+UrlSuffix(gcc/Darwin-Options.html#index-mfix-and-continue)
+
+mkernel
+UrlSuffix(gcc/Darwin-Options.html#index-mkernel)
+
+mmacosx-version-min=
+UrlSuffix(gcc/Darwin-Options.html#index-mmacosx-version-min)
+
+mone-byte-bool
+UrlSuffix(gcc/Darwin-Options.html#index-mone-byte-bool)
+
+all_load
+UrlSuffix(gcc/Darwin-Options.html#index-all_005fload)
+
+allowable_client
+UrlSuffix(gcc/Darwin-Options.html#index-allowable_005fclient)
+
+arch_errors_fatal
+UrlSuffix(gcc/Darwin-Options.html#index-arch_005ferrors_005ffatal)
+
+bind_at_load
+UrlSuffix(gcc/Darwin-Options.html#index-bind_005fat_005fload)
+
+bundle
+UrlSuffix(gcc/Darwin-Options.html#index-bundle)
+
+bundle_loader
+UrlSuffix(gcc/Darwin-Options.html#index-bundle_005floader)
+
+client_name
+UrlSuffix(gcc/Darwin-Options.html#index-client_005fname)
+
+compatibility_version
+UrlSuffix(gcc/Darwin-Options.html#index-compatibility_005fversion)
+
+current_version
+UrlSuffix(gcc/Darwin-Options.html#index-current_005fversion)
+
+dead_strip
+UrlSuffix(gcc/Darwin-Options.html#index-dead_005fstrip)
+
+dylib_file
+UrlSuffix(gcc/Darwin-Options.html#index-dylib_005ffile)
+
+dylinker_install_name
+UrlSuffix(gcc/Darwin-Options.html#index-dylinker_005finstall_005fname)
+
+dynamic
+UrlSuffix(gcc/Darwin-Options.html#index-dynamic)
+
+dynamiclib
+UrlSuffix(gcc/Darwin-Options.html#index-dynamiclib)
+
+exported_symbols_list
+UrlSuffix(gcc/Darwin-Options.html#index-exported_005fsymbols_005flist)
+
+filelist
+UrlSuffix(gcc/Darwin-Options.html#index-filelist)
+
+flat_namespace
+UrlSuffix(gcc/Darwin-Options.html#index-flat_005fnamespace)
+
+force_cpusubtype_ALL
+UrlSuffix(gcc/Darwin-Options.html#index-force_005fcpusubtype_005fALL)
+
+force_flat_namespace
+UrlSuffix(gcc/Darwin-Options.html#index-force_005fflat_005fnamespace)
+
+gfull
+UrlSuffix(gcc/Darwin-Options.html#index-gfull)
+
+gused
+UrlSuffix(gcc/Darwin-Options.html#index-gused)
+
+headerpad_max_install_names
+UrlSuffix(gcc/Darwin-Options.html#index-headerpad_005fmax_005finstall_005fnames)
+
+image_base
+UrlSuffix(gcc/Darwin-Options.html#index-image_005fbase)
+
+init
+UrlSuffix(gcc/Darwin-Options.html#index-init)
+
+install_name
+UrlSuffix(gcc/Darwin-Options.html#index-install_005fname)
+
+keep_private_externs
+UrlSuffix(gcc/Darwin-Options.html#index-keep_005fprivate_005fexterns)
+
+multi_module
+UrlSuffix(gcc/Darwin-Options.html#index-multi_005fmodule)
+
+multiply_defined
+UrlSuffix(gcc/Darwin-Options.html#index-multiply_005fdefined)
+
+multiply_defined_unused
+UrlSuffix(gcc/Darwin-Options.html#index-multiply_005fdefined_005funused)
+
+no_dead_strip_inits_and_terms
+UrlSuffix(gcc/Darwin-Options.html#index-no_005fdead_005fstrip_005finits_005fand_005fterms)
+
+nodefaultrpaths
+UrlSuffix(gcc/Darwin-Options.html#index-nodefaultrpaths)
+
+nofixprebinding
+UrlSuffix(gcc/Darwin-Options.html#index-nofixprebinding)
+
+nomultidefs
+UrlSuffix(gcc/Darwin-Options.html#index-nomultidefs)
+
+noprebind
+UrlSuffix(gcc/Darwin-Options.html#index-noprebind)
+
+noseglinkedit
+UrlSuffix(gcc/Darwin-Options.html#index-noseglinkedit)
+
+pagezero_size
+UrlSuffix(gcc/Darwin-Options.html#index-pagezero_005fsize)
+
+prebind
+UrlSuffix(gcc/Darwin-Options.html#index-prebind)
+
+prebind_all_twolevel_modules
+UrlSuffix(gcc/Darwin-Options.html#index-prebind_005fall_005ftwolevel_005fmodules)
+
+private_bundle
+UrlSuffix(gcc/Darwin-Options.html#index-private_005fbundle)
+
+; skipping 'pthread' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-pthread-1'
+;   duplicate: 'gcc/Preprocessor-Options.html#index-pthread'
+
+rdynamic
+UrlSuffix(gcc/Link-Options.html#index-rdynamic)
+
+read_only_relocs
+UrlSuffix(gcc/Darwin-Options.html#index-read_005fonly_005frelocs)
+
+sectalign
+UrlSuffix(gcc/Darwin-Options.html#index-sectalign)
+
+sectcreate
+UrlSuffix(gcc/Darwin-Options.html#index-sectcreate)
+
+sectobjectsymbols
+UrlSuffix(gcc/Darwin-Options.html#index-sectobjectsymbols)
+
+sectorder
+UrlSuffix(gcc/Darwin-Options.html#index-sectorder)
+
+seg_addr_table
+UrlSuffix(gcc/Darwin-Options.html#index-seg_005faddr_005ftable)
+
+seg_addr_table_filename
+UrlSuffix(gcc/Darwin-Options.html#index-seg_005faddr_005ftable_005ffilename)
+
+seg1addr
+UrlSuffix(gcc/Darwin-Options.html#index-seg1addr)
+
+segaddr
+UrlSuffix(gcc/Darwin-Options.html#index-segaddr)
+
+seglinkedit
+UrlSuffix(gcc/Darwin-Options.html#index-seglinkedit)
+
+segprot
+UrlSuffix(gcc/Darwin-Options.html#index-segprot)
+
+segs_read_only_addr
+UrlSuffix(gcc/Darwin-Options.html#index-segs_005fread_005fonly_005faddr)
+
+segs_read_write_addr
+UrlSuffix(gcc/Darwin-Options.html#index-segs_005fread_005fwrite_005faddr)
+
+single_module
+UrlSuffix(gcc/Darwin-Options.html#index-single_005fmodule)
+
+sub_library
+UrlSuffix(gcc/Darwin-Options.html#index-sub_005flibrary)
+
+sub_umbrella
+UrlSuffix(gcc/Darwin-Options.html#index-sub_005fumbrella)
+
+twolevel_namespace
+UrlSuffix(gcc/Darwin-Options.html#index-twolevel_005fnamespace)
+
+umbrella
+UrlSuffix(gcc/Darwin-Options.html#index-umbrella)
+
+undefined
+UrlSuffix(gcc/Darwin-Options.html#index-undefined)
+
+unexported_symbols_list
+UrlSuffix(gcc/Darwin-Options.html#index-unexported_005fsymbols_005flist)
+
+weak_reference_mismatches
+UrlSuffix(gcc/Darwin-Options.html#index-weak_005freference_005fmismatches)
+
+whatsloaded
+UrlSuffix(gcc/Darwin-Options.html#index-whatsloaded)
+
+whyload
+UrlSuffix(gcc/Darwin-Options.html#index-whyload)
+
diff --git a/gcc/config/dragonfly.opt.urls b/gcc/config/dragonfly.opt.urls
new file mode 100644
index 000000000000..4a4a228ec1e7
--- /dev/null
+++ b/gcc/config/dragonfly.opt.urls
@@ -0,0 +1,9 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/dragonfly.opt and generated HTML
+
+; skipping 'pthread' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-pthread-1'
+;   duplicate: 'gcc/Preprocessor-Options.html#index-pthread'
+
+rdynamic
+UrlSuffix(gcc/Link-Options.html#index-rdynamic)
+
diff --git a/gcc/config/epiphany/epiphany.opt.urls b/gcc/config/epiphany/epiphany.opt.urls
new file mode 100644
index 000000000000..54b100633861
--- /dev/null
+++ b/gcc/config/epiphany/epiphany.opt.urls
@@ -0,0 +1,52 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/epiphany/epiphany.opt and generated HTML
+
+mhalf-reg-file
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-mhalf-reg-file)
+
+mprefer-short-insn-regs
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-mprefer-short-insn-regs)
+
+mbranch-cost=
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-mbranch-cost)
+
+mcmove
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-mcmove)
+
+mnops=
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-mnops)
+
+msoft-cmpsf
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-msoft-cmpsf)
+
+msplit-lohi
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-msplit-lohi)
+
+mstack-offset=
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-mstack-offset)
+
+mround-nearest
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-mround-nearest)
+
+mlong-calls
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-mlong-calls)
+
+; skipping 'mshort-calls' due to finding no URLs
+
+msmall16
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-msmall16)
+
+mfp-mode=
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-mfp-mode)
+
+mvect-double
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-mvect-double)
+
+max-vect-align=
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-max-vect-align)
+
+msplit-vecmove-early
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-msplit-vecmove-early)
+
+m1reg-
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-m1reg-)
+
diff --git a/gcc/config/fr30/fr30.opt.urls b/gcc/config/fr30/fr30.opt.urls
new file mode 100644
index 000000000000..eabbfbfd9dd3
--- /dev/null
+++ b/gcc/config/fr30/fr30.opt.urls
@@ -0,0 +1,8 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/fr30/fr30.opt and generated HTML
+
+msmall-model
+UrlSuffix(gcc/FR30-Options.html#index-msmall-model)
+
+mno-lsim
+UrlSuffix(gcc/FR30-Options.html#index-mno-lsim)
+
diff --git a/gcc/config/freebsd.opt.urls b/gcc/config/freebsd.opt.urls
new file mode 100644
index 000000000000..0b6605837048
--- /dev/null
+++ b/gcc/config/freebsd.opt.urls
@@ -0,0 +1,9 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/freebsd.opt and generated HTML
+
+; skipping 'pthread' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-pthread-1'
+;   duplicate: 'gcc/Preprocessor-Options.html#index-pthread'
+
+rdynamic
+UrlSuffix(gcc/Link-Options.html#index-rdynamic)
+
diff --git a/gcc/config/frv/frv.opt.urls b/gcc/config/frv/frv.opt.urls
new file mode 100644
index 000000000000..db9e9c59030a
--- /dev/null
+++ b/gcc/config/frv/frv.opt.urls
@@ -0,0 +1,111 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/frv/frv.opt and generated HTML
+
+macc-4
+UrlSuffix(gcc/FRV-Options.html#index-macc-4)
+
+macc-8
+UrlSuffix(gcc/FRV-Options.html#index-macc-8)
+
+malign-labels
+UrlSuffix(gcc/FRV-Options.html#index-malign-labels)
+
+malloc-cc
+UrlSuffix(gcc/FRV-Options.html#index-malloc-cc)
+
+; skipping 'mbranch-cost=' due to finding no URLs
+
+mcond-exec
+UrlSuffix(gcc/FRV-Options.html#index-mcond-exec)
+
+mcond-move
+UrlSuffix(gcc/FRV-Options.html#index-mcond-move)
+
+mcpu=
+UrlSuffix(gcc/FRV-Options.html#index-mcpu-6)
+
+; skipping 'mdebug' due to finding no URLs
+
+mdouble
+UrlSuffix(gcc/FRV-Options.html#index-mdouble-1)
+
+mdword
+UrlSuffix(gcc/FRV-Options.html#index-mdword)
+
+mfdpic
+UrlSuffix(gcc/FRV-Options.html#index-mfdpic-1)
+
+mfixed-cc
+UrlSuffix(gcc/FRV-Options.html#index-mfixed-cc)
+
+mfpr-32
+UrlSuffix(gcc/FRV-Options.html#index-mfpr-32)
+
+mfpr-64
+UrlSuffix(gcc/FRV-Options.html#index-mfpr-64)
+
+mgpr-32
+UrlSuffix(gcc/FRV-Options.html#index-mgpr-32)
+
+mgpr-64
+UrlSuffix(gcc/FRV-Options.html#index-mgpr-64)
+
+mgprel-ro
+UrlSuffix(gcc/FRV-Options.html#index-mgprel-ro)
+
+mhard-float
+UrlSuffix(gcc/FRV-Options.html#index-mhard-float-1)
+
+minline-plt
+UrlSuffix(gcc/FRV-Options.html#index-minline-plt-1)
+
+mlibrary-pic
+UrlSuffix(gcc/FRV-Options.html#index-mlibrary-pic)
+
+mlinked-fp
+UrlSuffix(gcc/FRV-Options.html#index-mlinked-fp)
+
+mlong-calls
+UrlSuffix(gcc/FRV-Options.html#index-mlong-calls-4)
+
+mmedia
+UrlSuffix(gcc/FRV-Options.html#index-mmedia)
+
+mmuladd
+UrlSuffix(gcc/FRV-Options.html#index-mmuladd)
+
+mmulti-cond-exec
+UrlSuffix(gcc/FRV-Options.html#index-mmulti-cond-exec)
+
+mnested-cond-exec
+UrlSuffix(gcc/FRV-Options.html#index-mnested-cond-exec)
+
+mno-eflags
+UrlSuffix(gcc/FRV-Options.html#index-mno-eflags)
+
+moptimize-membar
+UrlSuffix(gcc/FRV-Options.html#index-moptimize-membar)
+
+mpack
+UrlSuffix(gcc/FRV-Options.html#index-mpack)
+
+mscc
+UrlSuffix(gcc/FRV-Options.html#index-mscc)
+
+msoft-float
+UrlSuffix(gcc/FRV-Options.html#index-msoft-float-3)
+
+mTLS
+UrlSuffix(gcc/FRV-Options.html#index-mTLS)
+
+mtls
+UrlSuffix(gcc/FRV-Options.html#index-mtls)
+
+mtomcat-stats
+UrlSuffix(gcc/FRV-Options.html#index-mtomcat-stats)
+
+multilib-library-pic
+UrlSuffix(gcc/FRV-Options.html#index-multilib-library-pic)
+
+mvliw-branch
+UrlSuffix(gcc/FRV-Options.html#index-mvliw-branch)
+
diff --git a/gcc/config/ft32/ft32.opt.urls b/gcc/config/ft32/ft32.opt.urls
new file mode 100644
index 000000000000..707cb83010f0
--- /dev/null
+++ b/gcc/config/ft32/ft32.opt.urls
@@ -0,0 +1,20 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/ft32/ft32.opt and generated HTML
+
+msim
+UrlSuffix(gcc/FT32-Options.html#index-msim-3)
+
+mlra
+UrlSuffix(gcc/FT32-Options.html#index-mlra-1)
+
+mnodiv
+UrlSuffix(gcc/FT32-Options.html#index-mnodiv)
+
+mft32b
+UrlSuffix(gcc/FT32-Options.html#index-mft32b)
+
+mcompress
+UrlSuffix(gcc/FT32-Options.html#index-mcompress)
+
+mnopm
+UrlSuffix(gcc/FT32-Options.html#index-mnopm)
+
diff --git a/gcc/config/fused-madd.opt.urls b/gcc/config/fused-madd.opt.urls
new file mode 100644
index 000000000000..0641ac9ca185
--- /dev/null
+++ b/gcc/config/fused-madd.opt.urls
@@ -0,0 +1,4 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/fused-madd.opt and generated HTML
+
+; skipping 'mfused-madd' due to finding no URLs
+
diff --git a/gcc/config/g.opt.urls b/gcc/config/g.opt.urls
new file mode 100644
index 000000000000..4ffd5cbd2cf5
--- /dev/null
+++ b/gcc/config/g.opt.urls
@@ -0,0 +1,5 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/g.opt and generated HTML
+
+G
+UrlSuffix(gcc/System-V-Options.html#index-G-5)
+
diff --git a/gcc/config/gcn/gcn.opt.urls b/gcc/config/gcn/gcn.opt.urls
new file mode 100644
index 000000000000..2183dafd8c26
--- /dev/null
+++ b/gcc/config/gcn/gcn.opt.urls
@@ -0,0 +1,23 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/gcn/gcn.opt and generated HTML
+
+march=
+UrlSuffix(gcc/AMD-GCN-Options.html#index-march-1)
+
+mtune=
+UrlSuffix(gcc/AMD-GCN-Options.html#index-mtune-1)
+
+; skipping 'm32' due to finding no URLs
+
+; skipping 'm64' due to finding no URLs
+
+; skipping 'mgomp' due to finding no URLs
+
+mstack-size=
+UrlSuffix(gcc/AMD-GCN-Options.html#index-mstack-size)
+
+mxnack=
+UrlSuffix(gcc/AMD-GCN-Options.html#index-mxnack)
+
+msram-ecc=
+UrlSuffix(gcc/AMD-GCN-Options.html#index-msram-ecc)
+
diff --git a/gcc/config/gnu-user.opt.urls b/gcc/config/gnu-user.opt.urls
new file mode 100644
index 000000000000..0fcdd3096831
--- /dev/null
+++ b/gcc/config/gnu-user.opt.urls
@@ -0,0 +1,9 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/gnu-user.opt and generated HTML
+
+; skipping 'pthread' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-pthread-1'
+;   duplicate: 'gcc/Preprocessor-Options.html#index-pthread'
+
+rdynamic
+UrlSuffix(gcc/Link-Options.html#index-rdynamic)
+
diff --git a/gcc/config/h8300/h8300.opt.urls b/gcc/config/h8300/h8300.opt.urls
new file mode 100644
index 000000000000..8cbd7c313b7f
--- /dev/null
+++ b/gcc/config/h8300/h8300.opt.urls
@@ -0,0 +1,29 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/h8300/h8300.opt and generated HTML
+
+ms
+UrlSuffix(gcc/H8_002f300-Options.html#index-ms)
+
+ms2600
+UrlSuffix(gcc/H8_002f300-Options.html#index-ms2600)
+
+mint32
+UrlSuffix(gcc/H8_002f300-Options.html#index-mint32)
+
+mrelax
+UrlSuffix(gcc/H8_002f300-Options.html#index-mrelax-1)
+
+mh
+UrlSuffix(gcc/H8_002f300-Options.html#index-mh)
+
+mn
+UrlSuffix(gcc/H8_002f300-Options.html#index-mn)
+
+malign-300
+UrlSuffix(gcc/H8_002f300-Options.html#index-malign-300)
+
+mexr
+UrlSuffix(gcc/H8_002f300-Options.html#index-mexr)
+
+mno-exr
+UrlSuffix(gcc/H8_002f300-Options.html#index-mno-exr)
+
diff --git a/gcc/config/hpux11.opt.urls b/gcc/config/hpux11.opt.urls
new file mode 100644
index 000000000000..f3847d8ec224
--- /dev/null
+++ b/gcc/config/hpux11.opt.urls
@@ -0,0 +1,6 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/hpux11.opt and generated HTML
+
+; skipping 'pthread' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-pthread-1'
+;   duplicate: 'gcc/Preprocessor-Options.html#index-pthread'
+
diff --git a/gcc/config/i386/cygming.opt.urls b/gcc/config/i386/cygming.opt.urls
new file mode 100644
index 000000000000..3bf6f4ae1acc
--- /dev/null
+++ b/gcc/config/i386/cygming.opt.urls
@@ -0,0 +1,30 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/i386/cygming.opt and generated HTML
+
+mconsole
+UrlSuffix(gcc/x86-Windows-Options.html#index-mconsole)
+
+mdll
+UrlSuffix(gcc/x86-Windows-Options.html#index-mdll)
+
+mnop-fun-dllimport
+UrlSuffix(gcc/x86-Windows-Options.html#index-mnop-fun-dllimport)
+
+; skipping 'mthreads' due to multiple URLs:
+;   duplicate: 'gcc/x86-Options.html#index-mthreads'
+;   duplicate: 'gcc/x86-Windows-Options.html#index-mthreads-1'
+
+mwin32
+UrlSuffix(gcc/x86-Windows-Options.html#index-mwin32)
+
+mwindows
+UrlSuffix(gcc/x86-Windows-Options.html#index-mwindows)
+
+mpe-aligned-commons
+UrlSuffix(gcc/x86-Windows-Options.html#index-mpe-aligned-commons)
+
+fset-stack-executable
+UrlSuffix(gcc/x86-Windows-Options.html#index-fno-set-stack-executable)
+
+fwritable-relocated-rdata
+UrlSuffix(gcc/x86-Windows-Options.html#index-fno-writable-relocated-rdata)
+
diff --git a/gcc/config/i386/cygwin.opt.urls b/gcc/config/i386/cygwin.opt.urls
new file mode 100644
index 000000000000..cbadd6c9dba3
--- /dev/null
+++ b/gcc/config/i386/cygwin.opt.urls
@@ -0,0 +1,6 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/i386/cygwin.opt and generated HTML
+
+; skipping 'pthread' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-pthread-1'
+;   duplicate: 'gcc/Preprocessor-Options.html#index-pthread'
+
diff --git a/gcc/config/i386/djgpp.opt.urls b/gcc/config/i386/djgpp.opt.urls
new file mode 100644
index 000000000000..8a723ab0a6dc
--- /dev/null
+++ b/gcc/config/i386/djgpp.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/i386/djgpp.opt and generated HTML
+
diff --git a/gcc/config/i386/i386.opt.urls b/gcc/config/i386/i386.opt.urls
new file mode 100644
index 000000000000..278a58d4cd6e
--- /dev/null
+++ b/gcc/config/i386/i386.opt.urls
@@ -0,0 +1,602 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/i386/i386.opt and generated HTML
+
+m128bit-long-double
+UrlSuffix(gcc/x86-Options.html#index-m128bit-long-double)
+
+m80387
+UrlSuffix(gcc/x86-Options.html#index-m80387)
+
+m96bit-long-double
+UrlSuffix(gcc/x86-Options.html#index-m96bit-long-double)
+
+mlong-double-80
+UrlSuffix(gcc/x86-Options.html#index-mlong-double-80)
+
+mlong-double-64
+UrlSuffix(gcc/x86-Options.html#index-mlong-double-64-1)
+
+mlong-double-128
+UrlSuffix(gcc/x86-Options.html#index-mlong-double-128-1)
+
+maccumulate-outgoing-args
+UrlSuffix(gcc/x86-Options.html#index-maccumulate-outgoing-args-1)
+
+malign-double
+UrlSuffix(gcc/x86-Options.html#index-malign-double)
+
+; skipping 'malign-loops=' due to finding no URLs
+
+malign-stringops
+UrlSuffix(gcc/x86-Options.html#index-malign-stringops)
+
+malign-data=
+UrlSuffix(gcc/x86-Options.html#index-malign-data-1)
+
+march=
+UrlSuffix(gcc/x86-Options.html#index-march-16)
+
+; skipping 'mbranch-cost=' due to finding no URLs
+
+mlarge-data-threshold=
+UrlSuffix(gcc/x86-Options.html#index-mlarge-data-threshold)
+
+; skipping 'mcmodel=' due to finding no URLs
+
+mcpu=
+UrlSuffix(gcc/x86-Options.html#index-mcpu-14)
+
+mfancy-math-387
+UrlSuffix(gcc/x86-Options.html#index-mfancy-math-387)
+
+mfp-ret-in-387
+UrlSuffix(gcc/x86-Options.html#index-mfp-ret-in-387)
+
+; skipping 'mfpmath=' due to multiple URLs:
+;   duplicate: 'gcc/Optimize-Options.html#index-mfpmath'
+;   duplicate: 'gcc/x86-Options.html#index-mfpmath-1'
+
+mhard-float
+UrlSuffix(gcc/x86-Options.html#index-mhard-float-11)
+
+mieee-fp
+UrlSuffix(gcc/x86-Options.html#index-mieee-fp)
+
+minline-all-stringops
+UrlSuffix(gcc/x86-Options.html#index-minline-all-stringops)
+
+minline-stringops-dynamically
+UrlSuffix(gcc/x86-Options.html#index-minline-stringops-dynamically)
+
+mms-bitfields
+UrlSuffix(gcc/x86-Options.html#index-mms-bitfields)
+
+mno-align-stringops
+UrlSuffix(gcc/x86-Options.html#index-mno-align-stringops)
+
+mno-fancy-math-387
+UrlSuffix(gcc/x86-Options.html#index-mno-fancy-math-387)
+
+mno-push-args
+UrlSuffix(gcc/x86-Options.html#index-mno-push-args)
+
+mno-red-zone
+UrlSuffix(gcc/x86-Options.html#index-mno-red-zone)
+
+momit-leaf-frame-pointer
+UrlSuffix(gcc/x86-Options.html#index-momit-leaf-frame-pointer-2)
+
+mrelax-cmpxchg-loop
+UrlSuffix(gcc/x86-Options.html#index-mrelax-cmpxchg-loop)
+
+mpc32
+UrlSuffix(gcc/x86-Options.html#index-mpc32)
+
+mpc64
+UrlSuffix(gcc/x86-Options.html#index-mpc64)
+
+mpc80
+UrlSuffix(gcc/x86-Options.html#index-mpc80)
+
+mdaz-ftz
+UrlSuffix(gcc/x86-Options.html#index-mdaz-ftz)
+
+mpreferred-stack-boundary=
+UrlSuffix(gcc/x86-Options.html#index-mpreferred-stack-boundary-1)
+
+mincoming-stack-boundary=
+UrlSuffix(gcc/x86-Options.html#index-mincoming-stack-boundary)
+
+mpush-args
+UrlSuffix(gcc/x86-Options.html#index-mpush-args)
+
+mred-zone
+UrlSuffix(gcc/x86-Options.html#index-mred-zone)
+
+mregparm=
+UrlSuffix(gcc/x86-Options.html#index-mregparm)
+
+mrtd
+UrlSuffix(gcc/x86-Options.html#index-mrtd-1)
+
+msoft-float
+UrlSuffix(gcc/x86-Options.html#index-msoft-float-16)
+
+msseregparm
+UrlSuffix(gcc/x86-Options.html#index-msseregparm)
+
+mstackrealign
+UrlSuffix(gcc/x86-Options.html#index-mstackrealign)
+
+mtls-dialect=
+UrlSuffix(gcc/x86-Options.html#index-mtls-dialect-1)
+
+mtls-direct-seg-refs
+UrlSuffix(gcc/x86-Options.html#index-mtls-direct-seg-refs)
+
+mtune=
+UrlSuffix(gcc/x86-Options.html#index-mtune-17)
+
+mno-default
+UrlSuffix(gcc/x86-Options.html#index-mno-default)
+
+mdump-tune-features
+UrlSuffix(gcc/x86-Options.html#index-mdump-tune-features)
+
+miamcu
+UrlSuffix(gcc/x86-Options.html#index-miamcu)
+
+mabi=
+UrlSuffix(gcc/x86-Options.html#index-mabi-6)
+
+mcall-ms2sysv-xlogues
+UrlSuffix(gcc/x86-Options.html#index-mcall-ms2sysv-xlogues)
+
+mveclibabi=
+UrlSuffix(gcc/x86-Options.html#index-mveclibabi-1)
+
+mvect8-ret-in-mem
+UrlSuffix(gcc/x86-Options.html#index-mvect8-ret-in-mem)
+
+mrecip
+UrlSuffix(gcc/x86-Options.html#index-mrecip-1)
+
+mrecip=
+UrlSuffix(gcc/x86-Options.html#index-mrecip-1)
+
+mcld
+UrlSuffix(gcc/x86-Options.html#index-mcld)
+
+mvzeroupper
+UrlSuffix(gcc/x86-Options.html#index-mvzeroupper)
+
+mprefer-avx128
+UrlSuffix(gcc/x86-Options.html#index-mprefer-avx128)
+
+mprefer-vector-width=
+UrlSuffix(gcc/x86-Options.html#index-mprefer-vector-width)
+
+mpartial-vector-fp-math
+UrlSuffix(gcc/x86-Options.html#index-mpartial-vector-fp-math)
+
+mmove-max=
+UrlSuffix(gcc/x86-Options.html#index-mmove-max)
+
+mstore-max=
+UrlSuffix(gcc/x86-Options.html#index-mstore-max)
+
+m32
+UrlSuffix(gcc/x86-Options.html#index-m32-2)
+
+m64
+UrlSuffix(gcc/x86-Options.html#index-m64-4)
+
+mx32
+UrlSuffix(gcc/x86-Options.html#index-mx32)
+
+m16
+UrlSuffix(gcc/x86-Options.html#index-m16)
+
+mmmx
+UrlSuffix(gcc/x86-Options.html#index-mmmx)
+
+m3dnow
+UrlSuffix(gcc/x86-Options.html#index-m3dnow)
+
+m3dnowa
+UrlSuffix(gcc/x86-Options.html#index-m3dnowa)
+
+msse
+UrlSuffix(gcc/x86-Options.html#index-msse)
+
+msse2
+UrlSuffix(gcc/x86-Options.html#index-msse2)
+
+msse3
+UrlSuffix(gcc/x86-Options.html#index-msse3)
+
+mssse3
+UrlSuffix(gcc/x86-Options.html#index-mssse3)
+
+msse4.1
+UrlSuffix(gcc/x86-Options.html#index-msse4_002e1)
+
+msse4.2
+UrlSuffix(gcc/x86-Options.html#index-msse4_002e2)
+
+msse4
+UrlSuffix(gcc/x86-Options.html#index-msse4)
+
+mavx
+UrlSuffix(gcc/x86-Options.html#index-mavx)
+
+mavx2
+UrlSuffix(gcc/x86-Options.html#index-mavx2)
+
+mavx512f
+UrlSuffix(gcc/x86-Options.html#index-mavx512f)
+
+mavx512pf
+UrlSuffix(gcc/x86-Options.html#index-mavx512pf)
+
+mavx512er
+UrlSuffix(gcc/x86-Options.html#index-mavx512er)
+
+mavx512cd
+UrlSuffix(gcc/x86-Options.html#index-mavx512cd)
+
+mavx512dq
+UrlSuffix(gcc/x86-Options.html#index-mavx512dq)
+
+mavx512bw
+UrlSuffix(gcc/x86-Options.html#index-mavx512bw)
+
+mavx512vl
+UrlSuffix(gcc/x86-Options.html#index-mavx512vl)
+
+mavx512ifma
+UrlSuffix(gcc/x86-Options.html#index-mavx512ifma)
+
+mavx512vbmi
+UrlSuffix(gcc/x86-Options.html#index-mavx512vbmi)
+
+mavx5124fmaps
+UrlSuffix(gcc/x86-Options.html#index-mavx5124fmaps)
+
+mavx5124vnniw
+UrlSuffix(gcc/x86-Options.html#index-mavx5124vnniw)
+
+mavx512vpopcntdq
+UrlSuffix(gcc/x86-Options.html#index-mavx512vpopcntdq)
+
+mavx512vbmi2
+UrlSuffix(gcc/x86-Options.html#index-mavx512vbmi2)
+
+mavx512vnni
+UrlSuffix(gcc/x86-Options.html#index-mavx512vnni)
+
+mavx512bitalg
+UrlSuffix(gcc/x86-Options.html#index-mavx512bitalg)
+
+mavx512vp2intersect
+UrlSuffix(gcc/x86-Options.html#index-mavx512vp2intersect)
+
+mfma
+UrlSuffix(gcc/x86-Options.html#index-mfma)
+
+msse4a
+UrlSuffix(gcc/x86-Options.html#index-msse4a)
+
+mfma4
+UrlSuffix(gcc/x86-Options.html#index-mfma4)
+
+mxop
+UrlSuffix(gcc/x86-Options.html#index-mxop)
+
+mlwp
+UrlSuffix(gcc/x86-Options.html#index-mlwp)
+
+mabm
+UrlSuffix(gcc/x86-Options.html#index-mabm)
+
+mpopcnt
+UrlSuffix(gcc/x86-Options.html#index-mpopcnt)
+
+mpconfig
+UrlSuffix(gcc/x86-Options.html#index-mpconfig)
+
+mwbnoinvd
+UrlSuffix(gcc/x86-Options.html#index-mwbnoinvd)
+
+mptwrite
+UrlSuffix(gcc/x86-Options.html#index-mptwrite)
+
+muintr
+UrlSuffix(gcc/x86-Options.html#index-muintr)
+
+msgx
+UrlSuffix(gcc/x86-Options.html#index-msgx)
+
+mrdpid
+UrlSuffix(gcc/x86-Options.html#index-mrdpid)
+
+mgfni
+UrlSuffix(gcc/x86-Options.html#index-mgfni)
+
+mvaes
+UrlSuffix(gcc/x86-Options.html#index-mvaes)
+
+mvpclmulqdq
+UrlSuffix(gcc/x86-Options.html#index-mvpclmulqdq)
+
+mbmi
+UrlSuffix(gcc/x86-Options.html#index-mbmi)
+
+mbmi2
+UrlSuffix(gcc/x86-Options.html#index-mbmi2)
+
+mlzcnt
+UrlSuffix(gcc/x86-Options.html#index-mlzcnt)
+
+mhle
+UrlSuffix(gcc/x86-Options.html#index-mhle)
+
+mrdseed
+UrlSuffix(gcc/x86-Options.html#index-mrdseed)
+
+mprfchw
+UrlSuffix(gcc/x86-Options.html#index-mprfchw)
+
+madx
+UrlSuffix(gcc/x86-Options.html#index-madx)
+
+mclflushopt
+UrlSuffix(gcc/x86-Options.html#index-mclflushopt)
+
+mclwb
+UrlSuffix(gcc/x86-Options.html#index-mclwb)
+
+mfxsr
+UrlSuffix(gcc/x86-Options.html#index-mfxsr)
+
+mxsave
+UrlSuffix(gcc/x86-Options.html#index-mxsave)
+
+mxsaveopt
+UrlSuffix(gcc/x86-Options.html#index-mxsaveopt)
+
+mxsavec
+UrlSuffix(gcc/x86-Options.html#index-mxsavec)
+
+mxsaves
+UrlSuffix(gcc/x86-Options.html#index-mxsaves)
+
+mtbm
+UrlSuffix(gcc/x86-Options.html#index-mtbm)
+
+mcx16
+UrlSuffix(gcc/x86-Options.html#index-mcx16)
+
+msahf
+UrlSuffix(gcc/x86-Options.html#index-msahf)
+
+mmovbe
+UrlSuffix(gcc/x86-Options.html#index-mmovbe)
+
+mcrc32
+UrlSuffix(gcc/x86-Options.html#index-mcrc32)
+
+maes
+UrlSuffix(gcc/x86-Options.html#index-maes)
+
+msha
+UrlSuffix(gcc/x86-Options.html#index-msha)
+
+mpclmul
+UrlSuffix(gcc/x86-Options.html#index-mpclmul)
+
+msse2avx
+UrlSuffix(gcc/x86-Options.html#index-msse2avx)
+
+mfsgsbase
+UrlSuffix(gcc/x86-Options.html#index-mfsgsbase)
+
+mrdrnd
+UrlSuffix(gcc/x86-Options.html#index-mrdrnd)
+
+mf16c
+UrlSuffix(gcc/x86-Options.html#index-mf16c)
+
+mprefetchwt1
+UrlSuffix(gcc/x86-Options.html#index-mprefetchwt1)
+
+mfentry
+UrlSuffix(gcc/x86-Options.html#index-mfentry)
+
+mrecord-mcount
+UrlSuffix(gcc/x86-Options.html#index-mrecord-mcount)
+
+mnop-mcount
+UrlSuffix(gcc/x86-Options.html#index-mnop-mcount)
+
+mfentry-name=
+UrlSuffix(gcc/x86-Options.html#index-mfentry-name)
+
+mfentry-section=
+UrlSuffix(gcc/x86-Options.html#index-mfentry-section)
+
+mskip-rax-setup
+UrlSuffix(gcc/x86-Options.html#index-mskip-rax-setup)
+
+m8bit-idiv
+UrlSuffix(gcc/x86-Options.html#index-m8bit-idiv)
+
+mavx256-split-unaligned-load
+UrlSuffix(gcc/x86-Options.html#index-mavx256-split-unaligned-load)
+
+mavx256-split-unaligned-store
+UrlSuffix(gcc/x86-Options.html#index-mavx256-split-unaligned-store)
+
+mrtm
+UrlSuffix(gcc/x86-Options.html#index-mrtm)
+
+mmwaitx
+UrlSuffix(gcc/x86-Options.html#index-mmwaitx)
+
+mclzero
+UrlSuffix(gcc/x86-Options.html#index-mclzero)
+
+mpku
+UrlSuffix(gcc/x86-Options.html#index-mpku)
+
+mstack-protector-guard=
+UrlSuffix(gcc/x86-Options.html#index-mstack-protector-guard-4)
+
+mstack-protector-guard-reg=
+UrlSuffix(gcc/x86-Options.html#index-mstack-protector-guard-reg-3)
+
+mstack-protector-guard-offset=
+UrlSuffix(gcc/x86-Options.html#index-mstack-protector-guard-offset-4)
+
+; skipping 'mstack-protector-guard-symbol=' due to finding no URLs
+
+mgeneral-regs-only
+UrlSuffix(gcc/x86-Options.html#index-mgeneral-regs-only-2)
+
+mshstk
+UrlSuffix(gcc/x86-Options.html#index-mshstk)
+
+mcet-switch
+UrlSuffix(gcc/x86-Options.html#index-mcet-switch)
+
+mmanual-endbr
+UrlSuffix(gcc/x86-Options.html#index-mmanual-endbr)
+
+mforce-indirect-call
+UrlSuffix(gcc/x86-Options.html#index-mforce-indirect-call)
+
+mindirect-branch=
+UrlSuffix(gcc/x86-Options.html#index-mindirect-branch)
+
+mfunction-return=
+UrlSuffix(gcc/x86-Options.html#index-mfunction-return)
+
+mindirect-branch-cs-prefix
+UrlSuffix(gcc/x86-Options.html#index-mindirect-branch-cs-prefix)
+
+mindirect-branch-register
+UrlSuffix(gcc/x86-Options.html#index-mindirect-branch-register)
+
+mmovdiri
+UrlSuffix(gcc/x86-Options.html#index-mmovdiri)
+
+mmovdir64b
+UrlSuffix(gcc/x86-Options.html#index-mmovdir64b)
+
+mwaitpkg
+UrlSuffix(gcc/x86-Options.html#index-mwaitpkg)
+
+mcldemote
+UrlSuffix(gcc/x86-Options.html#index-mcldemote)
+
+minstrument-return=
+UrlSuffix(gcc/x86-Options.html#index-minstrument-return)
+
+mrecord-return
+UrlSuffix(gcc/x86-Options.html#index-mrecord-return)
+
+mharden-sls=
+UrlSuffix(gcc/x86-Options.html#index-mharden-sls-1)
+
+mavx512bf16
+UrlSuffix(gcc/x86-Options.html#index-mavx512bf16)
+
+menqcmd
+UrlSuffix(gcc/x86-Options.html#index-menqcmd)
+
+mserialize
+UrlSuffix(gcc/x86-Options.html#index-mserialize)
+
+mtsxldtrk
+UrlSuffix(gcc/x86-Options.html#index-mtsxldtrk)
+
+mamx-tile
+UrlSuffix(gcc/x86-Options.html#index-mamx-tile)
+
+mamx-int8
+UrlSuffix(gcc/x86-Options.html#index-mamx-int8)
+
+mamx-bf16
+UrlSuffix(gcc/x86-Options.html#index-mamx-bf16)
+
+mhreset
+UrlSuffix(gcc/x86-Options.html#index-mhreset)
+
+mkl
+UrlSuffix(gcc/x86-Options.html#index-mkl)
+
+mwidekl
+UrlSuffix(gcc/x86-Options.html#index-mwidekl)
+
+mavxvnni
+UrlSuffix(gcc/x86-Options.html#index-mavxvnni)
+
+mneeded
+UrlSuffix(gcc/x86-Options.html#index-mneeded)
+
+mmwait
+UrlSuffix(gcc/x86-Options.html#index-mmwait)
+
+mavx512fp16
+UrlSuffix(gcc/x86-Options.html#index-mavx512fp16)
+
+mdirect-extern-access
+UrlSuffix(gcc/x86-Options.html#index-mdirect-extern-access-1)
+
+mavxifma
+UrlSuffix(gcc/x86-Options.html#index-mavxifma)
+
+mavxvnniint8
+UrlSuffix(gcc/x86-Options.html#index-mavxvnniint8)
+
+mavxneconvert
+UrlSuffix(gcc/x86-Options.html#index-mavxneconvert)
+
+mcmpccxadd
+UrlSuffix(gcc/x86-Options.html#index-mcmpccxadd)
+
+mamx-fp16
+UrlSuffix(gcc/x86-Options.html#index-mamx-fp16)
+
+mprefetchi
+UrlSuffix(gcc/x86-Options.html#index-mprefetchi)
+
+mraoint
+UrlSuffix(gcc/x86-Options.html#index-mraoint)
+
+munroll-only-small-loops
+UrlSuffix(gcc/x86-Options.html#index-munroll-only-small-loops)
+
+mlam=
+UrlSuffix(gcc/x86-Options.html#index-mlam)
+
+mamx-complex
+UrlSuffix(gcc/x86-Options.html#index-mamx-complex)
+
+mavxvnniint16
+UrlSuffix(gcc/x86-Options.html#index-mavxvnniint16)
+
+msm3
+UrlSuffix(gcc/x86-Options.html#index-msm3)
+
+msha512
+UrlSuffix(gcc/x86-Options.html#index-msha512)
+
+msm4
+UrlSuffix(gcc/x86-Options.html#index-msm4)
+
+mapxf
+UrlSuffix(gcc/x86-Options.html#index-mapxf)
+
+musermsr
+UrlSuffix(gcc/x86-Options.html#index-musermsr)
+
diff --git a/gcc/config/i386/mingw-w64.opt.urls b/gcc/config/i386/mingw-w64.opt.urls
new file mode 100644
index 000000000000..6bb53ef29b2b
--- /dev/null
+++ b/gcc/config/i386/mingw-w64.opt.urls
@@ -0,0 +1,5 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/i386/mingw-w64.opt and generated HTML
+
+municode
+UrlSuffix(gcc/x86-Windows-Options.html#index-municode)
+
diff --git a/gcc/config/i386/mingw.opt.urls b/gcc/config/i386/mingw.opt.urls
new file mode 100644
index 000000000000..ce87e5ae848d
--- /dev/null
+++ b/gcc/config/i386/mingw.opt.urls
@@ -0,0 +1,12 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/i386/mingw.opt and generated HTML
+
+mcrtdll=
+UrlSuffix(gcc/x86-Windows-Options.html#index-mcrtdll)
+
+; skipping 'pthread' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-pthread-1'
+;   duplicate: 'gcc/Preprocessor-Options.html#index-pthread'
+
+Wpedantic-ms-format
+UrlSuffix(gcc/Warning-Options.html#index-Wno-pedantic-ms-format)
+
diff --git a/gcc/config/i386/nto.opt.urls b/gcc/config/i386/nto.opt.urls
new file mode 100644
index 000000000000..37c07a5b88be
--- /dev/null
+++ b/gcc/config/i386/nto.opt.urls
@@ -0,0 +1,5 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/i386/nto.opt and generated HTML
+
+G
+UrlSuffix(gcc/System-V-Options.html#index-G-5)
+
diff --git a/gcc/config/ia64/ia64.opt.urls b/gcc/config/ia64/ia64.opt.urls
new file mode 100644
index 000000000000..1e1d0631550a
--- /dev/null
+++ b/gcc/config/ia64/ia64.opt.urls
@@ -0,0 +1,122 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/ia64/ia64.opt and generated HTML
+
+mbig-endian
+UrlSuffix(gcc/IA-64-Options.html#index-mbig-endian-6)
+
+mlittle-endian
+UrlSuffix(gcc/IA-64-Options.html#index-mlittle-endian-6)
+
+mgnu-as
+UrlSuffix(gcc/IA-64-Options.html#index-mgnu-as)
+
+mgnu-ld
+UrlSuffix(gcc/IA-64-Options.html#index-mgnu-ld-1)
+
+mvolatile-asm-stop
+UrlSuffix(gcc/IA-64-Options.html#index-mvolatile-asm-stop)
+
+mregister-names
+UrlSuffix(gcc/IA-64-Options.html#index-mregister-names)
+
+mno-sdata
+UrlSuffix(gcc/IA-64-Options.html#index-mno-sdata-1)
+
+msdata
+UrlSuffix(gcc/IA-64-Options.html#index-msdata-1)
+
+mno-pic
+UrlSuffix(gcc/IA-64-Options.html#index-mno-pic)
+
+mconstant-gp
+UrlSuffix(gcc/IA-64-Options.html#index-mconstant-gp)
+
+mauto-pic
+UrlSuffix(gcc/IA-64-Options.html#index-mauto-pic)
+
+minline-float-divide-min-latency
+UrlSuffix(gcc/IA-64-Options.html#index-minline-float-divide-min-latency)
+
+minline-float-divide-max-throughput
+UrlSuffix(gcc/IA-64-Options.html#index-minline-float-divide-max-throughput)
+
+mno-inline-float-divide
+UrlSuffix(gcc/IA-64-Options.html#index-mno-inline-float-divide)
+
+minline-int-divide-min-latency
+UrlSuffix(gcc/IA-64-Options.html#index-minline-int-divide-min-latency)
+
+minline-int-divide-max-throughput
+UrlSuffix(gcc/IA-64-Options.html#index-minline-int-divide-max-throughput)
+
+mno-inline-int-divide
+UrlSuffix(gcc/IA-64-Options.html#index-mno-inline-int-divide)
+
+minline-sqrt-min-latency
+UrlSuffix(gcc/IA-64-Options.html#index-minline-sqrt-min-latency)
+
+minline-sqrt-max-throughput
+UrlSuffix(gcc/IA-64-Options.html#index-minline-sqrt-max-throughput)
+
+mno-inline-sqrt
+UrlSuffix(gcc/IA-64-Options.html#index-mno-inline-sqrt)
+
+mdwarf2-asm
+UrlSuffix(gcc/IA-64-Options.html#index-mdwarf2-asm)
+
+mearly-stop-bits
+UrlSuffix(gcc/IA-64-Options.html#index-mearly-stop-bits)
+
+mfixed-range=
+UrlSuffix(gcc/IA-64-Options.html#index-mfixed-range-1)
+
+mtls-size=
+UrlSuffix(gcc/IA-64-Options.html#index-mtls-size-1)
+
+mtune=
+UrlSuffix(gcc/IA-64-Options.html#index-mtune-7)
+
+msched-br-data-spec
+UrlSuffix(gcc/IA-64-Options.html#index-msched-br-data-spec)
+
+msched-ar-data-spec
+UrlSuffix(gcc/IA-64-Options.html#index-msched-ar-data-spec)
+
+msched-control-spec
+UrlSuffix(gcc/IA-64-Options.html#index-msched-control-spec)
+
+msched-br-in-data-spec
+UrlSuffix(gcc/IA-64-Options.html#index-msched-br-in-data-spec)
+
+msched-ar-in-data-spec
+UrlSuffix(gcc/IA-64-Options.html#index-msched-ar-in-data-spec)
+
+msched-in-control-spec
+UrlSuffix(gcc/IA-64-Options.html#index-msched-in-control-spec)
+
+msched-spec-ldc
+UrlSuffix(gcc/IA-64-Options.html#index-msched-spec-ldc)
+
+msched-prefer-non-data-spec-insns
+UrlSuffix(gcc/IA-64-Options.html#index-msched-prefer-non-data-spec-insns)
+
+msched-prefer-non-control-spec-insns
+UrlSuffix(gcc/IA-64-Options.html#index-msched-prefer-non-control-spec-insns)
+
+msched-count-spec-in-critical-path
+UrlSuffix(gcc/IA-64-Options.html#index-msched-count-spec-in-critical-path)
+
+msched-stop-bits-after-every-cycle
+UrlSuffix(gcc/IA-64-Options.html#index-msched-stop-bits-after-every-cycle)
+
+msched-fp-mem-deps-zero-cost
+UrlSuffix(gcc/IA-64-Options.html#index-msched-fp-mem-deps-zero-cost)
+
+msched-max-memory-insns=
+UrlSuffix(gcc/IA-64-Options.html#index-msched-max-memory-insns)
+
+msched-max-memory-insns-hard-limit
+UrlSuffix(gcc/IA-64-Options.html#index-msched-max-memory-insns-hard-limit)
+
+msel-sched-dont-check-control-spec
+UrlSuffix(gcc/IA-64-Options.html#index-msel-sched-dont-check-control-spec)
+
diff --git a/gcc/config/ia64/ilp32.opt.urls b/gcc/config/ia64/ilp32.opt.urls
new file mode 100644
index 000000000000..07bd47d6d13f
--- /dev/null
+++ b/gcc/config/ia64/ilp32.opt.urls
@@ -0,0 +1,8 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/ia64/ilp32.opt and generated HTML
+
+milp32
+UrlSuffix(gcc/IA-64-Options.html#index-milp32)
+
+mlp64
+UrlSuffix(gcc/IA-64-Options.html#index-mlp64)
+
diff --git a/gcc/config/ia64/vms.opt.urls b/gcc/config/ia64/vms.opt.urls
new file mode 100644
index 000000000000..e7797d9325e7
--- /dev/null
+++ b/gcc/config/ia64/vms.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/ia64/vms.opt and generated HTML
+
diff --git a/gcc/config/iq2000/iq2000.opt.urls b/gcc/config/iq2000/iq2000.opt.urls
new file mode 100644
index 000000000000..54e1aea5857f
--- /dev/null
+++ b/gcc/config/iq2000/iq2000.opt.urls
@@ -0,0 +1,14 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/iq2000/iq2000.opt and generated HTML
+
+; skipping 'march=' due to finding no URLs
+
+; skipping 'mcpu=' due to finding no URLs
+
+; skipping 'membedded-data' due to finding no URLs
+
+; skipping 'mgpopt' due to finding no URLs
+
+; skipping 'mno-crt0' due to finding no URLs
+
+; skipping 'muninit-const-in-rodata' due to finding no URLs
+
diff --git a/gcc/config/linux-android.opt.urls b/gcc/config/linux-android.opt.urls
new file mode 100644
index 000000000000..48d38e925aa1
--- /dev/null
+++ b/gcc/config/linux-android.opt.urls
@@ -0,0 +1,11 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/linux-android.opt and generated HTML
+
+mandroid
+UrlSuffix(gcc/GNU_002fLinux-Options.html#index-mandroid)
+
+tno-android-cc
+UrlSuffix(gcc/GNU_002fLinux-Options.html#index-tno-android-cc)
+
+tno-android-ld
+UrlSuffix(gcc/GNU_002fLinux-Options.html#index-tno-android-ld)
+
diff --git a/gcc/config/linux.opt.urls b/gcc/config/linux.opt.urls
new file mode 100644
index 000000000000..792a73fb0a69
--- /dev/null
+++ b/gcc/config/linux.opt.urls
@@ -0,0 +1,14 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/linux.opt and generated HTML
+
+mbionic
+UrlSuffix(gcc/GNU_002fLinux-Options.html#index-mbionic)
+
+mglibc
+UrlSuffix(gcc/GNU_002fLinux-Options.html#index-mglibc)
+
+muclibc
+UrlSuffix(gcc/GNU_002fLinux-Options.html#index-muclibc)
+
+mmusl
+UrlSuffix(gcc/GNU_002fLinux-Options.html#index-mmusl)
+
diff --git a/gcc/config/lm32/lm32.opt.urls b/gcc/config/lm32/lm32.opt.urls
new file mode 100644
index 000000000000..89c8c47d3f44
--- /dev/null
+++ b/gcc/config/lm32/lm32.opt.urls
@@ -0,0 +1,14 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/lm32/lm32.opt and generated HTML
+
+mdivide-enabled
+UrlSuffix(gcc/LM32-Options.html#index-mdivide-enabled)
+
+mbarrel-shift-enabled
+UrlSuffix(gcc/LM32-Options.html#index-mbarrel-shift-enabled)
+
+msign-extend-enabled
+UrlSuffix(gcc/LM32-Options.html#index-msign-extend-enabled)
+
+muser-enabled
+UrlSuffix(gcc/LM32-Options.html#index-muser-enabled)
+
diff --git a/gcc/config/loongarch/loongarch.opt.urls b/gcc/config/loongarch/loongarch.opt.urls
new file mode 100644
index 000000000000..8e5c47a6fa87
--- /dev/null
+++ b/gcc/config/loongarch/loongarch.opt.urls
@@ -0,0 +1,60 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/loongarch/loongarch.opt and generated HTML
+
+mfpu=
+UrlSuffix(gcc/LoongArch-Options.html#index-mfpu-2)
+
+msoft-float
+UrlSuffix(gcc/LoongArch-Options.html#index-msoft-float-5)
+
+msingle-float
+UrlSuffix(gcc/LoongArch-Options.html#index-msingle-float)
+
+mdouble-float
+UrlSuffix(gcc/LoongArch-Options.html#index-mdouble-float-1)
+
+msimd=
+UrlSuffix(gcc/LoongArch-Options.html#index-msimd-1)
+
+march=
+UrlSuffix(gcc/LoongArch-Options.html#index-march-7)
+
+mtune=
+UrlSuffix(gcc/LoongArch-Options.html#index-mtune-8)
+
+mabi=
+UrlSuffix(gcc/LoongArch-Options.html#index-mabi-2)
+
+mbranch-cost=
+UrlSuffix(gcc/LoongArch-Options.html#index-mbranch-cost-2)
+
+mcheck-zero-division
+UrlSuffix(gcc/LoongArch-Options.html#index-mcheck-zero-division)
+
+mcond-move-int
+UrlSuffix(gcc/LoongArch-Options.html#index-mcond-move-int)
+
+mcond-move-float
+UrlSuffix(gcc/LoongArch-Options.html#index-mcond-move-float)
+
+mmemcpy
+UrlSuffix(gcc/LoongArch-Options.html#index-mmemcpy)
+
+mstrict-align
+UrlSuffix(gcc/LoongArch-Options.html#index-mstrict-align-1)
+
+mmax-inline-memcpy-size=
+UrlSuffix(gcc/LoongArch-Options.html#index-mmax-inline-memcpy-size)
+
+mexplicit-relocs=
+UrlSuffix(gcc/LoongArch-Options.html#index-mexplicit-relocs-1)
+
+mexplicit-relocs
+UrlSuffix(gcc/LoongArch-Options.html#index-mexplicit-relocs-1)
+
+; skipping 'mcmodel=' due to finding no URLs
+
+mdirect-extern-access
+UrlSuffix(gcc/LoongArch-Options.html#index-mdirect-extern-access)
+
+; skipping 'mrelax' due to finding no URLs
+
diff --git a/gcc/config/lynx.opt.urls b/gcc/config/lynx.opt.urls
new file mode 100644
index 000000000000..63e7b9c4b33f
--- /dev/null
+++ b/gcc/config/lynx.opt.urls
@@ -0,0 +1,5 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/lynx.opt and generated HTML
+
+mthreads
+UrlSuffix(gcc/x86-Windows-Options.html#index-mthreads-1)
+
diff --git a/gcc/config/m32c/m32c.opt.urls b/gcc/config/m32c/m32c.opt.urls
new file mode 100644
index 000000000000..da1bc024f74a
--- /dev/null
+++ b/gcc/config/m32c/m32c.opt.urls
@@ -0,0 +1,8 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/m32c/m32c.opt and generated HTML
+
+msim
+UrlSuffix(gcc/M32C-Options.html#index-msim-4)
+
+memregs=
+UrlSuffix(gcc/M32C-Options.html#index-memregs_003d)
+
diff --git a/gcc/config/m32r/m32r.opt.urls b/gcc/config/m32r/m32r.opt.urls
new file mode 100644
index 000000000000..3f5a8183554b
--- /dev/null
+++ b/gcc/config/m32r/m32r.opt.urls
@@ -0,0 +1,27 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/m32r/m32r.opt and generated HTML
+
+m32rx
+UrlSuffix(gcc/M32R_002fD-Options.html#index-m32rx)
+
+m32r2
+UrlSuffix(gcc/M32R_002fD-Options.html#index-m32r2)
+
+m32r
+UrlSuffix(gcc/M32R_002fD-Options.html#index-m32r)
+
+malign-loops
+UrlSuffix(gcc/M32R_002fD-Options.html#index-malign-loops)
+
+mdebug
+UrlSuffix(gcc/M32R_002fD-Options.html#index-mdebug)
+
+; skipping 'mflush-func=' due to finding no URLs
+
+mno-flush-func
+UrlSuffix(gcc/M32R_002fD-Options.html#index-mno-flush-func)
+
+mno-flush-trap
+UrlSuffix(gcc/M32R_002fD-Options.html#index-mno-flush-trap)
+
+; skipping 'msdata=' due to finding no URLs
+
diff --git a/gcc/config/m68k/ieee.opt.urls b/gcc/config/m68k/ieee.opt.urls
new file mode 100644
index 000000000000..771998b7d217
--- /dev/null
+++ b/gcc/config/m68k/ieee.opt.urls
@@ -0,0 +1,4 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/m68k/ieee.opt and generated HTML
+
+; skipping 'mieee-fp' due to finding no URLs
+
diff --git a/gcc/config/m68k/m68k-tables.opt.urls b/gcc/config/m68k/m68k-tables.opt.urls
new file mode 100644
index 000000000000..380dc4370846
--- /dev/null
+++ b/gcc/config/m68k/m68k-tables.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/m68k/m68k-tables.opt and generated HTML
+
diff --git a/gcc/config/m68k/m68k.opt.urls b/gcc/config/m68k/m68k.opt.urls
new file mode 100644
index 000000000000..6301aa99f669
--- /dev/null
+++ b/gcc/config/m68k/m68k.opt.urls
@@ -0,0 +1,107 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/m68k/m68k.opt and generated HTML
+
+m5200
+UrlSuffix(gcc/M680x0-Options.html#index-m5200)
+
+m5206e
+UrlSuffix(gcc/M680x0-Options.html#index-m5206e)
+
+m528x
+UrlSuffix(gcc/M680x0-Options.html#index-m528x)
+
+m5307
+UrlSuffix(gcc/M680x0-Options.html#index-m5307)
+
+m5407
+UrlSuffix(gcc/M680x0-Options.html#index-m5407)
+
+m68000
+UrlSuffix(gcc/M680x0-Options.html#index-m68000)
+
+m68010
+UrlSuffix(gcc/M680x0-Options.html#index-m68010)
+
+m68020
+UrlSuffix(gcc/M680x0-Options.html#index-m68020)
+
+m68020-40
+UrlSuffix(gcc/M680x0-Options.html#index-m68020-40)
+
+m68020-60
+UrlSuffix(gcc/M680x0-Options.html#index-m68020-60)
+
+m68030
+UrlSuffix(gcc/M680x0-Options.html#index-m68030)
+
+m68040
+UrlSuffix(gcc/M680x0-Options.html#index-m68040)
+
+m68060
+UrlSuffix(gcc/M680x0-Options.html#index-m68060)
+
+m68881
+UrlSuffix(gcc/M680x0-Options.html#index-m68881)
+
+malign-int
+UrlSuffix(gcc/M680x0-Options.html#index-malign-int)
+
+march=
+UrlSuffix(gcc/M680x0-Options.html#index-march-8)
+
+mbitfield
+UrlSuffix(gcc/M680x0-Options.html#index-mbitfield)
+
+mc68000
+UrlSuffix(gcc/M680x0-Options.html#index-mc68000)
+
+mc68020
+UrlSuffix(gcc/M680x0-Options.html#index-mc68020)
+
+mcfv4e
+UrlSuffix(gcc/M680x0-Options.html#index-mcfv4e)
+
+mcpu=
+UrlSuffix(gcc/M680x0-Options.html#index-mcpu-7)
+
+mcpu32
+UrlSuffix(gcc/M680x0-Options.html#index-mcpu32)
+
+mdiv
+UrlSuffix(gcc/M680x0-Options.html#index-mdiv-1)
+
+mhard-float
+UrlSuffix(gcc/M680x0-Options.html#index-mhard-float-2)
+
+; skipping 'mid-shared-library' due to finding no URLs
+
+mlong-jump-table-offsets
+UrlSuffix(gcc/M680x0-Options.html#index-mlong-jump-table-offsets)
+
+mnobitfield
+UrlSuffix(gcc/M680x0-Options.html#index-mnobitfield)
+
+mpcrel
+UrlSuffix(gcc/M680x0-Options.html#index-mpcrel)
+
+mrtd
+UrlSuffix(gcc/M680x0-Options.html#index-mrtd)
+
+; skipping 'msep-data' due to finding no URLs
+
+; skipping 'mshared-library-id=' due to finding no URLs
+
+mshort
+UrlSuffix(gcc/M680x0-Options.html#index-mshort)
+
+msoft-float
+UrlSuffix(gcc/M680x0-Options.html#index-msoft-float-6)
+
+mstrict-align
+UrlSuffix(gcc/M680x0-Options.html#index-mstrict-align-2)
+
+mtune=
+UrlSuffix(gcc/M680x0-Options.html#index-mtune-9)
+
+mxgot
+UrlSuffix(gcc/M680x0-Options.html#index-mxgot)
+
diff --git a/gcc/config/m68k/uclinux.opt.urls b/gcc/config/m68k/uclinux.opt.urls
new file mode 100644
index 000000000000..3fd1392f88a6
--- /dev/null
+++ b/gcc/config/m68k/uclinux.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/m68k/uclinux.opt and generated HTML
+
diff --git a/gcc/config/mcore/mcore.opt.urls b/gcc/config/mcore/mcore.opt.urls
new file mode 100644
index 000000000000..a876c8c13eff
--- /dev/null
+++ b/gcc/config/mcore/mcore.opt.urls
@@ -0,0 +1,38 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/mcore/mcore.opt and generated HTML
+
+m210
+UrlSuffix(gcc/MCore-Options.html#index-m210)
+
+m340
+UrlSuffix(gcc/MCore-Options.html#index-m340)
+
+m4byte-functions
+UrlSuffix(gcc/MCore-Options.html#index-m4byte-functions)
+
+mbig-endian
+UrlSuffix(gcc/MCore-Options.html#index-mbig-endian-7)
+
+mcallgraph-data
+UrlSuffix(gcc/MCore-Options.html#index-mcallgraph-data)
+
+mdiv
+UrlSuffix(gcc/MCore-Options.html#index-mdiv-2)
+
+mhardlit
+UrlSuffix(gcc/MCore-Options.html#index-mhardlit)
+
+mlittle-endian
+UrlSuffix(gcc/MCore-Options.html#index-mlittle-endian-7)
+
+mno-lsim
+UrlSuffix(gcc/MCore-Options.html#index-mno-lsim-1)
+
+mslow-bytes
+UrlSuffix(gcc/MCore-Options.html#index-mslow-bytes)
+
+mstack-increment=
+UrlSuffix(gcc/MCore-Options.html#index-mstack-increment)
+
+mwide-bitfields
+UrlSuffix(gcc/MCore-Options.html#index-mwide-bitfields)
+
diff --git a/gcc/config/microblaze/microblaze.opt.urls b/gcc/config/microblaze/microblaze.opt.urls
new file mode 100644
index 000000000000..33b13b84e2c2
--- /dev/null
+++ b/gcc/config/microblaze/microblaze.opt.urls
@@ -0,0 +1,59 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/microblaze/microblaze.opt and generated HTML
+
+msoft-float
+UrlSuffix(gcc/MicroBlaze-Options.html#index-msoft-float-7)
+
+mhard-float
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mhard-float-3)
+
+msmall-divides
+UrlSuffix(gcc/MicroBlaze-Options.html#index-msmall-divides)
+
+mcpu=
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mcpu_003d-3)
+
+mmemcpy
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mmemcpy-1)
+
+mbig-endian
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mbig-endian-8)
+
+mlittle-endian
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mlittle-endian-8)
+
+mxl-soft-mul
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-soft-mul)
+
+mxl-reorder
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-reorder)
+
+mxl-soft-div
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-soft-div)
+
+mxl-barrel-shift
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-barrel-shift)
+
+mxl-pattern-compare
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-pattern-compare)
+
+mxl-stack-check
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-stack-check)
+
+mxl-gp-opt
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-gp-opt)
+
+mno-clearbss
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mno-clearbss)
+
+mxl-multiply-high
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-multiply-high)
+
+mxl-float-convert
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-float-convert)
+
+mxl-float-sqrt
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-float-sqrt)
+
+mpic-data-is-text-relative
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mpic-data-is-text-relative-1)
+
diff --git a/gcc/config/mips/mips-tables.opt.urls b/gcc/config/mips/mips-tables.opt.urls
new file mode 100644
index 000000000000..3b2a77f2ea9c
--- /dev/null
+++ b/gcc/config/mips/mips-tables.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/mips/mips-tables.opt and generated HTML
+
diff --git a/gcc/config/mips/mips.opt.urls b/gcc/config/mips/mips.opt.urls
new file mode 100644
index 000000000000..2e826a2be382
--- /dev/null
+++ b/gcc/config/mips/mips.opt.urls
@@ -0,0 +1,269 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/mips/mips.opt and generated HTML
+
+EB
+UrlSuffix(gcc/MIPS-Options.html#index-EB-2)
+
+EL
+UrlSuffix(gcc/MIPS-Options.html#index-EL-2)
+
+; skipping 'mabi=' due to finding no URLs
+
+mabicalls
+UrlSuffix(gcc/MIPS-Options.html#index-mabicalls)
+
+mmad
+UrlSuffix(gcc/MIPS-Options.html#index-mmad)
+
+mimadd
+UrlSuffix(gcc/MIPS-Options.html#index-mimadd)
+
+march=
+UrlSuffix(gcc/MIPS-Options.html#index-march-9)
+
+mbranch-cost=
+UrlSuffix(gcc/MIPS-Options.html#index-mbranch-cost-3)
+
+mbranch-likely
+UrlSuffix(gcc/MIPS-Options.html#index-mbranch-likely)
+
+mflip-mips16
+UrlSuffix(gcc/MIPS-Options.html#index-mflip-mips16)
+
+mcheck-zero-division
+UrlSuffix(gcc/MIPS-Options.html#index-mcheck-zero-division-1)
+
+mcode-readable=
+UrlSuffix(gcc/MIPS-Options.html#index-mcode-readable)
+
+mdivide-breaks
+UrlSuffix(gcc/MIPS-Options.html#index-mdivide-breaks)
+
+mdivide-traps
+UrlSuffix(gcc/MIPS-Options.html#index-mdivide-traps)
+
+mdmx
+UrlSuffix(gcc/MIPS-Options.html#index-mdmx)
+
+mdouble-float
+UrlSuffix(gcc/MIPS-Options.html#index-mdouble-float-2)
+
+mdsp
+UrlSuffix(gcc/MIPS-Options.html#index-mdsp-1)
+
+mdspr2
+UrlSuffix(gcc/MIPS-Options.html#index-mdspr2)
+
+; skipping 'mdebug' due to finding no URLs
+
+; skipping 'meb' due to finding no URLs
+
+; skipping 'mel' due to finding no URLs
+
+membedded-data
+UrlSuffix(gcc/MIPS-Options.html#index-membedded-data)
+
+meva
+UrlSuffix(gcc/MIPS-Options.html#index-meva)
+
+mexplicit-relocs
+UrlSuffix(gcc/MIPS-Options.html#index-mexplicit-relocs-2)
+
+mextern-sdata
+UrlSuffix(gcc/MIPS-Options.html#index-mextern-sdata)
+
+mfix-24k
+UrlSuffix(gcc/MIPS-Options.html#index-mfix-24k)
+
+mfix-r4000
+UrlSuffix(gcc/MIPS-Options.html#index-mfix-r4000)
+
+mfix-r4400
+UrlSuffix(gcc/MIPS-Options.html#index-mfix-r4400)
+
+mfix-r5900
+UrlSuffix(gcc/MIPS-Options.html#index-mfix-r5900)
+
+mfix-rm7000
+UrlSuffix(gcc/MIPS-Options.html#index-mfix-rm7000)
+
+mfix-r10000
+UrlSuffix(gcc/MIPS-Options.html#index-mfix-r10000)
+
+mfix-sb1
+UrlSuffix(gcc/MIPS-Options.html#index-mfix-sb1)
+
+mfix-vr4120
+UrlSuffix(gcc/MIPS-Options.html#index-mfix-vr4120)
+
+mfix-vr4130
+UrlSuffix(gcc/MIPS-Options.html#index-mfix-vr4130)
+
+mfp-exceptions
+UrlSuffix(gcc/MIPS-Options.html#index-mfp-exceptions)
+
+mfp32
+UrlSuffix(gcc/MIPS-Options.html#index-mfp32)
+
+mfpxx
+UrlSuffix(gcc/MIPS-Options.html#index-mfpxx)
+
+mfp64
+UrlSuffix(gcc/MIPS-Options.html#index-mfp64)
+
+mflush-func=
+UrlSuffix(gcc/MIPS-Options.html#index-mflush-func)
+
+mgp32
+UrlSuffix(gcc/MIPS-Options.html#index-mgp32)
+
+mgp64
+UrlSuffix(gcc/MIPS-Options.html#index-mgp64)
+
+mgpopt
+UrlSuffix(gcc/MIPS-Options.html#index-mgpopt)
+
+mplt
+UrlSuffix(gcc/MIPS-Options.html#index-mplt)
+
+mhard-float
+UrlSuffix(gcc/MIPS-Options.html#index-mhard-float-4)
+
+minterlink-compressed
+UrlSuffix(gcc/MIPS-Options.html#index-minterlink-compressed)
+
+minterlink-mips16
+UrlSuffix(gcc/MIPS-Options.html#index-minterlink-mips16)
+
+mips16
+UrlSuffix(gcc/MIPS-Options.html#index-mips16)
+
+mips3d
+UrlSuffix(gcc/MIPS-Options.html#index-mips3d)
+
+mllsc
+UrlSuffix(gcc/MIPS-Options.html#index-mllsc)
+
+mlocal-sdata
+UrlSuffix(gcc/MIPS-Options.html#index-mlocal-sdata)
+
+mlong-calls
+UrlSuffix(gcc/MIPS-Options.html#index-mlong-calls-6)
+
+mlong32
+UrlSuffix(gcc/MIPS-Options.html#index-mlong32)
+
+mlong64
+UrlSuffix(gcc/MIPS-Options.html#index-mlong64)
+
+mmcount-ra-address
+UrlSuffix(gcc/MIPS-Options.html#index-mmcount-ra-address)
+
+mmemcpy
+UrlSuffix(gcc/MIPS-Options.html#index-mmemcpy-2)
+
+mmicromips
+UrlSuffix(gcc/MIPS-Options.html#index-mmicromips)
+
+mmt
+UrlSuffix(gcc/MIPS-Options.html#index-mmt)
+
+mno-float
+UrlSuffix(gcc/MIPS-Options.html#index-mno-float)
+
+mmcu
+UrlSuffix(gcc/MIPS-Options.html#index-mmcu-1)
+
+; skipping 'mno-flush-func' due to finding no URLs
+
+mno-mdmx
+UrlSuffix(gcc/MIPS-Options.html#index-mno-mdmx)
+
+mno-mips16
+UrlSuffix(gcc/MIPS-Options.html#index-mno-mips16)
+
+mno-mips3d
+UrlSuffix(gcc/MIPS-Options.html#index-mno-mips3d)
+
+mpaired-single
+UrlSuffix(gcc/MIPS-Options.html#index-mpaired-single)
+
+mr10k-cache-barrier=
+UrlSuffix(gcc/MIPS-Options.html#index-mr10k-cache-barrier)
+
+mrelax-pic-calls
+UrlSuffix(gcc/MIPS-Options.html#index-mrelax-pic-calls)
+
+msingle-float
+UrlSuffix(gcc/MIPS-Options.html#index-msingle-float-1)
+
+msmartmips
+UrlSuffix(gcc/MIPS-Options.html#index-msmartmips)
+
+msoft-float
+UrlSuffix(gcc/MIPS-Options.html#index-msoft-float-8)
+
+msplit-addresses
+UrlSuffix(gcc/MIPS-Options.html#index-msplit-addresses)
+
+mmips16e2
+UrlSuffix(gcc/MIPS-Options.html#index-mmips16e2)
+
+msym32
+UrlSuffix(gcc/MIPS-Options.html#index-msym32)
+
+msynci
+UrlSuffix(gcc/MIPS-Options.html#index-msynci)
+
+; skipping 'mlra' due to finding no URLs
+
+mlxc1-sxc1
+UrlSuffix(gcc/MIPS-Options.html#index-mlxc1-sxc1)
+
+mmadd4
+UrlSuffix(gcc/MIPS-Options.html#index-mmadd4)
+
+mtune=
+UrlSuffix(gcc/MIPS-Options.html#index-mtune-10)
+
+munaligned-access
+UrlSuffix(gcc/MIPS-Options.html#index-munaligned-access-1)
+
+muninit-const-in-rodata
+UrlSuffix(gcc/MIPS-Options.html#index-muninit-const-in-rodata)
+
+mvirt
+UrlSuffix(gcc/MIPS-Options.html#index-mvirt)
+
+mxpa
+UrlSuffix(gcc/MIPS-Options.html#index-mxpa)
+
+mcrc
+UrlSuffix(gcc/MIPS-Options.html#index-mcrc)
+
+mginv
+UrlSuffix(gcc/MIPS-Options.html#index-mginv)
+
+mvr4130-align
+UrlSuffix(gcc/MIPS-Options.html#index-mvr4130-align)
+
+mxgot
+UrlSuffix(gcc/MIPS-Options.html#index-mxgot-1)
+
+modd-spreg
+UrlSuffix(gcc/MIPS-Options.html#index-modd-spreg)
+
+mframe-header-opt
+UrlSuffix(gcc/MIPS-Options.html#index-mframe-header-opt)
+
+mload-store-pairs
+UrlSuffix(gcc/MIPS-Options.html#index-mload-store-pairs)
+
+mloongson-mmi
+UrlSuffix(gcc/MIPS-Options.html#index-mloongson-mmi)
+
+mloongson-ext
+UrlSuffix(gcc/MIPS-Options.html#index-mloongson-ext)
+
+mloongson-ext2
+UrlSuffix(gcc/MIPS-Options.html#index-mloongson-ext2)
+
diff --git a/gcc/config/mips/sde.opt.urls b/gcc/config/mips/sde.opt.urls
new file mode 100644
index 000000000000..2a3d290545f0
--- /dev/null
+++ b/gcc/config/mips/sde.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/mips/sde.opt and generated HTML
+
diff --git a/gcc/config/mmix/mmix.opt.urls b/gcc/config/mmix/mmix.opt.urls
new file mode 100644
index 000000000000..6722f9e4e01d
--- /dev/null
+++ b/gcc/config/mmix/mmix.opt.urls
@@ -0,0 +1,44 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/mmix/mmix.opt and generated HTML
+
+mlibfuncs
+UrlSuffix(gcc/MMIX-Options.html#index-mlibfuncs)
+
+mabi=mmixware
+UrlSuffix(gcc/MMIX-Options.html#index-mabi_003dmmixware)
+
+mabi=gnu
+UrlSuffix(gcc/MMIX-Options.html#index-mabi_003dgnu)
+
+mepsilon
+UrlSuffix(gcc/MMIX-Options.html#index-mepsilon)
+
+mzero-extend
+UrlSuffix(gcc/MMIX-Options.html#index-mzero-extend)
+
+mknuthdiv
+UrlSuffix(gcc/MMIX-Options.html#index-mknuthdiv)
+
+mtoplevel-symbols
+UrlSuffix(gcc/MMIX-Options.html#index-mtoplevel-symbols)
+
+melf
+UrlSuffix(gcc/MMIX-Options.html#index-melf-1)
+
+mbranch-predict
+UrlSuffix(gcc/MMIX-Options.html#index-mbranch-predict)
+
+mno-branch-predict
+UrlSuffix(gcc/MMIX-Options.html#index-mno-branch-predict)
+
+mbase-addresses
+UrlSuffix(gcc/MMIX-Options.html#index-mbase-addresses)
+
+mno-base-addresses
+UrlSuffix(gcc/MMIX-Options.html#index-mno-base-addresses)
+
+msingle-exit
+UrlSuffix(gcc/MMIX-Options.html#index-msingle-exit)
+
+mno-single-exit
+UrlSuffix(gcc/MMIX-Options.html#index-mno-single-exit)
+
diff --git a/gcc/config/mn10300/mn10300.opt.urls b/gcc/config/mn10300/mn10300.opt.urls
new file mode 100644
index 000000000000..396ca4aa2e60
--- /dev/null
+++ b/gcc/config/mn10300/mn10300.opt.urls
@@ -0,0 +1,32 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/mn10300/mn10300.opt and generated HTML
+
+mam33
+UrlSuffix(gcc/MN10300-Options.html#index-mam33)
+
+mam33-2
+UrlSuffix(gcc/MN10300-Options.html#index-mam33-2)
+
+mam34
+UrlSuffix(gcc/MN10300-Options.html#index-mam34)
+
+mtune=
+UrlSuffix(gcc/MN10300-Options.html#index-mtune-11)
+
+mmult-bug
+UrlSuffix(gcc/MN10300-Options.html#index-mmult-bug)
+
+mno-crt0
+UrlSuffix(gcc/MN10300-Options.html#index-mno-crt0)
+
+mrelax
+UrlSuffix(gcc/MN10300-Options.html#index-mrelax-2)
+
+mreturn-pointer-on-d0
+UrlSuffix(gcc/MN10300-Options.html#index-mreturn-pointer-on-d0)
+
+mliw
+UrlSuffix(gcc/MN10300-Options.html#index-mliw)
+
+msetlb
+UrlSuffix(gcc/MN10300-Options.html#index-msetlb)
+
diff --git a/gcc/config/moxie/moxie.opt.urls b/gcc/config/moxie/moxie.opt.urls
new file mode 100644
index 000000000000..a1b8b8a7a767
--- /dev/null
+++ b/gcc/config/moxie/moxie.opt.urls
@@ -0,0 +1,14 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/moxie/moxie.opt and generated HTML
+
+meb
+UrlSuffix(gcc/Moxie-Options.html#index-meb)
+
+mel
+UrlSuffix(gcc/Moxie-Options.html#index-mel)
+
+mmul.x
+UrlSuffix(gcc/Moxie-Options.html#index-mmul_002ex)
+
+mno-crt0
+UrlSuffix(gcc/Moxie-Options.html#index-mno-crt0-1)
+
diff --git a/gcc/config/msp430/msp430.opt.urls b/gcc/config/msp430/msp430.opt.urls
new file mode 100644
index 000000000000..420c1c50f13e
--- /dev/null
+++ b/gcc/config/msp430/msp430.opt.urls
@@ -0,0 +1,53 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/msp430/msp430.opt and generated HTML
+
+msim
+UrlSuffix(gcc/MSP430-Options.html#index-msim-5)
+
+mtiny-printf
+UrlSuffix(gcc/MSP430-Options.html#index-mtiny-printf)
+
+masm-hex
+UrlSuffix(gcc/MSP430-Options.html#index-masm-hex)
+
+mmcu=
+UrlSuffix(gcc/MSP430-Options.html#index-mmcu_003d)
+
+mwarn-mcu
+UrlSuffix(gcc/MSP430-Options.html#index-mwarn-mcu)
+
+mwarn-devices-csv
+UrlSuffix(gcc/MSP430-Options.html#index-mwarn-devices-csv)
+
+mcpu=
+UrlSuffix(gcc/MSP430-Options.html#index-mcpu_003d-4)
+
+mlarge
+UrlSuffix(gcc/MSP430-Options.html#index-mlarge)
+
+msmall
+UrlSuffix(gcc/MSP430-Options.html#index-msmall)
+
+mrelax
+UrlSuffix(gcc/MSP430-Options.html#index-mrelax-3)
+
+minrt
+UrlSuffix(gcc/MSP430-Options.html#index-minrt)
+
+mhwmult=
+UrlSuffix(gcc/MSP430-Options.html#index-mhwmult_003d)
+
+mcode-region=
+UrlSuffix(gcc/MSP430-Options.html#index-mcode-region)
+
+mdata-region=
+UrlSuffix(gcc/MSP430-Options.html#index-mdata-region)
+
+msilicon-errata=
+UrlSuffix(gcc/MSP430-Options.html#index-msilicon-errata)
+
+msilicon-errata-warn=
+UrlSuffix(gcc/MSP430-Options.html#index-msilicon-errata-warn)
+
+mmax-inline-shift=
+UrlSuffix(gcc/MSP430-Options.html#index-mmax-inline-shift_003d)
+
diff --git a/gcc/config/nds32/nds32-elf.opt.urls b/gcc/config/nds32/nds32-elf.opt.urls
new file mode 100644
index 000000000000..5399afba7d3d
--- /dev/null
+++ b/gcc/config/nds32/nds32-elf.opt.urls
@@ -0,0 +1,5 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/nds32/nds32-elf.opt and generated HTML
+
+mcmodel=
+UrlSuffix(gcc/NDS32-Options.html#index-mcmodel)
+
diff --git a/gcc/config/nds32/nds32-linux.opt.urls b/gcc/config/nds32/nds32-linux.opt.urls
new file mode 100644
index 000000000000..27d39f04ad95
--- /dev/null
+++ b/gcc/config/nds32/nds32-linux.opt.urls
@@ -0,0 +1,5 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/nds32/nds32-linux.opt and generated HTML
+
+mcmodel=
+UrlSuffix(gcc/NDS32-Options.html#index-mcmodel)
+
diff --git a/gcc/config/nds32/nds32.opt.urls b/gcc/config/nds32/nds32.opt.urls
new file mode 100644
index 000000000000..661a266a76cd
--- /dev/null
+++ b/gcc/config/nds32/nds32.opt.urls
@@ -0,0 +1,57 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/nds32/nds32.opt and generated HTML
+
+; skipping 'EB' due to finding no URLs
+
+; skipping 'EL' due to finding no URLs
+
+; skipping 'mabi=' due to finding no URLs
+
+mreduced-regs
+UrlSuffix(gcc/NDS32-Options.html#index-mreduced-regs)
+
+mfull-regs
+UrlSuffix(gcc/NDS32-Options.html#index-mfull-regs)
+
+mbig-endian
+UrlSuffix(gcc/NDS32-Options.html#index-mbig-endian-9)
+
+mlittle-endian
+UrlSuffix(gcc/NDS32-Options.html#index-mlittle-endian-9)
+
+mcmov
+UrlSuffix(gcc/NDS32-Options.html#index-mcmov)
+
+mext-perf
+UrlSuffix(gcc/NDS32-Options.html#index-mext-perf)
+
+mext-perf2
+UrlSuffix(gcc/NDS32-Options.html#index-mext-perf2)
+
+mext-string
+UrlSuffix(gcc/NDS32-Options.html#index-mext-string)
+
+mv3push
+UrlSuffix(gcc/NDS32-Options.html#index-mv3push)
+
+m16-bit
+UrlSuffix(gcc/NDS32-Options.html#index-m16-bit-1)
+
+misr-vector-size=
+UrlSuffix(gcc/NDS32-Options.html#index-misr-vector-size)
+
+mcache-block-size=
+UrlSuffix(gcc/NDS32-Options.html#index-mcache-block-size)
+
+march=
+UrlSuffix(gcc/NDS32-Options.html#index-march-10)
+
+; skipping 'mcpu=' due to finding no URLs
+
+mctor-dtor
+UrlSuffix(gcc/NDS32-Options.html#index-mctor-dtor)
+
+mrelax
+UrlSuffix(gcc/NDS32-Options.html#index-mrelax-4)
+
+; skipping 'munaligned-access' due to finding no URLs
+
diff --git a/gcc/config/netbsd-elf.opt.urls b/gcc/config/netbsd-elf.opt.urls
new file mode 100644
index 000000000000..c0e791c3a35f
--- /dev/null
+++ b/gcc/config/netbsd-elf.opt.urls
@@ -0,0 +1,5 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/netbsd-elf.opt and generated HTML
+
+rdynamic
+UrlSuffix(gcc/Link-Options.html#index-rdynamic)
+
diff --git a/gcc/config/netbsd.opt.urls b/gcc/config/netbsd.opt.urls
new file mode 100644
index 000000000000..cd48e6881f07
--- /dev/null
+++ b/gcc/config/netbsd.opt.urls
@@ -0,0 +1,6 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/netbsd.opt and generated HTML
+
+; skipping 'pthread' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-pthread-1'
+;   duplicate: 'gcc/Preprocessor-Options.html#index-pthread'
+
diff --git a/gcc/config/nios2/elf.opt.urls b/gcc/config/nios2/elf.opt.urls
new file mode 100644
index 000000000000..1367c6ba50cf
--- /dev/null
+++ b/gcc/config/nios2/elf.opt.urls
@@ -0,0 +1,14 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/nios2/elf.opt and generated HTML
+
+msmallc
+UrlSuffix(gcc/Nios-II-Options.html#index-msmallc)
+
+msys-lib=
+UrlSuffix(gcc/Nios-II-Options.html#index-msys-lib)
+
+msys-crt0=
+UrlSuffix(gcc/Nios-II-Options.html#index-msys-crt0)
+
+mhal
+UrlSuffix(gcc/Nios-II-Options.html#index-mhal)
+
diff --git a/gcc/config/nios2/nios2.opt.urls b/gcc/config/nios2/nios2.opt.urls
new file mode 100644
index 000000000000..a38ea285a6e2
--- /dev/null
+++ b/gcc/config/nios2/nios2.opt.urls
@@ -0,0 +1,50 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/nios2/nios2.opt and generated HTML
+
+mhw-div
+UrlSuffix(gcc/Nios-II-Options.html#index-mhw-div)
+
+mhw-mul
+UrlSuffix(gcc/Nios-II-Options.html#index-mhw-mul)
+
+mhw-mulx
+UrlSuffix(gcc/Nios-II-Options.html#index-mhw-mulx)
+
+mfast-sw-div
+UrlSuffix(gcc/Nios-II-Options.html#index-mfast-sw-div)
+
+mbypass-cache
+UrlSuffix(gcc/Nios-II-Options.html#index-mbypass-cache)
+
+mno-cache-volatile
+UrlSuffix(gcc/Nios-II-Options.html#index-mno-cache-volatile)
+
+mcache-volatile
+UrlSuffix(gcc/Nios-II-Options.html#index-mcache-volatile)
+
+mgpopt=
+UrlSuffix(gcc/Nios-II-Options.html#index-mgpopt-1)
+
+mgpopt
+UrlSuffix(gcc/Nios-II-Options.html#index-mgpopt-1)
+
+mno-gpopt
+UrlSuffix(gcc/Nios-II-Options.html#index-mno-gpopt-1)
+
+meb
+UrlSuffix(gcc/Nios-II-Options.html#index-meb-1)
+
+mel
+UrlSuffix(gcc/Nios-II-Options.html#index-mel-1)
+
+mcustom-fpu-cfg=
+UrlSuffix(gcc/Nios-II-Options.html#index-mcustom-fpu-cfg)
+
+march=
+UrlSuffix(gcc/Nios-II-Options.html#index-march-11)
+
+mgprel-sec=
+UrlSuffix(gcc/Nios-II-Options.html#index-mgprel-sec)
+
+mr0rel-sec=
+UrlSuffix(gcc/Nios-II-Options.html#index-mr0rel-sec)
+
diff --git a/gcc/config/nvptx/nvptx-gen.opt.urls b/gcc/config/nvptx/nvptx-gen.opt.urls
new file mode 100644
index 000000000000..7ea132489aad
--- /dev/null
+++ b/gcc/config/nvptx/nvptx-gen.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/nvptx/nvptx-gen.opt and generated HTML
+
diff --git a/gcc/config/nvptx/nvptx.opt.urls b/gcc/config/nvptx/nvptx.opt.urls
new file mode 100644
index 000000000000..5c8942ca7522
--- /dev/null
+++ b/gcc/config/nvptx/nvptx.opt.urls
@@ -0,0 +1,29 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/nvptx/nvptx.opt and generated HTML
+
+m64
+UrlSuffix(gcc/Nvidia-PTX-Options.html#index-m64)
+
+mmainkernel
+UrlSuffix(gcc/Nvidia-PTX-Options.html#index-mmainkernel)
+
+moptimize
+UrlSuffix(gcc/Nvidia-PTX-Options.html#index-moptimize)
+
+msoft-stack
+UrlSuffix(gcc/Nvidia-PTX-Options.html#index-msoft-stack)
+
+muniform-simt
+UrlSuffix(gcc/Nvidia-PTX-Options.html#index-muniform-simt)
+
+mgomp
+UrlSuffix(gcc/Nvidia-PTX-Options.html#index-mgomp)
+
+misa=
+UrlSuffix(gcc/Nvidia-PTX-Options.html#index-misa)
+
+march=
+UrlSuffix(gcc/Nvidia-PTX-Options.html#index-march-12)
+
+mptx=
+UrlSuffix(gcc/Nvidia-PTX-Options.html#index-mptx)
+
diff --git a/gcc/config/openbsd.opt.urls b/gcc/config/openbsd.opt.urls
new file mode 100644
index 000000000000..28d24583b0dc
--- /dev/null
+++ b/gcc/config/openbsd.opt.urls
@@ -0,0 +1,6 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/openbsd.opt and generated HTML
+
+; skipping 'pthread' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-pthread-1'
+;   duplicate: 'gcc/Preprocessor-Options.html#index-pthread'
+
diff --git a/gcc/config/or1k/elf.opt.urls b/gcc/config/or1k/elf.opt.urls
new file mode 100644
index 000000000000..ea3d5d76ac7d
--- /dev/null
+++ b/gcc/config/or1k/elf.opt.urls
@@ -0,0 +1,8 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/or1k/elf.opt and generated HTML
+
+mboard=
+UrlSuffix(gcc/OpenRISC-Options.html#index-mboard)
+
+mnewlib
+UrlSuffix(gcc/OpenRISC-Options.html#index-mnewlib)
+
diff --git a/gcc/config/or1k/or1k.opt.urls b/gcc/config/or1k/or1k.opt.urls
new file mode 100644
index 000000000000..d0409e51ba2f
--- /dev/null
+++ b/gcc/config/or1k/or1k.opt.urls
@@ -0,0 +1,46 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/or1k/or1k.opt and generated HTML
+
+mhard-div
+UrlSuffix(gcc/OpenRISC-Options.html#index-mhard-div)
+
+msoft-div
+UrlSuffix(gcc/OpenRISC-Options.html#index-msoft-div)
+
+mhard-mul
+UrlSuffix(gcc/OpenRISC-Options.html#index-mhard-mul)
+
+msoft-mul
+UrlSuffix(gcc/OpenRISC-Options.html#index-msoft-mul)
+
+msoft-float
+UrlSuffix(gcc/OpenRISC-Options.html#index-msoft-float-9)
+
+mhard-float
+UrlSuffix(gcc/OpenRISC-Options.html#index-mhard-float-5)
+
+mdouble-float
+UrlSuffix(gcc/OpenRISC-Options.html#index-mdouble-float-3)
+
+munordered-float
+UrlSuffix(gcc/OpenRISC-Options.html#index-munordered-float)
+
+; skipping 'mcmodel=' due to finding no URLs
+
+mcmov
+UrlSuffix(gcc/OpenRISC-Options.html#index-mcmov-1)
+
+mror
+UrlSuffix(gcc/OpenRISC-Options.html#index-mror)
+
+mrori
+UrlSuffix(gcc/OpenRISC-Options.html#index-mrori)
+
+msext
+UrlSuffix(gcc/OpenRISC-Options.html#index-msext)
+
+msfimm
+UrlSuffix(gcc/OpenRISC-Options.html#index-msfimm)
+
+mshftimm
+UrlSuffix(gcc/OpenRISC-Options.html#index-mshftimm)
+
diff --git a/gcc/config/pa/pa-hpux.opt.urls b/gcc/config/pa/pa-hpux.opt.urls
new file mode 100644
index 000000000000..6a52dd08e482
--- /dev/null
+++ b/gcc/config/pa/pa-hpux.opt.urls
@@ -0,0 +1,11 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/pa/pa-hpux.opt and generated HTML
+
+msio
+UrlSuffix(gcc/HPPA-Options.html#index-msio)
+
+nolibdld
+UrlSuffix(gcc/HPPA-Options.html#index-nolibdld)
+
+rdynamic
+UrlSuffix(gcc/Link-Options.html#index-rdynamic)
+
diff --git a/gcc/config/pa/pa-hpux1010.opt.urls b/gcc/config/pa/pa-hpux1010.opt.urls
new file mode 100644
index 000000000000..9b96cafbf065
--- /dev/null
+++ b/gcc/config/pa/pa-hpux1010.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/pa/pa-hpux1010.opt and generated HTML
+
diff --git a/gcc/config/pa/pa-hpux1111.opt.urls b/gcc/config/pa/pa-hpux1111.opt.urls
new file mode 100644
index 000000000000..706e63c534bd
--- /dev/null
+++ b/gcc/config/pa/pa-hpux1111.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/pa/pa-hpux1111.opt and generated HTML
+
diff --git a/gcc/config/pa/pa-hpux1131.opt.urls b/gcc/config/pa/pa-hpux1131.opt.urls
new file mode 100644
index 000000000000..497c49d186f3
--- /dev/null
+++ b/gcc/config/pa/pa-hpux1131.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/pa/pa-hpux1131.opt and generated HTML
+
diff --git a/gcc/config/pa/pa.opt.urls b/gcc/config/pa/pa.opt.urls
new file mode 100644
index 000000000000..5b8bcebdd0da
--- /dev/null
+++ b/gcc/config/pa/pa.opt.urls
@@ -0,0 +1,71 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/pa/pa.opt and generated HTML
+
+matomic-libcalls
+UrlSuffix(gcc/HPPA-Options.html#index-matomic-libcalls)
+
+mbig-switch
+UrlSuffix(gcc/HPPA-Options.html#index-mbig-switch)
+
+mcaller-copies
+UrlSuffix(gcc/HPPA-Options.html#index-mcaller-copies)
+
+mcoherent-ldcw
+UrlSuffix(gcc/HPPA-Options.html#index-mcoherent-ldcw)
+
+mdisable-fpregs
+UrlSuffix(gcc/HPPA-Options.html#index-mdisable-fpregs)
+
+mdisable-indexing
+UrlSuffix(gcc/HPPA-Options.html#index-mdisable-indexing)
+
+mfast-indirect-calls
+UrlSuffix(gcc/HPPA-Options.html#index-mfast-indirect-calls)
+
+mfixed-range=
+UrlSuffix(gcc/HPPA-Options.html#index-mfixed-range)
+
+mgas
+UrlSuffix(gcc/HPPA-Options.html#index-mgas)
+
+mjump-in-delay
+UrlSuffix(gcc/HPPA-Options.html#index-mjump-in-delay)
+
+mlinker-opt
+UrlSuffix(gcc/HPPA-Options.html#index-mlinker-opt)
+
+mlong-calls
+UrlSuffix(gcc/HPPA-Options.html#index-mlong-calls-5)
+
+mlong-load-store
+UrlSuffix(gcc/HPPA-Options.html#index-mlong-load-store)
+
+mno-space-regs
+UrlSuffix(gcc/HPPA-Options.html#index-mno-space-regs)
+
+mordered
+UrlSuffix(gcc/HPPA-Options.html#index-mordered)
+
+mpa-risc-1-0
+UrlSuffix(gcc/HPPA-Options.html#index-mpa-risc-1-0)
+
+mpa-risc-1-1
+UrlSuffix(gcc/HPPA-Options.html#index-mpa-risc-1-1)
+
+mpa-risc-2-0
+UrlSuffix(gcc/HPPA-Options.html#index-mpa-risc-2-0)
+
+mportable-runtime
+UrlSuffix(gcc/HPPA-Options.html#index-mportable-runtime)
+
+mschedule=
+UrlSuffix(gcc/HPPA-Options.html#index-mschedule)
+
+msoft-float
+UrlSuffix(gcc/HPPA-Options.html#index-msoft-float-4)
+
+msoft-mult
+UrlSuffix(gcc/HPPA-Options.html#index-msoft-mult)
+
+mspace-regs
+UrlSuffix(gcc/HPPA-Options.html#index-mspace-regs)
+
diff --git a/gcc/config/pa/pa64-hpux.opt.urls b/gcc/config/pa/pa64-hpux.opt.urls
new file mode 100644
index 000000000000..9ebf02759520
--- /dev/null
+++ b/gcc/config/pa/pa64-hpux.opt.urls
@@ -0,0 +1,8 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/pa/pa64-hpux.opt and generated HTML
+
+mgnu-ld
+UrlSuffix(gcc/HPPA-Options.html#index-mgnu-ld)
+
+mhp-ld
+UrlSuffix(gcc/HPPA-Options.html#index-mhp-ld)
+
diff --git a/gcc/config/pdp11/pdp11.opt.urls b/gcc/config/pdp11/pdp11.opt.urls
new file mode 100644
index 000000000000..f0544ca84f69
--- /dev/null
+++ b/gcc/config/pdp11/pdp11.opt.urls
@@ -0,0 +1,41 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/pdp11/pdp11.opt and generated HTML
+
+m10
+UrlSuffix(gcc/PDP-11-Options.html#index-m10)
+
+m40
+UrlSuffix(gcc/PDP-11-Options.html#index-m40)
+
+m45
+UrlSuffix(gcc/PDP-11-Options.html#index-m45)
+
+mac0
+UrlSuffix(gcc/PDP-11-Options.html#index-mac0)
+
+mdec-asm
+UrlSuffix(gcc/PDP-11-Options.html#index-mdec-asm)
+
+mgnu-asm
+UrlSuffix(gcc/PDP-11-Options.html#index-mgnu-asm)
+
+mfpu
+UrlSuffix(gcc/PDP-11-Options.html#index-mfpu-3)
+
+mint16
+UrlSuffix(gcc/PDP-11-Options.html#index-mint16)
+
+mint32
+UrlSuffix(gcc/PDP-11-Options.html#index-mint32-1)
+
+msoft-float
+UrlSuffix(gcc/PDP-11-Options.html#index-msoft-float-10)
+
+msplit
+UrlSuffix(gcc/PDP-11-Options.html#index-msplit)
+
+munix-asm
+UrlSuffix(gcc/PDP-11-Options.html#index-munix-asm)
+
+mlra
+UrlSuffix(gcc/PDP-11-Options.html#index-mlra-2)
+
diff --git a/gcc/config/pru/pru.opt.urls b/gcc/config/pru/pru.opt.urls
new file mode 100644
index 000000000000..373b02d5aedc
--- /dev/null
+++ b/gcc/config/pru/pru.opt.urls
@@ -0,0 +1,17 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/pru/pru.opt and generated HTML
+
+minrt
+UrlSuffix(gcc/PRU-Options.html#index-minrt-1)
+
+mmcu=
+UrlSuffix(gcc/PRU-Options.html#index-mmcu-2)
+
+mno-relax
+UrlSuffix(gcc/PRU-Options.html#index-mno-relax)
+
+mloop
+UrlSuffix(gcc/PRU-Options.html#index-mloop)
+
+mabi=
+UrlSuffix(gcc/PRU-Options.html#index-mabi-3)
+
diff --git a/gcc/config/riscv/riscv.opt.urls b/gcc/config/riscv/riscv.opt.urls
new file mode 100644
index 000000000000..d9bb8c594e01
--- /dev/null
+++ b/gcc/config/riscv/riscv.opt.urls
@@ -0,0 +1,88 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/riscv/riscv.opt and generated HTML
+
+mbig-endian
+UrlSuffix(gcc/RISC-V-Options.html#index-mbig-endian-10)
+
+mlittle-endian
+UrlSuffix(gcc/RISC-V-Options.html#index-mlittle-endian-10)
+
+mbranch-cost=
+UrlSuffix(gcc/RISC-V-Options.html#index-mbranch-cost-4)
+
+; skipping 'mplt' due to finding no URLs
+
+mabi=
+UrlSuffix(gcc/RISC-V-Options.html#index-mabi-4)
+
+mpreferred-stack-boundary=
+UrlSuffix(gcc/RISC-V-Options.html#index-mpreferred-stack-boundary)
+
+mfdiv
+UrlSuffix(gcc/RISC-V-Options.html#index-mfdiv)
+
+mdiv
+UrlSuffix(gcc/RISC-V-Options.html#index-mdiv-3)
+
+march=
+UrlSuffix(gcc/RISC-V-Options.html#index-march-14)
+
+mtune=
+UrlSuffix(gcc/RISC-V-Options.html#index-mtune-12)
+
+mcpu=
+UrlSuffix(gcc/RISC-V-Options.html#index-mcpu-8)
+
+msmall-data-limit=
+UrlSuffix(gcc/RISC-V-Options.html#index-msmall-data-limit-1)
+
+msave-restore
+UrlSuffix(gcc/RISC-V-Options.html#index-msave-restore)
+
+mshorten-memrefs
+UrlSuffix(gcc/RISC-V-Options.html#index-mshorten-memrefs)
+
+; skipping 'mcmodel=' due to finding no URLs
+
+mstrict-align
+UrlSuffix(gcc/RISC-V-Options.html#index-mstrict-align-3)
+
+; skipping 'mexplicit-relocs' due to finding no URLs
+
+mrelax
+UrlSuffix(gcc/RISC-V-Options.html#index-mrelax-5)
+
+mcsr-check
+UrlSuffix(gcc/RISC-V-Options.html#index-mcsr-check)
+
+; skipping 'momit-leaf-frame-pointer' due to finding no URLs
+
+mriscv-attribute
+UrlSuffix(gcc/RISC-V-Options.html#index-mriscv-attribute)
+
+malign-data=
+UrlSuffix(gcc/RISC-V-Options.html#index-malign-data)
+
+mstack-protector-guard=
+UrlSuffix(gcc/RISC-V-Options.html#index-mstack-protector-guard-2)
+
+mstack-protector-guard-reg=
+UrlSuffix(gcc/RISC-V-Options.html#index-mstack-protector-guard-reg-1)
+
+mstack-protector-guard-offset=
+UrlSuffix(gcc/RISC-V-Options.html#index-mstack-protector-guard-offset-2)
+
+misa-spec=
+UrlSuffix(gcc/RISC-V-Options.html#index-misa-spec)
+
+minline-atomics
+UrlSuffix(gcc/RISC-V-Options.html#index-minline-atomics)
+
+minline-strcmp
+UrlSuffix(gcc/RISC-V-Options.html#index-minline-strcmp)
+
+minline-strncmp
+UrlSuffix(gcc/RISC-V-Options.html#index-minline-strncmp)
+
+minline-strlen
+UrlSuffix(gcc/RISC-V-Options.html#index-minline-strlen)
+
diff --git a/gcc/config/rl78/rl78.opt.urls b/gcc/config/rl78/rl78.opt.urls
new file mode 100644
index 000000000000..08850dda12cf
--- /dev/null
+++ b/gcc/config/rl78/rl78.opt.urls
@@ -0,0 +1,31 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/rl78/rl78.opt and generated HTML
+
+msim
+UrlSuffix(gcc/RL78-Options.html#index-msim-6)
+
+mmul=
+UrlSuffix(gcc/RL78-Options.html#index-mmul)
+
+mallregs
+UrlSuffix(gcc/RL78-Options.html#index-mallregs)
+
+; skipping 'mrelax' due to finding no URLs
+
+mcpu=
+UrlSuffix(gcc/RL78-Options.html#index-mcpu-9)
+
+mg10
+UrlSuffix(gcc/RL78-Options.html#index-mg10)
+
+mg13
+UrlSuffix(gcc/RL78-Options.html#index-mg13)
+
+mg14
+UrlSuffix(gcc/RL78-Options.html#index-mg14)
+
+mrl78
+UrlSuffix(gcc/RL78-Options.html#index-mrl78)
+
+msave-mduc-in-interrupts
+UrlSuffix(gcc/RL78-Options.html#index-msave-mduc-in-interrupts)
+
diff --git a/gcc/config/rpath.opt.urls b/gcc/config/rpath.opt.urls
new file mode 100644
index 000000000000..249dfdfb762d
--- /dev/null
+++ b/gcc/config/rpath.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/rpath.opt and generated HTML
+
diff --git a/gcc/config/rs6000/476.opt.urls b/gcc/config/rs6000/476.opt.urls
new file mode 100644
index 000000000000..cecf72200a51
--- /dev/null
+++ b/gcc/config/rs6000/476.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/rs6000/476.opt and generated HTML
+
diff --git a/gcc/config/rs6000/aix64.opt.urls b/gcc/config/rs6000/aix64.opt.urls
new file mode 100644
index 000000000000..e6e890e5add6
--- /dev/null
+++ b/gcc/config/rs6000/aix64.opt.urls
@@ -0,0 +1,23 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/rs6000/aix64.opt and generated HTML
+
+maix64
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-maix64)
+
+maix32
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-maix32)
+
+; skipping 'mcmodel=' due to finding no URLs
+
+mpe
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mpe)
+
+; skipping 'pthread' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-pthread-1'
+;   duplicate: 'gcc/Preprocessor-Options.html#index-pthread'
+
+m64
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-m64-1)
+
+m32
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-m32)
+
diff --git a/gcc/config/rs6000/darwin.opt.urls b/gcc/config/rs6000/darwin.opt.urls
new file mode 100644
index 000000000000..3b7fa1a80f80
--- /dev/null
+++ b/gcc/config/rs6000/darwin.opt.urls
@@ -0,0 +1,14 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/rs6000/darwin.opt and generated HTML
+
+ffix-and-continue
+UrlSuffix(gcc/Darwin-Options.html#index-ffix-and-continue)
+
+findirect-data
+UrlSuffix(gcc/Darwin-Options.html#index-findirect-data)
+
+m64
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-m64-1)
+
+m32
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-m32)
+
diff --git a/gcc/config/rs6000/linux64.opt.urls b/gcc/config/rs6000/linux64.opt.urls
new file mode 100644
index 000000000000..3ebc908d8bec
--- /dev/null
+++ b/gcc/config/rs6000/linux64.opt.urls
@@ -0,0 +1,4 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/rs6000/linux64.opt and generated HTML
+
+; skipping 'mcmodel=' due to finding no URLs
+
diff --git a/gcc/config/rs6000/rs6000-tables.opt.urls b/gcc/config/rs6000/rs6000-tables.opt.urls
new file mode 100644
index 000000000000..a44ce0d7aaa3
--- /dev/null
+++ b/gcc/config/rs6000/rs6000-tables.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/rs6000/rs6000-tables.opt and generated HTML
+
diff --git a/gcc/config/rs6000/rs6000.opt.urls b/gcc/config/rs6000/rs6000.opt.urls
new file mode 100644
index 000000000000..20b901a3a71d
--- /dev/null
+++ b/gcc/config/rs6000/rs6000.opt.urls
@@ -0,0 +1,214 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/rs6000/rs6000.opt and generated HTML
+
+mpowerpc64
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mpowerpc64)
+
+mpowerpc-gpopt
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mpowerpc-gpopt)
+
+mpowerpc-gfxopt
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mpowerpc-gfxopt)
+
+mmfcrf
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mmfcrf)
+
+mpopcntb
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mpopcntb)
+
+mfprnd
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mfprnd)
+
+mcmpb
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mcmpb)
+
+maltivec
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-maltivec)
+
+mhard-dfp
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mhard-dfp)
+
+mmulhw
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mmulhw)
+
+mdlmzb
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mdlmzb)
+
+mmultiple
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mmultiple)
+
+msoft-float
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-msoft-float-11)
+
+mhard-float
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mhard-float-6)
+
+mpopcntd
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mpopcntd)
+
+mfriz
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mfriz)
+
+mveclibabi=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mveclibabi)
+
+mvsx
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mvsx)
+
+mno-update
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-update)
+
+mupdate
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mupdate)
+
+msingle-pic-base
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-msingle-pic-base-1)
+
+mavoid-indexed-addresses
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mavoid-indexed-addresses)
+
+; skipping 'msched-prolog' due to finding no URLs
+
+maix-struct-return
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-maix-struct-return)
+
+msvr4-struct-return
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-msvr4-struct-return)
+
+mxl-compat
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mxl-compat)
+
+mrecip
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mrecip)
+
+mrecip=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mrecip)
+
+mrecip-precision
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mrecip-precision)
+
+mno-fp-in-toc
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-fp-in-toc)
+
+mno-sum-in-toc
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-sum-in-toc)
+
+mminimal-toc
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mminimal-toc)
+
+mfull-toc
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mfull-toc)
+
+mvrsave
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mvrsave)
+
+mblock-move-inline-limit=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mblock-move-inline-limit)
+
+mblock-compare-inline-limit=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mblock-compare-inline-limit)
+
+mblock-compare-inline-loop-limit=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mblock-compare-inline-loop-limit)
+
+mstring-compare-inline-limit=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mstring-compare-inline-limit)
+
+misel
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-misel)
+
+; skipping 'mdebug=' due to finding no URLs
+
+mabi=elfv1
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mabi_003delfv1)
+
+mabi=elfv2
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mabi_003delfv2)
+
+mabi=ieeelongdouble
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mabi_003dieeelongdouble)
+
+mabi=ibmlongdouble
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mabi_003dibmlongdouble)
+
+mcpu=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mcpu-10)
+
+mtune=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mtune-13)
+
+mtraceback=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mtraceback)
+
+mlongcall
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mlongcall)
+
+; skipping 'mlra' due to finding no URLs
+
+msched-costly-dep=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-msched-costly-dep)
+
+minsert-sched-nops=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-minsert-sched-nops)
+
+mprioritize-restricted-insns=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mprioritize-restricted-insns)
+
+mpointers-to-nested-functions
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mpointers-to-nested-functions)
+
+msave-toc-indirect
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-msave-toc-indirect)
+
+mpower8-fusion
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mpower8-fusion)
+
+mpower8-vector
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mpower8-vector)
+
+mcrypto
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mcrypto)
+
+mhtm
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mhtm)
+
+mquad-memory
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mquad-memory)
+
+mquad-memory-atomic
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mquad-memory-atomic)
+
+mcompat-align-parm
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mcompat-align-parm)
+
+; skipping 'munroll-only-small-loops' due to finding no URLs
+
+mfloat128
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mfloat128)
+
+mfloat128-hardware
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mfloat128-hardware)
+
+mstack-protector-guard=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mstack-protector-guard-3)
+
+mstack-protector-guard-reg=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mstack-protector-guard-reg-2)
+
+mstack-protector-guard-offset=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mstack-protector-guard-offset-3)
+
+mprefixed
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mprefixed)
+
+mpcrel
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mpcrel-1)
+
+mmma
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mmma)
+
+mrop-protect
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mrop-protect)
+
+mprivileged
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mprivileged)
+
diff --git a/gcc/config/rs6000/sysv4.opt.urls b/gcc/config/rs6000/sysv4.opt.urls
new file mode 100644
index 000000000000..7a82b9af59a6
--- /dev/null
+++ b/gcc/config/rs6000/sysv4.opt.urls
@@ -0,0 +1,87 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/rs6000/sysv4.opt and generated HTML
+
+msdata=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-msdata-2)
+
+mreadonly-in-sdata
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mreadonly-in-sdata)
+
+; skipping 'mtls-size=' due to finding no URLs
+
+mbit-align
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mbit-align)
+
+mstrict-align
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mstrict-align-4)
+
+mrelocatable
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mrelocatable)
+
+mrelocatable-lib
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mrelocatable-lib)
+
+mlittle-endian
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mlittle-endian-11)
+
+mlittle
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mlittle)
+
+mbig-endian
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mbig-endian-11)
+
+mbig
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mbig)
+
+mno-toc
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-toc)
+
+mtoc
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mtoc)
+
+mprototype
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mprototype)
+
+meabi
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-meabi)
+
+mregnames
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mregnames)
+
+msdata
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-msdata-2)
+
+msim
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-msim-7)
+
+mads
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mads)
+
+myellowknife
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-myellowknife)
+
+mmvme
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mmvme)
+
+memb
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-memb)
+
+m64
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-m64-1)
+
+m32
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-m32)
+
+; skipping 'mnewlib' due to finding no URLs
+
+msecure-plt
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-msecure-plt)
+
+mbss-plt
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mbss-plt)
+
+mpltseq
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mpltseq)
+
+mgnu-attribute
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mgnu-attribute)
+
diff --git a/gcc/config/rtems.opt.urls b/gcc/config/rtems.opt.urls
new file mode 100644
index 000000000000..9441021010fa
--- /dev/null
+++ b/gcc/config/rtems.opt.urls
@@ -0,0 +1,6 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/rtems.opt and generated HTML
+
+; skipping 'pthread' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-pthread-1'
+;   duplicate: 'gcc/Preprocessor-Options.html#index-pthread'
+
diff --git a/gcc/config/rx/elf.opt.urls b/gcc/config/rx/elf.opt.urls
new file mode 100644
index 000000000000..c43973a9d490
--- /dev/null
+++ b/gcc/config/rx/elf.opt.urls
@@ -0,0 +1,14 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/rx/elf.opt and generated HTML
+
+msim
+UrlSuffix(gcc/RX-Options.html#index-msim-8)
+
+mas100-syntax
+UrlSuffix(gcc/RX-Options.html#index-mas100-syntax)
+
+mint-register=
+UrlSuffix(gcc/RX-Options.html#index-mint-register)
+
+msave-acc-in-interrupts
+UrlSuffix(gcc/RX-Options.html#index-msave-acc-in-interrupts)
+
diff --git a/gcc/config/rx/rx.opt.urls b/gcc/config/rx/rx.opt.urls
new file mode 100644
index 000000000000..e0cbdec0582d
--- /dev/null
+++ b/gcc/config/rx/rx.opt.urls
@@ -0,0 +1,54 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/rx/rx.opt and generated HTML
+
+m64bit-doubles
+UrlSuffix(gcc/RX-Options.html#index-m64bit-doubles-1)
+
+m32bit-doubles
+UrlSuffix(gcc/RX-Options.html#index-m32bit-doubles-1)
+
+nofpu
+UrlSuffix(gcc/RX-Options.html#index-nofpu)
+
+fpu
+UrlSuffix(gcc/RX-Options.html#index-fpu)
+
+mcpu=
+UrlSuffix(gcc/RX-Options.html#index-mcpu-11)
+
+mbig-endian-data
+UrlSuffix(gcc/RX-Options.html#index-mbig-endian-data)
+
+mlittle-endian-data
+UrlSuffix(gcc/RX-Options.html#index-mlittle-endian-data)
+
+msmall-data-limit=
+UrlSuffix(gcc/RX-Options.html#index-msmall-data-limit-2)
+
+mrelax
+UrlSuffix(gcc/RX-Options.html#index-mrelax-6)
+
+mmax-constant-size=
+UrlSuffix(gcc/RX-Options.html#index-mmax-constant-size)
+
+mint-register=
+UrlSuffix(gcc/RX-Options.html#index-mint-register)
+
+msave-acc-in-interrupts
+UrlSuffix(gcc/RX-Options.html#index-msave-acc-in-interrupts)
+
+mpid
+UrlSuffix(gcc/RX-Options.html#index-mpid)
+
+mwarn-multiple-fast-interrupts
+UrlSuffix(gcc/RX-Options.html#index-mwarn-multiple-fast-interrupts)
+
+; skipping 'mgcc-abi' due to finding no URLs
+
+; skipping 'mlra' due to finding no URLs
+
+mallow-string-insns
+UrlSuffix(gcc/RX-Options.html#index-mallow-string-insns)
+
+mjsr
+UrlSuffix(gcc/RX-Options.html#index-mjsr)
+
diff --git a/gcc/config/s390/s390.opt.urls b/gcc/config/s390/s390.opt.urls
new file mode 100644
index 000000000000..88d3651b1c39
--- /dev/null
+++ b/gcc/config/s390/s390.opt.urls
@@ -0,0 +1,92 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/s390/s390.opt and generated HTML
+
+m31
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-m31)
+
+m64
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-m64-2)
+
+march=
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-march-15)
+
+mbackchain
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mbackchain)
+
+mdebug
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mdebug-1)
+
+mesa
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mesa)
+
+mhard-dfp
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mhard-dfp-1)
+
+mhard-float
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mhard-float-7)
+
+mhotpatch=
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mhotpatch)
+
+mlong-double-128
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mlong-double-128)
+
+mlong-double-64
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mlong-double-64)
+
+mhtm
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mhtm-1)
+
+mvx
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mvx)
+
+mpacked-stack
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mpacked-stack)
+
+msmall-exec
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-msmall-exec)
+
+msoft-float
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-msoft-float-12)
+
+mstack-guard=
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mstack-guard)
+
+mstack-size=
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mstack-size-2)
+
+mtune=
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mtune-14)
+
+mmvcle
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mmvcle)
+
+mzvector
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mzvector)
+
+mwarn-dynamicstack
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mwarn-dynamicstack)
+
+mwarn-framesize=
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mwarn-framesize)
+
+mzarch
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mzarch)
+
+; skipping 'mbranch-cost=' due to finding no URLs
+
+; skipping 'mlra' due to finding no URLs
+
+; skipping 'mpic-data-is-text-relative' due to finding no URLs
+
+; skipping 'mindirect-branch=' due to finding no URLs
+
+; skipping 'mfunction-return=' due to finding no URLs
+
+; skipping 'mfentry' due to finding no URLs
+
+; skipping 'mrecord-mcount' due to finding no URLs
+
+; skipping 'mnop-mcount' due to finding no URLs
+
+; skipping 'munroll-only-small-loops' due to finding no URLs
+
diff --git a/gcc/config/s390/tpf.opt.urls b/gcc/config/s390/tpf.opt.urls
new file mode 100644
index 000000000000..8322d7eaa001
--- /dev/null
+++ b/gcc/config/s390/tpf.opt.urls
@@ -0,0 +1,8 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/s390/tpf.opt and generated HTML
+
+mtpf-trace
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mtpf-trace)
+
+mtpf-trace-skip
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mtpf-trace-skip)
+
diff --git a/gcc/config/sh/sh.opt.urls b/gcc/config/sh/sh.opt.urls
new file mode 100644
index 000000000000..218ddb488212
--- /dev/null
+++ b/gcc/config/sh/sh.opt.urls
@@ -0,0 +1,174 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/sh/sh.opt and generated HTML
+
+m1
+UrlSuffix(gcc/SH-Options.html#index-m1)
+
+m2
+UrlSuffix(gcc/SH-Options.html#index-m2)
+
+m2a
+UrlSuffix(gcc/SH-Options.html#index-m2a)
+
+m2a-nofpu
+UrlSuffix(gcc/SH-Options.html#index-m2a-nofpu)
+
+m2a-single
+UrlSuffix(gcc/SH-Options.html#index-m2a-single)
+
+m2a-single-only
+UrlSuffix(gcc/SH-Options.html#index-m2a-single-only)
+
+m3
+UrlSuffix(gcc/SH-Options.html#index-m3)
+
+m3e
+UrlSuffix(gcc/SH-Options.html#index-m3e)
+
+m4
+UrlSuffix(gcc/SH-Options.html#index-m4)
+
+m4-100
+UrlSuffix(gcc/SH-Options.html#index-m4-100)
+
+m4-200
+UrlSuffix(gcc/SH-Options.html#index-m4-200)
+
+m4-300
+UrlSuffix(gcc/SH-Options.html#index-m4-300)
+
+m4-nofpu
+UrlSuffix(gcc/SH-Options.html#index-m4-nofpu)
+
+m4-100-nofpu
+UrlSuffix(gcc/SH-Options.html#index-m4-100-nofpu)
+
+m4-200-nofpu
+UrlSuffix(gcc/SH-Options.html#index-m4-200-nofpu)
+
+m4-300-nofpu
+UrlSuffix(gcc/SH-Options.html#index-m4-300-nofpu)
+
+m4-340
+UrlSuffix(gcc/SH-Options.html#index-m4-340)
+
+m4-500
+UrlSuffix(gcc/SH-Options.html#index-m4-500)
+
+m4-single
+UrlSuffix(gcc/SH-Options.html#index-m4-single)
+
+m4-100-single
+UrlSuffix(gcc/SH-Options.html#index-m4-100-single)
+
+m4-200-single
+UrlSuffix(gcc/SH-Options.html#index-m4-200-single)
+
+m4-300-single
+UrlSuffix(gcc/SH-Options.html#index-m4-300-single)
+
+m4-single-only
+UrlSuffix(gcc/SH-Options.html#index-m4-single-only)
+
+m4-100-single-only
+UrlSuffix(gcc/SH-Options.html#index-m4-100-single-only)
+
+m4-200-single-only
+UrlSuffix(gcc/SH-Options.html#index-m4-200-single-only)
+
+m4-300-single-only
+UrlSuffix(gcc/SH-Options.html#index-m4-300-single-only)
+
+m4a
+UrlSuffix(gcc/SH-Options.html#index-m4a)
+
+m4a-nofpu
+UrlSuffix(gcc/SH-Options.html#index-m4a-nofpu)
+
+m4a-single
+UrlSuffix(gcc/SH-Options.html#index-m4a-single)
+
+m4a-single-only
+UrlSuffix(gcc/SH-Options.html#index-m4a-single-only)
+
+m4al
+UrlSuffix(gcc/SH-Options.html#index-m4al)
+
+maccumulate-outgoing-args
+UrlSuffix(gcc/SH-Options.html#index-maccumulate-outgoing-args)
+
+mb
+UrlSuffix(gcc/SH-Options.html#index-mb)
+
+mbigtable
+UrlSuffix(gcc/SH-Options.html#index-mbigtable)
+
+mbitops
+UrlSuffix(gcc/SH-Options.html#index-mbitops)
+
+; skipping 'mbranch-cost=' due to finding no URLs
+
+mzdcbranch
+UrlSuffix(gcc/SH-Options.html#index-mzdcbranch)
+
+mcbranch-force-delay-slot
+UrlSuffix(gcc/SH-Options.html#index-mcbranch-force-delay-slot)
+
+mdalign
+UrlSuffix(gcc/SH-Options.html#index-mdalign)
+
+; skipping 'mdiv=' due to finding no URLs
+
+; skipping 'mfdpic' due to finding no URLs
+
+mfmovd
+UrlSuffix(gcc/SH-Options.html#index-mfmovd)
+
+mfixed-range=
+UrlSuffix(gcc/SH-Options.html#index-mfixed-range-2)
+
+mieee
+UrlSuffix(gcc/SH-Options.html#index-mieee-1)
+
+minline-ic_invalidate
+UrlSuffix(gcc/SH-Options.html#index-minline-ic_005finvalidate)
+
+misize
+UrlSuffix(gcc/SH-Options.html#index-misize-1)
+
+ml
+UrlSuffix(gcc/SH-Options.html#index-ml)
+
+mnomacsave
+UrlSuffix(gcc/SH-Options.html#index-mnomacsave)
+
+mpadstruct
+UrlSuffix(gcc/SH-Options.html#index-mpadstruct)
+
+mprefergot
+UrlSuffix(gcc/SH-Options.html#index-mprefergot)
+
+mrelax
+UrlSuffix(gcc/SH-Options.html#index-mrelax-7)
+
+mrenesas
+UrlSuffix(gcc/SH-Options.html#index-mrenesas)
+
+mtas
+UrlSuffix(gcc/SH-Options.html#index-mtas)
+
+; skipping 'multcost=' due to finding no URLs
+
+musermode
+UrlSuffix(gcc/SH-Options.html#index-musermode)
+
+mpretend-cmove
+UrlSuffix(gcc/SH-Options.html#index-mpretend-cmove)
+
+mfsca
+UrlSuffix(gcc/SH-Options.html#index-mfsca)
+
+mfsrra
+UrlSuffix(gcc/SH-Options.html#index-mfsrra)
+
+; skipping 'mlra' due to finding no URLs
+
diff --git a/gcc/config/sh/superh.opt.urls b/gcc/config/sh/superh.opt.urls
new file mode 100644
index 000000000000..66af349bffc6
--- /dev/null
+++ b/gcc/config/sh/superh.opt.urls
@@ -0,0 +1,4 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/sh/superh.opt and generated HTML
+
+; skipping 'mboard=' due to finding no URLs
+
diff --git a/gcc/config/sol2.opt.urls b/gcc/config/sol2.opt.urls
new file mode 100644
index 000000000000..1c40d1845c98
--- /dev/null
+++ b/gcc/config/sol2.opt.urls
@@ -0,0 +1,21 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/sol2.opt and generated HTML
+
+G
+UrlSuffix(gcc/System-V-Options.html#index-G-5)
+
+mclear-hwcap
+UrlSuffix(gcc/Solaris-2-Options.html#index-mclear-hwcap)
+
+mimpure-text
+UrlSuffix(gcc/Solaris-2-Options.html#index-mimpure-text)
+
+; skipping 'pthread' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-pthread-1'
+;   duplicate: 'gcc/Preprocessor-Options.html#index-pthread'
+
+pthreads
+UrlSuffix(gcc/Solaris-2-Options.html#index-pthreads)
+
+rdynamic
+UrlSuffix(gcc/Link-Options.html#index-rdynamic)
+
diff --git a/gcc/config/sparc/long-double-switch.opt.urls b/gcc/config/sparc/long-double-switch.opt.urls
new file mode 100644
index 000000000000..1674d826382e
--- /dev/null
+++ b/gcc/config/sparc/long-double-switch.opt.urls
@@ -0,0 +1,6 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/sparc/long-double-switch.opt and generated HTML
+
+; skipping 'mlong-double-128' due to finding no URLs
+
+; skipping 'mlong-double-64' due to finding no URLs
+
diff --git a/gcc/config/sparc/sparc.opt.urls b/gcc/config/sparc/sparc.opt.urls
new file mode 100644
index 000000000000..14fb52c06462
--- /dev/null
+++ b/gcc/config/sparc/sparc.opt.urls
@@ -0,0 +1,108 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/sparc/sparc.opt and generated HTML
+
+mfpu
+UrlSuffix(gcc/SPARC-Options.html#index-mfpu-4)
+
+mhard-float
+UrlSuffix(gcc/SPARC-Options.html#index-mhard-float-8)
+
+msoft-float
+UrlSuffix(gcc/SPARC-Options.html#index-msoft-float-13)
+
+mflat
+UrlSuffix(gcc/SPARC-Options.html#index-mflat)
+
+munaligned-doubles
+UrlSuffix(gcc/SPARC-Options.html#index-munaligned-doubles)
+
+mapp-regs
+UrlSuffix(gcc/SPARC-Options.html#index-mapp-regs)
+
+mhard-quad-float
+UrlSuffix(gcc/SPARC-Options.html#index-mhard-quad-float)
+
+msoft-quad-float
+UrlSuffix(gcc/SPARC-Options.html#index-msoft-quad-float)
+
+mlra
+UrlSuffix(gcc/SPARC-Options.html#index-mlra-3)
+
+mv8plus
+UrlSuffix(gcc/SPARC-Options.html#index-mv8plus)
+
+mvis
+UrlSuffix(gcc/SPARC-Options.html#index-mvis)
+
+mvis2
+UrlSuffix(gcc/SPARC-Options.html#index-mvis2)
+
+mvis3
+UrlSuffix(gcc/SPARC-Options.html#index-mvis3)
+
+mvis4
+UrlSuffix(gcc/SPARC-Options.html#index-mvis4)
+
+mvis4b
+UrlSuffix(gcc/SPARC-Options.html#index-mvis4b)
+
+mcbcond
+UrlSuffix(gcc/SPARC-Options.html#index-mcbcond)
+
+mfmaf
+UrlSuffix(gcc/SPARC-Options.html#index-mfmaf)
+
+mfsmuld
+UrlSuffix(gcc/SPARC-Options.html#index-mfsmuld)
+
+mpopc
+UrlSuffix(gcc/SPARC-Options.html#index-mpopc)
+
+msubxc
+UrlSuffix(gcc/SPARC-Options.html#index-msubxc)
+
+m64
+UrlSuffix(gcc/SPARC-Options.html#index-m64-3)
+
+m32
+UrlSuffix(gcc/SPARC-Options.html#index-m32-1)
+
+mstack-bias
+UrlSuffix(gcc/SPARC-Options.html#index-mstack-bias)
+
+mfaster-structs
+UrlSuffix(gcc/SPARC-Options.html#index-mfaster-structs)
+
+; skipping 'mrelax' due to finding no URLs
+
+muser-mode
+UrlSuffix(gcc/SPARC-Options.html#index-muser-mode)
+
+mcpu=
+UrlSuffix(gcc/SPARC-Options.html#index-mcpu-12)
+
+mtune=
+UrlSuffix(gcc/SPARC-Options.html#index-mtune-15)
+
+mcmodel=
+UrlSuffix(gcc/SPARC-Options.html#index-mcmodel-1)
+
+; skipping 'mdebug=' due to finding no URLs
+
+mstd-struct-return
+UrlSuffix(gcc/SPARC-Options.html#index-mstd-struct-return)
+
+mfix-at697f
+UrlSuffix(gcc/SPARC-Options.html#index-mfix-at697f)
+
+mfix-ut699
+UrlSuffix(gcc/SPARC-Options.html#index-mfix-ut699)
+
+mfix-ut700
+UrlSuffix(gcc/SPARC-Options.html#index-mfix-ut700)
+
+mfix-gr712rc
+UrlSuffix(gcc/SPARC-Options.html#index-mfix-gr712rc)
+
+mmemory-model=
+UrlSuffix(gcc/SPARC-Options.html#index-mmemory-model)
+
diff --git a/gcc/config/stormy16/stormy16.opt.urls b/gcc/config/stormy16/stormy16.opt.urls
new file mode 100644
index 000000000000..6f47d4c5c180
--- /dev/null
+++ b/gcc/config/stormy16/stormy16.opt.urls
@@ -0,0 +1,5 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/stormy16/stormy16.opt and generated HTML
+
+msim
+UrlSuffix(gcc/Xstormy16-Options.html#index-msim-10)
+
diff --git a/gcc/config/v850/v850.opt.urls b/gcc/config/v850/v850.opt.urls
new file mode 100644
index 000000000000..1c367122b908
--- /dev/null
+++ b/gcc/config/v850/v850.opt.urls
@@ -0,0 +1,60 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/v850/v850.opt and generated HTML
+
+; skipping 'mapp-regs' due to finding no URLs
+
+; skipping 'mbig-switch' due to finding no URLs
+
+; skipping 'mdebug' due to finding no URLs
+
+; skipping 'mdisable-callt' due to finding no URLs
+
+; skipping 'mep' due to finding no URLs
+
+; skipping 'mghs' due to finding no URLs
+
+; skipping 'mlong-calls' due to finding no URLs
+
+; skipping 'mprolog-function' due to finding no URLs
+
+; skipping 'msda=' due to finding no URLs
+
+; skipping 'mspace' due to finding no URLs
+
+; skipping 'mtda=' due to finding no URLs
+
+; skipping 'mno-strict-align' due to finding no URLs
+
+; skipping 'mv850' due to finding no URLs
+
+; skipping 'mv850e' due to finding no URLs
+
+; skipping 'mv850e1' due to finding no URLs
+
+; skipping 'mv850es' due to finding no URLs
+
+; skipping 'mv850e2' due to finding no URLs
+
+; skipping 'mv850e2v3' due to finding no URLs
+
+; skipping 'mv850e3v5' due to finding no URLs
+
+; skipping 'mv850e2v4' due to finding no URLs
+
+; skipping 'mloop' due to finding no URLs
+
+; skipping 'mzda=' due to finding no URLs
+
+; skipping 'mrelax' due to finding no URLs
+
+; skipping 'mlong-jumps' due to finding no URLs
+
+; skipping 'msoft-float' due to finding no URLs
+
+; skipping 'mhard-float' due to finding no URLs
+
+; skipping 'mrh850-abi' due to finding no URLs
+
+; skipping 'mgcc-abi' due to finding no URLs
+
+; skipping 'm8byte-align' due to finding no URLs
+
diff --git a/gcc/config/vax/elf.opt.urls b/gcc/config/vax/elf.opt.urls
new file mode 100644
index 000000000000..0903513694b9
--- /dev/null
+++ b/gcc/config/vax/elf.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/vax/elf.opt and generated HTML
+
diff --git a/gcc/config/vax/vax.opt.urls b/gcc/config/vax/vax.opt.urls
new file mode 100644
index 000000000000..7d306faf2fb1
--- /dev/null
+++ b/gcc/config/vax/vax.opt.urls
@@ -0,0 +1,10 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/vax/vax.opt and generated HTML
+
+; skipping 'mg' due to finding no URLs
+
+; skipping 'mgnu' due to finding no URLs
+
+; skipping 'munix' due to finding no URLs
+
+; skipping 'mlra' due to finding no URLs
+
diff --git a/gcc/config/visium/visium.opt.urls b/gcc/config/visium/visium.opt.urls
new file mode 100644
index 000000000000..38ba88dfe612
--- /dev/null
+++ b/gcc/config/visium/visium.opt.urls
@@ -0,0 +1,29 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/visium/visium.opt and generated HTML
+
+mdebug
+UrlSuffix(gcc/Visium-Options.html#index-mdebug-2)
+
+msim
+UrlSuffix(gcc/Visium-Options.html#index-msim-9)
+
+mfpu
+UrlSuffix(gcc/Visium-Options.html#index-mfpu-5)
+
+mhard-float
+UrlSuffix(gcc/Visium-Options.html#index-mhard-float-10)
+
+msoft-float
+UrlSuffix(gcc/Visium-Options.html#index-msoft-float-15)
+
+mcpu=
+UrlSuffix(gcc/Visium-Options.html#index-mcpu-13)
+
+mtune=
+UrlSuffix(gcc/Visium-Options.html#index-mtune-16)
+
+msv-mode
+UrlSuffix(gcc/Visium-Options.html#index-msv-mode)
+
+muser-mode
+UrlSuffix(gcc/Visium-Options.html#index-muser-mode-1)
+
diff --git a/gcc/config/vms/vms.opt.urls b/gcc/config/vms/vms.opt.urls
new file mode 100644
index 000000000000..177b281cc774
--- /dev/null
+++ b/gcc/config/vms/vms.opt.urls
@@ -0,0 +1,8 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/vms/vms.opt and generated HTML
+
+mmalloc64
+UrlSuffix(gcc/VMS-Options.html#index-mmalloc64)
+
+mvms-return-codes
+UrlSuffix(gcc/VMS-Options.html#index-mvms-return-codes)
+
diff --git a/gcc/config/vxworks-smp.opt.urls b/gcc/config/vxworks-smp.opt.urls
new file mode 100644
index 000000000000..0a91011000f8
--- /dev/null
+++ b/gcc/config/vxworks-smp.opt.urls
@@ -0,0 +1,5 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/vxworks-smp.opt and generated HTML
+
+msmp
+UrlSuffix(gcc/VxWorks-Options.html#index-msmp)
+
diff --git a/gcc/config/vxworks.opt.urls b/gcc/config/vxworks.opt.urls
new file mode 100644
index 000000000000..52888d0d91de
--- /dev/null
+++ b/gcc/config/vxworks.opt.urls
@@ -0,0 +1,20 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/vxworks.opt and generated HTML
+
+Bdynamic
+UrlSuffix(gcc/VxWorks-Options.html#index-Bdynamic)
+
+Bstatic
+UrlSuffix(gcc/VxWorks-Options.html#index-Bstatic)
+
+Xbind-lazy
+UrlSuffix(gcc/VxWorks-Options.html#index-Xbind-lazy)
+
+Xbind-now
+UrlSuffix(gcc/VxWorks-Options.html#index-Xbind-now)
+
+mrtp
+UrlSuffix(gcc/VxWorks-Options.html#index-mrtp)
+
+non-static
+UrlSuffix(gcc/VxWorks-Options.html#index-non-static)
+
diff --git a/gcc/config/xtensa/elf.opt.urls b/gcc/config/xtensa/elf.opt.urls
new file mode 100644
index 000000000000..6774adadbf7a
--- /dev/null
+++ b/gcc/config/xtensa/elf.opt.urls
@@ -0,0 +1,5 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/xtensa/elf.opt and generated HTML
+
+rdynamic
+UrlSuffix(gcc/Link-Options.html#index-rdynamic)
+
diff --git a/gcc/config/xtensa/uclinux.opt.urls b/gcc/config/xtensa/uclinux.opt.urls
new file mode 100644
index 000000000000..bd69ce56d4c6
--- /dev/null
+++ b/gcc/config/xtensa/uclinux.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/xtensa/uclinux.opt and generated HTML
+
diff --git a/gcc/config/xtensa/xtensa.opt.urls b/gcc/config/xtensa/xtensa.opt.urls
new file mode 100644
index 000000000000..7b23098e77d4
--- /dev/null
+++ b/gcc/config/xtensa/xtensa.opt.urls
@@ -0,0 +1,37 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/xtensa/xtensa.opt and generated HTML
+
+mconst16
+UrlSuffix(gcc/Xtensa-Options.html#index-mconst16)
+
+mforce-no-pic
+UrlSuffix(gcc/Xtensa-Options.html#index-mforce-no-pic)
+
+mlongcalls
+UrlSuffix(gcc/Xtensa-Options.html#index-mlongcalls)
+
+mextra-l32r-costs=
+UrlSuffix(gcc/Xtensa-Options.html#index-mextra-l32r-costs)
+
+; skipping 'mlra' due to finding no URLs
+
+mtarget-align
+UrlSuffix(gcc/Xtensa-Options.html#index-mtarget-align)
+
+mtext-section-literals
+UrlSuffix(gcc/Xtensa-Options.html#index-mtext-section-literals)
+
+mauto-litpools
+UrlSuffix(gcc/Xtensa-Options.html#index-mauto-litpools)
+
+mserialize-volatile
+UrlSuffix(gcc/Xtensa-Options.html#index-mserialize-volatile)
+
+mabi=call0
+UrlSuffix(gcc/Xtensa-Options.html#index-mabi_003dcall0)
+
+mabi=windowed
+UrlSuffix(gcc/Xtensa-Options.html#index-mabi_003dwindowed)
+
+mstrict-align
+UrlSuffix(gcc/Xtensa-Options.html#index-mstrict-align-5)
+
diff --git a/gcc/d/lang.opt.urls b/gcc/d/lang.opt.urls
new file mode 100644
index 000000000000..57c14ecc459a
--- /dev/null
+++ b/gcc/d/lang.opt.urls
@@ -0,0 +1,95 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/d/lang.opt and generated HTML
+
+H
+UrlSuffix(gcc/Preprocessor-Options.html#index-H)
+
+I
+UrlSuffix(gcc/Directory-Options.html#index-I)
+
+M
+UrlSuffix(gcc/Preprocessor-Options.html#index-M)
+
+MD
+UrlSuffix(gcc/Preprocessor-Options.html#index-MD)
+
+MF
+UrlSuffix(gcc/Preprocessor-Options.html#index-MF)
+
+MG
+UrlSuffix(gcc/Preprocessor-Options.html#index-MG)
+
+MM
+UrlSuffix(gcc/Preprocessor-Options.html#index-MM)
+
+MMD
+UrlSuffix(gcc/Preprocessor-Options.html#index-MMD)
+
+MP
+UrlSuffix(gcc/Preprocessor-Options.html#index-MP)
+
+MT
+UrlSuffix(gcc/Preprocessor-Options.html#index-MT)
+
+MQ
+UrlSuffix(gcc/Preprocessor-Options.html#index-MQ)
+
+Waddress
+UrlSuffix(gcc/Warning-Options.html#index-Waddress)
+
+; skipping 'Wall' due to multiple URLs:
+;   duplicate: 'gcc/Standard-Libraries.html#index-Wall-1'
+;   duplicate: 'gcc/Warning-Options.html#index-Wall'
+
+Walloca
+UrlSuffix(gcc/Warning-Options.html#index-Walloca)
+
+Walloca-larger-than=
+UrlSuffix(gcc/Warning-Options.html#index-Walloca-larger-than_003d)
+
+Wbuiltin-declaration-mismatch
+UrlSuffix(gcc/Warning-Options.html#index-Wbuiltin-declaration-mismatch)
+
+Wdeprecated
+UrlSuffix(gcc/Warning-Options.html#index-Wdeprecated)
+
+Werror
+UrlSuffix(gcc/Warning-Options.html#index-Werror)
+
+Wextra
+UrlSuffix(gcc/Warning-Options.html#index-Wextra)
+
+Wunknown-pragmas
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unknown-pragmas)
+
+Wvarargs
+UrlSuffix(gcc/Warning-Options.html#index-Wno-varargs)
+
+; skipping 'fbuiltin' due to multiple URLs:
+;   duplicate: 'gcc/C-Dialect-Options.html#index-fbuiltin'
+;   duplicate: 'gcc/Other-Builtins.html#index-fno-builtin-3'
+;   duplicate: 'gcc/Warning-Options.html#index-fno-builtin-1'
+
+fexceptions
+UrlSuffix(gcc/Code-Gen-Options.html#index-fexceptions)
+
+frtti
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fno-rtti)
+
+imultilib
+UrlSuffix(gcc/Directory-Options.html#index-imultilib)
+
+iprefix
+UrlSuffix(gcc/Directory-Options.html#index-iprefix)
+
+isysroot
+UrlSuffix(gcc/Directory-Options.html#index-isysroot)
+
+isystem
+UrlSuffix(gcc/Directory-Options.html#index-isystem)
+
+nostdinc
+UrlSuffix(gcc/Directory-Options.html#index-nostdinc)
+
+v
+UrlSuffix(gcc/Overall-Options.html#index-v)
+
diff --git a/gcc/fortran/lang.opt.urls b/gcc/fortran/lang.opt.urls
new file mode 100644
index 000000000000..ef02437d1a34
--- /dev/null
+++ b/gcc/fortran/lang.opt.urls
@@ -0,0 +1,153 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/fortran/lang.opt and generated HTML
+
+A
+UrlSuffix(gcc/Preprocessor-Options.html#index-A)
+
+C
+UrlSuffix(gcc/Preprocessor-Options.html#index-C)
+
+CC
+UrlSuffix(gcc/Preprocessor-Options.html#index-CC)
+
+D
+UrlSuffix(gcc/Preprocessor-Options.html#index-D-1)
+
+; skipping 'E' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-E-1'
+;   duplicate: 'gcc/Overall-Options.html#index-E'
+
+H
+UrlSuffix(gcc/Preprocessor-Options.html#index-H)
+
+I
+UrlSuffix(gcc/Directory-Options.html#index-I)
+
+M
+UrlSuffix(gcc/Preprocessor-Options.html#index-M)
+
+MD
+UrlSuffix(gcc/Preprocessor-Options.html#index-MD)
+
+MF
+UrlSuffix(gcc/Preprocessor-Options.html#index-MF)
+
+MG
+UrlSuffix(gcc/Preprocessor-Options.html#index-MG)
+
+MM
+UrlSuffix(gcc/Preprocessor-Options.html#index-MM)
+
+MMD
+UrlSuffix(gcc/Preprocessor-Options.html#index-MMD)
+
+MP
+UrlSuffix(gcc/Preprocessor-Options.html#index-MP)
+
+MT
+UrlSuffix(gcc/Preprocessor-Options.html#index-MT)
+
+MQ
+UrlSuffix(gcc/Preprocessor-Options.html#index-MQ)
+
+P
+UrlSuffix(gcc/Preprocessor-Options.html#index-P)
+
+U
+UrlSuffix(gcc/Preprocessor-Options.html#index-U)
+
+; skipping 'Wall' due to multiple URLs:
+;   duplicate: 'gcc/Standard-Libraries.html#index-Wall-1'
+;   duplicate: 'gcc/Warning-Options.html#index-Wall'
+
+Wdate-time
+UrlSuffix(gcc/Warning-Options.html#index-Wdate-time)
+
+Wconversion
+UrlSuffix(gcc/Warning-Options.html#index-Wconversion)
+
+Wextra
+UrlSuffix(gcc/Warning-Options.html#index-Wextra)
+
+Wmaybe-uninitialized
+UrlSuffix(gcc/Warning-Options.html#index-Wmaybe-uninitialized)
+
+Wmissing-include-dirs
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-include-dirs)
+
+Wopenacc-parallelism
+UrlSuffix(gcc/Warning-Options.html#index-Wno-openacc-parallelism)
+
+Wopenmp-simd
+UrlSuffix(gcc/Warning-Options.html#index-Wno-openmp-simd)
+
+Wpedantic
+UrlSuffix(gcc/Warning-Options.html#index-Wno-pedantic)
+
+Wreturn-type
+UrlSuffix(gcc/Warning-Options.html#index-Wno-return-type)
+
+Wuninitialized
+UrlSuffix(gcc/Warning-Options.html#index-Wno-uninitialized)
+
+Wunused
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused)
+
+; skipping 'nocpp' due to finding no URLs
+
+; skipping 'd' due to multiple URLs:
+;   duplicate: 'gcc/Developer-Options.html#index-d-1'
+;   duplicate: 'gcc/Preprocessor-Options.html#index-d'
+
+fopenacc
+UrlSuffix(gcc/C-Dialect-Options.html#index-fopenacc)
+
+fopenacc-dim=
+UrlSuffix(gcc/C-Dialect-Options.html#index-fopenacc-dim)
+
+fopenmp
+UrlSuffix(gcc/C-Dialect-Options.html#index-fopenmp)
+
+fopenmp-simd
+UrlSuffix(gcc/C-Dialect-Options.html#index-fopenmp-simd)
+
+fpreprocessed
+UrlSuffix(gcc/Preprocessor-Options.html#index-fpreprocessed)
+
+; skipping 'fshort-enums' due to multiple URLs:
+;   duplicate: 'gcc/Code-Gen-Options.html#index-fshort-enums'
+;   duplicate: 'gcc/Non-bugs.html#index-fshort-enums-3'
+;   duplicate: 'gcc/Structures-unions-enumerations-and-bit-fields-implementation.html#index-fshort-enums-1'
+
+fworking-directory
+UrlSuffix(gcc/Preprocessor-Options.html#index-fno-working-directory)
+
+idirafter
+UrlSuffix(gcc/Directory-Options.html#index-idirafter)
+
+imultilib
+UrlSuffix(gcc/Directory-Options.html#index-imultilib)
+
+iprefix
+UrlSuffix(gcc/Directory-Options.html#index-iprefix)
+
+iquote
+UrlSuffix(gcc/Directory-Options.html#index-iquote)
+
+isysroot
+UrlSuffix(gcc/Directory-Options.html#index-isysroot)
+
+isystem
+UrlSuffix(gcc/Directory-Options.html#index-isystem)
+
+nostdinc
+UrlSuffix(gcc/Directory-Options.html#index-nostdinc)
+
+o
+UrlSuffix(gcc/Overall-Options.html#index-o)
+
+undef
+UrlSuffix(gcc/Preprocessor-Options.html#index-undef)
+
+v
+UrlSuffix(gcc/Overall-Options.html#index-v)
+
diff --git a/gcc/go/lang.opt.urls b/gcc/go/lang.opt.urls
new file mode 100644
index 000000000000..f09a169c2d36
--- /dev/null
+++ b/gcc/go/lang.opt.urls
@@ -0,0 +1,15 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/go/lang.opt and generated HTML
+
+I
+UrlSuffix(gcc/Directory-Options.html#index-I)
+
+L
+UrlSuffix(gcc/Directory-Options.html#index-L)
+
+; skipping 'Wall' due to multiple URLs:
+;   duplicate: 'gcc/Standard-Libraries.html#index-Wall-1'
+;   duplicate: 'gcc/Warning-Options.html#index-Wall'
+
+o
+UrlSuffix(gcc/Overall-Options.html#index-o)
+
diff --git a/gcc/lto/lang.opt.urls b/gcc/lto/lang.opt.urls
new file mode 100644
index 000000000000..f7509c8211ec
--- /dev/null
+++ b/gcc/lto/lang.opt.urls
@@ -0,0 +1,8 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/lto/lang.opt and generated HTML
+
+flinker-output=
+UrlSuffix(gcc/Link-Options.html#index-flinker-output)
+
+help
+UrlSuffix(gcc/Overall-Options.html#index-help)
+
diff --git a/gcc/m2/lang.opt.urls b/gcc/m2/lang.opt.urls
new file mode 100644
index 000000000000..080f40dd9069
--- /dev/null
+++ b/gcc/m2/lang.opt.urls
@@ -0,0 +1,110 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/m2/lang.opt and generated HTML
+
+; skipping 'Wall' due to multiple URLs:
+;   duplicate: 'gcc/Standard-Libraries.html#index-Wall-1'
+;   duplicate: 'gcc/Warning-Options.html#index-Wall'
+
+Wpedantic
+UrlSuffix(gcc/Warning-Options.html#index-Wno-pedantic)
+
+Wreturn-type
+UrlSuffix(gcc/Warning-Options.html#index-Wno-return-type)
+
+Wunused-variable
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-variable)
+
+Wunused-parameter
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-parameter)
+
+B
+UrlSuffix(gcc/Directory-Options.html#index-B)
+
+D
+UrlSuffix(gcc/Preprocessor-Options.html#index-D-1)
+
+; skipping 'E' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-E-1'
+;   duplicate: 'gcc/Overall-Options.html#index-E'
+
+I
+UrlSuffix(gcc/Directory-Options.html#index-I)
+
+L
+UrlSuffix(gcc/Directory-Options.html#index-L)
+
+M
+UrlSuffix(gcc/Preprocessor-Options.html#index-M)
+
+MD
+UrlSuffix(gcc/Preprocessor-Options.html#index-MD)
+
+MF
+UrlSuffix(gcc/Preprocessor-Options.html#index-MF)
+
+MG
+UrlSuffix(gcc/Preprocessor-Options.html#index-MG)
+
+MM
+UrlSuffix(gcc/Preprocessor-Options.html#index-MM)
+
+MMD
+UrlSuffix(gcc/Preprocessor-Options.html#index-MMD)
+
+Mno-modules
+UrlSuffix(gcc/Preprocessor-Options.html#index-Mno-modules)
+
+MP
+UrlSuffix(gcc/Preprocessor-Options.html#index-MP)
+
+MQ
+UrlSuffix(gcc/Preprocessor-Options.html#index-MQ)
+
+MT
+UrlSuffix(gcc/Preprocessor-Options.html#index-MT)
+
+P
+UrlSuffix(gcc/Preprocessor-Options.html#index-P)
+
+; skipping 'ansi' due to multiple URLs:
+;   duplicate: 'gcc/C-Dialect-Options.html#index-ansi-1'
+;   duplicate: 'gcc/Non-bugs.html#index-ansi-3'
+;   duplicate: 'gcc/Other-Builtins.html#index-ansi-2'
+;   duplicate: 'gcc/Standards.html#index-ansi'
+
+; skipping 'c' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-c-1'
+;   duplicate: 'gcc/Overall-Options.html#index-c'
+
+fexceptions
+UrlSuffix(gcc/Code-Gen-Options.html#index-fexceptions)
+
+fpreprocessed
+UrlSuffix(gcc/Preprocessor-Options.html#index-fpreprocessed)
+
+fworking-directory
+UrlSuffix(gcc/Preprocessor-Options.html#index-fno-working-directory)
+
+iprefix
+UrlSuffix(gcc/Directory-Options.html#index-iprefix)
+
+iquote
+UrlSuffix(gcc/Directory-Options.html#index-iquote)
+
+isystem
+UrlSuffix(gcc/Directory-Options.html#index-isystem)
+
+idirafter
+UrlSuffix(gcc/Directory-Options.html#index-idirafter)
+
+imultilib
+UrlSuffix(gcc/Directory-Options.html#index-imultilib)
+
+save-temps
+UrlSuffix(gcc/Developer-Options.html#index-save-temps)
+
+save-temps=
+UrlSuffix(gcc/Developer-Options.html#index-save-temps)
+
+traditional-cpp
+UrlSuffix(gcc/Preprocessor-Options.html#index-traditional-cpp)
+
diff --git a/gcc/params.opt.urls b/gcc/params.opt.urls
new file mode 100644
index 000000000000..e76310c6ac04
--- /dev/null
+++ b/gcc/params.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/params.opt and generated HTML
+
diff --git a/gcc/rust/lang.opt.urls b/gcc/rust/lang.opt.urls
new file mode 100644
index 000000000000..c670a8553b25
--- /dev/null
+++ b/gcc/rust/lang.opt.urls
@@ -0,0 +1,27 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/rust/lang.opt and generated HTML
+
+I
+UrlSuffix(gcc/Directory-Options.html#index-I)
+
+L
+UrlSuffix(gcc/Directory-Options.html#index-L)
+
+; skipping 'Wall' due to multiple URLs:
+;   duplicate: 'gcc/Standard-Libraries.html#index-Wall-1'
+;   duplicate: 'gcc/Warning-Options.html#index-Wall'
+
+Wunused-variable
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-variable)
+
+Wunused-const-variable
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-const-variable)
+
+Wunused-const-variable=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-const-variable)
+
+Wunused-result
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-result)
+
+o
+UrlSuffix(gcc/Overall-Options.html#index-o)
+
-- 
2.26.3


^ permalink raw reply	[flat|nested] 47+ messages in thread

* [PATCH 3/3] diagnostics: use the .opt.urls files to urlify quoted text
  2023-11-10 21:42 [PATCH 0/3] Option handling: add documentation URLs David Malcolm
  2023-11-10 21:42 ` [PATCH 1/3] options: add gcc/regenerate-opt-urls.py David Malcolm
  2023-11-10 21:42 ` [PATCH 2/3] Add generated .opt.urls files David Malcolm
@ 2023-11-10 21:42 ` David Malcolm
  2023-11-14 17:44   ` Arthur Cohen
  2023-11-14  0:12 ` [PATCH 0/3] Option handling: add documentation URLs Joseph Myers
  3 siblings, 1 reply; 47+ messages in thread
From: David Malcolm @ 2023-11-10 21:42 UTC (permalink / raw)
  To: gcc-patches, Joseph Myers; +Cc: David Malcolm

This patch adds machinery for using the .opt.urls files linking
to the documentation of our options in gcc_urlifier.

For every enabled .opt file, the corresponding .opt.urls file
will also be used when constructing the "optionslist" file.
The patch adds a new awk script to process the optionslist file,
options-urls-cc-gen.awk, which generates a options-urls.cc file,
containing a big array of const char * of the form:

const char * const opt_url_suffixes[] =
{
 [...snip...]

 /* [563] (OPT_Wclass_memaccess) = */
    "gcc/C_002b_002b-Dialect-Options.html#index-Wclass-memaccess",
 /* [564] (OPT_Wclobbered) = */
    "gcc/Warning-Options.html#index-Wclobbered",

[...snip...]
};

The patch wires up gcc_urlifier so that for quoted strings beginning
with '-' it will look up the option, and, if found, build a URL
using one of the above suffixes.

For example, given:

  ./xgcc -B. -S t.c -Wctad-maybe-unsupported
  cc1: warning: command-line option ‘-Wctad-maybe-unsupported’ is valid for C++/ObjC++ but not for C

the quoted string -Wctad-maybe-unsupported is automatically URLified in
my terminal to:
	https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Dialect-Options.html#index-Wctad-maybe-unsupported

This approach seems to allow us to get URLs automatically from the
documentation, whilst:
- integrating with the existing .opt mechanisms but keeping
autogenerated material (.opt.urls) separate from human-maintained
files (.opt)
- not adding any build-time requirements (by using awk at build time)
- only requiring Python 3 when regenerating the in-tree opt.urls files,
when the .texi or .opt files change enough to warrant it

gcc/ChangeLog:
	* Makefile.in (ALL_OPT_URL_FILES): New.
	(GCC_OBJS): Add options-urls.o.
	(OBJS): Likewise.
	(OBJS-libcommon): Likewise.
	(s-options): Depend on $(ALL_OPT_URL_FILES), and add this to
	inputs to opt-gather.awk.
	(options-urls.cc): New Makefile target.
	* gcc-urlifier.cc: Include "opts.h" and "options.h".
	(gcc_urlifier::gcc_urlifier): Add lang_mask param.
	(gcc_urlifier::m_lang_mask): New field.
	(doc_urls): Make static.
	(gcc_urlifier::get_url_for_quoted_text): Use label_text.
	(gcc_urlifier::get_url_suffix_for_quoted_text): Use label_text.
	Look for an option by name before trying a binary search in
	doc_urls.
	(gcc_urlifier::get_url_suffix_for_quoted_text): Use label_text.
	(gcc_urlifier::get_url_suffix_for_option): New.
	(make_gcc_urlifier): Add lang_mask param.
	(selftest::gcc_urlifier_cc_tests): Update for above changes.
	Verify that a URL is found for "-fpack-struct".
	* gcc-urlifier.def: Drop options "--version" and "-fpack-struct".
	* gcc-urlifier.h (make_gcc_urlifier): Add lang_mask param.
	* gcc.cc (driver::global_initializations): Pass 0 for lang_mask
	to make_gcc_urlifier.
	* opt-functions.awk (url_suffix): New function.
	* options-urls-cc-gen.awk: New file.
	* opts.cc (get_option_html_page): Remove special-casing for
	analyzer and LTO.
	(get_option_url_suffix): New.
	(get_option_url): Reimplement.
	(selftest::test_get_option_html_page): Rename to...
	(selftest::test_get_option_url_suffix): ...this and update for
	above changes.
	(selftest::opts_cc_tests): Update for renaming.
	* opts.h (opt_url_suffixes): New decl.
	(get_option_url_suffix): New decl.

gcc/testsuite/ChangeLog:
	* lib/gcc-dg.exp: Set TERM to xterm.

gcc/ChangeLog:
	* toplev.cc (general_init): Pass global_dc->m_lang_mask to
	make_gcc_urlifier.
---
 gcc/Makefile.in              |  18 ++++--
 gcc/gcc-urlifier.cc          | 106 ++++++++++++++++++++++++++++-------
 gcc/gcc-urlifier.def         |   2 -
 gcc/gcc-urlifier.h           |   2 +-
 gcc/gcc.cc                   |   2 +-
 gcc/opt-functions.awk        |   7 +++
 gcc/options-urls-cc-gen.awk  |  79 ++++++++++++++++++++++++++
 gcc/opts.cc                  |  75 ++++++++++++++-----------
 gcc/opts.h                   |   4 ++
 gcc/testsuite/lib/gcc-dg.exp |   6 ++
 gcc/toplev.cc                |   2 +-
 11 files changed, 242 insertions(+), 61 deletions(-)
 create mode 100644 gcc/options-urls-cc-gen.awk

diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index 29cec21c8258..ebb59680d69b 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -1270,6 +1270,8 @@ FLAGS_TO_PASS = \
 # All option source files
 ALL_OPT_FILES=$(lang_opt_files) $(extra_opt_files)
 
+ALL_OPT_URL_FILES=$(patsubst %, %.urls, $(ALL_OPT_FILES))
+
 # Target specific, C specific object file
 C_TARGET_OBJS=@c_target_objs@
 
@@ -1286,7 +1288,7 @@ FORTRAN_TARGET_OBJS=@fortran_target_objs@
 RUST_TARGET_OBJS=@rust_target_objs@
 
 # Object files for gcc many-languages driver.
-GCC_OBJS = gcc.o gcc-main.o ggc-none.o gcc-urlifier.o
+GCC_OBJS = gcc.o gcc-main.o ggc-none.o gcc-urlifier.o options-urls.o
 
 c-family-warn = $(STRICT_WARN)
 
@@ -1606,6 +1608,7 @@ OBJS = \
 	optinfo.o \
 	optinfo-emit-json.o \
 	options-save.o \
+	options-urls.o \
 	opts-global.o \
 	ordered-hash-map-tests.o \
 	passes.o \
@@ -1832,7 +1835,8 @@ OBJS-libcommon = diagnostic-spec.o diagnostic.o diagnostic-color.o \
 # compiler and containing target-dependent code.
 OBJS-libcommon-target = $(common_out_object_file) prefix.o \
 	opts.o opts-common.o options.o vec.o hooks.o common/common-targhooks.o \
-	hash-table.o file-find.o spellcheck.o selftest.o opt-suggestions.o
+	hash-table.o file-find.o spellcheck.o selftest.o opt-suggestions.o \
+	options-urls.o
 
 # This lists all host objects for the front ends.
 ALL_HOST_FRONTEND_OBJS = $(foreach v,$(CONFIG_LANGUAGES),$($(v)_OBJS))
@@ -2435,9 +2439,9 @@ s-specs : Makefile
 	$(STAMP) s-specs
 
 optionlist: s-options ; @true
-s-options: $(ALL_OPT_FILES) Makefile $(srcdir)/opt-gather.awk
+s-options: $(ALL_OPT_FILES) $(ALL_OPT_URL_FILES) Makefile $(srcdir)/opt-gather.awk
 	LC_ALL=C ; export LC_ALL ; \
-	$(AWK) -f $(srcdir)/opt-gather.awk $(ALL_OPT_FILES) > tmp-optionlist
+	$(AWK) -f $(srcdir)/opt-gather.awk $(ALL_OPT_FILES) $(ALL_OPT_URL_FILES) > tmp-optionlist
 	$(SHELL) $(srcdir)/../move-if-change tmp-optionlist optionlist
 	$(STAMP) s-options
 
@@ -2453,6 +2457,12 @@ options-save.cc: optionlist $(srcdir)/opt-functions.awk $(srcdir)/opt-read.awk \
 	       -f $(srcdir)/optc-save-gen.awk \
 	       -v header_name="config.h system.h coretypes.h tm.h" < $< > $@
 
+options-urls.cc: optionlist $(srcdir)/opt-functions.awk $(srcdir)/opt-read.awk \
+    $(srcdir)/options-urls-cc-gen.awk
+	$(AWK) -f $(srcdir)/opt-functions.awk -f $(srcdir)/opt-read.awk \
+	       -f $(srcdir)/options-urls-cc-gen.awk \
+	       -v header_name="config.h system.h coretypes.h tm.h" < $< > $@
+
 options.h: s-options-h ; @true
 s-options-h: optionlist $(srcdir)/opt-functions.awk $(srcdir)/opt-read.awk \
     $(srcdir)/opth-gen.awk
diff --git a/gcc/gcc-urlifier.cc b/gcc/gcc-urlifier.cc
index 0dbff9853132..da704bf814ad 100644
--- a/gcc/gcc-urlifier.cc
+++ b/gcc/gcc-urlifier.cc
@@ -24,6 +24,8 @@ along with GCC; see the file COPYING3.  If not see
 #include "pretty-print.h"
 #include "pretty-print-urlifier.h"
 #include "gcc-urlifier.h"
+#include "opts.h"
+#include "options.h"
 #include "selftest.h"
 
 namespace {
@@ -34,23 +36,34 @@ namespace {
 class gcc_urlifier : public urlifier
 {
 public:
+  gcc_urlifier (unsigned int lang_mask)
+  : m_lang_mask (lang_mask)
+  {}
+
   char *get_url_for_quoted_text (const char *p, size_t sz) const final override;
 
-  const char *get_url_suffix_for_quoted_text (const char *p, size_t sz) const;
+  label_text get_url_suffix_for_quoted_text (const char *p, size_t sz) const;
   /* We use ATTRIBUTE_UNUSED as this helper is called only from ASSERTs.  */
-  const char *get_url_suffix_for_quoted_text (const char *p) const ATTRIBUTE_UNUSED;
+  label_text get_url_suffix_for_quoted_text (const char *p) const ATTRIBUTE_UNUSED;
 
 private:
+  label_text get_url_suffix_for_option (const char *p, size_t sz) const;
+
   static char *
   make_doc_url (const char *doc_url_suffix);
+
+  unsigned int m_lang_mask;
 };
 
 /* class gcc_urlifier : public urlifier.  */
 
+/* Manage a hard-coded mapping from quoted string to URL suffixes
+   in gcc-urlifier.def  */
+
 #define DOC_URL(QUOTED_TEXT, URL_SUFFIX) \
   { (QUOTED_TEXT), (URL_SUFFIX) }
 
-const struct
+static const struct
 {
   const char *quoted_text;
   const char *url_suffix;
@@ -60,32 +73,53 @@ const struct
 
 };
 
+/* Implementation of urlifier::get_url_for_quoted_text vfunc for GCC
+   diagnostics.  */
+
 char *
 gcc_urlifier::get_url_for_quoted_text (const char *p, size_t sz) const
 {
-  if (const char *url_suffix = get_url_suffix_for_quoted_text (p, sz))
-    return make_doc_url (url_suffix);
+  label_text url_suffix = get_url_suffix_for_quoted_text (p, sz);
+  if (url_suffix.get ())
+    return make_doc_url (url_suffix.get ());
   return nullptr;
 }
 
-const char *
+/* Look for a URL for the quoted string (P, SZ).
+   Return the url suffix if found, or nullptr otherwise.  */
+
+label_text
 gcc_urlifier::get_url_suffix_for_quoted_text (const char *p, size_t sz) const
 {
-  /* Binary search.  This assumes that the quoted_text fields of doc_urls
+  if (sz == 0)
+    return label_text ();
+
+  /* If this is an option, look up the option and see if we have
+     a URL for it.  */
+  if (p[0] == '-')
+    {
+      label_text suffix = get_url_suffix_for_option (p, sz);
+      if (suffix.get ())
+	return suffix;
+    }
+
+  /* Otherwise, look within the hard-coded data table in gcc-urlifier.def.
+
+     Binary search.  This assumes that the quoted_text fields of doc_urls
      are in sorted order.  */
   int min = 0;
   int max = ARRAY_SIZE (doc_urls) - 1;
   while (true)
     {
       if (min > max)
-	return nullptr;
+	return label_text ();
       int midpoint = (min + max) / 2;
       gcc_assert ((size_t)midpoint < ARRAY_SIZE (doc_urls));
       int cmp = strncmp (p, doc_urls[midpoint].quoted_text, sz);
       if (cmp == 0)
 	{
 	  if (doc_urls[midpoint].quoted_text[sz] == '\0')
-	    return doc_urls[midpoint].url_suffix;
+	    return label_text::borrow (doc_urls[midpoint].url_suffix);
 	  else
 	    max = midpoint - 1;
 	}
@@ -94,15 +128,45 @@ gcc_urlifier::get_url_suffix_for_quoted_text (const char *p, size_t sz) const
       else
 	min = midpoint + 1;
     }
-  return nullptr;
+
+  /* Not found.  */
+  return label_text ();
 }
 
-const char *
+/* For use in selftests.  */
+
+label_text
 gcc_urlifier::get_url_suffix_for_quoted_text (const char *p) const
 {
   return get_url_suffix_for_quoted_text (p, strlen (p));
 }
 
+/* Look for a URL for the quoted string (P, SZ) that appears to be
+   an option.
+   Return the url suffix if found, or nullptr otherwise.  */
+
+label_text
+gcc_urlifier::get_url_suffix_for_option (const char *p, size_t sz) const
+{
+  /* Look up this option
+
+     find_opt does a binary search, taking a 0-terminated string,
+     and skipping the leading '-'.
+
+     We have a (pointer,size) pair that doesn't necessarily have a
+     terminator, so create a 0-terminated clone of the string.  */
+  gcc_assert (sz > 0);
+  char *tmp = xstrndup (p + 1, sz - 1); // skip the leading '-'
+  size_t opt = find_opt (tmp, m_lang_mask);
+  free (tmp);
+
+  if (opt >= N_OPTS)
+    /* Option not recognized.  */
+    return label_text ();
+
+  return get_option_url_suffix (opt);
+}
+
 char *
 gcc_urlifier::make_doc_url (const char *doc_url_suffix)
 {
@@ -115,9 +179,9 @@ gcc_urlifier::make_doc_url (const char *doc_url_suffix)
 } // anonymous namespace
 
 urlifier *
-make_gcc_urlifier ()
+make_gcc_urlifier (unsigned int lang_mask)
 {
-  return new gcc_urlifier ();
+  return new gcc_urlifier (lang_mask);
 }
 
 #if CHECKING_P
@@ -137,22 +201,26 @@ gcc_urlifier_cc_tests ()
 			doc_urls[idx].quoted_text)
 		< 0);
 
-  gcc_urlifier u;
+  gcc_urlifier u (0);
 
-  ASSERT_EQ (u.get_url_suffix_for_quoted_text (""), nullptr);
-  ASSERT_EQ (u.get_url_suffix_for_quoted_text (")"), nullptr);
+  ASSERT_EQ (u.get_url_suffix_for_quoted_text ("").get (), nullptr);
+  ASSERT_EQ (u.get_url_suffix_for_quoted_text (")").get (), nullptr);
 
-  ASSERT_STREQ (u.get_url_suffix_for_quoted_text ("#pragma message"),
+  ASSERT_STREQ (u.get_url_suffix_for_quoted_text ("#pragma message").get (),
 		"gcc/Diagnostic-Pragmas.html");
 
   // Incomplete prefix of a quoted_text
-  ASSERT_EQ (u.get_url_suffix_for_quoted_text ("#pragma mess"), nullptr);
+  ASSERT_EQ (u.get_url_suffix_for_quoted_text ("#pragma mess").get (), nullptr);
 
   /* Check that every element is findable.  */
   for (size_t idx = 0; idx < ARRAY_SIZE (doc_urls); idx++)
     ASSERT_STREQ
-      (u.get_url_suffix_for_quoted_text (doc_urls[idx].quoted_text),
+      (u.get_url_suffix_for_quoted_text (doc_urls[idx].quoted_text).get (),
        doc_urls[idx].url_suffix);
+
+  /* Check an option.  */
+  ASSERT_STREQ (u.get_url_suffix_for_quoted_text ("-fpack-struct").get (),
+		"gcc/Code-Gen-Options.html#index-fpack-struct");
 }
 
 } // namespace selftest
diff --git a/gcc/gcc-urlifier.def b/gcc/gcc-urlifier.def
index 360de930e9ec..de6d9a3eb962 100644
--- a/gcc/gcc-urlifier.def
+++ b/gcc/gcc-urlifier.def
@@ -16,5 +16,3 @@ DOC_URL ("#pragma pack", "gcc/Structure-Layout-Pragmas.html"),
 DOC_URL ("#pragma redefine_extname", "gcc/Symbol-Renaming-Pragmas.html"),
 DOC_URL ("#pragma scalar_storage_order", "gcc/Structure-Layout-Pragmas.html"),
 DOC_URL ("#pragma weak", "gcc/Weak-Pragmas.html"),
-DOC_URL ("--version", "gcc/Overall-Options.html#index-version"),
-DOC_URL ("-fpack-struct", "gcc/Code-Gen-Options.html#index-fpack-struct"),
diff --git a/gcc/gcc-urlifier.h b/gcc/gcc-urlifier.h
index 614e1c64b94d..77eb13463928 100644
--- a/gcc/gcc-urlifier.h
+++ b/gcc/gcc-urlifier.h
@@ -21,6 +21,6 @@ along with GCC; see the file COPYING3.  If not see
 #ifndef GCC_GCC_URLIFIER_H
 #define GCC_GCC_URLIFIER_H
 
-extern urlifier *make_gcc_urlifier ();
+extern urlifier *make_gcc_urlifier (unsigned int lang_mask);
 
 #endif /* GCC_GCC_URLIFIER_H */
diff --git a/gcc/gcc.cc b/gcc/gcc.cc
index 51120c1489e3..781cb343f18b 100644
--- a/gcc/gcc.cc
+++ b/gcc/gcc.cc
@@ -8292,7 +8292,7 @@ driver::global_initializations ()
   diagnostic_initialize (global_dc, 0);
   diagnostic_color_init (global_dc);
   diagnostic_urls_init (global_dc);
-  global_dc->set_urlifier (make_gcc_urlifier ());
+  global_dc->set_urlifier (make_gcc_urlifier (0));
 
 #ifdef GCC_DRIVER_HOST_INITIALIZATION
   /* Perform host dependent initialization when needed.  */
diff --git a/gcc/opt-functions.awk b/gcc/opt-functions.awk
index a58e93815e30..794aee74af8e 100644
--- a/gcc/opt-functions.awk
+++ b/gcc/opt-functions.awk
@@ -193,6 +193,13 @@ function var_name(flags)
 	return nth_arg(0, opt_args("Var", flags))
 }
 
+# If FLAGS includes a UrlSuffix flag, return the value it specifies.
+# Return the empty string otherwise.
+function url_suffix(flags)
+{
+	return nth_arg(0, opt_args("UrlSuffix", flags))
+}
+
 # Return the name of the variable if FLAGS has a HOST_WIDE_INT variable. 
 # Return the empty string otherwise.
 function host_wide_int_var_name(flags)
diff --git a/gcc/options-urls-cc-gen.awk b/gcc/options-urls-cc-gen.awk
new file mode 100644
index 000000000000..3c23a646a76d
--- /dev/null
+++ b/gcc/options-urls-cc-gen.awk
@@ -0,0 +1,79 @@
+#  Copyright (C) 2023 Free Software Foundation, Inc.
+#
+# This program 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.
+# 
+# This program 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 this program; see the file COPYING3.  If not see
+# <http://www.gnu.org/licenses/>.
+
+# This Awk script reads in the option records generated from 
+# opt-gather.awk, and generates a C++ file containing an array
+# of URL suffixes (possibly NULL), one per option.
+
+# This program uses functions from opt-functions.awk and code from
+# opt-read.awk.
+#
+# Usage: awk -f opt-functions.awk -f opt-read.awk -f options-urls-cc-gen.awk \
+#            [-v header_name=header.h] < inputfile > options-urls.cc
+
+END {
+
+
+print "/* This file is auto-generated by options-urls-cc-gen.awk.  */"
+print ""
+n_headers = split(header_name, headers, " ")
+for (i = 1; i <= n_headers; i++)
+	print "#include " quote headers[i] quote
+print "#include " quote "opts.h" quote
+print "#include " quote "intl.h" quote
+print "#include " quote "insn-attr-common.h" quote
+print ""
+
+if (n_extra_c_includes > 0) {
+	for (i = 0; i < n_extra_c_includes; i++) {
+		print "#include " quote extra_c_includes[i] quote
+	}
+	print ""
+}
+
+print "const char * const opt_url_suffixes[] =\n{"
+
+optindex = 0
+for (i = 0; i < n_opts; i++) {
+	# With identical flags, pick only the last one.  The
+	# earlier loop ensured that it has all flags merged,
+	# and a nonempty help text if one of the texts was nonempty.
+	while( i + 1 != n_opts && opts[i] == opts[i + 1] ) {
+		i++;
+	}
+
+	len = length (opts[i]);
+	enum = opt_enum(opts[i])
+
+	s = substr("                                  ", length (opts[i]))
+	if (i + 1 == n_opts)
+		comma = ""
+
+	u = url_suffix(flags[i])
+	if (u == "")
+		c_str = "NULL"
+	else
+		c_str = quote u quote;
+
+	printf(" /* [%i] (%s) = */\n", optindex, opt_enum(opts[i]))
+	printf("    %s%s\n", c_str, comma)
+
+	# Bump up the informational option index.
+	++optindex
+ }
+
+print "};"
+}
diff --git a/gcc/opts.cc b/gcc/opts.cc
index 32fdfc3e3ce1..87f041386264 100644
--- a/gcc/opts.cc
+++ b/gcc/opts.cc
@@ -3647,14 +3647,6 @@ get_option_html_page (int option_index)
 {
   const cl_option *cl_opt = &cl_options[option_index];
 
-  /* Analyzer options are on their own page.  */
-  if (strstr (cl_opt->opt_text, "analyzer-"))
-    return "gcc/Static-Analyzer-Options.html";
-
-  /* Handle -flto= option.  */
-  if (strstr (cl_opt->opt_text, "flto"))
-    return "gcc/Optimize-Options.html";
-
 #ifdef CL_Fortran
   if ((cl_opt->flags & CL_Fortran) != 0
       /* If it is option common to both C/C++ and Fortran, it is documented
@@ -3667,7 +3659,30 @@ get_option_html_page (int option_index)
     return "gfortran/Error-and-Warning-Options.html";
 #endif
 
-  return "gcc/Warning-Options.html";
+  return nullptr;
+}
+
+/* Get the url within the documentation for this option, or NULL.  */
+
+label_text
+get_option_url_suffix (int option_index)
+{
+  if (const char *url = opt_url_suffixes[option_index])
+    return label_text::borrow (url);
+
+  /* Fallback code for some options that aren't handled byt opt_url_suffixes
+     e.g. links below "gfortran/".  */
+  if (const char *html_page = get_option_html_page (option_index))
+    return label_text::take
+      (concat (html_page,
+	       /* Expect an anchor of the form "index-Wfoo" e.g.
+		  <a name="index-Wformat"></a>, and thus an id within
+		  the page of "#index-Wformat".  */
+	       "#index",
+	       cl_options[option_index].opt_text,
+	       NULL));
+
+  return label_text ();
 }
 
 /* Return malloced memory for a URL describing the option OPTION_INDEX
@@ -3677,22 +3692,13 @@ char *
 get_option_url (diagnostic_context *, int option_index)
 {
   if (option_index)
-    return concat (/* DOCUMENTATION_ROOT_URL should be supplied via
-		      #include "config.h" (see --with-documentation-root-url),
-		      and should have a trailing slash.  */
-		   DOCUMENTATION_ROOT_URL,
-
-		   /* get_option_html_page will return something like
-		      "gcc/Warning-Options.html".  */
-		   get_option_html_page (option_index),
-
-		   /* Expect an anchor of the form "index-Wfoo" e.g.
-		      <a name="index-Wformat"></a>, and thus an id within
-		      the URL of "#index-Wformat".  */
-		   "#index", cl_options[option_index].opt_text,
-		   NULL);
-  else
-    return NULL;
+    {
+      label_text url_suffix = get_option_url_suffix (option_index);
+      if (url_suffix.get ())
+	return concat (DOCUMENTATION_ROOT_URL, url_suffix.get (), nullptr);
+    }
+
+  return nullptr;
 }
 
 /* Return a heap allocated producer with command line options.  */
@@ -3823,17 +3829,20 @@ gen_producer_string (const char *language_string, cl_decoded_option *options,
 
 namespace selftest {
 
-/* Verify that get_option_html_page works as expected.  */
+/* Verify that get_option_url_suffix works as expected.  */
 
 static void
-test_get_option_html_page ()
+test_get_option_url_suffix ()
 {
-  ASSERT_STREQ (get_option_html_page (OPT_Wcpp), "gcc/Warning-Options.html");
-  ASSERT_STREQ (get_option_html_page (OPT_Wanalyzer_double_free),
-	     "gcc/Static-Analyzer-Options.html");
+  ASSERT_STREQ (get_option_url_suffix (OPT_Wcpp).get (),
+		"gcc/Warning-Options.html#index-Wcpp");
+  ASSERT_STREQ (get_option_url_suffix (OPT_Wanalyzer_double_free).get (),
+	     "gcc/Static-Analyzer-Options.html#index-Wanalyzer-double-free");
+
 #ifdef CL_Fortran
-  ASSERT_STREQ (get_option_html_page (OPT_Wline_truncation),
-		"gfortran/Error-and-Warning-Options.html");
+  ASSERT_STREQ
+    (get_option_url_suffix (OPT_Wline_truncation).get (),
+     "gfortran/Error-and-Warning-Options.html#index-Wline-truncation");
 #endif
 }
 
@@ -3896,7 +3905,7 @@ test_enum_sets ()
 void
 opts_cc_tests ()
 {
-  test_get_option_html_page ();
+  test_get_option_url_suffix ();
   test_enum_sets ();
 }
 
diff --git a/gcc/opts.h b/gcc/opts.h
index 00f377f9ca7e..97668e7d9206 100644
--- a/gcc/opts.h
+++ b/gcc/opts.h
@@ -152,6 +152,7 @@ struct cl_option_state {
 
 extern const struct cl_option cl_options[];
 extern const unsigned int cl_options_count;
+extern const char *const opt_url_suffixes[];
 #ifdef ENABLE_PLUGIN
 extern const struct cl_var cl_vars[];
 #endif
@@ -564,4 +565,7 @@ struct switchstr
   bool ordering;
 };
 
+extern label_text
+get_option_url_suffix (int option_index);
+
 #endif
diff --git a/gcc/testsuite/lib/gcc-dg.exp b/gcc/testsuite/lib/gcc-dg.exp
index 28529f57ef60..30642a72b756 100644
--- a/gcc/testsuite/lib/gcc-dg.exp
+++ b/gcc/testsuite/lib/gcc-dg.exp
@@ -46,6 +46,12 @@ if { [ishost "*-*-cygwin*"] } {
   setenv LANG C.ASCII
 }
 
+# Set TERM to xterm to ensure that URL escapes are disabled.
+# This avoids issues where a diagnostic which could embed a URL
+# is emitted before -fdiagnostics-plain-output is handled, where
+# otherwise the output could be affected by the environment.
+setenv TERM xterm
+
 # Avoid sporadic data-losses with expect
 match_max -d 10000
 
diff --git a/gcc/toplev.cc b/gcc/toplev.cc
index d8e8978dd555..7a0d808b8c83 100644
--- a/gcc/toplev.cc
+++ b/gcc/toplev.cc
@@ -1049,7 +1049,7 @@ general_init (const char *argv0, bool init_signals)
   global_dc->m_option_state = &global_options;
   global_dc->m_option_name = option_name;
   global_dc->m_get_option_url = get_option_url;
-  global_dc->set_urlifier (make_gcc_urlifier ());
+  global_dc->set_urlifier (make_gcc_urlifier (global_dc->m_lang_mask));
 
   if (init_signals)
     {
-- 
2.26.3


^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH 2/3] Add generated .opt.urls files
  2023-11-10 21:42 ` [PATCH 2/3] Add generated .opt.urls files David Malcolm
@ 2023-11-12 10:56   ` Iain Buclaw
  2023-11-13 14:07     ` David Malcolm
  2023-11-13 13:11   ` Marc Poulhiès
  1 sibling, 1 reply; 47+ messages in thread
From: Iain Buclaw @ 2023-11-12 10:56 UTC (permalink / raw)
  To: David Malcolm, gcc-patches, Joseph Myers

Excerpts from David Malcolm's message of November 10, 2023 10:42 pm:
> gcc/d/ChangeLog:
> 	* lang.opt.urls: New file, autogenerated by
> 	regenerate-opt-urls.py.
> ---
>  gcc/d/lang.opt.urls                          |   95 +
>  create mode 100644 gcc/d/lang.opt.urls
> 

[abridged view of patch]

> diff --git a/gcc/d/lang.opt.urls b/gcc/d/lang.opt.urls
> new file mode 100644
> index 000000000000..57c14ecc459a
> --- /dev/null
> +++ b/gcc/d/lang.opt.urls
> @@ -0,0 +1,95 @@
> +; Autogenerated by regenerate-opt-urls.py from gcc/d/lang.opt and generated HTML
> +
> +H
> +UrlSuffix(gcc/Preprocessor-Options.html#index-H)
> +
> +I
> +UrlSuffix(gcc/Directory-Options.html#index-I)
> +
> +M
> +UrlSuffix(gcc/Preprocessor-Options.html#index-M)
> +
> +MD
> +UrlSuffix(gcc/Preprocessor-Options.html#index-MD)
> +
> +MF
> +UrlSuffix(gcc/Preprocessor-Options.html#index-MF)
> +
> +MG
> +UrlSuffix(gcc/Preprocessor-Options.html#index-MG)
> +
> +MM
> +UrlSuffix(gcc/Preprocessor-Options.html#index-MM)
> +
> +MMD
> +UrlSuffix(gcc/Preprocessor-Options.html#index-MMD)
> +
> +MP
> +UrlSuffix(gcc/Preprocessor-Options.html#index-MP)
> +
> +MT
> +UrlSuffix(gcc/Preprocessor-Options.html#index-MT)
> +
> +MQ
> +UrlSuffix(gcc/Preprocessor-Options.html#index-MQ)
> +
> +Waddress
> +UrlSuffix(gcc/Warning-Options.html#index-Waddress)
> +
> +; skipping 'Wall' due to multiple URLs:
> +;   duplicate: 'gcc/Standard-Libraries.html#index-Wall-1'
> +;   duplicate: 'gcc/Warning-Options.html#index-Wall'
> +
> +Walloca
> +UrlSuffix(gcc/Warning-Options.html#index-Walloca)
> +
> +Walloca-larger-than=
> +UrlSuffix(gcc/Warning-Options.html#index-Walloca-larger-than_003d)
> +
> +Wbuiltin-declaration-mismatch
> +UrlSuffix(gcc/Warning-Options.html#index-Wbuiltin-declaration-mismatch)
> +
> +Wdeprecated
> +UrlSuffix(gcc/Warning-Options.html#index-Wdeprecated)
> +
> +Werror
> +UrlSuffix(gcc/Warning-Options.html#index-Werror)
> +
> +Wextra
> +UrlSuffix(gcc/Warning-Options.html#index-Wextra)
> +
> +Wunknown-pragmas
> +UrlSuffix(gcc/Warning-Options.html#index-Wno-unknown-pragmas)
> +
> +Wvarargs
> +UrlSuffix(gcc/Warning-Options.html#index-Wno-varargs)
> +
> +; skipping 'fbuiltin' due to multiple URLs:
> +;   duplicate: 'gcc/C-Dialect-Options.html#index-fbuiltin'
> +;   duplicate: 'gcc/Other-Builtins.html#index-fno-builtin-3'
> +;   duplicate: 'gcc/Warning-Options.html#index-fno-builtin-1'
> +
> +fexceptions
> +UrlSuffix(gcc/Code-Gen-Options.html#index-fexceptions)
> +
> +frtti
> +UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fno-rtti)
> +
> +imultilib
> +UrlSuffix(gcc/Directory-Options.html#index-imultilib)
> +
> +iprefix
> +UrlSuffix(gcc/Directory-Options.html#index-iprefix)
> +
> +isysroot
> +UrlSuffix(gcc/Directory-Options.html#index-isysroot)
> +
> +isystem
> +UrlSuffix(gcc/Directory-Options.html#index-isystem)
> +
> +nostdinc
> +UrlSuffix(gcc/Directory-Options.html#index-nostdinc)
> +
> +v
> +UrlSuffix(gcc/Overall-Options.html#index-v)
> +
> -- 
> 2.26.3
> 
> 

So I see this focuses on only adding URLs for common options, or options
that relate to C/C++ family, but may be handled by other front-ends too?

To pick out one, you have:

    frtti
    UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fno-rtti)

It looks like it could could alternatively be

    frtti
    UrlSuffix(gdc/Runtime-Options.html#index-frtti)

Or are other front-ends having URLs to their language-specific
documentation pages not supported for the same reason as why they can't
add self-documentation to their own options if another front-end
(typically C/C++) also makes claim to the option?

    frtti
    D 
    ; Documented in C


I'm OK with the D parts regardless of this observation.

Thanks,
Iain.

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH 2/3] Add generated .opt.urls files
  2023-11-10 21:42 ` [PATCH 2/3] Add generated .opt.urls files David Malcolm
  2023-11-12 10:56   ` Iain Buclaw
@ 2023-11-13 13:11   ` Marc Poulhiès
  2023-11-13 14:07     ` David Malcolm
  1 sibling, 1 reply; 47+ messages in thread
From: Marc Poulhiès @ 2023-11-13 13:11 UTC (permalink / raw)
  To: David Malcolm; +Cc: Joseph Myers, gcc-patches


David Malcolm <dmalcolm@redhat.com> writes:

> gcc/ada/ChangeLog:
> 	* gcc-interface/lang.opt.urls: New file, autogenerated by
> 	regenerate-opt-urls.py.


> diff --git a/gcc/ada/gcc-interface/lang.opt.urls b/gcc/ada/gcc-interface/lang.opt.urls
> new file mode 100644
> index 000000000000..e24210bcb12a
> --- /dev/null
> +++ b/gcc/ada/gcc-interface/lang.opt.urls
> @@ -0,0 +1,28 @@
> +; Autogenerated by regenerate-opt-urls.py from gcc/ada/gcc-interface/lang.opt and generated HTML
> +
> +I
> +UrlSuffix(gcc/Directory-Options.html#index-I)
> +
> +; skipping 'Wall' due to multiple URLs:
> +;   duplicate: 'gcc/Standard-Libraries.html#index-Wall-1'
> +;   duplicate: 'gcc/Warning-Options.html#index-Wall'
> +
> +nostdinc
> +UrlSuffix(gcc/Directory-Options.html#index-nostdinc)
> +
> +nostdlib
> +UrlSuffix(gcc/Link-Options.html#index-nostdlib)
> +
> +; skipping 'fshort-enums' due to multiple URLs:
> +;   duplicate: 'gcc/Code-Gen-Options.html#index-fshort-enums'
> +;   duplicate: 'gcc/Non-bugs.html#index-fshort-enums-3'
> +;   duplicate: 'gcc/Structures-unions-enumerations-and-bit-fields-implementation.html#index-fshort-enums-1'
> +
> +; skipping 'fsigned-char' due to multiple URLs:
> +;   duplicate: 'gcc/C-Dialect-Options.html#index-fsigned-char'
> +;   duplicate: 'gcc/Characters-implementation.html#index-fsigned-char-1'
> +
> +; skipping 'funsigned-char' due to multiple URLs:
> +;   duplicate: 'gcc/C-Dialect-Options.html#index-funsigned-char'
> +;   duplicate: 'gcc/Characters-implementation.html#index-funsigned-char-1'

Hello David,

This looks very nice, thanks!

I wonder why the Ada frontend only gets I, nostdinc and nostdlib
URLified to the common gcc doc.

Is it possible that your doc scrapper doesn't match the option in the
Ada doc? We are documenting nostdlib, nostdinc and I, so I would also
expect a "multiple URLs" for these. We are generating the texinfo files
from sphinx, so maybe we could adjust the script to also match what the
sphinx generator produces?

Thanks,
Marc

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH 2/3] Add generated .opt.urls files
  2023-11-12 10:56   ` Iain Buclaw
@ 2023-11-13 14:07     ` David Malcolm
  0 siblings, 0 replies; 47+ messages in thread
From: David Malcolm @ 2023-11-13 14:07 UTC (permalink / raw)
  To: Iain Buclaw, gcc-patches, Joseph Myers

On Sun, 2023-11-12 at 11:56 +0100, Iain Buclaw wrote:
> Excerpts from David Malcolm's message of November 10, 2023 10:42 pm:
> > gcc/d/ChangeLog:
> >         * lang.opt.urls: New file, autogenerated by
> >         regenerate-opt-urls.py.
> > ---
> >  gcc/d/lang.opt.urls                          |   95 +
> >  create mode 100644 gcc/d/lang.opt.urls
> > 
> 
> [abridged view of patch]
> 
> > diff --git a/gcc/d/lang.opt.urls b/gcc/d/lang.opt.urls
> > new file mode 100644
> > index 000000000000..57c14ecc459a
> > --- /dev/null
> > +++ b/gcc/d/lang.opt.urls
> > @@ -0,0 +1,95 @@
> > +; Autogenerated by regenerate-opt-urls.py from gcc/d/lang.opt and
> > generated HTML
> > +
> > +H
> > +UrlSuffix(gcc/Preprocessor-Options.html#index-H)
> > +
> > +I
> > +UrlSuffix(gcc/Directory-Options.html#index-I)
> > +
> > +M
> > +UrlSuffix(gcc/Preprocessor-Options.html#index-M)
> > +
> > +MD
> > +UrlSuffix(gcc/Preprocessor-Options.html#index-MD)
> > +
> > +MF
> > +UrlSuffix(gcc/Preprocessor-Options.html#index-MF)
> > +
> > +MG
> > +UrlSuffix(gcc/Preprocessor-Options.html#index-MG)
> > +
> > +MM
> > +UrlSuffix(gcc/Preprocessor-Options.html#index-MM)
> > +
> > +MMD
> > +UrlSuffix(gcc/Preprocessor-Options.html#index-MMD)
> > +
> > +MP
> > +UrlSuffix(gcc/Preprocessor-Options.html#index-MP)
> > +
> > +MT
> > +UrlSuffix(gcc/Preprocessor-Options.html#index-MT)
> > +
> > +MQ
> > +UrlSuffix(gcc/Preprocessor-Options.html#index-MQ)
> > +
> > +Waddress
> > +UrlSuffix(gcc/Warning-Options.html#index-Waddress)
> > +
> > +; skipping 'Wall' due to multiple URLs:
> > +;   duplicate: 'gcc/Standard-Libraries.html#index-Wall-1'
> > +;   duplicate: 'gcc/Warning-Options.html#index-Wall'
> > +
> > +Walloca
> > +UrlSuffix(gcc/Warning-Options.html#index-Walloca)
> > +
> > +Walloca-larger-than=
> > +UrlSuffix(gcc/Warning-Options.html#index-Walloca-larger-than_003d)
> > +
> > +Wbuiltin-declaration-mismatch
> > +UrlSuffix(gcc/Warning-Options.html#index-Wbuiltin-declaration-
> > mismatch)
> > +
> > +Wdeprecated
> > +UrlSuffix(gcc/Warning-Options.html#index-Wdeprecated)
> > +
> > +Werror
> > +UrlSuffix(gcc/Warning-Options.html#index-Werror)
> > +
> > +Wextra
> > +UrlSuffix(gcc/Warning-Options.html#index-Wextra)
> > +
> > +Wunknown-pragmas
> > +UrlSuffix(gcc/Warning-Options.html#index-Wno-unknown-pragmas)
> > +
> > +Wvarargs
> > +UrlSuffix(gcc/Warning-Options.html#index-Wno-varargs)
> > +
> > +; skipping 'fbuiltin' due to multiple URLs:
> > +;   duplicate: 'gcc/C-Dialect-Options.html#index-fbuiltin'
> > +;   duplicate: 'gcc/Other-Builtins.html#index-fno-builtin-3'
> > +;   duplicate: 'gcc/Warning-Options.html#index-fno-builtin-1'
> > +
> > +fexceptions
> > +UrlSuffix(gcc/Code-Gen-Options.html#index-fexceptions)
> > +
> > +frtti
> > +UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fno-rtti)
> > +
> > +imultilib
> > +UrlSuffix(gcc/Directory-Options.html#index-imultilib)
> > +
> > +iprefix
> > +UrlSuffix(gcc/Directory-Options.html#index-iprefix)
> > +
> > +isysroot
> > +UrlSuffix(gcc/Directory-Options.html#index-isysroot)
> > +
> > +isystem
> > +UrlSuffix(gcc/Directory-Options.html#index-isystem)
> > +
> > +nostdinc
> > +UrlSuffix(gcc/Directory-Options.html#index-nostdinc)
> > +
> > +v
> > +UrlSuffix(gcc/Overall-Options.html#index-v)
> > +
> > -- 
> > 2.26.3
> > 
> > 
> 
> So I see this focuses on only adding URLs for common options, or
> options
> that relate to C/C++ family, but may be handled by other front-ends
> too?

The regenerate-opt-urls.py script only parsed
  buildir/gcc/HTML/gcc-14.0.0/gcc/Option-Index.html
looking for anchors for options via a regex.

Looking at the docs I now see that various frontends have their own
Option-Index.html, e.g.:

  gdc/Option-Index.html

so probably regenerate-opt-urls.py ought to be parsing those also, and
marking the generated .opt.urls as being lang-specific.

That way we could (somehow) generate a options-urls.cc that has logic
(perhaps with langmasks) for giving out different URLs for different
frontends.


> 
> To pick out one, you have:
> 
>     frtti
>     UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fno-rtti)
> 
> It looks like it could could alternatively be
> 
>     frtti
>     UrlSuffix(gdc/Runtime-Options.html#index-frtti)
> 
> Or are other front-ends having URLs to their language-specific
> documentation pages not supported for the same reason as why they
> can't
> add self-documentation to their own options if another front-end
> (typically C/C++) also makes claim to the option?

Implementation-wise that would need fixing in the way I'm handling the
UrlSuffix directives; perhaps with a LangUrlSuffix directive.

> 
>     frtti
>     D 
>     ; Documented in C
> 
> 
> I'm OK with the D parts regardless of this observation.

Thanks
Dave


^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH 2/3] Add generated .opt.urls files
  2023-11-13 13:11   ` Marc Poulhiès
@ 2023-11-13 14:07     ` David Malcolm
  2023-11-13 16:02       ` Marc Poulhiès
  0 siblings, 1 reply; 47+ messages in thread
From: David Malcolm @ 2023-11-13 14:07 UTC (permalink / raw)
  To: Marc Poulhiès; +Cc: Joseph Myers, gcc-patches

On Mon, 2023-11-13 at 14:11 +0100, Marc Poulhiès wrote:
> 
> David Malcolm <dmalcolm@redhat.com> writes:
> 
> > gcc/ada/ChangeLog:
> >         * gcc-interface/lang.opt.urls: New file, autogenerated by
> >         regenerate-opt-urls.py.
> 
> 
> > diff --git a/gcc/ada/gcc-interface/lang.opt.urls b/gcc/ada/gcc-
> > interface/lang.opt.urls
> > new file mode 100644
> > index 000000000000..e24210bcb12a
> > --- /dev/null
> > +++ b/gcc/ada/gcc-interface/lang.opt.urls
> > @@ -0,0 +1,28 @@
> > +; Autogenerated by regenerate-opt-urls.py from gcc/ada/gcc-
> > interface/lang.opt and generated HTML
> > +
> > +I
> > +UrlSuffix(gcc/Directory-Options.html#index-I)
> > +
> > +; skipping 'Wall' due to multiple URLs:
> > +;   duplicate: 'gcc/Standard-Libraries.html#index-Wall-1'
> > +;   duplicate: 'gcc/Warning-Options.html#index-Wall'
> > +
> > +nostdinc
> > +UrlSuffix(gcc/Directory-Options.html#index-nostdinc)
> > +
> > +nostdlib
> > +UrlSuffix(gcc/Link-Options.html#index-nostdlib)
> > +
> > +; skipping 'fshort-enums' due to multiple URLs:
> > +;   duplicate: 'gcc/Code-Gen-Options.html#index-fshort-enums'
> > +;   duplicate: 'gcc/Non-bugs.html#index-fshort-enums-3'
> > +;   duplicate: 'gcc/Structures-unions-enumerations-and-bit-fields-
> > implementation.html#index-fshort-enums-1'
> > +
> > +; skipping 'fsigned-char' due to multiple URLs:
> > +;   duplicate: 'gcc/C-Dialect-Options.html#index-fsigned-char'
> > +;   duplicate: 'gcc/Characters-implementation.html#index-fsigned-
> > char-1'
> > +
> > +; skipping 'funsigned-char' due to multiple URLs:
> > +;   duplicate: 'gcc/C-Dialect-Options.html#index-funsigned-char'
> > +;   duplicate: 'gcc/Characters-implementation.html#index-
> > funsigned-char-1'
> 
> Hello David,
> 
> This looks very nice, thanks!
> 
> I wonder why the Ada frontend only gets I, nostdinc and nostdlib
> URLified to the common gcc doc.
> 
> Is it possible that your doc scrapper doesn't match the option in the
> Ada doc? We are documenting nostdlib, nostdinc and I, so I would also
> expect a "multiple URLs" for these.

The new regenerate-opt-urls.py script only parsed
  buildir/gcc/HTML/gcc-14.0.0/gcc/Option-Index.html
looking for anchors for options via a regex.

Looking at my build, I don't see any generated Ada HTML docs, so maybe
I messed this up?  Does the generated HTML from the generated Ada
texinfo go somewhere else?  (and, in particular, does it have its own
index?)

Perhaps this script could also deal directly with Sphinx-generated
HTML?

>  We are generating the texinfo files
> from sphinx, so maybe we could adjust the script to also match what
> the
> sphinx generator produces?

It *might* be as simple as pointing it at the option index for the
generated HTML for Ada.

Though as Iain's email points out, there may be some issues with per-
language URLs for options that my approach doesn't quite handle yet.

Dave


^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH 2/3] Add generated .opt.urls files
  2023-11-13 14:07     ` David Malcolm
@ 2023-11-13 16:02       ` Marc Poulhiès
  2023-12-19 14:47         ` Marc Poulhiès
  0 siblings, 1 reply; 47+ messages in thread
From: Marc Poulhiès @ 2023-11-13 16:02 UTC (permalink / raw)
  To: David Malcolm; +Cc: Joseph Myers, gcc-patches


David Malcolm <dmalcolm@redhat.com> writes:
>
> The new regenerate-opt-urls.py script only parsed
>   buildir/gcc/HTML/gcc-14.0.0/gcc/Option-Index.html
> looking for anchors for options via a regex.
>
> Looking at my build, I don't see any generated Ada HTML docs, so maybe
> I messed this up?  Does the generated HTML from the generated Ada
> texinfo go somewhere else?  (and, in particular, does it have its own
> index?)
>
> Perhaps this script could also deal directly with Sphinx-generated
> HTML?

I investigated a bit... The Ada part doesn't handle the html target, so
it's expected you don't have anything to parse. The online docs are
generated using a different script, not using these makefiles.

I'll see if I can fix the html target for ada, so that your script
doesn't need to be changed :)

>>  We are generating the texinfo files
>> from sphinx, so maybe we could adjust the script to also match what
>> the
>> sphinx generator produces?
>
> It *might* be as simple as pointing it at the option index for the
> generated HTML for Ada.

That's worth a try, when/if I can fix the HTML target.

Marc

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH 0/3] Option handling: add documentation URLs
  2023-11-10 21:42 [PATCH 0/3] Option handling: add documentation URLs David Malcolm
                   ` (2 preceding siblings ...)
  2023-11-10 21:42 ` [PATCH 3/3] diagnostics: use the .opt.urls files to urlify quoted text David Malcolm
@ 2023-11-14  0:12 ` Joseph Myers
  2023-11-15 22:50   ` David Malcolm
  3 siblings, 1 reply; 47+ messages in thread
From: Joseph Myers @ 2023-11-14  0:12 UTC (permalink / raw)
  To: David Malcolm; +Cc: gcc-patches

On Fri, 10 Nov 2023, David Malcolm wrote:

> The .opt.urls files it generates become part of the source tree, and
> would be regenerated by maintainers whenever new options are added.
> Forgetting to update the files (or not having Python 3 handy) merely
> means that URLs might be missing or out of date until someone else
> regenerates them.

Do I understand correctly that there are no makefile targets to regenerate 
these files; it's up to maintainers to regenerate them manually?

Advantages:

* No need to update contrib/gcc_update to handle timestamps for the files.

* No modifications unexpectedly appearing in source trees, if the checked 
in files are out of date and you run a build with the timestamps such that 
the file gets regenerated.

Disadvantages:

* You need to know how to do the regeneration manually; "make" is the 
uniform way for generating any file the build system can generate, without 
needing more specific knowledge about that file.

Given the recent discussion starting at 
<https://gcc.gnu.org/pipermail/gcc/2023-November/242835.html> of 
post-commit CI to detect auto*-generated files that aren't fully up to 
date, maybe it would be appropriate to add a check for .opt.urls files 
being up to date (including making sure that each .opt file does have a 
corresponding .opt.urls file checked in) to that CI?

Since the Python script has hardcoded information about .opt files and 
corresponding URLs for target options documentation, the patch series 
should update sourcebuild.texi, section "Back End", to identify that 
script as one of the places to update when adding a new target back end.

-- 
Joseph S. Myers
joseph@codesourcery.com

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH 3/3] diagnostics: use the .opt.urls files to urlify quoted text
  2023-11-10 21:42 ` [PATCH 3/3] diagnostics: use the .opt.urls files to urlify quoted text David Malcolm
@ 2023-11-14 17:44   ` Arthur Cohen
  0 siblings, 0 replies; 47+ messages in thread
From: Arthur Cohen @ 2023-11-14 17:44 UTC (permalink / raw)
  To: David Malcolm, gcc-patches, Joseph Myers

Hi David,

ACK for the Rust patches. Thanks a lot for working on this :)

Kindly,

Arthur

On 11/10/23 22:42, David Malcolm wrote:
> This patch adds machinery for using the .opt.urls files linking
> to the documentation of our options in gcc_urlifier.
> 
> For every enabled .opt file, the corresponding .opt.urls file
> will also be used when constructing the "optionslist" file.
> The patch adds a new awk script to process the optionslist file,
> options-urls-cc-gen.awk, which generates a options-urls.cc file,
> containing a big array of const char * of the form:
> 
> const char * const opt_url_suffixes[] =
> {
>   [...snip...]
> 
>   /* [563] (OPT_Wclass_memaccess) = */
>      "gcc/C_002b_002b-Dialect-Options.html#index-Wclass-memaccess",
>   /* [564] (OPT_Wclobbered) = */
>      "gcc/Warning-Options.html#index-Wclobbered",
> 
> [...snip...]
> };
> 
> The patch wires up gcc_urlifier so that for quoted strings beginning
> with '-' it will look up the option, and, if found, build a URL
> using one of the above suffixes.
> 
> For example, given:
> 
>    ./xgcc -B. -S t.c -Wctad-maybe-unsupported
>    cc1: warning: command-line option ‘-Wctad-maybe-unsupported’ is valid for C++/ObjC++ but not for C
> 
> the quoted string -Wctad-maybe-unsupported is automatically URLified in
> my terminal to:
> 	https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Dialect-Options.html#index-Wctad-maybe-unsupported
> 
> This approach seems to allow us to get URLs automatically from the
> documentation, whilst:
> - integrating with the existing .opt mechanisms but keeping
> autogenerated material (.opt.urls) separate from human-maintained
> files (.opt)
> - not adding any build-time requirements (by using awk at build time)
> - only requiring Python 3 when regenerating the in-tree opt.urls files,
> when the .texi or .opt files change enough to warrant it
> 
> gcc/ChangeLog:
> 	* Makefile.in (ALL_OPT_URL_FILES): New.
> 	(GCC_OBJS): Add options-urls.o.
> 	(OBJS): Likewise.
> 	(OBJS-libcommon): Likewise.
> 	(s-options): Depend on $(ALL_OPT_URL_FILES), and add this to
> 	inputs to opt-gather.awk.
> 	(options-urls.cc): New Makefile target.
> 	* gcc-urlifier.cc: Include "opts.h" and "options.h".
> 	(gcc_urlifier::gcc_urlifier): Add lang_mask param.
> 	(gcc_urlifier::m_lang_mask): New field.
> 	(doc_urls): Make static.
> 	(gcc_urlifier::get_url_for_quoted_text): Use label_text.
> 	(gcc_urlifier::get_url_suffix_for_quoted_text): Use label_text.
> 	Look for an option by name before trying a binary search in
> 	doc_urls.
> 	(gcc_urlifier::get_url_suffix_for_quoted_text): Use label_text.
> 	(gcc_urlifier::get_url_suffix_for_option): New.
> 	(make_gcc_urlifier): Add lang_mask param.
> 	(selftest::gcc_urlifier_cc_tests): Update for above changes.
> 	Verify that a URL is found for "-fpack-struct".
> 	* gcc-urlifier.def: Drop options "--version" and "-fpack-struct".
> 	* gcc-urlifier.h (make_gcc_urlifier): Add lang_mask param.
> 	* gcc.cc (driver::global_initializations): Pass 0 for lang_mask
> 	to make_gcc_urlifier.
> 	* opt-functions.awk (url_suffix): New function.
> 	* options-urls-cc-gen.awk: New file.
> 	* opts.cc (get_option_html_page): Remove special-casing for
> 	analyzer and LTO.
> 	(get_option_url_suffix): New.
> 	(get_option_url): Reimplement.
> 	(selftest::test_get_option_html_page): Rename to...
> 	(selftest::test_get_option_url_suffix): ...this and update for
> 	above changes.
> 	(selftest::opts_cc_tests): Update for renaming.
> 	* opts.h (opt_url_suffixes): New decl.
> 	(get_option_url_suffix): New decl.
> 
> gcc/testsuite/ChangeLog:
> 	* lib/gcc-dg.exp: Set TERM to xterm.
> 
> gcc/ChangeLog:
> 	* toplev.cc (general_init): Pass global_dc->m_lang_mask to
> 	make_gcc_urlifier.
> ---
>   gcc/Makefile.in              |  18 ++++--
>   gcc/gcc-urlifier.cc          | 106 ++++++++++++++++++++++++++++-------
>   gcc/gcc-urlifier.def         |   2 -
>   gcc/gcc-urlifier.h           |   2 +-
>   gcc/gcc.cc                   |   2 +-
>   gcc/opt-functions.awk        |   7 +++
>   gcc/options-urls-cc-gen.awk  |  79 ++++++++++++++++++++++++++
>   gcc/opts.cc                  |  75 ++++++++++++++-----------
>   gcc/opts.h                   |   4 ++
>   gcc/testsuite/lib/gcc-dg.exp |   6 ++
>   gcc/toplev.cc                |   2 +-
>   11 files changed, 242 insertions(+), 61 deletions(-)
>   create mode 100644 gcc/options-urls-cc-gen.awk
> 
> diff --git a/gcc/Makefile.in b/gcc/Makefile.in
> index 29cec21c8258..ebb59680d69b 100644
> --- a/gcc/Makefile.in
> +++ b/gcc/Makefile.in
> @@ -1270,6 +1270,8 @@ FLAGS_TO_PASS = \
>   # All option source files
>   ALL_OPT_FILES=$(lang_opt_files) $(extra_opt_files)
>   
> +ALL_OPT_URL_FILES=$(patsubst %, %.urls, $(ALL_OPT_FILES))
> +
>   # Target specific, C specific object file
>   C_TARGET_OBJS=@c_target_objs@
>   
> @@ -1286,7 +1288,7 @@ FORTRAN_TARGET_OBJS=@fortran_target_objs@
>   RUST_TARGET_OBJS=@rust_target_objs@
>   
>   # Object files for gcc many-languages driver.
> -GCC_OBJS = gcc.o gcc-main.o ggc-none.o gcc-urlifier.o
> +GCC_OBJS = gcc.o gcc-main.o ggc-none.o gcc-urlifier.o options-urls.o
>   
>   c-family-warn = $(STRICT_WARN)
>   
> @@ -1606,6 +1608,7 @@ OBJS = \
>   	optinfo.o \
>   	optinfo-emit-json.o \
>   	options-save.o \
> +	options-urls.o \
>   	opts-global.o \
>   	ordered-hash-map-tests.o \
>   	passes.o \
> @@ -1832,7 +1835,8 @@ OBJS-libcommon = diagnostic-spec.o diagnostic.o diagnostic-color.o \
>   # compiler and containing target-dependent code.
>   OBJS-libcommon-target = $(common_out_object_file) prefix.o \
>   	opts.o opts-common.o options.o vec.o hooks.o common/common-targhooks.o \
> -	hash-table.o file-find.o spellcheck.o selftest.o opt-suggestions.o
> +	hash-table.o file-find.o spellcheck.o selftest.o opt-suggestions.o \
> +	options-urls.o
>   
>   # This lists all host objects for the front ends.
>   ALL_HOST_FRONTEND_OBJS = $(foreach v,$(CONFIG_LANGUAGES),$($(v)_OBJS))
> @@ -2435,9 +2439,9 @@ s-specs : Makefile
>   	$(STAMP) s-specs
>   
>   optionlist: s-options ; @true
> -s-options: $(ALL_OPT_FILES) Makefile $(srcdir)/opt-gather.awk
> +s-options: $(ALL_OPT_FILES) $(ALL_OPT_URL_FILES) Makefile $(srcdir)/opt-gather.awk
>   	LC_ALL=C ; export LC_ALL ; \
> -	$(AWK) -f $(srcdir)/opt-gather.awk $(ALL_OPT_FILES) > tmp-optionlist
> +	$(AWK) -f $(srcdir)/opt-gather.awk $(ALL_OPT_FILES) $(ALL_OPT_URL_FILES) > tmp-optionlist
>   	$(SHELL) $(srcdir)/../move-if-change tmp-optionlist optionlist
>   	$(STAMP) s-options
>   
> @@ -2453,6 +2457,12 @@ options-save.cc: optionlist $(srcdir)/opt-functions.awk $(srcdir)/opt-read.awk \
>   	       -f $(srcdir)/optc-save-gen.awk \
>   	       -v header_name="config.h system.h coretypes.h tm.h" < $< > $@
>   
> +options-urls.cc: optionlist $(srcdir)/opt-functions.awk $(srcdir)/opt-read.awk \
> +    $(srcdir)/options-urls-cc-gen.awk
> +	$(AWK) -f $(srcdir)/opt-functions.awk -f $(srcdir)/opt-read.awk \
> +	       -f $(srcdir)/options-urls-cc-gen.awk \
> +	       -v header_name="config.h system.h coretypes.h tm.h" < $< > $@
> +
>   options.h: s-options-h ; @true
>   s-options-h: optionlist $(srcdir)/opt-functions.awk $(srcdir)/opt-read.awk \
>       $(srcdir)/opth-gen.awk
> diff --git a/gcc/gcc-urlifier.cc b/gcc/gcc-urlifier.cc
> index 0dbff9853132..da704bf814ad 100644
> --- a/gcc/gcc-urlifier.cc
> +++ b/gcc/gcc-urlifier.cc
> @@ -24,6 +24,8 @@ along with GCC; see the file COPYING3.  If not see
>   #include "pretty-print.h"
>   #include "pretty-print-urlifier.h"
>   #include "gcc-urlifier.h"
> +#include "opts.h"
> +#include "options.h"
>   #include "selftest.h"
>   
>   namespace {
> @@ -34,23 +36,34 @@ namespace {
>   class gcc_urlifier : public urlifier
>   {
>   public:
> +  gcc_urlifier (unsigned int lang_mask)
> +  : m_lang_mask (lang_mask)
> +  {}
> +
>     char *get_url_for_quoted_text (const char *p, size_t sz) const final override;
>   
> -  const char *get_url_suffix_for_quoted_text (const char *p, size_t sz) const;
> +  label_text get_url_suffix_for_quoted_text (const char *p, size_t sz) const;
>     /* We use ATTRIBUTE_UNUSED as this helper is called only from ASSERTs.  */
> -  const char *get_url_suffix_for_quoted_text (const char *p) const ATTRIBUTE_UNUSED;
> +  label_text get_url_suffix_for_quoted_text (const char *p) const ATTRIBUTE_UNUSED;
>   
>   private:
> +  label_text get_url_suffix_for_option (const char *p, size_t sz) const;
> +
>     static char *
>     make_doc_url (const char *doc_url_suffix);
> +
> +  unsigned int m_lang_mask;
>   };
>   
>   /* class gcc_urlifier : public urlifier.  */
>   
> +/* Manage a hard-coded mapping from quoted string to URL suffixes
> +   in gcc-urlifier.def  */
> +
>   #define DOC_URL(QUOTED_TEXT, URL_SUFFIX) \
>     { (QUOTED_TEXT), (URL_SUFFIX) }
>   
> -const struct
> +static const struct
>   {
>     const char *quoted_text;
>     const char *url_suffix;
> @@ -60,32 +73,53 @@ const struct
>   
>   };
>   
> +/* Implementation of urlifier::get_url_for_quoted_text vfunc for GCC
> +   diagnostics.  */
> +
>   char *
>   gcc_urlifier::get_url_for_quoted_text (const char *p, size_t sz) const
>   {
> -  if (const char *url_suffix = get_url_suffix_for_quoted_text (p, sz))
> -    return make_doc_url (url_suffix);
> +  label_text url_suffix = get_url_suffix_for_quoted_text (p, sz);
> +  if (url_suffix.get ())
> +    return make_doc_url (url_suffix.get ());
>     return nullptr;
>   }
>   
> -const char *
> +/* Look for a URL for the quoted string (P, SZ).
> +   Return the url suffix if found, or nullptr otherwise.  */
> +
> +label_text
>   gcc_urlifier::get_url_suffix_for_quoted_text (const char *p, size_t sz) const
>   {
> -  /* Binary search.  This assumes that the quoted_text fields of doc_urls
> +  if (sz == 0)
> +    return label_text ();
> +
> +  /* If this is an option, look up the option and see if we have
> +     a URL for it.  */
> +  if (p[0] == '-')
> +    {
> +      label_text suffix = get_url_suffix_for_option (p, sz);
> +      if (suffix.get ())
> +	return suffix;
> +    }
> +
> +  /* Otherwise, look within the hard-coded data table in gcc-urlifier.def.
> +
> +     Binary search.  This assumes that the quoted_text fields of doc_urls
>        are in sorted order.  */
>     int min = 0;
>     int max = ARRAY_SIZE (doc_urls) - 1;
>     while (true)
>       {
>         if (min > max)
> -	return nullptr;
> +	return label_text ();
>         int midpoint = (min + max) / 2;
>         gcc_assert ((size_t)midpoint < ARRAY_SIZE (doc_urls));
>         int cmp = strncmp (p, doc_urls[midpoint].quoted_text, sz);
>         if (cmp == 0)
>   	{
>   	  if (doc_urls[midpoint].quoted_text[sz] == '\0')
> -	    return doc_urls[midpoint].url_suffix;
> +	    return label_text::borrow (doc_urls[midpoint].url_suffix);
>   	  else
>   	    max = midpoint - 1;
>   	}
> @@ -94,15 +128,45 @@ gcc_urlifier::get_url_suffix_for_quoted_text (const char *p, size_t sz) const
>         else
>   	min = midpoint + 1;
>       }
> -  return nullptr;
> +
> +  /* Not found.  */
> +  return label_text ();
>   }
>   
> -const char *
> +/* For use in selftests.  */
> +
> +label_text
>   gcc_urlifier::get_url_suffix_for_quoted_text (const char *p) const
>   {
>     return get_url_suffix_for_quoted_text (p, strlen (p));
>   }
>   
> +/* Look for a URL for the quoted string (P, SZ) that appears to be
> +   an option.
> +   Return the url suffix if found, or nullptr otherwise.  */
> +
> +label_text
> +gcc_urlifier::get_url_suffix_for_option (const char *p, size_t sz) const
> +{
> +  /* Look up this option
> +
> +     find_opt does a binary search, taking a 0-terminated string,
> +     and skipping the leading '-'.
> +
> +     We have a (pointer,size) pair that doesn't necessarily have a
> +     terminator, so create a 0-terminated clone of the string.  */
> +  gcc_assert (sz > 0);
> +  char *tmp = xstrndup (p + 1, sz - 1); // skip the leading '-'
> +  size_t opt = find_opt (tmp, m_lang_mask);
> +  free (tmp);
> +
> +  if (opt >= N_OPTS)
> +    /* Option not recognized.  */
> +    return label_text ();
> +
> +  return get_option_url_suffix (opt);
> +}
> +
>   char *
>   gcc_urlifier::make_doc_url (const char *doc_url_suffix)
>   {
> @@ -115,9 +179,9 @@ gcc_urlifier::make_doc_url (const char *doc_url_suffix)
>   } // anonymous namespace
>   
>   urlifier *
> -make_gcc_urlifier ()
> +make_gcc_urlifier (unsigned int lang_mask)
>   {
> -  return new gcc_urlifier ();
> +  return new gcc_urlifier (lang_mask);
>   }
>   
>   #if CHECKING_P
> @@ -137,22 +201,26 @@ gcc_urlifier_cc_tests ()
>   			doc_urls[idx].quoted_text)
>   		< 0);
>   
> -  gcc_urlifier u;
> +  gcc_urlifier u (0);
>   
> -  ASSERT_EQ (u.get_url_suffix_for_quoted_text (""), nullptr);
> -  ASSERT_EQ (u.get_url_suffix_for_quoted_text (")"), nullptr);
> +  ASSERT_EQ (u.get_url_suffix_for_quoted_text ("").get (), nullptr);
> +  ASSERT_EQ (u.get_url_suffix_for_quoted_text (")").get (), nullptr);
>   
> -  ASSERT_STREQ (u.get_url_suffix_for_quoted_text ("#pragma message"),
> +  ASSERT_STREQ (u.get_url_suffix_for_quoted_text ("#pragma message").get (),
>   		"gcc/Diagnostic-Pragmas.html");
>   
>     // Incomplete prefix of a quoted_text
> -  ASSERT_EQ (u.get_url_suffix_for_quoted_text ("#pragma mess"), nullptr);
> +  ASSERT_EQ (u.get_url_suffix_for_quoted_text ("#pragma mess").get (), nullptr);
>   
>     /* Check that every element is findable.  */
>     for (size_t idx = 0; idx < ARRAY_SIZE (doc_urls); idx++)
>       ASSERT_STREQ
> -      (u.get_url_suffix_for_quoted_text (doc_urls[idx].quoted_text),
> +      (u.get_url_suffix_for_quoted_text (doc_urls[idx].quoted_text).get (),
>          doc_urls[idx].url_suffix);
> +
> +  /* Check an option.  */
> +  ASSERT_STREQ (u.get_url_suffix_for_quoted_text ("-fpack-struct").get (),
> +		"gcc/Code-Gen-Options.html#index-fpack-struct");
>   }
>   
>   } // namespace selftest
> diff --git a/gcc/gcc-urlifier.def b/gcc/gcc-urlifier.def
> index 360de930e9ec..de6d9a3eb962 100644
> --- a/gcc/gcc-urlifier.def
> +++ b/gcc/gcc-urlifier.def
> @@ -16,5 +16,3 @@ DOC_URL ("#pragma pack", "gcc/Structure-Layout-Pragmas.html"),
>   DOC_URL ("#pragma redefine_extname", "gcc/Symbol-Renaming-Pragmas.html"),
>   DOC_URL ("#pragma scalar_storage_order", "gcc/Structure-Layout-Pragmas.html"),
>   DOC_URL ("#pragma weak", "gcc/Weak-Pragmas.html"),
> -DOC_URL ("--version", "gcc/Overall-Options.html#index-version"),
> -DOC_URL ("-fpack-struct", "gcc/Code-Gen-Options.html#index-fpack-struct"),
> diff --git a/gcc/gcc-urlifier.h b/gcc/gcc-urlifier.h
> index 614e1c64b94d..77eb13463928 100644
> --- a/gcc/gcc-urlifier.h
> +++ b/gcc/gcc-urlifier.h
> @@ -21,6 +21,6 @@ along with GCC; see the file COPYING3.  If not see
>   #ifndef GCC_GCC_URLIFIER_H
>   #define GCC_GCC_URLIFIER_H
>   
> -extern urlifier *make_gcc_urlifier ();
> +extern urlifier *make_gcc_urlifier (unsigned int lang_mask);
>   
>   #endif /* GCC_GCC_URLIFIER_H */
> diff --git a/gcc/gcc.cc b/gcc/gcc.cc
> index 51120c1489e3..781cb343f18b 100644
> --- a/gcc/gcc.cc
> +++ b/gcc/gcc.cc
> @@ -8292,7 +8292,7 @@ driver::global_initializations ()
>     diagnostic_initialize (global_dc, 0);
>     diagnostic_color_init (global_dc);
>     diagnostic_urls_init (global_dc);
> -  global_dc->set_urlifier (make_gcc_urlifier ());
> +  global_dc->set_urlifier (make_gcc_urlifier (0));
>   
>   #ifdef GCC_DRIVER_HOST_INITIALIZATION
>     /* Perform host dependent initialization when needed.  */
> diff --git a/gcc/opt-functions.awk b/gcc/opt-functions.awk
> index a58e93815e30..794aee74af8e 100644
> --- a/gcc/opt-functions.awk
> +++ b/gcc/opt-functions.awk
> @@ -193,6 +193,13 @@ function var_name(flags)
>   	return nth_arg(0, opt_args("Var", flags))
>   }
>   
> +# If FLAGS includes a UrlSuffix flag, return the value it specifies.
> +# Return the empty string otherwise.
> +function url_suffix(flags)
> +{
> +	return nth_arg(0, opt_args("UrlSuffix", flags))
> +}
> +
>   # Return the name of the variable if FLAGS has a HOST_WIDE_INT variable.
>   # Return the empty string otherwise.
>   function host_wide_int_var_name(flags)
> diff --git a/gcc/options-urls-cc-gen.awk b/gcc/options-urls-cc-gen.awk
> new file mode 100644
> index 000000000000..3c23a646a76d
> --- /dev/null
> +++ b/gcc/options-urls-cc-gen.awk
> @@ -0,0 +1,79 @@
> +#  Copyright (C) 2023 Free Software Foundation, Inc.
> +#
> +# This program 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.
> +#
> +# This program 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 this program; see the file COPYING3.  If not see
> +# <http://www.gnu.org/licenses/>.
> +
> +# This Awk script reads in the option records generated from
> +# opt-gather.awk, and generates a C++ file containing an array
> +# of URL suffixes (possibly NULL), one per option.
> +
> +# This program uses functions from opt-functions.awk and code from
> +# opt-read.awk.
> +#
> +# Usage: awk -f opt-functions.awk -f opt-read.awk -f options-urls-cc-gen.awk \
> +#            [-v header_name=header.h] < inputfile > options-urls.cc
> +
> +END {
> +
> +
> +print "/* This file is auto-generated by options-urls-cc-gen.awk.  */"
> +print ""
> +n_headers = split(header_name, headers, " ")
> +for (i = 1; i <= n_headers; i++)
> +	print "#include " quote headers[i] quote
> +print "#include " quote "opts.h" quote
> +print "#include " quote "intl.h" quote
> +print "#include " quote "insn-attr-common.h" quote
> +print ""
> +
> +if (n_extra_c_includes > 0) {
> +	for (i = 0; i < n_extra_c_includes; i++) {
> +		print "#include " quote extra_c_includes[i] quote
> +	}
> +	print ""
> +}
> +
> +print "const char * const opt_url_suffixes[] =\n{"
> +
> +optindex = 0
> +for (i = 0; i < n_opts; i++) {
> +	# With identical flags, pick only the last one.  The
> +	# earlier loop ensured that it has all flags merged,
> +	# and a nonempty help text if one of the texts was nonempty.
> +	while( i + 1 != n_opts && opts[i] == opts[i + 1] ) {
> +		i++;
> +	}
> +
> +	len = length (opts[i]);
> +	enum = opt_enum(opts[i])
> +
> +	s = substr("                                  ", length (opts[i]))
> +	if (i + 1 == n_opts)
> +		comma = ""
> +
> +	u = url_suffix(flags[i])
> +	if (u == "")
> +		c_str = "NULL"
> +	else
> +		c_str = quote u quote;
> +
> +	printf(" /* [%i] (%s) = */\n", optindex, opt_enum(opts[i]))
> +	printf("    %s%s\n", c_str, comma)
> +
> +	# Bump up the informational option index.
> +	++optindex
> + }
> +
> +print "};"
> +}
> diff --git a/gcc/opts.cc b/gcc/opts.cc
> index 32fdfc3e3ce1..87f041386264 100644
> --- a/gcc/opts.cc
> +++ b/gcc/opts.cc
> @@ -3647,14 +3647,6 @@ get_option_html_page (int option_index)
>   {
>     const cl_option *cl_opt = &cl_options[option_index];
>   
> -  /* Analyzer options are on their own page.  */
> -  if (strstr (cl_opt->opt_text, "analyzer-"))
> -    return "gcc/Static-Analyzer-Options.html";
> -
> -  /* Handle -flto= option.  */
> -  if (strstr (cl_opt->opt_text, "flto"))
> -    return "gcc/Optimize-Options.html";
> -
>   #ifdef CL_Fortran
>     if ((cl_opt->flags & CL_Fortran) != 0
>         /* If it is option common to both C/C++ and Fortran, it is documented
> @@ -3667,7 +3659,30 @@ get_option_html_page (int option_index)
>       return "gfortran/Error-and-Warning-Options.html";
>   #endif
>   
> -  return "gcc/Warning-Options.html";
> +  return nullptr;
> +}
> +
> +/* Get the url within the documentation for this option, or NULL.  */
> +
> +label_text
> +get_option_url_suffix (int option_index)
> +{
> +  if (const char *url = opt_url_suffixes[option_index])
> +    return label_text::borrow (url);
> +
> +  /* Fallback code for some options that aren't handled byt opt_url_suffixes
> +     e.g. links below "gfortran/".  */
> +  if (const char *html_page = get_option_html_page (option_index))
> +    return label_text::take
> +      (concat (html_page,
> +	       /* Expect an anchor of the form "index-Wfoo" e.g.
> +		  <a name="index-Wformat"></a>, and thus an id within
> +		  the page of "#index-Wformat".  */
> +	       "#index",
> +	       cl_options[option_index].opt_text,
> +	       NULL));
> +
> +  return label_text ();
>   }
>   
>   /* Return malloced memory for a URL describing the option OPTION_INDEX
> @@ -3677,22 +3692,13 @@ char *
>   get_option_url (diagnostic_context *, int option_index)
>   {
>     if (option_index)
> -    return concat (/* DOCUMENTATION_ROOT_URL should be supplied via
> -		      #include "config.h" (see --with-documentation-root-url),
> -		      and should have a trailing slash.  */
> -		   DOCUMENTATION_ROOT_URL,
> -
> -		   /* get_option_html_page will return something like
> -		      "gcc/Warning-Options.html".  */
> -		   get_option_html_page (option_index),
> -
> -		   /* Expect an anchor of the form "index-Wfoo" e.g.
> -		      <a name="index-Wformat"></a>, and thus an id within
> -		      the URL of "#index-Wformat".  */
> -		   "#index", cl_options[option_index].opt_text,
> -		   NULL);
> -  else
> -    return NULL;
> +    {
> +      label_text url_suffix = get_option_url_suffix (option_index);
> +      if (url_suffix.get ())
> +	return concat (DOCUMENTATION_ROOT_URL, url_suffix.get (), nullptr);
> +    }
> +
> +  return nullptr;
>   }
>   
>   /* Return a heap allocated producer with command line options.  */
> @@ -3823,17 +3829,20 @@ gen_producer_string (const char *language_string, cl_decoded_option *options,
>   
>   namespace selftest {
>   
> -/* Verify that get_option_html_page works as expected.  */
> +/* Verify that get_option_url_suffix works as expected.  */
>   
>   static void
> -test_get_option_html_page ()
> +test_get_option_url_suffix ()
>   {
> -  ASSERT_STREQ (get_option_html_page (OPT_Wcpp), "gcc/Warning-Options.html");
> -  ASSERT_STREQ (get_option_html_page (OPT_Wanalyzer_double_free),
> -	     "gcc/Static-Analyzer-Options.html");
> +  ASSERT_STREQ (get_option_url_suffix (OPT_Wcpp).get (),
> +		"gcc/Warning-Options.html#index-Wcpp");
> +  ASSERT_STREQ (get_option_url_suffix (OPT_Wanalyzer_double_free).get (),
> +	     "gcc/Static-Analyzer-Options.html#index-Wanalyzer-double-free");
> +
>   #ifdef CL_Fortran
> -  ASSERT_STREQ (get_option_html_page (OPT_Wline_truncation),
> -		"gfortran/Error-and-Warning-Options.html");
> +  ASSERT_STREQ
> +    (get_option_url_suffix (OPT_Wline_truncation).get (),
> +     "gfortran/Error-and-Warning-Options.html#index-Wline-truncation");
>   #endif
>   }
>   
> @@ -3896,7 +3905,7 @@ test_enum_sets ()
>   void
>   opts_cc_tests ()
>   {
> -  test_get_option_html_page ();
> +  test_get_option_url_suffix ();
>     test_enum_sets ();
>   }
>   
> diff --git a/gcc/opts.h b/gcc/opts.h
> index 00f377f9ca7e..97668e7d9206 100644
> --- a/gcc/opts.h
> +++ b/gcc/opts.h
> @@ -152,6 +152,7 @@ struct cl_option_state {
>   
>   extern const struct cl_option cl_options[];
>   extern const unsigned int cl_options_count;
> +extern const char *const opt_url_suffixes[];
>   #ifdef ENABLE_PLUGIN
>   extern const struct cl_var cl_vars[];
>   #endif
> @@ -564,4 +565,7 @@ struct switchstr
>     bool ordering;
>   };
>   
> +extern label_text
> +get_option_url_suffix (int option_index);
> +
>   #endif
> diff --git a/gcc/testsuite/lib/gcc-dg.exp b/gcc/testsuite/lib/gcc-dg.exp
> index 28529f57ef60..30642a72b756 100644
> --- a/gcc/testsuite/lib/gcc-dg.exp
> +++ b/gcc/testsuite/lib/gcc-dg.exp
> @@ -46,6 +46,12 @@ if { [ishost "*-*-cygwin*"] } {
>     setenv LANG C.ASCII
>   }
>   
> +# Set TERM to xterm to ensure that URL escapes are disabled.
> +# This avoids issues where a diagnostic which could embed a URL
> +# is emitted before -fdiagnostics-plain-output is handled, where
> +# otherwise the output could be affected by the environment.
> +setenv TERM xterm
> +
>   # Avoid sporadic data-losses with expect
>   match_max -d 10000
>   
> diff --git a/gcc/toplev.cc b/gcc/toplev.cc
> index d8e8978dd555..7a0d808b8c83 100644
> --- a/gcc/toplev.cc
> +++ b/gcc/toplev.cc
> @@ -1049,7 +1049,7 @@ general_init (const char *argv0, bool init_signals)
>     global_dc->m_option_state = &global_options;
>     global_dc->m_option_name = option_name;
>     global_dc->m_get_option_url = get_option_url;
> -  global_dc->set_urlifier (make_gcc_urlifier ());
> +  global_dc->set_urlifier (make_gcc_urlifier (global_dc->m_lang_mask));
>   
>     if (init_signals)
>       {

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH 0/3] Option handling: add documentation URLs
  2023-11-14  0:12 ` [PATCH 0/3] Option handling: add documentation URLs Joseph Myers
@ 2023-11-15 22:50   ` David Malcolm
  2023-11-15 23:40     ` Joseph Myers
  0 siblings, 1 reply; 47+ messages in thread
From: David Malcolm @ 2023-11-15 22:50 UTC (permalink / raw)
  To: Joseph Myers; +Cc: gcc-patches

On Tue, 2023-11-14 at 00:12 +0000, Joseph Myers wrote:
> On Fri, 10 Nov 2023, David Malcolm wrote:
> 
> > The .opt.urls files it generates become part of the source tree,
> > and
> > would be regenerated by maintainers whenever new options are added.
> > Forgetting to update the files (or not having Python 3 handy)
> > merely
> > means that URLs might be missing or out of date until someone else
> > regenerates them.
> 
> Do I understand correctly that there are no makefile targets to
> regenerate 
> these files; it's up to maintainers to regenerate them manually?
> 
> Advantages:
> 
> * No need to update contrib/gcc_update to handle timestamps for the
> files.
> 
> * No modifications unexpectedly appearing in source trees, if the
> checked 
> in files are out of date and you run a build with the timestamps such
> that 
> the file gets regenerated.

The .opt.urls are generated from the generated HTML.  I think this
needs to be a manually-triggered process, otherwise the optionlist
depends on the generated HTML, and thus the generated HTML would become
a hard early dependency during the build (which I don't think we would
want).

> 
> Disadvantages:
> 
> * You need to know how to do the regeneration manually; "make" is the
> uniform way for generating any file the build system can generate,
> without 
> needing more specific knowledge about that file.

In the patches I posted I merely listed the commands in a comment in
the script, but I'm currently working on adding support for options
from the gdc and gfortran docs, and in doing so found that running the
script with the correct options was a pain.

So to make it easier, I'm currently thinking of adding this convenience
target, so that when a maintainer does decide to regenerate the
.opt.urls, they can simply type "make regenerate-opt-urls" in the gcc
build subdir:

diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index c3ed960b8f3c..6d24b7b9db34 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -3616,6 +3616,12 @@ $(build_htmldir)/gccinstall/index.html: $(TEXI_GCCINSTALL_FILES)
        DESTDIR=$(@D) \
        $(SHELL) $(srcdir)/doc/install.texi2html
 
+# Regenerate the .opt.urls files from the generated html, and from the .opt
+# files.
+.PHONY: regenerate-opt-urls
+regenerate-opt-urls:
+       $(srcdir)/regenerate-opt-urls.py $(build_htmldir) $(shell dirname $(srcdir))
+
 MANFILES = doc/gcov.1 doc/cpp.1 doc/gcc.1 doc/gfdl.7 doc/gpl.7 \
            doc/fsf-funding.7 doc/gcov-tool.1 doc/gcov-dump.1 \
           $(if $(filter yes,@enable_lto@),doc/lto-dump.1)


> 
> Given the recent discussion starting at 
> <https://gcc.gnu.org/pipermail/gcc/2023-November/242835.html> of 
> post-commit CI to detect auto*-generated files that aren't fully up
> to 
> date, maybe it would be appropriate to add a check for .opt.urls
> files 
> being up to date (including making sure that each .opt file does have
> a 
> corresponding .opt.urls file checked in) to that CI?
> 
> Since the Python script has hardcoded information about .opt files
> and 
> corresponding URLs for target options documentation, the patch series
> should update sourcebuild.texi, section "Back End", to identify that 
> script as one of the places to update when adding a new target back
> end.

Thanks, will do.

As mentioned, I'm currently investigating capturing per-language option
URLs (to address Iain's and Marc's comments about D and Ada); if I get
that working, I may need to add a similar note for adding a new
frontend.

Hope the overall approach seems reasonable.
Dave


^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH 0/3] Option handling: add documentation URLs
  2023-11-15 22:50   ` David Malcolm
@ 2023-11-15 23:40     ` Joseph Myers
  2023-11-16 14:28       ` [PATCH 0/4] v2 of " David Malcolm
  0 siblings, 1 reply; 47+ messages in thread
From: Joseph Myers @ 2023-11-15 23:40 UTC (permalink / raw)
  To: David Malcolm; +Cc: gcc-patches

On Wed, 15 Nov 2023, David Malcolm wrote:

> As mentioned, I'm currently investigating capturing per-language option
> URLs (to address Iain's and Marc's comments about D and Ada); if I get
> that working, I may need to add a similar note for adding a new
> frontend.
> 
> Hope the overall approach seems reasonable.

Yes, the approach seems reasonable.

I suppose a difficulty with per-language URLs is that a given option has a 
single OPT_* enumeration value; the diagnostic calls don't say whether 
it's being used from a front end or the middle end (though maybe there's 
not much overlap between the two) - though some option handling already 
distinguishes based on what language is being compiled (e.g. 
LangEnabledBy).  For per-architecture URLs you don't have this issue 
because only one architecture is built into GCC at a time.

-- 
Joseph S. Myers
joseph@codesourcery.com

^ permalink raw reply	[flat|nested] 47+ messages in thread

* [PATCH 0/4] v2 of Option handling: add documentation URLs
  2023-11-15 23:40     ` Joseph Myers
@ 2023-11-16 14:28       ` David Malcolm
  2023-11-16 14:28         ` [PATCH 1/4] options: add gcc/regenerate-opt-urls.py David Malcolm
                           ` (4 more replies)
  0 siblings, 5 replies; 47+ messages in thread
From: David Malcolm @ 2023-11-16 14:28 UTC (permalink / raw)
  To: Joseph Myers; +Cc: gcc-patches, David Malcolm

On Wed, 2023-11-15 at 23:40 +0000, Joseph Myers wrote:
> On Wed, 15 Nov 2023, David Malcolm wrote:
>
> > As mentioned, I'm currently investigating capturing per-language
> > option
> > URLs (to address Iain's and Marc's comments about D and Ada); if I
> > get
> > that working, I may need to add a similar note for adding a new
> > frontend.
> > 
> > Hope the overall approach seems reasonable.
> 
> > Yes, the approach seems reasonable.

Thanks.

> > I suppose a difficulty with per-language URLs is that a given option
> > has a 
> > single OPT_* enumeration value; the diagnostic calls don't say
> > whether 
> > it's being used from a front end or the middle end (though maybe
> > there's 
> > not much overlap between the two) - though some option handling
> > already 
> > distinguishes based on what language is being compiled (e.g. 
> > LangEnabledBy).  For per-architecture URLs you don't have this issue 
> > because only one architecture is built into GCC at a time.

The urlifier does "know" the lang_mask, so I had a go at using that.

Here's an updated version of the patch kit.

In this one, rather than just parsing 'gcc/Option-Index.html',
regenerate-opt-urls.py now parses all of:

 'gcc/Option-Index.html' for generic options
 'gdc/Option-Index.html' with language='D'
 'gfortran/Option-Index.html' with language='Fortran'

As before, it generates .opt.urls files, but now they can contain
multiple directives: as well as the UrlSuffix directive, each
language now has a LangUrlSuffix_NAME_OF_LANG directive, such as
  LangUrlSuffix_D
and
  LangUrlSuffix_Fortran

I initially tried to have a single LangUrlSuffix(LANG, URL) directive,
but having them as a family of separate directives turned out to be much
easier to handle from the .awk scripts.

Hence the optionlist contains options for all configured targets
and for all frontends, and can contain multiple URLs.  For example,
Walloca has:

Walloca UrlSuffix(gcc/Warning-Options.html#index-Walloca) LangUrlSuffix_D(gdc/Warnings.html#index-Walloca)

The options-urls.cc generated by options-urls-cc-gen.awk previously
contained a big array of string literals.  To handle lang-specific
options, options-urls.cc now contains a generated switch statement
of the form:

const char *
get_opt_url_suffix (int option_index, unsigned lang_mask)
{
  switch (option_index)
    {
     [...snip...]
     case OPT_Walloca:
       if (lang_mask & CL_D)
         return "gdc/Warnings.html#index-Walloca";
       return "gcc/Warning-Options.html#index-Walloca";
     [...snip...]
  return nullptr;
}

I tested this via compiling .c and .d files with gcc and gdc to generate
a -Walloca warning.  Each compiler emitted the "correct" documentation
URL for -Walloca, in that gcc's URL pointed at the generic documentation,
and gdc's at the D-specific documentation.  There is also automated
selftest coverage for lang-specific URLs (in
selftest::test_get_option_url_suffix).

As before, with:

   warning: ‘#pragma pack’ has no effect with ‘-fpack-struct’ - ignored [-Wpragmas]

it successfully provides the user with three URLs (in a suitable
terminal): the documentation of the pragma, the -fpack-struct option,
and the -Wpragmas warning, respectively.

Successfully bootstrapped & regrtested on x86_64-pc-linux-gnu, with all
languages enabled, using gawk-5.0.1

I also smoke-tested the build with the patch on a minimal configuration
with just --enable-languages=c,c++ (and, in particular, with D *not*
enabled), and it built successfully.


How is this looking for trunk?

Thanks
Dave


David Malcolm (4):
  options: add gcc/regenerate-opt-urls.py
  Add generated .opt.urls files
  opts: add logic to generate options-urls.cc
  options: wire up options-urls.cc into gcc_urlifier

 gcc/Makefile.in                              |   29 +-
 gcc/ada/gcc-interface/lang.opt.urls          |   30 +
 gcc/analyzer/analyzer.opt.urls               |  206 ++
 gcc/c-family/c.opt.urls                      | 1409 ++++++++++++++
 gcc/common.opt.urls                          | 1832 ++++++++++++++++++
 gcc/config/aarch64/aarch64.opt.urls          |   84 +
 gcc/config/alpha/alpha.opt.urls              |   76 +
 gcc/config/alpha/elf.opt.urls                |    2 +
 gcc/config/arc/arc-tables.opt.urls           |    2 +
 gcc/config/arc/arc.opt.urls                  |  260 +++
 gcc/config/arm/arm-tables.opt.urls           |    2 +
 gcc/config/arm/arm.opt.urls                  |  149 ++
 gcc/config/arm/vxworks.opt.urls              |    2 +
 gcc/config/avr/avr.opt.urls                  |   71 +
 gcc/config/bfin/bfin.opt.urls                |   61 +
 gcc/config/bpf/bpf.opt.urls                  |   35 +
 gcc/config/c6x/c6x-tables.opt.urls           |    2 +
 gcc/config/c6x/c6x.opt.urls                  |   18 +
 gcc/config/cris/cris.opt.urls                |   65 +
 gcc/config/cris/elf.opt.urls                 |    8 +
 gcc/config/csky/csky.opt.urls                |  104 +
 gcc/config/csky/csky_tables.opt.urls         |    2 +
 gcc/config/darwin.opt.urls                   |  224 +++
 gcc/config/dragonfly.opt.urls                |    9 +
 gcc/config/epiphany/epiphany.opt.urls        |   52 +
 gcc/config/fr30/fr30.opt.urls                |    8 +
 gcc/config/freebsd.opt.urls                  |    9 +
 gcc/config/frv/frv.opt.urls                  |  111 ++
 gcc/config/ft32/ft32.opt.urls                |   20 +
 gcc/config/fused-madd.opt.urls               |    4 +
 gcc/config/g.opt.urls                        |    5 +
 gcc/config/gcn/gcn.opt.urls                  |   23 +
 gcc/config/gnu-user.opt.urls                 |    9 +
 gcc/config/h8300/h8300.opt.urls              |   29 +
 gcc/config/hpux11.opt.urls                   |    6 +
 gcc/config/i386/cygming.opt.urls             |   30 +
 gcc/config/i386/cygwin.opt.urls              |    6 +
 gcc/config/i386/djgpp.opt.urls               |    2 +
 gcc/config/i386/i386.opt.urls                |  602 ++++++
 gcc/config/i386/mingw-w64.opt.urls           |    5 +
 gcc/config/i386/mingw.opt.urls               |   12 +
 gcc/config/i386/nto.opt.urls                 |    5 +
 gcc/config/ia64/ia64.opt.urls                |  122 ++
 gcc/config/ia64/ilp32.opt.urls               |    8 +
 gcc/config/ia64/vms.opt.urls                 |    2 +
 gcc/config/iq2000/iq2000.opt.urls            |   14 +
 gcc/config/linux-android.opt.urls            |   11 +
 gcc/config/linux.opt.urls                    |   14 +
 gcc/config/lm32/lm32.opt.urls                |   14 +
 gcc/config/loongarch/loongarch.opt.urls      |   60 +
 gcc/config/lynx.opt.urls                     |    5 +
 gcc/config/m32c/m32c.opt.urls                |    8 +
 gcc/config/m32r/m32r.opt.urls                |   27 +
 gcc/config/m68k/ieee.opt.urls                |    4 +
 gcc/config/m68k/m68k-tables.opt.urls         |    2 +
 gcc/config/m68k/m68k.opt.urls                |  107 +
 gcc/config/m68k/uclinux.opt.urls             |    2 +
 gcc/config/mcore/mcore.opt.urls              |   38 +
 gcc/config/microblaze/microblaze.opt.urls    |   59 +
 gcc/config/mips/mips-tables.opt.urls         |    2 +
 gcc/config/mips/mips.opt.urls                |  269 +++
 gcc/config/mips/sde.opt.urls                 |    2 +
 gcc/config/mmix/mmix.opt.urls                |   44 +
 gcc/config/mn10300/mn10300.opt.urls          |   32 +
 gcc/config/moxie/moxie.opt.urls              |   14 +
 gcc/config/msp430/msp430.opt.urls            |   53 +
 gcc/config/nds32/nds32-elf.opt.urls          |    5 +
 gcc/config/nds32/nds32-linux.opt.urls        |    5 +
 gcc/config/nds32/nds32.opt.urls              |   57 +
 gcc/config/netbsd-elf.opt.urls               |    5 +
 gcc/config/netbsd.opt.urls                   |    6 +
 gcc/config/nios2/elf.opt.urls                |   14 +
 gcc/config/nios2/nios2.opt.urls              |   50 +
 gcc/config/nvptx/nvptx-gen.opt.urls          |    2 +
 gcc/config/nvptx/nvptx.opt.urls              |   29 +
 gcc/config/openbsd.opt.urls                  |    6 +
 gcc/config/or1k/elf.opt.urls                 |    8 +
 gcc/config/or1k/or1k.opt.urls                |   46 +
 gcc/config/pa/pa-hpux.opt.urls               |   11 +
 gcc/config/pa/pa-hpux1010.opt.urls           |    2 +
 gcc/config/pa/pa-hpux1111.opt.urls           |    2 +
 gcc/config/pa/pa-hpux1131.opt.urls           |    2 +
 gcc/config/pa/pa.opt.urls                    |   71 +
 gcc/config/pa/pa64-hpux.opt.urls             |    8 +
 gcc/config/pdp11/pdp11.opt.urls              |   41 +
 gcc/config/pru/pru.opt.urls                  |   17 +
 gcc/config/riscv/riscv.opt.urls              |   88 +
 gcc/config/rl78/rl78.opt.urls                |   31 +
 gcc/config/rpath.opt.urls                    |    2 +
 gcc/config/rs6000/476.opt.urls               |    2 +
 gcc/config/rs6000/aix64.opt.urls             |   23 +
 gcc/config/rs6000/darwin.opt.urls            |   14 +
 gcc/config/rs6000/linux64.opt.urls           |    4 +
 gcc/config/rs6000/rs6000-tables.opt.urls     |    2 +
 gcc/config/rs6000/rs6000.opt.urls            |  214 ++
 gcc/config/rs6000/sysv4.opt.urls             |   87 +
 gcc/config/rtems.opt.urls                    |    6 +
 gcc/config/rx/elf.opt.urls                   |   14 +
 gcc/config/rx/rx.opt.urls                    |   54 +
 gcc/config/s390/s390.opt.urls                |   92 +
 gcc/config/s390/tpf.opt.urls                 |    8 +
 gcc/config/sh/sh.opt.urls                    |  174 ++
 gcc/config/sh/superh.opt.urls                |    4 +
 gcc/config/sol2.opt.urls                     |   21 +
 gcc/config/sparc/long-double-switch.opt.urls |    6 +
 gcc/config/sparc/sparc.opt.urls              |  108 ++
 gcc/config/stormy16/stormy16.opt.urls        |    5 +
 gcc/config/v850/v850.opt.urls                |   60 +
 gcc/config/vax/elf.opt.urls                  |    2 +
 gcc/config/vax/vax.opt.urls                  |   10 +
 gcc/config/visium/visium.opt.urls            |   29 +
 gcc/config/vms/vms.opt.urls                  |    8 +
 gcc/config/vxworks-smp.opt.urls              |    5 +
 gcc/config/vxworks.opt.urls                  |   20 +
 gcc/config/xtensa/elf.opt.urls               |    5 +
 gcc/config/xtensa/uclinux.opt.urls           |    2 +
 gcc/config/xtensa/xtensa.opt.urls            |   37 +
 gcc/d/lang.opt.urls                          |  223 +++
 gcc/diagnostic.h                             |    6 +-
 gcc/doc/options.texi                         |   26 +
 gcc/doc/sourcebuild.texi                     |    4 +
 gcc/fortran/lang.opt.urls                    |  161 ++
 gcc/gcc-urlifier.cc                          |  106 +-
 gcc/gcc-urlifier.def                         |    2 -
 gcc/gcc-urlifier.h                           |    2 +-
 gcc/gcc.cc                                   |    2 +-
 gcc/go/lang.opt.urls                         |   17 +
 gcc/lto/lang.opt.urls                        |    8 +
 gcc/m2/lang.opt.urls                         |  115 ++
 gcc/opt-functions.awk                        |   15 +
 gcc/options-urls-cc-gen.awk                  |  105 +
 gcc/opts-diagnostic.h                        |    3 +-
 gcc/opts.cc                                  |   95 +-
 gcc/opts.h                                   |    7 +
 gcc/params.opt.urls                          |    2 +
 gcc/regenerate-opt-urls.py                   |  408 ++++
 gcc/rust/lang.opt.urls                       |   29 +
 gcc/testsuite/lib/gcc-dg.exp                 |    6 +
 gcc/toplev.cc                                |    5 +-
 139 files changed, 9338 insertions(+), 66 deletions(-)
 create mode 100644 gcc/ada/gcc-interface/lang.opt.urls
 create mode 100644 gcc/analyzer/analyzer.opt.urls
 create mode 100644 gcc/c-family/c.opt.urls
 create mode 100644 gcc/common.opt.urls
 create mode 100644 gcc/config/aarch64/aarch64.opt.urls
 create mode 100644 gcc/config/alpha/alpha.opt.urls
 create mode 100644 gcc/config/alpha/elf.opt.urls
 create mode 100644 gcc/config/arc/arc-tables.opt.urls
 create mode 100644 gcc/config/arc/arc.opt.urls
 create mode 100644 gcc/config/arm/arm-tables.opt.urls
 create mode 100644 gcc/config/arm/arm.opt.urls
 create mode 100644 gcc/config/arm/vxworks.opt.urls
 create mode 100644 gcc/config/avr/avr.opt.urls
 create mode 100644 gcc/config/bfin/bfin.opt.urls
 create mode 100644 gcc/config/bpf/bpf.opt.urls
 create mode 100644 gcc/config/c6x/c6x-tables.opt.urls
 create mode 100644 gcc/config/c6x/c6x.opt.urls
 create mode 100644 gcc/config/cris/cris.opt.urls
 create mode 100644 gcc/config/cris/elf.opt.urls
 create mode 100644 gcc/config/csky/csky.opt.urls
 create mode 100644 gcc/config/csky/csky_tables.opt.urls
 create mode 100644 gcc/config/darwin.opt.urls
 create mode 100644 gcc/config/dragonfly.opt.urls
 create mode 100644 gcc/config/epiphany/epiphany.opt.urls
 create mode 100644 gcc/config/fr30/fr30.opt.urls
 create mode 100644 gcc/config/freebsd.opt.urls
 create mode 100644 gcc/config/frv/frv.opt.urls
 create mode 100644 gcc/config/ft32/ft32.opt.urls
 create mode 100644 gcc/config/fused-madd.opt.urls
 create mode 100644 gcc/config/g.opt.urls
 create mode 100644 gcc/config/gcn/gcn.opt.urls
 create mode 100644 gcc/config/gnu-user.opt.urls
 create mode 100644 gcc/config/h8300/h8300.opt.urls
 create mode 100644 gcc/config/hpux11.opt.urls
 create mode 100644 gcc/config/i386/cygming.opt.urls
 create mode 100644 gcc/config/i386/cygwin.opt.urls
 create mode 100644 gcc/config/i386/djgpp.opt.urls
 create mode 100644 gcc/config/i386/i386.opt.urls
 create mode 100644 gcc/config/i386/mingw-w64.opt.urls
 create mode 100644 gcc/config/i386/mingw.opt.urls
 create mode 100644 gcc/config/i386/nto.opt.urls
 create mode 100644 gcc/config/ia64/ia64.opt.urls
 create mode 100644 gcc/config/ia64/ilp32.opt.urls
 create mode 100644 gcc/config/ia64/vms.opt.urls
 create mode 100644 gcc/config/iq2000/iq2000.opt.urls
 create mode 100644 gcc/config/linux-android.opt.urls
 create mode 100644 gcc/config/linux.opt.urls
 create mode 100644 gcc/config/lm32/lm32.opt.urls
 create mode 100644 gcc/config/loongarch/loongarch.opt.urls
 create mode 100644 gcc/config/lynx.opt.urls
 create mode 100644 gcc/config/m32c/m32c.opt.urls
 create mode 100644 gcc/config/m32r/m32r.opt.urls
 create mode 100644 gcc/config/m68k/ieee.opt.urls
 create mode 100644 gcc/config/m68k/m68k-tables.opt.urls
 create mode 100644 gcc/config/m68k/m68k.opt.urls
 create mode 100644 gcc/config/m68k/uclinux.opt.urls
 create mode 100644 gcc/config/mcore/mcore.opt.urls
 create mode 100644 gcc/config/microblaze/microblaze.opt.urls
 create mode 100644 gcc/config/mips/mips-tables.opt.urls
 create mode 100644 gcc/config/mips/mips.opt.urls
 create mode 100644 gcc/config/mips/sde.opt.urls
 create mode 100644 gcc/config/mmix/mmix.opt.urls
 create mode 100644 gcc/config/mn10300/mn10300.opt.urls
 create mode 100644 gcc/config/moxie/moxie.opt.urls
 create mode 100644 gcc/config/msp430/msp430.opt.urls
 create mode 100644 gcc/config/nds32/nds32-elf.opt.urls
 create mode 100644 gcc/config/nds32/nds32-linux.opt.urls
 create mode 100644 gcc/config/nds32/nds32.opt.urls
 create mode 100644 gcc/config/netbsd-elf.opt.urls
 create mode 100644 gcc/config/netbsd.opt.urls
 create mode 100644 gcc/config/nios2/elf.opt.urls
 create mode 100644 gcc/config/nios2/nios2.opt.urls
 create mode 100644 gcc/config/nvptx/nvptx-gen.opt.urls
 create mode 100644 gcc/config/nvptx/nvptx.opt.urls
 create mode 100644 gcc/config/openbsd.opt.urls
 create mode 100644 gcc/config/or1k/elf.opt.urls
 create mode 100644 gcc/config/or1k/or1k.opt.urls
 create mode 100644 gcc/config/pa/pa-hpux.opt.urls
 create mode 100644 gcc/config/pa/pa-hpux1010.opt.urls
 create mode 100644 gcc/config/pa/pa-hpux1111.opt.urls
 create mode 100644 gcc/config/pa/pa-hpux1131.opt.urls
 create mode 100644 gcc/config/pa/pa.opt.urls
 create mode 100644 gcc/config/pa/pa64-hpux.opt.urls
 create mode 100644 gcc/config/pdp11/pdp11.opt.urls
 create mode 100644 gcc/config/pru/pru.opt.urls
 create mode 100644 gcc/config/riscv/riscv.opt.urls
 create mode 100644 gcc/config/rl78/rl78.opt.urls
 create mode 100644 gcc/config/rpath.opt.urls
 create mode 100644 gcc/config/rs6000/476.opt.urls
 create mode 100644 gcc/config/rs6000/aix64.opt.urls
 create mode 100644 gcc/config/rs6000/darwin.opt.urls
 create mode 100644 gcc/config/rs6000/linux64.opt.urls
 create mode 100644 gcc/config/rs6000/rs6000-tables.opt.urls
 create mode 100644 gcc/config/rs6000/rs6000.opt.urls
 create mode 100644 gcc/config/rs6000/sysv4.opt.urls
 create mode 100644 gcc/config/rtems.opt.urls
 create mode 100644 gcc/config/rx/elf.opt.urls
 create mode 100644 gcc/config/rx/rx.opt.urls
 create mode 100644 gcc/config/s390/s390.opt.urls
 create mode 100644 gcc/config/s390/tpf.opt.urls
 create mode 100644 gcc/config/sh/sh.opt.urls
 create mode 100644 gcc/config/sh/superh.opt.urls
 create mode 100644 gcc/config/sol2.opt.urls
 create mode 100644 gcc/config/sparc/long-double-switch.opt.urls
 create mode 100644 gcc/config/sparc/sparc.opt.urls
 create mode 100644 gcc/config/stormy16/stormy16.opt.urls
 create mode 100644 gcc/config/v850/v850.opt.urls
 create mode 100644 gcc/config/vax/elf.opt.urls
 create mode 100644 gcc/config/vax/vax.opt.urls
 create mode 100644 gcc/config/visium/visium.opt.urls
 create mode 100644 gcc/config/vms/vms.opt.urls
 create mode 100644 gcc/config/vxworks-smp.opt.urls
 create mode 100644 gcc/config/vxworks.opt.urls
 create mode 100644 gcc/config/xtensa/elf.opt.urls
 create mode 100644 gcc/config/xtensa/uclinux.opt.urls
 create mode 100644 gcc/config/xtensa/xtensa.opt.urls
 create mode 100644 gcc/d/lang.opt.urls
 create mode 100644 gcc/fortran/lang.opt.urls
 create mode 100644 gcc/go/lang.opt.urls
 create mode 100644 gcc/lto/lang.opt.urls
 create mode 100644 gcc/m2/lang.opt.urls
 create mode 100644 gcc/options-urls-cc-gen.awk
 create mode 100644 gcc/params.opt.urls
 create mode 100755 gcc/regenerate-opt-urls.py
 create mode 100644 gcc/rust/lang.opt.urls

-- 
2.26.3


^ permalink raw reply	[flat|nested] 47+ messages in thread

* [PATCH 1/4] options: add gcc/regenerate-opt-urls.py
  2023-11-16 14:28       ` [PATCH 0/4] v2 of " David Malcolm
@ 2023-11-16 14:28         ` David Malcolm
  2023-11-16 14:28         ` [PATCH 2/4] Add generated .opt.urls files David Malcolm
                           ` (3 subsequent siblings)
  4 siblings, 0 replies; 47+ messages in thread
From: David Malcolm @ 2023-11-16 14:28 UTC (permalink / raw)
  To: Joseph Myers; +Cc: gcc-patches, David Malcolm

Changed in v2:
- added convenience targets to Makefile for regenerating the .opt.urls
  files, and for running unit tests for the generation code
- parse gdc and gfortran documentation, and create LangUrlSuffix_{lang}
directives for language-specific URLs.
- add documentation to sourcebuild.texi

gcc/ChangeLog:
	* Makefile.in (regenerate-opt-urls): New target.
	(regenerate-opt-urls-unit-test): New target.
	* doc/options.texi (Option properties): Add UrlSuffix and
	description of regenerate-opt-urls.py.  Add LangUrlSuffix_*.
	* doc/sourcebuild.texi (Anatomy of a Target Back End): Add
	reference to regenerate-opt-urls.py's TARGET_SPECIFIC_PAGES.
	* regenerate-opt-urls.py: New file.
---
 gcc/Makefile.in            |  11 +
 gcc/doc/options.texi       |  26 +++
 gcc/doc/sourcebuild.texi   |   4 +
 gcc/regenerate-opt-urls.py | 408 +++++++++++++++++++++++++++++++++++++
 4 files changed, 449 insertions(+)
 create mode 100755 gcc/regenerate-opt-urls.py

diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index 7f2df4b5925f..f3b79b8a2663 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -3606,6 +3606,17 @@ $(build_htmldir)/gccinstall/index.html: $(TEXI_GCCINSTALL_FILES)
 	DESTDIR=$(@D) \
 	$(SHELL) $(srcdir)/doc/install.texi2html
 
+# Regenerate the .opt.urls files from the generated html, and from the .opt
+# files.
+.PHONY: regenerate-opt-urls
+regenerate-opt-urls:
+	$(srcdir)/regenerate-opt-urls.py $(build_htmldir) $(shell dirname $(srcdir))
+
+# Run the unit tests for regenerate-opt-urls.py
+.PHONY: regenerate-opt-urls-unit-test
+regenerate-opt-urls-unit-test:
+	$(srcdir)/regenerate-opt-urls.py $(build_htmldir) $(shell dirname $(srcdir)) --unit-test
+
 MANFILES = doc/gcov.1 doc/cpp.1 doc/gcc.1 doc/gfdl.7 doc/gpl.7 \
            doc/fsf-funding.7 doc/gcov-tool.1 doc/gcov-dump.1 \
 	   $(if $(filter yes,@enable_lto@),doc/lto-dump.1)
diff --git a/gcc/doc/options.texi b/gcc/doc/options.texi
index 715f0a1479c7..37d7ecc1477d 100644
--- a/gcc/doc/options.texi
+++ b/gcc/doc/options.texi
@@ -597,4 +597,30 @@ This warning option corresponds to @code{cpplib.h} warning reason code
 @var{CPP_W_Enum}.  This should only be used for warning options of the
 C-family front-ends.
 
+@item UrlSuffix(@var{url_suffix})
+Adjacent to each human-written @code{.opt} file in the source tree is
+a corresponding file with a @code{.opt.urls} extension.  These files
+contain @code{UrlSuffix} directives giving the ending part of the URL
+for the documentation of the option, such as:
+
+@smallexample
+Wabi-tag
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wabi-tag)
+@end smallexample
+
+These URL suffixes are relative to @code{DOCUMENTATION_ROOT_URL}.
+
+There files are generated from the @code{.opt} files and the generated
+HTML documentation by @code{regenerate-opt-urls.py}, and should be
+regenerated when adding new options, via manually invoking
+@code{make regenerate-opt-urls}.
+
+@item LangUrlSuffix_@var{lang}(@var{url_suffix})
+In addition to @code{UrlSuffix} directives, @code{regenerate-opt-urls.py}
+can generate language-specific URLs, such as:
+
+@smallexample
+LangUrlSuffix_D(gdc/Code-Generation.html#index-MMD)
+@end smallexample
+
 @end table
diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi
index eaa75f00f5ce..f51db17a086c 100644
--- a/gcc/doc/sourcebuild.texi
+++ b/gcc/doc/sourcebuild.texi
@@ -813,6 +813,10 @@ options supported by this target (@pxref{Run-time Target, , Run-time
 Target Specification}).  This means both entries in the summary table
 of options and details of the individual options.
 @item
+An entry in @file{gcc/regenerate-opt-urls.py}'s TARGET_SPECIFIC_PAGES
+dictionary mapping from target-specific HTML documentation pages
+to the target specific source directory.
+@item
 Documentation in @file{gcc/doc/extend.texi} for any target-specific
 attributes supported (@pxref{Target Attributes, , Defining
 target-specific uses of @code{__attribute__}}), including where the
diff --git a/gcc/regenerate-opt-urls.py b/gcc/regenerate-opt-urls.py
new file mode 100755
index 000000000000..b123fc57c7b9
--- /dev/null
+++ b/gcc/regenerate-opt-urls.py
@@ -0,0 +1,408 @@
+#!/usr/bin/env python3
+
+# Copyright (C) 2023 Free Software Foundation, Inc.
+#
+# Script to regenerate FOO.opt.urls files for each FOO.opt in the
+# source tree.
+#
+# 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/>.  */
+
+DESCRIPTION = """
+Parses the generated HTML (from "make html") to locate anchors
+for options, then parses the .opt files within the source tree,
+and generates a .opt.urls in the source tree for each .opt file,
+giving URLs for each option, where it can.
+
+Usage (from build/gcc subdirectory):
+  ../../src/gcc/regenerate-opt-urls.py HTML/gcc-14.0.0/ ../../src
+
+To run unit tests:
+  ../../src/gcc/regenerate-opt-urls.py HTML/gcc-14.0.0/ ../../src --unit-test
+"""
+
+import argparse
+import json
+import os
+from pathlib import Path
+from pprint import pprint
+import sys
+import re
+import unittest
+
+def canonicalize_option_name(option_name):
+    if option_name.endswith('='):
+        option_name = option_name[0:-1]
+    return option_name
+
+
+def canonicalize_url_suffix(url_suffix):
+    """
+    Various options have anchors for both the positive and
+    negative form.  For example -Wcpp has both:
+      'gcc/Warning-Options.html#index-Wno-cpp'
+      'gcc/Warning-Options.html#index-Wcpp'
+
+    Return a canonicalized version of the url_suffix that
+    strips out any "no-" prefixes, for use in deduplication.
+    Note that the resulting url suffix might not correspond to
+    an actual anchor in the HTML.
+    """
+    url_suffix = re.sub('index-Wno-', 'index-W', url_suffix)
+    url_suffix = re.sub('index-fno-', 'index-f', url_suffix)
+    url_suffix = re.sub('_003d$', '', url_suffix)
+    url_suffix = re.sub('-([0-9]+)$', '', url_suffix)
+    return url_suffix
+
+
+class Index:
+    def __init__(self):
+        # Map from language (or None) to map from option name to set of URL suffixes
+        self.entries = {}
+
+    def add_entry(self, matched_text, url_suffix, language, verbose=False):
+        # TODO: use language
+        if 'Attributes.html' in url_suffix:
+            return
+        matched_text = canonicalize_option_name(matched_text)
+        if language not in self.entries:
+            self.entries[language] = {}
+        per_lang_entries = self.entries[language]
+        if matched_text in per_lang_entries:
+            # Partition by canonicalized url_suffixes; add the
+            # first url_suffix in each such partition.
+            c_new = canonicalize_url_suffix(url_suffix)
+            for entry in per_lang_entries[matched_text]:
+                c_entry = canonicalize_url_suffix(entry)
+                if c_new == c_entry:
+                    return
+            per_lang_entries[matched_text].add(url_suffix)
+        else:
+            per_lang_entries[matched_text] = set([url_suffix])
+
+    def get_languages(self):
+        return self.entries.keys()
+
+    def get_url_suffixes(self, text, language=None):
+        text = canonicalize_option_name(text)
+        per_lang_entries = self.entries.get(language)
+        if per_lang_entries:
+            return per_lang_entries.get(text)
+
+    def parse_option_index(self, input_filename, language, verbose=False):
+        with open(input_filename) as f:
+            dirname = input_filename.parent.name
+            for line in f:
+                self.parse_html_line_option_index(dirname, line, language, verbose)
+
+    def parse_html_line_option_index(self, dirname, line, language, verbose=False):
+        if verbose:
+            print(repr(line))
+
+        # Update for this in the GCC website's bin/preprocess process_html_file:
+        #   | sed -e 's/_002d/-/g' -e 's/_002a/*/g' \
+        line = line.replace('_002d', '-')
+        line = line.replace('_002a', '*')
+
+        # e.g. <a href="Optimize-Options.html#index-fmodulo_002dsched"><code>fmodulo-sched</code></a>
+        m = re.search(r'<a href="([\S]+)"><code>([\S]+)</code></a>', line)
+        if not m:
+            return
+        if verbose:
+            print(m.groups())
+        url_suffix, index_text = m.groups()
+        #print(f'{url_suffix=} {index_text=}')
+        option = '-' + index_text
+
+        # Strip off "no-" prefixes from options
+        if option[:5] == '-Wno-':
+            option = '-W' + option[5:]
+        if option[:5] == '-fno-':
+            option = '-f' + option[5:]
+
+        url_suffix = dirname + '/' + url_suffix
+        self.add_entry(option, url_suffix, language, verbose)
+
+
+class TestParsingIndex(unittest.TestCase):
+    def test_parse_line(self):
+        index = Index()
+        index.parse_html_line_option_index('gcc',
+                                           '<a href="Optimize-Options.html#index-fmodulo_002dsched"><code>fmodulo-sched</code></a>',
+                                           None)
+        self.assertEqual(index.get_url_suffixes('-fmodulo-sched'),
+                         {'gcc/Optimize-Options.html#index-fmodulo-sched'})
+
+    def test_negated_flag(self):
+        index = Index()
+        index.parse_html_line_option_index('gcc',
+                                           '<tr><td></td><td valign="top"><a href="Static-Analyzer-Options.html#index-fno_002danalyzer"><code>fno-analyzer</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Static-Analyzer-Options.html">Static Analyzer Options</a></td></tr>\n',
+                                           None)
+        self.assertEqual(index.get_url_suffixes('-fno-analyzer'), None)
+        self.assertEqual(index.get_url_suffixes('-fanalyzer'),
+                         {'gcc/Static-Analyzer-Options.html#index-fno-analyzer'})
+
+    def test_negated_warning(self):
+        index = Index()
+        index.parse_html_line_option_index('gcc',
+                                           '<tr><td></td><td valign="top"><a href="Warning-Options.html#index-Wno_002dalloca"><code>Wno-alloca</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Warning-Options.html">Warning Options</a></td></tr>\n',
+                                           None)
+        self.assertEqual(index.get_url_suffixes('-Wno-alloca'),
+                         None)
+        self.assertEqual(index.get_url_suffixes('-Walloca'),
+                         {'gcc/Warning-Options.html#index-Wno-alloca'})
+
+    def test_parse_option_index(self):
+        index = Index()
+        index.parse_option_index(INPUT_HTML_PATH / 'gcc/Option-Index.html',
+                                 language=None)
+        self.assertEqual(index.get_url_suffixes('-fmodulo-sched'),
+                         {'gcc/Optimize-Options.html#index-fmodulo-sched'})
+        self.assertEqual(index.get_url_suffixes('-O'),
+                         {'gcc/Optimize-Options.html#index-O'})
+        self.assertEqual(index.get_url_suffixes('-O0'),
+                         {'gcc/Optimize-Options.html#index-O0'})
+        self.assertEqual(index.get_url_suffixes('-Wframe-larger-than='),
+                         {'gcc/Warning-Options.html#index-Wframe-larger-than_003d'})
+
+        # Check an option with duplicates: '-march'
+        # The url_suffixes will be of the form
+        #  'gcc/HPPA-Options.html#index-march-5',
+        #  'gcc/LoongArch-Options.html#index-march-7',
+        # etc, where the trailing number is, unfortunately, likely to
+        # change from release to release.
+        # Replace them with 'NN' for the purpose of this test:
+        em_arch_url_suffixes = [re.sub('(-[0-9]+)', '-NN', s)
+                                for s in index.get_url_suffixes('-march')]
+        if 0:
+            print(em_arch_url_suffixes)
+        self.assertIn('gcc/ARM-Options.html#index-march-NN', em_arch_url_suffixes)
+        self.assertIn('gcc/x86-Options.html#index-march-NN', em_arch_url_suffixes)
+
+        self.assertEqual(index.get_url_suffixes('-Wcpp'),
+                         {'gcc/Warning-Options.html#index-Wcpp'})
+
+        self.assertNotEqual(index.get_url_suffixes('-march'), None)
+        self.assertNotEqual(index.get_url_suffixes('-march='), None)
+
+class OptFile:
+    def __init__(self, opt_path, rel_path):
+        """
+        Parse a .opt file.  Similar to opt-gather.awk.
+        """
+        self.rel_path = rel_path
+        assert rel_path.startswith('gcc')
+        # self.filename = os.path.basename(path)
+        self.records = []
+        with open(opt_path) as f:
+            flag = 0
+            for line in f:
+                #print(repr(line))
+                if re.match(r'[ \t]*(;|$)', line):
+                    flag = 0
+                else:
+                    if flag == 0:
+                        self.records.append([line])
+                        flag = 1
+                    else:
+                        self.records[-1].append(line)
+
+# Mapping from target-specific page to subdirectory containing .opt files
+# documented on that page.
+
+TARGET_SPECIFIC_PAGES = {
+    'gcc/AArch64-Options.html' : 'gcc/config/aarch64/',
+    'gcc/AMD-GCN-Options.html' : 'gcc/config/gcn/',
+    'gcc/ARC-Options.html' : 'gcc/config/arc/',
+    'gcc/ARC-Options.html' : 'gcc/config/arc/',
+    'gcc/ARM-Options.html' : 'gcc/config/arm/',
+    'gcc/AVR-Options.html' : 'gcc/config/avr/',
+    'gcc/Adapteva-Epiphany-Options.html' : 'gcc/config/epiphany/',
+    'gcc/Blackfin-Options.html' : 'gcc/config/bfin/',
+    'gcc/C-SKY-Options.html' : 'gcc/config/csky/',
+    'gcc/C6X-Options.html' : 'gcc/config/c6x/',
+    'gcc/CRIS-Options.html' : 'gcc/config/cris/',
+    'gcc/DEC-Alpha-Options.html' : 'gcc/config/alpha/',
+    'gcc/FR30-Options.html' : 'gcc/config/fr30/',
+    'gcc/FRV-Options.html' : 'gcc/config/frv/',
+    'gcc/FT32-Options.html' : 'gcc/config/ft32/',
+    'gcc/H8_002f300-Options.html' : 'gcc/config/h8300/',
+    'gcc/HPPA-Options.html' : 'gcc/config/pa/',
+    'gcc/IA-64-Options.html' : 'gcc/config/ia64/',
+    'gcc/LoongArch-Options.html' : 'gcc/config/loongarch/',
+    'gcc/M32C-Options.html' : 'gcc/config/m32c/',
+    'gcc/M32R_002fD-Options.html' : 'gcc/config/m32r/',
+    'gcc/M680x0-Options.html' : 'gcc/config/m68k/',
+    'gcc/MCore-Options.html' : 'gcc/config/mcore/',
+    'gcc/MIPS-Options.html' : 'gcc/config/mips/',
+    'gcc/MMIX-Options.html' : 'gcc/config/mmix/',
+    'gcc/MN10300-Options.html' : 'gcc/config/mn10300/',
+    'gcc/MSP430-Options.html' : 'gcc/config/msp430/',
+    'gcc/MicroBlaze-Options.html' : 'gcc/config/microblaze/',
+    'gcc/Moxie-Options.html' : 'gcc/config/moxie/',
+    'gcc/NDS32-Options.html' : 'gcc/config/nds32/',
+    'gcc/Nios-II-Options.html' : 'gcc/config/nios2/',
+    'gcc/Nvidia-PTX-Options.html' : 'gcc/config/nvptx/',
+    'gcc/OpenRISC-Options.html' : 'gcc/config/or1k/',
+    'gcc/PDP-11-Options.html' : 'gcc/config/pdp11',
+    'gcc/PRU-Options.html' : 'gcc/config/pru/',
+    'gcc/RISC-V-Options.html' : 'gcc/config/riscv/',
+    'gcc/RL78-Options.html' : 'gcc/config/rl78/',
+    'gcc/RS_002f6000-and-PowerPC-Options.html' : 'gcc/config/rs6000/',
+    'gcc/RX-Options.html' : 'gcc/config/rx/',
+    'gcc/SH-Options.html' : 'gcc/config/sh/',
+    'gcc/SPARC-Options.html' : 'gcc/config/sparc/',
+    'gcc/S_002f390-and-zSeries-Options.html' : 'gcc/config/s390',
+    'gcc/V850-Options.html' : 'gcc/config/vax/',
+    'gcc/VAX-Options.html' : 'gcc/config/v850/',
+    'gcc/Visium-Options.html' : 'gcc/config/visium/',
+    'gcc/Xstormy16-Options.html' : 'gcc/config/stormy16/',
+    'gcc/Xtensa-Options.html' : 'gcc/config/xtensa/',
+    'gcc/eBPF-Options.html' : 'gcc/config/bpf/',
+    'gcc/x86-Options.html' : 'gcc/config/i386/',
+}
+
+def target_specific(url_suffix):
+    for page_prefix, subdir in TARGET_SPECIFIC_PAGES.items():
+        if url_suffix.startswith(page_prefix):
+            return subdir
+
+def filter_urlsuffixes_for_optfile(optfile, url_suffixes):
+    """
+    Filter out target-specific options for the wrong target.
+    """
+    result = set()
+    for url_suffix in url_suffixes:
+        subdir = target_specific(url_suffix)
+        if subdir:
+            if 0:
+                print(f'{optfile.rel_path=}')
+                print(f'{url_suffixes=}')
+                print(f'{subdir=}')
+            if not optfile.rel_path.startswith(subdir):
+                # Skip this
+                continue
+        result.add(url_suffix)
+    return result
+
+
+class TestFiltering(unittest.TestCase):
+    def test_target_specific(self):
+        self.assertEqual(target_specific('gcc/Preprocessor-Options.html#index-A'),
+                         None)
+        self.assertEqual(target_specific('gcc/MMIX-Options.html#index-mknuthdiv'),
+                         'gcc/config/mmix/')
+
+    def test_filter(self):
+        s = {'gcc/MIPS-Options.html#index-munaligned-access-1',
+             'gcc/ARM-Options.html#index-munaligned-access'}
+        arm_optfile = OptFile('/dev/null', 'gcc/config/arm/arm.opt')
+        mips_optfile = OptFile('/dev/null', 'gcc/config/mips/mips.opt')
+        self.assertEqual(
+            filter_urlsuffixes_for_optfile(arm_optfile, s),
+            {'gcc/ARM-Options.html#index-munaligned-access'})
+        self.assertEqual(
+            filter_urlsuffixes_for_optfile(mips_optfile, s),
+            {'gcc/MIPS-Options.html#index-munaligned-access-1'})
+
+
+def write_url_file(index, optfile, dstfile):
+    dstfile.write('; Autogenerated by regenerate-opt-urls.py from %s'
+                  ' and generated HTML\n\n'
+                  % optfile.rel_path)
+    for record in optfile.records:
+        opt = '-' + record[0].strip()
+        if 0:
+            dstfile.write('; entry for %s\n' % record)
+            dstfile.write('; opt=%r\n' % opt)
+        url_suffixes_per_lang = {}
+        count = 0
+        for lang in index.get_languages():
+            this_lang_suffixes = index.get_url_suffixes(opt, language=lang)
+            url_suffixes_per_lang[lang] = this_lang_suffixes
+            if this_lang_suffixes:
+                count += len(this_lang_suffixes)
+        if not count:
+            continue
+        directives = []
+        for lang in index.get_languages():
+            if lang:
+                directive = 'LangUrlSuffix_%s for %r' % (lang, opt[1:])
+            else:
+                directive = 'UrlSuffix for %r' % opt[1:]
+            url_suffixes = url_suffixes_per_lang[lang]
+            if 0:
+                dstfile.write('; lang=%r url_suffixes=%r\n' % (lang, url_suffixes))
+            if url_suffixes:
+                url_suffixes = filter_urlsuffixes_for_optfile(optfile, url_suffixes)
+                if url_suffixes:
+                    if len(url_suffixes) == 1:
+                        if lang:
+                            directives.append('LangUrlSuffix_%s(%s)' % (lang, list(url_suffixes)[0]))
+                        else:
+                            directives.append('UrlSuffix(%s)' % list(url_suffixes)[0])
+                    else:
+                        dstfile.write('; skipping %s due to multiple URLs:\n'
+                                      % directive)
+                        for u in sorted(url_suffixes):
+                            dstfile.write(';   duplicate: %r\n' % u)
+                else:
+                    dstfile.write('; skipping %s due to finding no URLs\n'
+                                  % directive)
+        if directives:
+            dstfile.write('%s\n' % opt[1:])
+            dstfile.write(' '.join(directives) + '\n')
+        dstfile.write('\n')
+
+
+def main(args):
+    index = Index()
+    index.parse_option_index(args.base_html_dir / 'gcc/Option-Index.html',
+                             language=None)
+    index.parse_option_index(args.base_html_dir / 'gdc/Option-Index.html',
+                             language='D')
+    index.parse_option_index(args.base_html_dir / 'gfortran/Option-Index.html',
+                             language='Fortran')
+    if 0:
+        pprint(index.entries)
+    for root, dirs, files in os.walk(args.src_gcc_dir):
+        for f in files:
+            if f.endswith('.opt'):
+                opt_path = os.path.join(root, f)
+                rel_path = os.path.relpath(opt_path, args.src_gcc_dir)
+                optfile = OptFile(opt_path, rel_path)
+                if 0:
+                    pprint(optfile.path)
+                    pprint(optfile.records)
+                dstname = f + '.urls'
+                urlfile = os.path.join(root, dstname)
+                with open(urlfile, 'w') as dstfile:
+                    write_url_file(index, optfile, dstfile)
+
+
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser(description=DESCRIPTION,
+                                     formatter_class=argparse.RawDescriptionHelpFormatter)
+    parser.add_argument('base_html_dir', type=Path)
+    parser.add_argument('src_gcc_dir', type=Path)
+    parser.add_argument('--unit-test', action='store_true')
+    args = parser.parse_args()
+
+    if args.unit_test:
+        INPUT_HTML_PATH = args.base_html_dir
+        unittest.main(argv=[sys.argv[0], '-v'])
+    else:
+        main(args)
-- 
2.26.3


^ permalink raw reply	[flat|nested] 47+ messages in thread

* [PATCH 2/4] Add generated .opt.urls files
  2023-11-16 14:28       ` [PATCH 0/4] v2 of " David Malcolm
  2023-11-16 14:28         ` [PATCH 1/4] options: add gcc/regenerate-opt-urls.py David Malcolm
@ 2023-11-16 14:28         ` David Malcolm
  2023-11-16 14:28         ` [PATCH 3/4] opts: add logic to generate options-urls.cc David Malcolm
                           ` (2 subsequent siblings)
  4 siblings, 0 replies; 47+ messages in thread
From: David Malcolm @ 2023-11-16 14:28 UTC (permalink / raw)
  To: Joseph Myers; +Cc: gcc-patches, David Malcolm

Changed in v2: the files now contain some lang-specific URLs.

gcc/ada/ChangeLog:
	* gcc-interface/lang.opt.urls: New file, autogenerated by
	regenerate-opt-urls.py.

gcc/analyzer/ChangeLog:
	* analyzer.opt.urls: New file, autogenerated by
	regenerate-opt-urls.py.

gcc/c-family/ChangeLog:
	* c.opt.urls: New file, autogenerated by regenerate-opt-urls.py.

gcc/ChangeLog:
	* common.opt.urls: New file, autogenerated by
	regenerate-opt-urls.py.
	* config/aarch64/aarch64.opt.urls: Likewise.
	* config/alpha/alpha.opt.urls: Likewise.
	* config/alpha/elf.opt.urls: Likewise.
	* config/arc/arc-tables.opt.urls: Likewise.
	* config/arc/arc.opt.urls: Likewise.
	* config/arm/arm-tables.opt.urls: Likewise.
	* config/arm/arm.opt.urls: Likewise.
	* config/arm/vxworks.opt.urls: Likewise.
	* config/avr/avr.opt.urls: Likewise.
	* config/bpf/bpf.opt.urls: Likewise.
	* config/c6x/c6x-tables.opt.urls: Likewise.
	* config/c6x/c6x.opt.urls: Likewise.
	* config/cris/cris.opt.urls: Likewise.
	* config/cris/elf.opt.urls: Likewise.
	* config/csky/csky.opt.urls: Likewise.
	* config/csky/csky_tables.opt.urls: Likewise.
	* config/darwin.opt.urls: Likewise.
	* config/dragonfly.opt.urls: Likewise.
	* config/epiphany/epiphany.opt.urls: Likewise.
	* config/fr30/fr30.opt.urls: Likewise.
	* config/freebsd.opt.urls: Likewise.
	* config/frv/frv.opt.urls: Likewise.
	* config/ft32/ft32.opt.urls: Likewise.
	* config/fused-madd.opt.urls: Likewise.
	* config/g.opt.urls: Likewise.
	* config/gcn/gcn.opt.urls: Likewise.
	* config/gnu-user.opt.urls: Likewise.
	* config/h8300/h8300.opt.urls: Likewise.
	* config/hpux11.opt.urls: Likewise.
	* config/i386/cygming.opt.urls: Likewise.
	* config/i386/cygwin.opt.urls: Likewise.
	* config/i386/djgpp.opt.urls: Likewise.
	* config/i386/i386.opt.urls: Likewise.
	* config/i386/mingw-w64.opt.urls: Likewise.
	* config/i386/mingw.opt.urls: Likewise.
	* config/i386/nto.opt.urls: Likewise.
	* config/ia64/ia64.opt.urls: Likewise.
	* config/ia64/ilp32.opt.urls: Likewise.
	* config/ia64/vms.opt.urls: Likewise.
	* config/iq2000/iq2000.opt.urls: Likewise.
	* config/linux-android.opt.urls: Likewise.
	* config/linux.opt.urls: Likewise.
	* config/lm32/lm32.opt.urls: Likewise.
	* config/loongarch/loongarch.opt.urls: Likewise.
	* config/lynx.opt.urls: Likewise.
	* config/m32c/m32c.opt.urls: Likewise.
	* config/m32r/m32r.opt.urls: Likewise.
	* config/m68k/ieee.opt.urls: Likewise.
	* config/m68k/m68k-tables.opt.urls: Likewise.
	* config/m68k/m68k.opt.urls: Likewise.
	* config/m68k/uclinux.opt.urls: Likewise.
	* config/mcore/mcore.opt.urls: Likewise.
	* config/microblaze/microblaze.opt.urls: Likewise.
	* config/mips/mips-tables.opt.urls: Likewise.
	* config/mips/mips.opt.urls: Likewise.
	* config/mips/sde.opt.urls: Likewise.
	* config/mmix/mmix.opt.urls: Likewise.
	* config/mn10300/mn10300.opt.urls: Likewise.
	* config/moxie/moxie.opt.urls: Likewise.
	* config/msp430/msp430.opt.urls: Likewise.
	* config/nds32/nds32-elf.opt.urls: Likewise.
	* config/nds32/nds32-linux.opt.urls: Likewise.
	* config/nds32/nds32.opt.urls: Likewise.
	* config/netbsd-elf.opt.urls: Likewise.
	* config/netbsd.opt.urls: Likewise.
	* config/nios2/elf.opt.urls: Likewise.
	* config/nios2/nios2.opt.urls: Likewise.
	* config/nvptx/nvptx-gen.opt.urls: Likewise.
	* config/nvptx/nvptx.opt.urls: Likewise.
	* config/openbsd.opt.urls: Likewise.
	* config/or1k/elf.opt.urls: Likewise.
	* config/or1k/or1k.opt.urls: Likewise.
	* config/pa/pa-hpux.opt.urls: Likewise.
	* config/pa/pa-hpux1010.opt.urls: Likewise.
	* config/pa/pa-hpux1111.opt.urls: Likewise.
	* config/pa/pa-hpux1131.opt.urls: Likewise.
	* config/pa/pa.opt.urls: Likewise.
	* config/pa/pa64-hpux.opt.urls: Likewise.
	* config/pdp11/pdp11.opt.urls: Likewise.
	* config/pru/pru.opt.urls: Likewise.
	* config/riscv/riscv.opt.urls: Likewise.
	* config/rl78/rl78.opt.urls: Likewise.
	* config/rpath.opt.urls: Likewise.
	* config/rs6000/476.opt.urls: Likewise.
	* config/rs6000/aix64.opt.urls: Likewise.
	* config/rs6000/darwin.opt.urls: Likewise.
	* config/rs6000/linux64.opt.urls: Likewise.
	* config/rs6000/rs6000-tables.opt.urls: Likewise.
	* config/rs6000/rs6000.opt.urls: Likewise.
	* config/rs6000/sysv4.opt.urls: Likewise.
	* config/rtems.opt.urls: Likewise.
	* config/rx/elf.opt.urls: Likewise.
	* config/rx/rx.opt.urls: Likewise.
	* config/s390/s390.opt.urls: Likewise.
	* config/s390/tpf.opt.urls: Likewise.
	* config/sh/sh.opt.urls: Likewise.
	* config/sh/superh.opt.urls: Likewise.
	* config/sol2.opt.urls: Likewise.
	* config/sparc/long-double-switch.opt.urls: Likewise.
	* config/sparc/sparc.opt.urls: Likewise.
	* config/stormy16/stormy16.opt.urls: Likewise.
	* config/v850/v850.opt.urls: Likewise.
	* config/vax/elf.opt.urls: Likewise.
	* config/vax/vax.opt.urls: Likewise.
	* config/visium/visium.opt.urls: Likewise.
	* config/vms/vms.opt.urls: Likewise.
	* config/vxworks-smp.opt.urls: Likewise.
	* config/vxworks.opt.urls: Likewise.
	* config/xtensa/elf.opt.urls: Likewise.
	* config/xtensa/uclinux.opt.urls: Likewise.
	* config/xtensa/xtensa.opt.urls: Likewise.

gcc/d/ChangeLog:
	* lang.opt.urls: New file, autogenerated by
	regenerate-opt-urls.py.

gcc/fortran/ChangeLog:
	* lang.opt.urls: New file, autogenerated by
	regenerate-opt-urls.py.

gcc/go/ChangeLog:
	* lang.opt.urls: New file, autogenerated by
	regenerate-opt-urls.py.

gcc/lto/ChangeLog:
	* lang.opt.urls: New file, autogenerated by
	regenerate-opt-urls.py.

gcc/m2/ChangeLog:
	* lang.opt.urls: New file, autogenerated by
	regenerate-opt-urls.py.

gcc/ChangeLog:
	* params.opt.urls: New file, autogenerated by
	regenerate-opt-urls.py.

gcc/rust/ChangeLog:
	* lang.opt.urls: New file, autogenerated by
	regenerate-opt-urls.py.
---
 gcc/ada/gcc-interface/lang.opt.urls          |   30 +
 gcc/analyzer/analyzer.opt.urls               |  206 ++
 gcc/c-family/c.opt.urls                      | 1409 ++++++++++++++
 gcc/common.opt.urls                          | 1832 ++++++++++++++++++
 gcc/config/aarch64/aarch64.opt.urls          |   84 +
 gcc/config/alpha/alpha.opt.urls              |   76 +
 gcc/config/alpha/elf.opt.urls                |    2 +
 gcc/config/arc/arc-tables.opt.urls           |    2 +
 gcc/config/arc/arc.opt.urls                  |  260 +++
 gcc/config/arm/arm-tables.opt.urls           |    2 +
 gcc/config/arm/arm.opt.urls                  |  149 ++
 gcc/config/arm/vxworks.opt.urls              |    2 +
 gcc/config/avr/avr.opt.urls                  |   71 +
 gcc/config/bfin/bfin.opt.urls                |   61 +
 gcc/config/bpf/bpf.opt.urls                  |   35 +
 gcc/config/c6x/c6x-tables.opt.urls           |    2 +
 gcc/config/c6x/c6x.opt.urls                  |   18 +
 gcc/config/cris/cris.opt.urls                |   65 +
 gcc/config/cris/elf.opt.urls                 |    8 +
 gcc/config/csky/csky.opt.urls                |  104 +
 gcc/config/csky/csky_tables.opt.urls         |    2 +
 gcc/config/darwin.opt.urls                   |  224 +++
 gcc/config/dragonfly.opt.urls                |    9 +
 gcc/config/epiphany/epiphany.opt.urls        |   52 +
 gcc/config/fr30/fr30.opt.urls                |    8 +
 gcc/config/freebsd.opt.urls                  |    9 +
 gcc/config/frv/frv.opt.urls                  |  111 ++
 gcc/config/ft32/ft32.opt.urls                |   20 +
 gcc/config/fused-madd.opt.urls               |    4 +
 gcc/config/g.opt.urls                        |    5 +
 gcc/config/gcn/gcn.opt.urls                  |   23 +
 gcc/config/gnu-user.opt.urls                 |    9 +
 gcc/config/h8300/h8300.opt.urls              |   29 +
 gcc/config/hpux11.opt.urls                   |    6 +
 gcc/config/i386/cygming.opt.urls             |   30 +
 gcc/config/i386/cygwin.opt.urls              |    6 +
 gcc/config/i386/djgpp.opt.urls               |    2 +
 gcc/config/i386/i386.opt.urls                |  602 ++++++
 gcc/config/i386/mingw-w64.opt.urls           |    5 +
 gcc/config/i386/mingw.opt.urls               |   12 +
 gcc/config/i386/nto.opt.urls                 |    5 +
 gcc/config/ia64/ia64.opt.urls                |  122 ++
 gcc/config/ia64/ilp32.opt.urls               |    8 +
 gcc/config/ia64/vms.opt.urls                 |    2 +
 gcc/config/iq2000/iq2000.opt.urls            |   14 +
 gcc/config/linux-android.opt.urls            |   11 +
 gcc/config/linux.opt.urls                    |   14 +
 gcc/config/lm32/lm32.opt.urls                |   14 +
 gcc/config/loongarch/loongarch.opt.urls      |   60 +
 gcc/config/lynx.opt.urls                     |    5 +
 gcc/config/m32c/m32c.opt.urls                |    8 +
 gcc/config/m32r/m32r.opt.urls                |   27 +
 gcc/config/m68k/ieee.opt.urls                |    4 +
 gcc/config/m68k/m68k-tables.opt.urls         |    2 +
 gcc/config/m68k/m68k.opt.urls                |  107 +
 gcc/config/m68k/uclinux.opt.urls             |    2 +
 gcc/config/mcore/mcore.opt.urls              |   38 +
 gcc/config/microblaze/microblaze.opt.urls    |   59 +
 gcc/config/mips/mips-tables.opt.urls         |    2 +
 gcc/config/mips/mips.opt.urls                |  269 +++
 gcc/config/mips/sde.opt.urls                 |    2 +
 gcc/config/mmix/mmix.opt.urls                |   44 +
 gcc/config/mn10300/mn10300.opt.urls          |   32 +
 gcc/config/moxie/moxie.opt.urls              |   14 +
 gcc/config/msp430/msp430.opt.urls            |   53 +
 gcc/config/nds32/nds32-elf.opt.urls          |    5 +
 gcc/config/nds32/nds32-linux.opt.urls        |    5 +
 gcc/config/nds32/nds32.opt.urls              |   57 +
 gcc/config/netbsd-elf.opt.urls               |    5 +
 gcc/config/netbsd.opt.urls                   |    6 +
 gcc/config/nios2/elf.opt.urls                |   14 +
 gcc/config/nios2/nios2.opt.urls              |   50 +
 gcc/config/nvptx/nvptx-gen.opt.urls          |    2 +
 gcc/config/nvptx/nvptx.opt.urls              |   29 +
 gcc/config/openbsd.opt.urls                  |    6 +
 gcc/config/or1k/elf.opt.urls                 |    8 +
 gcc/config/or1k/or1k.opt.urls                |   46 +
 gcc/config/pa/pa-hpux.opt.urls               |   11 +
 gcc/config/pa/pa-hpux1010.opt.urls           |    2 +
 gcc/config/pa/pa-hpux1111.opt.urls           |    2 +
 gcc/config/pa/pa-hpux1131.opt.urls           |    2 +
 gcc/config/pa/pa.opt.urls                    |   71 +
 gcc/config/pa/pa64-hpux.opt.urls             |    8 +
 gcc/config/pdp11/pdp11.opt.urls              |   41 +
 gcc/config/pru/pru.opt.urls                  |   17 +
 gcc/config/riscv/riscv.opt.urls              |   88 +
 gcc/config/rl78/rl78.opt.urls                |   31 +
 gcc/config/rpath.opt.urls                    |    2 +
 gcc/config/rs6000/476.opt.urls               |    2 +
 gcc/config/rs6000/aix64.opt.urls             |   23 +
 gcc/config/rs6000/darwin.opt.urls            |   14 +
 gcc/config/rs6000/linux64.opt.urls           |    4 +
 gcc/config/rs6000/rs6000-tables.opt.urls     |    2 +
 gcc/config/rs6000/rs6000.opt.urls            |  214 ++
 gcc/config/rs6000/sysv4.opt.urls             |   87 +
 gcc/config/rtems.opt.urls                    |    6 +
 gcc/config/rx/elf.opt.urls                   |   14 +
 gcc/config/rx/rx.opt.urls                    |   54 +
 gcc/config/s390/s390.opt.urls                |   92 +
 gcc/config/s390/tpf.opt.urls                 |    8 +
 gcc/config/sh/sh.opt.urls                    |  174 ++
 gcc/config/sh/superh.opt.urls                |    4 +
 gcc/config/sol2.opt.urls                     |   21 +
 gcc/config/sparc/long-double-switch.opt.urls |    6 +
 gcc/config/sparc/sparc.opt.urls              |  108 ++
 gcc/config/stormy16/stormy16.opt.urls        |    5 +
 gcc/config/v850/v850.opt.urls                |   60 +
 gcc/config/vax/elf.opt.urls                  |    2 +
 gcc/config/vax/vax.opt.urls                  |   10 +
 gcc/config/visium/visium.opt.urls            |   29 +
 gcc/config/vms/vms.opt.urls                  |    8 +
 gcc/config/vxworks-smp.opt.urls              |    5 +
 gcc/config/vxworks.opt.urls                  |   20 +
 gcc/config/xtensa/elf.opt.urls               |    5 +
 gcc/config/xtensa/uclinux.opt.urls           |    2 +
 gcc/config/xtensa/xtensa.opt.urls            |   37 +
 gcc/d/lang.opt.urls                          |  223 +++
 gcc/fortran/lang.opt.urls                    |  161 ++
 gcc/go/lang.opt.urls                         |   17 +
 gcc/lto/lang.opt.urls                        |    8 +
 gcc/m2/lang.opt.urls                         |  115 ++
 gcc/params.opt.urls                          |    2 +
 gcc/rust/lang.opt.urls                       |   29 +
 123 files changed, 8583 insertions(+)
 create mode 100644 gcc/ada/gcc-interface/lang.opt.urls
 create mode 100644 gcc/analyzer/analyzer.opt.urls
 create mode 100644 gcc/c-family/c.opt.urls
 create mode 100644 gcc/common.opt.urls
 create mode 100644 gcc/config/aarch64/aarch64.opt.urls
 create mode 100644 gcc/config/alpha/alpha.opt.urls
 create mode 100644 gcc/config/alpha/elf.opt.urls
 create mode 100644 gcc/config/arc/arc-tables.opt.urls
 create mode 100644 gcc/config/arc/arc.opt.urls
 create mode 100644 gcc/config/arm/arm-tables.opt.urls
 create mode 100644 gcc/config/arm/arm.opt.urls
 create mode 100644 gcc/config/arm/vxworks.opt.urls
 create mode 100644 gcc/config/avr/avr.opt.urls
 create mode 100644 gcc/config/bfin/bfin.opt.urls
 create mode 100644 gcc/config/bpf/bpf.opt.urls
 create mode 100644 gcc/config/c6x/c6x-tables.opt.urls
 create mode 100644 gcc/config/c6x/c6x.opt.urls
 create mode 100644 gcc/config/cris/cris.opt.urls
 create mode 100644 gcc/config/cris/elf.opt.urls
 create mode 100644 gcc/config/csky/csky.opt.urls
 create mode 100644 gcc/config/csky/csky_tables.opt.urls
 create mode 100644 gcc/config/darwin.opt.urls
 create mode 100644 gcc/config/dragonfly.opt.urls
 create mode 100644 gcc/config/epiphany/epiphany.opt.urls
 create mode 100644 gcc/config/fr30/fr30.opt.urls
 create mode 100644 gcc/config/freebsd.opt.urls
 create mode 100644 gcc/config/frv/frv.opt.urls
 create mode 100644 gcc/config/ft32/ft32.opt.urls
 create mode 100644 gcc/config/fused-madd.opt.urls
 create mode 100644 gcc/config/g.opt.urls
 create mode 100644 gcc/config/gcn/gcn.opt.urls
 create mode 100644 gcc/config/gnu-user.opt.urls
 create mode 100644 gcc/config/h8300/h8300.opt.urls
 create mode 100644 gcc/config/hpux11.opt.urls
 create mode 100644 gcc/config/i386/cygming.opt.urls
 create mode 100644 gcc/config/i386/cygwin.opt.urls
 create mode 100644 gcc/config/i386/djgpp.opt.urls
 create mode 100644 gcc/config/i386/i386.opt.urls
 create mode 100644 gcc/config/i386/mingw-w64.opt.urls
 create mode 100644 gcc/config/i386/mingw.opt.urls
 create mode 100644 gcc/config/i386/nto.opt.urls
 create mode 100644 gcc/config/ia64/ia64.opt.urls
 create mode 100644 gcc/config/ia64/ilp32.opt.urls
 create mode 100644 gcc/config/ia64/vms.opt.urls
 create mode 100644 gcc/config/iq2000/iq2000.opt.urls
 create mode 100644 gcc/config/linux-android.opt.urls
 create mode 100644 gcc/config/linux.opt.urls
 create mode 100644 gcc/config/lm32/lm32.opt.urls
 create mode 100644 gcc/config/loongarch/loongarch.opt.urls
 create mode 100644 gcc/config/lynx.opt.urls
 create mode 100644 gcc/config/m32c/m32c.opt.urls
 create mode 100644 gcc/config/m32r/m32r.opt.urls
 create mode 100644 gcc/config/m68k/ieee.opt.urls
 create mode 100644 gcc/config/m68k/m68k-tables.opt.urls
 create mode 100644 gcc/config/m68k/m68k.opt.urls
 create mode 100644 gcc/config/m68k/uclinux.opt.urls
 create mode 100644 gcc/config/mcore/mcore.opt.urls
 create mode 100644 gcc/config/microblaze/microblaze.opt.urls
 create mode 100644 gcc/config/mips/mips-tables.opt.urls
 create mode 100644 gcc/config/mips/mips.opt.urls
 create mode 100644 gcc/config/mips/sde.opt.urls
 create mode 100644 gcc/config/mmix/mmix.opt.urls
 create mode 100644 gcc/config/mn10300/mn10300.opt.urls
 create mode 100644 gcc/config/moxie/moxie.opt.urls
 create mode 100644 gcc/config/msp430/msp430.opt.urls
 create mode 100644 gcc/config/nds32/nds32-elf.opt.urls
 create mode 100644 gcc/config/nds32/nds32-linux.opt.urls
 create mode 100644 gcc/config/nds32/nds32.opt.urls
 create mode 100644 gcc/config/netbsd-elf.opt.urls
 create mode 100644 gcc/config/netbsd.opt.urls
 create mode 100644 gcc/config/nios2/elf.opt.urls
 create mode 100644 gcc/config/nios2/nios2.opt.urls
 create mode 100644 gcc/config/nvptx/nvptx-gen.opt.urls
 create mode 100644 gcc/config/nvptx/nvptx.opt.urls
 create mode 100644 gcc/config/openbsd.opt.urls
 create mode 100644 gcc/config/or1k/elf.opt.urls
 create mode 100644 gcc/config/or1k/or1k.opt.urls
 create mode 100644 gcc/config/pa/pa-hpux.opt.urls
 create mode 100644 gcc/config/pa/pa-hpux1010.opt.urls
 create mode 100644 gcc/config/pa/pa-hpux1111.opt.urls
 create mode 100644 gcc/config/pa/pa-hpux1131.opt.urls
 create mode 100644 gcc/config/pa/pa.opt.urls
 create mode 100644 gcc/config/pa/pa64-hpux.opt.urls
 create mode 100644 gcc/config/pdp11/pdp11.opt.urls
 create mode 100644 gcc/config/pru/pru.opt.urls
 create mode 100644 gcc/config/riscv/riscv.opt.urls
 create mode 100644 gcc/config/rl78/rl78.opt.urls
 create mode 100644 gcc/config/rpath.opt.urls
 create mode 100644 gcc/config/rs6000/476.opt.urls
 create mode 100644 gcc/config/rs6000/aix64.opt.urls
 create mode 100644 gcc/config/rs6000/darwin.opt.urls
 create mode 100644 gcc/config/rs6000/linux64.opt.urls
 create mode 100644 gcc/config/rs6000/rs6000-tables.opt.urls
 create mode 100644 gcc/config/rs6000/rs6000.opt.urls
 create mode 100644 gcc/config/rs6000/sysv4.opt.urls
 create mode 100644 gcc/config/rtems.opt.urls
 create mode 100644 gcc/config/rx/elf.opt.urls
 create mode 100644 gcc/config/rx/rx.opt.urls
 create mode 100644 gcc/config/s390/s390.opt.urls
 create mode 100644 gcc/config/s390/tpf.opt.urls
 create mode 100644 gcc/config/sh/sh.opt.urls
 create mode 100644 gcc/config/sh/superh.opt.urls
 create mode 100644 gcc/config/sol2.opt.urls
 create mode 100644 gcc/config/sparc/long-double-switch.opt.urls
 create mode 100644 gcc/config/sparc/sparc.opt.urls
 create mode 100644 gcc/config/stormy16/stormy16.opt.urls
 create mode 100644 gcc/config/v850/v850.opt.urls
 create mode 100644 gcc/config/vax/elf.opt.urls
 create mode 100644 gcc/config/vax/vax.opt.urls
 create mode 100644 gcc/config/visium/visium.opt.urls
 create mode 100644 gcc/config/vms/vms.opt.urls
 create mode 100644 gcc/config/vxworks-smp.opt.urls
 create mode 100644 gcc/config/vxworks.opt.urls
 create mode 100644 gcc/config/xtensa/elf.opt.urls
 create mode 100644 gcc/config/xtensa/uclinux.opt.urls
 create mode 100644 gcc/config/xtensa/xtensa.opt.urls
 create mode 100644 gcc/d/lang.opt.urls
 create mode 100644 gcc/fortran/lang.opt.urls
 create mode 100644 gcc/go/lang.opt.urls
 create mode 100644 gcc/lto/lang.opt.urls
 create mode 100644 gcc/m2/lang.opt.urls
 create mode 100644 gcc/params.opt.urls
 create mode 100644 gcc/rust/lang.opt.urls

diff --git a/gcc/ada/gcc-interface/lang.opt.urls b/gcc/ada/gcc-interface/lang.opt.urls
new file mode 100644
index 000000000000..7913bcb5558d
--- /dev/null
+++ b/gcc/ada/gcc-interface/lang.opt.urls
@@ -0,0 +1,30 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/ada/gcc-interface/lang.opt and generated HTML
+
+I
+UrlSuffix(gcc/Directory-Options.html#index-I) LangUrlSuffix_D(gdc/Directory-Options.html#index-I)
+
+; skipping UrlSuffix for 'Wall' due to multiple URLs:
+;   duplicate: 'gcc/Standard-Libraries.html#index-Wall-1'
+;   duplicate: 'gcc/Warning-Options.html#index-Wall'
+Wall
+LangUrlSuffix_D(gdc/Warnings.html#index-Wall)
+
+nostdinc
+UrlSuffix(gcc/Directory-Options.html#index-nostdinc) LangUrlSuffix_D(gdc/Directory-Options.html#index-nostdinc)
+
+nostdlib
+UrlSuffix(gcc/Link-Options.html#index-nostdlib)
+
+; skipping UrlSuffix for 'fshort-enums' due to multiple URLs:
+;   duplicate: 'gcc/Code-Gen-Options.html#index-fshort-enums'
+;   duplicate: 'gcc/Non-bugs.html#index-fshort-enums-3'
+;   duplicate: 'gcc/Structures-unions-enumerations-and-bit-fields-implementation.html#index-fshort-enums-1'
+
+; skipping UrlSuffix for 'fsigned-char' due to multiple URLs:
+;   duplicate: 'gcc/C-Dialect-Options.html#index-fsigned-char'
+;   duplicate: 'gcc/Characters-implementation.html#index-fsigned-char-1'
+
+; skipping UrlSuffix for 'funsigned-char' due to multiple URLs:
+;   duplicate: 'gcc/C-Dialect-Options.html#index-funsigned-char'
+;   duplicate: 'gcc/Characters-implementation.html#index-funsigned-char-1'
+
diff --git a/gcc/analyzer/analyzer.opt.urls b/gcc/analyzer/analyzer.opt.urls
new file mode 100644
index 000000000000..9f7d33ff434c
--- /dev/null
+++ b/gcc/analyzer/analyzer.opt.urls
@@ -0,0 +1,206 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/analyzer/analyzer.opt and generated HTML
+
+Wanalyzer-allocation-size
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-allocation-size)
+
+Wanalyzer-deref-before-check
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-deref-before-check)
+
+Wanalyzer-double-fclose
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-double-fclose)
+
+Wanalyzer-double-free
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-double-free)
+
+Wanalyzer-exposure-through-output-file
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-exposure-through-output-file)
+
+Wanalyzer-exposure-through-uninit-copy
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-exposure-through-uninit-copy)
+
+Wanalyzer-fd-access-mode-mismatch
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-access-mode-mismatch)
+
+Wanalyzer-fd-double-close
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-double-close)
+
+Wanalyzer-fd-leak
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-leak)
+
+Wanalyzer-fd-phase-mismatch
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-phase-mismatch)
+
+Wanalyzer-fd-type-mismatch
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-type-mismatch)
+
+Wanalyzer-fd-use-after-close
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-use-after-close)
+
+Wanalyzer-fd-use-without-check
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-use-without-check)
+
+Wanalyzer-file-leak
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-file-leak)
+
+Wanalyzer-free-of-non-heap
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-free-of-non-heap)
+
+Wanalyzer-imprecise-fp-arithmetic
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-imprecise-fp-arithmetic)
+
+Wanalyzer-infinite-recursion
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-infinite-recursion)
+
+Wanalyzer-jump-through-null
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-jump-through-null)
+
+Wanalyzer-malloc-leak
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-malloc-leak)
+
+Wanalyzer-mismatching-deallocation
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-mismatching-deallocation)
+
+Wanalyzer-out-of-bounds
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-out-of-bounds)
+
+Wanalyzer-overlapping-buffers
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-overlapping-buffers)
+
+Wanalyzer-possible-null-argument
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-possible-null-argument)
+
+Wanalyzer-possible-null-dereference
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-possible-null-dereference)
+
+Wanalyzer-unsafe-call-within-signal-handler
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-unsafe-call-within-signal-handler)
+
+Wanalyzer-null-argument
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-null-argument)
+
+Wanalyzer-null-dereference
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-null-dereference)
+
+Wanalyzer-putenv-of-auto-var
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-putenv-of-auto-var)
+
+Wanalyzer-shift-count-negative
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-shift-count-negative)
+
+Wanalyzer-shift-count-overflow
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-shift-count-overflow)
+
+Wanalyzer-stale-setjmp-buffer
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-stale-setjmp-buffer)
+
+Wanalyzer-tainted-allocation-size
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-allocation-size)
+
+Wanalyzer-tainted-array-index
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-array-index)
+
+Wanalyzer-tainted-assertion
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-assertion)
+
+Wanalyzer-tainted-divisor
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-divisor)
+
+Wanalyzer-tainted-offset
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-offset)
+
+Wanalyzer-tainted-size
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-size)
+
+Wanalyzer-use-after-free
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-use-after-free)
+
+Wanalyzer-use-of-pointer-in-stale-stack-frame
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-use-of-pointer-in-stale-stack-frame)
+
+Wanalyzer-va-arg-type-mismatch
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-va-arg-type-mismatch)
+
+Wanalyzer-va-list-exhausted
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-va-list-exhausted)
+
+Wanalyzer-va-list-leak
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-va-list-leak)
+
+Wanalyzer-va-list-use-after-va-end
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-va-list-use-after-va-end)
+
+Wanalyzer-write-to-const
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-const)
+
+Wanalyzer-write-to-string-literal
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-string-literal)
+
+Wanalyzer-use-of-uninitialized-value
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-use-of-uninitialized-value)
+
+Wanalyzer-too-complex
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-too-complex)
+
+fanalyzer-checker=
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-checker)
+
+fanalyzer-debug-text-art
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-debug-text-art)
+
+fanalyzer-fine-grained
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-fine-grained)
+
+fanalyzer-feasibility
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-feasibility)
+
+fanalyzer-show-duplicate-count
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-show-duplicate-count)
+
+fanalyzer-state-purge
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-state-purge)
+
+fanalyzer-state-merge
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-state-merge)
+
+fanalyzer-suppress-followups
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-suppress-followups)
+
+fanalyzer-transitivity
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-transitivity)
+
+fanalyzer-show-events-in-system-headers
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-show-events-in-system-headers)
+
+fanalyzer-call-summaries
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-call-summaries)
+
+fanalyzer-undo-inlining
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-undo-inlining)
+
+fdump-analyzer
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fdump-analyzer)
+
+fdump-analyzer-stderr
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fdump-analyzer-stderr)
+
+fdump-analyzer-callgraph
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fdump-analyzer-callgraph)
+
+fdump-analyzer-exploded-graph
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fdump-analyzer-exploded-graph)
+
+fdump-analyzer-exploded-paths
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fdump-analyzer-exploded-paths)
+
+fdump-analyzer-json
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fdump-analyzer-json)
+
+fdump-analyzer-state-purge
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fdump-analyzer-state-purge)
+
+fdump-analyzer-supergraph
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fdump-analyzer-supergraph)
+
+fdump-analyzer-untracked
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fdump-analyzer-untracked)
+
diff --git a/gcc/c-family/c.opt.urls b/gcc/c-family/c.opt.urls
new file mode 100644
index 000000000000..8fccbc77ea3a
--- /dev/null
+++ b/gcc/c-family/c.opt.urls
@@ -0,0 +1,1409 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/c-family/c.opt and generated HTML
+
+A
+UrlSuffix(gcc/Preprocessor-Options.html#index-A)
+
+C
+UrlSuffix(gcc/Preprocessor-Options.html#index-C)
+
+CC
+UrlSuffix(gcc/Preprocessor-Options.html#index-CC)
+
+D
+UrlSuffix(gcc/Preprocessor-Options.html#index-D-1)
+
+; skipping UrlSuffix for 'E' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-E-1'
+;   duplicate: 'gcc/Overall-Options.html#index-E'
+
+F
+UrlSuffix(gcc/Darwin-Options.html#index-F)
+
+fgimple
+UrlSuffix(gcc/C-Dialect-Options.html#index-fgimple)
+
+H
+UrlSuffix(gcc/Preprocessor-Options.html#index-H) LangUrlSuffix_D(gdc/Code-Generation.html#index-H)
+
+I
+UrlSuffix(gcc/Directory-Options.html#index-I) LangUrlSuffix_D(gdc/Directory-Options.html#index-I)
+
+M
+UrlSuffix(gcc/Preprocessor-Options.html#index-M) LangUrlSuffix_D(gdc/Code-Generation.html#index-M)
+
+MD
+UrlSuffix(gcc/Preprocessor-Options.html#index-MD) LangUrlSuffix_D(gdc/Code-Generation.html#index-MD)
+
+MF
+UrlSuffix(gcc/Preprocessor-Options.html#index-MF) LangUrlSuffix_D(gdc/Code-Generation.html#index-MF)
+
+MG
+UrlSuffix(gcc/Preprocessor-Options.html#index-MG) LangUrlSuffix_D(gdc/Code-Generation.html#index-MG)
+
+MM
+UrlSuffix(gcc/Preprocessor-Options.html#index-MM) LangUrlSuffix_D(gdc/Code-Generation.html#index-MM)
+
+MMD
+UrlSuffix(gcc/Preprocessor-Options.html#index-MMD) LangUrlSuffix_D(gdc/Code-Generation.html#index-MMD)
+
+Mno-modules
+UrlSuffix(gcc/Preprocessor-Options.html#index-Mno-modules)
+
+MP
+UrlSuffix(gcc/Preprocessor-Options.html#index-MP) LangUrlSuffix_D(gdc/Code-Generation.html#index-MP)
+
+MQ
+UrlSuffix(gcc/Preprocessor-Options.html#index-MQ) LangUrlSuffix_D(gdc/Code-Generation.html#index-MQ)
+
+MT
+UrlSuffix(gcc/Preprocessor-Options.html#index-MT) LangUrlSuffix_D(gdc/Code-Generation.html#index-MT)
+
+fdeps-format=
+UrlSuffix(gcc/C-Dialect-Options.html#index-fdeps-format)
+
+fdeps-file=
+UrlSuffix(gcc/C-Dialect-Options.html#index-fdeps-file)
+
+fdeps-target=
+UrlSuffix(gcc/C-Dialect-Options.html#index-fdeps-target)
+
+P
+UrlSuffix(gcc/Preprocessor-Options.html#index-P)
+
+U
+UrlSuffix(gcc/Preprocessor-Options.html#index-U)
+
+Wabi
+UrlSuffix(gcc/Warning-Options.html#index-Wabi)
+
+Wabi=
+UrlSuffix(gcc/Warning-Options.html#index-Wabi)
+
+Wabi-tag
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wabi-tag)
+
+Wabsolute-value
+UrlSuffix(gcc/Warning-Options.html#index-Wabsolute-value)
+
+Waddress
+UrlSuffix(gcc/Warning-Options.html#index-Waddress)
+
+Waligned-new
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Waligned-new)
+
+Waligned-new=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Waligned-new)
+
+; skipping UrlSuffix for 'Wall' due to multiple URLs:
+;   duplicate: 'gcc/Standard-Libraries.html#index-Wall-1'
+;   duplicate: 'gcc/Warning-Options.html#index-Wall'
+Wall
+LangUrlSuffix_D(gdc/Warnings.html#index-Wall)
+
+Walloca
+UrlSuffix(gcc/Warning-Options.html#index-Walloca) LangUrlSuffix_D(gdc/Warnings.html#index-Walloca)
+
+Walloc-size-larger-than=
+UrlSuffix(gcc/Warning-Options.html#index-Walloc-size-larger-than_003d)
+
+Walloc-zero
+UrlSuffix(gcc/Warning-Options.html#index-Walloc-zero)
+
+Walloca-larger-than=
+UrlSuffix(gcc/Warning-Options.html#index-Walloca-larger-than_003d) LangUrlSuffix_D(gdc/Warnings.html#index-Walloca-larger-than)
+
+Warray-bounds=
+UrlSuffix(gcc/Warning-Options.html#index-Warray-bounds)
+
+Warray-compare
+UrlSuffix(gcc/Warning-Options.html#index-Warray-compare)
+
+Warray-parameter
+UrlSuffix(gcc/Warning-Options.html#index-Wno-array-parameter)
+
+Warray-parameter=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-array-parameter)
+
+Wzero-length-bounds
+UrlSuffix(gcc/Warning-Options.html#index-Wzero-length-bounds)
+
+Wassign-intercept
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-Wassign-intercept)
+
+Wbad-function-cast
+UrlSuffix(gcc/Warning-Options.html#index-Wbad-function-cast)
+
+Wbidi-chars
+UrlSuffix(gcc/Warning-Options.html#index-Wbidi-chars)
+
+Wbidi-chars=
+UrlSuffix(gcc/Warning-Options.html#index-Wbidi-chars)
+
+Wbool-compare
+UrlSuffix(gcc/Warning-Options.html#index-Wbool-compare)
+
+Wbool-operation
+UrlSuffix(gcc/Warning-Options.html#index-Wbool-operation)
+
+Wframe-address
+UrlSuffix(gcc/Warning-Options.html#index-Wframe-address)
+
+Wbuiltin-declaration-mismatch
+UrlSuffix(gcc/Warning-Options.html#index-Wbuiltin-declaration-mismatch) LangUrlSuffix_D(gdc/Warnings.html#index-Wbuiltin-declaration-mismatch)
+
+Wbuiltin-macro-redefined
+UrlSuffix(gcc/Warning-Options.html#index-Wbuiltin-macro-redefined)
+
+Wc11-c2x-compat
+UrlSuffix(gcc/Warning-Options.html#index-Wc11-c2x-compat)
+
+Wc90-c99-compat
+UrlSuffix(gcc/Warning-Options.html#index-Wc90-c99-compat)
+
+Wc99-c11-compat
+UrlSuffix(gcc/Warning-Options.html#index-Wc99-c11-compat)
+
+Wc++-compat
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b-compat)
+
+Wc++11-compat
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b11-compat)
+
+Wc++14-compat
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b14-compat)
+
+Wc++17-compat
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b17-compat)
+
+Wc++20-compat
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b20-compat)
+
+Wc++11-extensions
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b11-extensions)
+
+Wc++14-extensions
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b14-extensions)
+
+Wc++17-extensions
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b17-extensions)
+
+Wc++20-extensions
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b20-extensions)
+
+Wc++23-extensions
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b23-extensions)
+
+Wcast-function-type
+UrlSuffix(gcc/Warning-Options.html#index-Wcast-function-type)
+
+Wcast-qual
+UrlSuffix(gcc/Warning-Options.html#index-Wcast-qual)
+
+Wcatch-value
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wcatch-value)
+
+Wcatch-value=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wcatch-value)
+
+Wchar-subscripts
+UrlSuffix(gcc/Warning-Options.html#index-Wchar-subscripts)
+
+Wclobbered
+UrlSuffix(gcc/Warning-Options.html#index-Wclobbered)
+
+Wcomma-subscript
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wcomma-subscript)
+
+Wcomment
+UrlSuffix(gcc/Warning-Options.html#index-Wcomment)
+
+Wcomments
+UrlSuffix(gcc/Warning-Options.html#index-Wcomments)
+
+Wconditionally-supported
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wconditionally-supported)
+
+Wconversion
+UrlSuffix(gcc/Warning-Options.html#index-Wconversion)
+
+Wconversion-null
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wconversion-null)
+
+Wcpp
+UrlSuffix(gcc/Warning-Options.html#index-Wcpp)
+
+Wctad-maybe-unsupported
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wctad-maybe-unsupported)
+
+Wctor-dtor-privacy
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wctor-dtor-privacy)
+
+Wdangling-else
+UrlSuffix(gcc/Warning-Options.html#index-Wdangling-else)
+
+Wdangling-pointer
+UrlSuffix(gcc/Warning-Options.html#index-Wdangling-pointer)
+
+Wdangling-pointer=
+UrlSuffix(gcc/Warning-Options.html#index-Wdangling-pointer)
+
+Wdangling-reference
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wdangling-reference)
+
+Wdate-time
+UrlSuffix(gcc/Warning-Options.html#index-Wdate-time)
+
+Wdeclaration-after-statement
+UrlSuffix(gcc/Warning-Options.html#index-Wdeclaration-after-statement)
+
+Wdelete-incomplete
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wdelete-incomplete)
+
+Wdelete-non-virtual-dtor
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wdelete-non-virtual-dtor)
+
+Wdeprecated
+UrlSuffix(gcc/Warning-Options.html#index-Wdeprecated) LangUrlSuffix_D(gdc/Warnings.html#index-Wdeprecated)
+
+Wdeprecated-copy
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-copy)
+
+Wdeprecated-enum-enum-conversion
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-enum-enum-conversion)
+
+Wdeprecated-enum-float-conversion
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-enum-float-conversion)
+
+Wdesignated-init
+UrlSuffix(gcc/Warning-Options.html#index-Wdesignated-init)
+
+Wdiscarded-array-qualifiers
+UrlSuffix(gcc/Warning-Options.html#index-Wdiscarded-array-qualifiers)
+
+Wdiscarded-qualifiers
+UrlSuffix(gcc/Warning-Options.html#index-Wdiscarded-qualifiers)
+
+Wdiv-by-zero
+UrlSuffix(gcc/Warning-Options.html#index-Wdiv-by-zero)
+
+Wduplicated-branches
+UrlSuffix(gcc/Warning-Options.html#index-Wduplicated-branches)
+
+Wduplicated-cond
+UrlSuffix(gcc/Warning-Options.html#index-Wduplicated-cond)
+
+Weffc++
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Weffc_002b_002b)
+
+Wempty-body
+UrlSuffix(gcc/Warning-Options.html#index-Wempty-body)
+
+Wendif-labels
+UrlSuffix(gcc/Warning-Options.html#index-Wendif-labels)
+
+Wenum-compare
+UrlSuffix(gcc/Warning-Options.html#index-Wenum-compare)
+
+Wenum-conversion
+UrlSuffix(gcc/Warning-Options.html#index-Wenum-conversion)
+
+Wenum-int-mismatch
+UrlSuffix(gcc/Warning-Options.html#index-Wenum-int-mismatch)
+
+Werror
+UrlSuffix(gcc/Warning-Options.html#index-Werror) LangUrlSuffix_D(gdc/Warnings.html#index-Werror)
+
+Wexceptions
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wexceptions)
+
+Wextra
+UrlSuffix(gcc/Warning-Options.html#index-Wextra) LangUrlSuffix_D(gdc/Warnings.html#index-Wextra)
+
+Wextra-semi
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wextra-semi)
+
+Wfloat-conversion
+UrlSuffix(gcc/Warning-Options.html#index-Wfloat-conversion)
+
+Wfloat-equal
+UrlSuffix(gcc/Warning-Options.html#index-Wfloat-equal)
+
+Wformat
+UrlSuffix(gcc/Warning-Options.html#index-Wformat)
+
+Wformat-contains-nul
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-contains-nul)
+
+Wformat-extra-args
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-extra-args)
+
+Wformat-nonliteral
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-nonliteral)
+
+Wformat-overflow
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-overflow)
+
+Wformat-security
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-security)
+
+Wformat-signedness
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-signedness)
+
+Wformat-truncation
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-truncation)
+
+Wformat-y2k
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-y2k)
+
+Wformat-zero-length
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-zero-length)
+
+Wformat=
+UrlSuffix(gcc/Warning-Options.html#index-Wformat)
+
+Wformat-overflow=
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-overflow)
+
+Wformat-truncation=
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-truncation)
+
+Wflex-array-member-not-at-end
+UrlSuffix(gcc/Warning-Options.html#index-Wflex-array-member-not-at-end)
+
+Wif-not-aligned
+UrlSuffix(gcc/Warning-Options.html#index-Wif-not-aligned)
+
+Wignored-qualifiers
+UrlSuffix(gcc/Warning-Options.html#index-Wignored-qualifiers)
+
+Wignored-attributes
+UrlSuffix(gcc/Warning-Options.html#index-Wignored-attributes)
+
+Winaccessible-base
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Winaccessible-base)
+
+Wincompatible-pointer-types
+UrlSuffix(gcc/Warning-Options.html#index-Wincompatible-pointer-types)
+
+Winfinite-recursion
+UrlSuffix(gcc/Warning-Options.html#index-Winfinite-recursion)
+
+Waddress-of-packed-member
+UrlSuffix(gcc/Warning-Options.html#index-Waddress-of-packed-member)
+
+Winit-self
+UrlSuffix(gcc/Warning-Options.html#index-Winit-self)
+
+Winit-list-lifetime
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Winit-list-lifetime)
+
+Winterference-size
+UrlSuffix(gcc/Warning-Options.html#index-Winterference-size)
+
+Wimplicit
+UrlSuffix(gcc/Warning-Options.html#index-Wimplicit)
+
+Wimplicit-fallthrough=
+UrlSuffix(gcc/Warning-Options.html#index-Wimplicit-fallthrough)
+
+Wdouble-promotion
+UrlSuffix(gcc/Warning-Options.html#index-Wdouble-promotion)
+
+Wexpansion-to-defined
+UrlSuffix(gcc/Warning-Options.html#index-Wexpansion-to-defined)
+
+Wimplicit-function-declaration
+UrlSuffix(gcc/Warning-Options.html#index-Wimplicit-function-declaration)
+
+Wimplicit-int
+UrlSuffix(gcc/Warning-Options.html#index-Wimplicit-int)
+
+Winherited-variadic-ctor
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Winherited-variadic-ctor)
+
+Wint-conversion
+UrlSuffix(gcc/Warning-Options.html#index-Wint-conversion)
+
+Wint-in-bool-context
+UrlSuffix(gcc/Warning-Options.html#index-Wint-in-bool-context)
+
+Wint-to-pointer-cast
+UrlSuffix(gcc/Warning-Options.html#index-Wint-to-pointer-cast)
+
+Winvalid-constexpr
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Winvalid-constexpr)
+
+Winvalid-offsetof
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Winvalid-offsetof)
+
+Winvalid-pch
+UrlSuffix(gcc/Warning-Options.html#index-Winvalid-pch)
+
+Winvalid-utf8
+UrlSuffix(gcc/Warning-Options.html#index-Winvalid-utf8)
+
+Wjump-misses-init
+UrlSuffix(gcc/Warning-Options.html#index-Wjump-misses-init)
+
+Wliteral-suffix
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wliteral-suffix)
+
+Wlogical-op
+UrlSuffix(gcc/Warning-Options.html#index-Wlogical-op)
+
+Wlogical-not-parentheses
+UrlSuffix(gcc/Warning-Options.html#index-Wlogical-not-parentheses)
+
+Wlong-long
+UrlSuffix(gcc/Warning-Options.html#index-Wlong-long)
+
+Wmain
+UrlSuffix(gcc/Warning-Options.html#index-Wmain)
+
+Wmain
+UrlSuffix(gcc/Warning-Options.html#index-Wmain)
+
+Wmemset-transposed-args
+UrlSuffix(gcc/Warning-Options.html#index-Wmemset-transposed-args)
+
+Wmemset-elt-size
+UrlSuffix(gcc/Warning-Options.html#index-Wmemset-elt-size)
+
+Wmisleading-indentation
+UrlSuffix(gcc/Warning-Options.html#index-Wmisleading-indentation)
+
+Wmismatched-dealloc
+UrlSuffix(gcc/Warning-Options.html#index-Wmismatched-dealloc)
+
+Wmismatched-new-delete
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wmismatched-new-delete)
+
+Wmismatched-tags
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wmismatched-tags)
+
+Wmissing-braces
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-braces)
+
+Wmissing-declarations
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-declarations)
+
+Wmissing-field-initializers
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-field-initializers)
+
+Wmissing-requires
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-requires)
+
+Wmissing-template-keyword
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-template-keyword)
+
+Wmultistatement-macros
+UrlSuffix(gcc/Warning-Options.html#index-Wmultistatement-macros)
+
+Wmultiple-inheritance
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wmultiple-inheritance)
+
+Wnamespaces
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wnamespaces)
+
+Wnrvo
+UrlSuffix(gcc/Warning-Options.html#index-Wno-nrvo)
+
+Wpacked-not-aligned
+UrlSuffix(gcc/Warning-Options.html#index-Wno-packed-not-aligned)
+
+Wrange-loop-construct
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-range-loop-construct)
+
+Wredundant-tags
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-redundant-tags)
+
+Wsized-deallocation
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-sized-deallocation)
+
+Wsizeof-pointer-div
+UrlSuffix(gcc/Warning-Options.html#index-Wno-sizeof-pointer-div)
+
+Wsizeof-array-div
+UrlSuffix(gcc/Warning-Options.html#index-Wno-sizeof-array-div)
+
+Wsizeof-pointer-memaccess
+UrlSuffix(gcc/Warning-Options.html#index-Wno-sizeof-pointer-memaccess)
+
+Wsizeof-array-argument
+UrlSuffix(gcc/Warning-Options.html#index-Wno-sizeof-array-argument)
+
+Wstring-compare
+UrlSuffix(gcc/Warning-Options.html#index-Wno-string-compare)
+
+Wstringop-overflow
+UrlSuffix(gcc/Warning-Options.html#index-Wno-stringop-overflow)
+
+Wstringop-overflow=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-stringop-overflow)
+
+Wstringop-overread
+UrlSuffix(gcc/Warning-Options.html#index-Wno-stringop-overread)
+
+Wstringop-truncation
+UrlSuffix(gcc/Warning-Options.html#index-Wno-stringop-truncation)
+
+Wstrict-flex-arrays
+UrlSuffix(gcc/Warning-Options.html#index-Wno-strict-flex-arrays)
+
+Wsuggest-attribute=format
+UrlSuffix(gcc/Warning-Options.html#index-Wno-suggest-attribute_003dformat)
+
+Wsuggest-override
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-suggest-override)
+
+Wswitch
+UrlSuffix(gcc/Warning-Options.html#index-Wno-switch)
+
+Wswitch-default
+UrlSuffix(gcc/Warning-Options.html#index-Wno-switch-default)
+
+Wswitch-enum
+UrlSuffix(gcc/Warning-Options.html#index-Wno-switch-enum)
+
+Wswitch-bool
+UrlSuffix(gcc/Warning-Options.html#index-Wno-switch-bool)
+
+Wswitch-outside-range
+UrlSuffix(gcc/Warning-Options.html#index-Wno-switch-outside-range)
+
+Wtemplates
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-templates)
+
+Wmissing-attributes
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-attributes)
+
+Wmissing-format-attribute
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-format-attribute)
+
+Wmissing-include-dirs
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-include-dirs)
+
+Wmissing-parameter-type
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-parameter-type)
+
+Wmissing-prototypes
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-prototypes)
+
+Wmissing-variable-declarations
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-variable-declarations)
+
+Wmultichar
+UrlSuffix(gcc/Warning-Options.html#index-Wmultichar)
+
+Wnarrowing
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wnarrowing)
+
+Wnested-externs
+UrlSuffix(gcc/Warning-Options.html#index-Wnested-externs)
+
+Wnoexcept
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-noexcept)
+
+Wnoexcept-type
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-noexcept-type)
+
+Wnon-template-friend
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-non-template-friend)
+
+Wclass-conversion
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wclass-conversion)
+
+Wclass-memaccess
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wclass-memaccess)
+
+Wnon-virtual-dtor
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-non-virtual-dtor)
+
+Wnonnull
+UrlSuffix(gcc/Warning-Options.html#index-Wno-nonnull)
+
+Wnonnull
+UrlSuffix(gcc/Warning-Options.html#index-Wno-nonnull)
+
+Wnonnull-compare
+UrlSuffix(gcc/Warning-Options.html#index-Wno-nonnull-compare)
+
+Wnormalized
+UrlSuffix(gcc/Warning-Options.html#index-Wno-normalized)
+
+Wnormalized=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-normalized)
+
+Wobjc-root-class
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-Wobjc-root-class)
+
+Wold-style-cast
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-old-style-cast)
+
+Wold-style-declaration
+UrlSuffix(gcc/Warning-Options.html#index-Wno-old-style-declaration)
+
+Wold-style-definition
+UrlSuffix(gcc/Warning-Options.html#index-Wno-old-style-definition)
+
+Wopenacc-parallelism
+UrlSuffix(gcc/Warning-Options.html#index-Wno-openacc-parallelism)
+
+Wopenmp-simd
+UrlSuffix(gcc/Warning-Options.html#index-Wno-openmp-simd)
+
+Woverlength-strings
+UrlSuffix(gcc/Warning-Options.html#index-Wno-overlength-strings)
+
+Woverloaded-virtual
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-overloaded-virtual)
+
+Woverloaded-virtual=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-overloaded-virtual)
+
+Woverride-init
+UrlSuffix(gcc/Warning-Options.html#index-Wno-override-init)
+
+Woverride-init-side-effects
+UrlSuffix(gcc/Warning-Options.html#index-Wno-override-init-side-effects)
+
+Wpacked-bitfield-compat
+UrlSuffix(gcc/Warning-Options.html#index-Wno-packed-bitfield-compat)
+
+Wparentheses
+UrlSuffix(gcc/Warning-Options.html#index-Wno-parentheses)
+
+Wpedantic
+UrlSuffix(gcc/Warning-Options.html#index-Wno-pedantic)
+
+Wpessimizing-move
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-pessimizing-move)
+
+; skipping UrlSuffix for 'Wpmf-conversions' due to multiple URLs:
+;   duplicate: 'gcc/Bound-member-functions.html#index-Wno-pmf-conversions-1'
+;   duplicate: 'gcc/C_002b_002b-Dialect-Options.html#index-Wno-pmf-conversions'
+
+; skipping UrlSuffix for 'Wpointer-arith' due to multiple URLs:
+;   duplicate: 'gcc/Pointer-Arith.html#index-Wpointer-arith-1'
+;   duplicate: 'gcc/Warning-Options.html#index-Wno-pointer-arith'
+
+Wpointer-sign
+UrlSuffix(gcc/Warning-Options.html#index-Wno-pointer-sign)
+
+Wpointer-compare
+UrlSuffix(gcc/Warning-Options.html#index-Wno-pointer-compare)
+
+Wpointer-to-int-cast
+UrlSuffix(gcc/Warning-Options.html#index-Wno-pointer-to-int-cast)
+
+Wpragmas
+UrlSuffix(gcc/Warning-Options.html#index-Wno-pragmas)
+
+Wprio-ctor-dtor
+UrlSuffix(gcc/Warning-Options.html#index-Wno-prio-ctor-dtor)
+
+Wproperty-assign-default
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-Wno-property-assign-default)
+
+Wprotocol
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-Wno-protocol)
+
+Wplacement-new
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-placement-new)
+
+Wplacement-new=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-placement-new)
+
+Wredundant-decls
+UrlSuffix(gcc/Warning-Options.html#index-Wno-redundant-decls)
+
+Wredundant-move
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-redundant-move)
+
+Wregister
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-register)
+
+Wreorder
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-reorder)
+
+Wreturn-type
+UrlSuffix(gcc/Warning-Options.html#index-Wno-return-type)
+
+Wscalar-storage-order
+UrlSuffix(gcc/Warning-Options.html#index-Wno-scalar-storage-order)
+
+Wselector
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-Wno-selector)
+
+Wself-move
+UrlSuffix(gcc/Warning-Options.html#index-Wno-self-move)
+
+Wsequence-point
+UrlSuffix(gcc/Warning-Options.html#index-Wno-sequence-point)
+
+Wshadow-ivar
+UrlSuffix(gcc/Warning-Options.html#index-Wno-shadow-ivar)
+
+Wshift-overflow
+UrlSuffix(gcc/Warning-Options.html#index-Wno-shift-overflow)
+
+Wshift-overflow=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-shift-overflow)
+
+Wshift-count-negative
+UrlSuffix(gcc/Warning-Options.html#index-Wno-shift-count-negative)
+
+Wshift-count-overflow
+UrlSuffix(gcc/Warning-Options.html#index-Wno-shift-count-overflow)
+
+Wshift-negative-value
+UrlSuffix(gcc/Warning-Options.html#index-Wno-shift-negative-value)
+
+Warith-conversion
+UrlSuffix(gcc/Warning-Options.html#index-Warith-conversion)
+
+Wsign-compare
+UrlSuffix(gcc/Warning-Options.html#index-Wno-sign-compare)
+
+Wsign-compare
+UrlSuffix(gcc/Warning-Options.html#index-Wno-sign-compare)
+
+Wsign-conversion
+UrlSuffix(gcc/Warning-Options.html#index-Wno-sign-conversion)
+
+Wsign-promo
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-sign-promo)
+
+Wstrict-null-sentinel
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-strict-null-sentinel)
+
+Wstrict-prototypes
+UrlSuffix(gcc/Warning-Options.html#index-Wno-strict-prototypes)
+
+Wstrict-aliasing=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-strict-aliasing)
+
+Wstrict-overflow=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-strict-overflow)
+
+Wstrict-selector-match
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-Wno-strict-selector-match)
+
+Wsync-nand
+UrlSuffix(gcc/Warning-Options.html#index-Wno-sync-nand)
+
+Wsystem-headers
+UrlSuffix(gcc/Warning-Options.html#index-Wno-system-headers)
+
+Wtautological-compare
+UrlSuffix(gcc/Warning-Options.html#index-Wno-tautological-compare)
+
+Wterminate
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-terminate)
+
+Wtraditional
+UrlSuffix(gcc/Warning-Options.html#index-Wno-traditional)
+
+Wtraditional-conversion
+UrlSuffix(gcc/Warning-Options.html#index-Wno-traditional-conversion)
+
+Wtrigraphs
+UrlSuffix(gcc/Warning-Options.html#index-Wtrigraphs)
+
+Wundeclared-selector
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-Wno-undeclared-selector)
+
+Wundef
+UrlSuffix(gcc/Warning-Options.html#index-Wno-undef)
+
+Wunicode
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unicode)
+
+Wuninitialized
+UrlSuffix(gcc/Warning-Options.html#index-Wno-uninitialized)
+
+Wmaybe-uninitialized
+UrlSuffix(gcc/Warning-Options.html#index-Wmaybe-uninitialized)
+
+Wunknown-pragmas
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unknown-pragmas) LangUrlSuffix_D(gdc/Warnings.html#index-Wno-unknown-pragmas)
+
+Wunsuffixed-float-constants
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unsuffixed-float-constants)
+
+Wunused
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused)
+
+Wunused-local-typedefs
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-local-typedefs)
+
+Wunused-macros
+UrlSuffix(gcc/Warning-Options.html#index-Wunused-macros)
+
+Wunused-result
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-result)
+
+Wunused-variable
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-variable)
+
+Wunused-const-variable
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-const-variable)
+
+Wunused-const-variable=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-const-variable)
+
+Wuse-after-free=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-use-after-free)
+
+Wvariadic-macros
+UrlSuffix(gcc/Warning-Options.html#index-Wno-variadic-macros)
+
+Wvarargs
+UrlSuffix(gcc/Warning-Options.html#index-Wno-varargs) LangUrlSuffix_D(gdc/Warnings.html#index-Wno-varargs)
+
+Wvexing-parse
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-vexing-parse)
+
+Wvla
+UrlSuffix(gcc/Warning-Options.html#index-Wno-vla)
+
+Wvla-larger-than=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-vla-larger-than)
+
+Wvla-parameter
+UrlSuffix(gcc/Warning-Options.html#index-Wno-vla-parameter)
+
+Wvolatile
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-volatile)
+
+Wvolatile-register-var
+UrlSuffix(gcc/Warning-Options.html#index-Wno-volatile-register-var)
+
+Wvirtual-inheritance
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-virtual-inheritance)
+
+Wvirtual-move-assign
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-virtual-move-assign)
+
+Wwrite-strings
+UrlSuffix(gcc/Warning-Options.html#index-Wno-write-strings)
+
+Wxor-used-as-pow
+UrlSuffix(gcc/Warning-Options.html#index-Wno-xor-used-as-pow)
+
+Wzero-as-null-pointer-constant
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-zero-as-null-pointer-constant)
+
+Wuseless-cast
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-useless-cast)
+
+Wsubobject-linkage
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-subobject-linkage)
+
+Welaborated-enum-base
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Welaborated-enum-base)
+
+Wduplicate-decl-specifier
+UrlSuffix(gcc/Warning-Options.html#index-Wduplicate-decl-specifier)
+
+Wrestrict
+UrlSuffix(gcc/Warning-Options.html#index-Wno-restrict)
+
+; skipping UrlSuffix for 'ansi' due to multiple URLs:
+;   duplicate: 'gcc/C-Dialect-Options.html#index-ansi-1'
+;   duplicate: 'gcc/Non-bugs.html#index-ansi-3'
+;   duplicate: 'gcc/Other-Builtins.html#index-ansi-2'
+;   duplicate: 'gcc/Standards.html#index-ansi'
+
+; skipping UrlSuffix for 'd' due to multiple URLs:
+;   duplicate: 'gcc/Developer-Options.html#index-d-1'
+;   duplicate: 'gcc/Preprocessor-Options.html#index-d'
+
+fabi-compat-version=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fabi-compat-version)
+
+faccess-control
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-faccess-control)
+
+fada-spec-parent=
+UrlSuffix(gcc/Overall-Options.html#index-fada-spec-parent)
+
+faligned-new
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-faligned-new)
+
+faligned-new=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-faligned-new)
+
+fasm
+UrlSuffix(gcc/C-Dialect-Options.html#index-fasm)
+
+; skipping UrlSuffix for 'fbuiltin' due to multiple URLs:
+;   duplicate: 'gcc/C-Dialect-Options.html#index-fbuiltin'
+;   duplicate: 'gcc/Other-Builtins.html#index-fno-builtin-3'
+;   duplicate: 'gcc/Warning-Options.html#index-fno-builtin-1'
+; skipping LangUrlSuffix_D for 'fbuiltin' due to multiple URLs:
+;   duplicate: 'gdc/Other-Builtins.html#index-fno-builtin-1'
+;   duplicate: 'gdc/Runtime-Options.html#index-fbuiltin'
+
+fcanonical-system-headers
+UrlSuffix(gcc/Preprocessor-Options.html#index-fno-canonical-system-headers)
+
+fchar8_t
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fchar8_005ft)
+
+fconcepts
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fconcepts)
+
+fconcepts-ts
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fconcepts-ts)
+
+fcond-mismatch
+UrlSuffix(gcc/C-Dialect-Options.html#index-fcond-mismatch)
+
+fconstant-string-class=
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fconstant-string-class)
+
+fconstexpr-depth=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fconstexpr-depth)
+
+fconstexpr-cache-depth=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fconstexpr-cache-depth)
+
+fconstexpr-fp-except
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fconstexpr-fp-except)
+
+fconstexpr-loop-limit=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fconstexpr-loop-limit)
+
+fconstexpr-ops-limit=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fconstexpr-ops-limit)
+
+fcontracts
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fcontracts)
+
+fcontract-assumption-mode=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fcontract-assumption-mode)
+
+fcontract-build-level=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fcontract-build-level)
+
+fcontract-strict-declarations=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fcontract-strict-declarations)
+
+fcontract-mode=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fcontract-mode)
+
+fcontract-continuation-mode=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fcontract-continuation-mode)
+
+fcontract-role=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fcontract-role)
+
+fcoroutines
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fcoroutines)
+
+fdebug-cpp
+UrlSuffix(gcc/Preprocessor-Options.html#index-fdebug-cpp)
+
+fdeclone-ctor-dtor
+UrlSuffix(gcc/Optimize-Options.html#index-fdeclone-ctor-dtor)
+
+fdefault-inline
+UrlSuffix(gcc/Inline.html#index-fno-default-inline)
+
+fdiagnostics-show-template-tree
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-show-template-tree)
+
+fdirectives-only
+UrlSuffix(gcc/Preprocessor-Options.html#index-fdirectives-only)
+
+; skipping UrlSuffix for 'fdollars-in-identifiers' due to multiple URLs:
+;   duplicate: 'gcc/Interoperation.html#index-fdollars-in-identifiers-1'
+;   duplicate: 'gcc/Preprocessor-Options.html#index-fdollars-in-identifiers'
+
+fmacro-prefix-map=
+UrlSuffix(gcc/Preprocessor-Options.html#index-fmacro-prefix-map)
+
+fdump-ada-spec
+UrlSuffix(gcc/Overall-Options.html#index-fdump-ada-spec)
+
+felide-constructors
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-felide-constructors)
+
+felide-type
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-felide-type)
+
+fenforce-eh-specs
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fenforce-eh-specs)
+
+fexec-charset=
+UrlSuffix(gcc/Preprocessor-Options.html#index-fexec-charset)
+
+fextended-identifiers
+UrlSuffix(gcc/Preprocessor-Options.html#index-fextended-identifiers)
+
+finput-charset=
+UrlSuffix(gcc/Preprocessor-Options.html#index-finput-charset)
+
+fextern-tls-init
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fextern-tls-init)
+
+ffold-simple-inlines
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-ffold-simple-inlines)
+
+; skipping UrlSuffix for 'ffreestanding' due to multiple URLs:
+;   duplicate: 'gcc/C-Dialect-Options.html#index-ffreestanding-1'
+;   duplicate: 'gcc/Standards.html#index-ffreestanding'
+;   duplicate: 'gcc/Warning-Options.html#index-ffreestanding-2'
+
+fgnu-keywords
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fgnu-keywords)
+
+fgnu-runtime
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fgnu-runtime)
+
+fgnu89-inline
+UrlSuffix(gcc/C-Dialect-Options.html#index-fgnu89-inline)
+
+fhosted
+UrlSuffix(gcc/C-Dialect-Options.html#index-fhosted)
+
+; skipping UrlSuffix for 'fimplement-inlines' due to multiple URLs:
+;   duplicate: 'gcc/C_002b_002b-Dialect-Options.html#index-fimplement-inlines'
+;   duplicate: 'gcc/C_002b_002b-Interface.html#index-fno-implement-inlines-1'
+
+fimplicit-constexpr
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fimplicit-constexpr)
+
+fimplicit-inline-templates
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fimplicit-inline-templates)
+
+; skipping UrlSuffix for 'fimplicit-templates' due to multiple URLs:
+;   duplicate: 'gcc/C_002b_002b-Dialect-Options.html#index-fimplicit-templates'
+;   duplicate: 'gcc/Template-Instantiation.html#index-fno-implicit-templates-1'
+
+fnew-inheriting-ctors
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fnew-inheriting-ctors)
+
+fkeep-inline-dllexport
+UrlSuffix(gcc/Optimize-Options.html#index-fkeep-inline-dllexport)
+
+flax-vector-conversions
+UrlSuffix(gcc/C-Dialect-Options.html#index-flax-vector-conversions)
+
+fmodules-ts
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fmodules-ts)
+
+fmodule-header
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fmodule-header)
+
+fmodule-header=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fmodule-header)
+
+fmodule-implicit-inline
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fmodule-implicit-inline)
+
+fmodule-only
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fmodule-only)
+
+fmodule-mapper=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fmodule-mapper)
+
+fmodule-lazy
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fmodule-lazy)
+
+Winvalid-imported-macros
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Winvalid-imported-macros)
+
+Wcompare-distinct-pointer-types
+UrlSuffix(gcc/Warning-Options.html#index-Wcompare-distinct-pointer-types)
+
+flang-info-include-translate
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-flang-info-include-translate)
+
+flang-info-include-translate-not
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-flang-info-include-translate-not)
+
+flang-info-include-translate=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-flang-info-include-translate)
+
+flang-info-module-cmi
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-flang-info-module-cmi)
+
+flang-info-module-cmi=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-flang-info-module-cmi)
+
+fmax-include-depth=
+UrlSuffix(gcc/Preprocessor-Options.html#index-fmax-include-depth)
+
+; skipping UrlSuffix for 'fms-extensions' due to multiple URLs:
+;   duplicate: 'gcc/C-Dialect-Options.html#index-fms-extensions'
+;   duplicate: 'gcc/C_002b_002b-Dialect-Options.html#index-fms-extensions-1'
+;   duplicate: 'gcc/Unnamed-Fields.html#index-fms-extensions-2'
+
+fnew-ttp-matching
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fnew-ttp-matching)
+
+fnext-runtime
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fnext-runtime)
+
+fnil-receivers
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fnil-receivers)
+
+flocal-ivars
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-flocal-ivars)
+
+fivar-visibility=
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fivar-visibility)
+
+fnonansi-builtins
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fno-nonansi-builtins)
+
+fnothrow-opt
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fnothrow-opt)
+
+fobjc-abi-version=
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fobjc-abi-version)
+
+fobjc-call-cxx-cdtors
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fobjc-call-cxx-cdtors)
+
+fobjc-direct-dispatch
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fobjc-direct-dispatch)
+
+fobjc-exceptions
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fobjc-exceptions)
+
+fobjc-gc
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fobjc-gc)
+
+fobjc-nilcheck
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fobjc-nilcheck)
+
+fopenacc
+UrlSuffix(gcc/C-Dialect-Options.html#index-fopenacc)
+
+fopenacc-dim=
+UrlSuffix(gcc/C-Dialect-Options.html#index-fopenacc-dim)
+
+fopenmp
+UrlSuffix(gcc/C-Dialect-Options.html#index-fopenmp)
+
+fopenmp-simd
+UrlSuffix(gcc/C-Dialect-Options.html#index-fopenmp-simd)
+
+foperator-names
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fno-operator-names)
+
+foptional-diags
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fno-optional-diags)
+
+fpch-deps
+UrlSuffix(gcc/Preprocessor-Options.html#index-fpch-deps)
+
+fpch-preprocess
+UrlSuffix(gcc/Preprocessor-Options.html#index-fpch-preprocess)
+
+fpermissive
+UrlSuffix(gcc/Warning-Options.html#index-fpermissive)
+
+; skipping UrlSuffix for 'fplan9-extensions' due to multiple URLs:
+;   duplicate: 'gcc/C-Dialect-Options.html#index-fplan9-extensions'
+;   duplicate: 'gcc/Unnamed-Fields.html#index-fplan9-extensions-1'
+
+fpreprocessed
+UrlSuffix(gcc/Preprocessor-Options.html#index-fpreprocessed)
+
+ftrack-macro-expansion
+UrlSuffix(gcc/Preprocessor-Options.html#index-ftrack-macro-expansion)
+
+ftrack-macro-expansion=
+UrlSuffix(gcc/Preprocessor-Options.html#index-ftrack-macro-expansion)
+
+fpretty-templates
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fno-pretty-templates)
+
+fprintf-return-value
+UrlSuffix(gcc/Optimize-Options.html#index-fno-printf-return-value)
+
+freplace-objc-classes
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-freplace-objc-classes)
+
+frtti
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fno-rtti) LangUrlSuffix_D(gdc/Runtime-Options.html#index-fno-rtti)
+
+; skipping UrlSuffix for 'fshort-enums' due to multiple URLs:
+;   duplicate: 'gcc/Code-Gen-Options.html#index-fshort-enums'
+;   duplicate: 'gcc/Non-bugs.html#index-fshort-enums-3'
+;   duplicate: 'gcc/Structures-unions-enumerations-and-bit-fields-implementation.html#index-fshort-enums-1'
+
+fshort-wchar
+UrlSuffix(gcc/Code-Gen-Options.html#index-fshort-wchar)
+
+; skipping UrlSuffix for 'fsigned-bitfields' due to multiple URLs:
+;   duplicate: 'gcc/C-Dialect-Options.html#index-fno-signed-bitfields'
+;   duplicate: 'gcc/Non-bugs.html#index-fsigned-bitfields-1'
+
+; skipping UrlSuffix for 'fsigned-char' due to multiple URLs:
+;   duplicate: 'gcc/C-Dialect-Options.html#index-fsigned-char'
+;   duplicate: 'gcc/Characters-implementation.html#index-fsigned-char-1'
+
+fsized-deallocation
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fsized-deallocation)
+
+fstrict-flex-arrays
+UrlSuffix(gcc/C-Dialect-Options.html#index-fno-strict-flex-arrays)
+
+fstrict-flex-arrays=
+UrlSuffix(gcc/C-Dialect-Options.html#index-fno-strict-flex-arrays)
+
+fsso-struct=
+UrlSuffix(gcc/C-Dialect-Options.html#index-fsso-struct)
+
+fstats
+UrlSuffix(gcc/Developer-Options.html#index-fstats)
+
+fstrict-enums
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fstrict-enums)
+
+fstrong-eval-order
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fstrong-eval-order)
+
+fstrong-eval-order=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fstrong-eval-order)
+
+ftemplate-backtrace-limit=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-ftemplate-backtrace-limit)
+
+ftemplate-depth=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-ftemplate-depth)
+
+fthreadsafe-statics
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fno-threadsafe-statics)
+
+; skipping UrlSuffix for 'funsigned-bitfields' due to multiple URLs:
+;   duplicate: 'gcc/C-Dialect-Options.html#index-fno-unsigned-bitfields'
+;   duplicate: 'gcc/Non-bugs.html#index-funsigned-bitfields-2'
+;   duplicate: 'gcc/Structures-unions-enumerations-and-bit-fields-implementation.html#index-funsigned-bitfields-1'
+
+; skipping UrlSuffix for 'funsigned-char' due to multiple URLs:
+;   duplicate: 'gcc/C-Dialect-Options.html#index-funsigned-char'
+;   duplicate: 'gcc/Characters-implementation.html#index-funsigned-char-1'
+
+fuse-cxa-atexit
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fuse-cxa-atexit)
+
+fuse-cxa-get-exception-ptr
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fno-use-cxa-get-exception-ptr)
+
+fvisibility-inlines-hidden
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fvisibility-inlines-hidden)
+
+fvisibility-ms-compat
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fvisibility-ms-compat)
+
+fweak
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fno-weak)
+
+fwide-exec-charset=
+UrlSuffix(gcc/Preprocessor-Options.html#index-fwide-exec-charset)
+
+fworking-directory
+UrlSuffix(gcc/Preprocessor-Options.html#index-fno-working-directory)
+
+fzero-link
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-fzero-link)
+
+gen-decls
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-gen-decls)
+
+femit-struct-debug-baseonly
+UrlSuffix(gcc/Debugging-Options.html#index-femit-struct-debug-baseonly)
+
+femit-struct-debug-reduced
+UrlSuffix(gcc/Debugging-Options.html#index-femit-struct-debug-reduced)
+
+femit-struct-debug-detailed=
+UrlSuffix(gcc/Debugging-Options.html#index-femit-struct-debug-detailed)
+
+fext-numeric-literals
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fext-numeric-literals)
+
+idirafter
+UrlSuffix(gcc/Directory-Options.html#index-idirafter)
+
+imacros
+UrlSuffix(gcc/Preprocessor-Options.html#index-imacros)
+
+imultilib
+UrlSuffix(gcc/Directory-Options.html#index-imultilib) LangUrlSuffix_D(gdc/Directory-Options.html#index-imultilib)
+
+include
+UrlSuffix(gcc/Preprocessor-Options.html#index-include)
+
+iprefix
+UrlSuffix(gcc/Directory-Options.html#index-iprefix) LangUrlSuffix_D(gdc/Directory-Options.html#index-iprefix)
+
+isysroot
+UrlSuffix(gcc/Directory-Options.html#index-isysroot)
+
+isystem
+UrlSuffix(gcc/Directory-Options.html#index-isystem)
+
+iquote
+UrlSuffix(gcc/Directory-Options.html#index-iquote)
+
+iwithprefix
+UrlSuffix(gcc/Directory-Options.html#index-iwithprefix)
+
+iwithprefixbefore
+UrlSuffix(gcc/Directory-Options.html#index-iwithprefixbefore)
+
+no-integrated-cpp
+UrlSuffix(gcc/Preprocessor-Options.html#index-no-integrated-cpp)
+
+nostdinc
+UrlSuffix(gcc/Directory-Options.html#index-nostdinc) LangUrlSuffix_D(gdc/Directory-Options.html#index-nostdinc)
+
+; skipping UrlSuffix for 'nostdinc++' due to multiple URLs:
+;   duplicate: 'gcc/C_002b_002b-Dialect-Options.html#index-nostdinc_002b_002b'
+;   duplicate: 'gcc/Directory-Options.html#index-nostdinc_002b_002b-1'
+
+o
+UrlSuffix(gcc/Overall-Options.html#index-o)
+
+; skipping UrlSuffix for 'pedantic' due to multiple URLs:
+;   duplicate: 'gcc/Alternate-Keywords.html#index-pedantic-3'
+;   duplicate: 'gcc/C-Extensions.html#index-pedantic-2'
+;   duplicate: 'gcc/Standards.html#index-pedantic'
+;   duplicate: 'gcc/Warning-Options.html#index-pedantic-1'
+;   duplicate: 'gcc/Warnings-and-Errors.html#index-pedantic-4'
+
+print-objc-runtime-info
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-print-objc-runtime-info)
+
+remap
+UrlSuffix(gcc/Preprocessor-Options.html#index-remap)
+
+stdlib=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-stdlib)
+
+; skipping UrlSuffix for 'traditional' due to multiple URLs:
+;   duplicate: 'gcc/Incompatibilities.html#index-traditional-1'
+;   duplicate: 'gcc/Preprocessor-Options.html#index-traditional'
+
+traditional-cpp
+UrlSuffix(gcc/Preprocessor-Options.html#index-traditional-cpp)
+
+trigraphs
+UrlSuffix(gcc/Preprocessor-Options.html#index-trigraphs)
+
+undef
+UrlSuffix(gcc/Preprocessor-Options.html#index-undef)
+
+v
+UrlSuffix(gcc/Overall-Options.html#index-v) LangUrlSuffix_D(gdc/Developer-Options.html#index-v)
+
+w
+UrlSuffix(gcc/Warning-Options.html#index-w)
+
diff --git a/gcc/common.opt.urls b/gcc/common.opt.urls
new file mode 100644
index 000000000000..407c86018fc8
--- /dev/null
+++ b/gcc/common.opt.urls
@@ -0,0 +1,1832 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/common.opt and generated HTML
+
+###
+UrlSuffix(gcc/Overall-Options.html#index-_0023_0023_0023)
+
+fversion
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fversion)
+
+B
+UrlSuffix(gcc/Directory-Options.html#index-B) LangUrlSuffix_D(gdc/Directory-Options.html#index-B)
+
+; skipping UrlSuffix for 'E' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-E-1'
+;   duplicate: 'gcc/Overall-Options.html#index-E'
+
+L
+UrlSuffix(gcc/Directory-Options.html#index-L) LangUrlSuffix_D(gdc/Directory-Options.html#index-L)
+
+O
+UrlSuffix(gcc/Optimize-Options.html#index-O)
+
+Os
+UrlSuffix(gcc/Optimize-Options.html#index-Os)
+
+Ofast
+UrlSuffix(gcc/Optimize-Options.html#index-Ofast)
+
+Og
+UrlSuffix(gcc/Optimize-Options.html#index-Og)
+
+Oz
+UrlSuffix(gcc/Optimize-Options.html#index-Oz)
+
+Q
+UrlSuffix(gcc/Developer-Options.html#index-Q)
+
+Qn
+UrlSuffix(gcc/System-V-Options.html#index-Qn)
+
+Qy
+UrlSuffix(gcc/System-V-Options.html#index-Qy)
+
+; skipping UrlSuffix for 'S' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-S-1'
+;   duplicate: 'gcc/Overall-Options.html#index-S'
+
+T
+UrlSuffix(gcc/Link-Options.html#index-T)
+
+; skipping UrlSuffix for 'W' due to multiple URLs:
+;   duplicate: 'gcc/Incompatibilities.html#index-W-3'
+;   duplicate: 'gcc/Warning-Options.html#index-W'
+
+Waggregate-return
+UrlSuffix(gcc/Warning-Options.html#index-Waggregate-return)
+
+Waggressive-loop-optimizations
+UrlSuffix(gcc/Warning-Options.html#index-Waggressive-loop-optimizations)
+
+Warray-bounds
+UrlSuffix(gcc/Warning-Options.html#index-Warray-bounds)
+
+Warray-bounds=
+UrlSuffix(gcc/Warning-Options.html#index-Warray-bounds)
+
+Wuse-after-free
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-use-after-free)
+
+Wuse-after-free=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-use-after-free)
+
+Wattributes
+UrlSuffix(gcc/Warning-Options.html#index-Wattributes)
+
+Wattributes=
+UrlSuffix(gcc/Warning-Options.html#index-Wattributes)
+
+Wattribute-alias
+UrlSuffix(gcc/Warning-Options.html#index-Wattribute-alias)
+
+Wattribute-alias=
+UrlSuffix(gcc/Warning-Options.html#index-Wattribute-alias)
+
+Wcast-align
+UrlSuffix(gcc/Warning-Options.html#index-Wcast-align)
+
+Wcast-align=strict
+UrlSuffix(gcc/Warning-Options.html#index-Wcast-align_003dstrict)
+
+Wcomplain-wrong-lang
+UrlSuffix(gcc/Warning-Options.html#index-Wcomplain-wrong-lang)
+
+Wcpp
+UrlSuffix(gcc/Warning-Options.html#index-Wcpp)
+
+Wattribute-warning
+UrlSuffix(gcc/Warning-Options.html#index-Wattribute-warning)
+
+Wdeprecated
+UrlSuffix(gcc/Warning-Options.html#index-Wdeprecated) LangUrlSuffix_D(gdc/Warnings.html#index-Wdeprecated)
+
+Wdeprecated-declarations
+UrlSuffix(gcc/Warning-Options.html#index-Wdeprecated-declarations)
+
+Wdisabled-optimization
+UrlSuffix(gcc/Warning-Options.html#index-Wdisabled-optimization)
+
+Werror
+UrlSuffix(gcc/Warning-Options.html#index-Werror) LangUrlSuffix_D(gdc/Warnings.html#index-Werror)
+
+Werror=
+UrlSuffix(gcc/Warning-Options.html#index-Werror) LangUrlSuffix_D(gdc/Warnings.html#index-Werror)
+
+Wextra
+UrlSuffix(gcc/Warning-Options.html#index-Wextra) LangUrlSuffix_D(gdc/Warnings.html#index-Wextra)
+
+Wfatal-errors
+UrlSuffix(gcc/Warning-Options.html#index-Wfatal-errors)
+
+Wframe-larger-than=
+UrlSuffix(gcc/Warning-Options.html#index-Wframe-larger-than_003d)
+
+Wfree-nonheap-object
+UrlSuffix(gcc/Warning-Options.html#index-Wfree-nonheap-object)
+
+Wimplicit-fallthrough
+UrlSuffix(gcc/Warning-Options.html#index-Wimplicit-fallthrough)
+
+Wimplicit-fallthrough=
+UrlSuffix(gcc/Warning-Options.html#index-Wimplicit-fallthrough)
+
+Winfinite-recursion
+UrlSuffix(gcc/Warning-Options.html#index-Winfinite-recursion)
+
+; skipping UrlSuffix for 'Winline' due to multiple URLs:
+;   duplicate: 'gcc/Inline.html#index-Winline-1'
+;   duplicate: 'gcc/Warning-Options.html#index-Winline'
+
+Winvalid-memory-model
+UrlSuffix(gcc/Warning-Options.html#index-Winvalid-memory-model)
+
+Wlarger-than=
+UrlSuffix(gcc/Warning-Options.html#index-Wlarger-than_003d)
+
+Wnonnull-compare
+UrlSuffix(gcc/Warning-Options.html#index-Wno-nonnull-compare)
+
+Wnull-dereference
+UrlSuffix(gcc/Warning-Options.html#index-Wno-null-dereference)
+
+Wunsafe-loop-optimizations
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unsafe-loop-optimizations)
+
+Wmissing-noreturn
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-noreturn)
+
+Wodr
+UrlSuffix(gcc/Warning-Options.html#index-Wno-odr)
+
+Woverflow
+UrlSuffix(gcc/Warning-Options.html#index-Wno-overflow)
+
+Wlto-type-mismatch
+UrlSuffix(gcc/Warning-Options.html#index-Wlto-type-mismatch)
+
+Wpacked
+UrlSuffix(gcc/Warning-Options.html#index-Wno-packed)
+
+Wpadded
+UrlSuffix(gcc/Warning-Options.html#index-Wno-padded)
+
+Wpedantic
+UrlSuffix(gcc/Warning-Options.html#index-Wno-pedantic)
+
+Wreturn-local-addr
+UrlSuffix(gcc/Warning-Options.html#index-Wno-return-local-addr)
+
+Wshadow
+UrlSuffix(gcc/Warning-Options.html#index-Wno-shadow)
+
+Wshadow=global
+UrlSuffix(gcc/Warning-Options.html#index-Wshadow_003dglobal)
+
+Wshadow=local
+UrlSuffix(gcc/Warning-Options.html#index-Wshadow_003dlocal)
+
+Wshadow=compatible-local
+UrlSuffix(gcc/Warning-Options.html#index-Wshadow_003dcompatible-local)
+
+Wstack-protector
+UrlSuffix(gcc/Warning-Options.html#index-Wno-stack-protector)
+
+Wstack-usage=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-stack-usage)
+
+Wstrict-aliasing
+UrlSuffix(gcc/Warning-Options.html#index-Wno-strict-aliasing)
+
+Wstrict-aliasing=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-strict-aliasing)
+
+Wstrict-overflow
+UrlSuffix(gcc/Warning-Options.html#index-Wno-strict-overflow)
+
+Wstrict-overflow=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-strict-overflow)
+
+Wsuggest-attribute=cold
+UrlSuffix(gcc/Warning-Options.html#index-Wno-suggest-attribute_003dcold)
+
+Wsuggest-attribute=const
+UrlSuffix(gcc/Warning-Options.html#index-Wno-suggest-attribute_003dconst)
+
+Wsuggest-attribute=pure
+UrlSuffix(gcc/Warning-Options.html#index-Wno-suggest-attribute_003dpure)
+
+Wsuggest-attribute=noreturn
+UrlSuffix(gcc/Warning-Options.html#index-Wno-suggest-attribute_003dnoreturn)
+
+Wsuggest-attribute=malloc
+UrlSuffix(gcc/Warning-Options.html#index-Wno-suggest-attribute_003dmalloc)
+
+Wsuggest-final-types
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-suggest-final-types)
+
+Wsuggest-final-methods
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-suggest-final-methods)
+
+Wswitch-unreachable
+UrlSuffix(gcc/Warning-Options.html#index-Wno-switch-unreachable)
+
+Wsystem-headers
+UrlSuffix(gcc/Warning-Options.html#index-Wno-system-headers)
+
+Wtrampolines
+UrlSuffix(gcc/Warning-Options.html#index-Wno-trampolines)
+
+Wtrivial-auto-var-init
+UrlSuffix(gcc/Warning-Options.html#index-Wno-trivial-auto-var-init)
+
+Wtype-limits
+UrlSuffix(gcc/Warning-Options.html#index-Wno-type-limits)
+
+Wuninitialized
+UrlSuffix(gcc/Warning-Options.html#index-Wno-uninitialized)
+
+Wmaybe-uninitialized
+UrlSuffix(gcc/Warning-Options.html#index-Wmaybe-uninitialized)
+
+Wunused
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused)
+
+Wunused-but-set-parameter
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-but-set-parameter)
+
+Wunused-but-set-variable
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-but-set-variable)
+
+Wunused-function
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-function)
+
+Wunused-label
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-label)
+
+Wunused-parameter
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-parameter)
+
+Wunused-value
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-value)
+
+Wunused-variable
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-variable)
+
+Wcoverage-mismatch
+UrlSuffix(gcc/Warning-Options.html#index-Wcoverage-mismatch)
+
+Wcoverage-invalid-line-number
+UrlSuffix(gcc/Warning-Options.html#index-Wcoverage-invalid-line-number)
+
+Wmissing-profile
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-profile)
+
+Wvector-operation-performance
+UrlSuffix(gcc/Warning-Options.html#index-Wno-vector-operation-performance)
+
+Wtsan
+UrlSuffix(gcc/Warning-Options.html#index-Wno-tsan)
+
+Xassembler
+UrlSuffix(gcc/Assembler-Options.html#index-Xassembler)
+
+Xlinker
+UrlSuffix(gcc/Link-Options.html#index-Xlinker)
+
+Xpreprocessor
+UrlSuffix(gcc/Preprocessor-Options.html#index-Xpreprocessor)
+
+aux-info
+UrlSuffix(gcc/C-Dialect-Options.html#index-aux-info)
+
+aux-info=
+UrlSuffix(gcc/C-Dialect-Options.html#index-aux-info)
+
+coverage
+UrlSuffix(gcc/Instrumentation-Options.html#index-coverage)
+
+; skipping UrlSuffix for 'c' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-c-1'
+;   duplicate: 'gcc/Overall-Options.html#index-c'
+
+; skipping UrlSuffix for 'd' due to multiple URLs:
+;   duplicate: 'gcc/Developer-Options.html#index-d-1'
+;   duplicate: 'gcc/Preprocessor-Options.html#index-d'
+
+dumpbase
+UrlSuffix(gcc/Overall-Options.html#index-dumpbase)
+
+dumpbase-ext
+UrlSuffix(gcc/Overall-Options.html#index-dumpbase-ext)
+
+dumpdir
+UrlSuffix(gcc/Overall-Options.html#index-dumpdir)
+
+dumpmachine
+UrlSuffix(gcc/Developer-Options.html#index-dumpmachine)
+
+dumpspecs
+UrlSuffix(gcc/Developer-Options.html#index-dumpspecs)
+
+dumpversion
+UrlSuffix(gcc/Developer-Options.html#index-dumpversion)
+
+dumpfullversion
+UrlSuffix(gcc/Developer-Options.html#index-dumpfullversion)
+
+e
+UrlSuffix(gcc/Link-Options.html#index-e)
+
+fabi-version=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fabi-version)
+
+faggressive-loop-optimizations
+UrlSuffix(gcc/Optimize-Options.html#index-faggressive-loop-optimizations)
+
+falign-functions
+UrlSuffix(gcc/Optimize-Options.html#index-falign-functions)
+
+falign-functions=
+UrlSuffix(gcc/Optimize-Options.html#index-falign-functions)
+
+falign-jumps
+UrlSuffix(gcc/Optimize-Options.html#index-falign-jumps)
+
+falign-jumps=
+UrlSuffix(gcc/Optimize-Options.html#index-falign-jumps)
+
+falign-labels
+UrlSuffix(gcc/Optimize-Options.html#index-falign-labels)
+
+falign-labels=
+UrlSuffix(gcc/Optimize-Options.html#index-falign-labels)
+
+falign-loops
+UrlSuffix(gcc/Optimize-Options.html#index-falign-loops)
+
+falign-loops=
+UrlSuffix(gcc/Optimize-Options.html#index-falign-loops)
+
+fallow-store-data-races
+UrlSuffix(gcc/Optimize-Options.html#index-fallow-store-data-races)
+
+fanalyzer
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer)
+
+fasan-shadow-offset=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fasan-shadow-offset)
+
+fsanitize-sections=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fsanitize-sections)
+
+fsanitize-recover=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fno-sanitize-recover)
+
+fsanitize-recover
+UrlSuffix(gcc/Instrumentation-Options.html#index-fno-sanitize-recover)
+
+fsanitize-trap=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fno-sanitize-trap)
+
+fsanitize-trap
+UrlSuffix(gcc/Instrumentation-Options.html#index-fno-sanitize-trap)
+
+fsanitize-address-use-after-scope
+UrlSuffix(gcc/Instrumentation-Options.html#index-fsanitize-address-use-after-scope)
+
+fsanitize-undefined-trap-on-error
+UrlSuffix(gcc/Instrumentation-Options.html#index-fsanitize-undefined-trap-on-error)
+
+fasynchronous-unwind-tables
+UrlSuffix(gcc/Code-Gen-Options.html#index-fasynchronous-unwind-tables)
+
+fauto-inc-dec
+UrlSuffix(gcc/Optimize-Options.html#index-fauto-inc-dec)
+
+fauto-profile
+UrlSuffix(gcc/Optimize-Options.html#index-fauto-profile)
+
+fauto-profile=
+UrlSuffix(gcc/Optimize-Options.html#index-fauto-profile)
+
+fbounds-check
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fbounds-check)
+
+fbranch-count-reg
+UrlSuffix(gcc/Optimize-Options.html#index-fbranch-count-reg)
+
+fbranch-probabilities
+UrlSuffix(gcc/Optimize-Options.html#index-fbranch-probabilities)
+
+fcallgraph-info
+UrlSuffix(gcc/Developer-Options.html#index-fcallgraph-info)
+
+fcallgraph-info=
+UrlSuffix(gcc/Developer-Options.html#index-fcallgraph-info)
+
+fcaller-saves
+UrlSuffix(gcc/Optimize-Options.html#index-fcaller-saves)
+
+fcheck-new
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fcheck-new)
+
+fchecking
+UrlSuffix(gcc/Developer-Options.html#index-fchecking)
+
+fchecking=
+UrlSuffix(gcc/Developer-Options.html#index-fchecking)
+
+fcanon-prefix-map
+UrlSuffix(gcc/Overall-Options.html#index-fcanon-prefix-map)
+
+fcode-hoisting
+UrlSuffix(gcc/Optimize-Options.html#index-fcode-hoisting)
+
+fcombine-stack-adjustments
+UrlSuffix(gcc/Optimize-Options.html#index-fcombine-stack-adjustments)
+
+fcommon
+UrlSuffix(gcc/Code-Gen-Options.html#index-fcommon)
+
+fcompare-debug
+UrlSuffix(gcc/Developer-Options.html#index-fcompare-debug)
+
+fcompare-debug=
+UrlSuffix(gcc/Developer-Options.html#index-fcompare-debug)
+
+fcompare-debug-second
+UrlSuffix(gcc/Developer-Options.html#index-fcompare-debug-second)
+
+fcompare-elim
+UrlSuffix(gcc/Optimize-Options.html#index-fcompare-elim)
+
+fconserve-stack
+UrlSuffix(gcc/Optimize-Options.html#index-fconserve-stack)
+
+fcprop-registers
+UrlSuffix(gcc/Optimize-Options.html#index-fcprop-registers)
+
+ffold-mem-offsets
+UrlSuffix(gcc/Optimize-Options.html#index-ffold-mem-offsets)
+
+fcrossjumping
+UrlSuffix(gcc/Optimize-Options.html#index-fcrossjumping)
+
+fcse-follow-jumps
+UrlSuffix(gcc/Optimize-Options.html#index-fcse-follow-jumps)
+
+fcse-skip-blocks
+UrlSuffix(gcc/Optimize-Options.html#index-fcse-skip-blocks)
+
+fcx-limited-range
+UrlSuffix(gcc/Optimize-Options.html#index-fcx-limited-range)
+
+fcx-fortran-rules
+UrlSuffix(gcc/Optimize-Options.html#index-fcx-fortran-rules)
+
+fdata-sections
+UrlSuffix(gcc/Optimize-Options.html#index-fdata-sections)
+
+fdbg-cnt-list
+UrlSuffix(gcc/Developer-Options.html#index-fdbg-cnt-list)
+
+fdbg-cnt=
+UrlSuffix(gcc/Developer-Options.html#index-fdbg-cnt)
+
+fdebug-prefix-map=
+UrlSuffix(gcc/Debugging-Options.html#index-fdebug-prefix-map)
+
+ffile-prefix-map=
+UrlSuffix(gcc/Overall-Options.html#index-ffile-prefix-map)
+
+fdebug-types-section
+UrlSuffix(gcc/Debugging-Options.html#index-fdebug-types-section)
+
+fdefer-pop
+UrlSuffix(gcc/Optimize-Options.html#index-fdefer-pop)
+
+fdelayed-branch
+UrlSuffix(gcc/Optimize-Options.html#index-fdelayed-branch)
+
+fdelete-dead-exceptions
+UrlSuffix(gcc/Code-Gen-Options.html#index-fdelete-dead-exceptions)
+
+fdelete-null-pointer-checks
+UrlSuffix(gcc/Optimize-Options.html#index-fdelete-null-pointer-checks)
+
+fdevirtualize-at-ltrans
+UrlSuffix(gcc/Optimize-Options.html#index-fdevirtualize-at-ltrans)
+
+fdevirtualize-speculatively
+UrlSuffix(gcc/Optimize-Options.html#index-fdevirtualize-speculatively)
+
+fdevirtualize
+UrlSuffix(gcc/Optimize-Options.html#index-fdevirtualize)
+
+fdiagnostics-show-location=
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-show-location)
+
+fdiagnostics-show-caret
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-show-caret)
+
+fdiagnostics-show-labels
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-show-labels)
+
+fdiagnostics-show-line-numbers
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-show-line-numbers)
+
+fdiagnostics-color
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-color)
+
+fdiagnostics-color=
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-color)
+
+fdiagnostics-urls=
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-urls)
+
+fdiagnostics-column-unit=
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-column-unit)
+
+fdiagnostics-column-origin=
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-column-origin)
+
+fdiagnostics-format=
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-format)
+
+fdiagnostics-escape-format=
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-escape-format)
+
+fdiagnostics-parseable-fixits
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-parseable-fixits)
+
+fdiagnostics-generate-patch
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-generate-patch)
+
+fdiagnostics-show-option
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-show-option)
+
+fdiagnostics-show-cwe
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-show-cwe)
+
+fdiagnostics-show-rules
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-show-rules)
+
+fdiagnostics-path-format=
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-path-format)
+
+ftabstop=
+UrlSuffix(gcc/Preprocessor-Options.html#index-ftabstop)
+
+fdiagnostics-show-path-depths
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-show-path-depths)
+
+fdiagnostics-text-art-charset=
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-text-art-charset)
+
+fdiagnostics-minimum-margin-width=
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fdiagnostics-minimum-margin-width)
+
+fdisable-
+UrlSuffix(gcc/Developer-Options.html#index-fdisable-)
+
+fenable-
+UrlSuffix(gcc/Developer-Options.html#index-fenable-)
+
+fdump-final-insns
+UrlSuffix(gcc/Developer-Options.html#index-fdump-final-insns)
+
+fdump-final-insns=
+UrlSuffix(gcc/Developer-Options.html#index-fdump-final-insns)
+
+fdump-go-spec=
+UrlSuffix(gcc/Overall-Options.html#index-fdump-go-spec)
+
+fdump-noaddr
+UrlSuffix(gcc/Developer-Options.html#index-fdump-noaddr)
+
+freport-bug
+UrlSuffix(gcc/Developer-Options.html#index-freport-bug)
+
+fdump-passes
+UrlSuffix(gcc/Developer-Options.html#index-fdump-passes)
+
+fdump-unnumbered
+UrlSuffix(gcc/Developer-Options.html#index-fdump-unnumbered)
+
+fdump-unnumbered-links
+UrlSuffix(gcc/Developer-Options.html#index-fdump-unnumbered-links)
+
+fdwarf2-cfi-asm
+UrlSuffix(gcc/Debugging-Options.html#index-fdwarf2-cfi-asm)
+
+fearly-inlining
+UrlSuffix(gcc/Optimize-Options.html#index-fearly-inlining)
+
+fipa-sra
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-sra)
+
+feliminate-unused-debug-symbols
+UrlSuffix(gcc/Debugging-Options.html#index-feliminate-unused-debug-symbols)
+
+feliminate-unused-debug-types
+UrlSuffix(gcc/Debugging-Options.html#index-feliminate-unused-debug-types)
+
+femit-class-debug-always
+UrlSuffix(gcc/Debugging-Options.html#index-femit-class-debug-always)
+
+fexceptions
+UrlSuffix(gcc/Code-Gen-Options.html#index-fexceptions)
+
+fexpensive-optimizations
+UrlSuffix(gcc/Optimize-Options.html#index-fexpensive-optimizations)
+
+fexcess-precision=
+UrlSuffix(gcc/Optimize-Options.html#index-fexcess-precision)
+
+fpermitted-flt-eval-methods=
+UrlSuffix(gcc/C-Dialect-Options.html#index-fpermitted-flt-eval-methods)
+
+ffast-math
+UrlSuffix(gcc/Optimize-Options.html#index-ffast-math)
+
+ffat-lto-objects
+UrlSuffix(gcc/Optimize-Options.html#index-ffat-lto-objects)
+
+ffinite-math-only
+UrlSuffix(gcc/Optimize-Options.html#index-ffinite-math-only)
+
+ffinite-loops
+UrlSuffix(gcc/Optimize-Options.html#index-ffinite-loops)
+
+; skipping UrlSuffix for 'ffloat-store' due to multiple URLs:
+;   duplicate: 'gcc/Disappointments.html#index-ffloat-store-1'
+;   duplicate: 'gcc/Optimize-Options.html#index-ffloat-store'
+
+fforward-propagate
+UrlSuffix(gcc/Optimize-Options.html#index-fforward-propagate)
+
+ffp-contract=
+UrlSuffix(gcc/Optimize-Options.html#index-ffp-contract)
+
+ffp-int-builtin-inexact
+UrlSuffix(gcc/Optimize-Options.html#index-ffp-int-builtin-inexact)
+
+ffunction-cse
+UrlSuffix(gcc/Optimize-Options.html#index-ffunction-cse)
+
+ffunction-sections
+UrlSuffix(gcc/Optimize-Options.html#index-ffunction-sections)
+
+fgcse
+UrlSuffix(gcc/Optimize-Options.html#index-fgcse)
+
+fgcse-lm
+UrlSuffix(gcc/Optimize-Options.html#index-fgcse-lm)
+
+fgcse-sm
+UrlSuffix(gcc/Optimize-Options.html#index-fgcse-sm)
+
+fgcse-las
+UrlSuffix(gcc/Optimize-Options.html#index-fgcse-las)
+
+fgcse-after-reload
+UrlSuffix(gcc/Optimize-Options.html#index-fgcse-after-reload)
+
+fgraphite-identity
+UrlSuffix(gcc/Optimize-Options.html#index-fgraphite-identity)
+
+fhoist-adjacent-loads
+UrlSuffix(gcc/Optimize-Options.html#index-fhoist-adjacent-loads)
+
+flarge-source-files
+UrlSuffix(gcc/Preprocessor-Options.html#index-flarge-source-files)
+
+floop-parallelize-all
+UrlSuffix(gcc/Optimize-Options.html#index-floop-parallelize-all)
+
+floop-strip-mine
+UrlSuffix(gcc/Optimize-Options.html#index-floop-strip-mine)
+
+floop-interchange
+UrlSuffix(gcc/Optimize-Options.html#index-floop-interchange)
+
+floop-block
+UrlSuffix(gcc/Optimize-Options.html#index-floop-block)
+
+floop-unroll-and-jam
+UrlSuffix(gcc/Optimize-Options.html#index-floop-unroll-and-jam)
+
+fgnu-tm
+UrlSuffix(gcc/C-Dialect-Options.html#index-fgnu-tm)
+
+fgnu-unique
+UrlSuffix(gcc/Code-Gen-Options.html#index-fgnu-unique)
+
+floop-nest-optimize
+UrlSuffix(gcc/Optimize-Options.html#index-floop-nest-optimize)
+
+fstrict-volatile-bitfields
+UrlSuffix(gcc/Code-Gen-Options.html#index-fstrict-volatile-bitfields)
+
+fstore-merging
+UrlSuffix(gcc/Optimize-Options.html#index-fstore-merging)
+
+fguess-branch-probability
+UrlSuffix(gcc/Optimize-Options.html#index-fguess-branch-probability)
+
+fharden-compares
+UrlSuffix(gcc/Instrumentation-Options.html#index-fharden-compares)
+
+fharden-conditional-branches
+UrlSuffix(gcc/Instrumentation-Options.html#index-fharden-conditional-branches)
+
+fharden-control-flow-redundancy
+UrlSuffix(gcc/Instrumentation-Options.html#index-fharden-control-flow-redundancy)
+
+fhardcfr-skip-leaf
+UrlSuffix(gcc/Instrumentation-Options.html#index-fhardcfr-skip-leaf)
+
+fhardcfr-check-returning-calls
+UrlSuffix(gcc/Instrumentation-Options.html#index-fhardcfr-check-returning-calls)
+
+fhardcfr-check-exceptions
+UrlSuffix(gcc/Instrumentation-Options.html#index-fhardcfr-check-exceptions)
+
+fhardcfr-check-noreturn-calls=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fhardcfr-check-noreturn-calls)
+
+fident
+UrlSuffix(gcc/Code-Gen-Options.html#index-fident)
+
+fif-conversion
+UrlSuffix(gcc/Optimize-Options.html#index-fif-conversion)
+
+fif-conversion2
+UrlSuffix(gcc/Optimize-Options.html#index-fif-conversion2)
+
+ftree-loop-if-convert
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-loop-if-convert)
+
+finhibit-size-directive
+UrlSuffix(gcc/Code-Gen-Options.html#index-finhibit-size-directive)
+
+findirect-inlining
+UrlSuffix(gcc/Optimize-Options.html#index-findirect-inlining)
+
+finline
+UrlSuffix(gcc/Optimize-Options.html#index-finline)
+
+finline-small-functions
+UrlSuffix(gcc/Optimize-Options.html#index-finline-small-functions)
+
+finline-functions
+UrlSuffix(gcc/Optimize-Options.html#index-finline-functions)
+
+finline-functions-called-once
+UrlSuffix(gcc/Optimize-Options.html#index-finline-functions-called-once)
+
+finline-limit=
+UrlSuffix(gcc/Optimize-Options.html#index-finline-limit)
+
+fcf-protection
+UrlSuffix(gcc/Instrumentation-Options.html#index-fcf-protection)
+
+fcf-protection=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fcf-protection)
+
+finstrument-functions
+UrlSuffix(gcc/Instrumentation-Options.html#index-finstrument-functions)
+
+finstrument-functions-once
+UrlSuffix(gcc/Instrumentation-Options.html#index-finstrument-functions-once)
+
+finstrument-functions-exclude-function-list=
+UrlSuffix(gcc/Instrumentation-Options.html#index-finstrument-functions-exclude-function-list)
+
+finstrument-functions-exclude-file-list=
+UrlSuffix(gcc/Instrumentation-Options.html#index-finstrument-functions-exclude-file-list)
+
+fipa-cp
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-cp)
+
+fipa-cp-clone
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-cp-clone)
+
+fipa-bit-cp
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-bit-cp)
+
+fipa-modref
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-modref)
+
+fipa-profile
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-profile)
+
+fipa-pta
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-pta)
+
+fipa-pure-const
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-pure-const)
+
+fipa-icf
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-icf)
+
+fipa-reference
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-reference)
+
+fipa-reference-addressable
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-reference-addressable)
+
+fipa-stack-alignment
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-stack-alignment)
+
+fipa-vrp
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-vrp)
+
+fira-algorithm=
+UrlSuffix(gcc/Optimize-Options.html#index-fira-algorithm)
+
+fipa-strict-aliasing
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-strict-aliasing)
+
+fira-region=
+UrlSuffix(gcc/Optimize-Options.html#index-fira-region)
+
+fira-hoist-pressure
+UrlSuffix(gcc/Optimize-Options.html#index-fira-hoist-pressure)
+
+fira-loop-pressure
+UrlSuffix(gcc/Optimize-Options.html#index-fira-loop-pressure)
+
+fira-share-save-slots
+UrlSuffix(gcc/Optimize-Options.html#index-fira-share-save-slots)
+
+fira-share-spill-slots
+UrlSuffix(gcc/Optimize-Options.html#index-fira-share-spill-slots)
+
+fira-verbose=
+UrlSuffix(gcc/Developer-Options.html#index-fira-verbose)
+
+fivopts
+UrlSuffix(gcc/Optimize-Options.html#index-fivopts)
+
+fjump-tables
+UrlSuffix(gcc/Code-Gen-Options.html#index-fjump-tables)
+
+fbit-tests
+UrlSuffix(gcc/Code-Gen-Options.html#index-fbit-tests)
+
+; skipping UrlSuffix for 'fkeep-inline-functions' due to multiple URLs:
+;   duplicate: 'gcc/Inline.html#index-fkeep-inline-functions-1'
+;   duplicate: 'gcc/Optimize-Options.html#index-fkeep-inline-functions'
+
+fkeep-static-functions
+UrlSuffix(gcc/Optimize-Options.html#index-fkeep-static-functions)
+
+fkeep-static-consts
+UrlSuffix(gcc/Optimize-Options.html#index-fkeep-static-consts)
+
+fleading-underscore
+UrlSuffix(gcc/Code-Gen-Options.html#index-fleading-underscore)
+
+flra-remat
+UrlSuffix(gcc/Optimize-Options.html#index-flra-remat)
+
+flto
+UrlSuffix(gcc/Optimize-Options.html#index-flto)
+
+flto=
+UrlSuffix(gcc/Optimize-Options.html#index-flto)
+
+flto-partition=
+UrlSuffix(gcc/Optimize-Options.html#index-flto-partition)
+
+flto-compression-level=
+UrlSuffix(gcc/Optimize-Options.html#index-flto-compression-level)
+
+flto-report
+UrlSuffix(gcc/Developer-Options.html#index-flto-report)
+
+flto-report-wpa
+UrlSuffix(gcc/Developer-Options.html#index-flto-report-wpa)
+
+fmath-errno
+UrlSuffix(gcc/Optimize-Options.html#index-fmath-errno)
+
+fmax-errors=
+UrlSuffix(gcc/Warning-Options.html#index-fmax-errors) LangUrlSuffix_D(gdc/Warnings.html#index-fmax-errors)
+
+fmem-report
+UrlSuffix(gcc/Developer-Options.html#index-fmem-report)
+
+fmem-report-wpa
+UrlSuffix(gcc/Developer-Options.html#index-fmem-report-wpa)
+
+fmerge-all-constants
+UrlSuffix(gcc/Optimize-Options.html#index-fmerge-all-constants)
+
+fmerge-constants
+UrlSuffix(gcc/Optimize-Options.html#index-fmerge-constants)
+
+fmerge-debug-strings
+UrlSuffix(gcc/Debugging-Options.html#index-fmerge-debug-strings)
+
+fmessage-length=
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fmessage-length)
+
+fmodulo-sched
+UrlSuffix(gcc/Optimize-Options.html#index-fmodulo-sched)
+
+fmodulo-sched-allow-regmoves
+UrlSuffix(gcc/Optimize-Options.html#index-fmodulo-sched-allow-regmoves)
+
+fmove-loop-invariants
+UrlSuffix(gcc/Optimize-Options.html#index-fmove-loop-invariants)
+
+fmove-loop-stores
+UrlSuffix(gcc/Optimize-Options.html#index-fmove-loop-stores)
+
+fmultiflags
+UrlSuffix(gcc/Developer-Options.html#index-fmultiflags)
+
+fdce
+UrlSuffix(gcc/Optimize-Options.html#index-fdce)
+
+fdse
+UrlSuffix(gcc/Optimize-Options.html#index-fdse)
+
+freschedule-modulo-scheduled-loops
+UrlSuffix(gcc/Optimize-Options.html#index-freschedule-modulo-scheduled-loops)
+
+fnon-call-exceptions
+UrlSuffix(gcc/Code-Gen-Options.html#index-fnon-call-exceptions)
+
+foffload=
+UrlSuffix(gcc/C-Dialect-Options.html#index-foffload)
+
+foffload-options=
+UrlSuffix(gcc/C-Dialect-Options.html#index-foffload-options)
+
+fomit-frame-pointer
+UrlSuffix(gcc/Optimize-Options.html#index-fomit-frame-pointer)
+
+fopenmp-target-simd-clone
+UrlSuffix(gcc/C-Dialect-Options.html#index-fopenmp-target-simd-clone)
+
+fopenmp-target-simd-clone=
+UrlSuffix(gcc/C-Dialect-Options.html#index-fopenmp-target-simd-clone)
+
+fopt-info
+UrlSuffix(gcc/Developer-Options.html#index-fopt-info)
+
+fsave-optimization-record
+UrlSuffix(gcc/Developer-Options.html#index-fsave-optimization-record)
+
+foptimize-sibling-calls
+UrlSuffix(gcc/Optimize-Options.html#index-foptimize-sibling-calls)
+
+fpartial-inlining
+UrlSuffix(gcc/Optimize-Options.html#index-fpartial-inlining)
+
+fpre-ipa-mem-report
+UrlSuffix(gcc/Developer-Options.html#index-fpre-ipa-mem-report)
+
+fpost-ipa-mem-report
+UrlSuffix(gcc/Developer-Options.html#index-fpost-ipa-mem-report)
+
+fpack-struct
+UrlSuffix(gcc/Code-Gen-Options.html#index-fpack-struct)
+
+fpack-struct=
+UrlSuffix(gcc/Code-Gen-Options.html#index-fpack-struct)
+
+; skipping UrlSuffix for 'fpcc-struct-return' due to multiple URLs:
+;   duplicate: 'gcc/Code-Gen-Options.html#index-fpcc-struct-return'
+;   duplicate: 'gcc/Incompatibilities.html#index-fpcc-struct-return-1'
+
+fpeel-loops
+UrlSuffix(gcc/Optimize-Options.html#index-fpeel-loops)
+
+fpeephole
+UrlSuffix(gcc/Optimize-Options.html#index-fno-peephole)
+
+fpeephole2
+UrlSuffix(gcc/Optimize-Options.html#index-fno-peephole2)
+
+fPIC
+UrlSuffix(gcc/Code-Gen-Options.html#index-fPIC)
+
+fPIE
+UrlSuffix(gcc/Code-Gen-Options.html#index-fPIE)
+
+fpic
+UrlSuffix(gcc/Code-Gen-Options.html#index-fpic)
+
+fpie
+UrlSuffix(gcc/Code-Gen-Options.html#index-fpie)
+
+fplt
+UrlSuffix(gcc/Code-Gen-Options.html#index-fno-plt)
+
+fplugin=
+UrlSuffix(gcc/Overall-Options.html#index-fplugin)
+
+fpredictive-commoning
+UrlSuffix(gcc/Optimize-Options.html#index-fpredictive-commoning)
+
+fprefetch-loop-arrays
+UrlSuffix(gcc/Optimize-Options.html#index-fprefetch-loop-arrays)
+
+fprofile-abs-path
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-abs-path)
+
+; skipping UrlSuffix for 'fprofile-arcs' due to multiple URLs:
+;   duplicate: 'gcc/Instrumentation-Options.html#index-fprofile-arcs'
+;   duplicate: 'gcc/Other-Builtins.html#index-fprofile-arcs-1'
+
+fprofile-dir=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-dir)
+
+fprofile-note=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-note)
+
+fprofile-correction
+UrlSuffix(gcc/Optimize-Options.html#index-fprofile-correction)
+
+fprofile-update=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-update)
+
+fprofile-filter-files=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-filter-files)
+
+fprofile-exclude-files=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-exclude-files)
+
+fprofile-reproducible=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-reproducible)
+
+fprofile-prefix-path=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-prefix-path)
+
+fprofile-prefix-map=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-prefix-map)
+
+fprofile-generate
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-generate)
+
+fprofile-generate=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-generate)
+
+fprofile-info-section
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-info-section)
+
+fprofile-info-section=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-info-section)
+
+fprofile-partial-training
+UrlSuffix(gcc/Optimize-Options.html#index-fprofile-partial-training)
+
+fprofile-use
+UrlSuffix(gcc/Optimize-Options.html#index-fprofile-use)
+
+fprofile-use=
+UrlSuffix(gcc/Optimize-Options.html#index-fprofile-use)
+
+fprofile-values
+UrlSuffix(gcc/Optimize-Options.html#index-fprofile-values)
+
+fprofile-report
+UrlSuffix(gcc/Developer-Options.html#index-fprofile-report)
+
+fprofile-reorder-functions
+UrlSuffix(gcc/Optimize-Options.html#index-fprofile-reorder-functions)
+
+fpatchable-function-entry=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fpatchable-function-entry)
+
+frandom-seed
+UrlSuffix(gcc/Developer-Options.html#index-frandom-seed)
+
+frandom-seed=
+UrlSuffix(gcc/Developer-Options.html#index-frandom-seed)
+
+frecord-gcc-switches
+UrlSuffix(gcc/Code-Gen-Options.html#index-frecord-gcc-switches)
+
+freg-struct-return
+UrlSuffix(gcc/Code-Gen-Options.html#index-freg-struct-return)
+
+flifetime-dse
+UrlSuffix(gcc/Optimize-Options.html#index-flifetime-dse)
+
+flifetime-dse=
+UrlSuffix(gcc/Optimize-Options.html#index-flifetime-dse)
+
+flive-patching
+UrlSuffix(gcc/Optimize-Options.html#index-flive-patching)
+
+flive-patching=
+UrlSuffix(gcc/Optimize-Options.html#index-flive-patching)
+
+fallocation-dce
+UrlSuffix(gcc/Optimize-Options.html#index-fno-allocation-dce)
+
+flive-range-shrinkage
+UrlSuffix(gcc/Optimize-Options.html#index-flive-range-shrinkage)
+
+frename-registers
+UrlSuffix(gcc/Optimize-Options.html#index-frename-registers)
+
+fschedule-fusion
+UrlSuffix(gcc/Optimize-Options.html#index-fschedule-fusion)
+
+freorder-blocks
+UrlSuffix(gcc/Optimize-Options.html#index-freorder-blocks)
+
+freorder-blocks-algorithm=
+UrlSuffix(gcc/Optimize-Options.html#index-freorder-blocks-algorithm)
+
+freorder-blocks-and-partition
+UrlSuffix(gcc/Optimize-Options.html#index-freorder-blocks-and-partition)
+
+freorder-functions
+UrlSuffix(gcc/Optimize-Options.html#index-freorder-functions)
+
+frerun-cse-after-loop
+UrlSuffix(gcc/Optimize-Options.html#index-frerun-cse-after-loop)
+
+frounding-math
+UrlSuffix(gcc/Optimize-Options.html#index-frounding-math)
+
+fsched-interblock
+UrlSuffix(gcc/Optimize-Options.html#index-fno-sched-interblock)
+
+fsched-pressure
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-pressure)
+
+fsched-spec
+UrlSuffix(gcc/Optimize-Options.html#index-fno-sched-spec)
+
+fsched-spec-load
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-spec-load)
+
+fsched-spec-load-dangerous
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-spec-load-dangerous)
+
+fsched-verbose=
+UrlSuffix(gcc/Developer-Options.html#index-fsched-verbose)
+
+fsched2-use-superblocks
+UrlSuffix(gcc/Optimize-Options.html#index-fsched2-use-superblocks)
+
+fschedule-insns
+UrlSuffix(gcc/Optimize-Options.html#index-fschedule-insns)
+
+fschedule-insns2
+UrlSuffix(gcc/Optimize-Options.html#index-fschedule-insns2)
+
+fselective-scheduling
+UrlSuffix(gcc/Optimize-Options.html#index-fselective-scheduling)
+
+fselective-scheduling2
+UrlSuffix(gcc/Optimize-Options.html#index-fselective-scheduling2)
+
+fsel-sched-pipelining
+UrlSuffix(gcc/Optimize-Options.html#index-fsel-sched-pipelining)
+
+fsel-sched-pipelining-outer-loops
+UrlSuffix(gcc/Optimize-Options.html#index-fsel-sched-pipelining-outer-loops)
+
+fsemantic-interposition
+UrlSuffix(gcc/Optimize-Options.html#index-fsemantic-interposition)
+
+fsched-stalled-insns
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-stalled-insns)
+
+fsched-stalled-insns=
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-stalled-insns)
+
+fsched-stalled-insns-dep
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-stalled-insns-dep)
+
+fsched-stalled-insns-dep=
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-stalled-insns-dep)
+
+fsched-group-heuristic
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-group-heuristic)
+
+fsched-critical-path-heuristic
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-critical-path-heuristic)
+
+fsched-spec-insn-heuristic
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-spec-insn-heuristic)
+
+fsched-rank-heuristic
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-rank-heuristic)
+
+fsched-last-insn-heuristic
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-last-insn-heuristic)
+
+fsched-dep-count-heuristic
+UrlSuffix(gcc/Optimize-Options.html#index-fsched-dep-count-heuristic)
+
+fsection-anchors
+UrlSuffix(gcc/Optimize-Options.html#index-fsection-anchors)
+
+free
+UrlSuffix(gcc/Optimize-Options.html#index-free-1)
+
+fshow-column
+UrlSuffix(gcc/Diagnostic-Message-Formatting-Options.html#index-fno-show-column)
+
+fshrink-wrap
+UrlSuffix(gcc/Optimize-Options.html#index-fshrink-wrap)
+
+fshrink-wrap-separate
+UrlSuffix(gcc/Optimize-Options.html#index-fshrink-wrap-separate)
+
+fsignaling-nans
+UrlSuffix(gcc/Optimize-Options.html#index-fsignaling-nans)
+
+fsigned-zeros
+UrlSuffix(gcc/Optimize-Options.html#index-fno-signed-zeros)
+
+fsingle-precision-constant
+UrlSuffix(gcc/Optimize-Options.html#index-fsingle-precision-constant)
+
+fsplit-ivs-in-unroller
+UrlSuffix(gcc/Optimize-Options.html#index-fsplit-ivs-in-unroller)
+
+fsplit-stack
+UrlSuffix(gcc/Instrumentation-Options.html#index-fsplit-stack)
+
+fsplit-wide-types
+UrlSuffix(gcc/Optimize-Options.html#index-fsplit-wide-types)
+
+fsplit-wide-types-early
+UrlSuffix(gcc/Optimize-Options.html#index-fsplit-wide-types-early)
+
+fssa-backprop
+UrlSuffix(gcc/Optimize-Options.html#index-fssa-backprop)
+
+fssa-phiopt
+UrlSuffix(gcc/Optimize-Options.html#index-fssa-phiopt)
+
+fstdarg-opt
+UrlSuffix(gcc/Optimize-Options.html#index-fstdarg-opt)
+
+fvariable-expansion-in-unroller
+UrlSuffix(gcc/Optimize-Options.html#index-fvariable-expansion-in-unroller)
+
+fstack-check=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fstack-check)
+
+fstack-check
+UrlSuffix(gcc/Instrumentation-Options.html#index-fstack-check)
+
+fstack-clash-protection
+UrlSuffix(gcc/Instrumentation-Options.html#index-fstack-clash-protection)
+
+fstack-limit
+UrlSuffix(gcc/Instrumentation-Options.html#index-fno-stack-limit)
+
+fstack-limit-register=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fstack-limit-register)
+
+fstack-limit-symbol=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fstack-limit-symbol)
+
+fstack-protector
+UrlSuffix(gcc/Instrumentation-Options.html#index-fstack-protector)
+
+fstack-protector-all
+UrlSuffix(gcc/Instrumentation-Options.html#index-fstack-protector-all)
+
+fstack-protector-strong
+UrlSuffix(gcc/Instrumentation-Options.html#index-fstack-protector-strong)
+
+fstack-protector-explicit
+UrlSuffix(gcc/Instrumentation-Options.html#index-fstack-protector-explicit)
+
+fstack-usage
+UrlSuffix(gcc/Developer-Options.html#index-fstack-usage)
+
+fstrict-aliasing
+UrlSuffix(gcc/Optimize-Options.html#index-fstrict-aliasing)
+
+fstrict-overflow
+UrlSuffix(gcc/Code-Gen-Options.html#index-fstrict-overflow)
+
+fsync-libcalls
+UrlSuffix(gcc/Code-Gen-Options.html#index-fsync-libcalls)
+
+fsyntax-only
+UrlSuffix(gcc/Warning-Options.html#index-fsyntax-only) LangUrlSuffix_D(gdc/Warnings.html#index-fno-syntax-only)
+
+ftest-coverage
+UrlSuffix(gcc/Instrumentation-Options.html#index-ftest-coverage)
+
+fthread-jumps
+UrlSuffix(gcc/Optimize-Options.html#index-fthread-jumps)
+
+ftime-report
+UrlSuffix(gcc/Developer-Options.html#index-ftime-report)
+
+ftime-report-details
+UrlSuffix(gcc/Developer-Options.html#index-ftime-report-details)
+
+ftls-model=
+UrlSuffix(gcc/Code-Gen-Options.html#index-ftls-model)
+
+ftoplevel-reorder
+UrlSuffix(gcc/Optimize-Options.html#index-fno-toplevel-reorder)
+
+ftracer
+UrlSuffix(gcc/Optimize-Options.html#index-ftracer)
+
+ftrampolines
+UrlSuffix(gcc/Code-Gen-Options.html#index-ftrampolines)
+
+ftrampoline-impl=
+UrlSuffix(gcc/Code-Gen-Options.html#index-ftrampoline-impl)
+
+ftrapping-math
+UrlSuffix(gcc/Optimize-Options.html#index-fno-trapping-math)
+
+ftrapv
+UrlSuffix(gcc/Code-Gen-Options.html#index-ftrapv)
+
+ftree-ccp
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-ccp)
+
+ftree-bit-ccp
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-bit-ccp)
+
+ftree-ch
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-ch)
+
+ftree-coalesce-vars
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-coalesce-vars)
+
+ftree-copy-prop
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-copy-prop)
+
+ftree-switch-conversion
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-switch-conversion)
+
+ftree-dce
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-dce)
+
+ftree-dominator-opts
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-dominator-opts)
+
+ftree-tail-merge
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-tail-merge)
+
+ftree-dse
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-dse)
+
+ftree-forwprop
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-forwprop)
+
+ftree-fre
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-fre)
+
+foptimize-strlen
+UrlSuffix(gcc/Optimize-Options.html#index-foptimize-strlen)
+
+fisolate-erroneous-paths-dereference
+UrlSuffix(gcc/Optimize-Options.html#index-fisolate-erroneous-paths-dereference)
+
+fisolate-erroneous-paths-attribute
+UrlSuffix(gcc/Optimize-Options.html#index-fisolate-erroneous-paths-attribute)
+
+ftree-loop-distribution
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-loop-distribution)
+
+ftree-loop-distribute-patterns
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-loop-distribute-patterns)
+
+ftree-loop-im
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-loop-im)
+
+ftree-loop-linear
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-loop-linear)
+
+ftree-loop-ivcanon
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-loop-ivcanon)
+
+ftree-loop-optimize
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-loop-optimize)
+
+ftree-parallelize-loops=
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-parallelize-loops)
+
+ftree-phiprop
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-phiprop)
+
+ftree-pre
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-pre)
+
+ftree-partial-pre
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-partial-pre)
+
+ftree-pta
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-pta)
+
+ftree-reassoc
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-reassoc)
+
+ftree-sink
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-sink)
+
+ftree-slsr
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-slsr)
+
+ftree-sra
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-sra)
+
+ftree-ter
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-ter)
+
+ftree-vrp
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-vrp)
+
+fsplit-paths
+UrlSuffix(gcc/Optimize-Options.html#index-fsplit-paths)
+
+funconstrained-commons
+UrlSuffix(gcc/Optimize-Options.html#index-funconstrained-commons)
+
+funit-at-a-time
+UrlSuffix(gcc/Optimize-Options.html#index-funit-at-a-time)
+
+funreachable-traps
+UrlSuffix(gcc/Optimize-Options.html#index-funreachable-traps)
+
+funroll-loops
+UrlSuffix(gcc/Optimize-Options.html#index-funroll-loops)
+
+funroll-all-loops
+UrlSuffix(gcc/Optimize-Options.html#index-funroll-all-loops)
+
+fassociative-math
+UrlSuffix(gcc/Optimize-Options.html#index-fassociative-math)
+
+freciprocal-math
+UrlSuffix(gcc/Optimize-Options.html#index-freciprocal-math)
+
+funsafe-math-optimizations
+UrlSuffix(gcc/Optimize-Options.html#index-funsafe-math-optimizations)
+
+funswitch-loops
+UrlSuffix(gcc/Optimize-Options.html#index-funswitch-loops)
+
+fsplit-loops
+UrlSuffix(gcc/Optimize-Options.html#index-fsplit-loops)
+
+fversion-loops-for-strides
+UrlSuffix(gcc/Optimize-Options.html#index-fversion-loops-for-strides)
+
+funwind-tables
+UrlSuffix(gcc/Code-Gen-Options.html#index-funwind-tables)
+
+fuse-ld=bfd
+UrlSuffix(gcc/Link-Options.html#index-fuse-ld_003dbfd)
+
+fuse-ld=gold
+UrlSuffix(gcc/Link-Options.html#index-fuse-ld_003dgold)
+
+fuse-ld=lld
+UrlSuffix(gcc/Link-Options.html#index-fuse-ld_003dlld)
+
+fuse-ld=mold
+UrlSuffix(gcc/Link-Options.html#index-fuse-ld_003dmold)
+
+fuse-linker-plugin
+UrlSuffix(gcc/Optimize-Options.html#index-fuse-linker-plugin)
+
+fvar-tracking
+UrlSuffix(gcc/Debugging-Options.html#index-fvar-tracking)
+
+fvar-tracking-assignments
+UrlSuffix(gcc/Debugging-Options.html#index-fno-var-tracking-assignments)
+
+fvar-tracking-assignments-toggle
+UrlSuffix(gcc/Developer-Options.html#index-fno-var-tracking-assignments-toggle)
+
+ftree-vectorize
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-vectorize)
+
+ftree-loop-vectorize
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-loop-vectorize)
+
+ftree-slp-vectorize
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-slp-vectorize)
+
+fvect-cost-model=
+UrlSuffix(gcc/Optimize-Options.html#index-fvect-cost-model)
+
+fsimd-cost-model=
+UrlSuffix(gcc/Optimize-Options.html#index-fsimd-cost-model)
+
+fvect-cost-model
+UrlSuffix(gcc/Optimize-Options.html#index-fvect-cost-model)
+
+ftree-scev-cprop
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-scev-cprop)
+
+ftrivial-auto-var-init=
+UrlSuffix(gcc/Optimize-Options.html#index-ftrivial-auto-var-init)
+
+fverbose-asm
+UrlSuffix(gcc/Code-Gen-Options.html#index-fverbose-asm)
+
+fvisibility=
+UrlSuffix(gcc/Code-Gen-Options.html#index-fvisibility)
+
+fvtable-verify=
+UrlSuffix(gcc/Instrumentation-Options.html#index-fvtable-verify)
+
+fvtv-counts
+UrlSuffix(gcc/Instrumentation-Options.html#index-fvtv-counts)
+
+fvtv-debug
+UrlSuffix(gcc/Instrumentation-Options.html#index-fvtv-debug)
+
+fvpt
+UrlSuffix(gcc/Optimize-Options.html#index-fvpt)
+
+fweb
+UrlSuffix(gcc/Optimize-Options.html#index-fweb)
+
+ftree-builtin-call-dce
+UrlSuffix(gcc/Optimize-Options.html#index-ftree-builtin-call-dce)
+
+fwhole-program
+UrlSuffix(gcc/Optimize-Options.html#index-fwhole-program)
+
+fwrapv-pointer
+UrlSuffix(gcc/Code-Gen-Options.html#index-fwrapv-pointer)
+
+fwrapv
+UrlSuffix(gcc/Code-Gen-Options.html#index-fwrapv)
+
+fzero-initialized-in-bss
+UrlSuffix(gcc/Optimize-Options.html#index-fno-zero-initialized-in-bss)
+
+fzero-call-used-regs=
+UrlSuffix(gcc/Optimize-Options.html#index-fzero-call-used-regs)
+
+g
+UrlSuffix(gcc/Debugging-Options.html#index-g)
+
+gas-loc-support
+UrlSuffix(gcc/Debugging-Options.html#index-gas-loc-support)
+
+gas-locview-support
+UrlSuffix(gcc/Debugging-Options.html#index-gas-locview-support)
+
+gcodeview
+UrlSuffix(gcc/Debugging-Options.html#index-gcodeview)
+
+gcolumn-info
+UrlSuffix(gcc/Debugging-Options.html#index-gcolumn-info)
+
+gctf
+UrlSuffix(gcc/Debugging-Options.html#index-gctf)
+
+gbtf
+UrlSuffix(gcc/Debugging-Options.html#index-gbtf)
+
+gdwarf
+UrlSuffix(gcc/Debugging-Options.html#index-gdwarf)
+
+gdwarf32
+UrlSuffix(gcc/Debugging-Options.html#index-gdwarf32)
+
+gdwarf64
+UrlSuffix(gcc/Debugging-Options.html#index-gdwarf64)
+
+ggdb
+UrlSuffix(gcc/Debugging-Options.html#index-ggdb)
+
+ginline-points
+UrlSuffix(gcc/Debugging-Options.html#index-ginline-points)
+
+ginternal-reset-location-views
+UrlSuffix(gcc/Debugging-Options.html#index-ginternal-reset-location-views)
+
+gpubnames
+UrlSuffix(gcc/Debugging-Options.html#index-gpubnames)
+
+ggnu-pubnames
+UrlSuffix(gcc/Debugging-Options.html#index-ggnu-pubnames)
+
+grecord-gcc-switches
+UrlSuffix(gcc/Debugging-Options.html#index-grecord-gcc-switches)
+
+gsplit-dwarf
+UrlSuffix(gcc/Debugging-Options.html#index-gsplit-dwarf)
+
+gstatement-frontiers
+UrlSuffix(gcc/Debugging-Options.html#index-gstatement-frontiers)
+
+gstrict-dwarf
+UrlSuffix(gcc/Debugging-Options.html#index-gstrict-dwarf)
+
+gdescribe-dies
+UrlSuffix(gcc/Debugging-Options.html#index-gdescribe-dies)
+
+gtoggle
+UrlSuffix(gcc/Developer-Options.html#index-gtoggle)
+
+gvariable-location-views
+UrlSuffix(gcc/Debugging-Options.html#index-gvariable-location-views)
+
+gvariable-location-views=incompat5
+UrlSuffix(gcc/Debugging-Options.html#index-gvariable-location-views_003dincompat5)
+
+gvms
+UrlSuffix(gcc/Debugging-Options.html#index-gvms)
+
+gz
+UrlSuffix(gcc/Debugging-Options.html#index-gz)
+
+gz=
+UrlSuffix(gcc/Debugging-Options.html#index-gz)
+
+iplugindir=
+UrlSuffix(gcc/Directory-Options.html#index-iplugindir_003d)
+
+l
+UrlSuffix(gcc/Link-Options.html#index-l)
+
+no-canonical-prefixes
+UrlSuffix(gcc/Directory-Options.html#index-no-canonical-prefixes)
+
+nodefaultlibs
+UrlSuffix(gcc/Link-Options.html#index-nodefaultlibs)
+
+nostartfiles
+UrlSuffix(gcc/Link-Options.html#index-nostartfiles)
+
+nolibc
+UrlSuffix(gcc/Link-Options.html#index-nolibc)
+
+nostdlib
+UrlSuffix(gcc/Link-Options.html#index-nostdlib)
+
+nostdlib++
+UrlSuffix(gcc/Link-Options.html#index-nostdlib_002b_002b)
+
+o
+UrlSuffix(gcc/Overall-Options.html#index-o)
+
+p
+UrlSuffix(gcc/Instrumentation-Options.html#index-p)
+
+pass-exit-codes
+UrlSuffix(gcc/Overall-Options.html#index-pass-exit-codes)
+
+; skipping UrlSuffix for 'pedantic' due to multiple URLs:
+;   duplicate: 'gcc/Alternate-Keywords.html#index-pedantic-3'
+;   duplicate: 'gcc/C-Extensions.html#index-pedantic-2'
+;   duplicate: 'gcc/Standards.html#index-pedantic'
+;   duplicate: 'gcc/Warning-Options.html#index-pedantic-1'
+;   duplicate: 'gcc/Warnings-and-Errors.html#index-pedantic-4'
+
+; skipping UrlSuffix for 'pedantic-errors' due to multiple URLs:
+;   duplicate: 'gcc/Non-bugs.html#index-pedantic-errors-2'
+;   duplicate: 'gcc/Standards.html#index-pedantic-errors'
+;   duplicate: 'gcc/Warning-Options.html#index-pedantic-errors-1'
+;   duplicate: 'gcc/Warnings-and-Errors.html#index-pedantic-errors-3'
+
+pg
+UrlSuffix(gcc/Instrumentation-Options.html#index-pg)
+
+pipe
+UrlSuffix(gcc/Overall-Options.html#index-pipe)
+
+print-file-name=
+UrlSuffix(gcc/Developer-Options.html#index-print-file-name)
+
+print-libgcc-file-name
+UrlSuffix(gcc/Developer-Options.html#index-print-libgcc-file-name)
+
+print-multi-directory
+UrlSuffix(gcc/Developer-Options.html#index-print-multi-directory)
+
+print-multi-lib
+UrlSuffix(gcc/Developer-Options.html#index-print-multi-lib)
+
+print-multi-os-directory
+UrlSuffix(gcc/Developer-Options.html#index-print-multi-os-directory)
+
+print-multiarch
+UrlSuffix(gcc/Developer-Options.html#index-print-multiarch)
+
+print-prog-name=
+UrlSuffix(gcc/Developer-Options.html#index-print-prog-name)
+
+print-search-dirs
+UrlSuffix(gcc/Developer-Options.html#index-print-search-dirs)
+
+print-sysroot
+UrlSuffix(gcc/Developer-Options.html#index-print-sysroot)
+
+print-sysroot-headers-suffix
+UrlSuffix(gcc/Developer-Options.html#index-print-sysroot-headers-suffix)
+
+r
+UrlSuffix(gcc/Link-Options.html#index-r)
+
+s
+UrlSuffix(gcc/Link-Options.html#index-s)
+
+save-temps
+UrlSuffix(gcc/Developer-Options.html#index-save-temps)
+
+save-temps=
+UrlSuffix(gcc/Developer-Options.html#index-save-temps)
+
+time
+UrlSuffix(gcc/Developer-Options.html#index-time)
+
+time=
+UrlSuffix(gcc/Developer-Options.html#index-time)
+
+u
+UrlSuffix(gcc/Link-Options.html#index-u)
+
+undef
+UrlSuffix(gcc/Preprocessor-Options.html#index-undef)
+
+v
+UrlSuffix(gcc/Overall-Options.html#index-v) LangUrlSuffix_D(gdc/Developer-Options.html#index-v)
+
+version
+UrlSuffix(gcc/Overall-Options.html#index-version)
+
+w
+UrlSuffix(gcc/Warning-Options.html#index-w)
+
+wrapper
+UrlSuffix(gcc/Overall-Options.html#index-wrapper)
+
+x
+UrlSuffix(gcc/Overall-Options.html#index-x)
+
+shared
+UrlSuffix(gcc/Link-Options.html#index-shared)
+
+shared-libgcc
+UrlSuffix(gcc/Link-Options.html#index-shared-libgcc)
+
+specs
+UrlSuffix(gcc/Overall-Options.html#index-specs)
+
+specs=
+UrlSuffix(gcc/Overall-Options.html#index-specs)
+
+; skipping UrlSuffix for 'static' due to multiple URLs:
+;   duplicate: 'gcc/Darwin-Options.html#index-static-1'
+;   duplicate: 'gcc/Link-Options.html#index-static'
+
+static-libgcc
+UrlSuffix(gcc/Link-Options.html#index-static-libgcc)
+
+static-libphobos
+LangUrlSuffix_D(gdc/Linking.html#index-static-libphobos)
+
+static-libstdc++
+UrlSuffix(gcc/Link-Options.html#index-static-libstdc_002b_002b)
+
+static-libasan
+UrlSuffix(gcc/Link-Options.html#index-static-libasan)
+
+static-libtsan
+UrlSuffix(gcc/Link-Options.html#index-static-libtsan)
+
+static-liblsan
+UrlSuffix(gcc/Link-Options.html#index-static-liblsan)
+
+static-libubsan
+UrlSuffix(gcc/Link-Options.html#index-static-libubsan)
+
+symbolic
+UrlSuffix(gcc/Link-Options.html#index-symbolic)
+
+no-pie
+UrlSuffix(gcc/Link-Options.html#index-no-pie)
+
+pie
+UrlSuffix(gcc/Link-Options.html#index-pie)
+
+static-pie
+UrlSuffix(gcc/Link-Options.html#index-static-pie)
+
+z
+UrlSuffix(gcc/Link-Options.html#index-z)
+
+fipa-ra
+UrlSuffix(gcc/Optimize-Options.html#index-fipa-ra)
+
diff --git a/gcc/config/aarch64/aarch64.opt.urls b/gcc/config/aarch64/aarch64.opt.urls
new file mode 100644
index 000000000000..82882fee0647
--- /dev/null
+++ b/gcc/config/aarch64/aarch64.opt.urls
@@ -0,0 +1,84 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/aarch64/aarch64.opt and generated HTML
+
+mbig-endian
+UrlSuffix(gcc/AArch64-Options.html#index-mbig-endian)
+
+mgeneral-regs-only
+UrlSuffix(gcc/AArch64-Options.html#index-mgeneral-regs-only)
+
+mharden-sls=
+UrlSuffix(gcc/AArch64-Options.html#index-mharden-sls)
+
+mfix-cortex-a53-835769
+UrlSuffix(gcc/AArch64-Options.html#index-mfix-cortex-a53-835769)
+
+mfix-cortex-a53-843419
+UrlSuffix(gcc/AArch64-Options.html#index-mfix-cortex-a53-843419)
+
+mlittle-endian
+UrlSuffix(gcc/AArch64-Options.html#index-mlittle-endian)
+
+; skipping UrlSuffix for 'mcmodel=' due to finding no URLs
+
+mtp=
+UrlSuffix(gcc/AArch64-Options.html#index-mtp)
+
+mstrict-align
+UrlSuffix(gcc/AArch64-Options.html#index-mstrict-align)
+
+momit-leaf-frame-pointer
+UrlSuffix(gcc/AArch64-Options.html#index-momit-leaf-frame-pointer)
+
+; skipping UrlSuffix for 'mtls-dialect=' due to finding no URLs
+
+mtls-size=
+UrlSuffix(gcc/AArch64-Options.html#index-mtls-size)
+
+march=
+UrlSuffix(gcc/AArch64-Options.html#index-march)
+
+mcpu=
+UrlSuffix(gcc/AArch64-Options.html#index-mcpu)
+
+mtune=
+UrlSuffix(gcc/AArch64-Options.html#index-mtune)
+
+mabi=
+UrlSuffix(gcc/AArch64-Options.html#index-mabi)
+
+moverride=
+UrlSuffix(gcc/AArch64-Options.html#index-moverride)
+
+mpc-relative-literal-loads
+UrlSuffix(gcc/AArch64-Options.html#index-mpc-relative-literal-loads)
+
+mbranch-protection=
+UrlSuffix(gcc/AArch64-Options.html#index-mbranch-protection)
+
+msign-return-address=
+UrlSuffix(gcc/AArch64-Options.html#index-msign-return-address)
+
+mlow-precision-recip-sqrt
+UrlSuffix(gcc/AArch64-Options.html#index-mlow-precision-recip-sqrt)
+
+mlow-precision-sqrt
+UrlSuffix(gcc/AArch64-Options.html#index-mlow-precision-sqrt)
+
+mlow-precision-div
+UrlSuffix(gcc/AArch64-Options.html#index-mlow-precision-div)
+
+msve-vector-bits=
+UrlSuffix(gcc/AArch64-Options.html#index-msve-vector-bits)
+
+mverbose-cost-dump
+UrlSuffix(gcc/AArch64-Options.html#index-mverbose-cost-dump)
+
+mstack-protector-guard=
+UrlSuffix(gcc/AArch64-Options.html#index-mstack-protector-guard)
+
+mstack-protector-guard-reg=
+UrlSuffix(gcc/AArch64-Options.html#index-mstack-protector-guard-reg)
+
+mstack-protector-guard-offset=
+UrlSuffix(gcc/AArch64-Options.html#index-mstack-protector-guard-offset)
+
diff --git a/gcc/config/alpha/alpha.opt.urls b/gcc/config/alpha/alpha.opt.urls
new file mode 100644
index 000000000000..a55c08328c37
--- /dev/null
+++ b/gcc/config/alpha/alpha.opt.urls
@@ -0,0 +1,76 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/alpha/alpha.opt and generated HTML
+
+msoft-float
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-msoft-float-2)
+
+; skipping UrlSuffix for 'mgas' due to finding no URLs
+
+mieee-conformant
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mieee-conformant)
+
+mieee
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mieee)
+
+mieee-with-inexact
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mieee-with-inexact)
+
+mbuild-constants
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mbuild-constants)
+
+mfloat-vax
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mfloat-vax)
+
+mfloat-ieee
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mfloat-ieee)
+
+mbwx
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mbwx)
+
+mmax
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mmax)
+
+mfix
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mfix)
+
+mcix
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mcix)
+
+mexplicit-relocs
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mexplicit-relocs)
+
+msmall-data
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-msmall-data)
+
+mlarge-data
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mlarge-data)
+
+msmall-text
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-msmall-text)
+
+mlarge-text
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mlarge-text)
+
+; skipping UrlSuffix for 'mlong-double-128' due to finding no URLs
+
+; skipping UrlSuffix for 'mlong-double-64' due to finding no URLs
+
+mcpu=
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mcpu-4)
+
+mtune=
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mtune-6)
+
+mfp-rounding-mode=
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mfp-rounding-mode)
+
+mfp-trap-mode=
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mfp-trap-mode)
+
+mtrap-precision=
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mtrap-precision)
+
+mmemory-latency=
+UrlSuffix(gcc/DEC-Alpha-Options.html#index-mmemory-latency)
+
+; skipping UrlSuffix for 'mtls-size=' due to finding no URLs
+
diff --git a/gcc/config/alpha/elf.opt.urls b/gcc/config/alpha/elf.opt.urls
new file mode 100644
index 000000000000..d97d0fe0f6a1
--- /dev/null
+++ b/gcc/config/alpha/elf.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/alpha/elf.opt and generated HTML
+
diff --git a/gcc/config/arc/arc-tables.opt.urls b/gcc/config/arc/arc-tables.opt.urls
new file mode 100644
index 000000000000..1e177e874064
--- /dev/null
+++ b/gcc/config/arc/arc-tables.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/arc/arc-tables.opt and generated HTML
+
diff --git a/gcc/config/arc/arc.opt.urls b/gcc/config/arc/arc.opt.urls
new file mode 100644
index 000000000000..bb9a8ebcc24a
--- /dev/null
+++ b/gcc/config/arc/arc.opt.urls
@@ -0,0 +1,260 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/arc/arc.opt and generated HTML
+
+mbig-endian
+UrlSuffix(gcc/ARC-Options.html#index-mbig-endian-1)
+
+mlittle-endian
+UrlSuffix(gcc/ARC-Options.html#index-mlittle-endian-1)
+
+mno-cond-exec
+UrlSuffix(gcc/ARC-Options.html#index-mno-cond-exec)
+
+mA6
+UrlSuffix(gcc/ARC-Options.html#index-mA6)
+
+mARC600
+UrlSuffix(gcc/ARC-Options.html#index-mARC600)
+
+mARC601
+UrlSuffix(gcc/ARC-Options.html#index-mARC601)
+
+mA7
+UrlSuffix(gcc/ARC-Options.html#index-mA7)
+
+mARC700
+UrlSuffix(gcc/ARC-Options.html#index-mARC700)
+
+mjli-always
+UrlSuffix(gcc/ARC-Options.html#index-mjli-always)
+
+mmpy-option=
+UrlSuffix(gcc/ARC-Options.html#index-mmpy-option)
+
+mdiv-rem
+UrlSuffix(gcc/ARC-Options.html#index-mdiv-rem)
+
+mcode-density
+UrlSuffix(gcc/ARC-Options.html#index-mcode-density)
+
+mmixed-code
+UrlSuffix(gcc/ARC-Options.html#index-mmixed-code)
+
+mvolatile-cache
+UrlSuffix(gcc/ARC-Options.html#index-mvolatile-cache)
+
+mno-volatile-cache
+UrlSuffix(gcc/ARC-Options.html#index-mno-volatile-cache)
+
+mbarrel-shifter
+UrlSuffix(gcc/ARC-Options.html#index-mbarrel-shifter)
+
+mnorm
+UrlSuffix(gcc/ARC-Options.html#index-mnorm)
+
+mswap
+UrlSuffix(gcc/ARC-Options.html#index-mswap)
+
+mmul64
+UrlSuffix(gcc/ARC-Options.html#index-mmul64)
+
+mno-mpy
+UrlSuffix(gcc/ARC-Options.html#index-mno-mpy)
+
+mea
+UrlSuffix(gcc/ARC-Options.html#index-mea)
+
+msoft-float
+UrlSuffix(gcc/ARC-Options.html#index-msoft-float)
+
+mlong-calls
+UrlSuffix(gcc/ARC-Options.html#index-mlong-calls-1)
+
+mno-brcc
+UrlSuffix(gcc/ARC-Options.html#index-mno-brcc)
+
+msdata
+UrlSuffix(gcc/ARC-Options.html#index-msdata)
+
+mmillicode
+UrlSuffix(gcc/ARC-Options.html#index-mmillicode)
+
+mspfp
+UrlSuffix(gcc/ARC-Options.html#index-mspfp)
+
+mspfp-compact
+UrlSuffix(gcc/ARC-Options.html#index-mspfp-compact)
+
+mspfp-fast
+UrlSuffix(gcc/ARC-Options.html#index-mspfp-fast)
+
+margonaut
+UrlSuffix(gcc/ARC-Options.html#index-margonaut)
+
+mdpfp
+UrlSuffix(gcc/ARC-Options.html#index-mdpfp)
+
+mdpfp-compact
+UrlSuffix(gcc/ARC-Options.html#index-mdpfp-compact)
+
+mdpfp-fast
+UrlSuffix(gcc/ARC-Options.html#index-mdpfp-fast)
+
+mno-dpfp-lrsr
+UrlSuffix(gcc/ARC-Options.html#index-mno-dpfp-lrsr)
+
+msimd
+UrlSuffix(gcc/ARC-Options.html#index-msimd)
+
+mcpu=
+UrlSuffix(gcc/ARC-Options.html#index-mcpu-1)
+
+msize-level=
+UrlSuffix(gcc/ARC-Options.html#index-msize-level)
+
+misize
+UrlSuffix(gcc/ARC-Options.html#index-misize)
+
+mmultcost=
+UrlSuffix(gcc/ARC-Options.html#index-mmultcost)
+
+mtune=
+UrlSuffix(gcc/ARC-Options.html#index-mtune-2)
+
+mindexed-loads
+UrlSuffix(gcc/ARC-Options.html#index-mindexed-loads)
+
+mauto-modify-reg
+UrlSuffix(gcc/ARC-Options.html#index-mauto-modify-reg)
+
+mmul32x16
+UrlSuffix(gcc/ARC-Options.html#index-mmul32x16)
+
+munalign-prob-threshold=
+UrlSuffix(gcc/ARC-Options.html#index-munalign-prob-threshold)
+
+mmedium-calls
+UrlSuffix(gcc/ARC-Options.html#index-mmedium-calls)
+
+mannotate-align
+UrlSuffix(gcc/ARC-Options.html#index-mannotate-align)
+
+malign-call
+UrlSuffix(gcc/ARC-Options.html#index-malign-call)
+
+mRcq
+UrlSuffix(gcc/ARC-Options.html#index-mRcq)
+
+mRcw
+UrlSuffix(gcc/ARC-Options.html#index-mRcw)
+
+mearly-cbranchsi
+UrlSuffix(gcc/ARC-Options.html#index-mearly-cbranchsi)
+
+mbbit-peephole
+UrlSuffix(gcc/ARC-Options.html#index-mbbit-peephole)
+
+mcase-vector-pcrel
+UrlSuffix(gcc/ARC-Options.html#index-mcase-vector-pcrel)
+
+mcompact-casesi
+UrlSuffix(gcc/ARC-Options.html#index-mcompact-casesi)
+
+mq-class
+UrlSuffix(gcc/ARC-Options.html#index-mq-class)
+
+mexpand-adddi
+UrlSuffix(gcc/ARC-Options.html#index-mexpand-adddi)
+
+; skipping UrlSuffix for 'mcrc' due to finding no URLs
+
+mdsp-packa
+UrlSuffix(gcc/ARC-Options.html#index-mdsp-packa)
+
+mdvbf
+UrlSuffix(gcc/ARC-Options.html#index-mdvbf)
+
+mmac-d16
+UrlSuffix(gcc/ARC-Options.html#index-mmac-d16)
+
+mmac-24
+UrlSuffix(gcc/ARC-Options.html#index-mmac-24)
+
+mtelephony
+UrlSuffix(gcc/ARC-Options.html#index-mtelephony)
+
+mxy
+UrlSuffix(gcc/ARC-Options.html#index-mxy)
+
+mlock
+UrlSuffix(gcc/ARC-Options.html#index-mlock)
+
+mswape
+UrlSuffix(gcc/ARC-Options.html#index-mswape)
+
+mrtsc
+UrlSuffix(gcc/ARC-Options.html#index-mrtsc)
+
+EB
+UrlSuffix(gcc/ARC-Options.html#index-EB)
+
+EL
+UrlSuffix(gcc/ARC-Options.html#index-EL)
+
+marclinux
+UrlSuffix(gcc/ARC-Options.html#index-marclinux)
+
+marclinux_prof
+UrlSuffix(gcc/ARC-Options.html#index-marclinux_005fprof)
+
+mlra
+UrlSuffix(gcc/ARC-Options.html#index-mlra)
+
+mlra-priority-none
+UrlSuffix(gcc/ARC-Options.html#index-mlra-priority-none)
+
+mlra-priority-compact
+UrlSuffix(gcc/ARC-Options.html#index-mlra-priority-compact)
+
+mlra-priority-noncompact
+UrlSuffix(gcc/ARC-Options.html#index-mlra-priority-noncompact)
+
+mEA
+UrlSuffix(gcc/ARC-Options.html#index-mEA)
+
+multcost=
+UrlSuffix(gcc/ARC-Options.html#index-multcost)
+
+matomic
+UrlSuffix(gcc/ARC-Options.html#index-matomic)
+
+mll64
+UrlSuffix(gcc/ARC-Options.html#index-mll64)
+
+mfpu=
+UrlSuffix(gcc/ARC-Options.html#index-mfpu)
+
+mtp-regno=
+UrlSuffix(gcc/ARC-Options.html#index-mtp-regno)
+
+; skipping UrlSuffix for 'mbitops' due to finding no URLs
+
+; skipping UrlSuffix for 'munaligned-access' due to finding no URLs
+
+mirq-ctrl-saved=
+UrlSuffix(gcc/ARC-Options.html#index-mirq-ctrl-saved)
+
+mrgf-banked-regs=
+UrlSuffix(gcc/ARC-Options.html#index-mrgf-banked-regs)
+
+mlpc-width=
+UrlSuffix(gcc/ARC-Options.html#index-mlpc-width)
+
+mrf16
+UrlSuffix(gcc/ARC-Options.html#index-mrf16)
+
+mbranch-index
+UrlSuffix(gcc/ARC-Options.html#index-mbranch-index)
+
+mcode-density-frame
+UrlSuffix(gcc/ARC-Options.html#index-mcode-density-frame)
+
diff --git a/gcc/config/arm/arm-tables.opt.urls b/gcc/config/arm/arm-tables.opt.urls
new file mode 100644
index 000000000000..f0a6f8e1600c
--- /dev/null
+++ b/gcc/config/arm/arm-tables.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/arm/arm-tables.opt and generated HTML
+
diff --git a/gcc/config/arm/arm.opt.urls b/gcc/config/arm/arm.opt.urls
new file mode 100644
index 000000000000..b3696f78bc73
--- /dev/null
+++ b/gcc/config/arm/arm.opt.urls
@@ -0,0 +1,149 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/arm/arm.opt and generated HTML
+
+mabi=
+UrlSuffix(gcc/ARM-Options.html#index-mabi-1)
+
+mabort-on-noreturn
+UrlSuffix(gcc/ARM-Options.html#index-mabort-on-noreturn)
+
+mapcs
+UrlSuffix(gcc/ARM-Options.html#index-mapcs)
+
+mapcs-frame
+UrlSuffix(gcc/ARM-Options.html#index-mapcs-frame)
+
+march=
+UrlSuffix(gcc/ARM-Options.html#index-march-2)
+
+marm
+UrlSuffix(gcc/ARM-Options.html#index-marm)
+
+mbig-endian
+UrlSuffix(gcc/ARM-Options.html#index-mbig-endian-2)
+
+mcallee-super-interworking
+UrlSuffix(gcc/ARM-Options.html#index-mcallee-super-interworking)
+
+mcaller-super-interworking
+UrlSuffix(gcc/ARM-Options.html#index-mcaller-super-interworking)
+
+mcpu=
+UrlSuffix(gcc/ARM-Options.html#index-mcpu-2)
+
+mfloat-abi=
+UrlSuffix(gcc/ARM-Options.html#index-mfloat-abi)
+
+mcmse
+UrlSuffix(gcc/ARM-Options.html#index-mcmse)
+
+mflip-thumb
+UrlSuffix(gcc/ARM-Options.html#index-mflip-thumb)
+
+mfp16-format=
+UrlSuffix(gcc/ARM-Options.html#index-mfp16-format)
+
+mfpu=
+UrlSuffix(gcc/ARM-Options.html#index-mfpu-1)
+
+; skipping UrlSuffix for 'mhard-float' due to finding no URLs
+
+mlittle-endian
+UrlSuffix(gcc/ARM-Options.html#index-mlittle-endian-2)
+
+mlong-calls
+UrlSuffix(gcc/ARM-Options.html#index-mlong-calls-2)
+
+mpic-data-is-text-relative
+UrlSuffix(gcc/ARM-Options.html#index-mpic-data-is-text-relative)
+
+mpic-register=
+UrlSuffix(gcc/ARM-Options.html#index-mpic-register)
+
+mpoke-function-name
+UrlSuffix(gcc/ARM-Options.html#index-mpoke-function-name)
+
+msched-prolog
+UrlSuffix(gcc/ARM-Options.html#index-msched-prolog)
+
+msingle-pic-base
+UrlSuffix(gcc/ARM-Options.html#index-msingle-pic-base)
+
+; skipping UrlSuffix for 'msoft-float' due to finding no URLs
+
+mstructure-size-boundary=
+UrlSuffix(gcc/ARM-Options.html#index-mstructure-size-boundary)
+
+mthumb
+UrlSuffix(gcc/ARM-Options.html#index-mthumb)
+
+mthumb-interwork
+UrlSuffix(gcc/ARM-Options.html#index-mthumb-interwork)
+
+mtls-dialect=
+UrlSuffix(gcc/ARM-Options.html#index-mtls-dialect)
+
+mtp=
+UrlSuffix(gcc/ARM-Options.html#index-mtp-1)
+
+mtpcs-frame
+UrlSuffix(gcc/ARM-Options.html#index-mtpcs-frame)
+
+mtpcs-leaf-frame
+UrlSuffix(gcc/ARM-Options.html#index-mtpcs-leaf-frame)
+
+mtune=
+UrlSuffix(gcc/ARM-Options.html#index-mtune-4)
+
+mprint-tune-info
+UrlSuffix(gcc/ARM-Options.html#index-mprint-tune-info)
+
+mverbose-cost-dump
+UrlSuffix(gcc/ARM-Options.html#index-mverbose-cost-dump-1)
+
+mword-relocations
+UrlSuffix(gcc/ARM-Options.html#index-mword-relocations)
+
+mrestrict-it
+UrlSuffix(gcc/ARM-Options.html#index-mrestrict-it)
+
+mfix-cortex-m3-ldrd
+UrlSuffix(gcc/ARM-Options.html#index-mfix-cortex-m3-ldrd)
+
+mfix-cmse-cve-2021-35465
+UrlSuffix(gcc/ARM-Options.html#index-mfix-cmse-cve-2021-35465)
+
+munaligned-access
+UrlSuffix(gcc/ARM-Options.html#index-munaligned-access)
+
+mneon-for-64bits
+UrlSuffix(gcc/ARM-Options.html#index-mneon-for-64bits)
+
+mslow-flash-data
+UrlSuffix(gcc/ARM-Options.html#index-mslow-flash-data)
+
+masm-syntax-unified
+UrlSuffix(gcc/ARM-Options.html#index-masm-syntax-unified)
+
+mpure-code
+UrlSuffix(gcc/ARM-Options.html#index-mpure-code)
+
+mbe8
+UrlSuffix(gcc/ARM-Options.html#index-mbe8)
+
+; skipping UrlSuffix for 'mbranch-cost=' due to finding no URLs
+
+mbranch-protection=
+UrlSuffix(gcc/ARM-Options.html#index-mbranch-protection-1)
+
+mgeneral-regs-only
+UrlSuffix(gcc/ARM-Options.html#index-mgeneral-regs-only-1)
+
+mfdpic
+UrlSuffix(gcc/ARM-Options.html#index-mfdpic)
+
+mstack-protector-guard=
+UrlSuffix(gcc/ARM-Options.html#index-mstack-protector-guard-1)
+
+mstack-protector-guard-offset=
+UrlSuffix(gcc/ARM-Options.html#index-mstack-protector-guard-offset-1)
+
diff --git a/gcc/config/arm/vxworks.opt.urls b/gcc/config/arm/vxworks.opt.urls
new file mode 100644
index 000000000000..8fe7eec22783
--- /dev/null
+++ b/gcc/config/arm/vxworks.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/arm/vxworks.opt and generated HTML
+
diff --git a/gcc/config/avr/avr.opt.urls b/gcc/config/avr/avr.opt.urls
new file mode 100644
index 000000000000..7af677199cc4
--- /dev/null
+++ b/gcc/config/avr/avr.opt.urls
@@ -0,0 +1,71 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/avr/avr.opt and generated HTML
+
+mcall-prologues
+UrlSuffix(gcc/AVR-Options.html#index-mcall-prologues)
+
+mmcu=
+UrlSuffix(gcc/AVR-Options.html#index-mmcu)
+
+mgas-isr-prologues
+UrlSuffix(gcc/AVR-Options.html#index-mgas-isr-prologues)
+
+mn-flash=
+UrlSuffix(gcc/AVR-Options.html#index-mn-flash)
+
+mrmw
+UrlSuffix(gcc/AVR-Options.html#index-mrmw)
+
+mshort-calls
+UrlSuffix(gcc/AVR-Options.html#index-mshort-calls)
+
+mint8
+UrlSuffix(gcc/AVR-Options.html#index-mint8)
+
+mno-interrupts
+UrlSuffix(gcc/AVR-Options.html#index-mno-interrupts)
+
+mbranch-cost=
+UrlSuffix(gcc/AVR-Options.html#index-mbranch-cost-1)
+
+mmain-is-OS_task
+UrlSuffix(gcc/AVR-Options.html#index-mmain-is-OS_005ftask)
+
+mtiny-stack
+UrlSuffix(gcc/AVR-Options.html#index-mtiny-stack)
+
+mrelax
+UrlSuffix(gcc/AVR-Options.html#index-mrelax)
+
+maccumulate-args
+UrlSuffix(gcc/AVR-Options.html#index-maccumulate-args)
+
+mstrict-X
+UrlSuffix(gcc/AVR-Options.html#index-mstrict-X)
+
+msp8
+UrlSuffix(gcc/AVR-Options.html#index-msp8)
+
+Waddr-space-convert
+UrlSuffix(gcc/AVR-Options.html#index-Waddr-space-convert)
+
+Wmisspelled-isr
+UrlSuffix(gcc/AVR-Options.html#index-Wmisspelled-isr)
+
+mfract-convert-truncate
+UrlSuffix(gcc/AVR-Options.html#index-mfract-convert-truncate)
+
+mabsdata
+UrlSuffix(gcc/AVR-Options.html#index-mabsdata)
+
+mdouble=
+UrlSuffix(gcc/AVR-Options.html#index-mdouble)
+
+mlong-double=
+UrlSuffix(gcc/AVR-Options.html#index-mlong-double)
+
+nodevicelib
+UrlSuffix(gcc/AVR-Options.html#index-nodevicelib)
+
+nodevicespecs
+UrlSuffix(gcc/AVR-Options.html#index-nodevicespecs)
+
diff --git a/gcc/config/bfin/bfin.opt.urls b/gcc/config/bfin/bfin.opt.urls
new file mode 100644
index 000000000000..8210fee663fd
--- /dev/null
+++ b/gcc/config/bfin/bfin.opt.urls
@@ -0,0 +1,61 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/bfin/bfin.opt and generated HTML
+
+msim
+UrlSuffix(gcc/Blackfin-Options.html#index-msim)
+
+mcpu=
+UrlSuffix(gcc/Blackfin-Options.html#index-mcpu_003d)
+
+momit-leaf-frame-pointer
+UrlSuffix(gcc/Blackfin-Options.html#index-momit-leaf-frame-pointer-1)
+
+mlow64k
+UrlSuffix(gcc/Blackfin-Options.html#index-mlow64k)
+
+mcsync-anomaly
+UrlSuffix(gcc/Blackfin-Options.html#index-mcsync-anomaly)
+
+mspecld-anomaly
+UrlSuffix(gcc/Blackfin-Options.html#index-mspecld-anomaly)
+
+mid-shared-library
+UrlSuffix(gcc/Blackfin-Options.html#index-mid-shared-library)
+
+mleaf-id-shared-library
+UrlSuffix(gcc/Blackfin-Options.html#index-mleaf-id-shared-library)
+
+mshared-library-id=
+UrlSuffix(gcc/Blackfin-Options.html#index-mshared-library-id)
+
+msep-data
+UrlSuffix(gcc/Blackfin-Options.html#index-msep-data)
+
+mlong-calls
+UrlSuffix(gcc/Blackfin-Options.html#index-mlong-calls-3)
+
+mfast-fp
+UrlSuffix(gcc/Blackfin-Options.html#index-mfast-fp)
+
+; skipping UrlSuffix for 'mfdpic' due to finding no URLs
+
+minline-plt
+UrlSuffix(gcc/Blackfin-Options.html#index-minline-plt)
+
+mstack-check-l1
+UrlSuffix(gcc/Blackfin-Options.html#index-mstack-check-l1)
+
+mmulticore
+UrlSuffix(gcc/Blackfin-Options.html#index-mmulticore)
+
+mcorea
+UrlSuffix(gcc/Blackfin-Options.html#index-mcorea)
+
+mcoreb
+UrlSuffix(gcc/Blackfin-Options.html#index-mcoreb)
+
+msdram
+UrlSuffix(gcc/Blackfin-Options.html#index-msdram)
+
+micplb
+UrlSuffix(gcc/Blackfin-Options.html#index-micplb)
+
diff --git a/gcc/config/bpf/bpf.opt.urls b/gcc/config/bpf/bpf.opt.urls
new file mode 100644
index 000000000000..8c1e5f86d5cc
--- /dev/null
+++ b/gcc/config/bpf/bpf.opt.urls
@@ -0,0 +1,35 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/bpf/bpf.opt and generated HTML
+
+mbig-endian
+UrlSuffix(gcc/eBPF-Options.html#index-mbig-endian-5)
+
+mlittle-endian
+UrlSuffix(gcc/eBPF-Options.html#index-mlittle-endian-5)
+
+mco-re
+UrlSuffix(gcc/eBPF-Options.html#index-mco-re)
+
+mjmpext
+UrlSuffix(gcc/eBPF-Options.html#index-mjmpext)
+
+malu32
+UrlSuffix(gcc/eBPF-Options.html#index-malu32)
+
+mjmp32
+UrlSuffix(gcc/eBPF-Options.html#index-mjmp32)
+
+mv3-atomics
+UrlSuffix(gcc/eBPF-Options.html#index-mv3-atomics)
+
+mbswap
+UrlSuffix(gcc/eBPF-Options.html#index-mbswap)
+
+msdiv
+UrlSuffix(gcc/eBPF-Options.html#index-msdiv)
+
+msmov
+UrlSuffix(gcc/eBPF-Options.html#index-msmov)
+
+mcpu=
+UrlSuffix(gcc/eBPF-Options.html#index-mcpu-5)
+
diff --git a/gcc/config/c6x/c6x-tables.opt.urls b/gcc/config/c6x/c6x-tables.opt.urls
new file mode 100644
index 000000000000..35d14c753e2c
--- /dev/null
+++ b/gcc/config/c6x/c6x-tables.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/c6x/c6x-tables.opt and generated HTML
+
diff --git a/gcc/config/c6x/c6x.opt.urls b/gcc/config/c6x/c6x.opt.urls
new file mode 100644
index 000000000000..5b1c103b43f2
--- /dev/null
+++ b/gcc/config/c6x/c6x.opt.urls
@@ -0,0 +1,18 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/c6x/c6x.opt and generated HTML
+
+mbig-endian
+UrlSuffix(gcc/C6X-Options.html#index-mbig-endian-3)
+
+mlittle-endian
+UrlSuffix(gcc/C6X-Options.html#index-mlittle-endian-3)
+
+msim
+UrlSuffix(gcc/C6X-Options.html#index-msim-1)
+
+; skipping UrlSuffix for 'msdata=' due to finding no URLs
+
+; skipping UrlSuffix for 'mlong-calls' due to finding no URLs
+
+march=
+UrlSuffix(gcc/C6X-Options.html#index-march-3)
+
diff --git a/gcc/config/cris/cris.opt.urls b/gcc/config/cris/cris.opt.urls
new file mode 100644
index 000000000000..56eeaa25da1c
--- /dev/null
+++ b/gcc/config/cris/cris.opt.urls
@@ -0,0 +1,65 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/cris/cris.opt and generated HTML
+
+mmul-bug-workaround
+UrlSuffix(gcc/CRIS-Options.html#index-mmul-bug-workaround)
+
+metrax4
+UrlSuffix(gcc/CRIS-Options.html#index-metrax4)
+
+metrax100
+UrlSuffix(gcc/CRIS-Options.html#index-metrax100)
+
+mpdebug
+UrlSuffix(gcc/CRIS-Options.html#index-mpdebug)
+
+mcc-init
+UrlSuffix(gcc/CRIS-Options.html#index-mcc-init)
+
+mside-effects
+UrlSuffix(gcc/CRIS-Options.html#index-mside-effects)
+
+mno-side-effects
+UrlSuffix(gcc/CRIS-Options.html#index-mno-side-effects)
+
+mstack-align
+UrlSuffix(gcc/CRIS-Options.html#index-mstack-align)
+
+mno-stack-align
+UrlSuffix(gcc/CRIS-Options.html#index-mno-stack-align)
+
+mdata-align
+UrlSuffix(gcc/CRIS-Options.html#index-mdata-align)
+
+mno-data-align
+UrlSuffix(gcc/CRIS-Options.html#index-mno-data-align)
+
+mconst-align
+UrlSuffix(gcc/CRIS-Options.html#index-mconst-align)
+
+mno-const-align
+UrlSuffix(gcc/CRIS-Options.html#index-mno-const-align)
+
+m32-bit
+UrlSuffix(gcc/CRIS-Options.html#index-m32-bit)
+
+m16-bit
+UrlSuffix(gcc/CRIS-Options.html#index-m16-bit)
+
+m8-bit
+UrlSuffix(gcc/CRIS-Options.html#index-m8-bit)
+
+mprologue-epilogue
+UrlSuffix(gcc/CRIS-Options.html#index-mprologue-epilogue)
+
+mno-prologue-epilogue
+UrlSuffix(gcc/CRIS-Options.html#index-mno-prologue-epilogue)
+
+mcpu=
+UrlSuffix(gcc/CRIS-Options.html#index-mcpu-3)
+
+march=
+UrlSuffix(gcc/CRIS-Options.html#index-march-4)
+
+mtune=
+UrlSuffix(gcc/CRIS-Options.html#index-mtune-5)
+
diff --git a/gcc/config/cris/elf.opt.urls b/gcc/config/cris/elf.opt.urls
new file mode 100644
index 000000000000..bdfa01e97a49
--- /dev/null
+++ b/gcc/config/cris/elf.opt.urls
@@ -0,0 +1,8 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/cris/elf.opt and generated HTML
+
+melf
+UrlSuffix(gcc/CRIS-Options.html#index-melf)
+
+sim
+UrlSuffix(gcc/CRIS-Options.html#index-sim)
+
diff --git a/gcc/config/csky/csky.opt.urls b/gcc/config/csky/csky.opt.urls
new file mode 100644
index 000000000000..96b0b174f7c9
--- /dev/null
+++ b/gcc/config/csky/csky.opt.urls
@@ -0,0 +1,104 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/csky/csky.opt and generated HTML
+
+march=
+UrlSuffix(gcc/C-SKY-Options.html#index-march_003d)
+
+mcpu=
+UrlSuffix(gcc/C-SKY-Options.html#index-mcpu_003d-1)
+
+mbig-endian
+UrlSuffix(gcc/C-SKY-Options.html#index-mbig-endian-4)
+
+EB
+UrlSuffix(gcc/C-SKY-Options.html#index-EB-1)
+
+mlittle-endian
+UrlSuffix(gcc/C-SKY-Options.html#index-mlittle-endian-4)
+
+EL
+UrlSuffix(gcc/C-SKY-Options.html#index-EL-1)
+
+mhard-float
+UrlSuffix(gcc/C-SKY-Options.html#index-mhard-float)
+
+msoft-float
+UrlSuffix(gcc/C-SKY-Options.html#index-msoft-float-1)
+
+mfloat-abi=
+UrlSuffix(gcc/C-SKY-Options.html#index-mfloat-abi-1)
+
+mfpu=
+UrlSuffix(gcc/C-SKY-Options.html#index-mfpu_003d)
+
+mdouble-float
+UrlSuffix(gcc/C-SKY-Options.html#index-mdouble-float)
+
+mfdivdu
+UrlSuffix(gcc/C-SKY-Options.html#index-mfdivdu)
+
+melrw
+UrlSuffix(gcc/C-SKY-Options.html#index-melrw)
+
+mistack
+UrlSuffix(gcc/C-SKY-Options.html#index-mistack)
+
+mmp
+UrlSuffix(gcc/C-SKY-Options.html#index-mmp)
+
+mcp
+UrlSuffix(gcc/C-SKY-Options.html#index-mcp)
+
+mcache
+UrlSuffix(gcc/C-SKY-Options.html#index-mcache)
+
+msecurity
+UrlSuffix(gcc/C-SKY-Options.html#index-msecurity)
+
+mtrust
+UrlSuffix(gcc/C-SKY-Options.html#index-mtrust)
+
+mdsp
+UrlSuffix(gcc/C-SKY-Options.html#index-mdsp)
+
+medsp
+UrlSuffix(gcc/C-SKY-Options.html#index-medsp)
+
+mvdsp
+UrlSuffix(gcc/C-SKY-Options.html#index-mvdsp)
+
+mdiv
+UrlSuffix(gcc/C-SKY-Options.html#index-mdiv)
+
+msmart
+UrlSuffix(gcc/C-SKY-Options.html#index-msmart)
+
+mhigh-registers
+UrlSuffix(gcc/C-SKY-Options.html#index-mhigh-registers)
+
+manchor
+UrlSuffix(gcc/C-SKY-Options.html#index-manchor)
+
+mpushpop
+UrlSuffix(gcc/C-SKY-Options.html#index-mpushpop)
+
+mmultiple-stld
+UrlSuffix(gcc/C-SKY-Options.html#index-mmultiple-stld)
+
+mconstpool
+UrlSuffix(gcc/C-SKY-Options.html#index-mconstpool)
+
+mstack-size
+UrlSuffix(gcc/C-SKY-Options.html#index-mstack-size-1)
+
+mccrt
+UrlSuffix(gcc/C-SKY-Options.html#index-mccrt)
+
+mbranch-cost=
+UrlSuffix(gcc/C-SKY-Options.html#index-mbranch-cost_003d)
+
+msched-prolog
+UrlSuffix(gcc/C-SKY-Options.html#index-msched-prolog-1)
+
+msim
+UrlSuffix(gcc/C-SKY-Options.html#index-msim-2)
+
diff --git a/gcc/config/csky/csky_tables.opt.urls b/gcc/config/csky/csky_tables.opt.urls
new file mode 100644
index 000000000000..eaa247bc897c
--- /dev/null
+++ b/gcc/config/csky/csky_tables.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/csky/csky_tables.opt and generated HTML
+
diff --git a/gcc/config/darwin.opt.urls b/gcc/config/darwin.opt.urls
new file mode 100644
index 000000000000..e83d183ac161
--- /dev/null
+++ b/gcc/config/darwin.opt.urls
@@ -0,0 +1,224 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/darwin.opt and generated HTML
+
+dependency-file
+UrlSuffix(gcc/Darwin-Options.html#index-dependency-file)
+
+fconstant-cfstrings
+UrlSuffix(gcc/Darwin-Options.html#index-fconstant-cfstrings)
+
+iframework
+UrlSuffix(gcc/Darwin-Options.html#index-iframework)
+
+mconstant-cfstrings
+UrlSuffix(gcc/Darwin-Options.html#index-mconstant-cfstrings)
+
+; skipping UrlSuffix for 'mdynamic-no-pic' due to finding no URLs
+
+mfix-and-continue
+UrlSuffix(gcc/Darwin-Options.html#index-mfix-and-continue)
+
+mkernel
+UrlSuffix(gcc/Darwin-Options.html#index-mkernel)
+
+mmacosx-version-min=
+UrlSuffix(gcc/Darwin-Options.html#index-mmacosx-version-min)
+
+mone-byte-bool
+UrlSuffix(gcc/Darwin-Options.html#index-mone-byte-bool)
+
+all_load
+UrlSuffix(gcc/Darwin-Options.html#index-all_005fload)
+
+allowable_client
+UrlSuffix(gcc/Darwin-Options.html#index-allowable_005fclient)
+
+arch_errors_fatal
+UrlSuffix(gcc/Darwin-Options.html#index-arch_005ferrors_005ffatal)
+
+bind_at_load
+UrlSuffix(gcc/Darwin-Options.html#index-bind_005fat_005fload)
+
+bundle
+UrlSuffix(gcc/Darwin-Options.html#index-bundle)
+
+bundle_loader
+UrlSuffix(gcc/Darwin-Options.html#index-bundle_005floader)
+
+client_name
+UrlSuffix(gcc/Darwin-Options.html#index-client_005fname)
+
+compatibility_version
+UrlSuffix(gcc/Darwin-Options.html#index-compatibility_005fversion)
+
+current_version
+UrlSuffix(gcc/Darwin-Options.html#index-current_005fversion)
+
+dead_strip
+UrlSuffix(gcc/Darwin-Options.html#index-dead_005fstrip)
+
+dylib_file
+UrlSuffix(gcc/Darwin-Options.html#index-dylib_005ffile)
+
+dylinker_install_name
+UrlSuffix(gcc/Darwin-Options.html#index-dylinker_005finstall_005fname)
+
+dynamic
+UrlSuffix(gcc/Darwin-Options.html#index-dynamic)
+
+dynamiclib
+UrlSuffix(gcc/Darwin-Options.html#index-dynamiclib)
+
+exported_symbols_list
+UrlSuffix(gcc/Darwin-Options.html#index-exported_005fsymbols_005flist)
+
+filelist
+UrlSuffix(gcc/Darwin-Options.html#index-filelist)
+
+flat_namespace
+UrlSuffix(gcc/Darwin-Options.html#index-flat_005fnamespace)
+
+force_cpusubtype_ALL
+UrlSuffix(gcc/Darwin-Options.html#index-force_005fcpusubtype_005fALL)
+
+force_flat_namespace
+UrlSuffix(gcc/Darwin-Options.html#index-force_005fflat_005fnamespace)
+
+gfull
+UrlSuffix(gcc/Darwin-Options.html#index-gfull)
+
+gused
+UrlSuffix(gcc/Darwin-Options.html#index-gused)
+
+headerpad_max_install_names
+UrlSuffix(gcc/Darwin-Options.html#index-headerpad_005fmax_005finstall_005fnames)
+
+image_base
+UrlSuffix(gcc/Darwin-Options.html#index-image_005fbase)
+
+init
+UrlSuffix(gcc/Darwin-Options.html#index-init)
+
+install_name
+UrlSuffix(gcc/Darwin-Options.html#index-install_005fname)
+
+keep_private_externs
+UrlSuffix(gcc/Darwin-Options.html#index-keep_005fprivate_005fexterns)
+
+multi_module
+UrlSuffix(gcc/Darwin-Options.html#index-multi_005fmodule)
+
+multiply_defined
+UrlSuffix(gcc/Darwin-Options.html#index-multiply_005fdefined)
+
+multiply_defined_unused
+UrlSuffix(gcc/Darwin-Options.html#index-multiply_005fdefined_005funused)
+
+no_dead_strip_inits_and_terms
+UrlSuffix(gcc/Darwin-Options.html#index-no_005fdead_005fstrip_005finits_005fand_005fterms)
+
+nodefaultrpaths
+UrlSuffix(gcc/Darwin-Options.html#index-nodefaultrpaths)
+
+nofixprebinding
+UrlSuffix(gcc/Darwin-Options.html#index-nofixprebinding)
+
+nomultidefs
+UrlSuffix(gcc/Darwin-Options.html#index-nomultidefs)
+
+noprebind
+UrlSuffix(gcc/Darwin-Options.html#index-noprebind)
+
+noseglinkedit
+UrlSuffix(gcc/Darwin-Options.html#index-noseglinkedit)
+
+pagezero_size
+UrlSuffix(gcc/Darwin-Options.html#index-pagezero_005fsize)
+
+prebind
+UrlSuffix(gcc/Darwin-Options.html#index-prebind)
+
+prebind_all_twolevel_modules
+UrlSuffix(gcc/Darwin-Options.html#index-prebind_005fall_005ftwolevel_005fmodules)
+
+private_bundle
+UrlSuffix(gcc/Darwin-Options.html#index-private_005fbundle)
+
+; skipping UrlSuffix for 'pthread' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-pthread-1'
+;   duplicate: 'gcc/Preprocessor-Options.html#index-pthread'
+
+rdynamic
+UrlSuffix(gcc/Link-Options.html#index-rdynamic)
+
+read_only_relocs
+UrlSuffix(gcc/Darwin-Options.html#index-read_005fonly_005frelocs)
+
+sectalign
+UrlSuffix(gcc/Darwin-Options.html#index-sectalign)
+
+sectcreate
+UrlSuffix(gcc/Darwin-Options.html#index-sectcreate)
+
+sectobjectsymbols
+UrlSuffix(gcc/Darwin-Options.html#index-sectobjectsymbols)
+
+sectorder
+UrlSuffix(gcc/Darwin-Options.html#index-sectorder)
+
+seg_addr_table
+UrlSuffix(gcc/Darwin-Options.html#index-seg_005faddr_005ftable)
+
+seg_addr_table_filename
+UrlSuffix(gcc/Darwin-Options.html#index-seg_005faddr_005ftable_005ffilename)
+
+seg1addr
+UrlSuffix(gcc/Darwin-Options.html#index-seg1addr)
+
+segaddr
+UrlSuffix(gcc/Darwin-Options.html#index-segaddr)
+
+seglinkedit
+UrlSuffix(gcc/Darwin-Options.html#index-seglinkedit)
+
+segprot
+UrlSuffix(gcc/Darwin-Options.html#index-segprot)
+
+segs_read_only_addr
+UrlSuffix(gcc/Darwin-Options.html#index-segs_005fread_005fonly_005faddr)
+
+segs_read_write_addr
+UrlSuffix(gcc/Darwin-Options.html#index-segs_005fread_005fwrite_005faddr)
+
+single_module
+UrlSuffix(gcc/Darwin-Options.html#index-single_005fmodule)
+
+sub_library
+UrlSuffix(gcc/Darwin-Options.html#index-sub_005flibrary)
+
+sub_umbrella
+UrlSuffix(gcc/Darwin-Options.html#index-sub_005fumbrella)
+
+twolevel_namespace
+UrlSuffix(gcc/Darwin-Options.html#index-twolevel_005fnamespace)
+
+umbrella
+UrlSuffix(gcc/Darwin-Options.html#index-umbrella)
+
+undefined
+UrlSuffix(gcc/Darwin-Options.html#index-undefined)
+
+unexported_symbols_list
+UrlSuffix(gcc/Darwin-Options.html#index-unexported_005fsymbols_005flist)
+
+weak_reference_mismatches
+UrlSuffix(gcc/Darwin-Options.html#index-weak_005freference_005fmismatches)
+
+whatsloaded
+UrlSuffix(gcc/Darwin-Options.html#index-whatsloaded)
+
+whyload
+UrlSuffix(gcc/Darwin-Options.html#index-whyload)
+
+X
+LangUrlSuffix_D(gdc/Code-Generation.html#index-X)
+
diff --git a/gcc/config/dragonfly.opt.urls b/gcc/config/dragonfly.opt.urls
new file mode 100644
index 000000000000..62e2e21594e1
--- /dev/null
+++ b/gcc/config/dragonfly.opt.urls
@@ -0,0 +1,9 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/dragonfly.opt and generated HTML
+
+; skipping UrlSuffix for 'pthread' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-pthread-1'
+;   duplicate: 'gcc/Preprocessor-Options.html#index-pthread'
+
+rdynamic
+UrlSuffix(gcc/Link-Options.html#index-rdynamic)
+
diff --git a/gcc/config/epiphany/epiphany.opt.urls b/gcc/config/epiphany/epiphany.opt.urls
new file mode 100644
index 000000000000..a8e28c46d210
--- /dev/null
+++ b/gcc/config/epiphany/epiphany.opt.urls
@@ -0,0 +1,52 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/epiphany/epiphany.opt and generated HTML
+
+mhalf-reg-file
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-mhalf-reg-file)
+
+mprefer-short-insn-regs
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-mprefer-short-insn-regs)
+
+mbranch-cost=
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-mbranch-cost)
+
+mcmove
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-mcmove)
+
+mnops=
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-mnops)
+
+msoft-cmpsf
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-msoft-cmpsf)
+
+msplit-lohi
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-msplit-lohi)
+
+mstack-offset=
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-mstack-offset)
+
+mround-nearest
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-mround-nearest)
+
+mlong-calls
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-mlong-calls)
+
+; skipping UrlSuffix for 'mshort-calls' due to finding no URLs
+
+msmall16
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-msmall16)
+
+mfp-mode=
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-mfp-mode)
+
+mvect-double
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-mvect-double)
+
+max-vect-align=
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-max-vect-align)
+
+msplit-vecmove-early
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-msplit-vecmove-early)
+
+m1reg-
+UrlSuffix(gcc/Adapteva-Epiphany-Options.html#index-m1reg-)
+
diff --git a/gcc/config/fr30/fr30.opt.urls b/gcc/config/fr30/fr30.opt.urls
new file mode 100644
index 000000000000..eabbfbfd9dd3
--- /dev/null
+++ b/gcc/config/fr30/fr30.opt.urls
@@ -0,0 +1,8 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/fr30/fr30.opt and generated HTML
+
+msmall-model
+UrlSuffix(gcc/FR30-Options.html#index-msmall-model)
+
+mno-lsim
+UrlSuffix(gcc/FR30-Options.html#index-mno-lsim)
+
diff --git a/gcc/config/freebsd.opt.urls b/gcc/config/freebsd.opt.urls
new file mode 100644
index 000000000000..3be69e4c3e8d
--- /dev/null
+++ b/gcc/config/freebsd.opt.urls
@@ -0,0 +1,9 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/freebsd.opt and generated HTML
+
+; skipping UrlSuffix for 'pthread' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-pthread-1'
+;   duplicate: 'gcc/Preprocessor-Options.html#index-pthread'
+
+rdynamic
+UrlSuffix(gcc/Link-Options.html#index-rdynamic)
+
diff --git a/gcc/config/frv/frv.opt.urls b/gcc/config/frv/frv.opt.urls
new file mode 100644
index 000000000000..d3d3757bb289
--- /dev/null
+++ b/gcc/config/frv/frv.opt.urls
@@ -0,0 +1,111 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/frv/frv.opt and generated HTML
+
+macc-4
+UrlSuffix(gcc/FRV-Options.html#index-macc-4)
+
+macc-8
+UrlSuffix(gcc/FRV-Options.html#index-macc-8)
+
+malign-labels
+UrlSuffix(gcc/FRV-Options.html#index-malign-labels)
+
+malloc-cc
+UrlSuffix(gcc/FRV-Options.html#index-malloc-cc)
+
+; skipping UrlSuffix for 'mbranch-cost=' due to finding no URLs
+
+mcond-exec
+UrlSuffix(gcc/FRV-Options.html#index-mcond-exec)
+
+mcond-move
+UrlSuffix(gcc/FRV-Options.html#index-mcond-move)
+
+mcpu=
+UrlSuffix(gcc/FRV-Options.html#index-mcpu-6)
+
+; skipping UrlSuffix for 'mdebug' due to finding no URLs
+
+mdouble
+UrlSuffix(gcc/FRV-Options.html#index-mdouble-1)
+
+mdword
+UrlSuffix(gcc/FRV-Options.html#index-mdword)
+
+mfdpic
+UrlSuffix(gcc/FRV-Options.html#index-mfdpic-1)
+
+mfixed-cc
+UrlSuffix(gcc/FRV-Options.html#index-mfixed-cc)
+
+mfpr-32
+UrlSuffix(gcc/FRV-Options.html#index-mfpr-32)
+
+mfpr-64
+UrlSuffix(gcc/FRV-Options.html#index-mfpr-64)
+
+mgpr-32
+UrlSuffix(gcc/FRV-Options.html#index-mgpr-32)
+
+mgpr-64
+UrlSuffix(gcc/FRV-Options.html#index-mgpr-64)
+
+mgprel-ro
+UrlSuffix(gcc/FRV-Options.html#index-mgprel-ro)
+
+mhard-float
+UrlSuffix(gcc/FRV-Options.html#index-mhard-float-1)
+
+minline-plt
+UrlSuffix(gcc/FRV-Options.html#index-minline-plt-1)
+
+mlibrary-pic
+UrlSuffix(gcc/FRV-Options.html#index-mlibrary-pic)
+
+mlinked-fp
+UrlSuffix(gcc/FRV-Options.html#index-mlinked-fp)
+
+mlong-calls
+UrlSuffix(gcc/FRV-Options.html#index-mlong-calls-4)
+
+mmedia
+UrlSuffix(gcc/FRV-Options.html#index-mmedia)
+
+mmuladd
+UrlSuffix(gcc/FRV-Options.html#index-mmuladd)
+
+mmulti-cond-exec
+UrlSuffix(gcc/FRV-Options.html#index-mmulti-cond-exec)
+
+mnested-cond-exec
+UrlSuffix(gcc/FRV-Options.html#index-mnested-cond-exec)
+
+mno-eflags
+UrlSuffix(gcc/FRV-Options.html#index-mno-eflags)
+
+moptimize-membar
+UrlSuffix(gcc/FRV-Options.html#index-moptimize-membar)
+
+mpack
+UrlSuffix(gcc/FRV-Options.html#index-mpack)
+
+mscc
+UrlSuffix(gcc/FRV-Options.html#index-mscc)
+
+msoft-float
+UrlSuffix(gcc/FRV-Options.html#index-msoft-float-3)
+
+mTLS
+UrlSuffix(gcc/FRV-Options.html#index-mTLS)
+
+mtls
+UrlSuffix(gcc/FRV-Options.html#index-mtls)
+
+mtomcat-stats
+UrlSuffix(gcc/FRV-Options.html#index-mtomcat-stats)
+
+multilib-library-pic
+UrlSuffix(gcc/FRV-Options.html#index-multilib-library-pic)
+
+mvliw-branch
+UrlSuffix(gcc/FRV-Options.html#index-mvliw-branch)
+
diff --git a/gcc/config/ft32/ft32.opt.urls b/gcc/config/ft32/ft32.opt.urls
new file mode 100644
index 000000000000..707cb83010f0
--- /dev/null
+++ b/gcc/config/ft32/ft32.opt.urls
@@ -0,0 +1,20 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/ft32/ft32.opt and generated HTML
+
+msim
+UrlSuffix(gcc/FT32-Options.html#index-msim-3)
+
+mlra
+UrlSuffix(gcc/FT32-Options.html#index-mlra-1)
+
+mnodiv
+UrlSuffix(gcc/FT32-Options.html#index-mnodiv)
+
+mft32b
+UrlSuffix(gcc/FT32-Options.html#index-mft32b)
+
+mcompress
+UrlSuffix(gcc/FT32-Options.html#index-mcompress)
+
+mnopm
+UrlSuffix(gcc/FT32-Options.html#index-mnopm)
+
diff --git a/gcc/config/fused-madd.opt.urls b/gcc/config/fused-madd.opt.urls
new file mode 100644
index 000000000000..0bd906cfb643
--- /dev/null
+++ b/gcc/config/fused-madd.opt.urls
@@ -0,0 +1,4 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/fused-madd.opt and generated HTML
+
+; skipping UrlSuffix for 'mfused-madd' due to finding no URLs
+
diff --git a/gcc/config/g.opt.urls b/gcc/config/g.opt.urls
new file mode 100644
index 000000000000..4ffd5cbd2cf5
--- /dev/null
+++ b/gcc/config/g.opt.urls
@@ -0,0 +1,5 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/g.opt and generated HTML
+
+G
+UrlSuffix(gcc/System-V-Options.html#index-G-5)
+
diff --git a/gcc/config/gcn/gcn.opt.urls b/gcc/config/gcn/gcn.opt.urls
new file mode 100644
index 000000000000..7bc0ef41831f
--- /dev/null
+++ b/gcc/config/gcn/gcn.opt.urls
@@ -0,0 +1,23 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/gcn/gcn.opt and generated HTML
+
+march=
+UrlSuffix(gcc/AMD-GCN-Options.html#index-march-1)
+
+mtune=
+UrlSuffix(gcc/AMD-GCN-Options.html#index-mtune-1)
+
+; skipping UrlSuffix for 'm32' due to finding no URLs
+
+; skipping UrlSuffix for 'm64' due to finding no URLs
+
+; skipping UrlSuffix for 'mgomp' due to finding no URLs
+
+mstack-size=
+UrlSuffix(gcc/AMD-GCN-Options.html#index-mstack-size)
+
+mxnack=
+UrlSuffix(gcc/AMD-GCN-Options.html#index-mxnack)
+
+msram-ecc=
+UrlSuffix(gcc/AMD-GCN-Options.html#index-msram-ecc)
+
diff --git a/gcc/config/gnu-user.opt.urls b/gcc/config/gnu-user.opt.urls
new file mode 100644
index 000000000000..42021e1fe3cd
--- /dev/null
+++ b/gcc/config/gnu-user.opt.urls
@@ -0,0 +1,9 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/gnu-user.opt and generated HTML
+
+; skipping UrlSuffix for 'pthread' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-pthread-1'
+;   duplicate: 'gcc/Preprocessor-Options.html#index-pthread'
+
+rdynamic
+UrlSuffix(gcc/Link-Options.html#index-rdynamic)
+
diff --git a/gcc/config/h8300/h8300.opt.urls b/gcc/config/h8300/h8300.opt.urls
new file mode 100644
index 000000000000..8cbd7c313b7f
--- /dev/null
+++ b/gcc/config/h8300/h8300.opt.urls
@@ -0,0 +1,29 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/h8300/h8300.opt and generated HTML
+
+ms
+UrlSuffix(gcc/H8_002f300-Options.html#index-ms)
+
+ms2600
+UrlSuffix(gcc/H8_002f300-Options.html#index-ms2600)
+
+mint32
+UrlSuffix(gcc/H8_002f300-Options.html#index-mint32)
+
+mrelax
+UrlSuffix(gcc/H8_002f300-Options.html#index-mrelax-1)
+
+mh
+UrlSuffix(gcc/H8_002f300-Options.html#index-mh)
+
+mn
+UrlSuffix(gcc/H8_002f300-Options.html#index-mn)
+
+malign-300
+UrlSuffix(gcc/H8_002f300-Options.html#index-malign-300)
+
+mexr
+UrlSuffix(gcc/H8_002f300-Options.html#index-mexr)
+
+mno-exr
+UrlSuffix(gcc/H8_002f300-Options.html#index-mno-exr)
+
diff --git a/gcc/config/hpux11.opt.urls b/gcc/config/hpux11.opt.urls
new file mode 100644
index 000000000000..84fef2e7919d
--- /dev/null
+++ b/gcc/config/hpux11.opt.urls
@@ -0,0 +1,6 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/hpux11.opt and generated HTML
+
+; skipping UrlSuffix for 'pthread' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-pthread-1'
+;   duplicate: 'gcc/Preprocessor-Options.html#index-pthread'
+
diff --git a/gcc/config/i386/cygming.opt.urls b/gcc/config/i386/cygming.opt.urls
new file mode 100644
index 000000000000..87799befe3c4
--- /dev/null
+++ b/gcc/config/i386/cygming.opt.urls
@@ -0,0 +1,30 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/i386/cygming.opt and generated HTML
+
+mconsole
+UrlSuffix(gcc/x86-Windows-Options.html#index-mconsole)
+
+mdll
+UrlSuffix(gcc/x86-Windows-Options.html#index-mdll)
+
+mnop-fun-dllimport
+UrlSuffix(gcc/x86-Windows-Options.html#index-mnop-fun-dllimport)
+
+; skipping UrlSuffix for 'mthreads' due to multiple URLs:
+;   duplicate: 'gcc/x86-Options.html#index-mthreads'
+;   duplicate: 'gcc/x86-Windows-Options.html#index-mthreads-1'
+
+mwin32
+UrlSuffix(gcc/x86-Windows-Options.html#index-mwin32)
+
+mwindows
+UrlSuffix(gcc/x86-Windows-Options.html#index-mwindows)
+
+mpe-aligned-commons
+UrlSuffix(gcc/x86-Windows-Options.html#index-mpe-aligned-commons)
+
+fset-stack-executable
+UrlSuffix(gcc/x86-Windows-Options.html#index-fno-set-stack-executable)
+
+fwritable-relocated-rdata
+UrlSuffix(gcc/x86-Windows-Options.html#index-fno-writable-relocated-rdata)
+
diff --git a/gcc/config/i386/cygwin.opt.urls b/gcc/config/i386/cygwin.opt.urls
new file mode 100644
index 000000000000..c484efc6fd98
--- /dev/null
+++ b/gcc/config/i386/cygwin.opt.urls
@@ -0,0 +1,6 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/i386/cygwin.opt and generated HTML
+
+; skipping UrlSuffix for 'pthread' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-pthread-1'
+;   duplicate: 'gcc/Preprocessor-Options.html#index-pthread'
+
diff --git a/gcc/config/i386/djgpp.opt.urls b/gcc/config/i386/djgpp.opt.urls
new file mode 100644
index 000000000000..8a723ab0a6dc
--- /dev/null
+++ b/gcc/config/i386/djgpp.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/i386/djgpp.opt and generated HTML
+
diff --git a/gcc/config/i386/i386.opt.urls b/gcc/config/i386/i386.opt.urls
new file mode 100644
index 000000000000..6ee69e35a61b
--- /dev/null
+++ b/gcc/config/i386/i386.opt.urls
@@ -0,0 +1,602 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/i386/i386.opt and generated HTML
+
+m128bit-long-double
+UrlSuffix(gcc/x86-Options.html#index-m128bit-long-double)
+
+m80387
+UrlSuffix(gcc/x86-Options.html#index-m80387)
+
+m96bit-long-double
+UrlSuffix(gcc/x86-Options.html#index-m96bit-long-double)
+
+mlong-double-80
+UrlSuffix(gcc/x86-Options.html#index-mlong-double-80)
+
+mlong-double-64
+UrlSuffix(gcc/x86-Options.html#index-mlong-double-64-1)
+
+mlong-double-128
+UrlSuffix(gcc/x86-Options.html#index-mlong-double-128-1)
+
+maccumulate-outgoing-args
+UrlSuffix(gcc/x86-Options.html#index-maccumulate-outgoing-args-1)
+
+malign-double
+UrlSuffix(gcc/x86-Options.html#index-malign-double)
+
+; skipping UrlSuffix for 'malign-loops=' due to finding no URLs
+
+malign-stringops
+UrlSuffix(gcc/x86-Options.html#index-malign-stringops)
+
+malign-data=
+UrlSuffix(gcc/x86-Options.html#index-malign-data-1)
+
+march=
+UrlSuffix(gcc/x86-Options.html#index-march-16)
+
+; skipping UrlSuffix for 'mbranch-cost=' due to finding no URLs
+
+mlarge-data-threshold=
+UrlSuffix(gcc/x86-Options.html#index-mlarge-data-threshold)
+
+; skipping UrlSuffix for 'mcmodel=' due to finding no URLs
+
+mcpu=
+UrlSuffix(gcc/x86-Options.html#index-mcpu-14)
+
+mfancy-math-387
+UrlSuffix(gcc/x86-Options.html#index-mfancy-math-387)
+
+mfp-ret-in-387
+UrlSuffix(gcc/x86-Options.html#index-mfp-ret-in-387)
+
+; skipping UrlSuffix for 'mfpmath=' due to multiple URLs:
+;   duplicate: 'gcc/Optimize-Options.html#index-mfpmath'
+;   duplicate: 'gcc/x86-Options.html#index-mfpmath-1'
+
+mhard-float
+UrlSuffix(gcc/x86-Options.html#index-mhard-float-11)
+
+mieee-fp
+UrlSuffix(gcc/x86-Options.html#index-mieee-fp)
+
+minline-all-stringops
+UrlSuffix(gcc/x86-Options.html#index-minline-all-stringops)
+
+minline-stringops-dynamically
+UrlSuffix(gcc/x86-Options.html#index-minline-stringops-dynamically)
+
+mms-bitfields
+UrlSuffix(gcc/x86-Options.html#index-mms-bitfields)
+
+mno-align-stringops
+UrlSuffix(gcc/x86-Options.html#index-mno-align-stringops)
+
+mno-fancy-math-387
+UrlSuffix(gcc/x86-Options.html#index-mno-fancy-math-387)
+
+mno-push-args
+UrlSuffix(gcc/x86-Options.html#index-mno-push-args)
+
+mno-red-zone
+UrlSuffix(gcc/x86-Options.html#index-mno-red-zone)
+
+momit-leaf-frame-pointer
+UrlSuffix(gcc/x86-Options.html#index-momit-leaf-frame-pointer-2)
+
+mrelax-cmpxchg-loop
+UrlSuffix(gcc/x86-Options.html#index-mrelax-cmpxchg-loop)
+
+mpc32
+UrlSuffix(gcc/x86-Options.html#index-mpc32)
+
+mpc64
+UrlSuffix(gcc/x86-Options.html#index-mpc64)
+
+mpc80
+UrlSuffix(gcc/x86-Options.html#index-mpc80)
+
+mdaz-ftz
+UrlSuffix(gcc/x86-Options.html#index-mdaz-ftz)
+
+mpreferred-stack-boundary=
+UrlSuffix(gcc/x86-Options.html#index-mpreferred-stack-boundary-1)
+
+mincoming-stack-boundary=
+UrlSuffix(gcc/x86-Options.html#index-mincoming-stack-boundary)
+
+mpush-args
+UrlSuffix(gcc/x86-Options.html#index-mpush-args)
+
+mred-zone
+UrlSuffix(gcc/x86-Options.html#index-mred-zone)
+
+mregparm=
+UrlSuffix(gcc/x86-Options.html#index-mregparm)
+
+mrtd
+UrlSuffix(gcc/x86-Options.html#index-mrtd-1)
+
+msoft-float
+UrlSuffix(gcc/x86-Options.html#index-msoft-float-16)
+
+msseregparm
+UrlSuffix(gcc/x86-Options.html#index-msseregparm)
+
+mstackrealign
+UrlSuffix(gcc/x86-Options.html#index-mstackrealign)
+
+mtls-dialect=
+UrlSuffix(gcc/x86-Options.html#index-mtls-dialect-1)
+
+mtls-direct-seg-refs
+UrlSuffix(gcc/x86-Options.html#index-mtls-direct-seg-refs)
+
+mtune=
+UrlSuffix(gcc/x86-Options.html#index-mtune-17)
+
+mno-default
+UrlSuffix(gcc/x86-Options.html#index-mno-default)
+
+mdump-tune-features
+UrlSuffix(gcc/x86-Options.html#index-mdump-tune-features)
+
+miamcu
+UrlSuffix(gcc/x86-Options.html#index-miamcu)
+
+mabi=
+UrlSuffix(gcc/x86-Options.html#index-mabi-6)
+
+mcall-ms2sysv-xlogues
+UrlSuffix(gcc/x86-Options.html#index-mcall-ms2sysv-xlogues)
+
+mveclibabi=
+UrlSuffix(gcc/x86-Options.html#index-mveclibabi-1)
+
+mvect8-ret-in-mem
+UrlSuffix(gcc/x86-Options.html#index-mvect8-ret-in-mem)
+
+mrecip
+UrlSuffix(gcc/x86-Options.html#index-mrecip-1)
+
+mrecip=
+UrlSuffix(gcc/x86-Options.html#index-mrecip-1)
+
+mcld
+UrlSuffix(gcc/x86-Options.html#index-mcld)
+
+mvzeroupper
+UrlSuffix(gcc/x86-Options.html#index-mvzeroupper)
+
+mprefer-avx128
+UrlSuffix(gcc/x86-Options.html#index-mprefer-avx128)
+
+mprefer-vector-width=
+UrlSuffix(gcc/x86-Options.html#index-mprefer-vector-width)
+
+mpartial-vector-fp-math
+UrlSuffix(gcc/x86-Options.html#index-mpartial-vector-fp-math)
+
+mmove-max=
+UrlSuffix(gcc/x86-Options.html#index-mmove-max)
+
+mstore-max=
+UrlSuffix(gcc/x86-Options.html#index-mstore-max)
+
+m32
+UrlSuffix(gcc/x86-Options.html#index-m32-2)
+
+m64
+UrlSuffix(gcc/x86-Options.html#index-m64-4)
+
+mx32
+UrlSuffix(gcc/x86-Options.html#index-mx32)
+
+m16
+UrlSuffix(gcc/x86-Options.html#index-m16)
+
+mmmx
+UrlSuffix(gcc/x86-Options.html#index-mmmx)
+
+m3dnow
+UrlSuffix(gcc/x86-Options.html#index-m3dnow)
+
+m3dnowa
+UrlSuffix(gcc/x86-Options.html#index-m3dnowa)
+
+msse
+UrlSuffix(gcc/x86-Options.html#index-msse)
+
+msse2
+UrlSuffix(gcc/x86-Options.html#index-msse2)
+
+msse3
+UrlSuffix(gcc/x86-Options.html#index-msse3)
+
+mssse3
+UrlSuffix(gcc/x86-Options.html#index-mssse3)
+
+msse4.1
+UrlSuffix(gcc/x86-Options.html#index-msse4_002e1)
+
+msse4.2
+UrlSuffix(gcc/x86-Options.html#index-msse4_002e2)
+
+msse4
+UrlSuffix(gcc/x86-Options.html#index-msse4)
+
+mavx
+UrlSuffix(gcc/x86-Options.html#index-mavx)
+
+mavx2
+UrlSuffix(gcc/x86-Options.html#index-mavx2)
+
+mavx512f
+UrlSuffix(gcc/x86-Options.html#index-mavx512f)
+
+mavx512pf
+UrlSuffix(gcc/x86-Options.html#index-mavx512pf)
+
+mavx512er
+UrlSuffix(gcc/x86-Options.html#index-mavx512er)
+
+mavx512cd
+UrlSuffix(gcc/x86-Options.html#index-mavx512cd)
+
+mavx512dq
+UrlSuffix(gcc/x86-Options.html#index-mavx512dq)
+
+mavx512bw
+UrlSuffix(gcc/x86-Options.html#index-mavx512bw)
+
+mavx512vl
+UrlSuffix(gcc/x86-Options.html#index-mavx512vl)
+
+mavx512ifma
+UrlSuffix(gcc/x86-Options.html#index-mavx512ifma)
+
+mavx512vbmi
+UrlSuffix(gcc/x86-Options.html#index-mavx512vbmi)
+
+mavx5124fmaps
+UrlSuffix(gcc/x86-Options.html#index-mavx5124fmaps)
+
+mavx5124vnniw
+UrlSuffix(gcc/x86-Options.html#index-mavx5124vnniw)
+
+mavx512vpopcntdq
+UrlSuffix(gcc/x86-Options.html#index-mavx512vpopcntdq)
+
+mavx512vbmi2
+UrlSuffix(gcc/x86-Options.html#index-mavx512vbmi2)
+
+mavx512vnni
+UrlSuffix(gcc/x86-Options.html#index-mavx512vnni)
+
+mavx512bitalg
+UrlSuffix(gcc/x86-Options.html#index-mavx512bitalg)
+
+mavx512vp2intersect
+UrlSuffix(gcc/x86-Options.html#index-mavx512vp2intersect)
+
+mfma
+UrlSuffix(gcc/x86-Options.html#index-mfma)
+
+msse4a
+UrlSuffix(gcc/x86-Options.html#index-msse4a)
+
+mfma4
+UrlSuffix(gcc/x86-Options.html#index-mfma4)
+
+mxop
+UrlSuffix(gcc/x86-Options.html#index-mxop)
+
+mlwp
+UrlSuffix(gcc/x86-Options.html#index-mlwp)
+
+mabm
+UrlSuffix(gcc/x86-Options.html#index-mabm)
+
+mpopcnt
+UrlSuffix(gcc/x86-Options.html#index-mpopcnt)
+
+mpconfig
+UrlSuffix(gcc/x86-Options.html#index-mpconfig)
+
+mwbnoinvd
+UrlSuffix(gcc/x86-Options.html#index-mwbnoinvd)
+
+mptwrite
+UrlSuffix(gcc/x86-Options.html#index-mptwrite)
+
+muintr
+UrlSuffix(gcc/x86-Options.html#index-muintr)
+
+msgx
+UrlSuffix(gcc/x86-Options.html#index-msgx)
+
+mrdpid
+UrlSuffix(gcc/x86-Options.html#index-mrdpid)
+
+mgfni
+UrlSuffix(gcc/x86-Options.html#index-mgfni)
+
+mvaes
+UrlSuffix(gcc/x86-Options.html#index-mvaes)
+
+mvpclmulqdq
+UrlSuffix(gcc/x86-Options.html#index-mvpclmulqdq)
+
+mbmi
+UrlSuffix(gcc/x86-Options.html#index-mbmi)
+
+mbmi2
+UrlSuffix(gcc/x86-Options.html#index-mbmi2)
+
+mlzcnt
+UrlSuffix(gcc/x86-Options.html#index-mlzcnt)
+
+mhle
+UrlSuffix(gcc/x86-Options.html#index-mhle)
+
+mrdseed
+UrlSuffix(gcc/x86-Options.html#index-mrdseed)
+
+mprfchw
+UrlSuffix(gcc/x86-Options.html#index-mprfchw)
+
+madx
+UrlSuffix(gcc/x86-Options.html#index-madx)
+
+mclflushopt
+UrlSuffix(gcc/x86-Options.html#index-mclflushopt)
+
+mclwb
+UrlSuffix(gcc/x86-Options.html#index-mclwb)
+
+mfxsr
+UrlSuffix(gcc/x86-Options.html#index-mfxsr)
+
+mxsave
+UrlSuffix(gcc/x86-Options.html#index-mxsave)
+
+mxsaveopt
+UrlSuffix(gcc/x86-Options.html#index-mxsaveopt)
+
+mxsavec
+UrlSuffix(gcc/x86-Options.html#index-mxsavec)
+
+mxsaves
+UrlSuffix(gcc/x86-Options.html#index-mxsaves)
+
+mtbm
+UrlSuffix(gcc/x86-Options.html#index-mtbm)
+
+mcx16
+UrlSuffix(gcc/x86-Options.html#index-mcx16)
+
+msahf
+UrlSuffix(gcc/x86-Options.html#index-msahf)
+
+mmovbe
+UrlSuffix(gcc/x86-Options.html#index-mmovbe)
+
+mcrc32
+UrlSuffix(gcc/x86-Options.html#index-mcrc32)
+
+maes
+UrlSuffix(gcc/x86-Options.html#index-maes)
+
+msha
+UrlSuffix(gcc/x86-Options.html#index-msha)
+
+mpclmul
+UrlSuffix(gcc/x86-Options.html#index-mpclmul)
+
+msse2avx
+UrlSuffix(gcc/x86-Options.html#index-msse2avx)
+
+mfsgsbase
+UrlSuffix(gcc/x86-Options.html#index-mfsgsbase)
+
+mrdrnd
+UrlSuffix(gcc/x86-Options.html#index-mrdrnd)
+
+mf16c
+UrlSuffix(gcc/x86-Options.html#index-mf16c)
+
+mprefetchwt1
+UrlSuffix(gcc/x86-Options.html#index-mprefetchwt1)
+
+mfentry
+UrlSuffix(gcc/x86-Options.html#index-mfentry)
+
+mrecord-mcount
+UrlSuffix(gcc/x86-Options.html#index-mrecord-mcount)
+
+mnop-mcount
+UrlSuffix(gcc/x86-Options.html#index-mnop-mcount)
+
+mfentry-name=
+UrlSuffix(gcc/x86-Options.html#index-mfentry-name)
+
+mfentry-section=
+UrlSuffix(gcc/x86-Options.html#index-mfentry-section)
+
+mskip-rax-setup
+UrlSuffix(gcc/x86-Options.html#index-mskip-rax-setup)
+
+m8bit-idiv
+UrlSuffix(gcc/x86-Options.html#index-m8bit-idiv)
+
+mavx256-split-unaligned-load
+UrlSuffix(gcc/x86-Options.html#index-mavx256-split-unaligned-load)
+
+mavx256-split-unaligned-store
+UrlSuffix(gcc/x86-Options.html#index-mavx256-split-unaligned-store)
+
+mrtm
+UrlSuffix(gcc/x86-Options.html#index-mrtm)
+
+mmwaitx
+UrlSuffix(gcc/x86-Options.html#index-mmwaitx)
+
+mclzero
+UrlSuffix(gcc/x86-Options.html#index-mclzero)
+
+mpku
+UrlSuffix(gcc/x86-Options.html#index-mpku)
+
+mstack-protector-guard=
+UrlSuffix(gcc/x86-Options.html#index-mstack-protector-guard-4)
+
+mstack-protector-guard-reg=
+UrlSuffix(gcc/x86-Options.html#index-mstack-protector-guard-reg-3)
+
+mstack-protector-guard-offset=
+UrlSuffix(gcc/x86-Options.html#index-mstack-protector-guard-offset-4)
+
+; skipping UrlSuffix for 'mstack-protector-guard-symbol=' due to finding no URLs
+
+mgeneral-regs-only
+UrlSuffix(gcc/x86-Options.html#index-mgeneral-regs-only-2)
+
+mshstk
+UrlSuffix(gcc/x86-Options.html#index-mshstk)
+
+mcet-switch
+UrlSuffix(gcc/x86-Options.html#index-mcet-switch)
+
+mmanual-endbr
+UrlSuffix(gcc/x86-Options.html#index-mmanual-endbr)
+
+mforce-indirect-call
+UrlSuffix(gcc/x86-Options.html#index-mforce-indirect-call)
+
+mindirect-branch=
+UrlSuffix(gcc/x86-Options.html#index-mindirect-branch)
+
+mfunction-return=
+UrlSuffix(gcc/x86-Options.html#index-mfunction-return)
+
+mindirect-branch-cs-prefix
+UrlSuffix(gcc/x86-Options.html#index-mindirect-branch-cs-prefix)
+
+mindirect-branch-register
+UrlSuffix(gcc/x86-Options.html#index-mindirect-branch-register)
+
+mmovdiri
+UrlSuffix(gcc/x86-Options.html#index-mmovdiri)
+
+mmovdir64b
+UrlSuffix(gcc/x86-Options.html#index-mmovdir64b)
+
+mwaitpkg
+UrlSuffix(gcc/x86-Options.html#index-mwaitpkg)
+
+mcldemote
+UrlSuffix(gcc/x86-Options.html#index-mcldemote)
+
+minstrument-return=
+UrlSuffix(gcc/x86-Options.html#index-minstrument-return)
+
+mrecord-return
+UrlSuffix(gcc/x86-Options.html#index-mrecord-return)
+
+mharden-sls=
+UrlSuffix(gcc/x86-Options.html#index-mharden-sls-1)
+
+mavx512bf16
+UrlSuffix(gcc/x86-Options.html#index-mavx512bf16)
+
+menqcmd
+UrlSuffix(gcc/x86-Options.html#index-menqcmd)
+
+mserialize
+UrlSuffix(gcc/x86-Options.html#index-mserialize)
+
+mtsxldtrk
+UrlSuffix(gcc/x86-Options.html#index-mtsxldtrk)
+
+mamx-tile
+UrlSuffix(gcc/x86-Options.html#index-mamx-tile)
+
+mamx-int8
+UrlSuffix(gcc/x86-Options.html#index-mamx-int8)
+
+mamx-bf16
+UrlSuffix(gcc/x86-Options.html#index-mamx-bf16)
+
+mhreset
+UrlSuffix(gcc/x86-Options.html#index-mhreset)
+
+mkl
+UrlSuffix(gcc/x86-Options.html#index-mkl)
+
+mwidekl
+UrlSuffix(gcc/x86-Options.html#index-mwidekl)
+
+mavxvnni
+UrlSuffix(gcc/x86-Options.html#index-mavxvnni)
+
+mneeded
+UrlSuffix(gcc/x86-Options.html#index-mneeded)
+
+mmwait
+UrlSuffix(gcc/x86-Options.html#index-mmwait)
+
+mavx512fp16
+UrlSuffix(gcc/x86-Options.html#index-mavx512fp16)
+
+mdirect-extern-access
+UrlSuffix(gcc/x86-Options.html#index-mdirect-extern-access-1)
+
+mavxifma
+UrlSuffix(gcc/x86-Options.html#index-mavxifma)
+
+mavxvnniint8
+UrlSuffix(gcc/x86-Options.html#index-mavxvnniint8)
+
+mavxneconvert
+UrlSuffix(gcc/x86-Options.html#index-mavxneconvert)
+
+mcmpccxadd
+UrlSuffix(gcc/x86-Options.html#index-mcmpccxadd)
+
+mamx-fp16
+UrlSuffix(gcc/x86-Options.html#index-mamx-fp16)
+
+mprefetchi
+UrlSuffix(gcc/x86-Options.html#index-mprefetchi)
+
+mraoint
+UrlSuffix(gcc/x86-Options.html#index-mraoint)
+
+munroll-only-small-loops
+UrlSuffix(gcc/x86-Options.html#index-munroll-only-small-loops)
+
+mlam=
+UrlSuffix(gcc/x86-Options.html#index-mlam)
+
+mamx-complex
+UrlSuffix(gcc/x86-Options.html#index-mamx-complex)
+
+mavxvnniint16
+UrlSuffix(gcc/x86-Options.html#index-mavxvnniint16)
+
+msm3
+UrlSuffix(gcc/x86-Options.html#index-msm3)
+
+msha512
+UrlSuffix(gcc/x86-Options.html#index-msha512)
+
+msm4
+UrlSuffix(gcc/x86-Options.html#index-msm4)
+
+mapxf
+UrlSuffix(gcc/x86-Options.html#index-mapxf)
+
+musermsr
+UrlSuffix(gcc/x86-Options.html#index-musermsr)
+
diff --git a/gcc/config/i386/mingw-w64.opt.urls b/gcc/config/i386/mingw-w64.opt.urls
new file mode 100644
index 000000000000..6bb53ef29b2b
--- /dev/null
+++ b/gcc/config/i386/mingw-w64.opt.urls
@@ -0,0 +1,5 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/i386/mingw-w64.opt and generated HTML
+
+municode
+UrlSuffix(gcc/x86-Windows-Options.html#index-municode)
+
diff --git a/gcc/config/i386/mingw.opt.urls b/gcc/config/i386/mingw.opt.urls
new file mode 100644
index 000000000000..2cbbaadf310d
--- /dev/null
+++ b/gcc/config/i386/mingw.opt.urls
@@ -0,0 +1,12 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/i386/mingw.opt and generated HTML
+
+mcrtdll=
+UrlSuffix(gcc/x86-Windows-Options.html#index-mcrtdll)
+
+; skipping UrlSuffix for 'pthread' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-pthread-1'
+;   duplicate: 'gcc/Preprocessor-Options.html#index-pthread'
+
+Wpedantic-ms-format
+UrlSuffix(gcc/Warning-Options.html#index-Wno-pedantic-ms-format)
+
diff --git a/gcc/config/i386/nto.opt.urls b/gcc/config/i386/nto.opt.urls
new file mode 100644
index 000000000000..37c07a5b88be
--- /dev/null
+++ b/gcc/config/i386/nto.opt.urls
@@ -0,0 +1,5 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/i386/nto.opt and generated HTML
+
+G
+UrlSuffix(gcc/System-V-Options.html#index-G-5)
+
diff --git a/gcc/config/ia64/ia64.opt.urls b/gcc/config/ia64/ia64.opt.urls
new file mode 100644
index 000000000000..1e1d0631550a
--- /dev/null
+++ b/gcc/config/ia64/ia64.opt.urls
@@ -0,0 +1,122 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/ia64/ia64.opt and generated HTML
+
+mbig-endian
+UrlSuffix(gcc/IA-64-Options.html#index-mbig-endian-6)
+
+mlittle-endian
+UrlSuffix(gcc/IA-64-Options.html#index-mlittle-endian-6)
+
+mgnu-as
+UrlSuffix(gcc/IA-64-Options.html#index-mgnu-as)
+
+mgnu-ld
+UrlSuffix(gcc/IA-64-Options.html#index-mgnu-ld-1)
+
+mvolatile-asm-stop
+UrlSuffix(gcc/IA-64-Options.html#index-mvolatile-asm-stop)
+
+mregister-names
+UrlSuffix(gcc/IA-64-Options.html#index-mregister-names)
+
+mno-sdata
+UrlSuffix(gcc/IA-64-Options.html#index-mno-sdata-1)
+
+msdata
+UrlSuffix(gcc/IA-64-Options.html#index-msdata-1)
+
+mno-pic
+UrlSuffix(gcc/IA-64-Options.html#index-mno-pic)
+
+mconstant-gp
+UrlSuffix(gcc/IA-64-Options.html#index-mconstant-gp)
+
+mauto-pic
+UrlSuffix(gcc/IA-64-Options.html#index-mauto-pic)
+
+minline-float-divide-min-latency
+UrlSuffix(gcc/IA-64-Options.html#index-minline-float-divide-min-latency)
+
+minline-float-divide-max-throughput
+UrlSuffix(gcc/IA-64-Options.html#index-minline-float-divide-max-throughput)
+
+mno-inline-float-divide
+UrlSuffix(gcc/IA-64-Options.html#index-mno-inline-float-divide)
+
+minline-int-divide-min-latency
+UrlSuffix(gcc/IA-64-Options.html#index-minline-int-divide-min-latency)
+
+minline-int-divide-max-throughput
+UrlSuffix(gcc/IA-64-Options.html#index-minline-int-divide-max-throughput)
+
+mno-inline-int-divide
+UrlSuffix(gcc/IA-64-Options.html#index-mno-inline-int-divide)
+
+minline-sqrt-min-latency
+UrlSuffix(gcc/IA-64-Options.html#index-minline-sqrt-min-latency)
+
+minline-sqrt-max-throughput
+UrlSuffix(gcc/IA-64-Options.html#index-minline-sqrt-max-throughput)
+
+mno-inline-sqrt
+UrlSuffix(gcc/IA-64-Options.html#index-mno-inline-sqrt)
+
+mdwarf2-asm
+UrlSuffix(gcc/IA-64-Options.html#index-mdwarf2-asm)
+
+mearly-stop-bits
+UrlSuffix(gcc/IA-64-Options.html#index-mearly-stop-bits)
+
+mfixed-range=
+UrlSuffix(gcc/IA-64-Options.html#index-mfixed-range-1)
+
+mtls-size=
+UrlSuffix(gcc/IA-64-Options.html#index-mtls-size-1)
+
+mtune=
+UrlSuffix(gcc/IA-64-Options.html#index-mtune-7)
+
+msched-br-data-spec
+UrlSuffix(gcc/IA-64-Options.html#index-msched-br-data-spec)
+
+msched-ar-data-spec
+UrlSuffix(gcc/IA-64-Options.html#index-msched-ar-data-spec)
+
+msched-control-spec
+UrlSuffix(gcc/IA-64-Options.html#index-msched-control-spec)
+
+msched-br-in-data-spec
+UrlSuffix(gcc/IA-64-Options.html#index-msched-br-in-data-spec)
+
+msched-ar-in-data-spec
+UrlSuffix(gcc/IA-64-Options.html#index-msched-ar-in-data-spec)
+
+msched-in-control-spec
+UrlSuffix(gcc/IA-64-Options.html#index-msched-in-control-spec)
+
+msched-spec-ldc
+UrlSuffix(gcc/IA-64-Options.html#index-msched-spec-ldc)
+
+msched-prefer-non-data-spec-insns
+UrlSuffix(gcc/IA-64-Options.html#index-msched-prefer-non-data-spec-insns)
+
+msched-prefer-non-control-spec-insns
+UrlSuffix(gcc/IA-64-Options.html#index-msched-prefer-non-control-spec-insns)
+
+msched-count-spec-in-critical-path
+UrlSuffix(gcc/IA-64-Options.html#index-msched-count-spec-in-critical-path)
+
+msched-stop-bits-after-every-cycle
+UrlSuffix(gcc/IA-64-Options.html#index-msched-stop-bits-after-every-cycle)
+
+msched-fp-mem-deps-zero-cost
+UrlSuffix(gcc/IA-64-Options.html#index-msched-fp-mem-deps-zero-cost)
+
+msched-max-memory-insns=
+UrlSuffix(gcc/IA-64-Options.html#index-msched-max-memory-insns)
+
+msched-max-memory-insns-hard-limit
+UrlSuffix(gcc/IA-64-Options.html#index-msched-max-memory-insns-hard-limit)
+
+msel-sched-dont-check-control-spec
+UrlSuffix(gcc/IA-64-Options.html#index-msel-sched-dont-check-control-spec)
+
diff --git a/gcc/config/ia64/ilp32.opt.urls b/gcc/config/ia64/ilp32.opt.urls
new file mode 100644
index 000000000000..07bd47d6d13f
--- /dev/null
+++ b/gcc/config/ia64/ilp32.opt.urls
@@ -0,0 +1,8 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/ia64/ilp32.opt and generated HTML
+
+milp32
+UrlSuffix(gcc/IA-64-Options.html#index-milp32)
+
+mlp64
+UrlSuffix(gcc/IA-64-Options.html#index-mlp64)
+
diff --git a/gcc/config/ia64/vms.opt.urls b/gcc/config/ia64/vms.opt.urls
new file mode 100644
index 000000000000..e7797d9325e7
--- /dev/null
+++ b/gcc/config/ia64/vms.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/ia64/vms.opt and generated HTML
+
diff --git a/gcc/config/iq2000/iq2000.opt.urls b/gcc/config/iq2000/iq2000.opt.urls
new file mode 100644
index 000000000000..6aadab6be3af
--- /dev/null
+++ b/gcc/config/iq2000/iq2000.opt.urls
@@ -0,0 +1,14 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/iq2000/iq2000.opt and generated HTML
+
+; skipping UrlSuffix for 'march=' due to finding no URLs
+
+; skipping UrlSuffix for 'mcpu=' due to finding no URLs
+
+; skipping UrlSuffix for 'membedded-data' due to finding no URLs
+
+; skipping UrlSuffix for 'mgpopt' due to finding no URLs
+
+; skipping UrlSuffix for 'mno-crt0' due to finding no URLs
+
+; skipping UrlSuffix for 'muninit-const-in-rodata' due to finding no URLs
+
diff --git a/gcc/config/linux-android.opt.urls b/gcc/config/linux-android.opt.urls
new file mode 100644
index 000000000000..48d38e925aa1
--- /dev/null
+++ b/gcc/config/linux-android.opt.urls
@@ -0,0 +1,11 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/linux-android.opt and generated HTML
+
+mandroid
+UrlSuffix(gcc/GNU_002fLinux-Options.html#index-mandroid)
+
+tno-android-cc
+UrlSuffix(gcc/GNU_002fLinux-Options.html#index-tno-android-cc)
+
+tno-android-ld
+UrlSuffix(gcc/GNU_002fLinux-Options.html#index-tno-android-ld)
+
diff --git a/gcc/config/linux.opt.urls b/gcc/config/linux.opt.urls
new file mode 100644
index 000000000000..792a73fb0a69
--- /dev/null
+++ b/gcc/config/linux.opt.urls
@@ -0,0 +1,14 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/linux.opt and generated HTML
+
+mbionic
+UrlSuffix(gcc/GNU_002fLinux-Options.html#index-mbionic)
+
+mglibc
+UrlSuffix(gcc/GNU_002fLinux-Options.html#index-mglibc)
+
+muclibc
+UrlSuffix(gcc/GNU_002fLinux-Options.html#index-muclibc)
+
+mmusl
+UrlSuffix(gcc/GNU_002fLinux-Options.html#index-mmusl)
+
diff --git a/gcc/config/lm32/lm32.opt.urls b/gcc/config/lm32/lm32.opt.urls
new file mode 100644
index 000000000000..89c8c47d3f44
--- /dev/null
+++ b/gcc/config/lm32/lm32.opt.urls
@@ -0,0 +1,14 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/lm32/lm32.opt and generated HTML
+
+mdivide-enabled
+UrlSuffix(gcc/LM32-Options.html#index-mdivide-enabled)
+
+mbarrel-shift-enabled
+UrlSuffix(gcc/LM32-Options.html#index-mbarrel-shift-enabled)
+
+msign-extend-enabled
+UrlSuffix(gcc/LM32-Options.html#index-msign-extend-enabled)
+
+muser-enabled
+UrlSuffix(gcc/LM32-Options.html#index-muser-enabled)
+
diff --git a/gcc/config/loongarch/loongarch.opt.urls b/gcc/config/loongarch/loongarch.opt.urls
new file mode 100644
index 000000000000..020834f25bcd
--- /dev/null
+++ b/gcc/config/loongarch/loongarch.opt.urls
@@ -0,0 +1,60 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/loongarch/loongarch.opt and generated HTML
+
+mfpu=
+UrlSuffix(gcc/LoongArch-Options.html#index-mfpu-2)
+
+msoft-float
+UrlSuffix(gcc/LoongArch-Options.html#index-msoft-float-5)
+
+msingle-float
+UrlSuffix(gcc/LoongArch-Options.html#index-msingle-float)
+
+mdouble-float
+UrlSuffix(gcc/LoongArch-Options.html#index-mdouble-float-1)
+
+msimd=
+UrlSuffix(gcc/LoongArch-Options.html#index-msimd-1)
+
+march=
+UrlSuffix(gcc/LoongArch-Options.html#index-march-7)
+
+mtune=
+UrlSuffix(gcc/LoongArch-Options.html#index-mtune-8)
+
+mabi=
+UrlSuffix(gcc/LoongArch-Options.html#index-mabi-2)
+
+mbranch-cost=
+UrlSuffix(gcc/LoongArch-Options.html#index-mbranch-cost-2)
+
+mcheck-zero-division
+UrlSuffix(gcc/LoongArch-Options.html#index-mcheck-zero-division)
+
+mcond-move-int
+UrlSuffix(gcc/LoongArch-Options.html#index-mcond-move-int)
+
+mcond-move-float
+UrlSuffix(gcc/LoongArch-Options.html#index-mcond-move-float)
+
+mmemcpy
+UrlSuffix(gcc/LoongArch-Options.html#index-mmemcpy)
+
+mstrict-align
+UrlSuffix(gcc/LoongArch-Options.html#index-mstrict-align-1)
+
+mmax-inline-memcpy-size=
+UrlSuffix(gcc/LoongArch-Options.html#index-mmax-inline-memcpy-size)
+
+mexplicit-relocs=
+UrlSuffix(gcc/LoongArch-Options.html#index-mexplicit-relocs-1)
+
+mexplicit-relocs
+UrlSuffix(gcc/LoongArch-Options.html#index-mexplicit-relocs-1)
+
+; skipping UrlSuffix for 'mcmodel=' due to finding no URLs
+
+mdirect-extern-access
+UrlSuffix(gcc/LoongArch-Options.html#index-mdirect-extern-access)
+
+; skipping UrlSuffix for 'mrelax' due to finding no URLs
+
diff --git a/gcc/config/lynx.opt.urls b/gcc/config/lynx.opt.urls
new file mode 100644
index 000000000000..63e7b9c4b33f
--- /dev/null
+++ b/gcc/config/lynx.opt.urls
@@ -0,0 +1,5 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/lynx.opt and generated HTML
+
+mthreads
+UrlSuffix(gcc/x86-Windows-Options.html#index-mthreads-1)
+
diff --git a/gcc/config/m32c/m32c.opt.urls b/gcc/config/m32c/m32c.opt.urls
new file mode 100644
index 000000000000..da1bc024f74a
--- /dev/null
+++ b/gcc/config/m32c/m32c.opt.urls
@@ -0,0 +1,8 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/m32c/m32c.opt and generated HTML
+
+msim
+UrlSuffix(gcc/M32C-Options.html#index-msim-4)
+
+memregs=
+UrlSuffix(gcc/M32C-Options.html#index-memregs_003d)
+
diff --git a/gcc/config/m32r/m32r.opt.urls b/gcc/config/m32r/m32r.opt.urls
new file mode 100644
index 000000000000..ca33866970d8
--- /dev/null
+++ b/gcc/config/m32r/m32r.opt.urls
@@ -0,0 +1,27 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/m32r/m32r.opt and generated HTML
+
+m32rx
+UrlSuffix(gcc/M32R_002fD-Options.html#index-m32rx)
+
+m32r2
+UrlSuffix(gcc/M32R_002fD-Options.html#index-m32r2)
+
+m32r
+UrlSuffix(gcc/M32R_002fD-Options.html#index-m32r)
+
+malign-loops
+UrlSuffix(gcc/M32R_002fD-Options.html#index-malign-loops)
+
+mdebug
+UrlSuffix(gcc/M32R_002fD-Options.html#index-mdebug)
+
+; skipping UrlSuffix for 'mflush-func=' due to finding no URLs
+
+mno-flush-func
+UrlSuffix(gcc/M32R_002fD-Options.html#index-mno-flush-func)
+
+mno-flush-trap
+UrlSuffix(gcc/M32R_002fD-Options.html#index-mno-flush-trap)
+
+; skipping UrlSuffix for 'msdata=' due to finding no URLs
+
diff --git a/gcc/config/m68k/ieee.opt.urls b/gcc/config/m68k/ieee.opt.urls
new file mode 100644
index 000000000000..9c0c0f9b68a7
--- /dev/null
+++ b/gcc/config/m68k/ieee.opt.urls
@@ -0,0 +1,4 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/m68k/ieee.opt and generated HTML
+
+; skipping UrlSuffix for 'mieee-fp' due to finding no URLs
+
diff --git a/gcc/config/m68k/m68k-tables.opt.urls b/gcc/config/m68k/m68k-tables.opt.urls
new file mode 100644
index 000000000000..380dc4370846
--- /dev/null
+++ b/gcc/config/m68k/m68k-tables.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/m68k/m68k-tables.opt and generated HTML
+
diff --git a/gcc/config/m68k/m68k.opt.urls b/gcc/config/m68k/m68k.opt.urls
new file mode 100644
index 000000000000..079fbf4a88e4
--- /dev/null
+++ b/gcc/config/m68k/m68k.opt.urls
@@ -0,0 +1,107 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/m68k/m68k.opt and generated HTML
+
+m5200
+UrlSuffix(gcc/M680x0-Options.html#index-m5200)
+
+m5206e
+UrlSuffix(gcc/M680x0-Options.html#index-m5206e)
+
+m528x
+UrlSuffix(gcc/M680x0-Options.html#index-m528x)
+
+m5307
+UrlSuffix(gcc/M680x0-Options.html#index-m5307)
+
+m5407
+UrlSuffix(gcc/M680x0-Options.html#index-m5407)
+
+m68000
+UrlSuffix(gcc/M680x0-Options.html#index-m68000)
+
+m68010
+UrlSuffix(gcc/M680x0-Options.html#index-m68010)
+
+m68020
+UrlSuffix(gcc/M680x0-Options.html#index-m68020)
+
+m68020-40
+UrlSuffix(gcc/M680x0-Options.html#index-m68020-40)
+
+m68020-60
+UrlSuffix(gcc/M680x0-Options.html#index-m68020-60)
+
+m68030
+UrlSuffix(gcc/M680x0-Options.html#index-m68030)
+
+m68040
+UrlSuffix(gcc/M680x0-Options.html#index-m68040)
+
+m68060
+UrlSuffix(gcc/M680x0-Options.html#index-m68060)
+
+m68881
+UrlSuffix(gcc/M680x0-Options.html#index-m68881)
+
+malign-int
+UrlSuffix(gcc/M680x0-Options.html#index-malign-int)
+
+march=
+UrlSuffix(gcc/M680x0-Options.html#index-march-8)
+
+mbitfield
+UrlSuffix(gcc/M680x0-Options.html#index-mbitfield)
+
+mc68000
+UrlSuffix(gcc/M680x0-Options.html#index-mc68000)
+
+mc68020
+UrlSuffix(gcc/M680x0-Options.html#index-mc68020)
+
+mcfv4e
+UrlSuffix(gcc/M680x0-Options.html#index-mcfv4e)
+
+mcpu=
+UrlSuffix(gcc/M680x0-Options.html#index-mcpu-7)
+
+mcpu32
+UrlSuffix(gcc/M680x0-Options.html#index-mcpu32)
+
+mdiv
+UrlSuffix(gcc/M680x0-Options.html#index-mdiv-1)
+
+mhard-float
+UrlSuffix(gcc/M680x0-Options.html#index-mhard-float-2)
+
+; skipping UrlSuffix for 'mid-shared-library' due to finding no URLs
+
+mlong-jump-table-offsets
+UrlSuffix(gcc/M680x0-Options.html#index-mlong-jump-table-offsets)
+
+mnobitfield
+UrlSuffix(gcc/M680x0-Options.html#index-mnobitfield)
+
+mpcrel
+UrlSuffix(gcc/M680x0-Options.html#index-mpcrel)
+
+mrtd
+UrlSuffix(gcc/M680x0-Options.html#index-mrtd)
+
+; skipping UrlSuffix for 'msep-data' due to finding no URLs
+
+; skipping UrlSuffix for 'mshared-library-id=' due to finding no URLs
+
+mshort
+UrlSuffix(gcc/M680x0-Options.html#index-mshort)
+
+msoft-float
+UrlSuffix(gcc/M680x0-Options.html#index-msoft-float-6)
+
+mstrict-align
+UrlSuffix(gcc/M680x0-Options.html#index-mstrict-align-2)
+
+mtune=
+UrlSuffix(gcc/M680x0-Options.html#index-mtune-9)
+
+mxgot
+UrlSuffix(gcc/M680x0-Options.html#index-mxgot)
+
diff --git a/gcc/config/m68k/uclinux.opt.urls b/gcc/config/m68k/uclinux.opt.urls
new file mode 100644
index 000000000000..3fd1392f88a6
--- /dev/null
+++ b/gcc/config/m68k/uclinux.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/m68k/uclinux.opt and generated HTML
+
diff --git a/gcc/config/mcore/mcore.opt.urls b/gcc/config/mcore/mcore.opt.urls
new file mode 100644
index 000000000000..a876c8c13eff
--- /dev/null
+++ b/gcc/config/mcore/mcore.opt.urls
@@ -0,0 +1,38 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/mcore/mcore.opt and generated HTML
+
+m210
+UrlSuffix(gcc/MCore-Options.html#index-m210)
+
+m340
+UrlSuffix(gcc/MCore-Options.html#index-m340)
+
+m4byte-functions
+UrlSuffix(gcc/MCore-Options.html#index-m4byte-functions)
+
+mbig-endian
+UrlSuffix(gcc/MCore-Options.html#index-mbig-endian-7)
+
+mcallgraph-data
+UrlSuffix(gcc/MCore-Options.html#index-mcallgraph-data)
+
+mdiv
+UrlSuffix(gcc/MCore-Options.html#index-mdiv-2)
+
+mhardlit
+UrlSuffix(gcc/MCore-Options.html#index-mhardlit)
+
+mlittle-endian
+UrlSuffix(gcc/MCore-Options.html#index-mlittle-endian-7)
+
+mno-lsim
+UrlSuffix(gcc/MCore-Options.html#index-mno-lsim-1)
+
+mslow-bytes
+UrlSuffix(gcc/MCore-Options.html#index-mslow-bytes)
+
+mstack-increment=
+UrlSuffix(gcc/MCore-Options.html#index-mstack-increment)
+
+mwide-bitfields
+UrlSuffix(gcc/MCore-Options.html#index-mwide-bitfields)
+
diff --git a/gcc/config/microblaze/microblaze.opt.urls b/gcc/config/microblaze/microblaze.opt.urls
new file mode 100644
index 000000000000..33b13b84e2c2
--- /dev/null
+++ b/gcc/config/microblaze/microblaze.opt.urls
@@ -0,0 +1,59 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/microblaze/microblaze.opt and generated HTML
+
+msoft-float
+UrlSuffix(gcc/MicroBlaze-Options.html#index-msoft-float-7)
+
+mhard-float
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mhard-float-3)
+
+msmall-divides
+UrlSuffix(gcc/MicroBlaze-Options.html#index-msmall-divides)
+
+mcpu=
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mcpu_003d-3)
+
+mmemcpy
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mmemcpy-1)
+
+mbig-endian
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mbig-endian-8)
+
+mlittle-endian
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mlittle-endian-8)
+
+mxl-soft-mul
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-soft-mul)
+
+mxl-reorder
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-reorder)
+
+mxl-soft-div
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-soft-div)
+
+mxl-barrel-shift
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-barrel-shift)
+
+mxl-pattern-compare
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-pattern-compare)
+
+mxl-stack-check
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-stack-check)
+
+mxl-gp-opt
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-gp-opt)
+
+mno-clearbss
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mno-clearbss)
+
+mxl-multiply-high
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-multiply-high)
+
+mxl-float-convert
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-float-convert)
+
+mxl-float-sqrt
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-float-sqrt)
+
+mpic-data-is-text-relative
+UrlSuffix(gcc/MicroBlaze-Options.html#index-mpic-data-is-text-relative-1)
+
diff --git a/gcc/config/mips/mips-tables.opt.urls b/gcc/config/mips/mips-tables.opt.urls
new file mode 100644
index 000000000000..3b2a77f2ea9c
--- /dev/null
+++ b/gcc/config/mips/mips-tables.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/mips/mips-tables.opt and generated HTML
+
diff --git a/gcc/config/mips/mips.opt.urls b/gcc/config/mips/mips.opt.urls
new file mode 100644
index 000000000000..ff2f0aee0e37
--- /dev/null
+++ b/gcc/config/mips/mips.opt.urls
@@ -0,0 +1,269 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/mips/mips.opt and generated HTML
+
+EB
+UrlSuffix(gcc/MIPS-Options.html#index-EB-2)
+
+EL
+UrlSuffix(gcc/MIPS-Options.html#index-EL-2)
+
+; skipping UrlSuffix for 'mabi=' due to finding no URLs
+
+mabicalls
+UrlSuffix(gcc/MIPS-Options.html#index-mabicalls)
+
+mmad
+UrlSuffix(gcc/MIPS-Options.html#index-mmad)
+
+mimadd
+UrlSuffix(gcc/MIPS-Options.html#index-mimadd)
+
+march=
+UrlSuffix(gcc/MIPS-Options.html#index-march-9)
+
+mbranch-cost=
+UrlSuffix(gcc/MIPS-Options.html#index-mbranch-cost-3)
+
+mbranch-likely
+UrlSuffix(gcc/MIPS-Options.html#index-mbranch-likely)
+
+mflip-mips16
+UrlSuffix(gcc/MIPS-Options.html#index-mflip-mips16)
+
+mcheck-zero-division
+UrlSuffix(gcc/MIPS-Options.html#index-mcheck-zero-division-1)
+
+mcode-readable=
+UrlSuffix(gcc/MIPS-Options.html#index-mcode-readable)
+
+mdivide-breaks
+UrlSuffix(gcc/MIPS-Options.html#index-mdivide-breaks)
+
+mdivide-traps
+UrlSuffix(gcc/MIPS-Options.html#index-mdivide-traps)
+
+mdmx
+UrlSuffix(gcc/MIPS-Options.html#index-mdmx)
+
+mdouble-float
+UrlSuffix(gcc/MIPS-Options.html#index-mdouble-float-2)
+
+mdsp
+UrlSuffix(gcc/MIPS-Options.html#index-mdsp-1)
+
+mdspr2
+UrlSuffix(gcc/MIPS-Options.html#index-mdspr2)
+
+; skipping UrlSuffix for 'mdebug' due to finding no URLs
+
+; skipping UrlSuffix for 'meb' due to finding no URLs
+
+; skipping UrlSuffix for 'mel' due to finding no URLs
+
+membedded-data
+UrlSuffix(gcc/MIPS-Options.html#index-membedded-data)
+
+meva
+UrlSuffix(gcc/MIPS-Options.html#index-meva)
+
+mexplicit-relocs
+UrlSuffix(gcc/MIPS-Options.html#index-mexplicit-relocs-2)
+
+mextern-sdata
+UrlSuffix(gcc/MIPS-Options.html#index-mextern-sdata)
+
+mfix-24k
+UrlSuffix(gcc/MIPS-Options.html#index-mfix-24k)
+
+mfix-r4000
+UrlSuffix(gcc/MIPS-Options.html#index-mfix-r4000)
+
+mfix-r4400
+UrlSuffix(gcc/MIPS-Options.html#index-mfix-r4400)
+
+mfix-r5900
+UrlSuffix(gcc/MIPS-Options.html#index-mfix-r5900)
+
+mfix-rm7000
+UrlSuffix(gcc/MIPS-Options.html#index-mfix-rm7000)
+
+mfix-r10000
+UrlSuffix(gcc/MIPS-Options.html#index-mfix-r10000)
+
+mfix-sb1
+UrlSuffix(gcc/MIPS-Options.html#index-mfix-sb1)
+
+mfix-vr4120
+UrlSuffix(gcc/MIPS-Options.html#index-mfix-vr4120)
+
+mfix-vr4130
+UrlSuffix(gcc/MIPS-Options.html#index-mfix-vr4130)
+
+mfp-exceptions
+UrlSuffix(gcc/MIPS-Options.html#index-mfp-exceptions)
+
+mfp32
+UrlSuffix(gcc/MIPS-Options.html#index-mfp32)
+
+mfpxx
+UrlSuffix(gcc/MIPS-Options.html#index-mfpxx)
+
+mfp64
+UrlSuffix(gcc/MIPS-Options.html#index-mfp64)
+
+mflush-func=
+UrlSuffix(gcc/MIPS-Options.html#index-mflush-func)
+
+mgp32
+UrlSuffix(gcc/MIPS-Options.html#index-mgp32)
+
+mgp64
+UrlSuffix(gcc/MIPS-Options.html#index-mgp64)
+
+mgpopt
+UrlSuffix(gcc/MIPS-Options.html#index-mgpopt)
+
+mplt
+UrlSuffix(gcc/MIPS-Options.html#index-mplt)
+
+mhard-float
+UrlSuffix(gcc/MIPS-Options.html#index-mhard-float-4)
+
+minterlink-compressed
+UrlSuffix(gcc/MIPS-Options.html#index-minterlink-compressed)
+
+minterlink-mips16
+UrlSuffix(gcc/MIPS-Options.html#index-minterlink-mips16)
+
+mips16
+UrlSuffix(gcc/MIPS-Options.html#index-mips16)
+
+mips3d
+UrlSuffix(gcc/MIPS-Options.html#index-mips3d)
+
+mllsc
+UrlSuffix(gcc/MIPS-Options.html#index-mllsc)
+
+mlocal-sdata
+UrlSuffix(gcc/MIPS-Options.html#index-mlocal-sdata)
+
+mlong-calls
+UrlSuffix(gcc/MIPS-Options.html#index-mlong-calls-6)
+
+mlong32
+UrlSuffix(gcc/MIPS-Options.html#index-mlong32)
+
+mlong64
+UrlSuffix(gcc/MIPS-Options.html#index-mlong64)
+
+mmcount-ra-address
+UrlSuffix(gcc/MIPS-Options.html#index-mmcount-ra-address)
+
+mmemcpy
+UrlSuffix(gcc/MIPS-Options.html#index-mmemcpy-2)
+
+mmicromips
+UrlSuffix(gcc/MIPS-Options.html#index-mmicromips)
+
+mmt
+UrlSuffix(gcc/MIPS-Options.html#index-mmt)
+
+mno-float
+UrlSuffix(gcc/MIPS-Options.html#index-mno-float)
+
+mmcu
+UrlSuffix(gcc/MIPS-Options.html#index-mmcu-1)
+
+; skipping UrlSuffix for 'mno-flush-func' due to finding no URLs
+
+mno-mdmx
+UrlSuffix(gcc/MIPS-Options.html#index-mno-mdmx)
+
+mno-mips16
+UrlSuffix(gcc/MIPS-Options.html#index-mno-mips16)
+
+mno-mips3d
+UrlSuffix(gcc/MIPS-Options.html#index-mno-mips3d)
+
+mpaired-single
+UrlSuffix(gcc/MIPS-Options.html#index-mpaired-single)
+
+mr10k-cache-barrier=
+UrlSuffix(gcc/MIPS-Options.html#index-mr10k-cache-barrier)
+
+mrelax-pic-calls
+UrlSuffix(gcc/MIPS-Options.html#index-mrelax-pic-calls)
+
+msingle-float
+UrlSuffix(gcc/MIPS-Options.html#index-msingle-float-1)
+
+msmartmips
+UrlSuffix(gcc/MIPS-Options.html#index-msmartmips)
+
+msoft-float
+UrlSuffix(gcc/MIPS-Options.html#index-msoft-float-8)
+
+msplit-addresses
+UrlSuffix(gcc/MIPS-Options.html#index-msplit-addresses)
+
+mmips16e2
+UrlSuffix(gcc/MIPS-Options.html#index-mmips16e2)
+
+msym32
+UrlSuffix(gcc/MIPS-Options.html#index-msym32)
+
+msynci
+UrlSuffix(gcc/MIPS-Options.html#index-msynci)
+
+; skipping UrlSuffix for 'mlra' due to finding no URLs
+
+mlxc1-sxc1
+UrlSuffix(gcc/MIPS-Options.html#index-mlxc1-sxc1)
+
+mmadd4
+UrlSuffix(gcc/MIPS-Options.html#index-mmadd4)
+
+mtune=
+UrlSuffix(gcc/MIPS-Options.html#index-mtune-10)
+
+munaligned-access
+UrlSuffix(gcc/MIPS-Options.html#index-munaligned-access-1)
+
+muninit-const-in-rodata
+UrlSuffix(gcc/MIPS-Options.html#index-muninit-const-in-rodata)
+
+mvirt
+UrlSuffix(gcc/MIPS-Options.html#index-mvirt)
+
+mxpa
+UrlSuffix(gcc/MIPS-Options.html#index-mxpa)
+
+mcrc
+UrlSuffix(gcc/MIPS-Options.html#index-mcrc)
+
+mginv
+UrlSuffix(gcc/MIPS-Options.html#index-mginv)
+
+mvr4130-align
+UrlSuffix(gcc/MIPS-Options.html#index-mvr4130-align)
+
+mxgot
+UrlSuffix(gcc/MIPS-Options.html#index-mxgot-1)
+
+modd-spreg
+UrlSuffix(gcc/MIPS-Options.html#index-modd-spreg)
+
+mframe-header-opt
+UrlSuffix(gcc/MIPS-Options.html#index-mframe-header-opt)
+
+mload-store-pairs
+UrlSuffix(gcc/MIPS-Options.html#index-mload-store-pairs)
+
+mloongson-mmi
+UrlSuffix(gcc/MIPS-Options.html#index-mloongson-mmi)
+
+mloongson-ext
+UrlSuffix(gcc/MIPS-Options.html#index-mloongson-ext)
+
+mloongson-ext2
+UrlSuffix(gcc/MIPS-Options.html#index-mloongson-ext2)
+
diff --git a/gcc/config/mips/sde.opt.urls b/gcc/config/mips/sde.opt.urls
new file mode 100644
index 000000000000..2a3d290545f0
--- /dev/null
+++ b/gcc/config/mips/sde.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/mips/sde.opt and generated HTML
+
diff --git a/gcc/config/mmix/mmix.opt.urls b/gcc/config/mmix/mmix.opt.urls
new file mode 100644
index 000000000000..6722f9e4e01d
--- /dev/null
+++ b/gcc/config/mmix/mmix.opt.urls
@@ -0,0 +1,44 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/mmix/mmix.opt and generated HTML
+
+mlibfuncs
+UrlSuffix(gcc/MMIX-Options.html#index-mlibfuncs)
+
+mabi=mmixware
+UrlSuffix(gcc/MMIX-Options.html#index-mabi_003dmmixware)
+
+mabi=gnu
+UrlSuffix(gcc/MMIX-Options.html#index-mabi_003dgnu)
+
+mepsilon
+UrlSuffix(gcc/MMIX-Options.html#index-mepsilon)
+
+mzero-extend
+UrlSuffix(gcc/MMIX-Options.html#index-mzero-extend)
+
+mknuthdiv
+UrlSuffix(gcc/MMIX-Options.html#index-mknuthdiv)
+
+mtoplevel-symbols
+UrlSuffix(gcc/MMIX-Options.html#index-mtoplevel-symbols)
+
+melf
+UrlSuffix(gcc/MMIX-Options.html#index-melf-1)
+
+mbranch-predict
+UrlSuffix(gcc/MMIX-Options.html#index-mbranch-predict)
+
+mno-branch-predict
+UrlSuffix(gcc/MMIX-Options.html#index-mno-branch-predict)
+
+mbase-addresses
+UrlSuffix(gcc/MMIX-Options.html#index-mbase-addresses)
+
+mno-base-addresses
+UrlSuffix(gcc/MMIX-Options.html#index-mno-base-addresses)
+
+msingle-exit
+UrlSuffix(gcc/MMIX-Options.html#index-msingle-exit)
+
+mno-single-exit
+UrlSuffix(gcc/MMIX-Options.html#index-mno-single-exit)
+
diff --git a/gcc/config/mn10300/mn10300.opt.urls b/gcc/config/mn10300/mn10300.opt.urls
new file mode 100644
index 000000000000..396ca4aa2e60
--- /dev/null
+++ b/gcc/config/mn10300/mn10300.opt.urls
@@ -0,0 +1,32 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/mn10300/mn10300.opt and generated HTML
+
+mam33
+UrlSuffix(gcc/MN10300-Options.html#index-mam33)
+
+mam33-2
+UrlSuffix(gcc/MN10300-Options.html#index-mam33-2)
+
+mam34
+UrlSuffix(gcc/MN10300-Options.html#index-mam34)
+
+mtune=
+UrlSuffix(gcc/MN10300-Options.html#index-mtune-11)
+
+mmult-bug
+UrlSuffix(gcc/MN10300-Options.html#index-mmult-bug)
+
+mno-crt0
+UrlSuffix(gcc/MN10300-Options.html#index-mno-crt0)
+
+mrelax
+UrlSuffix(gcc/MN10300-Options.html#index-mrelax-2)
+
+mreturn-pointer-on-d0
+UrlSuffix(gcc/MN10300-Options.html#index-mreturn-pointer-on-d0)
+
+mliw
+UrlSuffix(gcc/MN10300-Options.html#index-mliw)
+
+msetlb
+UrlSuffix(gcc/MN10300-Options.html#index-msetlb)
+
diff --git a/gcc/config/moxie/moxie.opt.urls b/gcc/config/moxie/moxie.opt.urls
new file mode 100644
index 000000000000..a1b8b8a7a767
--- /dev/null
+++ b/gcc/config/moxie/moxie.opt.urls
@@ -0,0 +1,14 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/moxie/moxie.opt and generated HTML
+
+meb
+UrlSuffix(gcc/Moxie-Options.html#index-meb)
+
+mel
+UrlSuffix(gcc/Moxie-Options.html#index-mel)
+
+mmul.x
+UrlSuffix(gcc/Moxie-Options.html#index-mmul_002ex)
+
+mno-crt0
+UrlSuffix(gcc/Moxie-Options.html#index-mno-crt0-1)
+
diff --git a/gcc/config/msp430/msp430.opt.urls b/gcc/config/msp430/msp430.opt.urls
new file mode 100644
index 000000000000..420c1c50f13e
--- /dev/null
+++ b/gcc/config/msp430/msp430.opt.urls
@@ -0,0 +1,53 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/msp430/msp430.opt and generated HTML
+
+msim
+UrlSuffix(gcc/MSP430-Options.html#index-msim-5)
+
+mtiny-printf
+UrlSuffix(gcc/MSP430-Options.html#index-mtiny-printf)
+
+masm-hex
+UrlSuffix(gcc/MSP430-Options.html#index-masm-hex)
+
+mmcu=
+UrlSuffix(gcc/MSP430-Options.html#index-mmcu_003d)
+
+mwarn-mcu
+UrlSuffix(gcc/MSP430-Options.html#index-mwarn-mcu)
+
+mwarn-devices-csv
+UrlSuffix(gcc/MSP430-Options.html#index-mwarn-devices-csv)
+
+mcpu=
+UrlSuffix(gcc/MSP430-Options.html#index-mcpu_003d-4)
+
+mlarge
+UrlSuffix(gcc/MSP430-Options.html#index-mlarge)
+
+msmall
+UrlSuffix(gcc/MSP430-Options.html#index-msmall)
+
+mrelax
+UrlSuffix(gcc/MSP430-Options.html#index-mrelax-3)
+
+minrt
+UrlSuffix(gcc/MSP430-Options.html#index-minrt)
+
+mhwmult=
+UrlSuffix(gcc/MSP430-Options.html#index-mhwmult_003d)
+
+mcode-region=
+UrlSuffix(gcc/MSP430-Options.html#index-mcode-region)
+
+mdata-region=
+UrlSuffix(gcc/MSP430-Options.html#index-mdata-region)
+
+msilicon-errata=
+UrlSuffix(gcc/MSP430-Options.html#index-msilicon-errata)
+
+msilicon-errata-warn=
+UrlSuffix(gcc/MSP430-Options.html#index-msilicon-errata-warn)
+
+mmax-inline-shift=
+UrlSuffix(gcc/MSP430-Options.html#index-mmax-inline-shift_003d)
+
diff --git a/gcc/config/nds32/nds32-elf.opt.urls b/gcc/config/nds32/nds32-elf.opt.urls
new file mode 100644
index 000000000000..5399afba7d3d
--- /dev/null
+++ b/gcc/config/nds32/nds32-elf.opt.urls
@@ -0,0 +1,5 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/nds32/nds32-elf.opt and generated HTML
+
+mcmodel=
+UrlSuffix(gcc/NDS32-Options.html#index-mcmodel)
+
diff --git a/gcc/config/nds32/nds32-linux.opt.urls b/gcc/config/nds32/nds32-linux.opt.urls
new file mode 100644
index 000000000000..27d39f04ad95
--- /dev/null
+++ b/gcc/config/nds32/nds32-linux.opt.urls
@@ -0,0 +1,5 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/nds32/nds32-linux.opt and generated HTML
+
+mcmodel=
+UrlSuffix(gcc/NDS32-Options.html#index-mcmodel)
+
diff --git a/gcc/config/nds32/nds32.opt.urls b/gcc/config/nds32/nds32.opt.urls
new file mode 100644
index 000000000000..e34512d69ba9
--- /dev/null
+++ b/gcc/config/nds32/nds32.opt.urls
@@ -0,0 +1,57 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/nds32/nds32.opt and generated HTML
+
+; skipping UrlSuffix for 'EB' due to finding no URLs
+
+; skipping UrlSuffix for 'EL' due to finding no URLs
+
+; skipping UrlSuffix for 'mabi=' due to finding no URLs
+
+mreduced-regs
+UrlSuffix(gcc/NDS32-Options.html#index-mreduced-regs)
+
+mfull-regs
+UrlSuffix(gcc/NDS32-Options.html#index-mfull-regs)
+
+mbig-endian
+UrlSuffix(gcc/NDS32-Options.html#index-mbig-endian-9)
+
+mlittle-endian
+UrlSuffix(gcc/NDS32-Options.html#index-mlittle-endian-9)
+
+mcmov
+UrlSuffix(gcc/NDS32-Options.html#index-mcmov)
+
+mext-perf
+UrlSuffix(gcc/NDS32-Options.html#index-mext-perf)
+
+mext-perf2
+UrlSuffix(gcc/NDS32-Options.html#index-mext-perf2)
+
+mext-string
+UrlSuffix(gcc/NDS32-Options.html#index-mext-string)
+
+mv3push
+UrlSuffix(gcc/NDS32-Options.html#index-mv3push)
+
+m16-bit
+UrlSuffix(gcc/NDS32-Options.html#index-m16-bit-1)
+
+misr-vector-size=
+UrlSuffix(gcc/NDS32-Options.html#index-misr-vector-size)
+
+mcache-block-size=
+UrlSuffix(gcc/NDS32-Options.html#index-mcache-block-size)
+
+march=
+UrlSuffix(gcc/NDS32-Options.html#index-march-10)
+
+; skipping UrlSuffix for 'mcpu=' due to finding no URLs
+
+mctor-dtor
+UrlSuffix(gcc/NDS32-Options.html#index-mctor-dtor)
+
+mrelax
+UrlSuffix(gcc/NDS32-Options.html#index-mrelax-4)
+
+; skipping UrlSuffix for 'munaligned-access' due to finding no URLs
+
diff --git a/gcc/config/netbsd-elf.opt.urls b/gcc/config/netbsd-elf.opt.urls
new file mode 100644
index 000000000000..c0e791c3a35f
--- /dev/null
+++ b/gcc/config/netbsd-elf.opt.urls
@@ -0,0 +1,5 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/netbsd-elf.opt and generated HTML
+
+rdynamic
+UrlSuffix(gcc/Link-Options.html#index-rdynamic)
+
diff --git a/gcc/config/netbsd.opt.urls b/gcc/config/netbsd.opt.urls
new file mode 100644
index 000000000000..513bf9b7cba6
--- /dev/null
+++ b/gcc/config/netbsd.opt.urls
@@ -0,0 +1,6 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/netbsd.opt and generated HTML
+
+; skipping UrlSuffix for 'pthread' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-pthread-1'
+;   duplicate: 'gcc/Preprocessor-Options.html#index-pthread'
+
diff --git a/gcc/config/nios2/elf.opt.urls b/gcc/config/nios2/elf.opt.urls
new file mode 100644
index 000000000000..1367c6ba50cf
--- /dev/null
+++ b/gcc/config/nios2/elf.opt.urls
@@ -0,0 +1,14 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/nios2/elf.opt and generated HTML
+
+msmallc
+UrlSuffix(gcc/Nios-II-Options.html#index-msmallc)
+
+msys-lib=
+UrlSuffix(gcc/Nios-II-Options.html#index-msys-lib)
+
+msys-crt0=
+UrlSuffix(gcc/Nios-II-Options.html#index-msys-crt0)
+
+mhal
+UrlSuffix(gcc/Nios-II-Options.html#index-mhal)
+
diff --git a/gcc/config/nios2/nios2.opt.urls b/gcc/config/nios2/nios2.opt.urls
new file mode 100644
index 000000000000..a38ea285a6e2
--- /dev/null
+++ b/gcc/config/nios2/nios2.opt.urls
@@ -0,0 +1,50 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/nios2/nios2.opt and generated HTML
+
+mhw-div
+UrlSuffix(gcc/Nios-II-Options.html#index-mhw-div)
+
+mhw-mul
+UrlSuffix(gcc/Nios-II-Options.html#index-mhw-mul)
+
+mhw-mulx
+UrlSuffix(gcc/Nios-II-Options.html#index-mhw-mulx)
+
+mfast-sw-div
+UrlSuffix(gcc/Nios-II-Options.html#index-mfast-sw-div)
+
+mbypass-cache
+UrlSuffix(gcc/Nios-II-Options.html#index-mbypass-cache)
+
+mno-cache-volatile
+UrlSuffix(gcc/Nios-II-Options.html#index-mno-cache-volatile)
+
+mcache-volatile
+UrlSuffix(gcc/Nios-II-Options.html#index-mcache-volatile)
+
+mgpopt=
+UrlSuffix(gcc/Nios-II-Options.html#index-mgpopt-1)
+
+mgpopt
+UrlSuffix(gcc/Nios-II-Options.html#index-mgpopt-1)
+
+mno-gpopt
+UrlSuffix(gcc/Nios-II-Options.html#index-mno-gpopt-1)
+
+meb
+UrlSuffix(gcc/Nios-II-Options.html#index-meb-1)
+
+mel
+UrlSuffix(gcc/Nios-II-Options.html#index-mel-1)
+
+mcustom-fpu-cfg=
+UrlSuffix(gcc/Nios-II-Options.html#index-mcustom-fpu-cfg)
+
+march=
+UrlSuffix(gcc/Nios-II-Options.html#index-march-11)
+
+mgprel-sec=
+UrlSuffix(gcc/Nios-II-Options.html#index-mgprel-sec)
+
+mr0rel-sec=
+UrlSuffix(gcc/Nios-II-Options.html#index-mr0rel-sec)
+
diff --git a/gcc/config/nvptx/nvptx-gen.opt.urls b/gcc/config/nvptx/nvptx-gen.opt.urls
new file mode 100644
index 000000000000..7ea132489aad
--- /dev/null
+++ b/gcc/config/nvptx/nvptx-gen.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/nvptx/nvptx-gen.opt and generated HTML
+
diff --git a/gcc/config/nvptx/nvptx.opt.urls b/gcc/config/nvptx/nvptx.opt.urls
new file mode 100644
index 000000000000..5c8942ca7522
--- /dev/null
+++ b/gcc/config/nvptx/nvptx.opt.urls
@@ -0,0 +1,29 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/nvptx/nvptx.opt and generated HTML
+
+m64
+UrlSuffix(gcc/Nvidia-PTX-Options.html#index-m64)
+
+mmainkernel
+UrlSuffix(gcc/Nvidia-PTX-Options.html#index-mmainkernel)
+
+moptimize
+UrlSuffix(gcc/Nvidia-PTX-Options.html#index-moptimize)
+
+msoft-stack
+UrlSuffix(gcc/Nvidia-PTX-Options.html#index-msoft-stack)
+
+muniform-simt
+UrlSuffix(gcc/Nvidia-PTX-Options.html#index-muniform-simt)
+
+mgomp
+UrlSuffix(gcc/Nvidia-PTX-Options.html#index-mgomp)
+
+misa=
+UrlSuffix(gcc/Nvidia-PTX-Options.html#index-misa)
+
+march=
+UrlSuffix(gcc/Nvidia-PTX-Options.html#index-march-12)
+
+mptx=
+UrlSuffix(gcc/Nvidia-PTX-Options.html#index-mptx)
+
diff --git a/gcc/config/openbsd.opt.urls b/gcc/config/openbsd.opt.urls
new file mode 100644
index 000000000000..d7ea1ae26e43
--- /dev/null
+++ b/gcc/config/openbsd.opt.urls
@@ -0,0 +1,6 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/openbsd.opt and generated HTML
+
+; skipping UrlSuffix for 'pthread' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-pthread-1'
+;   duplicate: 'gcc/Preprocessor-Options.html#index-pthread'
+
diff --git a/gcc/config/or1k/elf.opt.urls b/gcc/config/or1k/elf.opt.urls
new file mode 100644
index 000000000000..ea3d5d76ac7d
--- /dev/null
+++ b/gcc/config/or1k/elf.opt.urls
@@ -0,0 +1,8 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/or1k/elf.opt and generated HTML
+
+mboard=
+UrlSuffix(gcc/OpenRISC-Options.html#index-mboard)
+
+mnewlib
+UrlSuffix(gcc/OpenRISC-Options.html#index-mnewlib)
+
diff --git a/gcc/config/or1k/or1k.opt.urls b/gcc/config/or1k/or1k.opt.urls
new file mode 100644
index 000000000000..2016ea622cfc
--- /dev/null
+++ b/gcc/config/or1k/or1k.opt.urls
@@ -0,0 +1,46 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/or1k/or1k.opt and generated HTML
+
+mhard-div
+UrlSuffix(gcc/OpenRISC-Options.html#index-mhard-div)
+
+msoft-div
+UrlSuffix(gcc/OpenRISC-Options.html#index-msoft-div)
+
+mhard-mul
+UrlSuffix(gcc/OpenRISC-Options.html#index-mhard-mul)
+
+msoft-mul
+UrlSuffix(gcc/OpenRISC-Options.html#index-msoft-mul)
+
+msoft-float
+UrlSuffix(gcc/OpenRISC-Options.html#index-msoft-float-9)
+
+mhard-float
+UrlSuffix(gcc/OpenRISC-Options.html#index-mhard-float-5)
+
+mdouble-float
+UrlSuffix(gcc/OpenRISC-Options.html#index-mdouble-float-3)
+
+munordered-float
+UrlSuffix(gcc/OpenRISC-Options.html#index-munordered-float)
+
+; skipping UrlSuffix for 'mcmodel=' due to finding no URLs
+
+mcmov
+UrlSuffix(gcc/OpenRISC-Options.html#index-mcmov-1)
+
+mror
+UrlSuffix(gcc/OpenRISC-Options.html#index-mror)
+
+mrori
+UrlSuffix(gcc/OpenRISC-Options.html#index-mrori)
+
+msext
+UrlSuffix(gcc/OpenRISC-Options.html#index-msext)
+
+msfimm
+UrlSuffix(gcc/OpenRISC-Options.html#index-msfimm)
+
+mshftimm
+UrlSuffix(gcc/OpenRISC-Options.html#index-mshftimm)
+
diff --git a/gcc/config/pa/pa-hpux.opt.urls b/gcc/config/pa/pa-hpux.opt.urls
new file mode 100644
index 000000000000..6a52dd08e482
--- /dev/null
+++ b/gcc/config/pa/pa-hpux.opt.urls
@@ -0,0 +1,11 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/pa/pa-hpux.opt and generated HTML
+
+msio
+UrlSuffix(gcc/HPPA-Options.html#index-msio)
+
+nolibdld
+UrlSuffix(gcc/HPPA-Options.html#index-nolibdld)
+
+rdynamic
+UrlSuffix(gcc/Link-Options.html#index-rdynamic)
+
diff --git a/gcc/config/pa/pa-hpux1010.opt.urls b/gcc/config/pa/pa-hpux1010.opt.urls
new file mode 100644
index 000000000000..9b96cafbf065
--- /dev/null
+++ b/gcc/config/pa/pa-hpux1010.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/pa/pa-hpux1010.opt and generated HTML
+
diff --git a/gcc/config/pa/pa-hpux1111.opt.urls b/gcc/config/pa/pa-hpux1111.opt.urls
new file mode 100644
index 000000000000..706e63c534bd
--- /dev/null
+++ b/gcc/config/pa/pa-hpux1111.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/pa/pa-hpux1111.opt and generated HTML
+
diff --git a/gcc/config/pa/pa-hpux1131.opt.urls b/gcc/config/pa/pa-hpux1131.opt.urls
new file mode 100644
index 000000000000..497c49d186f3
--- /dev/null
+++ b/gcc/config/pa/pa-hpux1131.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/pa/pa-hpux1131.opt and generated HTML
+
diff --git a/gcc/config/pa/pa.opt.urls b/gcc/config/pa/pa.opt.urls
new file mode 100644
index 000000000000..5b8bcebdd0da
--- /dev/null
+++ b/gcc/config/pa/pa.opt.urls
@@ -0,0 +1,71 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/pa/pa.opt and generated HTML
+
+matomic-libcalls
+UrlSuffix(gcc/HPPA-Options.html#index-matomic-libcalls)
+
+mbig-switch
+UrlSuffix(gcc/HPPA-Options.html#index-mbig-switch)
+
+mcaller-copies
+UrlSuffix(gcc/HPPA-Options.html#index-mcaller-copies)
+
+mcoherent-ldcw
+UrlSuffix(gcc/HPPA-Options.html#index-mcoherent-ldcw)
+
+mdisable-fpregs
+UrlSuffix(gcc/HPPA-Options.html#index-mdisable-fpregs)
+
+mdisable-indexing
+UrlSuffix(gcc/HPPA-Options.html#index-mdisable-indexing)
+
+mfast-indirect-calls
+UrlSuffix(gcc/HPPA-Options.html#index-mfast-indirect-calls)
+
+mfixed-range=
+UrlSuffix(gcc/HPPA-Options.html#index-mfixed-range)
+
+mgas
+UrlSuffix(gcc/HPPA-Options.html#index-mgas)
+
+mjump-in-delay
+UrlSuffix(gcc/HPPA-Options.html#index-mjump-in-delay)
+
+mlinker-opt
+UrlSuffix(gcc/HPPA-Options.html#index-mlinker-opt)
+
+mlong-calls
+UrlSuffix(gcc/HPPA-Options.html#index-mlong-calls-5)
+
+mlong-load-store
+UrlSuffix(gcc/HPPA-Options.html#index-mlong-load-store)
+
+mno-space-regs
+UrlSuffix(gcc/HPPA-Options.html#index-mno-space-regs)
+
+mordered
+UrlSuffix(gcc/HPPA-Options.html#index-mordered)
+
+mpa-risc-1-0
+UrlSuffix(gcc/HPPA-Options.html#index-mpa-risc-1-0)
+
+mpa-risc-1-1
+UrlSuffix(gcc/HPPA-Options.html#index-mpa-risc-1-1)
+
+mpa-risc-2-0
+UrlSuffix(gcc/HPPA-Options.html#index-mpa-risc-2-0)
+
+mportable-runtime
+UrlSuffix(gcc/HPPA-Options.html#index-mportable-runtime)
+
+mschedule=
+UrlSuffix(gcc/HPPA-Options.html#index-mschedule)
+
+msoft-float
+UrlSuffix(gcc/HPPA-Options.html#index-msoft-float-4)
+
+msoft-mult
+UrlSuffix(gcc/HPPA-Options.html#index-msoft-mult)
+
+mspace-regs
+UrlSuffix(gcc/HPPA-Options.html#index-mspace-regs)
+
diff --git a/gcc/config/pa/pa64-hpux.opt.urls b/gcc/config/pa/pa64-hpux.opt.urls
new file mode 100644
index 000000000000..9ebf02759520
--- /dev/null
+++ b/gcc/config/pa/pa64-hpux.opt.urls
@@ -0,0 +1,8 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/pa/pa64-hpux.opt and generated HTML
+
+mgnu-ld
+UrlSuffix(gcc/HPPA-Options.html#index-mgnu-ld)
+
+mhp-ld
+UrlSuffix(gcc/HPPA-Options.html#index-mhp-ld)
+
diff --git a/gcc/config/pdp11/pdp11.opt.urls b/gcc/config/pdp11/pdp11.opt.urls
new file mode 100644
index 000000000000..f0544ca84f69
--- /dev/null
+++ b/gcc/config/pdp11/pdp11.opt.urls
@@ -0,0 +1,41 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/pdp11/pdp11.opt and generated HTML
+
+m10
+UrlSuffix(gcc/PDP-11-Options.html#index-m10)
+
+m40
+UrlSuffix(gcc/PDP-11-Options.html#index-m40)
+
+m45
+UrlSuffix(gcc/PDP-11-Options.html#index-m45)
+
+mac0
+UrlSuffix(gcc/PDP-11-Options.html#index-mac0)
+
+mdec-asm
+UrlSuffix(gcc/PDP-11-Options.html#index-mdec-asm)
+
+mgnu-asm
+UrlSuffix(gcc/PDP-11-Options.html#index-mgnu-asm)
+
+mfpu
+UrlSuffix(gcc/PDP-11-Options.html#index-mfpu-3)
+
+mint16
+UrlSuffix(gcc/PDP-11-Options.html#index-mint16)
+
+mint32
+UrlSuffix(gcc/PDP-11-Options.html#index-mint32-1)
+
+msoft-float
+UrlSuffix(gcc/PDP-11-Options.html#index-msoft-float-10)
+
+msplit
+UrlSuffix(gcc/PDP-11-Options.html#index-msplit)
+
+munix-asm
+UrlSuffix(gcc/PDP-11-Options.html#index-munix-asm)
+
+mlra
+UrlSuffix(gcc/PDP-11-Options.html#index-mlra-2)
+
diff --git a/gcc/config/pru/pru.opt.urls b/gcc/config/pru/pru.opt.urls
new file mode 100644
index 000000000000..373b02d5aedc
--- /dev/null
+++ b/gcc/config/pru/pru.opt.urls
@@ -0,0 +1,17 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/pru/pru.opt and generated HTML
+
+minrt
+UrlSuffix(gcc/PRU-Options.html#index-minrt-1)
+
+mmcu=
+UrlSuffix(gcc/PRU-Options.html#index-mmcu-2)
+
+mno-relax
+UrlSuffix(gcc/PRU-Options.html#index-mno-relax)
+
+mloop
+UrlSuffix(gcc/PRU-Options.html#index-mloop)
+
+mabi=
+UrlSuffix(gcc/PRU-Options.html#index-mabi-3)
+
diff --git a/gcc/config/riscv/riscv.opt.urls b/gcc/config/riscv/riscv.opt.urls
new file mode 100644
index 000000000000..668384910109
--- /dev/null
+++ b/gcc/config/riscv/riscv.opt.urls
@@ -0,0 +1,88 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/riscv/riscv.opt and generated HTML
+
+mbig-endian
+UrlSuffix(gcc/RISC-V-Options.html#index-mbig-endian-10)
+
+mlittle-endian
+UrlSuffix(gcc/RISC-V-Options.html#index-mlittle-endian-10)
+
+mbranch-cost=
+UrlSuffix(gcc/RISC-V-Options.html#index-mbranch-cost-4)
+
+; skipping UrlSuffix for 'mplt' due to finding no URLs
+
+mabi=
+UrlSuffix(gcc/RISC-V-Options.html#index-mabi-4)
+
+mpreferred-stack-boundary=
+UrlSuffix(gcc/RISC-V-Options.html#index-mpreferred-stack-boundary)
+
+mfdiv
+UrlSuffix(gcc/RISC-V-Options.html#index-mfdiv)
+
+mdiv
+UrlSuffix(gcc/RISC-V-Options.html#index-mdiv-3)
+
+march=
+UrlSuffix(gcc/RISC-V-Options.html#index-march-14)
+
+mtune=
+UrlSuffix(gcc/RISC-V-Options.html#index-mtune-12)
+
+mcpu=
+UrlSuffix(gcc/RISC-V-Options.html#index-mcpu-8)
+
+msmall-data-limit=
+UrlSuffix(gcc/RISC-V-Options.html#index-msmall-data-limit-1)
+
+msave-restore
+UrlSuffix(gcc/RISC-V-Options.html#index-msave-restore)
+
+mshorten-memrefs
+UrlSuffix(gcc/RISC-V-Options.html#index-mshorten-memrefs)
+
+; skipping UrlSuffix for 'mcmodel=' due to finding no URLs
+
+mstrict-align
+UrlSuffix(gcc/RISC-V-Options.html#index-mstrict-align-3)
+
+; skipping UrlSuffix for 'mexplicit-relocs' due to finding no URLs
+
+mrelax
+UrlSuffix(gcc/RISC-V-Options.html#index-mrelax-5)
+
+mcsr-check
+UrlSuffix(gcc/RISC-V-Options.html#index-mcsr-check)
+
+; skipping UrlSuffix for 'momit-leaf-frame-pointer' due to finding no URLs
+
+mriscv-attribute
+UrlSuffix(gcc/RISC-V-Options.html#index-mriscv-attribute)
+
+malign-data=
+UrlSuffix(gcc/RISC-V-Options.html#index-malign-data)
+
+mstack-protector-guard=
+UrlSuffix(gcc/RISC-V-Options.html#index-mstack-protector-guard-2)
+
+mstack-protector-guard-reg=
+UrlSuffix(gcc/RISC-V-Options.html#index-mstack-protector-guard-reg-1)
+
+mstack-protector-guard-offset=
+UrlSuffix(gcc/RISC-V-Options.html#index-mstack-protector-guard-offset-2)
+
+misa-spec=
+UrlSuffix(gcc/RISC-V-Options.html#index-misa-spec)
+
+minline-atomics
+UrlSuffix(gcc/RISC-V-Options.html#index-minline-atomics)
+
+minline-strcmp
+UrlSuffix(gcc/RISC-V-Options.html#index-minline-strcmp)
+
+minline-strncmp
+UrlSuffix(gcc/RISC-V-Options.html#index-minline-strncmp)
+
+minline-strlen
+UrlSuffix(gcc/RISC-V-Options.html#index-minline-strlen)
+
diff --git a/gcc/config/rl78/rl78.opt.urls b/gcc/config/rl78/rl78.opt.urls
new file mode 100644
index 000000000000..96eff5f72041
--- /dev/null
+++ b/gcc/config/rl78/rl78.opt.urls
@@ -0,0 +1,31 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/rl78/rl78.opt and generated HTML
+
+msim
+UrlSuffix(gcc/RL78-Options.html#index-msim-6)
+
+mmul=
+UrlSuffix(gcc/RL78-Options.html#index-mmul)
+
+mallregs
+UrlSuffix(gcc/RL78-Options.html#index-mallregs)
+
+; skipping UrlSuffix for 'mrelax' due to finding no URLs
+
+mcpu=
+UrlSuffix(gcc/RL78-Options.html#index-mcpu-9)
+
+mg10
+UrlSuffix(gcc/RL78-Options.html#index-mg10)
+
+mg13
+UrlSuffix(gcc/RL78-Options.html#index-mg13)
+
+mg14
+UrlSuffix(gcc/RL78-Options.html#index-mg14)
+
+mrl78
+UrlSuffix(gcc/RL78-Options.html#index-mrl78)
+
+msave-mduc-in-interrupts
+UrlSuffix(gcc/RL78-Options.html#index-msave-mduc-in-interrupts)
+
diff --git a/gcc/config/rpath.opt.urls b/gcc/config/rpath.opt.urls
new file mode 100644
index 000000000000..249dfdfb762d
--- /dev/null
+++ b/gcc/config/rpath.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/rpath.opt and generated HTML
+
diff --git a/gcc/config/rs6000/476.opt.urls b/gcc/config/rs6000/476.opt.urls
new file mode 100644
index 000000000000..cecf72200a51
--- /dev/null
+++ b/gcc/config/rs6000/476.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/rs6000/476.opt and generated HTML
+
diff --git a/gcc/config/rs6000/aix64.opt.urls b/gcc/config/rs6000/aix64.opt.urls
new file mode 100644
index 000000000000..89600bb27956
--- /dev/null
+++ b/gcc/config/rs6000/aix64.opt.urls
@@ -0,0 +1,23 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/rs6000/aix64.opt and generated HTML
+
+maix64
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-maix64)
+
+maix32
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-maix32)
+
+; skipping UrlSuffix for 'mcmodel=' due to finding no URLs
+
+mpe
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mpe)
+
+; skipping UrlSuffix for 'pthread' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-pthread-1'
+;   duplicate: 'gcc/Preprocessor-Options.html#index-pthread'
+
+m64
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-m64-1)
+
+m32
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-m32)
+
diff --git a/gcc/config/rs6000/darwin.opt.urls b/gcc/config/rs6000/darwin.opt.urls
new file mode 100644
index 000000000000..3b7fa1a80f80
--- /dev/null
+++ b/gcc/config/rs6000/darwin.opt.urls
@@ -0,0 +1,14 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/rs6000/darwin.opt and generated HTML
+
+ffix-and-continue
+UrlSuffix(gcc/Darwin-Options.html#index-ffix-and-continue)
+
+findirect-data
+UrlSuffix(gcc/Darwin-Options.html#index-findirect-data)
+
+m64
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-m64-1)
+
+m32
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-m32)
+
diff --git a/gcc/config/rs6000/linux64.opt.urls b/gcc/config/rs6000/linux64.opt.urls
new file mode 100644
index 000000000000..eb81aa17fd2b
--- /dev/null
+++ b/gcc/config/rs6000/linux64.opt.urls
@@ -0,0 +1,4 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/rs6000/linux64.opt and generated HTML
+
+; skipping UrlSuffix for 'mcmodel=' due to finding no URLs
+
diff --git a/gcc/config/rs6000/rs6000-tables.opt.urls b/gcc/config/rs6000/rs6000-tables.opt.urls
new file mode 100644
index 000000000000..a44ce0d7aaa3
--- /dev/null
+++ b/gcc/config/rs6000/rs6000-tables.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/rs6000/rs6000-tables.opt and generated HTML
+
diff --git a/gcc/config/rs6000/rs6000.opt.urls b/gcc/config/rs6000/rs6000.opt.urls
new file mode 100644
index 000000000000..fdc33fc759bb
--- /dev/null
+++ b/gcc/config/rs6000/rs6000.opt.urls
@@ -0,0 +1,214 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/rs6000/rs6000.opt and generated HTML
+
+mpowerpc64
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mpowerpc64)
+
+mpowerpc-gpopt
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mpowerpc-gpopt)
+
+mpowerpc-gfxopt
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mpowerpc-gfxopt)
+
+mmfcrf
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mmfcrf)
+
+mpopcntb
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mpopcntb)
+
+mfprnd
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mfprnd)
+
+mcmpb
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mcmpb)
+
+maltivec
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-maltivec)
+
+mhard-dfp
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mhard-dfp)
+
+mmulhw
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mmulhw)
+
+mdlmzb
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mdlmzb)
+
+mmultiple
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mmultiple)
+
+msoft-float
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-msoft-float-11)
+
+mhard-float
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mhard-float-6)
+
+mpopcntd
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mpopcntd)
+
+mfriz
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mfriz)
+
+mveclibabi=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mveclibabi)
+
+mvsx
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mvsx)
+
+mno-update
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-update)
+
+mupdate
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mupdate)
+
+msingle-pic-base
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-msingle-pic-base-1)
+
+mavoid-indexed-addresses
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mavoid-indexed-addresses)
+
+; skipping UrlSuffix for 'msched-prolog' due to finding no URLs
+
+maix-struct-return
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-maix-struct-return)
+
+msvr4-struct-return
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-msvr4-struct-return)
+
+mxl-compat
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mxl-compat)
+
+mrecip
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mrecip)
+
+mrecip=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mrecip)
+
+mrecip-precision
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mrecip-precision)
+
+mno-fp-in-toc
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-fp-in-toc)
+
+mno-sum-in-toc
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-sum-in-toc)
+
+mminimal-toc
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mminimal-toc)
+
+mfull-toc
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mfull-toc)
+
+mvrsave
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mvrsave)
+
+mblock-move-inline-limit=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mblock-move-inline-limit)
+
+mblock-compare-inline-limit=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mblock-compare-inline-limit)
+
+mblock-compare-inline-loop-limit=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mblock-compare-inline-loop-limit)
+
+mstring-compare-inline-limit=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mstring-compare-inline-limit)
+
+misel
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-misel)
+
+; skipping UrlSuffix for 'mdebug=' due to finding no URLs
+
+mabi=elfv1
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mabi_003delfv1)
+
+mabi=elfv2
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mabi_003delfv2)
+
+mabi=ieeelongdouble
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mabi_003dieeelongdouble)
+
+mabi=ibmlongdouble
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mabi_003dibmlongdouble)
+
+mcpu=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mcpu-10)
+
+mtune=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mtune-13)
+
+mtraceback=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mtraceback)
+
+mlongcall
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mlongcall)
+
+; skipping UrlSuffix for 'mlra' due to finding no URLs
+
+msched-costly-dep=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-msched-costly-dep)
+
+minsert-sched-nops=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-minsert-sched-nops)
+
+mprioritize-restricted-insns=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mprioritize-restricted-insns)
+
+mpointers-to-nested-functions
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mpointers-to-nested-functions)
+
+msave-toc-indirect
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-msave-toc-indirect)
+
+mpower8-fusion
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mpower8-fusion)
+
+mpower8-vector
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mpower8-vector)
+
+mcrypto
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mcrypto)
+
+mhtm
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mhtm)
+
+mquad-memory
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mquad-memory)
+
+mquad-memory-atomic
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mquad-memory-atomic)
+
+mcompat-align-parm
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mcompat-align-parm)
+
+; skipping UrlSuffix for 'munroll-only-small-loops' due to finding no URLs
+
+mfloat128
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mfloat128)
+
+mfloat128-hardware
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mfloat128-hardware)
+
+mstack-protector-guard=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mstack-protector-guard-3)
+
+mstack-protector-guard-reg=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mstack-protector-guard-reg-2)
+
+mstack-protector-guard-offset=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mstack-protector-guard-offset-3)
+
+mprefixed
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mprefixed)
+
+mpcrel
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mpcrel-1)
+
+mmma
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mmma)
+
+mrop-protect
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mrop-protect)
+
+mprivileged
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mprivileged)
+
diff --git a/gcc/config/rs6000/sysv4.opt.urls b/gcc/config/rs6000/sysv4.opt.urls
new file mode 100644
index 000000000000..f8d58d6602cd
--- /dev/null
+++ b/gcc/config/rs6000/sysv4.opt.urls
@@ -0,0 +1,87 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/rs6000/sysv4.opt and generated HTML
+
+msdata=
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-msdata-2)
+
+mreadonly-in-sdata
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mreadonly-in-sdata)
+
+; skipping UrlSuffix for 'mtls-size=' due to finding no URLs
+
+mbit-align
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mbit-align)
+
+mstrict-align
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mstrict-align-4)
+
+mrelocatable
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mrelocatable)
+
+mrelocatable-lib
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mrelocatable-lib)
+
+mlittle-endian
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mlittle-endian-11)
+
+mlittle
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mlittle)
+
+mbig-endian
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mbig-endian-11)
+
+mbig
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mbig)
+
+mno-toc
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mno-toc)
+
+mtoc
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mtoc)
+
+mprototype
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mprototype)
+
+meabi
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-meabi)
+
+mregnames
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mregnames)
+
+msdata
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-msdata-2)
+
+msim
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-msim-7)
+
+mads
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mads)
+
+myellowknife
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-myellowknife)
+
+mmvme
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mmvme)
+
+memb
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-memb)
+
+m64
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-m64-1)
+
+m32
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-m32)
+
+; skipping UrlSuffix for 'mnewlib' due to finding no URLs
+
+msecure-plt
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-msecure-plt)
+
+mbss-plt
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mbss-plt)
+
+mpltseq
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mpltseq)
+
+mgnu-attribute
+UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mgnu-attribute)
+
diff --git a/gcc/config/rtems.opt.urls b/gcc/config/rtems.opt.urls
new file mode 100644
index 000000000000..211a70d46ef3
--- /dev/null
+++ b/gcc/config/rtems.opt.urls
@@ -0,0 +1,6 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/rtems.opt and generated HTML
+
+; skipping UrlSuffix for 'pthread' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-pthread-1'
+;   duplicate: 'gcc/Preprocessor-Options.html#index-pthread'
+
diff --git a/gcc/config/rx/elf.opt.urls b/gcc/config/rx/elf.opt.urls
new file mode 100644
index 000000000000..c43973a9d490
--- /dev/null
+++ b/gcc/config/rx/elf.opt.urls
@@ -0,0 +1,14 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/rx/elf.opt and generated HTML
+
+msim
+UrlSuffix(gcc/RX-Options.html#index-msim-8)
+
+mas100-syntax
+UrlSuffix(gcc/RX-Options.html#index-mas100-syntax)
+
+mint-register=
+UrlSuffix(gcc/RX-Options.html#index-mint-register)
+
+msave-acc-in-interrupts
+UrlSuffix(gcc/RX-Options.html#index-msave-acc-in-interrupts)
+
diff --git a/gcc/config/rx/rx.opt.urls b/gcc/config/rx/rx.opt.urls
new file mode 100644
index 000000000000..4cb037313b49
--- /dev/null
+++ b/gcc/config/rx/rx.opt.urls
@@ -0,0 +1,54 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/rx/rx.opt and generated HTML
+
+m64bit-doubles
+UrlSuffix(gcc/RX-Options.html#index-m64bit-doubles-1)
+
+m32bit-doubles
+UrlSuffix(gcc/RX-Options.html#index-m32bit-doubles-1)
+
+nofpu
+UrlSuffix(gcc/RX-Options.html#index-nofpu)
+
+fpu
+UrlSuffix(gcc/RX-Options.html#index-fpu)
+
+mcpu=
+UrlSuffix(gcc/RX-Options.html#index-mcpu-11)
+
+mbig-endian-data
+UrlSuffix(gcc/RX-Options.html#index-mbig-endian-data)
+
+mlittle-endian-data
+UrlSuffix(gcc/RX-Options.html#index-mlittle-endian-data)
+
+msmall-data-limit=
+UrlSuffix(gcc/RX-Options.html#index-msmall-data-limit-2)
+
+mrelax
+UrlSuffix(gcc/RX-Options.html#index-mrelax-6)
+
+mmax-constant-size=
+UrlSuffix(gcc/RX-Options.html#index-mmax-constant-size)
+
+mint-register=
+UrlSuffix(gcc/RX-Options.html#index-mint-register)
+
+msave-acc-in-interrupts
+UrlSuffix(gcc/RX-Options.html#index-msave-acc-in-interrupts)
+
+mpid
+UrlSuffix(gcc/RX-Options.html#index-mpid)
+
+mwarn-multiple-fast-interrupts
+UrlSuffix(gcc/RX-Options.html#index-mwarn-multiple-fast-interrupts)
+
+; skipping UrlSuffix for 'mgcc-abi' due to finding no URLs
+
+; skipping UrlSuffix for 'mlra' due to finding no URLs
+
+mallow-string-insns
+UrlSuffix(gcc/RX-Options.html#index-mallow-string-insns)
+
+mjsr
+UrlSuffix(gcc/RX-Options.html#index-mjsr)
+
diff --git a/gcc/config/s390/s390.opt.urls b/gcc/config/s390/s390.opt.urls
new file mode 100644
index 000000000000..ab1e761efa88
--- /dev/null
+++ b/gcc/config/s390/s390.opt.urls
@@ -0,0 +1,92 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/s390/s390.opt and generated HTML
+
+m31
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-m31)
+
+m64
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-m64-2)
+
+march=
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-march-15)
+
+mbackchain
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mbackchain)
+
+mdebug
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mdebug-1)
+
+mesa
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mesa)
+
+mhard-dfp
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mhard-dfp-1)
+
+mhard-float
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mhard-float-7)
+
+mhotpatch=
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mhotpatch)
+
+mlong-double-128
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mlong-double-128)
+
+mlong-double-64
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mlong-double-64)
+
+mhtm
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mhtm-1)
+
+mvx
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mvx)
+
+mpacked-stack
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mpacked-stack)
+
+msmall-exec
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-msmall-exec)
+
+msoft-float
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-msoft-float-12)
+
+mstack-guard=
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mstack-guard)
+
+mstack-size=
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mstack-size-2)
+
+mtune=
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mtune-14)
+
+mmvcle
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mmvcle)
+
+mzvector
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mzvector)
+
+mwarn-dynamicstack
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mwarn-dynamicstack)
+
+mwarn-framesize=
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mwarn-framesize)
+
+mzarch
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mzarch)
+
+; skipping UrlSuffix for 'mbranch-cost=' due to finding no URLs
+
+; skipping UrlSuffix for 'mlra' due to finding no URLs
+
+; skipping UrlSuffix for 'mpic-data-is-text-relative' due to finding no URLs
+
+; skipping UrlSuffix for 'mindirect-branch=' due to finding no URLs
+
+; skipping UrlSuffix for 'mfunction-return=' due to finding no URLs
+
+; skipping UrlSuffix for 'mfentry' due to finding no URLs
+
+; skipping UrlSuffix for 'mrecord-mcount' due to finding no URLs
+
+; skipping UrlSuffix for 'mnop-mcount' due to finding no URLs
+
+; skipping UrlSuffix for 'munroll-only-small-loops' due to finding no URLs
+
diff --git a/gcc/config/s390/tpf.opt.urls b/gcc/config/s390/tpf.opt.urls
new file mode 100644
index 000000000000..8322d7eaa001
--- /dev/null
+++ b/gcc/config/s390/tpf.opt.urls
@@ -0,0 +1,8 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/s390/tpf.opt and generated HTML
+
+mtpf-trace
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mtpf-trace)
+
+mtpf-trace-skip
+UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mtpf-trace-skip)
+
diff --git a/gcc/config/sh/sh.opt.urls b/gcc/config/sh/sh.opt.urls
new file mode 100644
index 000000000000..2c3bc0699ec5
--- /dev/null
+++ b/gcc/config/sh/sh.opt.urls
@@ -0,0 +1,174 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/sh/sh.opt and generated HTML
+
+m1
+UrlSuffix(gcc/SH-Options.html#index-m1)
+
+m2
+UrlSuffix(gcc/SH-Options.html#index-m2)
+
+m2a
+UrlSuffix(gcc/SH-Options.html#index-m2a)
+
+m2a-nofpu
+UrlSuffix(gcc/SH-Options.html#index-m2a-nofpu)
+
+m2a-single
+UrlSuffix(gcc/SH-Options.html#index-m2a-single)
+
+m2a-single-only
+UrlSuffix(gcc/SH-Options.html#index-m2a-single-only)
+
+m3
+UrlSuffix(gcc/SH-Options.html#index-m3)
+
+m3e
+UrlSuffix(gcc/SH-Options.html#index-m3e)
+
+m4
+UrlSuffix(gcc/SH-Options.html#index-m4)
+
+m4-100
+UrlSuffix(gcc/SH-Options.html#index-m4-100)
+
+m4-200
+UrlSuffix(gcc/SH-Options.html#index-m4-200)
+
+m4-300
+UrlSuffix(gcc/SH-Options.html#index-m4-300)
+
+m4-nofpu
+UrlSuffix(gcc/SH-Options.html#index-m4-nofpu)
+
+m4-100-nofpu
+UrlSuffix(gcc/SH-Options.html#index-m4-100-nofpu)
+
+m4-200-nofpu
+UrlSuffix(gcc/SH-Options.html#index-m4-200-nofpu)
+
+m4-300-nofpu
+UrlSuffix(gcc/SH-Options.html#index-m4-300-nofpu)
+
+m4-340
+UrlSuffix(gcc/SH-Options.html#index-m4-340)
+
+m4-500
+UrlSuffix(gcc/SH-Options.html#index-m4-500)
+
+m4-single
+UrlSuffix(gcc/SH-Options.html#index-m4-single)
+
+m4-100-single
+UrlSuffix(gcc/SH-Options.html#index-m4-100-single)
+
+m4-200-single
+UrlSuffix(gcc/SH-Options.html#index-m4-200-single)
+
+m4-300-single
+UrlSuffix(gcc/SH-Options.html#index-m4-300-single)
+
+m4-single-only
+UrlSuffix(gcc/SH-Options.html#index-m4-single-only)
+
+m4-100-single-only
+UrlSuffix(gcc/SH-Options.html#index-m4-100-single-only)
+
+m4-200-single-only
+UrlSuffix(gcc/SH-Options.html#index-m4-200-single-only)
+
+m4-300-single-only
+UrlSuffix(gcc/SH-Options.html#index-m4-300-single-only)
+
+m4a
+UrlSuffix(gcc/SH-Options.html#index-m4a)
+
+m4a-nofpu
+UrlSuffix(gcc/SH-Options.html#index-m4a-nofpu)
+
+m4a-single
+UrlSuffix(gcc/SH-Options.html#index-m4a-single)
+
+m4a-single-only
+UrlSuffix(gcc/SH-Options.html#index-m4a-single-only)
+
+m4al
+UrlSuffix(gcc/SH-Options.html#index-m4al)
+
+maccumulate-outgoing-args
+UrlSuffix(gcc/SH-Options.html#index-maccumulate-outgoing-args)
+
+mb
+UrlSuffix(gcc/SH-Options.html#index-mb)
+
+mbigtable
+UrlSuffix(gcc/SH-Options.html#index-mbigtable)
+
+mbitops
+UrlSuffix(gcc/SH-Options.html#index-mbitops)
+
+; skipping UrlSuffix for 'mbranch-cost=' due to finding no URLs
+
+mzdcbranch
+UrlSuffix(gcc/SH-Options.html#index-mzdcbranch)
+
+mcbranch-force-delay-slot
+UrlSuffix(gcc/SH-Options.html#index-mcbranch-force-delay-slot)
+
+mdalign
+UrlSuffix(gcc/SH-Options.html#index-mdalign)
+
+; skipping UrlSuffix for 'mdiv=' due to finding no URLs
+
+; skipping UrlSuffix for 'mfdpic' due to finding no URLs
+
+mfmovd
+UrlSuffix(gcc/SH-Options.html#index-mfmovd)
+
+mfixed-range=
+UrlSuffix(gcc/SH-Options.html#index-mfixed-range-2)
+
+mieee
+UrlSuffix(gcc/SH-Options.html#index-mieee-1)
+
+minline-ic_invalidate
+UrlSuffix(gcc/SH-Options.html#index-minline-ic_005finvalidate)
+
+misize
+UrlSuffix(gcc/SH-Options.html#index-misize-1)
+
+ml
+UrlSuffix(gcc/SH-Options.html#index-ml)
+
+mnomacsave
+UrlSuffix(gcc/SH-Options.html#index-mnomacsave)
+
+mpadstruct
+UrlSuffix(gcc/SH-Options.html#index-mpadstruct)
+
+mprefergot
+UrlSuffix(gcc/SH-Options.html#index-mprefergot)
+
+mrelax
+UrlSuffix(gcc/SH-Options.html#index-mrelax-7)
+
+mrenesas
+UrlSuffix(gcc/SH-Options.html#index-mrenesas)
+
+mtas
+UrlSuffix(gcc/SH-Options.html#index-mtas)
+
+; skipping UrlSuffix for 'multcost=' due to finding no URLs
+
+musermode
+UrlSuffix(gcc/SH-Options.html#index-musermode)
+
+mpretend-cmove
+UrlSuffix(gcc/SH-Options.html#index-mpretend-cmove)
+
+mfsca
+UrlSuffix(gcc/SH-Options.html#index-mfsca)
+
+mfsrra
+UrlSuffix(gcc/SH-Options.html#index-mfsrra)
+
+; skipping UrlSuffix for 'mlra' due to finding no URLs
+
diff --git a/gcc/config/sh/superh.opt.urls b/gcc/config/sh/superh.opt.urls
new file mode 100644
index 000000000000..c098ec12c276
--- /dev/null
+++ b/gcc/config/sh/superh.opt.urls
@@ -0,0 +1,4 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/sh/superh.opt and generated HTML
+
+; skipping UrlSuffix for 'mboard=' due to finding no URLs
+
diff --git a/gcc/config/sol2.opt.urls b/gcc/config/sol2.opt.urls
new file mode 100644
index 000000000000..ef64d47d65ee
--- /dev/null
+++ b/gcc/config/sol2.opt.urls
@@ -0,0 +1,21 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/sol2.opt and generated HTML
+
+G
+UrlSuffix(gcc/System-V-Options.html#index-G-5)
+
+mclear-hwcap
+UrlSuffix(gcc/Solaris-2-Options.html#index-mclear-hwcap)
+
+mimpure-text
+UrlSuffix(gcc/Solaris-2-Options.html#index-mimpure-text)
+
+; skipping UrlSuffix for 'pthread' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-pthread-1'
+;   duplicate: 'gcc/Preprocessor-Options.html#index-pthread'
+
+pthreads
+UrlSuffix(gcc/Solaris-2-Options.html#index-pthreads)
+
+rdynamic
+UrlSuffix(gcc/Link-Options.html#index-rdynamic)
+
diff --git a/gcc/config/sparc/long-double-switch.opt.urls b/gcc/config/sparc/long-double-switch.opt.urls
new file mode 100644
index 000000000000..62f5738f756c
--- /dev/null
+++ b/gcc/config/sparc/long-double-switch.opt.urls
@@ -0,0 +1,6 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/sparc/long-double-switch.opt and generated HTML
+
+; skipping UrlSuffix for 'mlong-double-128' due to finding no URLs
+
+; skipping UrlSuffix for 'mlong-double-64' due to finding no URLs
+
diff --git a/gcc/config/sparc/sparc.opt.urls b/gcc/config/sparc/sparc.opt.urls
new file mode 100644
index 000000000000..79774678984f
--- /dev/null
+++ b/gcc/config/sparc/sparc.opt.urls
@@ -0,0 +1,108 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/sparc/sparc.opt and generated HTML
+
+mfpu
+UrlSuffix(gcc/SPARC-Options.html#index-mfpu-4)
+
+mhard-float
+UrlSuffix(gcc/SPARC-Options.html#index-mhard-float-8)
+
+msoft-float
+UrlSuffix(gcc/SPARC-Options.html#index-msoft-float-13)
+
+mflat
+UrlSuffix(gcc/SPARC-Options.html#index-mflat)
+
+munaligned-doubles
+UrlSuffix(gcc/SPARC-Options.html#index-munaligned-doubles)
+
+mapp-regs
+UrlSuffix(gcc/SPARC-Options.html#index-mapp-regs)
+
+mhard-quad-float
+UrlSuffix(gcc/SPARC-Options.html#index-mhard-quad-float)
+
+msoft-quad-float
+UrlSuffix(gcc/SPARC-Options.html#index-msoft-quad-float)
+
+mlra
+UrlSuffix(gcc/SPARC-Options.html#index-mlra-3)
+
+mv8plus
+UrlSuffix(gcc/SPARC-Options.html#index-mv8plus)
+
+mvis
+UrlSuffix(gcc/SPARC-Options.html#index-mvis)
+
+mvis2
+UrlSuffix(gcc/SPARC-Options.html#index-mvis2)
+
+mvis3
+UrlSuffix(gcc/SPARC-Options.html#index-mvis3)
+
+mvis4
+UrlSuffix(gcc/SPARC-Options.html#index-mvis4)
+
+mvis4b
+UrlSuffix(gcc/SPARC-Options.html#index-mvis4b)
+
+mcbcond
+UrlSuffix(gcc/SPARC-Options.html#index-mcbcond)
+
+mfmaf
+UrlSuffix(gcc/SPARC-Options.html#index-mfmaf)
+
+mfsmuld
+UrlSuffix(gcc/SPARC-Options.html#index-mfsmuld)
+
+mpopc
+UrlSuffix(gcc/SPARC-Options.html#index-mpopc)
+
+msubxc
+UrlSuffix(gcc/SPARC-Options.html#index-msubxc)
+
+m64
+UrlSuffix(gcc/SPARC-Options.html#index-m64-3)
+
+m32
+UrlSuffix(gcc/SPARC-Options.html#index-m32-1)
+
+mstack-bias
+UrlSuffix(gcc/SPARC-Options.html#index-mstack-bias)
+
+mfaster-structs
+UrlSuffix(gcc/SPARC-Options.html#index-mfaster-structs)
+
+; skipping UrlSuffix for 'mrelax' due to finding no URLs
+
+muser-mode
+UrlSuffix(gcc/SPARC-Options.html#index-muser-mode)
+
+mcpu=
+UrlSuffix(gcc/SPARC-Options.html#index-mcpu-12)
+
+mtune=
+UrlSuffix(gcc/SPARC-Options.html#index-mtune-15)
+
+mcmodel=
+UrlSuffix(gcc/SPARC-Options.html#index-mcmodel-1)
+
+; skipping UrlSuffix for 'mdebug=' due to finding no URLs
+
+mstd-struct-return
+UrlSuffix(gcc/SPARC-Options.html#index-mstd-struct-return)
+
+mfix-at697f
+UrlSuffix(gcc/SPARC-Options.html#index-mfix-at697f)
+
+mfix-ut699
+UrlSuffix(gcc/SPARC-Options.html#index-mfix-ut699)
+
+mfix-ut700
+UrlSuffix(gcc/SPARC-Options.html#index-mfix-ut700)
+
+mfix-gr712rc
+UrlSuffix(gcc/SPARC-Options.html#index-mfix-gr712rc)
+
+mmemory-model=
+UrlSuffix(gcc/SPARC-Options.html#index-mmemory-model)
+
diff --git a/gcc/config/stormy16/stormy16.opt.urls b/gcc/config/stormy16/stormy16.opt.urls
new file mode 100644
index 000000000000..6f47d4c5c180
--- /dev/null
+++ b/gcc/config/stormy16/stormy16.opt.urls
@@ -0,0 +1,5 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/stormy16/stormy16.opt and generated HTML
+
+msim
+UrlSuffix(gcc/Xstormy16-Options.html#index-msim-10)
+
diff --git a/gcc/config/v850/v850.opt.urls b/gcc/config/v850/v850.opt.urls
new file mode 100644
index 000000000000..dc5a83107b3b
--- /dev/null
+++ b/gcc/config/v850/v850.opt.urls
@@ -0,0 +1,60 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/v850/v850.opt and generated HTML
+
+; skipping UrlSuffix for 'mapp-regs' due to finding no URLs
+
+; skipping UrlSuffix for 'mbig-switch' due to finding no URLs
+
+; skipping UrlSuffix for 'mdebug' due to finding no URLs
+
+; skipping UrlSuffix for 'mdisable-callt' due to finding no URLs
+
+; skipping UrlSuffix for 'mep' due to finding no URLs
+
+; skipping UrlSuffix for 'mghs' due to finding no URLs
+
+; skipping UrlSuffix for 'mlong-calls' due to finding no URLs
+
+; skipping UrlSuffix for 'mprolog-function' due to finding no URLs
+
+; skipping UrlSuffix for 'msda=' due to finding no URLs
+
+; skipping UrlSuffix for 'mspace' due to finding no URLs
+
+; skipping UrlSuffix for 'mtda=' due to finding no URLs
+
+; skipping UrlSuffix for 'mno-strict-align' due to finding no URLs
+
+; skipping UrlSuffix for 'mv850' due to finding no URLs
+
+; skipping UrlSuffix for 'mv850e' due to finding no URLs
+
+; skipping UrlSuffix for 'mv850e1' due to finding no URLs
+
+; skipping UrlSuffix for 'mv850es' due to finding no URLs
+
+; skipping UrlSuffix for 'mv850e2' due to finding no URLs
+
+; skipping UrlSuffix for 'mv850e2v3' due to finding no URLs
+
+; skipping UrlSuffix for 'mv850e3v5' due to finding no URLs
+
+; skipping UrlSuffix for 'mv850e2v4' due to finding no URLs
+
+; skipping UrlSuffix for 'mloop' due to finding no URLs
+
+; skipping UrlSuffix for 'mzda=' due to finding no URLs
+
+; skipping UrlSuffix for 'mrelax' due to finding no URLs
+
+; skipping UrlSuffix for 'mlong-jumps' due to finding no URLs
+
+; skipping UrlSuffix for 'msoft-float' due to finding no URLs
+
+; skipping UrlSuffix for 'mhard-float' due to finding no URLs
+
+; skipping UrlSuffix for 'mrh850-abi' due to finding no URLs
+
+; skipping UrlSuffix for 'mgcc-abi' due to finding no URLs
+
+; skipping UrlSuffix for 'm8byte-align' due to finding no URLs
+
diff --git a/gcc/config/vax/elf.opt.urls b/gcc/config/vax/elf.opt.urls
new file mode 100644
index 000000000000..0903513694b9
--- /dev/null
+++ b/gcc/config/vax/elf.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/vax/elf.opt and generated HTML
+
diff --git a/gcc/config/vax/vax.opt.urls b/gcc/config/vax/vax.opt.urls
new file mode 100644
index 000000000000..c6b1c418b617
--- /dev/null
+++ b/gcc/config/vax/vax.opt.urls
@@ -0,0 +1,10 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/vax/vax.opt and generated HTML
+
+; skipping UrlSuffix for 'mg' due to finding no URLs
+
+; skipping UrlSuffix for 'mgnu' due to finding no URLs
+
+; skipping UrlSuffix for 'munix' due to finding no URLs
+
+; skipping UrlSuffix for 'mlra' due to finding no URLs
+
diff --git a/gcc/config/visium/visium.opt.urls b/gcc/config/visium/visium.opt.urls
new file mode 100644
index 000000000000..38ba88dfe612
--- /dev/null
+++ b/gcc/config/visium/visium.opt.urls
@@ -0,0 +1,29 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/visium/visium.opt and generated HTML
+
+mdebug
+UrlSuffix(gcc/Visium-Options.html#index-mdebug-2)
+
+msim
+UrlSuffix(gcc/Visium-Options.html#index-msim-9)
+
+mfpu
+UrlSuffix(gcc/Visium-Options.html#index-mfpu-5)
+
+mhard-float
+UrlSuffix(gcc/Visium-Options.html#index-mhard-float-10)
+
+msoft-float
+UrlSuffix(gcc/Visium-Options.html#index-msoft-float-15)
+
+mcpu=
+UrlSuffix(gcc/Visium-Options.html#index-mcpu-13)
+
+mtune=
+UrlSuffix(gcc/Visium-Options.html#index-mtune-16)
+
+msv-mode
+UrlSuffix(gcc/Visium-Options.html#index-msv-mode)
+
+muser-mode
+UrlSuffix(gcc/Visium-Options.html#index-muser-mode-1)
+
diff --git a/gcc/config/vms/vms.opt.urls b/gcc/config/vms/vms.opt.urls
new file mode 100644
index 000000000000..177b281cc774
--- /dev/null
+++ b/gcc/config/vms/vms.opt.urls
@@ -0,0 +1,8 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/vms/vms.opt and generated HTML
+
+mmalloc64
+UrlSuffix(gcc/VMS-Options.html#index-mmalloc64)
+
+mvms-return-codes
+UrlSuffix(gcc/VMS-Options.html#index-mvms-return-codes)
+
diff --git a/gcc/config/vxworks-smp.opt.urls b/gcc/config/vxworks-smp.opt.urls
new file mode 100644
index 000000000000..0a91011000f8
--- /dev/null
+++ b/gcc/config/vxworks-smp.opt.urls
@@ -0,0 +1,5 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/vxworks-smp.opt and generated HTML
+
+msmp
+UrlSuffix(gcc/VxWorks-Options.html#index-msmp)
+
diff --git a/gcc/config/vxworks.opt.urls b/gcc/config/vxworks.opt.urls
new file mode 100644
index 000000000000..52888d0d91de
--- /dev/null
+++ b/gcc/config/vxworks.opt.urls
@@ -0,0 +1,20 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/vxworks.opt and generated HTML
+
+Bdynamic
+UrlSuffix(gcc/VxWorks-Options.html#index-Bdynamic)
+
+Bstatic
+UrlSuffix(gcc/VxWorks-Options.html#index-Bstatic)
+
+Xbind-lazy
+UrlSuffix(gcc/VxWorks-Options.html#index-Xbind-lazy)
+
+Xbind-now
+UrlSuffix(gcc/VxWorks-Options.html#index-Xbind-now)
+
+mrtp
+UrlSuffix(gcc/VxWorks-Options.html#index-mrtp)
+
+non-static
+UrlSuffix(gcc/VxWorks-Options.html#index-non-static)
+
diff --git a/gcc/config/xtensa/elf.opt.urls b/gcc/config/xtensa/elf.opt.urls
new file mode 100644
index 000000000000..6774adadbf7a
--- /dev/null
+++ b/gcc/config/xtensa/elf.opt.urls
@@ -0,0 +1,5 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/xtensa/elf.opt and generated HTML
+
+rdynamic
+UrlSuffix(gcc/Link-Options.html#index-rdynamic)
+
diff --git a/gcc/config/xtensa/uclinux.opt.urls b/gcc/config/xtensa/uclinux.opt.urls
new file mode 100644
index 000000000000..bd69ce56d4c6
--- /dev/null
+++ b/gcc/config/xtensa/uclinux.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/xtensa/uclinux.opt and generated HTML
+
diff --git a/gcc/config/xtensa/xtensa.opt.urls b/gcc/config/xtensa/xtensa.opt.urls
new file mode 100644
index 000000000000..146db23d1e30
--- /dev/null
+++ b/gcc/config/xtensa/xtensa.opt.urls
@@ -0,0 +1,37 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/config/xtensa/xtensa.opt and generated HTML
+
+mconst16
+UrlSuffix(gcc/Xtensa-Options.html#index-mconst16)
+
+mforce-no-pic
+UrlSuffix(gcc/Xtensa-Options.html#index-mforce-no-pic)
+
+mlongcalls
+UrlSuffix(gcc/Xtensa-Options.html#index-mlongcalls)
+
+mextra-l32r-costs=
+UrlSuffix(gcc/Xtensa-Options.html#index-mextra-l32r-costs)
+
+; skipping UrlSuffix for 'mlra' due to finding no URLs
+
+mtarget-align
+UrlSuffix(gcc/Xtensa-Options.html#index-mtarget-align)
+
+mtext-section-literals
+UrlSuffix(gcc/Xtensa-Options.html#index-mtext-section-literals)
+
+mauto-litpools
+UrlSuffix(gcc/Xtensa-Options.html#index-mauto-litpools)
+
+mserialize-volatile
+UrlSuffix(gcc/Xtensa-Options.html#index-mserialize-volatile)
+
+mabi=call0
+UrlSuffix(gcc/Xtensa-Options.html#index-mabi_003dcall0)
+
+mabi=windowed
+UrlSuffix(gcc/Xtensa-Options.html#index-mabi_003dwindowed)
+
+mstrict-align
+UrlSuffix(gcc/Xtensa-Options.html#index-mstrict-align-5)
+
diff --git a/gcc/d/lang.opt.urls b/gcc/d/lang.opt.urls
new file mode 100644
index 000000000000..09b2a261e254
--- /dev/null
+++ b/gcc/d/lang.opt.urls
@@ -0,0 +1,223 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/d/lang.opt and generated HTML
+
+H
+UrlSuffix(gcc/Preprocessor-Options.html#index-H) LangUrlSuffix_D(gdc/Code-Generation.html#index-H)
+
+Hd
+LangUrlSuffix_D(gdc/Code-Generation.html#index-Hd)
+
+Hf
+LangUrlSuffix_D(gdc/Code-Generation.html#index-Hf)
+
+I
+UrlSuffix(gcc/Directory-Options.html#index-I) LangUrlSuffix_D(gdc/Directory-Options.html#index-I)
+
+J
+LangUrlSuffix_D(gdc/Directory-Options.html#index-J)
+
+M
+UrlSuffix(gcc/Preprocessor-Options.html#index-M) LangUrlSuffix_D(gdc/Code-Generation.html#index-M)
+
+MD
+UrlSuffix(gcc/Preprocessor-Options.html#index-MD) LangUrlSuffix_D(gdc/Code-Generation.html#index-MD)
+
+MF
+UrlSuffix(gcc/Preprocessor-Options.html#index-MF) LangUrlSuffix_D(gdc/Code-Generation.html#index-MF)
+
+MG
+UrlSuffix(gcc/Preprocessor-Options.html#index-MG) LangUrlSuffix_D(gdc/Code-Generation.html#index-MG)
+
+MM
+UrlSuffix(gcc/Preprocessor-Options.html#index-MM) LangUrlSuffix_D(gdc/Code-Generation.html#index-MM)
+
+MMD
+UrlSuffix(gcc/Preprocessor-Options.html#index-MMD) LangUrlSuffix_D(gdc/Code-Generation.html#index-MMD)
+
+MP
+UrlSuffix(gcc/Preprocessor-Options.html#index-MP) LangUrlSuffix_D(gdc/Code-Generation.html#index-MP)
+
+MT
+UrlSuffix(gcc/Preprocessor-Options.html#index-MT) LangUrlSuffix_D(gdc/Code-Generation.html#index-MT)
+
+MQ
+UrlSuffix(gcc/Preprocessor-Options.html#index-MQ) LangUrlSuffix_D(gdc/Code-Generation.html#index-MQ)
+
+Waddress
+UrlSuffix(gcc/Warning-Options.html#index-Waddress)
+
+; skipping UrlSuffix for 'Wall' due to multiple URLs:
+;   duplicate: 'gcc/Standard-Libraries.html#index-Wall-1'
+;   duplicate: 'gcc/Warning-Options.html#index-Wall'
+Wall
+LangUrlSuffix_D(gdc/Warnings.html#index-Wall)
+
+Walloca
+UrlSuffix(gcc/Warning-Options.html#index-Walloca) LangUrlSuffix_D(gdc/Warnings.html#index-Walloca)
+
+Walloca-larger-than=
+UrlSuffix(gcc/Warning-Options.html#index-Walloca-larger-than_003d) LangUrlSuffix_D(gdc/Warnings.html#index-Walloca-larger-than)
+
+Wbuiltin-declaration-mismatch
+UrlSuffix(gcc/Warning-Options.html#index-Wbuiltin-declaration-mismatch) LangUrlSuffix_D(gdc/Warnings.html#index-Wbuiltin-declaration-mismatch)
+
+Wcast-result
+LangUrlSuffix_D(gdc/Warnings.html#index-Wcast-result)
+
+Wdeprecated
+UrlSuffix(gcc/Warning-Options.html#index-Wdeprecated) LangUrlSuffix_D(gdc/Warnings.html#index-Wdeprecated)
+
+Werror
+UrlSuffix(gcc/Warning-Options.html#index-Werror) LangUrlSuffix_D(gdc/Warnings.html#index-Werror)
+
+Wextra
+UrlSuffix(gcc/Warning-Options.html#index-Wextra) LangUrlSuffix_D(gdc/Warnings.html#index-Wextra)
+
+Wmismatched-special-enum
+LangUrlSuffix_D(gdc/Warnings.html#index-Wmismatched-special-enum)
+
+Wspeculative
+LangUrlSuffix_D(gdc/Warnings.html#index-Wno-speculative)
+
+Wunknown-pragmas
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unknown-pragmas) LangUrlSuffix_D(gdc/Warnings.html#index-Wno-unknown-pragmas)
+
+Wvarargs
+UrlSuffix(gcc/Warning-Options.html#index-Wno-varargs) LangUrlSuffix_D(gdc/Warnings.html#index-Wno-varargs)
+
+X
+LangUrlSuffix_D(gdc/Code-Generation.html#index-X)
+
+Xf
+LangUrlSuffix_D(gdc/Code-Generation.html#index-Xf)
+
+debuglib=
+LangUrlSuffix_D(gdc/Linking.html#index-debuglib_003d)
+
+defaultlib=
+LangUrlSuffix_D(gdc/Linking.html#index-defaultlib_003d)
+
+fall-instantiations
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fall-instantiations)
+
+fassert
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fassert)
+
+fbounds-check
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fbounds-check)
+
+fbounds-check=
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fbounds-check)
+
+; skipping UrlSuffix for 'fbuiltin' due to multiple URLs:
+;   duplicate: 'gcc/C-Dialect-Options.html#index-fbuiltin'
+;   duplicate: 'gcc/Other-Builtins.html#index-fno-builtin-3'
+;   duplicate: 'gcc/Warning-Options.html#index-fno-builtin-1'
+; skipping LangUrlSuffix_D for 'fbuiltin' due to multiple URLs:
+;   duplicate: 'gdc/Other-Builtins.html#index-fno-builtin-1'
+;   duplicate: 'gdc/Runtime-Options.html#index-fbuiltin'
+
+fcheckaction=
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fcheckaction)
+
+fdebug
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fdebug)
+
+fdebug=
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fdebug)
+
+fdoc
+LangUrlSuffix_D(gdc/Code-Generation.html#index-fdoc)
+
+fdoc-dir=
+LangUrlSuffix_D(gdc/Code-Generation.html#index-fdoc-dir)
+
+fdoc-file=
+LangUrlSuffix_D(gdc/Code-Generation.html#index-fdoc-file)
+
+fdoc-inc=
+LangUrlSuffix_D(gdc/Code-Generation.html#index-fdoc-inc)
+
+fdruntime
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fdruntime)
+
+fdump-d-original
+LangUrlSuffix_D(gdc/Developer-Options.html#index-fdump-d-original)
+
+fexceptions
+UrlSuffix(gcc/Code-Gen-Options.html#index-fexceptions)
+
+fextern-std=
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fextern-std)
+
+fignore-unknown-pragmas
+LangUrlSuffix_D(gdc/Warnings.html#index-fignore-unknown-pragmas)
+
+finvariants
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-finvariants)
+
+fmain
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fmain)
+
+fmodule-file=
+LangUrlSuffix_D(gdc/Directory-Options.html#index-fmodule-file)
+
+fmoduleinfo
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fmoduleinfo)
+
+fonly=
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fonly)
+
+fpostconditions
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fno-postconditions)
+
+fpreconditions
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fno-preconditions)
+
+frelease
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fno-release)
+
+frtti
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fno-rtti) LangUrlSuffix_D(gdc/Runtime-Options.html#index-fno-rtti)
+
+fsave-mixins=
+LangUrlSuffix_D(gdc/Code-Generation.html#index-fsave-mixins)
+
+fswitch-errors
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fno-switch-errors)
+
+funittest
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fno-unittest)
+
+fversion=
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fversion)
+
+fweak-templates
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fno-weak-templates)
+
+imultilib
+UrlSuffix(gcc/Directory-Options.html#index-imultilib) LangUrlSuffix_D(gdc/Directory-Options.html#index-imultilib)
+
+iprefix
+UrlSuffix(gcc/Directory-Options.html#index-iprefix) LangUrlSuffix_D(gdc/Directory-Options.html#index-iprefix)
+
+isysroot
+UrlSuffix(gcc/Directory-Options.html#index-isysroot)
+
+isystem
+UrlSuffix(gcc/Directory-Options.html#index-isystem)
+
+nophoboslib
+LangUrlSuffix_D(gdc/Linking.html#index-nophoboslib)
+
+nostdinc
+UrlSuffix(gcc/Directory-Options.html#index-nostdinc) LangUrlSuffix_D(gdc/Directory-Options.html#index-nostdinc)
+
+static-libphobos
+LangUrlSuffix_D(gdc/Linking.html#index-static-libphobos)
+
+shared-libphobos
+LangUrlSuffix_D(gdc/Linking.html#index-shared-libphobos)
+
+v
+UrlSuffix(gcc/Overall-Options.html#index-v) LangUrlSuffix_D(gdc/Developer-Options.html#index-v)
+
diff --git a/gcc/fortran/lang.opt.urls b/gcc/fortran/lang.opt.urls
new file mode 100644
index 000000000000..a7d9bdc142c5
--- /dev/null
+++ b/gcc/fortran/lang.opt.urls
@@ -0,0 +1,161 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/fortran/lang.opt and generated HTML
+
+A
+UrlSuffix(gcc/Preprocessor-Options.html#index-A)
+
+C
+UrlSuffix(gcc/Preprocessor-Options.html#index-C)
+
+CC
+UrlSuffix(gcc/Preprocessor-Options.html#index-CC)
+
+D
+UrlSuffix(gcc/Preprocessor-Options.html#index-D-1)
+
+; skipping UrlSuffix for 'E' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-E-1'
+;   duplicate: 'gcc/Overall-Options.html#index-E'
+
+H
+UrlSuffix(gcc/Preprocessor-Options.html#index-H) LangUrlSuffix_D(gdc/Code-Generation.html#index-H)
+
+I
+UrlSuffix(gcc/Directory-Options.html#index-I) LangUrlSuffix_D(gdc/Directory-Options.html#index-I)
+
+J
+LangUrlSuffix_D(gdc/Directory-Options.html#index-J)
+
+M
+UrlSuffix(gcc/Preprocessor-Options.html#index-M) LangUrlSuffix_D(gdc/Code-Generation.html#index-M)
+
+MD
+UrlSuffix(gcc/Preprocessor-Options.html#index-MD) LangUrlSuffix_D(gdc/Code-Generation.html#index-MD)
+
+MF
+UrlSuffix(gcc/Preprocessor-Options.html#index-MF) LangUrlSuffix_D(gdc/Code-Generation.html#index-MF)
+
+MG
+UrlSuffix(gcc/Preprocessor-Options.html#index-MG) LangUrlSuffix_D(gdc/Code-Generation.html#index-MG)
+
+MM
+UrlSuffix(gcc/Preprocessor-Options.html#index-MM) LangUrlSuffix_D(gdc/Code-Generation.html#index-MM)
+
+MMD
+UrlSuffix(gcc/Preprocessor-Options.html#index-MMD) LangUrlSuffix_D(gdc/Code-Generation.html#index-MMD)
+
+MP
+UrlSuffix(gcc/Preprocessor-Options.html#index-MP) LangUrlSuffix_D(gdc/Code-Generation.html#index-MP)
+
+MT
+UrlSuffix(gcc/Preprocessor-Options.html#index-MT) LangUrlSuffix_D(gdc/Code-Generation.html#index-MT)
+
+MQ
+UrlSuffix(gcc/Preprocessor-Options.html#index-MQ) LangUrlSuffix_D(gdc/Code-Generation.html#index-MQ)
+
+P
+UrlSuffix(gcc/Preprocessor-Options.html#index-P)
+
+U
+UrlSuffix(gcc/Preprocessor-Options.html#index-U)
+
+; skipping UrlSuffix for 'Wall' due to multiple URLs:
+;   duplicate: 'gcc/Standard-Libraries.html#index-Wall-1'
+;   duplicate: 'gcc/Warning-Options.html#index-Wall'
+Wall
+LangUrlSuffix_D(gdc/Warnings.html#index-Wall)
+
+Wdate-time
+UrlSuffix(gcc/Warning-Options.html#index-Wdate-time)
+
+Wconversion
+UrlSuffix(gcc/Warning-Options.html#index-Wconversion)
+
+Wextra
+UrlSuffix(gcc/Warning-Options.html#index-Wextra) LangUrlSuffix_D(gdc/Warnings.html#index-Wextra)
+
+Wmaybe-uninitialized
+UrlSuffix(gcc/Warning-Options.html#index-Wmaybe-uninitialized)
+
+Wmissing-include-dirs
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-include-dirs)
+
+Wopenacc-parallelism
+UrlSuffix(gcc/Warning-Options.html#index-Wno-openacc-parallelism)
+
+Wopenmp-simd
+UrlSuffix(gcc/Warning-Options.html#index-Wno-openmp-simd)
+
+Wpedantic
+UrlSuffix(gcc/Warning-Options.html#index-Wno-pedantic)
+
+Wreturn-type
+UrlSuffix(gcc/Warning-Options.html#index-Wno-return-type)
+
+Wuninitialized
+UrlSuffix(gcc/Warning-Options.html#index-Wno-uninitialized)
+
+Wunused
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused)
+
+; skipping UrlSuffix for 'nocpp' due to finding no URLs
+
+; skipping UrlSuffix for 'd' due to multiple URLs:
+;   duplicate: 'gcc/Developer-Options.html#index-d-1'
+;   duplicate: 'gcc/Preprocessor-Options.html#index-d'
+
+ff2c
+LangUrlSuffix_Fortran(gfortran/Code-Gen-Options.html#index-ff2c)
+
+fopenacc
+UrlSuffix(gcc/C-Dialect-Options.html#index-fopenacc)
+
+fopenacc-dim=
+UrlSuffix(gcc/C-Dialect-Options.html#index-fopenacc-dim)
+
+fopenmp
+UrlSuffix(gcc/C-Dialect-Options.html#index-fopenmp)
+
+fopenmp-simd
+UrlSuffix(gcc/C-Dialect-Options.html#index-fopenmp-simd)
+
+fpreprocessed
+UrlSuffix(gcc/Preprocessor-Options.html#index-fpreprocessed)
+
+; skipping UrlSuffix for 'fshort-enums' due to multiple URLs:
+;   duplicate: 'gcc/Code-Gen-Options.html#index-fshort-enums'
+;   duplicate: 'gcc/Non-bugs.html#index-fshort-enums-3'
+;   duplicate: 'gcc/Structures-unions-enumerations-and-bit-fields-implementation.html#index-fshort-enums-1'
+
+fworking-directory
+UrlSuffix(gcc/Preprocessor-Options.html#index-fno-working-directory)
+
+idirafter
+UrlSuffix(gcc/Directory-Options.html#index-idirafter)
+
+imultilib
+UrlSuffix(gcc/Directory-Options.html#index-imultilib) LangUrlSuffix_D(gdc/Directory-Options.html#index-imultilib)
+
+iprefix
+UrlSuffix(gcc/Directory-Options.html#index-iprefix) LangUrlSuffix_D(gdc/Directory-Options.html#index-iprefix)
+
+iquote
+UrlSuffix(gcc/Directory-Options.html#index-iquote)
+
+isysroot
+UrlSuffix(gcc/Directory-Options.html#index-isysroot)
+
+isystem
+UrlSuffix(gcc/Directory-Options.html#index-isystem)
+
+nostdinc
+UrlSuffix(gcc/Directory-Options.html#index-nostdinc) LangUrlSuffix_D(gdc/Directory-Options.html#index-nostdinc)
+
+o
+UrlSuffix(gcc/Overall-Options.html#index-o)
+
+undef
+UrlSuffix(gcc/Preprocessor-Options.html#index-undef)
+
+v
+UrlSuffix(gcc/Overall-Options.html#index-v) LangUrlSuffix_D(gdc/Developer-Options.html#index-v)
+
diff --git a/gcc/go/lang.opt.urls b/gcc/go/lang.opt.urls
new file mode 100644
index 000000000000..34d3154f2c50
--- /dev/null
+++ b/gcc/go/lang.opt.urls
@@ -0,0 +1,17 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/go/lang.opt and generated HTML
+
+I
+UrlSuffix(gcc/Directory-Options.html#index-I) LangUrlSuffix_D(gdc/Directory-Options.html#index-I)
+
+L
+UrlSuffix(gcc/Directory-Options.html#index-L) LangUrlSuffix_D(gdc/Directory-Options.html#index-L)
+
+; skipping UrlSuffix for 'Wall' due to multiple URLs:
+;   duplicate: 'gcc/Standard-Libraries.html#index-Wall-1'
+;   duplicate: 'gcc/Warning-Options.html#index-Wall'
+Wall
+LangUrlSuffix_D(gdc/Warnings.html#index-Wall)
+
+o
+UrlSuffix(gcc/Overall-Options.html#index-o)
+
diff --git a/gcc/lto/lang.opt.urls b/gcc/lto/lang.opt.urls
new file mode 100644
index 000000000000..f7509c8211ec
--- /dev/null
+++ b/gcc/lto/lang.opt.urls
@@ -0,0 +1,8 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/lto/lang.opt and generated HTML
+
+flinker-output=
+UrlSuffix(gcc/Link-Options.html#index-flinker-output)
+
+help
+UrlSuffix(gcc/Overall-Options.html#index-help)
+
diff --git a/gcc/m2/lang.opt.urls b/gcc/m2/lang.opt.urls
new file mode 100644
index 000000000000..8e8feb13a96a
--- /dev/null
+++ b/gcc/m2/lang.opt.urls
@@ -0,0 +1,115 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/m2/lang.opt and generated HTML
+
+fversion
+LangUrlSuffix_D(gdc/Runtime-Options.html#index-fversion)
+
+; skipping UrlSuffix for 'Wall' due to multiple URLs:
+;   duplicate: 'gcc/Standard-Libraries.html#index-Wall-1'
+;   duplicate: 'gcc/Warning-Options.html#index-Wall'
+Wall
+LangUrlSuffix_D(gdc/Warnings.html#index-Wall)
+
+Wpedantic
+UrlSuffix(gcc/Warning-Options.html#index-Wno-pedantic)
+
+Wreturn-type
+UrlSuffix(gcc/Warning-Options.html#index-Wno-return-type)
+
+Wunused-variable
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-variable)
+
+Wunused-parameter
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-parameter)
+
+B
+UrlSuffix(gcc/Directory-Options.html#index-B) LangUrlSuffix_D(gdc/Directory-Options.html#index-B)
+
+D
+UrlSuffix(gcc/Preprocessor-Options.html#index-D-1)
+
+; skipping UrlSuffix for 'E' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-E-1'
+;   duplicate: 'gcc/Overall-Options.html#index-E'
+
+I
+UrlSuffix(gcc/Directory-Options.html#index-I) LangUrlSuffix_D(gdc/Directory-Options.html#index-I)
+
+L
+UrlSuffix(gcc/Directory-Options.html#index-L) LangUrlSuffix_D(gdc/Directory-Options.html#index-L)
+
+M
+UrlSuffix(gcc/Preprocessor-Options.html#index-M) LangUrlSuffix_D(gdc/Code-Generation.html#index-M)
+
+MD
+UrlSuffix(gcc/Preprocessor-Options.html#index-MD) LangUrlSuffix_D(gdc/Code-Generation.html#index-MD)
+
+MF
+UrlSuffix(gcc/Preprocessor-Options.html#index-MF) LangUrlSuffix_D(gdc/Code-Generation.html#index-MF)
+
+MG
+UrlSuffix(gcc/Preprocessor-Options.html#index-MG) LangUrlSuffix_D(gdc/Code-Generation.html#index-MG)
+
+MM
+UrlSuffix(gcc/Preprocessor-Options.html#index-MM) LangUrlSuffix_D(gdc/Code-Generation.html#index-MM)
+
+MMD
+UrlSuffix(gcc/Preprocessor-Options.html#index-MMD) LangUrlSuffix_D(gdc/Code-Generation.html#index-MMD)
+
+Mno-modules
+UrlSuffix(gcc/Preprocessor-Options.html#index-Mno-modules)
+
+MP
+UrlSuffix(gcc/Preprocessor-Options.html#index-MP) LangUrlSuffix_D(gdc/Code-Generation.html#index-MP)
+
+MQ
+UrlSuffix(gcc/Preprocessor-Options.html#index-MQ) LangUrlSuffix_D(gdc/Code-Generation.html#index-MQ)
+
+MT
+UrlSuffix(gcc/Preprocessor-Options.html#index-MT) LangUrlSuffix_D(gdc/Code-Generation.html#index-MT)
+
+P
+UrlSuffix(gcc/Preprocessor-Options.html#index-P)
+
+; skipping UrlSuffix for 'ansi' due to multiple URLs:
+;   duplicate: 'gcc/C-Dialect-Options.html#index-ansi-1'
+;   duplicate: 'gcc/Non-bugs.html#index-ansi-3'
+;   duplicate: 'gcc/Other-Builtins.html#index-ansi-2'
+;   duplicate: 'gcc/Standards.html#index-ansi'
+
+; skipping UrlSuffix for 'c' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-c-1'
+;   duplicate: 'gcc/Overall-Options.html#index-c'
+
+fexceptions
+UrlSuffix(gcc/Code-Gen-Options.html#index-fexceptions)
+
+fpreprocessed
+UrlSuffix(gcc/Preprocessor-Options.html#index-fpreprocessed)
+
+fworking-directory
+UrlSuffix(gcc/Preprocessor-Options.html#index-fno-working-directory)
+
+iprefix
+UrlSuffix(gcc/Directory-Options.html#index-iprefix) LangUrlSuffix_D(gdc/Directory-Options.html#index-iprefix)
+
+iquote
+UrlSuffix(gcc/Directory-Options.html#index-iquote)
+
+isystem
+UrlSuffix(gcc/Directory-Options.html#index-isystem)
+
+idirafter
+UrlSuffix(gcc/Directory-Options.html#index-idirafter)
+
+imultilib
+UrlSuffix(gcc/Directory-Options.html#index-imultilib) LangUrlSuffix_D(gdc/Directory-Options.html#index-imultilib)
+
+save-temps
+UrlSuffix(gcc/Developer-Options.html#index-save-temps)
+
+save-temps=
+UrlSuffix(gcc/Developer-Options.html#index-save-temps)
+
+traditional-cpp
+UrlSuffix(gcc/Preprocessor-Options.html#index-traditional-cpp)
+
diff --git a/gcc/params.opt.urls b/gcc/params.opt.urls
new file mode 100644
index 000000000000..e76310c6ac04
--- /dev/null
+++ b/gcc/params.opt.urls
@@ -0,0 +1,2 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/params.opt and generated HTML
+
diff --git a/gcc/rust/lang.opt.urls b/gcc/rust/lang.opt.urls
new file mode 100644
index 000000000000..9cf8987e7344
--- /dev/null
+++ b/gcc/rust/lang.opt.urls
@@ -0,0 +1,29 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/rust/lang.opt and generated HTML
+
+I
+UrlSuffix(gcc/Directory-Options.html#index-I) LangUrlSuffix_D(gdc/Directory-Options.html#index-I)
+
+L
+UrlSuffix(gcc/Directory-Options.html#index-L) LangUrlSuffix_D(gdc/Directory-Options.html#index-L)
+
+; skipping UrlSuffix for 'Wall' due to multiple URLs:
+;   duplicate: 'gcc/Standard-Libraries.html#index-Wall-1'
+;   duplicate: 'gcc/Warning-Options.html#index-Wall'
+Wall
+LangUrlSuffix_D(gdc/Warnings.html#index-Wall)
+
+Wunused-variable
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-variable)
+
+Wunused-const-variable
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-const-variable)
+
+Wunused-const-variable=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-const-variable)
+
+Wunused-result
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-result)
+
+o
+UrlSuffix(gcc/Overall-Options.html#index-o)
+
-- 
2.26.3


^ permalink raw reply	[flat|nested] 47+ messages in thread

* [PATCH 3/4] opts: add logic to generate options-urls.cc
  2023-11-16 14:28       ` [PATCH 0/4] v2 of " David Malcolm
  2023-11-16 14:28         ` [PATCH 1/4] options: add gcc/regenerate-opt-urls.py David Malcolm
  2023-11-16 14:28         ` [PATCH 2/4] Add generated .opt.urls files David Malcolm
@ 2023-11-16 14:28         ` David Malcolm
  2023-11-16 14:28         ` [PATCH 4/4] options: wire up options-urls.cc into gcc_urlifier David Malcolm
  2023-11-21  1:09         ` [PATCH 0/4] v2 of Option handling: add documentation URLs Hans-Peter Nilsson
  4 siblings, 0 replies; 47+ messages in thread
From: David Malcolm @ 2023-11-16 14:28 UTC (permalink / raw)
  To: Joseph Myers; +Cc: gcc-patches, David Malcolm

Changed in v2:
- split out from the code that uses this
- now handles lang-specific URLs, as well as generic URLs
- the generated options-urls.cc now contains a function with a
  switch statement, rather than an array, to support
  lang-specific URLs:

const char *
get_opt_url_suffix (int option_index, unsigned lang_mask)
{
  switch (option_index)
    {
     [...snip...]
     case OPT_B:
       if (lang_mask & CL_D)
         return "gdc/Directory-Options.html#index-B";
       return "gcc/Directory-Options.html#index-B";
    [...snip...]
  return nullptr;
}

gcc/ChangeLog:
	* Makefile.in (ALL_OPT_URL_FILES): New.
	(GCC_OBJS): Add options-urls.o.
	(OBJS): Likewise.
	(OBJS-libcommon): Likewise.
	(s-options): Depend on $(ALL_OPT_URL_FILES), and add this to
	inputs to opt-gather.awk.
	(options-urls.cc): New Makefile target.
	* opt-functions.awk (url_suffix): New function.
	(lang_url_suffix): New function.
	* options-urls-cc-gen.awk: New file.
	* opts.h (get_opt_url_suffix): New decl.
---
 gcc/Makefile.in             |  18 +++++--
 gcc/opt-functions.awk       |  15 ++++++
 gcc/options-urls-cc-gen.awk | 105 ++++++++++++++++++++++++++++++++++++
 gcc/opts.h                  |   4 ++
 4 files changed, 138 insertions(+), 4 deletions(-)
 create mode 100644 gcc/options-urls-cc-gen.awk

diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index f3b79b8a2663..72daf907c530 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -1272,6 +1272,8 @@ FLAGS_TO_PASS = \
 # All option source files
 ALL_OPT_FILES=$(lang_opt_files) $(extra_opt_files)
 
+ALL_OPT_URL_FILES=$(patsubst %, %.urls, $(ALL_OPT_FILES))
+
 # Target specific, C specific object file
 C_TARGET_OBJS=@c_target_objs@
 
@@ -1288,7 +1290,7 @@ FORTRAN_TARGET_OBJS=@fortran_target_objs@
 RUST_TARGET_OBJS=@rust_target_objs@
 
 # Object files for gcc many-languages driver.
-GCC_OBJS = gcc.o gcc-main.o ggc-none.o gcc-urlifier.o
+GCC_OBJS = gcc.o gcc-main.o ggc-none.o gcc-urlifier.o options-urls.o
 
 c-family-warn = $(STRICT_WARN)
 
@@ -1608,6 +1610,7 @@ OBJS = \
 	optinfo.o \
 	optinfo-emit-json.o \
 	options-save.o \
+	options-urls.o \
 	opts-global.o \
 	ordered-hash-map-tests.o \
 	passes.o \
@@ -1834,7 +1837,8 @@ OBJS-libcommon = diagnostic-spec.o diagnostic.o diagnostic-color.o \
 # compiler and containing target-dependent code.
 OBJS-libcommon-target = $(common_out_object_file) prefix.o \
 	opts.o opts-common.o options.o vec.o hooks.o common/common-targhooks.o \
-	hash-table.o file-find.o spellcheck.o selftest.o opt-suggestions.o
+	hash-table.o file-find.o spellcheck.o selftest.o opt-suggestions.o \
+	options-urls.o
 
 # This lists all host objects for the front ends.
 ALL_HOST_FRONTEND_OBJS = $(foreach v,$(CONFIG_LANGUAGES),$($(v)_OBJS))
@@ -2437,9 +2441,9 @@ s-specs : Makefile
 	$(STAMP) s-specs
 
 optionlist: s-options ; @true
-s-options: $(ALL_OPT_FILES) Makefile $(srcdir)/opt-gather.awk
+s-options: $(ALL_OPT_FILES) $(ALL_OPT_URL_FILES) Makefile $(srcdir)/opt-gather.awk
 	LC_ALL=C ; export LC_ALL ; \
-	$(AWK) -f $(srcdir)/opt-gather.awk $(ALL_OPT_FILES) > tmp-optionlist
+	$(AWK) -f $(srcdir)/opt-gather.awk $(ALL_OPT_FILES) $(ALL_OPT_URL_FILES) > tmp-optionlist
 	$(SHELL) $(srcdir)/../move-if-change tmp-optionlist optionlist
 	$(STAMP) s-options
 
@@ -2455,6 +2459,12 @@ options-save.cc: optionlist $(srcdir)/opt-functions.awk $(srcdir)/opt-read.awk \
 	       -f $(srcdir)/optc-save-gen.awk \
 	       -v header_name="config.h system.h coretypes.h tm.h" < $< > $@
 
+options-urls.cc: optionlist $(srcdir)/opt-functions.awk $(srcdir)/opt-read.awk \
+    $(srcdir)/options-urls-cc-gen.awk
+	$(AWK) -f $(srcdir)/opt-functions.awk -f $(srcdir)/opt-read.awk \
+	       -f $(srcdir)/options-urls-cc-gen.awk \
+	       -v header_name="config.h system.h coretypes.h tm.h" < $< > $@
+
 options.h: s-options-h ; @true
 s-options-h: optionlist $(srcdir)/opt-functions.awk $(srcdir)/opt-read.awk \
     $(srcdir)/opth-gen.awk
diff --git a/gcc/opt-functions.awk b/gcc/opt-functions.awk
index a58e93815e30..c31e66f2105a 100644
--- a/gcc/opt-functions.awk
+++ b/gcc/opt-functions.awk
@@ -193,6 +193,21 @@ function var_name(flags)
 	return nth_arg(0, opt_args("Var", flags))
 }
 
+# If FLAGS includes a UrlSuffix flag, return the value it specifies.
+# Return the empty string otherwise.
+function url_suffix(flags)
+{
+	return nth_arg(0, opt_args("UrlSuffix", flags))
+}
+
+# If FLAGS includes a LangUrlSuffix_LANG flag, return the
+# value it specifies.
+# Return the empty string otherwise.
+function lang_url_suffix(flags, lang)
+{
+	return nth_arg(0, opt_args("LangUrlSuffix_" lang, flags))
+}
+
 # Return the name of the variable if FLAGS has a HOST_WIDE_INT variable. 
 # Return the empty string otherwise.
 function host_wide_int_var_name(flags)
diff --git a/gcc/options-urls-cc-gen.awk b/gcc/options-urls-cc-gen.awk
new file mode 100644
index 000000000000..e021e7c3f1bc
--- /dev/null
+++ b/gcc/options-urls-cc-gen.awk
@@ -0,0 +1,105 @@
+#  Copyright (C) 2023 Free Software Foundation, Inc.
+#
+# This program 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.
+# 
+# This program 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 this program; see the file COPYING3.  If not see
+# <http://www.gnu.org/licenses/>.
+
+# This Awk script reads in the option records generated from 
+# opt-gather.awk, and generates a C++ file containing an array
+# of URL suffixes (possibly NULL), one per option.
+
+# This program uses functions from opt-functions.awk and code from
+# opt-read.awk.
+#
+# Usage: awk -f opt-functions.awk -f opt-read.awk -f options-urls-cc-gen.awk \
+#            [-v header_name=header.h] < inputfile > options-urls.cc
+
+END {
+
+
+print "/* This file is auto-generated by options-urls-cc-gen.awk.  */"
+print ""
+n_headers = split(header_name, headers, " ")
+for (i = 1; i <= n_headers; i++)
+	print "#include " quote headers[i] quote
+print "#include " quote "opts.h" quote
+print "#include " quote "intl.h" quote
+print "#include " quote "insn-attr-common.h" quote
+print ""
+
+if (n_extra_c_includes > 0) {
+	for (i = 0; i < n_extra_c_includes; i++) {
+		print "#include " quote extra_c_includes[i] quote
+	}
+	print ""
+}
+
+print "const char *"
+print "get_opt_url_suffix (int option_index, unsigned lang_mask)"
+print "{"
+print "  switch (option_index)"
+print "    {"
+
+
+optindex = 0
+for (i = 0; i < n_opts; i++) {
+	# Combine the flags of identical switches.  Switches
+	# appear many times if they are handled by many front
+	# ends, for example.
+	while( i + 1 != n_opts && opts[i] == opts[i + 1] ) {
+		flags[i + 1] = flags[i] " " flags[i + 1];
+		i++;
+	}
+
+	len = length (opts[i]);
+	enum = opt_enum(opts[i])
+
+	# Aliases do not get enumeration names.
+	if ((flag_set_p("Alias.*", flags[i]) \
+	     && !flag_set_p("SeparateAlias", flags[i])) \
+	    || flag_set_p("Ignore", flags[i])) {
+	    show_case = 0;
+	} else {
+	    show_case = 1;
+	}
+
+	if (show_case) {
+	    printf("     case %s:\n", opt_enum(opts[i]))
+
+	    # Handle any lang-specific LangUrlSuffix directives:
+	    for (lang_idx = 0; lang_idx < n_langs; lang_idx++) {
+		lang_name = lang_sanitized_name(langs[lang_idx])
+		u = lang_url_suffix(flags[i], lang_name)
+		if (u != "") {
+		    printf("       if (lang_mask & CL_%s)\n", lang_name)
+		    printf("         return \"%s\";\n", u)
+		}
+	    }
+
+	    # Use any language-independent UrlSuffix directive:
+	    u = url_suffix(flags[i])
+	    if (u != "") {
+		printf("       return \"%s\";\n", u)
+	    } else {
+		printf("       break;\n")
+	    }
+	}
+
+	# Bump up the informational option index.
+	++optindex
+ }
+
+print "    }"
+print "  return nullptr;"
+print "}"
+}
diff --git a/gcc/opts.h b/gcc/opts.h
index 00f377f9ca7e..0e47d3425604 100644
--- a/gcc/opts.h
+++ b/gcc/opts.h
@@ -152,6 +152,10 @@ struct cl_option_state {
 
 extern const struct cl_option cl_options[];
 extern const unsigned int cl_options_count;
+
+extern const char *
+get_opt_url_suffix (int option_index, unsigned lang_mask);
+
 #ifdef ENABLE_PLUGIN
 extern const struct cl_var cl_vars[];
 #endif
-- 
2.26.3


^ permalink raw reply	[flat|nested] 47+ messages in thread

* [PATCH 4/4] options: wire up options-urls.cc into gcc_urlifier
  2023-11-16 14:28       ` [PATCH 0/4] v2 of " David Malcolm
                           ` (2 preceding siblings ...)
  2023-11-16 14:28         ` [PATCH 3/4] opts: add logic to generate options-urls.cc David Malcolm
@ 2023-11-16 14:28         ` David Malcolm
  2023-11-21  1:09         ` [PATCH 0/4] v2 of Option handling: add documentation URLs Hans-Peter Nilsson
  4 siblings, 0 replies; 47+ messages in thread
From: David Malcolm @ 2023-11-16 14:28 UTC (permalink / raw)
  To: Joseph Myers; +Cc: gcc-patches, David Malcolm

Changed in v2:
- split out from the code that generates options-urls.cc
- call the generated function, rather than use a generated array
- pass around lang_mask

gcc/ChangeLog:
	* diagnostic.h (diagnostic_make_option_url_cb): Add lang_mask
	param.
	(diagnostic_context::make_option_url): Update for lang_mask param.
	* gcc-urlifier.cc: Include "opts.h" and "options.h".
	(gcc_urlifier::gcc_urlifier): Add lang_mask param.
	(gcc_urlifier::m_lang_mask): New field.
	(doc_urls): Make static.
	(gcc_urlifier::get_url_for_quoted_text): Use label_text.
	(gcc_urlifier::get_url_suffix_for_quoted_text): Use label_text.
	Look for an option by name before trying a binary search in
	doc_urls.
	(gcc_urlifier::get_url_suffix_for_quoted_text): Use label_text.
	(gcc_urlifier::get_url_suffix_for_option): New.
	(make_gcc_urlifier): Add lang_mask param.
	(selftest::gcc_urlifier_cc_tests): Update for above changes.
	Verify that a URL is found for "-fpack-struct".
	* gcc-urlifier.def: Drop options "--version" and "-fpack-struct".
	* gcc-urlifier.h (make_gcc_urlifier): Add lang_mask param.
	* gcc.cc (driver::global_initializations): Pass 0 for lang_mask
	to make_gcc_urlifier.
	* opts-diagnostic.h (get_option_url): Add lang_mask param.
	* opts.cc (get_option_html_page): Remove special-casing for
	analyzer and LTO.
	(get_option_url_suffix): New.
	(get_option_url): Reimplement.
	(selftest::test_get_option_html_page): Rename to...
	(selftest::test_get_option_url_suffix): ...this and update for
	above changes.
	(selftest::opts_cc_tests): Update for renaming.
	* opts.h (get_option_url_suffix): New decl.

gcc/testsuite/ChangeLog:
	* lib/gcc-dg.exp: Set TERM to xterm.

gcc/ChangeLog:
	* toplev.cc (general_init): Pass lang_mask to urlifier.
---
 gcc/diagnostic.h             |   6 +-
 gcc/gcc-urlifier.cc          | 106 ++++++++++++++++++++++++++++-------
 gcc/gcc-urlifier.def         |   2 -
 gcc/gcc-urlifier.h           |   2 +-
 gcc/gcc.cc                   |   2 +-
 gcc/opts-diagnostic.h        |   3 +-
 gcc/opts.cc                  |  95 ++++++++++++++++++++-----------
 gcc/opts.h                   |   3 +
 gcc/testsuite/lib/gcc-dg.exp |   6 ++
 gcc/toplev.cc                |   5 +-
 10 files changed, 168 insertions(+), 62 deletions(-)

diff --git a/gcc/diagnostic.h b/gcc/diagnostic.h
index dbf972d25875..ce6f95880e51 100644
--- a/gcc/diagnostic.h
+++ b/gcc/diagnostic.h
@@ -185,7 +185,8 @@ typedef char *(*diagnostic_make_option_name_cb) (const diagnostic_context *,
 						 diagnostic_t,
 						 diagnostic_t);
 typedef char *(*diagnostic_make_option_url_cb) (const diagnostic_context *,
-						int);
+						int,
+						unsigned);
 
 class edit_context;
 namespace json { class value; }
@@ -525,7 +526,8 @@ public:
   {
     if (!m_option_callbacks.m_make_option_url_cb)
       return nullptr;
-    return m_option_callbacks.m_make_option_url_cb (this, option_index);
+    return m_option_callbacks.m_make_option_url_cb (this, option_index,
+						    get_lang_mask ());
   }
 
   void
diff --git a/gcc/gcc-urlifier.cc b/gcc/gcc-urlifier.cc
index 0dbff9853132..ae762a45f4a1 100644
--- a/gcc/gcc-urlifier.cc
+++ b/gcc/gcc-urlifier.cc
@@ -24,6 +24,8 @@ along with GCC; see the file COPYING3.  If not see
 #include "pretty-print.h"
 #include "pretty-print-urlifier.h"
 #include "gcc-urlifier.h"
+#include "opts.h"
+#include "options.h"
 #include "selftest.h"
 
 namespace {
@@ -34,23 +36,34 @@ namespace {
 class gcc_urlifier : public urlifier
 {
 public:
+  gcc_urlifier (unsigned int lang_mask)
+  : m_lang_mask (lang_mask)
+  {}
+
   char *get_url_for_quoted_text (const char *p, size_t sz) const final override;
 
-  const char *get_url_suffix_for_quoted_text (const char *p, size_t sz) const;
+  label_text get_url_suffix_for_quoted_text (const char *p, size_t sz) const;
   /* We use ATTRIBUTE_UNUSED as this helper is called only from ASSERTs.  */
-  const char *get_url_suffix_for_quoted_text (const char *p) const ATTRIBUTE_UNUSED;
+  label_text get_url_suffix_for_quoted_text (const char *p) const ATTRIBUTE_UNUSED;
 
 private:
+  label_text get_url_suffix_for_option (const char *p, size_t sz) const;
+
   static char *
   make_doc_url (const char *doc_url_suffix);
+
+  unsigned int m_lang_mask;
 };
 
 /* class gcc_urlifier : public urlifier.  */
 
+/* Manage a hard-coded mapping from quoted string to URL suffixes
+   in gcc-urlifier.def  */
+
 #define DOC_URL(QUOTED_TEXT, URL_SUFFIX) \
   { (QUOTED_TEXT), (URL_SUFFIX) }
 
-const struct
+static const struct
 {
   const char *quoted_text;
   const char *url_suffix;
@@ -60,32 +73,53 @@ const struct
 
 };
 
+/* Implementation of urlifier::get_url_for_quoted_text vfunc for GCC
+   diagnostics.  */
+
 char *
 gcc_urlifier::get_url_for_quoted_text (const char *p, size_t sz) const
 {
-  if (const char *url_suffix = get_url_suffix_for_quoted_text (p, sz))
-    return make_doc_url (url_suffix);
+  label_text url_suffix = get_url_suffix_for_quoted_text (p, sz);
+  if (url_suffix.get ())
+    return make_doc_url (url_suffix.get ());
   return nullptr;
 }
 
-const char *
+/* Look for a URL for the quoted string (P, SZ).
+   Return the url suffix if found, or nullptr otherwise.  */
+
+label_text
 gcc_urlifier::get_url_suffix_for_quoted_text (const char *p, size_t sz) const
 {
-  /* Binary search.  This assumes that the quoted_text fields of doc_urls
+  if (sz == 0)
+    return label_text ();
+
+  /* If this is an option, look up the option and see if we have
+     a URL for it.  */
+  if (p[0] == '-')
+    {
+      label_text suffix = get_url_suffix_for_option (p, sz);
+      if (suffix.get ())
+	return suffix;
+    }
+
+  /* Otherwise, look within the hard-coded data table in gcc-urlifier.def.
+
+     Binary search.  This assumes that the quoted_text fields of doc_urls
      are in sorted order.  */
   int min = 0;
   int max = ARRAY_SIZE (doc_urls) - 1;
   while (true)
     {
       if (min > max)
-	return nullptr;
+	return label_text ();
       int midpoint = (min + max) / 2;
       gcc_assert ((size_t)midpoint < ARRAY_SIZE (doc_urls));
       int cmp = strncmp (p, doc_urls[midpoint].quoted_text, sz);
       if (cmp == 0)
 	{
 	  if (doc_urls[midpoint].quoted_text[sz] == '\0')
-	    return doc_urls[midpoint].url_suffix;
+	    return label_text::borrow (doc_urls[midpoint].url_suffix);
 	  else
 	    max = midpoint - 1;
 	}
@@ -94,15 +128,45 @@ gcc_urlifier::get_url_suffix_for_quoted_text (const char *p, size_t sz) const
       else
 	min = midpoint + 1;
     }
-  return nullptr;
+
+  /* Not found.  */
+  return label_text ();
 }
 
-const char *
+/* For use in selftests.  */
+
+label_text
 gcc_urlifier::get_url_suffix_for_quoted_text (const char *p) const
 {
   return get_url_suffix_for_quoted_text (p, strlen (p));
 }
 
+/* Look for a URL for the quoted string (P, SZ) that appears to be
+   an option.
+   Return the url suffix if found, or nullptr otherwise.  */
+
+label_text
+gcc_urlifier::get_url_suffix_for_option (const char *p, size_t sz) const
+{
+  /* Look up this option
+
+     find_opt does a binary search, taking a 0-terminated string,
+     and skipping the leading '-'.
+
+     We have a (pointer,size) pair that doesn't necessarily have a
+     terminator, so create a 0-terminated clone of the string.  */
+  gcc_assert (sz > 0);
+  char *tmp = xstrndup (p + 1, sz - 1); // skip the leading '-'
+  size_t opt = find_opt (tmp, m_lang_mask);
+  free (tmp);
+
+  if (opt >= N_OPTS)
+    /* Option not recognized.  */
+    return label_text ();
+
+  return get_option_url_suffix (opt, m_lang_mask);
+}
+
 char *
 gcc_urlifier::make_doc_url (const char *doc_url_suffix)
 {
@@ -115,9 +179,9 @@ gcc_urlifier::make_doc_url (const char *doc_url_suffix)
 } // anonymous namespace
 
 urlifier *
-make_gcc_urlifier ()
+make_gcc_urlifier (unsigned int lang_mask)
 {
-  return new gcc_urlifier ();
+  return new gcc_urlifier (lang_mask);
 }
 
 #if CHECKING_P
@@ -137,22 +201,26 @@ gcc_urlifier_cc_tests ()
 			doc_urls[idx].quoted_text)
 		< 0);
 
-  gcc_urlifier u;
+  gcc_urlifier u (0);
 
-  ASSERT_EQ (u.get_url_suffix_for_quoted_text (""), nullptr);
-  ASSERT_EQ (u.get_url_suffix_for_quoted_text (")"), nullptr);
+  ASSERT_EQ (u.get_url_suffix_for_quoted_text ("").get (), nullptr);
+  ASSERT_EQ (u.get_url_suffix_for_quoted_text (")").get (), nullptr);
 
-  ASSERT_STREQ (u.get_url_suffix_for_quoted_text ("#pragma message"),
+  ASSERT_STREQ (u.get_url_suffix_for_quoted_text ("#pragma message").get (),
 		"gcc/Diagnostic-Pragmas.html");
 
   // Incomplete prefix of a quoted_text
-  ASSERT_EQ (u.get_url_suffix_for_quoted_text ("#pragma mess"), nullptr);
+  ASSERT_EQ (u.get_url_suffix_for_quoted_text ("#pragma mess").get (), nullptr);
 
   /* Check that every element is findable.  */
   for (size_t idx = 0; idx < ARRAY_SIZE (doc_urls); idx++)
     ASSERT_STREQ
-      (u.get_url_suffix_for_quoted_text (doc_urls[idx].quoted_text),
+      (u.get_url_suffix_for_quoted_text (doc_urls[idx].quoted_text).get (),
        doc_urls[idx].url_suffix);
+
+  /* Check an option.  */
+  ASSERT_STREQ (u.get_url_suffix_for_quoted_text ("-fpack-struct").get (),
+		"gcc/Code-Gen-Options.html#index-fpack-struct");
 }
 
 } // namespace selftest
diff --git a/gcc/gcc-urlifier.def b/gcc/gcc-urlifier.def
index 360de930e9ec..de6d9a3eb962 100644
--- a/gcc/gcc-urlifier.def
+++ b/gcc/gcc-urlifier.def
@@ -16,5 +16,3 @@ DOC_URL ("#pragma pack", "gcc/Structure-Layout-Pragmas.html"),
 DOC_URL ("#pragma redefine_extname", "gcc/Symbol-Renaming-Pragmas.html"),
 DOC_URL ("#pragma scalar_storage_order", "gcc/Structure-Layout-Pragmas.html"),
 DOC_URL ("#pragma weak", "gcc/Weak-Pragmas.html"),
-DOC_URL ("--version", "gcc/Overall-Options.html#index-version"),
-DOC_URL ("-fpack-struct", "gcc/Code-Gen-Options.html#index-fpack-struct"),
diff --git a/gcc/gcc-urlifier.h b/gcc/gcc-urlifier.h
index 614e1c64b94d..77eb13463928 100644
--- a/gcc/gcc-urlifier.h
+++ b/gcc/gcc-urlifier.h
@@ -21,6 +21,6 @@ along with GCC; see the file COPYING3.  If not see
 #ifndef GCC_GCC_URLIFIER_H
 #define GCC_GCC_URLIFIER_H
 
-extern urlifier *make_gcc_urlifier ();
+extern urlifier *make_gcc_urlifier (unsigned int lang_mask);
 
 #endif /* GCC_GCC_URLIFIER_H */
diff --git a/gcc/gcc.cc b/gcc/gcc.cc
index 51120c1489e3..781cb343f18b 100644
--- a/gcc/gcc.cc
+++ b/gcc/gcc.cc
@@ -8292,7 +8292,7 @@ driver::global_initializations ()
   diagnostic_initialize (global_dc, 0);
   diagnostic_color_init (global_dc);
   diagnostic_urls_init (global_dc);
-  global_dc->set_urlifier (make_gcc_urlifier ());
+  global_dc->set_urlifier (make_gcc_urlifier (0));
 
 #ifdef GCC_DRIVER_HOST_INITIALIZATION
   /* Perform host dependent initialization when needed.  */
diff --git a/gcc/opts-diagnostic.h b/gcc/opts-diagnostic.h
index 8c3b695f07a2..5bede4ef48f3 100644
--- a/gcc/opts-diagnostic.h
+++ b/gcc/opts-diagnostic.h
@@ -24,6 +24,7 @@ extern char *option_name (const diagnostic_context *context, int option_index,
 			  diagnostic_t orig_diag_kind, diagnostic_t diag_kind);
 
 extern char *get_option_url (const diagnostic_context *context,
-			     int option_index);
+			     int option_index,
+			     unsigned lang_mask);
 
 #endif
diff --git a/gcc/opts.cc b/gcc/opts.cc
index 33165c9e74ff..72413a2bd643 100644
--- a/gcc/opts.cc
+++ b/gcc/opts.cc
@@ -3647,14 +3647,6 @@ get_option_html_page (int option_index)
 {
   const cl_option *cl_opt = &cl_options[option_index];
 
-  /* Analyzer options are on their own page.  */
-  if (strstr (cl_opt->opt_text, "analyzer-"))
-    return "gcc/Static-Analyzer-Options.html";
-
-  /* Handle -flto= option.  */
-  if (strstr (cl_opt->opt_text, "flto"))
-    return "gcc/Optimize-Options.html";
-
 #ifdef CL_Fortran
   if ((cl_opt->flags & CL_Fortran) != 0
       /* If it is option common to both C/C++ and Fortran, it is documented
@@ -3667,32 +3659,49 @@ get_option_html_page (int option_index)
     return "gfortran/Error-and-Warning-Options.html";
 #endif
 
-  return "gcc/Warning-Options.html";
+  return nullptr;
+}
+
+/* Get the url within the documentation for this option, or NULL.  */
+
+label_text
+get_option_url_suffix (int option_index, unsigned lang_mask)
+{
+  if (const char *url = get_opt_url_suffix (option_index, lang_mask))
+
+    return label_text::borrow (url);
+
+  /* Fallback code for some options that aren't handled byt opt_url_suffixes
+     e.g. links below "gfortran/".  */
+  if (const char *html_page = get_option_html_page (option_index))
+    return label_text::take
+      (concat (html_page,
+	       /* Expect an anchor of the form "index-Wfoo" e.g.
+		  <a name="index-Wformat"></a>, and thus an id within
+		  the page of "#index-Wformat".  */
+	       "#index",
+	       cl_options[option_index].opt_text,
+	       NULL));
+
+  return label_text ();
 }
 
 /* Return malloced memory for a URL describing the option OPTION_INDEX
    which enabled a diagnostic (context CONTEXT).  */
 
 char *
-get_option_url (const diagnostic_context *, int option_index)
+get_option_url (const diagnostic_context *,
+		int option_index,
+		unsigned lang_mask)
 {
   if (option_index)
-    return concat (/* DOCUMENTATION_ROOT_URL should be supplied via
-		      #include "config.h" (see --with-documentation-root-url),
-		      and should have a trailing slash.  */
-		   DOCUMENTATION_ROOT_URL,
-
-		   /* get_option_html_page will return something like
-		      "gcc/Warning-Options.html".  */
-		   get_option_html_page (option_index),
-
-		   /* Expect an anchor of the form "index-Wfoo" e.g.
-		      <a name="index-Wformat"></a>, and thus an id within
-		      the URL of "#index-Wformat".  */
-		   "#index", cl_options[option_index].opt_text,
-		   NULL);
-  else
-    return NULL;
+    {
+      label_text url_suffix = get_option_url_suffix (option_index, lang_mask);
+      if (url_suffix.get ())
+	return concat (DOCUMENTATION_ROOT_URL, url_suffix.get (), nullptr);
+    }
+
+  return nullptr;
 }
 
 /* Return a heap allocated producer with command line options.  */
@@ -3823,17 +3832,35 @@ gen_producer_string (const char *language_string, cl_decoded_option *options,
 
 namespace selftest {
 
-/* Verify that get_option_html_page works as expected.  */
+/* Verify that get_option_url_suffix works as expected.  */
 
 static void
-test_get_option_html_page ()
+test_get_option_url_suffix ()
 {
-  ASSERT_STREQ (get_option_html_page (OPT_Wcpp), "gcc/Warning-Options.html");
-  ASSERT_STREQ (get_option_html_page (OPT_Wanalyzer_double_free),
-	     "gcc/Static-Analyzer-Options.html");
+  ASSERT_STREQ (get_option_url_suffix (OPT_Wcpp, 0).get (),
+		"gcc/Warning-Options.html#index-Wcpp");
+  ASSERT_STREQ (get_option_url_suffix (OPT_Wanalyzer_double_free, 0).get (),
+		"gcc/Static-Analyzer-Options.html#index-Wanalyzer-double-free");
+
+  /* Test of a D-specific option.  */
+#ifdef CL_D
+  ASSERT_EQ (get_option_url_suffix (OPT_fbounds_check_, 0).get (), nullptr);
+  ASSERT_STREQ (get_option_url_suffix (OPT_fbounds_check_, CL_D).get (),
+		"gdc/Runtime-Options.html#index-fbounds-check");
+
+  /* Test of a D-specific override to an option URL.  */
+  /* Generic URL.  */
+  ASSERT_STREQ (get_option_url_suffix (OPT_fmax_errors_, 0).get (),
+		"gcc/Warning-Options.html#index-fmax-errors");
+  /* D-specific URL.  */
+  ASSERT_STREQ (get_option_url_suffix (OPT_fmax_errors_, CL_D).get (),
+		"gdc/Warnings.html#index-fmax-errors");
+#endif
+
 #ifdef CL_Fortran
-  ASSERT_STREQ (get_option_html_page (OPT_Wline_truncation),
-		"gfortran/Error-and-Warning-Options.html");
+  ASSERT_STREQ
+    (get_option_url_suffix (OPT_Wline_truncation, CL_Fortran).get (),
+     "gfortran/Error-and-Warning-Options.html#index-Wline-truncation");
 #endif
 }
 
@@ -3896,7 +3923,7 @@ test_enum_sets ()
 void
 opts_cc_tests ()
 {
-  test_get_option_html_page ();
+  test_get_option_url_suffix ();
   test_enum_sets ();
 }
 
diff --git a/gcc/opts.h b/gcc/opts.h
index 0e47d3425604..3f662f81a0ad 100644
--- a/gcc/opts.h
+++ b/gcc/opts.h
@@ -568,4 +568,7 @@ struct switchstr
   bool ordering;
 };
 
+extern label_text
+get_option_url_suffix (int option_index, unsigned lang_mask);
+
 #endif
diff --git a/gcc/testsuite/lib/gcc-dg.exp b/gcc/testsuite/lib/gcc-dg.exp
index 28529f57ef60..30642a72b756 100644
--- a/gcc/testsuite/lib/gcc-dg.exp
+++ b/gcc/testsuite/lib/gcc-dg.exp
@@ -46,6 +46,12 @@ if { [ishost "*-*-cygwin*"] } {
   setenv LANG C.ASCII
 }
 
+# Set TERM to xterm to ensure that URL escapes are disabled.
+# This avoids issues where a diagnostic which could embed a URL
+# is emitted before -fdiagnostics-plain-output is handled, where
+# otherwise the output could be affected by the environment.
+setenv TERM xterm
+
 # Avoid sporadic data-losses with expect
 match_max -d 10000
 
diff --git a/gcc/toplev.cc b/gcc/toplev.cc
index 8c3fcd337bee..fc65b6f46fa1 100644
--- a/gcc/toplev.cc
+++ b/gcc/toplev.cc
@@ -1044,12 +1044,13 @@ general_init (const char *argv0, bool init_signals)
   global_dc->m_show_column
     = global_options_init.x_flag_show_column;
   global_dc->m_internal_error = internal_error_function;
+  const unsigned lang_mask = lang_hooks.option_lang_mask ();
   global_dc->set_option_hooks (option_enabled,
 			       &global_options,
 			       option_name,
 			       get_option_url,
-			       lang_hooks.option_lang_mask ());
-  global_dc->set_urlifier (make_gcc_urlifier ());
+			       lang_mask);
+  global_dc->set_urlifier (make_gcc_urlifier (lang_mask));
 
   if (init_signals)
     {
-- 
2.26.3


^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH 0/4] v2 of Option handling: add documentation URLs
  2023-11-16 14:28       ` [PATCH 0/4] v2 of " David Malcolm
                           ` (3 preceding siblings ...)
  2023-11-16 14:28         ` [PATCH 4/4] options: wire up options-urls.cc into gcc_urlifier David Malcolm
@ 2023-11-21  1:09         ` Hans-Peter Nilsson
  2023-11-21 13:57           ` David Malcolm
  4 siblings, 1 reply; 47+ messages in thread
From: Hans-Peter Nilsson @ 2023-11-21  1:09 UTC (permalink / raw)
  To: David Malcolm; +Cc: joseph, gcc-patches, dmalcolm

> From: David Malcolm <dmalcolm@redhat.com>
> Date: Thu, 16 Nov 2023 09:28:54 -0500

> How is this looking for trunk?
> 
> Thanks
> Dave
> 
> 
> David Malcolm (4):
>   options: add gcc/regenerate-opt-urls.py
>   Add generated .opt.urls files
>   opts: add logic to generate options-urls.cc
>   options: wire up options-urls.cc into gcc_urlifier
> 
>  gcc/Makefile.in                              |   29 +-
>  gcc/ada/gcc-interface/lang.opt.urls          |   30 +
>  gcc/analyzer/analyzer.opt.urls               |  206 ++
>  gcc/c-family/c.opt.urls                      | 1409 ++++++++++++++
>  gcc/common.opt.urls                          | 1832 ++++++++++++++++++
>  gcc/config/aarch64/aarch64.opt.urls          |   84 +
>  gcc/config/alpha/alpha.opt.urls              |   76 +
>  gcc/config/alpha/elf.opt.urls                |    2 +
>  gcc/config/arc/arc-tables.opt.urls           |    2 +

[... etc .opt.urls particularly in gcc/config/*
autogenerated for each *.opt ...]

Sorry for barging in though I did try finding the relevant
discussion, but is committing this generated stuff necessary?
Is it because we don't want to depend on Python being
present at build time?

If nothing else, can you add a few lines to the commit
message why this can't be/is preferably not done at build
time?

brgds, H-P

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH 0/4] v2 of Option handling: add documentation URLs
  2023-11-21  1:09         ` [PATCH 0/4] v2 of Option handling: add documentation URLs Hans-Peter Nilsson
@ 2023-11-21 13:57           ` David Malcolm
  2023-11-21 14:12             ` Tobias Burnus
  0 siblings, 1 reply; 47+ messages in thread
From: David Malcolm @ 2023-11-21 13:57 UTC (permalink / raw)
  To: Hans-Peter Nilsson; +Cc: joseph, gcc-patches

On Tue, 2023-11-21 at 02:09 +0100, Hans-Peter Nilsson wrote:
> > From: David Malcolm <dmalcolm@redhat.com>
> > Date: Thu, 16 Nov 2023 09:28:54 -0500
> 
> > How is this looking for trunk?
> > 
> > Thanks
> > Dave
> > 
> > 
> > David Malcolm (4):
> >   options: add gcc/regenerate-opt-urls.py
> >   Add generated .opt.urls files
> >   opts: add logic to generate options-urls.cc
> >   options: wire up options-urls.cc into gcc_urlifier
> > 
> >  gcc/Makefile.in                              |   29 +-
> >  gcc/ada/gcc-interface/lang.opt.urls          |   30 +
> >  gcc/analyzer/analyzer.opt.urls               |  206 ++
> >  gcc/c-family/c.opt.urls                      | 1409 ++++++++++++++
> >  gcc/common.opt.urls                          | 1832
> > ++++++++++++++++++
> >  gcc/config/aarch64/aarch64.opt.urls          |   84 +
> >  gcc/config/alpha/alpha.opt.urls              |   76 +
> >  gcc/config/alpha/elf.opt.urls                |    2 +
> >  gcc/config/arc/arc-tables.opt.urls           |    2 +
> 
> [... etc .opt.urls particularly in gcc/config/*
> autogenerated for each *.opt ...]
> 
> Sorry for barging in though I did try finding the relevant
> discussion, but is committing this generated stuff necessary?
> Is it because we don't want to depend on Python being
> present at build time?

Partly, yes, but also because this information is generated from the
generated HTML for the user manuals: gcc, gdc, and gfortran, and it
gets used to generate "optionlist", which is a dependency for all of
the rest of the "gcc" subdirectory.  Doing it automatically would make
the generation of the HTML docs for gcc, d and gfortran be a hard
dependency early on in the build, which seems to me to be a bad idea -
better to have this rarely-changing and non-critical information be
regenerated when it's needed, and not impose the requirement to build
the HTML docs for all these langs on all builds of gcc.

> 
> If nothing else, can you add a few lines to the commit
> message why this can't be/is preferably not done at build
> time?

The wording here:
https://gcc.gnu.org/pipermail/gcc-patches/2023-November/636060.html
may be what you're looking for.

Maybe that text (or something like it) should go in as a big comment at
the top of regenerate-opt-urls.py ?

Hope this clarifies things
Dave


^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH 0/4] v2 of Option handling: add documentation URLs
  2023-11-21 13:57           ` David Malcolm
@ 2023-11-21 14:12             ` Tobias Burnus
  2023-11-21 15:23               ` David Malcolm
  2023-11-21 23:43               ` Joseph Myers
  0 siblings, 2 replies; 47+ messages in thread
From: Tobias Burnus @ 2023-11-21 14:12 UTC (permalink / raw)
  To: David Malcolm, gcc-patches

On 21.11.23 14:57, David Malcolm wrote:
> On Tue, 2023-11-21 at 02:09 +0100, Hans-Peter Nilsson wrote:
>> Sorry for barging in though I did try finding the relevant
>> discussion, but is committing this generated stuff necessary?
>> Is it because we don't want to depend on Python being
>> present at build time?
> Partly, yes, [...]

I wonder how to ensure that this remains up to date. Should there be an
item at

https://gcc.gnu.org/branching.html and/or
https://gcc.gnu.org/releasing.html similar to the .pot generation?

Tobias

-----------------
Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH 0/4] v2 of Option handling: add documentation URLs
  2023-11-21 14:12             ` Tobias Burnus
@ 2023-11-21 15:23               ` David Malcolm
  2023-11-21 23:43               ` Joseph Myers
  1 sibling, 0 replies; 47+ messages in thread
From: David Malcolm @ 2023-11-21 15:23 UTC (permalink / raw)
  To: Tobias Burnus, gcc-patches

On Tue, 2023-11-21 at 15:12 +0100, Tobias Burnus wrote:
> On 21.11.23 14:57, David Malcolm wrote:
> > On Tue, 2023-11-21 at 02:09 +0100, Hans-Peter Nilsson wrote:
> > > Sorry for barging in though I did try finding the relevant
> > > discussion, but is committing this generated stuff necessary?
> > > Is it because we don't want to depend on Python being
> > > present at build time?
> > Partly, yes, [...]
> 
> I wonder how to ensure that this remains up to date. Should there be
> an
> item at
> 
> https://gcc.gnu.org/branching.html and/or
> https://gcc.gnu.org/releasing.html similar to the .pot generation?

Good point; the releasing.html's Preparations could have as point 6:

  Regenerate the .opt.urls files by running "make regenerate-opt-urls"
in the build/gcc directory.

or similar.

We should also probably recommend that people do that when adding a new
option; is there a documentation page for that?

Dave


^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH 0/4] v2 of Option handling: add documentation URLs
  2023-11-21 14:12             ` Tobias Burnus
  2023-11-21 15:23               ` David Malcolm
@ 2023-11-21 23:43               ` Joseph Myers
  2023-12-08 23:35                 ` David Malcolm
  1 sibling, 1 reply; 47+ messages in thread
From: Joseph Myers @ 2023-11-21 23:43 UTC (permalink / raw)
  To: Tobias Burnus; +Cc: David Malcolm, gcc-patches

On Tue, 21 Nov 2023, Tobias Burnus wrote:

> On 21.11.23 14:57, David Malcolm wrote:
> > On Tue, 2023-11-21 at 02:09 +0100, Hans-Peter Nilsson wrote:
> > > Sorry for barging in though I did try finding the relevant
> > > discussion, but is committing this generated stuff necessary?
> > > Is it because we don't want to depend on Python being
> > > present at build time?
> > Partly, yes, [...]
> 
> I wonder how to ensure that this remains up to date. Should there be an
> item at
> 
> https://gcc.gnu.org/branching.html and/or
> https://gcc.gnu.org/releasing.html similar to the .pot generation?

My suggestion earlier in the discussion was that it should be added to the 
post-commit CI discussed starting at 
<https://gcc.gnu.org/pipermail/gcc/2023-November/242835.html> (I think 
that CI is now in operation).  These are generated files that ought to be 
kept up to date with each commit that affects .opt files, unlike the .pot 
files where the expectation is that they should be up to date for releases 
and updated from time to time at other times for submission to the TP.

-- 
Joseph S. Myers
joseph@codesourcery.com

^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH 0/4] v2 of Option handling: add documentation URLs
  2023-11-21 23:43               ` Joseph Myers
@ 2023-12-08 23:35                 ` David Malcolm
  2023-12-10 23:35                   ` Mark Wielaard
  0 siblings, 1 reply; 47+ messages in thread
From: David Malcolm @ 2023-12-08 23:35 UTC (permalink / raw)
  To: Joseph Myers, Tobias Burnus, Mark Wielaard; +Cc: gcc-patches

On Tue, 2023-11-21 at 23:43 +0000, Joseph Myers wrote:
> On Tue, 21 Nov 2023, Tobias Burnus wrote:
> 
> > On 21.11.23 14:57, David Malcolm wrote:
> > > On Tue, 2023-11-21 at 02:09 +0100, Hans-Peter Nilsson wrote:
> > > > Sorry for barging in though I did try finding the relevant
> > > > discussion, but is committing this generated stuff necessary?
> > > > Is it because we don't want to depend on Python being
> > > > present at build time?
> > > Partly, yes, [...]
> > 
> > I wonder how to ensure that this remains up to date. Should there
> > be an
> > item at
> > 
> > https://gcc.gnu.org/branching.html and/or
> > https://gcc.gnu.org/releasing.html similar to the .pot generation?
> 
> My suggestion earlier in the discussion was that it should be added
> to the 
> post-commit CI discussed starting at 
> <https://gcc.gnu.org/pipermail/gcc/2023-November/242835.html> (I
> think 
> that CI is now in operation).  These are generated files that ought
> to be 
> kept up to date with each commit that affects .opt files, unlike the
> .pot 
> files where the expectation is that they should be up to date for
> releases 
> and updated from time to time at other times for submission to the
> TP.

I had a go at scripting the testing of this, but I am terrible at shell
scripts (maybe I should use Python?).  Here's what I have so far:

$ cat contrib/regenerate-index-urls.sh

set -x

SRC_DIR=$1
BUILD_DIR=$2
NUM_JOBS=$3

# FIXME: error-checking!

mkdir -p $BUILD_DIR || exit 1
cd $BUILD_DIR
$SRC_DIR/configure --disable-bootstrap --enable-languages=c,d,fortran || exit 2
make html-gcc -j$NUM_JOBS || exit 3
cd gcc || exit 4
make regenerate-opt-urls || exit 5
cd $SRC_DIR
(git diff $1 > /dev/null ) && echo "regenerate-opt-urls needs to be run and the results committed" || exit 6

# e.g.
#  time bash contrib/regenerate-index-urls.sh $(pwd) $(pwd)/../build-ci 64

This takes about 100 seconds of wallclock on my 64-core box (mostly
configuring gcc, which as well as the usual sequence of unparallelized
tests seems to require building libiberty and lto-plugin).  Is that
something we want to do on every commit?  Is implementing the CI a
blocker for getting the patches in? (if so, I'll likely need some help)

As it turned out, I hadn't regenerated the .opt.urls in my working copy
for a couple of weeks, leading to a correct-looking patch containing
things like:

@@ -154,8 +157,8 @@ UrlSuffix(gcc/Warning-Options.html#index-Wbuiltin-declaration-mismatch) LangUrlS
 Wbuiltin-macro-redefined
 UrlSuffix(gcc/Warning-Options.html#index-Wbuiltin-macro-redefined)
 
-Wc11-c2x-compat
-UrlSuffix(gcc/Warning-Options.html#index-Wc11-c2x-compat)
+Wc11-c23-compat
+UrlSuffix(gcc/Warning-Options.html#index-Wc11-c23-compat)
 
 Wc90-c99-compat
 UrlSuffix(gcc/Warning-Options.html#index-Wc90-c99-compat)

so I think the idea works; and the only issue for not regenerating was
some missing/out-of-date URLs.

Dave



^ permalink raw reply	[flat|nested] 47+ messages in thread

* Re: [PATCH 0/4] v2 of Option handling: add documentation URLs
  2023-12-08 23:35                 ` David Malcolm
@ 2023-12-10 23:35                   ` Mark Wielaard
  2023-12-14 15:01                     ` [PATCH 0/4] v3 of: " David Malcolm
  0 siblings, 1 reply; 47+ messages in thread
From: Mark Wielaard @ 2023-12-10 23:35 UTC (permalink / raw)
  To: David Malcolm; +Cc: Joseph Myers, Tobias Burnus, gcc-patches

Hi David,

On Fri, Dec 08, 2023 at 06:35:56PM -0500, David Malcolm wrote:
> On Tue, 2023-11-21 at 23:43 +0000, Joseph Myers wrote:
> > On Tue, 21 Nov 2023, Tobias Burnus wrote:
> > 
> > > On 21.11.23 14:57, David Malcolm wrote:
> > > > On Tue, 2023-11-21 at 02:09 +0100, Hans-Peter Nilsson wrote:
> > > > > Sorry for barging in though I did try finding the relevant
> > > > > discussion, but is committing this generated stuff necessary?
> > > > > Is it because we don't want to depend on Python being
> > > > > present at build time?
> > > > Partly, yes, [...]
> > > 
> > > I wonder how to ensure that this remains up to date. Should there
> > > be an item at
> > > 
> > > https://gcc.gnu.org/branching.html and/or
> > > https://gcc.gnu.org/releasing.html similar to the .pot generation?
> >
> > My suggestion earlier in the discussion was that it should be
> > added to the post-commit CI discussed starting at
> > <https://gcc.gnu.org/pipermail/gcc/2023-November/242835.html> (I
> > think that CI is now in operation).  These are generated files
> > that ought to be kept up to date with each commit that affects
> > .opt files, unlike the .pot files where the expectation is that
> > they should be up to date for releases and updated from time to
> > time at other times for submission to the TP.
> > 
> I had a go at scripting the testing of this, but I am terrible at shell
> scripts (maybe I should use Python?).  Here's what I have so far:
> 
> $ cat contrib/regenerate-index-urls.sh
> 
> set -x
> 
> SRC_DIR=$1
> BUILD_DIR=$2
> NUM_JOBS=$3
> 
> # FIXME: error-checking!
> 
> mkdir -p $BUILD_DIR || exit 1
> cd $BUILD_DIR
> $SRC_DIR/configure --disable-bootstrap --enable-languages=c,d,fortran || exit 2
> make html-gcc -j$NUM_JOBS || exit 3
> cd gcc || exit 4
> make regenerate-opt-urls || exit 5
> cd $SRC_DIR
> (git diff $1 > /dev/null ) && echo "regenerate-opt-urls needs to be run and the results committed" || exit 6
> 
> # e.g.
> #  time bash contrib/regenerate-index-urls.sh $(pwd) $(pwd)/../build-ci 64
> 
> This takes about 100 seconds of wallclock on my 64-core box (mostly
> configuring gcc, which as well as the usual sequence of unparallelized
> tests seems to require building libiberty and lto-plugin).  Is that
> something we want to do on every commit?  Is implementing the CI a
> blocker for getting the patches in? (if so, I'll likely need some help)

The CI builers don't have 64-cores, but a couple of hundred seconds
shouldn't be an issue to do on each commit (OSUOSL just got us a
second x86_64 container builder for larger jobs). The above can easily
be added to the existing gcc-autoregen builder:
https://builder.sourceware.org/buildbot/#/builders/gcc-autoregen
https://sourceware.org/cgit/builder/tree/builder/master.cfg#n3453

Once your patch is in please feel free to sent an email to
buildbot@sourceware.org
https://sourceware.org/mailman/listinfo/buildbot
And we'll add the above build steps and update the autotools
Containerfile to include the fortran (gfortran?) and d (gdc?) build
dependencies.

Cheers,

Mark

^ permalink raw reply	[flat|nested] 47+ messages in thread

* [PATCH 0/4] v3 of: Option handling: add documentation URLs
  2023-12-10 23:35                   ` Mark Wielaard
@ 2023-12-14 15:01                     ` David Malcolm
  2023-12-14 15:01                       ` [PATCH 1/4; v3] options: add gcc/regenerate-opt-urls.py David Malcolm
                                         ` (5 more replies)
  0 siblings, 6 replies; 47+ messages in thread
From: David Malcolm @ 2023-12-14 15:01 UTC (permalink / raw)
  To: Joseph Myers; +Cc: Mark Wielaard, Tobias Burnus, gcc-patches, David Malcolm

> Hi David,
> 
> On Fri, Dec 08, 2023 at 06:35:56PM -0500, David Malcolm wrote:
> > On Tue, 2023-11-21 at 23:43 +0000, Joseph Myers wrote:
> > > On Tue, 21 Nov 2023, Tobias Burnus wrote:
> > > 
> > > > On 21.11.23 14:57, David Malcolm wrote:
> > > > > On Tue, 2023-11-21 at 02:09 +0100, Hans-Peter Nilsson wrote:
> > > > > > Sorry for barging in though I did try finding the relevant
> > > > > > discussion, but is committing this generated stuff necessary?
> > > > > > Is it because we don't want to depend on Python being
> > > > > > present at build time?
> > > > > Partly, yes, [...]
> > > > 
> > > > I wonder how to ensure that this remains up to date. Should there
> > > > be an item at
> > > > 
> > > > https://gcc.gnu.org/branching.html and/or
> > > > https://gcc.gnu.org/releasing.html similar to the .pot generation?
> > >
> > > My suggestion earlier in the discussion was that it should be
> > > added to the post-commit CI discussed starting at
> > > <https://gcc.gnu.org/pipermail/gcc/2023-November/242835.html> (I
> > > think that CI is now in operation).  These are generated files
> > > that ought to be kept up to date with each commit that affects
> > > .opt files, unlike the .pot files where the expectation is that
> > > they should be up to date for releases and updated from time to
> > > time at other times for submission to the TP.
> > > 
> > I had a go at scripting the testing of this, but I am terrible at shell
> > scripts (maybe I should use Python?).  Here's what I have so far:
> > 
> > $ cat contrib/regenerate-index-urls.sh
> > 
> > set -x
> > 
> > SRC_DIR=$1
> > BUILD_DIR=$2
> > NUM_JOBS=$3
> > 
> > # FIXME: error-checking!
> > 
> > mkdir -p $BUILD_DIR || exit 1
> > cd $BUILD_DIR
> > $SRC_DIR/configure --disable-bootstrap --enable-languages=c,d,fortran || exit 2
> > make html-gcc -j$NUM_JOBS || exit 3
> > cd gcc || exit 4
> > make regenerate-opt-urls || exit 5
> > cd $SRC_DIR
> > (git diff $1 > /dev/null ) && echo "regenerate-opt-urls needs to be run and the results committed" || exit 6
> > 
> > # e.g.
> > #  time bash contrib/regenerate-index-urls.sh $(pwd) $(pwd)/../build-ci 64
> > 
> > This takes about 100 seconds of wallclock on my 64-core box (mostly
> > configuring gcc, which as well as the usual sequence of unparallelized
> > tests seems to require building libiberty and lto-plugin).  Is that
> > something we want to do on every commit?  Is implementing the CI a
> > blocker for getting the patches in? (if so, I'll likely need some help)
> 
> The CI builers don't have 64-cores, but a couple of hundred seconds
> shouldn't be an issue to do on each commit (OSUOSL just got us a
> second x86_64 container builder for larger jobs). The above can easily
> be added to the existing gcc-autoregen builder:
> https://builder.sourceware.org/buildbot/#/builders/gcc-autoregen
> https://sourceware.org/cgit/builder/tree/builder/master.cfg#n3453
> 
> Once your patch is in please feel free to sent an email to
> buildbot@sourceware.org
> https://sourceware.org/mailman/listinfo/buildbot
> And we'll add the above build steps and update the autotools
> Containerfile to include the fortran (gfortran?) and d (gdc?) build
> dependencies.
> 
> Cheers,
> 
> Mark

Thanks Mark.

Joseph: it seems that we have a way to add CI for this.

I refreshed the patches and successfully bootstrapped & regrtested them
on x86_64-pc-linux-gnu; here's the v3 version of them.

Are these OK for trunk, assuming I followup with adding CI for this?
(that said, I disappear for the rest of 2023 at the end of this week, so
I'd work on the CI in early January)

Thanks
Dave


David Malcolm (4):
  options: add gcc/regenerate-opt-urls.py
  Add generated .opt.urls files
  opts: add logic to generate options-urls.cc
  options: wire up options-urls.cc into gcc_urlifier

 gcc/Makefile.in                              |   34 +-
 gcc/ada/gcc-interface/lang.opt.urls          |   30 +
 gcc/analyzer/analyzer.opt.urls               |  206 ++
 gcc/c-family/c.opt.urls                      | 1409 ++++++++++++++
 gcc/common.opt.urls                          | 1832 ++++++++++++++++++
 gcc/config/aarch64/aarch64.opt.urls          |   84 +
 gcc/config/alpha/alpha.opt.urls              |   76 +
 gcc/config/alpha/elf.opt.urls                |    2 +
 gcc/config/arc/arc-tables.opt.urls           |    2 +
 gcc/config/arc/arc.opt.urls                  |  260 +++
 gcc/config/arm/arm-tables.opt.urls           |    2 +
 gcc/config/arm/arm.opt.urls                  |  149 ++
 gcc/config/arm/vxworks.opt.urls              |    2 +
 gcc/config/avr/avr.opt.urls                  |   71 +
 gcc/config/bfin/bfin.opt.urls                |   61 +
 gcc/config/bpf/bpf.opt.urls                  |   35 +
 gcc/config/c6x/c6x-tables.opt.urls           |    2 +
 gcc/config/c6x/c6x.opt.urls                  |   18 +
 gcc/config/cris/cris.opt.urls                |   65 +
 gcc/config/cris/elf.opt.urls                 |    8 +
 gcc/config/csky/csky.opt.urls                |  104 +
 gcc/config/csky/csky_tables.opt.urls         |    2 +
 gcc/config/darwin.opt.urls                   |  224 +++
 gcc/config/dragonfly.opt.urls                |    9 +
 gcc/config/epiphany/epiphany.opt.urls        |   52 +
 gcc/config/fr30/fr30.opt.urls                |    8 +
 gcc/config/freebsd.opt.urls                  |    9 +
 gcc/config/frv/frv.opt.urls                  |  111 ++
 gcc/config/ft32/ft32.opt.urls                |   20 +
 gcc/config/fused-madd.opt.urls               |    4 +
 gcc/config/g.opt.urls                        |    5 +
 gcc/config/gcn/gcn.opt.urls                  |   23 +
 gcc/config/gnu-user.opt.urls                 |    9 +
 gcc/config/h8300/h8300.opt.urls              |   29 +
 gcc/config/hpux11.opt.urls                   |    6 +
 gcc/config/i386/cygming.opt.urls             |   30 +
 gcc/config/i386/cygwin.opt.urls              |    6 +
 gcc/config/i386/djgpp.opt.urls               |    2 +
 gcc/config/i386/i386.opt.urls                |  602 ++++++
 gcc/config/i386/mingw-w64.opt.urls           |    5 +
 gcc/config/i386/mingw.opt.urls               |   12 +
 gcc/config/i386/nto.opt.urls                 |    5 +
 gcc/config/ia64/ia64.opt.urls                |  122 ++
 gcc/config/ia64/ilp32.opt.urls               |    8 +
 gcc/config/ia64/vms.opt.urls                 |    2 +
 gcc/config/iq2000/iq2000.opt.urls            |   14 +
 gcc/config/linux-android.opt.urls            |   11 +
 gcc/config/linux.opt.urls                    |   14 +
 gcc/config/lm32/lm32.opt.urls                |   14 +
 gcc/config/loongarch/loongarch.opt.urls      |   64 +
 gcc/config/lynx.opt.urls                     |    5 +
 gcc/config/m32c/m32c.opt.urls                |    8 +
 gcc/config/m32r/m32r.opt.urls                |   27 +
 gcc/config/m68k/ieee.opt.urls                |    4 +
 gcc/config/m68k/m68k-tables.opt.urls         |    2 +
 gcc/config/m68k/m68k.opt.urls                |  107 +
 gcc/config/m68k/uclinux.opt.urls             |    2 +
 gcc/config/mcore/mcore.opt.urls              |   38 +
 gcc/config/microblaze/microblaze.opt.urls    |   59 +
 gcc/config/mips/mips-tables.opt.urls         |    2 +
 gcc/config/mips/mips.opt.urls                |  269 +++
 gcc/config/mips/sde.opt.urls                 |    2 +
 gcc/config/mmix/mmix.opt.urls                |   44 +
 gcc/config/mn10300/mn10300.opt.urls          |   32 +
 gcc/config/moxie/moxie.opt.urls              |   14 +
 gcc/config/msp430/msp430.opt.urls            |   53 +
 gcc/config/nds32/nds32-elf.opt.urls          |    5 +
 gcc/config/nds32/nds32-linux.opt.urls        |    5 +
 gcc/config/nds32/nds32.opt.urls              |   57 +
 gcc/config/netbsd-elf.opt.urls               |    5 +
 gcc/config/netbsd.opt.urls                   |    6 +
 gcc/config/nios2/elf.opt.urls                |   14 +
 gcc/config/nios2/nios2.opt.urls              |   50 +
 gcc/config/nvptx/nvptx-gen.opt.urls          |    2 +
 gcc/config/nvptx/nvptx.opt.urls              |   29 +
 gcc/config/openbsd.opt.urls                  |    6 +
 gcc/config/or1k/elf.opt.urls                 |    8 +
 gcc/config/or1k/or1k.opt.urls                |   46 +
 gcc/config/pa/pa-hpux.opt.urls               |   11 +
 gcc/config/pa/pa-hpux1010.opt.urls           |    2 +
 gcc/config/pa/pa-hpux1111.opt.urls           |    2 +
 gcc/config/pa/pa-hpux1131.opt.urls           |    2 +
 gcc/config/pa/pa.opt.urls                    |   71 +
 gcc/config/pa/pa64-hpux.opt.urls             |    8 +
 gcc/config/pdp11/pdp11.opt.urls              |   41 +
 gcc/config/pru/pru.opt.urls                  |   17 +
 gcc/config/riscv/riscv.opt.urls              |   88 +
 gcc/config/rl78/rl78.opt.urls                |   31 +
 gcc/config/rpath.opt.urls                    |    2 +
 gcc/config/rs6000/476.opt.urls               |    2 +
 gcc/config/rs6000/aix64.opt.urls             |   23 +
 gcc/config/rs6000/darwin.opt.urls            |   14 +
 gcc/config/rs6000/linux64.opt.urls           |    4 +
 gcc/config/rs6000/rs6000-tables.opt.urls     |    2 +
 gcc/config/rs6000/rs6000.opt.urls            |  214 ++
 gcc/config/rs6000/sysv4.opt.urls             |   87 +
 gcc/config/rtems.opt.urls                    |    6 +
 gcc/config/rx/elf.opt.urls                   |   14 +
 gcc/config/rx/rx.opt.urls                    |   54 +
 gcc/config/s390/s390.opt.urls                |   92 +
 gcc/config/s390/tpf.opt.urls                 |    8 +
 gcc/config/sh/sh.opt.urls                    |  174 ++
 gcc/config/sh/superh.opt.urls                |    4 +
 gcc/config/sol2.opt.urls                     |   21 +
 gcc/config/sparc/long-double-switch.opt.urls |    6 +
 gcc/config/sparc/sparc.opt.urls              |  108 ++
 gcc/config/stormy16/stormy16.opt.urls        |    5 +
 gcc/config/v850/v850.opt.urls                |   60 +
 gcc/config/vax/elf.opt.urls                  |    2 +
 gcc/config/vax/vax.opt.urls                  |   10 +
 gcc/config/visium/visium.opt.urls            |   29 +
 gcc/config/vms/vms.opt.urls                  |    8 +
 gcc/config/vxworks-smp.opt.urls              |    5 +
 gcc/config/vxworks.opt.urls                  |   20 +
 gcc/config/xtensa/elf.opt.urls               |    5 +
 gcc/config/xtensa/uclinux.opt.urls           |    2 +
 gcc/config/xtensa/xtensa.opt.urls            |   37 +
 gcc/d/lang.opt.urls                          |  223 +++
 gcc/diagnostic.h                             |    6 +-
 gcc/doc/options.texi                         |   26 +
 gcc/doc/sourcebuild.texi                     |    4 +
 gcc/fortran/lang.opt.urls                    |  161 ++
 gcc/gcc-urlifier.cc                          |  106 +-
 gcc/gcc-urlifier.def                         |    2 -
 gcc/gcc-urlifier.h                           |    2 +-
 gcc/gcc.cc                                   |    2 +-
 gcc/go/lang.opt.urls                         |   17 +
 gcc/lto/lang.opt.urls                        |    8 +
 gcc/m2/lang.opt.urls                         |  118 ++
 gcc/opt-functions.awk                        |   15 +
 gcc/options-urls-cc-gen.awk                  |  105 +
 gcc/opts-diagnostic.h                        |    3 +-
 gcc/opts.cc                                  |   95 +-
 gcc/opts.h                                   |    8 +
 gcc/params.opt.urls                          |    2 +
 gcc/regenerate-opt-urls.py                   |  408 ++++
 gcc/rust/lang.opt.urls                       |   29 +
 gcc/testsuite/lib/gcc-dg.exp                 |    6 +
 gcc/toplev.cc                                |    5 +-
 139 files changed, 9351 insertions(+), 66 deletions(-)
 create mode 100644 gcc/ada/gcc-interface/lang.opt.urls
 create mode 100644 gcc/analyzer/analyzer.opt.urls
 create mode 100644 gcc/c-family/c.opt.urls
 create mode 100644 gcc/common.opt.urls
 create mode 100644 gcc/config/aarch64/aarch64.opt.urls
 create mode 100644 gcc/config/alpha/alpha.opt.urls
 create mode 100644 gcc/config/alpha/elf.opt.urls
 create mode 100644 gcc/config/arc/arc-tables.opt.urls
 create mode 100644 gcc/config/arc/arc.opt.urls
 create mode 100644 gcc/config/arm/arm-tables.opt.urls
 create mode 100644 gcc/config/arm/arm.opt.urls
 create mode 100644 gcc/config/arm/vxworks.opt.urls
 create mode 100644 gcc/config/avr/avr.opt.urls
 create mode 100644 gcc/config/bfin/bfin.opt.urls
 create mode 100644 gcc/config/bpf/bpf.opt.urls
 create mode 100644 gcc/config/c6x/c6x-tables.opt.urls
 create mode 100644 gcc/config/c6x/c6x.opt.urls
 create mode 100644 gcc/config/cris/cris.opt.urls
 create mode 100644 gcc/config/cris/elf.opt.urls
 create mode 100644 gcc/config/csky/csky.opt.urls
 create mode 100644 gcc/config/csky/csky_tables.opt.urls
 create mode 100644 gcc/config/darwin.opt.urls
 create mode 100644 gcc/config/dragonfly.opt.urls
 create mode 100644 gcc/config/epiphany/epiphany.opt.urls
 create mode 100644 gcc/config/fr30/fr30.opt.urls
 create mode 100644 gcc/config/freebsd.opt.urls
 create mode 100644 gcc/config/frv/frv.opt.urls
 create mode 100644 gcc/config/ft32/ft32.opt.urls
 create mode 100644 gcc/config/fused-madd.opt.urls
 create mode 100644 gcc/config/g.opt.urls
 create mode 100644 gcc/config/gcn/gcn.opt.urls
 create mode 100644 gcc/config/gnu-user.opt.urls
 create mode 100644 gcc/config/h8300/h8300.opt.urls
 create mode 100644 gcc/config/hpux11.opt.urls
 create mode 100644 gcc/config/i386/cygming.opt.urls
 create mode 100644 gcc/config/i386/cygwin.opt.urls
 create mode 100644 gcc/config/i386/djgpp.opt.urls
 create mode 100644 gcc/config/i386/i386.opt.urls
 create mode 100644 gcc/config/i386/mingw-w64.opt.urls
 create mode 100644 gcc/config/i386/mingw.opt.urls
 create mode 100644 gcc/config/i386/nto.opt.urls
 create mode 100644 gcc/config/ia64/ia64.opt.urls
 create mode 100644 gcc/config/ia64/ilp32.opt.urls
 create mode 100644 gcc/config/ia64/vms.opt.urls
 create mode 100644 gcc/config/iq2000/iq2000.opt.urls
 create mode 100644 gcc/config/linux-android.opt.urls
 create mode 100644 gcc/config/linux.opt.urls
 create mode 100644 gcc/config/lm32/lm32.opt.urls
 create mode 100644 gcc/config/loongarch/loongarch.opt.urls
 create mode 100644 gcc/config/lynx.opt.urls
 create mode 100644 gcc/config/m32c/m32c.opt.urls
 create mode 100644 gcc/config/m32r/m32r.opt.urls
 create mode 100644 gcc/config/m68k/ieee.opt.urls
 create mode 100644 gcc/config/m68k/m68k-tables.opt.urls
 create mode 100644 gcc/config/m68k/m68k.opt.urls
 create mode 100644 gcc/config/m68k/uclinux.opt.urls
 create mode 100644 gcc/config/mcore/mcore.opt.urls
 create mode 100644 gcc/config/microblaze/microblaze.opt.urls
 create mode 100644 gcc/config/mips/mips-tables.opt.urls
 create mode 100644 gcc/config/mips/mips.opt.urls
 create mode 100644 gcc/config/mips/sde.opt.urls
 create mode 100644 gcc/config/mmix/mmix.opt.urls
 create mode 100644 gcc/config/mn10300/mn10300.opt.urls
 create mode 100644 gcc/config/moxie/moxie.opt.urls
 create mode 100644 gcc/config/msp430/msp430.opt.urls
 create mode 100644 gcc/config/nds32/nds32-elf.opt.urls
 create mode 100644 gcc/config/nds32/nds32-linux.opt.urls
 create mode 100644 gcc/config/nds32/nds32.opt.urls
 create mode 100644 gcc/config/netbsd-elf.opt.urls
 create mode 100644 gcc/config/netbsd.opt.urls
 create mode 100644 gcc/config/nios2/elf.opt.urls
 create mode 100644 gcc/config/nios2/nios2.opt.urls
 create mode 100644 gcc/config/nvptx/nvptx-gen.opt.urls
 create mode 100644 gcc/config/nvptx/nvptx.opt.urls
 create mode 100644 gcc/config/openbsd.opt.urls
 create mode 100644 gcc/config/or1k/elf.opt.urls
 create mode 100644 gcc/config/or1k/or1k.opt.urls
 create mode 100644 gcc/config/pa/pa-hpux.opt.urls
 create mode 100644 gcc/config/pa/pa-hpux1010.opt.urls
 create mode 100644 gcc/config/pa/pa-hpux1111.opt.urls
 create mode 100644 gcc/config/pa/pa-hpux1131.opt.urls
 create mode 100644 gcc/config/pa/pa.opt.urls
 create mode 100644 gcc/config/pa/pa64-hpux.opt.urls
 create mode 100644 gcc/config/pdp11/pdp11.opt.urls
 create mode 100644 gcc/config/pru/pru.opt.urls
 create mode 100644 gcc/config/riscv/riscv.opt.urls
 create mode 100644 gcc/config/rl78/rl78.opt.urls
 create mode 100644 gcc/config/rpath.opt.urls
 create mode 100644 gcc/config/rs6000/476.opt.urls
 create mode 100644 gcc/config/rs6000/aix64.opt.urls
 create mode 100644 gcc/config/rs6000/darwin.opt.urls
 create mode 100644 gcc/config/rs6000/linux64.opt.urls
 create mode 100644 gcc/config/rs6000/rs6000-tables.opt.urls
 create mode 100644 gcc/config/rs6000/rs6000.opt.urls
 create mode 100644 gcc/config/rs6000/sysv4.opt.urls
 create mode 100644 gcc/config/rtems.opt.urls
 create mode 100644 gcc/config/rx/elf.opt.urls
 create mode 100644 gcc/config/rx/rx.opt.urls
 create mode 100644 gcc/config/s390/s390.opt.urls
 create mode 100644 gcc/config/s390/tpf.opt.urls
 create mode 100644 gcc/config/sh/sh.opt.urls
 create mode 100644 gcc/config/sh/superh.opt.urls
 create mode 100644 gcc/config/sol2.opt.urls
 create mode 100644 gcc/config/sparc/long-double-switch.opt.urls
 create mode 100644 gcc/config/sparc/sparc.opt.urls
 create mode 100644 gcc/config/stormy16/stormy16.opt.urls
 create mode 100644 gcc/config/v850/v850.opt.urls
 create mode 100644 gcc/config/vax/elf.opt.urls
 create mode 100644 gcc/config/vax/vax.opt.urls
 create mode 100644 gcc/config/visium/visium.opt.urls
 create mode 100644 gcc/config/vms/vms.opt.urls
 create mode 100644 gcc/config/vxworks-smp.opt.urls
 create mode 100644 gcc/config/vxworks.opt.urls
 create mode 100644 gcc/config/xtensa/elf.opt.urls
 create mode 100644 gcc/config/xtensa/uclinux.opt.urls
 create mode 100644 gcc/config/xtensa/xtensa.opt.urls
 create mode 100644 gcc/d/lang.opt.urls
 create mode 100644 gcc/fortran/lang.opt.urls
 create mode 100644 gcc/go/lang.opt.urls
 create mode 100644 gcc/lto/lang.opt.urls
 create mode 100644 gcc/m2/lang.opt.urls
 create mode 100644 gcc/options-urls-cc-gen.awk
 create mode 100644 gcc/params.opt.urls
 create mode 100755 gcc/regenerate-opt-urls.py
 create mode 100644 gcc/rust/lang.opt.urls

-- 
2.26.3


^ permalink raw reply	[flat|nested] 47+ messages in thread

* [PATCH 1/4; v3] options: add gcc/regenerate-opt-urls.py
  2023-12-14 15:01                     ` [PATCH 0/4] v3 of: " David Malcolm
@ 2023-12-14 15:01                       ` David Malcolm
  2023-12-20  0:24                         ` Joseph Myers
  2023-12-14 15:01                       ` [PATCH 2/4; v3] Add generated .opt.urls files David Malcolm
                                         ` (4 subsequent siblings)
  5 siblings, 1 reply; 47+ messages in thread
From: David Malcolm @ 2023-12-14 15:01 UTC (permalink / raw)
  To: Joseph Myers; +Cc: Mark Wielaard, Tobias Burnus, gcc-patches, David Malcolm

Changed in v3:
- Makefile.in: added OPT_URLS_HTML_DEPS and a comment

Changed in v2:
- added convenience targets to Makefile for regenerating the .opt.urls
  files, and for running unit tests for the generation code
- parse gdc and gfortran documentation, and create LangUrlSuffix_{lang}
directives for language-specific URLs.
- add documentation to sourcebuild.texi

gcc/ChangeLog:
	* Makefile.in (OPT_URLS_HTML_DEPS): New.
	(regenerate-opt-urls): New target.
	(regenerate-opt-urls-unit-test): New target.
	* doc/options.texi (Option properties): Add UrlSuffix and
	description of regenerate-opt-urls.py.  Add LangUrlSuffix_*.
	* doc/sourcebuild.texi (Anatomy of a Target Back End): Add
	reference to regenerate-opt-urls.py's TARGET_SPECIFIC_PAGES.
	* regenerate-opt-urls.py: New file.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
---
 gcc/Makefile.in            |  16 ++
 gcc/doc/options.texi       |  26 +++
 gcc/doc/sourcebuild.texi   |   4 +
 gcc/regenerate-opt-urls.py | 408 +++++++++++++++++++++++++++++++++++++
 4 files changed, 454 insertions(+)
 create mode 100755 gcc/regenerate-opt-urls.py

diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index f284c1387e27..d85953495ce8 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -3611,6 +3611,22 @@ $(build_htmldir)/gccinstall/index.html: $(TEXI_GCCINSTALL_FILES)
 	DESTDIR=$(@D) \
 	$(SHELL) $(srcdir)/doc/install.texi2html
 
+# Regenerate the .opt.urls files from the generated html, and from the .opt
+# files.  Doing so requires all languages that have their own HTML manuals
+# to be enabled.
+.PHONY: regenerate-opt-urls
+OPT_URLS_HTML_DEPS = $(build_htmldir)/gcc/Option-Index.html \
+	$(build_htmldir)/gdc/Option-Index.html \
+	$(build_htmldir)/gfortran/Option-Index.html
+
+regenerate-opt-urls: $(srcdir)/regenerate-opt-urls.py $(OPT_URLS_HTML_DEPS)
+	$(srcdir)/regenerate-opt-urls.py $(build_htmldir) $(shell dirname $(srcdir))
+
+# Run the unit tests for regenerate-opt-urls.py
+.PHONY: regenerate-opt-urls-unit-test
+regenerate-opt-urls-unit-test: $(OPT_URLS_HTML_DEPS)
+	$(srcdir)/regenerate-opt-urls.py $(build_htmldir) $(shell dirname $(srcdir)) --unit-test
+
 MANFILES = doc/gcov.1 doc/cpp.1 doc/gcc.1 doc/gfdl.7 doc/gpl.7 \
            doc/fsf-funding.7 doc/gcov-tool.1 doc/gcov-dump.1 \
 	   $(if $(filter yes,@enable_lto@),doc/lto-dump.1)
diff --git a/gcc/doc/options.texi b/gcc/doc/options.texi
index 715f0a1479c7..37d7ecc1477d 100644
--- a/gcc/doc/options.texi
+++ b/gcc/doc/options.texi
@@ -597,4 +597,30 @@ This warning option corresponds to @code{cpplib.h} warning reason code
 @var{CPP_W_Enum}.  This should only be used for warning options of the
 C-family front-ends.
 
+@item UrlSuffix(@var{url_suffix})
+Adjacent to each human-written @code{.opt} file in the source tree is
+a corresponding file with a @code{.opt.urls} extension.  These files
+contain @code{UrlSuffix} directives giving the ending part of the URL
+for the documentation of the option, such as:
+
+@smallexample
+Wabi-tag
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wabi-tag)
+@end smallexample
+
+These URL suffixes are relative to @code{DOCUMENTATION_ROOT_URL}.
+
+There files are generated from the @code{.opt} files and the generated
+HTML documentation by @code{regenerate-opt-urls.py}, and should be
+regenerated when adding new options, via manually invoking
+@code{make regenerate-opt-urls}.
+
+@item LangUrlSuffix_@var{lang}(@var{url_suffix})
+In addition to @code{UrlSuffix} directives, @code{regenerate-opt-urls.py}
+can generate language-specific URLs, such as:
+
+@smallexample
+LangUrlSuffix_D(gdc/Code-Generation.html#index-MMD)
+@end smallexample
+
 @end table
diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi
index 26a7e9c35070..9a394b3e2c77 100644
--- a/gcc/doc/sourcebuild.texi
+++ b/gcc/doc/sourcebuild.texi
@@ -813,6 +813,10 @@ options supported by this target (@pxref{Run-time Target, , Run-time
 Target Specification}).  This means both entries in the summary table
 of options and details of the individual options.
 @item
+An entry in @file{gcc/regenerate-opt-urls.py}'s TARGET_SPECIFIC_PAGES
+dictionary mapping from target-specific HTML documentation pages
+to the target specific source directory.
+@item
 Documentation in @file{gcc/doc/extend.texi} for any target-specific
 attributes supported (@pxref{Target Attributes, , Defining
 target-specific uses of @code{__attribute__}}), including where the
diff --git a/gcc/regenerate-opt-urls.py b/gcc/regenerate-opt-urls.py
new file mode 100755
index 000000000000..b123fc57c7b9
--- /dev/null
+++ b/gcc/regenerate-opt-urls.py
@@ -0,0 +1,408 @@
+#!/usr/bin/env python3
+
+# Copyright (C) 2023 Free Software Foundation, Inc.
+#
+# Script to regenerate FOO.opt.urls files for each FOO.opt in the
+# source tree.
+#
+# 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/>.  */
+
+DESCRIPTION = """
+Parses the generated HTML (from "make html") to locate anchors
+for options, then parses the .opt files within the source tree,
+and generates a .opt.urls in the source tree for each .opt file,
+giving URLs for each option, where it can.
+
+Usage (from build/gcc subdirectory):
+  ../../src/gcc/regenerate-opt-urls.py HTML/gcc-14.0.0/ ../../src
+
+To run unit tests:
+  ../../src/gcc/regenerate-opt-urls.py HTML/gcc-14.0.0/ ../../src --unit-test
+"""
+
+import argparse
+import json
+import os
+from pathlib import Path
+from pprint import pprint
+import sys
+import re
+import unittest
+
+def canonicalize_option_name(option_name):
+    if option_name.endswith('='):
+        option_name = option_name[0:-1]
+    return option_name
+
+
+def canonicalize_url_suffix(url_suffix):
+    """
+    Various options have anchors for both the positive and
+    negative form.  For example -Wcpp has both:
+      'gcc/Warning-Options.html#index-Wno-cpp'
+      'gcc/Warning-Options.html#index-Wcpp'
+
+    Return a canonicalized version of the url_suffix that
+    strips out any "no-" prefixes, for use in deduplication.
+    Note that the resulting url suffix might not correspond to
+    an actual anchor in the HTML.
+    """
+    url_suffix = re.sub('index-Wno-', 'index-W', url_suffix)
+    url_suffix = re.sub('index-fno-', 'index-f', url_suffix)
+    url_suffix = re.sub('_003d$', '', url_suffix)
+    url_suffix = re.sub('-([0-9]+)$', '', url_suffix)
+    return url_suffix
+
+
+class Index:
+    def __init__(self):
+        # Map from language (or None) to map from option name to set of URL suffixes
+        self.entries = {}
+
+    def add_entry(self, matched_text, url_suffix, language, verbose=False):
+        # TODO: use language
+        if 'Attributes.html' in url_suffix:
+            return
+        matched_text = canonicalize_option_name(matched_text)
+        if language not in self.entries:
+            self.entries[language] = {}
+        per_lang_entries = self.entries[language]
+        if matched_text in per_lang_entries:
+            # Partition by canonicalized url_suffixes; add the
+            # first url_suffix in each such partition.
+            c_new = canonicalize_url_suffix(url_suffix)
+            for entry in per_lang_entries[matched_text]:
+                c_entry = canonicalize_url_suffix(entry)
+                if c_new == c_entry:
+                    return
+            per_lang_entries[matched_text].add(url_suffix)
+        else:
+            per_lang_entries[matched_text] = set([url_suffix])
+
+    def get_languages(self):
+        return self.entries.keys()
+
+    def get_url_suffixes(self, text, language=None):
+        text = canonicalize_option_name(text)
+        per_lang_entries = self.entries.get(language)
+        if per_lang_entries:
+            return per_lang_entries.get(text)
+
+    def parse_option_index(self, input_filename, language, verbose=False):
+        with open(input_filename) as f:
+            dirname = input_filename.parent.name
+            for line in f:
+                self.parse_html_line_option_index(dirname, line, language, verbose)
+
+    def parse_html_line_option_index(self, dirname, line, language, verbose=False):
+        if verbose:
+            print(repr(line))
+
+        # Update for this in the GCC website's bin/preprocess process_html_file:
+        #   | sed -e 's/_002d/-/g' -e 's/_002a/*/g' \
+        line = line.replace('_002d', '-')
+        line = line.replace('_002a', '*')
+
+        # e.g. <a href="Optimize-Options.html#index-fmodulo_002dsched"><code>fmodulo-sched</code></a>
+        m = re.search(r'<a href="([\S]+)"><code>([\S]+)</code></a>', line)
+        if not m:
+            return
+        if verbose:
+            print(m.groups())
+        url_suffix, index_text = m.groups()
+        #print(f'{url_suffix=} {index_text=}')
+        option = '-' + index_text
+
+        # Strip off "no-" prefixes from options
+        if option[:5] == '-Wno-':
+            option = '-W' + option[5:]
+        if option[:5] == '-fno-':
+            option = '-f' + option[5:]
+
+        url_suffix = dirname + '/' + url_suffix
+        self.add_entry(option, url_suffix, language, verbose)
+
+
+class TestParsingIndex(unittest.TestCase):
+    def test_parse_line(self):
+        index = Index()
+        index.parse_html_line_option_index('gcc',
+                                           '<a href="Optimize-Options.html#index-fmodulo_002dsched"><code>fmodulo-sched</code></a>',
+                                           None)
+        self.assertEqual(index.get_url_suffixes('-fmodulo-sched'),
+                         {'gcc/Optimize-Options.html#index-fmodulo-sched'})
+
+    def test_negated_flag(self):
+        index = Index()
+        index.parse_html_line_option_index('gcc',
+                                           '<tr><td></td><td valign="top"><a href="Static-Analyzer-Options.html#index-fno_002danalyzer"><code>fno-analyzer</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Static-Analyzer-Options.html">Static Analyzer Options</a></td></tr>\n',
+                                           None)
+        self.assertEqual(index.get_url_suffixes('-fno-analyzer'), None)
+        self.assertEqual(index.get_url_suffixes('-fanalyzer'),
+                         {'gcc/Static-Analyzer-Options.html#index-fno-analyzer'})
+
+    def test_negated_warning(self):
+        index = Index()
+        index.parse_html_line_option_index('gcc',
+                                           '<tr><td></td><td valign="top"><a href="Warning-Options.html#index-Wno_002dalloca"><code>Wno-alloca</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="Warning-Options.html">Warning Options</a></td></tr>\n',
+                                           None)
+        self.assertEqual(index.get_url_suffixes('-Wno-alloca'),
+                         None)
+        self.assertEqual(index.get_url_suffixes('-Walloca'),
+                         {'gcc/Warning-Options.html#index-Wno-alloca'})
+
+    def test_parse_option_index(self):
+        index = Index()
+        index.parse_option_index(INPUT_HTML_PATH / 'gcc/Option-Index.html',
+                                 language=None)
+        self.assertEqual(index.get_url_suffixes('-fmodulo-sched'),
+                         {'gcc/Optimize-Options.html#index-fmodulo-sched'})
+        self.assertEqual(index.get_url_suffixes('-O'),
+                         {'gcc/Optimize-Options.html#index-O'})
+        self.assertEqual(index.get_url_suffixes('-O0'),
+                         {'gcc/Optimize-Options.html#index-O0'})
+        self.assertEqual(index.get_url_suffixes('-Wframe-larger-than='),
+                         {'gcc/Warning-Options.html#index-Wframe-larger-than_003d'})
+
+        # Check an option with duplicates: '-march'
+        # The url_suffixes will be of the form
+        #  'gcc/HPPA-Options.html#index-march-5',
+        #  'gcc/LoongArch-Options.html#index-march-7',
+        # etc, where the trailing number is, unfortunately, likely to
+        # change from release to release.
+        # Replace them with 'NN' for the purpose of this test:
+        em_arch_url_suffixes = [re.sub('(-[0-9]+)', '-NN', s)
+                                for s in index.get_url_suffixes('-march')]
+        if 0:
+            print(em_arch_url_suffixes)
+        self.assertIn('gcc/ARM-Options.html#index-march-NN', em_arch_url_suffixes)
+        self.assertIn('gcc/x86-Options.html#index-march-NN', em_arch_url_suffixes)
+
+        self.assertEqual(index.get_url_suffixes('-Wcpp'),
+                         {'gcc/Warning-Options.html#index-Wcpp'})
+
+        self.assertNotEqual(index.get_url_suffixes('-march'), None)
+        self.assertNotEqual(index.get_url_suffixes('-march='), None)
+
+class OptFile:
+    def __init__(self, opt_path, rel_path):
+        """
+        Parse a .opt file.  Similar to opt-gather.awk.
+        """
+        self.rel_path = rel_path
+        assert rel_path.startswith('gcc')
+        # self.filename = os.path.basename(path)
+        self.records = []
+        with open(opt_path) as f:
+            flag = 0
+            for line in f:
+                #print(repr(line))
+                if re.match(r'[ \t]*(;|$)', line):
+                    flag = 0
+                else:
+                    if flag == 0:
+                        self.records.append([line])
+                        flag = 1
+                    else:
+                        self.records[-1].append(line)
+
+# Mapping from target-specific page to subdirectory containing .opt files
+# documented on that page.
+
+TARGET_SPECIFIC_PAGES = {
+    'gcc/AArch64-Options.html' : 'gcc/config/aarch64/',
+    'gcc/AMD-GCN-Options.html' : 'gcc/config/gcn/',
+    'gcc/ARC-Options.html' : 'gcc/config/arc/',
+    'gcc/ARC-Options.html' : 'gcc/config/arc/',
+    'gcc/ARM-Options.html' : 'gcc/config/arm/',
+    'gcc/AVR-Options.html' : 'gcc/config/avr/',
+    'gcc/Adapteva-Epiphany-Options.html' : 'gcc/config/epiphany/',
+    'gcc/Blackfin-Options.html' : 'gcc/config/bfin/',
+    'gcc/C-SKY-Options.html' : 'gcc/config/csky/',
+    'gcc/C6X-Options.html' : 'gcc/config/c6x/',
+    'gcc/CRIS-Options.html' : 'gcc/config/cris/',
+    'gcc/DEC-Alpha-Options.html' : 'gcc/config/alpha/',
+    'gcc/FR30-Options.html' : 'gcc/config/fr30/',
+    'gcc/FRV-Options.html' : 'gcc/config/frv/',
+    'gcc/FT32-Options.html' : 'gcc/config/ft32/',
+    'gcc/H8_002f300-Options.html' : 'gcc/config/h8300/',
+    'gcc/HPPA-Options.html' : 'gcc/config/pa/',
+    'gcc/IA-64-Options.html' : 'gcc/config/ia64/',
+    'gcc/LoongArch-Options.html' : 'gcc/config/loongarch/',
+    'gcc/M32C-Options.html' : 'gcc/config/m32c/',
+    'gcc/M32R_002fD-Options.html' : 'gcc/config/m32r/',
+    'gcc/M680x0-Options.html' : 'gcc/config/m68k/',
+    'gcc/MCore-Options.html' : 'gcc/config/mcore/',
+    'gcc/MIPS-Options.html' : 'gcc/config/mips/',
+    'gcc/MMIX-Options.html' : 'gcc/config/mmix/',
+    'gcc/MN10300-Options.html' : 'gcc/config/mn10300/',
+    'gcc/MSP430-Options.html' : 'gcc/config/msp430/',
+    'gcc/MicroBlaze-Options.html' : 'gcc/config/microblaze/',
+    'gcc/Moxie-Options.html' : 'gcc/config/moxie/',
+    'gcc/NDS32-Options.html' : 'gcc/config/nds32/',
+    'gcc/Nios-II-Options.html' : 'gcc/config/nios2/',
+    'gcc/Nvidia-PTX-Options.html' : 'gcc/config/nvptx/',
+    'gcc/OpenRISC-Options.html' : 'gcc/config/or1k/',
+    'gcc/PDP-11-Options.html' : 'gcc/config/pdp11',
+    'gcc/PRU-Options.html' : 'gcc/config/pru/',
+    'gcc/RISC-V-Options.html' : 'gcc/config/riscv/',
+    'gcc/RL78-Options.html' : 'gcc/config/rl78/',
+    'gcc/RS_002f6000-and-PowerPC-Options.html' : 'gcc/config/rs6000/',
+    'gcc/RX-Options.html' : 'gcc/config/rx/',
+    'gcc/SH-Options.html' : 'gcc/config/sh/',
+    'gcc/SPARC-Options.html' : 'gcc/config/sparc/',
+    'gcc/S_002f390-and-zSeries-Options.html' : 'gcc/config/s390',
+    'gcc/V850-Options.html' : 'gcc/config/vax/',
+    'gcc/VAX-Options.html' : 'gcc/config/v850/',
+    'gcc/Visium-Options.html' : 'gcc/config/visium/',
+    'gcc/Xstormy16-Options.html' : 'gcc/config/stormy16/',
+    'gcc/Xtensa-Options.html' : 'gcc/config/xtensa/',
+    'gcc/eBPF-Options.html' : 'gcc/config/bpf/',
+    'gcc/x86-Options.html' : 'gcc/config/i386/',
+}
+
+def target_specific(url_suffix):
+    for page_prefix, subdir in TARGET_SPECIFIC_PAGES.items():
+        if url_suffix.startswith(page_prefix):
+            return subdir
+
+def filter_urlsuffixes_for_optfile(optfile, url_suffixes):
+    """
+    Filter out target-specific options for the wrong target.
+    """
+    result = set()
+    for url_suffix in url_suffixes:
+        subdir = target_specific(url_suffix)
+        if subdir:
+            if 0:
+                print(f'{optfile.rel_path=}')
+                print(f'{url_suffixes=}')
+                print(f'{subdir=}')
+            if not optfile.rel_path.startswith(subdir):
+                # Skip this
+                continue
+        result.add(url_suffix)
+    return result
+
+
+class TestFiltering(unittest.TestCase):
+    def test_target_specific(self):
+        self.assertEqual(target_specific('gcc/Preprocessor-Options.html#index-A'),
+                         None)
+        self.assertEqual(target_specific('gcc/MMIX-Options.html#index-mknuthdiv'),
+                         'gcc/config/mmix/')
+
+    def test_filter(self):
+        s = {'gcc/MIPS-Options.html#index-munaligned-access-1',
+             'gcc/ARM-Options.html#index-munaligned-access'}
+        arm_optfile = OptFile('/dev/null', 'gcc/config/arm/arm.opt')
+        mips_optfile = OptFile('/dev/null', 'gcc/config/mips/mips.opt')
+        self.assertEqual(
+            filter_urlsuffixes_for_optfile(arm_optfile, s),
+            {'gcc/ARM-Options.html#index-munaligned-access'})
+        self.assertEqual(
+            filter_urlsuffixes_for_optfile(mips_optfile, s),
+            {'gcc/MIPS-Options.html#index-munaligned-access-1'})
+
+
+def write_url_file(index, optfile, dstfile):
+    dstfile.write('; Autogenerated by regenerate-opt-urls.py from %s'
+                  ' and generated HTML\n\n'
+                  % optfile.rel_path)
+    for record in optfile.records:
+        opt = '-' + record[0].strip()
+        if 0:
+            dstfile.write('; entry for %s\n' % record)
+            dstfile.write('; opt=%r\n' % opt)
+        url_suffixes_per_lang = {}
+        count = 0
+        for lang in index.get_languages():
+            this_lang_suffixes = index.get_url_suffixes(opt, language=lang)
+            url_suffixes_per_lang[lang] = this_lang_suffixes
+            if this_lang_suffixes:
+                count += len(this_lang_suffixes)
+        if not count:
+            continue
+        directives = []
+        for lang in index.get_languages():
+            if lang:
+                directive = 'LangUrlSuffix_%s for %r' % (lang, opt[1:])
+            else:
+                directive = 'UrlSuffix for %r' % opt[1:]
+            url_suffixes = url_suffixes_per_lang[lang]
+            if 0:
+                dstfile.write('; lang=%r url_suffixes=%r\n' % (lang, url_suffixes))
+            if url_suffixes:
+                url_suffixes = filter_urlsuffixes_for_optfile(optfile, url_suffixes)
+                if url_suffixes:
+                    if len(url_suffixes) == 1:
+                        if lang:
+                            directives.append('LangUrlSuffix_%s(%s)' % (lang, list(url_suffixes)[0]))
+                        else:
+                            directives.append('UrlSuffix(%s)' % list(url_suffixes)[0])
+                    else:
+                        dstfile.write('; skipping %s due to multiple URLs:\n'
+                                      % directive)
+                        for u in sorted(url_suffixes):
+                            dstfile.write(';   duplicate: %r\n' % u)
+                else:
+                    dstfile.write('; skipping %s due to finding no URLs\n'
+                                  % directive)
+        if directives:
+            dstfile.write('%s\n' % opt[1:])
+            dstfile.write(' '.join(directives) + '\n')
+        dstfile.write('\n')
+
+
+def main(args):
+    index = Index()
+    index.parse_option_index(args.base_html_dir / 'gcc/Option-Index.html',
+                             language=None)
+    index.parse_option_index(args.base_html_dir / 'gdc/Option-Index.html',
+                             language='D')
+    index.parse_option_index(args.base_html_dir / 'gfortran/Option-Index.html',
+                             language='Fortran')
+    if 0:
+        pprint(index.entries)
+    for root, dirs, files in os.walk(args.src_gcc_dir):
+        for f in files:
+            if f.endswith('.opt'):
+                opt_path = os.path.join(root, f)
+                rel_path = os.path.relpath(opt_path, args.src_gcc_dir)
+                optfile = OptFile(opt_path, rel_path)
+                if 0:
+                    pprint(optfile.path)
+                    pprint(optfile.records)
+                dstname = f + '.urls'
+                urlfile = os.path.join(root, dstname)
+                with open(urlfile, 'w') as dstfile:
+                    write_url_file(index, optfile, dstfile)
+
+
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser(description=DESCRIPTION,
+                                     formatter_class=argparse.RawDescriptionHelpFormatter)
+    parser.add_argument('base_html_dir', type=Path)
+    parser.add_argument('src_gcc_dir', type=Path)
+    parser.add_argument('--unit-test', action='store_true')
+    args = parser.parse_args()
+
+    if args.unit_test:
+        INPUT_HTML_PATH = args.base_html_dir
+        unittest.main(argv=[sys.argv[0], '-v'])
+    else:
+        main(args)
-- 
2.26.3


^ permalink raw reply	[flat|nested] 47+ messages in thread

* [PATCH 2/4; v3] Add generated .opt.urls files
  2023-12-14 15:01                     ` [PATCH 0/4] v3 of: " David Malcolm
  2023-12-14 15:01                       ` [PATCH 1/4; v3] options: add gcc/regenerate-opt-urls.py David Malcolm
@ 2023-12-14 15:01                       ` David Malcolm
  2023-12-14 15:01                       ` [PATCH 3/4; v2] opts: add logic to generate options-urls.cc David Malcolm
                                         ` (3 subsequent siblings)
  5 siblings, 0 replies; 47+ messages in thread
From: David Malcolm @ 2023-12-14 15:01 UTC (permalink / raw)
  To: Joseph Myers; +Cc: Mark Wielaard, Tobias Burnus, gcc-patches, David Malcolm

Changed in v3: regenerated
Changed in v2: the files now contain some lang-specific URLs.

gcc/ada/ChangeLog:
	* gcc-interface/lang.opt.urls: New file, autogenerated by
	regenerate-opt-urls.py.

gcc/analyzer/ChangeLog:
	* analyzer.opt.urls: New file, autogenerated by
	regenerate-opt-urls.py.

gcc/c-family/ChangeLog:
	* c.opt.urls: New file, autogenerated by regenerate-opt-urls.py.

gcc/ChangeLog:
	* common.opt.urls: New file, autogenerated by
	regenerate-opt-urls.py.
	* config/aarch64/aarch64.opt.urls: Likewise.
	* config/alpha/alpha.opt.urls: Likewise.
	* config/alpha/elf.opt.urls: Likewise.
	* config/arc/arc-tables.opt.urls: Likewise.
	* config/arc/arc.opt.urls: Likewise.
	* config/arm/arm-tables.opt.urls: Likewise.
	* config/arm/arm.opt.urls: Likewise.
	* config/arm/vxworks.opt.urls: Likewise.
	* config/avr/avr.opt.urls: Likewise.
	* config/bpf/bpf.opt.urls: Likewise.
	* config/c6x/c6x-tables.opt.urls: Likewise.
	* config/c6x/c6x.opt.urls: Likewise.
	* config/cris/cris.opt.urls: Likewise.
	* config/cris/elf.opt.urls: Likewise.
	* config/csky/csky.opt.urls: Likewise.
	* config/csky/csky_tables.opt.urls: Likewise.
	* config/darwin.opt.urls: Likewise.
	* config/dragonfly.opt.urls: Likewise.
	* config/epiphany/epiphany.opt.urls: Likewise.
	* config/fr30/fr30.opt.urls: Likewise.
	* config/freebsd.opt.urls: Likewise.
	* config/frv/frv.opt.urls: Likewise.
	* config/ft32/ft32.opt.urls: Likewise.
	* config/fused-madd.opt.urls: Likewise.
	* config/g.opt.urls: Likewise.
	* config/gcn/gcn.opt.urls: Likewise.
	* config/gnu-user.opt.urls: Likewise.
	* config/h8300/h8300.opt.urls: Likewise.
	* config/hpux11.opt.urls: Likewise.
	* config/i386/cygming.opt.urls: Likewise.
	* config/i386/cygwin.opt.urls: Likewise.
	* config/i386/djgpp.opt.urls: Likewise.
	* config/i386/i386.opt.urls: Likewise.
	* config/i386/mingw-w64.opt.urls: Likewise.
	* config/i386/mingw.opt.urls: Likewise.
	* config/i386/nto.opt.urls: Likewise.
	* config/ia64/ia64.opt.urls: Likewise.
	* config/ia64/ilp32.opt.urls: Likewise.
	* config/ia64/vms.opt.urls: Likewise.
	* config/iq2000/iq2000.opt.urls: Likewise.
	* config/linux-android.opt.urls: Likewise.
	* config/linux.opt.urls: Likewise.
	* config/lm32/lm32.opt.urls: Likewise.
	* config/loongarch/loongarch.opt.urls: Likewise.
	* config/lynx.opt.urls: Likewise.
	* config/m32c/m32c.opt.urls: Likewise.
	* config/m32r/m32r.opt.urls: Likewise.
	* config/m68k/ieee.opt.urls: Likewise.
	* config/m68k/m68k-tables.opt.urls: Likewise.
	* config/m68k/m68k.opt.urls: Likewise.
	* config/m68k/uclinux.opt.urls: Likewise.
	* config/mcore/mcore.opt.urls: Likewise.
	* config/microblaze/microblaze.opt.urls: Likewise.
	* config/mips/mips-tables.opt.urls: Likewise.
	* config/mips/mips.opt.urls: Likewise.
	* config/mips/sde.opt.urls: Likewise.
	* config/mmix/mmix.opt.urls: Likewise.
	* config/mn10300/mn10300.opt.urls: Likewise.
	* config/moxie/moxie.opt.urls: Likewise.
	* config/msp430/msp430.opt.urls: Likewise.
	* config/nds32/nds32-elf.opt.urls: Likewise.
	* config/nds32/nds32-linux.opt.urls: Likewise.
	* config/nds32/nds32.opt.urls: Likewise.
	* config/netbsd-elf.opt.urls: Likewise.
	* config/netbsd.opt.urls: Likewise.
	* config/nios2/elf.opt.urls: Likewise.
	* config/nios2/nios2.opt.urls: Likewise.
	* config/nvptx/nvptx-gen.opt.urls: Likewise.
	* config/nvptx/nvptx.opt.urls: Likewise.
	* config/openbsd.opt.urls: Likewise.
	* config/or1k/elf.opt.urls: Likewise.
	* config/or1k/or1k.opt.urls: Likewise.
	* config/pa/pa-hpux.opt.urls: Likewise.
	* config/pa/pa-hpux1010.opt.urls: Likewise.
	* config/pa/pa-hpux1111.opt.urls: Likewise.
	* config/pa/pa-hpux1131.opt.urls: Likewise.
	* config/pa/pa.opt.urls: Likewise.
	* config/pa/pa64-hpux.opt.urls: Likewise.
	* config/pdp11/pdp11.opt.urls: Likewise.
	* config/pru/pru.opt.urls: Likewise.
	* config/riscv/riscv.opt.urls: Likewise.
	* config/rl78/rl78.opt.urls: Likewise.
	* config/rpath.opt.urls: Likewise.
	* config/rs6000/476.opt.urls: Likewise.
	* config/rs6000/aix64.opt.urls: Likewise.
	* config/rs6000/darwin.opt.urls: Likewise.
	* config/rs6000/linux64.opt.urls: Likewise.
	* config/rs6000/rs6000-tables.opt.urls: Likewise.
	* config/rs6000/rs6000.opt.urls: Likewise.
	* config/rs6000/sysv4.opt.urls: Likewise.
	* config/rtems.opt.urls: Likewise.
	* config/rx/elf.opt.urls: Likewise.
	* config/rx/rx.opt.urls: Likewise.
	* config/s390/s390.opt.urls: Likewise.
	* config/s390/tpf.opt.urls: Likewise.
	* config/sh/sh.opt.urls: Likewise.
	* config/sh/superh.opt.urls: Likewise.
	* config/sol2.opt.urls: Likewise.
	* config/sparc/long-double-switch.opt.urls: Likewise.
	* config/sparc/sparc.opt.urls: Likewise.
	* config/stormy16/stormy16.opt.urls: Likewise.
	* config/v850/v850.opt.urls: Likewise.
	* config/vax/elf.opt.urls: Likewise.
	* config/vax/vax.opt.urls: Likewise.
	* config/visium/visium.opt.urls: Likewise.
	* config/vms/vms.opt.urls: Likewise.
	* config/vxworks-smp.opt.urls: Likewise.
	* config/vxworks.opt.urls: Likewise.
	* config/xtensa/elf.opt.urls: Likewise.
	* config/xtensa/uclinux.opt.urls: Likewise.
	* config/xtensa/xtensa.opt.urls: Likewise.

gcc/d/ChangeLog:
	* lang.opt.urls: New file, autogenerated by
	regenerate-opt-urls.py.

gcc/fortran/ChangeLog:
	* lang.opt.urls: New file, autogenerated by
	regenerate-opt-urls.py.

gcc/go/ChangeLog:
	* lang.opt.urls: New file, autogenerated by
	regenerate-opt-urls.py.

gcc/lto/ChangeLog:
	* lang.opt.urls: New file, autogenerated by
	regenerate-opt-urls.py.

gcc/m2/ChangeLog:
	* lang.opt.urls: New file, autogenerated by
	regenerate-opt-urls.py.

gcc/ChangeLog:
	* params.opt.urls: New file, autogenerated by
	regenerate-opt-urls.py.

gcc/rust/ChangeLog:
	* lang.opt.urls: New file, autogenerated by
	regenerate-opt-urls.py.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
---
 gcc/ada/gcc-interface/lang.opt.urls          |   30 +
 gcc/analyzer/analyzer.opt.urls               |  206 ++
 gcc/c-family/c.opt.urls                      | 1409 ++++++++++++++
 gcc/common.opt.urls                          | 1832 ++++++++++++++++++
 gcc/config/aarch64/aarch64.opt.urls          |   84 +
 gcc/config/alpha/alpha.opt.urls              |   76 +
 gcc/config/alpha/elf.opt.urls                |    2 +
 gcc/config/arc/arc-tables.opt.urls           |    2 +
 gcc/config/arc/arc.opt.urls                  |  260 +++
 gcc/config/arm/arm-tables.opt.urls           |    2 +
 gcc/config/arm/arm.opt.urls                  |  149 ++
 gcc/config/arm/vxworks.opt.urls              |    2 +
 gcc/config/avr/avr.opt.urls                  |   71 +
 gcc/config/bfin/bfin.opt.urls                |   61 +
 gcc/config/bpf/bpf.opt.urls                  |   35 +
 gcc/config/c6x/c6x-tables.opt.urls           |    2 +
 gcc/config/c6x/c6x.opt.urls                  |   18 +
 gcc/config/cris/cris.opt.urls                |   65 +
 gcc/config/cris/elf.opt.urls                 |    8 +
 gcc/config/csky/csky.opt.urls                |  104 +
 gcc/config/csky/csky_tables.opt.urls         |    2 +
 gcc/config/darwin.opt.urls                   |  224 +++
 gcc/config/dragonfly.opt.urls                |    9 +
 gcc/config/epiphany/epiphany.opt.urls        |   52 +
 gcc/config/fr30/fr30.opt.urls                |    8 +
 gcc/config/freebsd.opt.urls                  |    9 +
 gcc/config/frv/frv.opt.urls                  |  111 ++
 gcc/config/ft32/ft32.opt.urls                |   20 +
 gcc/config/fused-madd.opt.urls               |    4 +
 gcc/config/g.opt.urls                        |    5 +
 gcc/config/gcn/gcn.opt.urls                  |   23 +
 gcc/config/gnu-user.opt.urls                 |    9 +
 gcc/config/h8300/h8300.opt.urls              |   29 +
 gcc/config/hpux11.opt.urls                   |    6 +
 gcc/config/i386/cygming.opt.urls             |   30 +
 gcc/config/i386/cygwin.opt.urls              |    6 +
 gcc/config/i386/djgpp.opt.urls               |    2 +
 gcc/config/i386/i386.opt.urls                |  602 ++++++
 gcc/config/i386/mingw-w64.opt.urls           |    5 +
 gcc/config/i386/mingw.opt.urls               |   12 +
 gcc/config/i386/nto.opt.urls                 |    5 +
 gcc/config/ia64/ia64.opt.urls                |  122 ++
 gcc/config/ia64/ilp32.opt.urls               |    8 +
 gcc/config/ia64/vms.opt.urls                 |    2 +
 gcc/config/iq2000/iq2000.opt.urls            |   14 +
 gcc/config/linux-android.opt.urls            |   11 +
 gcc/config/linux.opt.urls                    |   14 +
 gcc/config/lm32/lm32.opt.urls                |   14 +
 gcc/config/loongarch/loongarch.opt.urls      |   64 +
 gcc/config/lynx.opt.urls                     |    5 +
 gcc/config/m32c/m32c.opt.urls                |    8 +
 gcc/config/m32r/m32r.opt.urls                |   27 +
 gcc/config/m68k/ieee.opt.urls                |    4 +
 gcc/config/m68k/m68k-tables.opt.urls         |    2 +
 gcc/config/m68k/m68k.opt.urls                |  107 +
 gcc/config/m68k/uclinux.opt.urls             |    2 +
 gcc/config/mcore/mcore.opt.urls              |   38 +
 gcc/config/microblaze/microblaze.opt.urls    |   59 +
 gcc/config/mips/mips-tables.opt.urls         |    2 +
 gcc/config/mips/mips.opt.urls                |  269 +++
 gcc/config/mips/sde.opt.urls                 |    2 +
 gcc/config/mmix/mmix.opt.urls                |   44 +
 gcc/config/mn10300/mn10300.opt.urls          |   32 +
 gcc/config/moxie/moxie.opt.urls              |   14 +
 gcc/config/msp430/msp430.opt.urls            |   53 +
 gcc/config/nds32/nds32-elf.opt.urls          |    5 +
 gcc/config/nds32/nds32-linux.opt.urls        |    5 +
 gcc/config/nds32/nds32.opt.urls              |   57 +
 gcc/config/netbsd-elf.opt.urls               |    5 +
 gcc/config/netbsd.opt.urls                   |    6 +
 gcc/config/nios2/elf.opt.urls                |   14 +
 gcc/config/nios2/nios2.opt.urls              |   50 +
 gcc/config/nvptx/nvptx-gen.opt.urls          |    2 +
 gcc/config/nvptx/nvptx.opt.urls              |   29 +
 gcc/config/openbsd.opt.urls                  |    6 +
 gcc/config/or1k/elf.opt.urls                 |    8 +
 gcc/config/or1k/or1k.opt.urls                |   46 +
 gcc/config/pa/pa-hpux.opt.urls               |   11 +
 gcc/config/pa/pa-hpux1010.opt.urls           |    2 +
 gcc/config/pa/pa-hpux1111.opt.urls           |    2 +
 gcc/config/pa/pa-hpux1131.opt.urls           |    2 +
 gcc/config/pa/pa.opt.urls                    |   71 +
 gcc/config/pa/pa64-hpux.opt.urls             |    8 +
 gcc/config/pdp11/pdp11.opt.urls              |   41 +
 gcc/config/pru/pru.opt.urls                  |   17 +
 gcc/config/riscv/riscv.opt.urls              |   88 +
 gcc/config/rl78/rl78.opt.urls                |   31 +
 gcc/config/rpath.opt.urls                    |    2 +
 gcc/config/rs6000/476.opt.urls               |    2 +
 gcc/config/rs6000/aix64.opt.urls             |   23 +
 gcc/config/rs6000/darwin.opt.urls            |   14 +
 gcc/config/rs6000/linux64.opt.urls           |    4 +
 gcc/config/rs6000/rs6000-tables.opt.urls     |    2 +
 gcc/config/rs6000/rs6000.opt.urls            |  214 ++
 gcc/config/rs6000/sysv4.opt.urls             |   87 +
 gcc/config/rtems.opt.urls                    |    6 +
 gcc/config/rx/elf.opt.urls                   |   14 +
 gcc/config/rx/rx.opt.urls                    |   54 +
 gcc/config/s390/s390.opt.urls                |   92 +
 gcc/config/s390/tpf.opt.urls                 |    8 +
 gcc/config/sh/sh.opt.urls                    |  174 ++
 gcc/config/sh/superh.opt.urls                |    4 +
 gcc/config/sol2.opt.urls                     |   21 +
 gcc/config/sparc/long-double-switch.opt.urls |    6 +
 gcc/config/sparc/sparc.opt.urls              |  108 ++
 gcc/config/stormy16/stormy16.opt.urls        |    5 +
 gcc/config/v850/v850.opt.urls                |   60 +
 gcc/config/vax/elf.opt.urls                  |    2 +
 gcc/config/vax/vax.opt.urls                  |   10 +
 gcc/config/visium/visium.opt.urls            |   29 +
 gcc/config/vms/vms.opt.urls                  |    8 +
 gcc/config/vxworks-smp.opt.urls              |    5 +
 gcc/config/vxworks.opt.urls                  |   20 +
 gcc/config/xtensa/elf.opt.urls               |    5 +
 gcc/config/xtensa/uclinux.opt.urls           |    2 +
 gcc/config/xtensa/xtensa.opt.urls            |   37 +
 gcc/d/lang.opt.urls                          |  223 +++
 gcc/fortran/lang.opt.urls                    |  161 ++
 gcc/go/lang.opt.urls                         |   17 +
 gcc/lto/lang.opt.urls                        |    8 +
 gcc/m2/lang.opt.urls                         |  118 ++
 gcc/params.opt.urls                          |    2 +
 gcc/rust/lang.opt.urls                       |   29 +
 123 files changed, 8590 insertions(+)
 create mode 100644 gcc/ada/gcc-interface/lang.opt.urls
 create mode 100644 gcc/analyzer/analyzer.opt.urls
 create mode 100644 gcc/c-family/c.opt.urls
 create mode 100644 gcc/common.opt.urls
 create mode 100644 gcc/config/aarch64/aarch64.opt.urls
 create mode 100644 gcc/config/alpha/alpha.opt.urls
 create mode 100644 gcc/config/alpha/elf.opt.urls
 create mode 100644 gcc/config/arc/arc-tables.opt.urls
 create mode 100644 gcc/config/arc/arc.opt.urls
 create mode 100644 gcc/config/arm/arm-tables.opt.urls
 create mode 100644 gcc/config/arm/arm.opt.urls
 create mode 100644 gcc/config/arm/vxworks.opt.urls
 create mode 100644 gcc/config/avr/avr.opt.urls
 create mode 100644 gcc/config/bfin/bfin.opt.urls
 create mode 100644 gcc/config/bpf/bpf.opt.urls
 create mode 100644 gcc/config/c6x/c6x-tables.opt.urls
 create mode 100644 gcc/config/c6x/c6x.opt.urls
 create mode 100644 gcc/config/cris/cris.opt.urls
 create mode 100644 gcc/config/cris/elf.opt.urls
 create mode 100644 gcc/config/csky/csky.opt.urls
 create mode 100644 gcc/config/csky/csky_tables.opt.urls
 create mode 100644 gcc/config/darwin.opt.urls
 create mode 100644 gcc/config/dragonfly.opt.urls
 create mode 100644 gcc/config/epiphany/epiphany.opt.urls
 create mode 100644 gcc/config/fr30/fr30.opt.urls
 create mode 100644 gcc/config/freebsd.opt.urls
 create mode 100644 gcc/config/frv/frv.opt.urls
 create mode 100644 gcc/config/ft32/ft32.opt.urls
 create mode 100644 gcc/config/fused-madd.opt.urls
 create mode 100644 gcc/config/g.opt.urls
 create mode 100644 gcc/config/gcn/gcn.opt.urls
 create mode 100644 gcc/config/gnu-user.opt.urls
 create mode 100644 gcc/config/h8300/h8300.opt.urls
 create mode 100644 gcc/config/hpux11.opt.urls
 create mode 100644 gcc/config/i386/cygming.opt.urls
 create mode 100644 gcc/config/i386/cygwin.opt.urls
 create mode 100644 gcc/config/i386/djgpp.opt.urls
 create mode 100644 gcc/config/i386/i386.opt.urls
 create mode 100644 gcc/config/i386/mingw-w64.opt.urls
 create mode 100644 gcc/config/i386/mingw.opt.urls
 create mode 100644 gcc/config/i386/nto.opt.urls
 create mode 100644 gcc/config/ia64/ia64.opt.urls
 create mode 100644 gcc/config/ia64/ilp32.opt.urls
 create mode 100644 gcc/config/ia64/vms.opt.urls
 create mode 100644 gcc/config/iq2000/iq2000.opt.urls
 create mode 100644 gcc/config/linux-android.opt.urls
 create mode 100644 gcc/config/linux.opt.urls
 create mode 100644 gcc/config/lm32/lm32.opt.urls
 create mode 100644 gcc/config/loongarch/loongarch.opt.urls
 create mode 100644 gcc/config/lynx.opt.urls
 create mode 100644 gcc/config/m32c/m32c.opt.urls
 create mode 100644 gcc/config/m32r/m32r.opt.urls
 create mode 100644 gcc/config/m68k/ieee.opt.urls
 create mode 100644 gcc/config/m68k/m68k-tables.opt.urls
 create mode 100644 gcc/config/m68k/m68k.opt.urls
 create mode 100644 gcc/config/m68k/uclinux.opt.urls
 create mode 100644 gcc/config/mcore/mcore.opt.urls
 create mode 100644 gcc/config/microblaze/microblaze.opt.urls
 create mode 100644 gcc/config/mips/mips-tables.opt.urls
 create mode 100644 gcc/config/mips/mips.opt.urls
 create mode 100644 gcc/config/mips/sde.opt.urls
 create mode 100644 gcc/config/mmix/mmix.opt.urls
 create mode 100644 gcc/config/mn10300/mn10300.opt.urls
 create mode 100644 gcc/config/moxie/moxie.opt.urls
 create mode 100644 gcc/config/msp430/msp430.opt.urls
 create mode 100644 gcc/config/nds32/nds32-elf.opt.urls
 create mode 100644 gcc/config/nds32/nds32-linux.opt.urls
 create mode 100644 gcc/config/nds32/nds32.opt.urls
 create mode 100644 gcc/config/netbsd-elf.opt.urls
 create mode 100644 gcc/config/netbsd.opt.urls
 create mode 100644 gcc/config/nios2/elf.opt.urls
 create mode 100644 gcc/config/nios2/nios2.opt.urls
 create mode 100644 gcc/config/nvptx/nvptx-gen.opt.urls
 create mode 100644 gcc/config/nvptx/nvptx.opt.urls
 create mode 100644 gcc/config/openbsd.opt.urls
 create mode 100644 gcc/config/or1k/elf.opt.urls
 create mode 100644 gcc/config/or1k/or1k.opt.urls
 create mode 100644 gcc/config/pa/pa-hpux.opt.urls
 create mode 100644 gcc/config/pa/pa-hpux1010.opt.urls
 create mode 100644 gcc/config/pa/pa-hpux1111.opt.urls
 create mode 100644 gcc/config/pa/pa-hpux1131.opt.urls
 create mode 100644 gcc/config/pa/pa.opt.urls
 create mode 100644 gcc/config/pa/pa64-hpux.opt.urls
 create mode 100644 gcc/config/pdp11/pdp11.opt.urls
 create mode 100644 gcc/config/pru/pru.opt.urls
 create mode 100644 gcc/config/riscv/riscv.opt.urls
 create mode 100644 gcc/config/rl78/rl78.opt.urls
 create mode 100644 gcc/config/rpath.opt.urls
 create mode 100644 gcc/config/rs6000/476.opt.urls
 create mode 100644 gcc/config/rs6000/aix64.opt.urls
 create mode 100644 gcc/config/rs6000/darwin.opt.urls
 create mode 100644 gcc/config/rs6000/linux64.opt.urls
 create mode 100644 gcc/config/rs6000/rs6000-tables.opt.urls
 create mode 100644 gcc/config/rs6000/rs6000.opt.urls
 create mode 100644 gcc/config/rs6000/sysv4.opt.urls
 create mode 100644 gcc/config/rtems.opt.urls
 create mode 100644 gcc/config/rx/elf.opt.urls
 create mode 100644 gcc/config/rx/rx.opt.urls
 create mode 100644 gcc/config/s390/s390.opt.urls
 create mode 100644 gcc/config/s390/tpf.opt.urls
 create mode 100644 gcc/config/sh/sh.opt.urls
 create mode 100644 gcc/config/sh/superh.opt.urls
 create mode 100644 gcc/config/sol2.opt.urls
 create mode 100644 gcc/config/sparc/long-double-switch.opt.urls
 create mode 100644 gcc/config/sparc/sparc.opt.urls
 create mode 100644 gcc/config/stormy16/stormy16.opt.urls
 create mode 100644 gcc/config/v850/v850.opt.urls
 create mode 100644 gcc/config/vax/elf.opt.urls
 create mode 100644 gcc/config/vax/vax.opt.urls
 create mode 100644 gcc/config/visium/visium.opt.urls
 create mode 100644 gcc/config/vms/vms.opt.urls
 create mode 100644 gcc/config/vxworks-smp.opt.urls
 create mode 100644 gcc/config/vxworks.opt.urls
 create mode 100644 gcc/config/xtensa/elf.opt.urls
 create mode 100644 gcc/config/xtensa/uclinux.opt.urls
 create mode 100644 gcc/config/xtensa/xtensa.opt.urls
 create mode 100644 gcc/d/lang.opt.urls
 create mode 100644 gcc/fortran/lang.opt.urls
 create mode 100644 gcc/go/lang.opt.urls
 create mode 100644 gcc/lto/lang.opt.urls
 create mode 100644 gcc/m2/lang.opt.urls
 create mode 100644 gcc/params.opt.urls
 create mode 100644 gcc/rust/lang.opt.urls

diff --git a/gcc/ada/gcc-interface/lang.opt.urls b/gcc/ada/gcc-interface/lang.opt.urls
new file mode 100644
index 000000000000..7913bcb5558d
--- /dev/null
+++ b/gcc/ada/gcc-interface/lang.opt.urls
@@ -0,0 +1,30 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/ada/gcc-interface/lang.opt and generated HTML
+
+I
+UrlSuffix(gcc/Directory-Options.html#index-I) LangUrlSuffix_D(gdc/Directory-Options.html#index-I)
+
+; skipping UrlSuffix for 'Wall' due to multiple URLs:
+;   duplicate: 'gcc/Standard-Libraries.html#index-Wall-1'
+;   duplicate: 'gcc/Warning-Options.html#index-Wall'
+Wall
+LangUrlSuffix_D(gdc/Warnings.html#index-Wall)
+
+nostdinc
+UrlSuffix(gcc/Directory-Options.html#index-nostdinc) LangUrlSuffix_D(gdc/Directory-Options.html#index-nostdinc)
+
+nostdlib
+UrlSuffix(gcc/Link-Options.html#index-nostdlib)
+
+; skipping UrlSuffix for 'fshort-enums' due to multiple URLs:
+;   duplicate: 'gcc/Code-Gen-Options.html#index-fshort-enums'
+;   duplicate: 'gcc/Non-bugs.html#index-fshort-enums-3'
+;   duplicate: 'gcc/Structures-unions-enumerations-and-bit-fields-implementation.html#index-fshort-enums-1'
+
+; skipping UrlSuffix for 'fsigned-char' due to multiple URLs:
+;   duplicate: 'gcc/C-Dialect-Options.html#index-fsigned-char'
+;   duplicate: 'gcc/Characters-implementation.html#index-fsigned-char-1'
+
+; skipping UrlSuffix for 'funsigned-char' due to multiple URLs:
+;   duplicate: 'gcc/C-Dialect-Options.html#index-funsigned-char'
+;   duplicate: 'gcc/Characters-implementation.html#index-funsigned-char-1'
+
diff --git a/gcc/analyzer/analyzer.opt.urls b/gcc/analyzer/analyzer.opt.urls
new file mode 100644
index 000000000000..9f7d33ff434c
--- /dev/null
+++ b/gcc/analyzer/analyzer.opt.urls
@@ -0,0 +1,206 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/analyzer/analyzer.opt and generated HTML
+
+Wanalyzer-allocation-size
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-allocation-size)
+
+Wanalyzer-deref-before-check
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-deref-before-check)
+
+Wanalyzer-double-fclose
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-double-fclose)
+
+Wanalyzer-double-free
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-double-free)
+
+Wanalyzer-exposure-through-output-file
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-exposure-through-output-file)
+
+Wanalyzer-exposure-through-uninit-copy
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-exposure-through-uninit-copy)
+
+Wanalyzer-fd-access-mode-mismatch
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-access-mode-mismatch)
+
+Wanalyzer-fd-double-close
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-double-close)
+
+Wanalyzer-fd-leak
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-leak)
+
+Wanalyzer-fd-phase-mismatch
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-phase-mismatch)
+
+Wanalyzer-fd-type-mismatch
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-type-mismatch)
+
+Wanalyzer-fd-use-after-close
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-use-after-close)
+
+Wanalyzer-fd-use-without-check
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-fd-use-without-check)
+
+Wanalyzer-file-leak
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-file-leak)
+
+Wanalyzer-free-of-non-heap
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-free-of-non-heap)
+
+Wanalyzer-imprecise-fp-arithmetic
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-imprecise-fp-arithmetic)
+
+Wanalyzer-infinite-recursion
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-infinite-recursion)
+
+Wanalyzer-jump-through-null
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-jump-through-null)
+
+Wanalyzer-malloc-leak
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-malloc-leak)
+
+Wanalyzer-mismatching-deallocation
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-mismatching-deallocation)
+
+Wanalyzer-out-of-bounds
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-out-of-bounds)
+
+Wanalyzer-overlapping-buffers
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-overlapping-buffers)
+
+Wanalyzer-possible-null-argument
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-possible-null-argument)
+
+Wanalyzer-possible-null-dereference
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-possible-null-dereference)
+
+Wanalyzer-unsafe-call-within-signal-handler
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-unsafe-call-within-signal-handler)
+
+Wanalyzer-null-argument
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-null-argument)
+
+Wanalyzer-null-dereference
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-null-dereference)
+
+Wanalyzer-putenv-of-auto-var
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-putenv-of-auto-var)
+
+Wanalyzer-shift-count-negative
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-shift-count-negative)
+
+Wanalyzer-shift-count-overflow
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-shift-count-overflow)
+
+Wanalyzer-stale-setjmp-buffer
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-stale-setjmp-buffer)
+
+Wanalyzer-tainted-allocation-size
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-allocation-size)
+
+Wanalyzer-tainted-array-index
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-array-index)
+
+Wanalyzer-tainted-assertion
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-assertion)
+
+Wanalyzer-tainted-divisor
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-divisor)
+
+Wanalyzer-tainted-offset
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-offset)
+
+Wanalyzer-tainted-size
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-tainted-size)
+
+Wanalyzer-use-after-free
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-use-after-free)
+
+Wanalyzer-use-of-pointer-in-stale-stack-frame
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-use-of-pointer-in-stale-stack-frame)
+
+Wanalyzer-va-arg-type-mismatch
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-va-arg-type-mismatch)
+
+Wanalyzer-va-list-exhausted
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-va-list-exhausted)
+
+Wanalyzer-va-list-leak
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-va-list-leak)
+
+Wanalyzer-va-list-use-after-va-end
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-va-list-use-after-va-end)
+
+Wanalyzer-write-to-const
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-const)
+
+Wanalyzer-write-to-string-literal
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-write-to-string-literal)
+
+Wanalyzer-use-of-uninitialized-value
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-use-of-uninitialized-value)
+
+Wanalyzer-too-complex
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-too-complex)
+
+fanalyzer-checker=
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-checker)
+
+fanalyzer-debug-text-art
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-debug-text-art)
+
+fanalyzer-fine-grained
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-fine-grained)
+
+fanalyzer-feasibility
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-feasibility)
+
+fanalyzer-show-duplicate-count
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-show-duplicate-count)
+
+fanalyzer-state-purge
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-state-purge)
+
+fanalyzer-state-merge
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-state-merge)
+
+fanalyzer-suppress-followups
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-suppress-followups)
+
+fanalyzer-transitivity
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-transitivity)
+
+fanalyzer-show-events-in-system-headers
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-show-events-in-system-headers)
+
+fanalyzer-call-summaries
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-call-summaries)
+
+fanalyzer-undo-inlining
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-undo-inlining)
+
+fdump-analyzer
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fdump-analyzer)
+
+fdump-analyzer-stderr
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fdump-analyzer-stderr)
+
+fdump-analyzer-callgraph
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fdump-analyzer-callgraph)
+
+fdump-analyzer-exploded-graph
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fdump-analyzer-exploded-graph)
+
+fdump-analyzer-exploded-paths
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fdump-analyzer-exploded-paths)
+
+fdump-analyzer-json
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fdump-analyzer-json)
+
+fdump-analyzer-state-purge
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fdump-analyzer-state-purge)
+
+fdump-analyzer-supergraph
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fdump-analyzer-supergraph)
+
+fdump-analyzer-untracked
+UrlSuffix(gcc/Static-Analyzer-Options.html#index-fdump-analyzer-untracked)
+
diff --git a/gcc/c-family/c.opt.urls b/gcc/c-family/c.opt.urls
new file mode 100644
index 000000000000..8fccbc77ea3a
--- /dev/null
+++ b/gcc/c-family/c.opt.urls
@@ -0,0 +1,1409 @@
+; Autogenerated by regenerate-opt-urls.py from gcc/c-family/c.opt and generated HTML
+
+A
+UrlSuffix(gcc/Preprocessor-Options.html#index-A)
+
+C
+UrlSuffix(gcc/Preprocessor-Options.html#index-C)
+
+CC
+UrlSuffix(gcc/Preprocessor-Options.html#index-CC)
+
+D
+UrlSuffix(gcc/Preprocessor-Options.html#index-D-1)
+
+; skipping UrlSuffix for 'E' due to multiple URLs:
+;   duplicate: 'gcc/Link-Options.html#index-E-1'
+;   duplicate: 'gcc/Overall-Options.html#index-E'
+
+F
+UrlSuffix(gcc/Darwin-Options.html#index-F)
+
+fgimple
+UrlSuffix(gcc/C-Dialect-Options.html#index-fgimple)
+
+H
+UrlSuffix(gcc/Preprocessor-Options.html#index-H) LangUrlSuffix_D(gdc/Code-Generation.html#index-H)
+
+I
+UrlSuffix(gcc/Directory-Options.html#index-I) LangUrlSuffix_D(gdc/Directory-Options.html#index-I)
+
+M
+UrlSuffix(gcc/Preprocessor-Options.html#index-M) LangUrlSuffix_D(gdc/Code-Generation.html#index-M)
+
+MD
+UrlSuffix(gcc/Preprocessor-Options.html#index-MD) LangUrlSuffix_D(gdc/Code-Generation.html#index-MD)
+
+MF
+UrlSuffix(gcc/Preprocessor-Options.html#index-MF) LangUrlSuffix_D(gdc/Code-Generation.html#index-MF)
+
+MG
+UrlSuffix(gcc/Preprocessor-Options.html#index-MG) LangUrlSuffix_D(gdc/Code-Generation.html#index-MG)
+
+MM
+UrlSuffix(gcc/Preprocessor-Options.html#index-MM) LangUrlSuffix_D(gdc/Code-Generation.html#index-MM)
+
+MMD
+UrlSuffix(gcc/Preprocessor-Options.html#index-MMD) LangUrlSuffix_D(gdc/Code-Generation.html#index-MMD)
+
+Mno-modules
+UrlSuffix(gcc/Preprocessor-Options.html#index-Mno-modules)
+
+MP
+UrlSuffix(gcc/Preprocessor-Options.html#index-MP) LangUrlSuffix_D(gdc/Code-Generation.html#index-MP)
+
+MQ
+UrlSuffix(gcc/Preprocessor-Options.html#index-MQ) LangUrlSuffix_D(gdc/Code-Generation.html#index-MQ)
+
+MT
+UrlSuffix(gcc/Preprocessor-Options.html#index-MT) LangUrlSuffix_D(gdc/Code-Generation.html#index-MT)
+
+fdeps-format=
+UrlSuffix(gcc/C-Dialect-Options.html#index-fdeps-format)
+
+fdeps-file=
+UrlSuffix(gcc/C-Dialect-Options.html#index-fdeps-file)
+
+fdeps-target=
+UrlSuffix(gcc/C-Dialect-Options.html#index-fdeps-target)
+
+P
+UrlSuffix(gcc/Preprocessor-Options.html#index-P)
+
+U
+UrlSuffix(gcc/Preprocessor-Options.html#index-U)
+
+Wabi
+UrlSuffix(gcc/Warning-Options.html#index-Wabi)
+
+Wabi=
+UrlSuffix(gcc/Warning-Options.html#index-Wabi)
+
+Wabi-tag
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wabi-tag)
+
+Wabsolute-value
+UrlSuffix(gcc/Warning-Options.html#index-Wabsolute-value)
+
+Waddress
+UrlSuffix(gcc/Warning-Options.html#index-Waddress)
+
+Waligned-new
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Waligned-new)
+
+Waligned-new=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Waligned-new)
+
+; skipping UrlSuffix for 'Wall' due to multiple URLs:
+;   duplicate: 'gcc/Standard-Libraries.html#index-Wall-1'
+;   duplicate: 'gcc/Warning-Options.html#index-Wall'
+Wall
+LangUrlSuffix_D(gdc/Warnings.html#index-Wall)
+
+Walloca
+UrlSuffix(gcc/Warning-Options.html#index-Walloca) LangUrlSuffix_D(gdc/Warnings.html#index-Walloca)
+
+Walloc-size-larger-than=
+UrlSuffix(gcc/Warning-Options.html#index-Walloc-size-larger-than_003d)
+
+Walloc-zero
+UrlSuffix(gcc/Warning-Options.html#index-Walloc-zero)
+
+Walloca-larger-than=
+UrlSuffix(gcc/Warning-Options.html#index-Walloca-larger-than_003d) LangUrlSuffix_D(gdc/Warnings.html#index-Walloca-larger-than)
+
+Warray-bounds=
+UrlSuffix(gcc/Warning-Options.html#index-Warray-bounds)
+
+Warray-compare
+UrlSuffix(gcc/Warning-Options.html#index-Warray-compare)
+
+Warray-parameter
+UrlSuffix(gcc/Warning-Options.html#index-Wno-array-parameter)
+
+Warray-parameter=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-array-parameter)
+
+Wzero-length-bounds
+UrlSuffix(gcc/Warning-Options.html#index-Wzero-length-bounds)
+
+Wassign-intercept
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-Wassign-intercept)
+
+Wbad-function-cast
+UrlSuffix(gcc/Warning-Options.html#index-Wbad-function-cast)
+
+Wbidi-chars
+UrlSuffix(gcc/Warning-Options.html#index-Wbidi-chars)
+
+Wbidi-chars=
+UrlSuffix(gcc/Warning-Options.html#index-Wbidi-chars)
+
+Wbool-compare
+UrlSuffix(gcc/Warning-Options.html#index-Wbool-compare)
+
+Wbool-operation
+UrlSuffix(gcc/Warning-Options.html#index-Wbool-operation)
+
+Wframe-address
+UrlSuffix(gcc/Warning-Options.html#index-Wframe-address)
+
+Wbuiltin-declaration-mismatch
+UrlSuffix(gcc/Warning-Options.html#index-Wbuiltin-declaration-mismatch) LangUrlSuffix_D(gdc/Warnings.html#index-Wbuiltin-declaration-mismatch)
+
+Wbuiltin-macro-redefined
+UrlSuffix(gcc/Warning-Options.html#index-Wbuiltin-macro-redefined)
+
+Wc11-c2x-compat
+UrlSuffix(gcc/Warning-Options.html#index-Wc11-c2x-compat)
+
+Wc90-c99-compat
+UrlSuffix(gcc/Warning-Options.html#index-Wc90-c99-compat)
+
+Wc99-c11-compat
+UrlSuffix(gcc/Warning-Options.html#index-Wc99-c11-compat)
+
+Wc++-compat
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b-compat)
+
+Wc++11-compat
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b11-compat)
+
+Wc++14-compat
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b14-compat)
+
+Wc++17-compat
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b17-compat)
+
+Wc++20-compat
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b20-compat)
+
+Wc++11-extensions
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b11-extensions)
+
+Wc++14-extensions
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b14-extensions)
+
+Wc++17-extensions
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b17-extensions)
+
+Wc++20-extensions
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b20-extensions)
+
+Wc++23-extensions
+UrlSuffix(gcc/Warning-Options.html#index-Wc_002b_002b23-extensions)
+
+Wcast-function-type
+UrlSuffix(gcc/Warning-Options.html#index-Wcast-function-type)
+
+Wcast-qual
+UrlSuffix(gcc/Warning-Options.html#index-Wcast-qual)
+
+Wcatch-value
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wcatch-value)
+
+Wcatch-value=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wcatch-value)
+
+Wchar-subscripts
+UrlSuffix(gcc/Warning-Options.html#index-Wchar-subscripts)
+
+Wclobbered
+UrlSuffix(gcc/Warning-Options.html#index-Wclobbered)
+
+Wcomma-subscript
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wcomma-subscript)
+
+Wcomment
+UrlSuffix(gcc/Warning-Options.html#index-Wcomment)
+
+Wcomments
+UrlSuffix(gcc/Warning-Options.html#index-Wcomments)
+
+Wconditionally-supported
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wconditionally-supported)
+
+Wconversion
+UrlSuffix(gcc/Warning-Options.html#index-Wconversion)
+
+Wconversion-null
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wconversion-null)
+
+Wcpp
+UrlSuffix(gcc/Warning-Options.html#index-Wcpp)
+
+Wctad-maybe-unsupported
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wctad-maybe-unsupported)
+
+Wctor-dtor-privacy
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wctor-dtor-privacy)
+
+Wdangling-else
+UrlSuffix(gcc/Warning-Options.html#index-Wdangling-else)
+
+Wdangling-pointer
+UrlSuffix(gcc/Warning-Options.html#index-Wdangling-pointer)
+
+Wdangling-pointer=
+UrlSuffix(gcc/Warning-Options.html#index-Wdangling-pointer)
+
+Wdangling-reference
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wdangling-reference)
+
+Wdate-time
+UrlSuffix(gcc/Warning-Options.html#index-Wdate-time)
+
+Wdeclaration-after-statement
+UrlSuffix(gcc/Warning-Options.html#index-Wdeclaration-after-statement)
+
+Wdelete-incomplete
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wdelete-incomplete)
+
+Wdelete-non-virtual-dtor
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wdelete-non-virtual-dtor)
+
+Wdeprecated
+UrlSuffix(gcc/Warning-Options.html#index-Wdeprecated) LangUrlSuffix_D(gdc/Warnings.html#index-Wdeprecated)
+
+Wdeprecated-copy
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-copy)
+
+Wdeprecated-enum-enum-conversion
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-enum-enum-conversion)
+
+Wdeprecated-enum-float-conversion
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-enum-float-conversion)
+
+Wdesignated-init
+UrlSuffix(gcc/Warning-Options.html#index-Wdesignated-init)
+
+Wdiscarded-array-qualifiers
+UrlSuffix(gcc/Warning-Options.html#index-Wdiscarded-array-qualifiers)
+
+Wdiscarded-qualifiers
+UrlSuffix(gcc/Warning-Options.html#index-Wdiscarded-qualifiers)
+
+Wdiv-by-zero
+UrlSuffix(gcc/Warning-Options.html#index-Wdiv-by-zero)
+
+Wduplicated-branches
+UrlSuffix(gcc/Warning-Options.html#index-Wduplicated-branches)
+
+Wduplicated-cond
+UrlSuffix(gcc/Warning-Options.html#index-Wduplicated-cond)
+
+Weffc++
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Weffc_002b_002b)
+
+Wempty-body
+UrlSuffix(gcc/Warning-Options.html#index-Wempty-body)
+
+Wendif-labels
+UrlSuffix(gcc/Warning-Options.html#index-Wendif-labels)
+
+Wenum-compare
+UrlSuffix(gcc/Warning-Options.html#index-Wenum-compare)
+
+Wenum-conversion
+UrlSuffix(gcc/Warning-Options.html#index-Wenum-conversion)
+
+Wenum-int-mismatch
+UrlSuffix(gcc/Warning-Options.html#index-Wenum-int-mismatch)
+
+Werror
+UrlSuffix(gcc/Warning-Options.html#index-Werror) LangUrlSuffix_D(gdc/Warnings.html#index-Werror)
+
+Wexceptions
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wexceptions)
+
+Wextra
+UrlSuffix(gcc/Warning-Options.html#index-Wextra) LangUrlSuffix_D(gdc/Warnings.html#index-Wextra)
+
+Wextra-semi
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wextra-semi)
+
+Wfloat-conversion
+UrlSuffix(gcc/Warning-Options.html#index-Wfloat-conversion)
+
+Wfloat-equal
+UrlSuffix(gcc/Warning-Options.html#index-Wfloat-equal)
+
+Wformat
+UrlSuffix(gcc/Warning-Options.html#index-Wformat)
+
+Wformat-contains-nul
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-contains-nul)
+
+Wformat-extra-args
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-extra-args)
+
+Wformat-nonliteral
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-nonliteral)
+
+Wformat-overflow
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-overflow)
+
+Wformat-security
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-security)
+
+Wformat-signedness
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-signedness)
+
+Wformat-truncation
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-truncation)
+
+Wformat-y2k
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-y2k)
+
+Wformat-zero-length
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-zero-length)
+
+Wformat=
+UrlSuffix(gcc/Warning-Options.html#index-Wformat)
+
+Wformat-overflow=
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-overflow)
+
+Wformat-truncation=
+UrlSuffix(gcc/Warning-Options.html#index-Wformat-truncation)
+
+Wflex-array-member-not-at-end
+UrlSuffix(gcc/Warning-Options.html#index-Wflex-array-member-not-at-end)
+
+Wif-not-aligned
+UrlSuffix(gcc/Warning-Options.html#index-Wif-not-aligned)
+
+Wignored-qualifiers
+UrlSuffix(gcc/Warning-Options.html#index-Wignored-qualifiers)
+
+Wignored-attributes
+UrlSuffix(gcc/Warning-Options.html#index-Wignored-attributes)
+
+Winaccessible-base
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Winaccessible-base)
+
+Wincompatible-pointer-types
+UrlSuffix(gcc/Warning-Options.html#index-Wincompatible-pointer-types)
+
+Winfinite-recursion
+UrlSuffix(gcc/Warning-Options.html#index-Winfinite-recursion)
+
+Waddress-of-packed-member
+UrlSuffix(gcc/Warning-Options.html#index-Waddress-of-packed-member)
+
+Winit-self
+UrlSuffix(gcc/Warning-Options.html#index-Winit-self)
+
+Winit-list-lifetime
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Winit-list-lifetime)
+
+Winterference-size
+UrlSuffix(gcc/Warning-Options.html#index-Winterference-size)
+
+Wimplicit
+UrlSuffix(gcc/Warning-Options.html#index-Wimplicit)
+
+Wimplicit-fallthrough=
+UrlSuffix(gcc/Warning-Options.html#index-Wimplicit-fallthrough)
+
+Wdouble-promotion
+UrlSuffix(gcc/Warning-Options.html#index-Wdouble-promotion)
+
+Wexpansion-to-defined
+UrlSuffix(gcc/Warning-Options.html#index-Wexpansion-to-defined)
+
+Wimplicit-function-declaration
+UrlSuffix(gcc/Warning-Options.html#index-Wimplicit-function-declaration)
+
+Wimplicit-int
+UrlSuffix(gcc/Warning-Options.html#index-Wimplicit-int)
+
+Winherited-variadic-ctor
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Winherited-variadic-ctor)
+
+Wint-conversion
+UrlSuffix(gcc/Warning-Options.html#index-Wint-conversion)
+
+Wint-in-bool-context
+UrlSuffix(gcc/Warning-Options.html#index-Wint-in-bool-context)
+
+Wint-to-pointer-cast
+UrlSuffix(gcc/Warning-Options.html#index-Wint-to-pointer-cast)
+
+Winvalid-constexpr
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Winvalid-constexpr)
+
+Winvalid-offsetof
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Winvalid-offsetof)
+
+Winvalid-pch
+UrlSuffix(gcc/Warning-Options.html#index-Winvalid-pch)
+
+Winvalid-utf8
+UrlSuffix(gcc/Warning-Options.html#index-Winvalid-utf8)
+
+Wjump-misses-init
+UrlSuffix(gcc/Warning-Options.html#index-Wjump-misses-init)
+
+Wliteral-suffix
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wliteral-suffix)
+
+Wlogical-op
+UrlSuffix(gcc/Warning-Options.html#index-Wlogical-op)
+
+Wlogical-not-parentheses
+UrlSuffix(gcc/Warning-Options.html#index-Wlogical-not-parentheses)
+
+Wlong-long
+UrlSuffix(gcc/Warning-Options.html#index-Wlong-long)
+
+Wmain
+UrlSuffix(gcc/Warning-Options.html#index-Wmain)
+
+Wmain
+UrlSuffix(gcc/Warning-Options.html#index-Wmain)
+
+Wmemset-transposed-args
+UrlSuffix(gcc/Warning-Options.html#index-Wmemset-transposed-args)
+
+Wmemset-elt-size
+UrlSuffix(gcc/Warning-Options.html#index-Wmemset-elt-size)
+
+Wmisleading-indentation
+UrlSuffix(gcc/Warning-Options.html#index-Wmisleading-indentation)
+
+Wmismatched-dealloc
+UrlSuffix(gcc/Warning-Options.html#index-Wmismatched-dealloc)
+
+Wmismatched-new-delete
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wmismatched-new-delete)
+
+Wmismatched-tags
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wmismatched-tags)
+
+Wmissing-braces
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-braces)
+
+Wmissing-declarations
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-declarations)
+
+Wmissing-field-initializers
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-field-initializers)
+
+Wmissing-requires
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-requires)
+
+Wmissing-template-keyword
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-template-keyword)
+
+Wmultistatement-macros
+UrlSuffix(gcc/Warning-Options.html#index-Wmultistatement-macros)
+
+Wmultiple-inheritance
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wmultiple-inheritance)
+
+Wnamespaces
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wnamespaces)
+
+Wnrvo
+UrlSuffix(gcc/Warning-Options.html#index-Wno-nrvo)
+
+Wpacked-not-aligned
+UrlSuffix(gcc/Warning-Options.html#index-Wno-packed-not-aligned)
+
+Wrange-loop-construct
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-range-loop-construct)
+
+Wredundant-tags
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-redundant-tags)
+
+Wsized-deallocation
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-sized-deallocation)
+
+Wsizeof-pointer-div
+UrlSuffix(gcc/Warning-Options.html#index-Wno-sizeof-pointer-div)
+
+Wsizeof-array-div
+UrlSuffix(gcc/Warning-Options.html#index-Wno-sizeof-array-div)
+
+Wsizeof-pointer-memaccess
+UrlSuffix(gcc/Warning-Options.html#index-Wno-sizeof-pointer-memaccess)
+
+Wsizeof-array-argument
+UrlSuffix(gcc/Warning-Options.html#index-Wno-sizeof-array-argument)
+
+Wstring-compare
+UrlSuffix(gcc/Warning-Options.html#index-Wno-string-compare)
+
+Wstringop-overflow
+UrlSuffix(gcc/Warning-Options.html#index-Wno-stringop-overflow)
+
+Wstringop-overflow=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-stringop-overflow)
+
+Wstringop-overread
+UrlSuffix(gcc/Warning-Options.html#index-Wno-stringop-overread)
+
+Wstringop-truncation
+UrlSuffix(gcc/Warning-Options.html#index-Wno-stringop-truncation)
+
+Wstrict-flex-arrays
+UrlSuffix(gcc/Warning-Options.html#index-Wno-strict-flex-arrays)
+
+Wsuggest-attribute=format
+UrlSuffix(gcc/Warning-Options.html#index-Wno-suggest-attribute_003dformat)
+
+Wsuggest-override
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-suggest-override)
+
+Wswitch
+UrlSuffix(gcc/Warning-Options.html#index-Wno-switch)
+
+Wswitch-default
+UrlSuffix(gcc/Warning-Options.html#index-Wno-switch-default)
+
+Wswitch-enum
+UrlSuffix(gcc/Warning-Options.html#index-Wno-switch-enum)
+
+Wswitch-bool
+UrlSuffix(gcc/Warning-Options.html#index-Wno-switch-bool)
+
+Wswitch-outside-range
+UrlSuffix(gcc/Warning-Options.html#index-Wno-switch-outside-range)
+
+Wtemplates
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-templates)
+
+Wmissing-attributes
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-attributes)
+
+Wmissing-format-attribute
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-format-attribute)
+
+Wmissing-include-dirs
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-include-dirs)
+
+Wmissing-parameter-type
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-parameter-type)
+
+Wmissing-prototypes
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-prototypes)
+
+Wmissing-variable-declarations
+UrlSuffix(gcc/Warning-Options.html#index-Wmissing-variable-declarations)
+
+Wmultichar
+UrlSuffix(gcc/Warning-Options.html#index-Wmultichar)
+
+Wnarrowing
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wnarrowing)
+
+Wnested-externs
+UrlSuffix(gcc/Warning-Options.html#index-Wnested-externs)
+
+Wnoexcept
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-noexcept)
+
+Wnoexcept-type
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-noexcept-type)
+
+Wnon-template-friend
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-non-template-friend)
+
+Wclass-conversion
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wclass-conversion)
+
+Wclass-memaccess
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wclass-memaccess)
+
+Wnon-virtual-dtor
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-non-virtual-dtor)
+
+Wnonnull
+UrlSuffix(gcc/Warning-Options.html#index-Wno-nonnull)
+
+Wnonnull
+UrlSuffix(gcc/Warning-Options.html#index-Wno-nonnull)
+
+Wnonnull-compare
+UrlSuffix(gcc/Warning-Options.html#index-Wno-nonnull-compare)
+
+Wnormalized
+UrlSuffix(gcc/Warning-Options.html#index-Wno-normalized)
+
+Wnormalized=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-normalized)
+
+Wobjc-root-class
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-Wobjc-root-class)
+
+Wold-style-cast
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-old-style-cast)
+
+Wold-style-declaration
+UrlSuffix(gcc/Warning-Options.html#index-Wno-old-style-declaration)
+
+Wold-style-definition
+UrlSuffix(gcc/Warning-Options.html#index-Wno-old-style-definition)
+
+Wopenacc-parallelism
+UrlSuffix(gcc/Warning-Options.html#index-Wno-openacc-parallelism)
+
+Wopenmp-simd
+UrlSuffix(gcc/Warning-Options.html#index-Wno-openmp-simd)
+
+Woverlength-strings
+UrlSuffix(gcc/Warning-Options.html#index-Wno-overlength-strings)
+
+Woverloaded-virtual
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-overloaded-virtual)
+
+Woverloaded-virtual=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-overloaded-virtual)
+
+Woverride-init
+UrlSuffix(gcc/Warning-Options.html#index-Wno-override-init)
+
+Woverride-init-side-effects
+UrlSuffix(gcc/Warning-Options.html#index-Wno-override-init-side-effects)
+
+Wpacked-bitfield-compat
+UrlSuffix(gcc/Warning-Options.html#index-Wno-packed-bitfield-compat)
+
+Wparentheses
+UrlSuffix(gcc/Warning-Options.html#index-Wno-parentheses)
+
+Wpedantic
+UrlSuffix(gcc/Warning-Options.html#index-Wno-pedantic)
+
+Wpessimizing-move
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-pessimizing-move)
+
+; skipping UrlSuffix for 'Wpmf-conversions' due to multiple URLs:
+;   duplicate: 'gcc/Bound-member-functions.html#index-Wno-pmf-conversions-1'
+;   duplicate: 'gcc/C_002b_002b-Dialect-Options.html#index-Wno-pmf-conversions'
+
+; skipping UrlSuffix for 'Wpointer-arith' due to multiple URLs:
+;   duplicate: 'gcc/Pointer-Arith.html#index-Wpointer-arith-1'
+;   duplicate: 'gcc/Warning-Options.html#index-Wno-pointer-arith'
+
+Wpointer-sign
+UrlSuffix(gcc/Warning-Options.html#index-Wno-pointer-sign)
+
+Wpointer-compare
+UrlSuffix(gcc/Warning-Options.html#index-Wno-pointer-compare)
+
+Wpointer-to-int-cast
+UrlSuffix(gcc/Warning-Options.html#index-Wno-pointer-to-int-cast)
+
+Wpragmas
+UrlSuffix(gcc/Warning-Options.html#index-Wno-pragmas)
+
+Wprio-ctor-dtor
+UrlSuffix(gcc/Warning-Options.html#index-Wno-prio-ctor-dtor)
+
+Wproperty-assign-default
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-Wno-property-assign-default)
+
+Wprotocol
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-Wno-protocol)
+
+Wplacement-new
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-placement-new)
+
+Wplacement-new=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-placement-new)
+
+Wredundant-decls
+UrlSuffix(gcc/Warning-Options.html#index-Wno-redundant-decls)
+
+Wredundant-move
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-redundant-move)
+
+Wregister
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-register)
+
+Wreorder
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-reorder)
+
+Wreturn-type
+UrlSuffix(gcc/Warning-Options.html#index-Wno-return-type)
+
+Wscalar-storage-order
+UrlSuffix(gcc/Warning-Options.html#index-Wno-scalar-storage-order)
+
+Wselector
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-Wno-selector)
+
+Wself-move
+UrlSuffix(gcc/Warning-Options.html#index-Wno-self-move)
+
+Wsequence-point
+UrlSuffix(gcc/Warning-Options.html#index-Wno-sequence-point)
+
+Wshadow-ivar
+UrlSuffix(gcc/Warning-Options.html#index-Wno-shadow-ivar)
+
+Wshift-overflow
+UrlSuffix(gcc/Warning-Options.html#index-Wno-shift-overflow)
+
+Wshift-overflow=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-shift-overflow)
+
+Wshift-count-negative
+UrlSuffix(gcc/Warning-Options.html#index-Wno-shift-count-negative)
+
+Wshift-count-overflow
+UrlSuffix(gcc/Warning-Options.html#index-Wno-shift-count-overflow)
+
+Wshift-negative-value
+UrlSuffix(gcc/Warning-Options.html#index-Wno-shift-negative-value)
+
+Warith-conversion
+UrlSuffix(gcc/Warning-Options.html#index-Warith-conversion)
+
+Wsign-compare
+UrlSuffix(gcc/Warning-Options.html#index-Wno-sign-compare)
+
+Wsign-compare
+UrlSuffix(gcc/Warning-Options.html#index-Wno-sign-compare)
+
+Wsign-conversion
+UrlSuffix(gcc/Warning-Options.html#index-Wno-sign-conversion)
+
+Wsign-promo
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-sign-promo)
+
+Wstrict-null-sentinel
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-strict-null-sentinel)
+
+Wstrict-prototypes
+UrlSuffix(gcc/Warning-Options.html#index-Wno-strict-prototypes)
+
+Wstrict-aliasing=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-strict-aliasing)
+
+Wstrict-overflow=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-strict-overflow)
+
+Wstrict-selector-match
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-Wno-strict-selector-match)
+
+Wsync-nand
+UrlSuffix(gcc/Warning-Options.html#index-Wno-sync-nand)
+
+Wsystem-headers
+UrlSuffix(gcc/Warning-Options.html#index-Wno-system-headers)
+
+Wtautological-compare
+UrlSuffix(gcc/Warning-Options.html#index-Wno-tautological-compare)
+
+Wterminate
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-terminate)
+
+Wtraditional
+UrlSuffix(gcc/Warning-Options.html#index-Wno-traditional)
+
+Wtraditional-conversion
+UrlSuffix(gcc/Warning-Options.html#index-Wno-traditional-conversion)
+
+Wtrigraphs
+UrlSuffix(gcc/Warning-Options.html#index-Wtrigraphs)
+
+Wundeclared-selector
+UrlSuffix(gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html#index-Wno-undeclared-selector)
+
+Wundef
+UrlSuffix(gcc/Warning-Options.html#index-Wno-undef)
+
+Wunicode
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unicode)
+
+Wuninitialized
+UrlSuffix(gcc/Warning-Options.html#index-Wno-uninitialized)
+
+Wmaybe-uninitialized
+UrlSuffix(gcc/Warning-Options.html#index-Wmaybe-uninitialized)
+
+Wunknown-pragmas
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unknown-pragmas) LangUrlSuffix_D(gdc/Warnings.html#index-Wno-unknown-pragmas)
+
+Wunsuffixed-float-constants
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unsuffixed-float-constants)
+
+Wunused
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused)
+
+Wunused-local-typedefs
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-local-typedefs)
+
+Wunused-macros
+UrlSuffix(gcc/Warning-Options.html#index-Wunused-macros)
+
+Wunused-result
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-result)
+
+Wunused-variable
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-variable)
+
+Wunused-const-variable
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-const-variable)
+
+Wunused-const-variable=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-unused-const-variable)
+
+Wuse-after-free=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-use-after-free)
+
+Wvariadic-macros
+UrlSuffix(gcc/Warning-Options.html#index-Wno-variadic-macros)
+
+Wvarargs
+UrlSuffix(gcc/Warning-Options.html#index-Wno-varargs) LangUrlSuffix_D(gdc/Warnings.html#index-Wno-varargs)
+
+Wvexing-parse
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-vexing-parse)
+
+Wvla
+UrlSuffix(gcc/Warning-Options.html#index-Wno-vla)
+
+Wvla-larger-than=
+UrlSuffix(gcc/Warning-Options.html#index-Wno-vla-larger-than)
+
+Wvla-parameter
+UrlSuffix(gcc/Warning-Options.html#index-Wno-vla-parameter)
+
+Wvolatile
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-volatile)
+
+Wvolatile-register-var
+UrlSuffix(gcc/Warning-Options.html#index-Wno-volatile-register-var)
+
+Wvirtual-inheritance
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-virtual-inheritance)
+
+Wvirtual-move-assign
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-virtual-move-assign)
+
+Wwrite-strings
+UrlSuffix(gcc/Warning-Options.html#index-Wno-write-strings)
+
+Wxor-used-as-pow
+UrlSuffix(gcc/Warning-Options.html#index-Wno-xor-used-as-pow)
+
+Wzero-as-null-pointer-constant
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-zero-as-null-pointer-constant)
+
+Wuseless-cast
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-useless-cast)
+
+Wsubobject-linkage
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wno-subobject-linkage)
+
+Welaborated-enum-base
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Welaborated-enum-base)
+
+Wduplicate-decl-specifier
+UrlSuffix(gcc/Warning-Options.html#index-Wduplicate-decl-specifier)
+
+Wrestrict
+UrlSuffix(gcc/Warning-Options.html#index-Wno-restrict)
+
+; skipping UrlSuffix for 'ansi' due to multiple URLs:
+;   duplicate: 'gcc/C-Dialect-Options.html#index-ansi-1'
+;   duplicate: 'gcc/Non-bugs.html#index-ansi-3'
+;   duplicate: 'gcc/Other-Builtins.html#index-ansi-2'
+;   duplicate: 'gcc/Standards.html#index-ansi'
+
+; skipping UrlSuffix for 'd' due to multiple URLs:
+;   duplicate: 'gcc/Developer-Options.html#index-d-1'
+;   duplicate: 'gcc/Preprocessor-Options.html#index-d'
+
+fabi-compat-version=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-fabi-compat-version)
+
+faccess-control
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-faccess-control)
+
+fada-spec-parent=
+UrlSuffix(gcc/Overall-Options.html#index-fada-spec-parent)
+
+faligned-new
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-faligned-new)
+
+faligned-new=
+UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-faligned-new)
+
+fasm
+UrlSuffix(gcc/C-Dialect-Options.html#index-fasm)
+
+; skipping UrlSuffix for 'fbuiltin' due to multiple URLs:
+;   duplicate: 'gcc/C-Dialect-Options.html#index-fbuiltin'
+;   duplicate: 'gcc/Other-Builtins.html#index-fno-builtin-3'
+;   duplicate: