diff --git a/.gdb.metadata b/.gdb.metadata
new file mode 100644
index 0000000..fd804f3
--- /dev/null
+++ b/.gdb.metadata
@@ -0,0 +1,3 @@
+ee66294d87a109f88a459d0da5d0bb2da5135f45 SOURCES/gdb-8.2.tar.xz
+1ad1d2c6f0141b37bbe32b8add91b5691ecc6412 SOURCES/gdb-libstdc++-v3-python-8.1.1-20180626.tar.xz
+a08830edc095f4ea8ae516a154942105379c5f67 SOURCES/v2.0.tar.gz
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a8a3997
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+SOURCES/gdb-8.2.tar.xz
+SOURCES/gdb-libstdc++-v3-python-8.1.1-20180626.tar.xz
+SOURCES/v2.0.tar.gz
diff --git a/SOURCES/_gdb.spec.Patch.include b/SOURCES/_gdb.spec.Patch.include
new file mode 100644
index 0000000..5ee7ddc
--- /dev/null
+++ b/SOURCES/_gdb.spec.Patch.include
@@ -0,0 +1,577 @@
+# Match the Fedora's version info.
+#=fedora
+Patch001: gdb-6.3-rh-testversion-20041202.patch
+
+# VLA (Fortran dynamic arrays) from Intel + archer-jankratochvil-vla tests.
+#=push
+Patch002: gdb-vla-intel-fortran-strides.patch
+
+#=push
+Patch003: gdb-vla-intel-fortran-vla-strings.patch
+
+#=push+jan
+Patch004: gdb-vla-intel-stringbt-fix.patch
+
+# Better parse 64-bit PPC system call prologues.
+#=push: Write new testcase.
+Patch005: gdb-6.3-ppc64syscall-20040622.patch
+
+# Include the pc's section when doing a symbol lookup so that the
+# correct symbol is found.
+#=push: Write new testcase.
+Patch006: gdb-6.3-ppc64displaysymbol-20041124.patch
+
+# Add a wrapper script to GDB that implements pstack using the
+# --readnever option.
+#=push
+Patch007: gdb-6.3-gstack-20050411.patch
+
+# VSYSCALL and PIE
+#=fedoratest
+Patch008: gdb-6.3-test-pie-20050107.patch
+
+# Get selftest working with sep-debug-info
+#=fedoratest
+Patch009: gdb-6.3-test-self-20050110.patch
+
+# Test support of multiple destructors just like multiple constructors
+#=fedoratest
+Patch010: gdb-6.3-test-dtorfix-20050121.patch
+
+# Fix to support executable moving
+#=fedoratest
+Patch011: gdb-6.3-test-movedir-20050125.patch
+
+# Test sibling threads to set threaded watchpoints for x86 and x86-64
+#=fedoratest
+Patch012: gdb-6.3-threaded-watchpoints2-20050225.patch
+
+# Notify observers that the inferior has been created
+#=fedoratest
+Patch013: gdb-6.3-inferior-notification-20050721.patch
+
+# Verify printing of inherited members test
+#=fedoratest
+Patch014: gdb-6.3-inheritancetest-20050726.patch
+
+# Add readnever option
+#=push
+Patch015: gdb-6.3-readnever-20050907.patch
+
+# Fix debuginfo addresses resolving for --emit-relocs Linux kernels (BZ 203661).
+#=push+jan: There was some mail thread about it, this patch may be a hack.
+Patch016: gdb-6.5-bz203661-emit-relocs.patch
+
+# Support TLS symbols (+`errno' suggestion if no pthread is found) (BZ 185337).
+#=push+jan: It should be replaced by Infinity project.
+Patch017: gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch
+
+# Fix TLS symbols resolving for shared libraries with a relative pathname.
+# The testsuite needs `gdb-6.5-tls-of-separate-debuginfo.patch'.
+#=fedoratest: One should recheck if it is really fixed upstream.
+Patch018: gdb-6.5-sharedlibrary-path.patch
+
+# Improved testsuite results by the testsuite provided by the courtesy of BEA.
+#=fedoratest: For upstream it should be rewritten as a dejagnu test, the test of no "??" was useful.
+Patch019: gdb-6.5-BEA-testsuite.patch
+
+# Testcase for deadlocking on last address space byte; for corrupted backtraces.
+#=fedoratest
+Patch020: gdb-6.5-last-address-space-byte-test.patch
+
+# Fix readline segfault on excessively long hand-typed lines.
+#=fedoratest
+Patch021: gdb-6.5-readline-long-line-crash-test.patch
+
+# Fix bogus 0x0 unwind of the thread's topmost function clone(3) (BZ 216711).
+#=fedora
+Patch022: gdb-6.5-bz216711-clone-is-outermost.patch
+
+# Test sideeffects of skipping ppc .so libs trampolines (BZ 218379).
+#=fedoratest
+Patch023: gdb-6.5-bz218379-ppc-solib-trampoline-test.patch
+
+# Fix lockup on trampoline vs. its function lookup; unreproducible (BZ 218379).
+#=fedora
+Patch024: gdb-6.5-bz218379-solib-trampoline-lookup-lock-fix.patch
+
+# Find symbols properly at their original (included) file (BZ 109921).
+#=fedoratest
+Patch025: gdb-6.5-bz109921-DW_AT_decl_file-test.patch
+
+# Update PPC unwinding patches to their upstream variants (BZ 140532).
+#=fedoratest
+Patch026: gdb-6.3-bz140532-ppc-unwinding-test.patch
+
+# Testcase for exec() from threaded program (BZ 202689).
+#=fedoratest
+Patch027: gdb-6.3-bz202689-exec-from-pthread-test.patch
+
+# Testcase for PPC Power6/DFP instructions disassembly (BZ 230000).
+#=fedoratest
+Patch028: gdb-6.6-bz230000-power6-disassembly-test.patch
+
+# Allow running `/usr/bin/gcore' with provided but inaccessible tty (BZ 229517).
+#=fedoratest
+Patch029: gdb-6.6-bz229517-gcore-without-terminal.patch
+
+# Avoid too long timeouts on failing cases of "annota1.exp annota3.exp".
+#=fedoratest
+Patch030: gdb-6.6-testsuite-timeouts.patch
+
+# Support for stepping over PPC atomic instruction sequences (BZ 237572).
+#=fedoratest
+Patch031: gdb-6.6-bz237572-ppc-atomic-sequence-test.patch
+
+# Make upstream `set scheduler-locking step' as default.
+#=push+jan: How much is scheduler-locking relevant after non-stop?
+Patch032: gdb-6.6-scheduler_locking-step-is-default.patch
+
+# Test kernel VDSO decoding while attaching to an i386 process.
+#=fedoratest
+Patch033: gdb-6.3-attach-see-vdso-test.patch
+
+# Test leftover zombie process (BZ 243845).
+#=fedoratest
+Patch034: gdb-6.5-bz243845-stale-testing-zombie-test.patch
+
+# New locating of the matching binaries from the pure core file (build-id).
+#=push+jan
+Patch035: gdb-6.6-buildid-locate.patch
+
+# Fix loading of core files without build-ids but with build-ids in executables.
+# Load strictly build-id-checked core files only if no executable is specified
+# (Jan Kratochvil, RH BZ 1339862).
+#=push+jan
+Patch036: gdb-6.6-buildid-locate-solib-missing-ids.patch
+
+#=push+jan
+Patch037: gdb-6.6-buildid-locate-rpm.patch
+
+# Fix displaying of numeric char arrays as strings (BZ 224128).
+#=fedoratest: But it is failing anyway, one should check the behavior more.
+Patch038: gdb-6.7-charsign-test.patch
+
+# Test PPC hiding of call-volatile parameter register.
+#=fedoratest
+Patch039: gdb-6.7-ppc-clobbered-registers-O2-test.patch
+
+# Testsuite fixes for more stable/comparable results.
+#=fedoratest
+Patch040: gdb-6.7-testsuite-stable-results.patch
+
+# Test ia64 memory leaks of the code using libunwind.
+#=fedoratest
+Patch041: gdb-6.5-ia64-libunwind-leak-test.patch
+
+# Test hiding unexpected breakpoints on intentional step commands.
+#=fedoratest
+Patch042: gdb-6.5-missed-trap-on-step-test.patch
+
+# Test gcore memory and time requirements for large inferiors.
+#=fedoratest
+Patch043: gdb-6.5-gcore-buffer-limit-test.patch
+
+# Test GCORE for shmid 0 shared memory mappings.
+#=fedoratest: But it is broken anyway, sometimes the case being tested is not reproducible.
+Patch044: gdb-6.3-mapping-zero-inode-test.patch
+
+# Test a crash on `focus cmd', `focus prev' commands.
+#=fedoratest
+Patch045: gdb-6.3-focus-cmd-prev-test.patch
+
+# Test various forms of threads tracking across exec() (BZ 442765).
+#=fedoratest
+Patch046: gdb-6.8-bz442765-threaded-exec-test.patch
+
+# Silence memcpy check which returns false positive (sparc64)
+#=push: But it is just a GCC workaround, look up the existing GCC PR for it.
+Patch047: gdb-6.8-sparc64-silence-memcpy-check.patch
+
+# Test a crash on libraries missing the .text section.
+#=fedoratest
+Patch048: gdb-6.5-section-num-fixup-test.patch
+
+# Fix register assignments with no GDB stack frames (BZ 436037).
+#=push+jan: This fix is incorrect.
+Patch049: gdb-6.8-bz436037-reg-no-longer-active.patch
+
+# Test the watchpoints conditionals works.
+#=fedoratest
+Patch050: gdb-6.8-watchpoint-conditionals-test.patch
+
+# Fix resolving of variables at locations lists in prelinked libs (BZ 466901).
+#=fedoratest
+Patch051: gdb-6.8-bz466901-backtrace-full-prelinked.patch
+
+# New test for step-resume breakpoint placed in multiple threads at once.
+#=fedoratest
+Patch052: gdb-simultaneous-step-resume-breakpoint-test.patch
+
+# Fix GNU/Linux core open: Can't read pathname for load map: Input/output error.
+# Fix regression of undisplayed missing shared libraries caused by a fix for.
+#=fedoratest: It should be in glibc: libc-alpha: <20091004161706.GA27450@.*>
+Patch053: gdb-core-open-vdso-warning.patch
+
+# Fix syscall restarts for amd64->i386 biarch.
+#=push+jan
+Patch054: gdb-x86_64-i386-syscall-restart.patch
+
+# Fix stepping with OMP parallel Fortran sections (BZ 533176).
+#=push+jan: It requires some better DWARF annotations.
+Patch055: gdb-bz533176-fortran-omp-step.patch
+
+# Fix regression by python on ia64 due to stale current frame.
+#=push+jan
+Patch056: gdb-follow-child-stale-parent.patch
+
+# Workaround ccache making lineno non-zero for command-line definitions.
+#=fedoratest: ccache is rarely used and it is even fixed now.
+Patch057: gdb-ccache-workaround.patch
+
+#=push+jan: May get obsoleted by Tom's unrelocated objfiles patch.
+Patch058: gdb-archer-pie-addons.patch
+
+#=push+jan: Breakpoints disabling matching should not be based on address.
+Patch059: gdb-archer-pie-addons-keep-disabled.patch
+
+# Testcase for "Do not make up line information" fix by Daniel Jacobowitz.
+#=fedoratest
+Patch060: gdb-lineno-makeup-test.patch
+
+# Test power7 ppc disassembly.
+#=fedoratest
+Patch061: gdb-ppc-power7-test.patch
+
+# Fix i386+x86_64 rwatch+awatch before run, regression against 6.8 (BZ 541866).
+# Fix i386 rwatch+awatch before run (BZ 688788, on top of BZ 541866).
+#=push+jan: It should be fixed properly instead.
+Patch062: gdb-bz541866-rwatch-before-run.patch
+
+# Workaround non-stop moribund locations exploited by kernel utrace (BZ 590623).
+#=push+jan: Currently it is still not fully safe.
+Patch063: gdb-moribund-utrace-workaround.patch
+
+# Fix follow-exec for C++ programs (bugreported by Martin Stransky).
+#=fedoratest
+Patch064: gdb-archer-next-over-throw-cxx-exec.patch
+
+# Backport DWARF-4 support (BZ 601887, Tom Tromey).
+#=fedoratest
+Patch065: gdb-bz601887-dwarf4-rh-test.patch
+
+#=push+jan
+Patch066: gdb-6.6-buildid-locate-core-as-arg.patch
+
+# Workaround librpm BZ 643031 due to its unexpected exit() calls (BZ 642879).
+#=push+jan
+Patch067: gdb-6.6-buildid-locate-rpm-librpm-workaround.patch
+
+# [delayed-symfile] Test a backtrace regression on CFIs without DIE (BZ 614604).
+#=fedoratest
+Patch068: gdb-test-bt-cfi-without-die.patch
+
+# Out of memory is just an error, not fatal (uninitialized VLS vars, BZ 568248).
+#=push+jan: Inferior objects should be read in parts, then this patch gets obsoleted.
+Patch069: gdb-bz568248-oom-is-error.patch
+
+# Verify GDB Python built-in function gdb.solib_address exists (BZ # 634108).
+#=fedoratest
+Patch070: gdb-bz634108-solib_address.patch
+
+# New test gdb.arch/x86_64-pid0-core.exp for kernel PID 0 cores (BZ 611435).
+#=fedoratest
+Patch071: gdb-test-pid0-core.patch
+
+# [archer-tromey-delayed-symfile] New test gdb.dwarf2/dw2-aranges.exp.
+#=fedoratest
+Patch072: gdb-test-dw2-aranges.patch
+
+# [archer-keiths-expr-cumulative+upstream] Import C++ testcases.
+#=fedoratest
+Patch073: gdb-test-expr-cumulative-archer.patch
+
+# Fix regressions on C++ names resolving (PR 11734, PR 12273, Keith Seitz).
+#=fedoratest
+Patch074: gdb-physname-pr11734-test.patch
+
+# Fix regressions on C++ names resolving (PR 11734, PR 12273, Keith Seitz).
+#=fedoratest
+Patch075: gdb-physname-pr12273-test.patch
+
+# Toolchain on sparc is slightly broken and debuginfo files are generated
+# with non 64bit aligned tables/offsets.
+# See for example readelf -S ../Xvnc.debug.
+#
+# As a consenquence calculation of sectp->filepos as used in
+# dwarf2_read_section (gdb/dwarf2read.c:1525) will return a non aligned buffer
+# that cannot be used directly as done with MMAP.
+# Usage will result in a BusError.
+#
+# While we figure out what's wrong in the toolchain and do a full archive
+# rebuild to fix it, we need to be able to use gdb :)
+#=push
+Patch076: gdb-7.2.50-sparc-add-workaround-to-broken-debug-files.patch
+
+# Test GDB opcodes/ disassembly of Intel Ivy Bridge instructions (BZ 696890).
+#=fedoratest
+Patch077: gdb-test-ivy-bridge.patch
+
+# Hack for proper PIE run of the testsuite.
+#=fedoratest
+Patch078: gdb-runtest-pie-override.patch
+
+# Print reasons for failed attach/spawn incl. SELinux deny_ptrace (BZ 786878).
+#=push+jan
+Patch079: gdb-attach-fail-reasons-5of5.patch
+
+# Workaround PR libc/14166 for inferior calls of strstr.
+#=fedora: Compatibility with RHELs (unchecked which ones).
+Patch080: gdb-glibc-strstr-workaround.patch
+
+# Include testcase for `Unable to see a variable inside a module (XLF)' (BZ 823789).
+#=fedoratest
+Patch081: gdb-rhel5.9-testcase-xlf-var-inside-mod.patch
+
+# Testcase for `Setting solib-absolute-prefix breaks vDSO' (BZ 818343).
+#=fedoratest
+Patch082: gdb-rhbz-818343-set-solib-absolute-prefix-testcase.patch
+
+# Fix `GDB cannot access struct member whose offset is larger than 256MB'
+# (RH BZ 795424).
+#=push
+Patch083: gdb-rhbz795424-bitpos-20of25.patch
+
+# Fix `GDB cannot access struct member whose offset is larger than 256MB'
+# (RH BZ 795424).
+#=push
+Patch084: gdb-rhbz795424-bitpos-21of25.patch
+
+# Fix `GDB cannot access struct member whose offset is larger than 256MB'
+# (RH BZ 795424).
+#=push
+Patch085: gdb-rhbz795424-bitpos-22of25.patch
+
+# Fix `GDB cannot access struct member whose offset is larger than 256MB'
+# (RH BZ 795424).
+#=push
+Patch086: gdb-rhbz795424-bitpos-23of25.patch
+
+# Fix `GDB cannot access struct member whose offset is larger than 256MB'
+# (RH BZ 795424).
+#=push
+Patch087: gdb-rhbz795424-bitpos-25of25.patch
+
+# Fix `GDB cannot access struct member whose offset is larger than 256MB'
+# (RH BZ 795424).
+#=push
+Patch088: gdb-rhbz795424-bitpos-25of25-test.patch
+
+# Fix `GDB cannot access struct member whose offset is larger than 256MB'
+# (RH BZ 795424).
+#=push
+Patch089: gdb-rhbz795424-bitpos-lazyvalue.patch
+
+# Import regression test for `gdb/findvar.c:417: internal-error:
+# read_var_value: Assertion `frame' failed.' (RH BZ 947564) from RHEL 6.5.
+#=fedoratest
+Patch090: gdb-rhbz947564-findvar-assertion-frame-failed-testcase.patch
+
+# Fix crash of -readnow /usr/lib/debug/usr/bin/gnatbind.debug (BZ 1069211).
+#=push+jan
+Patch091: gdb-gnat-dwarf-crash-3of3.patch
+
+# Fix 'memory leak in infpy_read_memory()' (RH BZ 1007614)
+#=fedoratest
+Patch092: gdb-rhbz1007614-memleak-infpy_read_memory-test.patch
+
+# Fix 'gdb gives highly misleading error when debuginfo pkg is present,
+# but not corresponding binary pkg' (RH BZ 981154).
+#=push+jan
+Patch093: gdb-6.6-buildid-locate-misleading-warning-missing-debuginfo-rhbz981154.patch
+
+#=fedoratest
+Patch094: gdb-archer-vla-tests.patch
+
+#=fedoratest
+Patch095: gdb-vla-intel-tests.patch
+
+# Continue backtrace even if a frame filter throws an exception (Phil Muldoon).
+#=push
+Patch096: gdb-btrobust.patch
+
+# Display Fortran strings in backtraces.
+#=fedoratest
+Patch097: gdb-fortran-frame-string.patch
+
+# Fix Python GIL with gdb.execute("continue") (Phil Muldoon, BZ 1116957).
+#=push
+Patch098: gdb-python-gil.patch
+
+# Testcase for '[SAP] Recursive dlopen causes SAP HANA installer to
+# crash.' (RH BZ 1156192).
+#=fedoratest
+Patch099: gdb-rhbz1156192-recursive-dlopen-test.patch
+
+# Fix jit-reader.h for multi-lib.
+#=push+jan
+Patch100: gdb-jit-reader-multilib.patch
+
+# Fix '`catch syscall' doesn't work for parent after `fork' is called'
+# (Philippe Waroquiers, RH BZ 1149205).
+#=fedoratest
+Patch101: gdb-rhbz1149205-catch-syscall-after-fork-test.patch
+
+# Fix 'backport GDB 7.4 fix to RHEL 6.6 GDB' [Original Sourceware bug
+# description: 'C++ (and objc): Internal error on unqualified name
+# re-set', PR 11657] (RH BZ 1186476).
+#=fedoratest
+Patch102: gdb-rhbz1186476-internal-error-unqualified-name-re-set-test.patch
+
+# Test 'info type-printers' Python error (RH BZ 1350436).
+#=fedoratest
+Patch103: gdb-rhbz1350436-type-printers-error.patch
+
+# Fix '[ppc64] and [s390x] wrong prologue skip on -O2 -g code' (Jan
+# Kratochvil, RH BZ 1084404).
+#=fedoratest
+Patch104: gdb-rhbz1084404-ppc64-s390x-wrong-prologue-skip-O2-g-3of3.patch
+
+# Never kill PID on: gdb exec PID (Jan Kratochvil, RH BZ 1219747).
+#=push+jan
+Patch105: gdb-bz1219747-attach-kills.patch
+
+# Force libncursesw over libncurses to match the includes (RH BZ 1270534).
+#=push+jan
+Patch106: gdb-fedora-libncursesw.patch
+
+# Test clflushopt instruction decode (for RH BZ 1262471).
+#=fedoratest
+Patch107: gdb-opcodes-clflushopt-test.patch
+
+# [rhel6] DTS backward Python compatibility API (BZ 1020004, Phil Muldoon).
+#=fedora
+Patch108: gdb-dts-rhel6-python-compat.patch
+
+# [SCL] Skip deprecated .gdb_index warning for Red Hat built files (BZ 953585).
+#=push+jan
+Patch109: gdb-6.6-buildid-locate-rpm-scl.patch
+
+# Work around readline-6.2 incompatibility not asking for --more-- (BZ 701131).
+#=fedora
+Patch110: gdb-readline62-ask-more-rh.patch
+
+# Make the GDB quit processing non-abortable to cleanup everything properly.
+#=fedora: It was useful only after gdb-6.8-attach-signalled-detach-stopped.patch .
+Patch111: gdb-6.8-quit-never-aborts.patch
+
+# [aarch64] Fix hardware watchpoints (RH BZ 1261564).
+#=fedoratest
+Patch112: gdb-rhbz1261564-aarch64-hw-watchpoint-test.patch
+
+# Add messages suggesting more recent RHEL gdbserver (RH BZ 1321114).
+#=fedora
+Patch113: gdb-container-rh-pkg.patch
+
+# New test for Python "Cannot locate object file for block" (for RH BZ 1325795).
+#=fedoratest
+Patch114: gdb-rhbz1325795-framefilters-test.patch
+
+# [dts+el7] [x86*] Bundle linux_perf.h for libipt (RH BZ 1256513).
+#=fedora
+Patch115: gdb-linux_perf-bundle.patch
+
+# Fix gdb-headless /usr/bin/ executables (BZ 1390251).
+#=fedora
+Patch116: gdb-libexec-add-index.patch
+
+# New testcase for: Fix <tab>-completion crash (Gary Benson, RH BZ 1398387).
+#=fedoratest
+Patch117: gdb-rhbz1398387-tab-crash-test.patch
+
+# [testsuite] Fix false selftest.exp FAIL from system readline-6.3+ (Patrick Palka).
+#=fedoratest
+Patch118: gdb-testsuite-readline63-sigint.patch
+
+# Python patches of: http://sourceware.org/gdb/wiki/ProjectArcher
+#=push
+Patch119: gdb-archer.patch
+
+# Revert upstream commit 469412dd9ccc4de5874fd3299b105833f36b34cd
+Patch120: gdb-vla-intel-fix-print-char-array.patch
+
+# [s390x] Backport arch12 instructions decoding (RH BZ 1553104).
+# =fedoratest
+Patch121: gdb-rhbz1553104-s390x-arch12-test.patch
+
+# Implement IPv6 support for GDB/gdbserver (RH BZ 881849, Sergio Durigan Junior).
+Patch122: gdb-rhbz881849-ipv6-1of3.patch
+
+
+Patch123: gdb-rhbz881849-ipv6-2of3.patch
+
+
+Patch124: gdb-rhbz881849-ipv6-3of3.patch
+
+# Add GDB support to access/display POWER8 registers (IBM, RH BZ 1187581).
+Patch125: gdb-rhbz1187581-power8-regs-1of7.patch
+
+# Add GDB support to access/display POWER8 registers (IBM, RH BZ 1187581).
+Patch126: gdb-rhbz1187581-power8-regs-2of7.patch
+
+# Add GDB support to access/display POWER8 registers (IBM, RH BZ 1187581).
+Patch127: gdb-rhbz1187581-power8-regs-3of7.patch
+
+# Add GDB support to access/display POWER8 registers (IBM, RH BZ 1187581).
+Patch128: gdb-rhbz1187581-power8-regs-4of7.patch
+
+# Add GDB support to access/display POWER8 registers (IBM, RH BZ 1187581).
+Patch129: gdb-rhbz1187581-power8-regs-5of7.patch
+
+# Add GDB support to access/display POWER8 registers (IBM, RH BZ 1187581).
+Patch130: gdb-rhbz1187581-power8-regs-6of7.patch
+
+# Add GDB support to access/display POWER8 registers (IBM, RH BZ 1187581).
+Patch131: gdb-rhbz1187581-power8-regs-7of7.patch
+
+# Fix for 'gdb in batch mode always exit with status 0' (Gary Benson)
+# RHBZ #1491128
+Patch132: gdb-rhbz1491128-batch-mode-exit-status-1of2.patch
+
+# Fix for 'gdb in batch mode always exit with status 0' (Gary Benson)
+# RHBZ #1491128
+Patch133: gdb-rhbz1491128-batch-mode-exit-status-2of2.patch
+
+# Use pulongest in aarch64-linux-tdep.c.
+# This patch was forgotten during the 8.2 release process, and is
+# needed to unbreak GDB when compiling on 32-bit arches.
+Patch134: gdb-use-pulongest-aarch64-linux-tdep.patch
+
+# Fix for 'GDB crashes when running from a deleted directory'
+# (Tom Tromey, RHBZ#1653410)
+Patch135: gdb-rhbz1653410-avoid-crash-when-calling-warning-too-early.patch
+
+# Fix for 'py-bt is broken, results in exception'.
+# RHBZ 1639242
+Patch136: gdb-rhbz1639242-fix-dwarf2_find_containing_comp_unit-binary-search.patch
+
+# Fix 'Assertion `SYMBOL_LANGUAGE (sym) == DICT_LANGUAGE (dict)->la_language' failed.'
+# Keith Seitz, RHBZ#1560010.
+Patch137: gdb-rhbz1560010-fix-assertion-symbol-language-dict-language-1of5.patch
+
+# Fix 'Assertion `SYMBOL_LANGUAGE (sym) == DICT_LANGUAGE (dict)->la_language' failed.'
+# Keith Seitz, RHBZ#1560010.
+Patch138: gdb-rhbz1560010-fix-assertion-symbol-language-dict-language-2of5.patch
+
+# Fix 'Assertion `SYMBOL_LANGUAGE (sym) == DICT_LANGUAGE (dict)->la_language' failed.'
+# Keith Seitz, RHBZ#1560010.
+Patch139: gdb-rhbz1560010-fix-assertion-symbol-language-dict-language-3of5.patch
+
+# Fix 'Assertion `SYMBOL_LANGUAGE (sym) == DICT_LANGUAGE (dict)->la_language' failed.'
+# Keith Seitz, RHBZ#1560010.
+Patch140: gdb-rhbz1560010-fix-assertion-symbol-language-dict-language-4of5.patch
+
+# Fix 'Assertion `SYMBOL_LANGUAGE (sym) == DICT_LANGUAGE (dict)->la_language' failed.'
+# Keith Seitz, RHBZ#1560010.
+Patch141: gdb-rhbz1560010-fix-assertion-symbol-language-dict-language-5of5.patch
+
diff --git a/SOURCES/_gdb.spec.patch.include b/SOURCES/_gdb.spec.patch.include
new file mode 100644
index 0000000..7edc6fa
--- /dev/null
+++ b/SOURCES/_gdb.spec.patch.include
@@ -0,0 +1,141 @@
+%patch001 -p1
+%patch002 -p1
+%patch003 -p1
+%patch004 -p1
+%patch005 -p1
+%patch006 -p1
+%patch007 -p1
+%patch008 -p1
+%patch009 -p1
+%patch010 -p1
+%patch011 -p1
+%patch012 -p1
+%patch013 -p1
+%patch014 -p1
+%patch015 -p1
+%patch016 -p1
+%patch017 -p1
+%patch018 -p1
+%patch019 -p1
+%patch020 -p1
+%patch021 -p1
+%patch022 -p1
+%patch023 -p1
+%patch024 -p1
+%patch025 -p1
+%patch026 -p1
+%patch027 -p1
+%patch028 -p1
+%patch029 -p1
+%patch030 -p1
+%patch031 -p1
+%patch032 -p1
+%patch033 -p1
+%patch034 -p1
+%patch035 -p1
+%patch036 -p1
+%patch037 -p1
+%patch038 -p1
+%patch039 -p1
+%patch040 -p1
+%patch041 -p1
+%patch042 -p1
+%patch043 -p1
+%patch044 -p1
+%patch045 -p1
+%patch046 -p1
+%patch047 -p1
+%patch048 -p1
+%patch049 -p1
+%patch050 -p1
+%patch051 -p1
+%patch052 -p1
+%patch053 -p1
+%patch054 -p1
+%patch055 -p1
+%patch056 -p1
+%patch057 -p1
+%patch058 -p1
+%patch059 -p1
+%patch060 -p1
+%patch061 -p1
+%patch062 -p1
+%patch063 -p1
+%patch064 -p1
+%patch065 -p1
+%patch066 -p1
+%patch067 -p1
+%patch068 -p1
+%patch069 -p1
+%patch070 -p1
+%patch071 -p1
+%patch072 -p1
+%patch073 -p1
+%patch074 -p1
+%patch075 -p1
+%patch076 -p1
+%patch077 -p1
+%patch078 -p1
+%patch079 -p1
+%patch080 -p1
+%patch081 -p1
+%patch082 -p1
+%patch083 -p1
+%patch084 -p1
+%patch085 -p1
+%patch086 -p1
+%patch087 -p1
+%patch088 -p1
+%patch089 -p1
+%patch090 -p1
+%patch091 -p1
+%patch092 -p1
+%patch093 -p1
+%patch094 -p1
+%patch095 -p1
+%patch096 -p1
+%patch097 -p1
+%patch098 -p1
+%patch099 -p1
+%patch100 -p1
+%patch101 -p1
+%patch102 -p1
+%patch103 -p1
+%patch104 -p1
+%patch105 -p1
+%patch106 -p1
+%patch107 -p1
+%patch108 -p1
+%patch109 -p1
+%patch110 -p1
+%patch111 -p1
+%patch112 -p1
+%patch113 -p1
+%patch114 -p1
+%patch115 -p1
+%patch116 -p1
+%patch117 -p1
+%patch118 -p1
+%patch119 -p1
+%patch120 -p1
+%patch121 -p1
+%patch122 -p1
+%patch123 -p1
+%patch124 -p1
+%patch125 -p1
+%patch126 -p1
+%patch127 -p1
+%patch128 -p1
+%patch129 -p1
+%patch130 -p1
+%patch131 -p1
+%patch132 -p1
+%patch133 -p1
+%patch134 -p1
+%patch135 -p1
+%patch136 -p1
+%patch137 -p1
+%patch138 -p1
+%patch139 -p1
+%patch140 -p1
+%patch141 -p1
diff --git a/SOURCES/gdb-6.3-attach-see-vdso-test.patch b/SOURCES/gdb-6.3-attach-see-vdso-test.patch
new file mode 100644
index 0000000..14fff21
--- /dev/null
+++ b/SOURCES/gdb-6.3-attach-see-vdso-test.patch
@@ -0,0 +1,115 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.3-attach-see-vdso-test.patch
+
+;; Test kernel VDSO decoding while attaching to an i386 process.
+;;=fedoratest
+
+diff --git a/gdb/testsuite/gdb.base/attach-see-vdso.c b/gdb/testsuite/gdb.base/attach-see-vdso.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/attach-see-vdso.c
+@@ -0,0 +1,25 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2007 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 2 of the License, 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; if not, write to the Free Software
++   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
++
++#include <unistd.h>
++
++int main ()
++{
++  pause ();
++  return 1;
++}
+diff --git a/gdb/testsuite/gdb.base/attach-see-vdso.exp b/gdb/testsuite/gdb.base/attach-see-vdso.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/attach-see-vdso.exp
+@@ -0,0 +1,72 @@
++# Copyright 2007
++
++# 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++# This file was created by Jan Kratochvil <jan.kratochvil@redhat.com>.
++
++# This test only works on Linux
++if { ![istarget "*-*-linux-gnu*"] } {
++    return 0
++}
++
++set testfile "attach-see-vdso"
++set srcfile  ${testfile}.c
++set binfile  [standard_output_file ${testfile}]
++set escapedbinfile  [string_to_regexp [standard_output_file ${testfile}]]
++
++# The kernel VDSO is used for the syscalls returns only on i386 (not x86_64).
++#
++if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-m32}] != "" } {
++    gdb_suppress_entire_file "Testcase nonthraded compile failed, so all tests in this file will automatically fail."
++}
++
++if [get_compiler_info ${binfile}] {
++    return -1
++}
++
++# Start the program running and then wait for a bit, to be sure
++# that it can be attached to.
++
++set testpid [eval exec $binfile &]
++
++# Avoid some race:
++sleep 2
++
++# Start with clean gdb
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++# Never call: gdb_load ${binfile}
++# as the former problem would not reproduce otherwise.
++
++set test "attach"
++gdb_test_multiple "attach $testpid" "$test" {
++    -re "Attaching to process $testpid\r?\n.*$gdb_prompt $" {
++	pass "$test"
++    }
++}
++
++gdb_test "bt" "#0 *0x\[0-9a-f\]* in \[^?\].*" "backtrace decodes VDSO"
++
++# Exit and detach the process.
++   
++gdb_exit
++
++# Make sure we don't leave a process around to confuse
++# the next test run (and prevent the compile by keeping
++# the text file busy), in case the "set should_exit" didn't
++# work.
++   
++remote_exec build "kill -9 ${testpid}"
diff --git a/SOURCES/gdb-6.3-bz140532-ppc-unwinding-test.patch b/SOURCES/gdb-6.3-bz140532-ppc-unwinding-test.patch
new file mode 100644
index 0000000..4a96e8e
--- /dev/null
+++ b/SOURCES/gdb-6.3-bz140532-ppc-unwinding-test.patch
@@ -0,0 +1,320 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.3-bz140532-ppc-unwinding-test.patch
+
+;; Update PPC unwinding patches to their upstream variants (BZ 140532).
+;;=fedoratest
+
+diff --git a/gdb/testsuite/gdb.arch/powerpc-bcl-prologue-asm32.S b/gdb/testsuite/gdb.arch/powerpc-bcl-prologue-asm32.S
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.arch/powerpc-bcl-prologue-asm32.S
+@@ -0,0 +1,78 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2007 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 2 of the License, 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; if not, write to the Free Software
++   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
++
++	.section	".text"
++	.align 2
++	.globl func0
++	.type	func0, @function
++func0:
++	stwu 1,-16(1)
++	mflr 0
++	stw 31,12(1)
++	stw 0,20(1)
++	mr 31,1
++	bl abort
++	.size	func0, .-func0
++	.align 2
++	.globl func1
++	.type	func1, @function
++func1:
++	stwu 1,-16(1)
++	mflr 0
++/* 20 = BO = branch always
++   31 = BI = CR bit (ignored)  */
++	bcl 20,31,.Lpie
++.Lpie:	stw 31,12(1)
++	stw 0,20(1)
++	mr 31,1
++	bl func0
++	mr 0,3
++	lis 9,var@ha
++	lwz 9,var@l(9)
++	add 0,0,9
++	mr 3,0
++	lwz 11,0(1)
++	lwz 0,4(11)
++	mtlr 0
++	lwz 31,-4(11)
++	mr 1,11
++	blr
++	.size	func1, .-func1
++	.section	.note.GNU-stack,"",@progbits
++	.ident	"GCC: (GNU) 3.4.6 20060404 (Red Hat 3.4.6-8)"
++
++/* Original source file:
++
++#include <stdlib.h>
++
++extern volatile int var;
++
++int func0 (void) __attribute__((__noinline__));
++int func0 (void)
++{
++  abort ();
++  return var;
++}
++
++int func1 (void) __attribute__((__noinline__));
++int func1 (void)
++{
++  return func0 () + var;
++}
++
++*/
+diff --git a/gdb/testsuite/gdb.arch/powerpc-bcl-prologue-asm64.S b/gdb/testsuite/gdb.arch/powerpc-bcl-prologue-asm64.S
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.arch/powerpc-bcl-prologue-asm64.S
+@@ -0,0 +1,98 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2007 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 2 of the License, 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; if not, write to the Free Software
++   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
++
++	.section	".toc","aw"
++	.section	".text"
++	.align 2
++	.globl func0
++	.section	".opd","aw"
++	.align 3
++func0:
++	.quad	.L.func0,.TOC.@tocbase
++	.previous
++	.type	func0, @function
++.L.func0:
++	mflr 0
++	std 31,-8(1)
++	std 0,16(1)
++	stdu 1,-128(1)
++	mr 31,1
++	bl abort
++	nop
++	.long 0
++	.byte 0,0,0,1,128,1,0,1
++	.size	func0,.-.L.func0
++	.section	".toc","aw"
++.LC1:
++	.tc var[TC],var
++	.section	".text"
++	.align 2
++	.globl func1
++	.section	".opd","aw"
++	.align 3
++func1:
++	.quad	.L.func1,.TOC.@tocbase
++	.previous
++	.type	func1, @function
++.L.func1:
++	mflr 0
++/* 20 = BO = branch always
++   31 = BI = CR bit (ignored)  */
++	bcl 20,31,.Lpie
++.Lpie:	std 31,-8(1)
++	std 0,16(1)
++	stdu 1,-128(1)
++	mr 31,1
++	bl func0
++	mr 11,3
++	ld 9,.LC1@toc(2)
++	lwz 0,0(9)
++	add 0,11,0
++	extsw 0,0
++	mr 3,0
++	ld 1,0(1)
++	ld 0,16(1)
++	mtlr 0
++	ld 31,-8(1)
++	blr
++	.long 0
++	.byte 0,0,0,1,128,1,0,1
++	.size	func1,.-.L.func1
++	.section	.note.GNU-stack,"",@progbits
++	.ident	"GCC: (GNU) 3.4.6 20060404 (Red Hat 3.4.6-8)"
++
++/* Original source file:
++
++#include <stdlib.h>
++
++extern volatile int var;
++
++int func0 (void) __attribute__((__noinline__));
++int func0 (void)
++{
++  abort ();
++  return var;
++}
++
++int func1 (void) __attribute__((__noinline__));
++int func1 (void)
++{
++  return func0 () + var;
++}
++
++*/
+diff --git a/gdb/testsuite/gdb.arch/powerpc-bcl-prologue.c b/gdb/testsuite/gdb.arch/powerpc-bcl-prologue.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.arch/powerpc-bcl-prologue.c
+@@ -0,0 +1,29 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2007 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 2 of the License, 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; if not, write to the Free Software
++   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
++
++/* Force `-fpie' double jump bl->blrl.  */
++/* No longer used.  */
++volatile int var;
++
++extern int func1 (void);
++
++int main (void)
++{
++  func1 ();
++  return 0;
++}
+diff --git a/gdb/testsuite/gdb.arch/powerpc-bcl-prologue.exp b/gdb/testsuite/gdb.arch/powerpc-bcl-prologue.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.arch/powerpc-bcl-prologue.exp
+@@ -0,0 +1,72 @@
++#   Copyright 2006, 2007 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
++
++# Test unwinding fixes of the PPC platform, specifically on the coping with BCL
++# jump of the PIE code.
++
++if ![istarget "powerpc*-*-linux*"] then {
++    verbose "Skipping powerpc-linux prologue tests."
++    return
++}
++
++set testfile "powerpc-bcl-prologue"
++set srcfile1 ${testfile}.c
++set flags "debug"
++if [istarget "powerpc-*"] then {
++    set srcfile2 ${testfile}-asm32.S
++    set flags "$flags additional_flags=-m32"
++} elseif [istarget "powerpc64-*"] then {
++    set srcfile2 ${testfile}-asm64.S
++    set flags "$flags additional_flags=-m64"
++} else {
++   fail "powerpc arch test"
++   return
++}
++set objfile2 [standard_output_file ${testfile}-asm.o]
++set binfile [standard_output_file ${testfile}]
++
++if { [gdb_compile "${srcdir}/${subdir}/${srcfile1} ${srcdir}/${subdir}/${srcfile2}" ${binfile} executable $flags] != ""} {
++    return -1
++}
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++gdb_load ${binfile}
++
++# We should stop in abort(3).
++
++gdb_run_cmd
++
++gdb_test_multiple {} "continue to abort()" {
++    -re ".*Program received signal SIGABRT,.*$gdb_prompt $" {
++       pass "continue to abort()"
++    }
++}
++
++# Check backtrace:
++# #3  0x0804835f in func0 ()
++# #4  0x0804836a in func1 ()
++# #5  0x0804838c in main ()
++# (gdb)
++# `\\.?' prefixes are needed for ppc64 without `debug' (another bug).
++
++set test "matching unwind"
++gdb_test_multiple "backtrace" $test {
++    -re "\r\n#\[0-9\]\[^\r\n\]* in \\.?func0 \\(\[^\r\n\]*\r\n#\[0-9\]\[^\r\n\]* in \\.?func1 \\(\[^\r\n\]*\r\n#\[0-9\]\[^\r\n\]* in \\.?main \\(\[^\r\n\]*\r\n$gdb_prompt $" {
++	pass $test
++    }
++}
+diff --git a/gdb/testsuite/gdb.arch/powerpc-prologue.exp b/gdb/testsuite/gdb.arch/powerpc-prologue.exp
+--- a/gdb/testsuite/gdb.arch/powerpc-prologue.exp
++++ b/gdb/testsuite/gdb.arch/powerpc-prologue.exp
+@@ -16,8 +16,9 @@
+ # Test PowerPC prologue analyzer.
+ 
+ # Do not run on AIX (where we won't be able to build the tests without
+-# some surgery) or on PowerPC64 (ditto, dot symbols).
+-if {[istarget *-*-aix*] || ![istarget "powerpc-*-*"]} then {
++# some surgery).  PowerPC64 target would break due to dot symbols but we build
++# there PowerPC32 inferior.
++if {[istarget *-*-aix*] || ![istarget "powerpc*-*-*"]} then {
+     verbose "Skipping PowerPC prologue tests."
+     return
+ }
diff --git a/SOURCES/gdb-6.3-bz202689-exec-from-pthread-test.patch b/SOURCES/gdb-6.3-bz202689-exec-from-pthread-test.patch
new file mode 100644
index 0000000..df59b77
--- /dev/null
+++ b/SOURCES/gdb-6.3-bz202689-exec-from-pthread-test.patch
@@ -0,0 +1,109 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Jan Kratochvil <jan.kratochvil@redhat.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.3-bz202689-exec-from-pthread-test.patch
+
+;; Testcase for exec() from threaded program (BZ 202689).
+;;=fedoratest
+
+2007-01-17  Jan Kratochvil <jan.kratochvil@redhat.com>
+
+	* gdb.threads/threaded-exec.exp, gdb.threads/threaded-exec.c: New files.
+
+diff --git a/gdb/testsuite/gdb.threads/threaded-exec.c b/gdb/testsuite/gdb.threads/threaded-exec.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.threads/threaded-exec.c
+@@ -0,0 +1,46 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2007 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 2 of the License, 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; if not, write to the Free Software
++   Foundation, Inc., 59 Temple Place - Suite 330,
++   Boston, MA 02111-1307, USA.  */
++
++#include <stddef.h>
++#include <pthread.h>
++#include <assert.h>
++#include <stdlib.h>
++#include <unistd.h>
++
++
++static void *
++threader (void *arg)
++{
++	return NULL;
++}
++
++int
++main (void)
++{
++	pthread_t t1;
++	int i;
++
++	i = pthread_create (&t1, NULL, threader, (void *) NULL);
++	assert (i == 0);
++	i = pthread_join (t1, NULL);
++	assert (i == 0);
++
++	execl ("/bin/true", "/bin/true", NULL);
++	abort ();
++}
+diff --git a/gdb/testsuite/gdb.threads/threaded-exec.exp b/gdb/testsuite/gdb.threads/threaded-exec.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.threads/threaded-exec.exp
+@@ -0,0 +1,41 @@
++# threaded-exec.exp -- Check reset of the tracked threads on exec*(2)
++# Copyright (C) 2007 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-gdb@prep.ai.mit.edu
++
++set testfile threaded-exec
++set srcfile ${testfile}.c
++set binfile [standard_output_file ${testfile}]
++
++if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable []] != "" } {
++    return -1
++}
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++
++gdb_load ${binfile}
++
++gdb_run_cmd
++
++gdb_test_multiple {} "Program exited" {
++   -re "\r\n\\\[Inferior .* exited normally\\\]\r\n$gdb_prompt $" {
++       pass "Program exited"
++   }
++}
diff --git a/SOURCES/gdb-6.3-focus-cmd-prev-test.patch b/SOURCES/gdb-6.3-focus-cmd-prev-test.patch
new file mode 100644
index 0000000..27c85f1
--- /dev/null
+++ b/SOURCES/gdb-6.3-focus-cmd-prev-test.patch
@@ -0,0 +1,53 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.3-focus-cmd-prev-test.patch
+
+;; Test a crash on `focus cmd', `focus prev' commands.
+;;=fedoratest
+
+diff --git a/gdb/testsuite/gdb.base/focus-cmd-prev.exp b/gdb/testsuite/gdb.base/focus-cmd-prev.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/focus-cmd-prev.exp
+@@ -0,0 +1,40 @@
++# Copyright 2008 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++if $tracelevel then {
++    strace $tracelevel
++}
++
++gdb_exit
++gdb_start
++
++# Do not use gdb_test or \r\n there since:
++# commit d7e747318f4d04af033f16325f9b6d74f67079ec
++#     Eliminate make_cleanup_ui_file_delete / make ui_file a class hierarchy
++
++set test "focus cmd"
++gdb_test_multiple $test $test {
++    -re "$gdb_prompt $" {
++	pass $test
++    }
++}
++
++set test "focus prev"
++gdb_test_multiple $test $test {
++    -re "$gdb_prompt $" {
++	pass $test
++    }
++}
diff --git a/SOURCES/gdb-6.3-gstack-20050411.patch b/SOURCES/gdb-6.3-gstack-20050411.patch
new file mode 100644
index 0000000..37b09de
--- /dev/null
+++ b/SOURCES/gdb-6.3-gstack-20050411.patch
@@ -0,0 +1,240 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Andrew Cagney <cagney@gnu.org>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.3-gstack-20050411.patch
+
+;; Add a wrapper script to GDB that implements pstack using the
+;; --readnever option.
+;;=push
+
+2004-11-23  Andrew Cagney  <cagney@redhat.com>
+
+	* Makefile.in (uninstall-gstack, install-gstack): New rules, add
+	to install and uninstall.
+	* gstack.sh, gstack.1: New files.
+
+diff --git a/gdb/Makefile.in b/gdb/Makefile.in
+--- a/gdb/Makefile.in
++++ b/gdb/Makefile.in
+@@ -1735,7 +1735,7 @@ info install-info clean-info dvi pdf install-pdf html install-html: force
+ install: all
+ 	@$(MAKE) $(FLAGS_TO_PASS) install-only
+ 
+-install-only: $(CONFIG_INSTALL)
++install-only: install-gstack $(CONFIG_INSTALL)
+ 	transformed_name=`t='$(program_transform_name)'; \
+ 			  echo gdb | sed -e "$$t"` ; \
+ 		if test "x$$transformed_name" = x; then \
+@@ -1784,7 +1784,25 @@ install-guile:
+ install-python:
+ 	$(SHELL) $(srcdir)/../mkinstalldirs $(DESTDIR)$(GDB_DATADIR)/python/gdb
+ 
+-uninstall: force $(CONFIG_UNINSTALL)
++GSTACK=gstack
++.PHONY: install-gstack
++install-gstack:
++	transformed_name=`t='$(program_transform_name)'; \
++			  echo $(GSTACK) | sed -e "$$t"` ; \
++		if test "x$$transformed_name" = x; then \
++		  transformed_name=$(GSTACK) ; \
++		else \
++		  true ; \
++		fi ; \
++		$(SHELL) $(srcdir)/../mkinstalldirs $(DESTDIR)$(bindir) ; \
++		$(INSTALL_PROGRAM) $(srcdir)/$(GSTACK).sh \
++			$(DESTDIR)$(bindir)/$$transformed_name$(EXEEXT) ; \
++		: $(SHELL) $(srcdir)/../mkinstalldirs \
++			$(DESTDIR)$(man1dir) ; \
++		: $(INSTALL_DATA) $(srcdir)/gstack.1 \
++			$(DESTDIR)$(man1dir)/$$transformed_name.1
++
++uninstall: force uninstall-gstack $(CONFIG_UNINSTALL)
+ 	transformed_name=`t='$(program_transform_name)'; \
+ 			  echo gdb | sed -e $$t` ; \
+ 		if test "x$$transformed_name" = x; then \
+@@ -1807,6 +1825,18 @@ uninstall: force $(CONFIG_UNINSTALL)
+ 	fi
+ 	@$(MAKE) DO=uninstall "DODIRS=$(SUBDIRS)" $(FLAGS_TO_PASS) subdir_do
+ 
++.PHONY: uninstall-gstack
++uninstall-gstack:
++	transformed_name=`t='$(program_transform_name)'; \
++			  echo $(GSTACK) | sed -e $$t` ; \
++		if test "x$$transformed_name" = x; then \
++		  transformed_name=$(GSTACK) ; \
++		else \
++		  true ; \
++		fi ; \
++		rm -f $(DESTDIR)$(bindir)/$$transformed_name$(EXEEXT) \
++		      $(DESTDIR)$(man1dir)/$$transformed_name.1
++ 
+ # The C++ name parser can be built standalone for testing.
+ test-cp-name-parser.o: cp-name-parser.c
+ 	$(COMPILE) -DTEST_CPNAMES cp-name-parser.c
+diff --git a/gdb/gstack.sh b/gdb/gstack.sh
+new file mode 100644
+--- /dev/null
++++ b/gdb/gstack.sh
+@@ -0,0 +1,43 @@
++#!/bin/sh
++
++if test $# -ne 1; then
++    echo "Usage: `basename $0 .sh` <process-id>" 1>&2
++    exit 1
++fi
++
++if test ! -r /proc/$1; then
++    echo "Process $1 not found." 1>&2
++    exit 1
++fi
++
++# GDB doesn't allow "thread apply all bt" when the process isn't
++# threaded; need to peek at the process to determine if that or the
++# simpler "bt" should be used.
++
++backtrace="bt"
++if test -d /proc/$1/task ; then
++    # Newer kernel; has a task/ directory.
++    if test `/bin/ls /proc/$1/task | /usr/bin/wc -l` -gt 1 2>/dev/null ; then
++	backtrace="thread apply all bt"
++    fi
++elif test -f /proc/$1/maps ; then
++    # Older kernel; go by it loading libpthread.
++    if /bin/grep -e libpthread /proc/$1/maps > /dev/null 2>&1 ; then
++	backtrace="thread apply all bt"
++    fi
++fi
++
++GDB=${GDB:-gdb}
++
++# Run GDB, strip out unwanted noise.
++# --readnever is no longer used since .gdb_index is now in use.
++$GDB --quiet -nx $GDBARGS /proc/$1/exe $1 <<EOF 2>&1 | 
++set width 0
++set height 0
++set pagination no
++$backtrace
++EOF
++/bin/sed -n \
++    -e 's/^\((gdb) \)*//' \
++    -e '/^#/p' \
++    -e '/^Thread/p'
+diff --git a/gdb/testsuite/gdb.base/gstack.c b/gdb/testsuite/gdb.base/gstack.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/gstack.c
+@@ -0,0 +1,43 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2005, 2007, 2008, 2009 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++#include <stdio.h>
++#include <unistd.h>
++#include <string.h>
++
++void
++func (void)
++{
++  const char msg[] = "looping\n";
++
++  /* Use the most simple notification not to get caught by attach on exiting
++     the function.  */
++  write (1, msg, strlen (msg));
++  
++  for (;;);
++}
++
++int
++main (void)
++{
++  alarm (60);
++  nice (100);
++
++  func ();
++
++  return 0;
++}
+diff --git a/gdb/testsuite/gdb.base/gstack.exp b/gdb/testsuite/gdb.base/gstack.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/gstack.exp
+@@ -0,0 +1,66 @@
++# Copyright (C) 2012 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++set testfile gstack
++set executable ${testfile}
++set binfile [standard_output_file $executable]
++if {[build_executable ${testfile} ${executable} "" {debug}] == -1} {
++    return -1
++}
++
++set test "spawn inferior"
++set command "${binfile}"
++set res [remote_spawn host $command];
++if { $res < 0 || $res == "" } {
++    perror "Spawning $command failed."
++    fail $test
++    return
++}
++set use_gdb_stub 1
++set pid [exp_pid -i $res]
++gdb_expect {
++    -re "looping\r\n" {
++	pass $test
++    }
++    eof {
++	fail "$test (eof)"
++	return
++    }
++    timeout {
++	fail "$test (timeout)"
++	return
++    }
++}
++gdb_exit
++
++# Testcase uses the most simple notification not to get caught by attach on
++# exiting the function.  Still we could retry the gstack command if we fail.
++
++set test "spawn gstack"
++set command "sh -c GDB=$GDB\\ GDBARGS=-data-directory\\\\\\ $BUILD_DATA_DIRECTORY\\ sh\\ ${srcdir}/../gstack.sh\\ $pid\\;echo\\ GSTACK-END"
++set res [remote_spawn host $command];
++if { $res < 0 || $res == "" } {
++    perror "Spawning $command failed."
++    fail $test
++}
++set pid [exp_pid -i $res]
++gdb_test_multiple "" $test {
++    -re "^#0 +(0x\[0-9a-f\]+ in )?\\.?func \\(\\) at \[^\r\n\]*\r\n#1 +0x\[0-9a-f\]+ in \\.?main \\(\\) at \[^\r\n\]*\r\nGSTACK-END\r\n\$" {
++	pass $test
++    }
++}
++gdb_exit
++
++remote_exec host "kill -9 $pid"
diff --git a/SOURCES/gdb-6.3-inferior-notification-20050721.patch b/SOURCES/gdb-6.3-inferior-notification-20050721.patch
new file mode 100644
index 0000000..b94b432
--- /dev/null
+++ b/SOURCES/gdb-6.3-inferior-notification-20050721.patch
@@ -0,0 +1,323 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Jeff Johnston <jjohnstn@redhat.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.3-inferior-notification-20050721.patch
+
+;; Notify observers that the inferior has been created
+;;=fedoratest
+
+2005-07-21  Jeff Johnston  <jjohnstn@redhat.com>
+
+	* gdb.base/attach-32.exp: New test for attaching in 32-bit
+	mode on 64-bit systems.
+	* gdb.base/attach-32.c: Ditto.
+	* gdb.base/attach-32b.c: Ditto.
+
+2007-12-26  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.base/attach-32.exp: Fix forgotten $GDBFLAGS as set.
+
+diff --git a/gdb/testsuite/gdb.base/attach-32.c b/gdb/testsuite/gdb.base/attach-32.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/attach-32.c
+@@ -0,0 +1,20 @@
++/* This program is intended to be started outside of gdb, and then
++   attached to by gdb.  Thus, it simply spins in a loop.  The loop
++   is exited when & if the variable 'should_exit' is non-zero.  (It
++   is initialized to zero in this program, so the loop will never
++   exit unless/until gdb sets the variable to non-zero.)
++   */
++#include <stdio.h>
++
++int  should_exit = 0;
++
++int main ()
++{
++  int  local_i = 0;
++
++  while (! should_exit)
++    {
++      local_i++;
++    }
++  return 0;
++}
+diff --git a/gdb/testsuite/gdb.base/attach-32.exp b/gdb/testsuite/gdb.base/attach-32.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/attach-32.exp
+@@ -0,0 +1,245 @@
++# Copyright 2005 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++#
++# This test was based on attach.exp and modified for 32/64 bit Linux systems. */
++
++# On HP-UX 11.0, this test is causing a process running the program
++# "attach" to be left around spinning.  Until we figure out why, I am
++# commenting out the test to avoid polluting tiamat (our 11.0 nightly
++# test machine) with these processes. RT
++#
++# Setting the magic bit in the target app should work.  I added a
++# "kill", and also a test for the R3 register warning.  JB
++if { ![istarget "x86_64*-*linux*"] 
++     && ![istarget "powerpc64*-*linux*"]} {
++    return 0
++}
++
++# are we on a target board
++if [is_remote target] then {
++    return 0
++}
++
++set testfile "attach-32"
++set srcfile  ${testfile}.c
++set srcfile2 ${testfile}b.c
++set binfile  [standard_output_file ${testfile}]
++set binfile2 [standard_output_file ${testfile}b]
++set escapedbinfile  [string_to_regexp [standard_output_file ${testfile}]]
++
++#execute_anywhere "rm -f ${binfile} ${binfile2}"
++remote_exec build "rm -f ${binfile} ${binfile2}"
++# For debugging this test
++#
++#log_user 1
++
++# build the first test case
++#
++if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "additional_flags=-m32"]] != "" } {
++    gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
++}
++
++# Build the in-system-call test
++
++if  { [gdb_compile "${srcdir}/${subdir}/${srcfile2}" "${binfile2}" executable [list debug "additional_flags=-m32"]] != "" } {
++    gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
++}
++
++if [get_compiler_info ${binfile}] {
++    return -1
++}
++
++proc do_attach_tests {} {
++    global gdb_prompt
++    global binfile
++    global escapedbinfile
++    global srcfile
++    global testfile
++    global objdir
++    global subdir
++    global timeout
++    global testpid
++    
++    # Verify that we can "see" the variable "should_exit" in the
++    # program, and that it is zero.
++   
++    gdb_test "print should_exit" " = 0" "after attach-32, print should_exit"
++
++    # Verify that we can modify the variable "should_exit" in the
++    # program.
++
++    gdb_test "set should_exit=1" "" "after attach-32, set should_exit"
++
++    # Verify that the modification really happened.
++
++    send_gdb "tbreak 19\n"
++    gdb_expect {
++	-re "reakpoint .*at.*$srcfile, line 19.*$gdb_prompt $" {
++	    pass "after attach-32, set tbreak postloop"
++	}
++	-re "$gdb_prompt $" {
++	    fail "after attach-32, set tbreak postloop"
++	}
++	timeout {
++	    fail "(timeout) after attach-32, set tbreak postloop"
++	}
++    }
++    send_gdb "continue\n"
++    gdb_expect {
++	-re "main.*at.*$srcfile:19.*$gdb_prompt $" {
++	    pass "after attach-32, reach tbreak postloop"
++	}
++	-re "$gdb_prompt $" {
++	    fail "after attach-32, reach tbreak postloop"
++	}
++	timeout {
++	    fail "(timeout) after attach-32, reach tbreak postloop"
++	}
++    }
++
++    # Allow the test process to exit, to cleanup after ourselves.
++
++    gdb_test "continue" {\[Inferior .* exited normally\]} "after attach-32, exit"
++
++    # Make sure we don't leave a process around to confuse
++    # the next test run (and prevent the compile by keeping
++    # the text file busy), in case the "set should_exit" didn't
++    # work.
++   
++    remote_exec build "kill -9 ${testpid}"
++
++    # Start the program running and then wait for a bit, to be sure
++    # that it can be attached to.
++   
++    set testpid [eval exec $binfile &]
++    exec sleep 2
++    if { [istarget "*-*-cygwin*"] } {
++	# testpid is the Cygwin PID, GDB uses the Windows PID, which might be
++	# different due to the way fork/exec works.
++	set testpid [ exec ps -e | gawk "{ if (\$1 == $testpid) print \$4; }" ]
++    }
++
++    # Verify that we can attach to the process, and find its a.out
++    # when we're cd'd to some directory that doesn't contain the
++    # a.out.  (We use the source path set by the "dir" command.)
++    
++    gdb_test "dir ${objdir}/${subdir}" "Source directories searched: .*" \
++	"set source path"
++
++    gdb_test "cd /tmp" "Working directory /tmp." \
++	"cd away from process working directory"
++
++    # Explicitly flush out any knowledge of the previous attachment.
++
++    set test "before attach-32-3, flush symbols"
++    gdb_test_multiple "symbol" "$test" {
++	-re "Discard symbol table from.*y or n. $" {
++	    gdb_test "y" "No symbol file now." \
++		"$test"
++	}
++	-re "No symbol file now.*$gdb_prompt $" {
++	    pass "$test"
++	}
++    }
++
++    gdb_test "exec" "No executable file now." \
++	"before attach-32-3, flush exec"
++
++    gdb_test "attach $testpid" \
++	"Attaching to process $testpid.*Reading symbols from $escapedbinfile.*main.*at .*" \
++	"attach-32 when process' a.out not in cwd"
++
++    set test "after attach-32-3, exit"
++    gdb_test_multiple "kill" "$test" {
++	-re "Kill the program being debugged.*y or n. $" {
++	    gdb_test "y" "" "$test"
++	}
++    }
++    
++    # Another "don't leave a process around"
++    remote_exec build "kill -9 ${testpid}"
++}
++
++proc do_call_attach_tests {} {
++    global gdb_prompt
++    global binfile2
++    global testpid
++    
++    # See if other registers are problems
++    
++    set test "info other register"
++    gdb_test_multiple "i r r3" "$test" {
++	-re "warning: reading register.*$gdb_prompt $" {
++	    fail "$test"
++	}
++	-re "r3.*$gdb_prompt $" {
++	    pass "$test"
++	}
++    }
++
++    # Get rid of the process
++    
++    gdb_test "p should_exit = 1"
++    gdb_test "c" {\[Inferior .* exited normally\]}
++   
++    # Be paranoid
++   
++    remote_exec build "kill -9 ${testpid}"
++}
++
++
++# Start with a fresh gdb
++
++gdb_exit
++set testpid [eval exec $binfile &]
++exec sleep 3
++if { [istarget "*-*-cygwin*"] } {
++    # testpid is the Cygwin PID, GDB uses the Windows PID, which might be
++    # different due to the way fork/exec works.
++    set testpid [ exec ps -e | gawk "{ if (\$1 == $testpid) print \$4; }" ]
++}
++
++set GDBFLAGS_orig $GDBFLAGS
++set GDBFLAGS "--pid=$testpid"
++gdb_start
++set GDBFLAGS $GDBFLAGS_orig
++
++gdb_reinitialize_dir $srcdir/$subdir
++
++# This is a test of gdb's ability to attach to a running process.
++
++do_attach_tests
++
++# Test attaching when the target is inside a system call
++
++gdb_exit
++set testpid [eval exec $binfile2 &]
++exec sleep 3
++if { [istarget "*-*-cygwin*"] } {
++    # testpid is the Cygwin PID, GDB uses the Windows PID, which might be
++    # different due to the way fork/exec works.
++    set testpid [ exec ps -e | gawk "{ if (\$1 == $testpid) print \$4; }" ]
++}
++
++set GDBFLAGS_orig $GDBFLAGS
++set GDBFLAGS "--pid=$testpid"
++gdb_start
++set GDBFLAGS $GDBFLAGS_orig
++
++gdb_reinitialize_dir $srcdir/$subdir
++do_call_attach_tests
++
++return 0
+diff --git a/gdb/testsuite/gdb.base/attach-32b.c b/gdb/testsuite/gdb.base/attach-32b.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/attach-32b.c
+@@ -0,0 +1,24 @@
++/* This program is intended to be started outside of gdb, and then
++   attached to by gdb.  Thus, it simply spins in a loop.  The loop
++   is exited when & if the variable 'should_exit' is non-zero.  (It
++   is initialized to zero in this program, so the loop will never
++   exit unless/until gdb sets the variable to non-zero.)
++   */
++#include <stdio.h>
++#include <stdlib.h>
++#include <unistd.h>
++
++int  should_exit = 0;
++
++int main ()
++{
++  int  local_i = 0;
++
++  sleep( 10 ); /* System call causes register fetch to fail */
++               /* This is a known HPUX "feature"            */
++  while (! should_exit)
++    {
++      local_i++;
++    }
++  return (0);
++}
diff --git a/SOURCES/gdb-6.3-inheritancetest-20050726.patch b/SOURCES/gdb-6.3-inheritancetest-20050726.patch
new file mode 100644
index 0000000..6b22011
--- /dev/null
+++ b/SOURCES/gdb-6.3-inheritancetest-20050726.patch
@@ -0,0 +1,161 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Jeff Johnston <jjohnstn@redhat.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.3-inheritancetest-20050726.patch
+
+;; Verify printing of inherited members test
+;;=fedoratest
+
+2005-07-26  Jeff Johnston  <jjohnstn@redhat.com>
+
+	* gdb.cp/b146835.exp: New testcase.
+	* gdb.cp/b146835.cc: Ditto.
+	* gdb.cp/b146835b.cc: Ditto.
+	* gdb.cp/b146835.h: Ditto.
+
+diff --git a/gdb/testsuite/gdb.cp/b146835.cc b/gdb/testsuite/gdb.cp/b146835.cc
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.cp/b146835.cc
+@@ -0,0 +1,32 @@
++#include "b146835.h"
++#include <iostream>
++
++class F : public C {
++
++protected:
++
++   virtual void funcA (unsigned long a, B *b);
++   virtual void funcB (E *e);
++   virtual void funcC (unsigned long x, bool y);
++
++   char *s1, *s2;
++   bool b1;
++   int k;
++
++public:
++   void foo() {
++       std::cout << "foo" << std::endl;
++   }
++};
++
++
++void F::funcA (unsigned long a, B *b) {}
++void F::funcB (E *e) {}
++void F::funcC (unsigned long x, bool y) {}
++
++int  main()
++{
++   F f;
++   f.foo();
++}
++
+diff --git a/gdb/testsuite/gdb.cp/b146835.exp b/gdb/testsuite/gdb.cp/b146835.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.cp/b146835.exp
+@@ -0,0 +1,47 @@
++# This testcase is part of GDB, the GNU debugger.
++
++# Copyright 2005 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
++
++# Check that GDB can properly print an inherited member variable
++# (Bugzilla 146835)
++
++set testfile "b146835"
++set srcfile ${testfile}.cc
++set srcfile2 ${testfile}b.cc
++set binfile [standard_output_file ${testfile}]
++if {[gdb_compile "${srcdir}/${subdir}/${srcfile} ${srcdir}/${subdir}/${srcfile2}" "${binfile}" executable {debug c++}] != "" } {
++    return -1
++}
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++gdb_load ${binfile}
++
++#
++# Run to `main' where we begin our tests.
++#
++
++if ![runto_main] then {
++    gdb_suppress_tests
++}
++
++gdb_test "break 'F::foo()'" ""
++gdb_continue_to_breakpoint "First line foo"
++
++# Verify that we can access the inherited member d
++gdb_test "p d" " = \\(D \\*\\) *0x0" "Verify inherited member d accessible"
+diff --git a/gdb/testsuite/gdb.cp/b146835.h b/gdb/testsuite/gdb.cp/b146835.h
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.cp/b146835.h
+@@ -0,0 +1,36 @@
++
++class A {
++
++protected:
++
++   virtual void funcA (unsigned long a, class B *b) = 0;
++   virtual void funcB (class E *e) = 0;
++   virtual void funcC (unsigned long x, bool y) = 0;
++
++   void funcD (class E *e, class D* d);
++   virtual void funcE (E *e, D *d);
++   virtual void funcF (unsigned long x, D *d);
++};
++
++
++class C : public A {
++
++protected:
++
++   int x;
++   class K *k;
++   class H *h;
++
++   D *d;
++
++   class W *w;
++   class N *n;
++   class L *l;
++   unsigned long *r;
++
++public:
++
++   C();
++   int z (char *s);
++   virtual ~C();
++};
+diff --git a/gdb/testsuite/gdb.cp/b146835b.cc b/gdb/testsuite/gdb.cp/b146835b.cc
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.cp/b146835b.cc
+@@ -0,0 +1,11 @@
++#include "b146835.h"
++
++C::C() { d = 0; x = 3; }
++
++int C::z (char *s) { return 0; }
++
++C::~C() {}
++
++void A::funcD (class E *e, class D *d) {}
++void A::funcE (E *e, D *d) {}
++void A::funcF (unsigned long x, D *d) {}
diff --git a/SOURCES/gdb-6.3-mapping-zero-inode-test.patch b/SOURCES/gdb-6.3-mapping-zero-inode-test.patch
new file mode 100644
index 0000000..1ef25d9
--- /dev/null
+++ b/SOURCES/gdb-6.3-mapping-zero-inode-test.patch
@@ -0,0 +1,247 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.3-mapping-zero-inode-test.patch
+
+;; Test GCORE for shmid 0 shared memory mappings.
+;;=fedoratest: But it is broken anyway, sometimes the case being tested is not reproducible.
+
+diff --git a/gdb/testsuite/gdb.base/gcore-shmid0.c b/gdb/testsuite/gdb.base/gcore-shmid0.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/gcore-shmid0.c
+@@ -0,0 +1,128 @@
++/* Copyright 2007, 2009 Free Software Foundation, Inc.
++
++   This file is part of GDB.
++
++   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 2 of the License, 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; if not, write to the Free Software
++   Foundation, Inc., 59 Temple Place - Suite 330,
++   Boston, MA 02111-1307, USA.  */
++
++/*
++ * Test GDB's handling of gcore for mapping with a name but zero inode.
++ */
++
++#include <sys/ipc.h>
++#include <sys/shm.h>
++#include <stdio.h>
++#include <errno.h>
++#include <stdlib.h>
++#include <unistd.h>
++#include <assert.h>
++#include <time.h>
++
++/* The same test running in a parallel testsuite may steal us the zero SID,
++   even if we never get any EEXIST.  Just try a while.  */
++
++#define TIMEOUT_SEC 10
++
++static volatile int v;
++
++static void
++initialized (void)
++{
++  v++;
++}
++
++static void
++unresolved (void)
++{
++  v++;
++}
++
++int
++main (void)
++{
++  int sid;
++  unsigned int *addr = (void *) -1L;
++  int attempt, round = 0;
++  time_t ts_start, ts;
++
++  if (time (&ts_start) == (time_t) -1)
++    {
++      printf ("time (): %m\n");
++      exit (1);
++    }
++
++  /* The generated SID will cycle with an increment of 32768, attempt until it
++   * wraps to 0.  */
++
++  for (attempt = 0; addr == (void *) -1L; attempt++)
++    {
++      /* kernel-2.6.25-8.fc9.x86_64 just never returns the value 0 by
++	 shmget(2).  shmget returns SID range 0..1<<31 in steps of 32768,
++	 0x1000 should be enough but wrap the range it to be sure.  */
++
++      if (attempt > 0x21000)
++        {
++	  if (time (&ts) == (time_t) -1)
++	    {
++	      printf ("time (): %m\n");
++	      exit (1);
++	    }
++
++	  if (ts >= ts_start && ts < ts_start + TIMEOUT_SEC)
++	    {
++	      attempt = 0;
++	      round++;
++	      continue;
++	    }
++
++	  printf ("Problem is not reproducible on this kernel (attempt %d, "
++		  "round %d)\n", attempt, round);
++	  unresolved ();
++	  exit (1);
++	}
++
++      sid = shmget ((key_t) rand (), 0x1000, IPC_CREAT | IPC_EXCL | 0777);
++      if (sid == -1)
++	{
++	  if (errno == EEXIST)
++	    continue;
++
++	  printf ("shmget (%d, 0x1000, IPC_CREAT): errno %d\n", 0, errno);
++	  exit (1);
++	}
++
++      /* Use SID only if it is 0, retry it otherwise.  */
++
++      if (sid == 0)
++	{
++	  addr = shmat (sid, NULL, SHM_RND);
++	  if (addr == (void *) -1L)
++	    {
++	      printf ("shmat (%d, NULL, SHM_RND): errno %d\n", sid,
++		      errno);
++	      exit (1);
++	    }
++	}
++      if (shmctl (sid, IPC_RMID, NULL) != 0)
++	{
++	  printf ("shmctl (%d, IPC_RMID, NULL): errno %d\n", sid, errno);
++	  exit (1);
++	}
++    }
++
++  initialized ();
++
++  return 0;
++}
+diff --git a/gdb/testsuite/gdb.base/gcore-shmid0.exp b/gdb/testsuite/gdb.base/gcore-shmid0.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/gcore-shmid0.exp
+@@ -0,0 +1,101 @@
++# Copyright 2007, 2009 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
++
++# Test GDB's handling of gcore for mapping with a name but zero inode.
++
++if { [prepare_for_testing gcore-shmid0.exp gcore-shmid0] } {
++    return -1
++}
++
++# Does this gdb support gcore?
++set test "help gcore"
++gdb_test_multiple $test $test {
++    -re "Undefined command: .gcore.*$gdb_prompt $" {
++	# gcore command not supported -- nothing to test here.
++	unsupported "gdb does not support gcore on this target"
++	return -1;
++    }
++    -re "Save a core file .*$gdb_prompt $" {
++	pass $test
++    }
++}
++
++if { ! [ runto_main ] } then {
++    untested gcore-shmid0.exp
++    return -1
++}
++
++gdb_breakpoint "initialized"
++gdb_breakpoint "unresolved"
++
++set oldtimeout $timeout
++set timeout [expr $oldtimeout + 120]
++
++set test "Continue to initialized."
++gdb_test_multiple "continue" $test {
++    -re "Breakpoint .*, initialized .* at .*\r\n$gdb_prompt $" {
++	pass $test
++    }
++    -re "Breakpoint .*, unresolved .* at .*\r\n$gdb_prompt $" {
++	set timeout $oldtimeout
++	unsupported $test
++	return -1
++    }
++}
++set timeout $oldtimeout
++
++set escapedfilename [string_to_regexp [standard_output_file gcore-shmid0.test]]
++
++set test "save a corefile"
++gdb_test_multiple "gcore [standard_output_file gcore-shmid0.test]" $test {
++    -re "Saved corefile ${escapedfilename}\[\r\n\]+$gdb_prompt $" {
++	pass $test
++    }
++    -re "Can't create a corefile\[\r\n\]+$gdb_prompt $" {
++	unsupported $test
++    }
++}
++
++# Be sure to remove the handle first.
++# But it would get removed even on a kill by GDB as the handle is already
++# deleted, just it is still attached.
++gdb_continue_to_end "finish"
++
++set test "core-file command"
++gdb_test_multiple "core-file [standard_output_file gcore-shmid0.test]" $test {
++    -re ".* program is being debugged already.*y or n. $" {
++	# gdb_load may connect us to a gdbserver.
++	send_gdb "y\n"
++	exp_continue;
++    }
++    -re "Core was generated by .*\r\n\#0  .*\\\(\\\).*\r\n$gdb_prompt $" {
++	# The filename does not fit there anyway so do not check it.
++	pass $test
++    }
++    -re ".*registers from core file: File in wrong format.* $" {
++	fail "core-file command (could not read registers from core file)"
++    }
++}
++
++set test "backtrace"
++gdb_test_multiple "bt" $test {
++    -re "#0 *initialized \\\(\\\) at .*#1 .* main \\\(.*$gdb_prompt $" {
++	pass $test
++    }
++    -re "#0 *initialized \\\(\\\) at .*Cannot access memory at address .*$gdb_prompt $" {
++	fail $test
++    }
++}
diff --git a/SOURCES/gdb-6.3-ppc64displaysymbol-20041124.patch b/SOURCES/gdb-6.3-ppc64displaysymbol-20041124.patch
new file mode 100644
index 0000000..a09b0fe
--- /dev/null
+++ b/SOURCES/gdb-6.3-ppc64displaysymbol-20041124.patch
@@ -0,0 +1,32 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Andrew Cagney <cagney@gnu.org>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.3-ppc64displaysymbol-20041124.patch
+
+;; Include the pc's section when doing a symbol lookup so that the
+;; correct symbol is found.
+;;=push: Write new testcase.
+
+2004-11-24  Andrew Cagney  <cagney@gnu.org>
+
+	* printcmd.c (build_address_symbolic): Find a section for the
+	address.
+
+diff --git a/gdb/printcmd.c b/gdb/printcmd.c
+--- a/gdb/printcmd.c
++++ b/gdb/printcmd.c
+@@ -587,6 +587,14 @@ build_address_symbolic (struct gdbarch *gdbarch,
+ 	  addr = overlay_mapped_address (addr, section);
+ 	}
+     }
++  /* To ensure that the symbol returned belongs to the correct setion
++     (and that the last [random] symbol from the previous section
++     isn't returned) try to find the section containing PC.  First try
++     the overlay code (which by default returns NULL); and second try
++     the normal section code (which almost always succeeds).  */
++  section = find_pc_overlay (addr);
++  if (section == NULL)
++    section = find_pc_section (addr);
+ 
+   /* First try to find the address in the symbol table, then
+      in the minsyms.  Take the closest one.  */
diff --git a/SOURCES/gdb-6.3-ppc64syscall-20040622.patch b/SOURCES/gdb-6.3-ppc64syscall-20040622.patch
new file mode 100644
index 0000000..e6319be
--- /dev/null
+++ b/SOURCES/gdb-6.3-ppc64syscall-20040622.patch
@@ -0,0 +1,118 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Andrew Cagney <cagney@gnu.org>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.3-ppc64syscall-20040622.patch
+
+;; Better parse 64-bit PPC system call prologues.
+;;=push: Write new testcase.
+
+2004-06-22  Andrew Cagney  <cagney@gnu.org>
+
+	* rs6000-tdep.c (struct rs6000_framedata): Add field "func_start".
+	(skip_prologue): Delete local variable "orig_pc", use
+	"func_start".  Add local variable "num_skip_linux_syscall_insn",
+	use to skip over first half of a GNU/Linux syscall and update
+	"func_start".
+
+diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c
+--- a/gdb/rs6000-tdep.c
++++ b/gdb/rs6000-tdep.c
+@@ -134,6 +134,7 @@ static const char *powerpc_vector_abi_string = "auto";
+ 
+ struct rs6000_framedata
+   {
++    CORE_ADDR func_start;	/* True function start.  */
+     int offset;			/* total size of frame --- the distance
+ 				   by which we decrement sp to allocate
+ 				   the frame */
+@@ -1426,7 +1427,6 @@ static CORE_ADDR
+ skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR lim_pc,
+ 	       struct rs6000_framedata *fdata)
+ {
+-  CORE_ADDR orig_pc = pc;
+   CORE_ADDR last_prologue_pc = pc;
+   CORE_ADDR li_found_pc = 0;
+   gdb_byte buf[4];
+@@ -1445,12 +1445,14 @@ skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR lim_pc,
+   int minimal_toc_loaded = 0;
+   int prev_insn_was_prologue_insn = 1;
+   int num_skip_non_prologue_insns = 0;
++  int num_skip_ppc64_gnu_linux_syscall_insn = 0;
+   int r0_contains_arg = 0;
+   const struct bfd_arch_info *arch_info = gdbarch_bfd_arch_info (gdbarch);
+   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+ 
+   memset (fdata, 0, sizeof (struct rs6000_framedata));
++  fdata->func_start = pc;
+   fdata->saved_gpr = -1;
+   fdata->saved_fpr = -1;
+   fdata->saved_vr = -1;
+@@ -1484,6 +1486,55 @@ skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR lim_pc,
+ 	break;
+       op = extract_unsigned_integer (buf, 4, byte_order);
+ 
++      /* A PPC64 GNU/Linux system call function is split into two
++	 sub-functions: a non-threaded fast-path (__NAME_nocancel)
++	 which does not use a frame; and a threaded slow-path
++	 (Lpseudo_cancel) that does create a frame.  Ref:
++	 nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h
++
++	 *INDENT-OFF*
++	 NAME:
++	 	SINGLE_THREAD_P
++	 	bne- .Lpseudo_cancel
++	 __NAME_nocancel:
++	 	li r0,162
++	 	sc
++	 	bnslr+
++	 	b 0x7fe014ef64 <.__syscall_error>
++	 Lpseudo_cancel:
++	 	stdu r1,-128(r1)
++	 	...
++	 *INDENT-ON*
++
++	 Unfortunatly, because the latter case uses a local label (not
++	 in the symbol table) a PC in "Lpseudo_cancel" appears to be
++	 in "__NAME_nocancel".  The following code recognizes this,
++	 adjusting FUNC_START to point to where "Lpseudo_cancel"
++	 should be, and parsing the prologue sequence as if
++	 "Lpseudo_cancel" was the entry point.  */
++
++      if (((op & 0xffff0000) == 0x38000000 /* li r0,N */
++	   && pc == fdata->func_start + 0
++	   && num_skip_ppc64_gnu_linux_syscall_insn == 0)
++	  || (op == 0x44000002 /* sc */
++	      && pc == fdata->func_start + 4
++	      && num_skip_ppc64_gnu_linux_syscall_insn == 1)
++	  || (op == 0x4ca30020 /* bnslr+ */
++	      && pc == fdata->func_start + 8
++	      && num_skip_ppc64_gnu_linux_syscall_insn == 2))
++	{
++	  num_skip_ppc64_gnu_linux_syscall_insn++;
++	  continue;
++	}
++      else if ((op & 0xfc000003) == 0x48000000 /* b __syscall_error */
++	       && pc == fdata->func_start + 12
++	       && num_skip_ppc64_gnu_linux_syscall_insn == 3)
++	{
++	  num_skip_ppc64_gnu_linux_syscall_insn = -1;
++	  fdata->func_start = pc;
++	  continue;
++	}
++
+       if ((op & 0xfc1fffff) == 0x7c0802a6)
+ 	{			/* mflr Rx */
+ 	  /* Since shared library / PIC code, which needs to get its
+@@ -1673,9 +1724,9 @@ skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR lim_pc,
+ 	     we have no line table information or the line info tells
+ 	     us that the subroutine call is not part of the line
+ 	     associated with the prologue.  */
+-	  if ((pc - orig_pc) > 8)
++	  if ((pc - fdata->func_start) > 8)
+ 	    {
+-	      struct symtab_and_line prologue_sal = find_pc_line (orig_pc, 0);
++	      struct symtab_and_line prologue_sal = find_pc_line (fdata->func_start, 0);
+ 	      struct symtab_and_line this_sal = find_pc_line (pc, 0);
+ 
+ 	      if ((prologue_sal.line == 0)
diff --git a/SOURCES/gdb-6.3-readnever-20050907.patch b/SOURCES/gdb-6.3-readnever-20050907.patch
new file mode 100644
index 0000000..b70b58f
--- /dev/null
+++ b/SOURCES/gdb-6.3-readnever-20050907.patch
@@ -0,0 +1,35 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Andrew Cagney <cagney@gnu.org>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.3-readnever-20050907.patch
+
+;; Add readnever option
+;;=push
+
+2004-11-18  Andrew Cagney  <cagney@gnu.org>
+
+        * dwarf2read.c: Include "top.c".
+        (dwarf2_has_info): Check for readnever_symbol_files.
+        * symfile.c (readnever_symbol_files): Define.
+        * top.h (readnever_symbol_files): Declare.
+        * main.c (captured_main): Add --readnever option.
+        (print_gdb_help): Ditto.
+
+2004-11-18  Andrew Cagney  <cagney@gnu.org>
+
+        * gdb.texinfo (File Options): Document --readnever.
+
+Pushed upstream: https://sourceware.org/ml/gdb-cvs/2017-12/msg00007.html
+
+diff --git a/gdb/gcore.in b/gdb/gcore.in
+--- a/gdb/gcore.in
++++ b/gdb/gcore.in
+@@ -97,7 +97,7 @@ for pid in "$@"
+ do
+ 	# `</dev/null' to avoid touching interactive terminal if it is
+ 	# available but not accessible as GDB would get stopped on SIGTTIN.
+-	"$binary_path/@GDB_TRANSFORM_NAME@" </dev/null --nx --batch \
++	"$binary_path/@GDB_TRANSFORM_NAME@" </dev/null --nx --batch --readnever \
+ 	    -ex "set pagination off" -ex "set height 0" -ex "set width 0" \
+ 	    "${dump_all_cmds[@]}" \
+ 	    -ex "attach $pid" -ex "gcore $name.$pid" -ex detach -ex quit
diff --git a/SOURCES/gdb-6.3-rh-testversion-20041202.patch b/SOURCES/gdb-6.3-rh-testversion-20041202.patch
new file mode 100644
index 0000000..ebfbf1b
--- /dev/null
+++ b/SOURCES/gdb-6.3-rh-testversion-20041202.patch
@@ -0,0 +1,26 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Elena Zannoni <ezannoni@redhat.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.3-rh-testversion-20041202.patch
+
+;; Match the Fedora's version info.
+;;=fedora
+
+2003-02-24  Elena Zannoni  <ezannoni@redhat.com>
+
+        * gdb.gdb/selftest.exp: Add matching on specific Red Hat only version
+        string.
+
+diff --git a/gdb/testsuite/gdb.gdb/selftest.exp b/gdb/testsuite/gdb.gdb/selftest.exp
+--- a/gdb/testsuite/gdb.gdb/selftest.exp
++++ b/gdb/testsuite/gdb.gdb/selftest.exp
+@@ -53,6 +53,9 @@ proc test_with_self { } {
+ 	-re ".\[0-9\]+ = +.+ +0x.*\[0-9.\]+.*$gdb_prompt $" {
+ 	    pass "printed version with cast"
+ 	}
++	-re ".\[0-9\]+ = .(Fedora|Red Hat Enterprise Linux) \[\\(\\)0-9.a-z\\-\]+.*$gdb_prompt $" {
++	    pass "printed version Fedora or Red Hat Enterprise Linux only"
++	}
+     }
+ 
+     # start the "xgdb" process
diff --git a/SOURCES/gdb-6.3-test-dtorfix-20050121.patch b/SOURCES/gdb-6.3-test-dtorfix-20050121.patch
new file mode 100644
index 0000000..6586303
--- /dev/null
+++ b/SOURCES/gdb-6.3-test-dtorfix-20050121.patch
@@ -0,0 +1,247 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.3-test-dtorfix-20050121.patch
+
+;; Test support of multiple destructors just like multiple constructors
+;;=fedoratest
+
+diff --git a/gdb/testsuite/gdb.cp/constructortest.cc b/gdb/testsuite/gdb.cp/constructortest.cc
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.cp/constructortest.cc
+@@ -0,0 +1,99 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2005 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 2 of the License, 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; if not, write to the Free Software
++   Foundation, Inc., 59 Temple Place - Suite 330,
++   Boston, MA 02111-1307, USA.  */
++
++class A
++{
++  public:
++    A();
++    ~A();
++    int  k;
++  private:
++    int  x;
++};
++
++class B: public A
++{
++  public:
++    B();
++  private:
++    int  y;
++};
++
++/* C and D are for the $delete destructor.  */
++
++class C
++{
++  public:
++    C();
++    virtual ~C();
++  private:
++    int  x;
++};
++
++class D: public C
++{
++  public:
++    D();
++  private:
++    int  y;
++};
++
++int main(int argc, char *argv[])
++{
++  A* a = new A;
++  B* b = new B;
++  D* d = new D;
++  delete a;
++  delete b;
++  delete d;
++  return 0;
++}
++
++A::A() /* Constructor A */
++{
++   x = 1; /* First line A */
++   k = 4; /* Second line A */
++}
++
++A::~A() /* Destructor A */
++{
++   x = 3; /* First line ~A */
++   k = 6; /* Second line ~A */
++}
++
++B::B()
++{
++   y = 2; /* First line B */
++   k = 5;
++}
++
++C::C() /* Constructor C */
++{
++   x = 1; /* First line C */
++}
++
++C::~C() /* Destructor C */
++{
++   x = 3; /* First line ~C */
++}
++
++D::D()
++{
++   y = 2; /* First line D */
++}
+diff --git a/gdb/testsuite/gdb.cp/constructortest.exp b/gdb/testsuite/gdb.cp/constructortest.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.cp/constructortest.exp
+@@ -0,0 +1,130 @@
++# This testcase is part of GDB, the GNU debugger.
++
++# Copyright 2005, 2007 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
++
++# Check that GDB can break at multiple forms of constructors.
++
++set testfile "constructortest"
++set srcfile ${testfile}.cc
++set binfile [standard_output_file ${testfile}]
++# PIE is required for testing proper BREAKPOINT_RE_SET of the multiple-PC
++# breakpoints.
++if {[gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++ "additional_flags=-fpie -pie"}] != "" } {
++    return -1
++}
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++gdb_load ${binfile}
++
++#
++# Run to `main' where we begin our tests.
++#
++
++if ![runto_main] then {
++    gdb_suppress_tests
++}
++
++# Break on the various forms of the A::A constructor.
++# " (2 locations)" is displayed depending on G++ version.
++gdb_test "break A\:\:A" "Breakpoint 2 at .*" "breaking on A::A"
++        
++# Verify that we break for the A constructor two times
++# Once for new A and once for new B
++gdb_continue_to_breakpoint "First line A"
++gdb_test "bt" "#0.*A.*#1.*main.*" "Verify in in-charge A::A"
++gdb_continue_to_breakpoint "First line A"
++gdb_test "bt" "#0.*A.*#1.*B.*#2.*main.*" "Verify in not-in-charge A::A"
++
++# Now do the same for destructors
++gdb_test "break 'A::~A()'" ""
++
++# Verify that we break for the A destructor two times
++# Once for delete a and once for delete b
++gdb_continue_to_breakpoint "First line ~A"
++gdb_test "bt" "#0.*~A.*#1.*main.*" "Verify in in-charge A::~A"
++gdb_continue_to_breakpoint "First line ~A"
++gdb_test "bt" "#0.*~A.*#1.*~B.*#2.*main.*" "Verify in not-in-charge A::~A"
++
++
++# Verify that we can break by line number in a constructor and find
++# both occurrences
++runto_main
++gdb_test "break 'A::A()'" "" "break in constructor A 2"
++gdb_continue_to_breakpoint "First line A"
++set second_line [gdb_get_line_number "Second line A"]
++# " (2 locations)" is displayed depending on G++ version.
++gdb_test "break $second_line" "Breakpoint .*, line $second_line\\..*" "break by line in constructor"
++gdb_continue_to_breakpoint "Second line A"
++gdb_test "bt" "#0.*A.*#1.*main.*" "Verify in in-charge A::A second line"
++gdb_continue_to_breakpoint "Second line A"
++gdb_test "bt" "#0.*A.*#1.*B.*#2.*main.*" "Verify in not-in-charge A::A second line"
++
++# Verify that we can break by line number in a destructor and find
++# both occurrences
++gdb_test "break 'A::~A()'" "" "break in constructor ~A 2"
++gdb_continue_to_breakpoint "First line ~A"
++set second_line_dtor [gdb_get_line_number "Second line ~A"]
++# " (2 locations)" is displayed depending on G++ version.
++gdb_test "break $second_line_dtor" "Breakpoint .*, line $second_line_dtor\\..*" "break by line in destructor"
++gdb_continue_to_breakpoint "Second line ~A"
++gdb_test "bt" "#0.*A.*#1.*main.*" "Verify in in-charge A::~A second line"
++# FIXME: Analyse this case better.
++gdb_continue_to_breakpoint "Second line ~A"
++gdb_test "bt" "#0.*A.*#1.*main.*" "Verify in A::~A second line #2"
++gdb_continue_to_breakpoint "Second line ~A"
++gdb_test "bt" "#0.*A.*#1.*B.*#2.*main.*" "Verify in not-in-charge A::~A second line"
++
++
++# Test now the $delete destructors.
++
++gdb_load ${binfile}
++runto_main
++
++set first_line_dtor [gdb_get_line_number "First line ~C"]
++set define_line_dtor [gdb_get_line_number "Destructor C"]
++# Break on the various forms of the C::~C destructor
++# " ([23] locations)" is displayed depending on G++ version.
++gdb_test "break C\:\:~C" "Breakpoint .*: C::~C\\. \\(2 locations\\)" "breaking on C::~C"
++gdb_continue_to_breakpoint "First line ~C"
++
++# Verify that we can break by line number in a destructor and find
++# the $delete occurence
++
++gdb_load ${binfile}
++delete_breakpoints
++
++# " (3 locations)" is displayed depending on G++ version.
++gdb_test "break $first_line_dtor" "Breakpoint .*, line $first_line_dtor\\..*" "break by line in destructor"
++
++# Run to `main' where we begin our tests.
++# Set the breakpoints first to test PIE multiple-PC BREAKPOINT_RE_SET.
++# RUNTO_MAIN or RUNTO MAIN are not usable here as it runs DELETE_BREAKPOINTS.
++
++if ![gdb_breakpoint main] {
++    gdb_suppress_tests
++}
++gdb_run_cmd
++set test "running to main"
++gdb_test_multiple "" $test {
++    -re "Breakpoint \[0-9\]*, main .*$gdb_prompt $" {
++	pass $test
++    }
++}
++
++gdb_continue_to_breakpoint "First line ~C"
diff --git a/SOURCES/gdb-6.3-test-movedir-20050125.patch b/SOURCES/gdb-6.3-test-movedir-20050125.patch
new file mode 100644
index 0000000..bcce9fa
--- /dev/null
+++ b/SOURCES/gdb-6.3-test-movedir-20050125.patch
@@ -0,0 +1,103 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Elena Zannoni <ezannoni@redhat.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.3-test-movedir-20050125.patch
+
+;; Fix to support executable moving
+;;=fedoratest
+
+2005-01-25  Elena Zannoni  <ezannoni@redhat.com>
+
+        * gdb.base/move-dir.exp: New test.
+        * gdb.base/move-dir.c: Ditto.
+        * gdb.base/move-dir.h: Ditto.
+
+diff --git a/gdb/testsuite/gdb.base/move-dir.c b/gdb/testsuite/gdb.base/move-dir.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/move-dir.c
+@@ -0,0 +1,10 @@
++#include <stdio.h>
++#include <stdlib.h>
++#include "move-dir.h"
++
++int main() {
++   const char* hw = "hello world.";
++   printf ("%s\n", hw);;
++   other();
++}
++
+diff --git a/gdb/testsuite/gdb.base/move-dir.exp b/gdb/testsuite/gdb.base/move-dir.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/move-dir.exp
+@@ -0,0 +1,57 @@
++#   Copyright 2005
++#   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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
++
++set testfile "move-dir"
++set srcfile ${testfile}.c
++set incfile ${testfile}.h
++set binfile [standard_output_file ${testfile}]
++
++set testdir [standard_output_file incdir]
++
++remote_exec build "mkdir $testdir"
++remote_exec build "cp ${srcdir}/${subdir}/${srcfile} [standard_output_file ${srcfile}]"
++remote_exec build "cp ${srcdir}/${subdir}/${incfile} [standard_output_file ${incfile}]"
++
++set additional_flags "additional_flags=-I${subdir}/incdir"
++
++if  { [gdb_compile [standard_output_file ${srcfile}] "${binfile}" executable [list debug $additional_flags]] != "" } {
++    gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
++}
++
++# Create and source the file that provides information about the compiler
++# used to compile the test case.
++
++if [get_compiler_info ${binfile}] {
++    return -1;
++}
++
++
++set oldtimeout $timeout
++set timeout [expr "$timeout + 60"]
++
++# Start with a fresh gdb.
++
++gdb_exit
++gdb_start
++gdb_test "cd ../.." "" ""
++gdb_load ${binfile}
++gdb_test "list main" ".*hw.*other.*" "found main"
++gdb_test "list other" ".*ostring.*" "found include file"
++
++
++set timeout $oldtimeout
++return 0
+diff --git a/gdb/testsuite/gdb.base/move-dir.h b/gdb/testsuite/gdb.base/move-dir.h
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/move-dir.h
+@@ -0,0 +1,7 @@
++#include <stdlib.h>
++
++void other() {
++  const char* ostring = "other";
++  printf ("%s\n", ostring);;
++}
++
diff --git a/SOURCES/gdb-6.3-test-pie-20050107.patch b/SOURCES/gdb-6.3-test-pie-20050107.patch
new file mode 100644
index 0000000..85f133b
--- /dev/null
+++ b/SOURCES/gdb-6.3-test-pie-20050107.patch
@@ -0,0 +1,2027 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.3-test-pie-20050107.patch
+
+;; VSYSCALL and PIE
+;;=fedoratest
+
+diff --git a/gdb/testsuite/gdb.pie/attach.c b/gdb/testsuite/gdb.pie/attach.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.pie/attach.c
+@@ -0,0 +1,20 @@
++/* This program is intended to be started outside of gdb, and then
++   attached to by gdb.  Thus, it simply spins in a loop.  The loop
++   is exited when & if the variable 'should_exit' is non-zero.  (It
++   is initialized to zero in this program, so the loop will never
++   exit unless/until gdb sets the variable to non-zero.)
++   */
++#include <stdio.h>
++
++int  should_exit = 0;
++
++int main ()
++{
++  int  local_i = 0;
++
++  while (! should_exit)
++    {
++      local_i++;
++    }
++  return 0;
++}
+diff --git a/gdb/testsuite/gdb.pie/attach.exp b/gdb/testsuite/gdb.pie/attach.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.pie/attach.exp
+@@ -0,0 +1,416 @@
++#   Copyright 1997, 1999, 2002 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
++
++# On HP-UX 11.0, this test is causing a process running the program
++# "attach" to be left around spinning.  Until we figure out why, I am
++# commenting out the test to avoid polluting tiamat (our 11.0 nightly
++# test machine) with these processes. RT
++#
++# Setting the magic bit in the target app should work.  I added a
++# "kill", and also a test for the R3 register warning.  JB
++if { [istarget "hppa*-*-hpux*"] } {
++    return 0
++}
++
++# are we on a target board
++if [is_remote target] then {
++    return 0
++}
++
++set testfile "attach"
++set srcfile  ${testfile}.c
++set srcfile2 ${testfile}2.c
++set binfile  [standard_output_file ${testfile}]
++set binfile2 [standard_output_file ${testfile}2]
++set escapedbinfile  [string_to_regexp [standard_output_file ${testfile}]]
++set cleanupfile [standard_output_file ${testfile}.awk]
++
++#execute_anywhere "rm -f ${binfile} ${binfile2}"
++remote_exec build "rm -f ${binfile} ${binfile2}"
++# For debugging this test
++#
++#log_user 1
++
++# Clean out any old files from past runs.
++#
++remote_exec build "${cleanupfile}"
++
++# build the first test case
++#
++if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug "additional_flags= -fpie -pie"}] != "" } {
++     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
++}
++
++# Build the in-system-call test
++
++if  { [gdb_compile "${srcdir}/${subdir}/${srcfile2}" "${binfile2}" executable {debug "additional_flags= -fpie -pie"}] != "" } {
++     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
++}
++
++if [get_compiler_info ${binfile}] {
++    return -1
++}
++
++proc do_attach_tests {} {
++   global gdb_prompt
++   global binfile
++   global escapedbinfile
++   global srcfile
++   global testfile
++   global subdir
++   global timeout
++
++   # Start the program running and then wait for a bit, to be sure
++   # that it can be attached to.
++   #
++   set testpid [eval exec $binfile &]
++   exec sleep 2
++
++   # Verify that we cannot attach to nonsense.
++   #
++   send_gdb "attach abc\n"
++   gdb_expect {
++      -re ".*Illegal process-id: abc.*$gdb_prompt $"\
++                      {pass "attach to nonsense is prohibited"}
++      -re "Attaching to.*, process .*couldn't open /proc file.*$gdb_prompt $"\
++                      {
++                        # Response expected from /proc-based systems.
++                        pass "attach to nonsense is prohibited" 
++                      }
++      -re "Attaching to.*$gdb_prompt $"\
++                      {fail "attach to nonsense is prohibited (bogus pid allowed)"}
++      -re "$gdb_prompt $" {fail "attach to nonsense is prohibited"}
++      timeout         {fail "(timeout) attach to nonsense is prohibited"}
++   }
++
++   # Verify that we cannot attach to what appears to be a valid
++   # process ID, but is a process that doesn't exist.  Traditionally,
++   # most systems didn't have a process with ID 0, so we take that as
++   # the default.  However, there are a few exceptions.
++   #
++   set boguspid 0
++   if { [istarget "*-*-*bsd*"] } {
++       # In FreeBSD 5.0, PID 0 is used for "swapper".  Use -1 instead
++       # (which should have the desired effect on any version of
++       # FreeBSD, and probably other *BSD's too).
++       set boguspid -1
++   }
++   send_gdb "attach $boguspid\n"
++   gdb_expect {
++       -re "Attaching to.*, process $boguspid.*No such process.*$gdb_prompt $"\
++	       {
++	   # Response expected on ptrace-based systems (i.e. HP-UX 10.20).
++	   pass "attach to nonexistent process is prohibited"
++       }
++       -re "Attaching to.*, process $boguspid failed.*Hint.*$gdb_prompt $"\
++	       {
++	   # Response expected on ttrace-based systems (i.e. HP-UX 11.0).
++	   pass "attach to nonexistent process is prohibited"
++       }
++       -re "Attaching to.*, process $boguspid.*denied.*$gdb_prompt $"\
++	       {pass "attach to nonexistent process is prohibited"}
++       -re "Attaching to.*, process $boguspid.*not permitted.*$gdb_prompt $"\
++	       {pass "attach to nonexistent process is prohibited"}
++       -re "Attaching to.*, process .*couldn't open /proc file.*$gdb_prompt $"\
++	       {
++	   # Response expected from /proc-based systems.
++	   pass "attach to nonexistent process is prohibited"
++       }
++       -re "$gdb_prompt $" {fail "attach to nonexistent process is prohibited"}
++       timeout {
++	   fail "(timeout) attach to nonexistent process is prohibited"
++       }
++   }
++
++   # Verify that we can attach to the process by first giving its
++   # executable name via the file command, and using attach with
++   # the process ID.
++   #
++   # (Actually, the test system appears to do this automatically
++   # for us.  So, we must also be prepared to be asked if we want
++   # to discard an existing set of symbols.)
++   #
++   send_gdb "file $binfile\n"
++   gdb_expect {
++      -re "Load new symbol table from.*y or n.*$" {
++         send_gdb "y\n"
++         gdb_expect {
++            -re "Reading symbols from $escapedbinfile\.\.\.*done.*$gdb_prompt $"\
++                            {pass "(re)set file, before attach1"}
++            -re "$gdb_prompt $" {fail "(re)set file, before attach1"}
++            timeout         {fail "(timeout) (re)set file, before attach1"}
++         }
++      }
++      -re "Reading symbols from $escapedbinfile\.\.\.*done.*$gdb_prompt $"\
++                      {pass "set file, before attach1"}
++      -re "$gdb_prompt $" {fail "set file, before attach1"}
++      timeout         {fail "(timeout) set file, before attach1"}
++   }
++
++   send_gdb "attach $testpid\n"
++   gdb_expect {
++      -re "Attaching to program.*`?$escapedbinfile'?, process $testpid.*main.*at .*$srcfile:.*$gdb_prompt $"\
++                      {pass "attach1, after setting file"}
++      -re "$gdb_prompt $" {fail "attach1, after setting file"}
++      timeout         {fail "(timeout) attach1, after setting file"}
++   }
++
++   # Verify that we can "see" the variable "should_exit" in the
++   # program, and that it is zero.
++   #
++   send_gdb "print should_exit\n"
++   gdb_expect {
++      -re ".* = 0.*$gdb_prompt $"\
++                      {pass "after attach1, print should_exit"}
++      -re "$gdb_prompt $" {fail "after attach1, print should_exit"}
++      timeout         {fail "(timeout) after attach1, print should_exit"}
++   }
++
++   # Detach the process.
++   #
++   send_gdb "detach\n"
++   gdb_expect {
++      -re "Detaching from program: .*$escapedbinfile.*$gdb_prompt $"\
++                      {pass "attach1 detach"}
++      -re "$gdb_prompt $" {fail "attach1 detach"}
++      timeout         {fail "(timeout) attach1 detach"}
++   }
++
++   # Wait a bit for gdb to finish detaching
++   #
++   exec sleep 5
++
++   # Purge the symbols from gdb's brain.  (We want to be certain
++   # the next attach, which won't be preceded by a "file" command,
++   # is really getting the executable file without our help.)
++   #
++   set old_timeout $timeout
++   set timeout 15 
++   send_gdb "file\n"
++   gdb_expect {
++      -re ".*gdb internal error.*$" { 
++          fail "Internal error, prob. Memory corruption" 
++      }
++      -re "No executable file now.*Discard symbol table.*y or n.*$" {
++         send_gdb "y\n"
++         gdb_expect {
++            -re "No symbol file now.*$gdb_prompt $"\
++                            {pass "attach1, purging symbols after detach"}
++            -re "$gdb_prompt $" {fail "attach1, purging symbols after detach"}
++            timeout         {fail "(timeout) attach1, purging symbols after detach"}
++         }
++      }
++      -re "$gdb_prompt $" {fail "attach1, purging file after detach"}
++      timeout         {
++          fail "(timeout) attach1, purging file after detach"
++      }
++   }
++   set timeout $old_timeout
++
++   # Verify that we can attach to the process just by giving the
++   # process ID.
++   #
++   send_gdb "attach $testpid\n"
++   gdb_expect {
++      -re "Attaching to process $testpid.*Reading symbols from $escapedbinfile.*main.*at .*$gdb_prompt $"\
++                      {pass "attach2"}
++      -re "$gdb_prompt $" {fail "attach2"}
++      timeout         {fail "(timeout) attach2"}
++   }
++
++   # Verify that we can modify the variable "should_exit" in the
++   # program.
++   #
++   send_gdb "set should_exit=1\n"
++   gdb_expect {
++      -re "$gdb_prompt $" {pass "after attach2, set should_exit"}
++      timeout         {fail "(timeout) after attach2, set should_exit"}
++   }
++
++   # Verify that the modification really happened.
++   #
++   send_gdb "tbreak 19\n"
++   gdb_expect {
++      -re "reakpoint .*at.*$srcfile, line 19.*$gdb_prompt $"\
++                      {pass "after attach2, set tbreak postloop"}
++      -re "$gdb_prompt $" {fail "after attach2, set tbreak postloop"}
++      timeout         {fail "(timeout) after attach2, set tbreak postloop"}
++   }
++   send_gdb "continue\n"
++   gdb_expect {
++      -re "main.*at.*$srcfile:19.*$gdb_prompt $"\
++                      {pass "after attach2, reach tbreak postloop"}
++      -re "$gdb_prompt $" {fail "after attach2, reach tbreak postloop"}
++      timeout         {fail "(timeout) after attach2, reach tbreak postloop"}
++   }
++
++   # Allow the test process to exit, to cleanup after ourselves.
++   #
++   gdb_test "continue" {\[Inferior .* exited normally\]} "after attach2, exit"
++
++   # Make sure we don't leave a process around to confuse
++   # the next test run (and prevent the compile by keeping
++   # the text file busy), in case the "set should_exit" didn't
++   # work.
++   #
++   remote_exec build "kill -9 ${testpid}"
++   # Start the program running and then wait for a bit, to be sure
++   # that it can be attached to.
++   #
++   set testpid [eval exec $binfile &]
++   exec sleep 2
++
++   # Verify that we can attach to the process, and find its a.out
++   # when we're cd'd to some directory that doesn't contain the
++   # a.out.  (We use the source path set by the "dir" command.)
++   #
++   send_gdb "dir [file dirname [standard_output_file ${testfile}]]\n"
++   gdb_expect {
++      -re ".*Source directories searched: .*$gdb_prompt $"\
++                      {pass "set source path"}
++      -re "$gdb_prompt $" {fail "set source path"}
++      timeout         {fail "(timeout) set source path"}
++   }
++
++   send_gdb "cd /tmp\n"
++   gdb_expect {
++      -re ".*Working directory /tmp.*$gdb_prompt $"\
++                      {pass "cd away from process' a.out"}
++      -re "$gdb_prompt $" {fail "cd away from process' a.out"}
++      timeout         {fail "(timeout) cd away from process' a.out"}
++   }
++
++   # Explicitly flush out any knowledge of the previous attachment.
++   send_gdb "symbol\n"
++   gdb_expect {
++      -re ".*Discard symbol table from.*y or n. $"\
++                      {send_gdb "y\n"
++                       gdb_expect {
++                          -re ".*No symbol file now.*$gdb_prompt $"\
++                                          {pass "before attach3, flush symbols"}
++                          -re "$gdb_prompt $" {fail "before attach3, flush symbols"}
++                          timeout         {fail "(timeout) before attach3, flush symbols"}
++                       }
++                      }
++      -re ".*No symbol file now.*$gdb_prompt $"\
++                      {pass "before attach3, flush symbols"}
++      -re "$gdb_prompt $" {fail "before attach3, flush symbols"}
++      timeout         {fail "(timeout) before attach3, flush symbols"}
++   }
++   send_gdb "exec\n"
++   gdb_expect {
++      -re ".*No executable file now.*$gdb_prompt $"\
++                      {pass "before attach3, flush exec"}
++      -re "$gdb_prompt $" {fail "before attach3, flush exec"}
++      timeout         {fail "(timeout) before attach3, flush exec"}
++   }
++
++   send_gdb "attach $testpid\n"
++   gdb_expect {
++      -re "Attaching to process $testpid.*Reading symbols from $escapedbinfile.*main.*at .*$gdb_prompt $"\
++                      {pass "attach when process' a.out not in cwd"}
++      -re "$gdb_prompt $" {fail "attach when process' a.out not in cwd"}
++      timeout         {fail "(timeout) attach when process' a.out not in cwd"}
++   }
++
++   send_gdb "kill\n"
++   gdb_expect {
++      -re ".*Kill the program being debugged.*y or n. $"\
++                      {send_gdb "y\n"
++                       gdb_expect {
++                          -re "$gdb_prompt $" {pass "after attach3, exit"}
++                          timeout {fail "(timeout) after attach3, exit"}
++                       }
++                      }
++      -re "$gdb_prompt $" {fail "after attach3, exit"}
++      timeout         {fail "(timeout) after attach3, exit"}
++   }
++
++   # Another "don't leave a process around"
++   remote_exec build "kill -9 ${testpid}"
++}
++
++proc do_call_attach_tests {} {
++   global gdb_prompt
++   global binfile2
++
++   # Start the program running and then wait for a bit, to be sure
++   # that it can be attached to.
++   #
++   set testpid [eval exec $binfile2 &]
++   exec sleep 2
++
++   # Attach
++   #
++   gdb_test "file $binfile2" ".*" "force switch to gdb64, if necessary"
++   send_gdb "attach $testpid\n"
++   gdb_expect {
++      -re ".*warning: reading register.*I.*O error.*$gdb_prompt $" {
++         fail "attach call, read register 3 error"
++     }
++     -re "Attaching to.*process $testpid.*$gdb_prompt $" {
++         # libc is relocated, not relocated, therefore not printed.
++         pass "attach call"
++     }
++      -re "$gdb_prompt $" {fail "attach call"}
++      timeout         {fail "(timeout) attach call"}
++   }
++
++   # See if other registers are problems
++   #
++   send_gdb "i r r3\n"
++   gdb_expect {
++       -re ".*warning: reading register.*$gdb_prompt $" {
++           pass "CHFts23490: known bug"
++       }
++       -re ".*r3.*$gdb_prompt $" {
++           pass "Bug fixed, Yayyy!"
++       }
++       timeout { fail "timeout on info reg" }
++   }
++
++   # Get rid of the process
++   #
++   gdb_test "p should_exit = 1" ".*"
++   gdb_test "c" {\[Inferior .* exited normally\]}
++   
++   # Be paranoid
++   #
++    remote_exec build "kill -9 ${testpid}"
++
++}
++
++
++# Start with a fresh gdb
++#
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++gdb_load ${binfile}
++
++# This is a test of gdb's ability to attach to a running process.
++#
++do_attach_tests
++
++# Test attaching when the target is inside a system call
++#
++gdb_exit
++gdb_start
++
++gdb_reinitialize_dir $srcdir/$subdir
++do_call_attach_tests
++
++return 0
+diff --git a/gdb/testsuite/gdb.pie/attach2.c b/gdb/testsuite/gdb.pie/attach2.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.pie/attach2.c
+@@ -0,0 +1,24 @@
++/* This program is intended to be started outside of gdb, and then
++   attached to by gdb.  Thus, it simply spins in a loop.  The loop
++   is exited when & if the variable 'should_exit' is non-zero.  (It
++   is initialized to zero in this program, so the loop will never
++   exit unless/until gdb sets the variable to non-zero.)
++   */
++#include <stdio.h>
++#include <stdlib.h>
++#include <unistd.h>
++
++int  should_exit = 0;
++
++int main ()
++{
++  int  local_i = 0;
++
++  sleep( 10 ); /* System call causes register fetch to fail */
++               /* This is a known HPUX "feature"            */
++  while (! should_exit)
++    {
++      local_i++;
++    }
++  return (0);
++}
+diff --git a/gdb/testsuite/gdb.pie/break.c b/gdb/testsuite/gdb.pie/break.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.pie/break.c
+@@ -0,0 +1,146 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 1992, 1993, 1994, 1995, 1999, 2002, 2003 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 2 of the License, 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; if not, write to the Free Software
++   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++   Please email any bugs, comments, and/or additions to this file to:
++   bug-gdb@prep.ai.mit.edu  */
++
++#ifdef vxworks
++
++#  include <stdio.h>
++
++/* VxWorks does not supply atoi.  */
++static int
++atoi (z)
++     char *z;
++{
++  int i = 0;
++
++  while (*z >= '0' && *z <= '9')
++    i = i * 10 + (*z++ - '0');
++  return i;
++}
++
++/* I don't know of any way to pass an array to VxWorks.  This function
++   can be called directly from gdb.  */
++
++vxmain (arg)
++char *arg;
++{
++  char *argv[2];
++
++  argv[0] = "";
++  argv[1] = arg;
++  main (2, argv, (char **) 0);
++}
++
++#else /* ! vxworks */
++#  include <stdio.h>
++#  include <stdlib.h>
++#endif /* ! vxworks */
++
++#ifdef PROTOTYPES
++extern int marker1 (void);
++extern int marker2 (int a);
++extern void marker3 (char *a, char *b);
++extern void marker4 (long d);
++#else
++extern int marker1 ();
++extern int marker2 ();
++extern void marker3 ();
++extern void marker4 ();
++#endif
++
++/*
++ *	This simple classical example of recursion is useful for
++ *	testing stack backtraces and such.
++ */
++
++#ifdef PROTOTYPES
++int factorial(int);
++
++int
++main (int argc, char **argv, char **envp)
++#else
++int
++main (argc, argv, envp)
++int argc;
++char *argv[], **envp;
++#endif
++{
++#ifdef usestubs
++    set_debug_traps();  /* set breakpoint 5 here */
++    breakpoint();
++#endif
++    if (argc == 12345) {  /* an unlikely value < 2^16, in case uninited */ /* set breakpoint 6 here */
++	fprintf (stderr, "usage:  factorial <number>\n");
++	return 1;
++    }
++    printf ("%d\n", factorial (atoi ("6")));  /* set breakpoint 1 here */
++    /* set breakpoint 12 here */
++    marker1 ();  /* set breakpoint 11 here */
++    marker2 (43); /* set breakpoint 20 here */
++    marker3 ("stack", "trace"); /* set breakpoint 21 here */
++    marker4 (177601976L);
++    argc = (argc == 12345); /* This is silly, but we can step off of it */ /* set breakpoint 2 here */
++    return argc;  /* set breakpoint 10 here */
++}
++
++#ifdef PROTOTYPES
++int factorial (int value)
++#else
++int factorial (value)
++int value;
++#endif
++{
++  if (value > 1) {  /* set breakpoint 7 here */
++	value *= factorial (value - 1);
++    }
++    return (value); /* set breakpoint 19 here */
++}
++
++#ifdef PROTOTYPES
++int multi_line_if_conditional (int a, int b, int c)
++#else
++int multi_line_if_conditional (a, b, c)
++  int a, b, c;
++#endif
++{
++  if (a    /* set breakpoint 3 here */
++      && b
++      && c)
++    return 0;
++  else
++    return 1;
++}
++
++#ifdef PROTOTYPES
++int multi_line_while_conditional (int a, int b, int c)
++#else
++int multi_line_while_conditional (a, b, c)
++  int a, b, c;
++#endif
++{
++  while (a /* set breakpoint 4 here */
++      && b
++      && c)
++    {
++      a--, b--, c--;
++    }
++  return 0;
++}
+diff --git a/gdb/testsuite/gdb.pie/break.exp b/gdb/testsuite/gdb.pie/break.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.pie/break.exp
+@@ -0,0 +1,954 @@
++#   Copyright 1988, 1990, 1991, 1992, 1994, 1995, 1996, 1997, 1998, 1999,
++#   2000, 2002, 2003, 2004
++#   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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-gdb@prep.ai.mit.edu
++
++# This file was written by Rob Savoye. (rob@cygnus.com)
++
++# Test the same stuff but with PIE executables
++
++set testfile "break"
++set srcfile ${testfile}.c
++set srcfile1 ${testfile}1.c
++set binfile [standard_output_file ${testfile}]
++
++if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}0.o" object {debug "additional_flags=-w -fpie -pie"}] != "" } {
++     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
++}
++
++if  { [gdb_compile "${srcdir}/${subdir}/${srcfile1}" "${binfile}1.o" object {debug "additional_flags=-w -fpie -pie"}] != "" } {
++     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
++}
++
++if  { [gdb_compile "${binfile}0.o ${binfile}1.o" "${binfile}" executable {debug "additional_flags=-w -fpie -pie"}] != "" } {
++     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
++}
++
++if [get_compiler_info ${binfile}] {
++    return -1
++}
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++gdb_load ${binfile}
++
++if [target_info exists gdb_stub] {
++    gdb_step_for_stub;
++}
++#
++# test simple breakpoint setting commands
++#
++
++# Test deleting all breakpoints when there are none installed,
++# GDB should not prompt for confirmation.
++# Note that gdb-init.exp provides a "delete_breakpoints" proc
++# for general use elsewhere.
++
++send_gdb "delete breakpoints\n"
++gdb_expect {
++     -re "Delete all breakpoints.*$" {
++	    send_gdb "y\n"
++	    gdb_expect {
++		-re "$gdb_prompt $" {
++		    fail "Delete all breakpoints when none (unexpected prompt)"
++		}
++		timeout	{ fail "Delete all breakpoints when none (timeout after unexpected prompt)" }
++	    }
++	}
++     -re ".*$gdb_prompt $"       { pass "Delete all breakpoints when none" }
++    timeout	            { fail "Delete all breakpoints when none (timeout)" }
++}
++
++#
++# test break at function
++#
++gdb_test "break main" \
++    "Breakpoint.*at.* file .*$srcfile, line.*" \
++    "breakpoint function"
++
++#
++# test break at quoted function
++#
++gdb_test "break \"marker2\"" \
++    "Breakpoint.*at.* file .*$srcfile1, line.*" \
++    "breakpoint quoted function"
++
++#
++# test break at function in file
++#
++gdb_test "break $srcfile:factorial" \
++    "Breakpoint.*at.* file .*$srcfile, line.*" \
++    "breakpoint function in file"
++
++set bp_location1 [gdb_get_line_number "set breakpoint 1 here"]
++
++#
++# test break at line number
++#
++# Note that the default source file is the last one whose source text
++# was printed.  For native debugging, before we've executed the
++# program, this is the file containing main, but for remote debugging,
++# it's wherever the processor was stopped when we connected to the
++# board.  So, to be sure, we do a list command.
++#
++gdb_test "list main" \
++    ".*main \\(argc, argv, envp\\).*" \
++    "use `list' to establish default source file"
++gdb_test "break $bp_location1" \
++    "Breakpoint.*at.* file .*$srcfile, line $bp_location1\\." \
++    "breakpoint line number"
++
++#
++# test duplicate breakpoint
++#
++gdb_test "break $bp_location1" \
++    "Note: breakpoint \[0-9\]+ also set at pc.*Breakpoint \[0-9\]+ at.* file .*$srcfile, line $bp_location1\\." \
++    "breakpoint duplicate"
++
++set bp_location2 [gdb_get_line_number "set breakpoint 2 here"]
++
++#
++# test break at line number in file
++#
++gdb_test "break $srcfile:$bp_location2" \
++    "Breakpoint.*at.* file .*$srcfile, line $bp_location2\\." \
++    "breakpoint line number in file"
++
++set bp_location3 [gdb_get_line_number "set breakpoint 3 here"]
++set bp_location4 [gdb_get_line_number "set breakpoint 4 here"]
++
++#
++# Test putting a break at the start of a multi-line if conditional.
++# Verify the breakpoint was put at the start of the conditional.
++#
++gdb_test "break multi_line_if_conditional" \
++    "Breakpoint.*at.* file .*$srcfile, line $bp_location3\\." \
++    "breakpoint at start of multi line if conditional"
++
++gdb_test "break multi_line_while_conditional" \
++    "Breakpoint.*at.* file .*$srcfile, line $bp_location4\\." \
++    "breakpoint at start of multi line while conditional"
++
++set bp_location5 [gdb_get_line_number "set breakpoint 5 here"]
++set bp_location6 [gdb_get_line_number "set breakpoint 6 here"]
++
++#
++# check to see what breakpoints are set
++#
++if [target_info exists gdb_stub] {
++    set main_line $bp_location5
++} else {
++    set main_line $bp_location6
++}
++
++set proto ""
++
++set bp_location7 [gdb_get_line_number "set breakpoint 7 here"]
++set bp_location8 [gdb_get_line_number "set breakpoint 8 here" $srcfile1]
++set bp_location9 [gdb_get_line_number "set breakpoint 9 here" $srcfile1]
++
++# Test a pending breakpoint in PIE executable does not crash later GDB.
++gdb_breakpoint "non_existent_function" allow-pending
++
++gdb_test "info break" \
++    "Num\[ \]+Type\[ \]+Disp Enb Address\[ \]+What.*
++\[0-9\]+\[\t \]+breakpoint     keep y.* in main at .*$srcfile:$main_line.*
++\[0-9\]+\[\t \]+breakpoint     keep y.* in marker2 at .*$srcfile1:($bp_location8|$bp_location9).*
++\[0-9\]+\[\t \]+breakpoint     keep y.* in factorial$proto at .*$srcfile:$bp_location7.*
++\[0-9\]+\[\t \]+breakpoint     keep y.* in main at .*$srcfile:$bp_location1.*
++\[0-9\]+\[\t \]+breakpoint     keep y.* in main at .*$srcfile:$bp_location1.*
++\[0-9\]+\[\t \]+breakpoint     keep y.* in main at .*$srcfile:$bp_location2.*
++\[0-9\]+\[\t \]+breakpoint     keep y.* in multi_line_if_conditional at .*$srcfile:$bp_location3.*
++\[0-9\]+\[\t \]+breakpoint     keep y.* in multi_line_while_conditional at .*$srcfile:$bp_location4.*
++\[0-9\]+\[\t \]+breakpoint     keep y.* <PENDING> *non_existent_function" \
++    "breakpoint info"
++
++# FIXME: The rest of this test doesn't work with anything that can't
++# handle arguments.
++# Huh? There doesn't *appear* to be anything that passes arguments
++# below.
++if [istarget "mips-idt-*"] then {
++    return
++}
++
++#
++# run until the breakpoint at main is hit. For non-stubs-using targets.
++#
++if ![target_info exists use_gdb_stub] {
++  if [istarget "*-*-vxworks*"] then {
++    send_gdb "run vxmain \"2\"\n"
++    set timeout 120
++    verbose "Timeout is now $timeout seconds" 2
++  } else {
++	send_gdb "run\n"
++  }
++  gdb_expect {
++    -re "The program .* has been started already.*y or n. $" {
++	send_gdb "y\n"
++	exp_continue
++    }
++    -re "Starting program.*Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$srcfile:$bp_location6.*$bp_location6\[\t \]+if .argc.* \{.*$gdb_prompt $"\
++	                    { pass "run until function breakpoint" }
++    -re ".*$gdb_prompt $"       { fail "run until function breakpoint" }
++    timeout	            { fail "run until function breakpoint (timeout)" }
++  }
++} else {
++    if ![target_info exists gdb_stub] {
++	gdb_test continue ".*Continuing\\..*Breakpoint \[0-9\]+, main \\(argc=.*, argv=.*, envp=.*\\) at .*$srcfile:$bp_location6.*$bp_location6\[\t \]+if .argc.*\{.*" "stub continue"
++    }
++}
++
++#
++# run until the breakpoint at a line number
++#
++gdb_test continue "Continuing\\..*Breakpoint \[0-9\]+, main \\(argc=.*, argv=.*, envp=.*\\) at .*$srcfile:$bp_location1.*$bp_location1\[\t \]+printf.*factorial.*" \
++			"run until breakpoint set at a line number"
++
++#
++# Run until the breakpoint set in a function in a file
++#
++for {set i 6} {$i >= 1} {incr i -1} {
++	gdb_test continue "Continuing\\..*Breakpoint \[0-9\]+, factorial \\(value=$i\\) at .*$srcfile:$bp_location7.*$bp_location7\[\t \]+.*if .value > 1. \{.*" \
++			"run until file:function($i) breakpoint"
++}
++
++#
++# Run until the breakpoint set at a quoted function
++#
++gdb_test continue "Continuing\\..*Breakpoint \[0-9\]+, (0x\[0-9a-f\]+ in )?marker2 \\(a=43\\) at .*$srcfile1:($bp_location8|$bp_location9).*" \
++		"run until quoted breakpoint"
++#
++# run until the file:function breakpoint at a line number in a file
++#
++gdb_test continue "Continuing\\..*Breakpoint \[0-9\]+, main \\(argc=.*, argv=.*, envp=.*\\) at .*$srcfile:$bp_location2.*$bp_location2\[\t \]+argc = \\(argc == 12345\\);.*" \
++		"run until file:linenum breakpoint"
++
++# Test break at offset +1
++set bp_location10 [gdb_get_line_number "set breakpoint 10 here"]
++
++gdb_test "break +1" \
++    "Breakpoint.*at.* file .*$srcfile, line $bp_location10\\." \
++    "breakpoint offset +1"
++
++# Check to see if breakpoint is hit when stepped onto
++
++gdb_test "step" \
++    ".*Breakpoint \[0-9\]+, main \\(argc=.*, argv=.*, envp=.*\\) at .*$srcfile:$bp_location10.*$bp_location10\[\t \]+return argc;.*breakpoint 10 here.*" \
++    "step onto breakpoint"
++
++#
++# delete all breakpoints so we can start over, course this can be a test too
++#
++delete_breakpoints
++
++#
++# test temporary breakpoint at function
++#
++
++gdb_test "tbreak main" "reakpoint.*at.* file .*$srcfile, line.*" "Temporary breakpoint function"
++
++#
++# test break at function in file
++#
++
++gdb_test "tbreak $srcfile:factorial" "reakpoint.*at.* file .*$srcfile, line.*" \
++	"Temporary breakpoint function in file"
++
++#
++# test break at line number
++#
++send_gdb "tbreak $bp_location1\n"
++gdb_expect {
++    -re "reakpoint.*at.* file .*$srcfile, line $bp_location1.*$gdb_prompt $" { pass "Temporary breakpoint line number #1" }
++	-re ".*$gdb_prompt $"   { pass "Temporary breakpoint line number #1" }
++	timeout	    { fail "breakpoint line number #1 (timeout)" }
++}
++
++gdb_test "tbreak $bp_location6" "reakpoint.*at.* file .*$srcfile, line $bp_location6.*" "Temporary breakpoint line number #2"
++
++#
++# test break at line number in file
++#
++send_gdb "tbreak $srcfile:$bp_location2\n"
++gdb_expect {
++    -re "reakpoint.*at.* file .*$srcfile, line $bp_location2.*$gdb_prompt $" { pass "Temporary breakpoint line number in file #1" }
++	-re ".*$gdb_prompt $"   { pass "Temporary breakpoint line number in file #1" }
++	timeout	    { fail "Temporary breakpoint line number in file #1 (timeout)" }
++}
++
++set bp_location11 [gdb_get_line_number "set breakpoint 11 here"]
++gdb_test  "tbreak $srcfile:$bp_location11" "reakpoint.*at.* file .*$srcfile, line $bp_location11.*" "Temporary breakpoint line number in file #2"
++
++#
++# check to see what breakpoints are set (temporary this time)
++#
++gdb_test "info break" "Num.*Type.*Disp Enb Address.*What.*\[\r\n\]
++\[0-9\]+\[\t \]+breakpoint     del.*y.*in main at .*$srcfile:$main_line.*\[\r\n\]
++\[0-9\]+\[\t \]+breakpoint     del.*y.*in factorial$proto at .*$srcfile:$bp_location7.*\[\r\n\]
++\[0-9\]+\[\t \]+breakpoint     del.*y.*in main at .*$srcfile:$bp_location1.*\[\r\n\]
++\[0-9\]+\[\t \]+breakpoint     del.*y.*in main at .*$srcfile:$bp_location6.*\[\r\n\]
++\[0-9\]+\[\t \]+breakpoint     del.*y.*in main at .*$srcfile:$bp_location2.*\[\r\n\]
++\[0-9\]+\[\t \]+breakpoint     del.*y.*in main at .*$srcfile:$bp_location11.*" \
++    "Temporary breakpoint info"
++
++
++#***********
++
++# Verify that catchpoints for fork, vfork and exec don't trigger
++# inappropriately.  (There are no calls to those system functions
++# in this test program.)
++#
++if ![runto_main] then { fail "break tests suppressed" }
++
++send_gdb "catch\n"
++gdb_expect {
++  -re "Catch requires an event name.*$gdb_prompt $"\
++          {pass "catch requires an event name"}
++  -re "$gdb_prompt $"\
++          {fail "catch requires an event name"}
++  timeout {fail "(timeout) catch requires an event name"}
++}
++
++
++set name "set catch fork, never expected to trigger"
++send_gdb "catch fork\n"
++gdb_expect {
++  -re "Catchpoint \[0-9\]* .fork..*$gdb_prompt $"
++          {pass $name}
++  -re "Catch of fork not yet implemented.*$gdb_prompt $"
++	  {pass $name}
++  -re "$gdb_prompt $"
++          {fail $name}
++  timeout {fail "(timeout) $name"}
++}
++
++
++set name "set catch vfork, never expected to trigger"
++send_gdb "catch vfork\n"
++
++# If we are on HP-UX 10.20, we expect an error message to be
++# printed if we type "catch vfork" at the gdb gdb_prompt.  This is
++# because on HP-UX 10.20, we cannot catch vfork events.
++
++if [istarget "hppa*-hp-hpux10.20"] then {
++    gdb_expect {
++	-re "Catch of vfork events not supported on HP-UX 10.20..*$gdb_prompt $"
++		{pass $name}
++	-re "$gdb_prompt $"
++		{fail $name}
++	timeout {fail "(timeout) $name"}
++    }
++} else {
++    gdb_expect {
++	-re "Catchpoint \[0-9\]* .vfork..*$gdb_prompt $"
++		{pass $name}
++	-re "Catch of vfork not yet implemented.*$gdb_prompt $"
++		{pass $name}
++	-re "$gdb_prompt $"
++		{fail $name}
++	timeout {fail "(timeout) $name"}
++    }
++}
++
++set name "set catch exec, never expected to trigger"
++send_gdb "catch exec\n"
++gdb_expect {
++  -re "Catchpoint \[0-9\]* .exec..*$gdb_prompt $"
++          {pass $name}
++  -re "Catch of exec not yet implemented.*$gdb_prompt $"
++	  {pass $name}
++  -re "$gdb_prompt $" {fail $name}
++  timeout {fail "(timeout) $name"}
++}
++
++# Verify that GDB responds gracefully when asked to set a breakpoint
++# on a nonexistent source line.
++#
++gdb_test_no_output "set breakpoint pending off"
++gdb_test "break 999" \
++    "No line 999 in the current file." \
++    "break on non-existent source line"
++
++# Run to the desired default location. If not positioned here, the
++# tests below don't work.
++#
++gdb_test "until $bp_location1" "main .* at .*:$bp_location1.*" "until bp_location1"
++
++
++# Verify that GDB allows one to just say "break", which is treated
++# as the "default" breakpoint.  Note that GDB gets cute when printing
++# the informational message about other breakpoints at the same
++# location.  We'll hit that bird with this stone too.
++#
++send_gdb "break\n"
++gdb_expect {
++  -re "Breakpoint \[0-9\]*.*$gdb_prompt $"\
++          {pass "break on default location, 1st time"}
++  -re "$gdb_prompt $"\
++          {fail "break on default location, 1st time"}
++  timeout {fail "(timeout) break on default location, 1st time"}
++}
++
++send_gdb "break\n"
++gdb_expect {
++  -re "Note: breakpoint \[0-9\]* also set at .*Breakpoint \[0-9\]*.*$gdb_prompt $"\
++          {pass "break on default location, 2nd time"}
++  -re "$gdb_prompt $"\
++          {fail "break on default location, 2nd time"}
++  timeout {fail "(timeout) break on default location, 2nd time"}
++}
++
++send_gdb "break\n"
++gdb_expect {
++  -re "Note: breakpoints \[0-9\]* and \[0-9\]* also set at .*Breakpoint \[0-9\]*.*$gdb_prompt $"\
++          {pass "break on default location, 3rd time"}
++  -re "$gdb_prompt $"\
++          {fail "break on default location, 3rd time"}
++  timeout {fail "(timeout) break on default location, 3rd time"}
++}
++
++send_gdb "break\n"
++gdb_expect {
++  -re "Note: breakpoints \[0-9\]*, \[0-9\]* and \[0-9\]* also set at .*Breakpoint \[0-9\]*.*$gdb_prompt $"\
++          {pass "break on default location, 4th time"}
++  -re "$gdb_prompt $"\
++          {fail "break on default location, 4th time"}
++  timeout {fail "(timeout) break on default location, 4th time"}
++}
++
++# Verify that a "silent" breakpoint can be set, and that GDB is indeed
++# "silent" about its triggering.
++#
++if ![runto_main] then { fail "break tests suppressed" }
++
++send_gdb "break $bp_location1\n"
++gdb_expect {
++  -re "Breakpoint (\[0-9\]*) at .*, line $bp_location1.*$gdb_prompt $"\
++          {pass "set to-be-silent break bp_location1"}
++  -re "$gdb_prompt $"\
++          {fail "set to-be-silent break bp_location1"}
++  timeout {fail "(timeout) set to-be-silent break bp_location1"}
++}
++
++send_gdb "commands $expect_out(1,string)\n"
++send_gdb "silent\n"
++send_gdb "end\n"
++gdb_expect {
++  -re ".*$gdb_prompt $"\
++          {pass "set silent break bp_location1"}
++  timeout {fail "(timeout) set silent break bp_location1"}
++}
++
++send_gdb "info break $expect_out(1,string)\n"
++gdb_expect {
++  -re "\[0-9\]*\[ \t\]*breakpoint.*:$bp_location1\r\n\[ \t\]*silent.*$gdb_prompt $"\
++          {pass "info silent break bp_location1"}
++  -re "$gdb_prompt $"\
++          {fail "info silent break bp_location1"}
++  timeout {fail "(timeout) info silent break bp_location1"}
++}
++send_gdb "continue\n"
++gdb_expect {
++  -re "Continuing.\r\n$gdb_prompt $"\
++          {pass "hit silent break bp_location1"}
++  -re "$gdb_prompt $"\
++          {fail "hit silent break bp_location1"}
++  timeout {fail "(timeout) hit silent break bp_location1"}
++}
++send_gdb "bt\n"
++gdb_expect {
++  -re "#0  main .* at .*:$bp_location1.*$gdb_prompt $"\
++          {pass "stopped for silent break bp_location1"}
++  -re "$gdb_prompt $"\
++          {fail "stopped for silent break bp_location1"}
++  timeout {fail "(timeout) stopped for silent break bp_location1"}
++}
++
++# Verify that GDB can at least parse a breakpoint with the
++# "thread" keyword.  (We won't attempt to test here that a
++# thread-specific breakpoint really triggers appropriately.
++# The gdb.threads subdirectory contains tests for that.)
++#
++set bp_location12 [gdb_get_line_number "set breakpoint 12 here"]
++send_gdb "break $bp_location12 thread 999\n"
++gdb_expect {
++  -re "Unknown thread 999.*$gdb_prompt $"\
++          {pass "thread-specific breakpoint on non-existent thread disallowed"}
++  -re "$gdb_prompt $"\
++          {fail "thread-specific breakpoint on non-existent thread disallowed"}
++  timeout {fail "(timeout) thread-specific breakpoint on non-existent thread disallowed"}
++}
++
++gdb_test "break $bp_location12 thread foo" \
++    "Invalid thread ID: foo" \
++    "thread-specific breakpoint on bogus thread ID disallowed"
++
++# Verify that GDB responds gracefully to a breakpoint command with
++# trailing garbage.
++#
++send_gdb "break $bp_location12 foo\n"
++gdb_expect {
++  -re "malformed linespec error: unexpected string, \"foo\"\r\n$gdb_prompt $"\
++          {pass "breakpoint with trailing garbage disallowed"}
++  -re "$gdb_prompt $"\
++          {fail "breakpoint with trailing garbage disallowed"}
++  timeout {fail "(timeout) breakpoint with trailing garbage disallowed"}
++}
++
++# Verify that GDB responds gracefully to a "clear" command that has
++# no matching breakpoint.  (First, get us off the current source line,
++# which we know has a breakpoint.)
++#
++send_gdb "next\n"
++gdb_expect {
++  -re ".*$gdb_prompt $"\
++          {pass "step over breakpoint"}
++  timeout {fail "(timeout) step over breakpoint"}
++}
++send_gdb "clear 81\n"
++gdb_expect {
++  -re "No breakpoint at 81..*$gdb_prompt $"\
++          {pass "clear line has no breakpoint disallowed"}
++  -re "$gdb_prompt $"\
++          {fail "clear line has no breakpoint disallowed"}
++  timeout {fail "(timeout) clear line has no breakpoint disallowed"}
++}
++send_gdb "clear\n"
++gdb_expect {
++  -re "No breakpoint at this line..*$gdb_prompt $"\
++          {pass "clear current line has no breakpoint disallowed"}
++  -re "$gdb_prompt $"\
++          {fail "clear current line has no breakpoint disallowed"}
++  timeout {fail "(timeout) clear current line has no breakpoint disallowed"}
++}
++
++# Verify that we can set and clear multiple breakpoints.
++#
++# We don't test that it deletes the correct breakpoints.  We do at
++# least test that it deletes more than one breakpoint.
++#
++gdb_test "break marker3" "Breakpoint.*at.*" "break marker3 #1"
++gdb_test "break marker3" "Breakpoint.*at.*" "break marker3 #2"
++gdb_test "clear marker3" {Deleted breakpoints [0-9]+ [0-9]+.*}
++
++# Verify that a breakpoint can be set via a convenience variable.
++#
++send_gdb "set \$foo=$bp_location11\n"
++gdb_expect {
++  -re "$gdb_prompt $"\
++          {pass "set convenience variable \$foo to bp_location11"}
++  timeout {fail "(timeout) set convenience variable \$foo to bp_location11"}
++}
++send_gdb "break \$foo\n"
++gdb_expect {
++  -re "Breakpoint (\[0-9\]*) at .*, line $bp_location11.*$gdb_prompt $"\
++          {pass "set breakpoint via convenience variable"}
++  -re "$gdb_prompt $"\
++          {fail "set breakpoint via convenience variable"}
++  timeout {fail "(timeout) set breakpoint via convenience variable"}
++}
++
++# Verify that GDB responds gracefully to an attempt to set a
++# breakpoint via a convenience variable whose type is not integer.
++#
++send_gdb "set \$foo=81.5\n"
++gdb_expect {
++  -re "$gdb_prompt $"\
++          {pass "set convenience variable \$foo to 81.5"}
++  timeout {fail "(timeout) set convenience variable \$foo to 81.5"}
++}
++send_gdb "break \$foo\n"
++gdb_expect {
++  -re "Convenience variables used in line specs must have integer values..*$gdb_prompt $"\
++          {pass "set breakpoint via non-integer convenience variable disallowed"}
++  -re "$gdb_prompt $"\
++          {fail "set breakpoint via non-integer convenience variable disallowed"}
++  timeout {fail "(timeout) set breakpoint via non-integer convenience variable disallowed"}
++}
++
++# Verify that we can set and trigger a breakpoint in a user-called function.
++#
++send_gdb "break marker2\n"
++gdb_expect {
++    -re "Breakpoint (\[0-9\]*) at .*, line ($bp_location8|$bp_location9).*$gdb_prompt $"\
++          {pass "set breakpoint on to-be-called function"}
++  -re "$gdb_prompt $"\
++          {fail "set breakpoint on to-be-called function"}
++  timeout {fail "(timeout) set breakpoint on to-be-called function"}
++}
++send_gdb "print marker2(99)\n"
++gdb_expect {
++  -re "The program being debugged stopped while in a function called from GDB.\r\nEvaluation of the expression containing the function\r\n.marker2$proto. will be abandoned.\r\nWhen the function is done executing, GDB will silently stop.\r\n$gdb_prompt $"\
++          {pass "hit breakpoint on called function"}
++  -re "$gdb_prompt $"\
++          {fail "hit breakpoint on called function"}
++  timeout {fail "(timeout) hit breakpoint on called function"}
++}
++
++# As long as we're stopped (breakpointed) in a called function,
++# verify that we can successfully backtrace & such from here.
++#
++# In this and the following test, the _sr4export check apparently is needed
++# for hppa*-*-hpux.
++#
++send_gdb "bt\n"
++gdb_expect {
++    -re "#0\[ \t\]*($hex in )?marker2.*:($bp_location8|$bp_location9)\r\n#1.*_sr4export.*$gdb_prompt $"\
++            {pass "backtrace while in called function"}
++    -re "#0\[ \t\]*($hex in )?marker2.*:($bp_location8|$bp_location9)\r\n#1.*function called from gdb.*$gdb_prompt $"\
++	    {pass "backtrace while in called function"}
++    -re "$gdb_prompt $"\
++            {fail "backtrace while in called function"}
++    timeout {fail "(timeout) backtrace while in called function"}
++}
++
++# Return from the called function.  For remote targets, it's important to do
++# this before runto_main, which otherwise may silently stop on the dummy
++# breakpoint inserted by GDB at the program's entry point.
++#
++send_gdb "finish\n"
++gdb_expect {
++    -re "Run till exit from .*marker2.* at .*($bp_location8|$bp_location9)\r\n.* in _sr4export.*$gdb_prompt $"\
++            {pass "finish from called function"}
++    -re "Run till exit from .*marker2.* at .*($bp_location8|$bp_location9)\r\n.*function called from gdb.*$gdb_prompt $"\
++            {pass "finish from called function"}
++    -re "Run till exit from .*marker2.* at .*($bp_location8|$bp_location9)\r\n.*Value returned.*$gdb_prompt $"\
++            {pass "finish from called function"}
++    -re "$gdb_prompt $"\
++            {fail "finish from called function"}
++    timeout {fail "(timeout) finish from called function"}
++}
++
++# Verify that GDB responds gracefully to a "finish" command with
++# arguments.
++#
++if ![runto_main] then { fail "break tests suppressed" }
++
++send_gdb "finish 123\n"
++gdb_expect {
++  -re "The \"finish\" command does not take any arguments.\r\n$gdb_prompt $"\
++          {pass "finish with arguments disallowed"}
++  -re "$gdb_prompt $"\
++          {fail "finish with arguments disallowed"}
++  timeout {fail "(timeout) finish with arguments disallowed"}
++}
++
++# Verify that GDB responds gracefully to a request to "finish" from
++# the outermost frame.  On a stub that never exits, this will just
++# run to the stubs routine, so we don't get this error...  Thus the 
++# second condition.
++#
++
++send_gdb "finish\n"
++gdb_expect {
++  -re "\"finish\" not meaningful in the outermost frame.\r\n$gdb_prompt $"\
++          {pass "finish from outermost frame disallowed"}
++  -re "Run till exit from.*\r\n$gdb_prompt $" {
++     pass "finish from outermost frame disallowed"
++  }
++  -re "$gdb_prompt $"\
++          {fail "finish from outermost frame disallowed"}
++  timeout {fail "(timeout) finish from outermost frame disallowed"}
++}
++
++# Verify that we can explicitly ask GDB to stop on all shared library
++# events, and that it does so.
++#
++if [istarget "hppa*-*-hpux*"] then {
++  if ![runto_main] then { fail "break tests suppressed" }
++
++  send_gdb "set stop-on-solib-events 1\n"
++  gdb_expect {
++    -re "$gdb_prompt $"\
++            {pass "set stop-on-solib-events"}
++    timeout {fail "(timeout) set stop-on-solib-events"}
++  }
++
++  send_gdb "run\n"
++  gdb_expect {
++    -re ".*Start it from the beginning.*y or n. $"\
++            {send_gdb "y\n"
++             gdb_expect {
++               -re ".*Stopped due to shared library event.*$gdb_prompt $"\
++                       {pass "triggered stop-on-solib-events"}
++               -re "$gdb_prompt $"\
++                       {fail "triggered stop-on-solib-events"}
++               timeout {fail "(timeout) triggered stop-on-solib-events"}
++             }
++            }
++    -re "$gdb_prompt $"\
++            {fail "rerun for stop-on-solib-events"}
++    timeout {fail "(timeout) rerun for stop-on-solib-events"}
++  }
++
++  send_gdb "set stop-on-solib-events 0\n"
++  gdb_expect {
++    -re "$gdb_prompt $"\
++            {pass "reset stop-on-solib-events"}
++    timeout {fail "(timeout) reset stop-on-solib-events"}
++  }
++}
++
++# Hardware breakpoints are unsupported on HP-UX.  Verify that GDB
++# gracefully responds to requests to create them.
++#
++if [istarget "hppa*-*-hpux*"] then {
++  if ![runto_main] then { fail "break tests suppressed" }
++
++  send_gdb "hbreak\n"
++  gdb_expect {
++    -re "No hardware breakpoint support in the target.*$gdb_prompt $"\
++            {pass "hw breaks disallowed"}
++    -re "$gdb_prompt $"\
++            {fail "hw breaks disallowed"}
++    timeout {fail "(timeout) hw breaks disallowed"}
++  }
++
++  send_gdb "thbreak\n"
++  gdb_expect {
++    -re "No hardware breakpoint support in the target.*$gdb_prompt $"\
++            {pass "temporary hw breaks disallowed"}
++    -re "$gdb_prompt $"\
++            {fail "temporary hw breaks disallowed"}
++    timeout {fail "(timeout) temporary hw breaks disallowed"}
++  }
++}
++
++#********
++
++
++#
++# Test "next" over recursive function call.
++#
++
++proc test_next_with_recursion {} { 
++    global gdb_prompt
++    global decimal
++    global binfile
++
++    if [target_info exists use_gdb_stub] {
++	# Reload the program.
++	delete_breakpoints
++	gdb_load ${binfile};
++    } else {
++	# FIXME: should be using runto
++	gdb_test "kill" "" "kill program" "Kill the program being debugged.*y or n. $" "y"
++
++	delete_breakpoints
++    }
++
++    gdb_test "break factorial" "Breakpoint $decimal at .*" "break at factorial"
++
++    # Run until we call factorial with 6
++
++    if [istarget "*-*-vxworks*"] then {
++	send_gdb "run vxmain \"6\"\n"
++    } else {
++	gdb_run_cmd
++    }
++    gdb_expect {
++	-re "Break.* factorial .value=6. .*$gdb_prompt $" {}
++	-re ".*$gdb_prompt $" {
++	    fail "run to factorial(6)";
++	    gdb_suppress_tests;
++	}
++	timeout { fail "run to factorial(6) (timeout)" ; gdb_suppress_tests }
++    }
++
++    # Continue until we call factorial recursively with 5.
++
++    if [gdb_test "continue" \
++	"Continuing.*Break.* factorial .value=5. .*" \
++	"continue to factorial(5)"] then { gdb_suppress_tests }
++
++    # Do a backtrace just to confirm how many levels deep we are.
++
++    if [gdb_test "backtrace" \
++	"#0\[ \t\]+ factorial .value=5..*" \
++	"backtrace from factorial(5)"] then { gdb_suppress_tests }
++
++    # Now a "next" should position us at the recursive call, which
++    # we will be performing with 4.
++
++    if [gdb_test "next" \
++	".* factorial .value - 1.;.*" \
++	"next to recursive call"] then { gdb_suppress_tests }
++
++    # Disable the breakpoint at the entry to factorial by deleting them all.
++    # The "next" should run until we return to the next line from this
++    # recursive call to factorial with 4.
++    # Buggy versions of gdb will stop instead at the innermost frame on
++    # the line where we are trying to "next" to.
++
++    delete_breakpoints
++
++    if [istarget "mips*tx39-*"] {
++	set timeout 60
++    }
++    # We used to set timeout here for all other targets as well.  This
++    # is almost certainly wrong.  The proper timeout depends on the
++    # target system in use, and how we communicate with it, so there
++    # is no single value appropriate for all targets.  The timeout
++    # should be established by the Dejagnu config file(s) for the
++    # board, and respected by the test suite.
++    #
++    # For example, if I'm running GDB over an SSH tunnel talking to a
++    # portmaster in California talking to an ancient 68k board running
++    # a crummy ROM monitor (a situation I can only wish were
++    # hypothetical), then I need a large timeout.  But that's not the
++    # kind of knowledge that belongs in this file.
++
++    gdb_test next "\[0-9\]*\[\t \]+return \\(value\\);.*" \
++	    "next over recursive call"
++
++    # OK, we should be back in the same stack frame we started from.
++    # Do a backtrace just to confirm.
++
++    set result [gdb_test "backtrace" \
++	    "#0\[ \t\]+ factorial .value=120.*\r\n#1\[ \t\]+ \[0-9a-fx\]+ in factorial .value=6..*" \
++	    "backtrace from factorial(5.1)"]
++    if { $result != 0 } { gdb_suppress_tests }
++
++    if [target_info exists gdb,noresults] { gdb_suppress_tests }
++  gdb_continue_to_end "recursive next test"
++   gdb_stop_suppressing_tests;
++}
++
++test_next_with_recursion
++
++
++#********
++
++# build a new file with optimization enabled so that we can try breakpoints
++# on targets with optimized prologues
++
++set binfileo2 [standard_output_file ${testfile}o2]
++
++if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}O0.o" object {debug "additional_flags=-w -O2 -fpie -pie"}] != "" } {
++     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
++}
++
++if  { [gdb_compile "${srcdir}/${subdir}/${srcfile1}" "${binfile}O1.o" object {debug "additional_flags=-w -O2 -fpie -pie"}] != "" } {
++     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
++}
++
++if  { [gdb_compile "${binfile}O0.o ${binfile}O1.o" "${binfileo2}" executable {debug "additional_flags=-w -fpie -pie"}] != "" } {
++     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
++}
++
++if [get_compiler_info ${binfileo2}] {
++    return -1
++}
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++gdb_load ${binfileo2}
++
++if [target_info exists gdb_stub] {
++    gdb_step_for_stub;
++}
++
++#
++# test break at function
++#
++gdb_test "break main" \
++    "Breakpoint.*at.* file .*$srcfile, line.*" \
++    "breakpoint function, optimized file"
++
++#
++# test break at function
++#
++gdb_test "break marker4" \
++    "Breakpoint.*at.* file .*$srcfile1, line.*" \
++    "breakpoint small function, optimized file"
++
++#
++# run until the breakpoint at main is hit. For non-stubs-using targets.
++#
++if ![target_info exists use_gdb_stub] {
++  if [istarget "*-*-vxworks*"] then {
++    send_gdb "run vxmain \"2\"\n"
++    set timeout 120
++    verbose "Timeout is now $timeout seconds" 2
++  } else {
++	send_gdb "run\n"
++  }
++  gdb_expect {
++    -re "The program .* has been started already.*y or n. $" {
++	send_gdb "y\n"
++	exp_continue
++    }
++    -re "Starting program.*Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$srcfile:$bp_location6.*$bp_location6\[\t \]+if .argc.* \{.*$gdb_prompt $"\
++	                    { pass "run until function breakpoint, optimized file" }
++    -re "Starting program.*Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$gdb_prompt $"\
++	                    { pass "run until function breakpoint, optimized file (code motion)" }
++    -re ".*$gdb_prompt $"       { fail "run until function breakpoint, optimized file" }
++    timeout	            { fail "run until function breakpoint, optimized file (timeout)" }
++  }
++} else {
++    if ![target_info exists gdb_stub] {
++	gdb_test continue ".*Continuing\\..*Breakpoint \[0-9\]+, main \\(argc=.*, argv=.*, envp=.*\\) at .*$srcfile:$bp_location6.*$bp_location6\[\t \]+if .argc.*\{.*" "stub continue, optimized file"
++    }
++}
++
++#
++# run until the breakpoint at a small function
++#
++
++#
++# Add a second pass pattern.  The behavior differs here between stabs
++# and dwarf for one-line functions.  Stabs preserves two line symbols
++# (one before the prologue and one after) with the same line number, 
++# but dwarf regards these as duplicates and discards one of them.
++# Therefore the address after the prologue (where the breakpoint is)
++# has no exactly matching line symbol, and GDB reports the breakpoint
++# as if it were in the middle of a line rather than at the beginning.
++
++set bp_location13 [gdb_get_line_number "set breakpoint 13 here" $srcfile1]
++set bp_location14 [gdb_get_line_number "set breakpoint 14 here" $srcfile1]
++send_gdb "continue\n"
++gdb_expect {
++    -re "Breakpoint $decimal, marker4 \\(d=177601976\\) at .*$srcfile1:$bp_location13\[\r\n\]+$bp_location13\[\t \]+void marker4.*" {
++	pass "run until breakpoint set at small function, optimized file"
++    }
++    -re "Breakpoint $decimal, $hex in marker4 \\(d=177601976\\) at .*$srcfile1:$bp_location13\[\r\n\]+$bp_location13\[\t \]+void marker4.*" {
++	pass "run until breakpoint set at small function, optimized file"
++    }
++    -re "Breakpoint $decimal, marker4 \\(d=177601976\\) at .*$srcfile1:$bp_location14\[\r\n\]+$bp_location14\[\t \]+void marker4.*" {
++        # marker4() is defined at line 46 when compiled with -DPROTOTYPES
++	pass "run until breakpoint set at small function, optimized file (line bp_location14)"
++    }
++    -re ".*$gdb_prompt " {
++	fail "run until breakpoint set at small function, optimized file"
++    }
++    timeout {
++	fail "run until breakpoint set at small function, optimized file (timeout)"
++    }
++}
++
++
++# Reset the default arguments for VxWorks
++if [istarget "*-*-vxworks*"] {
++    set timeout 10
++    verbose "Timeout is now $timeout seconds" 2
++    send_gdb "set args main\n"
++    gdb_expect -re ".*$gdb_prompt $" {}
++}
+diff --git a/gdb/testsuite/gdb.pie/break1.c b/gdb/testsuite/gdb.pie/break1.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.pie/break1.c
+@@ -0,0 +1,44 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 1992, 1993, 1994, 1995, 1999, 2002, 2003 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 2 of the License, 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; if not, write to the Free Software
++   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++   Please email any bugs, comments, and/or additions to this file to:
++   bug-gdb@prep.ai.mit.edu  */
++
++/* The code for this file was extracted from the gdb testsuite
++   testcase "break.c". */
++
++/* The following functions do nothing useful.  They are included
++   simply as places to try setting breakpoints at.  They are
++   explicitly "one-line functions" to verify that this case works
++   (some versions of gcc have or have had problems with this).
++  
++   These functions are in a separate source file to prevent an
++   optimizing compiler from inlining them and optimizing them away. */
++
++#ifdef PROTOTYPES
++int marker1 (void) { return (0); }	/* set breakpoint 15 here */
++int marker2 (int a) { return (1); }	/* set breakpoint 8 here */
++void marker3 (char *a, char *b) {}	/* set breakpoint 17 here */
++void marker4 (long d) {}		/* set breakpoint 14 here */
++#else
++int marker1 () { return (0); }		/* set breakpoint 16 here */
++int marker2 (a) int a; { return (1); }	/* set breakpoint 9 here */
++void marker3 (a, b) char *a, *b; {}	/* set breakpoint 18 here */
++void marker4 (d) long d; {}		/* set breakpoint 13 here */
++#endif
+diff --git a/gdb/testsuite/gdb.pie/corefile.exp b/gdb/testsuite/gdb.pie/corefile.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.pie/corefile.exp
+@@ -0,0 +1,233 @@
++# Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
++# 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
++
++# This file was written by Fred Fish. (fnf@cygnus.com)
++
++# are we on a target board
++if ![isnative] then {
++    return
++}
++
++set testfile "coremaker"
++set srcfile ${testfile}.c
++set binfile [standard_output_file ${testfile}]
++if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug "additional_flags=-fpie -pie"}] != "" } {
++     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
++}
++
++# Create and source the file that provides information about the compiler
++# used to compile the test case.
++if [get_compiler_info ${binfile}] {
++    return -1;
++}
++
++# Create a core file named "corefile" rather than just "core", to
++# avoid problems with sys admin types that like to regularly prune all
++# files named "core" from the system.
++#
++# Arbitrarily try setting the core size limit to "unlimited" since
++# this does not hurt on systems where the command does not work and
++# allows us to generate a core on systems where it does.
++#
++# Some systems append "core" to the name of the program; others append
++# the name of the program to "core"; still others (like Linux, as of
++# May 2003) create cores named "core.PID".  In the latter case, we
++# could have many core files lying around, and it may be difficult to
++# tell which one is ours, so let's run the program in a subdirectory.
++set found 0
++set coredir [standard_output_file coredir.[getpid]]
++file mkdir $coredir
++catch "system \"(cd ${coredir}; ulimit -c unlimited; ${binfile}; true) >/dev/null 2>&1\""
++#      remote_exec host "${binfile}"
++foreach i "${coredir}/core ${coredir}/core.coremaker.c ${binfile}.core" {
++    if [remote_file build exists $i] {
++	remote_exec build "mv $i [standard_output_file corefile]"
++	set found 1
++    }
++}
++# Check for "core.PID".
++if { $found == 0 } {
++    set names [glob -nocomplain -directory $coredir core.*]
++    if {[llength $names] == 1} {
++        set corefile [file join $coredir [lindex $names 0]]
++        remote_exec build "mv $corefile [standard_output_file corefile]"
++        set found 1
++    }
++}
++if { $found == 0 } {
++    # The braindamaged HPUX shell quits after the ulimit -c above
++    # without executing ${binfile}.  So we try again without the
++    # ulimit here if we didn't find a core file above.
++    # Oh, I should mention that any "braindamaged" non-Unix system has
++    # the same problem. I like the cd bit too, it's really neat'n stuff.
++    catch "system \"(cd [file dirname [standard_output_file ${binfile}]]; ${binfile}; true) >/dev/null 2>&1\""
++    foreach i "[standard_output_file core] [standard_output_file core.coremaker.c] ${binfile}.core" {
++	if [remote_file build exists $i] {
++	    remote_exec build "mv $i [standard_output_file corefile]"
++	    set found 1
++	}
++    }
++}
++
++# Try to clean up after ourselves. 
++remote_file build delete [file join $coredir coremmap.data]
++remote_exec build "rmdir $coredir"
++    
++if { $found == 0  } {
++    warning "can't generate a core file - core tests suppressed - check ulimit -c"
++    return 0
++}
++
++#
++# Test that we can simply startup with a "-core=corefile" command line arg
++# and recognize that the core file is a valid, usable core file.
++# To do this, we must shutdown the currently running gdb and restart
++# with the -core args.  We can't use gdb_start because it looks for
++# the first gdb prompt, and the message we are looking for occurs
++# before the first prompt.  Also, we can't include GDBFLAGS because
++# if it is empty, this confuses gdb with an empty argument that it
++# grumbles about (said grumbling currently being ignored in gdb_start).
++# **FIXME**
++#
++# Another problem is that on some systems (solaris for example), there
++# is apparently a limit on the length of a fully specified path to 
++# the coremaker executable, at about 80 chars.  For this case, consider
++# it a pass, but note that the program name is bad.
++
++gdb_exit
++if $verbose>1 then {
++    send_user "Spawning $GDB -nw $GDBFLAGS -core=[standard_output_file corefile]\n"
++}
++
++set oldtimeout $timeout
++set timeout [expr "$timeout + 60"]
++verbose "Timeout is now $timeout seconds" 2
++eval "spawn $GDB -nw $GDBFLAGS -core=[standard_output_file corefile]"
++expect {
++    -re "Couldn't find .* registers in core file.*$gdb_prompt $" {
++        fail "args: -core=corefile (couldn't find regs)"
++    }
++    -re "Core was generated by .*coremaker.*\r\n\#0  .*\(\).*\r\n$gdb_prompt $" {
++	pass "args: -core=corefile"
++    }
++    -re "Core was generated by .*\r\n\#0  .*\(\).*\r\n$gdb_prompt $" {
++	pass "args: -core=corefile (with bad program name)"
++    }
++    -re ".*registers from core file: File in wrong format.* $" {
++	fail "args: -core=corefile (could not read registers from core file)"
++    }
++    -re ".*$gdb_prompt $"	{ fail "args: -core=corefile" }
++    timeout 		{ fail "(timeout) starting with -core" }
++}
++
++
++#
++# Test that startup with both an executable file and -core argument.
++# See previous comments above, they are still applicable.
++#
++
++close;
++
++if $verbose>1 then {
++    send_user "Spawning $GDB -nw $GDBFLAGS $binfile -core=[standard_output_file corefile]\n"
++}
++
++
++eval "spawn $GDB -nw $GDBFLAGS $binfile -core=[standard_output_file corefile]";
++expect {
++    -re "Core was generated by .*coremaker.*\r\n\#0  .*\(\).*\r\n$gdb_prompt $" {
++	pass "args: execfile -core=corefile"
++    }
++    -re "Core was generated by .*\r\n\#0  .*\(\).*\r\n$gdb_prompt $"	 {
++	pass "args: execfile -core=corefile (with bad program name)"
++    }
++    -re ".*registers from core file: File in wrong format.* $" {
++	fail "args: execfile -core=corefile (could not read registers from core file)"
++    }
++    -re ".*$gdb_prompt $"	{ fail "args: execfile -core=corefile" }
++    timeout 		{ fail "(timeout) starting with -core" }
++}
++set timeout $oldtimeout
++verbose "Timeout is now $timeout seconds" 2
++
++close;
++
++# Now restart normally.
++
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++gdb_load ${binfile}
++
++# Test basic corefile recognition via core-file command.
++
++send_gdb "core-file [standard_output_file corefile]\n"
++gdb_expect {
++    -re ".* program is being debugged already.*y or n. $" {
++	# gdb_load may connect us to a gdbserver.
++	send_gdb "y\n"
++	exp_continue;
++    }
++    -re "Core was generated by .*coremaker.*\r\n\#0  .*\(\).*\r\n$gdb_prompt $" {
++	pass "core-file command"
++    }
++    -re "Core was generated by .*\r\n\#0  .*\(\).*\r\n$gdb_prompt $" {
++	pass "core-file command (with bad program name)"
++    }
++    -re ".*registers from core file: File in wrong format.* $" {
++	fail "core-file command (could not read registers from core file)"
++    }
++    -re ".*$gdb_prompt $"	{ fail "core-file command" }
++    timeout 		{ fail "(timeout) core-file command" }
++}
++
++# Test correct mapping of corefile sections by printing some variables.
++
++gdb_test "print coremaker_data" "\\\$$decimal = 202"
++gdb_test "print coremaker_bss" "\\\$$decimal = 10"
++gdb_test "print coremaker_ro" "\\\$$decimal = 201"
++
++gdb_test "print func2::coremaker_local" "\\\$$decimal = \\{0, 1, 2, 3, 4\\}"
++
++# Somehow we better test the ability to read the registers out of the core
++# file correctly.  I don't think the other tests do this.
++
++gdb_test "bt" "abort.*func2.*func1.*main.*" "backtrace in corefile.exp"
++gdb_test "up" "#\[0-9\]* *\[0-9xa-fH'\]* in .* \\(.*\\).*" "up in corefile.exp"
++
++# Test ability to read mmap'd data
++
++gdb_test "x/8bd buf1" ".*:.*0.*1.*2.*3.*4.*5.*6.*7" "accessing original mmap data in core file"
++setup_xfail "*-*-sunos*" "*-*-ultrix*" "*-*-aix*"
++set test "accessing mmapped data in core file"
++gdb_test_multiple "x/8bd buf2" "$test" {
++    -re ".*:.*0.*1.*2.*3.*4.*5.*6.*7.*$gdb_prompt $" {
++	pass "$test"
++    }
++    -re "0x\[f\]*:.*Cannot access memory at address 0x\[f\]*.*$gdb_prompt $" {
++	fail "$test (mapping failed at runtime)"
++    }
++    -re "0x.*:.*Cannot access memory at address 0x.*$gdb_prompt $" {
++	fail "$test (mapping address not found in core file)"
++    }
++}
++
++# test reinit_frame_cache
++
++gdb_load ${binfile}
++gdb_test "up" "#\[0-9\]* *\[0-9xa-fH'\]* in .* \\(.*\\).*" "up in corefile.exp (reinit)"
++
++gdb_test "core" "No core file now."
+diff --git a/gdb/testsuite/gdb.pie/coremaker.c b/gdb/testsuite/gdb.pie/coremaker.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.pie/coremaker.c
+@@ -0,0 +1,142 @@
++/* Copyright 1992, 1993, 1994, 1995, 1996, 1999
++   Free Software Foundation, Inc.
++
++   This file is part of GDB.
++
++   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 2 of the License, 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; if not, write to the Free Software
++   Foundation, Inc., 59 Temple Place - Suite 330,
++   Boston, MA 02111-1307, USA.  */
++
++/* Simple little program that just generates a core dump from inside some
++   nested function calls. */
++
++#include <stdio.h>
++#include <sys/types.h>
++#include <fcntl.h>
++#include <sys/mman.h>
++#include <signal.h>
++#include <stdlib.h>
++#include <unistd.h>
++
++#ifndef __STDC__
++#define	const	/**/
++#endif
++
++#define MAPSIZE (8 * 1024)
++
++/* Don't make these automatic vars or we will have to walk back up the
++   stack to access them. */
++
++char *buf1;
++char *buf2;
++
++int coremaker_data = 1;	/* In Data section */
++int coremaker_bss;	/* In BSS section */
++
++const int coremaker_ro = 201;	/* In Read-Only Data section */
++
++/* Note that if the mapping fails for any reason, we set buf2
++   to -1 and the testsuite notices this and reports it as
++   a failure due to a mapping error.  This way we don't have
++   to test for specific errors when running the core maker. */
++
++void
++mmapdata ()
++{
++  int j, fd;
++
++  /* Allocate and initialize a buffer that will be used to write
++     the file that is later mapped in. */
++
++  buf1 = (char *) malloc (MAPSIZE);
++  for (j = 0; j < MAPSIZE; ++j)
++    {
++      buf1[j] = j;
++    }
++
++  /* Write the file to map in */
++
++  fd = open ("coremmap.data", O_CREAT | O_RDWR, 0666);
++  if (fd == -1)
++    {
++      perror ("coremmap.data open failed");
++      buf2 = (char *) -1;
++      return;
++    }
++  write (fd, buf1, MAPSIZE);
++
++  /* Now map the file into our address space as buf2 */
++
++  buf2 = (char *) mmap (0, MAPSIZE, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
++  if (buf2 == (char *) -1)
++    {
++      perror ("mmap failed");
++      return;
++    }
++
++  /* Verify that the original data and the mapped data are identical.
++     If not, we'd rather fail now than when trying to access the mapped
++     data from the core file. */
++
++  for (j = 0; j < MAPSIZE; ++j)
++    {
++      if (buf1[j] != buf2[j])
++	{
++	  fprintf (stderr, "mapped data is incorrect");
++	  buf2 = (char *) -1;
++	  return;
++	}
++    }
++}
++
++void
++func2 ()
++{
++  int coremaker_local[5];
++  int i;
++
++#ifdef SA_FULLDUMP
++  /* Force a corefile that includes the data section for AIX.  */
++  {
++    struct sigaction sa;
++
++    sigaction (SIGABRT, (struct sigaction *)0, &sa);
++    sa.sa_flags |= SA_FULLDUMP;
++    sigaction (SIGABRT, &sa, (struct sigaction *)0);
++  }
++#endif
++
++  /* Make sure that coremaker_local doesn't get optimized away. */
++  for (i = 0; i < 5; i++)
++    coremaker_local[i] = i;
++  coremaker_bss = 0;
++  for (i = 0; i < 5; i++)
++    coremaker_bss += coremaker_local[i];
++  coremaker_data = coremaker_ro + 1;
++  abort ();
++}
++
++void
++func1 ()
++{
++  func2 ();
++}
++
++int main ()
++{
++  mmapdata ();
++  func1 ();
++  return 0;
++}
++
diff --git a/SOURCES/gdb-6.3-test-self-20050110.patch b/SOURCES/gdb-6.3-test-self-20050110.patch
new file mode 100644
index 0000000..5662a0e
--- /dev/null
+++ b/SOURCES/gdb-6.3-test-self-20050110.patch
@@ -0,0 +1,42 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Elena Zannoni <ezannoni@redhat.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.3-test-self-20050110.patch
+
+;; Get selftest working with sep-debug-info
+;;=fedoratest
+
+2004-02-23  Elena Zannoni  <ezannoni@redhat.com>
+
+        * gdb.gdb/selftest.exp: Make sure that the debug directory is
+        set up properly.
+        * gdb.gdb/complaints.exp: Ditto.
+        * gdb.gdb/xfullpath.exp: Ditto.
+        * gdb.gdb/observer.exp: Ditto.
+
+diff --git a/gdb/testsuite/lib/selftest-support.exp b/gdb/testsuite/lib/selftest-support.exp
+--- a/gdb/testsuite/lib/selftest-support.exp
++++ b/gdb/testsuite/lib/selftest-support.exp
+@@ -151,18 +151,18 @@ proc do_self_tests {function body} {
+     }
+ 
+     # Remove any old copy lying around.
+-    remote_file host delete $xgdb
++    #remote_file host delete $xgdb
+ 
+     gdb_start
+-    set file [remote_download host $GDB_FULLPATH $xgdb]
++    #set file [remote_download host $GDB_FULLPATH $xgdb]
+ 
+-    set result [selftest_setup $file $function]
++    set result [selftest_setup $GDB_FULLPATH $function]
+     if {$result == 0} then {
+ 	set result [uplevel $body]
+     }
+ 
+     gdb_exit
+-    catch "remote_file host delete $file"
++    #catch "remote_file host delete $file"
+ 
+     if {$result < 0} then {
+ 	warning "Couldn't test self"
diff --git a/SOURCES/gdb-6.3-threaded-watchpoints2-20050225.patch b/SOURCES/gdb-6.3-threaded-watchpoints2-20050225.patch
new file mode 100644
index 0000000..42b89bf
--- /dev/null
+++ b/SOURCES/gdb-6.3-threaded-watchpoints2-20050225.patch
@@ -0,0 +1,254 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Jeff Johnston <jjohnstn@redhat.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.3-threaded-watchpoints2-20050225.patch
+
+;; Test sibling threads to set threaded watchpoints for x86 and x86-64
+;;=fedoratest
+
+2005-02-28  Jeff Johnston  <jjohnstn@redhat.com>
+
+	* config/i386/nm-linux.h: Change dr register routines to
+	accept a ptid_t first argument.  Change all calling macros
+	to default the inferior_ptid for the first argument.
+	(i386_linux_insert_watchpoint): New prototype.
+	(i386_linux_remove_watchpoint, i386_linux_insert_hw_breakpoint): Ditto.
+	(i386_linux_remove_hw_breakpoint): Ditto.
+	(target_insert_watchpoint, target_remove_watchpoint): Undef and
+	override.
+	(target_insert_hw_breakpoint, target_remove_hw_breakpoint): Ditto.
+	* config/i386/nm-linux64.h: Ditto except add amd64 versions of
+	the watchpoint/hw-breakpoint insert/remove routines.
+	* i386-nat.c: Include "inferior.h" to define inferior_ptid.
+	* i386-linux-nat.c: Change all dr get/set routines to accept
+	ptid_t as first argument and to use this argument to determine
+	the tid for PTRACE.
+	(i386_linux_set_debug_regs_for_thread): New function.
+	(i386_linux_sync_debug_registers_callback): Ditto.
+	(i386_linux_sync_debug_registers_across_threads): Ditto.
+	(i386_linux_insert_watchpoint, i386_linux_remove_watchpoint): Ditto.
+	(i386_linux_hw_breakpoint, i386_linux_remove_hw_breakpoint): Ditto.
+	(i386_linux_new_thread): Ditto.
+	(_initialize_i386_linux_nat): Ditto.
+	* amd64-linux-nat.c: Change all dr get/set routines to accept
+	ptid_t as first argument and to use this argument to determine
+	the tid for PTRACE.
+	(amd64_linux_set_debug_regs_for_thread): New function.
+	(amd64_linux_sync_debug_registers_callback): Ditto.
+	(amd64_linux_sync_debug_registers_across_threads): Ditto.
+	(amd64_linux_insert_watchpoint, amd64_linux_remove_watchpoint): Ditto.
+	(amd64_linux_hw_breakpoint, amd64_linux_remove_hw_breakpoint): Ditto.
+	(amd64_linux_new_thread): Ditto.
+	(_initialize_amd64_linux_nat): Register linux new thread observer.
+	* testsuite/gdb.threads/watchthreads-threaded.c: New test case.
+	* testsuite/gdb.threads/watchthreads-threaded.exp: Ditto.
+
+[ With recent upstream GDB (6.8) reduced only to the testcase.  ]
+
+[ It was called watchthreads2.{exp,c} before but it conflicted with FSF GDB new
+  testcase of the same name.  ]
+
+FIXME: The testcase does not expects multiple watchpoints hits per one stop.
+
+diff --git a/gdb/testsuite/gdb.threads/watchthreads-threaded.c b/gdb/testsuite/gdb.threads/watchthreads-threaded.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.threads/watchthreads-threaded.c
+@@ -0,0 +1,66 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2002, 2003, 2004, 2005 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 2 of the License, 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; if not, write to the Free Software
++   Foundation, Inc., 59 Temple Place - Suite 330,
++   Boston, MA 02111-1307, USA.  
++ 
++   This file is copied from schedlock.c.  */
++
++#include <stdio.h>
++#include <unistd.h>
++#include <stdlib.h>
++#include <pthread.h>
++
++void *thread_function(void *arg); /* Pointer to function executed by each thread */
++
++#define NUM 5
++
++unsigned int args[NUM+1];
++
++int main() {
++    int res;
++    pthread_t threads[NUM];
++    void *thread_result;
++    long i;
++
++    for (i = 0; i < NUM; i++)
++      {
++	args[i] = 1; /* Init value.  */
++	res = pthread_create(&threads[i],
++		             NULL,
++			     thread_function,
++			     (void *) i);
++      }
++
++    args[i] = 1;
++    thread_function ((void *) i);
++
++    exit(EXIT_SUCCESS);
++}
++
++void *thread_function(void *arg) {
++    int my_number =  (long) arg;
++    int *myp = (int *) &args[my_number];
++
++    /* Don't run forever.  Run just short of it :)  */
++    while (*myp > 0)
++      {
++	(*myp) ++; usleep (1); /* Loop increment.  */
++      }
++
++    pthread_exit(NULL);
++}
++
+diff --git a/gdb/testsuite/gdb.threads/watchthreads-threaded.exp b/gdb/testsuite/gdb.threads/watchthreads-threaded.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.threads/watchthreads-threaded.exp
+@@ -0,0 +1,126 @@
++# This testcase is part of GDB, the GNU debugger.
++
++# Copyright 2005 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
++
++# Check that GDB can support multiple watchpoints across threads.
++
++# This test verifies that a watchpoint is detected in the proper thread
++# so the test is only meaningful on a system with hardware watchpoints.
++if [target_info exists gdb,no_hardware_watchpoints] {
++    return 0;
++}
++
++set testfile "watchthreads-threaded"
++set srcfile ${testfile}.c
++set binfile [standard_output_file ${testfile}]
++if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "incdir=${objdir}"]] != "" } {
++    return -1
++}
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++gdb_load ${binfile}
++
++gdb_test "set can-use-hw-watchpoints 1" "" ""
++
++#
++# Run to `main' where we begin our tests.
++#
++
++if ![runto_main] then {
++    gdb_suppress_tests
++}
++
++set args_2 0
++set args_3 0
++
++gdb_breakpoint "thread_function"
++gdb_continue_to_breakpoint "thread_function"
++gdb_test "disable 2" ""
++
++gdb_test_multiple "p args\[2\]" "get initial args2" {
++  -re "\\\$\[0-9\]* = (.*)$gdb_prompt $" {
++    set init_args_2 $expect_out(1,string)
++    pass "get initial args2"
++  }
++}
++
++gdb_test_multiple "p args\[3\]" "get initial args3" {
++  -re "\\\$\[0-9\]* = (.*)$gdb_prompt $" {
++    set init_args_3 $expect_out(1,string)
++    pass "get initial args3"
++  }
++}
++
++set args_2 $init_args_2
++set args_3 $init_args_3
++
++# Watch values that will be modified by distinct threads.
++gdb_test "watch args\[2\]" "Hardware watchpoint 3: args\\\[2\\\]"
++gdb_test "watch args\[3\]" "Hardware watchpoint 4: args\\\[3\\\]"
++
++set init_line [expr [gdb_get_line_number "Init value"]+1]
++set inc_line [gdb_get_line_number "Loop increment"]
++
++# Loop and continue to allow both watchpoints to be triggered.
++for {set i 0} {$i < 30} {incr i} {
++  set test_flag 0
++  gdb_test_multiple "continue" "threaded watch loop" {
++    -re "Hardware watchpoint 3: args\\\[2\\\].*Old value = 0.*New value = 1.*main \\\(\\\) at .*watchthreads-threaded.c:$init_line.*$gdb_prompt $"
++       { set args_2 1; set test_flag 1 }
++    -re "Hardware watchpoint 4: args\\\[3\\\].*Old value = 0.*New value = 1.*main \\\(\\\) at .*watchthreads-threaded.c:$init_line.*$gdb_prompt $"
++       { set args_3 1; set test_flag 1 }
++    -re "Hardware watchpoint 3: args\\\[2\\\].*Old value = $args_2.*New value = [expr $args_2+1].*in thread_function \\\(arg=0x2\\\) at .*watchthreads-threaded.c:$inc_line.*$gdb_prompt $"
++       { set args_2 [expr $args_2+1]; set test_flag 1 }
++    -re "Hardware watchpoint 4: args\\\[3\\\].*Old value = $args_3.*New value = [expr $args_3+1].*in thread_function \\\(arg=0x3\\\) at .*watchthreads-threaded.c:$inc_line.*$gdb_prompt $"
++       { set args_3 [expr $args_3+1]; set test_flag 1 }
++  }
++  # If we fail above, don't bother continuing loop
++  if { $test_flag == 0 } {
++    set i 30;
++  }
++}
++
++# Print success message if loop succeeded.
++if { $test_flag == 1 } {
++  pass "threaded watch loop"
++}
++
++# Verify that we hit first watchpoint in child thread.
++set message "watchpoint on args\[2\] hit in thread"
++if { $args_2 > 1 } {
++  pass $message 
++} else {
++  fail $message
++}
++
++# Verify that we hit second watchpoint in child thread.
++set message "watchpoint on args\[3\] hit in thread"
++if { $args_3 > 1 } {
++  pass $message 
++} else {
++  fail $message 
++}
++
++# Verify that all watchpoint hits are accounted for.
++set message "combination of threaded watchpoints = 30 + initial values"
++if { [expr $args_2+$args_3] == [expr [expr 30+$init_args_2]+$init_args_3] } {
++  pass $message 
++} else {
++  fail $message 
++}
diff --git a/SOURCES/gdb-6.5-BEA-testsuite.patch b/SOURCES/gdb-6.5-BEA-testsuite.patch
new file mode 100644
index 0000000..84e1c9f
--- /dev/null
+++ b/SOURCES/gdb-6.5-BEA-testsuite.patch
@@ -0,0 +1,938 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.5-BEA-testsuite.patch
+
+;; Improved testsuite results by the testsuite provided by the courtesy of BEA.
+;;=fedoratest: For upstream it should be rewritten as a dejagnu test, the test of no "??" was useful.
+
+diff --git a/gdb/testsuite/gdb.threads/threadcrash.c b/gdb/testsuite/gdb.threads/threadcrash.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.threads/threadcrash.c
+@@ -0,0 +1,301 @@
++/*
++ * The point of this program is to crash in a multi-threaded app.
++ * There are seven threads, doing the following things:
++ * * Spinning
++ * * Spinning inside a signal handler
++ * * Spinning inside a signal handler executing on the altstack
++ * * In a syscall
++ * * In a syscall inside a signal handler
++ * * In a syscall inside a signal handler executing on the altstack
++ * * Finally, the main thread crashes in main, with no frills.
++ *
++ * These are the things threads in JRockit tend to be doing.  If gdb
++ * can handle those things, both in core files and during live
++ * debugging, that will help (at least) JRockit development.
++ *
++ * Let the program create a core file, then load the core file into
++ * gdb.  Inside gdb, you should be able to do something like this:
++ *
++ * (gdb) t a a bt
++ * 
++ * Thread 7 (process 4352):
++ * #0  0x001ba7dc in __nanosleep_nocancel () from /lib/tls/libc.so.6
++ * #1  0x001ba5ff in sleep () from /lib/tls/libc.so.6
++ * #2  0x080488a2 in makeSyscall (ignored=0x0) at threadcrash.c:118
++ * #3  0x006aadec in start_thread () from /lib/tls/libpthread.so.0
++ * #4  0x001ed19a in clone () from /lib/tls/libc.so.6
++ * 
++ * Thread 6 (process 4353):
++ * #0  0x001ba7dc in __nanosleep_nocancel () from /lib/tls/libc.so.6
++ * #1  0x001ba5ff in sleep () from /lib/tls/libc.so.6
++ * #2  0x0804898f in syscallingSighandler (signo=10, info=0xb6be76f0, context=0xb6be7770)
++ *     at threadcrash.c:168
++ * #3  <signal handler called>
++ * #4  0x006adf5e in pthread_kill () from /lib/tls/libpthread.so.0
++ * #5  0x08048a51 in makeSyscallFromSighandler (ignored=0x0) at threadcrash.c:204
++ * #6  0x006aadec in start_thread () from /lib/tls/libpthread.so.0
++ * #7  0x001ed19a in clone () from /lib/tls/libc.so.6
++ * 
++ * Thread 5 (process 4354):
++ * #0  0x001ba7dc in __nanosleep_nocancel () from /lib/tls/libc.so.6
++ * #1  0x001ba5ff in sleep () from /lib/tls/libc.so.6
++ * #2  0x08048936 in syscallingAltSighandler (signo=3, info=0x959cd70, context=0x959cdf0)
++ *     at threadcrash.c:144
++ * #3  <signal handler called>
++ * #4  0x006adf5e in pthread_kill () from /lib/tls/libpthread.so.0
++ * #5  0x080489e2 in makeSyscallFromAltSighandler (ignored=0x0) at threadcrash.c:190
++ * #6  0x006aadec in start_thread () from /lib/tls/libpthread.so.0
++ * #7  0x001ed19a in clone () from /lib/tls/libc.so.6
++ * 
++ * Thread 4 (process 4355):
++ * #0  spin (ignored=0x0) at threadcrash.c:242
++ * #1  0x006aadec in start_thread () from /lib/tls/libpthread.so.0
++ * #2  0x001ed19a in clone () from /lib/tls/libc.so.6
++ * 
++ * Thread 3 (process 4356):
++ * #0  spinningSighandler (signo=12, info=0xb4de46f0, context=0xb4de4770) at threadcrash.c:180
++ * #1  <signal handler called>
++ * #2  0x006adf5e in pthread_kill () from /lib/tls/libpthread.so.0
++ * #3  0x08048b2f in spinFromSighandler (ignored=0x0) at threadcrash.c:232
++ * #4  0x006aadec in start_thread () from /lib/tls/libpthread.so.0
++ * #5  0x001ed19a in clone () from /lib/tls/libc.so.6
++ * 
++ * Thread 2 (process 4357):
++ * #0  spinningAltSighandler (signo=14, info=0x959ee50, context=0x959eed0) at threadcrash.c:156
++ * #1  <signal handler called>
++ * #2  0x006adf5e in pthread_kill () from /lib/tls/libpthread.so.0
++ * #3  0x08048ac0 in spinFromAltSighandler (ignored=0x0) at threadcrash.c:218
++ * #4  0x006aadec in start_thread () from /lib/tls/libpthread.so.0
++ * #5  0x001ed19a in clone () from /lib/tls/libc.so.6
++ * 
++ * Thread 1 (process 4351):
++ * #0  0x08048cf3 in main (argc=1, argv=0xbfff9d74) at threadcrash.c:273
++ * (gdb)
++ */
++
++#include <pthread.h>
++#include <signal.h>
++#include <assert.h>
++#include <unistd.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++
++#define SIGSYSCALL_ALT SIGQUIT
++#define SIGSYSCALL SIGUSR1
++#define SIGSPIN_ALT SIGALRM
++#define SIGSPIN SIGUSR2
++
++typedef void (*sigaction_t)(int, siginfo_t *, void *);
++
++static void installHandler(int signo, sigaction_t handler, int onAltstack) {
++   struct sigaction action;
++   sigset_t sigset;
++   int result;
++   stack_t altstack;
++   stack_t oldaltstack;
++   
++   memset(&action, 0, sizeof(action));
++   memset(&altstack, 0, sizeof(altstack));
++   memset(&oldaltstack, 0, sizeof(oldaltstack));
++   
++   if (onAltstack) {
++      altstack.ss_sp = malloc(SIGSTKSZ);
++      assert(altstack.ss_sp != NULL);
++      altstack.ss_size = SIGSTKSZ;
++      altstack.ss_flags = 0;
++      result = sigaltstack(&altstack, &oldaltstack);
++      assert(result == 0);
++      assert(oldaltstack.ss_flags == SS_DISABLE);
++   }
++   
++   sigemptyset(&sigset);
++   
++   action.sa_handler = NULL;
++   action.sa_sigaction = handler;
++   action.sa_mask = sigset;
++   action.sa_flags = SA_SIGINFO;
++   if (onAltstack) {
++      action.sa_flags |= SA_ONSTACK;
++   }
++   
++   result = sigaction(signo, &action, NULL);
++   assert(result == 0);
++}
++
++static void installNormalHandler(int signo, sigaction_t handler) {
++   installHandler(signo, handler, 0);
++}
++
++static void installAlthandler(int signo, sigaction_t handler) {
++   installHandler(signo, handler, 1);
++}
++
++static void *makeSyscall(void *ignored) {
++   (void)ignored;
++
++   sleep(42);
++
++   fprintf(stderr, "%s: returning\n", __FUNCTION__);
++   return NULL;
++}
++
++/* Return true if we're currently executing on the altstack */
++static int onAltstack(void) {
++   stack_t stack;
++   int result;
++   
++   result = sigaltstack(NULL, &stack);
++   assert(result == 0);
++   
++   return stack.ss_flags & SS_ONSTACK;
++}
++
++static void syscallingAltSighandler(int signo, siginfo_t *info, void *context) {
++   (void)signo;
++   (void)info;
++   (void)context;
++   
++   if (!onAltstack()) {
++      printf("%s() not running on altstack!\n", __FUNCTION__);
++   }
++   
++   sleep(42);
++}
++
++static void spinningAltSighandler(int signo, siginfo_t *info, void *context) {
++   (void)signo;
++   (void)info;
++   (void)context;
++   
++   if (!onAltstack()) {
++      printf("%s() not running on altstack!\n", __FUNCTION__);
++   }
++   
++   while (1);
++}
++
++static void syscallingSighandler(int signo, siginfo_t *info, void *context) {
++   (void)signo;
++   (void)info;
++   (void)context;
++   
++   if (onAltstack()) {
++      printf("%s() running on altstack!\n", __FUNCTION__);
++   }
++   
++   sleep(42);
++}
++
++static void spinningSighandler(int signo, siginfo_t *info, void *context) {
++   (void)signo;
++   (void)info;
++   (void)context;
++   
++   if (onAltstack()) {
++      printf("%s() running on altstack!\n", __FUNCTION__);
++   }
++   
++   while (1);
++}
++
++static void *makeSyscallFromAltSighandler(void *ignored) {
++   (void)ignored;
++   
++   int result;
++   
++   installAlthandler(SIGSYSCALL_ALT, syscallingAltSighandler);
++   
++   result = pthread_kill(pthread_self(), SIGSYSCALL_ALT);
++   assert(result == 0);
++   
++   fprintf(stderr, "%s: returning\n", __FUNCTION__);
++   return NULL;
++}
++
++static void *makeSyscallFromSighandler(void *ignored) {
++   (void)ignored;
++   
++   int result;
++   
++   installNormalHandler(SIGSYSCALL, syscallingSighandler);
++   
++   result = pthread_kill(pthread_self(), SIGSYSCALL);
++   assert(result == 0);
++   
++   fprintf(stderr, "%s: returning\n", __FUNCTION__);
++   return NULL;
++}
++
++static void *spinFromAltSighandler(void *ignored) {
++   (void)ignored;
++   
++   int result;
++   
++   installAlthandler(SIGSPIN_ALT, spinningAltSighandler);
++   
++   result = pthread_kill(pthread_self(), SIGSPIN_ALT);
++   assert(result == 0);
++   
++   fprintf(stderr, "%s: returning\n", __FUNCTION__);
++   return NULL;
++}
++
++static void *spinFromSighandler(void *ignored) {
++   (void)ignored;
++   
++   int result;
++   
++   installNormalHandler(SIGSPIN, spinningSighandler);
++   
++   result = pthread_kill(pthread_self(), SIGSPIN);
++   assert(result == 0);
++   
++   fprintf(stderr, "%s: returning\n", __FUNCTION__);
++   return NULL;
++}
++
++static void *spin(void *ignored) {
++   (void)ignored;
++   
++   while (1);
++
++   fprintf(stderr, "%s: returning\n", __FUNCTION__);
++   return NULL;
++}
++
++int main(int argc, char *argv[]) {
++   int result;
++   pthread_t thread;
++   volatile int bad;
++   
++   result = pthread_create(&thread, NULL, makeSyscall, NULL);
++   assert(result == 0);
++   result = pthread_create(&thread, NULL, makeSyscallFromSighandler, NULL);
++   assert(result == 0);
++   result = pthread_create(&thread, NULL, makeSyscallFromAltSighandler, NULL);
++   assert(result == 0);
++   result = pthread_create(&thread, NULL, spin, NULL);
++   assert(result == 0);
++   result = pthread_create(&thread, NULL, spinFromSighandler, NULL);
++   assert(result == 0);
++   result = pthread_create(&thread, NULL, spinFromAltSighandler, NULL);
++   assert(result == 0);
++   
++   // Give threads some time to get going
++   sleep(3);
++   
++   // Crash
++   bad = *(int*)7;
++
++   /* Workaround: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29628
++      Simulate use to ensure `DW_AT_location' for them:
++      readelf -a --debug threadcrash|grep -A5 -w argc
++      --> DW_AT_location    : 2 byte block: 71 0     (DW_OP_breg1: 0)
++      This case verified on: gcc-4.1.1-30.i386
++      Keep it late to ensure persistency in the registers.  */
++   bad = (int) argc;
++   bad = (unsigned long) argv;
++   
++   return 0;
++}
+diff --git a/gdb/testsuite/gdb.threads/threadcrash.exp b/gdb/testsuite/gdb.threads/threadcrash.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.threads/threadcrash.exp
+@@ -0,0 +1,37 @@
++# threadcrash.exp - The point of this program is to crash in a multi-threaded app.
++
++
++set testfile threadcrash
++set srcfile ${testfile}.c
++set shellfile ${srcdir}/${subdir}/${testfile}.sh
++set binfile [standard_output_file ${testfile}]
++
++set GDB_abs ${GDB}
++if [regexp "^\[^/\]" ${GDB_abs}] {
++    set GDB_abs $env(PWD)/${GDB_abs}
++}
++
++if [istarget "*-*-linux"] then {
++    set target_cflags "-D_MIT_POSIX_THREADS"
++} else {
++    set target_cflags ""
++}
++
++if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
++    return -1
++}
++
++# ${shellfile} argument must not contain any directories.
++set fd [open "|bash ${shellfile} ${binfile} $GDB $INTERNAL_GDBFLAGS $GDBFLAGS [host_info gdb_opts]" r]
++while { [gets $fd line] >= 0 } {
++    if [regexp " PASS: (.*)$" $line trash message] {
++	pass $message
++    } elseif [regexp " FAIL: (.*)$" $line trash message] {
++	fail $message
++    }
++}
++catch {
++    close $fd
++}
++
++return 0
+diff --git a/gdb/testsuite/gdb.threads/threadcrash.sh b/gdb/testsuite/gdb.threads/threadcrash.sh
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.threads/threadcrash.sh
+@@ -0,0 +1,324 @@
++#! /bin/bash
++
++# NOTE: threadcrash.c *must* be built with debugging symbols
++#
++# The point of this shell script is to crash treadcrash.c, load the
++# resulting core file into gdb and verify that gdb can extract enough
++# information from the core file.
++#
++# The return code from this script is the number of failed tests.
++
++LOG=gdbresult.log
++
++if [ $# = 0 ] ; then
++    echo >&2 Syntax: $0 \<name of threadcrash binary\> [\<gdb binary\> \<args...\>]
++    exit 1
++fi
++RUNME="$1"
++shift
++GDB="${*:-gdb}"
++
++
++pf_prefix=""
++function pf_prefix() {
++	pf_prefix="$*"
++}
++
++set_test=""
++function set_test() {
++	if [ -n "$set_test" ] ; then
++		echo >&2 "DEJAGNU-BASH ERROR: set_test already set"
++		exit 1
++	fi
++	set_test="$*"
++	if [ -n "$pf_prefix" ] ; then
++		set_test="$pf_prefix: $set_test"
++	fi
++}
++
++# INTERNAL
++function record_test {
++	if [ -z "$set_test" ] ; then
++		echo >&2 "DEJAGNU-BASH ERROR: set_test not set"
++		exit 1
++	fi
++	# Provide the leading whitespace delimiter:
++	echo " $1: $set_test"
++	set_test=""
++}
++
++function pass() {
++	record_test PASS
++}
++function fail() {
++	record_test FAIL
++}
++
++
++# Verify that the gdb output doesn't contain $1.
++function mustNotHave() {
++    local BADWORD=$1
++    set_test gdb output contains "$BADWORD"
++    if grep -q "$BADWORD" $LOG ; then
++        fail
++        return 1
++    fi
++    pass
++    return 0
++}
++
++# Verify that the gdb output contains exactly $1 $2s.
++function mustHaveCorrectAmount() {
++    local WANTEDNUMBER=$1
++    local GOODWORD=$2
++    local ACTUALNUMBER=$(grep "$GOODWORD" $LOG | wc -l)
++    set_test gdb output contained $ACTUALNUMBER \""$GOODWORD"\", not $WANTEDNUMBER as expected
++    if [ $ACTUALNUMBER != $WANTEDNUMBER ] ; then
++        fail
++        return 1
++    fi
++    pass
++    return 0
++}
++
++# Verify that the gdb output contains seven threads
++function mustHaveSevenThreads() {
++    NTHREADS=$(egrep "^Thread [1-7] \(" $LOG | wc -l)
++    set_test gdb output contains $NTHREADS threads, not 7 as expected
++    if [ $NTHREADS != 7 ] ; then
++        fail
++        return 1
++    fi
++    pass
++    return 0
++}
++
++# Verify that the gdb output has all parameters on consecutive lines
++function mustHaveSequence() {
++    SEQUENCE="$*"
++    NPARTS=$#
++    grep "$1" -A$((NPARTS - 1)) $LOG > matches.log
++
++    while [ $# -gt 1 ] ; do
++        shift
++        ((NPARTS--))
++        grep "$1" -A$((NPARTS - 1)) matches.log > temp.log
++        mv temp.log matches.log
++    done
++    LASTPART=$1
++
++    set_test gdb output does not contain the sequence: $SEQUENCE
++    if ! grep -q "$LASTPART" matches.log ; then
++        fail
++        return 1
++    fi
++    pass
++    return 0
++}
++
++# Verify that $LOG contains all information we want
++function verifyLog() {
++    local FAILURES=0
++    
++    mustNotHave '??' || ((FAILURES++))
++    mustHaveCorrectAmount 11 threadcrash.c: || ((FAILURES++))
++    
++    mustHaveSevenThreads || ((FAILURES++))
++    mustHaveSequence sleep "makeSyscall (ignored=" || ((FAILURES++))
++    
++    mustHaveSequence sleep "syscallingSighandler (signo=" "signal handler called" 0x || ((FAILURES++))
++    mustHaveSequence pthread_kill "makeSyscallFromSighandler (ignored=" || ((FAILURES++))
++    
++    mustHaveSequence sleep "syscallingAltSighandler (signo=" "signal handler called" 0x || ((FAILURES++))
++    mustHaveSequence pthread_kill "makeSyscallFromAltSighandler (ignored=" || ((FAILURES++))
++    
++    mustHaveSequence Thread "spin (ignored=" || ((FAILURES++))
++    
++    mustHaveSequence "spinningSighandler (signo=" "signal handler called" 0x || ((FAILURES++))
++    mustHaveSequence pthread_kill "spinFromSighandler (ignored=" || ((FAILURES++))
++    
++    mustHaveSequence "spinningAltSighandler (signo=" "signal handler called" 0x || ((FAILURES++))
++    mustHaveSequence pthread_kill "spinFromAltSighandler (ignored=" || ((FAILURES++))
++    
++    mustHaveSequence Thread "main (argc=1, argv=" || ((FAILURES++))
++
++    return $FAILURES
++}
++
++# Put result of debugging a core file in $LOG
++function getLogFromCore() {
++    # Make sure we get a core file
++    set_test Make sure we get a core file
++    if ! ulimit -c unlimited ; then
++        fail
++        exit 1
++    fi
++    pass
++
++    # Run the crasher
++    ./$(basename "$RUNME")
++    EXITCODE=$?
++
++    # Verify that we actually crashed
++    set_test $RUNME should have been killed by a signal, got non-signal exit code $EXITCODE
++    if [ $EXITCODE -lt 128 ] ; then
++        fail
++        exit 1
++    fi
++    pass
++
++    # Verify that we got a core file
++    set_test $RUNME did not create a core file
++    if [ ! -r core* ] ; then
++        fail
++        exit 1
++    fi
++    pass
++
++    # Run gdb
++    cat > gdbscript.gdb <<EOF
++set width 0
++t a a bt 100
++quit
++EOF
++    cat gdbscript.gdb /dev/zero | $GDB -nx "./$(basename "$RUNME")" core* > $LOG
++    EXITCODE=$?
++
++    set_test gdb exited with error code
++    if [ $EXITCODE != 0 ] ; then
++        ((FAILURES++))
++        echo >&2 gdb exited with error code $EXITCODE
++	fail
++    fi
++    pass
++}
++
++# Put result of debugging a gcore file in $LOG
++function getLogFromGcore() {
++    # Create the core file
++    rm -f core*
++    cat > gdbscript.gdb <<EOF
++handle SIGQUIT pass noprint nostop
++handle SIGUSR1 pass noprint nostop
++handle SIGUSR2 pass noprint nostop
++handle SIGALRM pass noprint nostop
++run
++gcore
++quit
++EOF
++    cat gdbscript.gdb /dev/zero | $GDB -nx "./$(basename "$RUNME")" > /dev/null
++    EXITCODE=$?
++
++    set_test gdb exited with error code when creating gcore file
++    if [ $EXITCODE != 0 ] ; then
++        ((FAILURES++))
++        echo >&2 gdb exited with error code $EXITCODE when creating gcore file
++	fail
++    fi
++    pass
++    
++    # Verify that we got a core file from gcore
++    set_test gdb gcore did not create a core file
++    if [ ! -r core* ] ; then
++        fail
++        exit 1
++    fi
++    pass
++
++    # Run gdb on the gcore file
++    cat > gdbscript.gdb <<EOF
++set width 0
++t a a bt 100
++quit
++EOF
++    cat gdbscript.gdb /dev/zero | $GDB -nx "./$(basename "$RUNME")" core* > $LOG
++    EXITCODE=$?
++
++    set_test gdb exited with error code when examining gcore file
++    if [ $EXITCODE != 0 ] ; then
++        ((FAILURES++))
++        echo >&2 gdb exited with error code $EXITCODE when examining gcore file
++	fail
++    fi
++    pass
++}
++
++# Put result of debugging a core file in $LOG
++function getLogFromLiveProcess() {
++    # Run gdb
++    cat > gdbscript.gdb <<EOF
++handle SIGQUIT pass noprint nostop
++handle SIGUSR1 pass noprint nostop
++handle SIGUSR2 pass noprint nostop
++handle SIGALRM pass noprint nostop
++set width 0
++run
++t a a bt 100
++quit
++EOF
++    cat gdbscript.gdb /dev/zero | $GDB -nx "./$(basename "$RUNME")" > $LOG
++    EXITCODE=$?
++
++    set_test gdb exited with error code
++    if [ $EXITCODE != 0 ] ; then
++        ((FAILURES++))
++        echo >&2 gdb exited with error code $EXITCODE
++	fail
++    fi
++    pass
++}
++
++####### Main program follows #####################
++
++# Make sure we don't clobber anybody else's (core) file(s)
++WORKDIR=/tmp/$PPID
++mkdir -p $WORKDIR
++cp "$RUNME" $WORKDIR
++cd $WORKDIR
++
++# Count problems
++FAILURES=0
++
++echo === Testing gdb vs core file...
++pf_prefix core file
++getLogFromCore
++verifyLog
++((FAILURES+=$?))
++pf_prefix
++echo === Core file tests done.
++
++echo
++
++echo === Testing gdb vs gcore file...
++pf_prefix gcore file
++getLogFromGcore
++verifyLog
++((FAILURES+=$?))
++pf_prefix
++echo === Gcore file tests done.
++
++echo
++
++echo === Testing gdb vs live process...
++pf_prefix live process
++getLogFromLiveProcess
++verifyLog
++((FAILURES+=$?))
++pf_prefix
++echo === Live process tests done.
++
++# Executive summary
++echo
++if [ $FAILURES == 0 ] ; then
++    echo All tests passed!
++else
++    echo $FAILURES tests failed!
++    echo
++    echo Make sure the threadcrash binary contains debugging information \(build with \"gcc -g\"\).
++fi
++
++# Clean up
++cd /
++rm -rf $WORKDIR
++
++exit $FAILURES
+diff --git a/gdb/testsuite/gdb.threads/threadcrash.sh-orig b/gdb/testsuite/gdb.threads/threadcrash.sh-orig
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.threads/threadcrash.sh-orig
+@@ -0,0 +1,248 @@
++#! /bin/bash
++
++# NOTE: threadcrash.c *must* be built with debugging symbols
++#
++# The point of this shell script is to crash treadcrash.c, load the
++# resulting core file into gdb and verify that gdb can extract enough
++# information from the core file.
++#
++# The return code from this script is the number of failed tests.
++
++LOG=gdbresult.log
++
++if [ $# != 1 ] ; then
++    echo > /dev/stderr Syntax: $0 \<name of threadcrash binary\>
++    exit 1
++fi
++RUNME="$1"
++
++# Verify that the gdb output doesn't contain $1.
++function mustNotHave() {
++    local BADWORD=$1
++    if grep -q "$BADWORD" $LOG ; then
++        echo >> /dev/stderr WARNING: gdb output contains "$BADWORD"
++        return 1
++    fi
++    return 0
++}
++
++# Verify that the gdb output contains exactly $1 $2s.
++function mustHaveCorrectAmount() {
++    local WANTEDNUMBER=$1
++    local GOODWORD=$2
++    local ACTUALNUMBER=$(grep "$GOODWORD" $LOG | wc -l)
++    if [ $ACTUALNUMBER != $WANTEDNUMBER ] ; then
++        echo >> /dev/stderr WARNING: gdb output contained $ACTUALNUMBER \""$GOODWORD"\", not $WANTEDNUMBER as expected
++        return 1
++    fi
++    return 0
++}
++
++# Verify that the gdb output contains seven threads
++function mustHaveSevenThreads() {
++    NTHREADS=$(egrep "^Thread [1-7] \(" $LOG | wc -l)
++    if [ $NTHREADS != 7 ] ; then
++        echo >> /dev/stderr WARNING: gdb output contains $NTHREADS threads, not 7 as expected
++        return 1
++    fi
++    return 0
++}
++
++# Verify that the gdb output has all parameters on consecutive lines
++function mustHaveSequence() {
++    SEQUENCE="$*"
++    NPARTS=$#
++    grep "$1" -A$((NPARTS - 1)) $LOG > matches.log
++
++    while [ $# -gt 1 ] ; do
++        shift
++        ((NPARTS--))
++        grep "$1" -A$((NPARTS - 1)) matches.log > temp.log
++        mv temp.log matches.log
++    done
++    LASTPART=$1
++
++    if ! grep -q "$LASTPART" matches.log ; then
++        echo >> /dev/stderr WARNING: gdb output does not contain the sequence: $SEQUENCE
++        return 1
++    fi
++    return 0
++}
++
++# Verify that $LOG contains all information we want
++function verifyLog() {
++    local FAILURES=0
++    
++    mustNotHave '??' || ((FAILURES++))
++    mustHaveCorrectAmount 12 threadcrash.c: || ((FAILURES++))
++    
++    mustHaveSevenThreads || ((FAILURES++))
++    mustHaveSequence sleep "makeSyscall (ignored=" || ((FAILURES++))
++    
++    mustHaveSequence sleep "syscallingSighandler (signo=" "signal handler called" 0x || ((FAILURES++))
++    mustHaveSequence pthread_kill "makeSyscallFromSighandler (ignored=" || ((FAILURES++))
++    
++    mustHaveSequence sleep "syscallingAltSighandler (signo=" "signal handler called" 0x || ((FAILURES++))
++    mustHaveSequence pthread_kill "makeSyscallFromAltSighandler (ignored=" || ((FAILURES++))
++    
++    mustHaveSequence Thread "spin (ignored=" || ((FAILURES++))
++    
++    mustHaveSequence "spinningSighandler (signo=" "signal handler called" 0x || ((FAILURES++))
++    mustHaveSequence pthread_kill "spinFromSighandler (ignored=" || ((FAILURES++))
++    
++    mustHaveSequence "spinningAltSighandler (signo=" "signal handler called" 0x || ((FAILURES++))
++    mustHaveSequence pthread_kill "spinFromAltSighandler (ignored=" || ((FAILURES++))
++    
++    mustHaveSequence Thread "main (argc=1, argv=" || ((FAILURES++))
++
++    return $FAILURES
++}
++
++# Put result of debugging a core file in $LOG
++function getLogFromCore() {
++    # Make sure we get a core file
++    ulimit -c unlimited || exit 1
++
++    # Run the crasher
++    ./$(basename "$RUNME")
++    EXITCODE=$?
++
++    # Verify that we actually crashed
++    if [ $EXITCODE -lt 128 ] ; then
++        echo >> /dev/stderr ERROR: $RUNME should have been killed by a signal, got non-signal exit code $EXITCODE
++        exit 1
++    fi
++
++    # Verify that we got a core file
++    if [ ! -r core* ] ; then
++        echo >> /dev/stderr ERROR: $RUNME did not create a core file
++        exit 1
++    fi
++
++    # Run gdb
++    cat > gdbscript.gdb <<EOF
++set width 0
++t a a bt 100
++quit
++EOF
++    cat gdbscript.gdb /dev/zero | gdb -nx "./$(basename "$RUNME")" core* > $LOG
++    EXITCODE=$?
++
++    if [ $EXITCODE != 0 ] ; then
++        ((FAILURES++))
++        echo >> /dev/stderr WARNING: gdb exited with error code $EXITCODE
++    fi
++}
++
++# Put result of debugging a gcore file in $LOG
++function getLogFromGcore() {
++    # Create the core file
++    rm -f core*
++    cat > gdbscript.gdb <<EOF
++handle SIGQUIT pass noprint nostop
++handle SIGUSR1 pass noprint nostop
++handle SIGUSR2 pass noprint nostop
++handle SIGALRM pass noprint nostop
++run
++gcore
++quit
++EOF
++    cat gdbscript.gdb /dev/zero | gdb -nx "./$(basename "$RUNME")" > /dev/null
++    EXITCODE=$?
++
++    if [ $EXITCODE != 0 ] ; then
++        ((FAILURES++))
++        echo >> /dev/stderr WARNING: gdb exited with error code $EXITCODE when creating gcore file
++    fi
++    
++    # Verify that we got a core file from gcore
++    if [ ! -r core* ] ; then
++        echo >> /dev/stderr ERROR: gdb gcore did not create a core file
++        exit 1
++    fi
++
++    # Run gdb on the gcore file
++    cat > gdbscript.gdb <<EOF
++set width 0
++t a a bt 100
++quit
++EOF
++    cat gdbscript.gdb /dev/zero | gdb -nx "./$(basename "$RUNME")" core* > $LOG
++    EXITCODE=$?
++
++    if [ $EXITCODE != 0 ] ; then
++        ((FAILURES++))
++        echo >> /dev/stderr WARNING: gdb exited with error code $EXITCODE when examining gcore file
++    fi
++}
++
++# Put result of debugging a core file in $LOG
++function getLogFromLiveProcess() {
++    # Run gdb
++    cat > gdbscript.gdb <<EOF
++handle SIGQUIT pass noprint nostop
++handle SIGUSR1 pass noprint nostop
++handle SIGUSR2 pass noprint nostop
++handle SIGALRM pass noprint nostop
++set width 0
++run
++t a a bt 100
++quit
++EOF
++    cat gdbscript.gdb /dev/zero | gdb -nx "./$(basename "$RUNME")" > $LOG
++    EXITCODE=$?
++
++    if [ $EXITCODE != 0 ] ; then
++        ((FAILURES++))
++        echo >> /dev/stderr WARNING: gdb exited with error code $EXITCODE
++    fi
++}
++
++####### Main program follows #####################
++
++# Make sure we don't clobber anybody else's (core) file(s)
++WORKDIR=/tmp/$PPID
++mkdir -p $WORKDIR
++cp "$RUNME" $WORKDIR
++cd $WORKDIR
++
++# Count problems
++FAILURES=0
++
++echo === Testing gdb vs core file...
++getLogFromCore
++verifyLog
++((FAILURES+=$?))
++echo === Core file tests done.
++
++echo
++
++echo === Testing gdb vs gcore file...
++getLogFromGcore
++verifyLog
++((FAILURES+=$?))
++echo === Gcore file tests done.
++
++echo
++
++echo === Testing gdb vs live process...
++getLogFromLiveProcess
++verifyLog
++((FAILURES+=$?))
++echo === Live process tests done.
++
++# Executive summary
++echo
++if [ $FAILURES == 0 ] ; then
++    echo All tests passed!
++else
++    echo $FAILURES tests failed!
++    echo
++    echo Make sure the threadcrash binary contains debugging information \(build with \"gcc -g\"\).
++fi
++
++# Clean up
++cd /
++rm -rf $WORKDIR
++
++exit $FAILURES
diff --git a/SOURCES/gdb-6.5-bz109921-DW_AT_decl_file-test.patch b/SOURCES/gdb-6.5-bz109921-DW_AT_decl_file-test.patch
new file mode 100644
index 0000000..a27c8f3
--- /dev/null
+++ b/SOURCES/gdb-6.5-bz109921-DW_AT_decl_file-test.patch
@@ -0,0 +1,134 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Jan Kratochvil <jan.kratochvil@redhat.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.5-bz109921-DW_AT_decl_file-test.patch
+
+;; Find symbols properly at their original (included) file (BZ 109921).
+;;=fedoratest
+
+https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=109921
+
+It is duplicite to its upstream variant:
+http://sourceware.org/ml/gdb-cvs/2007-01/msg00157.html
+http://sourceware.org/ml/gdb-patches/2007-01/msg00434.html
+2007-01-21  Jan Kratochvil  <jan.kratochvil@redhat.com>
+	    Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* gdb.base/included.c, gdb.base/included.exp,
+	gdb.base/included.h: New files.
+
+------------------------------------------------------------------------------
+
+2007-01-09  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.dwarf2/dw2-included.exp, gdb.dwarf2/dw2-included.c,
+	gdb.dwarf2/dw2-included.h: New files.
+
+diff --git a/gdb/testsuite/gdb.dwarf2/dw2-included.c b/gdb/testsuite/gdb.dwarf2/dw2-included.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.dwarf2/dw2-included.c
+@@ -0,0 +1,26 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2006 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 2 of the License, 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; if not, write to the Free Software
++   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++   USA.  */
++
++#include "dw2-included.h"
++
++int
++main()
++{
++  return 0;
++}
+diff --git a/gdb/testsuite/gdb.dwarf2/dw2-included.exp b/gdb/testsuite/gdb.dwarf2/dw2-included.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.dwarf2/dw2-included.exp
+@@ -0,0 +1,47 @@
++# Copyright 2006 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++# Minimal DWARF-2 unit test
++
++# This test can only be run on targets which support DWARF-2.
++# For now pick a sampling of likely targets.
++if {![istarget *-*-linux*]
++    && ![istarget *-*-gnu*]
++    && ![istarget *-*-elf*]
++    && ![istarget *-*-openbsd*]
++    && ![istarget arm-*-eabi*]
++    && ![istarget powerpc-*-eabi*]} {
++    return 0  
++}
++
++set testfile "dw2-included"
++set srcfile ${testfile}.c
++set binfile [standard_output_file ${testfile}]
++
++if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
++    return -1
++}
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++gdb_load ${binfile}
++
++gdb_test "set listsize 1" ""
++gdb_test "list integer" "int integer;\r"
++gdb_test "ptype integer" "type = int\r"
++# Path varies depending on the build location.
++gdb_test "info variables integer" "\r\nFile \[^\r\n\]*/gdb.dwarf2/dw2-included.h:\r\n${decimal}:.*int integer;\r"
+diff --git a/gdb/testsuite/gdb.dwarf2/dw2-included.h b/gdb/testsuite/gdb.dwarf2/dw2-included.h
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.dwarf2/dw2-included.h
+@@ -0,0 +1,20 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2006 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 2 of the License, 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; if not, write to the Free Software
++   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++   USA.  */
++
++int integer;
diff --git a/SOURCES/gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch b/SOURCES/gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch
new file mode 100644
index 0000000..fbeb88c
--- /dev/null
+++ b/SOURCES/gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch
@@ -0,0 +1,264 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Jan Kratochvil <jan.kratochvil@redhat.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch
+
+;; Support TLS symbols (+`errno' suggestion if no pthread is found) (BZ 185337).
+;;=push+jan: It should be replaced by Infinity project.
+
+https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=185337
+
+2008-02-24  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	Port to GDB-6.8pre.
+
+currently for trivial nonthreaded helloworld with no debug info up to -ggdb2 you
+will get:
+        (gdb) p errno
+        [some error]
+
+* with -ggdb2 and less "errno" in fact does not exist anywhere as it was
+  compiled to "(*__errno_location ())" and the macro definition is not present.
+  Unfortunately gdb will find the TLS symbol and it will try to access it but
+  as the program has been compiled without -lpthread the TLS base register
+  (%gs on i386) is not setup and it will result in:
+        Cannot access memory at address 0x8
+
+Attached suggestion patch how to deal with the most common "errno" symbol
+for the most common under-ggdb3 compiled programs.
+
+Original patch hooked into target_translate_tls_address.  But its inferior
+call invalidates `struct frame *' in the callers - RH BZ 690908.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1166549
+
+2007-11-03  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* ./gdb/dwarf2read.c (read_partial_die, dwarf2_linkage_name): Prefer
+	DW_AT_MIPS_linkage_name over DW_AT_name now only for non-C.
+
+glibc-debuginfo-2.7-2.x86_64: /usr/lib/debug/lib64/libc.so.6.debug:
+  <81a2>     DW_AT_name        : (indirect string, offset: 0x280e): __errno_location
+  <81a8>     DW_AT_MIPS_linkage_name: (indirect string, offset: 0x2808): *__GI___errno_location
+
+diff --git a/gdb/printcmd.c b/gdb/printcmd.c
+--- a/gdb/printcmd.c
++++ b/gdb/printcmd.c
+@@ -1190,6 +1190,10 @@ print_command_1 (const char *exp, int voidprint)
+ 
+   if (exp && *exp)
+     {
++      /* '*((int *(*) (void)) __errno_location) ()' is incompatible with
++	 function descriptors.  */
++      if (target_has_execution && strcmp (exp, "errno") == 0)
++	exp = "*(*(int *(*)(void)) __errno_location) ()";
+       expression_up expr = parse_expression (exp);
+       val = evaluate_expression (expr.get ());
+     }
+diff --git a/gdb/testsuite/gdb.dwarf2/dw2-errno.c b/gdb/testsuite/gdb.dwarf2/dw2-errno.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.dwarf2/dw2-errno.c
+@@ -0,0 +1,28 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2005, 2007 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++   Please email any bugs, comments, and/or additions to this file to:
++   bug-gdb@prep.ai.mit.edu  */
++
++#include <errno.h>
++
++int main()
++{
++  errno = 42;
++
++  return 0;	/* breakpoint */
++}
+diff --git a/gdb/testsuite/gdb.dwarf2/dw2-errno.exp b/gdb/testsuite/gdb.dwarf2/dw2-errno.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.dwarf2/dw2-errno.exp
+@@ -0,0 +1,60 @@
++# Copyright 2007 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++set testfile dw2-errno
++set srcfile ${testfile}.c
++set binfile [standard_output_file ${testfile}]
++
++proc prep {} {
++    global srcdir subdir binfile
++    gdb_exit
++    gdb_start
++    gdb_reinitialize_dir $srcdir/$subdir
++    gdb_load ${binfile}
++
++    runto_main
++
++    gdb_breakpoint [gdb_get_line_number "breakpoint"]
++    gdb_continue_to_breakpoint "breakpoint"
++}
++
++if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable "additional_flags=-g2"] != "" } {
++    untested "Couldn't compile test program"
++    return -1
++}
++prep
++gdb_test "print errno" ".* = 42" "errno with macros=N threads=N"
++
++if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable "additional_flags=-g3"] != "" } {
++    untested "Couldn't compile test program"
++    return -1
++}
++prep
++gdb_test "print errno" ".* = 42" "errno with macros=Y threads=N"
++
++if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable "additional_flags=-g2"] != "" } {
++    return -1
++}
++prep
++gdb_test "print errno" ".* = 42" "errno with macros=N threads=Y"
++
++if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable "additional_flags=-g3"] != "" } {
++    return -1
++}
++prep
++gdb_test "print errno" ".* = 42" "errno with macros=Y threads=Y"
++
++# TODO: Test the error on resolving ERRNO with only libc loaded.
++# Just how to find the current libc filename?
+diff --git a/gdb/testsuite/gdb.dwarf2/dw2-errno2.c b/gdb/testsuite/gdb.dwarf2/dw2-errno2.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.dwarf2/dw2-errno2.c
+@@ -0,0 +1,28 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2005, 2007 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++   Please email any bugs, comments, and/or additions to this file to:
++   bug-gdb@prep.ai.mit.edu  */
++
++#include <errno.h>
++
++int main()
++{
++  errno = 42;
++
++  return 0;	/* breakpoint */
++}
+diff --git a/gdb/testsuite/gdb.dwarf2/dw2-errno2.exp b/gdb/testsuite/gdb.dwarf2/dw2-errno2.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.dwarf2/dw2-errno2.exp
+@@ -0,0 +1,71 @@
++# Copyright 2007 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++set testfile dw2-errno2
++set srcfile ${testfile}.c
++set binfile [standard_output_file ${testfile}]
++
++proc prep { message {do_xfail 0} } { with_test_prefix $message {
++    global srcdir subdir binfile variant
++    gdb_exit
++    gdb_start
++    gdb_reinitialize_dir $srcdir/$subdir
++    gdb_load ${binfile}${variant}
++
++    runto_main
++
++    gdb_breakpoint [gdb_get_line_number "breakpoint"]
++    gdb_continue_to_breakpoint "breakpoint"
++
++    gdb_test "gcore ${binfile}${variant}.core" "\r\nSaved corefile .*" "gcore $variant"
++
++    gdb_test "print errno" ".* = 42"
++
++    gdb_test "kill" ".*" "kill" {Kill the program being debugged\? \(y or n\) } "y"
++    gdb_test "core-file ${binfile}${variant}.core" "\r\nCore was generated by .*" "core-file"
++    if $do_xfail {
++	setup_xfail "*-*-*"
++    }
++    gdb_test "print (int) errno" ".* = 42" "print errno for core"
++}}
++
++set variant g2thrN
++if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}${variant}" executable "additional_flags=-g2"] != "" } {
++    untested "Couldn't compile test program"
++    return -1
++}
++prep "macros=N threads=N" 1
++
++set variant g3thrN
++if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}${variant}" executable "additional_flags=-g3"] != "" } {
++    untested "Couldn't compile test program"
++    return -1
++}
++prep "macros=Y threads=N" 1
++
++set variant g2thrY
++if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}${variant}" executable "additional_flags=-g2"] != "" } {
++    return -1
++}
++prep "macros=N threads=Y"
++
++set variant g3thrY
++if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}${variant}" executable "additional_flags=-g3"] != "" } {
++    return -1
++}
++prep "macros=Y threads=Y" 1
++
++# TODO: Test the error on resolving ERRNO with only libc loaded.
++# Just how to find the current libc filename?
diff --git a/SOURCES/gdb-6.5-bz203661-emit-relocs.patch b/SOURCES/gdb-6.5-bz203661-emit-relocs.patch
new file mode 100644
index 0000000..75ca84f
--- /dev/null
+++ b/SOURCES/gdb-6.5-bz203661-emit-relocs.patch
@@ -0,0 +1,24 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.5-bz203661-emit-relocs.patch
+
+;; Fix debuginfo addresses resolving for --emit-relocs Linux kernels (BZ 203661).
+;;=push+jan: There was some mail thread about it, this patch may be a hack.
+
+diff --git a/gdb/symfile.c b/gdb/symfile.c
+--- a/gdb/symfile.c
++++ b/gdb/symfile.c
+@@ -3584,6 +3584,12 @@ default_symfile_relocate (struct objfile *objfile, asection *sectp,
+      DWO file.  */
+   bfd *abfd = sectp->owner;
+ 
++  /* Executable files have all the relocations already resolved.
++     Handle files linked with --emit-relocs.
++     http://sources.redhat.com/ml/gdb/2006-08/msg00137.html  */
++  if ((abfd->flags & EXEC_P) != 0)
++    return NULL;
++
+   /* We're only interested in sections with relocation
+      information.  */
+   if ((sectp->flags & SEC_RELOC) == 0)
diff --git a/SOURCES/gdb-6.5-bz216711-clone-is-outermost.patch b/SOURCES/gdb-6.5-bz216711-clone-is-outermost.patch
new file mode 100644
index 0000000..f11df0a
--- /dev/null
+++ b/SOURCES/gdb-6.5-bz216711-clone-is-outermost.patch
@@ -0,0 +1,304 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Jan Kratochvil <jan.kratochvil@redhat.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.5-bz216711-clone-is-outermost.patch
+
+;; Fix bogus 0x0 unwind of the thread's topmost function clone(3) (BZ 216711).
+;;=fedora
+
+https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=216711
+
+FIXME: This workaround should be dropped and
+glibc/sysdeps/unix/sysv/linux/x86_64/clone.S should get CFI for the child
+instead.
+
+2006-12-17  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb/amd64-linux-tdep.c (linux_clone_code): New variable.
+	(LINUX_CLONE_LEN): New definition.
+	(amd64_linux_clone_running, amd64_linux_outermost_frame): New function.
+	(amd64_linux_init_abi): Initialize `outermost_frame_p'.
+	* gdb/i386-tdep.c (i386_gdbarch_init): Likewise.
+	* gdb/i386-tdep.h (gdbarch_tdep): Add `outermost_frame_p' member.
+	* gdb/amd64-tdep.c (amd64_frame_this_id): Call `outermost_frame_p'.
+
+2006-12-17  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.threads/bt-clone-stop.exp, gdb.threads/bt-clone-stop.c:
+	New file.
+
+2007-10-16  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	Port to GDB-6.7.
+
+diff --git a/gdb/amd64-linux-tdep.c b/gdb/amd64-linux-tdep.c
+--- a/gdb/amd64-linux-tdep.c
++++ b/gdb/amd64-linux-tdep.c
+@@ -291,6 +291,80 @@ amd64_linux_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
+ 
+ /* Set the program counter for process PTID to PC.  */
+ 
++/* Detect the outermost frame; during unwind of
++   	#5  0x000000305cec68c3 in clone () from /lib64/tls/libc.so.6
++   avoid the additional bogus frame
++   	#6  0x0000000000000000 in ??
++   We compare if the `linux_clone_code' block is _before_ unwound PC.  */
++
++static const unsigned char linux_clone_code[] =
++{
++/* libc/sysdeps/unix/sysv/linux/x86_64/clone.S */
++/* #ifdef RESET_PID */
++/* ... */
++/* 	mov	$SYS_ify(getpid), %eax */
++/* 0xb8, 0x27, 0x00, 0x00, 0x00 */
++/* OR */
++/* 	mov	$SYS_ify(getpid), %rax */
++/* 0x48, 0xc7, 0xc0, 0x27, 0x00, 0x00, 0x00 */
++/* so just: */
++  0x27, 0x00, 0x00, 0x00,
++/* 	syscall */
++  0x0f, 0x05,
++/* 	movl	%eax, %fs:PID */
++  0x64, 0x89, 0x04, 0x25, 0x94, 0x00, 0x00, 0x00,
++/* 	movl	%eax, %fs:TID */
++  0x64, 0x89, 0x04, 0x25, 0x90, 0x00, 0x00, 0x00,
++/* #endif */
++/* 	|* Set up arguments for the function call.  *| */
++/* 	popq	%rax		|* Function to call.  *| */
++  0x58,
++/* 	popq	%rdi		|* Argument.  *| */
++  0x5f,
++/* 	call	*%rax$   */
++  0xff, 0xd0
++};
++
++#define LINUX_CLONE_LEN (sizeof linux_clone_code)
++
++static int
++amd64_linux_clone_running (struct frame_info *this_frame)
++{
++  CORE_ADDR pc = get_frame_pc (this_frame);
++  unsigned char buf[LINUX_CLONE_LEN];
++
++  if (!safe_frame_unwind_memory (this_frame, pc - LINUX_CLONE_LEN, buf,
++				 LINUX_CLONE_LEN))
++    return 0;
++
++  if (memcmp (buf, linux_clone_code, LINUX_CLONE_LEN) != 0)
++    return 0;
++
++  return 1;
++}
++
++static int
++amd64_linux_outermost_frame (struct frame_info *this_frame)
++{
++  CORE_ADDR pc = get_frame_pc (this_frame);
++  const char *name;
++
++  find_pc_partial_function (pc, &name, NULL, NULL);
++
++  /* If we have NAME, we can optimize the search.
++     `clone' NAME still needs to have the code checked as its name may be
++     present in the user code.
++     `__clone' NAME should not be present in the user code but in the initial
++     parts of the `__clone' implementation the unwind still makes sense.
++     More detailed unwinding decision would be too much sensitive to possible
++     subtle changes in specific glibc revisions.  */
++  if (name == NULL || strcmp (name, "clone") == 0
++      || strcmp ("__clone", name) == 0)
++    return (amd64_linux_clone_running (this_frame) != 0);
++
++  return 0;
++}
++
+ static void
+ amd64_linux_write_pc (struct regcache *regcache, CORE_ADDR pc)
+ {
+@@ -1808,6 +1882,8 @@ amd64_linux_init_abi_common(struct gdbarch_info info, struct gdbarch *gdbarch)
+ 
+   tdep->xsave_xcr0_offset = I386_LINUX_XSAVE_XCR0_OFFSET;
+ 
++  tdep->outermost_frame_p = amd64_linux_outermost_frame;
++
+   /* Add the %orig_rax register used for syscall restarting.  */
+   set_gdbarch_write_pc (gdbarch, amd64_linux_write_pc);
+ 
+diff --git a/gdb/amd64-tdep.c b/gdb/amd64-tdep.c
+--- a/gdb/amd64-tdep.c
++++ b/gdb/amd64-tdep.c
+@@ -2595,6 +2595,7 @@ amd64_frame_unwind_stop_reason (struct frame_info *this_frame,
+ {
+   struct amd64_frame_cache *cache =
+     amd64_frame_cache (this_frame, this_cache);
++  struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (this_frame));
+ 
+   if (!cache->base_p)
+     return UNWIND_UNAVAILABLE;
+@@ -2603,6 +2604,10 @@ amd64_frame_unwind_stop_reason (struct frame_info *this_frame,
+   if (cache->base == 0)
+     return UNWIND_OUTERMOST;
+ 
++  /* Detect OS dependent outermost frames; such as `clone'.  */
++  if (tdep->outermost_frame_p && tdep->outermost_frame_p (this_frame))
++    return UNWIND_OUTERMOST;
++
+   return UNWIND_NO_REASON;
+ }
+ 
+@@ -2737,6 +2742,7 @@ amd64_sigtramp_frame_this_id (struct frame_info *this_frame,
+ {
+   struct amd64_frame_cache *cache =
+     amd64_sigtramp_frame_cache (this_frame, this_cache);
++  struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (this_frame));
+ 
+   if (!cache->base_p)
+     (*this_id) = frame_id_build_unavailable_stack (get_frame_pc (this_frame));
+@@ -2745,6 +2751,11 @@ amd64_sigtramp_frame_this_id (struct frame_info *this_frame,
+       /* This marks the outermost frame.  */
+       return;
+     }
++  else if (tdep->outermost_frame_p && tdep->outermost_frame_p (this_frame))
++    {
++      /* Detect OS dependent outermost frames; such as `clone'.  */
++      return;
++    }
+   else
+     (*this_id) = frame_id_build (cache->base + 16, get_frame_pc (this_frame));
+ }
+diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c
+--- a/gdb/i386-tdep.c
++++ b/gdb/i386-tdep.c
+@@ -8406,6 +8406,9 @@ i386_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
+ 
+   tdep->xsave_xcr0_offset = -1;
+ 
++  /* Unwinding stops on i386 automatically.  */
++  tdep->outermost_frame_p = NULL;
++
+   tdep->record_regmap = i386_record_regmap;
+ 
+   set_gdbarch_type_align (gdbarch, i386_type_align);
+diff --git a/gdb/i386-tdep.h b/gdb/i386-tdep.h
+--- a/gdb/i386-tdep.h
++++ b/gdb/i386-tdep.h
+@@ -251,6 +251,9 @@ struct gdbarch_tdep
+ 
+   /* Regsets. */
+   const struct regset *fpregset;
++
++  /* Detect OS dependent outermost frames; such as `clone'.  */
++  int (*outermost_frame_p) (struct frame_info *this_frame);
+ };
+ 
+ /* Floating-point registers.  */
+diff --git a/gdb/testsuite/gdb.threads/bt-clone-stop.c b/gdb/testsuite/gdb.threads/bt-clone-stop.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.threads/bt-clone-stop.c
+@@ -0,0 +1,39 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2006 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 2 of the License, 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; if not, write to the Free Software
++   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
++   MA 02110-1301, USA.  */
++
++
++#include <pthread.h>
++#include <unistd.h>
++#include <assert.h>
++
++
++void *threader (void *arg)
++{
++	assert (0);
++	return NULL;
++}
++
++int main (void)
++{
++	pthread_t t1;
++
++	pthread_create (&t1, NULL, threader, (void *) NULL);
++	for (;;)
++		pause();
++}
+diff --git a/gdb/testsuite/gdb.threads/bt-clone-stop.exp b/gdb/testsuite/gdb.threads/bt-clone-stop.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.threads/bt-clone-stop.exp
+@@ -0,0 +1,61 @@
++# Copyright 2006 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
++
++# Backtraced `clone' must not have `PC == 0' as its previous frame.
++
++if $tracelevel then {
++    strace $tracelevel
++}
++
++set testfile bt-clone-stop
++set srcfile ${testfile}.c
++set binfile [standard_output_file ${testfile}]
++if  { [gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
++    untested "Couldn't compile test program"
++    return -1
++}
++
++# Get things started.
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++gdb_load ${binfile}
++
++# threader: threader.c:8: threader: Assertion `0' failed.
++# Program received signal SIGABRT, Aborted.
++
++gdb_test "run" \
++     {Thread 2 "bt-clone-stop" received signal SIGABRT.*} \
++     "run"
++
++# Former gdb unwind (the first function is `clone'):
++# #5  0x0000003421ecd62d in ?? () from /lib64/libc.so.6
++# #6  0x0000000000000000 in ?? ()
++# (gdb)
++# Tested `amd64_linux_outermost_frame' functionality should omit the line `#6'.
++# 
++# Two `-re' cases below must be in this order (1st is a subset of the 2nd one).
++# Unhandled case below should not happen and it is fortunately handled by
++# `amd64_linux_outermost_frame' as FAIL (and result `0x0 entry output invalid').
++gdb_test_multiple "bt" "0x0 entry output invalid" {
++    -re "in threader \\(.*\n#\[0-9\]* *0x0* in .*$gdb_prompt $" {
++    	fail "0x0 entry found"
++    }
++    -re "in threader \\(.*$gdb_prompt $" {
++    	pass "0x0 entry not found"
++    }
++}
diff --git a/SOURCES/gdb-6.5-bz218379-ppc-solib-trampoline-test.patch b/SOURCES/gdb-6.5-bz218379-ppc-solib-trampoline-test.patch
new file mode 100644
index 0000000..8a648a3
--- /dev/null
+++ b/SOURCES/gdb-6.5-bz218379-ppc-solib-trampoline-test.patch
@@ -0,0 +1,102 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.5-bz218379-ppc-solib-trampoline-test.patch
+
+;; Test sideeffects of skipping ppc .so libs trampolines (BZ 218379).
+;;=fedoratest
+
+https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=218379
+
+diff --git a/gdb/testsuite/gdb.base/step-over-trampoline.c b/gdb/testsuite/gdb.base/step-over-trampoline.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/step-over-trampoline.c
+@@ -0,0 +1,28 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2006 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 2 of the License, 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; if not, write to the Free Software
++   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++   Please email any bugs, comments, and/or additions to this file to:
++   bug-gdb@prep.ai.mit.edu  */
++
++#include <stdio.h>
++
++int main (void)
++{
++	puts ("hello world");
++	return 0;
++}
+diff --git a/gdb/testsuite/gdb.base/step-over-trampoline.exp b/gdb/testsuite/gdb.base/step-over-trampoline.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/step-over-trampoline.exp
+@@ -0,0 +1,54 @@
++# Copyright 2006 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
++
++if $tracelevel then {
++    strace $tracelevel
++}
++
++set testfile step-over-trampoline
++set srcfile ${testfile}.c
++set binfile [standard_output_file ${testfile}]
++if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
++    untested "Couldn't compile test program"
++    return -1
++}
++
++# Get things started.
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++gdb_load ${binfile}
++
++# For C programs, "start" should stop in main().
++
++gdb_test "start" \
++         "main \\(\\) at .*$srcfile.*" \
++         "start"
++
++# main () at hello2.c:5
++# 5		puts("hello world\n");
++# (gdb) next
++# 0x100007e0 in call___do_global_ctors_aux ()
++
++gdb_test_multiple "next" "invalid `next' output" {
++	-re "\nhello world.*return 0;.*" {
++		pass "stepped over"
++	}
++	-re " in call___do_global_ctors_aux \\(\\).*" {
++		fail "stepped into trampoline"
++	}
++}
diff --git a/SOURCES/gdb-6.5-bz218379-solib-trampoline-lookup-lock-fix.patch b/SOURCES/gdb-6.5-bz218379-solib-trampoline-lookup-lock-fix.patch
new file mode 100644
index 0000000..45d8570
--- /dev/null
+++ b/SOURCES/gdb-6.5-bz218379-solib-trampoline-lookup-lock-fix.patch
@@ -0,0 +1,27 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.5-bz218379-solib-trampoline-lookup-lock-fix.patch
+
+;; Fix lockup on trampoline vs. its function lookup; unreproducible (BZ 218379).
+;;=fedora
+
+https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=218379
+
+diff --git a/gdb/symtab.c b/gdb/symtab.c
+--- a/gdb/symtab.c
++++ b/gdb/symtab.c
+@@ -3165,6 +3165,13 @@ find_pc_sect_line (CORE_ADDR pc, struct obj_section *section, int notcurrent)
+ 	     SYMBOL_LINKAGE_NAME (msymbol)); */
+ 	  ;
+ 	/* fall through */
++	/* `msymbol' trampoline may be located before its .text symbol
++	   but this text symbol may be the address we were looking for.
++	   Avoid `find_pc_sect_line'<->`find_pc_line' infinite loop.
++	   Red Hat Bug 218379.  */
++	else if (BMSYMBOL_VALUE_ADDRESS (mfunsym) == pc)
++	  warning ("In stub for %s (0x%s); interlocked, please submit the binary to http://bugzilla.redhat.com", MSYMBOL_LINKAGE_NAME (msymbol.minsym), paddress (target_gdbarch (), pc));
++	/* fall through */
+ 	else
+ 	  return find_pc_line (BMSYMBOL_VALUE_ADDRESS (mfunsym), 0);
+       }
diff --git a/SOURCES/gdb-6.5-bz243845-stale-testing-zombie-test.patch b/SOURCES/gdb-6.5-bz243845-stale-testing-zombie-test.patch
new file mode 100644
index 0000000..a0520d7
--- /dev/null
+++ b/SOURCES/gdb-6.5-bz243845-stale-testing-zombie-test.patch
@@ -0,0 +1,88 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.5-bz243845-stale-testing-zombie-test.patch
+
+;; Test leftover zombie process (BZ 243845).
+;;=fedoratest
+
+diff --git a/gdb/testsuite/gdb.base/tracefork-zombie.exp b/gdb/testsuite/gdb.base/tracefork-zombie.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/tracefork-zombie.exp
+@@ -0,0 +1,75 @@
++# Copyright 2007 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
++
++# are we on a target board
++if [is_remote target] then {
++    return 0
++}
++
++# Start the program running and then wait for a bit, to be sure
++# that it can be attached to.
++
++gdb_exit
++gdb_start
++gdb_load sleep
++
++set gdb_pid [exp_pid -i [board_info host fileid]]
++set test "identified the child GDB"
++if {$gdb_pid != "" && $gdb_pid > 0} {
++    pass $test
++    verbose -log "Child GDB PID $gdb_pid"
++} else {
++    fail $test
++}
++
++set testpid [eval exec sleep 10 &]
++exec sleep 2
++
++set test "attach"
++gdb_test_multiple "attach $testpid" "$test" {
++    -re "Attaching to program.*`?.*'?, process $testpid..*$gdb_prompt $" {
++	pass "$test"
++    }
++    -re "Attaching to program.*`?.*\.exe'?, process $testpid.*\[Switching to thread $testpid\..*\].*$gdb_prompt $" {
++	# Response expected on Cygwin
++	pass "$test"
++    }
++}
++
++# Some time to let GDB spawn its testing child.
++exec sleep 2
++
++set found none
++foreach procpid [glob -directory /proc -type d {[0-9]*}] {
++    if {[catch {open $procpid/status} statusfi]} {
++	continue
++    }
++    set status [read $statusfi]
++    close $statusfi
++    if {1
++         && [regexp -line {^Name:\tgdb$} $status]
++         && [regexp -line {^PPid:\t1$} $status]
++         && [regexp -line "^TracerPid:\t$gdb_pid$" $status]} {
++	set found $procpid
++	verbose -log "Found linux_test_for_tracefork zombie PID $procpid"
++    }
++}
++set test "linux_test_for_tracefork leaves no zombie"
++if {$found eq {none}} {
++    pass $test
++} else {
++    fail $test
++}
diff --git a/SOURCES/gdb-6.5-gcore-buffer-limit-test.patch b/SOURCES/gdb-6.5-gcore-buffer-limit-test.patch
new file mode 100644
index 0000000..f4ae65e
--- /dev/null
+++ b/SOURCES/gdb-6.5-gcore-buffer-limit-test.patch
@@ -0,0 +1,149 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.5-gcore-buffer-limit-test.patch
+
+;; Test gcore memory and time requirements for large inferiors.
+;;=fedoratest
+
+diff --git a/gdb/testsuite/gdb.base/gcore-excessive-memory.c b/gdb/testsuite/gdb.base/gcore-excessive-memory.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/gcore-excessive-memory.c
+@@ -0,0 +1,37 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2008 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 2 of the License, 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; if not, write to the Free Software
++   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++   Please email any bugs, comments, and/or additions to this file to:
++   bug-gdb@prep.ai.mit.edu  */
++
++#include <unistd.h>
++#include <stdlib.h>
++
++#define MEGS 64
++
++int main()
++{
++  void *mem;
++  
++  mem = malloc (MEGS * 1024ULL * 1024ULL);
++
++  for (;;)
++    sleep (1);
++
++  return 0;
++}
+diff --git a/gdb/testsuite/gdb.base/gcore-excessive-memory.exp b/gdb/testsuite/gdb.base/gcore-excessive-memory.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/gcore-excessive-memory.exp
+@@ -0,0 +1,94 @@
++# Copyright 2008 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
++
++set testfile gcore-excessive-memory
++set srcfile ${testfile}.c
++set shfile [standard_output_file ${testfile}-gdb.sh]
++set corefile [standard_output_file ${testfile}.core]
++set binfile [standard_output_file ${testfile}]
++if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
++    untested "Couldn't compile test program"
++    return -1
++}
++
++set f [open "|getconf PAGESIZE" "r"]
++gets $f pagesize
++close $f
++
++set pid_of_bin [eval exec $binfile &]
++sleep 2
++
++# Get things started.
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++gdb_load ${binfile}
++
++set pid_of_gdb [exp_pid -i [board_info host fileid]]
++
++gdb_test "attach $pid_of_bin" "Attaching to .*" "attach"
++gdb_test "up 99" "in main .*" "verify we can get to main"
++
++proc memory_v_pages_get {} {
++    global pid_of_gdb pagesize
++    set fd [open "/proc/$pid_of_gdb/statm"]
++    gets $fd line
++    close $fd
++    # number of pages of virtual memory
++    scan $line "%d" drs
++    return $drs
++}
++
++set pages_found [memory_v_pages_get]
++
++# It must be definitely less than `MEGS' of `gcore-excessive-memory.c'.
++set mb_gcore_reserve 4
++verbose -log "pages_found = $pages_found, mb_gcore_reserve = $mb_gcore_reserve"
++set kb_found [expr $pages_found * $pagesize / 1024]
++set kb_permit [expr $kb_found + 1 * 1024 + $mb_gcore_reserve * 1024]
++verbose -log "kb_found = $kb_found, kb_permit = $kb_permit"
++
++# Create the ulimit wrapper.
++set f [open $shfile "w"]
++puts $f "#! /bin/sh"
++puts $f "ulimit -v $kb_permit"
++puts $f "exec $GDB \"\$@\""
++close $f
++remote_exec host "chmod +x $shfile"
++
++gdb_exit
++set GDBold $GDB
++set GDB "$shfile"
++gdb_start
++set GDB $GDBold
++
++gdb_reinitialize_dir $srcdir/$subdir
++gdb_load ${binfile}
++
++set pid_of_gdb [exp_pid -i [board_info host fileid]]
++
++gdb_test "attach $pid_of_bin" "Attaching to .*" "attach"
++gdb_test "up 99" "in main .*" "verify we can get to main"
++
++verbose -log "kb_found before gcore = [expr [memory_v_pages_get] * $pagesize / 1024]"
++
++gdb_test "gcore $corefile" "Saved corefile \[^\n\r\]*" "Save the core file"
++
++verbose -log "kb_found after gcore = [expr [memory_v_pages_get] * $pagesize / 1024]"
++
++# Cleanup.
++exec kill -9 $pid_of_bin
diff --git a/SOURCES/gdb-6.5-ia64-libunwind-leak-test.patch b/SOURCES/gdb-6.5-ia64-libunwind-leak-test.patch
new file mode 100644
index 0000000..8a8a43a
--- /dev/null
+++ b/SOURCES/gdb-6.5-ia64-libunwind-leak-test.patch
@@ -0,0 +1,130 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.5-ia64-libunwind-leak-test.patch
+
+;; Test ia64 memory leaks of the code using libunwind.
+;;=fedoratest
+
+diff --git a/gdb/testsuite/gdb.base/unwind-leak.c b/gdb/testsuite/gdb.base/unwind-leak.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/unwind-leak.c
+@@ -0,0 +1,29 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2007 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 2 of the License, 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; if not, write to the Free Software
++   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++   Please email any bugs, comments, and/or additions to this file to:
++   bug-gdb@prep.ai.mit.edu  */
++
++#include <unistd.h>
++
++int main()
++{
++  for (;;)
++    alarm (0);
++  return 0;
++}
+diff --git a/gdb/testsuite/gdb.base/unwind-leak.exp b/gdb/testsuite/gdb.base/unwind-leak.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/unwind-leak.exp
+@@ -0,0 +1,83 @@
++# Copyright 2007 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
++
++set testfile unwind-leak
++set srcfile ${testfile}.c
++set shfile [standard_output_file ${testfile}-gdb.sh]
++set binfile [standard_output_file ${testfile}]
++if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
++    untested "Couldn't compile test program"
++    return -1
++}
++
++# Get things started.
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++gdb_load ${binfile}
++
++set pid [exp_pid -i [board_info host fileid]]
++
++# For C programs, "start" should stop in main().
++
++gdb_test "start" \
++         "main \\(\\) at .*$srcfile.*" \
++         "start"
++
++set loc [gdb_get_line_number "alarm"]
++gdb_breakpoint $loc
++
++proc memory_get {} {
++    global pid
++    set fd [open "/proc/$pid/statm"]
++    gets $fd line
++    close $fd
++    # number of pages of data/stack
++    scan $line "%*d%*d%*d%*d%*d%d" drs
++    return $drs
++}
++
++set cycles 100
++# For 100 cycles it was 1308: from = 363 KB, to = 1671 KB
++set permit_kb 100
++verbose -log "cycles = $cycles, permit_kb = $permit_kb"
++
++set fail 0
++set test "breakpoint stop/continue cycles" 
++for {set i $cycles} {$i > 0} {set i [expr {$i - 1}]} {
++    gdb_test_multiple "continue" $test {
++	-re "Breakpoint 2, main .*alarm .*.*${gdb_prompt} $" {
++	}
++	-re "Segmentation fault" {
++	    fail $test
++	    set i 0
++	    set fail 1
++	}
++    }
++    if ![info exists from] {
++	set from [memory_get]
++    }
++}
++set to [memory_get]
++if {!$fail} {
++    verbose -log "from = $from KB, to = $to KB"
++    if {$from > 0 && $to > 10 && $to < $from + $permit_kb} {
++	pass $test
++    } else {
++	fail $test
++    }
++}
diff --git a/SOURCES/gdb-6.5-last-address-space-byte-test.patch b/SOURCES/gdb-6.5-last-address-space-byte-test.patch
new file mode 100644
index 0000000..9c5779f
--- /dev/null
+++ b/SOURCES/gdb-6.5-last-address-space-byte-test.patch
@@ -0,0 +1,62 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.5-last-address-space-byte-test.patch
+
+;; Testcase for deadlocking on last address space byte; for corrupted backtraces.
+;;=fedoratest
+
+diff --git a/gdb/testsuite/gdb.base/largecore-last-address-lock.exp b/gdb/testsuite/gdb.base/largecore-last-address-lock.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/largecore-last-address-lock.exp
+@@ -0,0 +1,49 @@
++# Copyright 2006 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
++
++if $tracelevel then {
++    strace $tracelevel
++}
++
++# Get things started.
++
++gdb_exit
++gdb_start
++
++# i386 (32-bit) only: gdb with Red Hat largecore patch did lock up:
++# https://enterprise.redhat.com/issue-tracker/?module=issues&action=view&tid=103263
++# https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=210614
++
++# i386: Bug exists when the `target_xfer_memory' condition
++# `(memaddr + len < region->hi)' operates on 64-bit operands on
++# largecore-patched with 32-bit addresses and so it can get `false' with
++# arbitrary `len'.
++
++# x86_64: The bug is not present as the operands and calculations have the same
++# bit size.  Would would still need to pass there the highest address
++# (`memaddr == 0xffffffffffffffff') but we would need to pass `len == 0'
++# to make the condition `(memaddr + len < region->hi)' false.
++# `len == 0' would get caught eariler.
++
++# Error in the success case is immediate.
++set timeoutold ${timeout}
++set timeout 10
++
++gdb_test "x/xb 0xffffffff" \
++         "Cannot access memory at address 0xffffffff" \
++         "Read the last address space byte"
++
++set timeout ${timeoutold}
diff --git a/SOURCES/gdb-6.5-missed-trap-on-step-test.patch b/SOURCES/gdb-6.5-missed-trap-on-step-test.patch
new file mode 100644
index 0000000..06a9f7e
--- /dev/null
+++ b/SOURCES/gdb-6.5-missed-trap-on-step-test.patch
@@ -0,0 +1,95 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.5-missed-trap-on-step-test.patch
+
+;; Test hiding unexpected breakpoints on intentional step commands.
+;;=fedoratest
+
+Fix has been committed to:
+	gdb-6.6-scheduler_locking-step-sw-watchpoints2.patch
+
+diff --git a/gdb/testsuite/gdb.base/watchpoint-during-step.c b/gdb/testsuite/gdb.base/watchpoint-during-step.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/watchpoint-during-step.c
+@@ -0,0 +1,30 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2007 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 2 of the License, 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; if not, write to the Free Software
++   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++   Please email any bugs, comments, and/or additions to this file to:
++   bug-gdb@prep.ai.mit.edu  */
++
++static int var;
++
++int main()
++{
++  var = 1;
++  var = 2;
++  var = 3;
++  return 0;
++}
+diff --git a/gdb/testsuite/gdb.base/watchpoint-during-step.exp b/gdb/testsuite/gdb.base/watchpoint-during-step.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/watchpoint-during-step.exp
+@@ -0,0 +1,44 @@
++# Copyright 2007 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
++
++set testfile watchpoint-during-step
++set srcfile ${testfile}.c
++set binfile [standard_output_file ${testfile}]
++if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
++    untested "Couldn't compile test program"
++    return -1
++}
++
++# Get things started.
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++gdb_load ${binfile}
++
++runto_main
++
++gdb_breakpoint [gdb_get_line_number "var = 2"]
++gdb_continue_to_breakpoint "Find the first var set"
++
++gdb_test "step" ".*var = 3;" "Step to the next var set"
++
++gdb_test "watch var" "atchpoint .*: var" "Set the watchpoint"
++
++# Here is the target point.  Be careful to not have breakpoint set on the line
++# we step from as in this case it is a valid upstream KFAIL gdb/38
++
++gdb_test "step" ".*Old value = 2.*New value = 3.*" "Catch the watchpoint"
diff --git a/SOURCES/gdb-6.5-readline-long-line-crash-test.patch b/SOURCES/gdb-6.5-readline-long-line-crash-test.patch
new file mode 100644
index 0000000..5410899
--- /dev/null
+++ b/SOURCES/gdb-6.5-readline-long-line-crash-test.patch
@@ -0,0 +1,141 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.5-readline-long-line-crash-test.patch
+
+;; Fix readline segfault on excessively long hand-typed lines.
+;;=fedoratest
+
+https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=214196
+
+diff --git a/gdb/testsuite/gdb.base/readline-overflow.exp b/gdb/testsuite/gdb.base/readline-overflow.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/readline-overflow.exp
+@@ -0,0 +1,126 @@
++# Copyright 2006 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-gdb@prep.ai.mit.edu
++
++# This file was written by Jan Kratochvil <jan.kratochvil@redhat.com>
++
++# This file is part of the gdb testsuite.
++
++#
++# Tests for readline buffer overflow.
++#
++
++if $tracelevel {
++  strace $tracelevel
++}
++
++# Don't let a .inputrc file or an existing setting of INPUTRC mess up
++# the test results.  Even if /dev/null doesn't exist on the particular
++# platform, the readline library will use the default setting just by
++# failing to open the file.  OTOH, opening /dev/null successfully will
++# also result in the default settings being used since nothing will be
++# read from this file.
++global env
++if [info exists env(INPUTRC)] {
++    set old_inputrc $env(INPUTRC)
++}
++set env(INPUTRC) "/dev/null"
++
++set oldtimeout1 $timeout
++set timeout 600
++
++if [info exists env(GDBHISTFILE)] {
++    set old_gdbhistfile $env(GDBHISTFILE)
++}
++if [info exists env(HISTSIZE)] {
++    set old_histsize $env(HISTSIZE)
++}
++set env(GDBHISTFILE) "${srcdir}/${subdir}/gdb_history"
++set env(HISTSIZE) "10"
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++
++
++set width 11
++gdb_test "set width $width" \
++         "" \
++         "Setting width to $width."
++#gdb_test "set height 1" \
++#         "" \
++#         "Setting height to 1."
++send_gdb "run X"
++set i 0
++# It crashes using `set width 7' on `set total 3560'.
++# Sometimes it corrupts screen on `set width 7'.
++# Bugreport used `set total 130001':
++# 	https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=214196
++# Check also `timeout' above.
++set total 4200
++gdb_expect {
++	-re X {
++		incr i
++		if {$i <= $total} {
++			send_gdb "X"
++			exp_continue
++		}
++	}
++	-re "\[ \b\r\n\]" {
++		exp_continue
++	}
++	eof {
++		fail "gdb sending total $total characters"
++		note "Failed after sending $i characters, reason: EOF"
++		gdb_clear_suppressed
++	}
++	timeout {
++		fail "gdb sending total $total characters"
++		note "Failed after sending $i characters (timeout $timeout), reason: TIMEOUT"
++		gdb_clear_suppressed
++	}
++	default {
++		fail "gdb sending total $total characters"
++		note "Failed after sending $i characters, reason: 0=\[$expect_out(0,string)\] buffer=\[$expect_out(buffer)\]"
++		gdb_clear_suppressed
++	}
++}
++send_gdb "\r"
++gdb_test "" \
++         "No executable file specified..*" \
++         "All the characters transferred"
++
++
++# Restore globals modified in this test...
++if [info exists old_inputrc] {
++    set env(INPUTRC) $old_inputrc
++} else {
++    unset env(INPUTRC)
++}
++if [info exists old_gdbhistfile] {
++    set env(GDBHISTFILE) $old_gdbhistfile
++} else {
++    unset env(GDBHISTFILE)
++}
++if [info exists old_histsize] {
++    set env(HISTSIZE) $old_histsize
++} else {
++    unset env(HISTSIZE)
++}
++set timeout $oldtimeout1
++
diff --git a/SOURCES/gdb-6.5-section-num-fixup-test.patch b/SOURCES/gdb-6.5-section-num-fixup-test.patch
new file mode 100644
index 0000000..012ba92
--- /dev/null
+++ b/SOURCES/gdb-6.5-section-num-fixup-test.patch
@@ -0,0 +1,122 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.5-section-num-fixup-test.patch
+
+;; Test a crash on libraries missing the .text section.
+;;=fedoratest
+
+diff --git a/gdb/testsuite/gdb.base/datalib-lib.c b/gdb/testsuite/gdb.base/datalib-lib.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/datalib-lib.c
+@@ -0,0 +1,22 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2008 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 2 of the License, 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; if not, write to the Free Software
++   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++   Please email any bugs, comments, and/or additions to this file to:
++   bug-gdb@prep.ai.mit.edu  */
++
++int var;
+diff --git a/gdb/testsuite/gdb.base/datalib-main.c b/gdb/testsuite/gdb.base/datalib-main.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/datalib-main.c
+@@ -0,0 +1,26 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2008 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 2 of the License, 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; if not, write to the Free Software
++   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++   Please email any bugs, comments, and/or additions to this file to:
++   bug-gdb@prep.ai.mit.edu  */
++
++int
++main (void)
++{
++  return 0;
++}
+diff --git a/gdb/testsuite/gdb.base/datalib.exp b/gdb/testsuite/gdb.base/datalib.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/datalib.exp
+@@ -0,0 +1,51 @@
++# Copyright 2008 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
++
++set testfile datalib
++set srcfilemain ${testfile}-main.c
++set srcfilelib ${testfile}-lib.c
++set libfile [standard_output_file ${testfile}-lib.so]
++set binfile [standard_output_file ${testfile}-main]
++if  { [gdb_compile "${srcdir}/${subdir}/${srcfilelib}" "${libfile}" executable [list debug {additional_flags=-shared -nostdlib}]] != "" } {
++    untested "Couldn't compile test program"
++    return -1
++}
++if  { [gdb_compile "${srcdir}/${subdir}/${srcfilemain}" "${binfile} ${libfile}" executable {debug}] != "" } {
++    untested "Couldn't compile test program"
++    return -1
++}
++
++# Get things started.
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++gdb_load ${binfile}
++
++# We must use a separate library as the main executable is compiled to the
++# address 0 by default and it would get fixed up already at the end of
++# INIT_OBJFILE_SECT_INDICES.  We also cannot PRELINK it as PRELINK is missing
++# on ia64.  The library must be NOSTDLIB as otherwise some stub code would
++# create the `.text' section there.  Also DEBUG option is useful as some of
++# the crashes occur in dwarf2read.c.
++
++# FAIL case:
++# ../../gdb/ia64-tdep.c:2838: internal-error: sect_index_text not initialized
++# A problem internal to GDB has been detected,
++
++gdb_test "start" \
++         "main \\(\\) at .*${srcfilemain}.*" \
++         "start"
diff --git a/SOURCES/gdb-6.5-sharedlibrary-path.patch b/SOURCES/gdb-6.5-sharedlibrary-path.patch
new file mode 100644
index 0000000..6f31e88
--- /dev/null
+++ b/SOURCES/gdb-6.5-sharedlibrary-path.patch
@@ -0,0 +1,180 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Jan Kratochvil <jan.kratochvil@redhat.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.5-sharedlibrary-path.patch
+
+;; Fix TLS symbols resolving for shared libraries with a relative pathname.
+;; The testsuite needs `gdb-6.5-tls-of-separate-debuginfo.patch'.
+;;=fedoratest: One should recheck if it is really fixed upstream.
+
+If you provided some relative path to the shared library, such as with
+	export LD_LIBRARY_PATH=.
+then gdb would fail to match the shared library name during the TLS lookup.
+
+Dropped the workaround/fix for gdb-6.8.50.20081128 - is it still needed?
+
+The testsuite needs `gdb-6.3-bz146810-solib_absolute_prefix_is_empty.patch'.
+The testsuite needs `gdb-6.5-tls-of-separate-debuginfo.patch'.
+
+2006-09-01  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* solib-svr4.c (svr4_fetch_objfile_link_map): Match even absolute
+	requested pathnames to the internal loaded relative pathnames.
+
+2007-10-16  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	Port to GDB-6.7.
+
+2008-02-27  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	Port to gdb-6.7.50.20080227.
+
+diff --git a/gdb/testsuite/gdb.threads/tls-sepdebug-main.c b/gdb/testsuite/gdb.threads/tls-sepdebug-main.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.threads/tls-sepdebug-main.c
+@@ -0,0 +1,25 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2006 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 2 of the License, 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; if not, write to the Free Software
++   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++   Please email any bugs, comments, and/or additions to this file to:
++   bug-gdb@prep.ai.mit.edu  */
++
++int main()
++{
++  return 0;
++}
+diff --git a/gdb/testsuite/gdb.threads/tls-sepdebug-shared.c b/gdb/testsuite/gdb.threads/tls-sepdebug-shared.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.threads/tls-sepdebug-shared.c
+@@ -0,0 +1,22 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2006 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 2 of the License, 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; if not, write to the Free Software
++   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++   Please email any bugs, comments, and/or additions to this file to:
++   bug-gdb@prep.ai.mit.edu  */
++
++__thread int var = 42;
+diff --git a/gdb/testsuite/gdb.threads/tls-sepdebug.exp b/gdb/testsuite/gdb.threads/tls-sepdebug.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.threads/tls-sepdebug.exp
+@@ -0,0 +1,87 @@
++# Copyright 2006 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
++
++if $tracelevel then {
++    strace $tracelevel
++}
++
++set testfile tls-sepdebug
++set srcmainfile   ${testfile}-main.c
++set srcsharedfile ${testfile}-shared.c
++
++set binmainfile        [standard_output_file ${testfile}-main]
++set binsharedbase      ${testfile}-shared.so
++set binsharedfile      [standard_output_file ${binsharedbase}]
++set binshareddebugfile [standard_output_file ${binsharedbase}.debug]
++
++# Use explicit -soname as otherwise the full path to the library would get
++# encoded into ${binmainfile} making LD_LIBRARY_PATH tests useless.
++
++# FIXME: gcc dependency (-Wl,-soname).
++
++if  { [gdb_compile_shlib "${srcdir}/${subdir}/${srcsharedfile}" "${binsharedfile}" [list debug additional_flags=-Wl,-soname=${binsharedbase}]] != "" } {
++    untested "Couldn't compile test library"
++    return -1
++}
++
++# eu-strip(1) works fine but it is a part of `elfutils', not `binutils'.
++if 0 then {
++    remote_exec build "eu-strip -f ${binshareddebugfile} ${binsharedfile}"
++} else {
++    remote_exec build "objcopy --only-keep-debug ${binsharedfile} ${binshareddebugfile}"
++    remote_exec build "objcopy --strip-debug ${binsharedfile}"
++    remote_exec build "objcopy --add-gnu-debuglink=${binshareddebugfile} ${binsharedfile}"
++}
++
++# Do not use `shlib=' as it will automatically add also -rpath for gcc.
++
++if  { [gdb_compile_pthreads "${srcdir}/${subdir}/${srcmainfile} ${binsharedfile}" "${binmainfile}" executable {debug}] != "" } {
++    untested "Couldn't compile test program"
++    return -1
++}
++
++# Get things started.
++
++# Test also the proper resolving of relative library names to absolute ones.
++# \$PWD is easy - it is the absolute way
++# ${subdir} would fail on "print var"
++
++set absdir [file dirname [standard_output_file ${binsharedbase}]]
++foreach ld_library_path [list $absdir [relative_filename [pwd] $absdir]] name { absolute relative }  {
++
++    gdb_exit
++    gdb_start
++    ###gdb_reinitialize_dir $srcdir/$subdir
++    
++    gdb_test "set env LD_LIBRARY_PATH=$ld_library_path" \
++             "" \
++             "set env LD_LIBRARY_PATH is $name"
++    
++    gdb_load ${binmainfile}
++    
++    # For C programs, "start" should stop in main().
++    
++    gdb_test "start" \
++             "main \\(\\) at .*${srcmainfile}.*" \
++             "start"
++    
++    # Check for: Cannot find shared library `/usr/lib/debug/lib/libc-2.4.90.so.debug' in dynamic linker's load module list
++    # as happens with TLS variables and `separate_debug_objfile_backlink'.
++    
++    gdb_test "print var" \
++             "\\\$1 = \[0-9\].*" \
++             "print TLS variable from a shared library with $name-directory separate debug info file"
++}
diff --git a/SOURCES/gdb-6.6-buildid-locate-core-as-arg.patch b/SOURCES/gdb-6.6-buildid-locate-core-as-arg.patch
new file mode 100644
index 0000000..40938a5
--- /dev/null
+++ b/SOURCES/gdb-6.6-buildid-locate-core-as-arg.patch
@@ -0,0 +1,197 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.6-buildid-locate-core-as-arg.patch
+
+;;=push+jan
+
+http://sourceware.org/ml/gdb-patches/2010-01/msg00558.html
+
+[ Fixed up since the mail.  ]
+
+On Thu, 21 Jan 2010 18:17:15 +0100, Doug Evans wrote:
+> Not an exhaustive list, but if we go down the path of converting "gdb
+> corefile" to "gdb -c corefile", then we also need to think about "file
+> corefile" being converted to "core corefile" [or "target core
+> corefile", "core" is apparently deprecated in favor of "target core"]
+> and "target exec corefile" -> "target core corefile".  Presumably
+> "file corefile" (and "target exec corefile") would discard the
+> currently selected executable.  But maybe not.  Will that be confusing
+> for users?  I don't know.
+
+While thinking about it overriding some GDB _commands_ was not my intention.
+
+There is a general assumption if I have a shell COMMAND and some FILE I can do
+$ COMMAND FILE
+and COMMAND will appropriately load the FILE.
+
+FSF GDB currently needs to specify also the executable file for core files
+which already inhibits this intuitive expectation.  OTOH with the build-id
+locating patch which could allow such intuitive start  notneeding the
+executable file.  Still it currently did not work due to the required "-c":
+$ COMMAND -c COREFILE
+
+Entering "file", "core-file" or "attach" commands is already explicit enough
+so that it IMO should do what the command name says without any
+autodetections.  The second command line argument
+(captured_main->pid_or_core_arg) is also autodetected (for PID or CORE) but
+neither "attach" accepts a core file nor "core-file" accepts a PID.
+
+The patch makes sense only with the build-id patchset so this is not submit
+for FSF GDB inclusion yet.  I am fine with your patch (+/- Hui Zhu's pending
+bfd_check_format_matches) as the patch below is its natural extension.
+
+Sorry for the delay,
+Jan
+
+2010-01-25  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* exceptions.h (enum errors <IS_CORE_ERROR>): New.
+	* exec.c: Include exceptions.h.
+	(exec_file_attach <bfd_core>): Call throw_error (IS_CORE_ERROR, ...).
+	* main.c (exec_or_core_file_attach): New.
+	(captured_main <optind < argc>): Set also corearg.
+	(captured_main <strcmp (execarg, symarg) == 0>): New variable func.
+	Call exec_or_core_file_attach if COREARG matches EXECARG.  Call
+	symbol_file_add_main only if CORE_BFD remained NULL.
+
+Http://sourceware.org/ml/gdb-patches/2010-01/msg00517.html
+2010-01-20  Doug Evans  <dje@google.com>
+
+	* exec.c (exec_file_attach): Print a more useful error message if the
+	user did "gdb core".
+
+diff --git a/gdb/common/common-exceptions.h b/gdb/common/common-exceptions.h
+--- a/gdb/common/common-exceptions.h
++++ b/gdb/common/common-exceptions.h
+@@ -104,6 +104,9 @@ enum errors {
+      "_ERROR" is appended to the name.  */
+   MAX_COMPLETIONS_REACHED_ERROR,
+ 
++  /* Attempt to load a core file as executable.  */
++  IS_CORE_ERROR,
++
+   /* Add more errors here.  */
+   NR_ERRORS
+ };
+diff --git a/gdb/exec.c b/gdb/exec.c
+--- a/gdb/exec.c
++++ b/gdb/exec.c
+@@ -36,6 +36,7 @@
+ #include "gdb_bfd.h"
+ #include "gcore.h"
+ #include "source.h"
++#include "exceptions.h"
+ 
+ #include <fcntl.h>
+ #include "readline/readline.h"
+@@ -357,12 +358,27 @@ exec_file_attach (const char *filename, int from_tty)
+ 
+       if (!bfd_check_format_matches (exec_bfd, bfd_object, &matching))
+ 	{
++	  int is_core;
++
++	  /* If the user accidentally did "gdb core", print a useful
++	     error message.  Check it only after bfd_object has been checked as
++	     a valid executable may get recognized for example also as
++	     "trad-core".  */
++	  is_core = bfd_check_format (exec_bfd, bfd_core);
++
+ 	  /* Make sure to close exec_bfd, or else "run" might try to use
+ 	     it.  */
+ 	  exec_close ();
+-	  error (_("\"%s\": not in executable format: %s"),
+-		 scratch_pathname,
+-		 gdb_bfd_errmsg (bfd_get_error (), matching));
++
++	  if (is_core != 0)
++	    throw_error (IS_CORE_ERROR,
++		   _("\"%s\" is a core file.\n"
++		     "Please specify an executable to debug."),
++		   scratch_pathname);
++	  else
++	    error (_("\"%s\": not in executable format: %s"),
++		   scratch_pathname,
++		   gdb_bfd_errmsg (bfd_get_error (), matching));
+ 	}
+ 
+       if (build_section_table (exec_bfd, &sections, &sections_end))
+diff --git a/gdb/main.c b/gdb/main.c
+--- a/gdb/main.c
++++ b/gdb/main.c
+@@ -447,6 +447,37 @@ struct cmdarg
+   char *string;
+ };
+ 
++/* Call exec_file_attach.  If it detected FILENAME is a core file call
++   core_file_command.  Print the original exec_file_attach error only if
++   core_file_command failed to find a matching executable.  */
++
++static void
++exec_or_core_file_attach (const char *filename, int from_tty)
++{
++  volatile struct gdb_exception e;
++
++  gdb_assert (exec_bfd == NULL);
++
++  TRY
++    {
++      exec_file_attach (filename, from_tty);
++    }
++  CATCH (e, RETURN_MASK_ALL)
++    {
++      if (e.error == IS_CORE_ERROR)
++	{
++	  core_file_command ((char *) filename, from_tty);
++
++	  /* Iff the core file found its executable suppress the error message
++	     from exec_file_attach.  */
++	  if (exec_bfd != NULL)
++	    return;
++	}
++      throw_exception (e);
++    }
++  END_CATCH
++}
++
+ static void
+ captured_main_1 (struct captured_main_args *context)
+ {
+@@ -883,6 +914,8 @@ captured_main_1 (struct captured_main_args *context)
+ 	{
+ 	  symarg = argv[optind];
+ 	  execarg = argv[optind];
++	  if (optind + 1 == argc && corearg == NULL)
++	    corearg = argv[optind];
+ 	  optind++;
+ 	}
+ 
+@@ -1033,11 +1066,25 @@ captured_main_1 (struct captured_main_args *context)
+       && symarg != NULL
+       && strcmp (execarg, symarg) == 0)
+     {
++      catch_command_errors_const_ftype *func;
++
++      /* Call exec_or_core_file_attach only if the file was specified as
++	 a command line argument (and not an a command line option).  */
++      if (corearg != NULL && strcmp (corearg, execarg) == 0)
++	{
++	  func = exec_or_core_file_attach;
++	  corearg = NULL;
++	}
++      else
++	func = exec_file_attach;
++
+       /* The exec file and the symbol-file are the same.  If we can't
+          open it, better only print one error message.
+-         catch_command_errors returns non-zero on success!  */
+-      if (catch_command_errors (exec_file_attach, execarg,
+-				!batch_flag))
++         catch_command_errors returns non-zero on success!
++	 Do not load EXECARG as a symbol file if it has been already processed
++	 as a core file.  */
++      if (catch_command_errors (func, execarg, !batch_flag)
++	  && core_bfd == NULL)
+ 	catch_command_errors (symbol_file_add_main_adapter, symarg,
+ 			      !batch_flag);
+     }
diff --git a/SOURCES/gdb-6.6-buildid-locate-misleading-warning-missing-debuginfo-rhbz981154.patch b/SOURCES/gdb-6.6-buildid-locate-misleading-warning-missing-debuginfo-rhbz981154.patch
new file mode 100644
index 0000000..a25057e
--- /dev/null
+++ b/SOURCES/gdb-6.6-buildid-locate-misleading-warning-missing-debuginfo-rhbz981154.patch
@@ -0,0 +1,144 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: 
+ gdb-6.6-buildid-locate-misleading-warning-missing-debuginfo-rhbz981154.patch
+
+;; Fix 'gdb gives highly misleading error when debuginfo pkg is present,
+;; but not corresponding binary pkg' (RH BZ 981154).
+;;=push+jan
+
+Comments by Sergio Durigan Junior <sergiodj@redhat.com>:
+
+  This is the fix for RH BZ #981154
+
+  It is mainly a testcase addition, but a minor fix in the gdb/build-id.c
+  file was also needed.
+
+  gdb/build-id.c was added by:
+
+  commit dc294be54c96414035eed7d53dafdea0a6f31a72
+  Author: Tom Tromey <tromey@redhat.com>
+  Date:   Tue Oct 8 19:56:15 2013 +0000
+
+  and had a little thinko there.  The variable 'filename' needs to be set to
+  NULL after it is free'd, otherwise the code below thinks that it is still
+  valid and doesn't print the necessary warning ("Try: yum install ...").
+
+diff --git a/gdb/build-id.c b/gdb/build-id.c
+--- a/gdb/build-id.c
++++ b/gdb/build-id.c
+@@ -581,7 +581,10 @@ build_id_to_debug_bfd (size_t build_id_len, const bfd_byte *build_id,
+ 	  do_cleanups (inner);
+ 
+ 	  if (abfd == NULL)
+-	    continue;
++	    {
++	      filename = NULL;
++	      continue;
++	    }
+ 
+ 	  if (build_id_verify (abfd.get(), build_id_len, build_id))
+ 	    break;
+diff --git a/gdb/testsuite/gdb.base/rhbz981154-misleading-yum-install-warning.exp b/gdb/testsuite/gdb.base/rhbz981154-misleading-yum-install-warning.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/rhbz981154-misleading-yum-install-warning.exp
+@@ -0,0 +1,97 @@
++#   Copyright (C) 2014  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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++standard_testfile "normal.c"
++
++if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile}] } {
++    return -1
++}
++
++# Get the build-id of the file
++set build_id_debug_file [build_id_debug_filename_get $binfile]
++regsub -all ".debug$" $build_id_debug_file "" build_id_without_debug
++
++# Run to main
++if { ![runto_main] } {
++    return -1
++}
++
++# We first need to generate a corefile
++set escapedfilename [string_to_regexp [standard_output_file gcore.test]]
++set core_supported 0
++gdb_test_multiple "gcore [standard_output_file gcore.test]" \
++	"save a corefile" \
++{
++  -re "Saved corefile ${escapedfilename}\[\r\n\]+$gdb_prompt $" {
++    pass "save a corefile"
++    global core_supported
++    set core_supported 1
++  }
++  -re "Can't create a corefile\[\r\n\]+$gdb_prompt $" {
++    unsupported "save a corefile"
++    global core_supported
++    set core_supported 0
++  }
++}
++
++if {!$core_supported} {
++  return -1
++}
++
++# Move the binfile to a temporary name
++remote_exec build "mv $binfile ${binfile}.old"
++
++# Reinitialize GDB and see if we get a yum/dnf warning
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++
++with_test_prefix "first run:" {
++    gdb_test "set build-id-verbose 1" "" \
++	"set build-id-verbose"
++
++    gdb_test "set debug-file-directory [file dirname [standard_output_file gcore.test]]" "" \
++	"set debug-file-directory"
++
++    gdb_test "core-file [standard_output_file gcore.test]" \
++	"Missing separate debuginfo for the main executable file\r\nTry: (yum|dnf) --enablerepo='\\*debug\\*' install [standard_output_file $build_id_without_debug]\r\n.*" \
++	"test first yum/dnf warning"
++}
++
++# Now we define and create our .build-id
++file mkdir [file dirname [standard_output_file ${build_id_without_debug}]]
++# Cannot use "file link" (from TCL) because it requires the target file to
++# exist.
++remote_exec build "ln -s $binfile [standard_output_file ${build_id_without_debug}]"
++
++# Reinitialize GDB to get the second yum/dnf warning
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++
++with_test_prefix "second run:" {
++    gdb_test "set build-id-verbose 1" "" \
++	"set build-id-verbose"
++
++    gdb_test "set debug-file-directory [file dirname [standard_output_file gcore.test]]" "" \
++	"set debug-file-directory"
++
++    gdb_test "core-file [standard_output_file gcore.test]" \
++	"Missing separate debuginfo for the main executable file\r\nTry: (yum|dnf) --enablerepo='\\*debug\\*' install $binfile\r\n.*" \
++	"test second yum/dnf warning"
++}
++
++# Leaving the link there will cause breakage in the next run.
++remote_exec build "rm -f [standard_output_file ${build_id_without_debug}]"
diff --git a/SOURCES/gdb-6.6-buildid-locate-rpm-librpm-workaround.patch b/SOURCES/gdb-6.6-buildid-locate-rpm-librpm-workaround.patch
new file mode 100644
index 0000000..375b178
--- /dev/null
+++ b/SOURCES/gdb-6.6-buildid-locate-rpm-librpm-workaround.patch
@@ -0,0 +1,42 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.6-buildid-locate-rpm-librpm-workaround.patch
+
+;; Workaround librpm BZ 643031 due to its unexpected exit() calls (BZ 642879).
+;;=push+jan
+
+diff --git a/gdb/build-id.c b/gdb/build-id.c
+--- a/gdb/build-id.c
++++ b/gdb/build-id.c
+@@ -652,6 +652,19 @@ build_id_to_filename (const struct bfd_build_id *build_id, char **link_return)
+ #include <dlfcn.h>
+ #endif
+ 
++/* Workarodun https://bugzilla.redhat.com/show_bug.cgi?id=643031
++   librpm must not exit() an application on SIGINT
++
++   Enable or disable a signal handler.  SIGNUM: signal to enable (or disable
++   if negative).  HANDLER: sa_sigaction handler (or NULL to use
++   rpmsqHandler()).  Returns: no. of refs, -1 on error.  */
++extern int rpmsqEnable (int signum, /* rpmsqAction_t handler */ void *handler);
++int
++rpmsqEnable (int signum, /* rpmsqAction_t handler */ void *handler)
++{
++  return 0;
++}
++
+ /* This MISSING_RPM_HASH tracker is used to collect all the missing rpm files
+    and avoid their duplicities during a single inferior run.  */
+ 
+diff --git a/gdb/proc-service.list b/gdb/proc-service.list
+--- a/gdb/proc-service.list
++++ b/gdb/proc-service.list
+@@ -37,4 +37,7 @@
+   ps_pstop;
+   ps_ptread;
+   ps_ptwrite;
++
++  /* gdb-6.6-buildid-locate-rpm.patch */
++  rpmsqEnable;
+ };
diff --git a/SOURCES/gdb-6.6-buildid-locate-rpm-scl.patch b/SOURCES/gdb-6.6-buildid-locate-rpm-scl.patch
new file mode 100644
index 0000000..7e39488
--- /dev/null
+++ b/SOURCES/gdb-6.6-buildid-locate-rpm-scl.patch
@@ -0,0 +1,129 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.6-buildid-locate-rpm-scl.patch
+
+;; [SCL] Skip deprecated .gdb_index warning for Red Hat built files (BZ 953585).
+;;=push+jan
+
+warning: Skipping deprecated .gdb_index section
+https://bugzilla.redhat.com/show_bug.cgi?id=953585
+
+diff --git a/gdb/build-id.c b/gdb/build-id.c
+--- a/gdb/build-id.c
++++ b/gdb/build-id.c
+@@ -689,7 +689,11 @@ static int missing_rpm_list_entries;
+ /* Returns the count of newly added rpms.  */
+ 
+ static int
++#ifndef GDB_INDEX_VERIFY_VENDOR
+ missing_rpm_enlist (const char *filename)
++#else
++missing_rpm_enlist_1 (const char *filename, int verify_vendor)
++#endif
+ {
+   static int rpm_init_done = 0;
+   rpmts ts;
+@@ -796,7 +800,11 @@ missing_rpm_enlist (const char *filename)
+   mi = rpmtsInitIterator_p (ts, RPMTAG_BASENAMES, filename, 0);
+   if (mi != NULL)
+     {
++#ifndef GDB_INDEX_VERIFY_VENDOR
+       for (;;)
++#else
++      if (!verify_vendor) for (;;)
++#endif
+ 	{
+ 	  Header h;
+ 	  char *debuginfo, **slot, *s, *s2;
+@@ -914,6 +922,37 @@ missing_rpm_enlist (const char *filename)
+ 	    xfree (debuginfo);
+ 	  count++;
+ 	}
++#ifdef GDB_INDEX_VERIFY_VENDOR
++      else /* verify_vendor */
++	{
++	  int vendor_pass = 0, vendor_fail = 0;
++
++	  for (;;)
++	    {
++	      Header h;
++	      errmsg_t err;
++	      char *vendor;
++
++	      h = rpmdbNextIterator_p (mi);
++	      if (h == NULL)
++		break;
++
++	      vendor = headerFormat_p (h, "%{vendor}", &err);
++	      if (!vendor)
++		{
++		  warning (_("Error querying the rpm file `%s': %s"), filename,
++			   err);
++		  continue;
++		}
++	      if (strcmp (vendor, "Red Hat, Inc.") == 0)
++		vendor_pass = 1;
++	      else
++		vendor_fail = 1;
++	      xfree (vendor);
++	    }
++	  count = vendor_pass != 0 && vendor_fail == 0;
++	}
++#endif
+ 
+       rpmdbFreeIterator_p (mi);
+     }
+@@ -924,6 +963,21 @@ missing_rpm_enlist (const char *filename)
+ }
+ 
+ static int
++#ifdef GDB_INDEX_VERIFY_VENDOR
++missing_rpm_enlist (const char *filename)
++{
++  return missing_rpm_enlist_1 (filename, 0);
++}
++
++extern int rpm_verify_vendor (const char *filename);
++int
++rpm_verify_vendor (const char *filename)
++{
++  return missing_rpm_enlist_1 (filename, 1);
++}
++
++static int
++#endif
+ missing_rpm_list_compar (const char *const *ap, const char *const *bp)
+ {
+   return strcoll (*ap, *bp);
+diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
+--- a/gdb/dwarf2read.c
++++ b/gdb/dwarf2read.c
+@@ -3469,6 +3469,16 @@ read_gdb_index_from_section (struct objfile *objfile,
+      "set use-deprecated-index-sections on".  */
+   if (version < 6 && !deprecated_ok)
+     {
++#ifdef GDB_INDEX_VERIFY_VENDOR
++      extern int rpm_verify_vendor (const char *filename);
++
++      /* Red Hat Developer Toolset exception.  */
++      if (rpm_verify_vendor (filename))
++	{}
++      else
++      {
++
++#endif
+       static int warning_printed = 0;
+       if (!warning_printed)
+ 	{
+@@ -3480,6 +3490,10 @@ to use the section anyway."),
+ 	  warning_printed = 1;
+ 	}
+       return 0;
++#ifdef GDB_INDEX_VERIFY_VENDOR
++
++      }
++#endif
+     }
+   /* Version 7 indices generated by gold refer to the CU for a symbol instead
+      of the TU (for symbols coming from TUs),
diff --git a/SOURCES/gdb-6.6-buildid-locate-rpm.patch b/SOURCES/gdb-6.6-buildid-locate-rpm.patch
new file mode 100644
index 0000000..d5ec4b0
--- /dev/null
+++ b/SOURCES/gdb-6.6-buildid-locate-rpm.patch
@@ -0,0 +1,1514 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.6-buildid-locate-rpm.patch
+
+;;=push+jan
+
+diff --git a/gdb/aclocal.m4 b/gdb/aclocal.m4
+--- a/gdb/aclocal.m4
++++ b/gdb/aclocal.m4
+@@ -11,7 +11,223 @@
+ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ # PARTICULAR PURPOSE.
+ 
++# pkg.m4 - Macros to locate and utilise pkg-config.            -*- Autoconf -*-
++# serial 1 (pkg-config-0.24)
++# 
++# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
++#
++# 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++#
++# As a special exception to the GNU General Public License, if you
++# distribute this file as part of a program that contains a
++# configuration script generated by Autoconf, you may include it under
++# the same distribution terms that you use for the rest of that program.
++
++# PKG_PROG_PKG_CONFIG([MIN-VERSION])
++# ----------------------------------
++AC_DEFUN([PKG_PROG_PKG_CONFIG],
++[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
++m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$])
++m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$])
++AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])
++AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path])
++AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path])
++
++if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
++	AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
++fi
++if test -n "$PKG_CONFIG"; then
++	_pkg_min_version=m4_default([$1], [0.9.0])
++	AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
++	if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
++		AC_MSG_RESULT([yes])
++	else
++		AC_MSG_RESULT([no])
++		PKG_CONFIG=""
++	fi
++fi[]dnl
++])# PKG_PROG_PKG_CONFIG
++
++# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
++#
++# Check to see whether a particular set of modules exists.  Similar
++# to PKG_CHECK_MODULES(), but does not set variables or print errors.
++#
++# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
++# only at the first occurence in configure.ac, so if the first place
++# it's called might be skipped (such as if it is within an "if", you
++# have to call PKG_CHECK_EXISTS manually
++# --------------------------------------------------------------
++AC_DEFUN([PKG_CHECK_EXISTS],
++[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
++if test -n "$PKG_CONFIG" && \
++    AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
++  m4_default([$2], [:])
++m4_ifvaln([$3], [else
++  $3])dnl
++fi])
++
++# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
++# ---------------------------------------------
++m4_define([_PKG_CONFIG],
++[if test -n "$$1"; then
++    pkg_cv_[]$1="$$1"
++ elif test -n "$PKG_CONFIG"; then
++    PKG_CHECK_EXISTS([$3],
++                     [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`
++		      test "x$?" != "x0" && pkg_failed=yes ],
++		     [pkg_failed=yes])
++ else
++    pkg_failed=untried
++fi[]dnl
++])# _PKG_CONFIG
++
++# _PKG_SHORT_ERRORS_SUPPORTED
++# -----------------------------
++AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
++[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
++if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
++        _pkg_short_errors_supported=yes
++else
++        _pkg_short_errors_supported=no
++fi[]dnl
++])# _PKG_SHORT_ERRORS_SUPPORTED
++
++
++# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
++# [ACTION-IF-NOT-FOUND])
++#
++#
++# Note that if there is a possibility the first call to
++# PKG_CHECK_MODULES might not happen, you should be sure to include an
++# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
++#
++#
++# --------------------------------------------------------------
++AC_DEFUN([PKG_CHECK_MODULES],
++[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
++AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
++AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
++
++pkg_failed=no
++AC_MSG_CHECKING([for $1])
++
++_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
++_PKG_CONFIG([$1][_LIBS], [libs], [$2])
++
++m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
++and $1[]_LIBS to avoid the need to call pkg-config.
++See the pkg-config man page for more details.])
++
++if test $pkg_failed = yes; then
++   	AC_MSG_RESULT([no])
++        _PKG_SHORT_ERRORS_SUPPORTED
++        if test $_pkg_short_errors_supported = yes; then
++	        $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1`
++        else 
++	        $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1`
++        fi
++	# Put the nasty error message in config.log where it belongs
++	echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
++
++	m4_default([$4], [AC_MSG_ERROR(
++[Package requirements ($2) were not met:
++
++$$1_PKG_ERRORS
++
++Consider adjusting the PKG_CONFIG_PATH environment variable if you
++installed software in a non-standard prefix.
++
++_PKG_TEXT])[]dnl
++        ])
++elif test $pkg_failed = untried; then
++     	AC_MSG_RESULT([no])
++	m4_default([$4], [AC_MSG_FAILURE(
++[The pkg-config script could not be found or is too old.  Make sure it
++is in your PATH or set the PKG_CONFIG environment variable to the full
++path to pkg-config.
++
++_PKG_TEXT
++
++To get pkg-config, see <http://pkg-config.freedesktop.org/>.])[]dnl
++        ])
++else
++	$1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
++	$1[]_LIBS=$pkg_cv_[]$1[]_LIBS
++        AC_MSG_RESULT([yes])
++	$3
++fi[]dnl
++])# PKG_CHECK_MODULES
++
++
++# PKG_INSTALLDIR(DIRECTORY)
++# -------------------------
++# Substitutes the variable pkgconfigdir as the location where a module
++# should install pkg-config .pc files. By default the directory is
++# $libdir/pkgconfig, but the default can be changed by passing
++# DIRECTORY. The user can override through the --with-pkgconfigdir
++# parameter.
++AC_DEFUN([PKG_INSTALLDIR],
++[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])])
++m4_pushdef([pkg_description],
++    [pkg-config installation directory @<:@]pkg_default[@:>@])
++AC_ARG_WITH([pkgconfigdir],
++    [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],,
++    [with_pkgconfigdir=]pkg_default)
++AC_SUBST([pkgconfigdir], [$with_pkgconfigdir])
++m4_popdef([pkg_default])
++m4_popdef([pkg_description])
++]) dnl PKG_INSTALLDIR
++
++
++# PKG_NOARCH_INSTALLDIR(DIRECTORY)
++# -------------------------
++# Substitutes the variable noarch_pkgconfigdir as the location where a
++# module should install arch-independent pkg-config .pc files. By
++# default the directory is $datadir/pkgconfig, but the default can be
++# changed by passing DIRECTORY. The user can override through the
++# --with-noarch-pkgconfigdir parameter.
++AC_DEFUN([PKG_NOARCH_INSTALLDIR],
++[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])])
++m4_pushdef([pkg_description],
++    [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@])
++AC_ARG_WITH([noarch-pkgconfigdir],
++    [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],,
++    [with_noarch_pkgconfigdir=]pkg_default)
++AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir])
++m4_popdef([pkg_default])
++m4_popdef([pkg_description])
++]) dnl PKG_NOARCH_INSTALLDIR
++
++
++# PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE,
++# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
++# -------------------------------------------
++# Retrieves the value of the pkg-config variable for the given module.
++AC_DEFUN([PKG_CHECK_VAR],
++[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
++AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl
++
++_PKG_CONFIG([$1], [variable="][$3]["], [$2])
++AS_VAR_COPY([$1], [pkg_cv_][$1])
++
++AS_VAR_IF([$1], [""], [$5], [$4])dnl
++])# PKG_CHECK_VAR
++
+ m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
++
+ # AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
+ 
+ # Copyright (C) 2001-2017 Free Software Foundation, Inc.
+diff --git a/gdb/build-id.c b/gdb/build-id.c
+--- a/gdb/build-id.c
++++ b/gdb/build-id.c
+@@ -35,6 +35,8 @@
+ #include "elf/common.h"
+ #include "elf-bfd.h"
+ #include <sys/stat.h>
++#include "elf/external.h"
++#include "inferior.h"
+ 
+ #define BUILD_ID_VERBOSE_NONE 0
+ #define BUILD_ID_VERBOSE_FILENAMES 1
+@@ -640,8 +642,366 @@ build_id_to_filename (const struct bfd_build_id *build_id, char **link_return)
+   return result;
+ }
+ 
++#ifdef HAVE_LIBRPM
++
++#include <rpm/rpmlib.h>
++#include <rpm/rpmts.h>
++#include <rpm/rpmdb.h>
++#include <rpm/header.h>
++#ifdef DLOPEN_LIBRPM
++#include <dlfcn.h>
++#endif
++
++/* This MISSING_RPM_HASH tracker is used to collect all the missing rpm files
++   and avoid their duplicities during a single inferior run.  */
++
++static struct htab *missing_rpm_hash;
++
++/* This MISSING_RPM_LIST tracker is used to collect and print as a single line
++   all the rpms right before the nearest GDB prompt.  It gets cleared after
++   each such print (it is questionable if we should clear it after the print).
++   */
++
++struct missing_rpm
++  {
++    struct missing_rpm *next;
++    char rpm[1];
++  };
++static struct missing_rpm *missing_rpm_list;
++static int missing_rpm_list_entries;
++
++/* Returns the count of newly added rpms.  */
++
++static int
++missing_rpm_enlist (const char *filename)
++{
++  static int rpm_init_done = 0;
++  rpmts ts;
++  rpmdbMatchIterator mi;
++  int count = 0;
++
++#ifdef DLOPEN_LIBRPM
++  /* Duplicate here the declarations to verify they match.  The same sanity
++     check is present also in `configure.ac'.  */
++  extern char * headerFormat(Header h, const char * fmt, errmsg_t * errmsg);
++  static char *(*headerFormat_p) (Header h, const char * fmt, errmsg_t *errmsg);
++  extern int rpmReadConfigFiles(const char * file, const char * target);
++  static int (*rpmReadConfigFiles_p) (const char * file, const char * target);
++  extern rpmdbMatchIterator rpmdbFreeIterator(rpmdbMatchIterator mi);
++  static rpmdbMatchIterator (*rpmdbFreeIterator_p) (rpmdbMatchIterator mi);
++  extern Header rpmdbNextIterator(rpmdbMatchIterator mi);
++  static Header (*rpmdbNextIterator_p) (rpmdbMatchIterator mi);
++  extern rpmts rpmtsCreate(void);
++  static rpmts (*rpmtsCreate_p) (void);
++  extern rpmts rpmtsFree(rpmts ts);
++  static rpmts (*rpmtsFree_p) (rpmts ts);
++  extern rpmdbMatchIterator rpmtsInitIterator(const rpmts ts, rpmTag rpmtag,
++                                              const void * keyp, size_t keylen);
++  static rpmdbMatchIterator (*rpmtsInitIterator_p) (const rpmts ts,
++						    rpmTag rpmtag,
++						    const void *keyp,
++						    size_t keylen);
++#else	/* !DLOPEN_LIBRPM */
++# define headerFormat_p headerFormat
++# define rpmReadConfigFiles_p rpmReadConfigFiles
++# define rpmdbFreeIterator_p rpmdbFreeIterator
++# define rpmdbNextIterator_p rpmdbNextIterator
++# define rpmtsCreate_p rpmtsCreate
++# define rpmtsFree_p rpmtsFree
++# define rpmtsInitIterator_p rpmtsInitIterator
++#endif	/* !DLOPEN_LIBRPM */
++
++  gdb_assert (filename != NULL);
++
++  if (strcmp (filename, BUILD_ID_MAIN_EXECUTABLE_FILENAME) == 0)
++    return 0;
++
++  if (is_target_filename (filename))
++    return 0;
++
++  if (filename[0] != '/')
++    {
++      warning (_("Ignoring non-absolute filename: <%s>"), filename);
++      return 0;
++    }
++
++  if (!rpm_init_done)
++    {
++      static int init_tried;
++
++      /* Already failed the initialization before?  */
++      if (init_tried)
++      	return 0;
++      init_tried = 1;
++
++#ifdef DLOPEN_LIBRPM
++      {
++	void *h;
++
++	h = dlopen (DLOPEN_LIBRPM, RTLD_LAZY);
++	if (!h)
++	  {
++	    warning (_("Unable to open \"%s\" (%s), "
++		      "missing debuginfos notifications will not be displayed"),
++		     DLOPEN_LIBRPM, dlerror ());
++	    return 0;
++	  }
++
++	if (!((headerFormat_p = (char *(*) (Header h, const char * fmt, errmsg_t *errmsg)) dlsym (h, "headerFormat"))
++	      && (rpmReadConfigFiles_p = (int (*) (const char * file, const char * target)) dlsym (h, "rpmReadConfigFiles"))
++	      && (rpmdbFreeIterator_p = (rpmdbMatchIterator (*) (rpmdbMatchIterator mi)) dlsym (h, "rpmdbFreeIterator"))
++	      && (rpmdbNextIterator_p = (Header (*) (rpmdbMatchIterator mi)) dlsym (h, "rpmdbNextIterator"))
++	      && (rpmtsCreate_p = (rpmts (*) (void)) dlsym (h, "rpmtsCreate"))
++	      && (rpmtsFree_p = (rpmts (*) (rpmts ts)) dlsym (h, "rpmtsFree"))
++	      && (rpmtsInitIterator_p = (rpmdbMatchIterator (*) (const rpmts ts, rpmTag rpmtag, const void *keyp, size_t keylen)) dlsym (h, "rpmtsInitIterator"))))
++	  {
++	    warning (_("Opened library \"%s\" is incompatible (%s), "
++		      "missing debuginfos notifications will not be displayed"),
++		     DLOPEN_LIBRPM, dlerror ());
++	    if (dlclose (h))
++	      warning (_("Error closing library \"%s\": %s\n"), DLOPEN_LIBRPM,
++		       dlerror ());
++	    return 0;
++	  }
++      }
++#endif	/* DLOPEN_LIBRPM */
++
++      if (rpmReadConfigFiles_p (NULL, NULL) != 0)
++	{
++	  warning (_("Error reading the rpm configuration files"));
++	  return 0;
++	}
++
++      rpm_init_done = 1;
++    }
++
++  ts = rpmtsCreate_p ();
++
++  mi = rpmtsInitIterator_p (ts, RPMTAG_BASENAMES, filename, 0);
++  if (mi != NULL)
++    {
++      for (;;)
++	{
++	  Header h;
++	  char *debuginfo, **slot, *s, *s2;
++	  errmsg_t err;
++	  size_t srcrpmlen = sizeof (".src.rpm") - 1;
++	  size_t debuginfolen = sizeof ("-debuginfo") - 1;
++	  rpmdbMatchIterator mi_debuginfo;
++
++	  h = rpmdbNextIterator_p (mi);
++	  if (h == NULL)
++	    break;
++
++	  /* Verify the debuginfo file is not already installed.  */
++
++	  debuginfo = headerFormat_p (h, "%{sourcerpm}-debuginfo.%{arch}",
++				      &err);
++	  if (!debuginfo)
++	    {
++	      warning (_("Error querying the rpm file `%s': %s"), filename,
++	               err);
++	      continue;
++	    }
++	  /* s = `.src.rpm-debuginfo.%{arch}' */
++	  s = strrchr (debuginfo, '-') - srcrpmlen;
++	  s2 = NULL;
++	  if (s > debuginfo && memcmp (s, ".src.rpm", srcrpmlen) == 0)
++	    {
++	      /* s2 = `-%{release}.src.rpm-debuginfo.%{arch}' */
++	      s2 = (char *) memrchr (debuginfo, '-', s - debuginfo);
++	    }
++	  if (s2)
++	    {
++	      /* s2 = `-%{version}-%{release}.src.rpm-debuginfo.%{arch}' */
++	      s2 = (char *) memrchr (debuginfo, '-', s2 - debuginfo);
++	    }
++	  if (!s2)
++	    {
++	      warning (_("Error querying the rpm file `%s': %s"), filename,
++	               debuginfo);
++	      xfree (debuginfo);
++	      continue;
++	    }
++	  /* s = `.src.rpm-debuginfo.%{arch}' */
++	  /* s2 = `-%{version}-%{release}.src.rpm-debuginfo.%{arch}' */
++	  memmove (s2 + debuginfolen, s2, s - s2);
++	  memcpy (s2, "-debuginfo", debuginfolen);
++	  /* s = `XXXX.%{arch}' */
++	  /* strlen ("XXXX") == srcrpmlen + debuginfolen */
++	  /* s2 = `-debuginfo-%{version}-%{release}XX.%{arch}' */
++	  /* strlen ("XX") == srcrpmlen */
++	  memmove (s + debuginfolen, s + srcrpmlen + debuginfolen,
++		   strlen (s + srcrpmlen + debuginfolen) + 1);
++	  /* s = `-debuginfo-%{version}-%{release}.%{arch}' */
++
++	  /* RPMDBI_PACKAGES requires keylen == sizeof (int).  */
++	  /* RPMDBI_LABEL is an interface for NVR-based dbiFindByLabel().  */
++	  mi_debuginfo = rpmtsInitIterator_p (ts, (rpmTag) RPMDBI_LABEL, debuginfo, 0);
++	  xfree (debuginfo);
++	  if (mi_debuginfo)
++	    {
++	      rpmdbFreeIterator_p (mi_debuginfo);
++	      count = 0;
++	      break;
++	    }
++
++	  /* The allocated memory gets utilized below for MISSING_RPM_HASH.  */
++	  debuginfo = headerFormat_p (h,
++				      "%{name}-%{version}-%{release}.%{arch}",
++				      &err);
++	  if (!debuginfo)
++	    {
++	      warning (_("Error querying the rpm file `%s': %s"), filename,
++	               err);
++	      continue;
++	    }
++
++	  /* Base package name for `debuginfo-install'.  We do not use the
++	     `yum' command directly as the line
++		 yum --enablerepo='*debug*' install NAME-debuginfo.ARCH
++	     would be more complicated than just:
++		 debuginfo-install NAME-VERSION-RELEASE.ARCH
++	     Do not supply the rpm base name (derived from .src.rpm name) as
++	     debuginfo-install is unable to install the debuginfo package if
++	     the base name PKG binary rpm is not installed while for example
++	     PKG-libs would be installed (RH Bug 467901).
++	     FUTURE: After multiple debuginfo versions simultaneously installed
++	     get supported the support for the VERSION-RELEASE tags handling
++	     may need an update.  */
++
++	  if (missing_rpm_hash == NULL)
++	    {
++	      /* DEL_F is passed NULL as MISSING_RPM_LIST's HTAB_DELETE
++		 should not deallocate the entries.  */
++
++	      missing_rpm_hash = htab_create_alloc (64, htab_hash_string,
++			       (int (*) (const void *, const void *)) streq,
++						    NULL, xcalloc, xfree);
++	    }
++	  slot = (char **) htab_find_slot (missing_rpm_hash, debuginfo, INSERT);
++	  /* XCALLOC never returns NULL.  */
++	  gdb_assert (slot != NULL);
++	  if (*slot == NULL)
++	    {
++	      struct missing_rpm *missing_rpm;
++
++	      *slot = debuginfo;
++
++	      missing_rpm = (struct missing_rpm *) xmalloc (sizeof (*missing_rpm) + strlen (debuginfo));
++	      strcpy (missing_rpm->rpm, debuginfo);
++	      missing_rpm->next = missing_rpm_list;
++	      missing_rpm_list = missing_rpm;
++	      missing_rpm_list_entries++;
++	    }
++	  else
++	    xfree (debuginfo);
++	  count++;
++	}
++
++      rpmdbFreeIterator_p (mi);
++    }
++
++  rpmtsFree_p (ts);
++
++  return count;
++}
++
++static int
++missing_rpm_list_compar (const char *const *ap, const char *const *bp)
++{
++  return strcoll (*ap, *bp);
++}
++
++/* It returns a NULL-terminated array of strings needing to be FREEd.  It may
++   also return only NULL.  */
++
++static void
++missing_rpm_list_print (void)
++{
++  char **array, **array_iter;
++  struct missing_rpm *list_iter;
++  struct cleanup *cleanups;
++
++  if (missing_rpm_list_entries == 0)
++    return;
++
++  array = (char **) xmalloc (sizeof (*array) * missing_rpm_list_entries);
++  cleanups = make_cleanup (xfree, array);
++
++  array_iter = array;
++  for (list_iter = missing_rpm_list; list_iter != NULL;
++       list_iter = list_iter->next)
++    {
++      *array_iter++ = list_iter->rpm;
++    }
++  gdb_assert (array_iter == array + missing_rpm_list_entries);
++
++  qsort (array, missing_rpm_list_entries, sizeof (*array),
++	 (int (*) (const void *, const void *)) missing_rpm_list_compar);
++
++  printf_unfiltered (_("Missing separate debuginfos, use: %s"),
++#ifdef DNF_DEBUGINFO_INSTALL
++		     "dnf "
++#endif
++		     "debuginfo-install");
++  for (array_iter = array; array_iter < array + missing_rpm_list_entries;
++       array_iter++)
++    {
++      putchar_unfiltered (' ');
++      puts_unfiltered (*array_iter);
++    }
++  putchar_unfiltered ('\n');
++
++  while (missing_rpm_list != NULL)
++    {
++      list_iter = missing_rpm_list;
++      missing_rpm_list = list_iter->next;
++      xfree (list_iter);
++    }
++  missing_rpm_list_entries = 0;
++
++  do_cleanups (cleanups);
++}
++
++static void
++missing_rpm_change (void)
++{
++  debug_flush_missing ();
++
++  gdb_assert (missing_rpm_list == NULL);
++  if (missing_rpm_hash != NULL)
++    {
++      htab_delete (missing_rpm_hash);
++      missing_rpm_hash = NULL;
++    }
++}
++
++enum missing_exec
++  {
++    /* Init state.  EXEC_BFD also still could be NULL.  */
++    MISSING_EXEC_NOT_TRIED,
++    /* We saw a non-NULL EXEC_BFD but RPM has no info about it.  */
++    MISSING_EXEC_NOT_FOUND,
++    /* We found EXEC_BFD by RPM and we either have its symbols (either embedded
++       or separate) or the main executable's RPM is now contained in
++       MISSING_RPM_HASH.  */
++    MISSING_EXEC_ENLISTED
++  };
++static enum missing_exec missing_exec = MISSING_EXEC_NOT_TRIED;
++
++#endif	/* HAVE_LIBRPM */
++
++void
++debug_flush_missing (void)
++{
++#ifdef HAVE_LIBRPM
++  missing_rpm_list_print ();
++#endif
++}
++
+ /* This MISSING_FILEPAIR_HASH tracker is used only for the duplicite messages
+-     Try to install the hash file ...
++     yum --enablerepo='*debug*' install ...
+    avoidance.  */
+ 
+ struct missing_filepair
+@@ -695,11 +1055,17 @@ missing_filepair_change (void)
+       /* All their memory came just from missing_filepair_OBSTACK.  */
+       missing_filepair_hash = NULL;
+     }
++#ifdef HAVE_LIBRPM
++  missing_exec = MISSING_EXEC_NOT_TRIED;
++#endif
+ }
+ 
+ static void
+ debug_print_executable_changed (void)
+ {
++#ifdef HAVE_LIBRPM
++  missing_rpm_change ();
++#endif
+   missing_filepair_change ();
+ }
+ 
+@@ -766,14 +1132,39 @@ debug_print_missing (const char *binary, const char *debug)
+ 
+   *slot = missing_filepair;
+ 
+-  /* We do not collect and flush these messages as each such message
+-     already requires its own separate lines.  */
++#ifdef HAVE_LIBRPM
++  if (missing_exec == MISSING_EXEC_NOT_TRIED)
++    {
++      char *execfilename;
+ 
+-  fprintf_unfiltered (gdb_stdlog,
+-		      _("Missing separate debuginfo for %s\n"), binary);
+-  if (debug != NULL)
+-    fprintf_unfiltered (gdb_stdlog, _("Try to install the hash file %s\n"),
+-			debug);
++      execfilename = get_exec_file (0);
++      if (execfilename != NULL)
++	{
++	  if (missing_rpm_enlist (execfilename) == 0)
++	    missing_exec = MISSING_EXEC_NOT_FOUND;
++	  else
++	    missing_exec = MISSING_EXEC_ENLISTED;
++	}
++    }
++  if (missing_exec != MISSING_EXEC_ENLISTED)
++    if ((binary[0] == 0 || missing_rpm_enlist (binary) == 0)
++	&& (debug == NULL || missing_rpm_enlist (debug) == 0))
++#endif	/* HAVE_LIBRPM */
++      {
++	/* We do not collect and flush these messages as each such message
++	   already requires its own separate lines.  */
++
++	fprintf_unfiltered (gdb_stdlog,
++			    _("Missing separate debuginfo for %s\n"), binary);
++        if (debug != NULL)
++	  fprintf_unfiltered (gdb_stdlog, _("Try: %s %s\n"),
++#ifdef DNF_DEBUGINFO_INSTALL
++			      "dnf"
++#else
++			      "yum"
++#endif
++			      " --enablerepo='*debug*' install", debug);
++      }
+ }
+ 
+ /* See build-id.h.  */
+diff --git a/gdb/config.in b/gdb/config.in
+--- a/gdb/config.in
++++ b/gdb/config.in
+@@ -33,6 +33,9 @@
+ /* Define to BFD's default target vector. */
+ #undef DEFAULT_BFD_VEC
+ 
++/* librpm version specific library name to dlopen. */
++#undef DLOPEN_LIBRPM
++
+ /* Define to 1 if translation of program messages to the user's native
+    language is requested. */
+ #undef ENABLE_NLS
+@@ -270,6 +273,9 @@
+ /* Define if Python 2.7 is being used. */
+ #undef HAVE_LIBPYTHON2_7
+ 
++/* Define if librpm library is being used. */
++#undef HAVE_LIBRPM
++
+ /* Define to 1 if you have the <libunwind-ia64.h> header file. */
+ #undef HAVE_LIBUNWIND_IA64_H
+ 
+diff --git a/gdb/configure b/gdb/configure
+--- a/gdb/configure
++++ b/gdb/configure
+@@ -749,6 +749,11 @@ CODESIGN_CERT
+ HAVE_NATIVE_GCORE_TARGET
+ TARGET_OBS
+ subdirs
++RPM_LIBS
++RPM_CFLAGS
++PKG_CONFIG_LIBDIR
++PKG_CONFIG_PATH
++PKG_CONFIG
+ GDB_DATADIR
+ DEBUGDIR
+ MAKEINFO_EXTRA_FLAGS
+@@ -853,6 +858,7 @@ with_gdb_datadir
+ with_relocated_sources
+ with_auto_load_dir
+ with_auto_load_safe_path
++with_rpm
+ enable_targets
+ enable_64_bit_bfd
+ enable_gdbcli
+@@ -912,6 +918,11 @@ CCC
+ CPP
+ MAKEINFO
+ MAKEINFOFLAGS
++PKG_CONFIG
++PKG_CONFIG_PATH
++PKG_CONFIG_LIBDIR
++RPM_CFLAGS
++RPM_LIBS
+ YACC
+ YFLAGS
+ XMKMF'
+@@ -1583,6 +1594,8 @@ Optional Packages:
+                           [--with-auto-load-dir]
+   --without-auto-load-safe-path
+                           do not restrict auto-loaded files locations
++  --with-rpm              query rpm database for missing debuginfos (yes/no,
++                          def. auto=librpm.so)
+   --with-libunwind-ia64   use libunwind frame unwinding for ia64 targets
+   --with-curses           use the curses library instead of the termcap
+                           library
+@@ -1640,6 +1653,13 @@ Some influential environment variables:
+   MAKEINFO    Parent configure detects if it is of sufficient version.
+   MAKEINFOFLAGS
+               Parameters for MAKEINFO.
++  PKG_CONFIG  path to pkg-config utility
++  PKG_CONFIG_PATH
++              directories to add to pkg-config's search path
++  PKG_CONFIG_LIBDIR
++              path overriding pkg-config's built-in search path
++  RPM_CFLAGS  C compiler flags for RPM, overriding pkg-config
++  RPM_LIBS    linker flags for RPM, overriding pkg-config
+   YACC        The `Yet Another Compiler Compiler' implementation to use.
+               Defaults to the first program found out of: `bison -y', `byacc',
+               `yacc'.
+@@ -6575,6 +6595,494 @@ _ACEOF
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_auto_load_safe_path" >&5
+ $as_echo "$with_auto_load_safe_path" >&6; }
+ 
++# Integration with rpm library to support missing debuginfo suggestions.
++# --without-rpm: Disable any rpm support.
++# --with-rpm=libname.so: Try to dynamically open `libname.so' during runtime.
++#   Even with runtime missing `libname.so' GDB will still other run correctly.
++#   Missing `libname.so' during ./configure will abort the configuration.
++# --with-rpm=librpm.so: Like `--with-rpm=libname.so' but try to find specific
++#   minor version first such as `librpm-4.6.so' as minor version differences
++#   mean API+ABI incompatibility.  If the specific match versioned library name
++#   could not be found still open dynamically at least `librpm.so'.
++# --with-rpm: Like `--with-rpm=librpm.so' but if any of its detection fails try
++#   to find librpm for compilation-time linking by pkg-config.  GDB binary will
++#   be probably linked with the version specific library (as `librpm-4.6.so').
++#   Failure to find librpm by pkg-config will abort the configuration.
++# (default) --with-rpm=auto: Like `--with-rpm=librpm.so' but if even pkg-config
++#   cannot find librpm use to the rpmless compilation (like `--without-rpm').
++
++
++# Check whether --with-rpm was given.
++if test "${with_rpm+set}" = set; then :
++  withval=$with_rpm;
++else
++  with_rpm="auto"
++fi
++
++
++
++
++if test "x$with_rpm" != "xno"; then
++  if test "x$with_rpm" = "xyes"; then
++    LIBRPM="librpm.so"
++    RPM_REQUIRE=true
++    DLOPEN_REQUIRE=false
++  elif test "x$with_rpm" = "xauto"; then
++    LIBRPM="librpm.so"
++    RPM_REQUIRE=false
++    DLOPEN_REQUIRE=false
++  else
++    LIBRPM="$with_rpm"
++    RPM_REQUIRE=true
++    DLOPEN_REQUIRE=true
++  fi
++  LIBRPM_STRING='"'"$LIBRPM"'"'
++
++  { $as_echo "$as_me:${as_lineno-$LINENO}: checking specific librpm version" >&5
++$as_echo_n "checking specific librpm version... " >&6; }
++  HAVE_DLOPEN_LIBRPM=false
++  save_LIBS="$LIBS"
++  LIBS="$LIBS -ldl"
++  if test "$cross_compiling" = yes; then :
++  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
++as_fn_error "cannot run test program while cross compiling
++See \`config.log' for more details." "$LINENO" 5; }
++else
++  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++
++#include <rpm/rpmlib.h>
++#include <dlfcn.h>
++#include <errno.h>
++
++int
++main ()
++{
++
++    void *h;
++    const char *const *rpmverp;
++    FILE *f;
++
++    f = fopen ("conftest.out", "w");
++    if (!f)
++      {
++	fprintf (stderr, "Cannot write \"%s\": %s\n", "conftest.out",
++		 strerror (errno));
++	return 1;
++      }
++    h = dlopen ($LIBRPM_STRING, RTLD_LAZY);
++    if (!h)
++      {
++	fprintf (stderr, "dlopen (\"%s\"): %s\n", $LIBRPM_STRING, dlerror ());
++	return 1;
++      }
++    rpmverp = dlsym (h, "RPMVERSION");
++    if (!rpmverp)
++      {
++	fprintf (stderr, "dlsym (\"RPMVERSION\"): %s\n", dlerror ());
++	return 1;
++      }
++    fprintf (stderr, "RPMVERSION is: \"");
++    fprintf (stderr, "%s\"\n", *rpmverp);
++
++    /* Try to find the specific librpm version only for "librpm.so" as we do
++       not know how to assemble the version string otherwise.  */
++
++    if (strcmp ("librpm.so", $LIBRPM_STRING) != 0)
++      {
++	fprintf (f, "%s\n", $LIBRPM_STRING);
++	return 0;
++      }
++    else
++      {
++	char *h2_name;
++	void *h2;
++	int major, minor;
++
++	if (sscanf (*rpmverp, "%d.%d", &major, &minor) != 2)
++	  {
++	    fprintf (stderr, "Unable to parse RPMVERSION.\n");
++	    fprintf (f, "%s\n", $LIBRPM_STRING);
++	    return 0;
++	  }
++	/* Avoid the square brackets by malloc.  */
++	h2_name = malloc (64);
++	sprintf (h2_name, "librpm-%d.%d.so", major, minor);
++	h2 = dlopen (h2_name, RTLD_LAZY);
++	if (!h2)
++	  {
++	    fprintf (stderr, "dlopen (\"%s\"): %s\n", h2_name, dlerror ());
++	    fprintf (f, "%s\n", $LIBRPM_STRING);
++	    return 0;
++	  }
++	if (h2 != h)
++	  {
++	    fprintf (stderr, "dlopen of \"%s\" and \"%s\" are different.\n",
++		     $LIBRPM_STRING, h2_name);
++	    fprintf (f, "%s\n", $LIBRPM_STRING);
++	    return 0;
++	  }
++	/* Found the valid .so name with a specific version.  */
++	fprintf (f, "%s\n", h2_name);
++	return 0;
++      }
++
++  ;
++  return 0;
++}
++_ACEOF
++if ac_fn_c_try_run "$LINENO"; then :
++
++    DLOPEN_LIBRPM="`cat conftest.out`"
++    if test "x$DLOPEN_LIBRPM" != "x"; then
++      HAVE_DLOPEN_LIBRPM=true
++      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLOPEN_LIBRPM" >&5
++$as_echo "$DLOPEN_LIBRPM" >&6; }
++    fi
++
++fi
++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
++  conftest.$ac_objext conftest.beam conftest.$ac_ext
++fi
++
++  rm -f conftest.out
++
++
++
++  if $HAVE_DLOPEN_LIBRPM; then
++
++    { $as_echo "$as_me:${as_lineno-$LINENO}: checking rpm library API compatibility" >&5
++$as_echo_n "checking rpm library API compatibility... " >&6; }
++    # The compilation requires -Werror to verify anything.
++    save_CFLAGS="$CFLAGS"
++    CFLAGS="$CFLAGS -Werror"
++    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++
++/* Duplicate here the declarations to verify they match "elfread.c".  */
++#include <rpm/rpmlib.h>
++#include <rpm/rpmts.h>
++#include <rpm/rpmdb.h>
++#include <rpm/header.h>
++extern char * headerFormat(Header h, const char * fmt, errmsg_t * errmsg);
++extern int rpmReadConfigFiles(const char * file, const char * target);
++extern rpmdbMatchIterator rpmdbFreeIterator(rpmdbMatchIterator mi);
++extern Header rpmdbNextIterator(rpmdbMatchIterator mi);
++extern rpmts rpmtsCreate(void);
++extern rpmts rpmtsFree(rpmts ts);
++extern rpmdbMatchIterator rpmtsInitIterator(const rpmts ts, rpmTag rpmtag,
++					    const void * keyp, size_t keylen);
++
++int
++main ()
++{
++
++  ;
++  return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++
++      LIBRPM_COMPAT=true
++      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
++$as_echo "yes" >&6; }
++
++else
++
++      LIBRPM_COMPAT=false
++      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++    CFLAGS="$save_CFLAGS"
++
++    if ! $LIBRPM_COMPAT; then
++      HAVE_DLOPEN_LIBRPM=false
++    fi
++  fi
++
++  if $HAVE_DLOPEN_LIBRPM; then
++    DLOPEN_LIBRPM_STRING='"'"$DLOPEN_LIBRPM"'"'
++
++cat >>confdefs.h <<_ACEOF
++#define DLOPEN_LIBRPM $DLOPEN_LIBRPM_STRING
++_ACEOF
++
++
++$as_echo "#define HAVE_LIBRPM 1" >>confdefs.h
++
++  else
++    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++    LIBS="$save_LIBS"
++    if $DLOPEN_REQUIRE; then
++      as_fn_error "Specific name $LIBRPM was requested but it could not be opened." "$LINENO" 5
++    fi
++
++
++
++
++
++
++
++if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
++	if test -n "$ac_tool_prefix"; then
++  # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
++set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_PKG_CONFIG+set}" = set; then :
++  $as_echo_n "(cached) " >&6
++else
++  case $PKG_CONFIG in
++  [\\/]* | ?:[\\/]*)
++  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
++  ;;
++  *)
++  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
++    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++  done
++IFS=$as_save_IFS
++
++  ;;
++esac
++fi
++PKG_CONFIG=$ac_cv_path_PKG_CONFIG
++if test -n "$PKG_CONFIG"; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
++$as_echo "$PKG_CONFIG" >&6; }
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_path_PKG_CONFIG"; then
++  ac_pt_PKG_CONFIG=$PKG_CONFIG
++  # Extract the first word of "pkg-config", so it can be a program name with args.
++set dummy pkg-config; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then :
++  $as_echo_n "(cached) " >&6
++else
++  case $ac_pt_PKG_CONFIG in
++  [\\/]* | ?:[\\/]*)
++  ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
++  ;;
++  *)
++  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
++    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++  done
++IFS=$as_save_IFS
++
++  ;;
++esac
++fi
++ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
++if test -n "$ac_pt_PKG_CONFIG"; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
++$as_echo "$ac_pt_PKG_CONFIG" >&6; }
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++  if test "x$ac_pt_PKG_CONFIG" = x; then
++    PKG_CONFIG=""
++  else
++    case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++    PKG_CONFIG=$ac_pt_PKG_CONFIG
++  fi
++else
++  PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
++fi
++
++fi
++if test -n "$PKG_CONFIG"; then
++	_pkg_min_version=0.9.0
++	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
++$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
++	if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
++		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
++$as_echo "yes" >&6; }
++	else
++		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++		PKG_CONFIG=""
++	fi
++fi
++
++pkg_failed=no
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for RPM" >&5
++$as_echo_n "checking for RPM... " >&6; }
++
++if test -n "$RPM_CFLAGS"; then
++    pkg_cv_RPM_CFLAGS="$RPM_CFLAGS"
++ elif test -n "$PKG_CONFIG"; then
++    if test -n "$PKG_CONFIG" && \
++    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"rpm\""; } >&5
++  ($PKG_CONFIG --exists --print-errors "rpm") 2>&5
++  ac_status=$?
++  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++  test $ac_status = 0; }; then
++  pkg_cv_RPM_CFLAGS=`$PKG_CONFIG --cflags "rpm" 2>/dev/null`
++		      test "x$?" != "x0" && pkg_failed=yes
++else
++  pkg_failed=yes
++fi
++ else
++    pkg_failed=untried
++fi
++if test -n "$RPM_LIBS"; then
++    pkg_cv_RPM_LIBS="$RPM_LIBS"
++ elif test -n "$PKG_CONFIG"; then
++    if test -n "$PKG_CONFIG" && \
++    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"rpm\""; } >&5
++  ($PKG_CONFIG --exists --print-errors "rpm") 2>&5
++  ac_status=$?
++  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++  test $ac_status = 0; }; then
++  pkg_cv_RPM_LIBS=`$PKG_CONFIG --libs "rpm" 2>/dev/null`
++		      test "x$?" != "x0" && pkg_failed=yes
++else
++  pkg_failed=yes
++fi
++ else
++    pkg_failed=untried
++fi
++
++
++
++if test $pkg_failed = yes; then
++   	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++
++if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
++        _pkg_short_errors_supported=yes
++else
++        _pkg_short_errors_supported=no
++fi
++        if test $_pkg_short_errors_supported = yes; then
++	        RPM_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "rpm" 2>&1`
++        else
++	        RPM_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "rpm" 2>&1`
++        fi
++	# Put the nasty error message in config.log where it belongs
++	echo "$RPM_PKG_ERRORS" >&5
++
++	HAVE_LIBRPM=false
++elif test $pkg_failed = untried; then
++     	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++	HAVE_LIBRPM=false
++else
++	RPM_CFLAGS=$pkg_cv_RPM_CFLAGS
++	RPM_LIBS=$pkg_cv_RPM_LIBS
++        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
++$as_echo "yes" >&6; }
++	HAVE_LIBRPM=true
++fi
++
++    if $HAVE_LIBRPM; then
++
++    { $as_echo "$as_me:${as_lineno-$LINENO}: checking rpm library API compatibility" >&5
++$as_echo_n "checking rpm library API compatibility... " >&6; }
++    # The compilation requires -Werror to verify anything.
++    save_CFLAGS="$CFLAGS"
++    CFLAGS="$CFLAGS -Werror"
++    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++
++/* Duplicate here the declarations to verify they match "elfread.c".  */
++#include <rpm/rpmlib.h>
++#include <rpm/rpmts.h>
++#include <rpm/rpmdb.h>
++#include <rpm/header.h>
++extern char * headerFormat(Header h, const char * fmt, errmsg_t * errmsg);
++extern int rpmReadConfigFiles(const char * file, const char * target);
++extern rpmdbMatchIterator rpmdbFreeIterator(rpmdbMatchIterator mi);
++extern Header rpmdbNextIterator(rpmdbMatchIterator mi);
++extern rpmts rpmtsCreate(void);
++extern rpmts rpmtsFree(rpmts ts);
++extern rpmdbMatchIterator rpmtsInitIterator(const rpmts ts, rpmTag rpmtag,
++					    const void * keyp, size_t keylen);
++
++int
++main ()
++{
++
++  ;
++  return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++
++      LIBRPM_COMPAT=true
++      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
++$as_echo "yes" >&6; }
++
++else
++
++      LIBRPM_COMPAT=false
++      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++    CFLAGS="$save_CFLAGS"
++
++      if ! $LIBRPM_COMPAT; then
++	HAVE_LIBRPM=false
++	RPM_PKG_ERRORS="Found $LIBRPM API is incompatibile with this GDB"
++      fi
++    fi
++
++    if $HAVE_LIBRPM; then
++
++$as_echo "#define HAVE_LIBRPM 1" >>confdefs.h
++
++      CFLAGS="$CFLAGS $RPM_CFLAGS"
++      LIBS="$LIBS $RPM_LIBS"
++    else
++      if $RPM_REQUIRE; then
++	as_fn_error "$RPM_PKG_ERRORS" "$LINENO" 5
++      else
++	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $RPM_PKG_ERRORS" >&5
++$as_echo "$as_me: WARNING: $RPM_PKG_ERRORS" >&2;}
++      fi
++    fi
++  fi
++fi
++
+ 
+ 
+ subdirs="$subdirs testsuite"
+diff --git a/gdb/configure.ac b/gdb/configure.ac
+--- a/gdb/configure.ac
++++ b/gdb/configure.ac
+@@ -166,6 +166,199 @@ AC_DEFINE_DIR(AUTO_LOAD_SAFE_PATH, escape_dir,
+ 	      [Directories safe to hold auto-loaded files.])
+ AC_MSG_RESULT([$with_auto_load_safe_path])
+ 
++# Integration with rpm library to support missing debuginfo suggestions.
++# --without-rpm: Disable any rpm support.
++# --with-rpm=libname.so: Try to dynamically open `libname.so' during runtime.
++#   Even with runtime missing `libname.so' GDB will still other run correctly.
++#   Missing `libname.so' during ./configure will abort the configuration.
++# --with-rpm=librpm.so: Like `--with-rpm=libname.so' but try to find specific
++#   minor version first such as `librpm-4.6.so' as minor version differences
++#   mean API+ABI incompatibility.  If the specific match versioned library name
++#   could not be found still open dynamically at least `librpm.so'.
++# --with-rpm: Like `--with-rpm=librpm.so' but if any of its detection fails try
++#   to find librpm for compilation-time linking by pkg-config.  GDB binary will
++#   be probably linked with the version specific library (as `librpm-4.6.so').
++#   Failure to find librpm by pkg-config will abort the configuration.
++# (default) --with-rpm=auto: Like `--with-rpm=librpm.so' but if even pkg-config
++#   cannot find librpm use to the rpmless compilation (like `--without-rpm').
++
++AC_ARG_WITH([rpm],
++  [AS_HELP_STRING([--with-rpm],
++                  [query rpm database for missing debuginfos (yes/no, def. auto=librpm.so)])], [], [with_rpm="auto"])
++
++m4_pattern_allow([^AC_MSG_ERROR$])
++m4_pattern_allow([^AC_MSG_WARN$])
++if test "x$with_rpm" != "xno"; then
++  if test "x$with_rpm" = "xyes"; then
++    LIBRPM="librpm.so"
++    RPM_REQUIRE=true
++    DLOPEN_REQUIRE=false
++  elif test "x$with_rpm" = "xauto"; then
++    LIBRPM="librpm.so"
++    RPM_REQUIRE=false
++    DLOPEN_REQUIRE=false
++  else
++    LIBRPM="$with_rpm"
++    RPM_REQUIRE=true
++    DLOPEN_REQUIRE=true
++  fi
++  LIBRPM_STRING='"'"$LIBRPM"'"'
++
++  AC_MSG_CHECKING([specific librpm version])
++  HAVE_DLOPEN_LIBRPM=false
++  save_LIBS="$LIBS"
++  LIBS="$LIBS -ldl"
++  AC_RUN_IFELSE(AC_LANG_PROGRAM([[
++#include <rpm/rpmlib.h>
++#include <dlfcn.h>
++#include <errno.h>
++  ]], [[
++    void *h;
++    const char *const *rpmverp;
++    FILE *f;
++
++    f = fopen ("conftest.out", "w");
++    if (!f)
++      {
++	fprintf (stderr, "Cannot write \"%s\": %s\n", "conftest.out",
++		 strerror (errno));
++	return 1;
++      }
++    h = dlopen ($LIBRPM_STRING, RTLD_LAZY);
++    if (!h)
++      {
++	fprintf (stderr, "dlopen (\"%s\"): %s\n", $LIBRPM_STRING, dlerror ());
++	return 1;
++      }
++    rpmverp = dlsym (h, "RPMVERSION");
++    if (!rpmverp)
++      {
++	fprintf (stderr, "dlsym (\"RPMVERSION\"): %s\n", dlerror ());
++	return 1;
++      }
++    fprintf (stderr, "RPMVERSION is: \"");
++    fprintf (stderr, "%s\"\n", *rpmverp);
++
++    /* Try to find the specific librpm version only for "librpm.so" as we do
++       not know how to assemble the version string otherwise.  */
++
++    if (strcmp ("librpm.so", $LIBRPM_STRING) != 0)
++      {
++	fprintf (f, "%s\n", $LIBRPM_STRING);
++	return 0;
++      }
++    else
++      {
++	char *h2_name;
++	void *h2;
++	int major, minor;
++
++	if (sscanf (*rpmverp, "%d.%d", &major, &minor) != 2)
++	  {
++	    fprintf (stderr, "Unable to parse RPMVERSION.\n");
++	    fprintf (f, "%s\n", $LIBRPM_STRING);
++	    return 0;
++	  }
++	/* Avoid the square brackets by malloc.  */
++	h2_name = malloc (64);
++	sprintf (h2_name, "librpm-%d.%d.so", major, minor);
++	h2 = dlopen (h2_name, RTLD_LAZY);
++	if (!h2)
++	  {
++	    fprintf (stderr, "dlopen (\"%s\"): %s\n", h2_name, dlerror ());
++	    fprintf (f, "%s\n", $LIBRPM_STRING);
++	    return 0;
++	  }
++	if (h2 != h)
++	  {
++	    fprintf (stderr, "dlopen of \"%s\" and \"%s\" are different.\n",
++		     $LIBRPM_STRING, h2_name);
++	    fprintf (f, "%s\n", $LIBRPM_STRING);
++	    return 0;
++	  }
++	/* Found the valid .so name with a specific version.  */
++	fprintf (f, "%s\n", h2_name);
++	return 0;
++      }
++  ]]), [
++    DLOPEN_LIBRPM="`cat conftest.out`"
++    if test "x$DLOPEN_LIBRPM" != "x"; then
++      HAVE_DLOPEN_LIBRPM=true
++      AC_MSG_RESULT($DLOPEN_LIBRPM)
++    fi
++  ])
++  rm -f conftest.out
++
++  m4_define([CHECK_LIBRPM_COMPAT], [
++    AC_MSG_CHECKING([rpm library API compatibility])
++    # The compilation requires -Werror to verify anything.
++    save_CFLAGS="$CFLAGS"
++    CFLAGS="$CFLAGS -Werror"
++    AC_COMPILE_IFELSE(AC_LANG_PROGRAM([[
++/* Duplicate here the declarations to verify they match "elfread.c".  */
++#include <rpm/rpmlib.h>
++#include <rpm/rpmts.h>
++#include <rpm/rpmdb.h>
++#include <rpm/header.h>
++extern char * headerFormat(Header h, const char * fmt, errmsg_t * errmsg);
++extern int rpmReadConfigFiles(const char * file, const char * target);
++extern rpmdbMatchIterator rpmdbFreeIterator(rpmdbMatchIterator mi);
++extern Header rpmdbNextIterator(rpmdbMatchIterator mi);
++extern rpmts rpmtsCreate(void);
++extern rpmts rpmtsFree(rpmts ts);
++extern rpmdbMatchIterator rpmtsInitIterator(const rpmts ts, rpmTag rpmtag,
++					    const void * keyp, size_t keylen);
++    ]]), [
++      LIBRPM_COMPAT=true
++      AC_MSG_RESULT(yes)
++    ], [
++      LIBRPM_COMPAT=false
++      AC_MSG_RESULT(no)
++    ])
++    CFLAGS="$save_CFLAGS"
++  ])
++
++  if $HAVE_DLOPEN_LIBRPM; then
++    CHECK_LIBRPM_COMPAT
++    if ! $LIBRPM_COMPAT; then
++      HAVE_DLOPEN_LIBRPM=false
++    fi
++  fi
++
++  if $HAVE_DLOPEN_LIBRPM; then
++    DLOPEN_LIBRPM_STRING='"'"$DLOPEN_LIBRPM"'"'
++    AC_DEFINE_UNQUOTED(DLOPEN_LIBRPM, $DLOPEN_LIBRPM_STRING, [librpm version specific library name to dlopen.])
++    AC_DEFINE(HAVE_LIBRPM, 1, [Define if librpm library is being used.])
++  else
++    AC_MSG_RESULT(no)
++    LIBS="$save_LIBS"
++    if $DLOPEN_REQUIRE; then
++      AC_MSG_ERROR([Specific name $LIBRPM was requested but it could not be opened.])
++    fi
++    PKG_CHECK_MODULES(RPM, rpm, [HAVE_LIBRPM=true], [HAVE_LIBRPM=false])
++
++    if $HAVE_LIBRPM; then
++      CHECK_LIBRPM_COMPAT
++      if ! $LIBRPM_COMPAT; then
++	HAVE_LIBRPM=false
++	RPM_PKG_ERRORS="Found $LIBRPM API is incompatibile with this GDB"
++      fi
++    fi
++
++    if $HAVE_LIBRPM; then
++      AC_DEFINE(HAVE_LIBRPM, 1, [Define if librpm library is being used.])
++      CFLAGS="$CFLAGS $RPM_CFLAGS"
++      LIBS="$LIBS $RPM_LIBS"
++    else
++      if $RPM_REQUIRE; then
++	AC_MSG_ERROR($RPM_PKG_ERRORS)
++      else
++	AC_MSG_WARN($RPM_PKG_ERRORS)
++      fi
++    fi
++  fi
++fi
++ 
+ AC_CONFIG_SUBDIRS(testsuite)
+ 
+ # Check whether to support alternative target configurations
+diff --git a/gdb/corelow.c b/gdb/corelow.c
+--- a/gdb/corelow.c
++++ b/gdb/corelow.c
+@@ -366,7 +366,7 @@ build_id_locate_exec (int from_tty)
+         symfile_objfile->flags |= OBJF_BUILD_ID_CORE_LOADED;
+     }
+   else
+-    debug_print_missing (_("the main executable file"), build_id_filename);
++    debug_print_missing (BUILD_ID_MAIN_EXECUTABLE_FILENAME, build_id_filename);
+ 
+   do_cleanups (back_to);
+ 
+diff --git a/gdb/event-top.c b/gdb/event-top.c
+--- a/gdb/event-top.c
++++ b/gdb/event-top.c
+@@ -40,6 +40,7 @@
+ #include "buffer.h"
+ #include "ser-event.h"
+ #include "gdb_select.h"
++#include "symfile.h"
+ 
+ /* readline include files.  */
+ #include "readline/readline.h"
+@@ -359,6 +360,8 @@ display_gdb_prompt (const char *new_prompt)
+   /* Reset the nesting depth used when trace-commands is set.  */
+   reset_command_nest_depth ();
+ 
++  debug_flush_missing ();
++
+   /* Do not call the python hook on an explicit prompt change as
+      passed to this function, as this forms a secondary/local prompt,
+      IE, displayed but not set.  */
+@@ -774,7 +777,10 @@ command_line_handler (char *rl)
+       command_handler (cmd);
+ 
+       if (ui->prompt_state != PROMPTED)
+-	display_gdb_prompt (0);
++	{
++	  debug_flush_missing ();
++	  display_gdb_prompt (0);
++	}
+     }
+ }
+ 
+diff --git a/gdb/symfile.h b/gdb/symfile.h
+--- a/gdb/symfile.h
++++ b/gdb/symfile.h
+@@ -540,6 +540,8 @@ void map_symbol_filenames (symbol_filename_ftype *fun, void *data,
+ /* build-id support.  */
+ extern struct bfd_build_id *build_id_addr_get (CORE_ADDR addr);
+ extern void debug_print_missing (const char *binary, const char *debug);
++extern void debug_flush_missing (void);
++#define BUILD_ID_MAIN_EXECUTABLE_FILENAME _("the main executable file")
+ 
+ /* From dwarf2read.c */
+ 
diff --git a/SOURCES/gdb-6.6-buildid-locate-solib-missing-ids.patch b/SOURCES/gdb-6.6-buildid-locate-solib-missing-ids.patch
new file mode 100644
index 0000000..2b96166
--- /dev/null
+++ b/SOURCES/gdb-6.6-buildid-locate-solib-missing-ids.patch
@@ -0,0 +1,237 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.6-buildid-locate-solib-missing-ids.patch
+
+;; Fix loading of core files without build-ids but with build-ids in executables.
+;; Load strictly build-id-checked core files only if no executable is specified
+;; (Jan Kratochvil, RH BZ 1339862).
+;;=push+jan
+
+gdb returns an incorrect back trace when applying a debuginfo
+https://bugzilla.redhat.com/show_bug.cgi?id=1339862
+
+diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c
+--- a/gdb/solib-svr4.c
++++ b/gdb/solib-svr4.c
+@@ -1358,14 +1358,27 @@ svr4_read_so_list (CORE_ADDR lm, CORE_ADDR prev_lm,
+ 	}
+ 
+       {
+-	struct bfd_build_id *build_id;
++	struct bfd_build_id *build_id = NULL;
+ 
+ 	strncpy (newobj->so_original_name, buffer.get (), SO_NAME_MAX_PATH_SIZE - 1);
+ 	newobj->so_original_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0';
+ 	/* May get overwritten below.  */
+ 	strcpy (newobj->so_name, newobj->so_original_name);
+ 
+-	build_id = build_id_addr_get (((lm_info_svr4 *) newobj->lm_info)->l_ld);
++	/* In the case the main executable was found according to its build-id
++	   (from a core file) prevent loading a different build of a library
++	   with accidentally the same SO_NAME.
++
++	   It suppresses bogus backtraces (and prints "??" there instead) if
++	   the on-disk files no longer match the running program version.
++
++	   If the main executable was not loaded according to its build-id do
++	   not do any build-id checking of the libraries.  There may be missing
++	   build-ids dumped in the core file and we would map all the libraries
++	   to the only existing file loaded that time - the executable.  */
++	if (symfile_objfile != NULL
++	    && (symfile_objfile->flags & OBJF_BUILD_ID_CORE_LOADED) != 0)
++	  build_id = build_id_addr_get (li->l_ld);
+ 	if (build_id != NULL)
+ 	  {
+ 	    char *name, *build_id_filename;
+@@ -1380,23 +1393,7 @@ svr4_read_so_list (CORE_ADDR lm, CORE_ADDR prev_lm,
+ 		xfree (name);
+ 	      }
+ 	    else
+-	      {
+-		debug_print_missing (newobj->so_name, build_id_filename);
+-
+-		/* In the case the main executable was found according to
+-		   its build-id (from a core file) prevent loading
+-		   a different build of a library with accidentally the
+-		   same SO_NAME.
+-
+-		   It suppresses bogus backtraces (and prints "??" there
+-		   instead) if the on-disk files no longer match the
+-		   running program version.  */
+-
+-		if (symfile_objfile != NULL
+-		    && (symfile_objfile->flags
+-			& OBJF_BUILD_ID_CORE_LOADED) != 0)
+-		  newobj->so_name[0] = 0;
+-	      }
++	      debug_print_missing (newobj->so_name, build_id_filename);
+ 
+ 	    xfree (build_id_filename);
+ 	    xfree (build_id);
+diff --git a/gdb/testsuite/gdb.base/gcore-buildid-exec-but-not-solib-lib.c b/gdb/testsuite/gdb.base/gcore-buildid-exec-but-not-solib-lib.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/gcore-buildid-exec-but-not-solib-lib.c
+@@ -0,0 +1,21 @@
++/* Copyright 2010 Free Software Foundation, Inc.
++
++   This file is part of GDB.
++
++   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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++void
++lib (void)
++{
++}
+diff --git a/gdb/testsuite/gdb.base/gcore-buildid-exec-but-not-solib-main.c b/gdb/testsuite/gdb.base/gcore-buildid-exec-but-not-solib-main.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/gcore-buildid-exec-but-not-solib-main.c
+@@ -0,0 +1,25 @@
++/* Copyright 2010 Free Software Foundation, Inc.
++
++   This file is part of GDB.
++
++   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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++extern void lib (void);
++
++int
++main (void)
++{
++  lib ();
++  return 0;
++}
+diff --git a/gdb/testsuite/gdb.base/gcore-buildid-exec-but-not-solib.exp b/gdb/testsuite/gdb.base/gcore-buildid-exec-but-not-solib.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/gcore-buildid-exec-but-not-solib.exp
+@@ -0,0 +1,105 @@
++# Copyright 2016 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++if {[skip_shlib_tests]} {
++    return 0
++}
++
++set testfile "gcore-buildid-exec-but-not-solib"
++set srcmainfile ${testfile}-main.c
++set srclibfile ${testfile}-lib.c
++set libfile [standard_output_file ${testfile}-lib.so]
++set objfile [standard_output_file ${testfile}-main.o]
++set executable ${testfile}-main
++set binfile [standard_output_file ${executable}]
++set gcorefile [standard_output_file ${executable}.gcore]
++set outdir [file dirname $binfile]
++
++if { [gdb_compile_shlib ${srcdir}/${subdir}/${srclibfile} ${libfile} "debug additional_flags=-Wl,--build-id"] != ""
++     || [gdb_compile ${srcdir}/${subdir}/${srcmainfile} ${objfile} object {debug}] != "" } {
++     unsupported "-Wl,--build-id compilation failed"
++     return -1
++}
++set opts [list debug shlib=${libfile} "additional_flags=-Wl,--build-id"]
++if { [gdb_compile ${objfile} ${binfile} executable $opts] != "" } {
++     unsupported "-Wl,--build-id compilation failed"
++     return -1
++}
++
++clean_restart $executable
++gdb_load_shlib $libfile
++
++# Does this gdb support gcore?
++set test "help gcore"
++gdb_test_multiple $test $test {
++    -re "Undefined command: .gcore.*\r\n$gdb_prompt $" {
++	# gcore command not supported -- nothing to test here.
++	unsupported "gdb does not support gcore on this target"
++	return -1;
++    }
++    -re "Save a core file .*\r\n$gdb_prompt $" {
++	pass $test
++    }
++}
++
++if { ![runto lib] } then {
++    return -1
++}
++
++set escapedfilename [string_to_regexp ${gcorefile}]
++
++set test "save a corefile"
++gdb_test_multiple "gcore ${gcorefile}" $test {
++    -re "Saved corefile ${escapedfilename}\r\n$gdb_prompt $" {
++	pass $test
++    }
++    -re "Can't create a corefile\r\n$gdb_prompt $" {
++	unsupported $test
++	return -1
++    }
++}
++
++# Now restart gdb and load the corefile.
++
++clean_restart $executable
++gdb_load_shlib $libfile
++
++set buildid [build_id_debug_filename_get $libfile]
++
++regsub {\.debug$} $buildid {} buildid
++
++set debugdir [standard_output_file ${testfile}-debugdir]
++file delete -force -- $debugdir
++
++file mkdir $debugdir/[file dirname $libfile]
++file copy $libfile $debugdir/${libfile}
++
++file mkdir $debugdir/[file dirname $buildid]
++file copy $libfile $debugdir/${buildid}
++
++remote_exec build "ln -s /lib       ${debugdir}/"
++remote_exec build "ln -s /lib64     ${debugdir}/"
++# /usr is not needed, all the libs are in /lib64: libm.so.6 libc.so.6 ld-linux-x86-64.so.2
++
++gdb_test "set solib-absolute-prefix $debugdir"
++
++gdb_test_no_output "set debug-file-directory $debugdir" "set debug-file-directory"
++
++gdb_test "core ${gcorefile}" "Core was generated by .*" "re-load generated corefile"
++
++gdb_test "frame" "#0 \[^\r\n\]* lib .*" "library got loaded"
++
++gdb_test "bt"
++gdb_test "info shared"
diff --git a/SOURCES/gdb-6.6-buildid-locate.patch b/SOURCES/gdb-6.6-buildid-locate.patch
new file mode 100644
index 0000000..6acb6bc
--- /dev/null
+++ b/SOURCES/gdb-6.6-buildid-locate.patch
@@ -0,0 +1,1249 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.6-buildid-locate.patch
+
+;; New locating of the matching binaries from the pure core file (build-id).
+;;=push+jan
+
+diff --git a/gdb/build-id.c b/gdb/build-id.c
+--- a/gdb/build-id.c
++++ b/gdb/build-id.c
+@@ -26,11 +26,67 @@
+ #include "objfiles.h"
+ #include "filenames.h"
+ #include "gdbcore.h"
++#include "libbfd.h"
++#include "gdbcore.h"
++#include "gdbcmd.h"
++#include "observable.h"
++#include "elf/external.h"
++#include "elf/internal.h"
++#include "elf/common.h"
++#include "elf-bfd.h"
++#include <sys/stat.h>
++
++#define BUILD_ID_VERBOSE_NONE 0
++#define BUILD_ID_VERBOSE_FILENAMES 1
++#define BUILD_ID_VERBOSE_BINARY_PARSE 2
++static int build_id_verbose = BUILD_ID_VERBOSE_FILENAMES;
++static void
++show_build_id_verbose (struct ui_file *file, int from_tty,
++		       struct cmd_list_element *c, const char *value)
++{
++  fprintf_filtered (file, _("Verbosity level of the build-id locator is %s.\n"),
++		    value);
++}
++/* Locate NT_GNU_BUILD_ID and return its matching debug filename.
++   FIXME: NOTE decoding should be unified with the BFD core notes decoding.  */
++
++static struct bfd_build_id *
++build_id_buf_get (bfd *templ, gdb_byte *buf, bfd_size_type size)
++{
++  bfd_byte *p;
++
++  p = buf;
++  while (p < buf + size)
++    {
++      /* FIXME: bad alignment assumption.  */
++      Elf_External_Note *xnp = (Elf_External_Note *) p;
++      size_t namesz = H_GET_32 (templ, xnp->namesz);
++      size_t descsz = H_GET_32 (templ, xnp->descsz);
++      bfd_byte *descdata = (gdb_byte *) xnp->name + BFD_ALIGN (namesz, 4);
++
++      if (H_GET_32 (templ, xnp->type) == NT_GNU_BUILD_ID
++	  && namesz == sizeof "GNU"
++	  && memcmp (xnp->name, "GNU", sizeof "GNU") == 0)
++	{
++	  size_t size = descsz;
++	  gdb_byte *data = (gdb_byte *) descdata;
++	  struct bfd_build_id *retval;
++
++	  retval = (struct bfd_build_id *) xmalloc (sizeof *retval - 1 + size);
++	  retval->size = size;
++	  memcpy (retval->data, data, size);
++
++	  return retval;
++	}
++      p = descdata + BFD_ALIGN (descsz, 4);
++    }
++  return NULL;
++}
+ 
+ /* See build-id.h.  */
+ 
+ const struct bfd_build_id *
+-build_id_bfd_get (bfd *abfd)
++build_id_bfd_shdr_get (bfd *abfd)
+ {
+   if (!bfd_check_format (abfd, bfd_object))
+     return NULL;
+@@ -42,6 +98,348 @@ build_id_bfd_get (bfd *abfd)
+   return NULL;
+ }
+ 
++/* Core files may have missing (corrupt) SHDR but PDHR is correct there.
++   bfd_elf_bfd_from_remote_memory () has too much overhead by
++   allocating/reading all the available ELF PT_LOADs.  */
++
++static struct bfd_build_id *
++build_id_phdr_get (bfd *templ, bfd_vma loadbase, unsigned e_phnum,
++		   Elf_Internal_Phdr *i_phdr)
++{
++  int i;
++  struct bfd_build_id *retval = NULL;
++
++  for (i = 0; i < e_phnum; i++)
++    if (i_phdr[i].p_type == PT_NOTE && i_phdr[i].p_filesz > 0)
++      {
++	Elf_Internal_Phdr *hdr = &i_phdr[i];
++	gdb_byte *buf;
++	int err;
++
++	buf = (gdb_byte *) xmalloc (hdr->p_filesz);
++	err = target_read_memory (loadbase + i_phdr[i].p_vaddr, buf,
++				  hdr->p_filesz);
++	if (err == 0)
++	  retval = build_id_buf_get (templ, buf, hdr->p_filesz);
++	else
++	  retval = NULL;
++	xfree (buf);
++	if (retval != NULL)
++	  break;
++      }
++  return retval;
++}
++
++/* First we validate the file by reading in the ELF header and checking
++   the magic number.  */
++
++static inline bfd_boolean
++elf_file_p (Elf64_External_Ehdr *x_ehdrp64)
++{
++  gdb_assert (sizeof (Elf64_External_Ehdr) >= sizeof (Elf32_External_Ehdr));
++  gdb_assert (offsetof (Elf64_External_Ehdr, e_ident)
++	      == offsetof (Elf32_External_Ehdr, e_ident));
++  gdb_assert (sizeof (((Elf64_External_Ehdr *) 0)->e_ident)
++	      == sizeof (((Elf32_External_Ehdr *) 0)->e_ident));
++
++  return ((x_ehdrp64->e_ident[EI_MAG0] == ELFMAG0)
++	  && (x_ehdrp64->e_ident[EI_MAG1] == ELFMAG1)
++	  && (x_ehdrp64->e_ident[EI_MAG2] == ELFMAG2)
++	  && (x_ehdrp64->e_ident[EI_MAG3] == ELFMAG3));
++}
++
++/* Translate an ELF file header in external format into an ELF file header in
++   internal format.  */
++
++#define H_GET_WORD(bfd, ptr) (is64 ? H_GET_64 (bfd, (ptr))		\
++				   : H_GET_32 (bfd, (ptr)))
++#define H_GET_SIGNED_WORD(bfd, ptr) (is64 ? H_GET_S64 (bfd, (ptr))	\
++					  : H_GET_S32 (bfd, (ptr)))
++
++static void
++elf_swap_ehdr_in (bfd *abfd,
++		  const Elf64_External_Ehdr *src64,
++		  Elf_Internal_Ehdr *dst)
++{
++  int is64 = bfd_get_arch_size (abfd) == 64;
++#define SRC(field) (is64 ? src64->field \
++			 : ((const Elf32_External_Ehdr *) src64)->field)
++
++  int signed_vma = get_elf_backend_data (abfd)->sign_extend_vma;
++  memcpy (dst->e_ident, SRC (e_ident), EI_NIDENT);
++  dst->e_type = H_GET_16 (abfd, SRC (e_type));
++  dst->e_machine = H_GET_16 (abfd, SRC (e_machine));
++  dst->e_version = H_GET_32 (abfd, SRC (e_version));
++  if (signed_vma)
++    dst->e_entry = H_GET_SIGNED_WORD (abfd, SRC (e_entry));
++  else
++    dst->e_entry = H_GET_WORD (abfd, SRC (e_entry));
++  dst->e_phoff = H_GET_WORD (abfd, SRC (e_phoff));
++  dst->e_shoff = H_GET_WORD (abfd, SRC (e_shoff));
++  dst->e_flags = H_GET_32 (abfd, SRC (e_flags));
++  dst->e_ehsize = H_GET_16 (abfd, SRC (e_ehsize));
++  dst->e_phentsize = H_GET_16 (abfd, SRC (e_phentsize));
++  dst->e_phnum = H_GET_16 (abfd, SRC (e_phnum));
++  dst->e_shentsize = H_GET_16 (abfd, SRC (e_shentsize));
++  dst->e_shnum = H_GET_16 (abfd, SRC (e_shnum));
++  dst->e_shstrndx = H_GET_16 (abfd, SRC (e_shstrndx));
++
++#undef SRC
++}
++
++/* Translate an ELF program header table entry in external format into an
++   ELF program header table entry in internal format.  */
++
++static void
++elf_swap_phdr_in (bfd *abfd,
++		  const Elf64_External_Phdr *src64,
++		  Elf_Internal_Phdr *dst)
++{
++  int is64 = bfd_get_arch_size (abfd) == 64;
++#define SRC(field) (is64 ? src64->field					\
++			 : ((const Elf32_External_Phdr *) src64)->field)
++
++  int signed_vma = get_elf_backend_data (abfd)->sign_extend_vma;
++
++  dst->p_type = H_GET_32 (abfd, SRC (p_type));
++  dst->p_flags = H_GET_32 (abfd, SRC (p_flags));
++  dst->p_offset = H_GET_WORD (abfd, SRC (p_offset));
++  if (signed_vma)
++    {
++      dst->p_vaddr = H_GET_SIGNED_WORD (abfd, SRC (p_vaddr));
++      dst->p_paddr = H_GET_SIGNED_WORD (abfd, SRC (p_paddr));
++    }
++  else
++    {
++      dst->p_vaddr = H_GET_WORD (abfd, SRC (p_vaddr));
++      dst->p_paddr = H_GET_WORD (abfd, SRC (p_paddr));
++    }
++  dst->p_filesz = H_GET_WORD (abfd, SRC (p_filesz));
++  dst->p_memsz = H_GET_WORD (abfd, SRC (p_memsz));
++  dst->p_align = H_GET_WORD (abfd, SRC (p_align));
++
++#undef SRC
++}
++
++#undef H_GET_SIGNED_WORD
++#undef H_GET_WORD
++
++static Elf_Internal_Phdr *
++elf_get_phdr (bfd *templ, bfd_vma ehdr_vma, unsigned *e_phnum_pointer,
++              bfd_vma *loadbase_pointer)
++{
++  /* sizeof (Elf64_External_Ehdr) >= sizeof (Elf32_External_Ehdr)  */
++  Elf64_External_Ehdr x_ehdr64;	/* Elf file header, external form */
++  Elf_Internal_Ehdr i_ehdr;	/* Elf file header, internal form */
++  bfd_size_type x_phdrs_size;
++  gdb_byte *x_phdrs_ptr;
++  Elf_Internal_Phdr *i_phdrs;
++  int err;
++  unsigned int i;
++  bfd_vma loadbase;
++  int loadbase_set;
++
++  gdb_assert (templ != NULL);
++  gdb_assert (sizeof (Elf64_External_Ehdr) >= sizeof (Elf32_External_Ehdr));
++
++  /* Read in the ELF header in external format.  */
++  err = target_read_memory (ehdr_vma, (bfd_byte *) &x_ehdr64, sizeof x_ehdr64);
++  if (err)
++    {
++      if (build_id_verbose >= BUILD_ID_VERBOSE_BINARY_PARSE)
++        warning (_("build-id: Error reading ELF header at address 0x%lx"),
++		 (unsigned long) ehdr_vma);
++      return NULL;
++    }
++
++  /* Now check to see if we have a valid ELF file, and one that BFD can
++     make use of.  The magic number must match, the address size ('class')
++     and byte-swapping must match our XVEC entry.  */
++
++  if (! elf_file_p (&x_ehdr64)
++      || x_ehdr64.e_ident[EI_VERSION] != EV_CURRENT
++      || !((bfd_get_arch_size (templ) == 64
++            && x_ehdr64.e_ident[EI_CLASS] == ELFCLASS64)
++           || (bfd_get_arch_size (templ) == 32
++	       && x_ehdr64.e_ident[EI_CLASS] == ELFCLASS32)))
++    {
++      if (build_id_verbose >= BUILD_ID_VERBOSE_BINARY_PARSE)
++        warning (_("build-id: Unrecognized ELF header at address 0x%lx"),
++		 (unsigned long) ehdr_vma);
++      return NULL;
++    }
++
++  /* Check that file's byte order matches xvec's */
++  switch (x_ehdr64.e_ident[EI_DATA])
++    {
++    case ELFDATA2MSB:		/* Big-endian */
++      if (! bfd_header_big_endian (templ))
++	{
++	  if (build_id_verbose >= BUILD_ID_VERBOSE_BINARY_PARSE)
++	    warning (_("build-id: Unrecognized "
++		       "big-endian ELF header at address 0x%lx"),
++		     (unsigned long) ehdr_vma);
++	  return NULL;
++	}
++      break;
++    case ELFDATA2LSB:		/* Little-endian */
++      if (! bfd_header_little_endian (templ))
++	{
++	  if (build_id_verbose >= BUILD_ID_VERBOSE_BINARY_PARSE)
++	    warning (_("build-id: Unrecognized "
++		       "little-endian ELF header at address 0x%lx"),
++		     (unsigned long) ehdr_vma);
++	  return NULL;
++	}
++      break;
++    case ELFDATANONE:		/* No data encoding specified */
++    default:			/* Unknown data encoding specified */
++      if (build_id_verbose >= BUILD_ID_VERBOSE_BINARY_PARSE)
++	warning (_("build-id: Unrecognized "
++		   "ELF header endianity at address 0x%lx"),
++		 (unsigned long) ehdr_vma);
++      return NULL;
++    }
++
++  elf_swap_ehdr_in (templ, &x_ehdr64, &i_ehdr);
++
++  /* The file header tells where to find the program headers.
++     These are what we use to actually choose what to read.  */
++
++  if (i_ehdr.e_phentsize != (bfd_get_arch_size (templ) == 64
++                             ? sizeof (Elf64_External_Phdr)
++			     : sizeof (Elf32_External_Phdr))
++      || i_ehdr.e_phnum == 0)
++    {
++      if (build_id_verbose >= BUILD_ID_VERBOSE_BINARY_PARSE)
++	warning (_("build-id: Invalid ELF program headers from the ELF header "
++		   "at address 0x%lx"), (unsigned long) ehdr_vma);
++      return NULL;
++    }
++
++  x_phdrs_size = (bfd_get_arch_size (templ) == 64 ? sizeof (Elf64_External_Phdr)
++						: sizeof (Elf32_External_Phdr));
++
++  i_phdrs = (Elf_Internal_Phdr *) xmalloc (i_ehdr.e_phnum * (sizeof *i_phdrs + x_phdrs_size));
++  x_phdrs_ptr = (gdb_byte *) &i_phdrs[i_ehdr.e_phnum];
++  err = target_read_memory (ehdr_vma + i_ehdr.e_phoff, (bfd_byte *) x_phdrs_ptr,
++			    i_ehdr.e_phnum * x_phdrs_size);
++  if (err)
++    {
++      free (i_phdrs);
++      if (build_id_verbose >= BUILD_ID_VERBOSE_BINARY_PARSE)
++        warning (_("build-id: Error reading "
++		   "ELF program headers at address 0x%lx"),
++		 (unsigned long) (ehdr_vma + i_ehdr.e_phoff));
++      return NULL;
++    }
++
++  loadbase = ehdr_vma;
++  loadbase_set = 0;
++  for (i = 0; i < i_ehdr.e_phnum; ++i)
++    {
++      elf_swap_phdr_in (templ, (Elf64_External_Phdr *)
++			       (x_phdrs_ptr + i * x_phdrs_size), &i_phdrs[i]);
++      /* IA-64 vDSO may have two mappings for one segment, where one mapping
++	 is executable only, and one is read only.  We must not use the
++	 executable one (PF_R is the first one, PF_X the second one).  */
++      if (i_phdrs[i].p_type == PT_LOAD && (i_phdrs[i].p_flags & PF_R))
++	{
++	  /* Only the first PT_LOAD segment indicates the file bias.
++	     Next segments may have P_VADDR arbitrarily higher.
++	     If the first segment has P_VADDR zero any next segment must not
++	     confuse us, the first one sets LOADBASE certainly enough.  */
++	  if (!loadbase_set && i_phdrs[i].p_offset == 0)
++	    {
++	      loadbase = ehdr_vma - i_phdrs[i].p_vaddr;
++	      loadbase_set = 1;
++	    }
++	}
++    }
++
++  if (build_id_verbose >= BUILD_ID_VERBOSE_BINARY_PARSE)
++    warning (_("build-id: Found ELF header at address 0x%lx, loadbase 0x%lx"),
++	     (unsigned long) ehdr_vma, (unsigned long) loadbase);
++
++  *e_phnum_pointer = i_ehdr.e_phnum;
++  *loadbase_pointer = loadbase;
++  return i_phdrs;
++}
++
++/* BUILD_ID_ADDR_GET gets ADDR located somewhere in the object.
++   Find the first section before ADDR containing an ELF header.
++   We rely on the fact the sections from multiple files do not mix.
++   FIXME: We should check ADDR is contained _inside_ the section with possibly
++   missing content (P_FILESZ < P_MEMSZ).  These omitted sections are currently
++   hidden by _BFD_ELF_MAKE_SECTION_FROM_PHDR.  */
++
++static CORE_ADDR build_id_addr;
++struct build_id_addr_sect
++  {
++    struct build_id_addr_sect *next;
++    asection *sect;
++  };
++static struct build_id_addr_sect *build_id_addr_sect;
++
++static void build_id_addr_candidate (bfd *abfd, asection *sect, void *obj)
++{
++  if (build_id_addr >= bfd_section_vma (abfd, sect))
++    {
++      struct build_id_addr_sect *candidate;
++
++      candidate = (struct build_id_addr_sect *) xmalloc (sizeof *candidate);
++      candidate->next = build_id_addr_sect;
++      build_id_addr_sect = candidate;
++      candidate->sect = sect;
++    }
++}
++
++struct bfd_build_id *
++build_id_addr_get (CORE_ADDR addr)
++{
++  struct build_id_addr_sect *candidate;
++  struct bfd_build_id *retval = NULL;
++  Elf_Internal_Phdr *i_phdr = NULL;
++  bfd_vma loadbase = 0;
++  unsigned e_phnum = 0;
++
++  if (core_bfd == NULL)
++    return NULL;
++
++  build_id_addr = addr;
++  gdb_assert (build_id_addr_sect == NULL);
++  bfd_map_over_sections (core_bfd, build_id_addr_candidate, NULL);
++
++  /* Sections are sorted in the high-to-low VMAs order.
++     Stop the search on the first ELF header we find.
++     Do not continue the search even if it does not contain NT_GNU_BUILD_ID.  */
++
++  for (candidate = build_id_addr_sect; candidate != NULL;
++       candidate = candidate->next)
++    {
++      i_phdr = elf_get_phdr (core_bfd,
++			     bfd_section_vma (core_bfd, candidate->sect),
++			     &e_phnum, &loadbase);
++      if (i_phdr != NULL)
++	break;
++    }
++
++  if (i_phdr != NULL)
++    {
++      retval = build_id_phdr_get (core_bfd, loadbase, e_phnum, i_phdr);
++      xfree (i_phdr);
++    }
++
++  while (build_id_addr_sect != NULL)
++    {
++      candidate = build_id_addr_sect;
++      build_id_addr_sect = candidate->next;
++      xfree (candidate);
++    }
++
++  return retval;
++}
++
+ /* See build-id.h.  */
+ 
+ int
+@@ -50,7 +448,7 @@ build_id_verify (bfd *abfd, size_t check_len, const bfd_byte *check)
+   const struct bfd_build_id *found;
+   int retval = 0;
+ 
+-  found = build_id_bfd_get (abfd);
++  found = build_id_bfd_shdr_get (abfd);
+ 
+   if (found == NULL)
+     warning (_("File \"%s\" has no build-id, file skipped"),
+@@ -65,11 +463,50 @@ build_id_verify (bfd *abfd, size_t check_len, const bfd_byte *check)
+   return retval;
+ }
+ 
++static char *
++link_resolve (const char *symlink, int level)
++{
++  char buf[PATH_MAX + 1], *target, *retval;
++  ssize_t got;
++
++  if (level > 10)
++    return xstrdup (symlink);
++
++  got = readlink (symlink, buf, sizeof (buf));
++  if (got < 0 || got >= sizeof (buf))
++    return xstrdup (symlink);
++  buf[got] = '\0';
++
++  if (IS_ABSOLUTE_PATH (buf))
++    target = xstrdup (buf);
++  else
++    {
++      const std::string dir (ldirname (symlink));
++
++      target = xstrprintf ("%s"
++#ifndef HAVE_DOS_BASED_FILE_SYSTEM
++			   "/"
++#else /* HAVE_DOS_BASED_FILE_SYSTEM */
++			   "\\"
++#endif /* HAVE_DOS_BASED_FILE_SYSTEM */
++			   "%s", dir.c_str(), buf);
++    }
++
++  retval = link_resolve (target, level + 1);
++  xfree (target);
++  return retval;
++}
++
+ /* See build-id.h.  */
+ 
+ gdb_bfd_ref_ptr
+-build_id_to_debug_bfd (size_t build_id_len, const bfd_byte *build_id)
++build_id_to_debug_bfd (size_t build_id_len, const bfd_byte *build_id,
++		       char **link_return, int add_debug_suffix)
+ {
++  char *debugdir;
++  std::string link, link_all;
++  struct cleanup *back_to;
++  int ix;
+   gdb_bfd_ref_ptr abfd;
+ 
+   /* Keep backward compatibility so that DEBUG_FILE_DIRECTORY being "" will
+@@ -82,63 +519,296 @@ build_id_to_debug_bfd (size_t build_id_len, const bfd_byte *build_id)
+     {
+       const gdb_byte *data = build_id;
+       size_t size = build_id_len;
++      char *filename = NULL;
++      struct cleanup *inner;
++      unsigned seqno;
++      struct stat statbuf_trash;
++      std::string link0;
+ 
+-      std::string link = debugdir.get ();
++      link = debugdir.get ();
+       link += "/.build-id/";
+ 
+       if (size > 0)
+ 	{
+ 	  size--;
+-	  string_appendf (link, "%02x/", (unsigned) *data++);
++	  string_appendf (link, "%02x", (unsigned) *data++);
+ 	}
+-
++      if (size > 0)
++	link += "/";
+       while (size-- > 0)
+ 	string_appendf (link, "%02x", (unsigned) *data++);
+ 
+-      link += ".debug";
+-
+       if (separate_debug_file_debug)
+ 	printf_unfiltered (_("  Trying %s\n"), link.c_str ());
+ 
+-      /* lrealpath() is expensive even for the usually non-existent files.  */
+-      gdb::unique_xmalloc_ptr<char> filename;
+-      if (access (link.c_str (), F_OK) == 0)
+-	filename.reset (lrealpath (link.c_str ()));
+-
+-      if (filename == NULL)
+-	continue;
++      for (seqno = 0;; seqno++)
++	{
++	  if (seqno)
++	    {
++	      /* There can be multiple build-id symlinks pointing to real files
++		 with the same build-id (such as hard links).  Some of the real
++		 files may not be installed.  */
++
++	      string_appendf (link, ".%u", seqno);
++	    }
++
++	  if (add_debug_suffix)
++	    link += ".debug";
++
++	  if (!seqno)
++	    {
++	      /* If none of the real files is found report as missing file
++		 always the non-.%u-suffixed file.  */
++	      link0 = link;
++	    }
++
++	  /* `access' automatically dereferences LINK.  */
++	  if (lstat (link.c_str (), &statbuf_trash) != 0)
++	    {
++	      /* Stop increasing SEQNO.  */
++	      break;
++	    }
++
++	  filename = lrealpath (link.c_str ());
++	  if (filename == NULL)
++	    continue;
++
++	  /* We expect to be silent on the non-existing files.  */
++	  inner = make_cleanup (xfree, filename);
++	  abfd = gdb_bfd_open (filename, gnutarget, -1);
++	  do_cleanups (inner);
++
++	  if (abfd == NULL)
++	    continue;
++
++	  if (build_id_verify (abfd.get(), build_id_len, build_id))
++	    break;
++
++	  abfd.release ();
++
++	  filename = NULL;
++	}
+ 
+-      /* We expect to be silent on the non-existing files.  */
+-      abfd = gdb_bfd_open (filename.get (), gnutarget, -1);
++      if (filename != NULL)
++	{
++	  /* LINK_ALL is not used below in this non-NULL FILENAME case.  */
++	  break;
++	}
+ 
+-      if (abfd == NULL)
+-	continue;
++      /* If the symlink has target request to install the target.
++         BASE-debuginfo.rpm contains the symlink but BASE.rpm may be missing.
++         https://bugzilla.redhat.com/show_bug.cgi?id=981154  */
++      std::string link0_resolved (link_resolve (link0.c_str (), 0));
+ 
+-      if (build_id_verify (abfd.get(), build_id_len, build_id))
+-	break;
++      if (link_all.empty ())
++	link_all = link0_resolved;
++      else
++	{
++	  /* Use whitespace instead of DIRNAME_SEPARATOR to be compatible with
++	     its possible use as an argument for installation command.  */
++	  link_all += " " + link0_resolved;
++	}
++    }
+ 
+-      abfd.release ();
++  if (link_return != NULL)
++    {
++      if (abfd != NULL)
++	{
++	  *link_return = xstrdup (link.c_str ());
++	}
++      else
++	{
++	  *link_return = xstrdup (link_all.c_str ());
++	}
+     }
+ 
+   return abfd;
+ }
+ 
++char *
++build_id_to_filename (const struct bfd_build_id *build_id, char **link_return)
++{
++  gdb_bfd_ref_ptr abfd;
++  char *result;
++  
++  abfd = build_id_to_debug_bfd (build_id->size, build_id->data, link_return, 0);
++  if (abfd == NULL)
++    return NULL;
++
++  result = xstrdup (bfd_get_filename (abfd));
++  abfd.release ();
++  return result;
++}
++
++/* This MISSING_FILEPAIR_HASH tracker is used only for the duplicite messages
++     Try to install the hash file ...
++   avoidance.  */
++
++struct missing_filepair
++  {
++    char *binary;
++    char *debug;
++    char data[1];
++  };
++
++static struct htab *missing_filepair_hash;
++static struct obstack missing_filepair_obstack;
++
++static void *
++missing_filepair_xcalloc (size_t nmemb, size_t nmemb_size)
++{
++  void *retval;
++  size_t size = nmemb * nmemb_size;
++
++  retval = obstack_alloc (&missing_filepair_obstack, size);
++  memset (retval, 0, size);
++  return retval;
++}
++
++static hashval_t
++missing_filepair_hash_func (const struct missing_filepair *elem)
++{
++  hashval_t retval = 0;
++
++  retval ^= htab_hash_string (elem->binary);
++  if (elem->debug != NULL)
++    retval ^= htab_hash_string (elem->debug);
++
++  return retval;
++}
++
++static int
++missing_filepair_eq (const struct missing_filepair *elem1,
++		       const struct missing_filepair *elem2)
++{
++  return strcmp (elem1->binary, elem2->binary) == 0
++         && ((elem1->debug == NULL) == (elem2->debug == NULL))
++         && (elem1->debug == NULL || strcmp (elem1->debug, elem2->debug) == 0);
++}
++
++static void
++missing_filepair_change (void)
++{
++  if (missing_filepair_hash != NULL)
++    {
++      obstack_free (&missing_filepair_obstack, NULL);
++      /* All their memory came just from missing_filepair_OBSTACK.  */
++      missing_filepair_hash = NULL;
++    }
++}
++
++static void
++debug_print_executable_changed (void)
++{
++  missing_filepair_change ();
++}
++
++/* Notify user the file BINARY with (possibly NULL) associated separate debug
++   information file DEBUG is missing.  DEBUG may or may not be the build-id
++   file such as would be:
++     /usr/lib/debug/.build-id/dd/b1d2ce632721c47bb9e8679f369e2295ce71be.debug
++   */
++
++void
++debug_print_missing (const char *binary, const char *debug)
++{
++  size_t binary_len0 = strlen (binary) + 1;
++  size_t debug_len0 = debug ? strlen (debug) + 1 : 0;
++  struct missing_filepair missing_filepair_find;
++  struct missing_filepair *missing_filepair;
++  struct missing_filepair **slot;
++
++  if (build_id_verbose < BUILD_ID_VERBOSE_FILENAMES)
++    return;
++
++  if (missing_filepair_hash == NULL)
++    {
++      obstack_init (&missing_filepair_obstack);
++      missing_filepair_hash = htab_create_alloc (64,
++	(hashval_t (*) (const void *)) missing_filepair_hash_func,
++	(int (*) (const void *, const void *)) missing_filepair_eq, NULL,
++	missing_filepair_xcalloc, NULL);
++    }
++
++  /* Use MISSING_FILEPAIR_FIND first instead of calling obstack_alloc with
++     obstack_free in the case of a (rare) match.  The problem is ALLOC_F for
++     MISSING_FILEPAIR_HASH allocates from MISSING_FILEPAIR_OBSTACK maintenance
++     structures for MISSING_FILEPAIR_HASH.  Calling obstack_free would possibly
++     not to free only MISSING_FILEPAIR but also some such structures (allocated
++     during the htab_find_slot call).  */
++
++  missing_filepair_find.binary = (char *) binary;
++  missing_filepair_find.debug = (char *) debug;
++  slot = (struct missing_filepair **) htab_find_slot (missing_filepair_hash,
++						      &missing_filepair_find,
++						      INSERT);
++
++  /* While it may be still printed duplicitely with the missing debuginfo file
++   * it is due to once printing about the binary file build-id link and once
++   * about the .debug file build-id link as both the build-id symlinks are
++   * located in the debuginfo package.  */
++
++  if (*slot != NULL)
++    return;
++
++  missing_filepair = (struct missing_filepair *) obstack_alloc (&missing_filepair_obstack,
++								sizeof (*missing_filepair) - 1
++								+ binary_len0 + debug_len0);
++  missing_filepair->binary = missing_filepair->data;
++  memcpy (missing_filepair->binary, binary, binary_len0);
++  if (debug != NULL)
++    {
++      missing_filepair->debug = missing_filepair->binary + binary_len0;
++      memcpy (missing_filepair->debug, debug, debug_len0);
++    }
++  else
++    missing_filepair->debug = NULL;
++
++  *slot = missing_filepair;
++
++  /* We do not collect and flush these messages as each such message
++     already requires its own separate lines.  */
++
++  fprintf_unfiltered (gdb_stdlog,
++		      _("Missing separate debuginfo for %s\n"), binary);
++  if (debug != NULL)
++    fprintf_unfiltered (gdb_stdlog, _("Try to install the hash file %s\n"),
++			debug);
++}
++
+ /* See build-id.h.  */
+ 
+ std::string
+-find_separate_debug_file_by_buildid (struct objfile *objfile)
++find_separate_debug_file_by_buildid (struct objfile *objfile,
++			gdb::unique_xmalloc_ptr<char> *build_id_filename_return)
+ {
+   const struct bfd_build_id *build_id;
+ 
+-  build_id = build_id_bfd_get (objfile->obfd);
++  if (build_id_filename_return)
++    *build_id_filename_return = NULL;
++
++  build_id = build_id_bfd_shdr_get (objfile->obfd);
+   if (build_id != NULL)
+     {
+       if (separate_debug_file_debug)
+ 	printf_unfiltered (_("\nLooking for separate debug info (build-id) for "
+ 			     "%s\n"), objfile_name (objfile));
+ 
++      char *build_id_filename_cstr = NULL;
+       gdb_bfd_ref_ptr abfd (build_id_to_debug_bfd (build_id->size,
+-						   build_id->data));
++						    build_id->data,
++	      (!build_id_filename_return ? NULL : &build_id_filename_cstr), 1));
++      if (build_id_filename_return)
++	{
++	  if (!build_id_filename_cstr)
++	    gdb_assert (!*build_id_filename_return);
++	  else
++	    {
++	      *build_id_filename_return = gdb::unique_xmalloc_ptr<char> (build_id_filename_cstr);
++	      build_id_filename_cstr = NULL;
++	    }
++	}
++
+       /* Prevent looping on a stripped .debug file.  */
+       if (abfd != NULL
+ 	  && filename_cmp (bfd_get_filename (abfd.get ()),
+@@ -151,3 +821,21 @@ find_separate_debug_file_by_buildid (struct objfile *objfile)
+ 
+   return std::string ();
+ }
++
++extern void _initialize_build_id (void);
++
++void
++_initialize_build_id (void)
++{
++  add_setshow_zinteger_cmd ("build-id-verbose", no_class, &build_id_verbose,
++			    _("\
++Set debugging level of the build-id locator."), _("\
++Show debugging level of the build-id locator."), _("\
++Level 1 (default) enables printing the missing debug filenames,\n\
++level 2 also prints the parsing of binaries to find the identificators."),
++			    NULL,
++			    show_build_id_verbose,
++			    &setlist, &showlist);
++
++  gdb::observers::executable_changed.attach (debug_print_executable_changed);
++}
+diff --git a/gdb/build-id.h b/gdb/build-id.h
+--- a/gdb/build-id.h
++++ b/gdb/build-id.h
+@@ -22,9 +22,10 @@
+ 
+ #include "gdb_bfd.h"
+ 
+-/* Locate NT_GNU_BUILD_ID from ABFD and return its content.  */
++/* Separate debuginfo files have corrupted PHDR but SHDR is correct there.
++   Locate NT_GNU_BUILD_ID from ABFD and return its content.  */
+ 
+-extern const struct bfd_build_id *build_id_bfd_get (bfd *abfd);
++extern const struct bfd_build_id *build_id_bfd_shdr_get (bfd *abfd);
+ 
+ /* Return true if ABFD has NT_GNU_BUILD_ID matching the CHECK value.
+    Otherwise, issue a warning and return false.  */
+@@ -38,13 +39,18 @@ extern int build_id_verify (bfd *abfd,
+    the caller.  */
+ 
+ extern gdb_bfd_ref_ptr build_id_to_debug_bfd (size_t build_id_len,
+-					      const bfd_byte *build_id);
++					      const bfd_byte *build_id,
++					      char **link_return,
++					      int add_debug_suffix);
++
++extern char *build_id_to_filename (const struct bfd_build_id *build_id,
++				   char **link_return);
+ 
+ /* Find the separate debug file for OBJFILE, by using the build-id
+    associated with OBJFILE's BFD.  If successful, returns the file name for the
+    separate debug file, otherwise, return an empty string.  */
+ 
+-extern std::string find_separate_debug_file_by_buildid
+-  (struct objfile *objfile);
++extern std::string find_separate_debug_file_by_buildid (struct objfile *objfile,
++		       gdb::unique_xmalloc_ptr<char> *build_id_filename_return);
+ 
+ #endif /* BUILD_ID_H */
+diff --git a/gdb/coffread.c b/gdb/coffread.c
+--- a/gdb/coffread.c
++++ b/gdb/coffread.c
+@@ -733,7 +733,8 @@ coff_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
+   /* Try to add separate debug file if no symbols table found.   */
+   if (!objfile_has_partial_symbols (objfile))
+     {
+-      std::string debugfile = find_separate_debug_file_by_buildid (objfile);
++      std::string debugfile = find_separate_debug_file_by_buildid (objfile,
++								   NULL);
+ 
+       if (debugfile.empty ())
+ 	debugfile = find_separate_debug_file_by_debuglink (objfile);
+diff --git a/gdb/corelow.c b/gdb/corelow.c
+--- a/gdb/corelow.c
++++ b/gdb/corelow.c
+@@ -45,6 +45,10 @@
+ #include "gdb_bfd.h"
+ #include "completer.h"
+ #include "filestuff.h"
++#include "auxv.h"
++#include "elf/common.h"
++#include "gdbcmd.h"
++#include "build-id.h"
+ 
+ #ifndef O_LARGEFILE
+ #define O_LARGEFILE 0
+@@ -321,6 +325,54 @@ add_to_thread_list (bfd *abfd, asection *asect, void *reg_sect_arg)
+     inferior_ptid = ptid;			/* Yes, make it current.  */
+ }
+ 
++static int build_id_core_loads = 1;
++
++static void
++build_id_locate_exec (int from_tty)
++{
++  CORE_ADDR at_entry;
++  struct bfd_build_id *build_id;
++  char *execfilename, *debug_filename;
++  char *build_id_filename;
++  struct cleanup *back_to;
++
++  if (exec_bfd != NULL || symfile_objfile != NULL)
++    return;
++
++  if (target_auxv_search (current_top_target (), AT_ENTRY, &at_entry) <= 0)
++    return;
++
++  build_id = build_id_addr_get (at_entry);
++  if (build_id == NULL)
++    return;
++  back_to = make_cleanup (xfree, build_id);
++
++  /* SYMFILE_OBJFILE should refer to the main executable (not only to its
++     separate debug info file).  gcc44+ keeps .eh_frame only in the main
++     executable without its duplicate .debug_frame in the separate debug info
++     file - such .eh_frame would not be found if SYMFILE_OBJFILE would refer
++     directly to the separate debug info file.  */
++
++  execfilename = build_id_to_filename (build_id, &build_id_filename);
++  make_cleanup (xfree, build_id_filename);
++
++  if (execfilename != NULL)
++    {
++      make_cleanup (xfree, execfilename);
++      exec_file_attach (execfilename, from_tty);
++      symbol_file_add_main (execfilename,
++			    symfile_add_flag (!from_tty ? 0 : SYMFILE_VERBOSE));
++      if (symfile_objfile != NULL)
++        symfile_objfile->flags |= OBJF_BUILD_ID_CORE_LOADED;
++    }
++  else
++    debug_print_missing (_("the main executable file"), build_id_filename);
++
++  do_cleanups (back_to);
++
++  /* No automatic SOLIB_ADD as the libraries would get read twice.  */
++}
++
+ /* Issue a message saying we have no core to debug, if FROM_TTY.  */
+ 
+ static void
+@@ -464,6 +516,14 @@ core_target_open (const char *arg, int from_tty)
+ 	switch_to_thread (thread);
+     }
+ 
++  /* Find the build_id identifiers.  If it gets executed after
++     POST_CREATE_INFERIOR we would clash with asking to discard the already
++     loaded VDSO symbols.  If it gets executed before bfd_map_over_sections
++     INFERIOR_PTID is still not set and libthread_db initialization crashes on
++     PID == 0 in ps_pglobal_lookup.  */
++  if (build_id_core_loads != 0)
++    build_id_locate_exec (from_tty);
++
+   post_create_inferior (target, from_tty);
+ 
+   /* Now go through the target stack looking for threads since there
+@@ -1072,4 +1132,11 @@ void
+ _initialize_corelow (void)
+ {
+   add_target (core_target_info, core_target_open, filename_completer);
++
++  add_setshow_boolean_cmd ("build-id-core-loads", class_files,
++			   &build_id_core_loads, _("\
++Set whether CORE-FILE loads the build-id associated files automatically."), _("\
++Show whether CORE-FILE loads the build-id associated files automatically."),
++			   NULL, NULL, NULL,
++			   &setlist, &showlist);
+ }
+diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
+--- a/gdb/doc/gdb.texinfo
++++ b/gdb/doc/gdb.texinfo
+@@ -19570,6 +19570,27 @@ information files.
+ 
+ @end table
+ 
++You can also adjust the current verbosity of the @dfn{build id} locating.
++
++@table @code
++
++@kindex set build-id-verbose
++@item set build-id-verbose 0
++No additional messages are printed.
++
++@item set build-id-verbose 1
++Missing separate debug filenames are printed.
++
++@item set build-id-verbose 2
++Missing separate debug filenames are printed and also all the parsing of the
++binaries to find their @dfn{build id} content is printed.
++
++@kindex show build-id-verbose
++@item show build-id-verbose
++Show the current verbosity value for the @dfn{build id} content locating.
++
++@end table
++
+ @cindex @code{.gnu_debuglink} sections
+ @cindex debug link sections
+ A debug link is a special section of the executable file named
+diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
+--- a/gdb/dwarf2read.c
++++ b/gdb/dwarf2read.c
+@@ -2683,7 +2683,7 @@ dwarf2_get_dwz_file (struct dwarf2_per_objfile *dwarf2_per_objfile)
+     }
+ 
+   if (dwz_bfd == NULL)
+-    dwz_bfd = build_id_to_debug_bfd (buildid_len, buildid);
++    dwz_bfd = build_id_to_debug_bfd (buildid_len, buildid, NULL, 1);
+ 
+   if (dwz_bfd == NULL)
+     error (_("could not find '.gnu_debugaltlink' file for %s"),
+diff --git a/gdb/elfread.c b/gdb/elfread.c
+--- a/gdb/elfread.c
++++ b/gdb/elfread.c
+@@ -1290,7 +1290,9 @@ elf_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
+ 	   && objfile->separate_debug_objfile == NULL
+ 	   && objfile->separate_debug_objfile_backlink == NULL)
+     {
+-      std::string debugfile = find_separate_debug_file_by_buildid (objfile);
++      gdb::unique_xmalloc_ptr<char> build_id_filename;
++      std::string debugfile
++	= find_separate_debug_file_by_buildid (objfile, &build_id_filename);
+ 
+       if (debugfile.empty ())
+ 	debugfile = find_separate_debug_file_by_debuglink (objfile);
+@@ -1302,6 +1304,10 @@ elf_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
+ 	  symbol_file_add_separate (abfd.get (), debugfile.c_str (),
+ 				    symfile_flags, objfile);
+ 	}
++      /* Check if any separate debug info has been extracted out.  */
++      else if (bfd_get_section_by_name (objfile->obfd, ".gnu_debuglink")
++	       != NULL)
++	debug_print_missing (objfile_name (objfile), build_id_filename.get ());
+     }
+ }
+ 
+diff --git a/gdb/objfiles.h b/gdb/objfiles.h
+--- a/gdb/objfiles.h
++++ b/gdb/objfiles.h
+@@ -470,6 +470,10 @@ struct objfile
+   htab_t static_links {};
+ };
+ 
++/* This file was loaded according to the BUILD_ID_CORE_LOADS rules.  */
++
++#define OBJF_BUILD_ID_CORE_LOADED static_cast<enum objfile_flag>(1 << 12)
++
+ /* Declarations for functions defined in objfiles.c */
+ 
+ extern struct gdbarch *get_objfile_arch (const struct objfile *);
+diff --git a/gdb/python/py-objfile.c b/gdb/python/py-objfile.c
+--- a/gdb/python/py-objfile.c
++++ b/gdb/python/py-objfile.c
+@@ -137,7 +137,7 @@ objfpy_get_build_id (PyObject *self, void *closure)
+ 
+   TRY
+     {
+-      build_id = build_id_bfd_get (objfile->obfd);
++      build_id = build_id_bfd_shdr_get (objfile->obfd);
+     }
+   CATCH (except, RETURN_MASK_ALL)
+     {
+@@ -544,7 +544,7 @@ objfpy_lookup_objfile_by_build_id (const char *build_id)
+       /* Don't return separate debug files.  */
+       if (objfile->separate_debug_objfile_backlink != NULL)
+ 	continue;
+-      obfd_build_id = build_id_bfd_get (objfile->obfd);
++      obfd_build_id = build_id_bfd_shdr_get (objfile->obfd);
+       if (obfd_build_id == NULL)
+ 	continue;
+       if (objfpy_build_id_matches (obfd_build_id, build_id))
+diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c
+--- a/gdb/solib-svr4.c
++++ b/gdb/solib-svr4.c
+@@ -45,6 +45,7 @@
+ #include "auxv.h"
+ #include "gdb_bfd.h"
+ #include "probe.h"
++#include "build-id.h"
+ 
+ static struct link_map_offsets *svr4_fetch_link_map_offsets (void);
+ static int svr4_have_link_map_offsets (void);
+@@ -1356,9 +1357,51 @@ svr4_read_so_list (CORE_ADDR lm, CORE_ADDR prev_lm,
+ 	  continue;
+ 	}
+ 
+-      strncpy (newobj->so_name, buffer.get (), SO_NAME_MAX_PATH_SIZE - 1);
+-      newobj->so_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0';
+-      strcpy (newobj->so_original_name, newobj->so_name);
++      {
++	struct bfd_build_id *build_id;
++
++	strncpy (newobj->so_original_name, buffer.get (), SO_NAME_MAX_PATH_SIZE - 1);
++	newobj->so_original_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0';
++	/* May get overwritten below.  */
++	strcpy (newobj->so_name, newobj->so_original_name);
++
++	build_id = build_id_addr_get (((lm_info_svr4 *) newobj->lm_info)->l_ld);
++	if (build_id != NULL)
++	  {
++	    char *name, *build_id_filename;
++
++	    /* Missing the build-id matching separate debug info file
++	       would be handled while SO_NAME gets loaded.  */
++	    name = build_id_to_filename (build_id, &build_id_filename);
++	    if (name != NULL)
++	      {
++		strncpy (newobj->so_name, name, SO_NAME_MAX_PATH_SIZE - 1);
++		newobj->so_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0';
++		xfree (name);
++	      }
++	    else
++	      {
++		debug_print_missing (newobj->so_name, build_id_filename);
++
++		/* In the case the main executable was found according to
++		   its build-id (from a core file) prevent loading
++		   a different build of a library with accidentally the
++		   same SO_NAME.
++
++		   It suppresses bogus backtraces (and prints "??" there
++		   instead) if the on-disk files no longer match the
++		   running program version.  */
++
++		if (symfile_objfile != NULL
++		    && (symfile_objfile->flags
++			& OBJF_BUILD_ID_CORE_LOADED) != 0)
++		  newobj->so_name[0] = 0;
++	      }
++
++	    xfree (build_id_filename);
++	    xfree (build_id);
++	  }
++      }
+ 
+       /* If this entry has no name, or its name matches the name
+ 	 for the main executable, don't include it in the list.  */
+diff --git a/gdb/symfile.h b/gdb/symfile.h
+--- a/gdb/symfile.h
++++ b/gdb/symfile.h
+@@ -537,6 +537,10 @@ void expand_symtabs_matching
+ void map_symbol_filenames (symbol_filename_ftype *fun, void *data,
+ 			   int need_fullname);
+ 
++/* build-id support.  */
++extern struct bfd_build_id *build_id_addr_get (CORE_ADDR addr);
++extern void debug_print_missing (const char *binary, const char *debug);
++
+ /* From dwarf2read.c */
+ 
+ /* Names for a dwarf2 debugging section.  The field NORMAL is the normal
+diff --git a/gdb/testsuite/gdb.base/corefile.exp b/gdb/testsuite/gdb.base/corefile.exp
+--- a/gdb/testsuite/gdb.base/corefile.exp
++++ b/gdb/testsuite/gdb.base/corefile.exp
+@@ -311,3 +311,33 @@ gdb_test_multiple "core-file $corefile" $test {
+ 	pass $test
+     }
+ }
++
++
++# Test auto-loading of binary files through build-id from the core file.
++set buildid [build_id_debug_filename_get $binfile]
++set wholetest "binfile found by build-id"
++if {$buildid == ""} {
++    untested "$wholetest (binary has no build-id)"
++} else {
++    gdb_exit
++    gdb_start
++
++    regsub {\.debug$} $buildid {} buildid
++    set debugdir [standard_output_file ${testfile}-debugdir]
++    file delete -force -- $debugdir
++    file mkdir $debugdir/[file dirname $buildid]
++    file copy $binfile $debugdir/$buildid
++
++    set test "show debug-file-directory"
++    gdb_test_multiple $test $test {
++	-re "The directory where separate debug symbols are searched for is \"(.*)\"\\.\r\n$gdb_prompt $" {
++	    set debugdir_orig $expect_out(1,string)
++	    pass $test
++	}
++    }
++    gdb_test_no_output "set debug-file-directory $debugdir:$debugdir_orig" "set debug-file-directory"
++    gdb_test "show build-id-core-loads" {Whether CORE-FILE loads the build-id associated files automatically is on\.}
++    gdb_test "core-file $corefile" "\r\nProgram terminated with .*" "core-file without executable"
++    gdb_test "info files" "Local exec file:\r\n\[ \t\]*`[string_to_regexp $debugdir/$buildid]', file type .*"
++    pass $wholetest
++}
+diff --git a/gdb/testsuite/gdb.base/new-ui-pending-input.exp b/gdb/testsuite/gdb.base/new-ui-pending-input.exp
+--- a/gdb/testsuite/gdb.base/new-ui-pending-input.exp
++++ b/gdb/testsuite/gdb.base/new-ui-pending-input.exp
+@@ -62,6 +62,7 @@ proc test_command_line_new_ui_pending_input {} {
+     set options ""
+     append options " -iex \"set height 0\""
+     append options " -iex \"set width 0\""
++    append options " -iex \"set build-id-verbose 0\""
+     append options " -iex \"new-ui console $extra_tty_name\""
+     append options " -ex \"b $bpline\""
+     append options " -ex \"run\""
+diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
+--- a/gdb/testsuite/lib/gdb.exp
++++ b/gdb/testsuite/lib/gdb.exp
+@@ -1695,6 +1695,16 @@ proc default_gdb_start { } {
+ 	    warning "Couldn't set the width to 0."
+ 	}
+     }
++    # Turn off the missing warnings as the testsuite does not expect it.
++    send_gdb "set build-id-verbose 0\n"
++    gdb_expect 10 {
++	-re "$gdb_prompt $" {
++	    verbose "Disabled the missing debug infos warnings." 2
++	}
++	timeout {
++	    warning "Could not disable the missing debug infos warnings.."
++	}
++    }
+     return 0
+ }
+ 
+diff --git a/gdb/testsuite/lib/mi-support.exp b/gdb/testsuite/lib/mi-support.exp
+--- a/gdb/testsuite/lib/mi-support.exp
++++ b/gdb/testsuite/lib/mi-support.exp
+@@ -309,6 +309,16 @@ proc default_mi_gdb_start { args } {
+ 	    warning "Couldn't set the width to 0."
+ 	}
+     }
++    # Turn off the missing warnings as the testsuite does not expect it.
++    send_gdb "190-gdb-set build-id-verbose 0\n"
++    gdb_expect 10 {
++	-re ".*190-gdb-set build-id-verbose 0\r\n190\\\^done\r\n$mi_gdb_prompt$" {
++	    verbose "Disabled the missing debug infos warnings." 2
++	}
++	timeout {
++	    warning "Could not disable the missing debug infos warnings.."
++	}
++    }
+ 
+     if { $separate_inferior_pty } {
+ 	mi_create_inferior_pty
diff --git a/SOURCES/gdb-6.6-bz229517-gcore-without-terminal.patch b/SOURCES/gdb-6.6-bz229517-gcore-without-terminal.patch
new file mode 100644
index 0000000..b4ddc9f
--- /dev/null
+++ b/SOURCES/gdb-6.6-bz229517-gcore-without-terminal.patch
@@ -0,0 +1,188 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Jan Kratochvil <jan.kratochvil@redhat.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.6-bz229517-gcore-without-terminal.patch
+
+;; Allow running `/usr/bin/gcore' with provided but inaccessible tty (BZ 229517).
+;;=fedoratest
+
+2007-04-22  Jan Kratochvil <jan.kratochvil@redhat.com>
+
+	* gdb_gcore.sh: Redirect GDB from `</dev/null'.
+
+2007-04-22  Jan Kratochvil <jan.kratochvil@redhat.com>
+
+	* gdb.base/gcorebg.exp, gdb.base/gcorebg.c: New files.
+
+diff --git a/gdb/testsuite/gdb.base/gcorebg.c b/gdb/testsuite/gdb.base/gcorebg.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/gcorebg.c
+@@ -0,0 +1,49 @@
++#include <stdio.h>
++#include <sys/types.h>
++#include <unistd.h>
++#include <stdlib.h>
++#include <signal.h>
++#include <string.h>
++#include <assert.h>
++
++int main (int argc, char **argv)
++{
++  pid_t pid = 0;
++  pid_t ppid;
++  char buf[1024*2 + 500];
++  int gotint;
++
++  if (argc != 4)
++    {
++      fprintf (stderr, "Syntax: %s {standard|detached} <gcore command> <core output file>\n",
++	       argv[0]);
++      exit (1);
++    }
++
++  pid = fork ();
++
++  switch (pid)
++    {
++      case 0:
++        if (strcmp (argv[1], "detached") == 0)
++	  setpgrp ();
++	ppid = getppid ();
++	gotint = snprintf (buf, sizeof (buf), "sh %s -o %s %d", argv[2], argv[3], (int) ppid);
++	assert (gotint < sizeof (buf));
++	system (buf);
++	fprintf (stderr, "Killing parent PID %d\n", ppid);
++	kill (ppid, SIGTERM);
++	break;
++
++      case -1:
++	perror ("fork err\n");
++	exit (1);
++	break;
++
++      default:
++	fprintf (stderr,"Sleeping as PID %d\n", getpid ());
++	sleep (60);
++    }
++
++  return 0;
++}
+diff --git a/gdb/testsuite/gdb.base/gcorebg.exp b/gdb/testsuite/gdb.base/gcorebg.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/gcorebg.exp
+@@ -0,0 +1,113 @@
++# Copyright 2007 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-gdb@prep.ai.mit.edu
++
++# This file was written by Jan Kratochvil <jan.kratochvil@redhat.com>.
++# This is a test for `gdb_gcore.sh' functionality.
++# It also tests a regression with `gdb_gcore.sh' being run without its
++# accessible terminal.
++
++if ![info exists GCORE] {
++    set GCORE "[standard_output_file ../../../../gcore]"
++}
++verbose "using GCORE = $GCORE" 2
++
++set testfile "gcorebg"
++set srcfile  ${testfile}.c
++set binfile  [standard_output_file ${testfile}]
++set corefile [standard_output_file ${testfile}.test]
++
++if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
++     untested gcorebg.exp
++     return -1
++}
++
++# Cleanup.
++
++proc core_clean {} {
++    global corefile
++
++    foreach file [glob -nocomplain [join [list $corefile *] ""]] {
++	verbose "Delete file $file" 1
++	remote_file target delete $file
++    }
++}
++core_clean
++remote_file target delete "./gdb"
++
++# Generate the core file.
++
++# Provide `./gdb' for `gdb_gcore.sh' running it as a bare `gdb' command.
++# Setup also `$PATH' appropriately.
++# If GDB was not found let `gdb_gcore.sh' to find the system GDB by `$PATH'.
++if {$GDB != "gdb"} {
++    file link ./gdb $GDB
++}
++global env
++set oldpath $env(PATH)
++set env(PATH) [join [list . $env(PATH)] ":"]
++verbose "PATH = $env(PATH)" 2
++
++# Test file body.
++# $detached == "standard" || $detached == "detached"
++
++proc test_body { detached } {
++    global binfile
++    global GCORE
++    global corefile
++
++    set res [remote_spawn target "$binfile $detached $GCORE $corefile"]
++    if { $res < 0 || $res == "" } {
++	fail "Spawning $detached gcore"
++	return 1
++    }
++    pass "Spawning $detached gcore"
++    remote_expect target 20 {
++	timeout {
++	    fail "Spawned $detached gcore finished (timeout)"
++	    remote_exec target "kill -9 -[exp_pid -i $res]"
++	    return 1
++	}
++	"Saved corefile .*\r\nKilling parent PID " {
++	    pass "Spawned $detached gcore finished"
++	    remote_wait target 20
++	}
++    }
++
++    if {1 == [llength [glob -nocomplain [join [list $corefile *] ""]]]} {
++	pass "Core file generated by $detached gcore"
++    } else {
++	fail "Core file generated by $detached gcore"
++    }
++    core_clean
++}
++
++# First a general `gdb_gcore.sh' spawn with its controlling terminal available.
++
++test_body standard
++
++# And now `gdb_gcore.sh' spawn without its controlling terminal available.
++# It is spawned through `gcorebg.c' using setpgrp ().
++
++test_body detached
++
++
++# Cleanup.
++
++set env(PATH) $oldpath
++remote_file target delete "./gdb"
diff --git a/SOURCES/gdb-6.6-bz230000-power6-disassembly-test.patch b/SOURCES/gdb-6.6-bz230000-power6-disassembly-test.patch
new file mode 100644
index 0000000..f40b6f6
--- /dev/null
+++ b/SOURCES/gdb-6.6-bz230000-power6-disassembly-test.patch
@@ -0,0 +1,94 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.6-bz230000-power6-disassembly-test.patch
+
+;; Testcase for PPC Power6/DFP instructions disassembly (BZ 230000).
+;;=fedoratest
+
+https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=230000
+
+The original testcase
+	https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=230000#c1
+requires too recent GCC.
+
+diff --git a/gdb/testsuite/gdb.arch/powerpc-power6.exp b/gdb/testsuite/gdb.arch/powerpc-power6.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.arch/powerpc-power6.exp
+@@ -0,0 +1,54 @@
++# Copyright 2007 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
++
++# Test PowerPC Power6 instructions disassembly.
++
++if {![istarget "powerpc*-*-*"]} then {
++    verbose "Skipping PowerPC Power6 instructions disassembly."
++    return
++}
++
++set testfile "powerpc-power6"
++set srcfile ${testfile}.s
++set objfile [standard_output_file ${testfile}.o]
++
++if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objfile}" object {debug}] != "" } {
++    untested "PowerPC prologue tests"
++    return -1
++}
++
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++gdb_load ${objfile}
++
++# Disassemble the function.
++
++gdb_test "disass func" ":\tblr\r\n.*" "Basic disassembly"
++
++gdb_test "disass func" ":\tdcbzl  *r8,r9\r\n.*" "Power5 disassembly dcbzl"
++gdb_test "disass func" ":\tfrsqrtes  *f10,f11\r\n.*" "Power5 disassembly frsqrtes"
++gdb_test "disass func" ":\tdadd  *f1,f2,f1\r\n.*" "Power6 disassembly dadd"
++gdb_test "disass func" ":\tdaddq  *f0,f2,f0\r\n.*" "Power6 disassembly daddq"
++gdb_test "disass func" ":\tdsub  *f1,f2,f1\r\n.*" "Power6 disassembly dsub"
++gdb_test "disass func" ":\tdsubq  *f0,f2,f0\r\n.*" "Power6 disassembly dsubq"
++gdb_test "disass func" ":\tdmul  *f1,f2,f1\r\n.*" "Power6 disassembly dmul"
++gdb_test "disass func" ":\tdmulq  *f0,f2,f0\r\n.*" "Power6 disassembly dmulq"
++gdb_test "disass func" ":\tddiv  *f1,f2,f1\r\n.*" "Power6 disassembly ddiv"
++gdb_test "disass func" ":\tddivq  *f0,f2,f0\r\n.*" "Power6 disassembly ddivq"
++gdb_test "disass func" ":\tdcmpu  *cr1,f2,f1\r\n.*" "Power6 disassembly dcmpu"
++gdb_test "disass func" ":\tdcmpuq  *cr1,f2,f0\r\n.*" "Power6 disassembly dcmpuq"
+diff --git a/gdb/testsuite/gdb.arch/powerpc-power6.s b/gdb/testsuite/gdb.arch/powerpc-power6.s
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.arch/powerpc-power6.s
+@@ -0,0 +1,16 @@
++	.text
++	.globl	func
++func:
++	blr
++	.long	0x7c284fec	/* dcbzl	r8,r9		*/
++	.long	0xed405834	/* frsqrtes	f10,f11		*/
++	.long	0xec220804	/* dadd		f1,f2,f1	*/
++	.long	0xfc020004	/* daddq	f0,f2,f0	*/
++	.long	0xec220c04	/* dsub		f1,f2,f1	*/
++	.long	0xfc020404	/* dsubq	f0,f2,f0	*/
++	.long	0xec220844	/* dmul		f1,f2,f1	*/
++	.long	0xfc020044	/* dmulq	f0,f2,f0	*/
++	.long	0xec220c44	/* ddiv		f1,f2,f1	*/
++	.long	0xfc020444	/* ddivq	f0,f2,f0	*/
++	.long	0xec820d04	/* dcmpu	cr1,f2,f1	*/
++	.long	0xfc820504	/* dcmpuq	cr1,f2,f0	*/
diff --git a/SOURCES/gdb-6.6-bz237572-ppc-atomic-sequence-test.patch b/SOURCES/gdb-6.6-bz237572-ppc-atomic-sequence-test.patch
new file mode 100644
index 0000000..89f2d64
--- /dev/null
+++ b/SOURCES/gdb-6.6-bz237572-ppc-atomic-sequence-test.patch
@@ -0,0 +1,278 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Jan Kratochvil <jan.kratochvil@redhat.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.6-bz237572-ppc-atomic-sequence-test.patch
+
+;; Support for stepping over PPC atomic instruction sequences (BZ 237572).
+;;=fedoratest
+
+2007-06-25  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.threads/atomic-seq-threaded.c,
+	gdb.threads/atomic-seq-threaded.exp: New files.
+
+diff --git a/gdb/testsuite/gdb.threads/atomic-seq-threaded.c b/gdb/testsuite/gdb.threads/atomic-seq-threaded.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.threads/atomic-seq-threaded.c
+@@ -0,0 +1,171 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2007 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 2 of the License, 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; if not, write to the Free Software
++   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
++   MA 02110-1301, USA.  */
++
++/* Test stepping over RISC atomic sequences.
++   This variant testcases the code for stepping another thread while skipping
++   over the atomic sequence in the former thread
++   (STEPPING_PAST_SINGLESTEP_BREAKPOINT).
++   Code comes from gcc/testsuite/gcc.dg/sync-2.c  */
++
++/* { dg-options "-march=i486" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
++/* { dg-options "-mcpu=v9" { target sparc*-*-* } } */
++
++/* Test functionality of the intrinsics for 'short' and 'char'.  */
++
++#include <stdlib.h>
++#include <string.h>
++#include <pthread.h>
++#include <assert.h>
++#include <unistd.h>
++
++#define LOOPS 2
++
++static int unused;
++
++static char AI[18];
++static char init_qi[18] = { 3,5,7,9,0,0,0,0,-1,0,0,0,0,0,-1,0,0,0 };
++static char test_qi[18] = { 3,5,7,9,1,4,22,-12,7,8,9,7,1,-12,7,8,9,7 };
++
++static void
++do_qi (void)
++{
++  if (__sync_fetch_and_add(AI+4, 1) != 0)
++    abort ();
++  if (__sync_fetch_and_add(AI+5, 4) != 0)
++    abort ();
++  if (__sync_fetch_and_add(AI+6, 22) != 0)
++    abort ();
++  if (__sync_fetch_and_sub(AI+7, 12) != 0)
++    abort ();
++  if (__sync_fetch_and_and(AI+8, 7) != (char)-1)
++    abort ();
++  if (__sync_fetch_and_or(AI+9, 8) != 0)
++    abort ();
++  if (__sync_fetch_and_xor(AI+10, 9) != 0)
++    abort ();
++  if (__sync_fetch_and_nand(AI+11, 7) != 0)
++    abort ();
++
++  if (__sync_add_and_fetch(AI+12, 1) != 1)
++    abort ();
++  if (__sync_sub_and_fetch(AI+13, 12) != (char)-12)
++    abort ();
++  if (__sync_and_and_fetch(AI+14, 7) != 7)
++    abort ();
++  if (__sync_or_and_fetch(AI+15, 8) != 8)
++    abort ();
++  if (__sync_xor_and_fetch(AI+16, 9) != 9)
++    abort ();
++  if (__sync_nand_and_fetch(AI+17, 7) != 7)
++    abort ();
++}
++
++static short AL[18];
++static short init_hi[18] = { 3,5,7,9,0,0,0,0,-1,0,0,0,0,0,-1,0,0,0 };
++static short test_hi[18] = { 3,5,7,9,1,4,22,-12,7,8,9,7,1,-12,7,8,9,7 };
++
++static void
++do_hi (void)
++{
++  if (__sync_fetch_and_add(AL+4, 1) != 0)
++    abort ();
++  if (__sync_fetch_and_add(AL+5, 4) != 0)
++    abort ();
++  if (__sync_fetch_and_add(AL+6, 22) != 0)
++    abort ();
++  if (__sync_fetch_and_sub(AL+7, 12) != 0)
++    abort ();
++  if (__sync_fetch_and_and(AL+8, 7) != -1)
++    abort ();
++  if (__sync_fetch_and_or(AL+9, 8) != 0)
++    abort ();
++  if (__sync_fetch_and_xor(AL+10, 9) != 0)
++    abort ();
++  if (__sync_fetch_and_nand(AL+11, 7) != 0)
++    abort ();
++
++  if (__sync_add_and_fetch(AL+12, 1) != 1)
++    abort ();
++  if (__sync_sub_and_fetch(AL+13, 12) != -12)
++    abort ();
++  if (__sync_and_and_fetch(AL+14, 7) != 7)
++    abort ();
++  if (__sync_or_and_fetch(AL+15, 8) != 8)
++    abort ();
++  if (__sync_xor_and_fetch(AL+16, 9) != 9)
++    abort ();
++  if (__sync_nand_and_fetch(AL+17, 7) != 7)
++    abort ();
++}
++
++static void *
++start1 (void *arg)
++{
++  unsigned loop;
++  sleep(1);
++
++  for (loop = 0; loop < LOOPS; loop++)
++    {
++      memcpy(AI, init_qi, sizeof(init_qi));
++
++      do_qi ();
++
++      if (memcmp (AI, test_qi, sizeof(test_qi)))
++	abort ();
++    }
++
++  return arg;						/* _delete1_ */
++}
++
++static void *
++start2 (void *arg)
++{
++  unsigned loop;
++
++  for (loop = 0; loop < LOOPS; loop++)
++    {
++      memcpy(AL, init_hi, sizeof(init_hi));
++
++      do_hi ();
++
++      if (memcmp (AL, test_hi, sizeof(test_hi)))
++	abort ();
++    }
++
++  return arg;						/* _delete2_ */
++}
++
++int
++main (int argc, char **argv)
++{
++  pthread_t thread;
++  int i;
++
++  i = pthread_create (&thread, NULL, start1, NULL);	/* _create_ */
++  assert (i == 0);					/* _create_after_ */
++
++  sleep (1);
++
++  start2 (NULL);
++
++  i = pthread_join (thread, NULL);			/* _delete_ */
++  assert (i == 0);
++
++  return 0;						/* _exit_ */
++}
+diff --git a/gdb/testsuite/gdb.threads/atomic-seq-threaded.exp b/gdb/testsuite/gdb.threads/atomic-seq-threaded.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.threads/atomic-seq-threaded.exp
+@@ -0,0 +1,84 @@
++# atomic-seq-threaded.exp -- Test case for stepping over RISC atomic code seqs.
++# This variant testcases the code for stepping another thread while skipping
++# over the atomic sequence in the former thread
++# (STEPPING_PAST_SINGLESTEP_BREAKPOINT).
++# Copyright (C) 2007 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-gdb@prep.ai.mit.edu
++
++set testfile atomic-seq-threaded
++set srcfile ${testfile}.c
++set binfile [standard_output_file ${testfile}]
++
++foreach opts {{} {compiler=gcc4} {FAIL}} {
++    if {$opts eq "FAIL"} {
++	return -1
++    }
++    if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug $opts]] eq "" } {
++	break
++    }
++}
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++
++gdb_load ${binfile}
++if ![runto_main] then {
++   fail "Can't run to main"
++   return 0
++}
++
++# pthread_create () will not pass even on x86_64 with software watchpoint.
++# Pass after pthread_create () without any watchpoint active.
++set line [gdb_get_line_number "_create_after_"]
++gdb_test "tbreak $line" \
++	 "reakpoint (\[0-9\]+) at .*$srcfile, line $line\..*" \
++	 "set breakpoint after pthread_create ()"
++gdb_test "c" \
++	 ".*/\\* _create_after_ \\*/.*" \
++	 "run till after pthread_create ()"
++
++# Without a watchpoint being software no single-stepping would be used.
++set test "Start (software) watchpoint"
++gdb_test_multiple "watch unused" $test {
++    -re "Watchpoint \[0-9\]+: unused.*$gdb_prompt $" {
++	pass $test
++    }
++    -re "Hardware watchpoint \[0-9\]+: unused.*$gdb_prompt $" {
++	# We do not test the goal but still the whole testcase should pass.
++	unsupported $test
++    }
++}
++
++# More thorough testing of the scheduling logic.
++gdb_test "set scheduler-locking step" ""
++
++# Critical code path is stepped through at this point.
++set line [gdb_get_line_number "_exit_"]
++gdb_test "tbreak $line" \
++	 "reakpoint \[0-9\]+ at .*$srcfile, line $line\..*" \
++	 "set breakpoint at _exit_"
++gdb_test "c" \
++	 ".*/\\* _exit_ \\*/.*" \
++	 "run till _exit_"
++
++# Just a nonproblematic program exit.
++gdb_test "c" \
++	 ".*Program exited normally\\..*" \
++	 "run till program exit"
diff --git a/SOURCES/gdb-6.6-scheduler_locking-step-is-default.patch b/SOURCES/gdb-6.6-scheduler_locking-step-is-default.patch
new file mode 100644
index 0000000..ebc4aa6
--- /dev/null
+++ b/SOURCES/gdb-6.6-scheduler_locking-step-is-default.patch
@@ -0,0 +1,78 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.6-scheduler_locking-step-is-default.patch
+
+;; Make upstream `set scheduler-locking step' as default.
+;;=push+jan: How much is scheduler-locking relevant after non-stop?
+
+diff --git a/gdb/infrun.c b/gdb/infrun.c
+--- a/gdb/infrun.c
++++ b/gdb/infrun.c
+@@ -2193,7 +2193,7 @@ static const char *const scheduler_enums[] = {
+   schedlock_replay,
+   NULL
+ };
+-static const char *scheduler_mode = schedlock_replay;
++static const char *scheduler_mode = schedlock_step;
+ static void
+ show_scheduler_mode (struct ui_file *file, int from_tty,
+ 		     struct cmd_list_element *c, const char *value)
+diff --git a/gdb/testsuite/gdb.mi/mi-cli.exp b/gdb/testsuite/gdb.mi/mi-cli.exp
+--- a/gdb/testsuite/gdb.mi/mi-cli.exp
++++ b/gdb/testsuite/gdb.mi/mi-cli.exp
+@@ -199,7 +199,7 @@ mi_expect_stop "breakpoint-hit" "main" "" ".*basics.c" \
+ # Test that the token is output even for CLI commands
+ # Also test that *stopped includes frame information.
+ mi_gdb_test "34 next" \
+-    ".*34\\\^running.*\\*running,thread-id=\"all\"" \
++    ".*34\\\^running.*\\*running,thread-id=\"1\"" \
+     "34 next: run"
+ 
+ # Test that the new current source line is output to the console
+diff --git a/gdb/testsuite/gdb.mi/mi-console.exp b/gdb/testsuite/gdb.mi/mi-console.exp
+--- a/gdb/testsuite/gdb.mi/mi-console.exp
++++ b/gdb/testsuite/gdb.mi/mi-console.exp
+@@ -60,6 +60,9 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
+ 
+ mi_run_to_main
+ 
++# thread-id=\"all\" vs. thread-id=\"1\" below:
++mi_gdb_test "210-gdb-set scheduler-locking off" "210\\^done" "set scheduler-locking off"
++
+ # The output we get from the target depends on how it is hosted.  If
+ # we are semihosted (e.g., the sim or a remote target that supports
+ # the File I/O remote protocol extension), we see the target I/O
+diff --git a/gdb/testsuite/gdb.mi/mi-logging.exp b/gdb/testsuite/gdb.mi/mi-logging.exp
+--- a/gdb/testsuite/gdb.mi/mi-logging.exp
++++ b/gdb/testsuite/gdb.mi/mi-logging.exp
+@@ -53,7 +53,7 @@ close $chan
+ 
+ set mi_log_prompt "\[(\]gdb\[)\] \[\r\n\]+"
+ 
+-if [regexp "\\^done\[\r\n\]+$mi_log_prompt\\^running\[\r\n\]+\\*running,thread-id=\"all\"\[\r\n\]+$mi_log_prompt\\*stopped,reason=\"end-stepping-range\",.*\[\r\n\]+$mi_log_prompt\\^running\[\r\n\]+\\*running,thread-id=\"all\"\[\r\n\]+$mi_log_prompt\\*stopped,reason=\"end-stepping-range\",.*\[\r\n\]+$mi_log_prompt" $logcontent] {
++if [regexp "\\^done\[\r\n\]+$mi_log_prompt\\^running\[\r\n\]+\\*running,thread-id=\"1\"\[\r\n\]+$mi_log_prompt\\*stopped,reason=\"end-stepping-range\",.*\[\r\n\]+$mi_log_prompt\\^running\[\r\n\]+\\*running,thread-id=\"1\"\[\r\n\]+$mi_log_prompt\\*stopped,reason=\"end-stepping-range\",.*\[\r\n\]+$mi_log_prompt" $logcontent] {
+     pass "log file contents"
+ } else {
+     fail "log file contents"
+@@ -76,7 +76,7 @@ set chan [open $milogfile]
+ set logcontent [read $chan]
+ close $chan
+ 
+-if [regexp "1001\\^done\[\r\n\]+$mi_log_prompt.*1002\\^running\[\r\n\]+\\*running,thread-id=\"all\"\[\r\n\]+$mi_log_prompt\\*stopped,reason=\"end-stepping-range\",.*\[\r\n\]+$mi_log_prompt.*1003\\^running\[\r\n\]+\\*running,thread-id=\"all\"\[\r\n\]+$mi_log_prompt\\*stopped,reason=\"end-stepping-range\",.*\[\r\n\]+$mi_log_prompt" $logcontent] {
++if [regexp "1001\\^done\[\r\n\]+$mi_log_prompt.*1002\\^running\[\r\n\]+\\*running,thread-id=\"1\"\[\r\n\]+$mi_log_prompt\\*stopped,reason=\"end-stepping-range\",.*\[\r\n\]+$mi_log_prompt.*1003\\^running\[\r\n\]+\\*running,thread-id=\"1\"\[\r\n\]+$mi_log_prompt\\*stopped,reason=\"end-stepping-range\",.*\[\r\n\]+$mi_log_prompt" $logcontent] {
+     pass "redirect log file contents"
+ } else {
+     fail "redirect log file contents"
+diff --git a/gdb/testsuite/gdb.opt/inline-cmds.exp b/gdb/testsuite/gdb.opt/inline-cmds.exp
+--- a/gdb/testsuite/gdb.opt/inline-cmds.exp
++++ b/gdb/testsuite/gdb.opt/inline-cmds.exp
+@@ -331,7 +331,7 @@ proc mi_cli_step {cli_output_re message} {
+ 
+     send_gdb "interpreter-exec console \"step\"\n"
+     gdb_expect {
+-	-re "\\^running\r\n\\*running,thread-id=\"all\"\r\n${mi_gdb_prompt}${cli_output_re}" {
++	-re "\\^running\r\n\\*running,thread-id=\"1\"\r\n${mi_gdb_prompt}${cli_output_re}" {
+ 	    pass $message
+ 	}
+ 	timeout {
diff --git a/SOURCES/gdb-6.6-testsuite-timeouts.patch b/SOURCES/gdb-6.6-testsuite-timeouts.patch
new file mode 100644
index 0000000..a896313
--- /dev/null
+++ b/SOURCES/gdb-6.6-testsuite-timeouts.patch
@@ -0,0 +1,32 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.6-testsuite-timeouts.patch
+
+;; Avoid too long timeouts on failing cases of "annota1.exp annota3.exp".
+;;=fedoratest
+
+diff --git a/gdb/testsuite/gdb.base/annota1.exp b/gdb/testsuite/gdb.base/annota1.exp
+--- a/gdb/testsuite/gdb.base/annota1.exp
++++ b/gdb/testsuite/gdb.base/annota1.exp
+@@ -39,6 +39,8 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
+ 
+ clean_restart ${binfile}
+ 
++gdb_test "set breakpoint pending off" "" "Avoid lockup on nonexisting functions"
++
+ # The commands we test here produce many lines of output; disable "press 
+ # <return> to continue" prompts.
+ gdb_test_no_output "set height 0"
+diff --git a/gdb/testsuite/gdb.base/annota3.exp b/gdb/testsuite/gdb.base/annota3.exp
+--- a/gdb/testsuite/gdb.base/annota3.exp
++++ b/gdb/testsuite/gdb.base/annota3.exp
+@@ -38,6 +38,8 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
+ 
+ clean_restart ${binfile}
+ 
++gdb_test "set breakpoint pending off" "" "Avoid lockup on nonexisting functions"
++
+ # The commands we test here produce many lines of output; disable "press 
+ # <return> to continue" prompts.
+ gdb_test_no_output "set height 0"
diff --git a/SOURCES/gdb-6.7-charsign-test.patch b/SOURCES/gdb-6.7-charsign-test.patch
new file mode 100644
index 0000000..8c89b13
--- /dev/null
+++ b/SOURCES/gdb-6.7-charsign-test.patch
@@ -0,0 +1,130 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Jan Kratochvil <jan.kratochvil@redhat.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.7-charsign-test.patch
+
+;; Fix displaying of numeric char arrays as strings (BZ 224128).
+;;=fedoratest: But it is failing anyway, one should check the behavior more.
+
+https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=224128
+
+2007-01-25  Jan Kratochvil <jan.kratochvil@redhat.com>
+
+	* gdb.base/charsign.exp, gdb.base/charsign.c: New files.
+	[ stripped ]
+
+2007-10-19  Jan Kratochvil <jan.kratochvil@redhat.com>
+
+	Port to GDB-6.7 - only the testcase left, patch has been reverted,
+	char-vectors restricted.
+
+diff --git a/gdb/testsuite/gdb.base/charsign.c b/gdb/testsuite/gdb.base/charsign.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/charsign.c
+@@ -0,0 +1,37 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2007 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 2 of the License, 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; if not, write to the Free Software
++   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++   Please email any bugs, comments, and/or additions to this file to:
++   bug-gdb@prep.ai.mit.edu  */
++
++int main()
++{
++  return 0;
++}
++
++char n[]="A";
++signed char s[]="A";
++unsigned char u[]="A";
++
++typedef char char_n;
++typedef signed char char_s;
++typedef unsigned char char_u;
++
++char_n n_typed[]="A";
++char_s s_typed[]="A";
++char_u u_typed[]="A";
+diff --git a/gdb/testsuite/gdb.base/charsign.exp b/gdb/testsuite/gdb.base/charsign.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/charsign.exp
+@@ -0,0 +1,63 @@
++# Copyright 2007 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
++
++set testfile charsign
++set srcfile ${testfile}.c
++set binfile [standard_output_file ${testfile}]
++
++proc do_test { cflags } {
++    global srcdir
++    global binfile
++    global subdir
++    global srcfile
++    global gdb_prompt
++
++    if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug additional_flags=$cflags]] != "" } {
++	untested "Couldn't compile test program"
++	return -1
++    }
++
++    # Get things started.
++
++    gdb_exit
++    gdb_start
++    gdb_reinitialize_dir $srcdir/$subdir
++    gdb_load ${binfile}
++
++    # For C programs, "start" should stop in main().
++
++    gdb_test "p n" \
++	     "= \"A\""
++    gdb_test "p s" \
++	     "= \\{65 'A', 0 '\\\\0'\\}"
++    gdb_test "p u" \
++	     "= \\{65 'A', 0 '\\\\0'\\}"
++    gdb_test "p n_typed" \
++	     "= \"A\""
++    gdb_test "p s_typed" \
++	     "= \\{65 'A', 0 '\\\\0'\\}"
++    gdb_test "p u_typed" \
++	     "= \\{65 'A', 0 '\\\\0'\\}"
++}
++
++# The string identification works despite the compiler flags below due to
++# gdbtypes.c:
++#   if (name && strcmp (name, "char") == 0)
++#     TYPE_FLAGS (type) |= TYPE_FLAG_NOSIGN;
++
++do_test {}
++do_test {-fsigned-char}
++do_test {-funsigned-char}
diff --git a/SOURCES/gdb-6.7-ppc-clobbered-registers-O2-test.patch b/SOURCES/gdb-6.7-ppc-clobbered-registers-O2-test.patch
new file mode 100644
index 0000000..08ee2f9
--- /dev/null
+++ b/SOURCES/gdb-6.7-ppc-clobbered-registers-O2-test.patch
@@ -0,0 +1,108 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Jan Kratochvil <jan.kratochvil@redhat.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.7-ppc-clobbered-registers-O2-test.patch
+
+;; Test PPC hiding of call-volatile parameter register.
+;;=fedoratest
+
+2007-11-04  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.arch/ppc-clobbered-registers-O2.exp: `powerpc64' changed to
+	`powerpc*'.
+
+Testcase for:
+
+http://sourceware.org/ml/gdb-patches/2007-09/msg00228.html
+
+2007-10-21  Luis Machado  <luisgpm@br.ibm.com>
+
+	* rs6000-tdep.c (ppc_dwarf2_frame_init_reg): New function.
+	* (rs6000_gdbarch_init): Install ppc_dwarf2_frame_init_reg as
+	default dwarf2_frame_set_init_reg function.
+
+diff --git a/gdb/testsuite/gdb.arch/ppc-clobbered-registers-O2.c b/gdb/testsuite/gdb.arch/ppc-clobbered-registers-O2.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.arch/ppc-clobbered-registers-O2.c
+@@ -0,0 +1,21 @@
++
++unsigned * __attribute__((noinline))
++start_sequence (unsigned * x, unsigned * y)
++{
++	return (unsigned *)0xdeadbeef;
++};
++
++unsigned __attribute__((noinline))
++gen_movsd (unsigned * operand0, unsigned * operand1)
++{
++	return *start_sequence(operand0, operand1);
++}
++
++int main(void)
++{
++  unsigned x, y;
++
++  x = 13;
++  y = 14;
++  return (int)gen_movsd (&x, &y);
++}
+diff --git a/gdb/testsuite/gdb.arch/ppc-clobbered-registers-O2.exp b/gdb/testsuite/gdb.arch/ppc-clobbered-registers-O2.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.arch/ppc-clobbered-registers-O2.exp
+@@ -0,0 +1,54 @@
++# Copyright 2006 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++#
++# This file is part of the gdb testsuite.
++
++# Test displaying call clobbered registers in optimized binaries for ppc.
++# GDB should not show incorrect values.
++
++if ![istarget "powerpc*-*"] then {
++    verbose "Skipping powerpc* call clobbered registers testing."
++    return
++}
++
++set testfile "ppc-clobbered-registers-O2"
++set srcfile ${testfile}.c
++set binfile [standard_output_file ${testfile}]
++set compile_flags "debug additional_flags=-O2"
++
++if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable ${compile_flags}] != "" } {
++    unsupported "Testcase compile failed."
++    return -1
++}
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++gdb_load ${binfile}
++
++if ![runto_main] then {
++    perror "Couldn't run to breakpoint"
++    continue
++}
++
++gdb_test "b start_sequence" ".*Breakpoint 2 at.*line 6.*" \
++  "Insert breakpoint at problematic function"
++
++gdb_test continue ".*Breakpoint 2.*in start_sequence.*" \
++  "Run until problematic function"
++
++gdb_test backtrace ".*operand0=<value optimized out>.*operand1=<value optimized out>.*" \
++  "Check value of call clobbered registers"
diff --git a/SOURCES/gdb-6.7-testsuite-stable-results.patch b/SOURCES/gdb-6.7-testsuite-stable-results.patch
new file mode 100644
index 0000000..ec8f9c2
--- /dev/null
+++ b/SOURCES/gdb-6.7-testsuite-stable-results.patch
@@ -0,0 +1,104 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Jan Kratochvil <jan.kratochvil@redhat.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.7-testsuite-stable-results.patch
+
+;; Testsuite fixes for more stable/comparable results.
+;;=fedoratest
+
+gdb/testsuite/gdb.base/fileio.c:
+gdb/testsuite/gdb.base/fileio.exp:
+2007-12-08  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.base/fileio.c (ROOTSUBDIR): New macro.
+	(main): CHDIR into ROOTSUBDIR.  CHOWN ROOTSUBDIR and CHDIR into
+	ROOTSUBDIR if we are being run as root.
+	* gdb.base/fileio.exp: Change the startup and finish cleanup.
+	Change the test file reference to be into the `fileio.dir' directory.
+
+sources/gdb/testsuite/gdb.base/dump.exp:
+Found on RHEL-5.s390x.
+
+gdb-6.8.50.20090209/gdb/testsuite/gdb.base/auxv.exp:
+random FAIL: gdb.base/auxv.exp: matching auxv data from live and gcore
+
+gdb-6.8.50.20090209/gdb/testsuite/gdb.base/annota1.exp:
+frames-invalid can happen asynchronously.
+
+diff --git a/gdb/testsuite/gdb.base/fileio.c b/gdb/testsuite/gdb.base/fileio.c
+--- a/gdb/testsuite/gdb.base/fileio.c
++++ b/gdb/testsuite/gdb.base/fileio.c
+@@ -560,6 +560,28 @@ strerrno (int err)
+ int
+ main ()
+ {
++  /* These tests
++       Open for write but no write permission returns EACCES
++       Unlinking a file in a directory w/o write access returns EACCES
++     fail if we are being run as root - drop the privileges here.  */
++
++  if (geteuid () == 0)
++    {
++      uid_t uid = 99;
++
++      if (chown (OUTDIR, uid, uid) != 0)
++	{
++	  printf ("chown %d.%d %s: %s\n", (int) uid, (int) uid,
++		  OUTDIR, strerror (errno));
++	  exit (1);
++	}
++      if (setuid (uid) || geteuid () == 0)
++	{
++	  printf ("setuid %d: %s\n", (int) uid, strerror (errno));
++	  exit (1);
++	}
++    }
++
+   /* Don't change the order of the calls.  They partly depend on each other */
+   test_open ();
+   test_write ();
+diff --git a/gdb/testsuite/gdb.base/fileio.exp b/gdb/testsuite/gdb.base/fileio.exp
+--- a/gdb/testsuite/gdb.base/fileio.exp
++++ b/gdb/testsuite/gdb.base/fileio.exp
+@@ -24,9 +24,9 @@ if [target_info exists gdb,nofileio] {
+ standard_testfile
+ 
+ if {[is_remote host]} {
+-    set outdir .
++    set outdir "fileio.dir"
+ } else {
+-    set outdir [standard_output_file {}]
++    set outdir [standard_output_file "fileio.dir"]
+ }
+ 
+ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" \
+@@ -47,7 +47,8 @@ set dir2 [standard_output_file dir2.fileio.test]
+ if {[file exists $dir2] && ![file writable $dir2]} {
+     system "chmod +w $dir2"
+ }
+-system "rm -rf [standard_output_file *.fileio.test]"
++system "rm -rf [standard_output_file fileio.dir]"
++system "mkdir -m777 [standard_output_file fileio.dir]"
+ 
+ set oldtimeout $timeout
+ set timeout [expr "$timeout + 60"]
+@@ -89,7 +90,7 @@ gdb_test continue \
+ 
+ gdb_test "continue" ".*" ""
+ 
+-catch "system \"chmod -f -w [standard_output_file nowrt.fileio.test]\""
++catch "system \"chmod -f -w [standard_output_file fileio.dir/nowrt.fileio.test]\""
+ 
+ gdb_test continue \
+ "Continuing\\..*open 5:.*EACCES$stop_msg" \
+@@ -276,9 +277,7 @@ gdb_test continue \
+ gdb_exit
+ 
+ # Make dir2 writable again so rm -rf of a build tree Just Works.
+-if {[file exists $dir2] && ![file writable $dir2]} {
+-    system "chmod +w $dir2"
+-}
++system "chmod -R +w $outdir"
+ 
+ set timeout $oldtimeout
+ return 0
diff --git a/SOURCES/gdb-6.8-bz436037-reg-no-longer-active.patch b/SOURCES/gdb-6.8-bz436037-reg-no-longer-active.patch
new file mode 100644
index 0000000..ea240af
--- /dev/null
+++ b/SOURCES/gdb-6.8-bz436037-reg-no-longer-active.patch
@@ -0,0 +1,37 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.8-bz436037-reg-no-longer-active.patch
+
+;; Fix register assignments with no GDB stack frames (BZ 436037).
+;;=push+jan: This fix is incorrect.
+
+diff --git a/gdb/valops.c b/gdb/valops.c
+--- a/gdb/valops.c
++++ b/gdb/valops.c
+@@ -1104,6 +1104,8 @@ value_assign (struct value *toval, struct value *fromval)
+ 	struct gdbarch *gdbarch;
+ 	int value_reg;
+ 
++	value_reg = VALUE_REGNUM (toval);
++
+ 	/* Figure out which frame this is in currently.
+ 	
+ 	   We use VALUE_FRAME_ID for obtaining the value's frame id instead of
+@@ -1113,8 +1115,14 @@ value_assign (struct value *toval, struct value *fromval)
+ 	   frame.  */
+ 	frame = frame_find_by_id (VALUE_FRAME_ID (toval));
+ 
+-	value_reg = VALUE_REGNUM (toval);
+-
++	/* "set $reg+=1" should work on programs with no debug info,
++	   but frame_find_by_id returns NULL here (RH bug 436037).
++	   Use current frame, it represents CPU state in this case.
++	   If frame_find_by_id is changed to do it internally
++	   (it is contemplated there), remove this.  */
++	if (!frame)
++	  frame = get_current_frame ();
++	/* Probably never happens.  */
+ 	if (!frame)
+ 	  error (_("Value being assigned to is no longer active."));
+ 
diff --git a/SOURCES/gdb-6.8-bz442765-threaded-exec-test.patch b/SOURCES/gdb-6.8-bz442765-threaded-exec-test.patch
new file mode 100644
index 0000000..e2ed431
--- /dev/null
+++ b/SOURCES/gdb-6.8-bz442765-threaded-exec-test.patch
@@ -0,0 +1,181 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.8-bz442765-threaded-exec-test.patch
+
+;; Test various forms of threads tracking across exec() (BZ 442765).
+;;=fedoratest
+
+Test various forms of threads tracking across exec(2).
+
+diff --git a/gdb/testsuite/gdb.threads/threaded-exec.c b/gdb/testsuite/gdb.threads/threaded-exec.c
+--- a/gdb/testsuite/gdb.threads/threaded-exec.c
++++ b/gdb/testsuite/gdb.threads/threaded-exec.c
+@@ -18,21 +18,95 @@
+    Boston, MA 02111-1307, USA.  */
+ 
+ #include <stddef.h>
+-#include <pthread.h>
+ #include <assert.h>
+ #include <stdlib.h>
+ #include <unistd.h>
++#include <stdio.h>
+ 
++#ifdef THREADS
++
++# include <pthread.h>
+ 
+ static void *
+ threader (void *arg)
+ {
+-	return NULL;
++  return NULL;
+ }
+ 
++#endif
++
+ int
+-main (void)
++main (int argc, char **argv)
+ {
++  char *exec_nothreads, *exec_threads, *cmd;
++  int phase;
++  char phase_s[8];
++
++  setbuf (stdout, NULL);
++
++  if (argc != 4)
++    {
++      fprintf (stderr, "%s <non-threaded> <threaded> <phase>\n", argv[0]);
++      return 1;
++    }
++
++#ifdef THREADS
++  puts ("THREADS: Y");
++#else
++  puts ("THREADS: N");
++#endif
++  exec_nothreads = argv[1];
++  printf ("exec_nothreads: %s\n", exec_nothreads);
++  exec_threads = argv[2];
++  printf ("exec_threads: %s\n", exec_threads);
++  phase = atoi (argv[3]);
++  printf ("phase: %d\n", phase);
++
++  /* Phases: threading
++     0: N -> N
++     1: N -> Y
++     2: Y -> Y
++     3: Y -> N
++     4: N -> exit  */
++
++  cmd = NULL;
++
++#ifndef THREADS
++  switch (phase)
++    {
++    case 0:
++      cmd = exec_nothreads;
++      break;
++    case 1:
++      cmd = exec_threads;
++      break;
++    case 2:
++      fprintf (stderr, "%s: We should have threads for phase %d!\n", argv[0],
++	       phase);
++      return 1;
++    case 3:
++      fprintf (stderr, "%s: We should have threads for phase %d!\n", argv[0],
++	       phase);
++      return 1;
++    case 4:
++      return 0;
++    default:
++      assert (0);
++    }
++#else	/* THREADS */
++  switch (phase)
++    {
++    case 0:
++      fprintf (stderr, "%s: We should not have threads for phase %d!\n",
++	       argv[0], phase);
++      return 1;
++    case 1:
++      fprintf (stderr, "%s: We should not have threads for phase %d!\n",
++	       argv[0], phase);
++      return 1;
++    case 2:
++      cmd = exec_threads;
++      {
+ 	pthread_t t1;
+ 	int i;
+ 
+@@ -40,7 +114,34 @@ main (void)
+ 	assert (i == 0);
+ 	i = pthread_join (t1, NULL);
+ 	assert (i == 0);
++      }
++      break;
++    case 3:
++      cmd = exec_nothreads;
++      {
++	pthread_t t1;
++	int i;
++
++	i = pthread_create (&t1, NULL, threader, (void *) NULL);
++	assert (i == 0);
++	i = pthread_join (t1, NULL);
++	assert (i == 0);
++      }
++      break;
++    case 4:
++      fprintf (stderr, "%s: We should not have threads for phase %d!\n",
++	       argv[0], phase);
++      return 1;
++    default:
++      assert (0);
++    }
++#endif	/* THREADS */
++
++  assert (cmd != NULL);
++
++  phase++;
++  snprintf (phase_s, sizeof phase_s, "%d", phase);
+ 
+-	execl ("/bin/true", "/bin/true", NULL);
+-	abort ();
++  execl (cmd, cmd, exec_nothreads, exec_threads, phase_s, NULL);
++  assert (0);
+ }
+diff --git a/gdb/testsuite/gdb.threads/threaded-exec.exp b/gdb/testsuite/gdb.threads/threaded-exec.exp
+--- a/gdb/testsuite/gdb.threads/threaded-exec.exp
++++ b/gdb/testsuite/gdb.threads/threaded-exec.exp
+@@ -20,9 +20,14 @@
+ 
+ set testfile threaded-exec
+ set srcfile ${testfile}.c
+-set binfile [standard_output_file ${testfile}]
++set binfile_nothreads [standard_output_file ${testfile}N]
++set binfile_threads [standard_output_file ${testfile}Y]
+ 
+-if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable []] != "" } {
++if {[gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile_nothreads}" executable {additional_flags=-UTHREADS}] != "" } {
++    return -1
++}
++
++if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile_threads}" executable {additional_flags=-DTHREADS}] != "" } {
+     return -1
+ }
+ 
+@@ -30,9 +35,9 @@ gdb_exit
+ gdb_start
+ gdb_reinitialize_dir $srcdir/$subdir
+ 
+-gdb_load ${binfile}
++gdb_load ${binfile_nothreads}
+ 
+-gdb_run_cmd
++gdb_run_cmd ${binfile_nothreads} ${binfile_threads} 0
+ 
+ gdb_test_multiple {} "Program exited" {
+    -re "\r\n\\\[Inferior .* exited normally\\\]\r\n$gdb_prompt $" {
diff --git a/SOURCES/gdb-6.8-bz466901-backtrace-full-prelinked.patch b/SOURCES/gdb-6.8-bz466901-backtrace-full-prelinked.patch
new file mode 100644
index 0000000..542a956
--- /dev/null
+++ b/SOURCES/gdb-6.8-bz466901-backtrace-full-prelinked.patch
@@ -0,0 +1,481 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.8-bz466901-backtrace-full-prelinked.patch
+
+;; Fix resolving of variables at locations lists in prelinked libs (BZ 466901).
+;;=fedoratest
+
+Fix resolving of variables at locations lists in prelinked libs (BZ 466901).
+
+diff --git a/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked-func.S b/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked-func.S
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked-func.S
+@@ -0,0 +1,328 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2008 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++/*
++#include <stdlib.h>
++
++void
++func (void)
++{
++  int i;
++
++  abort ();
++}
++*/
++	.file	"dw2-loclist-prelinked.c"
++	.section	.debug_abbrev,"",@progbits
++.Ldebug_abbrev0:
++	.section	.debug_info,"",@progbits
++.Ldebug_info0:
++	.section	.debug_line,"",@progbits
++.Ldebug_line0:
++	.text
++.Ltext0:
++.globl func
++	.type	func, @function
++func:
++.LFB2:
++	.file 1 "dw2-loclist-prelinked.c"
++	.loc 1 5 0
++	pushl	%ebp
++.LCFI0:
++	movl	%esp, %ebp
++.LCFI1:
++	subl	$24, %esp
++.LCFI2:
++	.loc 1 8 0
++	call	abort
++.LFE2:
++	.size	func, .-func
++	.section	.debug_frame,"",@progbits
++.Lframe0:
++	.long	.LECIE0-.LSCIE0
++.LSCIE0:
++	.long	0xffffffff
++	.byte	0x1
++	.string	""
++	.uleb128 0x1
++	.sleb128 -4
++	.byte	0x8
++	.byte	0xc
++	.uleb128 0x4
++	.uleb128 0x4
++	.byte	0x88
++	.uleb128 0x1
++	.align 4
++.LECIE0:
++.LSFDE0:
++	.long	.LEFDE0-.LASFDE0
++.LASFDE0:
++	.long	.Lframe0
++	.long	.LFB2
++	.long	.LFE2-.LFB2
++	.byte	0x4
++	.long	.LCFI0-.LFB2
++	.byte	0xe
++	.uleb128 0x8
++	.byte	0x85
++	.uleb128 0x2
++	.byte	0x4
++	.long	.LCFI1-.LCFI0
++	.byte	0xd
++	.uleb128 0x5
++	.align 4
++.LEFDE0:
++	.text
++.Letext0:
++	.section	.debug_loc,"",@progbits
++.Ldebug_loc0:
++.LLST0:
++	.long	.LFB2-.Ltext0
++	.long	.LCFI0-.Ltext0
++	.value	0x2
++	.byte	0x74
++	.sleb128 4
++	.long	.LCFI0-.Ltext0
++	.long	.LCFI1-.Ltext0
++	.value	0x2
++	.byte	0x74
++	.sleb128 8
++	.long	.LCFI1-.Ltext0
++	.long	.LFE2-.Ltext0
++	.value	0x2
++	.byte	0x75
++	.sleb128 8
++	.long	0x0
++	.long	0x0
++	.section	.debug_info
++	.long	0x94
++	.value	0x2
++	.long	.Ldebug_abbrev0
++	.byte	0x4
++	.uleb128 0x1
++	.long	.LASF10
++	.byte	0x1
++	.long	.LASF11
++	.long	.LASF12
++	.long	.Ltext0
++	.long	.Letext0
++	.long	.Ldebug_line0
++	.uleb128 0x2
++	.byte	0x4
++	.byte	0x7
++	.long	.LASF0
++	.uleb128 0x3
++	.byte	0x4
++	.byte	0x5
++	.string	"int"
++	.uleb128 0x2
++	.byte	0x4
++	.byte	0x5
++	.long	.LASF1
++	.uleb128 0x2
++	.byte	0x1
++	.byte	0x8
++	.long	.LASF2
++	.uleb128 0x2
++	.byte	0x2
++	.byte	0x7
++	.long	.LASF3
++	.uleb128 0x2
++	.byte	0x4
++	.byte	0x7
++	.long	.LASF4
++	.uleb128 0x2
++	.byte	0x1
++	.byte	0x6
++	.long	.LASF5
++	.uleb128 0x2
++	.byte	0x2
++	.byte	0x5
++	.long	.LASF6
++	.uleb128 0x2
++	.byte	0x8
++	.byte	0x5
++	.long	.LASF7
++	.uleb128 0x2
++	.byte	0x8
++	.byte	0x7
++	.long	.LASF8
++	.uleb128 0x4
++	.byte	0x4
++	.byte	0x7
++	.uleb128 0x2
++	.byte	0x1
++	.byte	0x6
++	.long	.LASF9
++	.uleb128 0x5
++	.byte	0x1
++	.long	.LASF13
++	.byte	0x1
++	.byte	0x5
++	.byte	0x1
++	.long	.LFB2
++	.long	.LFE2
++	.long	.LLST0
++	.uleb128 0x6
++	.string	"i"
++	.byte	0x1
++	.byte	0x6
++	.long	0x2c
++	.byte	0x2
++	.byte	0x91
++	.sleb128 -12
++	.byte	0x0
++	.byte	0x0
++	.section	.debug_abbrev
++	.uleb128 0x1
++	.uleb128 0x11
++	.byte	0x1
++	.uleb128 0x25
++	.uleb128 0xe
++	.uleb128 0x13
++	.uleb128 0xb
++	.uleb128 0x3
++	.uleb128 0xe
++	.uleb128 0x1b
++	.uleb128 0xe
++	.uleb128 0x11
++	.uleb128 0x1
++	.uleb128 0x12
++	.uleb128 0x1
++	.uleb128 0x10
++	.uleb128 0x6
++	.byte	0x0
++	.byte	0x0
++	.uleb128 0x2
++	.uleb128 0x24
++	.byte	0x0
++	.uleb128 0xb
++	.uleb128 0xb
++	.uleb128 0x3e
++	.uleb128 0xb
++	.uleb128 0x3
++	.uleb128 0xe
++	.byte	0x0
++	.byte	0x0
++	.uleb128 0x3
++	.uleb128 0x24
++	.byte	0x0
++	.uleb128 0xb
++	.uleb128 0xb
++	.uleb128 0x3e
++	.uleb128 0xb
++	.uleb128 0x3
++	.uleb128 0x8
++	.byte	0x0
++	.byte	0x0
++	.uleb128 0x4
++	.uleb128 0x24
++	.byte	0x0
++	.uleb128 0xb
++	.uleb128 0xb
++	.uleb128 0x3e
++	.uleb128 0xb
++	.byte	0x0
++	.byte	0x0
++	.uleb128 0x5
++	.uleb128 0x2e
++	.byte	0x1
++	.uleb128 0x3f
++	.uleb128 0xc
++	.uleb128 0x3
++	.uleb128 0xe
++	.uleb128 0x3a
++	.uleb128 0xb
++	.uleb128 0x3b
++	.uleb128 0xb
++	.uleb128 0x27
++	.uleb128 0xc
++	.uleb128 0x11
++	.uleb128 0x1
++	.uleb128 0x12
++	.uleb128 0x1
++	.uleb128 0x40
++	.uleb128 0x6
++	.byte	0x0
++	.byte	0x0
++	.uleb128 0x6
++	.uleb128 0x34
++	.byte	0x0
++	.uleb128 0x3
++	.uleb128 0x8
++	.uleb128 0x3a
++	.uleb128 0xb
++	.uleb128 0x3b
++	.uleb128 0xb
++	.uleb128 0x49
++	.uleb128 0x13
++	.uleb128 0x2
++	.uleb128 0xa
++	.byte	0x0
++	.byte	0x0
++	.byte	0x0
++	.section	.debug_pubnames,"",@progbits
++	.long	0x17
++	.value	0x2
++	.long	.Ldebug_info0
++	.long	0x98
++	.long	0x75
++	.string	"func"
++	.long	0x0
++	.section	.debug_aranges,"",@progbits
++	.long	0x1c
++	.value	0x2
++	.long	.Ldebug_info0
++	.byte	0x4
++	.byte	0x0
++	.value	0x0
++	.value	0x0
++	.long	.Ltext0
++	.long	.Letext0-.Ltext0
++	.long	0x0
++	.long	0x0
++	.section	.debug_str,"MS",@progbits,1
++.LASF7:
++	.string	"long long int"
++.LASF0:
++	.string	"unsigned int"
++.LASF11:
++	.string	"dw2-loclist-prelinked.c"
++.LASF12:
++	.string	"gdb-6.8/gdb/testsuite/gdb.dwarf2"
++.LASF4:
++	.string	"long unsigned int"
++.LASF8:
++	.string	"long long unsigned int"
++.LASF2:
++	.string	"unsigned char"
++.LASF9:
++	.string	"char"
++.LASF1:
++	.string	"long int"
++.LASF3:
++	.string	"short unsigned int"
++.LASF5:
++	.string	"signed char"
++.LASF10:
++	.string	"GNU C 4.3.2 20081007 (Red Hat 4.3.2-6)"
++.LASF13:
++	.string	"func"
++.LASF6:
++	.string	"short int"
++	.ident	"GCC: (GNU) 4.3.2 20081007 (Red Hat 4.3.2-6)"
++	.section	.note.GNU-stack,"",@progbits
+diff --git a/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked-main.c b/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked-main.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked-main.c
+@@ -0,0 +1,26 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2008 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++/* dw2-loclist-prelinked-func.S */
++extern void func (void);
++
++int
++main (void)
++{
++  func ();
++  return 0;
++}
+diff --git a/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked.exp b/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked.exp
+@@ -0,0 +1,102 @@
++# Copyright 2008 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++# Minimal DWARF-2 unit test
++
++# This test can only be run on i386/x86_64 targets which support DWARF-2.
++# For now pick a sampling of likely targets.
++if {(![istarget *-*-linux*]
++     && ![istarget *-*-gnu*]
++     && ![istarget *-*-elf*]
++     && ![istarget *-*-openbsd*])
++    || (![istarget "i?86-*-*"] && ![istarget "x86_64-*-*"])} {
++    return 0  
++}
++
++set testfile "dw2-loclist-prelinked"
++set srcfuncfile ${testfile}-func.S
++set binsharedfuncfile [standard_output_file ${testfile}.so]
++set srcmainfile ${testfile}-main.c
++set binfile [standard_output_file ${testfile}]
++
++remote_exec build "rm -f ${binfile}"
++
++# get the value of gcc_compiled
++if [get_compiler_info ${binfile}] {
++    return -1
++}
++
++# This test can only be run on gcc as we use additional_flags=FIXME
++if {$gcc_compiled == 0} {
++    return 0
++}
++
++if  { [gdb_compile_shlib "${srcdir}/${subdir}/${srcfuncfile}" "${binsharedfuncfile}" {debug additional_flags=-m32}] != "" } {
++    untested "Couldn't compile test library"
++    return -1
++}
++
++# The new separate debug info file will be stored in the .debug subdirectory.
++
++if [gdb_gnu_strip_debug ${binsharedfuncfile}] {
++    # check that you have a recent version of strip and objcopy installed
++    unsupported "cannot produce separate debug info files"
++    return -1
++}
++
++if {[catch "system \"/usr/sbin/prelink -qNR --no-exec-shield ${binsharedfuncfile}\""] != 0} {
++    # Maybe we don't have prelink.
++    return -1
++}
++
++if  { [gdb_compile "${srcdir}/${subdir}/${srcmainfile}" \
++		   "${binfile}" executable [list debug additional_flags=-m32 shlib=${binsharedfuncfile}]] != "" } {
++    return -1
++}
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++gdb_load ${binfile}
++
++gdb_run_cmd
++
++gdb_test "" "Program received signal SIGABRT, Aborted..*" "Enter abort()"
++
++# Incorrect:
++# #0  0x00110430 in __kernel_vsyscall ()
++# No symbol table info available.
++# #1  0x003d44c0 in raise () from /lib/libc.so.6
++# No symbol table info available.
++# #2  0x003d5e88 in abort () from /lib/libc.so.6
++# No symbol table info available.
++# #3  0x44f10437 in func () at dw2-loclist-prelinked.c:8
++# 	i = Could not find the frame base for "func".
++
++# Correct:
++# #0  0x00110430 in __kernel_vsyscall ()
++# No symbol table info available.
++# #1  0x003d44c0 in raise () from /lib/libc.so.6
++# No symbol table info available.
++# #2  0x003d5e88 in abort () from /lib/libc.so.6
++# No symbol table info available.
++# #3  0x4ae36437 in func () at dw2-loclist-prelinked.c:8
++# 	i = 3827288
++# #4  0x0804851a in main () at ../../../gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked-main.c:24
++# No locals.
++
++# `abort' can get expressed as `*__GI_abort'.
++gdb_test "bt full" "in \[^ \]*abort \\(.*in func \\(.*\r\n\[\t \]+i = -?\[0-9\].*in main \\(.*" "Backtrace after abort()"
diff --git a/SOURCES/gdb-6.8-quit-never-aborts.patch b/SOURCES/gdb-6.8-quit-never-aborts.patch
new file mode 100644
index 0000000..85db824
--- /dev/null
+++ b/SOURCES/gdb-6.8-quit-never-aborts.patch
@@ -0,0 +1,78 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.8-quit-never-aborts.patch
+
+;; Make the GDB quit processing non-abortable to cleanup everything properly.
+;;=fedora: It was useful only after gdb-6.8-attach-signalled-detach-stopped.patch .
+
+We may abort the process of detaching threads with multiple SIGINTs - which are
+being sent during a testcase terminating its child GDB.
+
+Some of the threads may not be properly PTRACE_DETACHed which hurts if they
+should have been detached with SIGSTOP (as they are accidentally left running
+on the debugger termination).
+
+diff --git a/gdb/defs.h b/gdb/defs.h
+--- a/gdb/defs.h
++++ b/gdb/defs.h
+@@ -168,6 +168,10 @@ extern void default_quit_handler (void);
+ /* Flag that function quit should call quit_force.  */
+ extern volatile int sync_quit_force_run;
+ 
++#ifdef NEED_DETACH_SIGSTOP
++extern int quit_flag_cleanup;
++#endif
++
+ extern void quit (void);
+ 
+ /* Helper for the QUIT macro.  */
+diff --git a/gdb/extension.c b/gdb/extension.c
+--- a/gdb/extension.c
++++ b/gdb/extension.c
+@@ -820,6 +820,11 @@ check_quit_flag (void)
+   int i, result = 0;
+   const struct extension_language_defn *extlang;
+ 
++#ifdef NEED_DETACH_SIGSTOP
++  if (quit_flag_cleanup)
++    return 0;
++#endif
++
+   ALL_ENABLED_EXTENSION_LANGUAGES (i, extlang)
+     {
+       if (extlang->ops->check_quit_flag != NULL)
+diff --git a/gdb/top.c b/gdb/top.c
+--- a/gdb/top.c
++++ b/gdb/top.c
+@@ -1606,7 +1606,13 @@ quit_force (int *exit_arg, int from_tty)
+ 
+   qt.from_tty = from_tty;
+ 
++#ifndef NEED_DETACH_SIGSTOP
+   /* We want to handle any quit errors and exit regardless.  */
++#else
++  /* We want to handle any quit errors and exit regardless but we should never
++     get user-interrupted to properly detach the inferior.  */
++  quit_flag_cleanup = 1;
++#endif
+ 
+   /* Get out of tfind mode, and kill or detach all inferiors.  */
+   TRY
+diff --git a/gdb/utils.c b/gdb/utils.c
+--- a/gdb/utils.c
++++ b/gdb/utils.c
+@@ -108,6 +108,13 @@ static std::chrono::steady_clock::duration prompt_for_continue_wait_time;
+ 
+ static int debug_timestamp = 0;
+ 
++#ifdef NEED_DETACH_SIGSTOP
++/* Nonzero means we are already processing the quitting cleanups and we should
++   no longer get aborted.  */
++
++int quit_flag_cleanup;
++#endif
++
+ /* Nonzero means that strings with character values >0x7F should be printed
+    as octal escapes.  Zero means just print the value (e.g. it's an
+    international character, and the terminal or window can cope.)  */
diff --git a/SOURCES/gdb-6.8-sparc64-silence-memcpy-check.patch b/SOURCES/gdb-6.8-sparc64-silence-memcpy-check.patch
new file mode 100644
index 0000000..6c0848d
--- /dev/null
+++ b/SOURCES/gdb-6.8-sparc64-silence-memcpy-check.patch
@@ -0,0 +1,19 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.8-sparc64-silence-memcpy-check.patch
+
+;; Silence memcpy check which returns false positive (sparc64)
+;;=push: But it is just a GCC workaround, look up the existing GCC PR for it.
+
+diff --git a/gdb/sparc-tdep.c b/gdb/sparc-tdep.c
+--- a/gdb/sparc-tdep.c
++++ b/gdb/sparc-tdep.c
+@@ -1462,6 +1462,7 @@ sparc32_store_return_value (struct type *type, struct regcache *regcache,
+   if (sparc_floating_p (type) || sparc_complex_floating_p (type))
+     {
+       /* Floating return values.  */
++      len = (len <= 8) ? len : 8;
+       memcpy (buf, valbuf, len);
+       regcache->cooked_write (SPARC_F0_REGNUM, buf);
+       if (len > 4)
diff --git a/SOURCES/gdb-6.8-watchpoint-conditionals-test.patch b/SOURCES/gdb-6.8-watchpoint-conditionals-test.patch
new file mode 100644
index 0000000..5096a67
--- /dev/null
+++ b/SOURCES/gdb-6.8-watchpoint-conditionals-test.patch
@@ -0,0 +1,90 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-6.8-watchpoint-conditionals-test.patch
+
+;; Test the watchpoints conditionals works.
+;;=fedoratest
+
+For:
+http://sourceware.org/ml/gdb-patches/2008-04/msg00379.html
+http://sourceware.org/ml/gdb-cvs/2008-04/msg00104.html
+
+diff --git a/gdb/testsuite/gdb.base/watchpoint-cond.c b/gdb/testsuite/gdb.base/watchpoint-cond.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/watchpoint-cond.c
+@@ -0,0 +1,31 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2008 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++   Please email any bugs, comments, and/or additions to this file to:
++   bug-gdb@prep.ai.mit.edu  */
++
++int
++main (int argc, char **argv)
++{
++  static int i = 0; /* `static' to start initialized.  */
++  int j = 2;
++
++  for (j = 0; j < 30; j++)
++    i = 30 - j;
++
++  return 0;
++}
+diff --git a/gdb/testsuite/gdb.base/watchpoint-cond.exp b/gdb/testsuite/gdb.base/watchpoint-cond.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/watchpoint-cond.exp
+@@ -0,0 +1,37 @@
++# Copyright 2008 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++set testfile watchpoint-cond
++set srcfile ${testfile}.c
++set binfile [standard_output_file ${testfile}]
++if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
++    untested "Couldn't compile test program"
++    return -1
++}
++
++# Get things started.
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++gdb_load ${binfile}
++
++if { [runto_main] < 0 } {
++    untested watchpoint-cond
++    return -1
++}
++
++gdb_test "watch i if i < 20" "atchpoint \[0-9\]+: i"
++gdb_test "cont" "atchpoint \[0-9\]+: i.*Old value = 20.*New value = 19.*"
diff --git a/SOURCES/gdb-7.2.50-sparc-add-workaround-to-broken-debug-files.patch b/SOURCES/gdb-7.2.50-sparc-add-workaround-to-broken-debug-files.patch
new file mode 100644
index 0000000..fc75329
--- /dev/null
+++ b/SOURCES/gdb-7.2.50-sparc-add-workaround-to-broken-debug-files.patch
@@ -0,0 +1,68 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-7.2.50-sparc-add-workaround-to-broken-debug-files.patch
+
+;; Toolchain on sparc is slightly broken and debuginfo files are generated
+;; with non 64bit aligned tables/offsets.
+;; See for example readelf -S ../Xvnc.debug.
+;;
+;; As a consenquence calculation of sectp->filepos as used in
+;; dwarf2_read_section (gdb/dwarf2read.c:1525) will return a non aligned buffer
+;; that cannot be used directly as done with MMAP.
+;; Usage will result in a BusError.
+;;
+;; While we figure out what's wrong in the toolchain and do a full archive
+;; rebuild to fix it, we need to be able to use gdb :)
+;;=push
+
+diff --git a/gdb/gdb_bfd.c b/gdb/gdb_bfd.c
+--- a/gdb/gdb_bfd.c
++++ b/gdb/gdb_bfd.c
+@@ -24,12 +24,14 @@
+ #include "hashtab.h"
+ #include "filestuff.h"
+ #include "vec.h"
++#ifndef __sparc__
+ #ifdef HAVE_MMAP
+ #include <sys/mman.h>
+ #ifndef MAP_FAILED
+ #define MAP_FAILED ((void *) -1)
+ #endif
+ #endif
++#endif
+ #include "target.h"
+ #include "gdb/fileio.h"
+ #include "inferior.h"
+@@ -484,6 +486,7 @@ free_one_bfd_section (bfd *abfd, asection *sectp, void *ignore)
+ 
+   if (sect != NULL && sect->data != NULL)
+     {
++#ifndef __sparc__
+ #ifdef HAVE_MMAP
+       if (sect->map_addr != NULL)
+ 	{
+@@ -493,6 +496,7 @@ free_one_bfd_section (bfd *abfd, asection *sectp, void *ignore)
+ 	  gdb_assert (res == 0);
+ 	}
+       else
++#endif
+ #endif
+ 	xfree (sect->data);
+     }
+@@ -659,6 +663,7 @@ gdb_bfd_map_section (asection *sectp, bfd_size_type *size)
+   if (descriptor->data != NULL)
+     goto done;
+ 
++#ifndef __sparc__
+ #ifdef HAVE_MMAP
+   if (!bfd_is_section_compressed (abfd, sectp))
+     {
+@@ -693,6 +698,7 @@ gdb_bfd_map_section (asection *sectp, bfd_size_type *size)
+ 	}
+     }
+ #endif /* HAVE_MMAP */
++#endif
+ 
+   /* Handle compressed sections, or ordinary uncompressed sections in
+      the no-mmap case.  */
diff --git a/SOURCES/gdb-archer-next-over-throw-cxx-exec.patch b/SOURCES/gdb-archer-next-over-throw-cxx-exec.patch
new file mode 100644
index 0000000..26643f8
--- /dev/null
+++ b/SOURCES/gdb-archer-next-over-throw-cxx-exec.patch
@@ -0,0 +1,97 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-archer-next-over-throw-cxx-exec.patch
+
+;; Fix follow-exec for C++ programs (bugreported by Martin Stransky).
+;;=fedoratest
+
+Archer-upstreamed:
+http://sourceware.org/ml/archer/2010-q2/msg00031.html
+
+diff --git a/gdb/testsuite/gdb.cp/cxxexec.cc b/gdb/testsuite/gdb.cp/cxxexec.cc
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.cp/cxxexec.cc
+@@ -0,0 +1,25 @@
++/* This test script is part of GDB, the GNU debugger.
++
++   Copyright 2010 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++#include <unistd.h>
++
++int
++main()
++{
++  execlp ("true", "true", NULL);
++  return 1;
++}
+diff --git a/gdb/testsuite/gdb.cp/cxxexec.exp b/gdb/testsuite/gdb.cp/cxxexec.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.cp/cxxexec.exp
+@@ -0,0 +1,51 @@
++# Copyright 2010 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++if { [skip_cplus_tests] } { continue }
++
++set testfile cxxexec
++if { [prepare_for_testing ${testfile}.exp ${testfile} ${testfile}.cc {c++ debug}] } {
++    return -1
++}
++
++runto_main
++
++# We could stop after `continue' again at `main'.
++delete_breakpoints
++
++set test "p _Unwind_DebugHook"
++gdb_test_multiple $test $test {
++    -re " = .* 0x\[0-9a-f\].*\r\n$gdb_prompt $" {
++	pass $test
++    }
++    -re "\r\nNo symbol .*\r\n$gdb_prompt $" {
++	xfail $test
++	untested ${testfile}.exp
++	return -1
++    }
++}
++
++set test continue
++gdb_test_multiple $test $test {
++    -re "Cannot access memory at address 0x\[0-9a-f\]+\r\n$gdb_prompt $" {
++	fail $test
++    }
++    -re "\r\n$gdb_prompt $" {
++	pass $test
++    }
++}
++
++# `info inferiors' can show <null> on older GDBs.
++gdb_test "info threads" "info threads" "program finished"
diff --git a/SOURCES/gdb-archer-pie-addons-keep-disabled.patch b/SOURCES/gdb-archer-pie-addons-keep-disabled.patch
new file mode 100644
index 0000000..8824e54
--- /dev/null
+++ b/SOURCES/gdb-archer-pie-addons-keep-disabled.patch
@@ -0,0 +1,89 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-archer-pie-addons-keep-disabled.patch
+
+;;=push+jan: Breakpoints disabling matching should not be based on address.
+
+diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
+--- a/gdb/breakpoint.c
++++ b/gdb/breakpoint.c
+@@ -15522,6 +15522,50 @@ initialize_breakpoint_ops (void)
+ 
+ static struct cmd_list_element *enablebreaklist = NULL;
+ 
++void
++breakpoints_relocate (struct objfile *objfile, struct section_offsets *delta)
++{
++  struct bp_location *bl, **blp_tmp;
++  int changed = 0;
++
++  gdb_assert (objfile->separate_debug_objfile_backlink == NULL);
++
++  ALL_BP_LOCATIONS (bl, blp_tmp)
++    {
++      struct obj_section *osect;
++
++      /* BL->SECTION can be correctly NULL for breakpoints with multiple
++         locations expanded through symtab.  */
++
++      ALL_OBJFILE_OSECTIONS (objfile, osect)
++	{
++	  CORE_ADDR relocated_address;
++	  CORE_ADDR delta_offset;
++
++	  delta_offset = ANOFFSET (delta, osect->the_bfd_section->index);
++	  if (delta_offset == 0)
++	    continue;
++	  relocated_address = bl->address + delta_offset;
++
++	  if (obj_section_addr (osect) <= relocated_address
++	      && relocated_address < obj_section_endaddr (osect))
++	    {
++	      if (bl->inserted)
++		remove_breakpoint (bl);
++
++	      bl->address += delta_offset;
++	      bl->requested_address += delta_offset;
++
++	      changed = 1;
++	    }
++	}
++    }
++
++  if (changed)
++    qsort (bp_locations, bp_locations_count, sizeof (*bp_locations),
++	   bp_locations_compare);
++}
++
+ void
+ _initialize_breakpoint (void)
+ {
+diff --git a/gdb/breakpoint.h b/gdb/breakpoint.h
+--- a/gdb/breakpoint.h
++++ b/gdb/breakpoint.h
+@@ -1679,6 +1679,9 @@ extern const char *ep_parse_optional_if_clause (const char **arg);
+    UIOUT iff debugging multiple threads.  */
+ extern void maybe_print_thread_hit_breakpoint (struct ui_out *uiout);
+ 
++extern void breakpoints_relocate (struct objfile *objfile,
++				  struct section_offsets *delta);
++
+ /* Print the specified breakpoint.  */
+ extern void print_breakpoint (breakpoint *bp);
+ 
+diff --git a/gdb/objfiles.c b/gdb/objfiles.c
+--- a/gdb/objfiles.c
++++ b/gdb/objfiles.c
+@@ -883,6 +883,11 @@ objfile_relocate1 (struct objfile *objfile,
+ 				obj_section_addr (s));
+     }
+ 
++  /* Final call of breakpoint_re_set can keep breakpoint locations disabled if
++     their addresses match.  */
++  if (objfile->separate_debug_objfile_backlink == NULL)
++    breakpoints_relocate (objfile, delta);
++
+   /* Data changed.  */
+   return 1;
+ }
diff --git a/SOURCES/gdb-archer-pie-addons.patch b/SOURCES/gdb-archer-pie-addons.patch
new file mode 100644
index 0000000..9aef617
--- /dev/null
+++ b/SOURCES/gdb-archer-pie-addons.patch
@@ -0,0 +1,63 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-archer-pie-addons.patch
+
+;;=push+jan: May get obsoleted by Tom's unrelocated objfiles patch.
+
+diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h
+--- a/gdb/gdbtypes.h
++++ b/gdb/gdbtypes.h
+@@ -505,6 +505,7 @@ enum field_loc_kind
+   {
+     FIELD_LOC_KIND_BITPOS,	/**< bitpos */
+     FIELD_LOC_KIND_ENUMVAL,	/**< enumval */
++    /* This address is unrelocated by the objfile's ANOFFSET.  */
+     FIELD_LOC_KIND_PHYSADDR,	/**< physaddr */
+     FIELD_LOC_KIND_PHYSNAME,	/**< physname */
+     FIELD_LOC_KIND_DWARF_BLOCK	/**< dwarf_block */
+@@ -556,6 +557,7 @@ union field_location
+      field.  Otherwise, physname is the mangled label of the
+      static field.  */
+ 
++  /* This address is unrelocated by the objfile's ANOFFSET.  */
+   CORE_ADDR physaddr;
+   const char *physname;
+ 
+@@ -1438,6 +1440,7 @@ extern void set_type_vptr_basetype (struct type *, struct type *);
+ #define FIELD_ENUMVAL_LVAL(thisfld) ((thisfld).loc.enumval)
+ #define FIELD_ENUMVAL(thisfld) (FIELD_ENUMVAL_LVAL (thisfld) + 0)
+ #define FIELD_STATIC_PHYSNAME(thisfld) ((thisfld).loc.physname)
++/* This address is unrelocated by the objfile's ANOFFSET.  */
+ #define FIELD_STATIC_PHYSADDR(thisfld) ((thisfld).loc.physaddr)
+ #define FIELD_DWARF_BLOCK(thisfld) ((thisfld).loc.dwarf_block)
+ #define SET_FIELD_BITPOS(thisfld, bitpos)			\
+@@ -1449,6 +1452,7 @@ extern void set_type_vptr_basetype (struct type *, struct type *);
+ #define SET_FIELD_PHYSNAME(thisfld, name)			\
+   (FIELD_LOC_KIND (thisfld) = FIELD_LOC_KIND_PHYSNAME,		\
+    FIELD_STATIC_PHYSNAME (thisfld) = (name))
++/* This address is unrelocated by the objfile's ANOFFSET.  */
+ #define SET_FIELD_PHYSADDR(thisfld, addr)			\
+   (FIELD_LOC_KIND (thisfld) = FIELD_LOC_KIND_PHYSADDR,		\
+    FIELD_STATIC_PHYSADDR (thisfld) = (addr))
+@@ -1465,6 +1469,7 @@ extern void set_type_vptr_basetype (struct type *, struct type *);
+ #define TYPE_FIELD_BITPOS(thistype, n) FIELD_BITPOS (TYPE_FIELD (thistype, n))
+ #define TYPE_FIELD_ENUMVAL(thistype, n) FIELD_ENUMVAL (TYPE_FIELD (thistype, n))
+ #define TYPE_FIELD_STATIC_PHYSNAME(thistype, n) FIELD_STATIC_PHYSNAME (TYPE_FIELD (thistype, n))
++/* This address is unrelocated by the objfile's ANOFFSET.  */
+ #define TYPE_FIELD_STATIC_PHYSADDR(thistype, n) FIELD_STATIC_PHYSADDR (TYPE_FIELD (thistype, n))
+ #define TYPE_FIELD_DWARF_BLOCK(thistype, n) FIELD_DWARF_BLOCK (TYPE_FIELD (thistype, n))
+ #define TYPE_FIELD_ARTIFICIAL(thistype, n) FIELD_ARTIFICIAL(TYPE_FIELD(thistype,n))
+diff --git a/gdb/value.c b/gdb/value.c
+--- a/gdb/value.c
++++ b/gdb/value.c
+@@ -2829,7 +2829,8 @@ value_static_field (struct type *type, int fieldno)
+     {
+     case FIELD_LOC_KIND_PHYSADDR:
+       retval = value_at_lazy (TYPE_FIELD_TYPE (type, fieldno),
+-			      TYPE_FIELD_STATIC_PHYSADDR (type, fieldno));
++			      TYPE_FIELD_STATIC_PHYSADDR (type, fieldno)
++			      + (TYPE_OBJFILE (type) == NULL ? 0 : ANOFFSET (TYPE_OBJFILE (type)->section_offsets, SECT_OFF_TEXT (TYPE_OBJFILE (type)))));
+       break;
+     case FIELD_LOC_KIND_PHYSNAME:
+     {
diff --git a/SOURCES/gdb-archer-vla-tests.patch b/SOURCES/gdb-archer-vla-tests.patch
new file mode 100644
index 0000000..fa4fa0d
--- /dev/null
+++ b/SOURCES/gdb-archer-vla-tests.patch
@@ -0,0 +1,3737 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-archer-vla-tests.patch
+
+;;=fedoratest
+
+diff --git a/gdb/testsuite/gdb.ada/packed_array.exp b/gdb/testsuite/gdb.ada/packed_array.exp
+--- a/gdb/testsuite/gdb.ada/packed_array.exp
++++ b/gdb/testsuite/gdb.ada/packed_array.exp
+@@ -56,5 +56,11 @@ gdb_test_multiple "$test" "$test" {
+         # are.  Observed with (FSF GNU Ada 4.5.3 20110124).
+         xfail $test
+     }
++    -re "= \\(\\)\[\r\n\]+$gdb_prompt $" {
++	# archer-jankratochvil-vla resolves it as a dynamic type resolved as an
++	# empty array [0..-1].
++	# DW_AT_upper_bound : (DW_OP_fbreg: -48; DW_OP_deref)
++        xfail $test
++    }
+ }
+ 
+diff --git a/gdb/testsuite/gdb.arch/x86_64-vla-pointer-foo.S b/gdb/testsuite/gdb.arch/x86_64-vla-pointer-foo.S
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.arch/x86_64-vla-pointer-foo.S
+@@ -0,0 +1,358 @@
++	.file	"x86_64-vla-pointer.c"
++	.text
++.Ltext0:
++	.globl	foo
++	.type	foo, @function
++foo:
++.LFB0:
++	.file 1 "gdb.arch/x86_64-vla-pointer.c"
++	# gdb.arch/x86_64-vla-pointer.c:22
++	.loc 1 22 0
++	.cfi_startproc
++# BLOCK 2 seq:0
++# PRED: ENTRY (FALLTHRU)
++	pushq	%rbp
++	.cfi_def_cfa_offset 16
++	.cfi_offset 6, -16
++	movq	%rsp, %rbp
++	.cfi_def_cfa_register 6
++	pushq	%rbx
++	subq	$56, %rsp
++	.cfi_offset 3, -24
++	movl	%edi, -52(%rbp)
++	# gdb.arch/x86_64-vla-pointer.c:22
++	.loc 1 22 0
++	movq	%rsp, %rax
++	movq	%rax, %rsi
++	# gdb.arch/x86_64-vla-pointer.c:23
++	.loc 1 23 0
++	movl	-52(%rbp), %eax
++	movslq	%eax, %rdx
++	subq	$1, %rdx
++	movq	%rdx, -32(%rbp)
++	movslq	%eax, %rdx
++	movq	%rdx, %r8
++	movl	$0, %r9d
++	# gdb.arch/x86_64-vla-pointer.c:24
++	.loc 1 24 0
++	movslq	%eax, %rdx
++	movq	%rdx, %rcx
++	movl	$0, %ebx
++	cltq
++	movl	$16, %edx
++	subq	$1, %rdx
++	addq	%rdx, %rax
++	movl	$16, %ebx
++	movl	$0, %edx
++	divq	%rbx
++	imulq	$16, %rax, %rax
++	subq	%rax, %rsp
++	movq	%rsp, %rax
++	addq	$0, %rax
++	movq	%rax, -40(%rbp)
++	# gdb.arch/x86_64-vla-pointer.c:27
++	.loc 1 27 0
++	movl	$0, -20(%rbp)
++# SUCC: 4 [100.0%] 
++	jmp	.L2
++# BLOCK 3 seq:1
++# PRED: 4
++.L3:
++	# gdb.arch/x86_64-vla-pointer.c:28
++	.loc 1 28 0 discriminator 3
++	movl	-20(%rbp), %eax
++	movl	%eax, %ecx
++	movq	-40(%rbp), %rdx
++	movl	-20(%rbp), %eax
++	cltq
++	movb	%cl, (%rdx,%rax)
++# SUCC: 4 (FALLTHRU,DFS_BACK)
++	# gdb.arch/x86_64-vla-pointer.c:27
++	.loc 1 27 0 discriminator 3
++	addl	$1, -20(%rbp)
++# BLOCK 4 seq:2
++# PRED: 3 (FALLTHRU,DFS_BACK) 2 [100.0%] 
++.L2:
++	# gdb.arch/x86_64-vla-pointer.c:27
++	.loc 1 27 0 is_stmt 0 discriminator 1
++	movl	-20(%rbp), %eax
++	cmpl	-52(%rbp), %eax
++# SUCC: 3 5 (FALLTHRU)
++	jl	.L3
++# BLOCK 5 seq:3
++# PRED: 4 (FALLTHRU)
++	# gdb.arch/x86_64-vla-pointer.c:30
++	.loc 1 30 0 is_stmt 1
++	movq	-40(%rbp), %rax
++	movb	$0, (%rax)
++	movq	%rsi, %rsp
++	# gdb.arch/x86_64-vla-pointer.c:31
++	.loc 1 31 0
++	nop
++	movq	-8(%rbp), %rbx
++	leave
++	.cfi_def_cfa 7, 8
++# SUCC: EXIT [100.0%] 
++	ret
++	.cfi_endproc
++.LFE0:
++	.size	foo, .-foo
++.Letext0:
++	.section	.debug_info,"",@progbits
++.Ldebug_info0:
++	.long	0xa5	# Length of Compilation Unit Info
++	.value	0x4	# DWARF version number
++	.long	.Ldebug_abbrev0	# Offset Into Abbrev. Section
++	.byte	0x8	# Pointer Size (in bytes)
++	.uleb128 0x1	# (DIE (0xb) DW_TAG_compile_unit)
++	.long	.LASF3	# DW_AT_producer: "GNU C11 6.2.1 20160916 (Red Hat 6.2.1-2) -mtune=generic -march=x86-64 -g"
++	.byte	0xc	# DW_AT_language
++	.long	.LASF4	# DW_AT_name: "gdb.arch/x86_64-vla-pointer.c"
++	.long	.LASF5	# DW_AT_comp_dir: "/home/jkratoch/redhat/fedora/gdb/master/gdb-7.12/gdb/testsuite"
++	.quad	.Ltext0	# DW_AT_low_pc
++	.quad	.Letext0-.Ltext0	# DW_AT_high_pc
++	.long	.Ldebug_line0	# DW_AT_stmt_list
++	.uleb128 0x2	# (DIE (0x2d) DW_TAG_subprogram)
++			# DW_AT_external
++	.ascii "foo\0"	# DW_AT_name
++	.byte	0x1	# DW_AT_decl_file (gdb.arch/x86_64-vla-pointer.c)
++	.byte	0x15	# DW_AT_decl_line
++			# DW_AT_prototyped
++	.quad	.LFB0	# DW_AT_low_pc
++	.quad	.LFE0-.LFB0	# DW_AT_high_pc
++	.uleb128 0x1	# DW_AT_frame_base
++	.byte	0x9c	# DW_OP_call_frame_cfa
++			# DW_AT_GNU_all_call_sites
++	.long	0x80	# DW_AT_sibling
++	.uleb128 0x3	# (DIE (0x4a) DW_TAG_formal_parameter)
++	.long	.LASF6	# DW_AT_name: "size"
++	.byte	0x1	# DW_AT_decl_file (gdb.arch/x86_64-vla-pointer.c)
++	.byte	0x15	# DW_AT_decl_line
++	.long	0x80	# DW_AT_type
++	.uleb128 0x3	# DW_AT_location
++	.byte	0x91	# DW_OP_fbreg
++	.sleb128 -68
++	.uleb128 0x4	# (DIE (0x59) DW_TAG_typedef)
++	.long	.LASF7	# DW_AT_name: "array_t"
++	.byte	0x1	# DW_AT_decl_file (gdb.arch/x86_64-vla-pointer.c)
++	.byte	0x17	# DW_AT_decl_line
++	.long	0x87	# DW_AT_type
++	.uleb128 0x5	# (DIE (0x64) DW_TAG_variable)
++	.long	.LASF0	# DW_AT_name: "array"
++	.byte	0x1	# DW_AT_decl_file (gdb.arch/x86_64-vla-pointer.c)
++	.byte	0x18	# DW_AT_decl_line
++	.long	0x59	# DW_AT_type
++	.uleb128 0x3	# DW_AT_location
++	.byte	0x91	# DW_OP_fbreg
++	.sleb128 -56
++	.byte	0x6	# DW_OP_deref
++	.uleb128 0x6	# (DIE (0x73) DW_TAG_variable)
++	.ascii "i\0"	# DW_AT_name
++	.byte	0x1	# DW_AT_decl_file (gdb.arch/x86_64-vla-pointer.c)
++	.byte	0x19	# DW_AT_decl_line
++	.long	0x80	# DW_AT_type
++	.uleb128 0x2	# DW_AT_location
++	.byte	0x91	# DW_OP_fbreg
++	.sleb128 -36
++	.byte	0	# end of children of DIE 0x2d
++	.uleb128 0x7	# (DIE (0x80) DW_TAG_base_type)
++	.byte	0x4	# DW_AT_byte_size
++	.byte	0x5	# DW_AT_encoding
++	.ascii "int\0"	# DW_AT_name
++	.uleb128 0x8	# (DIE (0x87) DW_TAG_array_type)
++	.long	0xa1	# DW_AT_type
++	.long	0x9a	# DW_AT_sibling
++	.uleb128 0x9	# (DIE (0x90) DW_TAG_subrange_type)
++	.long	0x9a	# DW_AT_type
++	.uleb128 0x3	# DW_AT_upper_bound
++	.byte	0x91	# DW_OP_fbreg
++	.sleb128 -48
++	.byte	0x6	# DW_OP_deref
++	.byte	0	# end of children of DIE 0x87
++	.uleb128 0xa	# (DIE (0x9a) DW_TAG_base_type)
++	.byte	0x8	# DW_AT_byte_size
++	.byte	0x7	# DW_AT_encoding
++	.long	.LASF1	# DW_AT_name: "sizetype"
++	.uleb128 0xa	# (DIE (0xa1) DW_TAG_base_type)
++	.byte	0x1	# DW_AT_byte_size
++	.byte	0x6	# DW_AT_encoding
++	.long	.LASF2	# DW_AT_name: "char"
++	.byte	0	# end of children of DIE 0xb
++	.section	.debug_abbrev,"",@progbits
++.Ldebug_abbrev0:
++	.uleb128 0x1	# (abbrev code)
++	.uleb128 0x11	# (TAG: DW_TAG_compile_unit)
++	.byte	0x1	# DW_children_yes
++	.uleb128 0x25	# (DW_AT_producer)
++	.uleb128 0xe	# (DW_FORM_strp)
++	.uleb128 0x13	# (DW_AT_language)
++	.uleb128 0xb	# (DW_FORM_data1)
++	.uleb128 0x3	# (DW_AT_name)
++	.uleb128 0xe	# (DW_FORM_strp)
++	.uleb128 0x1b	# (DW_AT_comp_dir)
++	.uleb128 0xe	# (DW_FORM_strp)
++	.uleb128 0x11	# (DW_AT_low_pc)
++	.uleb128 0x1	# (DW_FORM_addr)
++	.uleb128 0x12	# (DW_AT_high_pc)
++	.uleb128 0x7	# (DW_FORM_data8)
++	.uleb128 0x10	# (DW_AT_stmt_list)
++	.uleb128 0x17	# (DW_FORM_sec_offset)
++	.byte	0
++	.byte	0
++	.uleb128 0x2	# (abbrev code)
++	.uleb128 0x2e	# (TAG: DW_TAG_subprogram)
++	.byte	0x1	# DW_children_yes
++	.uleb128 0x3f	# (DW_AT_external)
++	.uleb128 0x19	# (DW_FORM_flag_present)
++	.uleb128 0x3	# (DW_AT_name)
++	.uleb128 0x8	# (DW_FORM_string)
++	.uleb128 0x3a	# (DW_AT_decl_file)
++	.uleb128 0xb	# (DW_FORM_data1)
++	.uleb128 0x3b	# (DW_AT_decl_line)
++	.uleb128 0xb	# (DW_FORM_data1)
++	.uleb128 0x27	# (DW_AT_prototyped)
++	.uleb128 0x19	# (DW_FORM_flag_present)
++	.uleb128 0x11	# (DW_AT_low_pc)
++	.uleb128 0x1	# (DW_FORM_addr)
++	.uleb128 0x12	# (DW_AT_high_pc)
++	.uleb128 0x7	# (DW_FORM_data8)
++	.uleb128 0x40	# (DW_AT_frame_base)
++	.uleb128 0x18	# (DW_FORM_exprloc)
++	.uleb128 0x2117	# (DW_AT_GNU_all_call_sites)
++	.uleb128 0x19	# (DW_FORM_flag_present)
++	.uleb128 0x1	# (DW_AT_sibling)
++	.uleb128 0x13	# (DW_FORM_ref4)
++	.byte	0
++	.byte	0
++	.uleb128 0x3	# (abbrev code)
++	.uleb128 0x5	# (TAG: DW_TAG_formal_parameter)
++	.byte	0	# DW_children_no
++	.uleb128 0x3	# (DW_AT_name)
++	.uleb128 0xe	# (DW_FORM_strp)
++	.uleb128 0x3a	# (DW_AT_decl_file)
++	.uleb128 0xb	# (DW_FORM_data1)
++	.uleb128 0x3b	# (DW_AT_decl_line)
++	.uleb128 0xb	# (DW_FORM_data1)
++	.uleb128 0x49	# (DW_AT_type)
++	.uleb128 0x13	# (DW_FORM_ref4)
++	.uleb128 0x2	# (DW_AT_location)
++	.uleb128 0x18	# (DW_FORM_exprloc)
++	.byte	0
++	.byte	0
++	.uleb128 0x4	# (abbrev code)
++	.uleb128 0x16	# (TAG: DW_TAG_typedef)
++	.byte	0	# DW_children_no
++	.uleb128 0x3	# (DW_AT_name)
++	.uleb128 0xe	# (DW_FORM_strp)
++	.uleb128 0x3a	# (DW_AT_decl_file)
++	.uleb128 0xb	# (DW_FORM_data1)
++	.uleb128 0x3b	# (DW_AT_decl_line)
++	.uleb128 0xb	# (DW_FORM_data1)
++	.uleb128 0x49	# (DW_AT_type)
++	.uleb128 0x13	# (DW_FORM_ref4)
++	.byte	0
++	.byte	0
++	.uleb128 0x5	# (abbrev code)
++	.uleb128 0x34	# (TAG: DW_TAG_variable)
++	.byte	0	# DW_children_no
++	.uleb128 0x3	# (DW_AT_name)
++	.uleb128 0xe	# (DW_FORM_strp)
++	.uleb128 0x3a	# (DW_AT_decl_file)
++	.uleb128 0xb	# (DW_FORM_data1)
++	.uleb128 0x3b	# (DW_AT_decl_line)
++	.uleb128 0xb	# (DW_FORM_data1)
++	.uleb128 0x49	# (DW_AT_type)
++	.uleb128 0x13	# (DW_FORM_ref4)
++	.uleb128 0x2	# (DW_AT_location)
++	.uleb128 0x18	# (DW_FORM_exprloc)
++	.byte	0
++	.byte	0
++	.uleb128 0x6	# (abbrev code)
++	.uleb128 0x34	# (TAG: DW_TAG_variable)
++	.byte	0	# DW_children_no
++	.uleb128 0x3	# (DW_AT_name)
++	.uleb128 0x8	# (DW_FORM_string)
++	.uleb128 0x3a	# (DW_AT_decl_file)
++	.uleb128 0xb	# (DW_FORM_data1)
++	.uleb128 0x3b	# (DW_AT_decl_line)
++	.uleb128 0xb	# (DW_FORM_data1)
++	.uleb128 0x49	# (DW_AT_type)
++	.uleb128 0x13	# (DW_FORM_ref4)
++	.uleb128 0x2	# (DW_AT_location)
++	.uleb128 0x18	# (DW_FORM_exprloc)
++	.byte	0
++	.byte	0
++	.uleb128 0x7	# (abbrev code)
++	.uleb128 0x24	# (TAG: DW_TAG_base_type)
++	.byte	0	# DW_children_no
++	.uleb128 0xb	# (DW_AT_byte_size)
++	.uleb128 0xb	# (DW_FORM_data1)
++	.uleb128 0x3e	# (DW_AT_encoding)
++	.uleb128 0xb	# (DW_FORM_data1)
++	.uleb128 0x3	# (DW_AT_name)
++	.uleb128 0x8	# (DW_FORM_string)
++	.byte	0
++	.byte	0
++	.uleb128 0x8	# (abbrev code)
++	.uleb128 0x1	# (TAG: DW_TAG_array_type)
++	.byte	0x1	# DW_children_yes
++	.uleb128 0x49	# (DW_AT_type)
++	.uleb128 0x13	# (DW_FORM_ref4)
++	.uleb128 0x1	# (DW_AT_sibling)
++	.uleb128 0x13	# (DW_FORM_ref4)
++	.byte	0
++	.byte	0
++	.uleb128 0x9	# (abbrev code)
++	.uleb128 0x21	# (TAG: DW_TAG_subrange_type)
++	.byte	0	# DW_children_no
++	.uleb128 0x49	# (DW_AT_type)
++	.uleb128 0x13	# (DW_FORM_ref4)
++	.uleb128 0x2f	# (DW_AT_upper_bound)
++	.uleb128 0x18	# (DW_FORM_exprloc)
++	.byte	0
++	.byte	0
++	.uleb128 0xa	# (abbrev code)
++	.uleb128 0x24	# (TAG: DW_TAG_base_type)
++	.byte	0	# DW_children_no
++	.uleb128 0xb	# (DW_AT_byte_size)
++	.uleb128 0xb	# (DW_FORM_data1)
++	.uleb128 0x3e	# (DW_AT_encoding)
++	.uleb128 0xb	# (DW_FORM_data1)
++	.uleb128 0x3	# (DW_AT_name)
++	.uleb128 0xe	# (DW_FORM_strp)
++	.byte	0
++	.byte	0
++	.byte	0
++	.section	.debug_aranges,"",@progbits
++	.long	0x2c	# Length of Address Ranges Info
++	.value	0x2	# DWARF Version
++	.long	.Ldebug_info0	# Offset of Compilation Unit Info
++	.byte	0x8	# Size of Address
++	.byte	0	# Size of Segment Descriptor
++	.value	0	# Pad to 16 byte boundary
++	.value	0
++	.quad	.Ltext0	# Address
++	.quad	.Letext0-.Ltext0	# Length
++	.quad	0
++	.quad	0
++	.section	.debug_line,"",@progbits
++.Ldebug_line0:
++	.section	.debug_str,"MS",@progbits,1
++.LASF4:
++	.string	"gdb.arch/x86_64-vla-pointer.c"
++.LASF7:
++	.string	"array_t"
++.LASF3:
++	.string	"GNU C11 6.2.1 20160916 (Red Hat 6.2.1-2) -mtune=generic -march=x86-64 -g"
++.LASF2:
++	.string	"char"
++.LASF1:
++	.string	"sizetype"
++.LASF5:
++	.string	"/home/jkratoch/redhat/fedora/gdb/master/gdb-7.12/gdb/testsuite"
++.LASF6:
++	.string	"size"
++.LASF0:
++	.string	"array"
++	.ident	"GCC: (GNU) 6.2.1 20160916 (Red Hat 6.2.1-2)"
++	.section	.note.GNU-stack,"",@progbits
+diff --git a/gdb/testsuite/gdb.arch/x86_64-vla-pointer.c b/gdb/testsuite/gdb.arch/x86_64-vla-pointer.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.arch/x86_64-vla-pointer.c
+@@ -0,0 +1,45 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2009 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++#if 0
++
++void
++foo (int size)
++{
++  typedef char array_t[size];
++  array_t array;
++  int i;
++
++  for (i = 0; i < size; i++)
++    array[i] = i;
++
++  array[0] = 0;	/* break-here */
++}
++
++#else
++
++void foo (int size);
++
++int
++main (void)
++{
++  foo (26);
++  foo (78);
++  return 0;
++}
++
++#endif
+diff --git a/gdb/testsuite/gdb.arch/x86_64-vla-pointer.exp b/gdb/testsuite/gdb.arch/x86_64-vla-pointer.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.arch/x86_64-vla-pointer.exp
+@@ -0,0 +1,65 @@
++# Copyright 2009 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++if ![istarget "x86_64-*-*"] then {
++    verbose "Skipping over gdb.arch/x86_64-vla-pointer.exp test made only for x86_64."
++    return
++}
++
++set testfile x86_64-vla-pointer
++set srcasmfile ${testfile}-foo.S
++set srcfile ${testfile}.c
++set binfile [standard_output_file ${testfile}]
++set binobjfile [standard_output_file ${testfile}-foo.o]
++if  { [gdb_compile "${srcdir}/${subdir}/${srcasmfile}" "${binobjfile}" object {}] != "" } {
++    untested "Couldn't compile test program"
++    return -1
++}
++if  { [gdb_compile "${srcdir}/${subdir}/${srcfile} ${binobjfile}" "${binfile}" executable {}] != "" } {
++    untested "Couldn't compile test program"
++    return -1
++}
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++gdb_load ${binfile}
++
++if ![runto_main] {
++    untested x86_64-vla-pointer
++    return -1
++}
++
++gdb_breakpoint $srcfile:[gdb_get_line_number "break-here"]
++
++gdb_continue_to_breakpoint "break-here"
++
++gdb_test "whatis array" "type = array_t" "first: whatis array"
++gdb_test "whatis array_t" "type = char \\\[variable length\\\]" "first: whatis array_t"
++gdb_test "ptype array" "type = char \\\[26\\\]" "first: ptype array"
++
++gdb_test "whatis *array" "type = char" "first: whatis *array"
++gdb_test "ptype *array" "type = char" "first: ptype *array"
++
++gdb_test "p array\[1\]" "\\$\[0-9\] = 1 '\\\\001'"
++gdb_test "p array\[2\]" "\\$\[0-9\] = 2 '\\\\002'"
++gdb_test "p array\[3\]" "\\$\[0-9\] = 3 '\\\\003'"
++gdb_test "p array\[4\]" "\\$\[0-9\] = 4 '\\\\004'"
++
++gdb_continue_to_breakpoint "break_here"
++
++gdb_test "whatis array" "type = array_t" "second: whatis array"
++gdb_test "whatis array_t" "type = char \\\[variable length\\\]" "second: whatis array_t"
++gdb_test "ptype array" "type = char \\\[78\\\]" "second: ptype array"
+diff --git a/gdb/testsuite/gdb.arch/x86_64-vla-typedef-foo.S b/gdb/testsuite/gdb.arch/x86_64-vla-typedef-foo.S
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.arch/x86_64-vla-typedef-foo.S
+@@ -0,0 +1,455 @@
++	.file	"x86_64-vla-typedef.c"
++	.section	.debug_abbrev,"",@progbits
++.Ldebug_abbrev0:
++	.section	.debug_info,"",@progbits
++.Ldebug_info0:
++	.section	.debug_line,"",@progbits
++.Ldebug_line0:
++	.text
++.Ltext0:
++.globl foo
++	.type	foo, @function
++foo:
++.LFB2:
++	.file 1 "x86_64-vla-typedef.c"
++	.loc 1 22 0
++	pushq	%rbp
++.LCFI0:
++	movq	%rsp, %rbp
++.LCFI1:
++	subq	$64, %rsp
++.LCFI2:
++	movl	%edi, -36(%rbp)
++	.loc 1 22 0
++	movq	%rsp, %rax
++	movq	%rax, -48(%rbp)
++	.loc 1 23 0
++	movl	-36(%rbp), %edx
++	movslq	%edx,%rax
++	subq	$1, %rax
++	movq	%rax, -24(%rbp)
++	.loc 1 24 0
++	movslq	%edx,%rax
++	addq	$15, %rax
++	addq	$15, %rax
++	shrq	$4, %rax
++	salq	$4, %rax
++	subq	%rax, %rsp
++	movq	%rsp, -56(%rbp)
++	movq	-56(%rbp), %rax
++	addq	$15, %rax
++	shrq	$4, %rax
++	salq	$4, %rax
++	movq	%rax, -56(%rbp)
++	movq	-56(%rbp), %rax
++	movq	%rax, -16(%rbp)
++	.loc 1 27 0
++	movl	$0, -4(%rbp)
++	jmp	.L2
++.L3:
++	.loc 1 28 0
++	movl	-4(%rbp), %esi
++	movl	-4(%rbp), %eax
++	movl	%eax, %ecx
++	movq	-16(%rbp), %rdx
++	movslq	%esi,%rax
++	movb	%cl, (%rdx,%rax)
++	.loc 1 27 0
++	addl	$1, -4(%rbp)
++.L2:
++	movl	-4(%rbp), %eax
++	cmpl	-36(%rbp), %eax
++	jl	.L3
++	.loc 1 30 0
++	.globl	break_here
++break_here:
++	movq	-16(%rbp), %rax
++	movb	$0, (%rax)
++	movq	-48(%rbp), %rsp
++	.loc 1 31 0
++	leave
++	ret
++.LFE2:
++	.size	foo, .-foo
++	.section	.debug_frame,"",@progbits
++.Lframe0:
++	.long	.LECIE0-.LSCIE0
++.LSCIE0:
++	.long	0xffffffff
++	.byte	0x1
++	.string	""
++	.uleb128 0x1
++	.sleb128 -8
++	.byte	0x10
++	.byte	0xc
++	.uleb128 0x7
++	.uleb128 0x8
++	.byte	0x90
++	.uleb128 0x1
++	.align 8
++.LECIE0:
++.LSFDE0:
++	.long	.LEFDE0-.LASFDE0
++.LASFDE0:
++	.long	.Lframe0
++	.quad	.LFB2
++	.quad	.LFE2-.LFB2
++	.byte	0x4
++	.long	.LCFI0-.LFB2
++	.byte	0xe
++	.uleb128 0x10
++	.byte	0x86
++	.uleb128 0x2
++	.byte	0x4
++	.long	.LCFI1-.LCFI0
++	.byte	0xd
++	.uleb128 0x6
++	.align 8
++.LEFDE0:
++	.section	.eh_frame,"a",@progbits
++.Lframe1:
++	.long	.LECIE1-.LSCIE1
++.LSCIE1:
++	.long	0x0
++	.byte	0x1
++	.string	"zR"
++	.uleb128 0x1
++	.sleb128 -8
++	.byte	0x10
++	.uleb128 0x1
++	.byte	0x3
++	.byte	0xc
++	.uleb128 0x7
++	.uleb128 0x8
++	.byte	0x90
++	.uleb128 0x1
++	.align 8
++.LECIE1:
++.LSFDE1:
++	.long	.LEFDE1-.LASFDE1
++.LASFDE1:
++	.long	.LASFDE1-.Lframe1
++	.long	.LFB2
++	.long	.LFE2-.LFB2
++	.uleb128 0x0
++	.byte	0x4
++	.long	.LCFI0-.LFB2
++	.byte	0xe
++	.uleb128 0x10
++	.byte	0x86
++	.uleb128 0x2
++	.byte	0x4
++	.long	.LCFI1-.LCFI0
++	.byte	0xd
++	.uleb128 0x6
++	.align 8
++.LEFDE1:
++	.text
++.Letext0:
++	.section	.debug_loc,"",@progbits
++.Ldebug_loc0:
++.LLST0:
++	.quad	.LFB2-.Ltext0
++	.quad	.LCFI0-.Ltext0
++	.value	0x2
++	.byte	0x77
++	.sleb128 8
++	.quad	.LCFI0-.Ltext0
++	.quad	.LCFI1-.Ltext0
++	.value	0x2
++	.byte	0x77
++	.sleb128 16
++	.quad	.LCFI1-.Ltext0
++	.quad	.LFE2-.Ltext0
++	.value	0x2
++	.byte	0x76
++	.sleb128 16
++	.quad	0x0
++	.quad	0x0
++	.section	.debug_info
++	.long	.Ldebug_end - .Ldebug_start
++.Ldebug_start:
++	.value	0x2
++	.long	.Ldebug_abbrev0
++	.byte	0x8
++	.uleb128 0x1
++	.long	.LASF2
++	.byte	0x1
++	.long	.LASF3
++	.long	.LASF4
++	.quad	.Ltext0
++	.quad	.Letext0
++	.long	.Ldebug_line0
++	.uleb128 0x2
++	.byte	0x1
++	.string	"foo"
++	.byte	0x1
++	.byte	0x16
++	.byte	0x1
++	.quad	.LFB2
++	.quad	.LFE2
++	.long	.LLST0
++	.long	0x83
++	.uleb128 0x3
++	.long	.LASF5
++	.byte	0x1
++	.byte	0x15
++	.long	0x83
++	.byte	0x2
++	.byte	0x91
++	.sleb128 -52
++.Ltag_typedef:
++	.uleb128 0x4
++	.long	.LASF6
++	.byte	0x1
++	.byte	0x17
++	.long	.Ltag_array_type - .debug_info
++	.uleb128 0x5	/* Abbrev Number: 5 (DW_TAG_variable) */
++	.long	.LASF0
++	.byte	0x1
++	.byte	0x18
++#if 1
++	.long	.Ltag_typedef - .debug_info
++#else
++	/* Debugging only: Skip the typedef indirection.  */
++	.long	.Ltag_array_type - .debug_info
++#endif
++	/* DW_AT_location: DW_FORM_block1: start */
++	.byte	0x3
++	.byte	0x91
++	.sleb128 -32
++#if 0
++	.byte	0x6	/* DW_OP_deref */
++#else
++	.byte	0x96	/* DW_OP_nop */
++#endif
++	/* DW_AT_location: DW_FORM_block1: end */
++	.uleb128 0x6
++	.string	"i"
++	.byte	0x1
++	.byte	0x19
++	.long	0x83
++	.byte	0x2
++	.byte	0x91
++	.sleb128 -20
++	.byte	0x0
++	.uleb128 0x7
++	.byte	0x4
++	.byte	0x5
++	.string	"int"
++.Ltag_array_type:
++	.uleb128 0x8	/* Abbrev Number: 8 (DW_TAG_array_type) */
++	.long	0xa0 + (2f - 1f)	/* DW_AT_type: DW_FORM_ref4 */
++	.long	0x9d + (2f - 1f)	/* DW_AT_sibling: DW_FORM_ref4 */
++1:	/* DW_AT_data_location: DW_FORM_block1: start */
++	.byte	2f - 3f	/* length */
++3:
++	.byte	0x97	/* DW_OP_push_object_address */
++	.byte	0x6	/* DW_OP_deref */
++2:	/* DW_AT_data_location: DW_FORM_block1: end */
++	.uleb128 0x9
++	.long	0x9d + (2b - 1b)	/* DW_AT_type: DW_FORM_ref4 */
++	.byte	0x3
++	.byte	0x91
++	.sleb128 -40
++	.byte	0x6
++	.byte	0x0
++	.uleb128 0xa
++	.byte	0x8
++	.byte	0x7
++	.uleb128 0xb
++	.byte	0x1
++	.byte	0x6
++	.long	.LASF1
++	.byte	0x0
++.Ldebug_end:
++	.section	.debug_abbrev
++	.uleb128 0x1
++	.uleb128 0x11
++	.byte	0x1
++	.uleb128 0x25
++	.uleb128 0xe
++	.uleb128 0x13
++	.uleb128 0xb
++	.uleb128 0x3
++	.uleb128 0xe
++	.uleb128 0x1b
++	.uleb128 0xe
++	.uleb128 0x11
++	.uleb128 0x1
++	.uleb128 0x12
++	.uleb128 0x1
++	.uleb128 0x10
++	.uleb128 0x6
++	.byte	0x0
++	.byte	0x0
++	.uleb128 0x2
++	.uleb128 0x2e
++	.byte	0x1
++	.uleb128 0x3f
++	.uleb128 0xc
++	.uleb128 0x3
++	.uleb128 0x8
++	.uleb128 0x3a
++	.uleb128 0xb
++	.uleb128 0x3b
++	.uleb128 0xb
++	.uleb128 0x27
++	.uleb128 0xc
++	.uleb128 0x11
++	.uleb128 0x1
++	.uleb128 0x12
++	.uleb128 0x1
++	.uleb128 0x40
++	.uleb128 0x6
++	.uleb128 0x1
++	.uleb128 0x13
++	.byte	0x0
++	.byte	0x0
++	.uleb128 0x3
++	.uleb128 0x5
++	.byte	0x0
++	.uleb128 0x3
++	.uleb128 0xe
++	.uleb128 0x3a
++	.uleb128 0xb
++	.uleb128 0x3b
++	.uleb128 0xb
++	.uleb128 0x49
++	.uleb128 0x13
++	.uleb128 0x2
++	.uleb128 0xa
++	.byte	0x0
++	.byte	0x0
++	.uleb128 0x4
++	.uleb128 0x16
++	.byte	0x0
++	.uleb128 0x3
++	.uleb128 0xe
++	.uleb128 0x3a
++	.uleb128 0xb
++	.uleb128 0x3b
++	.uleb128 0xb
++	.uleb128 0x49
++	.uleb128 0x13
++	.byte	0x0
++	.byte	0x0
++	.uleb128 0x5
++	.uleb128 0x34
++	.byte	0x0
++	.uleb128 0x3
++	.uleb128 0xe
++	.uleb128 0x3a
++	.uleb128 0xb
++	.uleb128 0x3b
++	.uleb128 0xb
++	.uleb128 0x49
++	.uleb128 0x13
++	.uleb128 0x2
++	.uleb128 0xa
++	.byte	0x0
++	.byte	0x0
++	.uleb128 0x6
++	.uleb128 0x34
++	.byte	0x0
++	.uleb128 0x3
++	.uleb128 0x8
++	.uleb128 0x3a
++	.uleb128 0xb
++	.uleb128 0x3b
++	.uleb128 0xb
++	.uleb128 0x49
++	.uleb128 0x13
++	.uleb128 0x2
++	.uleb128 0xa
++	.byte	0x0
++	.byte	0x0
++	.uleb128 0x7
++	.uleb128 0x24
++	.byte	0x0
++	.uleb128 0xb
++	.uleb128 0xb
++	.uleb128 0x3e
++	.uleb128 0xb
++	.uleb128 0x3
++	.uleb128 0x8
++	.byte	0x0
++	.byte	0x0
++	.uleb128 0x8	/* Abbrev Number: 8 (DW_TAG_array_type) */
++	.uleb128 0x1
++	.byte	0x1
++	.uleb128 0x49	/* DW_AT_type */
++	.uleb128 0x13	/* DW_FORM_ref4 */
++	.uleb128 0x1	/* DW_AT_sibling */
++	.uleb128 0x13	/* DW_FORM_ref4 */
++	.uleb128 0x50	/* DW_AT_data_location */
++	.uleb128 0xa	/* DW_FORM_block1 */
++	.byte	0x0
++	.byte	0x0
++	.uleb128 0x9
++	.uleb128 0x21
++	.byte	0x0
++	.uleb128 0x49	/* DW_AT_type */
++	.uleb128 0x13	/* DW_FORM_ref4 */
++	.uleb128 0x2f
++	.uleb128 0xa
++	.byte	0x0
++	.byte	0x0
++	.uleb128 0xa
++	.uleb128 0x24
++	.byte	0x0
++	.uleb128 0xb
++	.uleb128 0xb
++	.uleb128 0x3e
++	.uleb128 0xb
++	.byte	0x0
++	.byte	0x0
++	.uleb128 0xb
++	.uleb128 0x24
++	.byte	0x0
++	.uleb128 0xb
++	.uleb128 0xb
++	.uleb128 0x3e
++	.uleb128 0xb
++	.uleb128 0x3
++	.uleb128 0xe
++	.byte	0x0
++	.byte	0x0
++	.byte	0x0
++	.section	.debug_pubnames,"",@progbits
++	.long	0x16
++	.value	0x2
++	.long	.Ldebug_info0
++	.long	0xa8
++	.long	0x2d
++	.string	"foo"
++	.long	0x0
++	.section	.debug_aranges,"",@progbits
++	.long	0x2c
++	.value	0x2
++	.long	.Ldebug_info0
++	.byte	0x8
++	.byte	0x0
++	.value	0x0
++	.value	0x0
++	.quad	.Ltext0
++	.quad	.Letext0-.Ltext0
++	.quad	0x0
++	.quad	0x0
++	.section	.debug_str,"MS",@progbits,1
++.LASF0:
++	.string	"array"
++.LASF5:
++	.string	"size"
++.LASF3:
++	.string	"x86_64-vla-typedef.c"
++.LASF6:
++	.string	"array_t"
++.LASF1:
++	.string	"char"
++.LASF4:
++	.string	"gdb.arch"
++.LASF2:
++	.string	"GNU C 4.3.2 20081105 (Red Hat 4.3.2-7)"
++	.ident	"GCC: (GNU) 4.3.2 20081105 (Red Hat 4.3.2-7)"
++	.section	.note.GNU-stack,"",@progbits
+diff --git a/gdb/testsuite/gdb.arch/x86_64-vla-typedef.c b/gdb/testsuite/gdb.arch/x86_64-vla-typedef.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.arch/x86_64-vla-typedef.c
+@@ -0,0 +1,45 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2008 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++#if 0
++
++void
++foo (int size)
++{
++  typedef char array_t[size];
++  array_t array;
++  int i;
++
++  for (i = 0; i < size; i++)
++    array[i] = i;
++
++  array[0] = 0;	/* break-here */
++}
++
++#else
++
++void foo (int size);
++
++int
++main (void)
++{
++  foo (26);
++  foo (78);
++  return 0;
++}
++
++#endif
+diff --git a/gdb/testsuite/gdb.arch/x86_64-vla-typedef.exp b/gdb/testsuite/gdb.arch/x86_64-vla-typedef.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.arch/x86_64-vla-typedef.exp
+@@ -0,0 +1,64 @@
++# Copyright 2009 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++# Test DW_AT_data_location accessed through DW_TAG_typedef intermediate.
++
++if ![istarget "x86_64-*-*"] then {
++    verbose "Skipping over gdb.arch/x86_64-vla-typedef.exp test made only for x86_64."
++    return
++}
++
++set testfile x86_64-vla-typedef
++set srcasmfile ${testfile}-foo.S
++set srcfile ${testfile}.c
++set binfile [standard_output_file ${testfile}]
++set binobjfile [standard_output_file ${testfile}-foo.o]
++if  { [gdb_compile "${srcdir}/${subdir}/${srcasmfile}" "${binobjfile}" object {}] != "" } {
++    untested "Couldn't compile test program"
++    return -1
++}
++if  { [gdb_compile "${srcdir}/${subdir}/${srcfile} ${binobjfile}" "${binfile}" executable {debug}] != "" } {
++    untested "Couldn't compile test program"
++    return -1
++}
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++gdb_load ${binfile}
++
++if ![runto_main] {
++    untested x86_64-vla-typedef
++    return -1
++}
++
++gdb_breakpoint "break_here"
++
++gdb_continue_to_breakpoint "break_here"
++
++gdb_test "whatis array" "type = array_t" "first: whatis array"
++
++gdb_test "ptype array" "type = char \\\[26\\\]" "first: ptype array"
++
++gdb_test "p array\[1\]" "\\$\[0-9\] = 1 '\\\\001'"
++gdb_test "p array\[2\]" "\\$\[0-9\] = 2 '\\\\002'"
++gdb_test "p array\[3\]" "\\$\[0-9\] = 3 '\\\\003'"
++gdb_test "p array\[4\]" "\\$\[0-9\] = 4 '\\\\004'"
++
++gdb_continue_to_breakpoint "break_here"
++
++gdb_test "whatis array" "type = array_t" "second: whatis array"
++
++gdb_test "ptype array" "type = char \\\[78\\\]" "second: ptype array"
+diff --git a/gdb/testsuite/gdb.base/arrayidx.c b/gdb/testsuite/gdb.base/arrayidx.c
+--- a/gdb/testsuite/gdb.base/arrayidx.c
++++ b/gdb/testsuite/gdb.base/arrayidx.c
+@@ -17,6 +17,13 @@
+ 
+ int array[] = {1, 2, 3, 4};
+ 
++#ifdef __GNUC__
++struct
++  {
++    int a[0];
++  } unbound;
++#endif
++
+ int
+ main (void)
+ {
+diff --git a/gdb/testsuite/gdb.base/arrayidx.exp b/gdb/testsuite/gdb.base/arrayidx.exp
+--- a/gdb/testsuite/gdb.base/arrayidx.exp
++++ b/gdb/testsuite/gdb.base/arrayidx.exp
+@@ -49,4 +49,12 @@ gdb_test "print array" \
+          "\\{\\\[0\\\] = 1, \\\[1\\\] = 2, \\\[2\\\] = 3, \\\[3\\\] = 4\\}" \
+          "print array with array-indexes on"
+ 
+-
++set test "p unbound.a == &unbound.a\[0\]"
++gdb_test_multiple $test $test {
++    -re " = 1\r\n$gdb_prompt $" {
++	pass $test
++    }
++    -re "No symbol \"unbound\" in current context.\r\n$gdb_prompt $" {
++	unsupported "$test (no GCC)"
++    }
++}
+diff --git a/gdb/testsuite/gdb.base/internal-var-field-address.c b/gdb/testsuite/gdb.base/internal-var-field-address.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/internal-var-field-address.c
+@@ -0,0 +1,20 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2009 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++struct {
++  int field;
++} staticstruct = { 1 };
+diff --git a/gdb/testsuite/gdb.base/internal-var-field-address.exp b/gdb/testsuite/gdb.base/internal-var-field-address.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/internal-var-field-address.exp
+@@ -0,0 +1,26 @@
++# Copyright 2009 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++set test internal-var-field-address
++set binfile ${test}.x
++if  { [gdb_compile "${srcdir}/${subdir}/${test}.c" "[standard_output_file ${binfile}]" object {debug}] != "" } {
++    untested "Couldn't compile test program"
++    return -1
++}
++
++clean_restart $binfile
++
++gdb_test {set $varstruct = staticstruct}
++gdb_test {p $varstruct.field} " = 1"
+diff --git a/gdb/testsuite/gdb.base/vla-frame.c b/gdb/testsuite/gdb.base/vla-frame.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/vla-frame.c
+@@ -0,0 +1,31 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2011 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++#include <string.h>
++
++int
++main (int argc, char **argv)
++{
++  char s[2 + argc];
++  void (*f) (char *) = 0;
++
++  memset (s, 0, sizeof (s));
++  s[0] = 'X';
++
++  f (s);
++  return 0;
++}
+diff --git a/gdb/testsuite/gdb.base/vla-frame.exp b/gdb/testsuite/gdb.base/vla-frame.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/vla-frame.exp
+@@ -0,0 +1,38 @@
++# Copyright 2011 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++set testfile vla-frame
++set executable ${testfile}
++
++if { [prepare_for_testing ${testfile}.exp ${executable}] } {
++    return -1
++}
++
++if ![runto_main] {
++    return -1
++}
++
++set test "continue"
++gdb_test_multiple $test $test {
++    -re "Continuing\\.\r\n\r\nProgram received signal SIGSEGV, Segmentation fault\\.\r\n0x0+ in \\?\\? \\(\\)\r\n$gdb_prompt $" {
++	pass $test
++    }
++    -re "\r\n$gdb_prompt $" {
++	untested ${testfile}.exp
++	return
++    }
++}
++
++gdb_test "bt full" "\r\n +s = \"X\\\\000\"\r\n.*"
+diff --git a/gdb/testsuite/gdb.base/vla-overflow.c b/gdb/testsuite/gdb.base/vla-overflow.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/vla-overflow.c
+@@ -0,0 +1,30 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2008 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++#include <stdlib.h>
++
++int
++main (int argc, char **argv)
++{
++  int array[argc];
++
++  array[0] = array[0];
++
++  abort ();
++
++  return 0;
++}
+diff --git a/gdb/testsuite/gdb.base/vla-overflow.exp b/gdb/testsuite/gdb.base/vla-overflow.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/vla-overflow.exp
+@@ -0,0 +1,109 @@
++# Copyright 2008 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++# We could crash in:
++# #0  block_linkage_function (bl=0x0) at ../../gdb/block.c:69
++# #1  in dwarf_block_get_frame_base (...) at ../../gdb/dwarf2block.c:97
++#   97	  framefunc = block_linkage_function (get_frame_block (frame, NULL));
++# #2  in execute_stack_op (...) at ../../gdb/dwarf2expr.c:496
++# #3  in dwarf_block_exec_core () at ../../gdb/dwarf2block.c:156
++# #4  dwarf_block_exec (...) at ../../gdb/dwarf2block.c:206
++# #5  in range_type_count_bound_internal (...) at ../../gdb/gdbtypes.c:1430
++# #6  in create_array_type (...) at ../../gdb/gdbtypes.c:840
++# ...
++# #21 in psymtab_to_symtab (...) at ../../gdb/symfile.c:292
++# ...
++# #29 in backtrace_command_1 () at ../../gdb/stack.c:1273
++
++set testfile vla-overflow
++set shfile [standard_output_file ${testfile}-gdb.sh]
++set srcfile ${testfile}.c
++set binfile [standard_output_file ${testfile}]
++if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
++    untested "Couldn't compile test program"
++    return -1
++}
++
++set f [open "|getconf PAGESIZE" "r"]
++gets $f pagesize
++close $f
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++gdb_load ${binfile}
++
++set pid_of_gdb [exp_pid -i [board_info host fileid]]
++
++if { [runto_main] < 0 } {
++    untested vla-overflow
++    return -1
++}
++
++# Get the GDB memory size when we stay at main.
++
++proc memory_v_pages_get {} {
++    global pid_of_gdb pagesize
++    set fd [open "/proc/$pid_of_gdb/statm"]
++    gets $fd line
++    close $fd
++    # number of pages of virtual memory
++    scan $line "%d" drs
++    return $drs
++}
++
++set pages_found [memory_v_pages_get]
++
++# s390x with glibc-debuginfo.s390x installed used approx. 16MB.
++set mb_reserve 40
++verbose -log "pages_found = $pages_found, mb_reserve = $mb_reserve"
++set kb_found [expr $pages_found * $pagesize / 1024]
++set kb_permit [expr $kb_found + 1 * 1024 + $mb_reserve * 1024]
++verbose -log "kb_found = $kb_found, kb_permit = $kb_permit"
++
++# Create the ulimit wrapper.
++set f [open $shfile "w"]
++puts $f "#! /bin/sh"
++puts $f "ulimit -v $kb_permit"
++puts $f "exec $GDB \"\$@\""
++close $f
++remote_exec host "chmod +x $shfile"
++
++gdb_exit
++set GDBold $GDB
++set GDB "$shfile"
++gdb_start
++set GDB $GDBold
++
++gdb_reinitialize_dir $srcdir/$subdir
++gdb_load ${binfile}
++
++set pid_of_gdb [exp_pid -i [board_info host fileid]]
++
++# Check the size again after the second run.
++# We must not stop in main as it would cache `array' and never crash later.
++
++gdb_run_cmd
++
++verbose -log "kb_found before abort() = [expr [memory_v_pages_get] * $pagesize / 1024]"
++
++gdb_test "" "Program received signal SIGABRT, Aborted..*" "Enter abort()"
++
++verbose -log "kb_found in abort() = [expr [memory_v_pages_get] * $pagesize / 1024]"
++
++# `abort' can get expressed as `*__GI_abort'.
++gdb_test "bt" "in \[^ \]*abort \\(.* in main \\(.*" "Backtrace after abort()"
++
++verbose -log "kb_found in bt after abort() = [expr [memory_v_pages_get] * $pagesize / 1024]"
+diff --git a/gdb/testsuite/gdb.base/vla.c b/gdb/testsuite/gdb.base/vla.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/vla.c
+@@ -0,0 +1,55 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2008 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++#include <string.h>
++
++void
++marker (void)
++{
++}
++
++void
++bar (char *a, char *b, char *c, int size)
++{
++  memset (a, '1', size);
++  memset (b, '2', size);
++  memset (c, '3', 48);
++}
++
++void
++foo (int size)
++{
++  char temp1[size];
++  char temp3[48];
++
++  temp1[size - 1] = '\0';
++  {
++    char temp2[size];
++
++    bar (temp1, temp2, temp3, size);
++
++    marker ();	/* break-here */
++  }
++}
++
++int
++main (void)
++{
++  foo (26);
++  foo (78);
++  return 0;
++}
+diff --git a/gdb/testsuite/gdb.base/vla.exp b/gdb/testsuite/gdb.base/vla.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/vla.exp
+@@ -0,0 +1,62 @@
++# Copyright 2008 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++set testfile vla
++set srcfile ${testfile}.c
++set binfile [standard_output_file ${testfile}]
++if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
++    untested "Couldn't compile test program"
++    return -1
++}
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++gdb_load ${binfile}
++
++if ![runto_main] {
++    untested vla
++    return -1
++}
++
++gdb_breakpoint [gdb_get_line_number "break-here"]
++
++gdb_continue_to_breakpoint "break-here"
++
++gdb_test "whatis temp1" "type = char \\\[26\\\]" "first: whatis temp1"
++gdb_test "whatis temp2" "type = char \\\[26\\\]" "first: whatis temp2"
++gdb_test "whatis temp3" "type = char \\\[48\\\]" "first: whatis temp3"
++
++gdb_test "ptype temp1" "type = char \\\[26\\\]" "first: ptype temp1"
++gdb_test "ptype temp2" "type = char \\\[26\\\]" "first: ptype temp2"
++gdb_test "ptype temp3" "type = char \\\[48\\\]" "first: ptype temp3"
++
++gdb_test "p temp1" " = '1' <repeats 26 times>" "first: print temp1"
++gdb_test "p temp2" " = '2' <repeats 26 times>" "first: print temp2"
++gdb_test "p temp3" " = '3' <repeats 48 times>" "first: print temp3"
++
++gdb_continue_to_breakpoint "break-here"
++
++gdb_test "whatis temp1" "type = char \\\[78\\\]" "second: whatis temp1"
++gdb_test "whatis temp2" "type = char \\\[78\\\]" "second: whatis temp2"
++gdb_test "whatis temp3" "type = char \\\[48\\\]" "second: whatis temp3"
++
++gdb_test "ptype temp1" "type = char \\\[78\\\]" "second: ptype temp1"
++gdb_test "ptype temp2" "type = char \\\[78\\\]" "second: ptype temp2"
++gdb_test "ptype temp3" "type = char \\\[48\\\]" "second: ptype temp3"
++
++gdb_test "p temp1" " = '1' <repeats 78 times>" "second: print temp1"
++gdb_test "p temp2" " = '2' <repeats 78 times>" "second: print temp2"
++gdb_test "p temp3" " = '3' <repeats 48 times>" "second: print temp3"
+diff --git a/gdb/testsuite/gdb.cp/gdb9593.cc b/gdb/testsuite/gdb.cp/gdb9593.cc
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.cp/gdb9593.cc
+@@ -0,0 +1,180 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2008, 2009 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++   */
++#include <iostream>
++
++using namespace std;
++
++class NextOverThrowDerivates
++{
++
++public:
++
++
++  // Single throw an exception in this function.
++  void function1() 
++  {
++    throw 20;
++  }
++
++  // Throw an exception in another function.
++  void function2() 
++  {
++    function1();
++  }
++
++  // Throw an exception in another function, but handle it
++  // locally.
++  void function3 () 
++  {
++    {
++      try
++	{
++	  function1 ();
++	}
++      catch (...) 
++	{
++	  cout << "Caught and handled function1 exception" << endl;
++	}
++    }
++  }
++
++  void rethrow ()
++  {
++    try
++      {
++	function1 ();
++      }
++    catch (...)
++      {
++	throw;
++      }
++  }
++
++  void finish ()
++  {
++    // We use this to test that a "finish" here does not end up in
++    // this frame, but in the one above.
++    try
++      {
++	function1 ();
++      }
++    catch (int x)
++      {
++      }
++    function1 ();		// marker for until
++  }
++
++  void until ()
++  {
++    function1 ();
++    function1 ();		// until here
++  }
++
++};
++NextOverThrowDerivates next_cases;
++
++
++int main () 
++{ 
++  try
++    {
++      next_cases.function1 ();
++    }
++  catch (...)
++    {
++      // Discard
++    }
++
++  try
++    {
++      next_cases.function2 ();
++    }
++  catch (...)
++    {
++      // Discard
++    }
++
++  try
++    {
++      // This is duplicated so we can next over one but step into
++      // another.
++      next_cases.function2 ();
++    }
++  catch (...)
++    {
++      // Discard
++    }
++
++  next_cases.function3 ();
++
++  try
++    {
++      next_cases.rethrow ();
++    }
++  catch (...)
++    {
++      // Discard
++    }
++
++  try
++    {
++      // Another duplicate so we can test "finish".
++      next_cases.function2 ();
++    }
++  catch (...)
++    {
++      // Discard
++    }
++
++  // Another test for "finish".
++  try
++    {
++      next_cases.finish ();
++    }
++  catch (...)
++    {
++    }
++
++  // Test of "until".
++  try
++    {
++      next_cases.finish ();
++    }
++  catch (...)
++    {
++    }
++
++  // Test of "until" with an argument.
++  try
++    {
++      next_cases.until ();
++    }
++  catch (...)
++    {
++    }
++
++  // Test of "advance".
++  try
++    {
++      next_cases.until ();
++    }
++  catch (...)
++    {
++    }
++}
++
+diff --git a/gdb/testsuite/gdb.cp/gdb9593.exp b/gdb/testsuite/gdb.cp/gdb9593.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.cp/gdb9593.exp
+@@ -0,0 +1,182 @@
++# Copyright 2008, 2009 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++
++if $tracelevel then {
++    strace $tracelevel
++}
++
++if { [skip_cplus_tests] } { continue }
++
++set testfile "gdb9593"
++set srcfile ${testfile}.cc
++set binfile [standard_output_file $testfile]
++
++# Create and source the file that provides information about the compiler
++# used to compile the test case.
++if [get_compiler_info "c++"] {
++    untested gdb9593.exp
++    return -1
++}
++
++if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
++    untested gdb9593.exp
++    return -1
++}
++
++# Some targets can't do function calls, so don't even bother with this
++# test.
++if [target_info exists gdb,cannot_call_functions] {
++    setup_xfail "*-*-*" 9593
++    fail "This target can not call functions"
++    continue
++}
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++gdb_load ${binfile}
++
++if ![runto_main] then {
++    perror "couldn't run to main"
++    continue
++} 
++
++# See whether we have the needed unwinder hooks.
++set ok 1
++gdb_test_multiple "print _Unwind_DebugHook" "check for unwinder hook" {
++    -re "= .*_Unwind_DebugHook.*\r\n$gdb_prompt $" {
++	pass "check for unwinder hook"
++    }
++    -re "No symbol .* in current context.\r\n$gdb_prompt $" {
++	# Pass the test so we don't get bogus fails in the results.
++	pass "check for unwinder hook"
++	set ok 0
++    }
++}
++if {!$ok} {
++    untested gdb9593.exp
++    return -1
++}
++
++# See http://sourceware.org/bugzilla/show_bug.cgi?id=9593
++
++gdb_test "next" \
++    ".*catch (...).*" \
++    "next over a throw 1"
++
++gdb_test "next" \
++  ".*next_cases.function2.*" \
++  "next past catch 1"
++
++gdb_test "next" \
++    ".*catch (...).*" \
++    "next over a throw 2"
++
++gdb_test "next" \
++  ".*next_cases.function2.*" \
++  "next past catch 2"
++
++gdb_test "step" \
++  ".*function1().*" \
++  "step into function2 1"
++
++gdb_test "next" \
++    ".*catch (...).*" \
++    "next over a throw 3"
++
++gdb_test "next" \
++  ".*next_cases.function3.*" \
++  "next past catch 3"
++
++gdb_test "next" \
++  ".*next_cases.rethrow.*" \
++    "next over a throw 4"
++
++gdb_test "next" \
++  ".*catch (...).*" \
++  "next over a rethrow"
++
++gdb_test "next" \
++  ".*next_cases.function2.*" \
++  "next after a rethrow"
++
++gdb_test "step" \
++  ".*function1().*" \
++  "step into function2 2"
++
++gdb_test "finish" \
++  ".*catch (...).*" \
++  "finish 1"
++
++gdb_test "next" \
++  ".*next_cases.finish ().*" \
++  "next past catch 4"
++
++gdb_test "step" \
++  ".*function1 ().*" \
++  "step into finish method"
++
++gdb_test "finish" \
++  ".*catch (...).*" \
++  "finish 2"
++
++gdb_test "next" \
++  ".*next_cases.finish ().*" \
++  "next past catch 5"
++
++gdb_test "step" \
++  ".*function1 ().*" \
++  "step into finish, for until"
++
++gdb_test "until" \
++  ".*function1 ().*" \
++  "until with no argument 1"
++
++set line [gdb_get_line_number "marker for until" $testfile.cc]
++
++gdb_test "until $line" \
++  ".*function1 ().*" \
++  "next past catch 6"
++
++gdb_test "until" \
++  ".*catch (...).*" \
++  "until with no argument 2"
++
++set line [gdb_get_line_number "until here" $testfile.cc]
++
++gdb_test "next" \
++  ".*next_cases.until ().*" \
++  "next past catch 6"
++
++gdb_test "step" \
++  ".*function1 ().*" \
++  "step into until"
++
++gdb_test "until $line" \
++  ".*catch (...).*" \
++  "until-over-throw"
++
++gdb_test "next" \
++  ".*next_cases.until ().*" \
++  "next past catch 7"
++
++gdb_test "step" \
++  ".*function1 ().*" \
++  "step into until, for advance"
++
++gdb_test "advance $line" \
++  ".*catch (...).*" \
++  "advance-over-throw"
+diff --git a/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.S b/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.S
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.S
+@@ -0,0 +1,246 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2010 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++/* Debug information */
++
++/* We will `break *main' at the very first instruction.  */
++#define main_length 1
++
++	.section	.data
++vardata:
++	/* See DW_OP_lit3 + 1 (0-based).  */
++	.string		"seennotseen"
++
++	.section	.debug_info
++.Lcu1_begin:
++	.4byte		.Lcu1_end - .Lcu1_start	/* Length of Compilation Unit */
++.Lcu1_start:
++	.2byte		2			/* DWARF version number */
++	.4byte		.Ldebug_abbrev0		/* Offset Into Abbrev. Section */
++	.byte		4			/* Pointer Size (in bytes) */
++
++	/* CU die */
++	.uleb128	1			/* Abbrev: DW_TAG_compile_unit */
++	.4byte		.Lproducer		/* DW_AT_producer */
++	/* Use C++ to exploit a bug in parsing DW_AT_name "".  */
++	.byte		4			/* DW_AT_language (C++) -  */
++	.4byte		main			/* DW_AT_low_pc */
++	.byte		main_length		/* DW_AT_high_pc */
++
++.Larray_type:
++	.uleb128	2			/* Abbrev: DW_TAG_array_type */
++	.4byte		.Lchar_type-.Lcu1_begin	/* DW_AT_type */
++
++	.uleb128	3			/* Abbrev: DW_TAG_subrange_type */
++	.4byte		.Luint_type-.Lcu1_begin	/* DW_AT_type */
++	.byte		0			/* DW_AT_lower_bound */
++	.4byte		.Llen_var-.Lcu1_begin	/* DW_AT_upper_bound */
++	.byte		0			/* End of children of die */
++
++	/* DW_AT_upper_bound is referencing an optimized-out variable.  */
++.Larrayb_type:
++	.uleb128	2			/* Abbrev: DW_TAG_array_type */
++	.4byte		.Lchar_type-.Lcu1_begin	/* DW_AT_type */
++
++	.uleb128	3			/* Abbrev: DW_TAG_subrange_type */
++	.4byte		.Luint_type-.Lcu1_begin	/* DW_AT_type */
++	.byte		0			/* DW_AT_lower_bound */
++	.4byte		.Llenb_var-.Lcu1_begin	/* DW_AT_upper_bound */
++	.byte		0			/* End of children of die */
++
++	/* DW_AT_upper_bound is referencing register.  */
++.Larrayreg_type:
++	.uleb128	2			/* Abbrev: DW_TAG_array_type */
++	.4byte		.Lchar_type-.Lcu1_begin	/* DW_AT_type */
++
++	.uleb128	8			/* Abbrev: DW_TAG_subrange_type with block */
++	.4byte		.Luint_type-.Lcu1_begin	/* DW_AT_type */
++	.byte		0			/* DW_AT_lower_bound */
++	.byte		2f - 1f			/* DW_AT_upper_bound */
++1:	.byte		0x50			/* DW_OP_reg0 */
++2:
++	.byte		0			/* End of children of die */
++
++.Luint_type:
++	.uleb128	4			/* Abbrev: DW_TAG_base_type */
++	.4byte		.Luint_str		/* DW_AT_name */
++	.byte		4			/* DW_AT_byte_size */
++	.byte		7			/* DW_AT_encoding */
++
++.Lchar_type:
++	.uleb128	4			/* Abbrev: DW_TAG_base_type */
++	.4byte		.Lchar_str		/* DW_AT_name */
++	.byte		1			/* DW_AT_byte_size */
++	.byte		6			/* DW_AT_encoding */
++
++.Llen_var:
++	.uleb128	5			/* Abbrev: DW_TAG_variable artificial */
++	.byte		1			/* DW_AT_artificial */
++	.4byte		.Luint_type-.Lcu1_begin	/* DW_AT_type */
++	.4byte		.Llen_loclist-.Lloclist	/* DW_AT_location */
++
++	/* optimized-out variable for b_string.  */
++.Llenb_var:
++	.uleb128	7			/* Abbrev: DW_TAG_variable artificial no DW_AT_location */
++	.byte		1			/* DW_AT_artificial */
++	.4byte		.Luint_type-.Lcu1_begin	/* DW_AT_type */
++
++	.uleb128	6			/* Abbrev: DW_TAG_variable DW_FORM_string */
++	.string		"a_string"		/* DW_AT_name */
++	.4byte		.Larray_type-.Lcu1_begin /* DW_AT_type */
++	.byte		2f - 1f			/* DW_AT_location */
++1:	.byte		3			/*   DW_OP_addr */
++	.4byte		vardata			/*   <addr> */
++2:
++
++	/* DW_AT_upper_bound is referencing an optimized-out variable.  */
++	.uleb128	6			/* Abbrev: DW_TAG_variable DW_FORM_string */
++	.string		"b_string"		/* DW_AT_name */
++	.4byte		.Larrayb_type-.Lcu1_begin /* DW_AT_type */
++	.byte		2f - 1f			/* DW_AT_location */
++1:	.byte		3			/*   DW_OP_addr */
++	.4byte		vardata			/*   <addr> */
++2:
++
++	/* DW_AT_upper_bound is referencing register.  */
++	.uleb128	6			/* Abbrev: DW_TAG_variable DW_FORM_string */
++	.string		"reg_string"		/* DW_AT_name */
++	.4byte		.Larrayreg_type-.Lcu1_begin /* DW_AT_type */
++	.byte		2f - 1f			/* DW_AT_location */
++1:	.byte		3			/*   DW_OP_addr */
++	.4byte		vardata			/*   <addr> */
++2:
++
++	.byte		0			/* End of children of CU */
++.Lcu1_end:
++
++	.section	.debug_loc
++.Lloclist:
++.Llen_loclist:
++	.4byte	0			# Location list begin address
++	.4byte	main_length		# Location list end address
++	.value	2f-1f	# Location expression size
++1:	.byte	0x33	# DW_OP_lit3
++	.byte	0x9f	# DW_OP_stack_value
++2:
++	.quad	0x0	# Location list terminator begin (*.LLST2)
++	.quad	0x0	# Location list terminator end (*.LLST2)
++
++	.section .debug_abbrev
++.Ldebug_abbrev0:
++	.uleb128	1			/* Abbrev code */
++	.uleb128	0x11			/* DW_TAG_compile_unit */
++	.byte		0x1			/* has_children */
++	.uleb128	0x25			/* DW_AT_producer */
++	.uleb128	0xe			/* DW_FORM_strp */
++	.uleb128	0x13			/* DW_AT_language */
++	.uleb128	0xb			/* DW_FORM_data1 */
++	.uleb128	0x11			/* DW_AT_low_pc */
++	.uleb128	0x1			/* DW_FORM_addr */
++	.uleb128	0x12			/* DW_AT_high_pc */
++	.uleb128	0xb			/* DW_FORM_data1 */
++	.byte		0x0			/* Terminator */
++	.byte		0x0			/* Terminator */
++
++	.uleb128	2			/* Abbrev code */
++	.uleb128	0x1			/* TAG: DW_TAG_array_type */
++	.byte		0x1			/* DW_children_yes */
++	.uleb128	0x49			/* DW_AT_type */
++	.uleb128	0x13			/* DW_FORM_ref4 */
++	.byte		0x0			/* Terminator */
++	.byte		0x0			/* Terminator */
++
++	.uleb128	3			/* Abbrev code */
++	.uleb128	0x21			/* DW_TAG_subrange_type */
++	.byte		0x0			/* no children */
++	.uleb128	0x49			/* DW_AT_type */
++	.uleb128	0x13			/* DW_FORM_ref4 */
++	.uleb128	0x22			/* DW_AT_lower_bound */
++	.uleb128	0xb			/* DW_FORM_data1 */
++	.uleb128	0x2f			/* DW_AT_upper_bound */
++	.uleb128	0x13			/* DW_FORM_ref4 */
++	.byte		0x0			/* Terminator */
++	.byte		0x0			/* Terminator */
++
++	.uleb128	4			/* Abbrev code */
++	.uleb128	0x24			/* DW_TAG_base_type */
++	.byte		0x0			/* no_children */
++	.uleb128	0x3			/* DW_AT_name */
++	.uleb128	0xe			/* DW_FORM_strp */
++	.uleb128	0xb			/* DW_AT_byte_size */
++	.uleb128	0xb			/* DW_FORM_data1 */
++	.uleb128	0x3e			/* DW_AT_encoding */
++	.uleb128	0xb			/* DW_FORM_data1 */
++	.byte		0x0			/* Terminator */
++	.byte		0x0			/* Terminator */
++
++	.uleb128	5			/* Abbrev code */
++	.uleb128	0x34			/* DW_TAG_variable */
++	.byte		0x0			/* no_children */
++	.uleb128	0x34			/* DW_AT_artificial */
++	.uleb128	0x0c			/* DW_FORM_flag */
++	.uleb128	0x49			/* DW_AT_type */
++	.uleb128	0x13			/* DW_FORM_ref4 */
++	.uleb128	0x02			/* DW_AT_location */
++	.uleb128	0x06			/* DW_FORM_data4 */
++	.byte		0x0			/* Terminator */
++	.byte		0x0			/* Terminator */
++
++	.uleb128	6			/* Abbrev code */
++	.uleb128	0x34			/* DW_TAG_variable */
++	.byte		0x0			/* no_children */
++	.uleb128	0x3			/* DW_AT_name */
++	.uleb128	0x8			/* DW_FORM_string */
++	.uleb128	0x49			/* DW_AT_type */
++	.uleb128	0x13			/* DW_FORM_ref4 */
++	.uleb128	0x2			/* DW_AT_location */
++	.uleb128	0xa			/* DW_FORM_block1 */
++	.byte		0x0			/* Terminator */
++	.byte		0x0			/* Terminator */
++
++	.uleb128	7			/* Abbrev code */
++	.uleb128	0x34			/* DW_TAG_variable */
++	.byte		0x0			/* no_children */
++	.uleb128	0x34			/* DW_AT_artificial */
++	.uleb128	0x0c			/* DW_FORM_flag */
++	.uleb128	0x49			/* DW_AT_type */
++	.uleb128	0x13			/* DW_FORM_ref4 */
++	.byte		0x0			/* Terminator */
++	.byte		0x0			/* Terminator */
++
++	.uleb128	8			/* Abbrev code */
++	.uleb128	0x21			/* DW_TAG_subrange_type with block */
++	.byte		0x0			/* no children */
++	.uleb128	0x49			/* DW_AT_type */
++	.uleb128	0x13			/* DW_FORM_ref4 */
++	.uleb128	0x22			/* DW_AT_lower_bound */
++	.uleb128	0xb			/* DW_FORM_data1 */
++	.uleb128	0x2f			/* DW_AT_upper_bound */
++	.uleb128	0xa			/* DW_FORM_block1 */
++	.byte		0x0			/* Terminator */
++	.byte		0x0			/* Terminator */
++
++	.byte		0x0			/* Terminator */
++
++/* String table */
++	.section .debug_str
++.Lproducer:
++	.string		"GNU C 3.3.3"
++.Lchar_str:
++	.string		"char"
++.Luint_str:
++	.string		"unsigned int"
+diff --git a/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.exp b/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.exp
+@@ -0,0 +1,66 @@
++# Copyright 2010 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++# Test printing variable with dynamic bounds which reference a different
++# (artificial in the GCC case) variable containing loclist as its location.
++# This testcase uses value (not address) of the referenced variable:
++# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43762
++
++# This test can only be run on targets which support DWARF-2 and use gas.
++# For now pick a sampling of likely targets.
++if {![istarget *-*-linux*]
++    && ![istarget *-*-gnu*]
++    && ![istarget *-*-elf*]
++    && ![istarget *-*-openbsd*]
++    && ![istarget arm-*-eabi*]
++    && ![istarget powerpc-*-eabi*]} {
++    return 0
++}
++
++set testfile dw2-bound-loclist
++if { [prepare_for_testing ${testfile}.exp ${testfile} [list ${testfile}.S main.c] {}] } {
++    return -1
++}
++
++# Verify it behaves at least as an unbound array without inferior.
++
++# FIXME: FSF GDB crashes due to !has_stack_frames ().
++# But in practice that should not happen.
++# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43762
++#set test "p a_string"
++#gdb_test_multiple $test $test {
++#    -re " = 0x\[0-9a-f\]+ \"seennotseen\"\r\n$gdb_prompt $" {
++#	pass $test
++#    }
++#    -re "No registers\\.\r\n$gdb_prompt $" {
++#	kfail "vlaregression" $test
++#    }
++#}
++#
++#gdb_test "ptype a_string" {type = char \[variable length\]}
++
++# Not runto_main as dw2-bound-loclist.S handles only the first byte of main.
++if ![runto "*main"] {
++    return -1
++}
++
++gdb_test "p a_string" { = "seen"}
++gdb_test "ptype a_string" {type = char \[4\]}
++
++gdb_test "p b_string" { = (0x[0-9a-f]+ )?"seennotseen"}
++gdb_test "ptype b_string" {type = char \[\]}
++
++# The register contains unpredictable value - the array size.
++gdb_test "ptype reg_string" {type = char \[-?[0-9]+\]}
+diff --git a/gdb/testsuite/gdb.dwarf2/dw2-stripped.c b/gdb/testsuite/gdb.dwarf2/dw2-stripped.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.dwarf2/dw2-stripped.c
+@@ -0,0 +1,42 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2004 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 2 of the License, 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; if not, write to the Free Software
++   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
++   USA.  */
++
++
++/* The function `func1' traced into must have debug info on offset > 0;
++   (DW_UNSND (attr)).  This is the reason of `func0' existence.  */
++
++void
++func0(int a, int b)
++{
++}
++
++/* `func1' being traced into must have some arguments to dump.  */
++
++void
++func1(int a, int b)
++{
++  func0 (a,b);
++}
++
++int
++main(void)
++{
++  func1 (1, 2);
++  return 0;
++}
+diff --git a/gdb/testsuite/gdb.dwarf2/dw2-stripped.exp b/gdb/testsuite/gdb.dwarf2/dw2-stripped.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.dwarf2/dw2-stripped.exp
+@@ -0,0 +1,79 @@
++# Copyright 2006 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++# Minimal DWARF-2 unit test
++
++# This test can only be run on targets which support DWARF-2.
++# For now pick a sampling of likely targets.
++if {![istarget *-*-linux*]
++    && ![istarget *-*-gnu*]
++    && ![istarget *-*-elf*]
++    && ![istarget *-*-openbsd*]
++    && ![istarget arm-*-eabi*]
++    && ![istarget powerpc-*-eabi*]} {
++    return 0  
++}
++
++set testfile "dw2-stripped"
++set srcfile ${testfile}.c
++set binfile [standard_output_file ${testfile}.x]
++
++remote_exec build "rm -f ${binfile}"
++
++# get the value of gcc_compiled
++if [get_compiler_info ${binfile}] {
++    return -1
++}
++
++# This test can only be run on gcc as we use additional_flags=FIXME
++if {$gcc_compiled == 0} {
++    return 0
++}
++
++if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-ggdb3}] != "" } {
++    return -1
++}
++
++remote_exec build "objcopy -R .debug_loc ${binfile}"
++set strip_output [remote_exec build "objdump -h ${binfile}"]
++
++set test "stripping test file preservation"
++if [ regexp ".debug_info " $strip_output]  {
++    pass "$test (.debug_info preserved)"
++} else {
++    fail "$test (.debug_info got also stripped)"
++}
++
++set test "stripping test file functionality"
++if [ regexp ".debug_loc " $strip_output]  {
++    fail "$test (.debug_loc still present)"
++} else {
++    pass "$test (.debug_loc stripped)"
++}
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++gdb_load ${binfile}
++
++# For C programs, "start" should stop in main().
++
++gdb_test "start" \
++         ".*main \\(\\) at .*" \
++         "start"
++gdb_test "step" \
++         "func.* \\(.*\\) at .*" \
++         "step"
+diff --git a/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.S b/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.S
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.S
+@@ -0,0 +1,83 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2009 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++/* Debug information */
++
++	.section .debug_info
++.Lcu1_begin:
++	/* CU header */
++	.4byte	.Lcu1_end - .Lcu1_start		/* Length of Compilation Unit */
++.Lcu1_start:
++	.2byte	2				/* DWARF Version */
++	.4byte	.Labbrev1_begin			/* Offset into abbrev section */
++	.byte	4				/* Pointer size */
++
++	/* CU die */
++	.uleb128 1				/* Abbrev: DW_TAG_compile_unit */
++	.ascii	"dw2-struct-member-data-location.c\0"	/* DW_AT_name */
++	.ascii	"GNU C 4.3.2\0"			/* DW_AT_producer */
++	.byte	1				/* DW_AT_language (C) */
++
++.Ltype_uchar:
++	.uleb128	2			/* Abbrev: DW_TAG_structure_type */
++	.ascii		"some_struct\0"		/* DW_AT_name */
++
++	.uleb128	3			/* Abbrev: DW_TAG_member */
++	.ascii		"field\0"		/* DW_AT_name */
++	.byte		0			/* DW_AT_data_member_location */
++
++	.byte		0			/* End of children of some_struct */
++
++	.byte		0			/* End of children of CU */
++
++.Lcu1_end:
++
++/* Abbrev table */
++	.section .debug_abbrev
++.Labbrev1_begin:
++	.uleb128	1			/* Abbrev code */
++	.uleb128	0x11			/* DW_TAG_compile_unit */
++	.byte		1			/* has_children */
++	.uleb128	0x3			/* DW_AT_name */
++	.uleb128	0x8			/* DW_FORM_string */
++	.uleb128	0x25			/* DW_AT_producer */
++	.uleb128	0x8			/* DW_FORM_string */
++	.uleb128	0x13			/* DW_AT_language */
++	.uleb128	0xb			/* DW_FORM_data1 */
++	.byte		0x0			/* Terminator */
++	.byte		0x0			/* Terminator */
++
++	.uleb128	2			/* Abbrev code */
++	.uleb128	0x13			/* DW_TAG_structure_type */
++	.byte		1			/* has_children */
++	.uleb128	0x3			/* DW_AT_name */
++	.uleb128	0x8			/* DW_FORM_string */
++	.byte		0x0			/* Terminator */
++	.byte		0x0			/* Terminator */
++
++	.uleb128	3			/* Abbrev code */
++	.uleb128	0x0d			/* DW_TAG_member */
++	.byte		0			/* has_children */
++	.uleb128	0x3			/* DW_AT_name */
++	.uleb128	0x8			/* DW_FORM_string */
++	.uleb128	0x38			/* DW_AT_data_member_location */
++	.uleb128	0x0b			/* DW_FORM_data1 */
++	.byte		0x0			/* Terminator */
++	.byte		0x0			/* Terminator */
++
++	.byte		0x0			/* Terminator */
++	.byte		0x0			/* Terminator */
+diff --git a/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.exp b/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.dwarf2/dw2-struct-member-data-location.exp
+@@ -0,0 +1,37 @@
++# Copyright 2009 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++# This test can only be run on targets which support DWARF-2 and use gas.
++# For now pick a sampling of likely targets.
++if {![istarget *-*-linux*]
++    && ![istarget *-*-gnu*]
++    && ![istarget *-*-elf*]
++    && ![istarget *-*-openbsd*]
++    && ![istarget arm-*-eabi*]
++    && ![istarget powerpc-*-eabi*]} {
++    return 0  
++}
++
++set testfile "dw2-struct-member-data-location"
++set srcfile ${testfile}.S
++set binfile ${testfile}.x
++
++if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "[standard_output_file ${binfile}]" object {nodebug}] != "" } {
++    return -1
++}
++
++clean_restart $binfile
++
++gdb_test "ptype struct some_struct" "type = struct some_struct {\[\r\n \t\]*void field;\[\r\n \t\]*}"
+diff --git a/gdb/testsuite/gdb.dwarf2/dw2-subrange-no-type.S b/gdb/testsuite/gdb.dwarf2/dw2-subrange-no-type.S
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.dwarf2/dw2-subrange-no-type.S
+@@ -0,0 +1,121 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2012 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++/* Debug information */
++
++	.section	.data
++vardata:
++	.rept		129
++	.ascii		"x"
++	.endr
++	.ascii		"UNSEEN\0"
++
++	.section	.debug_info
++.Lcu1_begin:
++	.4byte		.Lcu1_end - .Lcu1_start	/* Length of Compilation Unit */
++.Lcu1_start:
++	.2byte		2			/* DWARF version number */
++	.4byte		.Ldebug_abbrev0		/* Offset Into Abbrev. Section */
++	.byte		4			/* Pointer Size (in bytes) */
++
++	/* CU die */
++	.uleb128	1			/* Abbrev: DW_TAG_compile_unit */
++	.ascii		"GNU C 3.3.3\0"		/* DW_AT_producer */
++	.byte		2			/* DW_AT_language (C) -  */
++
++.Larray_type:
++	.uleb128	2			/* Abbrev: DW_TAG_array_type */
++	.4byte		.Lchar_type-.Lcu1_begin	/* DW_AT_type */
++
++	.uleb128	8			/* Abbrev: DW_TAG_subrange_type without DW_AT_type */
++	.byte		0			/* DW_AT_lower_bound */
++	.byte		128			/* DW_AT_upper_bound */
++
++	.byte		0			/* End of children of die */
++
++.Lchar_type:
++	.uleb128	4			/* Abbrev: DW_TAG_base_type */
++	.ascii		"char\0"		/* DW_AT_name */
++	.byte		1			/* DW_AT_byte_size */
++	.byte		6			/* DW_AT_encoding */
++
++	.uleb128	6			/* Abbrev: DW_TAG_variable DW_FORM_string */
++	.ascii		"notype_string\0"	/* DW_AT_name */
++	.4byte		.Larray_type-.Lcu1_begin /* DW_AT_type */
++	.byte		2f - 1f			/* DW_AT_location */
++1:	.byte		3			/*   DW_OP_addr */
++	.4byte		vardata			/*   <addr> */
++2:
++
++	.byte		0			/* End of children of CU */
++.Lcu1_end:
++
++	.section .debug_abbrev
++.Ldebug_abbrev0:
++	.uleb128	1			/* Abbrev code */
++	.uleb128	0x11			/* DW_TAG_compile_unit */
++	.byte		0x1			/* has_children */
++	.uleb128	0x25			/* DW_AT_producer */
++	.uleb128	0x8			/* DW_FORM_string */
++	.uleb128	0x13			/* DW_AT_language */
++	.uleb128	0xb			/* DW_FORM_data1 */
++	.byte		0x0			/* Terminator */
++	.byte		0x0			/* Terminator */
++
++	.uleb128	2			/* Abbrev code */
++	.uleb128	0x1			/* TAG: DW_TAG_array_type */
++	.byte		0x1			/* DW_children_yes */
++	.uleb128	0x49			/* DW_AT_type */
++	.uleb128	0x13			/* DW_FORM_ref4 */
++	.byte		0x0			/* Terminator */
++	.byte		0x0			/* Terminator */
++
++	.uleb128	4			/* Abbrev code */
++	.uleb128	0x24			/* DW_TAG_base_type */
++	.byte		0x0			/* no_children */
++	.uleb128	0x3			/* DW_AT_name */
++	.uleb128	0x8			/* DW_FORM_string */
++	.uleb128	0xb			/* DW_AT_byte_size */
++	.uleb128	0xb			/* DW_FORM_data1 */
++	.uleb128	0x3e			/* DW_AT_encoding */
++	.uleb128	0xb			/* DW_FORM_data1 */
++	.byte		0x0			/* Terminator */
++	.byte		0x0			/* Terminator */
++
++	.uleb128	6			/* Abbrev code */
++	.uleb128	0x34			/* DW_TAG_variable */
++	.byte		0x0			/* no_children */
++	.uleb128	0x3			/* DW_AT_name */
++	.uleb128	0x8			/* DW_FORM_string */
++	.uleb128	0x49			/* DW_AT_type */
++	.uleb128	0x13			/* DW_FORM_ref4 */
++	.uleb128	0x2			/* DW_AT_location */
++	.uleb128	0xa			/* DW_FORM_block1 */
++	.byte		0x0			/* Terminator */
++	.byte		0x0			/* Terminator */
++
++	.uleb128	8			/* Abbrev code */
++	.uleb128	0x21			/* DW_TAG_subrange_type without DW_AT_type */
++	.byte		0x0			/* no children */
++	.uleb128	0x22			/* DW_AT_lower_bound */
++	.uleb128	0xb			/* DW_FORM_data1 */
++	.uleb128	0x2f			/* DW_AT_upper_bound */
++	.uleb128	0xb			/* DW_FORM_data1 */
++	.byte		0x0			/* Terminator */
++	.byte		0x0			/* Terminator */
++
++	.byte		0x0			/* Terminator */
+diff --git a/gdb/testsuite/gdb.dwarf2/dw2-subrange-no-type.exp b/gdb/testsuite/gdb.dwarf2/dw2-subrange-no-type.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.dwarf2/dw2-subrange-no-type.exp
+@@ -0,0 +1,39 @@
++# Copyright 2012 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++load_lib dwarf.exp
++
++# https://bugzilla.redhat.com/show_bug.cgi?id=806920
++# read_subrange_type <TYPE_CODE (base_type) == TYPE_CODE_VOID> reinitialization
++# of BASE_TYPE was done too late, it affects DW_TAG_subrange_type without
++# specified DW_AT_type, present only in XLF produced code.
++
++# This test can only be run on targets which support DWARF-2 and use gas.
++if {![dwarf2_support]} {
++    return 0  
++}
++
++set testfile dw2-subrange-no-type
++set srcfile ${testfile}.S
++set executable ${testfile}.x
++set binfile [standard_output_file ${executable}]
++
++if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" object {}] != "" } {
++    return -1
++}
++
++clean_restart $executable
++
++gdb_test "ptype notype_string" {type = char \[129\]}
++gdb_test "p notype_string" " = 'x' <repeats 129 times>"
+diff --git a/gdb/testsuite/gdb.fortran/dwarf-stride.exp b/gdb/testsuite/gdb.fortran/dwarf-stride.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.fortran/dwarf-stride.exp
+@@ -0,0 +1,42 @@
++# Copyright 2009 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
++
++# This file was written by Jan Kratochvil <jan.kratochvil@redhat.com>.
++
++# This file is part of the gdb testsuite.  Array element stride must not be
++# specified in the number of elements but in a number of bytes instead.
++# Original problem:
++# (gdb) p c40pt(1)
++# $1 = '0-hello', ' ' <repeats 33 times>
++# (gdb) p c40pt(2)
++# warning: Fortran array stride not divisible by the element size
++
++set testfile dwarf-stride
++set srcfile ${testfile}.f90
++
++if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {debug f90}] } {
++    return -1
++}
++
++if ![runto MAIN__] then {
++    perror "couldn't run to breakpoint MAIN__"
++    continue
++}
++
++gdb_breakpoint [gdb_get_line_number "break-here"]
++gdb_continue_to_breakpoint "break-here" ".*break-here.*"
++gdb_test "p c40pt(1)" " = '0-hello.*"
++gdb_test "p c40pt(2)" " = '1-hello.*"
+diff --git a/gdb/testsuite/gdb.fortran/dwarf-stride.f90 b/gdb/testsuite/gdb.fortran/dwarf-stride.f90
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.fortran/dwarf-stride.f90
+@@ -0,0 +1,40 @@
++! Copyright 2009 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 2 of the License, 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; if not, write to the Free Software
++! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++!
++! File written by Alan Matsuoka.
++
++program repro
++
++  type small_stride
++     character*40 long_string
++     integer      small_pad
++  end type small_stride
++
++  type(small_stride), dimension (20), target :: unpleasant
++  character*40, pointer, dimension(:):: c40pt
++
++  integer i
++
++  do i = 0,19
++     unpleasant(i+1)%small_pad = i+1
++     unpleasant(i+1)%long_string = char (ichar('0') + i) // '-hello'
++  end do
++
++  c40pt => unpleasant%long_string
++
++  print *, c40pt  ! break-here
++
++end program repro
+diff --git a/gdb/testsuite/gdb.fortran/dynamic.exp b/gdb/testsuite/gdb.fortran/dynamic.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.fortran/dynamic.exp
+@@ -0,0 +1,154 @@
++# Copyright 2007 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
++
++# This file was written by Jan Kratochvil <jan.kratochvil@redhat.com>.
++
++# This file is part of the gdb testsuite.  It contains tests for dynamically
++# allocated Fortran arrays.
++# It depends on the GCC dynamic Fortran arrays DWARF support:
++# 	http://gcc.gnu.org/bugzilla/show_bug.cgi?id=22244
++
++set testfile "dynamic"
++set srcfile ${testfile}.f90
++set binfile [standard_output_file ${testfile}]
++
++if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug f90 quiet}] != "" } {
++    untested "Couldn't compile ${srcfile}"
++    return -1
++}
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++gdb_load ${binfile}
++
++if ![runto MAIN__] then {
++    perror "couldn't run to breakpoint MAIN__"
++    continue
++}
++
++gdb_breakpoint [gdb_get_line_number "varx-init"]
++gdb_continue_to_breakpoint "varx-init"
++
++# http://www.cs.rpi.edu/~szymansk/OOF90/bugs.html#5
++# Do not: gdb_test "p varx" "\\$\[0-9\]* = <not allocated>" "p varx unallocated"
++# Do not: gdb_test "ptype varx" {type = real\(kind=4\) \(:,:,:\)} "ptype varx unallocated"
++# Do not: gdb_test "p varx(1,5,17)" {no such vector element \(vector not allocated\)} "p varx(1,5,17) unallocated"
++# Do not: gdb_test "p varx(1,5,17)=1" {no such vector element \(vector not allocated\)} "p varx(1,5,17)=1 unallocated"
++# Do not: gdb_test "ptype varx(1,5,17)" {no such vector element \(vector not allocated\)} "ptype varx(1,5,17) unallocated"
++
++gdb_breakpoint [gdb_get_line_number "varx-allocated"]
++gdb_continue_to_breakpoint "varx-allocated"
++# $1 = (( ( 0, 0, 0, 0, 0, 0) ( 0, 0, 0, 0, 0, 0) --- , 0) ) ( ( 0, 0, ...) ...) ...)
++gdb_test "ptype varx" "type = real(\\(kind=4\\)|\\*4) \\(6,5:15,17:28\\)" "ptype varx allocated"
++# Intel Fortran Compiler 10.1.008 uses -1 there, GCC uses 1.
++gdb_test "p l" "\\$\[0-9\]* = (\\.TRUE\\.|4294967295)" "p l if varx allocated"
++
++gdb_breakpoint [gdb_get_line_number "varx-filled"]
++gdb_continue_to_breakpoint "varx-filled"
++gdb_test "p varx(2, 5, 17)" "\\$\[0-9\]* = 6"
++gdb_test "p varx(1, 5, 17)" "\\$\[0-9\]* = 7"
++gdb_test "p varx(2, 6, 18)" "\\$\[0-9\]* = 8"
++gdb_test "p varx(6, 15, 28)" "\\$\[0-9\]* = 9"
++# http://www.cs.rpi.edu/~szymansk/OOF90/bugs.html#5
++# Do not: gdb_test "p varv" "\\$\[0-9\]* = <not associated>" "p varv unassociated"
++# Do not: gdb_test "ptype varv" {type = real\(kind=4\) \(:,:,:\)} "ptype varv unassociated"
++
++set test "output varx"
++gdb_test_multiple $test $test {
++    -re "^output varx\r\n\[() ,6789.\]*$gdb_prompt $" {
++	pass $test
++    }
++}
++
++gdb_breakpoint [gdb_get_line_number "varv-associated"]
++gdb_continue_to_breakpoint "varv-associated"
++gdb_test "p varx(3, 7, 19)" "\\$\[0-9\]* = 6" "p varx(3, 7, 19) with varv associated"
++gdb_test "p varv(3, 7, 19)" "\\$\[0-9\]* = 6" "p varv(3, 7, 19) associated"
++# Intel Fortran Compiler 10.1.008 uses -1 there, GCC uses 1.
++gdb_test "p l" "\\$\[0-9\]* = (\\.TRUE\\.|4294967295)" "p l if varv associated"
++gdb_test "ptype varx" "type = real(\\(kind=4\\)|\\*4) \\(6,5:15,17:28\\)" "ptype varx with varv associated"
++# Intel Fortran Compiler 10.1.008 uses the pointer type.
++gdb_test "ptype varv" "type = (PTR TO -> \\( )?real(\\(kind=4\\)|\\*4) \\(6,5:15,17:28\\)\\)?" "ptype varv associated"
++
++gdb_breakpoint [gdb_get_line_number "varv-filled"]
++gdb_continue_to_breakpoint "varv-filled"
++gdb_test "p varx(3, 7, 19)" "\\$\[0-9\]* = 10" "p varx(3, 7, 19) with varv filled"
++gdb_test "p varv(3, 7, 19)" "\\$\[0-9\]* = 10" "p varv(3, 7, 19) filled"
++
++gdb_breakpoint [gdb_get_line_number "varv-deassociated"]
++gdb_continue_to_breakpoint "varv-deassociated"
++# The latter one is for the Intel Fortran Compiler 10.1.008 pointer type.
++gdb_test "p varv" "\\$\[0-9\]* = (<not associated>|.*(Cannot access it|Unable to access the object) because the object is not associated.)" "p varv deassociated"
++gdb_test "ptype varv" {type = real\(kind=4\) \(:,:,:\)} "ptype varv deassociated"
++gdb_test "p l" "\\$\[0-9\]* = \\.FALSE\\." "p l if varv deassociated"
++gdb_test "p varv(1,5,17)" {no such vector element \(vector not associated\)}
++gdb_test "ptype varv(1,5,17)" {no such vector element \(vector not associated\)}
++
++gdb_breakpoint [gdb_get_line_number "varx-deallocated"]
++gdb_continue_to_breakpoint "varx-deallocated"
++gdb_test "p varx" "\\$\[0-9\]* = <not allocated>" "p varx deallocated"
++gdb_test "ptype varx" {type = real\(kind=4\) \(:,:,:\)} "ptype varx deallocated"
++gdb_test "p l" "\\$\[0-9\]* = \\.FALSE\\." "p l if varx deallocated"
++gdb_test "p varx(1,5,17)" {no such vector element \(vector not allocated\)} "p varx(1,5,17) deallocated"
++gdb_test "ptype varx(1,5,17)" {no such vector element \(vector not allocated\)} "ptype varx(1,5,17) deallocated"
++
++gdb_breakpoint [gdb_get_line_number "vary-passed"]
++gdb_continue_to_breakpoint "vary-passed"
++# $1 = (( ( 1, 1, 1, 1, 1, 1) ( 1, 1, 1, 1, 1, 1) --- , 1) ) ( ( 1, 1, ...) ...) ...)
++gdb_test "p vary" "\\$\[0-9\]* = \\(\[()1, .\]*\\)"
++
++gdb_breakpoint [gdb_get_line_number "vary-filled"]
++gdb_continue_to_breakpoint "vary-filled"
++gdb_test "ptype vary" "type = real(\\(kind=4\\)|\\*4) \\(10,10\\)"
++gdb_test "p vary(1, 1)" "\\$\[0-9\]* = 8"
++gdb_test "p vary(2, 2)" "\\$\[0-9\]* = 9"
++gdb_test "p vary(1, 3)" "\\$\[0-9\]* = 10"
++# $1 = (( ( 3, 3, 3, 3, 3, 3) ( 3, 3, 3, 3, 3, 3) --- , 3) ) ( ( 3, 3, ...) ...) ...)
++gdb_test "p varw" "\\$\[0-9\]* = \\(\[()3, .\]*\\)"
++
++gdb_breakpoint [gdb_get_line_number "varw-almostfilled"]
++gdb_continue_to_breakpoint "varw-almostfilled"
++gdb_test "ptype varw" "type = real(\\(kind=4\\)|\\*4) \\(5,4,3\\)"
++gdb_test "p varw(3,1,1)=1" "\\$\[0-9\]* = 1"
++# $1 = (( ( 6, 5, 1, 5, 5, 5) ( 5, 5, 5, 5, 5, 5) --- , 5) ) ( ( 5, 5, ...) ...) ...)
++gdb_test "p varw" "\\$\[0-9\]* = \\( *\\( *\\( *6, *5, *1,\[()5, .\]*\\)" "p varw filled"
++# "up" works with GCC but other Fortran compilers may copy the values into the
++# outer function only on the exit of the inner function.
++# We need both variants as depending on the arch we optionally may still be
++# executing the caller line or not after `finish'.
++gdb_test "finish" ".*(call bar \\(y, x\\)|call foo \\(x, z\\(2:6, 4:7, 6:8\\)\\))"
++gdb_test "p z(2,4,5)" "\\$\[0-9\]* = 3"
++gdb_test "p z(2,4,6)" "\\$\[0-9\]* = 6"
++gdb_test "p z(2,4,7)" "\\$\[0-9\]* = 5"
++gdb_test "p z(4,4,6)" "\\$\[0-9\]* = 1"
++
++gdb_breakpoint [gdb_get_line_number "varz-almostfilled"]
++gdb_continue_to_breakpoint "varz-almostfilled"
++# GCC uses the pointer type here, Intel Fortran Compiler 10.1.008 does not.
++gdb_test "ptype varz" "type = (PTR TO -> \\( )?real(\\(kind=4\\)|\\*4) \\(\\*\\)\\)?"
++# Intel Fortran Compiler 10.1.008 has a bug here - (2:11,7:7)
++# as it produces DW_AT_lower_bound == DW_AT_upper_bound == 7.
++gdb_test "ptype vart" "type = (PTR TO -> \\( )?real(\\(kind=4\\)|\\*4) \\(2:11,7:\\*\\)\\)?"
++gdb_test "p varz" "\\$\[0-9\]* = \\(\\)"
++gdb_test "p vart" "\\$\[0-9\]* = \\(\\)"
++gdb_test "p varz(3)" "\\$\[0-9\]* = 4"
++# maps to foo::vary(1,1)
++gdb_test "p vart(2,7)" "\\$\[0-9\]* = 8"
++# maps to foo::vary(2,2)
++gdb_test "p vart(3,8)" "\\$\[0-9\]* = 9"
++# maps to foo::vary(1,3)
++gdb_test "p vart(2,9)" "\\$\[0-9\]* = 10"
+diff --git a/gdb/testsuite/gdb.fortran/dynamic.f90 b/gdb/testsuite/gdb.fortran/dynamic.f90
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.fortran/dynamic.f90
+@@ -0,0 +1,98 @@
++! Copyright 2007 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 2 of the License, 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; if not, write to the Free Software
++! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++!
++! Ihis file is the Fortran source file for dynamic.exp.
++! Original file written by Jakub Jelinek <jakub@redhat.com>.
++! Modified for the GDB testcase by Jan Kratochvil <jan.kratochvil@redhat.com>.
++
++subroutine baz
++  real, target, allocatable :: varx (:, :, :)
++  real, pointer :: varv (:, :, :)
++  real, target :: varu (1, 2, 3)
++  logical :: l
++  allocate (varx (1:6, 5:15, 17:28))            ! varx-init
++  l = allocated (varx)
++  varx(:, :, :) = 6                             ! varx-allocated
++  varx(1, 5, 17) = 7
++  varx(2, 6, 18) = 8
++  varx(6, 15, 28) = 9
++  varv => varx                                  ! varx-filled
++  l = associated (varv)
++  varv(3, 7, 19) = 10                           ! varv-associated
++  varv => null ()                               ! varv-filled
++  l = associated (varv)
++  deallocate (varx)                             ! varv-deassociated
++  l = allocated (varx)
++  varu(:, :, :) = 10                            ! varx-deallocated
++  allocate (varv (1:6, 5:15, 17:28))
++  l = associated (varv)
++  varv(:, :, :) = 6
++  varv(1, 5, 17) = 7
++  varv(2, 6, 18) = 8
++  varv(6, 15, 28) = 9
++  deallocate (varv)
++  l = associated (varv)
++  varv => varu
++  varv(1, 1, 1) = 6
++  varv(1, 2, 3) = 7
++  l = associated (varv)
++end subroutine baz
++subroutine foo (vary, varw)
++  real :: vary (:, :)
++  real :: varw (:, :, :)
++  vary(:, :) = 4                                ! vary-passed
++  vary(1, 1) = 8
++  vary(2, 2) = 9
++  vary(1, 3) = 10
++  varw(:, :, :) = 5                             ! vary-filled
++  varw(1, 1, 1) = 6
++  varw(2, 2, 2) = 7                             ! varw-almostfilled
++end subroutine foo
++subroutine bar (varz, vart)
++  real :: varz (*)
++  real :: vart (2:11, 7:*)
++  varz(1:3) = 4
++  varz(2) = 5                                   ! varz-almostfilled
++  vart(2,7) = vart(2,7)
++end subroutine bar
++program test
++  interface
++    subroutine foo (vary, varw)
++    real :: vary (:, :)
++    real :: varw (:, :, :)
++    end subroutine
++  end interface
++  interface
++    subroutine bar (varz, vart)
++    real :: varz (*)
++    real :: vart (2:11, 7:*)
++    end subroutine
++  end interface
++  real :: x (10, 10), y (5), z(8, 8, 8)
++  x(:,:) = 1
++  y(:) = 2
++  z(:,:,:) = 3
++  call baz
++  call foo (x, z(2:6, 4:7, 6:8))
++  call bar (y, x)
++  if (x (1, 1) .ne. 8 .or. x (2, 2) .ne. 9 .or. x (1, 2) .ne. 4) call abort
++  if (x (1, 3) .ne. 10) call abort
++  if (z (2, 4, 6) .ne. 6 .or. z (3, 5, 7) .ne. 7 .or. z (2, 4, 7) .ne. 5) call abort
++  if (any (y .ne. (/4, 5, 4, 2, 2/))) call abort
++  call foo (transpose (x), z)
++  if (x (1, 1) .ne. 8 .or. x (2, 2) .ne. 9 .or. x (1, 2) .ne. 4) call abort
++  if (x (3, 1) .ne. 10) call abort
++end
+diff --git a/gdb/testsuite/gdb.fortran/string.exp b/gdb/testsuite/gdb.fortran/string.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.fortran/string.exp
+@@ -0,0 +1,59 @@
++# Copyright 2008 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
++
++# This file was written by Jan Kratochvil <jan.kratochvil@redhat.com>.
++
++# This file is part of the gdb testsuite.  It contains tests for Fortran
++# strings with dynamic length.
++
++set testfile "string"
++set srcfile ${testfile}.f90
++set binfile [standard_output_file ${testfile}]
++
++if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug f90 quiet}] != "" } {
++    untested "Couldn't compile ${srcfile}"
++    return -1
++}
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++gdb_load ${binfile}
++
++if ![runto MAIN__] then {
++    perror "couldn't run to breakpoint MAIN__"
++    continue
++}
++
++gdb_breakpoint [gdb_get_line_number "var-init"]
++gdb_continue_to_breakpoint "var-init"
++gdb_test "ptype c" "type = character(\\(kind=1\\)|\\*1)"
++gdb_test "ptype d" "type = character(\\(kind=8\\)|\\*8)"
++gdb_test "ptype e" "type = character(\\(kind=4\\)|\\*4)"
++gdb_test "ptype f" "type = character(\\(kind=4\\)|\\*4) \\(7,8:10\\)"
++gdb_test "ptype *e" "Attempt to take contents of a non-pointer value."
++gdb_test "ptype *f" "type = character(\\(kind=4\\)|\\*4) \\(7\\)"
++gdb_test "p c" "\\$\[0-9\]* = 'c'"
++gdb_test "p d" "\\$\[0-9\]* = 'd       '"
++gdb_test "p e" "\\$\[0-9\]* = 'g   '"
++gdb_test "p f" "\\$\[0-9\]* = \\(\\( 'h   ', 'h   ', 'h   ', 'h   ', 'h   ', 'h   ', 'h   '\\) \\( 'h   ', 'h   ', 'h   ', 'h   ', 'h   ', 'h   ', 'h   '\\) \\( 'h   ', 'h   ', 'h   ', 'h   ', 'h   ', 'h   ', 'h   '\\) \\)"
++gdb_test "p *e" "Attempt to take contents of a non-pointer value."
++gdb_test "p *f" "Attempt to take contents of a non-pointer value."
++
++gdb_breakpoint [gdb_get_line_number "var-finish"]
++gdb_continue_to_breakpoint "var-finish"
++gdb_test "p e" "\\$\[0-9\]* = 'e   '" "p e re-set"
++gdb_test "p f" "\\$\[0-9\]* = \\(\\( 'f   ', 'f   ', 'f   ', 'f   ', 'f   ', 'f   ', 'f   '\\) \\( 'f2  ', 'f   ', 'f   ', 'f   ', 'f   ', 'f   ', 'f   '\\) \\( 'f   ', 'f   ', 'f   ', 'f   ', 'f   ', 'f   ', 'f   '\\) \\)" "p *f re-set"
+diff --git a/gdb/testsuite/gdb.fortran/string.f90 b/gdb/testsuite/gdb.fortran/string.f90
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.fortran/string.f90
+@@ -0,0 +1,37 @@
++! Copyright 2008 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 2 of the License, 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; if not, write to the Free Software
++! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++!
++! Ihis file is the Fortran source file for dynamic.exp.
++! Original file written by Jakub Jelinek <jakub@redhat.com>.
++! Modified for the GDB testcase by Jan Kratochvil <jan.kratochvil@redhat.com>.
++
++subroutine foo (e, f)
++  character (len=1) :: c
++  character (len=8) :: d
++  character (len=*) :: e
++  character (len=*) :: f (1:7, 8:10)
++  c = 'c'
++  d = 'd'
++  e = 'e'                                       ! var-init
++  f = 'f'
++  f(1,9) = 'f2'
++  c = 'c'                                       ! var-finish
++end subroutine foo
++  character (len=4) :: g, h (1:7, 8:10)
++  g = 'g'
++  h = 'h'
++  call foo (g, h)
++end
+diff --git a/gdb/testsuite/gdb.fortran/subrange.exp b/gdb/testsuite/gdb.fortran/subrange.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.fortran/subrange.exp
+@@ -0,0 +1,72 @@
++# Copyright 2011 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++if { [skip_fortran_tests] } { return -1 }
++
++set testfile "subrange"
++set srcfile ${testfile}.f90
++if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {debug f90}] } {
++    return -1
++}
++
++if ![runto MAIN__] {
++    perror "Couldn't run to MAIN__"
++    continue
++}
++
++# Depending on the compiler version being used, the name of the 4-byte integer
++# and real types can be printed differently.  For instance, gfortran-4.1 uses
++# "int4" whereas gfortran-4.3 uses "int(kind=4)".
++set int4 "(int4|integer\\(kind=4\\))"
++
++gdb_breakpoint [gdb_get_line_number "break-static"]
++gdb_continue_to_breakpoint "break-static" ".*break-static.*"
++
++foreach var {a alloc ptr} {
++    global pf_prefix
++    set old_prefix $pf_prefix
++    lappend pf_prefix "$var:"
++
++    setup_kfail "*-*-*" "vlaregression/9999"
++    gdb_test "p $var (2, 2:3)" { = \(22, 32\)}
++    setup_kfail "*-*-*" "vlaregression/9999"
++    gdb_test "p $var (2:3, 3)" { = \(32, 33\)}
++    setup_kfail "*-*-*" "vlaregression/9999"
++    gdb_test "p $var (1, 2:)" { = \(21, 31\)}
++    setup_kfail "*-*-*" "vlaregression/9999"
++    gdb_test "p $var (2, :2)" { = \(12, 22\)}
++    setup_kfail "*-*-*" "vlaregression/9999"
++    gdb_test "p $var (3, 2:2)" { = \(23\)}
++    setup_kfail "*-*-*" "vlaregression/9999"
++    gdb_test "ptype $var (3, 2:2)" " = $int4 \\(2:2\\)"
++    setup_kfail "*-*-*" "vlaregression/9999"
++    gdb_test "p $var (4, :)" { = \(14, 24, 34\)}
++    setup_kfail "*-*-*" "vlaregression/9999"
++    gdb_test "p $var (:, :)" { = \(\( *11, 12, 13, 14\) \( *21, 22, 23, 24\) \( *31, 32, 33, 34\) *\)}
++    setup_kfail "*-*-*" "vlaregression/9999"
++    gdb_test "ptype $var (:, :)" " = $int4 \\(4,3\\)"
++    setup_kfail "*-*-*" "vlaregression/9999"
++    gdb_test "p $var (:)" "Wrong number of subscripts"
++    setup_kfail "*-*-*" "vlaregression/9999"
++    gdb_test "p $var (:, :, :)" "Wrong number of subscripts"
++
++    set pf_prefix $old_prefix
++}
++
++gdb_test_no_output {set $a=a}
++delete_breakpoints
++gdb_unload
++setup_kfail "*-*-*" "vlaregression/9999"
++gdb_test {p $a (3, 2:2)} { = \(23\)}
+diff --git a/gdb/testsuite/gdb.fortran/subrange.f90 b/gdb/testsuite/gdb.fortran/subrange.f90
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.fortran/subrange.f90
+@@ -0,0 +1,28 @@
++! Copyright 2011 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++program test
++  integer, target :: a (4, 3)
++  integer, allocatable :: alloc (:, :)
++  integer, pointer :: ptr (:, :)
++  do 1 i = 1, 4
++  do 1 j = 1, 3
++    a (i, j) = j * 10 + i
++1 continue
++  allocate (alloc (4, 3))
++  alloc = a
++  ptr => a
++  write (*,*) a                 ! break-static
++end
+diff --git a/gdb/testsuite/gdb.mi/mi2-var-stale-type.c b/gdb/testsuite/gdb.mi/mi2-var-stale-type.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.mi/mi2-var-stale-type.c
+@@ -0,0 +1,26 @@
++/* Copyright 2011 Free Software Foundation, Inc.
++
++   This file is part of GDB.
++
++   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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++int
++main (int argc, char **argv)
++{
++  char vla[argc];
++
++  vla[0] = 0;	/* break-here */
++
++  return 0;
++}
+diff --git a/gdb/testsuite/gdb.mi/mi2-var-stale-type.exp b/gdb/testsuite/gdb.mi/mi2-var-stale-type.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.mi/mi2-var-stale-type.exp
+@@ -0,0 +1,57 @@
++# Copyright 2011 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++load_lib mi-support.exp
++set MIFLAGS "-i=mi2"
++
++gdb_exit
++if [mi_gdb_start] {
++    continue
++}
++
++set testfile "mi2-var-stale-type"
++set srcfile ${testfile}.c
++set binfile [standard_output_file ${testfile}]
++if {[build_executable ${testfile}.exp $testfile $srcfile] == -1} {
++    return -1
++}
++
++mi_delete_breakpoints
++mi_gdb_reinitialize_dir $srcdir/$subdir
++mi_gdb_load ${binfile}
++
++mi_gdb_test {-interpreter-exec console "maintenance set internal-error quit yes"} \
++  {\^done} \
++  "maintenance set internal-error quit yes"
++
++mi_gdb_test {-interpreter-exec console "maintenance set internal-error corefile yes"} \
++  {\^done} \
++  "maintenance set internal-error corefile yes"
++
++set line [gdb_get_line_number "break-here"]
++set func "main"
++
++mi_gdb_test "-break-insert -t $srcfile:$line" \
++  "\\^done,bkpt=\{number=\"\[0-9\]+\",type=\"breakpoint\",disp=\"del\",enabled=\"y\",addr=\"$hex\",func=\"$func\(\\\(.*\\\)\)?\",file=\".*\",fullname=\".*\",line=\"$line\",\[^\r\n\]*,original-location=\".*\"\}" \
++  "breakpoint at $func"
++
++if { [mi_run_cmd] < 0 } {
++    return -1
++}
++mi_expect_stop "breakpoint-hit" $func ".*" ".*" "\[0-9\]+" { "" "disp=\"del\"" } "stop after initializing vla"
++
++mi_create_varobj "vla" "vla" "create local variable vla"
++
++mi_gdb_test "-var-update *" "\\^done,changelist=.*" "-var-update *"
+diff --git a/gdb/testsuite/gdb.opt/array-from-register-func.c b/gdb/testsuite/gdb.opt/array-from-register-func.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.opt/array-from-register-func.c
+@@ -0,0 +1,22 @@
++/* This file is part of GDB, the GNU debugger.
++
++   Copyright 2009 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++int
++func (int *arr)
++{
++  return arr[0];
++}
+diff --git a/gdb/testsuite/gdb.opt/array-from-register.c b/gdb/testsuite/gdb.opt/array-from-register.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.opt/array-from-register.c
+@@ -0,0 +1,28 @@
++/* This file is part of GDB, the GNU debugger.
++
++   Copyright 2009 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++extern int func (int *arr);
++
++int
++main (void)
++{
++  int arr[] = { 42 };
++
++  func (arr);
++
++  return 0;
++}
+diff --git a/gdb/testsuite/gdb.opt/array-from-register.exp b/gdb/testsuite/gdb.opt/array-from-register.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.opt/array-from-register.exp
+@@ -0,0 +1,33 @@
++# Copyright 2009 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++#
++# This file is part of the gdb testsuite.
++
++if { [prepare_for_testing array-from-register.exp "array-from-register"      \
++			  {array-from-register.c array-from-register-func.c} \
++			  {debug optimize=-O2}] } {
++    return -1
++}
++
++if ![runto func] then {
++    return -1
++}
++
++gdb_test "p arr" "\\$\[0-9\]+ = \\(int \\*\\) *0x\[0-9a-f\]+"
++
++# Seen regression:
++# Address requested for identifier "arr" which is in register $rdi
++gdb_test "p arr\[0\]" "\\$\[0-9\]+ = 42"
+diff --git a/gdb/testsuite/gdb.opt/fortran-string.exp b/gdb/testsuite/gdb.opt/fortran-string.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.opt/fortran-string.exp
+@@ -0,0 +1,39 @@
++# Copyright 2009 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
++
++# This file was written by Jan Kratochvil <jan.kratochvil@redhat.com>.
++
++# Test GDB can cope with Fortran strings having their length present in a CPU
++# register.  With -O0 the string length is passed on the stack.  To make this
++# test meaningful the follow assertion should pass.  It is not being checked
++# here as the "_s" symbol is compiler dependent:
++#   (gdb) info address _s
++#   Symbol "_s" is a variable in register XX.
++
++set test fortran-string
++set srcfile ${test}.f90
++if { [prepare_for_testing ${test}.exp ${test} ${srcfile} {debug f90 additional_flags=-O2}] } {
++    return -1
++}
++
++if ![runto $srcfile:[gdb_get_line_number "s = s"]] then {
++    perror "couldn't run to breakpoint MAIN__"
++    continue
++}
++
++gdb_test "frame" ".*s='foo'.*"
++gdb_test "ptype s" "type = character\\*3"
++gdb_test "p s" "\\$\[0-9\]* = 'foo'"
+diff --git a/gdb/testsuite/gdb.opt/fortran-string.f90 b/gdb/testsuite/gdb.opt/fortran-string.f90
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.opt/fortran-string.f90
+@@ -0,0 +1,28 @@
++! Copyright 2009 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 2 of the License, 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; if not, write to the Free Software
++! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++!
++! Ihis file is the Fortran source file for dynamic.exp.
++! Original file written by Jakub Jelinek <jakub@redhat.com>.
++! Modified for the GDB testcase by Jan Kratochvil <jan.kratochvil@redhat.com>.
++
++  subroutine f(s)
++  character*(*) s
++  s = s
++  end
++
++  program main
++  call f ('foo')
++  end
+diff --git a/gdb/testsuite/gdb.pascal/arrays.exp b/gdb/testsuite/gdb.pascal/arrays.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.pascal/arrays.exp
+@@ -0,0 +1,104 @@
++# Copyright 2008, 2009 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++if $tracelevel then {
++    strace $tracelevel
++}
++
++load_lib "pascal.exp"
++
++set testfile "arrays"
++set srcfile ${testfile}.pas
++set binfile [standard_output_file ${testfile}$EXEEXT]
++
++# These tests only work with fpc, using the -gw3 compile-option
++pascal_init
++if { $pascal_compiler_is_fpc != 1 } {
++  return -1
++}
++
++# Detect if the fpc version is below 2.3.0
++set fpc_generates_dwarf_for_dynamic_arrays 1
++if { ($fpcversion_major < 2) || ( ($fpcversion_major == 2) && ($fpcversion_minor < 3))}  {
++  set fpc_generates_dwarf_for_dynamic_arrays 0
++}
++
++
++if {[gdb_compile_pascal "-gw3 ${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug ]] != "" } {
++  return -1
++}
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++gdb_load ${binfile}
++set bp_location1 [gdb_get_line_number "set breakpoint 1 here"]
++set bp_location2 [gdb_get_line_number "set breakpoint 2 here"]
++
++
++if { [gdb_breakpoint ${srcfile}:${bp_location1}] } {
++    pass "setting breakpoint 1"
++}
++if { [gdb_breakpoint ${srcfile}:${bp_location2}] } {
++    pass "setting breakpoint 2"
++}
++
++# Verify that "start" lands inside the right procedure.
++if { [gdb_start_cmd] < 0 } {
++    untested start
++    return -1
++}
++
++gdb_test "" ".* at .*${srcfile}.*" "start"
++
++gdb_test "cont" "Breakpoint .*:${bp_location1}.*" "Going to first breakpoint"
++
++gdb_test "print StatArrInt" ".* = \\{50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61\\}" "Print static array of integer type"
++gdb_test "print StatArrInt_" ".* = \\{50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61\\}" "Print static array of integer"
++
++gdb_test "cont" "Breakpoint .*:${bp_location2}.*" "Going to second breakpoint"
++
++gdb_test "print StatArrChar" ".* = 'abcdefghijkl'" "Print static array of char"
++gdb_test "print Stat2dArrInt" ".* = \\{\\{0, 1, 2, 3, 4\\}, \\{1, 2, 3, 4, 5\\}, \\{2, 3, 4, 5, 6\\}, \\{3, 4, 5, 6, 7\\}, \\{4, 5, 6, 7, 8\\}, \\{5, 6, 7, 8, 9\\}, \\{6, 7, 8, 9, 10\\}, \\{7, 8, 9, 10, 11\\}, \\{8, 9, 10, 11, 12\\}, \\{9, 10, 11, 12, 13\\}, \\{10, 11, 12, 13, 14\\}, \\{11, 12, 13, 14, 15\\}\\}" "Print static 2-dimensional array of integer"
++
++if { $fpc_generates_dwarf_for_dynamic_arrays == 0} {
++  setup_xfail "*-*-*"
++}
++gdb_test "print DynArrInt" ".* = \\{50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62\\}" "Print dynamic array of integer type"
++if { $fpc_generates_dwarf_for_dynamic_arrays == 0} {
++  setup_xfail "*-*-*"
++}
++gdb_test "print DynArrInt_" ".* = \\{50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62\\}" "Print dynamic array of integer"
++
++if { $fpc_generates_dwarf_for_dynamic_arrays == 0} {
++  setup_xfail "*-*-*"
++}
++gdb_test "print s" ".* = 'test'#0'string'" "Print string containing null-char"
++
++if { $fpc_generates_dwarf_for_dynamic_arrays == 0} {
++  setup_xfail "*-*-*"
++}
++gdb_test "print DynArrStr" ".* = \\{'dstr0', 'dstr1', 'dstr2', 'dstr3', 'dstr4', 'dstr5', 'dstr6', 'dstr7', 'dstr8', 'dstr9', 'dstr10', 'dstr11', 'dstr12'\\}" "Print dynamic array of string"
++
++if { $fpc_generates_dwarf_for_dynamic_arrays == 0} {
++  setup_xfail "*-*-*"
++}
++gdb_test "print StatArrStr" ".* = \\{'str0', 'str1', 'str2', 'str3', 'str4', 'str5', 'str6', 'str7', 'str8', 'str9', 'str10', 'str11', 'str12'\\}" "Print static array of string"
++
++if { $fpc_generates_dwarf_for_dynamic_arrays == 0} {
++  setup_xfail "*-*-*"
++}
++gdb_test "print DynArrChar" ".* = 'abcdefghijklm'" "Print dynamic array of char"
++
+diff --git a/gdb/testsuite/gdb.pascal/arrays.pas b/gdb/testsuite/gdb.pascal/arrays.pas
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.pascal/arrays.pas
+@@ -0,0 +1,82 @@
++{
++ Copyright 2008, 2009 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++}
++
++program arrays;
++
++{$mode objfpc}{$h+}
++
++uses sysutils;
++
++type TStatArrInt= array[0..11] of integer;
++     TDynArrInt= array of integer;
++     TStatArrStr= array[0..12] of string;
++     TDynArrStr= array of string;
++     TDynArrChar = array of char;
++     TStatArrChar = array [0..11] of char;
++
++     TStat2dArrInt = array[0..11,0..4] of integer;
++
++var StatArrInt: TStatArrInt;
++    StatArrInt_: Array[0..11] of integer;
++    DynArrInt:  TDynArrInt;
++    DynArrInt_: Array of integer;
++    StatArrStr: TStatArrStr;
++    DynArrStr: TDynArrStr;
++    StatArrChar: TStatArrChar;
++    DynArrChar: TDynArrChar;
++
++    Stat2dArrInt: TStat2dArrInt;
++
++    s: string;
++	
++    i,j : integer;
++
++begin
++  for i := 0 to 11 do
++    begin
++    StatArrInt[i]:= i+50;
++    StatArrInt_[i]:= i+50;
++    StatArrChar[i]:= chr(ord('a')+i);
++    for j := 0 to 4 do
++      Stat2dArrInt[i,j]:=i+j;
++    end;
++  writeln(StatArrInt_[0]);
++  writeln(StatArrInt[0]); { set breakpoint 1 here }
++  writeln(StatArrChar[0]);
++  writeln(Stat2dArrInt[0,0]);
++
++  setlength(DynArrInt,13);
++  setlength(DynArrInt_,13);
++  setlength(DynArrStr,13);
++  setlength(DynArrChar,13);
++  for i := 0 to 12 do
++    begin
++    DynArrInt[i]:= i+50;
++    DynArrInt_[i]:= i+50;
++    DynArrChar[i]:= chr(ord('a')+i);
++    StatArrStr[i]:='str'+inttostr(i);
++    DynArrStr[i]:='dstr'+inttostr(i);
++    end;
++  writeln(DynArrInt_[1]);
++  writeln(DynArrInt[1]); 
++  writeln(DynArrStr[1]); 
++  writeln(StatArrStr[1]);
++  writeln(DynArrChar[1]);
++
++  s := 'test'#0'string';
++  writeln(s); { set breakpoint 2 here }
++end.
+diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
+--- a/gdb/testsuite/lib/gdb.exp
++++ b/gdb/testsuite/lib/gdb.exp
+@@ -170,6 +170,11 @@ proc gdb_unload {} {
+ 	    send_gdb "y\n"
+ 	    exp_continue
+ 	}
++	-re "A program is being debugged already..*Are you sure you want to change the file.*y or n. $"\
++	    { send_gdb "y\n"
++		verbose "\t\tUnloading symbols for program being debugged"
++	    exp_continue
++	}
+ 	-re "Discard symbol table from .*y or n.*$" {
+ 	    send_gdb "y\n"
+ 	    exp_continue
+diff --git a/gdb/testsuite/lib/pascal.exp b/gdb/testsuite/lib/pascal.exp
+--- a/gdb/testsuite/lib/pascal.exp
++++ b/gdb/testsuite/lib/pascal.exp
+@@ -37,6 +37,9 @@ proc pascal_init {} {
+     global pascal_compiler_is_fpc
+     global gpc_compiler
+     global fpc_compiler
++    global fpcversion_major
++    global fpcversion_minor
++    global fpcversion_release
+     global env
+  
+     if { $pascal_init_done == 1 } {
+@@ -64,6 +67,20 @@ proc pascal_init {} {
+ 	    set pascal_compiler_is_fpc 1
+ 	    verbose -log "Free Pascal compiler found"
+ 	}
++
++	# Detect the fpc-version
++	if { $pascal_compiler_is_fpc == 1 } {
++	    set fpcversion_major 1
++	    set fpcversion_minor 0
++	    set fpcversion_release 0
++	    set fpcversion [ remote_exec host $fpc_compiler "-iV" ] 
++	    if [regexp {.*([0-9]+)\.([0-9]+)\.([0-9]+).?} $fpcversion] {
++              regsub {.*([0-9]+)\.([0-9]+)\.([0-9]+).?\n?.?} $fpcversion {\1} fpcversion_major
++              regsub {.*([0-9]+)\.([0-9]+)\.([0-9]+).?\n?.?} $fpcversion {\2} fpcversion_minor
++              regsub {.*([0-9]+)\.([0-9]+)\.([0-9]+).?\n?.?} $fpcversion {\3} fpcversion_release
++	    }
++            verbose -log "Freepascal version: $fpcversion_major.$fpcversion_minor.$fpcversion_release"
++	}
+     }
+     set pascal_init_done 1
+ }   
diff --git a/SOURCES/gdb-archer.patch b/SOURCES/gdb-archer.patch
new file mode 100644
index 0000000..dcb989c
--- /dev/null
+++ b/SOURCES/gdb-archer.patch
@@ -0,0 +1,600 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-archer.patch
+
+;; Python patches of: http://sourceware.org/gdb/wiki/ProjectArcher
+;;=push
+
+http://sourceware.org/gdb/wiki/ProjectArcher
+http://sourceware.org/gdb/wiki/ArcherBranchManagement
+
+GIT snapshot:
+commit 718a1618b2f691a7f407213bb50f100ac59f91c3
+
+tromey/python
+
+diff --git a/gdb/Makefile.in b/gdb/Makefile.in
+--- a/gdb/Makefile.in
++++ b/gdb/Makefile.in
+@@ -2112,6 +2112,12 @@ stamp-h: $(srcdir)/config.in config.status
+ 	  CONFIG_LINKS= \
+ 	  $(SHELL) config.status
+ 
++.gdbinit: $(srcdir)/gdbinit.in config.status
++	CONFIG_FILES=".gdbinit:gdbinit.in" \
++	  CONFIG_COMMANDS= \
++	  CONFIG_HEADERS= \
++	  $(SHELL) config.status
++
+ config.status: $(srcdir)/configure configure.nat configure.tgt configure.host ../bfd/development.sh
+ 	$(SHELL) config.status --recheck
+ 
+diff --git a/gdb/data-directory/Makefile.in b/gdb/data-directory/Makefile.in
+--- a/gdb/data-directory/Makefile.in
++++ b/gdb/data-directory/Makefile.in
+@@ -80,6 +80,7 @@ PYTHON_FILE_LIST = \
+ 	gdb/unwinder.py \
+ 	gdb/xmethod.py \
+ 	gdb/command/__init__.py \
++	gdb/command/ignore_errors.py \
+ 	gdb/command/explore.py \
+ 	gdb/command/backtrace.py \
+ 	gdb/command/frame_filters.py \
+@@ -92,6 +93,8 @@ PYTHON_FILE_LIST = \
+ 	gdb/function/as_string.py \
+ 	gdb/function/caller_is.py \
+ 	gdb/function/strfns.py \
++	gdb/function/caller_is.py \
++	gdb/function/in_scope.py \
+ 	gdb/printer/__init__.py \
+ 	gdb/printer/bound_registers.py
+ 
+diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
+--- a/gdb/doc/gdb.texinfo
++++ b/gdb/doc/gdb.texinfo
+@@ -1245,6 +1245,16 @@ for remote debugging.
+ Run using @var{device} for your program's standard input and output.
+ @c FIXME: kingdon thinks there is more to -tty.  Investigate.
+ 
++@item -P
++@cindex @code{-P}
++@itemx --python
++@cindex @code{--python}
++Change interpretation of command line so that the argument immediately
++following this switch is taken to be the name of a Python script file.
++This option stops option processing; subsequent options are passed to
++Python as @code{sys.argv}.  This option is only available if Python
++scripting support was enabled when @value{GDBN} was configured.
++
+ @c resolve the situation of these eventually
+ @item -tui
+ @cindex @code{--tui}
+diff --git a/gdb/doc/python.texi b/gdb/doc/python.texi
+--- a/gdb/doc/python.texi
++++ b/gdb/doc/python.texi
+@@ -88,8 +88,6 @@ containing @code{end}.  For example:
+ 
+ @smallexample
+ (@value{GDBP}) python
+-Type python script
+-End with a line saying just "end".
+ >print 23
+ >end
+ 23
+diff --git a/gdb/gdb-gdb.gdb.in b/gdb/gdb-gdb.gdb.in
+--- a/gdb/gdb-gdb.gdb.in
++++ b/gdb/gdb-gdb.gdb.in
+@@ -1,5 +1,15 @@
+ echo Setting up the environment for debugging gdb.\n
+ 
++# Set up the Python library and "require" command.
++python
++from os.path import abspath
++gdb.datadir = abspath ('@srcdir@/python/lib')
++gdb.pythonlibdir = gdb.datadir
++gdb.__path__ = [gdb.datadir + '/gdb']
++sys.path.insert(0, gdb.datadir)
++end
++source @srcdir@/python/lib/gdb/__init__.py
++
+ if !$gdb_init_done
+   set variable $gdb_init_done = 1
+ 
+diff --git a/gdb/main.c b/gdb/main.c
+--- a/gdb/main.c
++++ b/gdb/main.c
+@@ -33,6 +33,7 @@
+ 
+ #include "interps.h"
+ #include "main.h"
++#include "python/python.h"
+ #include "source.h"
+ #include "cli/cli-cmds.h"
+ #include "objfiles.h"
+@@ -479,7 +480,7 @@ exec_or_core_file_attach (const char *filename, int from_tty)
+ }
+ 
+ static void
+-captured_main_1 (struct captured_main_args *context)
++captured_main_1 (struct captured_main_args *context, int &python_script)
+ {
+   int argc = context->argc;
+   char **argv = context->argv;
+@@ -695,10 +696,14 @@ captured_main_1 (struct captured_main_args *context)
+       {"args", no_argument, &set_args, 1},
+       {"l", required_argument, 0, 'l'},
+       {"return-child-result", no_argument, &return_child_result, 1},
++#if HAVE_PYTHON
++      {"python", no_argument, 0, 'P'},
++      {"P", no_argument, 0, 'P'},
++#endif
+       {0, no_argument, 0, 0}
+     };
+ 
+-    while (1)
++    while (!python_script)
+       {
+ 	int option_index;
+ 
+@@ -716,6 +721,9 @@ captured_main_1 (struct captured_main_args *context)
+ 	  case 0:
+ 	    /* Long option that just sets a flag.  */
+ 	    break;
++	  case 'P':
++	    python_script = 1;
++	    break;
+ 	  case OPT_SE:
+ 	    symarg = optarg;
+ 	    execarg = optarg;
+@@ -890,7 +898,31 @@ captured_main_1 (struct captured_main_args *context)
+ 
+   /* Now that gdb_init has created the initial inferior, we're in
+      position to set args for that inferior.  */
+-  if (set_args)
++  if (python_script)
++    {
++      /* The first argument is a python script to evaluate, and
++	 subsequent arguments are passed to the script for
++	 processing there.  */
++      if (optind >= argc)
++	{
++	  fprintf_unfiltered (gdb_stderr,
++			      _("%s: Python script file name required\n"),
++			      argv[0]);
++	  exit (1);
++	}
++
++      /* FIXME: should handle inferior I/O intelligently here.
++	 E.g., should be possible to run gdb in pipeline and have
++	 Python (and gdb) output go to stderr or file; and if a
++	 prompt is needed, open the tty.  */
++      quiet = 1;
++      /* FIXME: should read .gdbinit if, and only if, a prompt is
++	 requested by the script.  Though... maybe this is not
++	 ideal?  */
++      /* FIXME: likewise, reading in history.  */
++      inhibit_gdbinit = 1;
++    }
++  else if (set_args)
+     {
+       /* The remaining options are the command-line options for the
+ 	 inferior.  The first one is the sym/exec file, and the rest
+@@ -1180,7 +1212,8 @@ captured_main_1 (struct captured_main_args *context)
+ 
+   /* Read in the old history after all the command files have been
+      read.  */
+-  init_history ();
++  if (!python_script)
++    init_history ();
+ 
+   if (batch_flag)
+     {
+@@ -1193,24 +1226,37 @@ static void
+ captured_main (void *data)
+ {
+   struct captured_main_args *context = (struct captured_main_args *) data;
++  int python_script = 0;
+ 
+-  captured_main_1 (context);
++  captured_main_1 (context, python_script);
+ 
+-  /* NOTE: cagney/1999-11-07: There is probably no reason for not
+-     moving this loop and the code found in captured_command_loop()
+-     into the command_loop() proper.  The main thing holding back that
+-     change - SET_TOP_LEVEL() - has been eliminated.  */
+-  while (1)
++#if HAVE_PYTHON
++  if (python_script)
+     {
+-      TRY
+-	{
+-	  captured_command_loop ();
+-	}
+-      CATCH (ex, RETURN_MASK_ALL)
++      extern int pagination_enabled;
++      pagination_enabled = 0;
++      run_python_script (context->argc - optind, &context->argv[optind]);
++      return;
++    }
++  else
++#endif
++    {
++      /* NOTE: cagney/1999-11-07: There is probably no reason for not
++	 moving this loop and the code found in captured_command_loop()
++	 into the command_loop() proper.  The main thing holding back that
++	 change - SET_TOP_LEVEL() - has been eliminated. */
++      while (1)
+ 	{
+-	  exception_print (gdb_stderr, ex);
++	  TRY
++	    {
++	      captured_command_loop ();
++	    }
++	  CATCH (ex, RETURN_MASK_ALL)
++	    {
++	      exception_print (gdb_stderr, ex);
++	    }
++	  END_CATCH
+ 	}
+-      END_CATCH
+     }
+   /* No exit -- exit is through quit_command.  */
+ }
+@@ -1253,6 +1299,12 @@ print_gdb_help (struct ui_file *stream)
+   fputs_unfiltered (_("\
+ This is the GNU debugger.  Usage:\n\n\
+     gdb [options] [executable-file [core-file or process-id]]\n\
++    gdb [options] --args executable-file [inferior-arguments ...]\n"), stream);
++#if HAVE_PYTHON
++  fputs_unfiltered (_("\
++    gdb [options] [--python|-P] script-file [script-arguments ...]\n"), stream);
++#endif
++  fputs_unfiltered (_("\n\
+     gdb [options] --args executable-file [inferior-arguments ...]\n\n\
+ "), stream);
+   fputs_unfiltered (_("\
+@@ -1298,6 +1350,13 @@ Output and user interface control:\n\n\
+ #endif
+   fputs_unfiltered (_("\
+   --dbx              DBX compatibility mode.\n\
++"), stream);
++#if HAVE_PYTHON
++  fputs_unfiltered (_("\
++  --python, -P       Following argument is Python script file; remaining\n\
++                     arguments are passed to script.\n"), stream);
++#endif
++  fputs_unfiltered (_("\
+   -q, --quiet, --silent\n\
+                      Do not print version number on startup.\n\n\
+ "), stream);
+diff --git a/gdb/python/lib/gdb/command/ignore_errors.py b/gdb/python/lib/gdb/command/ignore_errors.py
+new file mode 100644
+--- /dev/null
++++ b/gdb/python/lib/gdb/command/ignore_errors.py
+@@ -0,0 +1,37 @@
++# Ignore errors in user commands.
++
++# Copyright (C) 2008 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++import gdb
++
++class IgnoreErrorsCommand (gdb.Command):
++    """Execute a single command, ignoring all errors.
++Only one-line commands are supported.
++This is primarily useful in scripts."""
++
++    def __init__ (self):
++        super (IgnoreErrorsCommand, self).__init__ ("ignore-errors",
++                                                    gdb.COMMAND_OBSCURE,
++                                                    # FIXME...
++                                                    gdb.COMPLETE_COMMAND)
++
++    def invoke (self, arg, from_tty):
++        try:
++            gdb.execute (arg, from_tty)
++        except:
++            pass
++
++IgnoreErrorsCommand ()
+diff --git a/gdb/python/lib/gdb/function/in_scope.py b/gdb/python/lib/gdb/function/in_scope.py
+new file mode 100644
+--- /dev/null
++++ b/gdb/python/lib/gdb/function/in_scope.py
+@@ -0,0 +1,47 @@
++# In-scope function.
++
++# Copyright (C) 2008 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++import gdb
++
++class InScope (gdb.Function):
++    """Return True if all the given variables or macros are in scope.
++Takes one argument for each variable name to be checked."""
++
++    def __init__ (self):
++        super (InScope, self).__init__ ("in_scope")
++
++    def invoke (self, *vars):
++        if len (vars) == 0:
++            raise (TypeError, "in_scope takes at least one argument")
++
++        # gdb.Value isn't hashable so it can't be put in a map.
++        # Convert to string first.
++        wanted = set (map (lambda x: x.string (), vars))
++        found = set ()
++        block = gdb.selected_frame ().block ()
++        while block:
++            for sym in block:
++                if (sym.is_argument or sym.is_constant
++                      or sym.is_function or sym.is_variable):
++                    if sym.name in wanted:
++                        found.add (sym.name)
++
++            block = block.superblock
++
++        return wanted == found
++
++InScope ()
+diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h
+--- a/gdb/python/python-internal.h
++++ b/gdb/python/python-internal.h
+@@ -644,6 +644,9 @@ class gdbpy_enter_varobj : public gdbpy_enter
+ 
+ };
+ 
++struct cleanup *ensure_python_env (struct gdbarch *gdbarch,
++				   const struct language_defn *language);
++
+ extern struct gdbarch *python_gdbarch;
+ extern const struct language_defn *python_language;
+ 
+diff --git a/gdb/python/python.c b/gdb/python/python.c
+--- a/gdb/python/python.c
++++ b/gdb/python/python.c
+@@ -95,6 +95,8 @@ const struct extension_language_defn extension_language_python =
+ #include "linespec.h"
+ #include "source.h"
+ #include "version.h"
++#include "inferior.h"
++#include "gdbthread.h"
+ #include "target.h"
+ #include "gdbthread.h"
+ #include "interps.h"
+@@ -237,6 +239,29 @@ gdbpy_enter::~gdbpy_enter ()
+   restore_active_ext_lang (m_previous_active);
+ }
+ 
++static void
++restore_python_env (void *p)
++{
++  gdbpy_enter *env = (gdbpy_enter *) p;
++
++  delete env;
++}
++
++/* Called before entering the Python interpreter to install the
++   current language and architecture to be used for Python values.
++   Also set the active extension language for GDB so that SIGINT's
++   are directed our way, and if necessary install the right SIGINT
++   handler.  */
++
++struct cleanup *
++ensure_python_env (struct gdbarch *gdbarch,
++                   const struct language_defn *language)
++{
++  gdbpy_enter *env = new gdbpy_enter (gdbarch, language);
++
++  return make_cleanup (restore_python_env, env);
++}
++
+ /* Set the quit flag.  */
+ 
+ static void
+@@ -1367,6 +1392,92 @@ gdbpy_print_stack (void)
+ 
+ /* Return the current Progspace.
+    There always is one.  */
++/* True if 'gdb -P' was used, false otherwise.  */
++static int running_python_script;
++
++/* True if we are currently in a call to 'gdb.cli', false otherwise.  */
++static int in_cli;
++
++/* Enter the command loop.  */
++
++static PyObject *
++gdbpy_cli (PyObject *unused1, PyObject *unused2)
++{
++  if (! running_python_script || in_cli)
++    return PyErr_Format (PyExc_RuntimeError, "cannot invoke CLI recursively");
++  
++  if (current_uiout->is_mi_like_p ())
++    return PyErr_Format (PyExc_RuntimeError, _("Cannot invoke CLI from MI."));
++
++  in_cli = 1;
++  /* See captured_command_loop.  */
++
++  /* Give the interpreter a chance to print a prompt.  */
++  interp_pre_command_loop (top_level_interpreter ());
++
++  /* Now it's time to start the event loop.  */
++  start_event_loop ();
++
++  in_cli = 0;
++
++  Py_RETURN_NONE;
++}
++
++/* Set up the Python argument vector and evaluate a script.  This is
++   used to implement 'gdb -P'.  */
++
++void
++run_python_script (int argc, char **argv)
++{
++  FILE *input;
++
++  /* We never free this, since we plan to exit at the end.  */
++  ensure_python_env (get_current_arch (), current_language);
++
++  running_python_script = 1;
++
++#if PYTHON_ABI_VERSION < 3
++  PySys_SetArgv (argc - 1, argv + 1);
++#else
++  {
++    wchar_t **wargv = (wchar_t **) alloca (sizeof (*wargv) * (argc + 1));
++    int i;
++
++    for (i = 1; i < argc; i++)
++      {
++	size_t len = mbstowcs (NULL, argv[i], 0);
++	/* Python-related GDB sources are built with -DNDEBUG
++	   https://sourceware.org/bugzilla/show_bug.cgi?id=20445 */
++	size_t len2 ATTRIBUTE_UNUSED;
++
++	if (len == (size_t) -1)
++	  {
++	    fprintf (stderr, "Invalid multibyte argument #%d \"%s\"\n",
++		     i, argv[i]);
++	    exit (1);
++	  }
++	wargv[i] = (wchar_t *) alloca (sizeof (**wargv) * (len + 1));
++	len2 = mbstowcs (wargv[i], argv[i], len + 1);
++	assert (len2 == len);
++      }
++    wargv[argc] = NULL;
++    PySys_SetArgv (argc - 1, wargv + 1);
++  }
++#endif
++
++  input = fopen (argv[0], "r");
++  if (! input)
++    {
++      fprintf (stderr, "could not open %s: %s\n", argv[0], strerror (errno));
++      exit (1);
++    }
++  PyRun_SimpleFile (input, argv[0]);
++  fclose (input);
++  exit (0);
++}
++
++
++
+ 
+ static PyObject *
+ gdbpy_get_current_progspace (PyObject *unused1, PyObject *unused2)
+@@ -2057,6 +2168,8 @@ PyMethodDef python_GdbMethods[] =
+ Evaluate command, a string, as a gdb CLI command.  Optionally returns\n\
+ a Python String containing the output of the command if to_string is\n\
+ set to True." },
++  { "cli", gdbpy_cli, METH_NOARGS,
++    "Enter the gdb CLI" },
+   { "parameter", gdbpy_parameter, METH_VARARGS,
+     "Return a gdb parameter's value" },
+ 
+diff --git a/gdb/python/python.h b/gdb/python/python.h
+--- a/gdb/python/python.h
++++ b/gdb/python/python.h
+@@ -25,4 +25,6 @@
+ /* This is all that python exports to gdb.  */
+ extern const struct extension_language_defn extension_language_python;
+ 
++extern void run_python_script (int argc, char **argv);
++
+ #endif /* GDB_PYTHON_H */
+diff --git a/gdb/testsuite/gdb.python/py-frame.exp b/gdb/testsuite/gdb.python/py-frame.exp
+--- a/gdb/testsuite/gdb.python/py-frame.exp
++++ b/gdb/testsuite/gdb.python/py-frame.exp
+@@ -95,6 +95,8 @@ gdb_test "python print ('result = %s' % f0.read_var ('a'))" " = 1" "test Frame.r
+ 
+ gdb_test "python print ('result = %s' % (gdb.selected_frame () == f1))" " = True" "test gdb.selected_frame"
+ 
++gdb_test "python print ('result = %s' % (f0.block ()))" "<gdb.Block object at 0x\[\[:xdigit:\]\]+>" "test Frame.block"
++
+ # Can read SP register.
+ gdb_test "python print ('result = %s' % (gdb.selected_frame ().read_register ('sp') == gdb.parse_and_eval ('\$sp')))" \
+   " = True" \
+diff --git a/gdb/testsuite/gdb.python/py-value.exp b/gdb/testsuite/gdb.python/py-value.exp
+--- a/gdb/testsuite/gdb.python/py-value.exp
++++ b/gdb/testsuite/gdb.python/py-value.exp
+@@ -384,6 +384,15 @@ proc test_value_after_death {} {
+     "print value's type"
+ }
+ 
++# Regression test for a cast failure.  The bug was that if we cast a
++# value to its own type, gdb could crash.  This happened because we
++# could end up double-freeing a struct value.
++proc test_cast_regression {} {
++  gdb_test "python v = gdb.Value(5)" "" "create value for cast test"
++  gdb_test "python v = v.cast(v.type)" "" "cast value for cast test"
++  gdb_test "python print(v)" "5" "print value for cast test"
++}
++
+ # Regression test for invalid subscript operations.  The bug was that
+ # the type of the value was not being checked before allowing a
+ # subscript operation to proceed.
+@@ -512,6 +521,7 @@ if ![runto_main] then {
+ test_value_in_inferior
+ test_inferior_function_call
+ test_value_after_death
++test_cast_regression
+ 
+ # Test either C or C++ values. 
+ 
+diff --git a/gdb/varobj.c b/gdb/varobj.c
+--- a/gdb/varobj.c
++++ b/gdb/varobj.c
+@@ -218,6 +218,14 @@ is_root_p (const struct varobj *var)
+ }
+ 
+ #ifdef HAVE_PYTHON
++/* Helper function to install a Python environment suitable for
++   use during operations on VAR.  */
++struct cleanup *
++varobj_ensure_python_env (const struct varobj *var)
++{
++  return ensure_python_env (var->root->exp->gdbarch,
++			    var->root->exp->language_defn);
++}
+ 
+ /* See python-internal.h.  */
+ gdbpy_enter_varobj::gdbpy_enter_varobj (const struct varobj *var)
+diff --git a/gdb/varobj.h b/gdb/varobj.h
+--- a/gdb/varobj.h
++++ b/gdb/varobj.h
+@@ -328,6 +328,8 @@ extern bool varobj_has_more (const struct varobj *var, int to);
+ 
+ extern bool varobj_is_dynamic_p (const struct varobj *var);
+ 
++extern struct cleanup *varobj_ensure_python_env (const struct varobj *var);
++
+ extern bool varobj_default_value_is_changeable_p (const struct varobj *var);
+ extern bool varobj_value_is_changeable_p (const struct varobj *var);
+ 
diff --git a/SOURCES/gdb-attach-fail-reasons-5of5.patch b/SOURCES/gdb-attach-fail-reasons-5of5.patch
new file mode 100644
index 0000000..c8b1267
--- /dev/null
+++ b/SOURCES/gdb-attach-fail-reasons-5of5.patch
@@ -0,0 +1,357 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-attach-fail-reasons-5of5.patch
+
+;; Print reasons for failed attach/spawn incl. SELinux deny_ptrace (BZ 786878).
+;;=push+jan
+
+http://sourceware.org/ml/gdb-patches/2012-03/msg00171.html
+
+Hi,
+
+and here is the last bit for new SELinux 'deny_ptrace':
+	https://bugzilla.redhat.com/show_bug.cgi?id=786878
+
+As even PTRACE_TRACEME fails in such case it needs to install hook for even
+that event.
+
+Thanks,
+Jan
+
+gdb/
+2012-03-06  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* common/linux-ptrace.c [HAVE_SELINUX_SELINUX_H]: include
+	selinux/selinux.h.
+	(linux_ptrace_attach_warnings): Call linux_ptrace_create_warnings.
+	(linux_ptrace_create_warnings): New.
+	* common/linux-ptrace.h (linux_ptrace_create_warnings): New declaration.
+	* config.in: Regenerate.
+	* configure: Regenerate.
+	* configure.ac: Check selinux/selinux.h and the selinux library.
+	* inf-ptrace.c (inf_ptrace_me): Check the ptrace result.
+	* linux-nat.c (linux_nat_create_inferior): New variable ex.  Wrap
+	to_create_inferior into TRY_CATCH, call linux_ptrace_create_warnings.
+
+gdb/gdbserver/
+	* config.in: Regenerate.
+	* configure: Regenerate.
+	* configure.ac: Check selinux/selinux.h and the selinux library.
+	* linux-low.c (linux_traceme): New function.
+	(linux_create_inferior, linux_tracefork_child): Call it instead of
+	direct ptrace.
+
+diff --git a/gdb/config.in b/gdb/config.in
+--- a/gdb/config.in
++++ b/gdb/config.in
+@@ -276,6 +276,9 @@
+ /* Define if librpm library is being used. */
+ #undef HAVE_LIBRPM
+ 
++/* Define to 1 if you have the `selinux' library (-lselinux). */
++#undef HAVE_LIBSELINUX
++
+ /* Define to 1 if you have the <libunwind-ia64.h> header file. */
+ #undef HAVE_LIBUNWIND_IA64_H
+ 
+@@ -399,6 +402,9 @@
+ /* Define to 1 if you have the `scm_new_smob' function. */
+ #undef HAVE_SCM_NEW_SMOB
+ 
++/* Define to 1 if you have the <selinux/selinux.h> header file. */
++#undef HAVE_SELINUX_SELINUX_H
++
+ /* Define to 1 if you have the `setlocale' function. */
+ #undef HAVE_SETLOCALE
+ 
+diff --git a/gdb/configure b/gdb/configure
+--- a/gdb/configure
++++ b/gdb/configure
+@@ -15854,6 +15854,64 @@ cat >>confdefs.h <<_ACEOF
+ _ACEOF
+ 
+ 
++for ac_header in selinux/selinux.h
++do :
++  ac_fn_c_check_header_mongrel "$LINENO" "selinux/selinux.h" "ac_cv_header_selinux_selinux_h" "$ac_includes_default"
++if test "x$ac_cv_header_selinux_selinux_h" = x""yes; then :
++  cat >>confdefs.h <<_ACEOF
++#define HAVE_SELINUX_SELINUX_H 1
++_ACEOF
++
++fi
++
++done
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for security_get_boolean_active in -lselinux" >&5
++$as_echo_n "checking for security_get_boolean_active in -lselinux... " >&6; }
++if test "${ac_cv_lib_selinux_security_get_boolean_active+set}" = set; then :
++  $as_echo_n "(cached) " >&6
++else
++  ac_check_lib_save_LIBS=$LIBS
++LIBS="-lselinux  $LIBS"
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++
++/* Override any GCC internal prototype to avoid an error.
++   Use char because int might match the return type of a GCC
++   builtin and then its argument prototype would still apply.  */
++#ifdef __cplusplus
++extern "C"
++#endif
++char security_get_boolean_active ();
++int
++main ()
++{
++return security_get_boolean_active ();
++  ;
++  return 0;
++}
++_ACEOF
++if ac_fn_c_try_link "$LINENO"; then :
++  ac_cv_lib_selinux_security_get_boolean_active=yes
++else
++  ac_cv_lib_selinux_security_get_boolean_active=no
++fi
++rm -f core conftest.err conftest.$ac_objext \
++    conftest$ac_exeext conftest.$ac_ext
++LIBS=$ac_check_lib_save_LIBS
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_selinux_security_get_boolean_active" >&5
++$as_echo "$ac_cv_lib_selinux_security_get_boolean_active" >&6; }
++if test "x$ac_cv_lib_selinux_security_get_boolean_active" = x""yes; then :
++  cat >>confdefs.h <<_ACEOF
++#define HAVE_LIBSELINUX 1
++_ACEOF
++
++  LIBS="-lselinux $LIBS"
++
++fi
++
++
+ 
+ # Support for --with-sysroot is a copy of GDB_AC_WITH_DIR,
+ # except that the argument to --with-sysroot is optional.
+diff --git a/gdb/configure.ac b/gdb/configure.ac
+--- a/gdb/configure.ac
++++ b/gdb/configure.ac
+@@ -2054,6 +2054,10 @@ case $host_os in
+ esac
+ AC_DEFINE_UNQUOTED(GDBINIT,"$gdbinit",[The .gdbinit filename.])
+ 
++dnl Check security_get_boolean_active availability.
++AC_CHECK_HEADERS(selinux/selinux.h)
++AC_CHECK_LIB(selinux, security_get_boolean_active)
++
+ dnl Handle optional features that can be enabled.
+ 
+ # Support for --with-sysroot is a copy of GDB_AC_WITH_DIR,
+diff --git a/gdb/gdbserver/config.in b/gdb/gdbserver/config.in
+--- a/gdb/gdbserver/config.in
++++ b/gdb/gdbserver/config.in
+@@ -126,6 +126,9 @@
+ /* Define to 1 if you have the `mcheck' library (-lmcheck). */
+ #undef HAVE_LIBMCHECK
+ 
++/* Define to 1 if you have the `selinux' library (-lselinux). */
++#undef HAVE_LIBSELINUX
++
+ /* Define if the target supports branch tracing. */
+ #undef HAVE_LINUX_BTRACE
+ 
+@@ -202,6 +205,9 @@
+ /* Define to 1 if you have the `pwrite' function. */
+ #undef HAVE_PWRITE
+ 
++/* Define to 1 if you have the <selinux/selinux.h> header file. */
++#undef HAVE_SELINUX_SELINUX_H
++
+ /* Define to 1 if you have the `setns' function. */
+ #undef HAVE_SETNS
+ 
+diff --git a/gdb/gdbserver/configure b/gdb/gdbserver/configure
+--- a/gdb/gdbserver/configure
++++ b/gdb/gdbserver/configure
+@@ -8535,6 +8535,64 @@ if $want_ipa ; then
+    fi
+ fi
+ 
++for ac_header in selinux/selinux.h
++do :
++  ac_fn_c_check_header_mongrel "$LINENO" "selinux/selinux.h" "ac_cv_header_selinux_selinux_h" "$ac_includes_default"
++if test "x$ac_cv_header_selinux_selinux_h" = x""yes; then :
++  cat >>confdefs.h <<_ACEOF
++#define HAVE_SELINUX_SELINUX_H 1
++_ACEOF
++
++fi
++
++done
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for security_get_boolean_active in -lselinux" >&5
++$as_echo_n "checking for security_get_boolean_active in -lselinux... " >&6; }
++if test "${ac_cv_lib_selinux_security_get_boolean_active+set}" = set; then :
++  $as_echo_n "(cached) " >&6
++else
++  ac_check_lib_save_LIBS=$LIBS
++LIBS="-lselinux  $LIBS"
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++
++/* Override any GCC internal prototype to avoid an error.
++   Use char because int might match the return type of a GCC
++   builtin and then its argument prototype would still apply.  */
++#ifdef __cplusplus
++extern "C"
++#endif
++char security_get_boolean_active ();
++int
++main ()
++{
++return security_get_boolean_active ();
++  ;
++  return 0;
++}
++_ACEOF
++if ac_fn_c_try_link "$LINENO"; then :
++  ac_cv_lib_selinux_security_get_boolean_active=yes
++else
++  ac_cv_lib_selinux_security_get_boolean_active=no
++fi
++rm -f core conftest.err conftest.$ac_objext \
++    conftest$ac_exeext conftest.$ac_ext
++LIBS=$ac_check_lib_save_LIBS
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_selinux_security_get_boolean_active" >&5
++$as_echo "$ac_cv_lib_selinux_security_get_boolean_active" >&6; }
++if test "x$ac_cv_lib_selinux_security_get_boolean_active" = x""yes; then :
++  cat >>confdefs.h <<_ACEOF
++#define HAVE_LIBSELINUX 1
++_ACEOF
++
++  LIBS="-lselinux $LIBS"
++
++fi
++
++
+ 
+ 
+ 
+diff --git a/gdb/gdbserver/configure.ac b/gdb/gdbserver/configure.ac
+--- a/gdb/gdbserver/configure.ac
++++ b/gdb/gdbserver/configure.ac
+@@ -486,6 +486,10 @@ if $want_ipa ; then
+    fi
+ fi
+ 
++dnl Check security_get_boolean_active availability.
++AC_CHECK_HEADERS(selinux/selinux.h)
++AC_CHECK_LIB(selinux, security_get_boolean_active)
++
+ AC_SUBST(GDBSERVER_DEPFILES)
+ AC_SUBST(GDBSERVER_LIBS)
+ AC_SUBST(srv_xmlbuiltin)
+diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c
+--- a/gdb/gdbserver/linux-low.c
++++ b/gdb/gdbserver/linux-low.c
+@@ -967,7 +967,16 @@ linux_ptrace_fun ()
+ {
+   if (ptrace (PTRACE_TRACEME, 0, (PTRACE_TYPE_ARG3) 0,
+ 	      (PTRACE_TYPE_ARG4) 0) < 0)
+-    trace_start_error_with_name ("ptrace");
++    {
++      int save_errno = errno;
++
++      std::string msg (linux_ptrace_create_warnings ());
++
++      msg += _("Cannot trace created process");
++
++      errno = save_errno;
++      trace_start_error_with_name (msg.c_str ());
++    }
+ 
+   if (setpgid (0, 0) < 0)
+     trace_start_error_with_name ("setpgid");
+diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c
+--- a/gdb/linux-nat.c
++++ b/gdb/linux-nat.c
+@@ -1089,7 +1089,17 @@ linux_nat_target::create_inferior (const char *exec_file,
+   /* Make sure we report all signals during startup.  */
+   pass_signals (0, NULL);
+ 
+-  inf_ptrace_target::create_inferior (exec_file, allargs, env, from_tty);
++  TRY
++    {
++      inf_ptrace_target::create_inferior (exec_file, allargs, env, from_tty);
++    }
++  CATCH (ex, RETURN_MASK_ERROR)
++    {
++      std::string result =  linux_ptrace_create_warnings ();
++
++      throw_error (ex.error, "%s%s", result.c_str (), ex.message);
++    }
++  END_CATCH
+ }
+ 
+ /* Callback for linux_proc_attach_tgid_threads.  Attach to PTID if not
+diff --git a/gdb/nat/linux-ptrace.c b/gdb/nat/linux-ptrace.c
+--- a/gdb/nat/linux-ptrace.c
++++ b/gdb/nat/linux-ptrace.c
+@@ -25,6 +25,10 @@
+ #include <sys/procfs.h>
+ #endif
+ 
++#ifdef HAVE_SELINUX_SELINUX_H
++# include <selinux/selinux.h>
++#endif /* HAVE_SELINUX_SELINUX_H */
++
+ /* Stores the ptrace options supported by the running kernel.
+    A value of -1 means we did not check for features yet.  A value
+    of 0 means there are no supported features.  */
+@@ -50,6 +54,8 @@ linux_ptrace_attach_fail_reason (pid_t pid)
+ 		      "terminated"),
+ 		    (int) pid);
+ 
++  result += linux_ptrace_create_warnings ();
++
+   return result;
+ }
+ 
+@@ -583,6 +589,25 @@ linux_ptrace_init_warnings (void)
+   linux_ptrace_test_ret_to_nx ();
+ }
+ 
++/* Print all possible reasons we could fail to create a traced process.  */
++
++std::string
++linux_ptrace_create_warnings ()
++{
++  std::string result;
++
++#ifdef HAVE_LIBSELINUX
++  /* -1 is returned for errors, 0 if it has no effect, 1 if PTRACE_ATTACH is
++     forbidden.  */
++  if (security_get_boolean_active ("deny_ptrace") == 1)
++    string_appendf (result,
++		    _("the SELinux boolean 'deny_ptrace' is enabled, "
++		      "you can disable this process attach protection by: "
++		      "(gdb) shell sudo setsebool deny_ptrace=0\n"));
++#endif /* HAVE_LIBSELINUX */
++  return result;
++}
++
+ /* Extract extended ptrace event from wait status.  */
+ 
+ int
+diff --git a/gdb/nat/linux-ptrace.h b/gdb/nat/linux-ptrace.h
+--- a/gdb/nat/linux-ptrace.h
++++ b/gdb/nat/linux-ptrace.h
+@@ -184,6 +184,7 @@ extern std::string linux_ptrace_attach_fail_reason (pid_t pid);
+ extern std::string linux_ptrace_attach_fail_reason_string (ptid_t ptid, int err);
+ 
+ extern void linux_ptrace_init_warnings (void);
++extern std::string linux_ptrace_create_warnings ();
+ extern void linux_check_ptrace_features (void);
+ extern void linux_enable_event_reporting (pid_t pid, int attached);
+ extern void linux_disable_event_reporting (pid_t pid);
diff --git a/SOURCES/gdb-btrobust.patch b/SOURCES/gdb-btrobust.patch
new file mode 100644
index 0000000..40d406c
--- /dev/null
+++ b/SOURCES/gdb-btrobust.patch
@@ -0,0 +1,45 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-btrobust.patch
+
+;; Continue backtrace even if a frame filter throws an exception (Phil Muldoon).
+;;=push
+
+This should fix the error  with glib.  An error message will still be
+printed, but a default backtrace will occur in this case.
+
+--
+
+diff --git a/gdb/python/py-framefilter.c b/gdb/python/py-framefilter.c
+--- a/gdb/python/py-framefilter.c
++++ b/gdb/python/py-framefilter.c
+@@ -1151,6 +1151,7 @@ gdbpy_apply_frame_filter (const struct extension_language_defn *extlang,
+ 				       htab_eq_pointer,
+ 				       NULL));
+ 
++  int count_printed = 0;
+   while (true)
+     {
+       gdbpy_ref<> item (PyIter_Next (iterable.get ()));
+@@ -1159,8 +1160,8 @@ gdbpy_apply_frame_filter (const struct extension_language_defn *extlang,
+ 	{
+ 	  if (PyErr_Occurred ())
+ 	    {
+-	      throw_quit_or_print_exception ();
+-	      return EXT_LANG_BT_ERROR;
++	      gdbpy_print_stack ();
++	      return count_printed > 0 ? EXT_LANG_BT_ERROR : EXT_LANG_BT_NO_FILTERS;
+ 	    }
+ 	  break;
+ 	}
+@@ -1193,7 +1194,8 @@ gdbpy_apply_frame_filter (const struct extension_language_defn *extlang,
+       /* Do not exit on error printing a single frame.  Print the
+ 	 error and continue with other frames.  */
+       if (success == EXT_LANG_BT_ERROR)
+-	throw_quit_or_print_exception ();
++	gdbpy_print_stack ();
++      count_printed++;
+     }
+ 
+   return success;
diff --git a/SOURCES/gdb-bz1219747-attach-kills.patch b/SOURCES/gdb-bz1219747-attach-kills.patch
new file mode 100644
index 0000000..6ae10a2
--- /dev/null
+++ b/SOURCES/gdb-bz1219747-attach-kills.patch
@@ -0,0 +1,178 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-bz1219747-attach-kills.patch
+
+;; Never kill PID on: gdb exec PID (Jan Kratochvil, RH BZ 1219747).
+;;=push+jan
+
+http://sourceware.org/ml/gdb-patches/2015-10/msg00301.html
+
+Hi,
+
+in some cases with deleted main executable GDB will want to kill the inferior.
+
+$ cp /bin/sleep /tmp/sleep;/tmp/sleep 1h&p=$!
+$ rm /tmp/sleep
+$ gdb /tmp/sleep $p
+GNU gdb (GDB) 7.10.50.20151016-cvs
+/tmp/sleep: No such file or directory.
+Attaching to process 9694
+/tmp/sleep (deleted): No such file or directory.
+A program is being debugged already.  Kill it? (y or n) _
+
+The first attachment of "/tmp/sleep" commandline argument errors at:
+
+267               if (scratch_chan < 0)
+268                 perror_with_name (filename);
+1051          if (catch_command_errors_const (exec_file_attach, execarg,
+1052                                          !batch_flag))
+
+Then GDB tries to attach to the process $p:
+
+1082              if (catch_command_errors (attach_command, pid_or_core_arg,
+1083                                        !batch_flag) == 0)
+
+This succeeds and since this moment GDB has a valid inferior.  But despite that
+the lines
+1082              if (catch_command_errors (attach_command, pid_or_core_arg,
+1083                                        !batch_flag) == 0)
+still fail because consequently attach_command() fails to find the associated
+executable file:
+
+267               if (scratch_chan < 0)
+268                 perror_with_name (filename);
+1082              if (catch_command_errors (attach_command, pid_or_core_arg,
+1083                                        !batch_flag) == 0)
+
+and therefore GDB executes the following:
+
+(gdb) bt
+2179	  if (have_inferiors ())
+2180	    {
+2181	      if (!from_tty
+2182		  || !have_live_inferiors ()
+2183		  || query (_("A program is being debugged already.  Kill it? ")))
+2184		iterate_over_inferiors (dispose_inferior, NULL);
+2185	      else
+2186		error (_("Program not killed."));
+2187	    }
+1084		    catch_command_errors (core_file_command, pid_or_core_arg,
+1085					  !batch_flag);
+
+No regressions on {x86_64,x86_64-m32,i686}-fedora24pre-linux-gnu.
+
+Thanks,
+Jan
+
+gdb/ChangeLog
+2015-10-16  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* main.c (captured_main): Run core_file_command for pid_or_core_arg
+	only if not have_inferiors ().
+
+gdb/testsuite/ChangeLog
+2015-10-16  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.base/attach-kills.c: New.
+	* gdb.base/attach-kills.exp: New.
+
+diff --git a/gdb/main.c b/gdb/main.c
+--- a/gdb/main.c
++++ b/gdb/main.c
+@@ -1115,7 +1115,10 @@ captured_main_1 (struct captured_main_args *context)
+       if (isdigit (pid_or_core_arg[0]))
+ 	{
+ 	  if (catch_command_errors (attach_command, pid_or_core_arg,
+-				    !batch_flag) == 0)
++				    !batch_flag) == 0
++	      /* attach_command could succeed partially and core_file_command
++		 would try to kill it.  */
++	      && !have_inferiors ())
+ 	    catch_command_errors (core_file_command, pid_or_core_arg,
+ 				  !batch_flag);
+ 	}
+diff --git a/gdb/testsuite/gdb.base/attach-kills.c b/gdb/testsuite/gdb.base/attach-kills.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/attach-kills.c
+@@ -0,0 +1,25 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2015 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++#include <unistd.h>
++
++int
++main (void)
++{
++  sleep (600);
++  return 0;
++}
+diff --git a/gdb/testsuite/gdb.base/attach-kills.exp b/gdb/testsuite/gdb.base/attach-kills.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/attach-kills.exp
+@@ -0,0 +1,49 @@
++# Copyright (C) 2015 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++if { ![can_spawn_for_attach] } {
++    return 0
++}
++
++standard_testfile
++
++if { [build_executable ${testfile}.exp $testfile] == -1 } {
++    return -1
++}
++
++# Start the program running and then wait for a bit, to be sure
++# that it can be attached to.
++
++set test_spawn_id [spawn_wait_for_attach $binfile]
++set testpid [spawn_id_get_pid $test_spawn_id]
++
++remote_exec target "cp -pf -- $binfile $binfile-copy"
++remote_exec target "rm -f -- $binfile"
++
++set test "start gdb"
++set res [gdb_spawn_with_cmdline_opts \
++	 "-iex \"set height 0\" -iex \"set width 0\" /DoEsNoTeXySt $testpid"]
++if { $res != 0} {
++    fail "$test (spawn)"
++    kill_wait_spawned_process $test_spawn_id
++    return -1
++}
++gdb_test_multiple "" $test {
++    -re "\r\nAttaching to .*\r\n$gdb_prompt $" {
++	pass $test
++    }
++}
++
++kill_wait_spawned_process $test_spawn_id
diff --git a/SOURCES/gdb-bz533176-fortran-omp-step.patch b/SOURCES/gdb-bz533176-fortran-omp-step.patch
new file mode 100644
index 0000000..8a23b33
--- /dev/null
+++ b/SOURCES/gdb-bz533176-fortran-omp-step.patch
@@ -0,0 +1,130 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-bz533176-fortran-omp-step.patch
+
+;; Fix stepping with OMP parallel Fortran sections (BZ 533176).
+;;=push+jan: It requires some better DWARF annotations.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=533176#c4
+
+I find it a bug in DWARF and gdb behaves correctly according to it.  From the
+current DWARF's point of view the is a function call which you skip by "next".
+
+If you hide any /usr/lib/debug such as using:
+gdb -nx -ex 'set debug-file-directory /qwe' -ex 'file ./tpcommon_gfortran44'
+and use "step" command instead of "next" there it will work.
+(You need to hide debuginfo from libgomp as you would step into libgomp sources
+to maintain the threads for execution.)
+
+There should be some DWARF extension for it, currently tried to detect
+substring ".omp_fn." as this function is called "MAIN__.omp_fn.0" and do not
+consider such sub-function as a skippable by "next".
+
+Another problem is that with "set scheduler-locking" being "off" (default
+upstream) or "step" (default in F/RHEL) the simultaneous execution of the
+threads is inconvenient.  Setting it to "on" will lockup the debugging as the
+threads need to get synchronized at some point.  This is a more general
+debugging problem of GOMP outside of the scope of this Bug.
+
+diff --git a/gdb/infrun.c b/gdb/infrun.c
+--- a/gdb/infrun.c
++++ b/gdb/infrun.c
+@@ -6695,6 +6695,16 @@ process_event_stop_test (struct execution_control_state *ecs)
+ 
+       if (ecs->event_thread->control.step_over_calls == STEP_OVER_ALL)
+ 	{
++	  struct symbol *stop_fn = find_pc_function (stop_pc);
++	  struct minimal_symbol *stopf = lookup_minimal_symbol_by_pc (stop_pc).minsym;
++
++	  if ((stop_fn == NULL
++	       || strstr (SYMBOL_LINKAGE_NAME (stop_fn), ".omp_fn.") == NULL)
++	      /* gcc-4.7.2-9.fc19.x86_64 uses a new format.  */
++	      && (stopf == NULL
++		  || strstr (MSYMBOL_LINKAGE_NAME (stopf), "._omp_fn.") == NULL))
++{	/* ".omp_fn." */
++
+ 	  /* We're doing a "next".
+ 
+ 	     Normal (forward) execution: set a breakpoint at the
+@@ -6728,6 +6738,7 @@ process_event_stop_test (struct execution_control_state *ecs)
+ 
+ 	  keep_going (ecs);
+ 	  return;
++}	/* ".omp_fn." */
+ 	}
+ 
+       /* If we are in a function call trampoline (a stub between the
+diff --git a/gdb/testsuite/gdb.fortran/omp-step.exp b/gdb/testsuite/gdb.fortran/omp-step.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.fortran/omp-step.exp
+@@ -0,0 +1,31 @@
++# Copyright 2009 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++set testfile "omp-step"
++set srcfile ${testfile}.f90
++if { [prepare_for_testing $testfile.exp $testfile $srcfile {debug f90 additional_flags=-fopenmp}] } {
++    return -1
++}
++
++if ![runto [gdb_get_line_number "start-here"]] {
++    perror "Couldn't run to start-here"
++    return 0
++}
++
++gdb_test "next" {!\$omp parallel} "step closer"
++gdb_test "next" {a\(omp_get_thread_num\(\) \+ 1\) = 1} "step into omp"
++
++gdb_breakpoint [gdb_get_line_number "success"]
++gdb_continue_to_breakpoint "success" ".*success.*"
+diff --git a/gdb/testsuite/gdb.fortran/omp-step.f90 b/gdb/testsuite/gdb.fortran/omp-step.f90
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.fortran/omp-step.f90
+@@ -0,0 +1,32 @@
++! Copyright 2009 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++      use omp_lib
++      integer nthreads, i, a(1000)
++      nthreads = omp_get_num_threads()
++      if (nthreads .gt. 1000) call abort
++
++      do i = 1, nthreads
++          a(i) = 0
++      end do
++      print *, "start-here"
++!$omp parallel
++      a(omp_get_thread_num() + 1) = 1
++!$omp end parallel
++      do i = 1, nthreads
++          if (a(i) .ne. 1) call abort
++      end do
++      print *, "success"
++      end
diff --git a/SOURCES/gdb-bz541866-rwatch-before-run.patch b/SOURCES/gdb-bz541866-rwatch-before-run.patch
new file mode 100644
index 0000000..0ff3a93
--- /dev/null
+++ b/SOURCES/gdb-bz541866-rwatch-before-run.patch
@@ -0,0 +1,175 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-bz541866-rwatch-before-run.patch
+
+;; Fix i386+x86_64 rwatch+awatch before run, regression against 6.8 (BZ 541866).
+;; Fix i386 rwatch+awatch before run (BZ 688788, on top of BZ 541866).
+;;=push+jan: It should be fixed properly instead.
+
+diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
+--- a/gdb/breakpoint.c
++++ b/gdb/breakpoint.c
+@@ -8807,7 +8807,7 @@ init_breakpoint_sal (struct breakpoint *b, struct gdbarch *gdbarch,
+ 		     int enabled, int internal, unsigned flags,
+ 		     int display_canonical)
+ {
+-  int i;
++  int i ATTRIBUTE_UNUSED;
+ 
+   if (type == bp_hardware_breakpoint)
+     {
+@@ -14356,7 +14356,7 @@ enable_breakpoint_disp (struct breakpoint *bpt, enum bpdisp disposition,
+ 
+   if (bpt->type == bp_hardware_breakpoint)
+     {
+-      int i;
++      int i ATTRIBUTE_UNUSED;
+       i = hw_breakpoint_used_count ();
+       target_resources_ok = 
+ 	target_can_use_hardware_watchpoint (bp_hardware_breakpoint, 
+diff --git a/gdb/config/i386/nm-linux.h b/gdb/config/i386/nm-linux.h
+new file mode 100644
+--- /dev/null
++++ b/gdb/config/i386/nm-linux.h
+@@ -0,0 +1,28 @@
++/* Native support for GNU/Linux i386.
++
++   Copyright 2010 Free Software Foundation, Inc.
++
++   This file is part of GDB.
++
++   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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++#ifndef NM_LINUX_H
++#define NM_LINUX_H
++
++#include "config/nm-linux.h"
++
++/* Red Hat backward compatibility with gdb-6.8.  */
++#define target_can_use_hardware_watchpoint(type, cnt, ot) 1
++
++#endif /* NM_LINUX64_H */
+diff --git a/gdb/config/i386/nm-linux64.h b/gdb/config/i386/nm-linux64.h
+new file mode 100644
+--- /dev/null
++++ b/gdb/config/i386/nm-linux64.h
+@@ -0,0 +1,28 @@
++/* Native support for GNU/Linux amd64.
++
++   Copyright 2010 Free Software Foundation, Inc.
++
++   This file is part of GDB.
++
++   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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++#ifndef NM_LINUX64_H
++#define NM_LINUX64_H
++
++#include "config/nm-linux.h"
++
++/* Red Hat backward compatibility with gdb-6.8.  */
++#define target_can_use_hardware_watchpoint(type, cnt, ot) 1
++
++#endif /* NM_LINUX64_H */
+diff --git a/gdb/configure.nat b/gdb/configure.nat
+--- a/gdb/configure.nat
++++ b/gdb/configure.nat
+@@ -238,6 +238,7 @@ case ${gdb_host} in
+ 		;;
+ 	    i386)
+ 		# Host: Intel 386 running GNU/Linux.
++		NAT_FILE="${srcdir}/config/${gdb_host_cpu}/nm-linux.h"
+ 		NATDEPFILES="${NATDEPFILES} x86-nat.o x86-dregs.o \
+ 		i386-linux-nat.o x86-linux-nat.o linux-btrace.o \
+ 		x86-linux.o x86-linux-dregs.o"
+@@ -290,6 +291,7 @@ case ${gdb_host} in
+ 	case ${gdb_host_cpu} in
+ 	    i386)
+ 		# Host: GNU/Linux x86-64
++		NAT_FILE="${srcdir}/config/${gdb_host_cpu}/nm-linux64.h"
+ 		NATDEPFILES="${NATDEPFILES} x86-nat.o x86-dregs.o \
+ 		amd64-nat.o amd64-linux-nat.o x86-linux-nat.o linux-btrace.o \
+ 		x86-linux.o x86-linux-dregs.o amd64-linux-siginfo.o"
+diff --git a/gdb/target.h b/gdb/target.h
+--- a/gdb/target.h
++++ b/gdb/target.h
+@@ -1953,9 +1953,11 @@ extern struct thread_info *target_thread_handle_to_thread_info
+    one.  OTHERTYPE is the number of watchpoints of other types than
+    this one used so far.  */
+ 
++#ifndef target_can_use_hardware_watchpoint
+ #define target_can_use_hardware_watchpoint(TYPE,CNT,OTHERTYPE) \
+  (current_top_target ()->can_use_hw_breakpoint) ( \
+ 					     TYPE, CNT, OTHERTYPE)
++#endif
+ 
+ /* Returns the number of debug registers needed to watch the given
+    memory region, or zero if not supported.  */
+diff --git a/gdb/testsuite/gdb.base/watchpoint-hw-before-run.exp b/gdb/testsuite/gdb.base/watchpoint-hw-before-run.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/watchpoint-hw-before-run.exp
+@@ -0,0 +1,40 @@
++# Copyright 2009, 2010 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++# Arch not supporting hw watchpoints does not imply no_hardware_watchpoints set.
++if {(![istarget "i?86-*-*"] && ![istarget "x86_64-*-*"]
++     && ![istarget "ia64-*-*"])
++    || [target_info exists gdb,no_hardware_watchpoints]} then {
++    verbose "Skipping watchpoint-hw-before-run test."
++    return
++}
++
++set test watchpoint-hw-before-run
++set srcfile watchpoint-hw-hit-once.c
++if { [prepare_for_testing ${test}.exp ${test} ${srcfile}] } {
++    return -1
++}
++
++gdb_test "rwatch watchee" "ardware read watchpoint 1: watchee"
++
++# `runto_main' or `runto main' would delete the watchpoint created above.
++
++if { [gdb_start_cmd] < 0 } {
++    untested start
++    return -1
++}
++gdb_test "" "main .* at .*" "start"
++
++gdb_test "continue" "Continuing.\r\n\r\nHardware read watchpoint \[0-9\]+: watchee\r\n\r\nValue = 0\r\n.*"
diff --git a/SOURCES/gdb-bz568248-oom-is-error.patch b/SOURCES/gdb-bz568248-oom-is-error.patch
new file mode 100644
index 0000000..f3f61da
--- /dev/null
+++ b/SOURCES/gdb-bz568248-oom-is-error.patch
@@ -0,0 +1,71 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-bz568248-oom-is-error.patch
+
+;; Out of memory is just an error, not fatal (uninitialized VLS vars, BZ 568248).
+;;=push+jan: Inferior objects should be read in parts, then this patch gets obsoleted.
+
+http://sourceware.org/ml/gdb-patches/2010-06/msg00005.html
+
+Hi,
+
+unfortunately I see this problem reproducible only with the
+archer-jankratochvil-vla branch (VLA = Variable Length Arrays - char[var]).
+OTOH this branch I hopefully submit in some form for FSF GDB later.
+
+In this case (a general problem but tested for example on Fedora 13 i686):
+
+int
+main (int argc, char **argv)
+{
+  char a[argc];
+  return a[0];
+}
+
+(gdb) start
+(gdb) print a
+../../gdb/utils.c:1251: internal-error: virtual memory exhausted: can't allocate 4294951689 bytes.
+
+It is apparently because boundary for the variable `a' is not initialized
+there.  Users notice it due to Eclipse-CDT trying to automatically display all
+the local variables on each step.
+
+Apparentl no regressions on {x86_64,x86_64-m32,i686}-fedora13-linux-gnu.
+But is anone aware of the reasons to use internal_error there?
+I find simple error as a perfectly reasonable there.
+(history only tracks it since the initial import)
+
+IIRC this idea has been discussed with Tom Tromey, not sure of its origin.
+
+I understand it may be offtopic for FSF GDB but from some GDB crashes I am not
+sure if it can happen only due to the VLA variables.
+
+Thanks,
+Jan
+
+gdb/
+2010-06-01  Jan Kratochvil  <jan.kratochvil@redhat.com>
+	    Tom Tromey  <tromey@redhat.com>
+
+	* utils.c (nomem): Change internal_error to error.
+
+diff --git a/gdb/utils.c b/gdb/utils.c
+--- a/gdb/utils.c
++++ b/gdb/utils.c
+@@ -746,13 +746,11 @@ malloc_failure (long size)
+ {
+   if (size > 0)
+     {
+-      internal_error (__FILE__, __LINE__,
+-		      _("virtual memory exhausted: can't allocate %ld bytes."),
+-		      size);
++      error (_("virtual memory exhausted: can't allocate %ld bytes."), size);
+     }
+   else
+     {
+-      internal_error (__FILE__, __LINE__, _("virtual memory exhausted."));
++      error (_("virtual memory exhausted."));
+     }
+ }
+ 
diff --git a/SOURCES/gdb-bz601887-dwarf4-rh-test.patch b/SOURCES/gdb-bz601887-dwarf4-rh-test.patch
new file mode 100644
index 0000000..87b7817
--- /dev/null
+++ b/SOURCES/gdb-bz601887-dwarf4-rh-test.patch
@@ -0,0 +1,254 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-bz601887-dwarf4-rh-test.patch
+
+;; Backport DWARF-4 support (BZ 601887, Tom Tromey).
+;;=fedoratest
+
+diff --git a/gdb/testsuite/gdb.dwarf2/rh-dwarf4-x86_64.S b/gdb/testsuite/gdb.dwarf2/rh-dwarf4-x86_64.S
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.dwarf2/rh-dwarf4-x86_64.S
+@@ -0,0 +1,167 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2010 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++	.file	"rh-dwarf4-x86_64.c"
++	.section	.debug_abbrev,"",@progbits
++.Ldebug_abbrev0:
++	.section	.debug_info,"",@progbits
++.Ldebug_info0:
++	.section	.debug_line,"",@progbits
++.Ldebug_line0:
++	.text
++.Ltext0:
++.globl main
++	.type	main, @function
++main:
++.LFB0:
++	.file 1 "gdb.dwarf2/rh-dwarf4-x86_64.c"
++	# gdb.dwarf2/rh-dwarf4-x86_64.c:20
++	.loc 1 20 0
++	.cfi_startproc
++	# basic block 2
++	pushq	%rbp
++	.cfi_def_cfa_offset 16
++	movq	%rsp, %rbp
++	.cfi_offset 6, -16
++	.cfi_def_cfa_register 6
++	# gdb.dwarf2/rh-dwarf4-x86_64.c:21
++	.loc 1 21 0
++	movl	$0, %eax
++	# gdb.dwarf2/rh-dwarf4-x86_64.c:22
++	.loc 1 22 0
++	leave
++	.cfi_def_cfa 7, 8
++	ret
++	.cfi_endproc
++.LFE0:
++	.size	main, .-main
++.Letext0:
++	.section	.debug_info
++	.long	0x4e	# Length of Compilation Unit Info
++	.value	0x4	# DWARF version number
++	.long	.Ldebug_abbrev0	# Offset Into Abbrev. Section
++	.byte	0x8	# Pointer Size (in bytes)
++	.uleb128 0x1	# (DIE (0xb) DW_TAG_compile_unit)
++	.long	.LASF0	# DW_AT_producer: "GNU C 4.4.4 20100503 (Red Hat 4.4.4-2)"
++	.byte	0x1	# DW_AT_language
++	.long	.LASF1	# DW_AT_name: "gdb.dwarf2/rh-dwarf4-x86_64.c"
++	.long	.LASF2	# DW_AT_comp_dir
++	.quad	.Ltext0	# DW_AT_low_pc
++	.quad	.Letext0	# DW_AT_high_pc
++	.long	.Ldebug_line0	# DW_AT_stmt_list
++	.uleb128 0x2	# (DIE (0x2d) DW_TAG_subprogram)
++			# DW_AT_external
++	.long	.LASF3	# DW_AT_name: "main"
++	.byte	0x1	# DW_AT_decl_file (gdb.dwarf2/rh-dwarf4-x86_64.c)
++	.byte	0x13	# DW_AT_decl_line
++			# DW_AT_prototyped
++	.long	0x4a	# DW_AT_type
++	.quad	.LFB0	# DW_AT_low_pc
++	.quad	.LFE0	# DW_AT_high_pc
++	.uleb128 0x1	# DW_AT_frame_base
++	.byte	0x9c	# DW_OP_call_frame_cfa
++	.uleb128 0x3	# (DIE (0x4a) DW_TAG_base_type)
++	.byte	0x4	# DW_AT_byte_size
++	.byte	0x5	# DW_AT_encoding
++	.ascii "int\0"	# DW_AT_name
++	.byte	0x0	# end of children of DIE 0xb
++	.section	.debug_abbrev
++	.uleb128 0x1	# (abbrev code)
++	.uleb128 0x11	# (TAG: DW_TAG_compile_unit)
++	.byte	0x1	# DW_children_yes
++	.uleb128 0x25	# (DW_AT_producer)
++	.uleb128 0xe	# (DW_FORM_strp)
++	.uleb128 0x13	# (DW_AT_language)
++	.uleb128 0xb	# (DW_FORM_data1)
++	.uleb128 0x3	# (DW_AT_name)
++	.uleb128 0xe	# (DW_FORM_strp)
++	.uleb128 0x1b	# (DW_AT_comp_dir)
++	.uleb128 0xe	# (DW_FORM_strp)
++	.uleb128 0x11	# (DW_AT_low_pc)
++	.uleb128 0x1	# (DW_FORM_addr)
++	.uleb128 0x12	# (DW_AT_high_pc)
++	.uleb128 0x1	# (DW_FORM_addr)
++	.uleb128 0x10	# (DW_AT_stmt_list)
++	.uleb128 0x17	# (DW_FORM_sec_offset)
++	.byte	0x0
++	.byte	0x0
++	.uleb128 0x2	# (abbrev code)
++	.uleb128 0x2e	# (TAG: DW_TAG_subprogram)
++	.byte	0x0	# DW_children_no
++	.uleb128 0x3f	# (DW_AT_external)
++	.uleb128 0x19	# (DW_FORM_flag_present)
++	.uleb128 0x3	# (DW_AT_name)
++	.uleb128 0xe	# (DW_FORM_strp)
++	.uleb128 0x3a	# (DW_AT_decl_file)
++	.uleb128 0xb	# (DW_FORM_data1)
++	.uleb128 0x3b	# (DW_AT_decl_line)
++	.uleb128 0xb	# (DW_FORM_data1)
++	.uleb128 0x27	# (DW_AT_prototyped)
++	.uleb128 0x19	# (DW_FORM_flag_present)
++	.uleb128 0x49	# (DW_AT_type)
++	.uleb128 0x13	# (DW_FORM_ref4)
++	.uleb128 0x11	# (DW_AT_low_pc)
++	.uleb128 0x1	# (DW_FORM_addr)
++	.uleb128 0x12	# (DW_AT_high_pc)
++	.uleb128 0x1	# (DW_FORM_addr)
++	.uleb128 0x40	# (DW_AT_frame_base)
++	.uleb128 0x18	# (DW_FORM_exprloc)
++	.byte	0x0
++	.byte	0x0
++	.uleb128 0x3	# (abbrev code)
++	.uleb128 0x24	# (TAG: DW_TAG_base_type)
++	.byte	0x0	# DW_children_no
++	.uleb128 0xb	# (DW_AT_byte_size)
++	.uleb128 0xb	# (DW_FORM_data1)
++	.uleb128 0x3e	# (DW_AT_encoding)
++	.uleb128 0xb	# (DW_FORM_data1)
++	.uleb128 0x3	# (DW_AT_name)
++	.uleb128 0x8	# (DW_FORM_string)
++	.byte	0x0
++	.byte	0x0
++	.byte	0x0
++	.section	.debug_pubnames,"",@progbits
++	.long	0x17	# Length of Public Names Info
++	.value	0x2	# DWARF Version
++	.long	.Ldebug_info0	# Offset of Compilation Unit Info
++	.long	0x52	# Compilation Unit Length
++	.long	0x2d	# DIE offset
++	.ascii "main\0"	# external name
++	.long	0x0
++	.section	.debug_aranges,"",@progbits
++	.long	0x2c	# Length of Address Ranges Info
++	.value	0x2	# DWARF Version
++	.long	.Ldebug_info0	# Offset of Compilation Unit Info
++	.byte	0x8	# Size of Address
++	.byte	0x0	# Size of Segment Descriptor
++	.value	0x0	# Pad to 16 byte boundary
++	.value	0x0
++	.quad	.Ltext0	# Address
++	.quad	.Letext0-.Ltext0	# Length
++	.quad	0x0
++	.quad	0x0
++	.section	.debug_str,"MS",@progbits,1
++.LASF2:
++	.string	"."
++.LASF0:
++	.string	"GNU C 4.4.4 20100503 (Red Hat 4.4.4-2)"
++.LASF1:
++	.string	"gdb.dwarf2/rh-dwarf4-x86_64.c"
++.LASF3:
++	.string	"main"
++	.ident	"GCC: (GNU) 4.4.4 20100503 (Red Hat 4.4.4-2)"
++	.section	.note.GNU-stack,"",@progbits
+diff --git a/gdb/testsuite/gdb.dwarf2/rh-dwarf4-x86_64.c b/gdb/testsuite/gdb.dwarf2/rh-dwarf4-x86_64.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.dwarf2/rh-dwarf4-x86_64.c
+@@ -0,0 +1,22 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2010 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++int
++main (void)
++{
++  return 0;
++}
+diff --git a/gdb/testsuite/gdb.dwarf2/rh-dwarf4-x86_64.exp b/gdb/testsuite/gdb.dwarf2/rh-dwarf4-x86_64.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.dwarf2/rh-dwarf4-x86_64.exp
+@@ -0,0 +1,42 @@
++# Copyright 2010 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++# This test can only be run on targets which support DWARF-2 and use gas.
++# For now pick a sampling of likely targets.
++if {![istarget *-*-linux*]
++    && ![istarget *-*-gnu*]
++    && ![istarget *-*-elf*]
++    && ![istarget *-*-openbsd*]
++    && ![istarget arm-*-eabi*]
++    && ![istarget powerpc-*-eabi*]} {
++    return 0  
++}
++
++if {![istarget x86_64-*]} {
++    return 0  
++}
++
++set testfile "rh-dwarf4-x86_64"
++set srcfile ${testfile}.S
++set executable ${testfile}.x
++set binfile [standard_output_file ${executable}]
++
++if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" object {}] != "" } {
++    return -1
++}
++
++clean_restart $executable
++
++gdb_test "ptype main" {type = int \(void\)}
diff --git a/SOURCES/gdb-bz634108-solib_address.patch b/SOURCES/gdb-bz634108-solib_address.patch
new file mode 100644
index 0000000..abbc407
--- /dev/null
+++ b/SOURCES/gdb-bz634108-solib_address.patch
@@ -0,0 +1,41 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-bz634108-solib_address.patch
+
+;; Verify GDB Python built-in function gdb.solib_address exists (BZ # 634108).
+;;=fedoratest
+
+Fix gdb.solib_address (fix by Phil Muldoon).
+
+s/solib_address/solib_name/ during upstreaming.
+
+diff --git a/gdb/testsuite/gdb.python/rh634108-solib_address.exp b/gdb/testsuite/gdb.python/rh634108-solib_address.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.python/rh634108-solib_address.exp
+@@ -0,0 +1,24 @@
++# Copyright (C) 2008, 2009, 2010 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++# https://bugzilla.redhat.com/show_bug.cgi?id=634108
++
++gdb_exit
++gdb_start
++
++# Skip all tests if Python scripting is not enabled.
++if { [skip_python_tests] } { continue }
++
++gdb_test "python print gdb.solib_name(-1)" "None" "gdb.solib_name exists"
diff --git a/SOURCES/gdb-ccache-workaround.patch b/SOURCES/gdb-ccache-workaround.patch
new file mode 100644
index 0000000..60bc5cc
--- /dev/null
+++ b/SOURCES/gdb-ccache-workaround.patch
@@ -0,0 +1,26 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-ccache-workaround.patch
+
+;; Workaround ccache making lineno non-zero for command-line definitions.
+;;=fedoratest: ccache is rarely used and it is even fixed now.
+
+diff --git a/gdb/testsuite/gdb.base/macscp.exp b/gdb/testsuite/gdb.base/macscp.exp
+--- a/gdb/testsuite/gdb.base/macscp.exp
++++ b/gdb/testsuite/gdb.base/macscp.exp
+@@ -25,6 +25,14 @@ if { [test_compiler_info "gcc-*"] || [test_compiler_info "clang-*"] } {
+     lappend options additional_flags=-g3
+ }
+ 
++# Workaround ccache making lineno non-zero for command-line definitions.
++if {[find_gcc] == "gcc" && [file executable "/usr/bin/gcc"]} {
++    set result [catch "exec which gcc" output]
++    if {$result == 0 && [string first "/ccache/" $output] > -1} {
++	lappend options "compiler=/usr/bin/gcc"
++    }
++}
++
+ # Generate the intermediate object file.  This is required by Darwin to
+ # have access to the .debug_macinfo section.
+ if  {[gdb_compile "${srcdir}/${subdir}/macscp1.c" "${objfile}" \
diff --git a/SOURCES/gdb-container-rh-pkg.patch b/SOURCES/gdb-container-rh-pkg.patch
new file mode 100644
index 0000000..2defc8d
--- /dev/null
+++ b/SOURCES/gdb-container-rh-pkg.patch
@@ -0,0 +1,30 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-container-rh-pkg.patch
+
+;; Add messages suggesting more recent RHEL gdbserver (RH BZ 1321114).
+;;=fedora
+
+diff --git a/gdb/remote.c b/gdb/remote.c
+--- a/gdb/remote.c
++++ b/gdb/remote.c
+@@ -13909,7 +13909,17 @@ remote_target::pid_to_exec_file (int pid)
+   char *annex = NULL;
+ 
+   if (packet_support (PACKET_qXfer_exec_file) != PACKET_ENABLE)
+-    return NULL;
++    {
++      warning (_("Remote gdbserver does not support determining executable "
++		 "automatically.\n"
++"RHEL <=6.8 and <=7.2 versions of gdbserver do not support such automatic executable detection.\n"
++"The following versions of gdbserver support it:\n"
++"- Upstream version of gdbserver (unsupported) 7.10 or later\n"
++"- Red Hat Developer Toolset (DTS) version of gdbserver from DTS 4.0 or later (only on x86_64)\n"
++"- RHEL-7.3 versions of gdbserver (on any architecture)"
++));
++      return NULL;
++    }
+ 
+   inf = find_inferior_pid (pid);
+   if (inf == NULL)
diff --git a/SOURCES/gdb-core-open-vdso-warning.patch b/SOURCES/gdb-core-open-vdso-warning.patch
new file mode 100644
index 0000000..b0a7311
--- /dev/null
+++ b/SOURCES/gdb-core-open-vdso-warning.patch
@@ -0,0 +1,58 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-core-open-vdso-warning.patch
+
+;; Fix GNU/Linux core open: Can't read pathname for load map: Input/output error.
+;; Fix regression of undisplayed missing shared libraries caused by a fix for.
+;;=fedoratest: It should be in glibc: libc-alpha: <20091004161706.GA27450@.*>
+
+http://sourceware.org/ml/gdb-patches/2009-10/msg00142.html
+Subject: [patch] Fix GNU/Linux core open: Can't read pathname for load map:  Input/output error.
+
+[ New patch variant.  ]
+
+commit 7d760051ffb8a23cdc51342d4e6243fbc462f73f
+Author: Ulrich Weigand <uweigand@de.ibm.com>
+Date:   Wed Sep 25 11:52:50 2013 +0000
+
+diff --git a/gdb/testsuite/gdb.base/solib-symbol.exp b/gdb/testsuite/gdb.base/solib-symbol.exp
+--- a/gdb/testsuite/gdb.base/solib-symbol.exp
++++ b/gdb/testsuite/gdb.base/solib-symbol.exp
+@@ -29,6 +29,7 @@ set testfile "solib-symbol-main"
+ set srcfile ${srcdir}/${subdir}/${testfile}.c
+ set binfile [standard_output_file ${testfile}]
+ set bin_flags [list debug shlib=${binfile_lib}]
++set executable ${testfile}
+ 
+ if [get_compiler_info] {
+     return -1
+@@ -72,8 +73,26 @@ gdb_test "br foo2" \
+ 	 "Breakpoint.*: foo2. .2 locations..*" \
+ 	 "foo2 in mdlib"
+ 
+-gdb_exit
++# Test GDB warns for shared libraris which have not been found.
+ 
+-return 0
++gdb_test "info sharedlibrary" "/${libname}.*"
+ 
++clean_restart ${executable}
++gdb_breakpoint "main"
++gdb_run_cmd
++set test "no warning for missing libraries"
++gdb_test_multiple "" $test {
++    -re "warning: Could not load shared library symbols for \[0-9\]+ libraries,.*\r\n$gdb_prompt $" {
++	fail $test
++    }
++    -re "Breakpoint \[0-9\]+, main .*\r\n$gdb_prompt $" {
++	pass $test
++    }
++}
+ 
++clean_restart ${executable}
++gdb_test_no_output "set solib-absolute-prefix /doESnotEXIST"
++gdb_breakpoint "main"
++gdb_run_cmd
++gdb_test "" "warning: Could not load shared library symbols for \[0-9\]+ libraries,.*\r\nBreakpoint \[0-9\]+, main .*" \
++	 "warning for missing libraries"
diff --git a/SOURCES/gdb-dts-rhel6-python-compat.patch b/SOURCES/gdb-dts-rhel6-python-compat.patch
new file mode 100644
index 0000000..697c6f0
--- /dev/null
+++ b/SOURCES/gdb-dts-rhel6-python-compat.patch
@@ -0,0 +1,315 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-dts-rhel6-python-compat.patch
+
+;; [rhel6] DTS backward Python compatibility API (BZ 1020004, Phil Muldoon).
+;;=fedora
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1020004
+
+diff --git a/gdb/data-directory/Makefile.in b/gdb/data-directory/Makefile.in
+--- a/gdb/data-directory/Makefile.in
++++ b/gdb/data-directory/Makefile.in
+@@ -71,6 +71,8 @@ PYTHON_FILE_LIST = \
+ 	gdb/__init__.py \
+ 	gdb/FrameDecorator.py \
+ 	gdb/FrameIterator.py \
++	gdb/FrameWrapper.py \
++	gdb/backtrace.py \
+ 	gdb/frames.py \
+ 	gdb/printing.py \
+ 	gdb/prompt.py \
+@@ -79,6 +81,7 @@ PYTHON_FILE_LIST = \
+ 	gdb/xmethod.py \
+ 	gdb/command/__init__.py \
+ 	gdb/command/explore.py \
++	gdb/command/backtrace.py \
+ 	gdb/command/frame_filters.py \
+ 	gdb/command/pretty_printers.py \
+ 	gdb/command/prompt.py \
+diff --git a/gdb/python/lib/gdb/FrameWrapper.py b/gdb/python/lib/gdb/FrameWrapper.py
+new file mode 100644
+--- /dev/null
++++ b/gdb/python/lib/gdb/FrameWrapper.py
+@@ -0,0 +1,122 @@
++# Wrapper API for frames.
++
++# Copyright (C) 2008, 2009 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++import gdb
++
++# FIXME: arguably all this should be on Frame somehow.
++class FrameWrapper:
++    def __init__ (self, frame):
++        self.frame = frame;
++
++    def write_symbol (self, stream, sym, block):
++        if len (sym.linkage_name):
++            nsym, is_field_of_this = gdb.lookup_symbol (sym.linkage_name, block)
++            if nsym.addr_class != gdb.SYMBOL_LOC_REGISTER:
++                sym = nsym
++
++        stream.write (sym.print_name + "=")
++        try:
++            val = self.read_var (sym)
++            if val != None:
++                val = str (val)
++        # FIXME: would be nice to have a more precise exception here.
++        except RuntimeError as text:
++            val = text
++        if val == None:
++            stream.write ("???")
++        else:
++            stream.write (str (val))
++
++    def print_frame_locals (self, stream, func):
++
++        try:
++            block = self.frame.block()
++        except RuntimeError:
++            block = None
++
++        while block != None:
++            if block.is_global or block.is_static:
++                break
++
++        for sym in block:
++            if sym.is_argument:
++                continue;
++
++            self.write_symbol (stream, sym, block)
++            stream.write ('\n')
++
++    def print_frame_args (self, stream, func):
++
++        try:
++            block = self.frame.block()
++        except RuntimeError:
++            block = None
++
++        while block != None:
++            if block.function != None:
++                break
++            block = block.superblock
++
++        first = True
++        for sym in block:
++            if not sym.is_argument:
++                continue;
++
++            if not first:
++                stream.write (", ")
++
++            self.write_symbol (stream, sym, block)
++            first = False
++
++    # FIXME: this should probably just be a method on gdb.Frame.
++    # But then we need stream wrappers.
++    def describe (self, stream, full):
++        if self.type () == gdb.DUMMY_FRAME:
++            stream.write (" <function called from gdb>\n")
++        elif self.type () == gdb.SIGTRAMP_FRAME:
++            stream.write (" <signal handler called>\n")
++        else:
++            sal = self.find_sal ()
++            pc = self.pc ()
++            name = self.name ()
++            if not name:
++                name = "??"
++            if pc != sal.pc or not sal.symtab:
++                stream.write (" 0x%08x in" % pc)
++            stream.write (" " + name + " (")
++
++            func = self.function ()
++            self.print_frame_args (stream, func)
++
++            stream.write (")")
++
++            if sal.symtab and sal.symtab.filename:
++                stream.write (" at " + sal.symtab.filename)
++                stream.write (":" + str (sal.line))
++
++            if not self.name () or (not sal.symtab or not sal.symtab.filename):
++                lib = gdb.solib_name (pc)
++                if lib:
++                    stream.write (" from " + lib)
++
++            stream.write ("\n")
++
++            if full:
++                self.print_frame_locals (stream, func)
++
++    def __getattr__ (self, name):
++        return getattr (self.frame, name)
+diff --git a/gdb/python/lib/gdb/backtrace.py b/gdb/python/lib/gdb/backtrace.py
+new file mode 100644
+--- /dev/null
++++ b/gdb/python/lib/gdb/backtrace.py
+@@ -0,0 +1,42 @@
++# Filtering backtrace.
++
++# Copyright (C) 2008, 2011 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++import gdb
++import itertools
++
++# Our only exports.
++__all__ = ['push_frame_filter', 'create_frame_filter']
++
++old_frame_filter = None
++
++def push_frame_filter (constructor):
++    """Register a new backtrace filter class with the 'backtrace' command.
++The filter will be passed an iterator as an argument.  The iterator
++will return gdb.Frame-like objects.  The filter should in turn act as
++an iterator returning such objects."""
++    global old_frame_filter
++    if old_frame_filter == None:
++        old_frame_filter = constructor
++    else:
++        old_frame_filter = lambda iterator, filter = frame_filter: constructor (filter(iterator))
++
++def create_frame_filter (iter):
++    global old_frame_filter
++    if old_frame_filter is None:
++        return iter
++    return old_frame_filter (iter)
++
+diff --git a/gdb/python/lib/gdb/command/backtrace.py b/gdb/python/lib/gdb/command/backtrace.py
+new file mode 100644
+--- /dev/null
++++ b/gdb/python/lib/gdb/command/backtrace.py
+@@ -0,0 +1,106 @@
++# New backtrace command.
++
++# Copyright (C) 2008, 2009, 2011 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++import gdb
++import gdb.backtrace
++import itertools
++from gdb.FrameIterator import FrameIterator
++from gdb.FrameWrapper import FrameWrapper
++import sys
++
++class ReverseBacktraceParameter (gdb.Parameter):
++    """The new-backtrace command can show backtraces in 'reverse' order.
++This means that the innermost frame will be printed last.
++Note that reverse backtraces are more expensive to compute."""
++
++    set_doc = "Enable or disable reverse backtraces."
++    show_doc = "Show whether backtraces will be printed in reverse order."
++
++    def __init__(self):
++        gdb.Parameter.__init__ (self, "reverse-backtrace",
++                                gdb.COMMAND_STACK, gdb.PARAM_BOOLEAN)
++        # Default to compatibility with gdb.
++        self.value = False
++
++class FilteringBacktrace (gdb.Command):
++    """Print backtrace of all stack frames, or innermost COUNT frames.
++With a negative argument, print outermost -COUNT frames.
++Use of the 'full' qualifier also prints the values of the local variables.
++Use of the 'raw' qualifier avoids any filtering by loadable modules.
++"""
++
++    def __init__ (self):
++        # FIXME: this is not working quite well enough to replace
++        # "backtrace" yet.
++        gdb.Command.__init__ (self, "new-backtrace", gdb.COMMAND_STACK)
++        self.reverse = ReverseBacktraceParameter()
++
++    def reverse_iter (self, iter):
++        result = []
++        for item in iter:
++            result.append (item)
++        result.reverse()
++        return result
++
++    def final_n (self, iter, x):
++        result = []
++        for item in iter:
++            result.append (item)
++        return result[x:]
++
++    def invoke (self, arg, from_tty):
++        i = 0
++        count = 0
++        filter = True
++        full = False
++
++        for word in arg.split (" "):
++            if word == '':
++                continue
++            elif word == 'raw':
++                filter = False
++            elif word == 'full':
++                full = True
++            else:
++                count = int (word)
++
++        # FIXME: provide option to start at selected frame
++        # However, should still number as if starting from newest
++        newest_frame = gdb.newest_frame()
++        iter = itertools.imap (FrameWrapper,
++                               FrameIterator (newest_frame))
++        if filter:
++            iter = gdb.backtrace.create_frame_filter (iter)
++
++        # Now wrap in an iterator that numbers the frames.
++        iter = itertools.izip (itertools.count (0), iter)
++
++        # Reverse if the user wanted that.
++        if self.reverse.value:
++            iter = self.reverse_iter (iter)
++
++        # Extract sub-range user wants.
++        if count < 0:
++            iter = self.final_n (iter, count)
++        elif count > 0:
++            iter = itertools.islice (iter, 0, count)
++
++        for pair in iter:
++            sys.stdout.write ("#%-2d" % pair[0])
++            pair[1].describe (sys.stdout, full)
++
++FilteringBacktrace()
diff --git a/SOURCES/gdb-fedora-libncursesw.patch b/SOURCES/gdb-fedora-libncursesw.patch
new file mode 100644
index 0000000..5037e29
--- /dev/null
+++ b/SOURCES/gdb-fedora-libncursesw.patch
@@ -0,0 +1,71 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-fedora-libncursesw.patch
+
+;; Force libncursesw over libncurses to match the includes (RH BZ 1270534).
+;;=push+jan
+
+Fedora: Force libncursesw over libncurses to match the includes.
+https://bugzilla.redhat.com/show_bug.cgi?id=1270534
+
+diff --git a/gdb/configure b/gdb/configure
+--- a/gdb/configure
++++ b/gdb/configure
+@@ -9393,6 +9393,7 @@ if test x"$prefer_curses" = xyes; then
+   # search /usr/local/include, if ncurses is installed in /usr/local.  A
+   # default installation of ncurses on alpha*-dec-osf* will lead to such
+   # a situation.
++  # Fedora: Force libncursesw over libncurses to match the includes.
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing waddstr" >&5
+ $as_echo_n "checking for library containing waddstr... " >&6; }
+ if ${ac_cv_search_waddstr+:} false; then :
+@@ -9417,7 +9418,7 @@ return waddstr ();
+   return 0;
+ }
+ _ACEOF
+-for ac_lib in '' ncursesw ncurses cursesX curses; do
++for ac_lib in '' ncursesw; do
+   if test -z "$ac_lib"; then
+     ac_res="none required"
+   else
+@@ -9491,6 +9492,7 @@ case $host_os in
+ esac
+ 
+ # These are the libraries checked by Readline.
++# Fedora: Force libncursesw over libncurses to match the includes.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing tgetent" >&5
+ $as_echo_n "checking for library containing tgetent... " >&6; }
+ if ${ac_cv_search_tgetent+:} false; then :
+@@ -9515,7 +9517,7 @@ return tgetent ();
+   return 0;
+ }
+ _ACEOF
+-for ac_lib in '' termcap tinfo curses ncursesw ncurses; do
++for ac_lib in '' termcap tinfo ncursesw; do
+   if test -z "$ac_lib"; then
+     ac_res="none required"
+   else
+diff --git a/gdb/configure.ac b/gdb/configure.ac
+--- a/gdb/configure.ac
++++ b/gdb/configure.ac
+@@ -766,7 +766,8 @@ if test x"$prefer_curses" = xyes; then
+   # search /usr/local/include, if ncurses is installed in /usr/local.  A
+   # default installation of ncurses on alpha*-dec-osf* will lead to such
+   # a situation.
+-  AC_SEARCH_LIBS(waddstr, [ncursesw ncurses cursesX curses])
++  # Fedora: Force libncursesw over libncurses to match the includes.
++  AC_SEARCH_LIBS(waddstr, [ncursesw])
+ 
+   if test "$ac_cv_search_waddstr" != no; then
+     curses_found=yes
+@@ -808,7 +809,8 @@ case $host_os in
+ esac
+ 
+ # These are the libraries checked by Readline.
+-AC_SEARCH_LIBS(tgetent, [termcap tinfo curses ncursesw ncurses])
++# Fedora: Force libncursesw over libncurses to match the includes.
++AC_SEARCH_LIBS(tgetent, [termcap tinfo ncursesw])
+ 
+ if test "$ac_cv_search_tgetent" = no; then
+   CONFIG_OBS="$CONFIG_OBS stub-termcap.o"
diff --git a/SOURCES/gdb-follow-child-stale-parent.patch b/SOURCES/gdb-follow-child-stale-parent.patch
new file mode 100644
index 0000000..ab3a765
--- /dev/null
+++ b/SOURCES/gdb-follow-child-stale-parent.patch
@@ -0,0 +1,36 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-follow-child-stale-parent.patch
+
+;; Fix regression by python on ia64 due to stale current frame.
+;;=push+jan
+
+Problem occurs with python and its get_current_arch () as it selects
+selected_frame and current_frame while still inferior_ptid is valid for the
+original parent.  But since this place it is already attached and later
+unwinders try to access it, breaking:
+  -PASS: gdb.threads/watchpoint-fork.exp: child: singlethreaded: breakpoint after the first fork
+  -PASS: gdb.threads/watchpoint-fork.exp: child: singlethreaded: watchpoint after the first fork
+  -PASS: gdb.threads/watchpoint-fork.exp: child: singlethreaded: breakpoint after the second fork
+  -PASS: gdb.threads/watchpoint-fork.exp: child: singlethreaded: watchpoint after the second fork
+  -PASS: gdb.threads/watchpoint-fork.exp: child: singlethreaded: finish
+  +FAIL: gdb.threads/watchpoint-fork.exp: child: singlethreaded: breakpoint after the first fork
+  +FAIL: gdb.threads/watchpoint-fork.exp: child: singlethreaded: watchpoint after the first fork
+  +FAIL: gdb.threads/watchpoint-fork.exp: child: singlethreaded: breakpoint after the second fork
+  +FAIL: gdb.threads/watchpoint-fork.exp: child: singlethreaded: watchpoint after the second fork
+  +FAIL: gdb.threads/watchpoint-fork.exp: child: singlethreaded: finish
+
+diff --git a/gdb/infrun.c b/gdb/infrun.c
+--- a/gdb/infrun.c
++++ b/gdb/infrun.c
+@@ -752,6 +752,9 @@ follow_fork (void)
+ 	  }
+ 	else
+ 	  {
++	    /* Possibly referenced PARENT is no longer valid.  */
++	    reinit_frame_cache ();
++
+ 	    /* This pending follow fork event is now handled, one way
+ 	       or another.  The previous selected thread may be gone
+ 	       from the lists by now, but if it is still around, need
diff --git a/SOURCES/gdb-fortran-frame-string.patch b/SOURCES/gdb-fortran-frame-string.patch
new file mode 100644
index 0000000..a7b7b58
--- /dev/null
+++ b/SOURCES/gdb-fortran-frame-string.patch
@@ -0,0 +1,104 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-fortran-frame-string.patch
+
+;; Display Fortran strings in backtraces.
+;;=fedoratest
+
+http://sourceware.org/ml/gdb-patches/2014-07/msg00709.html
+
+Hi,
+
+for Fortran it fixes displaying normal strings also in frames/backtraces:
+
+(gdb) frame
+->
+
+The patch is simple and I do not see why it should not be this way.
+
+For C/C++ TYPE_CODE_STRING is not used.  I am not aware of Pascal but that
+language is currently not really much supported in GDB anyway.
+
+This was a part of my archer/jankratochvil/vla branch but it is not a part of
+the Intel VLA patchset as it in fact is completely unrelated to "VLA".
+
+No regressions on {x86_64,x86_64-m32,i686}-fedora22pre-linux-gnu.
+
+Thanks,
+Jan
+
+diff --git a/gdb/testsuite/gdb.fortran/fortran-frame-string.exp b/gdb/testsuite/gdb.fortran/fortran-frame-string.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.fortran/fortran-frame-string.exp
+@@ -0,0 +1,36 @@
++# Copyright 2014 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
++
++standard_testfile .f90
++if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {debug f90}] } {
++    return -1
++}
++
++if ![runto MAIN__] then {
++    perror "couldn't run to breakpoint MAIN__"
++    continue
++}
++
++gdb_breakpoint [gdb_get_line_number "s = s"]
++gdb_continue_to_breakpoint "s = s"
++
++gdb_test "ptype s" {type = character\*3}
++gdb_test "p s" " = 'foo'"
++
++# Fix rejected upstream:
++# https://sourceware.org/ml/gdb-patches/2014-07/msg00768.html
++setup_kfail "rejected" *-*-* 
++gdb_test "frame" { \(s='foo', .*}
+diff --git a/gdb/testsuite/gdb.fortran/fortran-frame-string.f90 b/gdb/testsuite/gdb.fortran/fortran-frame-string.f90
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.fortran/fortran-frame-string.f90
+@@ -0,0 +1,28 @@
++! Copyright 2014 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 2 of the License, 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; if not, write to the Free Software
++! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++!
++! Ihis file is the Fortran source file for dynamic.exp.
++! Original file written by Jakub Jelinek <jakub@redhat.com>.
++! Modified for the GDB testcase by Jan Kratochvil <jan.kratochvil@redhat.com>.
++
++  subroutine f(s)
++  character*3 s
++  s = s
++  end
++
++  program main
++  call f ('foo')
++  end
diff --git a/SOURCES/gdb-glibc-strstr-workaround.patch b/SOURCES/gdb-glibc-strstr-workaround.patch
new file mode 100644
index 0000000..85c9621
--- /dev/null
+++ b/SOURCES/gdb-glibc-strstr-workaround.patch
@@ -0,0 +1,151 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-glibc-strstr-workaround.patch
+
+;; Workaround PR libc/14166 for inferior calls of strstr.
+;;=fedora: Compatibility with RHELs (unchecked which ones).
+
+diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
+--- a/gdb/dwarf2read.c
++++ b/gdb/dwarf2read.c
+@@ -21286,6 +21286,26 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
+       /* Cache this symbol's name and the name's demangled form (if any).  */
+       SYMBOL_SET_LANGUAGE (sym, cu->language, &objfile->objfile_obstack);
+       linkagename = dwarf2_physname (name, die, cu);
++
++      /* Workaround for:
++       * invalid IFUNC DW_AT_linkage_name: memmove strstr time
++       * http://sourceware.org/bugzilla/show_bug.cgi?id=14166  */
++      if (strcmp (linkagename, "strstr") == 0
++	  && strstr (objfile_name (objfile), "/libc") != NULL)
++	{
++	  struct objfile *objfile_msym;
++	  struct bound_minimal_symbol bmsym;
++
++	  if (objfile->separate_debug_objfile_backlink)
++	    objfile_msym = objfile->separate_debug_objfile_backlink;
++	  else
++	    objfile_msym = objfile;
++	  bmsym = lookup_minimal_symbol ("strstr", NULL, objfile_msym);
++	  if (bmsym.minsym != NULL
++	      && MSYMBOL_TYPE (bmsym.minsym) == mst_text_gnu_ifunc)
++	    linkagename = "__strstr";
++	}
++
+       SYMBOL_SET_NAMES (sym, linkagename, strlen (linkagename), 0, objfile);
+ 
+       /* Fortran does not have mangling standard and the mangling does differ
+diff --git a/gdb/testsuite/gdb.base/gnu-ifunc-strstr-workaround.exp b/gdb/testsuite/gdb.base/gnu-ifunc-strstr-workaround.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/gnu-ifunc-strstr-workaround.exp
+@@ -0,0 +1,108 @@
++# Copyright (C) 2012 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++# Workaround for:
++# invalid IFUNC DW_AT_linkage_name: memmove strstr time
++# http://sourceware.org/bugzilla/show_bug.cgi?id=14166
++
++if {[skip_shlib_tests]} {
++    return 0
++}
++
++set testfile "gnu-ifunc-strstr-workaround"
++set executable ${testfile}
++set srcfile start.c
++set binfile [standard_output_file ${executable}]
++
++if [prepare_for_testing ${testfile}.exp $executable $srcfile] {
++    return -1
++}
++
++if ![runto_main] {
++    return 0
++}
++
++set test "ptype atoi"
++gdb_test_multiple $test $test {
++    -re "type = int \\(const char \\*\\)\r\n$gdb_prompt $" {
++	pass $test
++    }
++    -re "type = int \\(\\)\r\n$gdb_prompt $" {
++	untested "$test (no DWARF)"
++	return 0
++    }
++}
++
++set addr ""
++set test "print strstr"
++gdb_test_multiple $test $test {
++    -re " = {<text gnu-indirect-function variable, no debug info>} (0x\[0-9a-f\]+) <strstr>\r\n$gdb_prompt $" {
++	set addr $expect_out(1,string)
++	pass $test
++    }
++    -re " = {<text gnu-indirect-function variable, no debug info>} (0x\[0-9a-f\]+) <__strstr>\r\n$gdb_prompt $" {
++	set addr $expect_out(1,string)
++	pass "$test (GDB workaround)"
++    }
++    -re " = {<text gnu-indirect-function variable, no debug info>} (0x\[0-9a-f\]+) <__libc_strstr>\r\n$gdb_prompt $" {
++	set addr $expect_out(1,string)
++	pass "$test (fixed glibc)"
++    }
++    -re " = {char \\*\\(const char \\*, const char \\*\\)} 0x\[0-9a-f\]+ <strstr>\r\n$gdb_prompt $" {
++	untested "$test (gnu-ifunc not in use by glibc)"
++	return 0
++    }
++}
++
++set test "info sym"
++gdb_test_multiple "info sym $addr" $test {
++    -re "strstr in section \\.text of /lib\[^/\]*/libc.so.6\r\n$gdb_prompt $" {
++	pass $test
++    }
++    -re " = {char \\*\\(const char \\*, const char \\*\\)} 0x\[0-9a-f\]+ <strstr>\r\n$gdb_prompt $" {
++	# unexpected
++	xfail "$test (not in libc.so.6)"
++	return 0
++    }
++}
++
++set test "info addr strstr"
++gdb_test_multiple $test $test {
++    -re "Symbol \"strstr\" is a function at address $addr\\.\r\n$gdb_prompt $" {
++	fail "$test (DWARF for strstr)"
++    }
++    -re "Symbol \"strstr\" is at $addr in a file compiled without debugging\\.\r\n$gdb_prompt $" {
++	pass "$test"
++    }
++}
++
++set test "print strstr second time"
++gdb_test_multiple "print strstr" $test {
++    -re " = {<text gnu-indirect-function variable, no debug info>} $addr <strstr>\r\n$gdb_prompt $" {
++	pass $test
++    }
++    -re " = {<text gnu-indirect-function variable, no debug info>} $addr <__strstr>\r\n$gdb_prompt $" {
++	pass "$test (GDB workaround)"
++    }
++    -re " = {<text gnu-indirect-function variable, no debug info>} $addr <__libc_strstr>\r\n$gdb_prompt $" {
++	pass "$test (fixed glibc)"
++    }
++    -re " = {void \\*\\(void\\)} 0x\[0-9a-f\]+ <strstr>\r\n$gdb_prompt $" {
++	fail $test
++    }
++}
++
++gdb_test {print strstr("abc","b")} { = 0x[0-9a-f]+ "bc"}
++gdb_test {print strstr("def","e")} { = 0x[0-9a-f]+ "ef"}
diff --git a/SOURCES/gdb-gnat-dwarf-crash-3of3.patch b/SOURCES/gdb-gnat-dwarf-crash-3of3.patch
new file mode 100644
index 0000000..a20da46
--- /dev/null
+++ b/SOURCES/gdb-gnat-dwarf-crash-3of3.patch
@@ -0,0 +1,236 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-gnat-dwarf-crash-3of3.patch
+
+;; Fix crash of -readnow /usr/lib/debug/usr/bin/gnatbind.debug (BZ 1069211).
+;;=push+jan
+
+http://sourceware.org/ml/gdb-patches/2014-02/msg00731.html
+
+--6TrnltStXW4iwmi0
+Content-Type: text/plain; charset=us-ascii
+Content-Disposition: inline
+
+Hi,
+
+PR 16581:
+	GDB crash on inherit_abstract_dies infinite recursion
+	https://sourceware.org/bugzilla/show_bug.cgi?id=16581
+
+fixed crash from an infinite recursion.  But in rare cases the new code can
+now gdb_assert() due to weird DWARF file.
+
+I do not yet fully understand why the DWARF is as it is but just GDB should
+never crash due to invalid DWARF anyway.  The "invalid" DWARF I see only in
+Fedora GCC build, not in FSF GCC build, more info at:
+	https://bugzilla.redhat.com/show_bug.cgi?id=1069382
+	http://people.redhat.com/jkratoch/gcc-debuginfo-4.8.2-7.fc20.x86_64-gnatbind.debug
+
+Thanks,
+Jan
+
+--6TrnltStXW4iwmi0
+Content-Type: text/plain; charset=us-ascii
+Content-Disposition: inline; filename="complaint.patch"
+
+gdb/
+2014-02-24  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* dwarf2read.c (process_die): Change gdb_assert to complaint.
+
+diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
+--- a/gdb/dwarf2read.c
++++ b/gdb/dwarf2read.c
+@@ -10499,6 +10499,13 @@ private:
+ static void
+ process_die (struct die_info *die, struct dwarf2_cu *cu)
+ {
++  if (die->in_process)
++    {
++      complaint (_("DIE at 0x%s attempted to be processed twice"),
++		 sect_offset_str (die->sect_off));
++      return;
++    }
++
+   process_die_scope scope (die, cu);
+ 
+   switch (die->tag)
+diff --git a/gdb/infrun.c b/gdb/infrun.c
+--- a/gdb/infrun.c
++++ b/gdb/infrun.c
+@@ -607,6 +607,13 @@ holding the child stopped.  Try \"set detach-on-fork\" or \
+ 				target_pid_to_str (process_ptid));
+ 	    }
+ 
++#ifdef NEED_DETACH_SIGSTOP
++	  /* We should check PID_WAS_STOPPED and detach it stopped accordingly.
++	     In this point of code it cannot be 1 as we would not get FORK
++	     executed without CONTINUE first which resets PID_WAS_STOPPED.
++	     We would have to first TARGET_STOP and WAITPID it as with running
++	     inferior PTRACE_DETACH, SIGSTOP will ignore the signal.  */
++#endif
+ 	  target_detach (parent_inf, 0);
+ 	}
+ 
+diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c
+--- a/gdb/linux-nat.c
++++ b/gdb/linux-nat.c
+@@ -191,6 +191,12 @@ struct linux_nat_target *linux_target;
+ /* Does the current host support PTRACE_GETREGSET?  */
+ enum tribool have_ptrace_getregset = TRIBOOL_UNKNOWN;
+ 
++#ifdef NEED_DETACH_SIGSTOP
++/* PID of the inferior stopped by SIGSTOP before attaching (or zero).  */
++static pid_t pid_was_stopped;
++
++#endif
++
+ /* The saved to_close method, inherited from inf-ptrace.c.
+    Called by our to_close.  */
+ static void (*super_close) (struct target_ops *);
+@@ -1027,6 +1033,9 @@ linux_nat_post_attach_wait (ptid_t ptid, int *signalled)
+       if (debug_linux_nat)
+ 	fprintf_unfiltered (gdb_stdlog,
+ 			    "LNPAW: Attaching to a stopped process\n");
++#ifdef NEED_DETACH_SIGSTOP
++      pid_was_stopped = ptid.pid ();
++#endif
+ 
+       /* The process is definitely stopped.  It is in a job control
+ 	 stop, unless the kernel predates the TASK_STOPPED /
+@@ -1359,6 +1368,25 @@ get_detach_signal (struct lwp_info *lp)
+       return gdb_signal_to_host (signo);
+     }
+ 
++#ifdef NEED_DETACH_SIGSTOP
++  /* Workaround RHEL-5 kernel which has unreliable PTRACE_DETACH, SIGSTOP (that
++     many TIDs are left unstopped).  See RH Bug 496732.  */
++  if (lp->ptid.pid () == pid_was_stopped)
++    {
++      int err;
++
++      errno = 0;
++      err = kill_lwp (lp->ptid.lwp (), SIGSTOP);
++      if (debug_linux_nat)
++	{
++	  fprintf_unfiltered (gdb_stdlog,
++			      "SC:  lwp kill %d %s\n",
++			      err,
++			      errno ? safe_strerror (errno) : "ERRNO-OK");
++	}
++    }
++
++#endif
+   return 0;
+ }
+ 
+@@ -1507,6 +1535,10 @@ linux_nat_target::detach (inferior *inf, int from_tty)
+       detach_one_lwp (main_lwp, &signo);
+ 
+       detach_success (inf);
++
++#ifdef NEED_DETACH_SIGSTOP
++      pid_was_stopped = 0;
++#endif
+     }
+ }
+ 
+@@ -1765,6 +1797,16 @@ linux_nat_target::resume (ptid_t ptid, int step, enum gdb_signal signo)
+       return;
+     }
+ 
++#ifdef NEED_DETACH_SIGSTOP
++  /* At this point, we are going to resume the inferior and if we
++     have attached to a stopped process, we no longer should leave
++     it as stopped if the user detaches.  PTID variable has PID set to LWP
++     while we need to check the real PID here.  */
++
++  if (!step && lp && pid_was_stopped == lp->ptid.pid ())
++    pid_was_stopped = 0;
++
++#endif
+   if (resume_many)
+     iterate_over_lwps (ptid, linux_nat_resume_callback, lp);
+ 
+@@ -3761,6 +3803,10 @@ linux_nat_target::mourn_inferior ()
+ 
+   /* Let the arch-specific native code know this process is gone.  */
+   linux_target->low_forget_process (pid);
++#ifdef NEED_DETACH_SIGSTOP
++
++  pid_was_stopped = 0;
++#endif
+ }
+ 
+ /* Convert a native/host siginfo object, into/from the siginfo in the
+diff --git a/gdb/testsuite/gdb.threads/attach-stopped.exp b/gdb/testsuite/gdb.threads/attach-stopped.exp
+--- a/gdb/testsuite/gdb.threads/attach-stopped.exp
++++ b/gdb/testsuite/gdb.threads/attach-stopped.exp
+@@ -56,7 +56,65 @@ proc corefunc { threadtype } {
+     gdb_reinitialize_dir $srcdir/$subdir
+     gdb_load ${binfile}
+ 
+-    # Verify that we can attach to the stopped process.
++    # Verify that we can attach to the process by first giving its
++    # executable name via the file command, and using attach with the
++    # process ID.
++
++    set test "$threadtype: set file, before attach1 to stopped process"
++    gdb_test_multiple "file $binfile" "$test" {
++       -re "Load new symbol table from.*y or n. $" {
++	    gdb_test "y" "Reading symbols from $escapedbinfile\.\.\.*done." \
++		    "$test (re-read)"
++	}
++	-re "Reading symbols from $escapedbinfile\.\.\.*done.*$gdb_prompt $" {
++	    pass "$test"
++	}
++    }
++
++    set test "$threadtype: attach1 to stopped, after setting file"
++    gdb_test_multiple "attach $testpid" "$test" {
++	-re "Attaching to program.*`?$escapedbinfile'?, process $testpid.*$gdb_prompt $" {
++	    pass "$test"
++	}
++    }
++
++    # ".*sleep.*clone.*" would fail on s390x as bt stops at START_THREAD there.
++    if {[string equal $threadtype threaded]} {
++	gdb_test "thread apply all bt" ".*sleep.*start_thread.*" "$threadtype: attach1 to stopped bt"
++    } else {
++	gdb_test "bt" ".*sleep.*main.*" "$threadtype: attach1 to stopped bt"
++    }
++
++    # Exit and detach the process.
++       
++    gdb_exit
++
++    # Avoid some race:
++    sleep 2
++
++    if [catch {open /proc/${testpid}/status r} fileid] {
++	set line2 "NOTFOUND"
++    } else {
++	gets $fileid line1;
++	gets $fileid line2;
++	close $fileid;
++    }
++
++    set test "$threadtype: attach1, exit leaves process stopped"
++    if {[string match "*(stopped)*" $line2]} {
++      pass $test
++    } else {
++      fail $test
++    }
++
++    # At this point, the process should still be stopped
++
++    gdb_start
++    gdb_reinitialize_dir $srcdir/$subdir
++    gdb_load ${binfile}
++
++    # Verify that we can attach to the process just by giving the
++    # process ID.
+        
+     set test "$threadtype: attach2 to stopped, after setting file"
+     gdb_test_multiple "attach $testpid" "$test" {
diff --git a/SOURCES/gdb-gstack.man b/SOURCES/gdb-gstack.man
new file mode 100644
index 0000000..1f4e406
--- /dev/null
+++ b/SOURCES/gdb-gstack.man
@@ -0,0 +1,48 @@
+.\"
+.\" gstack manual page.
+.\" Copyright (c) 1999 Ross Thompson
+.\" Copyright (c) 2001, 2002, 2004, 2008 Red Hat, Inc.
+.\"
+.\" Original author: Ross Thompson <ross@whatsis.com>
+.\"
+.\" 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 2, 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 COPYING.  If not, write to
+.\" the Free Software Foundation, 59 Temple Place - Suite 330,
+.\" Boston, MA 02111-1307, USA.
+.\"
+.TH GSTACK 1 "Feb 15 2008" "Red Hat Linux" "Linux Programmer's Manual"
+
+.SH NAME
+gstack \- print a stack trace of a running process
+
+.SH SYNOPSIS
+.B gstack
+pid
+
+.SH DESCRIPTION
+
+\f3gstack\f1 attaches to the active process named by the \f3pid\f1 on
+the command line, and prints out an execution stack trace.  If ELF
+symbols exist in the binary (usually the case unless you have run
+strip(1)), then symbolic addresses are printed as well.
+
+If the process is part of a thread group, then \f3gstack\f1 will print
+out a stack trace for each of the threads in the group.
+
+.SH SEE ALSO
+nm(1), ptrace(2), gdb(1)
+
+.SH AUTHORS
+Ross Thompson <ross@whatsis.com>
+
+Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
diff --git a/SOURCES/gdb-jit-reader-multilib.patch b/SOURCES/gdb-jit-reader-multilib.patch
new file mode 100644
index 0000000..2aa41c2
--- /dev/null
+++ b/SOURCES/gdb-jit-reader-multilib.patch
@@ -0,0 +1,46 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-jit-reader-multilib.patch
+
+;; Fix jit-reader.h for multi-lib.
+;;=push+jan
+
+diff --git a/gdb/configure b/gdb/configure
+--- a/gdb/configure
++++ b/gdb/configure
+@@ -9680,10 +9680,12 @@ _ACEOF
+ 
+ 
+ 
+-if test "x${ac_cv_sizeof_unsigned_long}" = "x8"; then
+-  TARGET_PTR="unsigned long"
+-elif test "x${ac_cv_sizeof_unsigned_long_long}" = "x8"; then
++# Try to keep TARGET_PTR the same across archs so that jit-reader.h file
++# content is the same for multilib distributions.
++if test "x${ac_cv_sizeof_unsigned_long_long}" = "x8"; then
+   TARGET_PTR="unsigned long long"
++elif test "x${ac_cv_sizeof_unsigned_long}" = "x8"; then
++  TARGET_PTR="unsigned long"
+ elif test "x${ac_cv_sizeof_unsigned___int128}" = "x16"; then
+   TARGET_PTR="unsigned __int128"
+ else
+diff --git a/gdb/configure.ac b/gdb/configure.ac
+--- a/gdb/configure.ac
++++ b/gdb/configure.ac
+@@ -843,10 +843,12 @@ AC_CHECK_SIZEOF(unsigned long long)
+ AC_CHECK_SIZEOF(unsigned long)
+ AC_CHECK_SIZEOF(unsigned __int128)
+ 
+-if test "x${ac_cv_sizeof_unsigned_long}" = "x8"; then
+-  TARGET_PTR="unsigned long"
+-elif test "x${ac_cv_sizeof_unsigned_long_long}" = "x8"; then
++# Try to keep TARGET_PTR the same across archs so that jit-reader.h file
++# content is the same for multilib distributions.
++if test "x${ac_cv_sizeof_unsigned_long_long}" = "x8"; then
+   TARGET_PTR="unsigned long long"
++elif test "x${ac_cv_sizeof_unsigned_long}" = "x8"; then
++  TARGET_PTR="unsigned long"
+ elif test "x${ac_cv_sizeof_unsigned___int128}" = "x16"; then
+   TARGET_PTR="unsigned __int128"
+ else
diff --git a/SOURCES/gdb-libexec-add-index.patch b/SOURCES/gdb-libexec-add-index.patch
new file mode 100644
index 0000000..7856866
--- /dev/null
+++ b/SOURCES/gdb-libexec-add-index.patch
@@ -0,0 +1,23 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-libexec-add-index.patch
+
+;; Fix gdb-headless /usr/bin/ executables (BZ 1390251).
+;;=fedora
+
+diff --git a/gdb/contrib/gdb-add-index.sh b/gdb/contrib/gdb-add-index.sh
+--- a/gdb/contrib/gdb-add-index.sh
++++ b/gdb/contrib/gdb-add-index.sh
+@@ -21,6 +21,11 @@
+ GDB=${GDB:=gdb}
+ OBJCOPY=${OBJCOPY:=objcopy}
+ 
++GDB2=/usr/libexec/gdb
++if test -x $GDB2 && ! which $GDB &>/dev/null; then
++    GDB=$GDB2
++fi
++
+ myname="${0##*/}"
+ 
+ dwarf5=""
diff --git a/SOURCES/gdb-lineno-makeup-test.patch b/SOURCES/gdb-lineno-makeup-test.patch
new file mode 100644
index 0000000..313421d
--- /dev/null
+++ b/SOURCES/gdb-lineno-makeup-test.patch
@@ -0,0 +1,165 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-lineno-makeup-test.patch
+
+;; Testcase for "Do not make up line information" fix by Daniel Jacobowitz.
+;;=fedoratest
+
+New testcase for:
+https://bugzilla.redhat.com/show_bug.cgi?id=466222
+	(for the first / customer recommended fix)
+and the upstream fix:
+http://sourceware.org/ml/gdb-patches/2006-11/msg00253.html
+	[rfc] Do not make up line information
+http://sourceware.org/ml/gdb-cvs/2006-11/msg00127.html
+
+diff --git a/gdb/testsuite/gdb.base/lineno-makeup-func.c b/gdb/testsuite/gdb.base/lineno-makeup-func.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/lineno-makeup-func.c
+@@ -0,0 +1,21 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2009 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++void
++func (void)
++{
++}
+diff --git a/gdb/testsuite/gdb.base/lineno-makeup.c b/gdb/testsuite/gdb.base/lineno-makeup.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/lineno-makeup.c
+@@ -0,0 +1,35 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2009 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++/* DW_AT_low_pc-DW_AT_high_pc should cover the function without line number
++   information (.debug_line) so we cannot use an external object file.
++   
++   It must not be just a label as it would alias on the next function even for
++   correct GDB.  Therefore some stub data must be placed there.
++   
++   We need to provide a real stub function body as at least s390
++   (s390_analyze_prologue) would skip the whole body till reaching `main'.  */
++
++extern void func (void);
++asm ("func: .incbin \"" BINFILENAME "\"");
++
++int
++main (void)
++{
++  func ();
++  return 0;
++}
+diff --git a/gdb/testsuite/gdb.base/lineno-makeup.exp b/gdb/testsuite/gdb.base/lineno-makeup.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/lineno-makeup.exp
+@@ -0,0 +1,78 @@
++# Copyright 2009 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++set testfile "lineno-makeup"
++set srcfuncfile ${testfile}-func.c
++set srcfile ${testfile}.c
++set objfuncfile [standard_output_file ${testfile}-func.o]
++set binfuncfile [standard_output_file ${testfile}-func.bin]
++set binfile [standard_output_file ${testfile}]
++
++if { [gdb_compile "${srcdir}/${subdir}/${srcfuncfile}" "${objfuncfile}" object {}] != "" } {
++    gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
++}
++
++set objcopy [catch "exec objcopy -O binary --only-section .text ${objfuncfile} ${binfuncfile}" output]
++verbose -log "objcopy=$objcopy: $output"
++if { $objcopy != 0 } {
++    gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
++}
++set binfuncfilesize [file size $binfuncfile]
++verbose -log "file size $binfuncfile = $binfuncfilesize"
++
++if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug additional_flags=-DBINFILENAME=\"$binfuncfile\"]] != "" } {
++    gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
++}
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++gdb_load ${binfile}
++
++set b_addr ""
++set test "break func"
++gdb_test_multiple $test $test {
++    -re "Breakpoint \[0-9\]+ at (0x\[0-9a-f\]+)\r\n$gdb_prompt $" {
++	set b_addr $expect_out(1,string)
++	pass $test
++    }
++    -re "Breakpoint \[0-9\]+ at (0x\[0-9a-f\]+): .*\r\n$gdb_prompt $" {
++	set b_addr $expect_out(1,string)
++	fail $test
++    }
++}
++verbose -log "b_addr=<$b_addr>"
++
++set p_addr ""
++set test "print func"
++gdb_test_multiple $test $test {
++    -re "\\$\[0-9\]+ = {<text variable, no debug info>} (0x\[0-9a-f\]+) <func>\r\n$gdb_prompt $" {
++	set p_addr $expect_out(1,string)
++	pass $test
++    }
++}
++verbose -log "p_addr=<$p_addr>"
++
++set test "break address belongs to func"
++if {$b_addr == $p_addr} {
++    pass "$test (exact match)"
++} else {
++    set skip [expr $b_addr - $p_addr]
++    if {$skip > 0 && $skip < $binfuncfilesize} {
++	pass "$test (prologue skip by $skip bytes)"
++    } else {
++	fail $test
++    }
++}
diff --git a/SOURCES/gdb-linux_perf-bundle.patch b/SOURCES/gdb-linux_perf-bundle.patch
new file mode 100644
index 0000000..c7533f7
--- /dev/null
+++ b/SOURCES/gdb-linux_perf-bundle.patch
@@ -0,0 +1,236 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-linux_perf-bundle.patch
+
+;; [dts+el7] [x86*] Bundle linux_perf.h for libipt (RH BZ 1256513).
+;;=fedora
+
+diff --git a/gdb/configure b/gdb/configure
+--- a/gdb/configure
++++ b/gdb/configure
+@@ -12059,7 +12059,7 @@ else
+ 
+ #include <linux/perf_event.h>
+ #ifndef PERF_ATTR_SIZE_VER5
+-# error
++// error // PERF_ATTR_SIZE_VER5_BUNDLE is not available here - Fedora+RHEL
+ #endif
+ 
+ _ACEOF
+diff --git a/gdb/configure.ac b/gdb/configure.ac
+--- a/gdb/configure.ac
++++ b/gdb/configure.ac
+@@ -1477,7 +1477,7 @@ else
+   AC_PREPROC_IFELSE([AC_LANG_SOURCE([[
+ #include <linux/perf_event.h>
+ #ifndef PERF_ATTR_SIZE_VER5
+-# error
++// error // PERF_ATTR_SIZE_VER5_BUNDLE is not available here - Fedora+RHEL
+ #endif
+   ]])], [perf_event=yes], [perf_event=no])
+   if test "$perf_event" != yes; then
+diff --git a/gdb/gdb.c b/gdb/gdb.c
+--- a/gdb/gdb.c
++++ b/gdb/gdb.c
+@@ -20,11 +20,19 @@
+ #include "main.h"
+ #include "interps.h"
+ 
++#ifdef PERF_ATTR_SIZE_VER5_BUNDLE
++extern "C" void __libipt_init(void);
++#endif
++
+ int
+ main (int argc, char **argv)
+ {
+   struct captured_main_args args;
+ 
++#ifdef PERF_ATTR_SIZE_VER5_BUNDLE
++  __libipt_init();
++#endif
++
+   memset (&args, 0, sizeof args);
+   args.argc = argc;
+   args.argv = argv;
+diff --git a/gdb/nat/linux-btrace.h b/gdb/nat/linux-btrace.h
+--- a/gdb/nat/linux-btrace.h
++++ b/gdb/nat/linux-btrace.h
+@@ -28,6 +28,177 @@
+ #  include <linux/perf_event.h>
+ #endif
+ 
++#ifdef PERF_ATTR_SIZE_VER5_BUNDLE
++#ifndef HAVE_LINUX_PERF_EVENT_H
++# error "PERF_ATTR_SIZE_VER5_BUNDLE && !HAVE_LINUX_PERF_EVENT_H"
++#endif
++#ifndef PERF_ATTR_SIZE_VER5
++#define PERF_ATTR_SIZE_VER5
++#define perf_event_mmap_page perf_event_mmap_page_bundle
++// kernel-headers-3.10.0-493.el7.x86_64/usr/include/linux/perf_event.h
++/*
++ * Structure of the page that can be mapped via mmap
++ */
++struct perf_event_mmap_page {
++	__u32	version;		/* version number of this structure */
++	__u32	compat_version;		/* lowest version this is compat with */
++
++	/*
++	 * Bits needed to read the hw events in user-space.
++	 *
++	 *   u32 seq, time_mult, time_shift, index, width;
++	 *   u64 count, enabled, running;
++	 *   u64 cyc, time_offset;
++	 *   s64 pmc = 0;
++	 *
++	 *   do {
++	 *     seq = pc->lock;
++	 *     barrier()
++	 *
++	 *     enabled = pc->time_enabled;
++	 *     running = pc->time_running;
++	 *
++	 *     if (pc->cap_usr_time && enabled != running) {
++	 *       cyc = rdtsc();
++	 *       time_offset = pc->time_offset;
++	 *       time_mult   = pc->time_mult;
++	 *       time_shift  = pc->time_shift;
++	 *     }
++	 *
++	 *     index = pc->index;
++	 *     count = pc->offset;
++	 *     if (pc->cap_user_rdpmc && index) {
++	 *       width = pc->pmc_width;
++	 *       pmc = rdpmc(index - 1);
++	 *     }
++	 *
++	 *     barrier();
++	 *   } while (pc->lock != seq);
++	 *
++	 * NOTE: for obvious reason this only works on self-monitoring
++	 *       processes.
++	 */
++	__u32	lock;			/* seqlock for synchronization */
++	__u32	index;			/* hardware event identifier */
++	__s64	offset;			/* add to hardware event value */
++	__u64	time_enabled;		/* time event active */
++	__u64	time_running;		/* time event on cpu */
++	union {
++		__u64	capabilities;
++		struct {
++			__u64	cap_bit0		: 1, /* Always 0, deprecated, see commit 860f085b74e9 */
++				cap_bit0_is_deprecated	: 1, /* Always 1, signals that bit 0 is zero */
++
++				cap_user_rdpmc		: 1, /* The RDPMC instruction can be used to read counts */
++				cap_user_time		: 1, /* The time_* fields are used */
++				cap_user_time_zero	: 1, /* The time_zero field is used */
++				cap_____res		: 59;
++		};
++	};
++
++	/*
++	 * If cap_user_rdpmc this field provides the bit-width of the value
++	 * read using the rdpmc() or equivalent instruction. This can be used
++	 * to sign extend the result like:
++	 *
++	 *   pmc <<= 64 - width;
++	 *   pmc >>= 64 - width; // signed shift right
++	 *   count += pmc;
++	 */
++	__u16	pmc_width;
++
++	/*
++	 * If cap_usr_time the below fields can be used to compute the time
++	 * delta since time_enabled (in ns) using rdtsc or similar.
++	 *
++	 *   u64 quot, rem;
++	 *   u64 delta;
++	 *
++	 *   quot = (cyc >> time_shift);
++	 *   rem = cyc & (((u64)1 << time_shift) - 1);
++	 *   delta = time_offset + quot * time_mult +
++	 *              ((rem * time_mult) >> time_shift);
++	 *
++	 * Where time_offset,time_mult,time_shift and cyc are read in the
++	 * seqcount loop described above. This delta can then be added to
++	 * enabled and possible running (if index), improving the scaling:
++	 *
++	 *   enabled += delta;
++	 *   if (index)
++	 *     running += delta;
++	 *
++	 *   quot = count / running;
++	 *   rem  = count % running;
++	 *   count = quot * enabled + (rem * enabled) / running;
++	 */
++	__u16	time_shift;
++	__u32	time_mult;
++	__u64	time_offset;
++	/*
++	 * If cap_usr_time_zero, the hardware clock (e.g. TSC) can be calculated
++	 * from sample timestamps.
++	 *
++	 *   time = timestamp - time_zero;
++	 *   quot = time / time_mult;
++	 *   rem  = time % time_mult;
++	 *   cyc = (quot << time_shift) + (rem << time_shift) / time_mult;
++	 *
++	 * And vice versa:
++	 *
++	 *   quot = cyc >> time_shift;
++	 *   rem  = cyc & (((u64)1 << time_shift) - 1);
++	 *   timestamp = time_zero + quot * time_mult +
++	 *               ((rem * time_mult) >> time_shift);
++	 */
++	__u64	time_zero;
++	__u32	size;			/* Header size up to __reserved[] fields. */
++
++		/*
++		 * Hole for extension of the self monitor capabilities
++		 */
++
++	__u8	__reserved[118*8+4];	/* align to 1k. */
++
++	/*
++	 * Control data for the mmap() data buffer.
++	 *
++	 * User-space reading the @data_head value should issue an smp_rmb(),
++	 * after reading this value.
++	 *
++	 * When the mapping is PROT_WRITE the @data_tail value should be
++	 * written by userspace to reflect the last read data, after issueing
++	 * an smp_mb() to separate the data read from the ->data_tail store.
++	 * In this case the kernel will not over-write unread data.
++	 *
++	 * See perf_output_put_handle() for the data ordering.
++	 *
++	 * data_{offset,size} indicate the location and size of the perf record
++	 * buffer within the mmapped area.
++	 */
++	__u64   data_head;		/* head in the data section */
++	__u64	data_tail;		/* user-space written tail */
++	__u64	data_offset;		/* where the buffer starts */
++	__u64	data_size;		/* data buffer size */
++
++	/*
++	 * AUX area is defined by aux_{offset,size} fields that should be set
++	 * by the userspace, so that
++	 *
++	 *   aux_offset >= data_offset + data_size
++	 *
++	 * prior to mmap()ing it. Size of the mmap()ed area should be aux_size.
++	 *
++	 * Ring buffer pointers aux_{head,tail} have the same semantics as
++	 * data_{head,tail} and same ordering rules apply.
++	 */
++	__u64	aux_head;
++	__u64	aux_tail;
++	__u64	aux_offset;
++	__u64	aux_size;
++};
++#endif // PERF_ATTR_SIZE_VER5
++#endif // PERF_ATTR_SIZE_VER5_BUNDLE
++
+ struct target_ops;
+ 
+ #if HAVE_LINUX_PERF_EVENT_H
diff --git a/SOURCES/gdb-moribund-utrace-workaround.patch b/SOURCES/gdb-moribund-utrace-workaround.patch
new file mode 100644
index 0000000..f41e4fb
--- /dev/null
+++ b/SOURCES/gdb-moribund-utrace-workaround.patch
@@ -0,0 +1,25 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-moribund-utrace-workaround.patch
+
+;; Workaround non-stop moribund locations exploited by kernel utrace (BZ 590623).
+;;=push+jan: Currently it is still not fully safe.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=590623
+http://sources.redhat.com/bugzilla/show_bug.cgi?id=11593
+
+Bug in FSF GDB exploited by the ptrace-on-utrace interaction.
+
+diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
+--- a/gdb/breakpoint.c
++++ b/gdb/breakpoint.c
+@@ -12016,6 +12016,8 @@ update_global_location_list (enum ugll_insert_mode insert_mode)
+ 		 traps we can no longer explain.  */
+ 
+ 	      old_loc->events_till_retirement = 3 * (thread_count () + 1);
++	      /* Red Hat Bug 590623.  */
++	      old_loc->events_till_retirement *= 10;
+ 	      old_loc->owner = NULL;
+ 
+ 	      VEC_safe_push (bp_location_p, moribund_locations, old_loc);
diff --git a/SOURCES/gdb-opcodes-clflushopt-test.patch b/SOURCES/gdb-opcodes-clflushopt-test.patch
new file mode 100644
index 0000000..f95999e
--- /dev/null
+++ b/SOURCES/gdb-opcodes-clflushopt-test.patch
@@ -0,0 +1,62 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-opcodes-clflushopt-test.patch
+
+;; Test clflushopt instruction decode (for RH BZ 1262471).
+;;=fedoratest
+
+diff --git a/gdb/testsuite/gdb.arch/amd64-clflushopt.S b/gdb/testsuite/gdb.arch/amd64-clflushopt.S
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.arch/amd64-clflushopt.S
+@@ -0,0 +1,19 @@
++/* Copyright 2016 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++   This file is part of the gdb testsuite.  */
++
++_start:	.globl	_start
++	clflushopt (%edi)
+diff --git a/gdb/testsuite/gdb.arch/amd64-clflushopt.exp b/gdb/testsuite/gdb.arch/amd64-clflushopt.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.arch/amd64-clflushopt.exp
+@@ -0,0 +1,25 @@
++# Copyright 2016 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++if { ![istarget "x86_64-*-*"] && ![istarget "i?86-*-*"] } then {
++    verbose "Skipping amd64 clflushopt test."
++    return
++}
++
++if [prepare_for_testing amd64-clflushopt.exp amd64-clflushopt amd64-clflushopt.S [list debug "additional_flags=-nostdlib"]] {
++    return -1
++}
++
++gdb_test "disas _start" "Dump of assembler code for function _start:\r\n *0x\[0-9a-f\]+ <\[+\]0>:\tclflushopt \\(%edi\\)\r\nEnd of assembler dump\\." "clflushopt"
diff --git a/SOURCES/gdb-orphanripper.c b/SOURCES/gdb-orphanripper.c
new file mode 100644
index 0000000..2653dd2
--- /dev/null
+++ b/SOURCES/gdb-orphanripper.c
@@ -0,0 +1,752 @@
+/*
+ * Copyright 2006-2007 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 2 of the License, 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; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Reap any leftover children possibly holding file descriptors.
+ * Children are identified by the stale file descriptor or PGID / SID.
+ * Both can be missed but only the stale file descriptors are important for us.
+ * PGID / SID may be set by the children on their own.
+ * If we fine a candidate we kill it will all its process tree (grandchildren).
+ * The child process is run with `2>&1' redirection (due to forkpty(3)).
+ * 2007-07-10  Jan Kratochvil  <jan.kratochvil@redhat.com>
+ */
+
+/* For getpgid(2).  */
+#define _GNU_SOURCE 1
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <errno.h>
+#include <ctype.h>
+#include <string.h>
+#include <limits.h>
+#include <fcntl.h>
+#include <assert.h>
+#include <pty.h>
+#include <poll.h>
+#include <sys/stat.h>
+
+#define LENGTH(x) (sizeof (x) / sizeof (*(x)))
+
+static const char *progname;
+
+static volatile pid_t child;
+
+static void signal_chld (int signo)
+{
+}
+
+static volatile int signal_alrm_hit = 0;
+
+static void signal_alrm (int signo)
+{
+  signal_alrm_hit = 1;
+}
+
+static char childptyname[LINE_MAX];
+
+static void print_child_error (const char *reason, char **argv)
+{
+  char **sp;
+
+  fprintf (stderr, "%s: %d %s:", progname, (int) child, reason);
+  for (sp = argv; *sp != NULL; sp++)
+    {
+      fputc (' ', stderr);
+      fputs (*sp, stderr);
+    }
+  fputc ('\n', stderr);
+}
+
+static int read_out (int amaster)
+{
+  char buf[LINE_MAX];
+  ssize_t buf_got;
+
+  buf_got = read (amaster, buf, sizeof buf);
+  if (buf_got == 0)
+    return 0;
+  /* Weird but at least after POLLHUP we get EIO instead of just EOF.  */
+  if (buf_got == -1 && errno == EIO)
+    return 0;
+  if (buf_got == -1 && errno == EAGAIN)
+    return 0;
+  if (buf_got < 0)
+    {
+      perror ("read (amaster)");
+      exit (EXIT_FAILURE);
+    }
+  if (write (STDOUT_FILENO, buf, buf_got) != buf_got)
+    {
+      perror ("write(2)");
+      exit (EXIT_FAILURE);
+    }
+  return 1;
+}
+
+/* kill (child, 0) == 0 sometimes even when CHILD's state is already "Z".  */
+
+static int child_exited (void)
+{
+  char buf[200];
+  int fd, i, retval;
+  ssize_t got;
+  char state[3];
+
+  snprintf (buf, sizeof (buf), "/proc/%ld/stat", (long) child);
+  fd = open (buf, O_RDONLY);
+  if (fd == -1)
+    {
+      perror ("open (/proc/CHILD/stat)");
+      exit (EXIT_FAILURE);
+    }
+  got = read (fd, buf, sizeof(buf));
+  if (got <= 0)
+    {
+      perror ("read (/proc/CHILD/stat)");
+      exit (EXIT_FAILURE);
+    }
+  if (close (fd) != 0)
+    {
+      perror ("close (/proc/CHILD/stat)");
+      exit (EXIT_FAILURE);
+    }
+  /* RHEL-5 does not support %ms.  */
+  i = sscanf (buf, "%*d%*s%2s", state);
+  if (i != 1)
+    {
+      perror ("sscanf (/proc/CHILD/stat)");
+      exit (EXIT_FAILURE);
+    }
+  retval = strcmp (state, "Z") == 0;
+  return retval;
+}
+
+static int spawn (char **argv, int timeout)
+{
+  pid_t child_got;
+  int status, amaster, i, rc;
+  struct sigaction act;
+  sigset_t set;
+  struct termios termios;
+  unsigned alarm_orig;
+
+  /* We do not use signal(2) to be sure we do not have SA_RESTART.  */
+  memset (&act, 0, sizeof (act));
+  act.sa_handler = signal_chld;
+  i = sigemptyset (&act.sa_mask);
+  assert (i == 0);
+  act.sa_flags = 0;	/* !SA_RESTART */
+  i = sigaction (SIGCHLD, &act, NULL);
+  assert (i == 0);
+
+  i = sigemptyset (&set);
+  assert (i == 0);
+  i = sigaddset (&set, SIGCHLD);
+  assert (i == 0);
+  i = sigprocmask (SIG_SETMASK, &set, NULL);
+  assert (i == 0);
+
+  /* With TERMP passed as NULL we get "\n" -> "\r\n".  */
+  termios.c_iflag = IGNBRK | IGNPAR;
+  termios.c_oflag = 0;
+  termios.c_cflag = CS8 | CREAD | CLOCAL | HUPCL | B9600;
+  termios.c_lflag = IEXTEN | NOFLSH;
+  memset (termios.c_cc, _POSIX_VDISABLE, sizeof (termios.c_cc));
+  termios.c_cc[VTIME] = 0;
+  termios.c_cc[VMIN ] = 1;
+  cfmakeraw (&termios);
+#ifdef FLUSHO
+  /* Workaround a readline deadlock bug in _get_tty_settings().  */
+  termios.c_lflag &= ~FLUSHO;
+#endif
+  child = forkpty (&amaster, childptyname, &termios, NULL);
+  switch (child)
+    {
+      case -1:
+	perror ("forkpty(3)");
+	exit (EXIT_FAILURE);
+      case 0:
+	/* Do not replace STDIN as inferiors query its termios.  */
+#if 0
+	i = close (STDIN_FILENO);
+	assert (i == 0);
+	i = open ("/dev/null", O_RDONLY);
+	assert (i == STDIN_FILENO);
+#endif
+
+	i = sigemptyset (&set);
+	assert (i == 0);
+	i = sigprocmask (SIG_SETMASK, &set, NULL);
+	assert (i == 0);
+
+	/* Do not setpgrp(2) in the parent process as the process-group
+	   is shared for the whole sh(1) pipeline we could be a part
+	   of.  The process-group is set according to PID of the first
+	   command in the pipeline.
+	   We would rip even vi(1) in the case of:
+		./orphanripper sh -c 'sleep 1&' | vi -
+	   */
+	/* Do not setpgrp(2) as our pty would not be ours and we would
+	   get `SIGSTOP' later, particularly after spawning gdb(1).
+	   setsid(3) was already executed by forkpty(3) and it would fail if
+	   executed again.  */
+	if (getpid() != getpgrp ())
+	  {
+	    perror ("getpgrp(2)");
+	    exit (EXIT_FAILURE);
+	  }
+	execvp (argv[0], argv);
+	perror ("execvp(2)");
+	exit (EXIT_FAILURE);
+      default:
+	break;
+    }
+  i = fcntl (amaster, F_SETFL, O_RDWR | O_NONBLOCK);
+  if (i != 0)
+    {
+      perror ("fcntl (amaster, F_SETFL, O_NONBLOCK)");
+      exit (EXIT_FAILURE);
+    }
+
+  /* We do not use signal(2) to be sure we do not have SA_RESTART.  */
+  act.sa_handler = signal_alrm;
+  i = sigaction (SIGALRM, &act, NULL);
+  assert (i == 0);
+
+  alarm_orig = alarm (timeout);
+  assert (alarm_orig == 0);
+
+  i = sigemptyset (&set);
+  assert (i == 0);
+
+  while (!signal_alrm_hit)
+    {
+      struct pollfd pollfd;
+
+      pollfd.fd = amaster;
+      pollfd.events = POLLIN;
+      i = ppoll (&pollfd, 1, NULL, &set);
+      if (i == -1 && errno == EINTR)
+	{
+	  if (child_exited ())
+	    break;
+	  /* Non-CHILD child may have exited.  */
+	  continue;
+	}
+      assert (i == 1);
+      /* Data available?  Process it first.  */
+      if (pollfd.revents & POLLIN)
+	{
+	  if (!read_out (amaster))
+	    {
+	      fprintf (stderr, "%s: Unexpected EOF\n", progname);
+	      exit (EXIT_FAILURE);
+	    }
+	}
+      if (pollfd.revents & POLLHUP)
+        break;
+      if ((pollfd.revents &= ~POLLIN) != 0)
+	{
+	  fprintf (stderr, "%s: ppoll(2): revents 0x%x\n", progname,
+		   (unsigned) pollfd.revents);
+	  exit (EXIT_FAILURE);
+	}
+      /* Child exited?  */
+      if (child_exited ())
+	break;
+    }
+
+  if (signal_alrm_hit)
+    {
+      i = kill (child, SIGKILL);
+      assert (i == 0);
+    }
+  else
+    alarm (0);
+
+  /* WNOHANG still could fail.  */
+  child_got = waitpid (child, &status, 0);
+  if (child != child_got)
+    {
+      fprintf (stderr, "waitpid (%d) = %d: %m\n", (int) child, (int) child_got);
+      exit (EXIT_FAILURE);
+    }
+  if (signal_alrm_hit)
+    {
+      char *buf;
+
+      if (asprintf (&buf, "Timed out after %d seconds", timeout) != -1)
+	{
+	  print_child_error (buf, argv);
+	  free (buf);
+	}
+      rc = 128 + SIGALRM;
+    }
+  else if (WIFEXITED (status))
+    rc = WEXITSTATUS (status);
+  else if (WIFSIGNALED (status))
+    {
+      print_child_error (strsignal (WTERMSIG (status)), argv);
+      rc = 128 + WTERMSIG (status);
+    }
+  else if (WIFSTOPPED (status))
+    {
+      fprintf (stderr, "waitpid (%d): WIFSTOPPED - WSTOPSIG is %d\n",
+	       (int) child, WSTOPSIG (status));
+      exit (EXIT_FAILURE);
+    }
+  else
+    {
+      fprintf (stderr, "waitpid (%d): !WIFEXITED (%d)\n", (int) child, status);
+      exit (EXIT_FAILURE);
+    }
+
+  /* Not used in fact.  */
+  i = sigprocmask (SIG_SETMASK, &set, NULL);
+  assert (i == 0);
+
+  /* Do not unset O_NONBLOCK as a stale child (the whole purpose of this
+     program) having open its output pty would block us in read_out.  */
+#if 0
+  i = fcntl (amaster, F_SETFL, O_RDONLY /* !O_NONBLOCK */);
+  if (i != 0)
+    {
+      perror ("fcntl (amaster, F_SETFL, O_RDONLY /* !O_NONBLOCK */)");
+      exit (EXIT_FAILURE);
+    }
+#endif
+
+  while (read_out (amaster));
+
+  /* Do not close the master FD as the child would have `/dev/pts/23 (deleted)'
+     entries which are not expected (and expecting ` (deleted)' would be
+     a race.  */
+#if 0
+  i = close (amaster);
+  if (i != 0)
+    {
+      perror ("close (forkpty ()'s amaster)");
+      exit (EXIT_FAILURE);
+    }
+#endif
+
+  return rc;
+}
+
+/* Detected commandline may look weird due to a race:
+   Original command:
+	./orphanripper sh -c 'sleep 1&' &
+   Correct output:
+	[1] 29610
+	./orphanripper: Killed -9 orphan PID 29612 (PGID 29611): sleep 1
+   Raced output (sh(1) child still did not update its argv[]):
+	[1] 29613
+	./orphanripper: Killed -9 orphan PID 29615 (PGID 29614): sh -c sleep 1&
+   We could delay a bit before ripping the children.  */
+static const char *read_cmdline (pid_t pid)
+{
+  char cmdline_fname[32];
+  static char cmdline[LINE_MAX];
+  int fd;
+  ssize_t got;
+  char *s;
+
+  if (snprintf (cmdline_fname, sizeof cmdline_fname, "/proc/%d/cmdline",
+      (int) pid) < 0)
+    return NULL;
+  fd = open (cmdline_fname, O_RDONLY);
+  if (fd == -1)
+    {
+      /* It may have already exited - ENOENT.  */
+#if 0
+      fprintf (stderr, "%s: open (\"%s\"): %m\n", progname, cmdline_fname);
+#endif
+      return NULL;
+    }
+  got = read (fd, cmdline, sizeof (cmdline) - 1);
+  if (got == -1)
+    fprintf (stderr, "%s: read (\"%s\"): %m\n", progname,
+       cmdline_fname);
+  if (close (fd) != 0)
+    fprintf (stderr, "%s: close (\"%s\"): %m\n", progname,
+       cmdline_fname);
+  if (got < 0)
+    return NULL;
+  /* Convert '\0' argument delimiters to spaces.  */
+  for (s = cmdline; s < cmdline + got; s++)
+    if (!*s)
+      *s = ' ';
+  /* Trim the trailing spaces (typically single '\0'->' ').  */
+  while (s > cmdline && isspace (s[-1]))
+    s--;
+  *s = 0;
+  return cmdline;
+}
+
+static int dir_scan (const char *dirname,
+		  int (*callback) (struct dirent *dirent, const char *pathname))
+{
+  DIR *dir;
+  struct dirent *dirent;
+  int rc = 0;
+
+  dir = opendir (dirname);
+  if (dir == NULL)
+    {
+      if (errno == EACCES || errno == ENOENT)
+	return rc;
+      fprintf (stderr, "%s: opendir (\"%s\"): %m\n", progname, dirname);
+      exit (EXIT_FAILURE);
+    }
+  while ((errno = 0, dirent = readdir (dir)))
+    {
+      char pathname[LINE_MAX];
+      int pathname_len;
+
+      pathname_len = snprintf (pathname, sizeof pathname, "%s/%s",
+				 dirname, dirent->d_name);
+      if (pathname_len <= 0 || pathname_len >= (int) sizeof pathname)
+	{
+	  fprintf (stderr, "entry file name too long: `%s' / `%s'\n",
+		   dirname, dirent->d_name);
+	  continue;
+	}
+      /* RHEL-4.5 on s390x never fills in D_TYPE.  */
+      if (dirent->d_type == DT_UNKNOWN)
+        {
+	  struct stat statbuf;
+	  int i;
+
+	  /* We are not interested in the /proc/PID/fd/ links targets.  */
+	  i = lstat (pathname, &statbuf);
+	  if (i == -1)
+	    {
+	      if (errno == EACCES || errno == ENOENT)
+	        continue;
+	      fprintf (stderr, "%s: stat (\"%s\"): %m\n", progname, pathname);
+	      exit (EXIT_FAILURE);
+	    }
+	  if (S_ISDIR (statbuf.st_mode))
+	    dirent->d_type = DT_DIR;
+	  if (S_ISLNK (statbuf.st_mode))
+	    dirent->d_type = DT_LNK;
+	  /* No other D_TYPE types used in this code.  */
+	}
+      rc = (*callback) (dirent, pathname);
+      if (rc != 0)
+	{
+	  errno = 0;
+	  break;
+	}
+    }
+  if (errno != 0)
+    {
+      fprintf (stderr, "%s: readdir (\"%s\"): %m\n", progname, dirname);
+      exit (EXIT_FAILURE);
+    }
+  if (closedir (dir) != 0)
+    {
+      fprintf (stderr, "%s: closedir (\"%s\"): %m\n", progname, dirname);
+      exit (EXIT_FAILURE);
+    }
+  return rc;
+}
+
+static int fd_fs_scan (pid_t pid, int (*func) (pid_t pid, const char *link))
+{
+  char dirname[64];
+
+  if (snprintf (dirname, sizeof dirname, "/proc/%d/fd", (int) pid) < 0)
+    {
+      perror ("snprintf(3)");
+      exit (EXIT_FAILURE);
+    }
+
+  int callback (struct dirent *dirent, const char *pathname)
+  {
+    char buf[LINE_MAX];
+    ssize_t buf_len;
+
+    if ((dirent->d_type != DT_DIR && dirent->d_type != DT_LNK)
+	|| (dirent->d_type == DT_DIR && strcmp (dirent->d_name, ".") != 0
+	    && strcmp (dirent->d_name, "..") != 0)
+	|| (dirent->d_type == DT_LNK && strspn (dirent->d_name, "0123456789")
+	    != strlen (dirent->d_name)))
+      {
+	fprintf (stderr, "Unexpected entry \"%s\" (d_type %u)"
+			 " on readdir (\"%s\"): %m\n",
+		 dirent->d_name, (unsigned) dirent->d_type, dirname);
+	return 0;
+      }
+    if (dirent->d_type == DT_DIR)
+      return 0;
+    buf_len = readlink (pathname, buf, sizeof buf - 1);
+    if (buf_len <= 0 || buf_len >= (ssize_t) sizeof buf - 1)
+      {
+	if (errno != ENOENT && errno != EACCES)
+	  fprintf (stderr, "Error reading link \"%s\": %m\n", pathname);
+	return 0;
+      }
+    buf[buf_len] = 0;
+    return (*func) (pid, buf);
+  }
+
+  return dir_scan (dirname, callback);
+}
+
+static void pid_fs_scan (void (*func) (pid_t pid, void *data), void *data)
+{
+  int callback (struct dirent *dirent, const char *pathname)
+  {
+    if (dirent->d_type != DT_DIR
+	|| strspn (dirent->d_name, "0123456789") != strlen (dirent->d_name))
+      return 0;
+    (*func) (atoi (dirent->d_name), data);
+    return 0;
+  }
+
+  dir_scan ("/proc", callback);
+}
+
+static int rip_check_ptyname (pid_t pid, const char *link)
+{
+  assert (pid != getpid ());
+
+  return strcmp (link, childptyname) == 0;
+}
+
+struct pid
+  {
+    struct pid *next;
+    pid_t pid;
+  };
+static struct pid *pid_list;
+
+static int pid_found (pid_t pid)
+{
+  struct pid *entry;
+
+  for (entry = pid_list; entry != NULL; entry = entry->next)
+    if (entry->pid == pid)
+      return 1;
+  return 0;
+}
+
+/* Single pass is not enough, a (multithreaded) process was seen to survive.
+   Repeated killing of the same process is not enough, zombies can be killed.
+   */
+static int cleanup_acted;
+
+static void pid_record (pid_t pid)
+{
+  struct pid *entry;
+
+  if (pid_found (pid))
+    return;
+  cleanup_acted = 1;
+
+  entry = malloc (sizeof (*entry));
+  if (entry == NULL)
+    {
+      fprintf (stderr, "%s: malloc: %m\n", progname);
+      exit (EXIT_FAILURE);
+    }
+  entry->pid = pid;
+  entry->next = pid_list;
+  pid_list = entry;
+}
+
+static void pid_forall (void (*func) (pid_t pid))
+{
+  struct pid *entry;
+
+  for (entry = pid_list; entry != NULL; entry = entry->next)
+    (*func) (entry->pid);
+}
+
+/* Returns 0 on failure.  */
+static pid_t pid_get_parent (pid_t pid)
+{
+  char fname[64];
+  FILE *f;
+  char line[LINE_MAX];
+  pid_t retval = 0;
+
+  if (snprintf (fname, sizeof fname, "/proc/%d/status", (int) pid) < 0)
+    {
+      perror ("snprintf(3)");
+      exit (EXIT_FAILURE);
+    }
+  f = fopen (fname, "r");
+  if (f == NULL)
+    {
+      return 0;
+    }
+  while (errno = 0, fgets (line, sizeof line, f) == line)
+    {
+      if (strncmp (line, "PPid:\t", sizeof "PPid:\t" - 1) != 0)
+	continue;
+      retval = atoi (line + sizeof "PPid:\t" - 1);
+      errno = 0;
+      break;
+    }
+  if (errno != 0)
+    {
+      fprintf (stderr, "%s: fgets (\"%s\"): %m\n", progname, fname);
+      exit (EXIT_FAILURE);
+    }
+  if (fclose (f) != 0)
+    {
+      fprintf (stderr, "%s: fclose (\"%s\"): %m\n", progname, fname);
+      exit (EXIT_FAILURE);
+    }
+  return retval;
+}
+
+static void killtree (pid_t pid);
+
+static void killtree_pid_fs_scan (pid_t pid, void *data)
+{
+  pid_t parent_pid = *(pid_t *) data;
+
+  /* Do not optimize it as we could miss some newly spawned processes.
+     Always traverse all the leaves.  */
+#if 0
+  /* Optimization.  */
+  if (pid_found (pid))
+    return;
+#endif
+
+  if (pid_get_parent (pid) != parent_pid)
+    return;
+
+  killtree (pid);
+}
+
+static void killtree (pid_t pid)
+{
+  pid_record (pid);
+  pid_fs_scan (killtree_pid_fs_scan, &pid);
+}
+
+static void rip_pid_fs_scan (pid_t pid, void *data)
+{
+  pid_t pgid;
+
+  /* Shouldn't happen.  */
+  if (pid == getpid ())
+    return;
+
+  /* Check both PGID and the stale file descriptors.  */
+  pgid = getpgid (pid);
+  if (pgid == child
+      || fd_fs_scan (pid, rip_check_ptyname) != 0)
+    killtree (pid);
+}
+
+static void killproc (pid_t pid)
+{
+  const char *cmdline;
+
+  cmdline = read_cmdline (pid);
+  /* Avoid printing the message for already gone processes.  */
+  if (kill (pid, 0) != 0 && errno == ESRCH)
+    return;
+  if (cmdline == NULL)
+    cmdline = "<error>";
+  fprintf (stderr, "%s: Killed -9 orphan PID %d: %s\n", progname, (int) pid, cmdline);
+  if (kill (pid, SIGKILL) == 0)
+    cleanup_acted = 1;
+  else if (errno != ESRCH)
+    fprintf (stderr, "%s: kill (%d, SIGKILL): %m\n", progname, (int) pid);
+  /* RHEL-3 kernels cannot SIGKILL a `T (stopped)' process.  */
+  kill (pid, SIGCONT);
+  /* Do not waitpid(2) as it cannot be our direct descendant and it gets
+     cleaned up by init(8).  */
+#if 0
+  pid_t pid_got;
+  pid_got = waitpid (pid, NULL, 0);
+  if (pid != pid_got)
+    {
+      fprintf (stderr, "%s: waitpid (%d) != %d: %m\n", progname,
+	 (int) pid, (int) pid_got);
+      return;
+    }
+#endif
+}
+
+static void rip (void)
+{
+  cleanup_acted = 0;
+  do
+    {
+      if (cleanup_acted)
+        usleep (1000000 / 10);
+      cleanup_acted = 0;
+      pid_fs_scan (rip_pid_fs_scan, NULL);
+      pid_forall (killproc);
+    }
+  while (cleanup_acted);
+}
+
+int main (int argc, char **argv)
+{
+  int timeout = 0;
+  int rc;
+
+  progname = *argv++;
+  argc--;
+
+  if (argc < 1 || strcmp (*argv, "-h") == 0
+      || strcmp (*argv, "--help") == 0)
+    {
+      puts ("Syntax: orphanripper [-t <seconds>] <execvp(3) commandline>");
+      exit (EXIT_FAILURE);
+    }
+  if ((*argv)[0] == '-' && (*argv)[1] == 't')
+    {
+      char *timeout_s = NULL;
+
+      if ((*argv)[2] == 0)
+	timeout_s = *++argv;
+      else if (isdigit ((*argv)[2]))
+	timeout_s = (*argv) + 2;
+      if (timeout_s != NULL)
+	{
+	  long l;
+	  char *endptr;
+
+	  argv++;
+	  l = strtol (timeout_s, &endptr, 0);
+	  timeout = l;
+	  if ((endptr != NULL && *endptr != 0) || timeout < 0 || timeout != l)
+	    {
+	      fprintf (stderr, "%s: Invalid timeout value: %s\n", progname,
+		       timeout_s);
+	      exit (EXIT_FAILURE);
+	    }
+	}
+    }
+
+  rc = spawn (argv, timeout);
+  rip ();
+  return rc;
+}
diff --git a/SOURCES/gdb-physname-pr11734-test.patch b/SOURCES/gdb-physname-pr11734-test.patch
new file mode 100644
index 0000000..e862eea
--- /dev/null
+++ b/SOURCES/gdb-physname-pr11734-test.patch
@@ -0,0 +1,234 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-physname-pr11734-test.patch
+
+;; Fix regressions on C++ names resolving (PR 11734, PR 12273, Keith Seitz).
+;;=fedoratest
+
+http://sourceware.org/ml/gdb-patches/2010-12/msg00263.html
+
+diff --git a/gdb/testsuite/gdb.cp/pr11734-1.cc b/gdb/testsuite/gdb.cp/pr11734-1.cc
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.cp/pr11734-1.cc
+@@ -0,0 +1,30 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2010 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++   Please email any bugs, comments, and/or additions to this file to:
++   bug-gdb@gnu.org  */
++
++#include "pr11734.h"
++
++int
++main ()
++{
++  pr11734 *p = new pr11734;
++  p->foo ();
++  return 0;
++}
++
+diff --git a/gdb/testsuite/gdb.cp/pr11734-2.cc b/gdb/testsuite/gdb.cp/pr11734-2.cc
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.cp/pr11734-2.cc
+@@ -0,0 +1,27 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2010 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++   Please email any bugs, comments, and/or additions to this file to:
++   bug-gdb@gnu.org  */
++
++#include "pr11734.h"
++
++void
++pr11734::foo(void)
++{
++}
++
+diff --git a/gdb/testsuite/gdb.cp/pr11734-3.cc b/gdb/testsuite/gdb.cp/pr11734-3.cc
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.cp/pr11734-3.cc
+@@ -0,0 +1,27 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2010 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++   Please email any bugs, comments, and/or additions to this file to:
++   bug-gdb@gnu.org  */
++
++#include "pr11734.h"
++
++void
++pr11734::foo (int a)
++{
++}
++
+diff --git a/gdb/testsuite/gdb.cp/pr11734-4.cc b/gdb/testsuite/gdb.cp/pr11734-4.cc
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.cp/pr11734-4.cc
+@@ -0,0 +1,27 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2010 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++   Please email any bugs, comments, and/or additions to this file to:
++   bug-gdb@gnu.org  */
++
++#include "pr11734.h"
++
++void
++pr11734::foo (char *a)
++{
++}
++
+diff --git a/gdb/testsuite/gdb.cp/pr11734.exp b/gdb/testsuite/gdb.cp/pr11734.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.cp/pr11734.exp
+@@ -0,0 +1,55 @@
++# Copyright 2010 Free Software Foundation, Inc.
++#
++# Contributed by Red Hat, originally written by Keith Seitz.
++#
++# 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++# This file is part of the gdb testsuite.
++
++if { [skip_cplus_tests] } { continue }
++
++set testfile "pr11734"
++set class $testfile
++
++set srcfiles {}
++for {set i 1} {$i < 5} {incr i} {
++    lappend srcfiles $testfile-$i.cc
++}
++
++prepare_for_testing pr11734 $testfile $srcfiles {c++ debug}
++
++if {![runto_main]} {
++    perror "couldn't run to breakpoint"
++    continue
++}
++
++# An array holding the overload types for the method pr11734::foo.  The
++# first element is the overloaded method parameter.  The second element
++# is the expected source file number, e.g. "pr11734-?.cc".
++array set tests {
++    "char*"  4
++    "int"    3
++    ""       2
++}
++
++# Test each overload instance twice: once quoted, once unquoted
++foreach ovld [array names tests] {
++    set method "${class}::foo\($ovld\)"
++    set result "Breakpoint (\[0-9\]).*file .*/$class-$tests($ovld).*"
++    gdb_test "break $method" $result
++    gdb_test "break '$method'" $result
++}
++
++gdb_exit
++return 0
+diff --git a/gdb/testsuite/gdb.cp/pr11734.h b/gdb/testsuite/gdb.cp/pr11734.h
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.cp/pr11734.h
+@@ -0,0 +1,28 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2010 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++   Please email any bugs, comments, and/or additions to this file to:
++   bug-gdb@gnu.org  */
++
++class pr11734
++{
++ public:
++  void foo ();
++  void foo (int);
++  void foo (char *);
++};
++
diff --git a/SOURCES/gdb-physname-pr12273-test.patch b/SOURCES/gdb-physname-pr12273-test.patch
new file mode 100644
index 0000000..6c943ad
--- /dev/null
+++ b/SOURCES/gdb-physname-pr12273-test.patch
@@ -0,0 +1,103 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-physname-pr12273-test.patch
+
+;; Fix regressions on C++ names resolving (PR 11734, PR 12273, Keith Seitz).
+;;=fedoratest
+
+http://sourceware.org/ml/gdb-patches/2010-12/msg00264.html
+
+diff --git a/gdb/testsuite/gdb.cp/pr12273.cc b/gdb/testsuite/gdb.cp/pr12273.cc
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.cp/pr12273.cc
+@@ -0,0 +1,37 @@
++/* This test case is part of GDB, the GNU debugger.
++
++   Copyright 2010 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++template <typename T>
++class GDB
++{
++ public:
++   static int simple (void) { return 0; }
++   static int harder (T a) { return 1; }
++   template <typename X>
++   static X even_harder (T a) { return static_cast<X> (a); }
++   int operator == (GDB const& other)
++   { return 1; }
++};
++
++int main(int argc, char **argv)
++{
++   GDB<int> a, b;
++   if (a == b)
++     return GDB<char>::harder('a') + GDB<int>::harder(3)
++	+ GDB<char>::even_harder<int> ('a');
++   return GDB<int>::simple ();
++}
+diff --git a/gdb/testsuite/gdb.cp/pr12273.exp b/gdb/testsuite/gdb.cp/pr12273.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.cp/pr12273.exp
+@@ -0,0 +1,46 @@
++# Copyright 2010 Free Software Foundation, Inc.
++#
++# Contributed by Red Hat, originally written by Keith Seitz.
++#
++# 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++# This file is part of the gdb testsuite.
++
++if {[skip_cplus_tests]} { continue }
++
++set testfile "pr12273"
++# Do NOT compile with debug flag.
++prepare_for_testing pr12273 $testfile $testfile.cc {c++}
++
++gdb_test_no_output "set language c++"
++
++# A list of minimal symbol names to check.
++# Note that GDB<char>::even_harder<int>(char) is quoted and includes
++# the return type.  This is necessary because this is the demangled name
++# of the minimal symbol.
++set min_syms [list \
++		  "GDB<int>::operator ==" \
++		  "GDB<int>::operator==(GDB<int> const&)" \
++		  "GDB<char>::harder(char)" \
++		  "GDB<int>::harder(int)" \
++		  {"int GDB<char>::even_harder<int>(char)"} \
++		  "GDB<int>::simple()"]
++
++foreach sym $min_syms {
++    if {[gdb_breakpoint $sym]} {
++	pass "setting breakpoint at $sym"
++    }
++}
++
++gdb_exit
diff --git a/SOURCES/gdb-ppc-power7-test.patch b/SOURCES/gdb-ppc-power7-test.patch
new file mode 100644
index 0000000..3ca7667
--- /dev/null
+++ b/SOURCES/gdb-ppc-power7-test.patch
@@ -0,0 +1,303 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-ppc-power7-test.patch
+
+;; Test power7 ppc disassembly.
+;;=fedoratest
+
+diff --git a/gdb/testsuite/gdb.arch/powerpc-power7rh.exp b/gdb/testsuite/gdb.arch/powerpc-power7rh.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.arch/powerpc-power7rh.exp
+@@ -0,0 +1,178 @@
++# Copyright 2009 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
++
++# Test PowerPC Power7 instructions disassembly.
++
++if {![istarget "powerpc*-*-*"]} then {
++    verbose "Skipping PowerPC Power7 instructions disassembly."
++    return
++}
++
++set testfile "powerpc-power7rh"
++set srcfile ${testfile}.s
++set objfile [standard_output_file ${testfile}.o]
++
++if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objfile}" object {debug}] != "" } {
++    untested "PowerPC Power7 instructions disassembly"
++    return -1
++}
++
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++gdb_load ${objfile}
++ 
++
++# Disassemble the function.
++
++set test "disass func"
++gdb_test_multiple $test $test {
++    -re "\r\nDump of assembler code for function func:(\r\n.*\r\n)End of assembler dump.\r\n$gdb_prompt $" {
++	set func $expect_out(1,string)
++	pass $test
++    }
++}
++
++proc instr_to_patt {offset instr} {
++    # 0x0000000000000018 <func+24>:	stxvd2x vs43,r4,r5
++    return ".*\r\n\[ \t\]*[string map {0x 0x0*} $offset] <(func)?\\+?\[0-9\]*>:\[ \t\]*[string map [list { } "\[ \t\]+" . {\.}] $instr]\[ \t\]*\r\n.*"
++}
++
++# KFAIL strings would not exist if -Many would print the same as -Mpower7.
++# That means the power7 form should be the preferred one.
++# http://sourceware.org/ml/gdb-patches/2009-03/threads.html#00020
++
++proc func_check {offset instr {kfail ""}} {
++    global func
++
++    set test "Found $offset: $instr"
++    if [regexp -nocase -line [instr_to_patt $offset $instr] $func] {
++	pass $test
++    } elseif {$kfail != "" && [regexp -nocase -line [instr_to_patt $offset $kfail] $func]} {
++	kfail gdb/NNNN $test
++    } else {
++	fail $test
++    }
++}
++
++func_check   0x0 "lxvd2x  vs3,r4,r5"
++# [PATCH] Remove support for POWER7 VSX load/store with update instructions
++# http://sourceware.org/ml/binutils/2009-09/msg00680.html
++# http://sourceware.org/ml/binutils-cvs/2009-09/msg00331.html
++func_check   0x4 "lxvb16x vs3,r4,r5"
++func_check   0x8 "lxvd2x  vs43,r4,r5"
++func_check   0xc "lxvb16x vs43,r4,r5"
++func_check  0x10 "stxvd2x vs3,r4,r5"
++func_check  0x14 "stxvb16x vs3,r4,r5"
++func_check  0x18 "stxvd2x vs43,r4,r5"
++func_check  0x1c "stxvb16x vs43,r4,r5"
++func_check  0x20 "xxmrghd vs3,vs4,vs5"
++func_check  0x24 "xxmrghd vs43,vs44,vs45"
++func_check  0x28 "xxmrgld vs3,vs4,vs5"
++func_check  0x2c "xxmrgld vs43,vs44,vs45"
++func_check  0x30 "xxmrghd vs3,vs4,vs5"
++func_check  0x34 "xxmrghd vs43,vs44,vs45"
++func_check  0x38 "xxmrgld vs3,vs4,vs5"
++func_check  0x3c "xxmrgld vs43,vs44,vs45"
++func_check  0x40 "xxpermdi vs3,vs4,vs5,1"
++func_check  0x44 "xxpermdi vs43,vs44,vs45,1"
++func_check  0x48 "xxpermdi vs3,vs4,vs5,2"
++func_check  0x4c "xxpermdi vs43,vs44,vs45,2"
++func_check  0x50 "xvmovdp vs3,vs4"
++func_check  0x54 "xvmovdp vs43,vs44"
++func_check  0x58 "xvmovdp vs3,vs4"
++func_check  0x5c "xvmovdp vs43,vs44"
++func_check  0x60 "xvcpsgndp vs3,vs4,vs5"
++func_check  0x64 "xvcpsgndp vs43,vs44,vs45"
++func_check  0x68 "wait"
++func_check  0x6c "wait"
++func_check  0x70 "waitrsv"
++func_check  0x74 "waitrsv"
++func_check  0x78 "waitimpl"
++func_check  0x7c "waitimpl"
++func_check  0x80 "doze"
++func_check  0x84 "nap"
++func_check  0x88 "sleep"
++func_check  0x8c "rvwinkle"
++func_check  0x90 "prtyw   r3,r4"
++func_check  0x94 "prtyd   r13,r14"
++func_check  0x98 "mfcfar  r10"           "mfspr   r10,28"
++func_check  0x9c "mtcfar  r11"           "mtspr   28,r11"
++func_check  0xa0 "cmpb    r3,r4,r5"
++func_check  0xa4 "lwzcix  r10,r11,r12"
++func_check  0xa8 "dadd    f16,f17,f18"
++func_check  0xac "daddq   f20,f22,f24"
++func_check  0xb0 "dss     3"
++func_check  0xb4 "dssall"
++func_check  0xb8 "dst     r5,r4,1"
++func_check  0xbc "dstt    r8,r7,0"
++func_check  0xc0 "dstst   r5,r6,3"
++func_check  0xc4 "dststt  r4,r5,2"
++func_check  0xc8 "divwe   r10,r11,r12"
++func_check  0xcc "divwe.  r11,r12,r13"
++func_check  0xd0 "divweo  r12,r13,r14"
++func_check  0xd4 "divweo. r13,r14,r15"
++func_check  0xd8 "divweu  r10,r11,r12"
++func_check  0xdc "divweu. r11,r12,r13"
++func_check  0xe0 "divweuo r12,r13,r14"
++func_check  0xe4 "divweuo. r13,r14,r15"
++func_check  0xe8 "bpermd  r7,r17,r27"
++func_check  0xec "popcntw r10,r20"
++func_check  0xf0 "popcntd r10,r20"
++func_check  0xf4 "ldbrx   r20,r21,r22"
++func_check  0xf8 "stdbrx  r20,r21,r22"
++func_check  0xfc "lfiwzx  f10,0,r10"
++func_check 0x100 "lfiwzx  f10,r9,r10"
++func_check 0x104 "fcfids  f4,f5"
++func_check 0x108 "fcfids. f4,f5"
++func_check 0x10c "fcfidus f4,f5"
++func_check 0x110 "fcfidus. f4,f5"
++func_check 0x114 "fctiwu  f4,f5"
++func_check 0x118 "fctiwu. f4,f5"
++func_check 0x11c "fctiwuz f4,f5"
++func_check 0x120 "fctiwuz. f4,f5"
++func_check 0x124 "fctidu  f4,f5"
++func_check 0x128 "fctidu. f4,f5"
++func_check 0x12c "fctiduz f4,f5"
++func_check 0x130 "fctiduz. f4,f5"
++func_check 0x134 "fcfidu  f4,f5"
++func_check 0x138 "fcfidu. f4,f5"
++func_check 0x13c "ftdiv   cr0,f10,f11"
++func_check 0x140 "ftdiv   cr7,f10,f11"
++func_check 0x144 "ftsqrt  cr0,f10"
++func_check 0x148 "ftsqrt  cr7,f10"
++func_check 0x14c "dcbtt   r8,r9"         "dcbt    16,r8,r9"
++func_check 0x150 "dcbtstt r8,r9"         "dcbtst  16,r8,r9"
++func_check 0x154 "dcffix  f10,f12"
++func_check 0x158 "dcffix. f20,f22"
++func_check 0x15c "lbarx   r10,r11,r12"
++func_check 0x160 "lbarx   r10,r11,r12"
++func_check 0x164 "lbarx   r10,r11,r12,1"
++func_check 0x168 "lharx   r20,r21,r22"
++func_check 0x16c "lharx   r20,r21,r22"
++func_check 0x170 "lharx   r20,r21,r22,1"
++func_check 0x174 "stbcx.  r10,r11,r12"
++func_check 0x178 "sthcx.  r10,r11,r12"
++func_check 0x17c "fre     f14,f15"
++func_check 0x180 "fre.    f14,f15"
++func_check 0x184 "fres    f14,f15"
++func_check 0x188 "fres.   f14,f15"
++func_check 0x18c "frsqrte f14,f15"
++func_check 0x190 "frsqrte. f14,f15"
++func_check 0x194 "frsqrtes f14,f15"
++func_check 0x198 "frsqrtes. f14,f15"
++func_check 0x19c "isel    r2,r3,r4,28"
+diff --git a/gdb/testsuite/gdb.arch/powerpc-power7rh.s b/gdb/testsuite/gdb.arch/powerpc-power7rh.s
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.arch/powerpc-power7rh.s
+@@ -0,0 +1,107 @@
++	.text
++	.globl	func
++func:
++	.long	0x7c642e98	/*   0: lxvd2x  vs3,r4,r5         */
++	.long	0x7c642ed8	/*   4: lxvd2ux vs3,r4,r5         */
++	.long	0x7d642e99	/*   8: lxvd2x  vs43,r4,r5        */
++	.long	0x7d642ed9	/*   c: lxvd2ux vs43,r4,r5        */
++	.long	0x7c642f98	/*  10: stxvd2x vs3,r4,r5         */
++	.long	0x7c642fd8	/*  14: stxvd2ux vs3,r4,r5        */
++	.long	0x7d642f99	/*  18: stxvd2x vs43,r4,r5        */
++	.long	0x7d642fd9	/*  1c: stxvd2ux vs43,r4,r5       */
++	.long	0xf0642850	/*  20: xxmrghd vs3,vs4,vs5       */
++	.long	0xf16c6857	/*  24: xxmrghd vs43,vs44,vs45    */
++	.long	0xf0642b50	/*  28: xxmrgld vs3,vs4,vs5       */
++	.long	0xf16c6b57	/*  2c: xxmrgld vs43,vs44,vs45    */
++	.long	0xf0642850	/*  30: xxmrghd vs3,vs4,vs5       */
++	.long	0xf16c6857	/*  34: xxmrghd vs43,vs44,vs45    */
++	.long	0xf0642b50	/*  38: xxmrgld vs3,vs4,vs5       */
++	.long	0xf16c6b57	/*  3c: xxmrgld vs43,vs44,vs45    */
++	.long	0xf0642950	/*  40: xxpermdi vs3,vs4,vs5,1    */
++	.long	0xf16c6957	/*  44: xxpermdi vs43,vs44,vs45,1 */
++	.long	0xf0642a50	/*  48: xxpermdi vs3,vs4,vs5,2    */
++	.long	0xf16c6a57	/*  4c: xxpermdi vs43,vs44,vs45,2 */
++	.long	0xf0642780	/*  50: xvmovdp vs3,vs4           */
++	.long	0xf16c6787	/*  54: xvmovdp vs43,vs44         */
++	.long	0xf0642780	/*  58: xvmovdp vs3,vs4           */
++	.long	0xf16c6787	/*  5c: xvmovdp vs43,vs44         */
++	.long	0xf0642f80	/*  60: xvcpsgndp vs3,vs4,vs5     */
++	.long	0xf16c6f87	/*  64: xvcpsgndp vs43,vs44,vs45  */
++	.long	0x7c00007c	/*  68: wait                      */
++	.long	0x7c00007c	/*  6c: wait                      */
++	.long	0x7c20007c	/*  70: waitrsv                   */
++	.long	0x7c20007c	/*  74: waitrsv                   */
++	.long	0x7c40007c	/*  78: waitimpl                  */
++	.long	0x7c40007c	/*  7c: waitimpl                  */
++	.long	0x4c000324	/*  80: doze                      */
++	.long	0x4c000364	/*  84: nap                       */
++	.long	0x4c0003a4	/*  88: sleep                     */
++	.long	0x4c0003e4	/*  8c: rvwinkle                  */
++	.long	0x7c830134	/*  90: prtyw   r3,r4             */
++	.long	0x7dcd0174	/*  94: prtyd   r13,r14           */
++	.long	0x7d5c02a6	/*  98: mfcfar  r10               */
++	.long	0x7d7c03a6	/*  9c: mtcfar  r11               */
++	.long	0x7c832bf8	/*  a0: cmpb    r3,r4,r5          */
++	.long	0x7d4b662a	/*  a4: lwzcix  r10,r11,r12       */
++	.long	0xee119004	/*  a8: dadd    f16,f17,f18       */
++	.long	0xfe96c004	/*  ac: daddq   f20,f22,f24       */
++	.long	0x7c60066c	/*  b0: dss     3                 */
++	.long	0x7e00066c	/*  b4: dssall                    */
++	.long	0x7c2522ac	/*  b8: dst     r5,r4,1           */
++	.long	0x7e083aac	/*  bc: dstt    r8,r7,0           */
++	.long	0x7c6532ec	/*  c0: dstst   r5,r6,3           */
++	.long	0x7e442aec	/*  c4: dststt  r4,r5,2           */
++	.long	0x7d4b6356	/*  c8: divwe   r10,r11,r12       */
++	.long	0x7d6c6b57	/*  cc: divwe.  r11,r12,r13       */
++	.long	0x7d8d7756	/*  d0: divweo  r12,r13,r14       */
++	.long	0x7dae7f57	/*  d4: divweo. r13,r14,r15       */
++	.long	0x7d4b6316	/*  d8: divweu  r10,r11,r12       */
++	.long	0x7d6c6b17	/*  dc: divweu. r11,r12,r13       */
++	.long	0x7d8d7716	/*  e0: divweuo r12,r13,r14       */
++	.long	0x7dae7f17	/*  e4: divweuo. r13,r14,r15      */
++	.long	0x7e27d9f8	/*  e8: bpermd  r7,r17,r27        */
++	.long	0x7e8a02f4	/*  ec: popcntw r10,r20           */
++	.long	0x7e8a03f4	/*  f0: popcntd r10,r20           */
++	.long	0x7e95b428	/*  f4: ldbrx   r20,r21,r22       */
++	.long	0x7e95b528	/*  f8: stdbrx  r20,r21,r22       */
++	.long	0x7d4056ee	/*  fc: lfiwzx  f10,0,r10         */
++	.long	0x7d4956ee	/* 100: lfiwzx  f10,r9,r10        */
++	.long	0xec802e9c	/* 104: fcfids  f4,f5             */
++	.long	0xec802e9d	/* 108: fcfids. f4,f5             */
++	.long	0xec802f9c	/* 10c: fcfidus f4,f5             */
++	.long	0xec802f9d	/* 110: fcfidus. f4,f5            */
++	.long	0xfc80291c	/* 114: fctiwu  f4,f5             */
++	.long	0xfc80291d	/* 118: fctiwu. f4,f5             */
++	.long	0xfc80291e	/* 11c: fctiwuz f4,f5             */
++	.long	0xfc80291f	/* 120: fctiwuz. f4,f5            */
++	.long	0xfc802f5c	/* 124: fctidu  f4,f5             */
++	.long	0xfc802f5d	/* 128: fctidu. f4,f5             */
++	.long	0xfc802f5e	/* 12c: fctiduz f4,f5             */
++	.long	0xfc802f5f	/* 130: fctiduz. f4,f5            */
++	.long	0xfc802f9c	/* 134: fcfidu  f4,f5             */
++	.long	0xfc802f9d	/* 138: fcfidu. f4,f5             */
++	.long	0xfc0a5900	/* 13c: ftdiv   cr0,f10,f11       */
++	.long	0xff8a5900	/* 140: ftdiv   cr7,f10,f11       */
++	.long	0xfc005140	/* 144: ftsqrt  cr0,f10           */
++	.long	0xff805140	/* 148: ftsqrt  cr7,f10           */
++	.long	0x7e084a2c	/* 14c: dcbtt   r8,r9             */
++	.long	0x7e0849ec	/* 150: dcbtstt r8,r9             */
++	.long	0xed406644	/* 154: dcffix  f10,f12           */
++	.long	0xee80b645	/* 158: dcffix. f20,f22           */
++	.long	0x7d4b6068	/* 15c: lbarx   r10,r11,r12       */
++	.long	0x7d4b6068	/* 160: lbarx   r10,r11,r12       */
++	.long	0x7d4b6069	/* 164: lbarx   r10,r11,r12,1     */
++	.long	0x7e95b0e8	/* 168: lharx   r20,r21,r22       */
++	.long	0x7e95b0e8	/* 16c: lharx   r20,r21,r22       */
++	.long	0x7e95b0e9	/* 170: lharx   r20,r21,r22,1     */
++	.long	0x7d4b656d	/* 174: stbcx.  r10,r11,r12       */
++	.long	0x7d4b65ad	/* 178: sthcx.  r10,r11,r12       */
++	.long	0xfdc07830	/* 17c: fre     f14,f15           */
++	.long	0xfdc07831	/* 180: fre.    f14,f15           */
++	.long	0xedc07830	/* 184: fres    f14,f15           */
++	.long	0xedc07831	/* 188: fres.   f14,f15           */
++	.long	0xfdc07834	/* 18c: frsqrte f14,f15           */
++	.long	0xfdc07835	/* 190: frsqrte. f14,f15          */
++	.long	0xedc07834	/* 194: frsqrtes f14,f15          */
++	.long	0xedc07835	/* 198: frsqrtes. f14,f15         */
++	.long	0x7c43271e	/* 19c: isel    r2,r3,r4,28       */
diff --git a/SOURCES/gdb-python-gil.patch b/SOURCES/gdb-python-gil.patch
new file mode 100644
index 0000000..9ff2e45
--- /dev/null
+++ b/SOURCES/gdb-python-gil.patch
@@ -0,0 +1,241 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-python-gil.patch
+
+;; Fix Python GIL with gdb.execute("continue") (Phil Muldoon, BZ 1116957).
+;;=push
+
+diff --git a/gdb/doc/python.texi b/gdb/doc/python.texi
+--- a/gdb/doc/python.texi
++++ b/gdb/doc/python.texi
+@@ -232,6 +232,14 @@ returned as a string.  The default is @code{False}, in which case the
+ return value is @code{None}.  If @var{to_string} is @code{True}, the
+ @value{GDBN} virtual terminal will be temporarily set to unlimited width
+ and height, and its pagination will be disabled; @pxref{Screen Size}.
++
++The @var{release_gil} flag specifies whether @value{GDBN} ought to
++release the Python GIL before executing the command.  This is useful
++in multi-threaded Python programs where by default the Python
++interpreter will acquire the GIL and lock other threads from
++executing.  After the command has completed executing in @value{GDBN}
++the Python GIL is reacquired. This flag must be a boolean value.  If
++omitted, it defaults to @code{False}.
+ @end defun
+ 
+ @findex gdb.breakpoints
+diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h
+--- a/gdb/python/python-internal.h
++++ b/gdb/python/python-internal.h
+@@ -148,6 +148,8 @@ typedef int Py_ssize_t;
+ #define PyGILState_Release(ARG) ((void)(ARG))
+ #define PyEval_InitThreads()
+ #define PyThreadState_Swap(ARG) ((void)(ARG))
++#define PyEval_SaveThread() ((void)(ARG))
++#define PyEval_RestoreThread(ARG) ((void)(ARG))
+ #define PyEval_ReleaseLock()
+ #endif
+ 
+diff --git a/gdb/python/python.c b/gdb/python/python.c
+--- a/gdb/python/python.c
++++ b/gdb/python/python.c
+@@ -556,12 +556,16 @@ execute_gdb_command (PyObject *self, PyObject *args, PyObject *kw)
+ {
+   const char *arg;
+   PyObject *from_tty_obj = NULL, *to_string_obj = NULL;
+-  int from_tty, to_string;
+-  static const char *keywords[] = { "command", "from_tty", "to_string", NULL };
++  int from_tty, to_string, release_gil;
++  static const char *keywords[] = {"command", "from_tty", "to_string", "release_gil", NULL };
++  PyObject *release_gil_obj = NULL;
++  /* Initialize it just to avoid a GCC false warning.  */
++  PyThreadState *state = NULL;
+ 
+-  if (!gdb_PyArg_ParseTupleAndKeywords (args, kw, "s|O!O!", keywords, &arg,
++  if (!gdb_PyArg_ParseTupleAndKeywords (args, kw, "s|O!O!O!", keywords, &arg,
+ 					&PyBool_Type, &from_tty_obj,
+-					&PyBool_Type, &to_string_obj))
++					&PyBool_Type, &to_string_obj,
++					&PyBool_Type, &release_gil_obj))
+     return NULL;
+ 
+   from_tty = 0;
+@@ -582,6 +586,15 @@ execute_gdb_command (PyObject *self, PyObject *args, PyObject *kw)
+       to_string = cmp;
+     }
+ 
++  release_gil = 0;
++  if (release_gil_obj)
++    {
++      int cmp = PyObject_IsTrue (release_gil_obj);
++      if (cmp < 0)
++	return NULL;
++      release_gil = cmp;
++    }
++
+   std::string to_string_res;
+ 
+   TRY
+@@ -602,6 +615,13 @@ execute_gdb_command (PyObject *self, PyObject *args, PyObject *kw)
+ 
+       counted_command_line lines = read_command_lines_1 (reader, 1, nullptr);
+ 
++      /* In the case of long running GDB commands, allow the user to
++	 release the Python GIL acquired by Python.  Restore the GIL
++	 after the command has completed before handing back to
++	 Python.  */
++      if (release_gil)
++	state = PyEval_SaveThread();
++
+       scoped_restore save_async = make_scoped_restore (&current_ui->async, 0);
+ 
+       scoped_restore save_uiout = make_scoped_restore (&current_uiout);
+@@ -617,10 +637,22 @@ execute_gdb_command (PyObject *self, PyObject *args, PyObject *kw)
+ 							    from_tty);
+       else
+ 	execute_control_commands (lines.get (), from_tty);
++
++      /* Reacquire the GIL if it was released earlier.  */
++      if (release_gil)
++	PyEval_RestoreThread (state);
+     }
+   CATCH (except, RETURN_MASK_ALL)
+     {
+-      GDB_PY_HANDLE_EXCEPTION (except);
++      if (except.reason < 0)
++	{
++	  /* Reacquire the GIL if it was released earlier.  */
++	  if (release_gil)
++	    PyEval_RestoreThread (state);
++
++	  gdbpy_convert_exception (except);
++	  return NULL;
++	}
+     }
+   END_CATCH
+ 
+diff --git a/gdb/testsuite/gdb.python/py-gil-mthread.c b/gdb/testsuite/gdb.python/py-gil-mthread.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.python/py-gil-mthread.c
+@@ -0,0 +1,13 @@
++#include <stdio.h>
++#include <unistd.h>
++
++int
++main (void)
++{
++  int i;
++  for (i = 0; i < 10; i++)
++    {
++      sleep (1); /* break-here */
++      printf ("Sleeping %d\n", i);
++    }
++}
+diff --git a/gdb/testsuite/gdb.python/py-gil-mthread.exp b/gdb/testsuite/gdb.python/py-gil-mthread.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.python/py-gil-mthread.exp
+@@ -0,0 +1,69 @@
++# Copyright (C) 2014 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++standard_testfile .c .py
++set executable $testfile
++
++if { [prepare_for_testing $testfile.exp $executable $srcfile] } {
++    return -1
++}
++
++# Skip all tests if Python scripting is not enabled.
++if { [skip_python_tests] } { continue }
++
++if ![runto_main] {
++    return -1
++}
++
++gdb_breakpoint $srcfile:[gdb_get_line_number "break-here"] temporary
++gdb_continue_to_breakpoint "break-here" ".* break-here .*"
++
++set test "response"
++set timeout 60
++set sleeping_last -1
++set hello_last 0
++set minimal 5
++gdb_test_multiple "python exec (open ('$srcdir/$subdir/$srcfile2').read ())" $test {
++    -re "Error: unable to start thread\r\n" {
++	fail $test
++	# Not $gdb_prompt-synced!
++    }
++    -re "Sleeping (\[0-9\]+)\r\n" {
++	set n $expect_out(1,string)
++	if { $sleeping_last + 1 != $n } {
++	    fail $test
++	} else {
++	    set sleeping_last $n
++	    if { $sleeping_last >= $minimal && $hello_last >= $minimal } {
++		pass $test
++	    } else {
++		exp_continue
++	    }
++	}
++    }
++    -re "Hello \\( (\[0-9\]+) \\)\r\n" {
++	set n $expect_out(1,string)
++	if { $hello_last + 1 != $n } {
++	    fail $test
++	} else {
++	    set hello_last $n
++	    if { $sleeping_last >= $minimal && $hello_last >= $minimal } {
++		pass $test
++	    } else {
++		exp_continue
++	    }
++	}
++    }
++}
+diff --git a/gdb/testsuite/gdb.python/py-gil-mthread.py b/gdb/testsuite/gdb.python/py-gil-mthread.py
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.python/py-gil-mthread.py
+@@ -0,0 +1,28 @@
++try:
++   import thread
++except:
++   import _thread
++import time
++import gdb
++
++# Define a function for the thread
++def print_thread_hello():
++   count = 0
++   while count < 10:
++      time.sleep(1)
++      count += 1
++      print ("Hello ( %d )" % count)
++
++# Create a threads a continue
++try:
++   thread.start_new_thread (print_thread_hello, ())
++   gdb.execute ("continue", release_gil=True)
++except:
++   try:
++      _thread.start_new_thread (print_thread_hello, ())
++      gdb.execute ("continue", release_gil=True)
++   except:
++      print ("Error: unable to start thread")
++
++while 1:
++   pass
diff --git a/SOURCES/gdb-readline62-ask-more-rh.patch b/SOURCES/gdb-readline62-ask-more-rh.patch
new file mode 100644
index 0000000..a1f1171
--- /dev/null
+++ b/SOURCES/gdb-readline62-ask-more-rh.patch
@@ -0,0 +1,25 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-readline62-ask-more-rh.patch
+
+;; Work around readline-6.2 incompatibility not asking for --more-- (BZ 701131).
+;;=fedora
+
+diff --git a/gdb/event-top.c b/gdb/event-top.c
+--- a/gdb/event-top.c
++++ b/gdb/event-top.c
+@@ -1183,6 +1183,13 @@ gdb_setup_readline (int editing)
+ {
+   struct ui *ui = current_ui;
+ 
++#ifdef NEED_RL_STATE_FEDORA_GDB
++  /* 6.2 regression: no longed asks for --more--
++     gdb.base/readline-ask.exp
++     https://bugzilla.redhat.com/show_bug.cgi?id=701131  */
++  RL_SETSTATE (RL_STATE_FEDORA_GDB);
++#endif
++
+   /* This function is a noop for the sync case.  The assumption is
+      that the sync setup is ALL done in gdb_init, and we would only
+      mess it up here.  The sync stuff should really go away over
diff --git a/SOURCES/gdb-rhbz-818343-set-solib-absolute-prefix-testcase.patch b/SOURCES/gdb-rhbz-818343-set-solib-absolute-prefix-testcase.patch
new file mode 100644
index 0000000..20e5f75
--- /dev/null
+++ b/SOURCES/gdb-rhbz-818343-set-solib-absolute-prefix-testcase.patch
@@ -0,0 +1,83 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-rhbz-818343-set-solib-absolute-prefix-testcase.patch
+
+;; Testcase for `Setting solib-absolute-prefix breaks vDSO' (BZ 818343).
+;;=fedoratest
+
+diff --git a/gdb/testsuite/gdb.base/set-solib-absolute-prefix.c b/gdb/testsuite/gdb.base/set-solib-absolute-prefix.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/set-solib-absolute-prefix.c
+@@ -0,0 +1,26 @@
++/* Copyright (C) 2012 Free Software Foundation, Inc.
++
++   This file is part of GDB.
++
++   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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++#include <stdio.h>
++#include <stdlib.h>
++
++int
++main (int argc, char *argv[])
++{
++  printf ("Hello, World.\n");
++  abort ();
++}
+diff --git a/gdb/testsuite/gdb.base/set-solib-absolute-prefix.exp b/gdb/testsuite/gdb.base/set-solib-absolute-prefix.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/set-solib-absolute-prefix.exp
+@@ -0,0 +1,39 @@
++# Copyright 2012 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++set testfile "set-solib-absolute-prefix"
++set srcfile ${testfile}.c
++
++# It is necessary to verify if the binary is 32-bit, so that the system
++# call `__kernel_vsyscall' originates from vDSO.
++
++if { ![is_ilp32_target] } {
++    return -1
++}
++
++if { [prepare_for_testing $testfile.exp $testfile $srcfile] } {
++    return -1
++}
++
++if { ![runto_main] } {
++    return -1
++}
++
++gdb_test "continue" "Program received signal SIGABRT, Aborted.*" \
++    "continue until abort"
++gdb_test "set solib-absolute-prefix /BOGUS_DIRECT" \
++    ".*warning: Unable to find dynamic linker breakpoint function.*" \
++    "set solib-absolute-prefix"
++gdb_test "bt" "__kernel_vsyscall.*" "backtrace with __kernel_vsyscall"
diff --git a/SOURCES/gdb-rhbz1007614-memleak-infpy_read_memory-test.patch b/SOURCES/gdb-rhbz1007614-memleak-infpy_read_memory-test.patch
new file mode 100644
index 0000000..4d05ba5
--- /dev/null
+++ b/SOURCES/gdb-rhbz1007614-memleak-infpy_read_memory-test.patch
@@ -0,0 +1,170 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-rhbz1007614-memleak-infpy_read_memory-test.patch
+
+;; Fix 'memory leak in infpy_read_memory()' (RH BZ 1007614)
+;;=fedoratest
+
+Original message by Tom Tromey:
+
+  <https://sourceware.org/ml/gdb-patches/2012-03/msg00955.html>
+  Message-ID: <871uoc1va3.fsf@fleche.redhat.com>
+
+Comment from Sergio Durigan Junior:
+
+  In order to correctly test this patch, I wrote a testcase based on Jan
+  Kratochvil's <gdb/testsuite/gdb.base/gcore-excessive-memory.exp>.  The
+  testcase, which can be seen below, tests GDB in order to see if the
+  amount of memory being leaked is minimal, as requested in the bugzilla.
+  It is hard to define what "minimum" is, so I ran the testcase on all
+  supported RHEL architectures and came up with an average.
+
+commit cc0265cdda9dc7e8665e8bfcf5b4477489daf27c
+Author: Tom Tromey <tromey@redhat.com>
+Date:   Wed Mar 28 17:38:08 2012 +0000
+
+    	* python/py-inferior.c (infpy_read_memory): Remove cleanups and
+    	explicitly free 'buffer' on exit paths.  Decref 'membuf_object'
+    	before returning.
+
+diff --git a/gdb/testsuite/gdb.python/py-gdb-rhbz1007614-memleak-infpy_read_memory.c b/gdb/testsuite/gdb.python/py-gdb-rhbz1007614-memleak-infpy_read_memory.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.python/py-gdb-rhbz1007614-memleak-infpy_read_memory.c
+@@ -0,0 +1,27 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2014 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++static struct x
++  {
++    char unsigned u[4096];
++  } x, *px = &x;
++
++int
++main (int argc, char *argv[])
++{
++  return 0;
++}
+diff --git a/gdb/testsuite/gdb.python/py-gdb-rhbz1007614-memleak-infpy_read_memory.exp b/gdb/testsuite/gdb.python/py-gdb-rhbz1007614-memleak-infpy_read_memory.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.python/py-gdb-rhbz1007614-memleak-infpy_read_memory.exp
+@@ -0,0 +1,68 @@
++# Copyright 2014 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++set testfile py-gdb-rhbz1007614-memleak-infpy_read_memory
++set srcfile ${testfile}.c
++set binfile [standard_output_file ${testfile}]
++
++if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile}] } {
++    return -1
++}
++
++if { [skip_python_tests] } { continue }
++
++set pid_of_gdb [exp_pid -i [board_info host fileid]]
++
++proc memory_v_pages_get {} {
++    global pid_of_gdb
++    set fd [open "/proc/$pid_of_gdb/statm"]
++    gets $fd line
++    close $fd
++    # number of pages of virtual memory
++    scan $line "%d" drs
++    return $drs
++}
++
++if { ![runto_main] } {
++    untested $testfile.exp
++    return -1
++}
++
++set remote_python_file [remote_download host ${srcdir}/${subdir}/${testfile}.py]
++
++gdb_test "source ${remote_python_file}" ""
++
++gdb_test "hello-world" ""
++
++set kbytes_before [memory_v_pages_get]
++verbose -log "kbytes_before = $kbytes_before"
++
++gdb_test "hello-world" ""
++
++set kbytes_after [memory_v_pages_get]
++verbose -log "kbytes_after = $kbytes_after"
++
++set kbytes_diff [expr $kbytes_after - $kbytes_before]
++verbose -log "kbytes_diff = $kbytes_diff"
++
++# The value "1000" was calculated by running a few GDB sessions with this
++# testcase, and seeing how much (in average) the memory consumption
++# increased after the "hello-world" command issued above.  The average
++# was around 500 bytes, so I chose 1000 as a high estimate.
++if { $kbytes_diff > 1000 } {
++    fail "there is a memory leak on GDB (RHBZ 1007614)"
++} else {
++    pass "there is not a memory leak on GDB (RHBZ 1007614)"
++}
+diff --git a/gdb/testsuite/gdb.python/py-gdb-rhbz1007614-memleak-infpy_read_memory.py b/gdb/testsuite/gdb.python/py-gdb-rhbz1007614-memleak-infpy_read_memory.py
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.python/py-gdb-rhbz1007614-memleak-infpy_read_memory.py
+@@ -0,0 +1,30 @@
++# Copyright (C) 2014 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++class HelloWorld (gdb.Command):
++    """Greet the whole world."""
++
++    def __init__ (self):
++        super (HelloWorld, self).__init__ ("hello-world",
++                                           gdb.COMMAND_OBSCURE)
++
++    def invoke (self, arg, from_tty):
++        px = gdb.parse_and_eval("px")
++        core = gdb.inferiors()[0]
++        for i in range(256 * 1024):
++            chunk = core.read_memory(px, 4096)
++        print "Hello, World!"
++
++HelloWorld ()
diff --git a/SOURCES/gdb-rhbz1084404-ppc64-s390x-wrong-prologue-skip-O2-g-3of3.patch b/SOURCES/gdb-rhbz1084404-ppc64-s390x-wrong-prologue-skip-O2-g-3of3.patch
new file mode 100644
index 0000000..d92bfc3
--- /dev/null
+++ b/SOURCES/gdb-rhbz1084404-ppc64-s390x-wrong-prologue-skip-O2-g-3of3.patch
@@ -0,0 +1,235 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-rhbz1084404-ppc64-s390x-wrong-prologue-skip-O2-g-3of3.patch
+
+;; Fix '[ppc64] and [s390x] wrong prologue skip on -O2 -g code' (Jan
+;; Kratochvil, RH BZ 1084404).
+;;=fedoratest
+
+These testcases have been created by compiling glibc-2.17-78 on
+RHEL-7.1 s390x/ppc64 boxes, and then taking the "select.o" file
+present at $builddir/misc/select.o.
+
+diff --git a/gdb/testsuite/gdb.arch/ppc64-prologue-skip.exp b/gdb/testsuite/gdb.arch/ppc64-prologue-skip.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.arch/ppc64-prologue-skip.exp
+@@ -0,0 +1,34 @@
++# Copyright 2015 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++if { ![istarget powerpc64-*linux-*] || ![is_lp64_target] } {
++    verbose "Skipping ppc64-prologue-skip.exp"
++    return
++}
++
++set testfile "ppc64-prologue-skip"
++set uufile "${srcdir}/${subdir}/${testfile}.o.uu"
++set ofile "${srcdir}/${subdir}/${testfile}.o"
++
++if { [catch "system \"uudecode -o ${ofile} ${uufile}\"" ] != 0 } {
++    untested "failed uudecode"
++    return -1
++}
++
++gdb_exit
++gdb_start
++gdb_load $ofile
++
++gdb_test "break ___newselect_nocancel" "Breakpoint $decimal at 0xc: file ../sysdeps/unix/syscall-template.S, line 81." "breakpoint on ___newselect_nocancel"
+diff --git a/gdb/testsuite/gdb.arch/ppc64-prologue-skip.o.uu b/gdb/testsuite/gdb.arch/ppc64-prologue-skip.o.uu
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.arch/ppc64-prologue-skip.o.uu
+@@ -0,0 +1,70 @@
++begin 644 ppc64-skip-prologue.o.uu
++M?T5,1@("`0`````````````!`!4````!````````````````````````````
++M``-(``````!```````!``!0`$8%-B-`L"@``0,(`-#@``(Y$```"3.,`('P(
++M`J;X`0`0^"'_D4@```%@````Z`$`@#@A`'!\"`.F3H``(/@A_X%]*`*F^2$`
++MD/CA`-#XP0#(^*$`P/B!`+CX80"P2````6````#X80!PZ.$`T.C!`,CHH0#`
++MZ($`N.AA`+`X``".1````GP``";X80!X^`$`B.AA`'!(```!8````.DA`)#H
++M`0"(Z&$`>'TH`Z9\#_$@."$`@$SC`"!+__]@```````,($``````````O``(
++M7U]S96QE8W0```````````````````````````!6``(````Y!`'[#@T``0$!
++M`0````$```$N+B]S>7-D97!S+W5N:7@``'-Y<V-A;&PM=&5M<&QA=&4N4P`!
++M``````D"```````````#T``!`BT3`@D``0$```"/``(`````"`$`````````
++M`````````````````"XN+W-Y<V1E<',O=6YI>"]S>7-C86QL+71E;7!L871E
++M+E,`+W)O;W0O9VQI8F,O9VQI8F,M,BXQ-RTW."YE;#<N<W)C+V=L:6)C+3(N
++M,3<M8S<U.&$V.#8O;6ES8P!'3E4@05,@,BXR,RXU,BXP+C$`@`$!$0`0!A$!
++M$@$#"!L()0@3!0`````````````````L``(`````"```````````````````
++M````````V``````````````````````````0``````%Z4@`$>$$!&PP!````
++M`#`````8`````````+P`20YP$4%^1`X`009!0@Z``4(107Y2$49_20X`!D$&
++M1@``````+G-Y;71A8@`N<W1R=&%B`"YS:'-T<G1A8@`N<F5L82YT97AT`"YD
++M871A`"YB<W,`+G)E;&$N;W!D`"YN;W1E+D=.52US=&%C:P`N<F5L82YD96)U
++M9U]L:6YE`"YR96QA+F1E8G5G7VEN9F\`+F1E8G5G7V%B8G)E=@`N<F5L82YD
++M96)U9U]A<F%N9V5S`"YR96QA+F5H7V9R86UE````````````````````````
++M````````````````````````````````````````````````````````````
++M`````````"`````!``````````8```````````````````!``````````-@`
++M```````````````````$```````````````;````!```````````````````
++M```````````*>`````````!(````$@````$`````````"``````````8````
++M)@````$``````````P```````````````````1@`````````````````````
++M``````````$``````````````"P````(``````````,`````````````````
++M``$8```````````````````````````````!```````````````V`````0``
++M```````#```````````````````!&``````````0````````````````````
++M"```````````````,0````0`````````````````````````````"L``````
++M````,````!(````%``````````@`````````&````#L````!````````````
++M``````````````````$H```````````````````````````````!````````
++M``````!0`````0`````````````````````````````!*`````````!:````
++M`````````````````0``````````````2P````0`````````````````````
++M````````"O``````````&````!(````(``````````@`````````&````&$`
++M```!``````````````````````````````&"`````````),`````````````
++M```````!``````````````!<````!``````````````````````````````+
++M"`````````!@````$@````H`````````"``````````8````;0````$`````
++M`````````````````````````A4`````````%`````````````````````$`
++M`````````````(`````!``````````````````````````````(P````````
++M`#`````````````````````0``````````````![````!```````````````
++M```````````````+:``````````P````$@````T`````````"``````````8
++M````E`````$``````````@```````````````````F``````````2```````
++M``````````````@``````````````(\````$````````````````````````
++M``````N8`````````!@````2````#P`````````(`````````!@````1````
++M`P`````````````````````````````"J`````````">````````````````
++M`````0```````````````0````(`````````````````````````````"$@`
++M```````!L````!,````+``````````@`````````&`````D````#````````
++M``````````````````````GX`````````'H````````````````````!````
++M`````````````````````````````````````````````P```0``````````
++M`````````````````P```P```````````````````````````P``!```````
++M`````````````````````P``!0```````````````````````````P``"@``
++M`````````````````````````P``#````````````````````````````P``
++M"````````````````````````````P``#0``````````````````````````
++M`P``#P```````````````````````````P``!P``````````````````````
++M```!$@``!0```````````````````-@````*$@```0`````````,````````
++M`#`````@$``````````````````````````````P$```````````````````
++M``````````!*$`````````````````````````````!E(@``!0``````````
++M`````````-@```!S(@``!0```````````````````-@`7U]S96QE8W0`7U]?
++M;F5W<V5L96-T7VYO8V%N8V5L`%]?<WES8V%L;%]E<G)O<@!?7VQI8F-?96YA
++M8FQE7V%S>6YC8V%N8V5L`%]?;&EB8U]D:7-A8FQE7V%S>6YC8V%N8V5L`%]?
++M;&EB8U]S96QE8W0`<V5L96-T```````````````````D````#0````H`````
++M``````````````!<````#@````H```````````````````"4````#P````H`
++M`````````````````````````0```"8````````````````````(````````
++M`#,```````````````````!&`````0```"8````````````````````&````
++M!@````$````````````````````,````!P````$````````````````````0
++M`````0```"8````````````````````8`````0```"8`````````V```````
++M```&````!0````$````````````````````0`````0```"8`````````````
++6```````<`````0```!H`````````````
++`
++end
+diff --git a/gdb/testsuite/gdb.arch/s390x-prologue-skip.exp b/gdb/testsuite/gdb.arch/s390x-prologue-skip.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.arch/s390x-prologue-skip.exp
+@@ -0,0 +1,34 @@
++# Copyright 2015 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++if { ![istarget s390x-*linux-*] || ![is_lp64_target] } {
++    verbose "Skipping s390x-prologue-skip.exp"
++    return
++}
++
++set testfile "s390x-prologue-skip"
++set uufile "${srcdir}/${subdir}/${testfile}.o.uu"
++set ofile "${srcdir}/${subdir}/${testfile}.o"
++
++if { [catch "system \"uudecode -o ${ofile} ${uufile}\"" ] != 0 } {
++    untested "failed uudecode"
++    return -1
++}
++
++gdb_exit
++gdb_start
++gdb_load $ofile
++
++gdb_test "break select" "Breakpoint $decimal at 0x48: file ../sysdeps/unix/syscall-template.S, line 81." "breakpoint on select"
+diff --git a/gdb/testsuite/gdb.arch/s390x-prologue-skip.o.uu b/gdb/testsuite/gdb.arch/s390x-prologue-skip.o.uu
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.arch/s390x-prologue-skip.o.uu
+@@ -0,0 +1,64 @@
++begin 644 s390x-prologue-skip.o.uu
++M?T5,1@("`0`````````````!`!8````!````````````````````````````
++M``+```````!```````!``!(`#^LE\!``).O?\&@`)+D$`.^G^_]@X^#P```D
++MP.4`````N00``NLE\+``!`J.N00`TKD$`"#`Y0````"Y!``MZ]_Q"``$I_0`
++M"L`0`````+\/$`"G=/_7"HZG2?`!N2$`),"T``````?^````5@`"````.0$!
++M^PX-``$!`0$````!```!+BXO<WES9&5P<R]U;FEX``!S>7-C86QL+71E;7!L
++M871E+E,``0`````)`@```````````]```0)F$P("``$!````CP`"``````@!
++M```````````````````````````N+B]S>7-D97!S+W5N:7@O<WES8V%L;"UT
++M96UP;&%T92Y3`"]R;V]T+V=L:6)C+V=L:6)C+3(N,3<M-S@N96PW+G-R8R]G
++M;&EB8RTR+C$W+6,W-3AA-C@V+VUI<V,`1TY5($%3(#(N,C,N-3(N,"XQ`(`!
++M`1$`$`81`1(!`P@;""4($P4`````````````````+``"``````@`````````
++M`````````````````&@`````````````````````````%``````!>E(``7@.
++M`1L,#Z`!````````&````!P`````````1`!,CP6.!HT'2`[``@```!`````X
++M`````````"```````"YS>6UT86(`+G-T<G1A8@`N<VAS=')T86(`+G)E;&$N
++M=&5X=``N9&%T80`N8G-S`"YN;W1E+D=.52US=&%C:P`N<F5L82YD96)U9U]L
++M:6YE`"YR96QA+F1E8G5G7VEN9F\`+F1E8G5G7V%B8G)E=@`N<F5L82YD96)U
++M9U]A<F%N9V5S`"YR96QA+F5H7V9R86UE````````````````````````````
++M````````````````````````````````````````````````````````````
++M````````(`````$`````````!@```````````````````$``````````:```
++M``````````````````0``````````````!L````$````````````````````
++M``````````F``````````&`````0`````0`````````(`````````!@````F
++M`````0`````````#````````````````````J```````````````````````
++M````````!```````````````+`````@``````````P``````````````````
++M`*@```````````````````````````````0``````````````#$````!````
++M``````````````````````````"H```````````````````````````````!
++M``````````````!&`````0``````````````````````````````J```````
++M``!:`````````````````````0``````````````00````0`````````````
++M````````````````">``````````&````!`````&``````````@`````````
++M&````%<````!``````````````````````````````$"`````````),`````
++M```````````````!``````````````!2````!```````````````````````
++M```````)^`````````!@````$`````@`````````"``````````8````8P``
++M``$``````````````````````````````94`````````%```````````````
++M``````$``````````````'8````!``````````````````````````````&P
++M`````````#`````````````````````0``````````````!Q````!```````
++M```````````````````````*6``````````P````$`````L`````````"```
++M```````8````B@````$``````````@```````````````````>``````````
++M2`````````````````````@``````````````(4````$````````````````
++M``````````````J(`````````#`````0````#0`````````(`````````!@`
++M```1`````P`````````````````````````````"*`````````"4````````
++M`````````````0```````````````0````(`````````````````````````
++M````!T`````````!L````!$````*``````````@`````````&`````D````#
++M``````````````````````````````CP`````````(X`````````````````
++M```!`````````````````````````````````````````````````P```0``
++M`````````````````````````P```P```````````````````````````P``
++M!````````````````````````````P``"```````````````````````````
++M`P``"@```````````````````````````P``!@``````````````````````
++M`````P``"P```````````````````````````P``#0``````````````````
++M`````````P``!0`````````````````````````!$```````````````````
++M```````````;$``````````````````````````````V$@```0````````!(
++M`````````"`````_$`````````````````````````````!7$@```0``````
++M``!6`````````!````!I$`````````````````````````````!Y(@```0``
++M``````!(`````````"````"'(@```0````````!(`````````"``7U]L:6)C
++M7V5N86)L95]A<WEN8V-A;F-E;`!?7VQI8F-?9&ES86)L95]A<WEN8V-A;F-E
++M;`!?7W-E;&5C=`!?7VQI8F-?;75L=&EP;&5?=&AR96%D<P!?7W-E;&5C=%]N
++M;V-A;F-E;`!?7W-Y<V-A;&Q?97)R;W(`7U]L:6)C7W-E;&5C=`!S96QE8W0`
++M````````````'`````H````3``````````(`````````-@````L````3````
++M``````(`````````2@````T````3``````````(`````````8@````\````3
++M``````````(`````````1@````$````6````````````````````!@````4`
++M```$````````````````````#`````8````$````````````````````$```
++M``$````6````````````````````&`````$````6`````````&@`````````
++M!@````0````$````````````````````$`````$````6````````````````
++L````(`````$````%````````````````````/`````$````%`````````$@`
++`
++end
diff --git a/SOURCES/gdb-rhbz1149205-catch-syscall-after-fork-test.patch b/SOURCES/gdb-rhbz1149205-catch-syscall-after-fork-test.patch
new file mode 100644
index 0000000..63c4051
--- /dev/null
+++ b/SOURCES/gdb-rhbz1149205-catch-syscall-after-fork-test.patch
@@ -0,0 +1,123 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-rhbz1149205-catch-syscall-after-fork-test.patch
+
+;; Fix '`catch syscall' doesn't work for parent after `fork' is called'
+;; (Philippe Waroquiers, RH BZ 1149205).
+;;=fedoratest
+
+URL: <https://sourceware.org/ml/gdb-patches/2013-05/msg00364.html>
+Message-ID: <1368136582.30058.7.camel@soleil>
+
+  From: Philippe Waroquiers <philippe dot waroquiers at skynet dot be>
+  To: gdb-patches at sourceware dot org
+  Subject: RFA: fix gdb_assert caused by 'catch signal ...' and fork
+  Date: Thu, 09 May 2013 23:56:22 +0200
+
+  The attached patch fixes a gdb_assert caused by the combination of catch
+  signal and fork:
+    break-catch-sig.c:152: internal-error: signal_catchpoint_remove_location: Assertion `signal_catch_counts[iter] > 0' failed.
+
+  The problem is that the signal_catch_counts is decremented by detach_breakpoints.
+  The fix consists in not detaching breakpoint locations of type bp_loc_other.
+  The patch introduces a new test.
+
+Comments by Sergio Durigan Junior:
+
+  I addded a specific testcase for this patch, which tests exactly the
+  issue that the customer is facing.  This patch does not solve the
+  whole problem of catching a syscall and forking (for more details,
+  see <https://sourceware.org/bugzilla/show_bug.cgi?id=13457>,
+  specifically comment #3), but it solves the issue reported by the
+  customer.
+
+  I also removed the original testcase of this patch, because it
+  relied on "catch signal", which is a command that is not implemented
+  in this version of GDB.
+
+commit bd9673a4ded96ea5c108601501c8e59003ea1be6
+Author: Philippe Waroquiers <philippe@sourceware.org>
+Date:   Tue May 21 18:47:05 2013 +0000
+
+    Fix internal error caused by interaction between catch signal and fork
+
+diff --git a/gdb/testsuite/gdb.base/gdb-rhbz1149205-catch-syscall-fork.c b/gdb/testsuite/gdb.base/gdb-rhbz1149205-catch-syscall-fork.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/gdb-rhbz1149205-catch-syscall-fork.c
+@@ -0,0 +1,11 @@
++#include <stdio.h>
++#include <unistd.h>
++
++int
++main (int argc, char **argv)
++{
++  if (fork () == 0)
++    sleep (1);
++  chdir (".");
++  return 0;
++}
+diff --git a/gdb/testsuite/gdb.base/gdb-rhbz1149205-catch-syscall-fork.exp b/gdb/testsuite/gdb.base/gdb-rhbz1149205-catch-syscall-fork.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/gdb-rhbz1149205-catch-syscall-fork.exp
+@@ -0,0 +1,58 @@
++# Copyright 2015 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++if { [is_remote target] || ![isnative] } then {
++    continue
++}
++
++set testfile "gdb-rhbz1149205-catch-syscall-fork"
++set srcfile ${testfile}.c
++set binfile [standard_output_file ${testfile}]
++
++# Until "catch syscall" is implemented on other targets...
++if {![istarget "hppa*-hp-hpux*"] && ![istarget "*-linux*"]} then {
++    continue
++}
++
++# This shall be updated whenever 'catch syscall' is implemented
++# on some architecture.
++#if { ![istarget "i\[34567\]86-*-linux*"]
++if { ![istarget "x86_64-*-linux*"] && ![istarget "i\[34567\]86-*-linux*"]
++     && ![istarget "powerpc-*-linux*"] && ![istarget "powerpc64-*-linux*"]
++     && ![istarget "sparc-*-linux*"] && ![istarget "sparc64-*-linux*"] } {
++     continue
++}
++
++if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
++    untested ${testfile}.exp
++    return -1
++}
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++gdb_load $binfile
++
++if { ![runto_main] } {
++    return -1
++}
++
++gdb_test "catch syscall chdir" \
++  "Catchpoint $decimal \\\(syscall (.)?chdir(.)? \\\[$decimal\\\]\\\)" \
++  "catch syscall chdir"
++
++gdb_test "continue" \
++  "Continuing\.\r\n.*\r\nCatchpoint $decimal \\\(call to syscall .?chdir.?.*" \
++  "continue from catch syscall after fork"
diff --git a/SOURCES/gdb-rhbz1156192-recursive-dlopen-test.patch b/SOURCES/gdb-rhbz1156192-recursive-dlopen-test.patch
new file mode 100644
index 0000000..6ca0c7b
--- /dev/null
+++ b/SOURCES/gdb-rhbz1156192-recursive-dlopen-test.patch
@@ -0,0 +1,350 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-rhbz1156192-recursive-dlopen-test.patch
+
+;; Testcase for '[SAP] Recursive dlopen causes SAP HANA installer to
+;; crash.' (RH BZ 1156192).
+;;=fedoratest
+
+diff --git a/gdb/testsuite/gdb.base/gdb-rhbz1156192-recursive-dlopen-libbar.c b/gdb/testsuite/gdb.base/gdb-rhbz1156192-recursive-dlopen-libbar.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/gdb-rhbz1156192-recursive-dlopen-libbar.c
+@@ -0,0 +1,30 @@
++/* Testcase for recursive dlopen calls.
++
++   Copyright (C) 2014 Free Software Foundation, Inc.
++
++   This file is part of GDB.
++
++   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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++/* This test was copied from glibc's testcase called
++   <dlfcn/tst-rec-dlopen.c> and related files.  */
++
++#include <stdio.h>
++#include <stdlib.h>
++
++void
++bar (void)
++{
++  printf ("Called bar.\n");
++}
+diff --git a/gdb/testsuite/gdb.base/gdb-rhbz1156192-recursive-dlopen-libfoo.c b/gdb/testsuite/gdb.base/gdb-rhbz1156192-recursive-dlopen-libfoo.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/gdb-rhbz1156192-recursive-dlopen-libfoo.c
+@@ -0,0 +1,30 @@
++/* Testcase for recursive dlopen calls.
++
++   Copyright (C) 2014 Free Software Foundation, Inc.
++
++   This file is part of GDB.
++
++   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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++/* This test was copied from glibc's testcase called
++   <dlfcn/tst-rec-dlopen.c> and related files.  */
++
++#include <stdio.h>
++#include <stdlib.h>
++
++void
++foo (void)
++{
++  printf ("Called foo.\n");
++}
+diff --git a/gdb/testsuite/gdb.base/gdb-rhbz1156192-recursive-dlopen.c b/gdb/testsuite/gdb.base/gdb-rhbz1156192-recursive-dlopen.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/gdb-rhbz1156192-recursive-dlopen.c
+@@ -0,0 +1,124 @@
++/* Testcase for recursive dlopen calls.
++
++   Copyright (C) 2014 Free Software Foundation, Inc.
++
++   This file is part of GDB.
++
++   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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++/* This test was copied from glibc's testcase called
++   <dlfcn/tst-rec-dlopen.c> and related files.  */
++
++#include <stdio.h>
++#include <stdlib.h>
++#include <malloc.h>
++#include <dlfcn.h>
++
++#define DSO "gdb-rhbz1156192-recursive-dlopen-libfoo.so"
++#define FUNC "foo"
++
++#define DSO1 "gdb-rhbz1156192-recursive-dlopen-libbar.so"
++#define FUNC1 "bar"
++
++/* Prototype for my hook.  */
++void *custom_malloc_hook (size_t, const void *);
++
++/* Pointer to old malloc hooks.  */
++void *(*old_malloc_hook) (size_t, const void *);
++
++/* Call function func_name in DSO dso_name via dlopen.  */
++void
++call_func (const char *dso_name, const char *func_name)
++{
++  int ret;
++  void *dso;
++  void (*func) (void);
++  char *err;
++
++  /* Open the DSO.  */
++  dso = dlopen (dso_name, RTLD_NOW|RTLD_GLOBAL);
++  if (dso == NULL)
++    {
++      err = dlerror ();
++      fprintf (stderr, "%s\n", err);
++      exit (1);
++    }
++  /* Clear any errors.  */
++  dlerror ();
++
++  /* Lookup func.  */
++  *(void **) (&func) = dlsym (dso, func_name);
++  if (func == NULL)
++    {
++      err = dlerror ();
++      if (err != NULL)
++        {
++  fprintf (stderr, "%s\n", err);
++  exit (1);
++        }
++    }
++  /* Call func twice.  */
++  (*func) ();
++
++  /* Close the library and look for errors too.  */
++  ret = dlclose (dso);
++  if (ret != 0)
++    {
++      err = dlerror ();
++      fprintf (stderr, "%s\n", err);
++      exit (1);
++    }
++
++}
++
++/* Empty hook that does nothing.  */
++void *
++custom_malloc_hook (size_t size, const void *caller)
++{
++  void *result;
++  /* Restore old hooks.  */
++  __malloc_hook = old_malloc_hook;
++  /* First call a function in another library via dlopen.  */
++  call_func (DSO1, FUNC1);
++  /* Called recursively.  */
++  result = malloc (size);
++  /* Restore new hooks.  */
++  __malloc_hook = custom_malloc_hook;
++  return result;
++}
++
++int
++main (void)
++{
++
++  /* Save old hook.  */
++  old_malloc_hook = __malloc_hook;
++  /* Install new hook.  */
++  __malloc_hook = custom_malloc_hook;
++
++  /* Attempt to dlopen a shared library. This dlopen will
++     trigger an access to the ld.so.cache, and that in turn
++     will require a malloc to duplicate data in the cache.
++     The malloc will call our malloc hook which calls dlopen
++     recursively, and upon return of this dlopen the non-ref
++     counted ld.so.cache mapping will be unmapped. We will
++     return to the original dlopen and crash trying to access
++     dlopened data.  */
++  call_func (DSO, FUNC);
++
++  /* Restore old hook.  */
++  __malloc_hook = old_malloc_hook;
++
++  return 0;
++}
+diff --git a/gdb/testsuite/gdb.base/gdb-rhbz1156192-recursive-dlopen.exp b/gdb/testsuite/gdb.base/gdb-rhbz1156192-recursive-dlopen.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/gdb-rhbz1156192-recursive-dlopen.exp
+@@ -0,0 +1,137 @@
++# Copyright 2014 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++if { [skip_shlib_tests] } {
++  return 0
++}
++
++# Library foo
++set libname1 "gdb-rhbz1156192-recursive-dlopen-libfoo"
++set srcfile_lib1 ${srcdir}/${subdir}/${libname1}.c
++set binfile_lib1 [standard_output_file ${libname1}.so]
++# Library bar
++set libname2 "gdb-rhbz1156192-recursive-dlopen-libbar"
++set srcfile_lib2 ${srcdir}/${subdir}/${libname2}.c
++set binfile_lib2 [standard_output_file ${libname2}.so]
++
++set testfile "gdb-rhbz1156192-recursive-dlopen"
++set srcfile ${testfile}.c
++set executable ${testfile}
++set binfile [standard_output_file ${executable}]
++
++if { [gdb_compile_shlib ${srcfile_lib1} ${binfile_lib1} \
++	{ debug "additional_flags=-fPIC" }] != "" } {
++    untested "Could not compile ${binfile_lib1}"
++    return -1
++}
++
++if { [gdb_compile_shlib ${srcfile_lib2} ${binfile_lib2} \
++	{ debug "additional_flags=-fPIC" }] != "" } {
++    untested "Could not compile ${binfile_lib2}"
++    return -1
++}
++
++if { [prepare_for_testing ${testfile}.exp ${executable} ${srcfile} \
++	[ list debug shlib_load "additional_flags=-Wno-deprecated-declarations" ]] } {
++    untested "Could not compile ${executable}"
++    return -1
++}
++
++proc do_test { has_libfoo has_libbar } {
++  global hex binfile_lib2 binfile_lib1 gdb_prompt
++  set libbar_match "[string_to_regexp $binfile_lib2]"
++  set libfoo_match "[string_to_regexp $binfile_lib1]"
++
++  gdb_test_multiple "info shared" "info shared" {
++    -re ".*$libfoo_match\r\n.*$libbar_match\(\r\n.*Shared library is missing\)?.*\r\n${gdb_prompt} $" {
++      if { $has_libfoo && $has_libbar } {
++	pass "matched libfoo and libbar"
++      } else {
++	fail "matched libfoo and libbar (has_libfoo = $has_libfoo, has_libbar = $has_libbar)"
++      }
++    }
++    -re ".*$libfoo_match\(\r\n.*Shared library is missing\)?.*\r\n${gdb_prompt} $" {
++      if { $has_libfoo && !$has_libbar } {
++	pass "matched libfoo"
++      } else {
++	fail "matched libfoo (has_libfoo = $has_libfoo, has_libbar = $has_libbar)"
++      }
++    }
++    -re ".*$libbar_match\(\r\n.*Shared library is missing\)?.*\r\n${gdb_prompt} $" {
++      if { $has_libbar && !$has_libfoo } {
++	pass "matched libbar"
++      } else {
++	fail "matched libbar (has_libfoo = $has_libfoo, has_libbar = $has_libbar)"
++      }
++    }
++    "\r\n${gdb_prompt} $" {
++      if { !$has_libfoo && !$has_libbar } {
++	pass "did not match libfoo nor libbar"
++      } else {
++	fail "did not match libfoo nor libbar (has_libfoo = $has_libfoo, has_libbar = $has_libbar)"
++      }
++    }
++  }
++}
++
++proc test_stop_on_solib_events { } {
++  set pass 0
++  # This variable holds the information about whether libfoo and
++  # libbar (respectively) are expected in the "info shared" output.
++  set solib_event_order { { 0 0 } { 0 0   } { 0 0   } { 0 1 } \
++			  { 0 1 } { 0 0   } { 0 0   } { 0 1 } \
++			  { 0 1 } { 0 0   } { 0 0   } { 0 1 } \
++			  { 0 1 } { 0 0   } { 0 0 1 } { 1 1 } \
++			  { 1 1 } { 1 0   } { 1 0   } { 1 1 } \
++			  { 1 1 } { 1 0 1 } { 1 0   } { 1 0 } }
++
++  with_test_prefix "stop-on-solib-events" {
++    gdb_test_no_output "set stop-on-solib-events 1" "setting stop-on-solib-events"
++
++    gdb_run_cmd
++    foreach l $solib_event_order {
++      incr pass
++      with_test_prefix "pass #$pass" {
++	set should_be_corrupted [expr 0+0[lindex $l 2]]
++	do_test [lindex $l 0] [lindex $l 1]
++	set test "continue"
++	global gdb_prompt
++	gdb_test_multiple $test $test {
++	  -re "\r\nwarning: Corrupted shared library list:.*\r\nStopped due to shared library event.*\r\n$gdb_prompt $" {
++	    set corrupted 1
++	    pass $test
++	  }
++	  -re "\r\nStopped due to shared library event.*\r\n$gdb_prompt $" {
++	    set corrupted 0
++	    pass $test
++	  }
++	}
++	set test "corrupted=$corrupted but should_be_corrupted=$should_be_corrupted"
++	if {$corrupted == $should_be_corrupted} {
++	  pass $test
++	} else {
++	  fail $test
++	}
++      }
++    }
++    # In the last pass we do not expect to see libfoo or libbar.
++    incr pass
++    with_test_prefix "pass #$pass" {
++      do_test 0 0
++    }
++  }
++}
++
++test_stop_on_solib_events
diff --git a/SOURCES/gdb-rhbz1186476-internal-error-unqualified-name-re-set-test.patch b/SOURCES/gdb-rhbz1186476-internal-error-unqualified-name-re-set-test.patch
new file mode 100644
index 0000000..21a1a08
--- /dev/null
+++ b/SOURCES/gdb-rhbz1186476-internal-error-unqualified-name-re-set-test.patch
@@ -0,0 +1,135 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-rhbz1186476-internal-error-unqualified-name-re-set-test.patch
+
+;; Fix 'backport GDB 7.4 fix to RHEL 6.6 GDB' [Original Sourceware bug
+;; description: 'C++ (and objc): Internal error on unqualified name
+;; re-set', PR 11657] (RH BZ 1186476).
+;;=fedoratest
+
+Comments from Sergio Durigan Junior:
+
+  The "proper" fix for this whole problem would be to backport the
+  "ambiguous linespec" patch series.  However, it is really not
+  recommended to do that for RHEL GDB, because the patch series is too
+  big and could introduce unwanted regressions.  Instead, what we
+  chose to do was to replace the gdb_assert call by a warning (which
+  allows the user to continue the debugging session), and tell the
+  user that, although more than one location was found for his/her
+  breakpoint, only one will be used.
+
+diff --git a/gdb/testsuite/gdb.cp/gdb-rhbz1186476-internal-error-unqualified-name-re-set-main.cc b/gdb/testsuite/gdb.cp/gdb-rhbz1186476-internal-error-unqualified-name-re-set-main.cc
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.cp/gdb-rhbz1186476-internal-error-unqualified-name-re-set-main.cc
+@@ -0,0 +1,22 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2015 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++int
++main (int argc, char *argv[])
++{
++  return 0;
++}
+diff --git a/gdb/testsuite/gdb.cp/gdb-rhbz1186476-internal-error-unqualified-name-re-set.cc b/gdb/testsuite/gdb.cp/gdb-rhbz1186476-internal-error-unqualified-name-re-set.cc
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.cp/gdb-rhbz1186476-internal-error-unqualified-name-re-set.cc
+@@ -0,0 +1,26 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2015 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++class C
++  {
++    public:
++      C () {}
++      C (int x) {}
++  };
++
++C a;
++C b (1);
+diff --git a/gdb/testsuite/gdb.cp/gdb-rhbz1186476-internal-error-unqualified-name-re-set.exp b/gdb/testsuite/gdb.cp/gdb-rhbz1186476-internal-error-unqualified-name-re-set.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.cp/gdb-rhbz1186476-internal-error-unqualified-name-re-set.exp
+@@ -0,0 +1,51 @@
++# Copyright 2015 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++if { [skip_cplus_tests] } { continue }
++if { [skip_shlib_tests] } { continue }
++if { [is_remote target] } { continue }
++if { [target_info exists use_gdb_stub] } { continue }
++
++set testfile gdb-rhbz1186476-internal-error-unqualified-name-re-set-main
++set srcfile $testfile.cc
++set executable $testfile
++set binfile [standard_output_file $executable]
++
++set libtestfile gdb-rhbz1186476-internal-error-unqualified-name-re-set
++set libsrcfile $libtestfile.cc
++set sofile [standard_output_file lib$libtestfile.so]
++
++# Create and source the file that provides information about the compiler
++# used to compile the test case.
++if [get_compiler_info "c++"] {
++    return -1
++}
++
++if { [gdb_compile_shlib $srcdir/$subdir/$libsrcfile $sofile {debug c++ "additional_flags=-fPIC"}] != ""
++     || [gdb_compile $srcdir/$subdir/$srcfile $binfile executable [list additional_flags=-Wl,-rpath,[file dirname ${sofile}] "c++" shlib=${sofile} ]] != ""} {
++    untested $libtestfile.exp
++    return -1
++}
++
++clean_restart $executable
++
++gdb_test_no_output "set breakpoint pending on"
++# gdb_breakpoint would print a failure because of some warning messages
++gdb_test "break C::C" "Breakpoint $decimal \\(C::C\\) pending."
++
++#gdb_test "run" "warning: Found more than one location for breakpoint #$decimal; only the first location will be used.(\r\n)+Breakpoint $decimal, C::C.*"
++gdb_test "run"
++
++gdb_test "info break" " in C::C\\(\\) at .* in C::C\\(int\\) at .*"
diff --git a/SOURCES/gdb-rhbz1187581-power8-regs-1of7.patch b/SOURCES/gdb-rhbz1187581-power8-regs-1of7.patch
new file mode 100644
index 0000000..29bd798
--- /dev/null
+++ b/SOURCES/gdb-rhbz1187581-power8-regs-1of7.patch
@@ -0,0 +1,65 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Jan Kratochvil <jan.kratochvil@redhat.com>
+Date: Thu, 9 Aug 2018 17:09:48 +0200
+Subject: gdb-rhbz1187581-power8-regs-1of7.patch
+
+;; Add GDB support to access/display POWER8 registers (IBM, RH BZ 1187581).
+
+commit 05abfc39c719e740530000059bb963ad33462479
+Author: Pedro Franco de Carvalho <pedromfc@linux.ibm.com>
+Date:   Mon Aug 6 16:24:55 2018 -0300
+
+    Fix indentation in remote_target::download_tracepoint
+
+    gdb/ChangeLog:
+    2018-08-06  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
+
+            * remote.c (remote_target::download_tracepoint): Fix indentation
+            in for block.
+
+diff --git a/gdb/remote.c b/gdb/remote.c
+--- a/gdb/remote.c
++++ b/gdb/remote.c
+@@ -12912,24 +12912,24 @@ remote_target::download_tracepoint (struct bp_location *loc)
+ 	error (_("Error on target while setting tracepoints."));
+     }
+ 
+-    for (auto action_it = stepping_actions.begin ();
+-	 action_it != stepping_actions.end (); action_it++)
+-      {
+-	QUIT;	/* Allow user to bail out with ^C.  */
+-
+-	bool is_first = action_it == stepping_actions.begin ();
+-	bool has_more = action_it != stepping_actions.end ();
+-
+-	xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%s%s",
+-		   b->number, addrbuf, /* address */
+-		   is_first ? "S" : "",
+-		   action_it->c_str (),
+-		   has_more ? "-" : "");
+-	putpkt (buf);
+-	remote_get_noisy_reply ();
+-	if (strcmp (rs->buf, "OK"))
+-	  error (_("Error on target while setting tracepoints."));
+-      }
++  for (auto action_it = stepping_actions.begin ();
++       action_it != stepping_actions.end (); action_it++)
++    {
++      QUIT;	/* Allow user to bail out with ^C.  */
++
++      bool is_first = action_it == stepping_actions.begin ();
++      bool has_more = action_it != stepping_actions.end ();
++
++      xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%s%s",
++		 b->number, addrbuf, /* address */
++		 is_first ? "S" : "",
++		 action_it->c_str (),
++		 has_more ? "-" : "");
++      putpkt (buf);
++      remote_get_noisy_reply ();
++      if (strcmp (rs->buf, "OK"))
++	error (_("Error on target while setting tracepoints."));
++    }
+ 
+   if (packet_support (PACKET_TracepointSource) == PACKET_ENABLE)
+     {
diff --git a/SOURCES/gdb-rhbz1187581-power8-regs-2of7.patch b/SOURCES/gdb-rhbz1187581-power8-regs-2of7.patch
new file mode 100644
index 0000000..b0d42cd
--- /dev/null
+++ b/SOURCES/gdb-rhbz1187581-power8-regs-2of7.patch
@@ -0,0 +1,45 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Jan Kratochvil <jan.kratochvil@redhat.com>
+Date: Thu, 9 Aug 2018 17:10:46 +0200
+Subject: gdb-rhbz1187581-power8-regs-2of7.patch
+
+;; Add GDB support to access/display POWER8 registers (IBM, RH BZ 1187581).
+
+commit aa6f3694ce867884e43d1c0406c64df08ea24bd3
+Author: Pedro Franco de Carvalho <pedromfc@linux.ibm.com>
+Date:   Mon Aug 6 16:24:55 2018 -0300
+
+    Remove trailing '-' from the last QTDP action packet
+
+    The has_more predicate in remote_target::download_tracepoint always
+    evaluates to true, so the last action packet will be sent with a
+    trailing '-'.  This patch changes the predicate to remove the last
+    trailing '-'.
+
+    gdb/ChangeLog:
+    2018-08-06  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
+
+            * remote.c (remote_target::download_tracepoint): Fix the has_more
+            predicate in the QTDP action list iteration.
+
+diff --git a/gdb/remote.c b/gdb/remote.c
+--- a/gdb/remote.c
++++ b/gdb/remote.c
+@@ -12899,7 +12899,7 @@ remote_target::download_tracepoint (struct bp_location *loc)
+     {
+       QUIT;	/* Allow user to bail out with ^C.  */
+ 
+-      bool has_more = (action_it != tdp_actions.end ()
++      bool has_more = ((action_it + 1) != tdp_actions.end ()
+ 		       || !stepping_actions.empty ());
+ 
+       xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%c",
+@@ -12918,7 +12918,7 @@ remote_target::download_tracepoint (struct bp_location *loc)
+       QUIT;	/* Allow user to bail out with ^C.  */
+ 
+       bool is_first = action_it == stepping_actions.begin ();
+-      bool has_more = action_it != stepping_actions.end ();
++      bool has_more = (action_it + 1) != stepping_actions.end ();
+ 
+       xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%s%s",
+ 		 b->number, addrbuf, /* address */
diff --git a/SOURCES/gdb-rhbz1187581-power8-regs-3of7.patch b/SOURCES/gdb-rhbz1187581-power8-regs-3of7.patch
new file mode 100644
index 0000000..5546f2b
--- /dev/null
+++ b/SOURCES/gdb-rhbz1187581-power8-regs-3of7.patch
@@ -0,0 +1,258 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Jan Kratochvil <jan.kratochvil@redhat.com>
+Date: Thu, 9 Aug 2018 17:11:09 +0200
+Subject: gdb-rhbz1187581-power8-regs-3of7.patch
+
+;; Add GDB support to access/display POWER8 registers (IBM, RH BZ 1187581).
+
+commit 3df3a985a475db004706d64f83d9085f99053611
+Author: Pedro Franco de Carvalho <pedromfc@linux.ibm.com>
+Date:   Mon Aug 6 16:24:55 2018 -0300
+
+    Use get_remote_packet_size in download_tracepoint
+
+    This patch changes the remote target to use the remote packet size to
+    build QTDP packets, and to check if there is enough room for the
+    packet.
+
+    I changed the function to raise an error if the packet is too small,
+    instead of aborting gdb (through xsnprintf).  It isn't clear if gdb
+    will be in a consistent state with respect to the stub after this,
+    since it's possible that some packets will be sent but not others, and
+    there could be an incomplete tracepoint on the stub.
+
+    The char array used to build the packets is changed to a
+    gdb::char_vector and sized with the result from
+    get_remote_packet_size.
+
+    When checking if the buffer is large enough to hold the tracepoint
+    condition agent expression, the length of the expression is multiplied
+    by two, since it is encoded with two hex digits per expression
+    byte.  For simplicity, I assume that the result won't overflow, which
+    can happen for very long condition expressions.
+
+    gdb/ChangeLog:
+    2018-08-06  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
+
+            * remote.c (remote_target::download_tracepoint): Remove BUF_SIZE.
+            Replace array buf with gdb::char_vector buf, of size
+            get_remote_packet_size ().  Replace references to buf and
+            BUF_SIZE to buf.data () and buf.size ().  Replace strcpy, strcat
+            and xsnprintf with snprintf.  Raise errors if the buffer is too
+            small.
+
+diff --git a/gdb/remote.c b/gdb/remote.c
+--- a/gdb/remote.c
++++ b/gdb/remote.c
+@@ -12799,26 +12799,35 @@ remote_target::remote_download_command_source (int num, ULONGEST addr,
+ void
+ remote_target::download_tracepoint (struct bp_location *loc)
+ {
+-#define BUF_SIZE 2048
+-
+   CORE_ADDR tpaddr;
+   char addrbuf[40];
+-  char buf[BUF_SIZE];
+   std::vector<std::string> tdp_actions;
+   std::vector<std::string> stepping_actions;
+   char *pkt;
+   struct breakpoint *b = loc->owner;
+   struct tracepoint *t = (struct tracepoint *) b;
+   struct remote_state *rs = get_remote_state ();
++  int ret;
++  char *err_msg = _("Tracepoint packet too large for target.");
++  size_t size_left;
++
++  /* We use a buffer other than rs->buf because we'll build strings
++     across multiple statements, and other statements in between could
++     modify rs->buf.  */
++  gdb::char_vector buf (get_remote_packet_size ());
+ 
+   encode_actions_rsp (loc, &tdp_actions, &stepping_actions);
+ 
+   tpaddr = loc->address;
+   sprintf_vma (addrbuf, tpaddr);
+-  xsnprintf (buf, BUF_SIZE, "QTDP:%x:%s:%c:%lx:%x", b->number,
+-	     addrbuf, /* address */
+-	     (b->enable_state == bp_enabled ? 'E' : 'D'),
+-	     t->step_count, t->pass_count);
++  ret = snprintf (buf.data (), buf.size (), "QTDP:%x:%s:%c:%lx:%x",
++		  b->number, addrbuf, /* address */
++		  (b->enable_state == bp_enabled ? 'E' : 'D'),
++		  t->step_count, t->pass_count);
++
++  if (ret < 0 || ret >= buf.size ())
++    error (err_msg);
++
+   /* Fast tracepoints are mostly handled by the target, but we can
+      tell the target how big of an instruction block should be moved
+      around.  */
+@@ -12830,8 +12839,15 @@ remote_target::download_tracepoint (struct bp_location *loc)
+ 	{
+ 	  if (gdbarch_fast_tracepoint_valid_at (loc->gdbarch, tpaddr,
+ 						NULL))
+-	    xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":F%x",
+-		       gdb_insn_length (loc->gdbarch, tpaddr));
++	    {
++	      size_left = buf.size () - strlen (buf.data ());
++	      ret = snprintf (buf.data () + strlen (buf.data ()),
++			      size_left, ":F%x",
++			      gdb_insn_length (loc->gdbarch, tpaddr));
++
++	      if (ret < 0 || ret >= size_left)
++		error (err_msg);
++	    }
+ 	  else
+ 	    /* If it passed validation at definition but fails now,
+ 	       something is very wrong.  */
+@@ -12855,7 +12871,14 @@ remote_target::download_tracepoint (struct bp_location *loc)
+ 	  struct static_tracepoint_marker marker;
+ 
+ 	  if (target_static_tracepoint_marker_at (tpaddr, &marker))
+-	    strcat (buf, ":S");
++	    {
++	      size_left = buf.size () - strlen (buf.data ());
++	      ret = snprintf (buf.data () + strlen (buf.data ()),
++			      size_left, ":S");
++
++	      if (ret < 0 || ret >= size_left)
++		error (err_msg);
++	    }
+ 	  else
+ 	    error (_("Static tracepoint not valid during download"));
+ 	}
+@@ -12873,10 +12896,26 @@ remote_target::download_tracepoint (struct bp_location *loc)
+ 	 capabilities at definition time.  */
+       if (remote_supports_cond_tracepoints ())
+ 	{
+-	  agent_expr_up aexpr = gen_eval_for_expr (tpaddr, loc->cond.get ());
+-	  xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":X%x,",
+-		     aexpr->len);
+-	  pkt = buf + strlen (buf);
++	  agent_expr_up aexpr = gen_eval_for_expr (tpaddr,
++						   loc->cond.get ());
++
++	  size_left = buf.size () - strlen (buf.data ());
++
++	  ret = snprintf (buf.data () + strlen (buf.data ()),
++			  size_left, ":X%x,", aexpr->len);
++
++	  if (ret < 0 || ret >= size_left)
++	    error (err_msg);
++
++	  size_left = buf.size () - strlen (buf.data ());
++
++	  /* Two bytes to encode each aexpr byte, plus the terminating
++	     null byte.  */
++	  if (aexpr->len * 2 + 1 > size_left)
++	    error (err_msg);
++
++	  pkt = buf.data () + strlen (buf.data ());
++
+ 	  for (int ndx = 0; ndx < aexpr->len; ++ndx)
+ 	    pkt = pack_hex_byte (pkt, aexpr->buf[ndx]);
+ 	  *pkt = '\0';
+@@ -12887,8 +12926,17 @@ remote_target::download_tracepoint (struct bp_location *loc)
+     }
+ 
+   if (b->commands || *default_collect)
+-    strcat (buf, "-");
+-  putpkt (buf);
++    {
++      size_left = buf.size () - strlen (buf.data ());
++
++      ret = snprintf (buf.data () + strlen (buf.data ()),
++		      size_left, "-");
++
++      if (ret < 0 || ret >= size_left)
++	error (err_msg);
++    }
++
++  putpkt (buf.data ());
+   remote_get_noisy_reply ();
+   if (strcmp (rs->buf, "OK"))
+     error (_("Target does not support tracepoints."));
+@@ -12902,11 +12950,15 @@ remote_target::download_tracepoint (struct bp_location *loc)
+       bool has_more = ((action_it + 1) != tdp_actions.end ()
+ 		       || !stepping_actions.empty ());
+ 
+-      xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%c",
+-		 b->number, addrbuf, /* address */
+-		 action_it->c_str (),
+-		 has_more ? '-' : 0);
+-      putpkt (buf);
++      ret = snprintf (buf.data (), buf.size (), "QTDP:-%x:%s:%s%c",
++		      b->number, addrbuf, /* address */
++		      action_it->c_str (),
++		      has_more ? '-' : 0);
++
++      if (ret < 0 || ret >= buf.size ())
++	error (err_msg);
++
++      putpkt (buf.data ());
+       remote_get_noisy_reply ();
+       if (strcmp (rs->buf, "OK"))
+ 	error (_("Error on target while setting tracepoints."));
+@@ -12920,12 +12972,16 @@ remote_target::download_tracepoint (struct bp_location *loc)
+       bool is_first = action_it == stepping_actions.begin ();
+       bool has_more = (action_it + 1) != stepping_actions.end ();
+ 
+-      xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%s%s",
+-		 b->number, addrbuf, /* address */
+-		 is_first ? "S" : "",
+-		 action_it->c_str (),
+-		 has_more ? "-" : "");
+-      putpkt (buf);
++      ret = snprintf (buf.data (), buf.size (), "QTDP:-%x:%s:%s%s%s",
++		      b->number, addrbuf, /* address */
++		      is_first ? "S" : "",
++		      action_it->c_str (),
++		      has_more ? "-" : "");
++
++      if (ret < 0 || ret >= buf.size ())
++	error (err_msg);
++
++      putpkt (buf.data ());
+       remote_get_noisy_reply ();
+       if (strcmp (rs->buf, "OK"))
+ 	error (_("Error on target while setting tracepoints."));
+@@ -12935,22 +12991,32 @@ remote_target::download_tracepoint (struct bp_location *loc)
+     {
+       if (b->location != NULL)
+ 	{
+-	  strcpy (buf, "QTDPsrc:");
++	  ret = snprintf (buf.data (), buf.size (), "QTDPsrc:");
++
++	  if (ret < 0 || ret >= buf.size ())
++	    error (err_msg);
++
+ 	  encode_source_string (b->number, loc->address, "at",
+ 				event_location_to_string (b->location.get ()),
+-				buf + strlen (buf), 2048 - strlen (buf));
+-	  putpkt (buf);
++				buf.data () + strlen (buf.data ()),
++				buf.size () - strlen (buf.data ()));
++	  putpkt (buf.data ());
+ 	  remote_get_noisy_reply ();
+ 	  if (strcmp (rs->buf, "OK"))
+ 	    warning (_("Target does not support source download."));
+ 	}
+       if (b->cond_string)
+ 	{
+-	  strcpy (buf, "QTDPsrc:");
++	  ret = snprintf (buf.data (), buf.size (), "QTDPsrc:");
++
++	  if (ret < 0 || ret >= buf.size ())
++	    error (err_msg);
++
+ 	  encode_source_string (b->number, loc->address,
+-				"cond", b->cond_string, buf + strlen (buf),
+-				2048 - strlen (buf));
+-	  putpkt (buf);
++				"cond", b->cond_string,
++				buf.data () + strlen (buf.data ()),
++				buf.size () - strlen (buf.data ()));
++	  putpkt (buf.data ());
+ 	  remote_get_noisy_reply ();
+ 	  if (strcmp (rs->buf, "OK"))
+ 	    warning (_("Target does not support source download."));
diff --git a/SOURCES/gdb-rhbz1187581-power8-regs-4of7.patch b/SOURCES/gdb-rhbz1187581-power8-regs-4of7.patch
new file mode 100644
index 0000000..8c553a8
--- /dev/null
+++ b/SOURCES/gdb-rhbz1187581-power8-regs-4of7.patch
@@ -0,0 +1,449 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Jan Kratochvil <jan.kratochvil@redhat.com>
+Date: Thu, 9 Aug 2018 17:17:16 +0200
+Subject: gdb-rhbz1187581-power8-regs-4of7.patch
+
+;; Add GDB support to access/display POWER8 registers (IBM, RH BZ 1187581).
+
+commit 4277c4b87addb5354cc47b98d7a73e44cfaf22c2
+Author: Pedro Franco de Carvalho <pedromfc@linux.ibm.com>
+Date:   Mon Aug 6 16:24:55 2018 -0300
+
+    Use remote register numbers in tracepoint mask
+
+    Currently, tracepoint register masks in the QTDP packets include both
+    internal and remote register numbers, as well as pseudo-register
+    numbers.
+
+    This patch changes this so that the mask only includes remote register
+    numbers.
+
+    Register numbers from agent expressions are already set in the mask
+    using remote numbers.  Other tracepoint actions used internal numbers,
+    e.g. "collect $regs" or "collect $<pseudoreg>".  To handle pseudoreg
+    numbers, an empty agent expression is created and ax_reg_mask is
+    called for this expression and the pseudoreg.  This will cause the ax
+    to set its mask with the corresponding remote raw register
+    numbers (using ax_regs_mask, which calls
+    gdbarch_ax_pseudo_register_collect).
+
+    If ax_regs_mask and gdbarch_ax_pseudo_register_collect also generate
+    more ax bytecode, the ax is also appended to the collection list.  It
+    isn't clear that this was the original intent for
+    gdbarch_ax_pseudo_register_collect, and none of the arches seem to do
+    this, but if this changes in the future, it should work.
+
+    The patch also refactors the code used by validate_action line to
+    validate axs into a function that is now called from every place that
+    generates axs.  Previously, some parts of tracepoint.c that generated
+    axs didn't check if the ax length was greater than MAX_AGENT_EXPR_LEN.
+
+    gdb/ChangeLog:
+    2018-08-06  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
+
+            * tracepoint.h (class collection_list) <add_register>: Remove.
+            <add_remote_register, add_ax_registers, add_local_register>:
+            Declare.
+            <add_memrange>: Add scope parameter.
+            * tracepoint.c (encode_actions_1): Likewise.
+            (collection_list::add_register): Rename to ...
+            (collection_list::add_remote_register): ... this.  Update
+            comment.
+            (collection_list::add_ax_registers, add_local_register): New
+            methods.
+            (collection_list::add_memrange): Add scope parameter.  Call
+            add_local_register instead of add_register.
+            (finalize_tracepoint_aexpr): New function.
+            (collection_list::collect_symbol): Update calls to add_memrange.
+            Call add_local_register instead of add_register.  Call
+            add_ax_registers.  Call finalize_tracepoint_aexpr.
+            (encode_actions_1): Get remote regnos for $reg action.  Call
+            add_remote_register, add_ax_registers, and add_local_register.
+            Update call to add_memrange.  Call finalize_tracepoint_aexpr.
+            (validate_actionline): Call finalize_tracepoint_aexpr.
+
++2018-08-06  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
++
++	* tracepoint.h (class collection_list) <add_register>: Remove.
++	<add_remote_register, add_ax_registers, add_local_register>:
++	Declare.
++	<add_memrange>: Add scope parameter.
++	* tracepoint.c (encode_actions_1): Likewise.
++	(collection_list::add_register): Rename to ...
++	(collection_list::add_remote_register): ... this.  Update
++	comment.
++	(collection_list::add_ax_registers, add_local_register): New
++	methods.
++	(collection_list::add_memrange): Add scope parameter.  Call
++	add_local_register instead of add_register.
++	(finalize_tracepoint_aexpr): New function.
++	(collection_list::collect_symbol): Update calls to add_memrange.
++	Call add_local_register instead of add_register.  Call
++	add_ax_registers.  Call finalize_tracepoint_aexpr.
++	(encode_actions_1): Get remote regnos for $reg action.  Call
++	add_remote_register, add_ax_registers, and add_local_register.
++	Update call to add_memrange.  Call finalize_tracepoint_aexpr.
++	(validate_actionline): Call finalize_tracepoint_aexpr.
++
+ 2018-08-06  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
+
+ 	* remote.c (remote_target::download_tracepoint): Remove BUF_SIZE.
+
+diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c
+--- a/gdb/tracepoint.c
++++ b/gdb/tracepoint.c
+@@ -615,6 +615,19 @@ report_agent_reqs_errors (struct agent_expr *aexpr)
+     error (_("Expression is too complicated."));
+ }
+ 
++/* Call ax_reqs on AEXPR and raise an error if something is wrong.  */
++
++static void
++finalize_tracepoint_aexpr (struct agent_expr *aexpr)
++{
++  ax_reqs (aexpr);
++
++  if (aexpr->len > MAX_AGENT_EXPR_LEN)
++    error (_("Expression is too complicated."));
++
++  report_agent_reqs_errors (aexpr);
++}
++
+ /* worker function */
+ void
+ validate_actionline (const char *line, struct breakpoint *b)
+@@ -699,12 +712,7 @@ validate_actionline (const char *line, struct breakpoint *b)
+ 							exp.get (),
+ 							trace_string);
+ 
+-	      if (aexpr->len > MAX_AGENT_EXPR_LEN)
+-		error (_("Expression is too complicated."));
+-
+-	      ax_reqs (aexpr.get ());
+-
+-	      report_agent_reqs_errors (aexpr.get ());
++	      finalize_tracepoint_aexpr (aexpr.get ());
+ 	    }
+ 	}
+       while (p && *p++ == ',');
+@@ -731,11 +739,7 @@ validate_actionline (const char *line, struct breakpoint *b)
+ 		 long.  */
+ 	      agent_expr_up aexpr = gen_eval_for_expr (loc->address, exp.get ());
+ 
+-	      if (aexpr->len > MAX_AGENT_EXPR_LEN)
+-		error (_("Expression is too complicated."));
+-
+-	      ax_reqs (aexpr.get ());
+-	      report_agent_reqs_errors (aexpr.get ());
++	      finalize_tracepoint_aexpr (aexpr.get ());
+ 	    }
+ 	}
+       while (p && *p++ == ',');
+@@ -811,10 +815,10 @@ memrange_sortmerge (std::vector<memrange> &memranges)
+     }
+ }
+ 
+-/* Add a register to a collection list.  */
++/* Add remote register number REGNO to the collection list mask.  */
+ 
+ void
+-collection_list::add_register (unsigned int regno)
++collection_list::add_remote_register (unsigned int regno)
+ {
+   if (info_verbose)
+     printf_filtered ("collect register %d\n", regno);
+@@ -824,12 +828,74 @@ collection_list::add_register (unsigned int regno)
+   m_regs_mask[regno / 8] |= 1 << (regno % 8);
+ }
+ 
++/* Add all the registers from the mask in AEXPR to the mask in the
++   collection list.  Registers in the AEXPR mask are already remote
++   register numbers.  */
++
++void
++collection_list::add_ax_registers (struct agent_expr *aexpr)
++{
++  if (aexpr->reg_mask_len > 0)
++    {
++      for (int ndx1 = 0; ndx1 < aexpr->reg_mask_len; ndx1++)
++	{
++	  QUIT;	/* Allow user to bail out with ^C.  */
++	  if (aexpr->reg_mask[ndx1] != 0)
++	    {
++	      /* Assume chars have 8 bits.  */
++	      for (int ndx2 = 0; ndx2 < 8; ndx2++)
++		if (aexpr->reg_mask[ndx1] & (1 << ndx2))
++		  /* It's used -- record it.  */
++		  add_remote_register (ndx1 * 8 + ndx2);
++	    }
++	}
++    }
++}
++
++/* If REGNO is raw, add its corresponding remote register number to
++   the mask.  If REGNO is a pseudo-register, figure out the necessary
++   registers using a temporary agent expression, and add it to the
++   list if it needs more than just a mask.  */
++
++void
++collection_list::add_local_register (struct gdbarch *gdbarch,
++				     unsigned int regno,
++				     CORE_ADDR scope)
++{
++  if (regno < gdbarch_num_regs (gdbarch))
++    {
++      int remote_regno = gdbarch_remote_register_number (gdbarch, regno);
++
++      if (remote_regno < 0)
++	error (_("Can't collect register %d"), regno);
++
++      add_remote_register (remote_regno);
++    }
++  else
++    {
++      agent_expr_up aexpr (new agent_expr (gdbarch, scope));
++
++      ax_reg_mask (aexpr.get (), regno);
++
++      finalize_tracepoint_aexpr (aexpr.get ());
++
++      add_ax_registers (aexpr.get ());
++
++      /* Usually ax_reg_mask for a pseudo-regiser only sets the
++	 corresponding raw registers in the ax mask, but if this isn't
++	 the case add the expression that is generated to the
++	 collection list.  */
++      if (aexpr->len > 0)
++	add_aexpr (std::move (aexpr));
++    }
++}
++
+ /* Add a memrange to a collection list.  */
+ 
+ void
+ collection_list::add_memrange (struct gdbarch *gdbarch,
+ 			       int type, bfd_signed_vma base,
+-			       ULONGEST len)
++			       ULONGEST len, CORE_ADDR scope)
+ {
+   if (info_verbose)
+     printf_filtered ("(%d,%s,%s)\n", type, paddress (gdbarch, base), pulongest (len));
+@@ -840,7 +906,7 @@ collection_list::add_memrange (struct gdbarch *gdbarch,
+   m_memranges.emplace_back (type, base, base + len);
+ 
+   if (type != memrange_absolute)    /* Better collect the base register!  */
+-    add_register (type);
++    add_local_register (gdbarch, type, scope);
+ }
+ 
+ /* Add a symbol to a collection list.  */
+@@ -882,19 +948,19 @@ collection_list::collect_symbol (struct symbol *sym,
+       if (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_STRUCT)
+ 	treat_as_expr = 1;
+       else
+-	add_memrange (gdbarch, memrange_absolute, offset, len);
++	add_memrange (gdbarch, memrange_absolute, offset, len, scope);
+       break;
+     case LOC_REGISTER:
+       reg = SYMBOL_REGISTER_OPS (sym)->register_number (sym, gdbarch);
+       if (info_verbose)
+ 	printf_filtered ("LOC_REG[parm] %s: ", 
+ 			 SYMBOL_PRINT_NAME (sym));
+-      add_register (reg);
++      add_local_register (gdbarch, reg, scope);
+       /* Check for doubles stored in two registers.  */
+       /* FIXME: how about larger types stored in 3 or more regs?  */
+       if (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_FLT &&
+ 	  len > register_size (gdbarch, reg))
+-	add_register (reg + 1);
++	add_local_register (gdbarch, reg + 1, scope);
+       break;
+     case LOC_REF_ARG:
+       printf_filtered ("Sorry, don't know how to do LOC_REF_ARG yet.\n");
+@@ -911,7 +977,7 @@ collection_list::collect_symbol (struct symbol *sym,
+ 			   SYMBOL_PRINT_NAME (sym), pulongest (len),
+ 			   paddress (gdbarch, offset), reg);
+ 	}
+-      add_memrange (gdbarch, reg, offset, len);
++      add_memrange (gdbarch, reg, offset, len, scope);
+       break;
+     case LOC_REGPARM_ADDR:
+       reg = SYMBOL_VALUE (sym);
+@@ -923,7 +989,7 @@ collection_list::collect_symbol (struct symbol *sym,
+ 			   SYMBOL_PRINT_NAME (sym), pulongest (len),
+ 			   paddress (gdbarch, offset), reg);
+ 	}
+-      add_memrange (gdbarch, reg, offset, len);
++      add_memrange (gdbarch, reg, offset, len, scope);
+       break;
+     case LOC_LOCAL:
+       reg = frame_regno;
+@@ -935,7 +1001,7 @@ collection_list::collect_symbol (struct symbol *sym,
+ 			   SYMBOL_PRINT_NAME (sym), pulongest (len),
+ 			   paddress (gdbarch, offset), reg);
+ 	}
+-      add_memrange (gdbarch, reg, offset, len);
++      add_memrange (gdbarch, reg, offset, len, scope);
+       break;
+ 
+     case LOC_UNRESOLVED:
+@@ -968,26 +1034,10 @@ collection_list::collect_symbol (struct symbol *sym,
+ 	  return;
+ 	}
+ 
+-      ax_reqs (aexpr.get ());
+-
+-      report_agent_reqs_errors (aexpr.get ());
++      finalize_tracepoint_aexpr (aexpr.get ());
+ 
+       /* Take care of the registers.  */
+-      if (aexpr->reg_mask_len > 0)
+-	{
+-	  for (int ndx1 = 0; ndx1 < aexpr->reg_mask_len; ndx1++)
+-	    {
+-	      QUIT;	/* Allow user to bail out with ^C.  */
+-	      if (aexpr->reg_mask[ndx1] != 0)
+-		{
+-		  /* Assume chars have 8 bits.  */
+-		  for (int ndx2 = 0; ndx2 < 8; ndx2++)
+-		    if (aexpr->reg_mask[ndx1] & (1 << ndx2))
+-		      /* It's used -- record it.  */
+-		      add_register (ndx1 * 8 + ndx2);
+-		}
+-	    }
+-	}
++      add_ax_registers (aexpr.get ());
+ 
+       add_aexpr (std::move (aexpr));
+     }
+@@ -1257,8 +1307,18 @@ encode_actions_1 (struct command_line *action,
+ 
+ 	      if (0 == strncasecmp ("$reg", action_exp, 4))
+ 		{
+-		  for (i = 0; i < gdbarch_num_regs (target_gdbarch ()); i++)
+-		    collect->add_register (i);
++		  for (i = 0; i < gdbarch_num_regs (target_gdbarch ());
++		       i++)
++		    {
++		      int remote_regno = (gdbarch_remote_register_number
++					  (target_gdbarch (), i));
++
++		      /* Ignore arch regnos without a corresponding
++			 remote regno.  This can happen for regnos not
++			 in the tdesc.  */
++		      if (remote_regno >= 0)
++			collect->add_remote_register (remote_regno);
++		    }
+ 		  action_exp = strchr (action_exp, ',');	/* more? */
+ 		}
+ 	      else if (0 == strncasecmp ("$arg", action_exp, 4))
+@@ -1288,27 +1348,10 @@ encode_actions_1 (struct command_line *action,
+ 						    target_gdbarch (),
+ 						    trace_string);
+ 
+-		  ax_reqs (aexpr.get ());
+-		  report_agent_reqs_errors (aexpr.get ());
++		  finalize_tracepoint_aexpr (aexpr.get ());
+ 
+ 		  /* take care of the registers */
+-		  if (aexpr->reg_mask_len > 0)
+-		    {
+-		      for (int ndx1 = 0; ndx1 < aexpr->reg_mask_len; ndx1++)
+-			{
+-			  QUIT;	/* allow user to bail out with ^C */
+-			  if (aexpr->reg_mask[ndx1] != 0)
+-			    {
+-			      /* assume chars have 8 bits */
+-			      for (int ndx2 = 0; ndx2 < 8; ndx2++)
+-				if (aexpr->reg_mask[ndx1] & (1 << ndx2))
+-				  {
+-				    /* It's used -- record it.  */
+-				    collect->add_register (ndx1 * 8 + ndx2);
+-				  }
+-			    }
+-			}
+-		    }
++		  collect->add_ax_registers (aexpr.get ());
+ 
+ 		  collect->add_aexpr (std::move (aexpr));
+ 		  action_exp = strchr (action_exp, ',');	/* more? */
+@@ -1340,7 +1383,8 @@ encode_actions_1 (struct command_line *action,
+ 					  name);
+ 			if (info_verbose)
+ 			  printf_filtered ("OP_REGISTER: ");
+-			collect->add_register (i);
++			collect->add_local_register (target_gdbarch (),
++						     i, tloc->address);
+ 			break;
+ 		      }
+ 
+@@ -1352,7 +1396,8 @@ encode_actions_1 (struct command_line *action,
+ 		      check_typedef (exp->elts[1].type);
+ 		      collect->add_memrange (target_gdbarch (),
+ 					     memrange_absolute, addr,
+-					     TYPE_LENGTH (exp->elts[1].type));
++					     TYPE_LENGTH (exp->elts[1].type),
++					     tloc->address);
+ 		      collect->append_exp (exp.get ());
+ 		      break;
+ 
+@@ -1376,28 +1421,10 @@ encode_actions_1 (struct command_line *action,
+ 								exp.get (),
+ 								trace_string);
+ 
+-		      ax_reqs (aexpr.get ());
+-
+-		      report_agent_reqs_errors (aexpr.get ());
++		      finalize_tracepoint_aexpr (aexpr.get ());
+ 
+ 		      /* Take care of the registers.  */
+-		      if (aexpr->reg_mask_len > 0)
+-			{
+-			  for (int ndx1 = 0; ndx1 < aexpr->reg_mask_len; ndx1++)
+-			    {
+-			      QUIT;	/* Allow user to bail out with ^C.  */
+-			      if (aexpr->reg_mask[ndx1] != 0)
+-				{
+-				  /* Assume chars have 8 bits.  */
+-				  for (int ndx2 = 0; ndx2 < 8; ndx2++)
+-				    if (aexpr->reg_mask[ndx1] & (1 << ndx2))
+-				      {
+-					/* It's used -- record it.  */
+-					collect->add_register (ndx1 * 8 + ndx2);
+-				      }
+-				}
+-			    }
+-			}
++		      collect->add_ax_registers (aexpr.get ());
+ 
+ 		      collect->add_aexpr (std::move (aexpr));
+ 		      collect->append_exp (exp.get ());
+@@ -1422,8 +1449,7 @@ encode_actions_1 (struct command_line *action,
+ 		  agent_expr_up aexpr = gen_eval_for_expr (tloc->address,
+ 							   exp.get ());
+ 
+-		  ax_reqs (aexpr.get ());
+-		  report_agent_reqs_errors (aexpr.get ());
++		  finalize_tracepoint_aexpr (aexpr.get ());
+ 
+ 		  /* Even though we're not officially collecting, add
+ 		     to the collect list anyway.  */
+diff --git a/gdb/tracepoint.h b/gdb/tracepoint.h
+--- a/gdb/tracepoint.h
++++ b/gdb/tracepoint.h
+@@ -263,9 +263,14 @@ public:
+   void add_aexpr (agent_expr_up aexpr);
+ 
+   void add_register (unsigned int regno);
++  void add_remote_register (unsigned int regno);
++  void add_ax_registers (struct agent_expr *aexpr);
++  void add_local_register (struct gdbarch *gdbarch,
++			   unsigned int regno,
++			   CORE_ADDR scope);
+   void add_memrange (struct gdbarch *gdbarch,
+ 		     int type, bfd_signed_vma base,
+-		     ULONGEST len);
++		     ULONGEST len, CORE_ADDR scope);
+   void collect_symbol (struct symbol *sym,
+ 		       struct gdbarch *gdbarch,
+ 		       long frame_regno, long frame_offset,
diff --git a/SOURCES/gdb-rhbz1187581-power8-regs-5of7.patch b/SOURCES/gdb-rhbz1187581-power8-regs-5of7.patch
new file mode 100644
index 0000000..eaca52f
--- /dev/null
+++ b/SOURCES/gdb-rhbz1187581-power8-regs-5of7.patch
@@ -0,0 +1,215 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Jan Kratochvil <jan.kratochvil@redhat.com>
+Date: Thu, 9 Aug 2018 17:17:46 +0200
+Subject: gdb-rhbz1187581-power8-regs-5of7.patch
+
+;; Add GDB support to access/display POWER8 registers (IBM, RH BZ 1187581).
+
+commit a04b9d62a234923826e431a209d396a628661548
+Author: Pedro Franco de Carvalho <pedromfc@linux.ibm.com>
+Date:   Mon Aug 6 16:24:55 2018 -0300
+
+    Variable size for regs mask in collection list
+
+    This patch changes collection_list to allow larger register masks.
+
+    The mask is changed from an array to a vector and is initialized to
+    hold the maximum possible remote register number.  The stringify
+    method is updated to resize temp_buf if needed.
+
+    gdb/ChangeLog:
+    2018-08-06  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
+
+            * tracepoint.h (collection_list) <m_regs_mask>: Change type to
+            std::vector<unsigned char>.
+            * tracepoint.c (collection_list::collection_list): Remove
+            m_regs_mask initializer from initializer list.  Resize
+            m_regs_mask using the largest remote register number.
+            (collection_list::add_remote_register): Remove size check on
+            m_regs_mask.  Use at to access element.
+            (collection_list::stringify): Change type of temp_buf to
+            gdb::char_vector.  Update uses of temp_buf.  Resize if needed to
+            stringify the register mask.  Use pack_hex_byte for the register
+            mask.
+
++2018-08-06  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
++
++	* tracepoint.h (collection_list) <m_regs_mask>: Change type to
++	std::vector<unsigned char>.
++	* tracepoint.c (collection_list::collection_list): Remove
++	m_regs_mask initializer from initializer list.  Resize
++	m_regs_mask using the largest remote register number.
++	(collection_list::add_remote_register): Remove size check on
++	m_regs_mask.  Use at to access element.
++	(collection_list::stringify): Change type of temp_buf to
++	gdb::char_vector.  Update uses of temp_buf.  Resize if needed to
++	stringify the register mask.  Use pack_hex_byte for the register
++	mask.
++
+ 2018-08-06  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
+
+ 	* tracepoint.h (class collection_list) <add_register>: Remove.
+
+diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c
+--- a/gdb/tracepoint.c
++++ b/gdb/tracepoint.c
+@@ -822,10 +822,8 @@ collection_list::add_remote_register (unsigned int regno)
+ {
+   if (info_verbose)
+     printf_filtered ("collect register %d\n", regno);
+-  if (regno >= (8 * sizeof (m_regs_mask)))
+-    error (_("Internal: register number %d too large for tracepoint"),
+-	   regno);
+-  m_regs_mask[regno / 8] |= 1 << (regno % 8);
++
++  m_regs_mask.at (regno / 8) |= 1 << (regno % 8);
+ }
+ 
+ /* Add all the registers from the mask in AEXPR to the mask in the
+@@ -1136,9 +1134,20 @@ collection_list::add_static_trace_data ()
+ }
+ 
+ collection_list::collection_list ()
+-  : m_regs_mask (),
+-    m_strace_data (false)
++  : m_strace_data (false)
+ {
++  int max_remote_regno = 0;
++  for (int i = 0; i < gdbarch_num_regs (target_gdbarch ()); i++)
++    {
++      int remote_regno = (gdbarch_remote_register_number
++			  (target_gdbarch (), i));
++
++      if (remote_regno >= 0 && remote_regno > max_remote_regno)
++	max_remote_regno = remote_regno;
++    }
++
++  m_regs_mask.resize ((max_remote_regno / 8) + 1);
++
+   m_memranges.reserve (128);
+   m_aexprs.reserve (128);
+ }
+@@ -1148,7 +1157,8 @@ collection_list::collection_list ()
+ std::vector<std::string>
+ collection_list::stringify ()
+ {
+-  char temp_buf[2048];
++  gdb::char_vector temp_buf (2048);
++
+   int count;
+   char *end;
+   long i;
+@@ -1158,35 +1168,45 @@ collection_list::stringify ()
+     {
+       if (info_verbose)
+ 	printf_filtered ("\nCollecting static trace data\n");
+-      end = temp_buf;
++      end = temp_buf.data ();
+       *end++ = 'L';
+-      str_list.emplace_back (temp_buf, end - temp_buf);
++      str_list.emplace_back (temp_buf.data (), end - temp_buf.data ());
+     }
+ 
+-  for (i = sizeof (m_regs_mask) - 1; i > 0; i--)
++  for (i = m_regs_mask.size () - 1; i > 0; i--)
+     if (m_regs_mask[i] != 0)    /* Skip leading zeroes in regs_mask.  */
+       break;
+   if (m_regs_mask[i] != 0)	/* Prepare to send regs_mask to the stub.  */
+     {
+       if (info_verbose)
+ 	printf_filtered ("\nCollecting registers (mask): 0x");
+-      end = temp_buf;
++
++      /* One char for 'R', one for the null terminator and two per
++	 mask byte.  */
++      std::size_t new_size = (i + 1) * 2 + 2;
++      if (new_size > temp_buf.size ())
++	temp_buf.resize (new_size);
++
++      end = temp_buf.data ();
+       *end++ = 'R';
+       for (; i >= 0; i--)
+ 	{
+ 	  QUIT;			/* Allow user to bail out with ^C.  */
+ 	  if (info_verbose)
+ 	    printf_filtered ("%02X", m_regs_mask[i]);
+-	  sprintf (end, "%02X", m_regs_mask[i]);
+-	  end += 2;
++
++	  end = pack_hex_byte (end, m_regs_mask[i]);
+ 	}
+-      str_list.emplace_back (temp_buf);
++      *end = '\0';
++
++      str_list.emplace_back (temp_buf.data ());
+     }
+   if (info_verbose)
+     printf_filtered ("\n");
+   if (!m_memranges.empty () && info_verbose)
+     printf_filtered ("Collecting memranges: \n");
+-  for (i = 0, count = 0, end = temp_buf; i < m_memranges.size (); i++)
++  for (i = 0, count = 0, end = temp_buf.data ();
++       i < m_memranges.size (); i++)
+     {
+       QUIT;			/* Allow user to bail out with ^C.  */
+       if (info_verbose)
+@@ -1200,9 +1220,9 @@ collection_list::stringify ()
+ 	}
+       if (count + 27 > MAX_AGENT_EXPR_LEN)
+ 	{
+-	  str_list.emplace_back (temp_buf, count);
++	  str_list.emplace_back (temp_buf.data (), count);
+ 	  count = 0;
+-	  end = temp_buf;
++	  end = temp_buf.data ();
+ 	}
+ 
+       {
+@@ -1222,7 +1242,7 @@ collection_list::stringify ()
+       }
+ 
+       count += strlen (end);
+-      end = temp_buf + count;
++      end = temp_buf.data () + count;
+     }
+ 
+   for (i = 0; i < m_aexprs.size (); i++)
+@@ -1230,9 +1250,9 @@ collection_list::stringify ()
+       QUIT;			/* Allow user to bail out with ^C.  */
+       if ((count + 10 + 2 * m_aexprs[i]->len) > MAX_AGENT_EXPR_LEN)
+ 	{
+-	  str_list.emplace_back (temp_buf, count);
++	  str_list.emplace_back (temp_buf.data (), count);
+ 	  count = 0;
+-	  end = temp_buf;
++	  end = temp_buf.data ();
+ 	}
+       sprintf (end, "X%08X,", m_aexprs[i]->len);
+       end += 10;		/* 'X' + 8 hex digits + ',' */
+@@ -1244,9 +1264,9 @@ collection_list::stringify ()
+ 
+   if (count != 0)
+     {
+-      str_list.emplace_back (temp_buf, count);
++      str_list.emplace_back (temp_buf.data (), count);
+       count = 0;
+-      end = temp_buf;
++      end = temp_buf.data ();
+     }
+ 
+   return str_list;
+diff --git a/gdb/tracepoint.h b/gdb/tracepoint.h
+--- a/gdb/tracepoint.h
++++ b/gdb/tracepoint.h
+@@ -293,8 +293,9 @@ public:
+   { return m_computed; }
+ 
+ private:
+-  /* room for up to 256 regs */
+-  unsigned char m_regs_mask[32];
++  /* We need the allocator zero-initialize the mask, so we don't use
++     gdb::byte_vector.  */
++  std::vector<unsigned char> m_regs_mask;
+ 
+   std::vector<memrange> m_memranges;
+ 
diff --git a/SOURCES/gdb-rhbz1187581-power8-regs-6of7.patch b/SOURCES/gdb-rhbz1187581-power8-regs-6of7.patch
new file mode 100644
index 0000000..b0a5e1f
--- /dev/null
+++ b/SOURCES/gdb-rhbz1187581-power8-regs-6of7.patch
@@ -0,0 +1,187 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Jan Kratochvil <jan.kratochvil@redhat.com>
+Date: Thu, 9 Aug 2018 17:18:15 +0200
+Subject: gdb-rhbz1187581-power8-regs-6of7.patch
+
+;; Add GDB support to access/display POWER8 registers (IBM, RH BZ 1187581).
+
+commit 296956befef3711ed458c7cba8041fde0dab9c50
+Author: Pedro Franco de Carvalho <pedromfc@linux.ibm.com>
+Date:   Mon Aug 6 16:24:55 2018 -0300
+
+    Allow larger regblock sizes when saving tracefiles
+
+    The tracefile.c:trace_save function assumes trace_regblock_size won't
+    be larger than the MAX_TRACE_UPLOAD constant, used to size the buffer
+    which holds trace data.  This can cause buffer overruns when this is
+    not the case.  This patch changes this function so that the larger
+    size is used to size the buffer.
+
+    gdb/ChangeLog:
+    2018-08-06  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
+
+            * tracefile.c: Include common/byte-vector.h.
+            (trace_save): Change type of buf to gdb::byte_vector.  Initialize
+            with trace_regblock_size if needed.  Update uses of buf.
+
++2018-08-06  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
++
++	* tracefile.c: Include common/byte-vector.h.
++	(trace_save): Change type of buf to gdb::byte_vector.  Initialize
++	with trace_regblock_size if needed.  Update uses of buf.
++
+ 2018-08-06  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
+
+ 	* tracepoint.h (collection_list) <m_regs_mask>: Change type to
+
+diff --git a/gdb/tracefile.c b/gdb/tracefile.c
+--- a/gdb/tracefile.c
++++ b/gdb/tracefile.c
+@@ -22,6 +22,7 @@
+ #include "ctf.h"
+ #include "exec.h"
+ #include "regcache.h"
++#include "common/byte-vector.h"
+ 
+ /* Helper macros.  */
+ 
+@@ -67,7 +68,7 @@ trace_save (const char *filename, struct trace_file_writer *writer,
+ 
+   ULONGEST offset = 0;
+ #define MAX_TRACE_UPLOAD 2000
+-  gdb_byte buf[MAX_TRACE_UPLOAD];
++  gdb::byte_vector buf (std::max (MAX_TRACE_UPLOAD, trace_regblock_size));
+   enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
+ 
+   /* If the target is to save the data to a file on its own, then just
+@@ -144,7 +145,7 @@ trace_save (const char *filename, struct trace_file_writer *writer,
+ 	  /* We ask for big blocks, in the hopes of efficiency, but
+ 	     will take less if the target has packet size limitations
+ 	     or some such.  */
+-	  gotten = target_get_raw_trace_data (buf, offset,
++	  gotten = target_get_raw_trace_data (buf.data (), offset,
+ 					      MAX_TRACE_UPLOAD);
+ 	  if (gotten < 0)
+ 	    error (_("Failure to get requested trace buffer data"));
+@@ -152,7 +153,7 @@ trace_save (const char *filename, struct trace_file_writer *writer,
+ 	  if (gotten == 0)
+ 	    break;
+ 
+-	  writer->ops->write_trace_buffer (writer, buf, gotten);
++	  writer->ops->write_trace_buffer (writer, buf.data (), gotten);
+ 
+ 	  offset += gotten;
+ 	}
+@@ -163,7 +164,7 @@ trace_save (const char *filename, struct trace_file_writer *writer,
+ 	  /* Parse the trace buffers according to how data are stored
+ 	     in trace buffer in GDBserver.  */
+ 
+-	  gotten = target_get_raw_trace_data (buf, offset, 6);
++	  gotten = target_get_raw_trace_data (buf.data (), offset, 6);
+ 
+ 	  if (gotten == 0)
+ 	    break;
+@@ -171,10 +172,10 @@ trace_save (const char *filename, struct trace_file_writer *writer,
+ 	  /* Read the first six bytes in, which is the tracepoint
+ 	     number and trace frame size.  */
+ 	  tp_num = (uint16_t)
+-	    extract_unsigned_integer (&buf[0], 2, byte_order);
++	    extract_unsigned_integer (&((buf.data ())[0]), 2, byte_order);
+ 
+ 	  tf_size = (uint32_t)
+-	    extract_unsigned_integer (&buf[2], 4, byte_order);
++	    extract_unsigned_integer (&((buf.data ())[2]), 4, byte_order);
+ 
+ 	  writer->ops->frame_ops->start (writer, tp_num);
+ 	  gotten = 6;
+@@ -192,7 +193,8 @@ trace_save (const char *filename, struct trace_file_writer *writer,
+ 		  /* We'll fetch one block each time, in order to
+ 		     handle the extremely large 'M' block.  We first
+ 		     fetch one byte to get the type of the block.  */
+-		  gotten = target_get_raw_trace_data (buf, offset, 1);
++		  gotten = target_get_raw_trace_data (buf.data (),
++						      offset, 1);
+ 		  if (gotten < 1)
+ 		    error (_("Failure to get requested trace buffer data"));
+ 
+@@ -205,13 +207,13 @@ trace_save (const char *filename, struct trace_file_writer *writer,
+ 		    {
+ 		    case 'R':
+ 		      gotten
+-			= target_get_raw_trace_data (buf, offset,
++			= target_get_raw_trace_data (buf.data (), offset,
+ 						     trace_regblock_size);
+ 		      if (gotten < trace_regblock_size)
+ 			error (_("Failure to get requested trace"
+ 				 " buffer data"));
+ 
+-		      TRACE_WRITE_R_BLOCK (writer, buf,
++		      TRACE_WRITE_R_BLOCK (writer, buf.data (),
+ 					   trace_regblock_size);
+ 		      break;
+ 		    case 'M':
+@@ -221,7 +223,8 @@ trace_save (const char *filename, struct trace_file_writer *writer,
+ 			LONGEST t;
+ 			int j;
+ 
+-			t = target_get_raw_trace_data (buf,offset, 10);
++			t = target_get_raw_trace_data (buf.data (),
++						       offset, 10);
+ 			if (t < 10)
+ 			  error (_("Failure to get requested trace"
+ 				   " buffer data"));
+@@ -231,10 +234,10 @@ trace_save (const char *filename, struct trace_file_writer *writer,
+ 
+ 			gotten = 0;
+ 			addr = (ULONGEST)
+-			  extract_unsigned_integer (buf, 8,
++			  extract_unsigned_integer (buf.data (), 8,
+ 						    byte_order);
+ 			mlen = (unsigned short)
+-			  extract_unsigned_integer (&buf[8], 2,
++			  extract_unsigned_integer (&((buf.data ())[8]), 2,
+ 						    byte_order);
+ 
+ 			TRACE_WRITE_M_BLOCK_HEADER (writer, addr,
+@@ -252,14 +255,15 @@ trace_save (const char *filename, struct trace_file_writer *writer,
+ 			    else
+ 			      read_length = mlen - j;
+ 
+-			    t = target_get_raw_trace_data (buf,
++			    t = target_get_raw_trace_data (buf.data (),
+ 							   offset + j,
+ 							   read_length);
+ 			    if (t < read_length)
+ 			      error (_("Failure to get requested"
+ 				       " trace buffer data"));
+ 
+-			    TRACE_WRITE_M_BLOCK_MEMORY (writer, buf,
++			    TRACE_WRITE_M_BLOCK_MEMORY (writer,
++							buf.data (),
+ 							read_length);
+ 
+ 			    j += read_length;
+@@ -274,18 +278,18 @@ trace_save (const char *filename, struct trace_file_writer *writer,
+ 			LONGEST val;
+ 
+ 			gotten
+-			  = target_get_raw_trace_data (buf, offset,
+-						       12);
++			  = target_get_raw_trace_data (buf.data (),
++						       offset, 12);
+ 			if (gotten < 12)
+ 			  error (_("Failure to get requested"
+ 				   " trace buffer data"));
+ 
+-			vnum  = (int) extract_signed_integer (buf,
++			vnum  = (int) extract_signed_integer (buf.data (),
+ 							      4,
+ 							      byte_order);
+ 			val
+-			  = extract_signed_integer (&buf[4], 8,
+-						    byte_order);
++			  = extract_signed_integer (&((buf.data ())[4]),
++						    8, byte_order);
+ 
+ 			TRACE_WRITE_V_BLOCK (writer, vnum, val);
+ 		      }
diff --git a/SOURCES/gdb-rhbz1187581-power8-regs-7of7.patch b/SOURCES/gdb-rhbz1187581-power8-regs-7of7.patch
new file mode 100644
index 0000000..ee82673
--- /dev/null
+++ b/SOURCES/gdb-rhbz1187581-power8-regs-7of7.patch
@@ -0,0 +1,129 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Jan Kratochvil <jan.kratochvil@redhat.com>
+Date: Thu, 9 Aug 2018 17:18:49 +0200
+Subject: gdb-rhbz1187581-power8-regs-7of7.patch
+
+;; Add GDB support to access/display POWER8 registers (IBM, RH BZ 1187581).
+
+commit a7f25a84f4cc1df5248c46346337f19a2a66af5a
+Author: Simon Marchi <simon.marchi@ericsson.com>
+Date:   Mon Aug 6 16:54:47 2018 -0400
+
+    Fix compilation failure in remote.c
+
+    A recent patch introduced a few of these:
+
+    /home/emaisin/src/binutils-gdb/gdb/remote.c:12862:19: error: format not a string literal and no format arguments [-Werror=format-security]
+         error (err_msg);
+                       ^
+
+    Fix them by replacing the call to error with
+
+      error ("%s", err_msg);
+
+    gdb/ChangeLog:
+
+            * remote.c (remote_target::download_tracepoint): Fix format
+            string errors.
+
++2018-08-06  Simon Marchi  <simon.marchi@ericsson.com>
++
++	* remote.c (remote_target::download_tracepoint): Fix format
++	string errors.
++
+ 2018-08-06  Pedro Franco de Carvalho  <pedromfc@linux.ibm.com>
+
+ 	* tracefile.c: Include common/byte-vector.h.
+
+diff --git a/gdb/remote.c b/gdb/remote.c
+--- a/gdb/remote.c
++++ b/gdb/remote.c
+@@ -12826,7 +12826,7 @@ remote_target::download_tracepoint (struct bp_location *loc)
+ 		  t->step_count, t->pass_count);
+ 
+   if (ret < 0 || ret >= buf.size ())
+-    error (err_msg);
++    error ("%s", err_msg);
+ 
+   /* Fast tracepoints are mostly handled by the target, but we can
+      tell the target how big of an instruction block should be moved
+@@ -12846,7 +12846,7 @@ remote_target::download_tracepoint (struct bp_location *loc)
+ 			      gdb_insn_length (loc->gdbarch, tpaddr));
+ 
+ 	      if (ret < 0 || ret >= size_left)
+-		error (err_msg);
++		error ("%s", err_msg);
+ 	    }
+ 	  else
+ 	    /* If it passed validation at definition but fails now,
+@@ -12877,7 +12877,7 @@ remote_target::download_tracepoint (struct bp_location *loc)
+ 			      size_left, ":S");
+ 
+ 	      if (ret < 0 || ret >= size_left)
+-		error (err_msg);
++		error ("%s", err_msg);
+ 	    }
+ 	  else
+ 	    error (_("Static tracepoint not valid during download"));
+@@ -12905,14 +12905,14 @@ remote_target::download_tracepoint (struct bp_location *loc)
+ 			  size_left, ":X%x,", aexpr->len);
+ 
+ 	  if (ret < 0 || ret >= size_left)
+-	    error (err_msg);
++	    error ("%s", err_msg);
+ 
+ 	  size_left = buf.size () - strlen (buf.data ());
+ 
+ 	  /* Two bytes to encode each aexpr byte, plus the terminating
+ 	     null byte.  */
+ 	  if (aexpr->len * 2 + 1 > size_left)
+-	    error (err_msg);
++	    error ("%s", err_msg);
+ 
+ 	  pkt = buf.data () + strlen (buf.data ());
+ 
+@@ -12933,7 +12933,7 @@ remote_target::download_tracepoint (struct bp_location *loc)
+ 		      size_left, "-");
+ 
+       if (ret < 0 || ret >= size_left)
+-	error (err_msg);
++	error ("%s", err_msg);
+     }
+ 
+   putpkt (buf.data ());
+@@ -12956,7 +12956,7 @@ remote_target::download_tracepoint (struct bp_location *loc)
+ 		      has_more ? '-' : 0);
+ 
+       if (ret < 0 || ret >= buf.size ())
+-	error (err_msg);
++	error ("%s", err_msg);
+ 
+       putpkt (buf.data ());
+       remote_get_noisy_reply ();
+@@ -12979,7 +12979,7 @@ remote_target::download_tracepoint (struct bp_location *loc)
+ 		      has_more ? "-" : "");
+ 
+       if (ret < 0 || ret >= buf.size ())
+-	error (err_msg);
++	error ("%s", err_msg);
+ 
+       putpkt (buf.data ());
+       remote_get_noisy_reply ();
+@@ -12994,7 +12994,7 @@ remote_target::download_tracepoint (struct bp_location *loc)
+ 	  ret = snprintf (buf.data (), buf.size (), "QTDPsrc:");
+ 
+ 	  if (ret < 0 || ret >= buf.size ())
+-	    error (err_msg);
++	    error ("%s", err_msg);
+ 
+ 	  encode_source_string (b->number, loc->address, "at",
+ 				event_location_to_string (b->location.get ()),
+@@ -13010,7 +13010,7 @@ remote_target::download_tracepoint (struct bp_location *loc)
+ 	  ret = snprintf (buf.data (), buf.size (), "QTDPsrc:");
+ 
+ 	  if (ret < 0 || ret >= buf.size ())
+-	    error (err_msg);
++	    error ("%s", err_msg);
+ 
+ 	  encode_source_string (b->number, loc->address,
+ 				"cond", b->cond_string,
diff --git a/SOURCES/gdb-rhbz1261564-aarch64-hw-watchpoint-test.patch b/SOURCES/gdb-rhbz1261564-aarch64-hw-watchpoint-test.patch
new file mode 100644
index 0000000..b4e3109
--- /dev/null
+++ b/SOURCES/gdb-rhbz1261564-aarch64-hw-watchpoint-test.patch
@@ -0,0 +1,104 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-rhbz1261564-aarch64-hw-watchpoint-test.patch
+
+;; [aarch64] Fix hardware watchpoints (RH BZ 1261564).
+;;=fedoratest
+
+diff --git a/gdb/testsuite/gdb.base/rhbz1261564-aarch64-watchpoint.c b/gdb/testsuite/gdb.base/rhbz1261564-aarch64-watchpoint.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/rhbz1261564-aarch64-watchpoint.c
+@@ -0,0 +1,33 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2016 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++__attribute__((aligned(16))) struct
++{
++  int var0, var4, var8;
++} aligned;
++
++int
++main (void)
++{
++  aligned.var0 = 1;
++  aligned.var4 = 2;
++  aligned.var8 = 3;
++
++  aligned.var4 = aligned.var0;
++
++  return 0;
++}
+diff --git a/gdb/testsuite/gdb.base/rhbz1261564-aarch64-watchpoint.exp b/gdb/testsuite/gdb.base/rhbz1261564-aarch64-watchpoint.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/rhbz1261564-aarch64-watchpoint.exp
+@@ -0,0 +1,53 @@
++# Copyright (C) 2016 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++if { [prepare_for_testing rhbz1261564-aarch64-watchpoint.exp "rhbz1261564-aarch64-watchpoint"] } {
++    return -1
++}
++
++if { ! [ runto main ] } then { return 0 }
++
++set test "rwatch aligned.var4"
++if [istarget "s390*-*-*"] {
++    gdb_test $test {Target does not support this type of hardware watchpoint\.}
++    untested "s390* does not support hw read watchpoint" 
++    return
++}
++gdb_test $test "Hardware read watchpoint \[0-9\]+: aligned.var4"
++
++proc checkvar { address } {
++    global gdb_prompt
++
++    set test "p &aligned.var$address"
++    gdb_test_multiple $test $test {
++	-re " = \\(int \\*\\) 0x\[0-9a-f\]+$address <aligned(\\+\[0-9\]+)?>\r\n$gdb_prompt $" {
++	    pass $test
++	}
++	-re "\r\n$gdb_prompt $" {
++	    untested "$test (unexpected ELF layout)"
++	    return 0
++	}
++    }
++    return 1
++}
++if ![checkvar "0"] { return }
++if ![checkvar "4"] { return }
++if ![checkvar "8"] { return }
++
++# Assumes: PPC_PTRACE_GETHWDBGINFO::data_bp_alignment == 8
++# 'lwz' does read only 4 bytes but the hw watchpoint is 8 bytes wide.
++setup_xfail "powerpc*-*-*"
++
++gdb_continue_to_end
diff --git a/SOURCES/gdb-rhbz1325795-framefilters-test.patch b/SOURCES/gdb-rhbz1325795-framefilters-test.patch
new file mode 100644
index 0000000..cfe309d
--- /dev/null
+++ b/SOURCES/gdb-rhbz1325795-framefilters-test.patch
@@ -0,0 +1,176 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-rhbz1325795-framefilters-test.patch
+
+;; New test for Python "Cannot locate object file for block" (for RH BZ 1325795).
+;;=fedoratest
+
+diff --git a/gdb/testsuite/gdb.python/py-framefilter-thread.c b/gdb/testsuite/gdb.python/py-framefilter-thread.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.python/py-framefilter-thread.c
+@@ -0,0 +1,39 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2016 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++#include <pthread.h>
++#include <assert.h>
++
++static void *
++start (void *arg)
++{
++  return arg; /* Backtrace end breakpoint */
++}
++
++int
++main (void)
++{
++  pthread_t thread1;
++  int i;
++
++  i = pthread_create (&thread1, NULL, start, NULL);
++  assert (i == 0);
++  i = pthread_join (thread1, NULL);
++  assert (i == 0);
++
++  return 0;
++}
+diff --git a/gdb/testsuite/gdb.python/py-framefilter-thread.exp b/gdb/testsuite/gdb.python/py-framefilter-thread.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.python/py-framefilter-thread.exp
+@@ -0,0 +1,54 @@
++# Copyright (C) 2016 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++load_lib gdb-python.exp
++
++standard_testfile
++
++if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug pthreads}]} {
++    return -1
++}
++
++# Skip all tests if Python scripting is not enabled.
++if { [skip_python_tests] } { continue }
++
++if ![runto_main] then {
++    return
++}
++gdb_test_no_output "set python print-stack full" \
++    "Set python print-stack to full"
++
++# Load global frame-filters
++set remote_python_file [remote_download host ${srcdir}/${subdir}/${testfile}.py]
++gdb_test_no_output "python exec (open ('${remote_python_file}').read ())" \
++    "Load python file"
++
++gdb_breakpoint [gdb_get_line_number "Backtrace end breakpoint"]
++gdb_continue_to_breakpoint "Backtrace end breakpoint"
++
++# #2  0x00007ffff75f228d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113^M
++gdb_test "bt no-filters" " in (\\.?_*clone|thread_start) \[^\r\n\]*" "bt no-filters"
++
++# #2  0x00007ffff75f228d in 941595343737041 () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113^M
++# vs.
++# #2  0x00007ffff75f228d in 941595343737041Traceback (most recent call last):
++#   File "/home/jkratoch/redhat/rhel/gdb/rhel-7.3/gdb-7.6.1/gdb/testsuite/../data-directory/python/gdb/FrameDecorator.py", line 145, in frame_args
++#     return self._base.frame_args()
++#   File "/home/jkratoch/redhat/rhel/gdb/rhel-7.3/gdb-7.6.1/gdb/testsuite/../data-directory/python/gdb/FrameDecorator.py", line 152, in frame_args
++#     return args.fetch_frame_args()
++#   File "/home/jkratoch/redhat/rhel/gdb/rhel-7.3/gdb-7.6.1/gdb/testsuite/../data-directory/python/gdb/FrameDecorator.py", line 276, in fetch_frame_args
++#     block = self.frame.block()
++# RuntimeError: Cannot locate object file for block.
++gdb_test "bt" " in \[0-9\]+ \[^\r\n\]*" "bt with filters"
+diff --git a/gdb/testsuite/gdb.python/py-framefilter-thread.py b/gdb/testsuite/gdb.python/py-framefilter-thread.py
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.python/py-framefilter-thread.py
+@@ -0,0 +1,60 @@
++# Copyright (C) 2016 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++# This file is part of the GDB testsuite.  It tests Python-based
++# frame-filters.
++
++# This test is specifically crafted for RH BZ 1197665.
++
++import gdb
++import itertools
++from gdb.FrameDecorator import FrameDecorator
++import copy
++
++class Reverse_Function (FrameDecorator):
++
++    def __init__(self, fobj):
++        super(Reverse_Function, self).__init__(fobj)
++        self.fobj = fobj
++
++    def function (self):
++        # This function call should not fail.
++        gdb.target_charset ()
++
++        fname = str (self.fobj.function())
++        if (fname == None or fname == ""):
++            return None
++        else:
++            fname = fname[::-1]
++        return fname
++
++class FrameFilter ():
++
++    def __init__ (self):
++        self.name = "Reverse"
++        self.priority = 100
++        self.enabled = True
++        gdb.frame_filters [self.name] = self
++
++    def filter (self, frame_iter):
++        # Python 3.x moved the itertools.imap functionality to map(),
++        # so check if it is available.
++        if hasattr(itertools, "imap"):
++            frame_iter = itertools.imap (Reverse_Function, frame_iter)
++        else:
++            frame_iter = map (Reverse_Function, frame_iter)
++        return frame_iter
++
++FrameFilter()
diff --git a/SOURCES/gdb-rhbz1350436-type-printers-error.patch b/SOURCES/gdb-rhbz1350436-type-printers-error.patch
new file mode 100644
index 0000000..d06e121
--- /dev/null
+++ b/SOURCES/gdb-rhbz1350436-type-printers-error.patch
@@ -0,0 +1,81 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-rhbz1350436-type-printers-error.patch
+
+;; Test 'info type-printers' Python error (RH BZ 1350436).
+;;=fedoratest
+
+Typo in Python support breaks info type-printers command
+https://bugzilla.redhat.com/show_bug.cgi?id=1350436
+
+[testsuite patch] PR python/17136: 'info type-printers' causes an exception when there are per-objfile printers
+https://sourceware.org/ml/gdb-patches/2016-06/msg00455.html
+
+diff --git a/gdb/testsuite/gdb.python/py-typeprint.cc b/gdb/testsuite/gdb.python/py-typeprint.cc
+--- a/gdb/testsuite/gdb.python/py-typeprint.cc
++++ b/gdb/testsuite/gdb.python/py-typeprint.cc
+@@ -31,6 +31,12 @@ templ<basic_string> s;
+ 
+ basic_string bs;
+ 
++class Other
++{
++};
++
++Other ovar;
++
+ int main()
+ {
+   return 0;
+diff --git a/gdb/testsuite/gdb.python/py-typeprint.exp b/gdb/testsuite/gdb.python/py-typeprint.exp
+--- a/gdb/testsuite/gdb.python/py-typeprint.exp
++++ b/gdb/testsuite/gdb.python/py-typeprint.exp
+@@ -50,3 +50,7 @@ gdb_test_no_output "enable type-printer string"
+ gdb_test "whatis bs" "string" "whatis with enabled printer"
+ 
+ gdb_test "whatis s" "templ<string>"
++
++gdb_test "info type-printers" "Type printers for \[^\r\n\]*/py-typeprint:\r\n *other\r\n.*" \
++	 "info type-printers for other"
++gdb_test "whatis ovar" "type = Another"
+diff --git a/gdb/testsuite/gdb.python/py-typeprint.py b/gdb/testsuite/gdb.python/py-typeprint.py
+--- a/gdb/testsuite/gdb.python/py-typeprint.py
++++ b/gdb/testsuite/gdb.python/py-typeprint.py
+@@ -15,7 +15,7 @@
+ 
+ import gdb
+ 
+-class Recognizer(object):
++class StringRecognizer(object):
+     def __init__(self):
+         self.enabled = True
+ 
+@@ -30,6 +30,26 @@ class StringTypePrinter(object):
+         self.enabled = True
+ 
+     def instantiate(self):
+-        return Recognizer()
++        return StringRecognizer()
+ 
+ gdb.type_printers.append(StringTypePrinter())
++
++class OtherRecognizer(object):
++    def __init__(self):
++        self.enabled = True
++
++    def recognize(self, type_obj):
++        if type_obj.tag == 'Other':
++            return 'Another'
++        return None
++
++class OtherTypePrinter(object):
++    def __init__(self):
++        self.name = 'other'
++        self.enabled = True
++
++    def instantiate(self):
++        return OtherRecognizer()
++
++import gdb.types
++gdb.types.register_type_printer(gdb.objfiles()[0], OtherTypePrinter())
diff --git a/SOURCES/gdb-rhbz1398387-tab-crash-test.patch b/SOURCES/gdb-rhbz1398387-tab-crash-test.patch
new file mode 100644
index 0000000..c8fe7b4
--- /dev/null
+++ b/SOURCES/gdb-rhbz1398387-tab-crash-test.patch
@@ -0,0 +1,454 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-rhbz1398387-tab-crash-test.patch
+
+;; New testcase for: Fix <tab>-completion crash (Gary Benson, RH BZ 1398387).
+;;=fedoratest
+
+diff --git a/gdb/testsuite/gdb.base/tab-crash.bz2.uu b/gdb/testsuite/gdb.base/tab-crash.bz2.uu
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/tab-crash.bz2.uu
+@@ -0,0 +1,393 @@
++begin 644 /tmp/libgcc_s-6.3.1-20161221.so.1-objcopyR.debug.bz2
++M0EIH.3%!6293622@"44`>Q=_____________________________________
++M________X#\<>SD#OM[7/HAP:R]\H#D"=!/";NP7!]OOJG>U[N;WW'KVV?9I
++M[[,[X.\/;%2U``[[NUM7P^T[U617V#12M]6M7W;M7CZU<=!]/8WL[LI=AZZ>
++MJ5XW;QP]W<NQW8Q539B5-[UA8``:HSG=SF*R#=AT#0`'+3D>]DVHY@]/6RS=
++M8[:2][W/<YN3<[=[S=37NY[=X&IH@)H"8$T```3$U-@)@F)B,(TT:-#$T9``
++M`3`!H-`*G^BGB,$--4]E,R-"9JGL4V)J;*>F01Z:GIID,IC$GHU-HR$:@T0F
++M@$PC($P"`$PF)D9-&IZFCT-4\$TRI^330-$TR>32>FFF@F!H0GJ>TD_*9!E,
++MR3Q3/11M-,%#T-3:-3T9(P-3T3TT@;1ZD>C1E,AM0:`@@303"`(Q*>FGHU)Z
++MGDFR8FFJ'L5/1C313R3U/*?JF]&35-J!Y3U/TI^1$\IZGFBGJ>HVF4>H])ZA
++MZC)ZFT)H>IH]0>H!H&RC0,F0T9E!HT-`TT`)-1(A$R&J?J3T80]313\F0GHC
++MU3:90\H]$]3:C93U-!LH\IIZ$]0R>:D>329J--`/4_5'I-`TT9#3U!ZC0>H#
++M0])H!H9!Z@#30VH#30-/4T'J`]09%$!4\)A3R,-1'J`S2#0--,$:/$C9-3TG
++MH:FR9-(T>D\4],HT'I`/4`>HVFIIZFR:FR:)Y,3*/3*;"FT:(VIYJC:FF)Z:
++MCTFAIZCTAH:#U!F*")1`0!`"9#4Q-,FT(R33R-4VFE/U&TU-3RGZ1FJ>&H]2
++M;U38GJ-J3TQ0Q'DU-'J?JF]2&30-'J:>H,FC1HWJ@#RFC0!Z#2-/4T&&4T-/
++M2:&(>D'J,5#"1JH5B["KJTH:1R2I95!0TXN8+PQ'&*+8%8JVQCC/1G1D0A-S
++M<I944!D8K(C"*`I!((H+`S?O/"O^MIFA>91MLJJLK];M*G>^]MGIW=W7E>KL
++M)MXKMO7VV\M77ANM3H=6LGI)+AR&CF'#<66)4&4S6:;*26:S5DUQGS$+>97<
++M!3.,U$LQELITU,X3Y5[GW>0?IM4(5>Z!^AE04E8=:H(X[7T$U.`@QRT\Z]_"
++M7?`4-8Q_UDP"AQ@$1,B`G(D*S"^7Z%ABZ-%T<L]#FC8#-<VF6>6MS+#&8M+G
++M)M>_Y9ME3-K"RMO>,UK^9/4HYU5!3:6'45^1-AA23JG7FH&=KT9ZK-!6>?\-
++M;_HD;$V3C,[X\-20B*R?`.(:CK$3A&J2!XYI6TW[U*HI*560[F!42LB.:FO9
++MT2S-`KC"H/^S^JJFC(54?*/HIBKH,!73^2++62,G98Y/*,\,%R,Y08$R@$&L
++MC#"P#E53*YTZS&>L\]4*"<8&2^]*I?02,46;3.V(P+2P`3$>F+HNTY/(%Z<`
++MM.P&I]6,N<YQ5QZL0]B&[?*?757VV"$MA$PU!CM3C:=M[)14&\?,W,8G`:_Z
++M:"!X2U%Y27M:ALSP\;:NN/-<%#.J9]653UK^E@@[&^NWC27B&%J9M[R6M)90
++M1]AC4PE2-+_V#SBBFMO=0D\:GY]-F<'UYQ"RKVHV>ED[M1J4`O?!J@8`&>?1
++M%!8/]>.7UF-'?ZO,O??);\\L:3X7JN-O^ZWAPV:'ONI*N$I2REEE+$\Q47N6
++M)NB0W\O.LZ)TMD[9VG1NS+?94@_.$$=!P2#U2(8;*%.99OOW:1@#`W]ZV:OR
++M1IW<Y\T_[@G!L<&-V&1="[W(M!N9R^OOH?0``<D1CT)A(*L^:&H=+.^+:/]'
++M04%%.SW-\#;`53:0[GC?<_OK4%3=]'?\H^U4`^9^I>EL,R4\*2Y2^>SP[^QB
++M_,U-)GY3;9KT/P=<O3?SAWG$AXK@0I)`(AD(`)"("Z>Q.GX.7G"Q:>QK&9"$
++M[#-J-&>2W>*T.XDRFC(,4I`"ED(D0(($(R0#&6;D6H(.:&R(R,:JBHZ!54G<
++M11T9V@K&&$`@8+T3IN#,:<5@P(RTBD1%(JP%55$2*#^!4E,%ER22`*-**JU6
++MJZII6%N>*+(`*J_?LDI@")%A1D1`@0D?O:UXU=+B+/%.C.3P3935G@9N(=B(
++M39SA1$,K(<1`/."P@;M&4XI&*(9N(H[,#92F)PFDD,V:<P:&CI-74Y(%5G9Q
++M.;&CNT9/.(D(0E-%1E-38298NLWC1:8#&:TRBD72U("/%-3!D/9BWJ:]FM#)
++M2L@[*@&EK:079)8-B@%&PML&Q0"QSC<@!>;%@V(`6%EHV(`6$+T`+00*I0;U
++M`+6F`+<5+:@OPH!:+<%V-Y:H6@0ST6@@$DQO&U0"]M7&.2N,;AN4`HP8H!<7
++MT;QP4`N;A(R`&`P88BZ-&+V-:04?;20GS/LL>$_B,!&RT)$%@$(*)!"$E!7/
++M#&8("!8N/9=K.,FB'MY.._/VD>C9#^`XS.XJ/S:XR1TI^MMN1AER0/FI,QI<
++MI!S/-3&8!4S2B>DK$=5/`G2Z><=$L7)SB`(%.`?MXB?J?H_!K]]%1:Q0>>D5
++M@*,0!$21@`8Q[N?N_7_H;4[#S/![4O,^[NUOC?7F"'Z'YMMYO*;_)-<!Z[TG
++MI*)=+?,[8F8#>K^K9([W=II7_32_/>'@"M-U3'I3>\5F/7!,>LN:H3*N!L;;
++M")']UU7>>-S\,?K65#!/&(542)(!76C2F<92T@@7G-NX#D][M'6*;YS)AF7<
++M!W7=#3Y1,RGT_`:&!`EU8>JEM/&<Z=3T%4V1[G3DVDH\X<(1KVY(YKFX4,W#
++M@OCO$:6B8^HAC+,.^S`V.CG>JEI"+[5?4O\_]DT0",,XH95*#$@#=L,AO4L+
++M1BB(3Q$X?C1IAS!$AY.>_%4]AI=*'&F6&\>U;\YG,QV14-HP9\BY30H/3].G
++MTW36AQ.N"4&8U(-$CSEJ:IAKE6J,KC=.U9$\H:1I/5!WK37"2WTTCL+"6YJD
++MVV8?W_`MAI=@)]J^U-YAOBS;:'(S4SPBJP))LEQ'+GK;<]US[@5VN)U.SEI]
++M@B6(>WE8&UNN(Z_Y^_U`>?=I<YH<:Y7@Z9C$)>*[4=\'V/"\YOXXU=RH7$2P
++MZ8AP5/2</TOZ\C(9=&&[AG/8E@*VB@8L:0:5=Y66\X2D.7TV9:?@;+B>@#F"
++M^(R"5",K@5=:R=P=>/%\_!=LCS0>*ISX$*;G?\$9(P-<"734Z=7:V/E#,EJ3
++MR#)DN].):$0+S";E13Q8UADO"%],GD)5UBLW<J)YR".E/J3J`^PF6,0SG-%0
++M"7N9K0*D#I.`[B%7`^)[%EN<\.D]+[$>UDCN34&A3.I3U+69_K:PL#9:%6F)
++M[AU5/05TLKLJ2*QB0,US:"U%(#G!9N81MN&'7T1O*J^]%%^#HV->-]LNGN*=
++M"C%H8>WG7$,^&0"244E4:#V6Y!289:<&E<<-ZGKH1[>$BW"MUU,#SL;,,),V
++M565B6/E!Z,H8E#]WD=(P%@X(,/C7GD<S]$14+$KE2?!'&@4#"J4DUM@S<>0D
++MP-:,NZ$0>8GQY;JN=^^\XXXN0&5=W>Z5]AZ1HYC%E&S'8*.!D@5[<8]"EYC)
++M7*.I"&7-3RH1V#K4>$VO7@MZ*G*`]>M6049!<IIHH&:*@U..`8SPN9NZ/@W$
++M&,^",8M/J#@-9F,F35FU[UMWUZ`A^/!1>\$(C%$3O$(">"B@IT'Y=.=H)`'G
++MP?T,;OF2.6;FQ;,.#Y<(PT)/0+73.OI!]&#-""F<TJ>[4ST51A!FJDN2B3PA
++MCB(Q@J)!V14/5@R7:FG%FN\:RY!,K%<CRJ)2E'H':71::U+B9EZ&^[QA"$(6
++MW[UV*8E.$)YLMO(SQ!W:VB68:T<\[J:GE`^T,VO'GU:)Q<37E7%6&7=6*0:C
++M130555L1[```B"D1'L4)04H@+`D`!*40I2""85*?;,!0/,ML%:I2GZ7JOT_^
++M__JGX^`88*"^A2B!("$DD)-JTBB*)!&01619$18(D%1(C(BL!EM046+$148*
++MB0448@JBJK$4L`JZA/-TU(2O62'UK"RTDD#%#32HU54TJU&$I.=`:'<L4M&Z
++M#3XD##Y(;+O*'P?O/*L$0M7X4(Q+A$./HU"$E?+2H4$0_*[S[.?+^5OM!_4_
++M&;Y:7'A#\NXTI=P]9X81`(@)D"("VFZ#(``(E`BHF35`Z,7BT/QW.\K-?*=`
++M#H[THS)C:DZ[>>T32S-L$$!!O<Z/1:=GW7L.-`@+OC?L!%%%01YJ0`W\#O_<
++MU7+AYV=\KX_M\G+/<I8S?E:J'"]%[4IBH5:8;!*?B5.\9;(40FH14V2K4D9\
++MU79K*ZG:G;26OW<;!(4112K2I_&OTNYP.TXS2`2<66Z>M9<,*\;?V9^D]EW*
++MBQ6*UR5PQ\J=9&)2U[%%,*&2VK(M$(BHTDQO)TV^76K`\E7:.HV99X,B$L68
++MSG"]BK3]QP^-(JA!,M42_#=-`S`(@)8T4R,S_Y[7P__.8YW/0JJJJJJJNK8X
++M-=3PO'T&C*J9)`]F0`%K%$*P$#"""'MX"\OETF6EW>4IT9RN8.;PY_?U:<^?
++M*X$4<G+IS96`!RXB`W?+I9`4-_^=]@=5PM10NDDBBA..4DY\"D#+`\7;U[G#
++MO=@@?%VQX&)]5][V?U]Z-?DW??P?H<?6U2\`#8A\D^S^;\VZ[QY0#'`3U,IK
++MLXHES[NTJ)5](L\+[G%+;D/B#Q`X4AG*UHL1KC9MFPLT`%,&%)B_^A;.P#UH
++MFUO;E0'(83(IV[A:>&<5`%`1414BR`"1@4.DH8`QG9@#`TT7)^C&:7C@<GE+
++MH21&K'625@X1SV8=C[7_!BK`FS4,OJG>IA^%"_<3WTX+Q5*-=*7Y#/IE(_)_
++MYYO52X/>^`A8NS+]GQ6$%J!9HFB5*_*22UE#*>TYS.T"1U[AFR44'A(ZIZ$N
++M7O')DXRK49/4T!7XG8#F7\)CF+,TPJAPV;\#4,AD7,Z/*?9D2DQDGR.^]LB(
++M%[`,/\]CK_:F,LN`#`T>]RT?A*WQ[K='\FN+&[/YKKD[GOG)".MPK9KOE&2>
++M4312<,\Y^C:>3=S-OHU-R)^F^*9H5Q"=7^-'_#GT?0V-ZX-3_S"6N2Q?O;7:
++M=G#ZR=L/JQG[<S([.GUTY(]YW<0002-&03+]]@]K1M228\@$'[8E&`X0,H(P
++M1&=K.;MCX^[[_\*P#V$[N)^U]G0V?:4`Z41`"(&!@9N"#?S[?F^CU<GQ*7,>
++MO\_!J];07#9:XP=/JNC6V$KW5]`_.82T05/S?='X=WG0YS.[I94'X$?S()[N
++M#_Y@OQH(_`@/2399*2&\0*8=X^IVZ-3#*-44=7^#1YU#@<+A<&%:']\FNF[I
++M29_6J&Z$R.&H/.2,M8LDC$UZC*6*@F7SBW:"GQ3@-&AS/D'%[PAX*Z.!&Q`!
++MK?M_?V/CA,ZX91WMR-A0992O)T0BR^HF9=VI<Z;3/3/B,,.>A-3&20"GDL&"
++M2O*AJJ$K`'3#X"@L61'"0N\_-&J])J,%%(*O_R0A*R3X>_<_]4=+TNCF/6?<
++M]IGY%UQ&M/IX7^;)C'TSL++)C1,MUVW257A0K(-$P.$V@S/RDA=MA.W#)`^<
++MI.1!C(@-*E;AB)^IQOD_^YWQ:2]K^31Z+%2J$@W$OT7PD.02BH.>E@'022(E
++M3@Y$+>HD)''<X_^[Q9E<G8)L?9]R_X3L2TLN(::ZWJ)!F6F4AID@*_Z3Z?>I
++MK!<&,1@9T",6@FYM(V?[Q8KX6%]RJ`*8F:0\/6K-)X%%08$0"I?TTOH7J&:2
++MP"RV[FF`@B!MYU]ZA5,A0DG2_Q)37"OW#@@D%P1P53,Y9BTRN'V=+Z4!-QP>
++M0Y0QJ(A,6"07X?-ZWOBHFM&@L1]UFNEG^IKIM+R/9>.LI"N99-[D[:+A+S@]
++M9SU/\?K]_\Q%2,`!A(D20!4>@D8$G;HBBL(!"(2`J'98-5R/N2MRE[9.N+,!
++MO"/VT9Y%Q@(TM(/8\%_VL"*'2P^*D+N2<O=WB`H+SS-YB;;<UE-#-N:Y9@?!
++M^#+W*IA0`QB-#D#`YB!!01448@B,1%$2",51!%BP%4BP5!&"1B(HJ"@2)$C&
++M,D#TNA0$!`_!_//C_\:,LO33YN;-]UX[=NL$NWM-W#2&/RRVQM#F%?ZYS-(C
++M!:"*BO%^GER_)Y^/U\1'3UP<.4C&$>,C?4!XXM?3VL;&:5WJ^+#L>F7!H_,N
++MIUM`#L5Y[#M_O]A6"9J&&AI_78:(A$4RYACP^Q[,#B9?EORFBL,[/%'C)]'[
++M.CACW"3O$#=`(=[_-\UU>&,/=25L+C^"'BK/E0!N1^$_"JB+_JPA`*]8CO(:
++M`,.^+BG;`ZF7BV09<[-_][:8^4KLHF.(1`0&LTSWGYJ3I.3K!0![LX-.34%X
++MKYZ.+[/.9+T`A+UD=Y@88X+<D[;(9[$K8+5I?Z$&^</H*6JWR3"CB_,77/+_
++MX^DG*!-6>WRYRQ#Z.0GAL_X^DU8%6CXLM.6/V<%ZXA\X\>Z?;"LR((5^)BH[
++M9YVM6QCU[L+>4:^0@[(+A[*2R473>#_#80G05=[MO!0B83]S4Y#69SL\FU;,
++MM[%]++><ZV/:Y5)WN%_&CUF;?Z:</"R<V\VOFXR?C$\?+,?MAET205[+6I!J
++MRA5AYEG26<>'XGB[M<9CU9H/*ZY^J8LEQ/Y>=4H#=<EIJ8&40/&J$?"Z818<
++MIQ6H\)F_";T.[2M_F=)VW!@'ND!QI,[BE=GR^B_,X7I0+3JJ4]A6Q-]XV1_5
++MU'M[]=[#.PYEXCJ&:P)_3RZ#"([W['6=LW(OD+4"CHU(W$?2=PS]B!N"A`>D
++M076@OV1*HU!09+VY&I##%336?/5%)M>9>5%%"0;X0^D(!5LP%ZR;J#4AL2A(
++M<S2DL$I55=_1LS*$$M0$ST<MVA),QC^IJ^!V\86P1":U`)2(R._\EYKN--VK
++MKDVDP]$@@CE/F](,R"?T>VL=+2L3>4N`V%1T%AG`R@("$$@E`4)0]>@`6#Y_
++M!?KZ5D(#B^G8"OV,(-.'8LE-"R&W?C;5W&U,*%TS9#DQGG02?L<W(#+,*L5`
++M3W\)2.M&$X]T'R#@C7)1N>I;-V'6_'VD:/[B\[^!BK._+R4O,AIRU>SJ67X@
++M9BGP5'Z*.")D_)5(1^2U>5IE7MC^?6;KS0@W,1]%[_1Q>7T[6YJ6XJQ.^W;Y
++M/EBI?KRW$W[U(3Z"^#'K&C9:437[_,^`K\[(S?[&%\T)U''KMU:$5SAVI&?1
++MO)WDB92)(QL1_:14'+!3-4<$"%!A'EL<M,6PH"93>*M:SVOPL/C22OB0/^XF
++MK<69BJ[(VD8/"J7=>==O$-;WW//)P10\;N+6!'EH$U.A3!PVG>^?[V.QP)[E
++MM#M7!J:JJ5FI.V-&A9([(@[VAQ'!<$'(1S;SN=_.6>^5#L1AQ&_D'TL&-9`/
++M68$)7J_190&=D@#5'\F^+AINR/5:*)DDUZ[PNR9<+9KN3=Z?U+GOLD3<33S=
++MITE&9$Q@::(*8DUSZ<4:QI+(U)BWK2;WBIFENWDW[`N'(FMFG:Z>V\N0-.!C
++M]U#!U]T8<9HC9P8<^B_][RM5^;"??IE6G\((HDSM:T1.%M7\:[:DU2F*_DM4
++MYS/(B9,$-F_^*?"5:RW^<#:*&>C'":.!%4R6T1D?:_G=$H[JG;^K-&;DAU5X
++M&\$R"F*J1F;BV>]?N_E7K/--@V7(QI0@&I.NR=19-&!(=T.&_,X7T=/'`?1*
++M%W!R_DXWII`J:7?>BE$CIAWG*'YBZ$Q'_%_<27$JIQGYCU"!+X5C(PDS@W[\
++M7\*E`_CB_W[+#`2HNE+Z5(.<CG9DS>40BX]1`,]W]9L2=-5S\JMIA,-W<&@;
++M^[8^O76V>0CBYD0'SW%)\GD[WPO%X,)C%,*J;0T`C:JCB'+92>O:H';H,-[R
++M=DRZ#I]-'NVA`SO3(FDOZW8P4EL?@9A=5^0Y7FCDLWBFFUTVRG&%.[D2V^=`
++M5#K.+)QE0NXQY^M7*(C1-,N?>U93STMV@CGTY>&R$>RPK3'2R2*?5I5(24S/
++M3K0$S`PJ(?/0Q9_SG%)RTTU3HP8:\7'A72DJ57`^O/MG`YY><>SSD?WAH=M:
++M"RO5HS+T!`\:(`9QAYB=#3-8"F2'/%UT1%Q3?D&F$[TQ2-M#%>'(OH`!2E./
++M)389QV:(LHH6GG+(3N1L[?82L*K4K0&9XD2X6@M+0N,)U%K,T-":?/Y]\MK5
++MK_Z:_I>'2UZ7+0:AKH\.K%VYPA6E!DHVG,PO?KU25M)+DT,P/AGJ<1$85R9%
++MPF!G=#T]<HR$?#[2E@+NC"6RWM$3#I[5-<Z/6[2%1ZFE73CH4URF96")%C.<
++MUS4Y90$A."A4S:-LK4[5U/+UM):-H<SSX#P(*-.@5&,JF@[R4F9.)J@T%S6&
++MY-7"0,'GK!AS[U94MKW798VT*`7T_MZ=JT=23U]YB:[5ZZC$)W<.AIMBB3:&
++M_8,[9C"SU:MY%I#G1P*,.%"7H-.MJ!L1<,-93X25*-A70/1;AU7,W4?.63TX
++M]6(=)M]%&!<M@U?E(SK#DN0I)JZEJT>U45@%VRRB)A-TW^ZQ(Q_ZZED+F:K/
++M%[7I:0$4UD$#WL$0]Y40\#A.AW7;\'O>+#S^/JY/1OZ/3K>4XW>>[AD]#5PU
++M:AAQU[/W.(AMMJ>4Q`29&#B9U_*;%>_:VI]+:'MP6ICV=R&`\X8;_^^!.GMS
++M[CNN,)<#02E3:J,LVK(;7-QHKD@J'][T+:HKY^3V'XE@FQ3YWDML=KUMVS9T
++M--UE*6'ES*\2<L#VF)@Z.*G"/L#%@/+XH^NZ]:G%Y#6=6-,6K*1L8T^J:KMN
++MP4V*$YQXT8=J[5=H0%G&1`:`(&`!2N8*%Q%,H=_@0=\O(9E#/)`D(2#`DC(Q
++M3<]9[G9P^?PUZN7?L<7/&!%`1`@!(NVVQ>LIZ+T;BH^&&6:[X%`OG)G&&W,6
++M)H$T1"14@OL:/PY6'YT^RE4`/70$D`%\6*J_[>]LELD`/3H$F<BGYO7W#-P#
++M)(+"(18=3Z.PLD1!A(L6?39=WB8-50HDFLR"P*C^G[ZY9`1/(3_#Q*Q&$F]*
++M@A`\#X%A8B2?ZU1)$9%)(Q%@"@LDG-D`8'(&,"(8(YS&#0!3:QMRG/,TU?%R
++MG7'NZ/Y>C6R':]3T>]R:N[G/F>L^-Z8W(@05",604",9-Y"A3TN;K^7U_D?5
++M]+)>,!C#_7R<;\D\CX1PL]S$<S^5PCQ;Y]N7OG-3"G1I4&VM7_;EN(G/K_I[
++MN:N:C<>^X[C@`P,/0"-31'T61;6DR@][DZ>GRX>I6>`E\3;J]#&J;J-QZDEZ
++MN`Z"S<>Q9D;G8<GSMW1G=>V4DQ'4T:78NL=:(*1TE&S_R-!0N)EE'3[0&B*!
++MXQ*NL=1!1^MME#CP3"#Z\>EWS"6?=]^))<L/*'D&0)_+'NT37FKB6HHED8[\
++MP@8?\?J3Q]N@LL\X@V,1(0:0)L21V28:XQN,AB[Z8TJAUKCT1M]NHG:;H(B@
++MS^R5=M$+[^_8K"^&BP,&JT$M,/?@J\LZP'!<-A.;DV<5D0!J$((TAJ[I<=8O
++M<WXT`V#3<Y.[4_ZJ&0Q+;CH%#^?(=#@2S:]3(($2XI=O_SZY(DP\(RP(.)68
++MXW^IE\%0)2B[NW^6>"@K:@'@@WDG:-N)I=7TH:&]V:HU#$8H@2H7&5C!B8/<
++M>+*R`ZN=[,`1\>^V(NU#+I]][;J]J$$)=@@8!C&8F38Z2ZYW@!C;&*7UJH?S
++MQ*8,+&MJ!D'$H2WJ"=:##R1L!V.SV:FBB#KMJZ-A8U=P'F)%DBD+Y(]`W<76
++M0"B`P'7/I#2C1W`Q//G]JRCF4N!U6V.,:6B(^'F_PM]?37_I^G\>W:F,#`!L
++M#$,?SLN]D@92+./&PT_IX_D\#C]]P.?H=A[GX8-3>EHG#-5Y:9#51"%*"@8,
++MR,#P4(,M6C4*U0!009;_,O-S^;=Q%1U4]/RN)VFLJGPB`SJ%?B]A6)UT%0>\
++M7?CM)8U>&P!P_@=A7"`%&/ZL=2/B:J/Z>/Q_QN./XO]HL>FR%6\R]CX<7IV1
++MM0K6BSY&M4Q1/\^R5ZB<#`'BZ1KJHV!@LE\&)<,`$827-VNZ1PXSI0/%T;N2
++M:'A7:2NQC\#-SZFY*DG.9SA'QL/C0XYFJ`..@)-DDV29VD5#RDE>]G8Q^3VW
++ML)IY;;C3C--_D9B/%?0-[\A)B^]1S.A,'R5))?(UTRN%AZ[R=7^#1>8QD6;?
++M\\>9'WS7+Q2MMQB$4G'&LKKE_5:P6VHX=!IXC/A?V!&;E12BA`S"D%5]>PD&
++MLS[;Q-_NX\>E1,6!J!`.E>BKU-7><]ML_>YUY`*]=J1"%3^'=ZG#M`_=FP\5
++M_1@U\L5HC!6/M^AK=6RKL$<4WMRZ#=/)WD-JE[^K[$5:2F,WF$W:PM9.*M4Y
++M,1F3/&3Z4AKF[0P[+OYJE&NVX5N("$H-U)M)Q]U1O+/^/[+5!F0AOSIW)JO1
++M-W"XB@\FPFF^^+'I5<9E=\R":I,J$XM:0Y$V!"D*0/[J>C4]94.6F>7>N3E^
++MZS4N7`.VR=BDAPI]W\W2SM;LA4L[C%P*HES%0]GNJ_4,L#<[Z^]\A0P/G_9<
++M-GJDQ,;U!M7+G$4.Q774HG@<3ZR^,@.(C5#=9R1V,1BJ>G;B^X1G8:0*J9PI
++M0O;M#TOG'I,BH@=IM=C3M.?3S+JKI7#,9^+T0K`E=MSFF.*<'F(&]5Y[G99G
++M$Q0MHQB/4_,W&S73.T(4?>X?VDZ)REP[?IQJS%,A"CV=$(_EC6+=\=C[AZ^L
++MT6_?WU:<<"*P,*F!BTVR-7-UZ8R*<(0Z,?*JV<():T68@T1[:_##<>AN:?DT
++MFK>X6UN;;41]M,=73:_5`8T)T.!>[ADD@M$)!&9DX4_BU5+'$2![3L[L]J^Z
++MNB>(E(74J3W"%&E0J0Z!0A1"@K/[XD5C,*BGM#&WV3BL+08N0>"'P6\JH&%[
++M_'ONYQUCK5P8Z@\6BSVU0/@G(./1*RH.1^?4F$S2GX":4R%3D!X_,0:@()!,
++MX.-/LI6"D^5H9QOY(BMN;Y[FTCO5U^=_V]-005[^R6@N"H]!I"@*J2I9445_
++M?LM+4&A$:4*A`@3/(K`5895(TB768N-]$Y",C9W-PTE8>7<6FSV_800?X^2Q
++ML6'"\!JHI4"AC#]EJ"+343WC0<ZAD@1A"H"(J`@@>"P%!X6Z=Z+>/#;E\:3H
++M*J9Z)ZHG?FL$!@@([X%`13X]*>3\4W=4+!:?80*1;@X_:7`V2$",%O%+Y;NW
++MSK?IH.1]7FZJ%F6T;`NP\"[HC>M:RB9@9<!0@5"8`P*!0@1$`LLUJIW\LM)S
++MF[S%QOO]V&GJZZ7=Y^!.7U#[F<<`H4I]\$##HI(@BL0*84T)]KZODY'.!>CM
++MN5V'C^C]SZ+:[B[]+=^EM]A+]F_!\*>SA;M^^UT*,[^Z802/D8,&I$20.<B(
++MCG.#[O,*QA>*F'Q/!Z_P-@_2/8^OT^"0@))K'@?MU`W<04B($7/6DU3`./KY
++M:1.?^/Y_JBD3"%"(29.P4)IHI_DA+0R?6Z%LR#'D>>-RY]_<[&]";4S'N9LZ
++M"Y_Z2\H5#%Z.7J?>2_*H\+?3*3@?E2><BI;"X*(;,/-+C,[=@5'(68`+PB!`
++M#C_4Q&I:S[CCH7Y:*R(MYAZ3$#(('E4F32%9#TE.LCN?!L.UW0)R1?-163@K
++MO!L)_7#I?&D`X'CGK&)`F`0($&-=4.70?Q[8?'Y'=?L7-;)4HWWPM+-;Q<?\
++MPHWN=Q_5QAJX)>)5$*M1;0//-@K!L7>5:>)F4[WO4.>,LM,94O5/E$SMAZ>H
++M\![?H>XT]I<WJ1C!D"Q\E)CXE^',%,QY\#?+K(L,A+-J!*'@`E7""M'JSH[0
++MUB@AHPP#0@JTHUF+"76.<IL,-PG^56DB=_X26G4W"#V!U`"%2_G9](:V%<B%
++M8D2#0B*R5^%$):,5*PP%)5UR0$23)=/4U*ZKG[YHVWO^<L\[K9S52*(GH-%8
++M.AT9AJE>?,L*YE4(_XY&?7:=O,PS0::.'M8IM8F#)34%%76)^HW?:5.<Q"C'
++M2:=*$+RR0P"&_NARU_58F=B!'.CV6U<3$SB/0]<\S`,Q`RYR@UGN_@3[D2$A
++M2@\5)7=&<#+6DAP&6G1<Y0?K)I'^0?*I;KT-36H=7@XN\CH+O%4M8SN]0Y71
++M5+6*G'.H$8AY0:/,=+=![_R=V&ZU[O#-+:+#/%EZM=YPV];`,V`I2IW'O-@:
++MTR\CFZ#1#1MY4,,!/NLBSMLDH*+&FJ^>S=Y6&,4AE,AE@%G2V47(DXEPJT)0
++M..PL_..*EQ<M%G=D73[G&VS+Y]`Y,;1*H49.QW2.+@L=M`K2F;+-E>-^+I,4
++M56.:ST1Q#2EAT>"]%8+(?\>5O`*'!.B37T7>L6.7PW*[?5@`6%UD\A!('2L+
++M.$R'/6!C>GKC#<5U,GN3M%F9WZDL`#J<E\*\/W>-4OYO1/K#W'8/.+L-B!CG
++MX>C5+"2X.U^#\@\X%#M@H7^B?UMO@_`IC<6<>OX?O"ZMQ?_D-P]Z(A[$]Z_%
++M+`/EE#J)UQ1L@*%@C[$1"K]>"A+B&;O@8'Q?I;)U?/;1OP=SD7<Z1,"Q'K2J
++M&8*.,0G/J6["QSZC4H^$KDKMLP$UIEA7KG..+UK'S4LB]:_+Y2>X(0+@/D`C
++M/D>5DIGL#VVM`4V40(D($48(AZH0`3N`(J^_Z7C^-$K2C]+3I-44+?CE2BE:
++M#.]`(@$(E,*(A?*OS&D'J%0$X>>2#.C>W]UAB?==P[^@X@.USAH$4HVQ5N0`
++MZODUS#,W(T.=7,.=4Z"1PJ7D&>!D_"SMO9HN>!IEBHY@LWU&4`A2C*%!*P@F
++M8:NPEZZ1OJ+8!2PM4`I5D,(BM2`%DHF4@!@-D)G$G;9"2$@VMR@%5`*C5O"T
++M4`BYZ*`8%I9>WMXV(`8>GP<;"C@H!&EW$,0`H)-61KVF4`"BE8`&6*P(T5MY
++M[,,;ND@P0:%;$:!6,4@"?R*`@&(I`?/V.OR$P*:HNV,TP%#5A;Z`2JI_A9J'
++M][V!`!.$/:?0EGVF8TSR<_YI`4.0%0RB(=X"A!$/`!0OJ`)50["B$$0M!0I0
++M2"H11'R04*J-04+S-FYJBAX210"0]YV;<VQ?3JG\W</I?IJ?0;"&6#OQLOO:
++M>I/?,69?B1'DF7D;]MP`1`).+&>KUBK4B?4=S:MC<=XWW$U4KM[G[J2EVCN;
++M/@/-;<73F[?O[4P!0W`4.`%#R=[`2!W.O9K37>X]!V]56Z^)X;I9Q1+C!41$
++MA)"20]?3*9`AEP?L?*3)N`Q3!3D0`LC0"E*)%1I%>]!0VP4.J"ALW`8GBTD@
++M#L^)$P#&[CW_!W%E/`IFIAB>S2DGPA)&9)!F9F`A"*L=/@R,)LXZQI19P9&2
++M15")D#(0,00(D`:\P,X<1RJ9G3.Q+U&^0G`B'FW@#<8A8&_T9K"I@@00;!0V
++MFV+(\9;GZW-.K6N_:8*<.7D+*!;[0KZ.DM+/;Q1#DO]1P=U<X&3$<1$.0%"*
++MH<`*'E@2@$0$5RP`1`-WN-,0AUS2828S:@01!X.]G)S7NM%=TJNDV/?;4LNK
++M9==J]QN<W=-HVD=HVIY8(+3K@H5#U'4Q[`N.(E/ZR\FGLB#GL'$&0`SMZ<IM
++M0''1*9&)%*8X2[=1)6&V:])@<X\`/.E:&%G2(^"PVUD9M`.6ZEG[0T*!?XE7
++M*)NJBN5KJ^!WS"V*^K3[TX(8P@Q9C?XV^B!<F-!/`)_$P0<6L!@6\&;4)*0:
++M&Y]1?6>0K$SDMIB"0,=)TI=B1D1`&1@9+]015`AUX.G%YCZTQSMP&.NF[Q2D
++MLFF^%S/`X*6,"GT/\-3\<Q7JRJ4003DG:>I.+EJ[:-C*DVU%JVK?RT55HA5M
++M=IL\W`ZX8X'%R6G6UJ($"HG#NPH6)[9)5#I>#661&#'.,(R#0BA?#,(=4P<9
++MC849O*SG1$]L9,1UH*!1HCV=J7?)NP'\_L2T\!H*$(67:P!AE18K\Z$!Z8K#
++M3<BJ0S<9XFVSY4)'@Q'==>**H"OOKTP&`WF3K!\@2',QTC=T"G1R-J+][XLV
++M(+8U@=`1MFP\,V/E5"&F8=JAMA>ST4A8R]DFB-V.8J;>MYL^"G(IU)_!1T1S
++M1ZKUQC]A"6W+L==(4)^N[[/IW.W'V>OI3ZQ3I)5#=,;"[4`WYH:H"EIO#QP]
++MSLR@!H'@:TL;M]IPBL<^H8]HE8\TV##;I=QSPY_<XST^OOP\'_QP8U>]QF;P
++MM/>O"3T)[*80=VMJ@'7HE+(S=H(%<+PY^)\@S<S(YO;%WJ,P^Q(GUFG48GD\
++MSS=G`-LA=((YY8/GUFD`N^9-KZ<U.6L5,N0),)!"")LGCS71M,"L:S=[>]_<
++M;HPZ-X4BF#W(*'(0`K;8HF.\+K,J(@7U(\$0%_L?>;GX@ZBQQ8+SQM-(KZ,T
++M9C:"/-1$LP6-!UB!H'J`"Z[BU1&&*B])JICY7IM$"$[=1A]Z(`N00(;F^!CC
++M5^P%&$;?H8DTT347F=$+184JB<Q,?@UJPRZEVLNV,M;F81Y6W*E@8F-@:UW+
++MUCE\O;C^9QGZN\AOP.GI?,(3UYO5//\C5J\WO?ZOCGWOHGAO*2,@R&)`"9BU
++M["+8KH`$+7&@&Z4>Y0.(9!0,+$N[M:9UZ'XN<E/AUZW;U/DPCMHB0"*]#D#^
++M_VR]PLKFTC<0TYX!26Z*67#0#.`5B05(;M=<(K='`Y!WC;<K`NI[;MT+6A3*
++MD`9\`(NC+0,%F#@A`TAR1`BB3V>^`PG`&KU$<SX&CQE>+X:VQP^/<A5[6J*S
++M!/4M6\;"HA!RDBH@?3RBPKBIEH32=%7I;"K<Z0EZ_,I6[07?[4-:1=_'4[-S
++MP9F-I"D)V=7>6EA!K$],NI#&V[..-H-1%"/>\UILE?@CGDZ_->"R,B!V.L@$
++M\&)YAC4=[_/OLTGHN.\HM45P\AYL%3UTXX8UK89FA0IA!,I6./VBK\XR="PY
++MX$>0E!].'NBXP53HL[#=M+887P^KJ$O*\J%%R3%HS53F3>PW"W)RE^0XP`&B
++MX5S4FXKO7KFF=!'B*40SE(LCGE4:[%<'28D=N(EZTAK?KT,J8/+0;J:&KD4Q
++MB[OTEDH1OBO+GDKUP8>/$/I/K&79VH!DW(/A#%O11Q,@?43>'>UDD\ER#*FT
++M')J(=2J>5.VW66K+2X(DT)IN(PK1W!R2F&OY&3M18,?"*L,:G@I^8P.Q>&WF
++M#.EZ:?20E*9N80_^%7)T<D'&5M0J$6&RB+T(USCCMKU739O\/1518<*YIG-0
++M#65V@+'Y%U6DOF2-F>'JNIOAM2U8J7U%SQ!5SP<%>O\CD:[T#9<P6C))@P9F
++MXA#D)&#<BYHDU%EY4Z)&<30'1LTC]25P84V4D'%1LVS6@>,"[%5=`GHARQIT
++M%\QD4*(FQ4)1^"94)MT,<05.QG++X<\&]/K$6S/WCS493!P1"*-:=F<4IPIN
++M/+HA_?]9K12Z4?9#B^ZG``&8)YPC&'J`:.$+6*I=A&GX74>)[[HP]&G1Q'WD
++M&I$34#4[D:E&0X>6!PZ:3'B0^W>(,D=*^/92`7Q>Q9-VAPUEQY3OTL_HZO#;
++M>#LA+:6P2J`"-2V,RA8$1Z7F[]*K)3,'CQHY$78K\B']@`8P%]=;,/U'E7#N
++M*&)X?MY1EQ%FK,8H:9K><W!,3A+XJ7WC>;;!S?'N^@'EQ,87%WG+>)!%3C>!
++MPG)6ZNZG!P'@4%04Y;)`BM,$\7AB]3RL4:\XW7W00(".LJFSTKGT*M2TN^L7
++M%@0`B`(A<`$"(1N!QX5FD<SH=5450P&>\?@KO;H<;O.81WCXCX0Q*/U9@/0C
++M%(`V()O@A7*8\:4@&#F)EC0I05R7\PBCBCE#2XF,#"KCFN@W<DX")&7&2Q%U
++M#O13N<&2B9&HDMZKMM0,]DIS60L1JBKZ01&R=S*!1\9-8U7.?SM9E<+5'C]>
++M>X>>N2Q1:\ZY(2F0,Q?:''2/&A[N9<9W,W"C.BFA"X6`#S/>PH?FQ$NZU?L5
++M:%KJY31\`:46RYB8<C4G8&[Y>I12>4+@=KUF'V84*AZ9)<=+3`TMQSW!&4&1
++MOVK3F)P\F'+M>@6I@UR)FR&V&]@54]WN43U=;>HIBQ14'9V"IBLL3##*Q],)
++M]QWNQWGS@"VU^,'ZK(O"&XX73+[$P:JK;=PJN[)<HRDVO8<U1[*Q-UY0SL%'
++M/WY"1A*,7:^X[^'K4RX?([G;.-QYYN`'K@D#KM8RHW,O:;&,_:T"^M`+*E*E
++M+79L^KAV(>=#R\,!3RVIIE4%#$M#M:[T;+*^L[L\_E->?;7GBTF.WV'SA^,C
++MI_(U5I*^F0K_A\E2M,7C("1S"";,76BQS-J0\@"(!@A7K8LPYTN8I$"81B%1
++M`2=VC#?M08HPA"!^5`AU)@H2LH%WI7IIQW$(44H5I@A&_(*0&2]9BH$/S424
++MA[ID(4F0PG+%CL8%'F96&M\T#-$984"5((`<NZN89TN`%QI6,JR;F?(Y#K];
++MTW,[F5"RU555SJEF<,8,<G[#W?6<[YKPOF/&LPZ32F8Z1HT>GI9O\^J`G)"3
++MF$F&UPO%T7I"-_4@?=<7448N.,D(T:\SOC/B0Q[.&;'-BYP3#<._R"(7]"@2
++MB;[:-2ACE"YUZ)"\@RP@*&P7C0%#GO?PG1<VFPRE-.NY$NW7,W!;O\J3[+KI
++M4Z-E)T7A["ERR(`0@6'W$QV])]<:,6/5R*`)ZX%"Y`3KF9>Z($QPJPJX;0J%
++MM77KK\]``=R#J10T14"4D%<\6L+ME\?UG3^>^5U.OD!0]L0`3B!0@@KR<9-P
++MXQ-;L=B_?>*S;KP@@@<.\Z#.-M"Q%IPM$S$,EA?"(H)'AE%@E>(`38$0KENH
++M]!A=)P]Y_=LLSAE$R%+").Z_8;-;K9`DT\WCWG0Y"P]#];[*TR"=W$V,V91A
++M71,P*$:G9H`TMG,HETJ\/!38KNF;OK\P*&5H!OJJO>I!4(\(*&-IF"F@%#?:
++MYPX,&FHI(<=[S*;`*%B<R!K\*VFQX6WU[K78U-Z*&LE9"8[6N1=@I0I:6BU*
++MDZZ;!:UO34V.1L-QA5R@8UP=L.`*9/85?J_JH!D`1'SD(B!#-P*C!$NG>V3+
++M@P&<#C!ZMB!2%%`=4,*!O.H4S#`@H%NK\B\5#*>?XGQMCF8W'\*G4SGM?J3$
++M.[`K2U%`44!BQ&16V,KX'0*3KCCC(@8G90&TX@*';F\]9.BEPZ+322R/-M10
++MR5`$IZ@@N9>,I984,W=;)`QC)JX*%<D70I#0,L/'L#HP'.DM!0M!0L=C5=''
++M14W+0!*UU''>>Y?0&'-AM15=<-%!(&;ZK>!O.*&]IL/,LNP44\D;(=EVWGN.
++M<:*;Y.R9TN"O:[A73N%1/,)PN)6#(&+%6B&Y"2A!;:[G-0<O!LKJ]=W&^;>(
++M^-\(=F/B/>'L(+-)POFTHV%?R5\SNC[ABBN!J7%-YELS%@L5(H5@58P5D`B`
++MQ/D!-HQ7,::HBH&,@RH3&"0PAK<0`BHRSV)WVT<&3@">YM+7(7/6<0U33JH%
++MFYS:'!VWP`!*]J2!E)"0B0B*((HQ$11B/WIB!1L2$UPD9"-3(1C`4W^Z@.T2
++M$RV=VM%5165C3(]7JSZ`N=#Z<"=NM9G/\83I['_K/4_HWCFKHWV:J:Y?Y'7A
++M?DI$1`BM`$0%(``A]#ENPDS3Z^)MN7]3\W6%<T-&>.*Z'<&R.8+:@@0!@(0%
++M"09`0($!0@H)Q;WT=+2$%0GCY,%<C811E_?+U:6R.#+0NHZS]YRS=_SY1%7^
++M5G?HC\/?M15/RPB@`/!S,N^=WR5*':Y8?')V/`\/I/*RLVF#JS#JB:"[02*`
++M(@,L`B`8VC"`T1V#0(X948JAZ&79='7Y?9/I#DH9\FJ9FA)"2LKEYN(?4URS
++MK.S,^\-'K^>V.FV#8+C555,5:JE1I*&A64J4TRPD#?A"`A7A?E=V;H^5^.-Z
++M6;9:`B>RV7/ZWMF<\GFAL7@"0.W=<"A9CT-E%!,43[^,@)S]'FB,H9"!IZQH
++MH1S!EM)#>P@B%+J@H=P:#%`(H!&-^E\:4(U/%V"IIP!0VP4,!8N3#&7E(4*%
++M)0E+QR`H8:"X`T;-Y?41POCSN=O=DYGW<]63['4"AD9$])!#N0$%Y%49R1H]
++M6*"?%YJ!HJ9E39'VPG`9;O/EH#D8L95,.A8F&DHX/>60794`1,M0S,&B"%^>
++M[P>L"]1T,P1:P($'TD0"Y41OAU@4,@*&P>W@],!U&R'%CMFQ:HY5&CU!-N[:
++M:`]:H6HH)F;`H[WL[.Z[\^9ZZ[8.CHFX(ZCAF4T3E@H1&D:F)3>UXW%).3O]
++MRT3:,VU>!F(A42\]S]WA?`OT/W'0ZPB&3&:)2,V*VM25/IZA($,I-Z0HI"08
++M-.R5&JC:35G(%UE`@`EGDP"BC`(HW^#4+@4(!-L%"/8+F@V"(0E!$*(9H2M"
++MHP<I@(A3.EH*%/A10BIZG)RGTY"X'GC!0"*`08_BV;4):=,W*'1$>D"AN&["
++MHYN6'+C&PP%&S;A:II;HDMNP,&X`2"C<T`$\BWO'G`H<X1#048]X,!(!5';5
++M9!`7Q65`NR`#)@+Q?`%PB!9N'JL.24`"=TBC8<^264I[CX?H76/"[!!S/&:.
++M%X#M7\\`373'H-'>@&373*.8%#/6+@=`;!$.`>9,UQMY*T*=9H'VFCSJY7!1
++MH?-G*<O,SZM)H[S5ACLRWLNC#>%!;>7G+:^;0H7;MI8I6M-//XE"IS@R@H7E
++MY\2C1W-"$VZCS`4,FYEC"$C)Q.UJUX'<V"C-8*&,!0P.5E--UX7@*&H.B;%0
++ML+&6EQKHA_$SSME2NEX/@\11XBG.X,`4--8G3ED+.WP7^'FY4Y7)CEWI**H9
++M44)PT)$0/,^UQZ'N/X]?+\725]GGS$W`4(.Y4IXFLYV[SPZ/.7ID;*W5,DZ7
++M6NO,9"[`%LY37W7WV2T8:.]H"AB:H&G4F3,'3ADO=?%))6R;'4M$0U]M1N4<
++M,V)O"@MH*''QS7D)N`H?*TZ#32Y1#:TPJ%X*%502"V(;4JY>2_3P_3?C7Y81
++MP,^I,KDUEX*'2RG3Z1TR=K[S57UI`^G-6<@AIA:KW**=FLHRLF,>RE9I:;CV
++M4C_OU2_?Z=CQ.71PKA'F+1J.K@V'#!L0F\Q=I##\/`0="-8S0ZE_`R/TQ<ZV
++M&3,_K3)<4$0*N!0XCG>F'CHT4`W8<[TPTZU!0+[.[FW,VK1354`PU6:N@I$Y
++M1)%S)K0='IB5-T]&)5RK!@S/9"_3E$4!NNR>F!0@9T1/(CV^`DDA/[34!0RQ
++M%#(P6<\X#56L2%-:EHOT6QP7!X.0;!#X&/ASC>:8LLPWEBS*LKKB9-)5-!59
++M;6UU`W:U?"X$VMI5J-"JJM33NIPX&OL!*OGM;9XNSKN6C=V;OA4M:TIL8[8*
++M%^J)980DA-L3E:P4-XO,2W1]3!ORDA(8FT"AA0<T0`B0@@$AD<IIX]K7)))?
++M<.[GHCS^J;>@TH(;+`IJ,.ZW<J;D-%3:3/3Q\*J;-,MSQHN:?A,B!F[43+*A
++M3T`NL]D$+W",F=1;?[324]FE`>.(-U!^J\((H=5D)E'S]CYGC\FGS[,.=D#,
++M(@6/J18(LK%TQ`B`(48]'1WW<%0RDAXIVF(Y#P3)VT/;XM<X*$(=^2K1'24&
++M55^C@6F/V]WOI]OR"@NK\CN)K%SO$([H`B`/5XM7"(&62-<CT\*JF+[2+_WG
++MKXK0J9>?VC8[E<)6]2F'B^O^_4N,>`RGOW`@G[W'RU`?#%[PDA$DU(]^8A?^
++MDQ/MS"1D8>ER,>3H3/'H7"ZZZZZ8`23.A,Z?;PB*/NR+C\>IA[S;IO[X\L(U
++M*8+6$!40?^>X!1K^-^)7O8>D0_%NKYCSH<TR'OLV.OQ`4@X0_2\83>ZS]:)(
++M#/7AQ%$8&:1AS>,M=[MMCGM6%&D&#F`2`,8!0\5[J>,"A_;L#]"=R+AE/7]C
++M8_=MCV(DO(2>>\_GL\JRX/G?045JAA`"?.G7@>0?@4#[;Q3V6/>^I+CR_SZ/
++M,QH'S_0_0J>U@>)/_$/5:-1JY7&7'UTX3B"P`2@J&]3PK1Y37045.-[&RU@C
++MRZE!QRM1S7R%'CX/#[_R-&9Z3/H$A9[*ITAY+H87N/MQ^XRSN=4GN]8J"*9T
++M4R?\IT_Z'OD_W1@',I\5%O.?>V!^_>KA%_VPS55;10&&]E*IK?KLI,/7_/>L
++M^UO:R&]I_AK"3J<UAO"':52CZ0SHW&=@[_]DDT5E69\1(RM#Y('517P>+\;_
++M27^:>[[K:'0_IRO#AY]*0D\W_]V,W?7WO7[;][\4N]4J;74]OKR<YX+,3HS5
++M-^>#I("ZF)[\D.+7[JW<1M_S+T\R07]^.GHN2N_V9W^UAH/?M6L(]G=;K8`^
++MNGF*OQV7S(P>`QF$K9K.8#_/:_`86%)Q#=W]L'PKE*TZ/Q/>W0X:[]Z!=<AP
++M[M,3V:G65?K3L9DD?V^Q*VB.OE[QI9PM'#=^<;.7QLQSN>MVAGZ3XE<T)#Y?
++MF*H8QF?OJ!!W!F41S*"'QE"1;W2$G@CFMLBQZBT?S1KV.)RT(3((Y1TN%]N\
++M[?\DP3J"1[<&#L#@)<<.!W^8K$$/A-T3CHK\\@8_A2\!>^R4@7Z<;!&Y2#\_
++MZ)!2!?*E\$B%&8XI)1DC5[YX0Q.D!U5!X>T_#9.<7W8\W8*\2(#[7OKPL/%P
++MMCZ'U_NJ)T\='S>((D_7A^ELI=U(3,[P-9[+TT'PWDE'"$\!X=_\_).ROW^?
++MC=.S-W,8.>T2CBVG&3T>S'H/R<V,(]17Y\?Z9949J%A>==M"JX)?-VOP7GM-
++M?2\':;;5N;OB<3>9^20W4&3S:/LW:AA<AG0Q/QE^%$C9;^YY5[*/TX4]:U)+
++MR.=ENOC<%J+`\(2[L7FL9$7U_UQ["R"69C;JW556R,+O.,RK&&>RVH-G6TXL
++MDV\!)L(@OU(`.H@8<80FQRK)$PE(T\YV=T-QZICXH'U:!W.%:XYY4M:_.D`5
++M6YB":A=D94"H`(#`W"$#%A,')0]-U:>&S":X@W%\BOH3^V+%,$"HQKE""HB-
++M0A!C@V((WR@$O#G3>I#[/G[2P@U&5UR47BO1?WMZ5$;Y`0%V0?IONU7!O;OQ
++M$->N4W#HL,OL_MU_I-KT.>\Z;3O>4:*LX#Q,&CM7">7Z$\6]4ZMY7I=NTYM%
++MZ)IY48P2K*WEJ^2V-(B`/`IKS(?6MQ2E'=>U[*5&>8($I,!YRH*,FI%59T3G
++MCT@9#11"[,IUXXTZJ=+@L^BO,#!,@8`B,,'D:[,(IRKJN!N(PCUN7ETFMNQ>
++MT.M,<5L4#9FB*%?$W!57FM?/^ZBA@2T-7E"Z%F;\[:8XR0<6)_+$E*H!FF8.
++M-XG<(8#8^U:S%08IU0*`6B3A$>0E<[+<ZK@N!FS4:YV48;0PM!EH/5%A[CMP
++M$&^(`B?L%`P>JG_>:@;>-`Y1E`&`8=(RYUE')]1`TYY(A:#RB0FG3$PE+)8S
++MGU.@!,R[6^+K@E&1>47'U:5Y9^H"9N$SLJ5J?%:_%JV9"PQ"#C%I;C:?MTG)
++M<_+^*U#T[J#O`$?NA$H`J5@CT><;M?J"+89:J5'/N15EU7F7>F1"I0/G+">Y
++M3+-@8%+J^"D)LAGHE1:IW4%D>L70=!S'KQZ=T/&:X3,<[QS#1;Q0:L.Y4(WR
++MIS8('-XK,_=EA`C,5^$HZS9@[X!)(&TP;5L0+F9IIL:86^R:&;<$8IY<9"=$
++M980D2B%BWIQ8MF1**D<C'(B(H>]I;;CK69[X^A0WPLO@0K_*(X]F;<'PTXE7
++M=W36:V(H)-<H3-9VJ2*8<)R3>CY_U'(8WEH]4NH>1WYRQ+BR</?UNR'F7?3D
++MMT2R'C%XN48K6]_0=R98O.?AXM=&"^,8F;?1F5KU"<RW6$%"J"HU6`[)>@4%
++M$1U.K,)S+4!]61]+Q!Q];=1<:0H&&9F^&`@320!JS8'6STZ[:=E*IZ;&BDC7
++M0Z/7-5O>MY:IK*BM/5>;X56^9&U^#42.H)OFI54HV1)`TJC7_B33GAVXJ]7O
++M;?1"OI([IPP,[MV,/M;SJ$X)F]1/8&A&510:&ID)5D![*U)9=_1^5X(."9$3
++MAKAD3Q"G(58]/R>7K9'EWM'SQL4<(VSXPXG5&YKMU-_C3ND*S57\G4:0+B9,
++MJ5UN=Z]5!0TZS\:=[S.J>H-<K0YH6-N7,(0P<'BJ!U.&WQQQ+M=8D`JJ%TC`
++MV8O[\4"(>)[0]<R`YSOCG4S:@B1`=(&#*9Q5"$!`TZ\[P<5B!VH%*9$H@-=[
++M@OO8,]4"KEF@KLC'OVU1@TC.JJ5E+%4@H:S!+"N5'H0`/I[O@]/6&@/E8.VK
++M1A8',GW)\Y&$!8FA`9,)%T=LD&Q69%/J(]AM-J[P;/M==J8K$*&@89V&ME8"
++MND7RM#$V]AD=V*V[6[S=23=Z!389@HD9G;3JULY3B57)>6K0B-@S.BC387!M
++M$S)!YJMA-!`JT[;'[Z^+^[0R-)::%H%<W@K)X=V]%EM'[L1N-/H$+/ZPK=PZ
++M90IF0PY)Q1"6)NO=H,!ANF>GHKM=7G#8VW_]:.U^;<&A9&M/6UP?W""!BY%`
++M#![EE,U-#7?W49=0ZXLS<=KZ:P-?Z3.X9G9?7W,9U.N2TLZ.@I-#Z@G7\7TV
++MWHSA0AEJ*,1,`G^Y-'RV*AEKF,/?,:P^UZ&F<"J&#J0NMG0&<\V@F>9R#G`8
++M8"2$M4:2?X:&&W[K8\*=>CQHL8G]'<]@CN1F#'"X-ZO8\(=;X+BJT=]2+C:H
++M4PL_D99">XRIU6^@S@B;6=;A"S6J!DD&;F8.@CY3\G*1J,;<LF7<C4PQ,D/U
++M<-TY*?E&G^YK2P,`]W0X8'Q->%1,\3U?C65;#&*>6O<Z/7LG$Y-:=(5M<>E!
++MFVJJJM,IDRO),/K661%M4\6#1,IBT04O9HXN64;!]\FH*H#<46AK6%-'LCF9
++MR+1L24TY4/W_$$4`;*4R6-)=-<[!3VX70!7=GKY%5A/>5U.!K<CQI^/OK%BE
++M6S8>P4`/<AR`HXY(>^X".'H%Q?;P',T8(,[(O1T\\K!%">*#TZ3L)AZ$/:3#
++MN#L_''38,`!CF+]:(8[7>H+[G4L`8'8$'2;(;A-TB>Y-?`Z0SHGO<-&]>=?1
++M.%\D]#]-"\?6"0!S,$=]"\WZJKFWW+0,KN8@H5#,P4JO+2[I8+)K.GE;OZ'7
++MW6^-;6=X]"-%4;W@V9C.#*N(]M'VAWIC7&N_#'E;W?3^T'>]-2-X=9B^4;U\
++MT'*-(H-.>>8:,Q(3.V46OUD]TQT7D-PM+!C5]1&$A5_.0$FU.WL(&AB[^J(W
++MC9_.U;3@%I%C#)%M;R_(%(ZBT`U7Z%$^2K53FF"->R$&0GTQ1HJCRC*ZNL1@
++M;F!0>FK6OK[E(YYHF^=GYS,F>9DC+2@>J2@N@/>\BL^-6Z=!H*-?OLIAZ_NK
++MLDN"E,GB8]*I2!;=UH7JBS.6AF88^:>-ZOR=_N7A"M\B,YE=CK<O+*-R,X#L
++MY9<)!(/=I<-GKYE)T>V?B(2%+;-$FTH0P@=0=)7(@D5HIYCOV$EW.MZP_:HB
++M&,OED]W=BZGUITM#NKAC8,`1SO"V/<*,?4Q+AGF/V=O(_QZ9Q08'TG;(.%W>
++M3QI"^R0+9F25\+`V81V6@)V/X&8HAATY-]YTO.V[=I1-2`X6_"5%@0JCBP0?
++M!4@"!(7#-S*G*12#Q7ISP]OR(^?&&48%!EP>;\@B($4F'_XNY(IPH2!)0!**
++`
++end
+diff --git a/gdb/testsuite/gdb.base/tab-crash.exp b/gdb/testsuite/gdb.base/tab-crash.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/tab-crash.exp
+@@ -0,0 +1,43 @@
++# This testcase is part of GDB, the GNU debugger.
++
++# Copyright 2017 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++if { ![istarget x86_64-*-* ] || ![is_lp64_target] } {
++    return
++}   
++
++standard_testfile
++
++# gcc-base-debuginfo-6.3.1-1.fc25.x86_64
++# /usr/lib/debug/lib64/libgcc_s-6.3.1-20161221.so.1.debug
++# objcopy -R .debug_loc -R .debug_ranges -R .debug_info -R .debug_abbrev -R .debug_aranges -R .debug_str -R .comment ...
++
++set debugfilebz2uu ${srcdir}/${subdir}/${testfile}.bz2.uu
++set debugfile [standard_output_file ${testfile}]
++
++if {[catch "system \"uudecode -o - ${debugfilebz2uu} | bzip2 -dc >${debugfile}\""] != 0} {
++    untested "failed uudecode or bzip2"
++    return -1
++}
++file stat ${debugfile} debugfilestat
++if {$debugfilestat(size) != 71936} {
++    untested "uudecode or bzip2 produce invalid result"
++    return -1
++}
++
++clean_restart ${debugfile}
++
++gdb_test "complete p si" "complete p si\r\np size_of_encoded_value"
diff --git a/SOURCES/gdb-rhbz1491128-batch-mode-exit-status-1of2.patch b/SOURCES/gdb-rhbz1491128-batch-mode-exit-status-1of2.patch
new file mode 100644
index 0000000..3648130
--- /dev/null
+++ b/SOURCES/gdb-rhbz1491128-batch-mode-exit-status-1of2.patch
@@ -0,0 +1,323 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Gary Benson <gbenson@redhat.com>
+Date: Wed, 29 Aug 2018 16:11:50 +0100
+Subject: gdb-rhbz1491128-batch-mode-exit-status-1of2.patch
+
+;; Fix for 'gdb in batch mode always exit with status 0' (Gary Benson)
+;; RHBZ #1491128
+
+Indicate batch mode failures by exiting with nonzero status
+
+This commit causes GDB in batch mode to exit with nonzero status
+if the last command to be executed fails.
+
+gdb/ChangeLog:
+
+	PR gdb/13000:
+	* gdb/main.c (captured_main_1): Exit with nonzero status
+	in batch mode if the last command to be executed failed.
+	* NEWS: Mention the above.
+
+gdb/testsuite/ChangeLog:
+
+	PR gdb/13000:
+	* gdb.base/batch-exit-status.exp: New file.
+	* gdb.base/batch-exit-status.good-commands: Likewise.
+	* gdb.base/batch-exit-status.bad-commands: Likewise.
+
+diff --git a/gdb/ChangeLog b/gdb/ChangeLog
+--- a/gdb/ChangeLog
++++ b/gdb/ChangeLog
+@@ -1,3 +1,10 @@
++2018-08-16  Gary Benson <gbenson@redhat.com>
++
++	PR gdb/13000:
++	* gdb/main.c (captured_main_1): Exit with nonzero status
++	in batch mode if the last command to be executed failed.
++	* NEWS: Mention the above.
++
+ 2018-08-03  Sergio Durigan Junior  <sergiodj@redhat.com>
+ 
+ 	* ser-tcp.c (net_open): Fix thinko when deciding whether to
+diff --git a/gdb/NEWS b/gdb/NEWS
+--- a/gdb/NEWS
++++ b/gdb/NEWS
+@@ -7,6 +7,9 @@
+   can be passed using the '[ADDRESS]:PORT' notation, or the regular
+   'ADDRESS:PORT' method.
+ 
++* GDB in batch mode now exits with status 1 if the last command to be
++  executed failed.
++
+ *** Changes in GDB 8.2
+ 
+ * The 'set disassembler-options' command now supports specifying options
+diff --git a/gdb/main.c b/gdb/main.c
+--- a/gdb/main.c
++++ b/gdb/main.c
+@@ -518,6 +518,7 @@ captured_main_1 (struct captured_main_args *context, int &python_script)
+   int i;
+   int save_auto_load;
+   struct objfile *objfile;
++  int ret = 1;
+ 
+ #ifdef HAVE_SBRK
+   /* Set this before constructing scoped_command_stats.  */
+@@ -1051,7 +1052,7 @@ captured_main_1 (struct captured_main_args *context, int &python_script)
+      processed; it sets global parameters, which are independent of
+      what file you are debugging or what directory you are in.  */
+   if (system_gdbinit && !inhibit_gdbinit)
+-    catch_command_errors (source_script, system_gdbinit, 0);
++    ret = catch_command_errors (source_script, system_gdbinit, 0);
+ 
+   /* Read and execute $HOME/.gdbinit file, if it exists.  This is done
+      *before* all the command line arguments are processed; it sets
+@@ -1059,7 +1060,7 @@ captured_main_1 (struct captured_main_args *context, int &python_script)
+      debugging or what directory you are in.  */
+ 
+   if (home_gdbinit && !inhibit_gdbinit && !inhibit_home_gdbinit)
+-    catch_command_errors (source_script, home_gdbinit, 0);
++    ret = catch_command_errors (source_script, home_gdbinit, 0);
+ 
+   /* Process '-ix' and '-iex' options early.  */
+   for (i = 0; i < cmdarg_vec.size (); i++)
+@@ -1069,12 +1070,12 @@ captured_main_1 (struct captured_main_args *context, int &python_script)
+       switch (cmdarg_p.type)
+ 	{
+ 	case CMDARG_INIT_FILE:
+-	  catch_command_errors (source_script, cmdarg_p.string,
+-				!batch_flag);
++	  ret = catch_command_errors (source_script, cmdarg_p.string,
++				      !batch_flag);
+ 	  break;
+ 	case CMDARG_INIT_COMMAND:
+-	  catch_command_errors (execute_command, cmdarg_p.string,
+-				!batch_flag);
++	  ret = catch_command_errors (execute_command, cmdarg_p.string,
++				      !batch_flag);
+ 	  break;
+ 	}
+     }
+@@ -1082,11 +1083,11 @@ captured_main_1 (struct captured_main_args *context, int &python_script)
+   /* Now perform all the actions indicated by the arguments.  */
+   if (cdarg != NULL)
+     {
+-      catch_command_errors (cd_command, cdarg, 0);
++      ret = catch_command_errors (cd_command, cdarg, 0);
+     }
+ 
+   for (i = 0; i < dirarg.size (); i++)
+-    catch_command_errors (directory_switch, dirarg[i], 0);
++    ret = catch_command_errors (directory_switch, dirarg[i], 0);
+ 
+   /* Skip auto-loading section-specified scripts until we've sourced
+      local_gdbinit (which is often used to augment the source search
+@@ -1115,19 +1116,19 @@ captured_main_1 (struct captured_main_args *context, int &python_script)
+          catch_command_errors returns non-zero on success!
+ 	 Do not load EXECARG as a symbol file if it has been already processed
+ 	 as a core file.  */
+-      if (catch_command_errors (func, execarg, !batch_flag)
+-	  && core_bfd == NULL)
+-	catch_command_errors (symbol_file_add_main_adapter, symarg,
+-			      !batch_flag);
++      ret = catch_command_errors (func, execarg, !batch_flag);
++      if (ret != 0 && core_bfd == NULL)
++	ret = catch_command_errors (symbol_file_add_main_adapter,
++				    symarg, !batch_flag);
+     }
+   else
+     {
+       if (execarg != NULL)
+-	catch_command_errors (exec_file_attach, execarg,
+-			      !batch_flag);
++	ret = catch_command_errors (exec_file_attach, execarg,
++				    !batch_flag);
+       if (symarg != NULL)
+-	catch_command_errors (symbol_file_add_main_adapter, symarg,
+-			      !batch_flag);
++	ret = catch_command_errors (symbol_file_add_main_adapter,
++				    symarg, !batch_flag);
+     }
+ 
+   if (corearg && pidarg)
+@@ -1135,9 +1136,14 @@ captured_main_1 (struct captured_main_args *context, int &python_script)
+ 	     "a core file at the same time."));
+ 
+   if (corearg != NULL)
+-    catch_command_errors (core_file_command, corearg, !batch_flag);
++    {
++      ret = catch_command_errors (core_file_command, corearg,
++				  !batch_flag);
++    }
+   else if (pidarg != NULL)
+-    catch_command_errors (attach_command, pidarg, !batch_flag);
++    {
++      ret = catch_command_errors (attach_command, pidarg, !batch_flag);
++    }
+   else if (pid_or_core_arg)
+     {
+       /* The user specified 'gdb program pid' or gdb program core'.
+@@ -1146,17 +1152,23 @@ captured_main_1 (struct captured_main_args *context, int &python_script)
+ 
+       if (isdigit (pid_or_core_arg[0]))
+ 	{
+-	  if (catch_command_errors (attach_command, pid_or_core_arg,
+-				    !batch_flag) == 0
++	  ret = catch_command_errors (attach_command, pid_or_core_arg,
++				      !batch_flag);
++	  if (ret == 0
+ 	      /* attach_command could succeed partially and core_file_command
+ 		 would try to kill it.  */
+ 	      && !have_inferiors ())
+-	    catch_command_errors (core_file_command, pid_or_core_arg,
+-				  !batch_flag);
++	    ret = catch_command_errors (core_file_command,
++					pid_or_core_arg,
++					!batch_flag);
++	}
++      else
++	{
++	  /* Can't be a pid, better be a corefile.  */
++	  ret = catch_command_errors (core_file_command,
++				      pid_or_core_arg,
++				      !batch_flag);
+ 	}
+-      else /* Can't be a pid, better be a corefile.  */
+-	catch_command_errors (core_file_command, pid_or_core_arg,
+-			      !batch_flag);
+     }
+ 
+   if (ttyarg != NULL)
+@@ -1180,7 +1192,7 @@ captured_main_1 (struct captured_main_args *context, int &python_script)
+ 	{
+ 	  auto_load_local_gdbinit_loaded = 1;
+ 
+-	  catch_command_errors (source_script, local_gdbinit, 0);
++	  ret = catch_command_errors (source_script, local_gdbinit, 0);
+ 	}
+     }
+ 
+@@ -1200,12 +1212,12 @@ captured_main_1 (struct captured_main_args *context, int &python_script)
+       switch (cmdarg_p.type)
+ 	{
+ 	case CMDARG_FILE:
+-	  catch_command_errors (source_script, cmdarg_p.string,
+-				!batch_flag);
++	  ret = catch_command_errors (source_script, cmdarg_p.string,
++				      !batch_flag);
+ 	  break;
+ 	case CMDARG_COMMAND:
+-	  catch_command_errors (execute_command, cmdarg_p.string,
+-				!batch_flag);
++	  ret = catch_command_errors (execute_command, cmdarg_p.string,
++				      !batch_flag);
+ 	  break;
+ 	}
+     }
+@@ -1217,8 +1229,11 @@ captured_main_1 (struct captured_main_args *context, int &python_script)
+ 
+   if (batch_flag)
+     {
++      int error_status = EXIT_FAILURE;
++      int *exit_arg = ret == 0 ? &error_status : NULL;
++
+       /* We have hit the end of the batch file.  */
+-      quit_force (NULL, 0);
++      quit_force (exit_arg, 0);
+     }
+ }
+ 
+diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
+--- a/gdb/testsuite/ChangeLog
++++ b/gdb/testsuite/ChangeLog
+@@ -1,3 +1,10 @@
++2018-08-16  Gary Benson <gbenson@redhat.com>
++
++	PR gdb/13000:
++	* gdb.base/batch-exit-status.exp: New file.
++	* gdb.base/batch-exit-status.good-commands: Likewise.
++	* gdb.base/batch-exit-status.bad-commands: Likewise.
++
+ 2018-07-11  Sergio Durigan Junior  <sergiodj@redhat.com>
+ 	    Jan Kratochvil  <jan.kratochvil@redhat.com>
+ 	    Paul Fertser  <fercerpav@gmail.com>
+diff --git a/gdb/testsuite/gdb.base/batch-exit-status.bad-commands b/gdb/testsuite/gdb.base/batch-exit-status.bad-commands
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/batch-exit-status.bad-commands
+@@ -0,0 +1 @@
++bork
+diff --git a/gdb/testsuite/gdb.base/batch-exit-status.exp b/gdb/testsuite/gdb.base/batch-exit-status.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/batch-exit-status.exp
+@@ -0,0 +1,63 @@
++# Copyright (C) 2018 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++# Check that "gdb -batch" exits with appropriate status.
++
++standard_testfile
++
++set good_commands "$srcdir/$subdir/batch-exit-status.good-commands"
++set bad_commands "$srcdir/$subdir/batch-exit-status.bad-commands"
++
++proc _test_exit_status {expect_status cmdline_opts} {
++    global gdb_spawn_id
++
++    gdb_exit
++    if {[gdb_spawn_with_cmdline_opts $cmdline_opts] != 0} {
++	fail "spawn"
++	return
++    }
++
++    set result [wait -i $gdb_spawn_id]
++    verbose $result
++    gdb_assert { [lindex $result 2] == 0 }
++    set actual_status [lindex $result 3]
++    gdb_assert { $actual_status == $expect_status }
++}
++
++proc test_exit_status {expect_status cmdline_opts} {
++    with_test_prefix $cmdline_opts {
++	_test_exit_status $expect_status $cmdline_opts
++    }
++}
++
++# gdb -batch with nothing to do should exit 0.
++test_exit_status 0 "-batch"
++
++# Bad command-line options should cause exit 1.
++test_exit_status 1 "-batch -jslkflsdjlkfjlksdjf"
++
++# gdb -batch with good commands should exit 0.
++test_exit_status 0 "-batch -ex \"info source\""
++test_exit_status 0 "-batch -x $good_commands"
++
++# gdb -batch with bad commands should exit 1.
++test_exit_status 1 "-batch -ex \"set not-a-thing 4\""
++test_exit_status 1 "-batch -x $bad_commands"
++
++# Success or failure of the last thing determines the exit code.
++test_exit_status 0 "-batch -ex \"set not-a-thing 4\" -x $good_commands"
++test_exit_status 0 "-batch -x $bad_commands -ex \"info source\""
++test_exit_status 1 "-batch -x $good_commands -x $bad_commands"
++test_exit_status 1 "-batch -x $good_commands -ex \"set not-a-thing 4\""
+diff --git a/gdb/testsuite/gdb.base/batch-exit-status.good-commands b/gdb/testsuite/gdb.base/batch-exit-status.good-commands
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/batch-exit-status.good-commands
+@@ -0,0 +1 @@
++info mem
diff --git a/SOURCES/gdb-rhbz1491128-batch-mode-exit-status-2of2.patch b/SOURCES/gdb-rhbz1491128-batch-mode-exit-status-2of2.patch
new file mode 100644
index 0000000..b1ba523
--- /dev/null
+++ b/SOURCES/gdb-rhbz1491128-batch-mode-exit-status-2of2.patch
@@ -0,0 +1,65 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Gary Benson <gbenson@redhat.com>
+Date: Mon, 3 Sep 2018 16:14:55 +0100
+Subject: gdb-rhbz1491128-batch-mode-exit-status-2of2.patch
+
+;; Fix for 'gdb in batch mode always exit with status 0' (Gary Benson)
+;; RHBZ #1491128
+
+Fix batch exit status test failure on Fedora 28
+
+This commit adds calls to remote_close and clear_gdb_spawn_id to
+gdb.base/batch-exit-status.exp, fixing failures reported by buildbot
+on Fedora 28 where gdb_spawn_id not being reset by the previous test
+caused default_gdb_spawn to return without spawning.
+
+This commit also changes the test to use detect GDB's exit using
+gdb_test_multiple expecting 'eof', rather than using 'wait -i' alone.
+This means the testcase won't hang forever on failure as fixed in
+gdb.base/quit.exp by commit 15763a09d4ae ("Fix 'gdb.base/quit.exp
+hangs forever' if the test fails").
+
+gdb/testsuite/ChangeLog:
+
+	* gdb.base/batch-exit-status.exp: Use gdb_test_multiple and expect
+	'eof' before 'wait -i'.  Use remote_close and clear_gdb_spawn_id.
+
+diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
+--- a/gdb/testsuite/ChangeLog
++++ b/gdb/testsuite/ChangeLog
+@@ -1,3 +1,8 @@
++2018-09-04  Gary Benson <gbenson@redhat.com>
++
++	* gdb.base/batch-exit-status.exp: Use gdb_test_multiple and expect
++	'eof' before 'wait -i'.  Use remote_close and clear_gdb_spawn_id.
++
+ 2018-08-16  Gary Benson <gbenson@redhat.com>
+ 
+ 	PR gdb/13000:
+diff --git a/gdb/testsuite/gdb.base/batch-exit-status.exp b/gdb/testsuite/gdb.base/batch-exit-status.exp
+--- a/gdb/testsuite/gdb.base/batch-exit-status.exp
++++ b/gdb/testsuite/gdb.base/batch-exit-status.exp
+@@ -29,11 +29,18 @@ proc _test_exit_status {expect_status cmdline_opts} {
+ 	return
+     }
+ 
+-    set result [wait -i $gdb_spawn_id]
+-    verbose $result
+-    gdb_assert { [lindex $result 2] == 0 }
+-    set actual_status [lindex $result 3]
+-    gdb_assert { $actual_status == $expect_status }
++    gdb_test_multiple "" "run til exit" {
++	eof {
++	    set result [wait -i $gdb_spawn_id]
++	    verbose $result
++
++	    gdb_assert { [lindex $result 2] == 0 }
++	    gdb_assert { [lindex $result 3] == $expect_status }
++
++	    remote_close host
++	    clear_gdb_spawn_id
++	}
++    }
+ }
+ 
+ proc test_exit_status {expect_status cmdline_opts} {
diff --git a/SOURCES/gdb-rhbz1553104-s390x-arch12-test.patch b/SOURCES/gdb-rhbz1553104-s390x-arch12-test.patch
new file mode 100644
index 0000000..2cb15e5
--- /dev/null
+++ b/SOURCES/gdb-rhbz1553104-s390x-arch12-test.patch
@@ -0,0 +1,81 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Jan Kratochvil <jan.kratochvil@redhat.com>
+Date: Fri, 23 Mar 2018 20:42:44 +0100
+Subject: gdb-rhbz1553104-s390x-arch12-test.patch
+
+;; [s390x] Backport arch12 instructions decoding (RH BZ 1553104).
+;; =fedoratest
+
+diff --git a/gdb/testsuite/gdb.arch/s390x-arch12.S b/gdb/testsuite/gdb.arch/s390x-arch12.S
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.arch/s390x-arch12.S
+@@ -0,0 +1,4 @@
++.text
++.globl load_guarded
++load_guarded:
++.byte 0xeb,0xbf,0xf0,0x58,0x00,0x24,0xe3,0xf0,0xff,0x50,0xff,0x71,0xb9,0x04,0x00,0xbf,0xe3,0x20,0xb0,0xa0,0x00,0x24,0xe3,0x10,0xb0,0xa0,0x00,0x04,0xe3,0x10,0x10,0x00,0x00,0x4c,0xe3,0x10,0xb0,0xa8,0x00,0x24,0xe3,0x10,0xb0,0xa8,0x00,0x04,0xb9,0x04,0x00,0x21,0xe3,0x40,0xb1,0x20,0x00,0x04,0xeb,0xbf,0xb1,0x08,0x00,0x04,0x07,0xf4
+diff --git a/gdb/testsuite/gdb.arch/s390x-arch12.exp b/gdb/testsuite/gdb.arch/s390x-arch12.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.arch/s390x-arch12.exp
+@@ -0,0 +1,34 @@
++# Copyright 2018 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++#if { ![istarget s390x-*linux-*] || ![is_lp64_target] } {
++#    verbose "Skipping s390x-prologue-skip.exp"
++#    return
++#}
++
++set testfile "s390x-arch12"
++set uufile "${srcdir}/${subdir}/${testfile}.o.uu"
++set ofile "${srcdir}/${subdir}/${testfile}.o"
++
++if { [catch "system \"uudecode -o ${ofile} ${uufile}\"" ] != 0 } {
++    untested "failed uudecode"
++    return -1
++}
++
++gdb_exit
++gdb_start
++gdb_load $ofile
++
++gdb_test "disas load_guarded" " <\\+28>:\tlgg\t%r1,0\\(%r1\\)\r\n\[^\r\n\]* <\\+34>:\tstg\t%r1,168\\(%r11\\)\r\n.*"
+diff --git a/gdb/testsuite/gdb.arch/s390x-arch12.o.uu b/gdb/testsuite/gdb.arch/s390x-arch12.o.uu
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.arch/s390x-arch12.o.uu
+@@ -0,0 +1,20 @@
++begin 644 s390x-arch12.o
++M?T5,1@("`0`````````````!`!8````!````````````````````````````
++M``$X``````!```````!```<`!.N_\%@`)./P_U#_<;D$`+_C(+"@`"3C$+"@
++M``3C$!```$SC$+"H`"3C$+"H``2Y!``AXT"Q(``$Z[^Q"``$!_0`+G-Y;71A
++M8@`N<W1R=&%B`"YS:'-T<G1A8@`N=&5X=``N9&%T80`N8G-S````````````
++M`````````````````````````````````P```0``````````````````````
++M`````P```@```````````````````````````P```P``````````````````
++M```````!$````0``````````````````````;&]A9%]G=6%R9&5D````````
++M````````````````````````````````````````````````````````````
++M`````````````````````````!L````!``````````8`````````````````
++M``!``````````$`````````````````````$```````````````A`````0``
++M```````#````````````````````@```````````````````````````````
++M!```````````````)P````@``````````P```````````````````(``````
++M``````````````````````````0``````````````!$````#````````````
++M``````````````````"``````````"P````````````````````!````````
++M```````!`````@``````````````````````````````L`````````!X````
++M!@````0`````````"``````````8````"0````,`````````````````````
++H`````````2@`````````#@````````````````````$`````````````
++`
++end
diff --git a/SOURCES/gdb-rhbz1560010-fix-assertion-symbol-language-dict-language-1of5.patch b/SOURCES/gdb-rhbz1560010-fix-assertion-symbol-language-dict-language-1of5.patch
new file mode 100644
index 0000000..4a14a36
--- /dev/null
+++ b/SOURCES/gdb-rhbz1560010-fix-assertion-symbol-language-dict-language-1of5.patch
@@ -0,0 +1,746 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Sergio Durigan Junior <sergiodj@redhat.com>
+Date: Fri, 11 Jan 2019 10:52:17 -0500
+Subject: 
+ gdb-rhbz1560010-fix-assertion-symbol-language-dict-language-1of5.patch
+
+;; Fix 'Assertion `SYMBOL_LANGUAGE (sym) == DICT_LANGUAGE (dict)->la_language' failed.'
+;; Keith Seitz, RHBZ#1560010.
+
+gdb/23712: Introduce multidictionary's
+
+gdb/23712 is a new manifestation of the now-infamous (at least to me)
+symtab/23010 assertion failure (DICT_LANGUAGE == SYMBOL_LANGAUGE).
+
+An example of the problem (using test case from symtab/23010):
+
+Reading symbols from /home/rdiez/rdiez/arduino/JtagDue/BuildOutput/JtagDue-obj-release/firmware.elf...done.
+(gdb) p SysTick_Handler
+dwarf2read.c:9715: internal-error: void dw2_add_symbol_to_list(symbol*, pending**): Assertion `(*listhead) == NULL || (SYMBOL_LANGUAGE ((*listhead)->symbol[0]) == SYMBOL_LANGUAGE (symbol))' failed.
+A problem internal to GDB has been detected,
+further debugging may prove unreliable.
+Quit this debugging session? (y or n)
+
+This assertion was added specifically to catch this condition (of adding
+symbols of different languages to a single pending list).
+
+The problems we're now seeing on systems utilizing DWARF debugging seem to
+be caused by the use of LTO, which adds a CU with an artificial DIE of
+language C99 which references DIEs in other CUs of language C++.
+
+Thus, we create a dictionary containing symbols of C99 but end up
+stuffing C++ symbols into it, and the dw2_add_symbol_to_list triggers.
+
+The approach taken here to fix this is to introduce multi-language
+dictionaries to "replace" the standard, single-language dictionaries
+used today.
+
+Note to reviewers: This patch introduces some temporary functions to
+aide with review.  This and other artifacts (such as "See dictionary.h"
+which appear incorrect) will all be valid at the end of the series.
+
+This first patch introduces the new multidictionary and its API (which
+is, by design, identical to the old dictionary interface).  It also
+mutates dict_create_hashed and dict_create_linear so that they take
+a std::vector instead of the usual struct pending linked list.  This will
+be needed later on.
+
+This patch does /not/ actually enable multidictionary's.  That is left
+for a subsequent patch in the series.
+
+I've done exhaustive performance testing with this approach, and I've
+attempted to minimize the overhead for the (overwhelmingly) most common
+one-language scenario.
+
+On average, a -g3 -O0 GDB (the one we developers use) will see
+approximately a 4% slowdown when initially reading symbols. [I've
+tested only GDB and firefox with -readnow.]  When using -O2, this
+difference shrinks to ~0.5%.  Since a number of runs with these
+patches actually run /faster/ than unpatched GDB, I conclude that
+these tests have at least a 0.5% error margin.
+
+On our own gdb.perf test suite, again, results appear to be pretty
+negligible.  Differences to unpatched GDB range from -7.8% (yes,
+patched version is again faster than unpatched) to 27%.  All tests
+lying outside "negligible," such as the 27% slowdown, involve a total
+run time of 0.0007 (or less) with smaller numbers of CUs/DSOs (usually 10
+or 100).  In all cases, the follow-up tests with more CUs/DSOs is never
+more than 3% difference to the baseline, unpatched GDB.
+
+In my opinion, these results are satisfactory.
+
+gdb/ChangeLog:
+
+	PR gdb/23712
+	PR symtab/23010
+	* dictionary.c: Include unordered_map.
+	(pending_to_vector): New function.
+	(dict_create_hashed_1, dict_create_linear_1, dict_add_pending_1):
+	Rewrite the non-"_1" functions to take vector instead
+	of linked list.
+	(dict_create_hashed, dict_create_linear, dict_add_pending): Use the
+	"new" _1 versions of the same name.
+	(multidictionary): Define.
+	(std::hash<enum language): New definition.
+	(collate_pending_symbols_by_language, mdict_create_hashed)
+	(mdict_create_hashed_expandable, mdict_create_linear)
+	(mdict_create_linear_expandable, mdict_free)
+	(find_language_dictionary, create_new_language_dictionary)
+	(mdict_add_symbol, mdict_add_pending, mdict_iterator_first)
+	(mdict_iterator_next, mdict_iter_match_first, mdict_iter_match_next)
+	(mdict_size, mdict_empty): New functions.
+	* dictionary.h (mdict_iterator): Define.
+
+diff --git a/gdb/dictionary.c b/gdb/dictionary.c
+--- a/gdb/dictionary.c
++++ b/gdb/dictionary.c
+@@ -27,6 +27,7 @@
+ #include "buildsym.h"
+ #include "dictionary.h"
+ #include "safe-ctype.h"
++#include <unordered_map>
+ 
+ /* This file implements dictionaries, which are tables that associate
+    symbols to names.  They are represented by an opaque type 'struct
+@@ -341,53 +342,66 @@ static void insert_symbol_hashed (struct dictionary *dict,
+ 
+ static void expand_hashtable (struct dictionary *dict);
+ 
++/* A function to convert a linked list into a vector.  */
++
++static std::vector<symbol *>
++pending_to_vector (const struct pending *symbol_list)
++{
++  std::vector<symbol *> symlist;
++
++  for (const struct pending *list_counter = symbol_list;
++       list_counter != nullptr; list_counter = list_counter->next)
++    {
++      for (int i = list_counter->nsyms - 1; i >= 0; --i)
++	symlist.push_back (list_counter->symbol[i]);
++    }
++
++  return symlist;
++}
++
+ /* The creation functions.  */
+ 
+-/* See dictionary.h.  */
++/* A function to transition dict_create_hashed to new API.  */
+ 
+-struct dictionary *
+-dict_create_hashed (struct obstack *obstack,
+-		    enum language language,
+-		    const struct pending *symbol_list)
++static struct dictionary *
++dict_create_hashed_1 (struct obstack *obstack,
++		      enum language language,
++		      const std::vector<symbol *> &symbol_list)
+ {
+-  struct dictionary *retval;
+-  int nsyms = 0, nbuckets, i;
+-  struct symbol **buckets;
+-  const struct pending *list_counter;
+-
+-  retval = XOBNEW (obstack, struct dictionary);
++  /* Allocate the dictionary.  */
++  struct dictionary *retval = XOBNEW (obstack, struct dictionary);
+   DICT_VECTOR (retval) = &dict_hashed_vector;
+   DICT_LANGUAGE (retval) = language_def (language);
+ 
+-  /* Calculate the number of symbols, and allocate space for them.  */
+-  for (list_counter = symbol_list;
+-       list_counter != NULL;
+-       list_counter = list_counter->next)
+-    {
+-      nsyms += list_counter->nsyms;
+-    }
+-  nbuckets = DICT_HASHTABLE_SIZE (nsyms);
++  /* Allocate space for symbols.  */
++  int nsyms = symbol_list.size ();
++  int nbuckets = DICT_HASHTABLE_SIZE (nsyms);
+   DICT_HASHED_NBUCKETS (retval) = nbuckets;
+-  buckets = XOBNEWVEC (obstack, struct symbol *, nbuckets);
++  struct symbol **buckets = XOBNEWVEC (obstack, struct symbol *, nbuckets);
+   memset (buckets, 0, nbuckets * sizeof (struct symbol *));
+   DICT_HASHED_BUCKETS (retval) = buckets;
+ 
+   /* Now fill the buckets.  */
+-  for (list_counter = symbol_list;
+-       list_counter != NULL;
+-       list_counter = list_counter->next)
+-    {
+-      for (i = list_counter->nsyms - 1; i >= 0; --i)
+-	{
+-	  insert_symbol_hashed (retval, list_counter->symbol[i]);
+-	}
+-    }
++  for (const auto &sym : symbol_list)
++    insert_symbol_hashed (retval, sym);
+ 
+   return retval;
+ }
+ 
+ /* See dictionary.h.  */
+ 
++struct dictionary *
++dict_create_hashed (struct obstack *obstack,
++		    enum language language,
++		    const struct pending *symbol_list)
++{
++  std::vector<symbol *> symlist = pending_to_vector (symbol_list);
++
++  return dict_create_hashed_1 (obstack, language, symlist);
++}
++
++/* See dictionary.h.  */
++
+ extern struct dictionary *
+ dict_create_hashed_expandable (enum language language)
+ {
+@@ -403,52 +417,45 @@ dict_create_hashed_expandable (enum language language)
+   return retval;
+ }
+ 
+-/* See dictionary.h.  */
++/* A function to transition dict_create_linear to new API.  */
+ 
+-struct dictionary *
+-dict_create_linear (struct obstack *obstack,
+-		    enum language language,
+-		    const struct pending *symbol_list)
++static struct dictionary *
++dict_create_linear_1 (struct obstack *obstack,
++		      enum language language,
++		      const std::vector<symbol *> &symbol_list)
+ {
+-  struct dictionary *retval;
+-  int nsyms = 0, i, j;
+-  struct symbol **syms;
+-  const struct pending *list_counter;
+-
+-  retval = XOBNEW (obstack, struct dictionary);
++  struct dictionary *retval = XOBNEW (obstack, struct dictionary);
+   DICT_VECTOR (retval) = &dict_linear_vector;
+   DICT_LANGUAGE (retval) = language_def (language);
+ 
+-  /* Calculate the number of symbols, and allocate space for them.  */
+-  for (list_counter = symbol_list;
+-       list_counter != NULL;
+-       list_counter = list_counter->next)
+-    {
+-      nsyms += list_counter->nsyms;
+-    }
++  /* Allocate space for symbols.  */
++  int nsyms = symbol_list.size ();
+   DICT_LINEAR_NSYMS (retval) = nsyms;
+-  syms = XOBNEWVEC (obstack, struct symbol *, nsyms );
++  struct symbol **syms = XOBNEWVEC (obstack, struct symbol *, nsyms);
+   DICT_LINEAR_SYMS (retval) = syms;
+ 
+-  /* Now fill in the symbols.  Start filling in from the back, so as
+-     to preserve the original order of the symbols.  */
+-  for (list_counter = symbol_list, j = nsyms - 1;
+-       list_counter != NULL;
+-       list_counter = list_counter->next)
+-    {
+-      for (i = list_counter->nsyms - 1;
+-	   i >= 0;
+-	   --i, --j)
+-	{
+-	  syms[j] = list_counter->symbol[i];
+-	}
+-    }
++  /* Now fill in the symbols.  */
++  int idx = nsyms - 1;
++  for (const auto &sym : symbol_list)
++    syms[idx--] = sym;
+ 
+   return retval;
+ }
+ 
+ /* See dictionary.h.  */
+ 
++struct dictionary *
++dict_create_linear (struct obstack *obstack,
++		    enum language language,
++		    const struct pending *symbol_list)
++{
++  std::vector<symbol *> symlist = pending_to_vector (symbol_list);
++
++  return dict_create_linear_1 (obstack, language, symlist);
++}
++
++/* See dictionary.h.  */
++
+ struct dictionary *
+ dict_create_linear_expandable (enum language language)
+ {
+@@ -483,20 +490,26 @@ dict_add_symbol (struct dictionary *dict, struct symbol *sym)
+   (DICT_VECTOR (dict))->add_symbol (dict, sym);
+ }
+ 
++/* A function to transition dict_add_pending to new API.  */
++
++static void
++dict_add_pending_1 (struct dictionary *dict,
++		    const std::vector<symbol *> &symbol_list)
++{
++  /* Preserve ordering by reversing the list.  */
++  for (auto sym = symbol_list.rbegin (); sym != symbol_list.rend (); ++sym)
++    dict_add_symbol (dict, *sym);
++}
++
+ /* Utility to add a list of symbols to a dictionary.
+    DICT must be an expandable dictionary.  */
+ 
+ void
+ dict_add_pending (struct dictionary *dict, const struct pending *symbol_list)
+ {
+-  const struct pending *list;
+-  int i;
++  std::vector<symbol *> symlist = pending_to_vector (symbol_list);
+ 
+-  for (list = symbol_list; list != NULL; list = list->next)
+-    {
+-      for (i = 0; i < list->nsyms; ++i)
+-	dict_add_symbol (dict, list->symbol[i]);
+-    }
++  dict_add_pending_1 (dict, symlist);
+ }
+ 
+ /* Initialize ITERATOR to point at the first symbol in DICT, and
+@@ -929,3 +942,408 @@ add_symbol_linear_expandable (struct dictionary *dict,
+ 
+   DICT_LINEAR_SYM (dict, nsyms - 1) = sym;
+ }
++
++/* Multi-language dictionary support.  */
++
++/* The structure describing a multi-language dictionary.  */
++
++struct multidictionary
++{
++  /* An array of dictionaries, one per language.  All dictionaries
++     must be of the same type.  This should be free'd for expandable
++     dictionary types.  */
++  struct dictionary **dictionaries;
++
++  /* The number of language dictionaries currently allocated.
++     Only used for expandable dictionaries.  */
++  unsigned short n_allocated_dictionaries;
++};
++
++/* A hasher for enum language.  Injecting this into std is a convenience
++   when using unordered_map with C++11.  */
++
++namespace std
++{
++  template<> struct hash<enum language>
++  {
++    typedef enum language argument_type;
++    typedef std::size_t result_type;
++
++    result_type operator() (const argument_type &l) const noexcept
++    {
++      return static_cast<result_type> (l);
++    }
++  };
++} /* namespace std */
++
++/* A helper function to collate symbols on the pending list by language.  */
++
++static std::unordered_map<enum language, std::vector<symbol *>>
++collate_pending_symbols_by_language (const struct pending *symbol_list)
++{
++  std::unordered_map<enum language, std::vector<symbol *>> nsyms;
++
++  for (const struct pending *list_counter = symbol_list;
++       list_counter != nullptr; list_counter = list_counter->next)
++    {
++      for (int i = list_counter->nsyms - 1; i >= 0; --i)
++	{
++	  enum language language = SYMBOL_LANGUAGE (list_counter->symbol[i]);
++	  nsyms[language].push_back (list_counter->symbol[i]);
++	}
++    }
++
++  return nsyms;
++}
++
++/* See dictionary.h.  */
++
++struct multidictionary *
++mdict_create_hashed (struct obstack *obstack,
++		     const struct pending *symbol_list)
++{
++  struct multidictionary *retval
++    = XOBNEW (obstack, struct multidictionary);
++  std::unordered_map<enum language, std::vector<symbol *>> nsyms
++    = collate_pending_symbols_by_language (symbol_list);
++
++  /* Loop over all languages and create/populate dictionaries.  */
++  retval->dictionaries
++    = XOBNEWVEC (obstack, struct dictionary *, nsyms.size ());
++  retval->n_allocated_dictionaries = nsyms.size ();
++
++  int idx = 0;
++  for (const auto &pair : nsyms)
++    {
++      enum language language = pair.first;
++      std::vector<symbol *> symlist = pair.second;
++
++      retval->dictionaries[idx++]
++	= dict_create_hashed_1 (obstack, language, symlist);
++    }
++
++  return retval;
++}
++
++/* See dictionary.h.  */
++
++struct multidictionary *
++mdict_create_hashed_expandable (enum language language)
++{
++  struct multidictionary *retval = XNEW (struct multidictionary);
++
++  /* We have no symbol list to populate, but we create an empty
++     dictionary of the requested language to populate later.  */
++  retval->n_allocated_dictionaries = 1;
++  retval->dictionaries = XNEW (struct dictionary *);
++  retval->dictionaries[0] = dict_create_hashed_expandable (language);
++
++  return retval;
++}
++
++/* See dictionary.h.  */
++
++struct multidictionary *
++mdict_create_linear (struct obstack *obstack,
++		     const struct pending *symbol_list)
++{
++  struct multidictionary *retval
++    = XOBNEW (obstack, struct multidictionary);
++  std::unordered_map<enum language, std::vector<symbol *>> nsyms
++    = collate_pending_symbols_by_language (symbol_list);
++
++  /* Loop over all languages and create/populate dictionaries.  */
++  retval->dictionaries
++    = XOBNEWVEC (obstack, struct dictionary *, nsyms.size ());
++  retval->n_allocated_dictionaries = nsyms.size ();
++
++  int idx = 0;
++  for (const auto &pair : nsyms)
++    {
++      enum language language = pair.first;
++      std::vector<symbol *> symlist = pair.second;
++
++      retval->dictionaries[idx++]
++	= dict_create_linear_1 (obstack, language, symlist);
++    }
++
++  return retval;
++}
++
++/* See dictionary.h.  */
++
++struct multidictionary *
++mdict_create_linear_expandable (enum language language)
++{
++  struct multidictionary *retval = XNEW (struct multidictionary);
++
++  /* We have no symbol list to populate, but we create an empty
++     dictionary to populate later.  */
++  retval->n_allocated_dictionaries = 1;
++  retval->dictionaries = XNEW (struct dictionary *);
++  retval->dictionaries[0] = dict_create_linear_expandable (language);
++
++  return retval;
++}
++
++/* See dictionary.h.  */
++
++void
++mdict_free (struct multidictionary *mdict)
++{
++  /* Grab the type of dictionary being used.  */
++  enum dict_type type = mdict->dictionaries[0]->vector->type;
++
++  /* Loop over all dictionaries and free them.  */
++  for (unsigned short idx = 0; idx < mdict->n_allocated_dictionaries; ++idx)
++    dict_free (mdict->dictionaries[idx]);
++
++  /* Free the dictionary list, if needed.  */
++  switch (type)
++    {
++    case DICT_HASHED:
++    case DICT_LINEAR:
++      /* Memory was allocated on an obstack when created.  */
++      break;
++
++    case DICT_HASHED_EXPANDABLE:
++    case DICT_LINEAR_EXPANDABLE:
++      xfree (mdict->dictionaries);
++      break;
++    }
++}
++
++/* Helper function to find the dictionary associated with LANGUAGE
++   or NULL if there is no dictionary of that language.  */
++
++static struct dictionary *
++find_language_dictionary (const struct multidictionary *mdict,
++			  enum language language)
++{
++  for (unsigned short idx = 0; idx < mdict->n_allocated_dictionaries; ++idx)
++    {
++      if (DICT_LANGUAGE (mdict->dictionaries[idx])->la_language == language)
++	return mdict->dictionaries[idx];
++    }
++
++  return nullptr;
++}
++
++/* Create a new language dictionary for LANGUAGE and add it to the
++   multidictionary MDICT's list of dictionaries.  If MDICT is not
++   based on expandable dictionaries, this function throws an
++   internal error.  */
++
++static struct dictionary *
++create_new_language_dictionary (struct multidictionary *mdict,
++				enum language language)
++{
++  struct dictionary *retval = nullptr;
++
++  /* We use the first dictionary entry to decide what create function
++     to call.  Not optimal but sufficient.  */
++  gdb_assert (mdict->dictionaries[0] != nullptr);
++  switch (mdict->dictionaries[0]->vector->type)
++    {
++    case DICT_HASHED:
++    case DICT_LINEAR:
++      internal_error (__FILE__, __LINE__,
++		      _("create_new_language_dictionary: attempted to expand "
++			"non-expandable multidictionary"));
++
++    case DICT_HASHED_EXPANDABLE:
++      retval = dict_create_hashed_expandable (language);
++      break;
++
++    case DICT_LINEAR_EXPANDABLE:
++      retval = dict_create_linear_expandable (language);
++      break;
++    }
++
++  /* Grow the dictionary vector and save the new dictionary.  */
++  mdict->dictionaries
++    = (struct dictionary **) xrealloc (mdict->dictionaries,
++				       (++mdict->n_allocated_dictionaries
++					* sizeof (struct dictionary *)));
++  mdict->dictionaries[mdict->n_allocated_dictionaries - 1] = retval;
++
++  return retval;
++}
++
++/* See dictionary.h.  */
++
++void
++mdict_add_symbol (struct multidictionary *mdict, struct symbol *sym)
++{
++  struct dictionary *dict
++    = find_language_dictionary (mdict, SYMBOL_LANGUAGE (sym));
++
++  if (dict == nullptr)
++    {
++      /* SYM is of a new language that we haven't previously seen.
++	 Create a new dictionary for it.  */
++      dict = create_new_language_dictionary (mdict, SYMBOL_LANGUAGE (sym));
++    }
++
++  dict_add_symbol (dict, sym);
++}
++
++/* See dictionary.h.  */
++
++void
++mdict_add_pending (struct multidictionary *mdict,
++		   const struct pending *symbol_list)
++{
++  std::unordered_map<enum language, std::vector<symbol *>> nsyms
++    = collate_pending_symbols_by_language (symbol_list);
++
++  for (const auto &pair : nsyms)
++    {
++      enum language language = pair.first;
++      std::vector<symbol *> symlist = pair.second;
++      struct dictionary *dict = find_language_dictionary (mdict, language);
++
++      if (dict == nullptr)
++	{
++	  /* The language was not previously seen.  Create a new dictionary
++	     for it.  */
++	  dict = create_new_language_dictionary (mdict, language);
++	}
++
++      dict_add_pending_1 (dict, symlist);
++    }
++}
++
++/* See dictionary.h.  */
++
++struct symbol *
++mdict_iterator_first (const multidictionary *mdict,
++		      struct mdict_iterator *miterator)
++{
++  miterator->mdict = mdict;
++  miterator->current_idx = 0;
++
++  for (unsigned short idx = miterator->current_idx;
++       idx < mdict->n_allocated_dictionaries; ++idx)
++    {
++      struct symbol *result
++	= dict_iterator_first (mdict->dictionaries[idx], &miterator->iterator);
++
++      if (result != nullptr)
++	{
++	  miterator->current_idx = idx;
++	  return result;
++	}
++    }
++
++  return nullptr;
++}
++
++/* See dictionary.h.  */
++
++struct symbol *
++mdict_iterator_next (struct mdict_iterator *miterator)
++{
++  struct symbol *result = dict_iterator_next (&miterator->iterator);
++
++  if (result != nullptr)
++    return result;
++
++  /* The current dictionary had no matches -- move to the next
++     dictionary, if any.  */
++  for (unsigned short idx = ++miterator->current_idx;
++       idx < miterator->mdict->n_allocated_dictionaries; ++idx)
++    {
++      result
++	= dict_iterator_first (miterator->mdict->dictionaries[idx],
++			       &miterator->iterator);
++      if (result != nullptr)
++	{
++	  miterator->current_idx = idx;
++	  return result;
++	}
++    }
++
++  return nullptr;
++}
++
++/* See dictionary.h.  */
++
++struct symbol *
++mdict_iter_match_first (const struct multidictionary *mdict,
++			const lookup_name_info &name,
++			struct mdict_iterator *miterator)
++{
++  miterator->mdict = mdict;
++  miterator->current_idx = 0;
++
++  for (unsigned short idx = miterator->current_idx;
++       idx < mdict->n_allocated_dictionaries; ++idx)
++    {
++      struct symbol *result
++	= dict_iter_match_first (mdict->dictionaries[idx], name,
++				 &miterator->iterator);
++
++      if (result != nullptr)
++	return result;
++    }
++
++  return nullptr;
++}
++
++/* See dictionary.h.  */
++
++struct symbol *
++mdict_iter_match_next (const lookup_name_info &name,
++		       struct mdict_iterator *miterator)
++{
++  /* Search the current dictionary.  */
++  struct symbol *result = dict_iter_match_next (name, &miterator->iterator);
++
++  if (result != nullptr)
++    return result;
++
++  /* The current dictionary had no matches -- move to the next
++     dictionary, if any.  */
++  for (unsigned short idx = ++miterator->current_idx;
++       idx < miterator->mdict->n_allocated_dictionaries; ++idx)
++    {
++      result
++	= dict_iter_match_first (miterator->mdict->dictionaries[idx],
++				 name, &miterator->iterator);
++      if (result != nullptr)
++	{
++	  miterator->current_idx = idx;
++	  return result;
++	}
++    }
++
++  return nullptr;
++}
++
++/* See dictionary.h.  */
++
++int
++mdict_size (const struct multidictionary *mdict)
++{
++  int size = 0;
++
++  for (unsigned short idx = 0; idx < mdict->n_allocated_dictionaries; ++idx)
++    size += dict_size (mdict->dictionaries[idx]);
++
++  return size;
++}
++
++/* See dictionary.h.  */
++
++bool
++mdict_empty (const struct multidictionary *mdict)
++{
++  for (unsigned short idx = 0; idx < mdict->n_allocated_dictionaries; ++idx)
++    {
++      if (!dict_empty (mdict->dictionaries[idx]))
++	return false;
++    }
++
++  return true;
++}
+diff --git a/gdb/dictionary.h b/gdb/dictionary.h
+--- a/gdb/dictionary.h
++++ b/gdb/dictionary.h
+@@ -113,6 +113,21 @@ struct dict_iterator
+   struct symbol *current;
+ };
+ 
++/* The multi-language dictionary iterator.  Like dict_iterator above,
++   these contents should be considered private.  */
++
++struct mdict_iterator
++{
++  /* The multidictionary with whcih this iterator is associated.  */
++  const struct multidictionary *mdict;
++
++  /* The iterator used to iterate through individual dictionaries.  */
++  struct dict_iterator iterator;
++
++  /* The current index of the dictionary being iterated over.  */
++  unsigned short current_idx;
++};
++
+ /* Initialize ITERATOR to point at the first symbol in DICT, and
+    return that first symbol, or NULL if DICT is empty.  */
+ 
diff --git a/SOURCES/gdb-rhbz1560010-fix-assertion-symbol-language-dict-language-2of5.patch b/SOURCES/gdb-rhbz1560010-fix-assertion-symbol-language-dict-language-2of5.patch
new file mode 100644
index 0000000..f86ce0b
--- /dev/null
+++ b/SOURCES/gdb-rhbz1560010-fix-assertion-symbol-language-dict-language-2of5.patch
@@ -0,0 +1,644 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Sergio Durigan Junior <sergiodj@redhat.com>
+Date: Fri, 11 Jan 2019 11:25:11 -0500
+Subject: 
+ gdb-rhbz1560010-fix-assertion-symbol-language-dict-language-2of5.patch
+
+;; Fix 'Assertion `SYMBOL_LANGUAGE (sym) == DICT_LANGUAGE (dict)->la_language' failed.'
+;; Keith Seitz, RHBZ#1560010.
+
+gdb/23712: Use new multidictionary API
+
+This patch builds on the previous by enabling the `new' multidictionary
+API.  A lot of the hunks are simply textual replacements of "dict_"
+with "mdict_" and similar transformations.
+
+A word of warning, even with the use of multidictionaries, the code
+still does not satisfactorily fix the reported problems with gdb/23712
+(or gdb/23010). We still have additional changes to make before that
+happens.
+
+gdb/ChangeLog:
+
+	PR gdb/23712
+	PR symtab/23010
+	* dictionary.h (struct dictionary): Replace declaration with
+	multidictionary.
+	(dict_create_hashed, dict_create_hashed_expandable)
+	(dict_create_linear, dict_create_linear_expandable)
+	(dict_free, dict_add_symbol, dict_add_pending, dict_empty)
+	(dict_iterator_first, dict_iterator_next, dict_iter_match_first)
+	(dict_iter_match_next, dict_size): Rename to "mdict_" versions
+	taking multidictionary argument.
+	[ALL_DICT_SYMBOLS]: Update for multidictionary.
+	* block.h (struct block) <dict>: Change to multidictionary
+	and rename `multidict'.
+	* block.c, buildsym.c, jit.c, mdebugread.c, objfiles.c,
+	symmisc.c: Update all dictionary references to multidictionary.
+
+diff --git a/gdb/block.c b/gdb/block.c
+--- a/gdb/block.c
++++ b/gdb/block.c
+@@ -387,9 +387,9 @@ block_global_block (const struct block *block)
+    zero/NULL.  This is useful for creating "dummy" blocks that don't
+    correspond to actual source files.
+ 
+-   Warning: it sets the block's BLOCK_DICT to NULL, which isn't a
++   Warning: it sets the block's BLOCK_MULTIDICT to NULL, which isn't a
+    valid value.  If you really don't want the block to have a
+-   dictionary, then you should subsequently set its BLOCK_DICT to
++   dictionary, then you should subsequently set its BLOCK_MULTIDICT to
+    dict_create_linear (obstack, NULL).  */
+ 
+ struct block *
+@@ -544,10 +544,11 @@ block_iterator_step (struct block_iterator *iterator, int first)
+ 
+ 	  block = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cust),
+ 				     iterator->which);
+-	  sym = dict_iterator_first (BLOCK_DICT (block), &iterator->dict_iter);
++	  sym = mdict_iterator_first (BLOCK_MULTIDICT (block),
++				      &iterator->mdict_iter);
+ 	}
+       else
+-	sym = dict_iterator_next (&iterator->dict_iter);
++	sym = mdict_iterator_next (&iterator->mdict_iter);
+ 
+       if (sym != NULL)
+ 	return sym;
+@@ -569,7 +570,7 @@ block_iterator_first (const struct block *block,
+   initialize_block_iterator (block, iterator);
+ 
+   if (iterator->which == FIRST_LOCAL_BLOCK)
+-    return dict_iterator_first (block->dict, &iterator->dict_iter);
++    return mdict_iterator_first (block->multidict, &iterator->mdict_iter);
+ 
+   return block_iterator_step (iterator, 1);
+ }
+@@ -580,7 +581,7 @@ struct symbol *
+ block_iterator_next (struct block_iterator *iterator)
+ {
+   if (iterator->which == FIRST_LOCAL_BLOCK)
+-    return dict_iterator_next (&iterator->dict_iter);
++    return mdict_iterator_next (&iterator->mdict_iter);
+ 
+   return block_iterator_step (iterator, 0);
+ }
+@@ -612,11 +613,11 @@ block_iter_match_step (struct block_iterator *iterator,
+ 
+ 	  block = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cust),
+ 				     iterator->which);
+-	  sym = dict_iter_match_first (BLOCK_DICT (block), name,
+-				       &iterator->dict_iter);
++	  sym = mdict_iter_match_first (BLOCK_MULTIDICT (block), name,
++					&iterator->mdict_iter);
+ 	}
+       else
+-	sym = dict_iter_match_next (name, &iterator->dict_iter);
++	sym = mdict_iter_match_next (name, &iterator->mdict_iter);
+ 
+       if (sym != NULL)
+ 	return sym;
+@@ -639,7 +640,8 @@ block_iter_match_first (const struct block *block,
+   initialize_block_iterator (block, iterator);
+ 
+   if (iterator->which == FIRST_LOCAL_BLOCK)
+-    return dict_iter_match_first (block->dict, name, &iterator->dict_iter);
++    return mdict_iter_match_first (block->multidict, name,
++				   &iterator->mdict_iter);
+ 
+   return block_iter_match_step (iterator, name, 1);
+ }
+@@ -651,7 +653,7 @@ block_iter_match_next (const lookup_name_info &name,
+ 		       struct block_iterator *iterator)
+ {
+   if (iterator->which == FIRST_LOCAL_BLOCK)
+-    return dict_iter_match_next (name, &iterator->dict_iter);
++    return mdict_iter_match_next (name, &iterator->mdict_iter);
+ 
+   return block_iter_match_step (iterator, name, 0);
+ }
+@@ -731,7 +733,7 @@ block_lookup_symbol_primary (const struct block *block, const char *name,
+ 			     const domain_enum domain)
+ {
+   struct symbol *sym, *other;
+-  struct dict_iterator dict_iter;
++  struct mdict_iterator mdict_iter;
+ 
+   lookup_name_info lookup_name (name, symbol_name_match_type::FULL);
+ 
+@@ -740,9 +742,10 @@ block_lookup_symbol_primary (const struct block *block, const char *name,
+ 	      || BLOCK_SUPERBLOCK (BLOCK_SUPERBLOCK (block)) == NULL);
+ 
+   other = NULL;
+-  for (sym = dict_iter_match_first (block->dict, lookup_name, &dict_iter);
++  for (sym
++	 = mdict_iter_match_first (block->multidict, lookup_name, &mdict_iter);
+        sym != NULL;
+-       sym = dict_iter_match_next (lookup_name, &dict_iter))
++       sym = mdict_iter_match_next (lookup_name, &mdict_iter))
+     {
+       if (SYMBOL_DOMAIN (sym) == domain)
+ 	return sym;
+diff --git a/gdb/block.h b/gdb/block.h
+--- a/gdb/block.h
++++ b/gdb/block.h
+@@ -111,7 +111,7 @@ struct block
+ 
+   /* This is used to store the symbols in the block.  */
+ 
+-  struct dictionary *dict;
++  struct multidictionary *multidict;
+ 
+   /* Contains information about namespace-related info relevant to this block:
+      using directives and the current namespace scope.  */
+@@ -143,7 +143,7 @@ struct global_block
+ #define BLOCK_END(bl)		(bl)->endaddr
+ #define BLOCK_FUNCTION(bl)	(bl)->function
+ #define BLOCK_SUPERBLOCK(bl)	(bl)->superblock
+-#define BLOCK_DICT(bl)		(bl)->dict
++#define BLOCK_MULTIDICT(bl)	(bl)->multidict
+ #define BLOCK_NAMESPACE(bl)	(bl)->namespace_info
+ 
+ /* Accessor for ranges field within block BL.  */
+@@ -298,9 +298,9 @@ struct block_iterator
+ 
+   enum block_enum which;
+ 
+-  /* The underlying dictionary iterator.  */
++  /* The underlying multidictionary iterator.  */
+ 
+-  struct dict_iterator dict_iter;
++  struct mdict_iterator mdict_iter;
+ };
+ 
+ /* Initialize ITERATOR to point at the first symbol in BLOCK, and
+diff --git a/gdb/buildsym.c b/gdb/buildsym.c
+--- a/gdb/buildsym.c
++++ b/gdb/buildsym.c
+@@ -349,23 +349,21 @@ finish_block_internal (struct symbol *symbol,
+ 
+   if (symbol)
+     {
+-      BLOCK_DICT (block)
+-	= dict_create_linear (&objfile->objfile_obstack,
+-			      buildsym_compunit->language, *listhead);
++      BLOCK_MULTIDICT (block)
++	= mdict_create_linear (&objfile->objfile_obstack, *listhead);
+     }
+   else
+     {
+       if (expandable)
+ 	{
+-	  BLOCK_DICT (block)
+-	    = dict_create_hashed_expandable (buildsym_compunit->language);
+-	  dict_add_pending (BLOCK_DICT (block), *listhead);
++	  BLOCK_MULTIDICT (block)
++	    = mdict_create_hashed_expandable (buildsym_compunit->language);
++	  mdict_add_pending (BLOCK_MULTIDICT (block), *listhead);
+ 	}
+       else
+ 	{
+-	  BLOCK_DICT (block) =
+-	    dict_create_hashed (&objfile->objfile_obstack,
+-				buildsym_compunit->language, *listhead);
++	  BLOCK_MULTIDICT (block) =
++	    mdict_create_hashed (&objfile->objfile_obstack, *listhead);
+ 	}
+     }
+ 
+@@ -377,7 +375,7 @@ finish_block_internal (struct symbol *symbol,
+   if (symbol)
+     {
+       struct type *ftype = SYMBOL_TYPE (symbol);
+-      struct dict_iterator iter;
++      struct mdict_iterator miter;
+       SYMBOL_BLOCK_VALUE (symbol) = block;
+       BLOCK_FUNCTION (block) = symbol;
+ 
+@@ -391,7 +389,7 @@ finish_block_internal (struct symbol *symbol,
+ 
+ 	  /* Here we want to directly access the dictionary, because
+ 	     we haven't fully initialized the block yet.  */
+-	  ALL_DICT_SYMBOLS (BLOCK_DICT (block), iter, sym)
++	  ALL_DICT_SYMBOLS (BLOCK_MULTIDICT (block), miter, sym)
+ 	    {
+ 	      if (SYMBOL_IS_ARGUMENT (sym))
+ 		nparams++;
+@@ -405,7 +403,7 @@ finish_block_internal (struct symbol *symbol,
+ 	      iparams = 0;
+ 	      /* Here we want to directly access the dictionary, because
+ 		 we haven't fully initialized the block yet.  */
+-	      ALL_DICT_SYMBOLS (BLOCK_DICT (block), iter, sym)
++	      ALL_DICT_SYMBOLS (BLOCK_MULTIDICT (block), miter, sym)
+ 		{
+ 		  if (iparams == nparams)
+ 		    break;
+@@ -1448,7 +1446,7 @@ end_symtab_with_blockvector (struct block *static_block,
+       {
+ 	struct block *block = BLOCKVECTOR_BLOCK (blockvector, block_i);
+ 	struct symbol *sym;
+-	struct dict_iterator iter;
++	struct mdict_iterator miter;
+ 
+ 	/* Inlined functions may have symbols not in the global or
+ 	   static symbol lists.  */
+@@ -1459,7 +1457,7 @@ end_symtab_with_blockvector (struct block *static_block,
+ 	/* Note that we only want to fix up symbols from the local
+ 	   blocks, not blocks coming from included symtabs.  That is why
+ 	   we use ALL_DICT_SYMBOLS here and not ALL_BLOCK_SYMBOLS.  */
+-	ALL_DICT_SYMBOLS (BLOCK_DICT (block), iter, sym)
++	ALL_DICT_SYMBOLS (BLOCK_MULTIDICT (block), miter, sym)
+ 	  if (symbol_symtab (sym) == NULL)
+ 	    symbol_set_symtab (sym, symtab);
+       }
+@@ -1598,7 +1596,7 @@ augment_type_symtab (void)
+ 	 to the primary symtab.  */
+       set_missing_symtab (file_symbols, cust);
+ 
+-      dict_add_pending (BLOCK_DICT (block), file_symbols);
++      mdict_add_pending (BLOCK_MULTIDICT (block), file_symbols);
+     }
+ 
+   if (global_symbols != NULL)
+@@ -1609,7 +1607,7 @@ augment_type_symtab (void)
+ 	 to the primary symtab.  */
+       set_missing_symtab (global_symbols, cust);
+ 
+-      dict_add_pending (BLOCK_DICT (block), global_symbols);
++      mdict_add_pending (BLOCK_MULTIDICT (block), global_symbols);
+     }
+ 
+   reset_symtab_globals ();
+diff --git a/gdb/dictionary.h b/gdb/dictionary.h
+--- a/gdb/dictionary.h
++++ b/gdb/dictionary.h
+@@ -25,10 +25,10 @@
+ 
+ #include "symfile.h"
+ 
+-/* An opaque type for dictionaries; only dictionary.c should know
+-   about its innards.  */
++/* An opaque type for multi-language dictionaries; only dictionary.c should
++   know about its innards.  */
+ 
+-struct dictionary;
++struct multidictionary;
+ 
+ /* Other types needed for declarations.  */
+ 
+@@ -38,65 +38,64 @@ struct pending;
+ struct language_defn;
+ 
+ /* The creation functions for various implementations of
+-   dictionaries.  */
++   multi-language dictionaries.  */
+ 
+-/* Create a dictionary of symbols of language LANGUAGE implemented via
++/* Create a multi-language dictionary of symbols implemented via
+    a fixed-size hashtable.  All memory it uses is allocated on
+    OBSTACK; the environment is initialized from SYMBOL_LIST.  */
+ 
+-extern struct dictionary *dict_create_hashed (struct obstack *obstack,
+-					      enum language language,
+-					      const struct pending
+-					      *symbol_list);
++extern struct multidictionary *
++  mdict_create_hashed (struct obstack *obstack,
++		       const struct pending *symbol_list);
+ 
+-/* Create a dictionary of symbols of language LANGUAGE, implemented
+-   via a hashtable that grows as necessary.  The dictionary is
+-   initially empty; to add symbols to it, call dict_add_symbol().
+-   Call dict_free() when you're done with it.  */
++/* Create a multi-language dictionary of symbols, implemented
++   via a hashtable that grows as necessary.  The initial dictionary of
++   LANGUAGE is empty; to add symbols to it, call mdict_add_symbol().
++   Call mdict_free() when you're done with it.  */
+ 
+-extern struct dictionary *
+-  dict_create_hashed_expandable (enum language language);
++extern struct multidictionary *
++  mdict_create_hashed_expandable (enum language language);
+ 
+-/* Create a dictionary of symbols of language LANGUAGE, implemented
++/* Create a multi-language dictionary of symbols, implemented
+    via a fixed-size array.  All memory it uses is allocated on
+    OBSTACK; the environment is initialized from the SYMBOL_LIST.  The
+    symbols are ordered in the same order that they're found in
+    SYMBOL_LIST.  */
+ 
+-extern struct dictionary *dict_create_linear (struct obstack *obstack,
+-					      enum language language,
+-					      const struct pending
+-					      *symbol_list);
++extern struct multidictionary *
++  mdict_create_linear (struct obstack *obstack,
++		       const struct pending *symbol_list);
+ 
+-/* Create a dictionary of symbols of language LANGUAGE, implemented
+-   via an array that grows as necessary.  The dictionary is initially
+-   empty; to add symbols to it, call dict_add_symbol().  Call
+-   dict_free() when you're done with it.  */
++/* Create a multi-language dictionary of symbols, implemented
++   via an array that grows as necessary.  The multidictionary initially
++   contains a single empty dictionary of LANGUAGE; to add symbols to it,
++   call mdict_add_symbol().  Call mdict_free() when you're done with it.  */
+ 
+-extern struct dictionary *
+-  dict_create_linear_expandable (enum language language);
++extern struct multidictionary *
++  mdict_create_linear_expandable (enum language language);
+ 
+-/* The functions providing the interface to dictionaries.  Note that
+-   the most common parts of the interface, namely symbol lookup, are
+-   only provided via iterator functions.  */
++/* The functions providing the interface to multi-language dictionaries.
++   Note that the most common parts of the interface, namely symbol lookup,
++   are only provided via iterator functions.  */
+ 
+-/* Free the memory used by a dictionary that's not on an obstack.  (If
++/* Free the memory used by a multidictionary that's not on an obstack.  (If
+    any.)  */
+ 
+-extern void dict_free (struct dictionary *dict);
++extern void mdict_free (struct multidictionary *mdict);
+ 
+-/* Add a symbol to an expandable dictionary.  */
++/* Add a symbol to an expandable multidictionary.  */
+ 
+-extern void dict_add_symbol (struct dictionary *dict, struct symbol *sym);
++extern void mdict_add_symbol (struct multidictionary *mdict,
++			      struct symbol *sym);
+ 
+-/* Utility to add a list of symbols to a dictionary.  */
++/* Utility to add a list of symbols to a multidictionary.  */
+ 
+-extern void dict_add_pending (struct dictionary *dict,
+-			      const struct pending *symbol_list);
++extern void mdict_add_pending (struct multidictionary *mdict,
++			       const struct pending *symbol_list);
+ 
+-/* Is the dictionary empty?  */
++/* Is the multidictionary empty?  */
+ 
+-extern int dict_empty (struct dictionary *dict);
++extern int mdict_empty (struct multidictionary *mdict);
+ 
+ /* A type containing data that is used when iterating over all symbols
+    in a dictionary.  Don't ever look at its innards; this type would
+@@ -128,44 +127,46 @@ struct mdict_iterator
+   unsigned short current_idx;
+ };
+ 
+-/* Initialize ITERATOR to point at the first symbol in DICT, and
+-   return that first symbol, or NULL if DICT is empty.  */
++/* Initialize ITERATOR to point at the first symbol in MDICT, and
++   return that first symbol, or NULL if MDICT is empty.  */
+ 
+-extern struct symbol *dict_iterator_first (const struct dictionary *dict,
+-					   struct dict_iterator *iterator);
++extern struct symbol *
++  mdict_iterator_first (const struct multidictionary *mdict,
++			struct mdict_iterator *miterator);
+ 
+-/* Advance ITERATOR, and return the next symbol, or NULL if there are
++/* Advance MITERATOR, and return the next symbol, or NULL if there are
+    no more symbols.  Don't call this if you've previously received
+-   NULL from dict_iterator_first or dict_iterator_next on this
++   NULL from mdict_iterator_first or mdict_iterator_next on this
+    iteration.  */
+ 
+-extern struct symbol *dict_iterator_next (struct dict_iterator *iterator);
++extern struct symbol *mdict_iterator_next (struct mdict_iterator *miterator);
+ 
+-/* Initialize ITERATOR to point at the first symbol in DICT whose
++/* Initialize MITERATOR to point at the first symbol in MDICT whose
+    SYMBOL_SEARCH_NAME is NAME, as tested using COMPARE (which must use
+    the same conventions as strcmp_iw and be compatible with any
+    dictionary hashing function), and return that first symbol, or NULL
+    if there are no such symbols.  */
+ 
+-extern struct symbol *dict_iter_match_first (const struct dictionary *dict,
+-					     const lookup_name_info &name,
+-					     struct dict_iterator *iterator);
++extern struct symbol *
++  mdict_iter_match_first (const struct multidictionary *mdict,
++			  const lookup_name_info &name,
++			  struct mdict_iterator *miterator);
+ 
+-/* Advance ITERATOR to point at the next symbol in DICT whose
++/* Advance MITERATOR to point at the next symbol in MDICT whose
+    SYMBOL_SEARCH_NAME is NAME, as tested using COMPARE (see
+    dict_iter_match_first), or NULL if there are no more such symbols.
+    Don't call this if you've previously received NULL from 
+-   dict_iterator_match_first or dict_iterator_match_next on this
+-   iteration.  And don't call it unless ITERATOR was created by a
+-   previous call to dict_iter_match_first with the same NAME and COMPARE.  */
++   mdict_iterator_match_first or mdict_iterator_match_next on this
++   iteration.  And don't call it unless MITERATOR was created by a
++   previous call to mdict_iter_match_first with the same NAME and COMPARE.  */
+ 
+-extern struct symbol *dict_iter_match_next (const lookup_name_info &name,
+-					    struct dict_iterator *iterator);
++extern struct symbol *mdict_iter_match_next (const lookup_name_info &name,
++					     struct mdict_iterator *miterator);
+ 
+-/* Return some notion of the size of the dictionary: the number of
++/* Return some notion of the size of the multidictionary: the number of
+    symbols if we have that, the number of hash buckets otherwise.  */
+ 
+-extern int dict_size (const struct dictionary *dict);
++extern int mdict_size (const struct multidictionary *mdict);
+ 
+ /* Macro to loop through all symbols in a dictionary DICT, in no
+    particular order.  ITER is a struct dict_iterator (NOTE: __not__ a
+@@ -175,8 +176,8 @@ extern int dict_size (const struct dictionary *dict);
+    early by a break if you desire.  */
+ 
+ #define ALL_DICT_SYMBOLS(dict, iter, sym)			\
+-	for ((sym) = dict_iterator_first ((dict), &(iter));	\
++	for ((sym) = mdict_iterator_first ((dict), &(iter));	\
+ 	     (sym);						\
+-	     (sym) = dict_iterator_next (&(iter)))
++	     (sym) = mdict_iterator_next (&(iter)))
+ 
+ #endif /* DICTIONARY_H */
+diff --git a/gdb/jit.c b/gdb/jit.c
+--- a/gdb/jit.c
++++ b/gdb/jit.c
+@@ -651,14 +651,12 @@ finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile)
+   size_t blockvector_size;
+   CORE_ADDR begin, end;
+   struct blockvector *bv;
+-  enum language language;
+ 
+   actual_nblocks = FIRST_LOCAL_BLOCK + stab->nblocks;
+ 
+   cust = allocate_compunit_symtab (objfile, stab->file_name);
+   allocate_symtab (cust, stab->file_name);
+   add_compunit_symtab_to_objfile (cust);
+-  language = compunit_language (cust);
+ 
+   /* JIT compilers compile in memory.  */
+   COMPUNIT_DIRNAME (cust) = NULL;
+@@ -702,8 +700,8 @@ finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile)
+ 					   TARGET_CHAR_BIT,
+ 					   "void");
+ 
+-      BLOCK_DICT (new_block) = dict_create_linear (&objfile->objfile_obstack,
+-						   language, NULL);
++      BLOCK_MULTIDICT (new_block)
++	= mdict_create_linear (&objfile->objfile_obstack, NULL);
+       /* The address range.  */
+       BLOCK_START (new_block) = (CORE_ADDR) gdb_block_iter->begin;
+       BLOCK_END (new_block) = (CORE_ADDR) gdb_block_iter->end;
+@@ -740,8 +738,8 @@ finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile)
+       new_block = (i == GLOBAL_BLOCK
+ 		   ? allocate_global_block (&objfile->objfile_obstack)
+ 		   : allocate_block (&objfile->objfile_obstack));
+-      BLOCK_DICT (new_block) = dict_create_linear (&objfile->objfile_obstack,
+-						   language, NULL);
++      BLOCK_MULTIDICT (new_block)
++	= mdict_create_linear (&objfile->objfile_obstack, NULL);
+       BLOCK_SUPERBLOCK (new_block) = block_iter;
+       block_iter = new_block;
+ 
+diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c
+--- a/gdb/mdebugread.c
++++ b/gdb/mdebugread.c
+@@ -4534,7 +4534,7 @@ static void
+ add_symbol (struct symbol *s, struct symtab *symtab, struct block *b)
+ {
+   symbol_set_symtab (s, symtab);
+-  dict_add_symbol (BLOCK_DICT (b), s);
++  mdict_add_symbol (BLOCK_MULTIDICT (b), s);
+ }
+ 
+ /* Add a new block B to a symtab S.  */
+@@ -4762,7 +4762,7 @@ new_bvect (int nblocks)
+ }
+ 
+ /* Allocate and zero a new block of language LANGUAGE, and set its
+-   BLOCK_DICT.  If function is non-zero, assume the block is
++   BLOCK_MULTIDICT.  If function is non-zero, assume the block is
+    associated to a function, and make sure that the symbols are stored
+    linearly; otherwise, store them hashed.  */
+ 
+@@ -4775,9 +4775,9 @@ new_block (enum block_type type, enum language language)
+   struct block *retval = XCNEW (struct block);
+ 
+   if (type == FUNCTION_BLOCK)
+-    BLOCK_DICT (retval) = dict_create_linear_expandable (language);
++    BLOCK_MULTIDICT (retval) = mdict_create_linear_expandable (language);
+   else
+-    BLOCK_DICT (retval) = dict_create_hashed_expandable (language);
++    BLOCK_MULTIDICT (retval) = mdict_create_hashed_expandable (language);
+ 
+   return retval;
+ }
+diff --git a/gdb/objfiles.c b/gdb/objfiles.c
+--- a/gdb/objfiles.c
++++ b/gdb/objfiles.c
+@@ -813,40 +813,40 @@ objfile_relocate1 (struct objfile *objfile,
+     }
+ 
+     ALL_OBJFILE_COMPUNITS (objfile, cust)
+-    {
+-      const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (cust);
+-      int block_line_section = COMPUNIT_BLOCK_LINE_SECTION (cust);
+-
+-      if (BLOCKVECTOR_MAP (bv))
+-	addrmap_relocate (BLOCKVECTOR_MAP (bv),
+-			  ANOFFSET (delta, block_line_section));
+-
+-      for (i = 0; i < BLOCKVECTOR_NBLOCKS (bv); ++i)
+-	{
+-	  struct block *b;
+-	  struct symbol *sym;
+-	  struct dict_iterator iter;
+-
+-	  b = BLOCKVECTOR_BLOCK (bv, i);
+-	  BLOCK_START (b) += ANOFFSET (delta, block_line_section);
+-	  BLOCK_END (b) += ANOFFSET (delta, block_line_section);
+-
+-	  if (BLOCK_RANGES (b) != nullptr)
+-	    for (int j = 0; j < BLOCK_NRANGES (b); j++)
++      {
++	const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (cust);
++	int block_line_section = COMPUNIT_BLOCK_LINE_SECTION (cust);
++
++	if (BLOCKVECTOR_MAP (bv))
++	  addrmap_relocate (BLOCKVECTOR_MAP (bv),
++			    ANOFFSET (delta, block_line_section));
++
++	for (int i = 0; i < BLOCKVECTOR_NBLOCKS (bv); ++i)
++	  {
++	    struct block *b;
++	    struct symbol *sym;
++	    struct mdict_iterator miter;
++
++	    b = BLOCKVECTOR_BLOCK (bv, i);
++	    BLOCK_START (b) += ANOFFSET (delta, block_line_section);
++	    BLOCK_END (b) += ANOFFSET (delta, block_line_section);
++
++	    if (BLOCK_RANGES (b) != nullptr)
++	      for (int j = 0; j < BLOCK_NRANGES (b); j++)
++		{
++		  BLOCK_RANGE_START (b, j)
++		    += ANOFFSET (delta, block_line_section);
++		  BLOCK_RANGE_END (b, j) += ANOFFSET (delta, block_line_section);
++		}
++
++	    /* We only want to iterate over the local symbols, not any
++	       symbols in included symtabs.  */
++	    ALL_DICT_SYMBOLS (BLOCK_MULTIDICT (b), miter, sym)
+ 	      {
+-		BLOCK_RANGE_START (b, j)
+-		  += ANOFFSET (delta, block_line_section);
+-		BLOCK_RANGE_END (b, j) += ANOFFSET (delta, block_line_section);
++		relocate_one_symbol (sym, objfile, delta);
+ 	      }
+-
+-	  /* We only want to iterate over the local symbols, not any
+-	     symbols in included symtabs.  */
+-	  ALL_DICT_SYMBOLS (BLOCK_DICT (b), iter, sym)
+-	    {
+-	      relocate_one_symbol (sym, objfile, delta);
+-	    }
+-	}
+-    }
++	  }
++      }
+   }
+ 
+   /* Relocate isolated symbols.  */
+diff --git a/gdb/symmisc.c b/gdb/symmisc.c
+--- a/gdb/symmisc.c
++++ b/gdb/symmisc.c
+@@ -275,7 +275,7 @@ dump_symtab_1 (struct symtab *symtab, struct ui_file *outfile)
+   struct objfile *objfile = SYMTAB_OBJFILE (symtab);
+   struct gdbarch *gdbarch = get_objfile_arch (objfile);
+   int i;
+-  struct dict_iterator iter;
++  struct mdict_iterator miter;
+   int len;
+   struct linetable *l;
+   const struct blockvector *bv;
+@@ -331,7 +331,7 @@ dump_symtab_1 (struct symtab *symtab, struct ui_file *outfile)
+ 	     even if we're using a hashtable, but nothing else but this message
+ 	     wants it.  */
+ 	  fprintf_filtered (outfile, ", %d syms/buckets in ",
+-			    dict_size (BLOCK_DICT (b)));
++			    mdict_size (BLOCK_MULTIDICT (b)));
+ 	  fputs_filtered (paddress (gdbarch, BLOCK_START (b)), outfile);
+ 	  fprintf_filtered (outfile, "..");
+ 	  fputs_filtered (paddress (gdbarch, BLOCK_END (b)), outfile);
+@@ -349,7 +349,7 @@ dump_symtab_1 (struct symtab *symtab, struct ui_file *outfile)
+ 	  /* Now print each symbol in this block (in no particular order, if
+ 	     we're using a hashtable).  Note that we only want this
+ 	     block, not any blocks from included symtabs.  */
+-	  ALL_DICT_SYMBOLS (BLOCK_DICT (b), iter, sym)
++	  ALL_DICT_SYMBOLS (BLOCK_MULTIDICT (b), miter, sym)
+ 	    {
+ 	      TRY
+ 		{
diff --git a/SOURCES/gdb-rhbz1560010-fix-assertion-symbol-language-dict-language-3of5.patch b/SOURCES/gdb-rhbz1560010-fix-assertion-symbol-language-dict-language-3of5.patch
new file mode 100644
index 0000000..25b8320
--- /dev/null
+++ b/SOURCES/gdb-rhbz1560010-fix-assertion-symbol-language-dict-language-3of5.patch
@@ -0,0 +1,232 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Sergio Durigan Junior <sergiodj@redhat.com>
+Date: Fri, 11 Jan 2019 11:26:59 -0500
+Subject: 
+ gdb-rhbz1560010-fix-assertion-symbol-language-dict-language-3of5.patch
+
+;; Fix 'Assertion `SYMBOL_LANGUAGE (sym) == DICT_LANGUAGE (dict)->la_language' failed.'
+;; Keith Seitz, RHBZ#1560010.
+
+gdb/23712: Cleanup/Remove temporary dictionary functions
+
+Now that multidictionary's are being used, there is no longer any need
+to retain the four temporary functions introduced in the beginning of
+this series.
+
+This patch removes them.
+
+As an additional cleanup, since the single-language dictionaries are
+no longer used outside dictionary.c, make all of those functions
+static.
+
+gdb/ChangeLog:
+
+	PR gdb/23712
+	PR symtab/23010
+	* dictionary.c (pending_to_vector): Remove.
+	(dict_create_hashed_1, dict_create_linear_1, dict_add_pending_1):
+	Remove _1 suffix, replacing functions of the same name.  Update
+	all callers.
+	(dict_create_hashed, dict_create_hashed_expandable)
+	(dict_create_linear, dict_create_linear_expandable, dict_free)
+	(dict_add_symbol, dict_add_pending, dict_size, dict_empty):
+	Make functions static.
+
+diff --git a/gdb/dictionary.c b/gdb/dictionary.c
+--- a/gdb/dictionary.c
++++ b/gdb/dictionary.c
+@@ -342,31 +342,14 @@ static void insert_symbol_hashed (struct dictionary *dict,
+ 
+ static void expand_hashtable (struct dictionary *dict);
+ 
+-/* A function to convert a linked list into a vector.  */
+-
+-static std::vector<symbol *>
+-pending_to_vector (const struct pending *symbol_list)
+-{
+-  std::vector<symbol *> symlist;
+-
+-  for (const struct pending *list_counter = symbol_list;
+-       list_counter != nullptr; list_counter = list_counter->next)
+-    {
+-      for (int i = list_counter->nsyms - 1; i >= 0; --i)
+-	symlist.push_back (list_counter->symbol[i]);
+-    }
+-
+-  return symlist;
+-}
+-
+ /* The creation functions.  */
+ 
+-/* A function to transition dict_create_hashed to new API.  */
++/* Create a hashed dictionary of a given language.  */
+ 
+ static struct dictionary *
+-dict_create_hashed_1 (struct obstack *obstack,
+-		      enum language language,
+-		      const std::vector<symbol *> &symbol_list)
++dict_create_hashed (struct obstack *obstack,
++		    enum language language,
++		    const std::vector<symbol *> &symbol_list)
+ {
+   /* Allocate the dictionary.  */
+   struct dictionary *retval = XOBNEW (obstack, struct dictionary);
+@@ -388,21 +371,9 @@ dict_create_hashed_1 (struct obstack *obstack,
+   return retval;
+ }
+ 
+-/* See dictionary.h.  */
+-
+-struct dictionary *
+-dict_create_hashed (struct obstack *obstack,
+-		    enum language language,
+-		    const struct pending *symbol_list)
+-{
+-  std::vector<symbol *> symlist = pending_to_vector (symbol_list);
+-
+-  return dict_create_hashed_1 (obstack, language, symlist);
+-}
++/* Create an expandable hashed dictionary of a given language.  */
+ 
+-/* See dictionary.h.  */
+-
+-extern struct dictionary *
++static struct dictionary *
+ dict_create_hashed_expandable (enum language language)
+ {
+   struct dictionary *retval = XNEW (struct dictionary);
+@@ -417,12 +388,12 @@ dict_create_hashed_expandable (enum language language)
+   return retval;
+ }
+ 
+-/* A function to transition dict_create_linear to new API.  */
++/* Create a linear dictionary of a given language.  */
+ 
+ static struct dictionary *
+-dict_create_linear_1 (struct obstack *obstack,
+-		      enum language language,
+-		      const std::vector<symbol *> &symbol_list)
++dict_create_linear (struct obstack *obstack,
++		    enum language language,
++		    const std::vector<symbol *> &symbol_list)
+ {
+   struct dictionary *retval = XOBNEW (obstack, struct dictionary);
+   DICT_VECTOR (retval) = &dict_linear_vector;
+@@ -442,21 +413,9 @@ dict_create_linear_1 (struct obstack *obstack,
+   return retval;
+ }
+ 
+-/* See dictionary.h.  */
+-
+-struct dictionary *
+-dict_create_linear (struct obstack *obstack,
+-		    enum language language,
+-		    const struct pending *symbol_list)
+-{
+-  std::vector<symbol *> symlist = pending_to_vector (symbol_list);
+-
+-  return dict_create_linear_1 (obstack, language, symlist);
+-}
+-
+-/* See dictionary.h.  */
++/* Create an expandable linear dictionary of a given language.  */
+ 
+-struct dictionary *
++static struct dictionary *
+ dict_create_linear_expandable (enum language language)
+ {
+   struct dictionary *retval = XNEW (struct dictionary);
+@@ -476,7 +435,7 @@ dict_create_linear_expandable (enum language language)
+ /* Free the memory used by a dictionary that's not on an obstack.  (If
+    any.)  */
+ 
+-void
++static void
+ dict_free (struct dictionary *dict)
+ {
+   (DICT_VECTOR (dict))->free (dict);
+@@ -484,34 +443,24 @@ dict_free (struct dictionary *dict)
+ 
+ /* Add SYM to DICT.  DICT had better be expandable.  */
+ 
+-void
++static void
+ dict_add_symbol (struct dictionary *dict, struct symbol *sym)
+ {
+   (DICT_VECTOR (dict))->add_symbol (dict, sym);
+ }
+ 
+-/* A function to transition dict_add_pending to new API.  */
++/* Utility to add a list of symbols to a dictionary.
++   DICT must be an expandable dictionary.  */
+ 
+ static void
+-dict_add_pending_1 (struct dictionary *dict,
+-		    const std::vector<symbol *> &symbol_list)
++dict_add_pending (struct dictionary *dict,
++		  const std::vector<symbol *> &symbol_list)
+ {
+   /* Preserve ordering by reversing the list.  */
+   for (auto sym = symbol_list.rbegin (); sym != symbol_list.rend (); ++sym)
+     dict_add_symbol (dict, *sym);
+ }
+ 
+-/* Utility to add a list of symbols to a dictionary.
+-   DICT must be an expandable dictionary.  */
+-
+-void
+-dict_add_pending (struct dictionary *dict, const struct pending *symbol_list)
+-{
+-  std::vector<symbol *> symlist = pending_to_vector (symbol_list);
+-
+-  dict_add_pending_1 (dict, symlist);
+-}
+-
+ /* Initialize ITERATOR to point at the first symbol in DICT, and
+    return that first symbol, or NULL if DICT is empty.  */
+ 
+@@ -548,7 +497,7 @@ dict_iter_match_next (const lookup_name_info &name,
+     ->iter_match_next (name, iterator);
+ }
+ 
+-int
++static int
+ dict_size (const struct dictionary *dict)
+ {
+   return (DICT_VECTOR (dict))->size (dict);
+@@ -560,7 +509,7 @@ dict_size (const struct dictionary *dict)
+ 
+ /* Test to see if DICT is empty.  */
+ 
+-int
++static int
+ dict_empty (struct dictionary *dict)
+ {
+   struct dict_iterator iter;
+@@ -1019,7 +968,7 @@ mdict_create_hashed (struct obstack *obstack,
+       std::vector<symbol *> symlist = pair.second;
+ 
+       retval->dictionaries[idx++]
+-	= dict_create_hashed_1 (obstack, language, symlist);
++	= dict_create_hashed (obstack, language, symlist);
+     }
+ 
+   return retval;
+@@ -1064,7 +1013,7 @@ mdict_create_linear (struct obstack *obstack,
+       std::vector<symbol *> symlist = pair.second;
+ 
+       retval->dictionaries[idx++]
+-	= dict_create_linear_1 (obstack, language, symlist);
++	= dict_create_linear (obstack, language, symlist);
+     }
+ 
+   return retval;
+@@ -1210,7 +1159,7 @@ mdict_add_pending (struct multidictionary *mdict,
+ 	  dict = create_new_language_dictionary (mdict, language);
+ 	}
+ 
+-      dict_add_pending_1 (dict, symlist);
++      dict_add_pending (dict, symlist);
+     }
+ }
+ 
diff --git a/SOURCES/gdb-rhbz1560010-fix-assertion-symbol-language-dict-language-4of5.patch b/SOURCES/gdb-rhbz1560010-fix-assertion-symbol-language-dict-language-4of5.patch
new file mode 100644
index 0000000..354c494
--- /dev/null
+++ b/SOURCES/gdb-rhbz1560010-fix-assertion-symbol-language-dict-language-4of5.patch
@@ -0,0 +1,90 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Sergio Durigan Junior <sergiodj@redhat.com>
+Date: Fri, 11 Jan 2019 11:29:25 -0500
+Subject: 
+ gdb-rhbz1560010-fix-assertion-symbol-language-dict-language-4of5.patch
+
+;; Fix 'Assertion `SYMBOL_LANGUAGE (sym) == DICT_LANGUAGE (dict)->la_language' failed.'
+;; Keith Seitz, RHBZ#1560010.
+
+gdb/23712: Remove dw2_add_symbol_to_list
+
+Finally, we can remove dw2_add_symbol_to_list since the wrapper function
+originally introduced to catch this multi-language scenario is no longer
+needed.  With multi-language dictionaries, we can now support adding
+symbols of multiple languages, negating the need for the assertion
+entirely.
+
+This patch should now fix gdb/23712 (and symtab/23010).  At least it will
+if the NULL buildsym_compunit problem doesn't strike first (see gdb/23773).
+
+gdb/ChangeLog:
+
+	PR gdb/23712
+	PR symtab/23010
+	* dwarf2read.c (dw2_add_symbol_to_list): Remove.
+	(fixup_go_packaging, new_symbol): Use add_symbol_to_list.
+
+diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
+--- a/gdb/dwarf2read.c
++++ b/gdb/dwarf2read.c
+@@ -9715,23 +9715,6 @@ compute_delayed_physnames (struct dwarf2_cu *cu)
+   cu->method_list.clear ();
+ }
+ 
+-/* A wrapper for add_symbol_to_list to ensure that SYMBOL's language is
+-   the same as all other symbols in LISTHEAD.  If a new symbol is added
+-   with a different language, this function asserts.  */
+-
+-static inline void
+-dw2_add_symbol_to_list (struct symbol *symbol, struct pending **listhead)
+-{
+-  /* Only assert if LISTHEAD already contains symbols of a different
+-     language (dict_create_hashed/insert_symbol_hashed requires that all
+-     symbols in this list are of the same language).  */
+-  gdb_assert ((*listhead) == NULL
+-	      || (SYMBOL_LANGUAGE ((*listhead)->symbol[0])
+-		  == SYMBOL_LANGUAGE (symbol)));
+-
+-  add_symbol_to_list (symbol, listhead);
+-}
+-
+ /* Go objects should be embedded in a DW_TAG_module DIE,
+    and it's not clear if/how imported objects will appear.
+    To keep Go support simple until that's worked out,
+@@ -9803,7 +9786,7 @@ fixup_go_packaging (struct dwarf2_cu *cu)
+       SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
+       SYMBOL_TYPE (sym) = type;
+ 
+-      dw2_add_symbol_to_list (sym, &global_symbols);
++      add_symbol_to_list (sym, &global_symbols);
+ 
+       xfree (package_name);
+     }
+@@ -21387,7 +21370,7 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
+ 	  SYMBOL_TYPE (sym) = objfile_type (objfile)->builtin_core_addr;
+ 	  SYMBOL_DOMAIN (sym) = LABEL_DOMAIN;
+ 	  SYMBOL_ACLASS_INDEX (sym) = LOC_LABEL;
+-	  dw2_add_symbol_to_list (sym, cu->list_in_scope);
++	  add_symbol_to_list (sym, cu->list_in_scope);
+ 	  break;
+ 	case DW_TAG_subprogram:
+ 	  /* SYMBOL_BLOCK_VALUE (sym) will be filled in later by
+@@ -21645,7 +21628,7 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
+ 	case DW_TAG_common_block:
+ 	  SYMBOL_ACLASS_INDEX (sym) = LOC_COMMON_BLOCK;
+ 	  SYMBOL_DOMAIN (sym) = COMMON_BLOCK_DOMAIN;
+-	  dw2_add_symbol_to_list (sym, cu->list_in_scope);
++	  add_symbol_to_list (sym, cu->list_in_scope);
+ 	  break;
+ 	default:
+ 	  /* Not a tag we recognize.  Hopefully we aren't processing
+@@ -21665,7 +21648,7 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
+ 	}
+ 
+       if (list_to_add != NULL)
+-	dw2_add_symbol_to_list (sym, list_to_add);
++	add_symbol_to_list (sym, list_to_add);
+ 
+       /* For the benefit of old versions of GCC, check for anonymous
+ 	 namespaces based on the demangled name.  */
diff --git a/SOURCES/gdb-rhbz1560010-fix-assertion-symbol-language-dict-language-5of5.patch b/SOURCES/gdb-rhbz1560010-fix-assertion-symbol-language-dict-language-5of5.patch
new file mode 100644
index 0000000..959b577
--- /dev/null
+++ b/SOURCES/gdb-rhbz1560010-fix-assertion-symbol-language-dict-language-5of5.patch
@@ -0,0 +1,183 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Sergio Durigan Junior <sergiodj@redhat.com>
+Date: Fri, 11 Jan 2019 11:31:59 -0500
+Subject: 
+ gdb-rhbz1560010-fix-assertion-symbol-language-dict-language-5of5.patch
+
+;; Fix 'Assertion `SYMBOL_LANGUAGE (sym) == DICT_LANGUAGE (dict)->la_language' failed.'
+;; Keith Seitz, RHBZ#1560010.
+
+gdb/23712: Test case for multidictionary
+
+This is a test derived from one of the reproducers in symtab/23010.
+The DIE tree used here is typical of compilations with LTO, where an
+artificial parent DIE of language C99 imports DIEs of other languages.
+
+gdb/testsuite/ChangeLog:
+
+	PR gdb/23712
+	PR symtab/23010
+	* gdb.dwarf2/multidictionary.exp: New file.
+
+diff --git a/gdb/testsuite/gdb.dwarf2/multidictionary.exp b/gdb/testsuite/gdb.dwarf2/multidictionary.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.dwarf2/multidictionary.exp
+@@ -0,0 +1,157 @@
++# Copyright 2019 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++# A test of multi-language dictionaries, a solution to symtab/23010 et al.
++
++load_lib dwarf.exp
++
++# This test can only be run on targets which support DWARF.
++if {![dwarf2_support]} {
++    return 0
++}
++
++standard_testfile main.c .S
++
++# Create the DWARF.  This is derived from the reproducer in the bug
++# mentioned above.  This DIE tree is typical of compilations wtih
++# LTO enabled.
++
++set asm_file [standard_output_file $srcfile2]
++Dwarf::assemble $asm_file {
++    declare_labels D45d9 D5079 D5080 D50a9 D50af D5ab2 D5ac2 D5ace D5acf
++    declare_labels D2135f D2216a D22171 D226c4 D226ca D244ca \
++	D245da D245e6
++    declare_labels D41c21 D42025 D42045 D42038 D42045 D420b5
++
++    cu {} {
++	D45d9: compile_unit {
++	    {language @DW_LANG_C_plus_plus}
++	    {name "SerialPortUtils.cpp"}
++	} {
++	    D5079: base_type {
++		{byte_size 1 sdata}
++		{encoding @DW_ATE_unsigned}
++		{name "char"}
++	    }
++
++	    D5080: const_type {
++		{type :$D5079}
++	    }
++
++	    D50a9: pointer_type {
++		{byte_size 4 sdata}
++		{type :$D5080}
++	    }
++
++	    D50af: const_type {
++		{type :$D50a9}
++	    }
++
++	    D5ab2: subprogram {
++		{external 1 flag}
++		{linkage_name "_Z18SerialSyncWriteStrPKc"}
++	    } {
++		D5ac2: formal_parameter {
++		    {name "msg"}
++		    {type :$D50af}
++		}
++		D5ace: lexical_block {} {
++		    D5acf: DW_TAG_variable {
++			{name "p"}
++			{type :$D50a9}
++		    }
++		}
++	    }
++	}
++    }
++
++    cu {} {
++	D2135f: compile_unit {
++	    {language @DW_LANG_C_plus_plus}
++	    {name "Main.cpp"}
++	} {
++	    D2216a: base_type {
++		{byte_size 1 sdata}
++		{encoding @DW_ATE_unsigned_char}
++		{name "char"}
++	    }
++
++	    D22171: const_type {
++		{type :$D2216a}
++	    }
++
++	    D226c4: pointer_type {
++		{byte_size 4 sdata}
++		{type :$D22171}
++	    }
++
++	    D226ca: const_type {
++		{type :$D226c4}
++	    }
++
++	    D245da: subprogram {
++		{name "PrintPanicMsg"}
++	    } {
++		D245e6: formal_parameter {
++		    {name "msg"}
++		    {type :$D226ca}
++		}
++	    }
++	}
++    }
++
++    cu {} {
++       D41c21: compile_unit {
++           {language @DW_LANG_C99}
++           {name "<artificial>"}
++       } {
++           D42025: subprogram {
++               {abstract_origin %$D245da}
++               {low_pc 0x80b60 addr}
++               {high_pc 0x6c data4}
++           } {
++	       D42038: formal_parameter {
++		   {abstract_origin %$D245e6}
++	       }
++
++	       D42045: inlined_subroutine {
++                   {abstract_origin %$D5ab2}
++                   {low_pc 0x8060 addr}
++                   {high_pc 0xc data4}
++               } {
++                   D420b5: formal_parameter {
++                       {abstract_origin %$D5ac2}
++                   }
++               }
++           }
++       }
++    }
++}
++
++# Build the test executable.
++if {[build_executable $testfile.exp $testfile [list $asm_file $srcfile] {}] \
++	== -1} {
++    return -1
++}
++
++# We force the DIEs above to be read in via "-readnow".
++gdb_spawn_with_cmdline_opts "-readnow"
++gdb_load $binfile
++
++# All we need to do is check whether GDB is alive.  Without
++# multidictionaries, it will either crash, assert, or throw an
++# internal_error.
++gdb_test "p 1" "= 1" "GDB is alive"
++
diff --git a/SOURCES/gdb-rhbz1639242-fix-dwarf2_find_containing_comp_unit-binary-search.patch b/SOURCES/gdb-rhbz1639242-fix-dwarf2_find_containing_comp_unit-binary-search.patch
new file mode 100644
index 0000000..b56aee1
--- /dev/null
+++ b/SOURCES/gdb-rhbz1639242-fix-dwarf2_find_containing_comp_unit-binary-search.patch
@@ -0,0 +1,176 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Sergio Durigan Junior <sergiodj@redhat.com>
+Date: Fri, 30 Nov 2018 15:20:27 -0500
+Subject: 
+ gdb-rhbz1639242-fix-dwarf2_find_containing_comp_unit-binary-search.patch
+
+;; Fix for 'py-bt is broken, results in exception'.
+;; RHBZ 1639242
+
+Fix dwarf2read.c:dwarf2_find_containing_comp_unit's binary search
+
+First of all, I would like to express my gratitude to Keith Seitz, Jan
+Kratochvil and Tom Tromey, who were really kind and helped a lot with
+this bug.  The patch itself was authored by Jan.
+
+This all began with:
+
+  https://bugzilla.redhat.com/show_bug.cgi?id=1639242
+  py-bt is broken, results in exception
+
+In summary, the error reported by the bug above is:
+
+  $ gdb -args python3
+  GNU gdb (GDB) Fedora 8.1.1-3.fc28
+  (...)
+  Reading symbols from python3...Reading symbols from /usr/lib/debug/usr/bin/python3.6-3.6.6-1.fc28.x86_64.debug...done.
+  done.
+  Dwarf Error: could not find partial DIE containing offset 0x316 [in module /usr/lib/debug/usr/bin/python3.6-3.6.6-1.fc28.x86_64.debug]
+
+After a long investigation, and after thinking that the problem might
+actually be on DWZ's side, we were able to determine that there's
+something wrong going on when
+dwarf2read.c:dwarf2_find_containing_comp_unit performs a binary search
+over all of the CUs belonging to an objfile in order to find the CU
+which contains a DIE at an specific offset.  The current algorithm is:
+
+  static struct dwarf2_per_cu_data *
+  dwarf2_find_containing_comp_unit (sect_offset sect_off,
+				    unsigned int offset_in_dwz,
+				    struct dwarf2_per_objfile *dwarf2_per_objfile)
+  {
+    struct dwarf2_per_cu_data *this_cu;
+    int low, high;
+    const sect_offset *cu_off;
+
+    low = 0;
+    high = dwarf2_per_objfile->all_comp_units.size () - 1;
+    while (high > low)
+      {
+	struct dwarf2_per_cu_data *mid_cu;
+	int mid = low + (high - low) / 2;
+
+	mid_cu = dwarf2_per_objfile->all_comp_units[mid];
+	cu_off = &mid_cu->sect_off;
+	if (mid_cu->is_dwz > offset_in_dwz
+	    || (mid_cu->is_dwz == offset_in_dwz && *cu_off >= sect_off))
+	  high = mid;
+	else
+	  low = mid + 1;
+      }
+
+For the sake of this example, let's consider that "sect_off =
+0x7d".
+
+There are a few important things going on here.  First,
+"dwarf2_per_objfile->all_comp_units ()" will be sorted first by
+whether the CU is a DWZ CU, and then by cu->sect_off.  In this
+specific bug, "offset_in_dwz" is false, which means that, for the most
+part of the loop, we're going to do "high = mid" (i.e, we'll work with
+the lower part of the vector).
+
+In our particular case, when we reach the part where "mid_cu->is_dwz
+== offset_in_dwz" (i.e, both are false), we end up with "high = 2" and
+"mid = 1".  I.e., there are only 2 elements in the vector who are not
+DWZ.  The vector looks like this:
+
+  #0: cu->sect_off = 0;   length = 114;  is_dwz = false  <-- low
+  #1: cu->sect_off = 114; length = 7796; is_dwz = false  <-- mid
+  #2: cu->sect_off = 0;   length = 28;   is_dwz = true   <-- high
+  ...
+
+The CU we want is #1, which is exactly where "mid" is.  Also, #1 is
+not DWZ, which is also exactly what we want.  So we perform the second
+comparison:
+
+  (mid_cu->is_dwz == offset_in_dwz && *cu_off >= sect_off)
+                                      ^^^^^^^^^^^^^^^^^^^
+
+Because "*cu_off = 114" and "sect_off = 0x7d", this evaluates to
+false, so we end up with "low = mid + 1 = 2", which actually gives us
+the wrong CU (i.e., a CU that is DWZ).  Next in the code, GDB does:
+
+    gdb_assert (low == high);
+    this_cu = dwarf2_per_objfile->all_comp_units[low];
+    cu_off = &this_cu->sect_off;
+    if (this_cu->is_dwz != offset_in_dwz || *cu_off > sect_off)
+        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+      {
+	if (low == 0 || this_cu->is_dwz != offset_in_dwz)
+	  error (_("Dwarf Error: could not find partial DIE containing "
+		 "offset %s [in module %s]"),
+		 sect_offset_str (sect_off),
+		 bfd_get_filename (dwarf2_per_objfile->objfile->obfd));
+	...
+
+Triggering the error we saw in the original bug report.
+
+It's important to notice that we see the error message because the
+selected CU is a DWZ one, but we're looking for a non-DWZ CU here.
+However, even when the selected CU is *not* a DWZ (and we don't see
+any error message), we still end up with the wrong CU.  For example,
+suppose that the vector had:
+
+  #0: cu->sect_off = 0;    length = 114;  is_dwz = false
+  #1: cu->sect_off = 114;  length = 7796; is_dwz = false
+  #2: cu->sect_off = 7910; length = 28;   is_dwz = false
+  ...
+
+I.e., #2's "is_dwz" is false instead of true.  In this case, we still
+want #1, because that's where the DIE is located.  After the loop ends
+up in #2, we have "is_dwz" as false, which is what we wanted, so we
+compare offsets.  In this case, "7910 >= 0x7d", so we set "mid = high
+= 2".  Next iteration, we have "mid = 0 + (2 - 0) / 2 = 1", and thus
+we examining #1.  "is_dwz" is still false, but "114 >= 0x7d" also
+evaluates to false, so "low = mid + 1 = 2", which makes the loop stop.
+Therefore, we end up choosing #2 as our CU, even though #1 is the
+right one.
+
+The problem here is happening because we're comparing "sect_off"
+directly against "*cu_off", while we should actually be comparing
+against "*cu_off + mid_cu->length" (i.e., the end offset):
+
+  ...
+  || (mid_cu->is_dwz == offset_in_dwz
+      && *cu_off + mid_cu->length >= sect_off))
+         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  ...
+
+And this is what the patch does.  The idea is that if GDB is searching
+for an offset that falls above the *end* of the CU being
+analyzed (i.e., "mid"), then the next iteration should try a
+higher-offset CU next.  The previous algorithm was using
+the *beginning* of the CU.
+
+Unfortunately, I could not devise a testcase for this problem, so I am
+proposing a fix with this huge explanation attached to it in the hope
+that it is sufficient.  After talking a bit to Keith (our testcase
+guru), it seems that one would have to create an objfile with both DWZ
+and non-DWZ sections, which may prove very hard to do, I think.
+
+I ran this patch on our BuildBot, and no regressions were detected.
+
+gdb/ChangeLog:
+2018-11-30  Jan Kratochvil  <jan.kratochvil@redhat.com>
+	    Keith Seitz  <keiths@redhat.com>
+	    Tom Tromey  <tom@tromey.com>
+	    Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	https://bugzilla.redhat.com/show_bug.cgi?id=1613614
+	* dwarf2read.c (dwarf2_find_containing_comp_unit): Add
+	'mid_cu->length' to '*cu_off' when checking if 'sect_off' is
+	inside the CU.
+
+diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
+--- a/gdb/dwarf2read.c
++++ b/gdb/dwarf2read.c
+@@ -25039,7 +25039,8 @@ dwarf2_find_containing_comp_unit (sect_offset sect_off,
+       mid_cu = dwarf2_per_objfile->all_comp_units[mid];
+       cu_off = &mid_cu->sect_off;
+       if (mid_cu->is_dwz > offset_in_dwz
+-	  || (mid_cu->is_dwz == offset_in_dwz && *cu_off >= sect_off))
++	  || (mid_cu->is_dwz == offset_in_dwz
++	      && *cu_off + mid_cu->length >= sect_off))
+ 	high = mid;
+       else
+ 	low = mid + 1;
diff --git a/SOURCES/gdb-rhbz1653410-avoid-crash-when-calling-warning-too-early.patch b/SOURCES/gdb-rhbz1653410-avoid-crash-when-calling-warning-too-early.patch
new file mode 100644
index 0000000..59bb698
--- /dev/null
+++ b/SOURCES/gdb-rhbz1653410-avoid-crash-when-calling-warning-too-early.patch
@@ -0,0 +1,145 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Tom Tromey <tom@tromey.com>
+Date: Fri, 5 Oct 2018 14:54:35 -0600
+Subject: gdb-rhbz1653410-avoid-crash-when-calling-warning-too-early.patch
+
+;; Fix for 'GDB crashes when running from a deleted directory'
+;; (Tom Tromey, RHBZ#1653410)
+
+Avoid crash when calling warning too early
+
+I noticed that if you pass the name of an existing file (not a
+directory) as the argument to --data-directory, gdb will crash:
+
+    $ ./gdb -nx  --data-directory  ./gdb
+    ../../binutils-gdb/gdb/target.c:590:56: runtime error: member call on null pointer of type 'struct target_ops'
+
+This was later reported as PR gdb/23838.
+
+This happens because warning ends up calling
+target_supports_terminal_ours, which calls current_top_target, which
+returns nullptr this early.
+
+This fixes the problem by handling this case specially in
+target_supports_terminal_ours.  I also changed
+target_supports_terminal_ours to return bool.
+
+gdb/ChangeLog
+2018-11-08  Tom Tromey  <tom@tromey.com>
+
+	PR gdb/23555:
+	PR gdb/23838:
+	* target.h (target_supports_terminal_ours): Return bool.
+	* target.c (target_supports_terminal_ours): Handle case where
+	current_top_target returns nullptr.  Return bool.
+
+gdb/testsuite/ChangeLog
+2018-11-08  Tom Tromey  <tom@tromey.com>
+
+	PR gdb/23555:
+	PR gdb/23838:
+	* gdb.base/warning.exp: New file.
+
+diff --git a/gdb/ChangeLog b/gdb/ChangeLog
+--- a/gdb/ChangeLog
++++ b/gdb/ChangeLog
+@@ -1,3 +1,11 @@
++2018-11-08  Tom Tromey  <tom@tromey.com>
++
++	PR gdb/23555:
++	PR gdb/23838:
++	* target.h (target_supports_terminal_ours): Return bool.
++	* target.c (target_supports_terminal_ours): Handle case where
++	current_top_target returns nullptr.  Return bool.
++
+ 2018-08-16  Gary Benson <gbenson@redhat.com>
+ 
+ 	PR gdb/13000:
+diff --git a/gdb/target.c b/gdb/target.c
+--- a/gdb/target.c
++++ b/gdb/target.c
+@@ -584,10 +584,16 @@ target_terminal::info (const char *arg, int from_tty)
+ 
+ /* See target.h.  */
+ 
+-int
++bool
+ target_supports_terminal_ours (void)
+ {
+-  return current_top_target ()->supports_terminal_ours ();
++  /* This can be called before there is any target, so we must check
++     for nullptr here.  */
++  target_ops *top = current_top_target ();
++
++  if (top == nullptr)
++    return false;
++  return top->supports_terminal_ours ();
+ }
+ 
+ static void
+diff --git a/gdb/target.h b/gdb/target.h
+--- a/gdb/target.h
++++ b/gdb/target.h
+@@ -1576,7 +1576,7 @@ extern int target_remove_breakpoint (struct gdbarch *gdbarch,
+ /* Return true if the target stack has a non-default
+   "terminal_ours" method.  */
+ 
+-extern int target_supports_terminal_ours (void);
++extern bool target_supports_terminal_ours (void);
+ 
+ /* Kill the inferior process.   Make it go away.  */
+ 
+diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
+--- a/gdb/testsuite/ChangeLog
++++ b/gdb/testsuite/ChangeLog
+@@ -1,3 +1,9 @@
++2018-11-08  Tom Tromey  <tom@tromey.com>
++
++	PR gdb/23555:
++	PR gdb/23838:
++	* gdb.base/warning.exp: New file.
++
+ 2018-09-04  Gary Benson <gbenson@redhat.com>
+ 
+ 	* gdb.base/batch-exit-status.exp: Use gdb_test_multiple and expect
+diff --git a/gdb/testsuite/gdb.base/warning.exp b/gdb/testsuite/gdb.base/warning.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/warning.exp
+@@ -0,0 +1,36 @@
++# Copyright 2018 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++# Test that an early warning does not cause a crash.
++
++if {[is_remote host]} {
++    unsupported "warning.exp can only run on local host"
++    return
++}
++
++set tname [standard_temp_file warning]
++set fd [open $tname w]
++puts $fd "anything"
++close $fd
++
++set save $INTERNAL_GDBFLAGS
++set INTERNAL_GDBFLAGS "-nw -nx -data-directory $tname"
++
++gdb_start
++
++# Make sure gdb started up.
++gdb_test "echo 23\\n" "23"
++
++set INTERNAL_GDBFLAGS $save
diff --git a/SOURCES/gdb-rhbz795424-bitpos-20of25.patch b/SOURCES/gdb-rhbz795424-bitpos-20of25.patch
new file mode 100644
index 0000000..6082e3e
--- /dev/null
+++ b/SOURCES/gdb-rhbz795424-bitpos-20of25.patch
@@ -0,0 +1,3454 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-rhbz795424-bitpos-20of25.patch
+
+;; Fix `GDB cannot access struct member whose offset is larger than 256MB'
+;; (RH BZ 795424).
+;;=push
+
+http://sourceware.org/ml/gdb-patches/2012-09/msg00631.html
+
+--MP_/yp5f+W_ED2JtUlSyBi8xujr
+Content-Type: text/plain; charset=US-ASCII
+Content-Transfer-Encoding: 7bit
+Content-Disposition: inline
+
+Hi,
+
+This is patch 1/4, which implements the bulk of the changes in type
+length and bitpos/type offset. I have verified that there are no
+regressions resulting from this patch by running the testsuite on
+Fedora 16 x86_64.  Patch and changelog attached.
+
+Regards,
+Siddhesh
+
+--MP_/yp5f+W_ED2JtUlSyBi8xujr
+Content-Type: text/plain
+Content-Transfer-Encoding: quoted-printable
+Content-Disposition: attachment; filename=ChangeLog-main
+
+gdb/ChangeLog
+
+2012-08-05  Siddhesh Poyarekar  <siddhesh@redhat.com>
+
+	* ada-lang.c (fat_pntr_bounds_bitpos): Return LONGEST.
+	(fat_pntr_data_bitpos): Likewise.
+	(desc_bound_bitpos): Likewise.
+	(constrained_packed_array_type): Expand ELT_BITS parameter to
+	LONGEST.
+	(move_bits): Expand parameters SRC_OFFSET and N to LONGEST.
+	(cond_offset_host): Expand parameter OFFSET to LONGEST.
+	(cond_offset_target): Likewise.
+	(ada_type_of_array): Expand ARRAY_BITSIZE to LONGEST.
+	(decode_constrained_packed_array_type): Expand BITS to LONGEST.
+	(decode_constrained_packed_array): Expand BIT_POS to LONGEST.
+	(ada_value_primitive_packed_val): Expand parameter OFFSET to
+	LONGEST.  Expand TARG, NTARG and NEW_OFFSET to LONGEST.
+	(ada_value_assign): Expand FROM_SIZE to LONGEST.
+	(value_assign_to_component): Expand BITS to LONGEST.
+	(ensure_lval): Expand LEN to LONGEST.
+	(value_pointer): Expand LEN to ULONGEST.
+	(value_tag_from_contents_and_address): Expand TAG_BYTE_OFFSET to
+	LONGEST.
+	(ada_value_primitive_field): Expand parameter OFFSET to LONGEST.
+	Expand bit_pos to LONGEST.
+	(find_struct_field): Expand parameters OFFSET and BYTE_OFFSET_P to
+	LONGEST.  Expand BIT_POS and FLD_OFFSET to LONGEST.
+	(ada_search_struct_field): Expand parameter OFFSET to LONGEST.
+	Expand VAR_OFFSET to LONGEST.
+	(ada_index_struct_field): Expand parameters INDEX and OFFSET to
+	LONGEST.
+	(ada_index_struct_field_1): Expand parameters INDEX_P and OFFSET
+	to LONGEST.
+	(ada_value_struct_elt): Expand BYTE_OFFSET to LONGEST.
+	(align_value): Return ULONGEST.  Expand parameter OFF and
+	ALIGNMENT to ULONGEST.
+	(ada_template_to_fixed_record_type_1): Expand OFF, BIT_LEN and
+	fld_bit_len to LONGEST.  Expand FIELD_OFFSET to LONGEST.  Use
+	pulongest function to print TYPE_LENGTH.
+	(to_fixed_array_type): Expand LEN to LONGEST.
+	* ada-lang.h (ada_val_print): Expand parameter EMBEDDED_OFFSET to
+	LONGEST.
+	(ada_printstr): Expand parameter LENGTH to ULONGEST.
+	(ada_value_primitive_packed_val): Expand parameter OFFSET to
+	LONGEST.
+	* ada-typeprint.c (ada_print_type): Use pulongest to print
+	TYPE_LENGTH.
+	* ada-valprint.c (val_print_packed_array_elements): Expand ELTLEN
+	to ULONGEST.
+	(char_at): Expand parameter I to LONGEST.
+	(printstr): Expand parameter LENGTH, I, REP1, REPS to ULONGEST.
+	Use pulongest to format print REPS.
+	(ada_printstr): Expand parameter LENGTH to LONGEST.
+	(ada_val_print): Expand parameter EMBEDDED_OFFSET to LONGEST.
+	(ada_val_print_array): Expand ELTLEN, LEN to ULONGEST and TEMP_LEN
+	to LONGEST.
+	(ada_val_print_1): Expand parameter OFFSET to LONGEST.
+	(print_variant_part): Expand parameters OFFSET and OUTER_OFFSET to
+	LONGEST.
+	(print_field_values): Likewise.  Expand BIT_POS to LONGEST.
+	* annotate.c (annotate_array_section_begin): Expand parameter
+	IDX to LONGEST.  Use plongest to format-print IDX.
+	(annotate_elt_rep): Expand parameter REPCOUNT to ULONGEST.  Use
+	plongest to format-print REPCOUNT.
+	* annotate.h: Likewise.
+	* arm-linux-nat.c (arm_linux_region_ok_for_hw_watchpoint):
+	Expand parameter parameter LEN to LONGEST.
+	* ax-gdb.c (gen_left_shift): Expand parameter DISTANCE to LONGEST.
+	(gen_offset): Expand parameter OFFSET to LONGEST.
+	(gen_bitfield_ref): Expand parameters START, END to LONGEST.
+	Expand BOUND_START, BOUND_END, OFFSET to LONGEST.
+	(gen_primitive_field): Expand parameter OFFSET to LONGEST.
+	(gen_struct_ref_recursive): Likewise.
+	* ax-general.c (ax_trace_quick): Expand parameter N to LONGEST.
+	* ax.h (ax_trace_quick): Likewise.
+	* breakpoint.c (breakpoint_address_match_range): Expand parameter
+	LEN1 to LONGEST.
+	(can_use_hardware_watchpoint): Expand LEN to LONGEST.
+	* breakpoint.h (struct bp_target_info): Expand member LENGTH to
+	LONGEST.
+	(struct bp_location): Likewise.
+	* c-lang.c (c_printstr): Expand parameter LENGTH to ULONGEST.
+	(evaluate_subexp_c): Expand ELEMENT_SIZE, I to LONGEST.
+	* c-lang.h (c_val_print): Expand parameter EMBEDDED_OFFSET to
+	LONGEST.
+	(c_printstr): Expand parameter LENGTH to ULONGEST.
+	(cp_print_value_fields): Expand parameter OFFSET to LONGEST.
+	(cp_print_value_fields_rtti): Likewise.
+	* c-typeprint.c (c_type_print_varspec_suffix): Remove cast down to
+	int and use plongest to print LONGEST.
+	* c-valprint.c (c_val_print): Expand parameter EMBEDDED_OFFSET to
+	LONGEST.  Expand OFFSET to LONGEST, ELTLEN to ULONGEST.
+	(c_value_print): Expand TOP to LONGEST.
+	* cp-abi.c (baseclass_offset): Return LONGEST.  Expand parameter
+	EMBEDDED_OFFSET to LONGEST.  Expand RES to LONGEST.
+	(value_virtual_fn_field): Expand parameter OFFSET to LONGEST.
+	(value_rtti_type): Expand parameter TOP to point to LONGEST.
+	* cp-abi.h (value_virtual_fn_field): Expand OFFSET to LONGEST.
+	(value_rtti_type): Expand TOP to point to LONGEST.
+	(baseclass_offset): Return LONGEST.  Expand parameter
+	EMBEDDED_OFFSET to LONGEST.
+	(struct cp_abi_ops): Expand parameter OFFSET for VIRTUAL_FN_FIELD
+	to LONGEST.  Expand parameter TOP to point to LONGEST in
+	VALUE_RTTI_TYPE.  Return LONGEST from BASECLASS_OFFSET and expand
+	parameter EMBEDDED_OFFSET to LONGEST.
+	* cp-valprint.c (cp_print_value_fields): Expand parameter OFFSET
+	to LONGEST.  Expand I_OFFSET to LONGEST.
+	(cp_print_value_fields_rtti): Expand parameter OFFSET to
+	LONGEST.  Expand TOP to LONGEST.
+	(cp_print_value): Expand parameter OFFSET to LONGEST.  Expand
+	THISOFFSET, BOFFSET to LONGEST.
+	* d-lang.h (d_val_print): Expand parameter EMBEDDED_OFFSET to
+	LONGEST.
+	* d-valprint.c (dynamic_array_type): Likewise.
+	(d_val_print): Likewise.
+	* doublest.c (floatformat_from_length): Expand parameter LEN to
+	LONGEST.  Use plongest to format string for LONGEST.
+	* dwarf2loc.c (copy_bitwise): Expand parameters DEST_OFFSET_BITS,
+	BIT_COUNT to ULONGEST.  Rename parameter SOURCE_OFFSET_BITS to
+	SOURCE_OFFSET and expand to ULONGEST.  New variable
+	SOURCE_OFFSET_BITS.
+	(read_pieced_value): Expand OFFSET, DEST_OFFSET_BITS,
+	SOURCE_OFFSET_BITS, SOURCE_OFFSET to LONGEST.  Expand TYPE_LEN,
+	THIS_SIZE, THIS_SIZE_BITS to ULONGEST.
+	(write_pieced_value): Likewise.
+	(check_pieced_value_bits): Expand parameters BIT_OFFSET and
+	BIT_LENGTH to LONGEST.  Expand THIS_SIZE_BITS to ULONGEST.
+	(check_pieced_value_validity): Expand parameters BIT_OFFSET and
+	BIT_LENGTH to LONGEST.
+	(check_pieced_synthetic_pointer): Likewise.
+	(indirect_pieced_value): Expand BIT_LENGTH, BYTE_OFFSET and
+	BIT_OFFSET to LONGEST.
+	(dwarf2_evaluate_loc_desc_full): Expand N to ULONGEST.
+	* dwarf2read.c (dwarf2_const_value_length_mismatch_complaint):
+	Expand parameters ARG2 and ARG3 to LONGEST.  Use plongest to
+	print ARG2 and ARG3.
+	(dwarf2_add_field): Expand ANONYMOUS_SIZE, BIT_OFFSET to
+	LONGEST.
+	* eval.c (evaluate_struct_tuple): Expand BITPOS to LONGEST.
+	(init_array_element): Expand ELEMENT_SIZE to LONGEST.
+	(binop_promote): Expand PROMOTED_LEN1, PROMOTED_LEN2, RESULT_LEN
+	to ULONGEST.
+	(evaluate_subexp_standard): Expand MEM_OFFSET, TOP, ELEMENT_SIZE
+	to LONGEST.
+	* f-lang.c (f_printstr): Expand parameter LENGTH to ULONGEST.
+	* f-lang.h (f_val_print): Expand parameter EMBEDDED_OFFSET to
+	LONGEST.
+	* f-valprint.c (f77_array_offset_tbl): Make LONGEST.
+	(f77_create_arrayprint_offset_tbl): Expand ELTLEN to LONGEST.
+	(f77_print_array_1): Expand parameter EMBEDDED_OFFSET to
+	LONGEST.  Expand I to LONGEST.
+	(f77_print_array): Expand parameter EMBEDDED_OFFSET to LONGEST.
+	(f_val_print): Likewise.  Expand OFFSET to LONGEST.
+	* findvar.c (default_value_from_register): Expand LEN to LONGEST.
+	(read_frame_register_value): Expand OFFSET, REG_OFFSET, LEN,
+	REG_LEN to LONGEST.
+	* frame.c (get_frame_register_bytes): Expand parameter LEN to
+	LONGEST.
+	* frame.h (get_frame_register_bytes): Likewise.
+	* gdbtypes.c (init_type): Expand parameter LENGTH to LONGEST.
+	(is_unique_ancestor_worker): Expand parameters OFFSET,
+	EMBEDDED_OFFSET to LONGEST.  Expand THIS_OFFSET to LONGEST.
+	(is_unique_ancestor): Expand OFFSET to LONGEST.
+	(recursive_dump_type): Use pulongest to format print TYPE_LENGTH.
+	Use plongest to format print TYPE_FIELD_BITPOS.
+	(arch_type): Expand parameter LENGTH to LONGEST.
+	* gdbtypes.h (struct type.main_type.fld_bnds.fields): Expand
+	member BITPOS to LONGEST.
+	(struct type): Expand member LENGTH to ULONGEST.
+	(init_type): Expand parameter LENGTH to LONGEST.
+	(arch_type): Likewise.
+	* gnu-v2-abi.c (gnuv2_virtual_fn_field): Expand parameter OFFSET
+	to LONGEST.
+	(gnuv2_value_rtti_type): Expand parameter TOP to point to LONGEST.
+	(gnuv2_baseclass_offset): Return LONGEST.  Expand parameter
+	EMBEDDED_OFFSET to LONGEST.  Expand FIELD_OFFSET, BOFFSET,
+	FIELD_LENGTH to LONGEST.
+	* gnu-v3-abi.c (build_gdb_vtable_type): Expand OFFSET to LONGEST.
+	(vtable_address_point_offset): Return LONGEST.
+	(gnuv3_rtti_type): Expand parameter TOP_P to point to LONGEST.
+	(gnuv3_virtual_fn_field): Expand parameter OFFSET to LONGEST.
+	(gnuv3_baseclass_offset): Return LONGEST.  Expand parameter
+	EMBEDDED_OFSET to LONGEST.  Expand CUR_BASE_OFFSET, BASE_OFFSET to
+	LONGEST.
+	(gnuv3_find_method_in): Expand POS to LONGEST.
+	* go-lang.h (go_val_print): Expand parameter EMBEDDED_OFFSET to
+	LONGEST.
+	* go-valprint.c (print_go_string): Likewise.
+	(go_val_print): Likewise.
+	* i386-nat.c (i386_handle_nonaligned_watchpoint): Expand
+	parameter LEN to LONGEST.
+	(i386_region_ok_for_watchpoint): Likewise.
+	* inf-ttrace.c (inf_ttrace_region_ok_for_hw_watchpoint): Expand
+	parameter LEN to LONGEST.
+	* jv-lang.c (java_link_class_type): Expand BOFFSET to LONGEST.
+	(java_printstr): Expand parameter LENGTH to ULONGEST.
+	* jv-lang.h (java_val_print): Expand parameter EMBEDDED_OFFSET to
+	LONGEST.
+	* jv-valprint.c (java_print_value_fields): Expand parameter OFFSET
+	to LONGEST.
+	(java_val_print): Expand parameter EMBEDDED_OFFSET to LONGEST.
+	* language.c (unk_lang_printstr): Expand parameter LENGTH to
+	ULONGEST.
+	(unk_lang_val_print): Expand parameter EMBEDDED_OFFSET to LONGEST.
+	* language.h (language_defn): Expand parameter LENGTH of
+	LA_PRINTSTR to ULONGEST.  Expand parameter EMBEDDED_OFFSET of
+	LA_VAL_PRINT to LONGEST.
+	* m2-lang.c (m2_printstr): Expand parameter LENGTH to ULONGEST.
+	Expand I, REP1, REPS to ULONGEST.  Use pulongest to format print
+	REPS.
+	* m2-lang.h (m2_val_print): Expand parameter embedded_offset to
+	LONGEST.
+	* m2-typeprint.c (m2_array): New variable VAL.  Use pulongest to
+	* format print VAL.
+	(m2_enum): expand LASTVAL to LONGEST.
+	* m2-valprint.c (m2_print_long_set): Expand parameter
+	EMBEDDED_OFFSET to LONGEST.
+	(m2_print_unbounded_array): Likewise.
+	(m2_print_array_contents): Likewise.
+	(m2_val_print): Expand parameter EMBEDDED_OFFSET to LONGEST.
+	Expand I, LEN, TEMP_LEN to ULONGEST.
+	* memrange.c (mem_ranges_overlap): Expand parameters LEN1, LEN2 to
+	LONGEST.
+	* memrange.h (struct mem_range): Expand member LENGTH to LONGEST.
+	(mem_ranges_overlap): Expand parameters LEN1, LEN2 to LONGEST.
+	* mips-linux-nat.c (mips_linux_region_ok_for_hw_watchpoint):
+	Expand parameter LEN to LONGEST.
+	* objc-lang.c (objc_printstr): Expand parameter LENGTH to
+	ULONGEST.  Expand I, REP1, REPS to ULONGEST.  use pulongest to
+	format print REPS.
+	* opencl-lang.c (lookup_opencl_vector_type): Expand parameter
+	EL_LENGTH to ULONGEST.  Expand LENGTH to ULONGEST.
+	(lval_func_read): Expand OFFSET, N, I, J and ELSIZE to LONGEST.
+	(lval_func_write): Likewise.
+	(lval_func_check_validity): Expand parameter LENGTH to LONGEST.
+	Expand ELSIZE, START, END, I, STARTREST, ENDREST, COMP_OFFSET,
+	COMP_LENGTH to LONGEST.
+	(lval_func_check_any_valid): Expand ELSIZE to LONGEST.
+	(lval_func_check_synthetic_pointer): Expand parameters OFFSET and
+	LENGTH to LONGEST.  Expand ELSIZE, START, END, I, STARTREST,
+	ENDREST, COMP_LENGTH, COMP_OFFSET to LONGEST.
+	* p-lang.c (is_pascal_string_type): Expand parameters LENGTH_POS,
+	STRING_POS, LENGTH_SIZE to point to LONGEST.
+	(pascal_printstr): Expand parameter LENGTH to ULONGEST.  Expand
+	I, REP1, REPS to ULONGEST.  Use pulongest to format print REPS.
+	* p-lang.h (pascal_val_print): Expand parameter EMBEDDED_OFFSET
+	to LONGEST.
+	(is_pascal_string_type): Expand parameters LENGTH_POS, STRING_POS,
+	LENGTH_SIZE to point to LONGEST.
+	(pascal_printstr): Expand parameter LENGTH to ULONGEST.
+	(pascal_object_print_value_fields): Expand parameter OFFSET to
+	LONGEST.
+	* p-valprint.c (pascal_val_print): Expand parameter
+	EMBEDDED_OFFSET to LONGEST.  Expand ELTLEN to ULONGEST.  Expand
+	LENGTH_SIZE, LENGTH_POS, STRING_POS to LONGEST.
+	(pascal_object_print_value_fields): Expand parameter OFFSET to
+	LONGEST.
+	(pascal_object_print_value): Likewise.  Expand BOFFSET,
+	THISOFFSET to LONGEST.
+	* ppc-linux-nat.c (ppc_linux_region_ok_for_hw_watchpoint):
+	Expand parameter LEN to point to LONGEST.
+	* printcmd.c (print_formatted): Expand LEN to LONGEST.
+	(print_scalar_formatted): Likewise.
+	* procfs.c (procfs_region_ok_for_hw_watchpoint): Expand
+	parameter LEN to LONGEST.
+	* python/py-prettyprint.c (apply_val_pretty_printer): Expand
+	parameter EMBEDDED_OFFSET to LONGEST.
+	* python/python.h (apply_val_pretty_printer): Likewise.
+	* regcache.c (regcache_xfer_part): Expand parameter OFFSET to
+	LONGEST.
+	(regcache_raw_read_part): Likewise.
+	(regcache_raw_write_part): Likewise.
+	(regcache_cooked_read_part): Likewise.
+	(regcache_cooked_write_part): Likewise.
+	* regcache.h (regcache_raw_read_part): Likewise.
+	(regcache_raw_write_part): Likewise.
+	(regcache_cooked_read_part): Likewise.
+	(regcache_cooked_write_part): Likewise.
+	* remote.c (remote_region_ok_for_hw_watchpoint): Expand
+	parameter LEN to LONGEST.
+	* s390-nat.c (s390_region_ok_for_hw_watchpoint): Expand
+	parameter LEN to LONGEST.
+	* spu-multiarch.c (spu_region_ok_for_hw_watchpoint): Expand
+	parameter len to LONGEST.
+	* stack.c (print_frame_nameless_args): Expand parameter START to
+	LONGEST.
+	(print_frame_args): Expand HIGHEST_OFFSET, CURRENT_OFFSET,
+	ARG_SIZE, START to LONGEST.
+	* symmisc.c (print_symbol): Expand I to ULONGEST.  Use pulongest
+	to format print TYPE_LENGTH.
+	* target.c (default_region_ok_for_hw_watchpoint): Expand parameter
+	LEN to LONGEST.
+	(debug_to_region_ok_for_hw_watchpoint): Likewise.
+	* target.h (struct target_ops): Expand parameter LEN to LONGEST
+	for TO_REGION_OK_FOR_HW_WATCHPOINT.
+	* tracepoint.c (add_memrange): Expand parameter LEN to LONGEST.
+	Use plongest to format print LEN.
+	(collect_symbol): Expand LEN to ULONGEST.  Use pulongest to
+	format print LEN.
+	(scope_info): Expand J to LONGEST.  Use pulongest to format
+	print TYPE_LENGTH.
+	* typeprint.c (whatis_exp): Expand TOP to LONGEST.
+	* valarith.c (value_subscripted_rvalue): Expand parameters INDEX
+	and LOWERBOUND to LONGEST.  Expand ELT_SIZE, ELT_OFFS to ULONGEST.
+	(value_concat): expand INVAL1LEN and INVAL2LEN to ssize_t.
+	(value_logical_not): Expand LEN to LONGEST.
+	(value_strcmp): Expand LEN1, LEN2, I, LEN to LONGEST.
+	* valops.c (value_allocate_space_in_inferior): Expand parameter
+	LEN to LONGEST.
+	(value_cast_structs): Expand TOP to LONGEST.
+	(value_cast): Expand ELEMENT_LENGTH to ULONGEST.  Expand
+	VAL_LENGTH to LONGEST.
+	(dynamic_cast_check_1): Expand parameter EMBEDDED_OFFSET to
+	LONGEST.  Expand OFFSET to LONGEST.
+	(dynamic_cast_check_2): Likewise.
+	(value_dynamic_cast): Expand TOP to LONGEST.
+	(read_value_memory): Expand EMBEDDED_OFFSET to LONGEST.
+	(value_assign): Expand CHANGED_LEN, OFFSET to LONGEST.
+	(value_array): Expand TYPELENGTH to ULONGEST.
+	(update_search_result): Expand parameters LAST_BOFFSET, BOFFSET
+	to LONGEST.
+	(do_search_struct_field): Expand parameter OFFSET, LAST_BOFFSET
+	to LONGEST.  Expand NEW_OFFSET, BOFFSET to LONGEST.
+	(search_struct_field): Expand parameter OFFSET to LONGEST.
+	Expand BOFFSET to LONGEST.
+	(search_struct_method): Expand parameter OFFSET to LONGEST.
+	Expand BASE_OFFSET, THIS_OFFSET to LONGEST.
+	(find_method_list): Expand parameters OFFSET, BOFFSET to
+	LONGEST.  Expand BASE_OFFSET to LONGEST.
+	(value_find_oload_method_list): Expand parameter BOFFSET to point
+	to LONGEST.
+	(find_overload_match): Expand BOFFSET to LONGEST.
+	(value_struct_elt_for_reference): Expand parameter OFFSET to
+	LONGEST.  Remove unneeded cast.  Expand BASE_OFFSET to LONGEST.
+	(value_rtti_indirect_type): Expand parameter TOP to point to
+	LONGEST.
+	(value_full_object): Expand parameter XTOP to LONGEST.  Expand
+	TOP to LONGEST.
+	* valprint.c (valprint_check_validity): Expand parameter
+	EMBEDDED_OFFSET to LONGEST.
+	(generic_val_print): Likewise.
+	(val_print): Likewise.
+	(val_print_scalar_formatted): Likewise.
+	(print_hex_chars): Expand parameter LEN to ULONGEST.
+	(val_print_array_elements): Expand parameter EMBEDDED_OFFSET to
+	LONGEST, I to ULONGEST.  Expand LEN, ELTLEN, REP1, REPS to
+	ULONGEST.  Use pulongest to format print REPS.
+	(generic_printstr): Expand parameter LENGTH to ULONGEST.
+	* valprint.h (val_print_array_elements): Expand parameter
+	EMBEDDED_OFFSET to LONGEST.
+	(val_print_scalar_formatted): Likewise.
+	(print_hex_chars): Expand parameter LEN to ULONGEST.
+	(generic_val_print): Expand parameter EMBEDDED_OFFSET to LONGEST.
+	(generic_printstr): Expand parameter LENGTH to ULONGEST.
+	* value.c (struct range): Expand members OFFSET, LENGTH to
+	LONGEST.
+	(ranges_overlap): Expand parameters OFFSET1, OFFSET2, LEN1 AND
+	LEN2 to LONGEST.
+	(range_contain): Expand parameter OFFSET, LENGTH to LONGEST.
+	(struct value): Expand members OFFSET, EMBEDDED_OFFSET,
+	POINTED_TO_OFFSET to LONGEST.
+	(value_bytes_available): Expand parameters OFFSET, LENGTH to
+	LONGEST.
+	(mark_value_bytes_unavailable): Likewise.
+	(find_first_range_overlap): Likewise.
+	(value_available_contents_eq): Expand parameters OFFSET1, OFFSET2
+	and LENGTH to LONGEST.
+	(value_offset): Return LONGEST.
+	(set_value_offset): Expand parameter OFFSET to LONGEST.
+	(value_contents_copy_raw): Expand parameters SRC_OFFSET,
+	DST_OFFSET, LENGTH to ssize_t.
+	(value_contents_copy): Likewise.
+	(value_bits_valid): Expand parameters OFFSET, LENGTH to LONGEST.
+	(value_bits_synthetic_pointer): Likewise.
+	(value_embedded_offset): Return LONGEST.
+	(set_value_embedded_offset): Expand parameter VAL to LONGEST.
+	(value_pointed_to_offset): Return LONGEST.
+	(set_value_pointed_to_offset): Expand parameter VAL to LONGEST.
+	(set_internalvar_component): Expand parameter OFFSET to LONGEST.
+	(value_primitive_field): Likewise.  Expand BITPOS, BOFFSET,
+	CONTAINER_BITSIZE to LONGEST.
+	(value_fn_field): Expand parameter OFFSET to LONGEST.
+	(unpack_value_bits_as_long_1): Expand parameters EMBEDDED_OFFSET,
+	BITPOS to LONGEST.  Expand READ_OFFSET to LONGEST.
+	(unpack_value_bits_as_long): Expand parameter EMBEDED_OFFSET to
+	LONGEST.
+	(unpack_value_field_as_long_1): Likewise.  Expand BITPOS to
+	LONGEST.
+	(unpack_value_field_as_long): Expand parameter EMBEDDED_OFFSET to
+	LONGEST.
+	(value_field_bitfield): Likewise.
+	(modify_field): Expand parameter BITPOS to LONGEST.  Expand
+	BYTESIZE to LONGEST.
+	* value.h (value_offset): Return LONGEST.
+	(set_value_offset): Expand parameter OFFSET to LONGEST.
+	(value_pointed_to_offset): Return LONGEST.
+	(set_value_pointed_to_offset): Expand parameter VAL to LONGEST.
+	(value_embedded_offset): Return LONGEST.
+	(set_value_embedded_offset): Expand parameter VAL to LONGEST.
+	(struct lval_funcs): Expand parameters OFFSET and LENGTH to
+	LONGEST for CHECK_VALIDITY.  Likewise for CHECK_SYNTHETIC_POINTER.
+	(valprint_check_validity): Expand parameter EMBEDDED_OFFSET to
+	LONGEST.
+	(value_bits_valid): Expand parameters OFFSET, LENGTH to LONGEST.
+	(value_bits_synthetic_pointer): Likewise.
+	(value_bytes_available): Likewise.
+	(mark_value_bytes_unavailable): Likewise.
+	(value_available_contents_eq): Fix comment.  Expand parameters
+	OFFSET1, OFFSET2, LENGTH to LONGEST.
+	(read_value_memory): Expand parameter EMBEDDED_OFFSET to
+	LONGEST.
+	(unpack_value_bits_as_long): Expand parameter EMBEDDED_OFFSET to
+	LONGEST.
+	(unpack_value_field_as_long): Likewise.
+	(value_field_bitfield): Likewise.
+	(value_contents_copy_raw): Expand parameters SRC_OFFSET,
+	DST_OFFSET, LENGTH to LONGEST.
+	(value_contents_copy): Likewise.
+	(value_primitive_field): Expand parameter OFFSET to LONGEST.
+	(value_rtti_indirect_type): Expand parameter TOP to point to
+	LONGEST.
+	(value_full_object): Expand parameter XTOP to LONGEST.
+	(set_internalvar_component): Expand parameter OFFSET to LONGEST.
+	(value_fn_field): Expand parameter OFFSET to LONGEST.
+	(modify_field): Expand parameter BITPOS to LONGEST.
+	(val_print): Expand parameter EMBEDDED_OFFSET to LONGEST.
+	(value_allocate_space_in_inferior): Expand parameter LEN to
+	LONGEST.
+
+gdb/testsuite/ChangeLog:
+
+2012-08-05  Siddhesh Poyarekar  <siddhesh@redhat.com>
+
+	* gdb.base/longest-types.exp: Add test case to get offset of
+	BUF2.
+
+--MP_/yp5f+W_ED2JtUlSyBi8xujr
+Content-Type: text/x-patch
+Content-Transfer-Encoding: 7bit
+Content-Disposition: attachment; filename=bitpos-main.patch
+
+diff --git a/gdb/aarch64-linux-nat.c b/gdb/aarch64-linux-nat.c
+--- a/gdb/aarch64-linux-nat.c
++++ b/gdb/aarch64-linux-nat.c
+@@ -808,7 +808,7 @@ aarch64_linux_nat_target::remove_watchpoint (CORE_ADDR addr, int len,
+ /* Implement the "region_ok_for_hw_watchpoint" target_ops method.  */
+ 
+ int
+-aarch64_linux_nat_target::region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
++aarch64_linux_nat_target::region_ok_for_hw_watchpoint (CORE_ADDR addr, LONGEST len)
+ {
+   return aarch64_linux_region_ok_for_watchpoint (addr, len);
+ }
+diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
+--- a/gdb/ada-lang.c
++++ b/gdb/ada-lang.c
+@@ -78,7 +78,7 @@ static struct type *desc_bounds_type (struct type *);
+ 
+ static struct value *desc_bounds (struct value *);
+ 
+-static int fat_pntr_bounds_bitpos (struct type *);
++static LONGEST fat_pntr_bounds_bitpos (struct type *);
+ 
+ static int fat_pntr_bounds_bitsize (struct type *);
+ 
+@@ -86,13 +86,13 @@ static struct type *desc_data_target_type (struct type *);
+ 
+ static struct value *desc_data (struct value *);
+ 
+-static int fat_pntr_data_bitpos (struct type *);
++static LONGEST fat_pntr_data_bitpos (struct type *);
+ 
+ static int fat_pntr_data_bitsize (struct type *);
+ 
+ static struct value *desc_one_bound (struct value *, int, int);
+ 
+-static int desc_bound_bitpos (struct type *, int, int);
++static LONGEST desc_bound_bitpos (struct type *, int, int);
+ 
+ static int desc_bound_bitsize (struct type *, int, int);
+ 
+@@ -175,7 +175,7 @@ static struct type *static_unwrap_type (struct type *type);
+ 
+ static struct value *unwrap_value (struct value *);
+ 
+-static struct type *constrained_packed_array_type (struct type *, long *);
++static struct type *constrained_packed_array_type (struct type *, LONGEST *);
+ 
+ static struct type *decode_constrained_packed_array_type (struct type *);
+ 
+@@ -190,7 +190,8 @@ static int ada_is_unconstrained_packed_array_type (struct type *);
+ static struct value *value_subscript_packed (struct value *, int,
+                                              struct value **);
+ 
+-static void move_bits (gdb_byte *, int, const gdb_byte *, int, int, int);
++static void move_bits (gdb_byte *, int, const gdb_byte *, LONGEST, LONGEST,
++		       int);
+ 
+ static struct value *coerce_unspec_val_to_type (struct value *,
+                                                 struct type *);
+@@ -216,14 +217,14 @@ static struct value *value_val_atr (struct type *, struct value *);
+ static struct symbol *standard_lookup (const char *, const struct block *,
+                                        domain_enum);
+ 
+-static struct value *ada_search_struct_field (const char *, struct value *, int,
++static struct value *ada_search_struct_field (const char *, struct value *, LONGEST,
+                                               struct type *);
+ 
+-static struct value *ada_value_primitive_field (struct value *, int, int,
++static struct value *ada_value_primitive_field (struct value *, LONGEST, int,
+                                                 struct type *);
+ 
+-static int find_struct_field (const char *, struct type *, int,
+-                              struct type **, int *, int *, int *, int *);
++static int find_struct_field (const char *, struct type *, LONGEST,
++                              struct type **, LONGEST *, int *, int *, int *);
+ 
+ static int ada_resolve_function (struct block_symbol *, int,
+                                  struct value **, int, const char *,
+@@ -234,7 +235,7 @@ static int ada_is_direct_array_type (struct type *);
+ static void ada_language_arch_info (struct gdbarch *,
+ 				    struct language_arch_info *);
+ 
+-static struct value *ada_index_struct_field (int, struct value *, int,
++static struct value *ada_index_struct_field (LONGEST, struct value *, LONGEST,
+ 					     struct type *);
+ 
+ static struct value *assign_aggregate (struct value *, struct value *, 
+@@ -697,7 +698,7 @@ coerce_unspec_val_to_type (struct value *val, struct type *type)
+ }
+ 
+ static const gdb_byte *
+-cond_offset_host (const gdb_byte *valaddr, long offset)
++cond_offset_host (const gdb_byte *valaddr, LONGEST offset)
+ {
+   if (valaddr == NULL)
+     return NULL;
+@@ -706,7 +707,7 @@ cond_offset_host (const gdb_byte *valaddr, long offset)
+ }
+ 
+ static CORE_ADDR
+-cond_offset_target (CORE_ADDR address, long offset)
++cond_offset_target (CORE_ADDR address, LONGEST offset)
+ {
+   if (address == 0)
+     return 0;
+@@ -1743,7 +1744,7 @@ desc_bounds (struct value *arr)
+ /* If TYPE is the type of an array-descriptor (fat pointer),  the bit
+    position of the field containing the address of the bounds data.  */
+ 
+-static int
++static LONGEST
+ fat_pntr_bounds_bitpos (struct type *type)
+ {
+   return TYPE_FIELD_BITPOS (desc_base_type (type), 1);
+@@ -1809,7 +1810,7 @@ desc_data (struct value *arr)
+ /* If TYPE is the type of an array-descriptor (fat pointer), the bit
+    position of the field containing the address of the data.  */
+ 
+-static int
++static LONGEST
+ fat_pntr_data_bitpos (struct type *type)
+ {
+   return TYPE_FIELD_BITPOS (desc_base_type (type), 0);
+@@ -1844,7 +1845,7 @@ desc_one_bound (struct value *bounds, int i, int which)
+    of the Ith lower bound stored in it, if WHICH is 0, and the Ith upper
+    bound, if WHICH is 1.  The first bound is I=1.  */
+ 
+-static int
++static LONGEST
+ desc_bound_bitpos (struct type *type, int i, int which)
+ {
+   return TYPE_FIELD_BITPOS (desc_base_type (type), 2 * i + which - 2);
+@@ -2034,7 +2035,7 @@ ada_type_of_array (struct value *arr, int bounds)
+ 	         zero, and does not need to be recomputed.  */
+ 	      if (lo < hi)
+ 		{
+-		  int array_bitsize =
++		  LONGEST array_bitsize =
+ 		        (hi - lo + 1) * TYPE_FIELD_BITSIZE (elt_type, 0);
+ 
+ 		  TYPE_LENGTH (array_type) = (array_bitsize + 7) / 8;
+@@ -2194,7 +2195,7 @@ decode_packed_array_bitsize (struct type *type)
+    the length is arbitrary.  */
+ 
+ static struct type *
+-constrained_packed_array_type (struct type *type, long *elt_bits)
++constrained_packed_array_type (struct type *type, LONGEST *elt_bits)
+ {
+   struct type *new_elt_type;
+   struct type *new_type;
+@@ -2248,7 +2249,7 @@ decode_constrained_packed_array_type (struct type *type)
+   char *name;
+   const char *tail;
+   struct type *shadow_type;
+-  long bits;
++  LONGEST bits;
+ 
+   if (!raw_name)
+     raw_name = ada_type_name (desc_base_type (type));
+@@ -2319,7 +2320,8 @@ decode_constrained_packed_array (struct value *arr)
+  	 array with no wrapper.  In order to interpret the value through
+  	 the (left-justified) packed array type we just built, we must
+  	 first left-justify it.  */
+-      int bit_size, bit_pos;
++      int bit_size;
++      LONGEST bit_pos;
+       ULONGEST mod;
+ 
+       mod = ada_modulus (value_type (arr)) - 1;
+@@ -2547,7 +2549,7 @@ ada_unpack_from_contents (const gdb_byte *src, int bit_offset, int bit_size,
+ 
+ struct value *
+ ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
+-				long offset, int bit_offset, int bit_size,
++				LONGEST offset, int bit_offset, int bit_size,
+                                 struct type *type)
+ {
+   struct value *v;
+@@ -2617,7 +2619,7 @@ ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
+ 
+   if (obj != NULL)
+     {
+-      long new_offset = offset;
++      LONGEST new_offset = offset;
+ 
+       set_value_component_location (v, obj);
+       set_value_bitpos (v, bit_offset + value_bitpos (obj));
+@@ -2663,7 +2665,7 @@ ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
+    not overlap.  */
+ static void
+ move_bits (gdb_byte *target, int targ_offset, const gdb_byte *source,
+-	   int src_offset, int n, int bits_big_endian_p)
++	   LONGEST src_offset, LONGEST n, int bits_big_endian_p)
+ {
+   unsigned int accum, mask;
+   int accum_bits, chunk_size;
+@@ -2753,7 +2755,7 @@ ada_value_assign (struct value *toval, struct value *fromval)
+     {
+       int len = (value_bitpos (toval)
+ 		 + bits + HOST_CHAR_BIT - 1) / HOST_CHAR_BIT;
+-      int from_size;
++      LONGEST from_size;
+       gdb_byte *buffer = (gdb_byte *) alloca (len);
+       struct value *val;
+       CORE_ADDR to_addr = value_address (toval);
+@@ -2804,7 +2806,7 @@ value_assign_to_component (struct value *container, struct value *component,
+     (LONGEST)  (value_address (component) - value_address (container));
+   int bit_offset_in_container =
+     value_bitpos (component) - value_bitpos (container);
+-  int bits;
++  LONGEST bits;
+ 
+   val = value_cast (value_type (component), val);
+ 
+@@ -4462,7 +4464,7 @@ ensure_lval (struct value *val)
+   if (VALUE_LVAL (val) == not_lval
+       || VALUE_LVAL (val) == lval_internalvar)
+     {
+-      int len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
++      LONGEST len = TYPE_LENGTH (ada_check_typedef (value_type (val)));
+       const CORE_ADDR addr =
+         value_as_long (value_allocate_space_in_inferior (len));
+ 
+@@ -4546,7 +4548,7 @@ static CORE_ADDR
+ value_pointer (struct value *value, struct type *type)
+ {
+   struct gdbarch *gdbarch = get_type_arch (type);
+-  unsigned len = TYPE_LENGTH (type);
++  ULONGEST len = TYPE_LENGTH (type);
+   gdb_byte *buf = (gdb_byte *) alloca (len);
+   CORE_ADDR addr;
+ 
+@@ -6657,7 +6659,7 @@ value_tag_from_contents_and_address (struct type *type,
+ 				     const gdb_byte *valaddr,
+                                      CORE_ADDR address)
+ {
+-  int tag_byte_offset;
++  LONGEST tag_byte_offset;
+   struct type *tag_type;
+ 
+   if (find_struct_field ("_tag", type, 0, &tag_type, &tag_byte_offset,
+@@ -7150,7 +7152,7 @@ ada_in_variant (LONGEST val, struct type *type, int field_num)
+    only in that it can handle packed values of arbitrary type.  */
+ 
+ static struct value *
+-ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
++ada_value_primitive_field (struct value *arg1, LONGEST offset, int fieldno,
+                            struct type *arg_type)
+ {
+   struct type *type;
+@@ -7162,7 +7164,7 @@ ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
+ 
+   if (TYPE_FIELD_BITSIZE (arg_type, fieldno) != 0)
+     {
+-      int bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
++      LONGEST bit_pos = TYPE_FIELD_BITPOS (arg_type, fieldno);
+       int bit_size = TYPE_FIELD_BITSIZE (arg_type, fieldno);
+ 
+       return ada_value_primitive_packed_val (arg1, value_contents (arg1),
+@@ -7239,9 +7241,9 @@ ada_value_primitive_field (struct value *arg1, int offset, int fieldno,
+    Returns 1 if found, 0 otherwise.  */
+ 
+ static int
+-find_struct_field (const char *name, struct type *type, int offset,
++find_struct_field (const char *name, struct type *type, LONGEST offset,
+                    struct type **field_type_p,
+-                   int *byte_offset_p, int *bit_offset_p, int *bit_size_p,
++		   LONGEST *byte_offset_p, int *bit_offset_p, int *bit_size_p,
+ 		   int *index_p)
+ {
+   int i;
+@@ -7260,8 +7262,8 @@ find_struct_field (const char *name, struct type *type, int offset,
+ 
+   for (i = 0; i < TYPE_NFIELDS (type); i += 1)
+     {
+-      int bit_pos = TYPE_FIELD_BITPOS (type, i);
+-      int fld_offset = offset + bit_pos / 8;
++      LONGEST bit_pos = TYPE_FIELD_BITPOS (type, i);
++      LONGEST fld_offset = offset + bit_pos / 8;
+       const char *t_field_name = TYPE_FIELD_NAME (type, i);
+ 
+       if (t_field_name == NULL)
+@@ -7363,7 +7365,7 @@ num_visible_fields (struct type *type)
+    long explanation in find_struct_field's function documentation.  */
+ 
+ static struct value *
+-ada_search_struct_field (const char *name, struct value *arg, int offset,
++ada_search_struct_field (const char *name, struct value *arg, LONGEST offset,
+                          struct type *type)
+ {
+   int i;
+@@ -7411,7 +7413,7 @@ ada_search_struct_field (const char *name, struct value *arg, int offset,
+           int j;
+           struct type *field_type = ada_check_typedef (TYPE_FIELD_TYPE (type,
+ 									i));
+-          int var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
++	  LONGEST var_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
+ 
+           for (j = 0; j < TYPE_NFIELDS (field_type); j += 1)
+             {
+@@ -7443,8 +7445,8 @@ ada_search_struct_field (const char *name, struct value *arg, int offset,
+   return NULL;
+ }
+ 
+-static struct value *ada_index_struct_field_1 (int *, struct value *,
+-					       int, struct type *);
++static struct value *ada_index_struct_field_1 (LONGEST *, struct value *,
++					       LONGEST, struct type *);
+ 
+ 
+ /* Return field #INDEX in ARG, where the index is that returned by
+@@ -7453,7 +7455,7 @@ static struct value *ada_index_struct_field_1 (int *, struct value *,
+  * If found, return value, else return NULL.  */
+ 
+ static struct value *
+-ada_index_struct_field (int index, struct value *arg, int offset,
++ada_index_struct_field (LONGEST index, struct value *arg, LONGEST offset,
+ 			struct type *type)
+ {
+   return ada_index_struct_field_1 (&index, arg, offset, type);
+@@ -7465,7 +7467,7 @@ ada_index_struct_field (int index, struct value *arg, int offset,
+  * *INDEX_P.  */
+ 
+ static struct value *
+-ada_index_struct_field_1 (int *index_p, struct value *arg, int offset,
++ada_index_struct_field_1 (LONGEST *index_p, struct value *arg, LONGEST offset,
+ 			  struct type *type)
+ {
+   int i;
+@@ -7555,7 +7557,8 @@ ada_value_struct_elt (struct value *arg, const char *name, int no_err)
+     v = ada_search_struct_field (name, arg, 0, t);
+   else
+     {
+-      int bit_offset, bit_size, byte_offset;
++      int bit_offset, bit_size;
++      LONGEST byte_offset;
+       struct type *field_type;
+       CORE_ADDR address;
+ 
+@@ -7899,8 +7902,8 @@ ada_coerce_ref (struct value *val0)
+ /* Return OFF rounded upward if necessary to a multiple of
+    ALIGNMENT (a power of 2).  */
+ 
+-static unsigned int
+-align_value (unsigned int off, unsigned int alignment)
++static ULONGEST
++align_value (ULONGEST off, ULONGEST alignment)
+ {
+   return (off + alignment - 1) & ~(alignment - 1);
+ }
+@@ -8290,10 +8293,9 @@ ada_template_to_fixed_record_type_1 (struct type *type,
+   struct value *mark = value_mark ();
+   struct value *dval;
+   struct type *rtype;
+-  int nfields, bit_len;
++  int nfields;
+   int variant_field;
+-  long off;
+-  int fld_bit_len;
++  LONGEST off, bit_len, fld_bit_len;
+   int f;
+ 
+   /* Compute the number of fields in this record type that are going
+@@ -8370,7 +8372,7 @@ ada_template_to_fixed_record_type_1 (struct type *type,
+ 	     that follow this one.  */
+ 	  if (ada_is_aligner_type (field_type))
+ 	    {
+-	      long field_offset = TYPE_FIELD_BITPOS (field_type, f);
++	      LONGEST field_offset = TYPE_FIELD_BITPOS (field_type, f);
+ 
+ 	      field_valaddr = cond_offset_host (field_valaddr, field_offset);
+ 	      field_address = cond_offset_target (field_address, field_offset);
+@@ -8506,11 +8508,11 @@ ada_template_to_fixed_record_type_1 (struct type *type,
+   if (TYPE_LENGTH (type) <= 0)
+     {
+       if (TYPE_NAME (rtype))
+-	warning (_("Invalid type size for `%s' detected: %d."),
+-		 TYPE_NAME (rtype), TYPE_LENGTH (type));
++	warning (_("Invalid type size for `%s' detected: %s."),
++		 TYPE_NAME (rtype), pulongest (TYPE_LENGTH (type)));
+       else
+-	warning (_("Invalid type size for <unnamed> detected: %d."),
+-		 TYPE_LENGTH (type));
++	warning (_("Invalid type size for <unnamed> detected: %s."),
++		 pulongest (TYPE_LENGTH (type)));
+     }
+   else
+     {
+@@ -8974,7 +8976,8 @@ to_fixed_array_type (struct type *type0, struct value *dval,
+ 	 type was a regular (non-packed) array type.  As a result, the
+ 	 bitsize of the array elements needs to be set again, and the array
+ 	 length needs to be recomputed based on that bitsize.  */
+-      int len = TYPE_LENGTH (result) / TYPE_LENGTH (TYPE_TARGET_TYPE (result));
++      LONGEST len = (TYPE_LENGTH (result)
++		     / TYPE_LENGTH (TYPE_TARGET_TYPE (result)));
+       int elt_bitsize = TYPE_FIELD_BITSIZE (type0, 0);
+ 
+       TYPE_FIELD_BITSIZE (result, 0) = TYPE_FIELD_BITSIZE (type0, 0);
+diff --git a/gdb/ada-lang.h b/gdb/ada-lang.h
+--- a/gdb/ada-lang.h
++++ b/gdb/ada-lang.h
+@@ -173,7 +173,7 @@ extern void ada_print_type (struct type *, const char *, struct ui_file *, int,
+ extern void ada_print_typedef (struct type *type, struct symbol *new_symbol,
+ 			       struct ui_file *stream);
+ 
+-extern void ada_val_print (struct type *, int, CORE_ADDR,
++extern void ada_val_print (struct type *, LONGEST, CORE_ADDR,
+ 			   struct ui_file *, int,
+ 			   struct value *,
+ 			   const struct value_print_options *);
+@@ -188,7 +188,7 @@ extern void ada_emit_char (int, struct type *, struct ui_file *, int, int);
+ extern void ada_printchar (int, struct type *, struct ui_file *);
+ 
+ extern void ada_printstr (struct ui_file *, struct type *, const gdb_byte *,
+-			  unsigned int, const char *, int,
++			  ULONGEST, const char *, int,
+ 			  const struct value_print_options *);
+ 
+ struct value *ada_convert_actual (struct value *actual,
+@@ -261,7 +261,7 @@ extern int ada_is_constrained_packed_array_type (struct type *);
+ 
+ extern struct value *ada_value_primitive_packed_val (struct value *,
+ 						     const gdb_byte *,
+-                                                     long, int, int,
++						     LONGEST, int, int,
+                                                      struct type *);
+ 
+ extern struct type *ada_coerce_to_simple_array_type (struct type *);
+diff --git a/gdb/ada-typeprint.c b/gdb/ada-typeprint.c
+--- a/gdb/ada-typeprint.c
++++ b/gdb/ada-typeprint.c
+@@ -896,8 +896,8 @@ ada_print_type (struct type *type0, const char *varstring,
+ 	    const char *name = ada_type_name (type);
+ 
+ 	    if (!ada_is_range_type_name (name))
+-	      fprintf_filtered (stream, _("<%d-byte integer>"),
+-				TYPE_LENGTH (type));
++	      fprintf_filtered (stream, _("<%s-byte integer>"),
++				pulongest (TYPE_LENGTH (type)));
+ 	    else
+ 	      {
+ 		fprintf_filtered (stream, "range ");
+@@ -918,7 +918,8 @@ ada_print_type (struct type *type0, const char *varstring,
+ 	  }
+ 	break;
+       case TYPE_CODE_FLT:
+-	fprintf_filtered (stream, _("<%d-byte float>"), TYPE_LENGTH (type));
++	fprintf_filtered (stream, _("<%s-byte float>"),
++			  pulongest (TYPE_LENGTH (type)));
+ 	break;
+       case TYPE_CODE_ENUM:
+ 	if (show < 0)
+diff --git a/gdb/ada-valprint.c b/gdb/ada-valprint.c
+--- a/gdb/ada-valprint.c
++++ b/gdb/ada-valprint.c
+@@ -34,11 +34,11 @@
+ #include "target-float.h"
+ 
+ static int print_field_values (struct type *, const gdb_byte *,
+-			       int,
++			       LONGEST,
+ 			       struct ui_file *, int,
+ 			       struct value *,
+ 			       const struct value_print_options *,
+-			       int, struct type *, int,
++			       int, struct type *, LONGEST,
+ 			       const struct language_defn *);
+ 
+ 
+@@ -316,7 +316,7 @@ ada_emit_char (int c, struct type *type, struct ui_file *stream,
+    of a character.  */
+ 
+ static int
+-char_at (const gdb_byte *string, int i, int type_len,
++char_at (const gdb_byte *string, LONGEST i, int type_len,
+ 	 enum bfd_endian byte_order)
+ {
+   if (type_len == 1)
+@@ -476,11 +476,11 @@ ada_print_scalar (struct type *type, LONGEST val, struct ui_file *stream)
+ 
+ static void
+ printstr (struct ui_file *stream, struct type *elttype, const gdb_byte *string,
+-	  unsigned int length, int force_ellipses, int type_len,
++	  ULONGEST length, int force_ellipses, int type_len,
+ 	  const struct value_print_options *options)
+ {
+   enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (elttype));
+-  unsigned int i;
++  ULONGEST i;
+   unsigned int things_printed = 0;
+   int in_quotes = 0;
+   int need_comma = 0;
+@@ -495,9 +495,9 @@ printstr (struct ui_file *stream, struct type *elttype, const gdb_byte *string,
+     {
+       /* Position of the character we are examining
+          to see whether it is repeated.  */
+-      unsigned int rep1;
++      ULONGEST rep1;
+       /* Number of repetitions we have detected so far.  */
+-      unsigned int reps;
++      ULONGEST reps;
+ 
+       QUIT;
+ 
+@@ -528,7 +528,8 @@ printstr (struct ui_file *stream, struct type *elttype, const gdb_byte *string,
+ 	  ada_emit_char (char_at (string, i, type_len, byte_order),
+ 			 elttype, stream, '\'', type_len);
+ 	  fputs_filtered ("'", stream);
+-	  fprintf_filtered (stream, _(" <repeats %u times>"), reps);
++	  fprintf_filtered (stream, _(" <repeats %s times>"),
++			    pulongest (reps));
+ 	  i = rep1 - 1;
+ 	  things_printed += options->repeat_count_threshold;
+ 	  need_comma = 1;
+@@ -556,7 +557,7 @@ printstr (struct ui_file *stream, struct type *elttype, const gdb_byte *string,
+ 
+ void
+ ada_printstr (struct ui_file *stream, struct type *type,
+-	      const gdb_byte *string, unsigned int length,
++	      const gdb_byte *string, ULONGEST length,
+ 	      const char *encoding, int force_ellipses,
+ 	      const struct value_print_options *options)
+ {
+@@ -566,12 +567,12 @@ ada_printstr (struct ui_file *stream, struct type *type,
+ 
+ static int
+ print_variant_part (struct type *type, int field_num,
+-		    const gdb_byte *valaddr, int offset,
++		    const gdb_byte *valaddr, LONGEST offset,
+ 		    struct ui_file *stream, int recurse,
+ 		    struct value *val,
+ 		    const struct value_print_options *options,
+ 		    int comma_needed,
+-		    struct type *outer_type, int outer_offset,
++		    struct type *outer_type, LONGEST outer_offset,
+ 		    const struct language_defn *language)
+ {
+   struct type *var_type = TYPE_FIELD_TYPE (type, field_num);
+@@ -607,11 +608,11 @@ print_variant_part (struct type *type, int field_num,
+ 
+ static int
+ print_field_values (struct type *type, const gdb_byte *valaddr,
+-		    int offset, struct ui_file *stream, int recurse,
++		    LONGEST offset, struct ui_file *stream, int recurse,
+ 		    struct value *val,
+ 		    const struct value_print_options *options,
+ 		    int comma_needed,
+-		    struct type *outer_type, int outer_offset,
++		    struct type *outer_type, LONGEST outer_offset,
+ 		    const struct language_defn *language)
+ {
+   int i, len;
+@@ -677,7 +678,7 @@ print_field_values (struct type *type, const gdb_byte *valaddr,
+ 	  else
+ 	    {
+ 	      struct value *v;
+-	      int bit_pos = TYPE_FIELD_BITPOS (type, i);
++	      LONGEST bit_pos = TYPE_FIELD_BITPOS (type, i);
+ 	      int bit_size = TYPE_FIELD_BITSIZE (type, i);
+ 	      struct value_print_options opts;
+ 
+@@ -722,8 +723,8 @@ ada_val_print_string (struct type *type, const gdb_byte *valaddr,
+ {
+   enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (type));
+   struct type *elttype = TYPE_TARGET_TYPE (type);
+-  unsigned int eltlen;
+-  unsigned int len;
++  ULONGEST eltlen;
++  ULONGEST len;
+ 
+   /* We know that ELTTYPE cannot possibly be null, because we assume
+      that we're called only when TYPE is a string-like type.
+@@ -742,7 +743,7 @@ ada_val_print_string (struct type *type, const gdb_byte *valaddr,
+      elements up to it.  */
+   if (options->stop_print_at_null)
+     {
+-      int temp_len;
++      LONGEST temp_len;
+ 
+       /* Look for a NULL char.  */
+       for (temp_len = 0;
+@@ -1115,7 +1116,7 @@ ada_val_print_ref (struct type *type, const gdb_byte *valaddr,
+ 
+ static void
+ ada_val_print_1 (struct type *type,
+-		 int offset, CORE_ADDR address,
++		 LONGEST offset, CORE_ADDR address,
+ 		 struct ui_file *stream, int recurse,
+ 		 struct value *original_value,
+ 		 const struct value_print_options *options,
+@@ -1199,7 +1200,7 @@ ada_val_print_1 (struct type *type,
+ 
+ void
+ ada_val_print (struct type *type,
+-	       int embedded_offset, CORE_ADDR address,
++	       LONGEST embedded_offset, CORE_ADDR address,
+ 	       struct ui_file *stream, int recurse,
+ 	       struct value *val,
+ 	       const struct value_print_options *options)
+diff --git a/gdb/amd64-tdep.c b/gdb/amd64-tdep.c
+--- a/gdb/amd64-tdep.c
++++ b/gdb/amd64-tdep.c
+@@ -727,7 +727,7 @@ amd64_return_value (struct gdbarch *gdbarch, struct value *function,
+ 		    gdb_byte *readbuf, const gdb_byte *writebuf)
+ {
+   enum amd64_reg_class theclass[2];
+-  int len = TYPE_LENGTH (type);
++  LONGEST len = TYPE_LENGTH (type);
+   static int integer_regnum[] = { AMD64_RAX_REGNUM, AMD64_RDX_REGNUM };
+   static int sse_regnum[] = { AMD64_XMM0_REGNUM, AMD64_XMM1_REGNUM };
+   int integer_reg = 0;
+@@ -844,10 +844,10 @@ amd64_return_value (struct gdbarch *gdbarch, struct value *function,
+       gdb_assert (regnum != -1);
+ 
+       if (readbuf)
+-	regcache->raw_read_part (regnum, offset, std::min (len, 8),
++	regcache->raw_read_part (regnum, offset, std::min (len, (LONGEST) 8),
+ 				 readbuf + i * 8);
+       if (writebuf)
+-	regcache->raw_write_part (regnum, offset, std::min (len, 8),
++	regcache->raw_write_part (regnum, offset, std::min (len, (LONGEST) 8),
+ 				  writebuf + i * 8);
+     }
+ 
+diff --git a/gdb/annotate.c b/gdb/annotate.c
+--- a/gdb/annotate.c
++++ b/gdb/annotate.c
+@@ -531,21 +531,21 @@ annotate_frame_end (void)
+ }
+ 
+ void
+-annotate_array_section_begin (int idx, struct type *elttype)
++annotate_array_section_begin (LONGEST idx, struct type *elttype)
+ {
+   if (annotation_level == 2)
+     {
+-      printf_filtered (("\n\032\032array-section-begin %d "), idx);
++      printf_filtered (("\n\032\032array-section-begin %s "), plongest (idx));
+       print_value_flags (elttype);
+       printf_filtered (("\n"));
+     }
+ }
+ 
+ void
+-annotate_elt_rep (unsigned int repcount)
++annotate_elt_rep (ULONGEST repcount)
+ {
+   if (annotation_level == 2)
+-    printf_filtered (("\n\032\032elt-rep %u\n"), repcount);
++    printf_filtered (("\n\032\032elt-rep %s\n"), pulongest (repcount));
+ }
+ 
+ void
+diff --git a/gdb/annotate.h b/gdb/annotate.h
+--- a/gdb/annotate.h
++++ b/gdb/annotate.h
+@@ -102,8 +102,8 @@ extern void annotate_frame_source_end (void);
+ extern void annotate_frame_where (void);
+ extern void annotate_frame_end (void);
+ 
+-extern void annotate_array_section_begin (int, struct type *);
+-extern void annotate_elt_rep (unsigned int);
++extern void annotate_array_section_begin (LONGEST, struct type *);
++extern void annotate_elt_rep (ULONGEST);
+ extern void annotate_elt_rep_end (void);
+ extern void annotate_elt (void);
+ extern void annotate_array_section_end (void);
+diff --git a/gdb/arch-utils.c b/gdb/arch-utils.c
+--- a/gdb/arch-utils.c
++++ b/gdb/arch-utils.c
+@@ -228,7 +228,7 @@ legacy_virtual_frame_pointer (struct gdbarch *gdbarch,
+ 
+ const struct floatformat **
+ default_floatformat_for_type (struct gdbarch *gdbarch,
+-			      const char *name, int len)
++			      const char *name, LONGEST len)
+ {
+   const struct floatformat **format = NULL;
+ 
+diff --git a/gdb/arch-utils.h b/gdb/arch-utils.h
+--- a/gdb/arch-utils.h
++++ b/gdb/arch-utils.h
+@@ -131,7 +131,7 @@ extern gdbarch_virtual_frame_pointer_ftype legacy_virtual_frame_pointer;
+ /* Default implementation of gdbarch_floatformat_for_type.  */
+ extern const struct floatformat **
+   default_floatformat_for_type (struct gdbarch *gdbarch,
+-				const char *name, int len);
++				const char *name, LONGEST len);
+ 
+ extern CORE_ADDR generic_skip_trampoline_code (struct frame_info *frame,
+ 					       CORE_ADDR pc);
+diff --git a/gdb/arm-linux-nat.c b/gdb/arm-linux-nat.c
+--- a/gdb/arm-linux-nat.c
++++ b/gdb/arm-linux-nat.c
+@@ -1098,7 +1098,7 @@ arm_linux_nat_target::remove_hw_breakpoint (struct gdbarch *gdbarch,
+ /* Are we able to use a hardware watchpoint for the LEN bytes starting at 
+    ADDR?  */
+ int
+-arm_linux_nat_target::region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
++arm_linux_nat_target::region_ok_for_hw_watchpoint (CORE_ADDR addr, LONGEST len)
+ {
+   const struct arm_linux_hwbp_cap *cap = arm_linux_get_hwbp_cap ();
+   CORE_ADDR max_wp_length, aligned_addr;
+diff --git a/gdb/ax-gdb.c b/gdb/ax-gdb.c
+--- a/gdb/ax-gdb.c
++++ b/gdb/ax-gdb.c
+@@ -82,12 +82,12 @@ static void gen_traced_pop (struct agent_expr *, struct axs_value *);
+ static void gen_sign_extend (struct agent_expr *, struct type *);
+ static void gen_extend (struct agent_expr *, struct type *);
+ static void gen_fetch (struct agent_expr *, struct type *);
+-static void gen_left_shift (struct agent_expr *, int);
++static void gen_left_shift (struct agent_expr *, LONGEST);
+ 
+ 
+ static void gen_frame_args_address (struct agent_expr *);
+ static void gen_frame_locals_address (struct agent_expr *);
+-static void gen_offset (struct agent_expr *ax, int offset);
++static void gen_offset (struct agent_expr *ax, LONGEST offset);
+ static void gen_sym_offset (struct agent_expr *, struct symbol *);
+ static void gen_var_ref (struct agent_expr *ax, struct axs_value *value,
+ 			 struct symbol *var);
+@@ -132,13 +132,13 @@ static void gen_complement (struct agent_expr *ax, struct axs_value *value);
+ static void gen_deref (struct axs_value *);
+ static void gen_address_of (struct axs_value *);
+ static void gen_bitfield_ref (struct agent_expr *ax, struct axs_value *value,
+-			      struct type *type, int start, int end);
++			      struct type *type, LONGEST start, LONGEST end);
+ static void gen_primitive_field (struct agent_expr *ax,
+ 				 struct axs_value *value,
+-				 int offset, int fieldno, struct type *type);
++				 LONGEST offset, int fieldno, struct type *type);
+ static int gen_struct_ref_recursive (struct agent_expr *ax,
+ 				     struct axs_value *value,
+-				     const char *field, int offset,
++				     const char *field, LONGEST offset,
+ 				     struct type *type);
+ static void gen_struct_ref (struct agent_expr *ax,
+ 			    struct axs_value *value,
+@@ -529,7 +529,7 @@ gen_fetch (struct agent_expr *ax, struct type *type)
+    right shift it by -DISTANCE bits if DISTANCE < 0.  This generates
+    unsigned (logical) right shifts.  */
+ static void
+-gen_left_shift (struct agent_expr *ax, int distance)
++gen_left_shift (struct agent_expr *ax, LONGEST distance)
+ {
+   if (distance > 0)
+     {
+@@ -583,7 +583,7 @@ gen_frame_locals_address (struct agent_expr *ax)
+    programming in ML, it would be clearer why these are the same
+    thing.  */
+ static void
+-gen_offset (struct agent_expr *ax, int offset)
++gen_offset (struct agent_expr *ax, LONGEST offset)
+ {
+   /* It would suffice to simply push the offset and add it, but this
+      makes it easier to read positive and negative offsets in the
+@@ -1254,7 +1254,7 @@ gen_address_of (struct axs_value *value)
+    structure.  */
+ static void
+ gen_bitfield_ref (struct agent_expr *ax, struct axs_value *value,
+-		  struct type *type, int start, int end)
++		  struct type *type, LONGEST start, LONGEST  end)
+ {
+   /* Note that ops[i] fetches 8 << i bits.  */
+   static enum agent_op ops[]
+@@ -1289,13 +1289,13 @@ gen_bitfield_ref (struct agent_expr *ax, struct axs_value *value,
+ 
+   /* The first and one-after-last bits in the field, but rounded down
+      and up to byte boundaries.  */
+-  int bound_start = (start / TARGET_CHAR_BIT) * TARGET_CHAR_BIT;
+-  int bound_end = (((end + TARGET_CHAR_BIT - 1)
+-		    / TARGET_CHAR_BIT)
+-		   * TARGET_CHAR_BIT);
++  LONGEST bound_start = (start / TARGET_CHAR_BIT) * TARGET_CHAR_BIT;
++  LONGEST bound_end = (((end + TARGET_CHAR_BIT - 1)
++			/ TARGET_CHAR_BIT)
++		       * TARGET_CHAR_BIT);
+ 
+   /* current bit offset within the structure */
+-  int offset;
++  LONGEST offset;
+ 
+   /* The index in ops of the opcode we're considering.  */
+   int op;
+@@ -1413,7 +1413,7 @@ gen_bitfield_ref (struct agent_expr *ax, struct axs_value *value,
+ 
+ static void
+ gen_primitive_field (struct agent_expr *ax, struct axs_value *value,
+-		     int offset, int fieldno, struct type *type)
++		     LONGEST offset, int fieldno, struct type *type)
+ {
+   /* Is this a bitfield?  */
+   if (TYPE_FIELD_PACKED (type, fieldno))
+@@ -1437,7 +1437,7 @@ gen_primitive_field (struct agent_expr *ax, struct axs_value *value,
+ 
+ static int
+ gen_struct_ref_recursive (struct agent_expr *ax, struct axs_value *value,
+-			  const char *field, int offset, struct type *type)
++			  const char *field, LONGEST offset, struct type *type)
+ {
+   int i, rslt;
+   int nbases = TYPE_N_BASECLASSES (type);
+diff --git a/gdb/ax-general.c b/gdb/ax-general.c
+--- a/gdb/ax-general.c
++++ b/gdb/ax-general.c
+@@ -177,7 +177,7 @@ ax_zero_ext (struct agent_expr *x, int n)
+ 
+ /* Append a trace_quick instruction to EXPR, to record N bytes.  */
+ void
+-ax_trace_quick (struct agent_expr *x, int n)
++ax_trace_quick (struct agent_expr *x, LONGEST n)
+ {
+   /* N must fit in a byte.  */
+   if (n < 0 || n > 255)
+diff --git a/gdb/ax.h b/gdb/ax.h
+--- a/gdb/ax.h
++++ b/gdb/ax.h
+@@ -193,7 +193,7 @@ extern void ax_ext (struct agent_expr *EXPR, int N);
+ extern void ax_zero_ext (struct agent_expr *EXPR, int N);
+ 
+ /* Append a trace_quick instruction to EXPR, to record N bytes.  */
+-extern void ax_trace_quick (struct agent_expr *EXPR, int N);
++extern void ax_trace_quick (struct agent_expr *EXPR, LONGEST N);
+ 
+ /* Append a goto op to EXPR.  OP is the actual op (must be aop_goto or
+    aop_if_goto).  We assume we don't know the target offset yet,
+diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
+--- a/gdb/breakpoint.c
++++ b/gdb/breakpoint.c
+@@ -2059,9 +2059,9 @@ should_be_inserted (struct bp_location *bl)
+ 	{
+ 	  fprintf_unfiltered (gdb_stdlog,
+ 			      "infrun: stepping past non-steppable watchpoint. "
+-			      "skipping watchpoint at %s:%d\n",
++			      "skipping watchpoint at %s:%s\n",
+ 			      paddress (bl->gdbarch, bl->address),
+-			      bl->length);
++			      plongest (bl->length));
+ 	}
+       return 0;
+     }
+@@ -6822,7 +6822,7 @@ breakpoint_address_match (const address_space *aspace1, CORE_ADDR addr1,
+ static int
+ breakpoint_address_match_range (const address_space *aspace1,
+ 				CORE_ADDR addr1,
+-				int len1, const address_space *aspace2,
++				LONGEST len1, const address_space *aspace2,
+ 				CORE_ADDR addr2)
+ {
+   return ((gdbarch_has_global_breakpoints (target_gdbarch ())
+@@ -10905,7 +10905,7 @@ can_use_hardware_watchpoint (const std::vector<value_ref_ptr> &vals)
+ 		      && TYPE_CODE (vtype) != TYPE_CODE_ARRAY))
+ 		{
+ 		  CORE_ADDR vaddr = value_address (v);
+-		  int len;
++		  LONGEST len;
+ 		  int num_regs;
+ 
+ 		  len = (target_exact_watchpoints
+diff --git a/gdb/breakpoint.h b/gdb/breakpoint.h
+--- a/gdb/breakpoint.h
++++ b/gdb/breakpoint.h
+@@ -252,7 +252,7 @@ struct bp_target_info
+ 
+   /* If this is a ranged breakpoint, then this field contains the
+      length of the range that will be watched for execution.  */
+-  int length;
++  LONGEST length;
+ 
+   /* If the breakpoint lives in memory and reading that memory would
+      give back the breakpoint, instead of the original contents, then
+@@ -429,7 +429,7 @@ public:
+   /* For hardware watchpoints, the size of the memory region being
+      watched.  For hardware ranged breakpoints, the size of the
+      breakpoint range.  */
+-  int length = 0;
++  LONGEST length = 0;
+ 
+   /* Type of hardware watchpoint.  */
+   target_hw_bp_type watchpoint_type {};
+diff --git a/gdb/c-lang.c b/gdb/c-lang.c
+--- a/gdb/c-lang.c
++++ b/gdb/c-lang.c
+@@ -185,7 +185,7 @@ c_printchar (int c, struct type *type, struct ui_file *stream)
+ 
+ void
+ c_printstr (struct ui_file *stream, struct type *type, 
+-	    const gdb_byte *string, unsigned int length, 
++	    const gdb_byte *string, ULONGEST length,
+ 	    const char *user_encoding, int force_ellipses,
+ 	    const struct value_print_options *options)
+ {
+@@ -664,7 +664,7 @@ evaluate_subexp_c (struct type *expect_type, struct expression *exp,
+ 	  }
+ 	else
+ 	  {
+-	    int i;
++	    LONGEST i;
+ 
+ 	    /* Write the terminating character.  */
+ 	    for (i = 0; i < TYPE_LENGTH (type); ++i)
+@@ -673,7 +673,7 @@ evaluate_subexp_c (struct type *expect_type, struct expression *exp,
+ 	    if (satisfy_expected)
+ 	      {
+ 		LONGEST low_bound, high_bound;
+-		int element_size = TYPE_LENGTH (type);
++		LONGEST element_size = TYPE_LENGTH (type);
+ 
+ 		if (get_discrete_bounds (TYPE_INDEX_TYPE (expect_type),
+ 					 &low_bound, &high_bound) < 0)
+diff --git a/gdb/c-lang.h b/gdb/c-lang.h
+--- a/gdb/c-lang.h
++++ b/gdb/c-lang.h
+@@ -82,7 +82,7 @@ extern void c_print_typedef (struct type *,
+ 			     struct ui_file *);
+ 
+ extern void c_val_print (struct type *,
+-			 int, CORE_ADDR,
++			 LONGEST, CORE_ADDR,
+ 			 struct ui_file *, int,
+ 			 struct value *,
+ 			 const struct value_print_options *);
+@@ -102,7 +102,7 @@ extern void c_printchar (int, struct type *, struct ui_file *);
+ extern void c_printstr (struct ui_file * stream,
+ 			struct type *elttype,
+ 			const gdb_byte *string,
+-			unsigned int length,
++			ULONGEST length,
+ 			const char *user_encoding,
+ 			int force_ellipses,
+ 			const struct value_print_options *options);
+diff --git a/gdb/c-valprint.c b/gdb/c-valprint.c
+--- a/gdb/c-valprint.c
++++ b/gdb/c-valprint.c
+@@ -247,7 +247,7 @@ c_val_print_array (struct type *type, const gdb_byte *valaddr,
+   if (TYPE_LENGTH (type) > 0 && TYPE_LENGTH (unresolved_elttype) > 0)
+     {
+       LONGEST low_bound, high_bound;
+-      int eltlen, len;
++      LONGEST eltlen, len;
+       struct gdbarch *gdbarch = get_type_arch (type);
+       enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+       unsigned int i = 0;	/* Number of characters printed.  */
+@@ -321,8 +321,8 @@ c_val_print_array (struct type *type, const gdb_byte *valaddr,
+ 	  if (cp_is_vtbl_ptr_type (elttype))
+ 	    {
+ 	      i = 1;
+-	      fprintf_filtered (stream, _("%d vtable entries"),
+-				len - 1);
++	      fprintf_filtered (stream, _("%s vtable entries"),
++				plongest (len - 1));
+ 	    }
+ 	  else
+ 	    {
+@@ -399,7 +399,7 @@ c_val_print_struct (struct type *type, const gdb_byte *valaddr,
+ 	 -fvtable_thunks.  (Otherwise, look under
+ 	 TYPE_CODE_PTR.)  */
+       struct gdbarch *gdbarch = get_type_arch (type);
+-      int offset = (embedded_offset
++      LONGEST offset = (embedded_offset
+ 		    + TYPE_FIELD_BITPOS (type,
+ 					 VTBL_FNADDR_OFFSET) / 8);
+       struct type *field_type = TYPE_FIELD_TYPE (type, VTBL_FNADDR_OFFSET);
+@@ -498,7 +498,7 @@ c_val_print_memberptr (struct type *type, const gdb_byte *valaddr,
+ 
+ void
+ c_val_print (struct type *type,
+-	     int embedded_offset, CORE_ADDR address,
++	     LONGEST embedded_offset, CORE_ADDR address,
+ 	     struct ui_file *stream, int recurse,
+ 	     struct value *original_value,
+ 	     const struct value_print_options *options)
+diff --git a/gdb/compile/compile-c-support.c b/gdb/compile/compile-c-support.c
+--- a/gdb/compile/compile-c-support.c
++++ b/gdb/compile/compile-c-support.c
+@@ -307,11 +307,11 @@ generate_register_struct (struct ui_file *stream, struct gdbarch *gdbarch,
+ 
+ 	      default:
+ 		fprintf_unfiltered (stream,
+-				    "  unsigned char %s[%d]"
++				    "  unsigned char %s[%s]"
+ 				    " __attribute__((__aligned__("
+ 				    "__BIGGEST_ALIGNMENT__)))",
+ 				    regname.c_str (),
+-				    TYPE_LENGTH (regtype));
++				    pulongest (TYPE_LENGTH (regtype)));
+ 	      }
+ 	    fputs_unfiltered (";\n", stream);
+ 	  }
+diff --git a/gdb/cp-abi.c b/gdb/cp-abi.c
+--- a/gdb/cp-abi.c
++++ b/gdb/cp-abi.c
+@@ -64,12 +64,12 @@ is_operator_name (const char *name)
+   return (*current_cp_abi.is_operator_name) (name);
+ }
+ 
+-int
++LONGEST
+ baseclass_offset (struct type *type, int index, const gdb_byte *valaddr,
+ 		  LONGEST embedded_offset, CORE_ADDR address,
+ 		  const struct value *val)
+ {
+-  int res = 0;
++  LONGEST res = 0;
+ 
+   gdb_assert (current_cp_abi.baseclass_offset != NULL);
+ 
+@@ -96,7 +96,7 @@ baseclass_offset (struct type *type, int index, const gdb_byte *valaddr,
+ struct value *
+ value_virtual_fn_field (struct value **arg1p,
+ 			struct fn_field *f, int j,
+-			struct type *type, int offset)
++			struct type *type, LONGEST offset)
+ {
+   if ((current_cp_abi.virtual_fn_field) == NULL)
+     return NULL;
+diff --git a/gdb/cp-abi.h b/gdb/cp-abi.h
+--- a/gdb/cp-abi.h
++++ b/gdb/cp-abi.h
+@@ -108,7 +108,7 @@ extern struct value *value_virtual_fn_field (struct value **valuep,
+ 					     struct fn_field *f,
+ 					     int j,
+ 					     struct type *type,
+-					     int offset);
++					     LONGEST offset);
+ 
+ 
+ /* Try to find the run-time type of VALUE, using C++ run-time type
+@@ -144,11 +144,11 @@ extern struct type *value_rtti_type (struct value *value,
+    contents of VAL.  The result is the offset of the baseclass value
+    relative to (the address of)(ARG) + OFFSET.  */
+ 
+-extern int baseclass_offset (struct type *type,
+-			     int index, const gdb_byte *valaddr,
+-			     LONGEST embedded_offset,
+-			     CORE_ADDR address,
+-			     const struct value *val);
++extern LONGEST baseclass_offset (struct type *type,
++				 int index, const gdb_byte *valaddr,
++				 LONGEST embedded_offset,
++				 CORE_ADDR address,
++				 const struct value *val);
+ 
+ /* Describe the target of a pointer to method.  CONTENTS is the byte
+    pattern representing the pointer to method.  TYPE is the pointer to
+@@ -226,12 +226,12 @@ struct cp_abi_ops
+   struct value *(*virtual_fn_field) (struct value **arg1p,
+ 				     struct fn_field * f,
+ 				     int j, struct type * type,
+-				     int offset);
++				     LONGEST offset);
+   struct type *(*rtti_type) (struct value *v, int *full,
+ 			     LONGEST *top, int *using_enc);
+-  int (*baseclass_offset) (struct type *type, int index,
+-			   const bfd_byte *valaddr, LONGEST embedded_offset,
+-			   CORE_ADDR address, const struct value *val);
++  LONGEST (*baseclass_offset) (struct type *type, int index,
++			       const bfd_byte *valaddr, LONGEST embedded_offset,
++			       CORE_ADDR address, const struct value *val);
+   void (*print_method_ptr) (const gdb_byte *contents,
+ 			    struct type *type,
+ 			    struct ui_file *stream);
+diff --git a/gdb/cp-valprint.c b/gdb/cp-valprint.c
+--- a/gdb/cp-valprint.c
++++ b/gdb/cp-valprint.c
+@@ -335,7 +335,7 @@ cp_print_value_fields (struct type *type, struct type *real_type,
+ 		}
+ 	      else if (i == vptr_fieldno && type == vptr_basetype)
+ 		{
+-		  int i_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
++		  LONGEST i_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
+ 		  struct type *i_type = TYPE_FIELD_TYPE (type, i);
+ 
+ 		  if (valprint_check_validity (stream, i_type, i_offset, val))
+diff --git a/gdb/d-lang.h b/gdb/d-lang.h
+--- a/gdb/d-lang.h
++++ b/gdb/d-lang.h
+@@ -79,7 +79,7 @@ extern struct block_symbol d_lookup_nested_symbol (struct type *, const char *,
+ /* Defined in d-valprint.c  */
+ 
+ extern void d_val_print (struct type *type,
+-			 int embedded_offset, CORE_ADDR address,
++			 LONGEST embedded_offset, CORE_ADDR address,
+ 			 struct ui_file *stream, int recurse,
+ 			 struct value *val,
+ 			 const struct value_print_options *options);
+diff --git a/gdb/d-valprint.c b/gdb/d-valprint.c
+--- a/gdb/d-valprint.c
++++ b/gdb/d-valprint.c
+@@ -73,7 +73,7 @@ dynamic_array_type (struct type *type,
+ 
+ /* Implements the la_val_print routine for language D.  */
+ void
+-d_val_print (struct type *type, int embedded_offset,
++d_val_print (struct type *type, LONGEST embedded_offset,
+              CORE_ADDR address, struct ui_file *stream, int recurse,
+ 	     struct value *val,
+              const struct value_print_options *options)
+diff --git a/gdb/dwarf2loc.c b/gdb/dwarf2loc.c
+--- a/gdb/dwarf2loc.c
++++ b/gdb/dwarf2loc.c
+@@ -1817,7 +1817,7 @@ rw_pieced_value (struct value *v, struct value *from)
+   for (; i < c->pieces.size () && offset < max_offset; i++)
+     {
+       struct dwarf_expr_piece *p = &c->pieces[i];
+-      size_t this_size_bits, this_size;
++      ULONGEST this_size_bits, this_size;
+ 
+       this_size_bits = p->size - bits_to_skip;
+       if (this_size_bits > max_offset - offset)
+@@ -2064,7 +2064,7 @@ write_pieced_value (struct value *to, struct value *from)
+ 
+ static int
+ check_pieced_synthetic_pointer (const struct value *value, LONGEST bit_offset,
+-				int bit_length)
++				LONGEST bit_length)
+ {
+   struct piece_closure *c
+     = (struct piece_closure *) value_computed_closure (value);
+@@ -2077,7 +2077,7 @@ check_pieced_synthetic_pointer (const struct value *value, LONGEST bit_offset,
+   for (i = 0; i < c->pieces.size () && bit_length > 0; i++)
+     {
+       struct dwarf_expr_piece *p = &c->pieces[i];
+-      size_t this_size_bits = p->size;
++      ULONGEST this_size_bits = p->size;
+ 
+       if (bit_offset > 0)
+ 	{
+@@ -2179,8 +2179,8 @@ indirect_pieced_value (struct value *value)
+     = (struct piece_closure *) value_computed_closure (value);
+   struct type *type;
+   struct frame_info *frame;
+-  int i, bit_length;
+-  LONGEST bit_offset;
++  int i;
++  LONGEST bit_length, bit_offset;
+   struct dwarf_expr_piece *piece = NULL;
+   LONGEST byte_offset;
+   enum bfd_endian byte_order;
+@@ -2197,7 +2197,7 @@ indirect_pieced_value (struct value *value)
+   for (i = 0; i < c->pieces.size () && bit_length > 0; i++)
+     {
+       struct dwarf_expr_piece *p = &c->pieces[i];
+-      size_t this_size_bits = p->size;
++      ULONGEST this_size_bits = p->size;
+ 
+       if (bit_offset > 0)
+ 	{
+@@ -2486,9 +2486,9 @@ if (frame != NULL) select_frame (frame);
+ 	case DWARF_VALUE_STACK:
+ 	  {
+ 	    struct value *value = ctx.fetch (0);
+-	    size_t n = TYPE_LENGTH (value_type (value));
+-	    size_t len = TYPE_LENGTH (subobj_type);
+-	    size_t max = TYPE_LENGTH (type);
++	    ULONGEST n = TYPE_LENGTH (value_type (value));
++	    ULONGEST len = TYPE_LENGTH (subobj_type);
++	    ULONGEST max = TYPE_LENGTH (type);
+ 	    struct gdbarch *objfile_gdbarch = get_objfile_arch (objfile);
+ 
+ 	    if (subobj_byte_offset + len > max)
+diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
+--- a/gdb/dwarf2read.c
++++ b/gdb/dwarf2read.c
+@@ -2021,11 +2021,11 @@ dwarf2_complex_location_expr_complaint (void)
+ }
+ 
+ static void
+-dwarf2_const_value_length_mismatch_complaint (const char *arg1, int arg2,
+-					      int arg3)
++dwarf2_const_value_length_mismatch_complaint (const char *arg1, LONGEST arg2,
++					      LONGEST arg3)
+ {
+-  complaint (_("const value length mismatch for '%s', got %d, expected %d"),
+-	     arg1, arg2, arg3);
++  complaint (_("const value length mismatch for '%s', got %s, expected %s"),
++	     arg1, plongest (arg2), plongest (arg3));
+ }
+ 
+ static void
+@@ -14953,8 +14953,8 @@ dwarf2_add_field (struct field_info *fip, struct die_info *die,
+ 	         object, and then subtract off the number of bits of
+ 	         the field itself.  The result is the bit offset of
+ 	         the LSB of the field.  */
+-	      int anonymous_size;
+-	      int bit_offset = DW_UNSND (attr);
++	      LONGEST anonymous_size;
++	      LONGEST bit_offset = DW_UNSND (attr);
+ 
+ 	      attr = dwarf2_attr (die, DW_AT_byte_size, cu);
+ 	      if (attr)
+diff --git a/gdb/eval.c b/gdb/eval.c
+--- a/gdb/eval.c
++++ b/gdb/eval.c
+@@ -295,7 +295,8 @@ evaluate_struct_tuple (struct value *struct_val,
+   while (--nargs >= 0)
+     {
+       struct value *val = NULL;
+-      int bitpos, bitsize;
++      LONGEST bitpos;
++      int bitsize;
+       bfd_byte *addr;
+ 
+       fieldno++;
+@@ -356,7 +357,7 @@ init_array_element (struct value *array, struct value *element,
+ 		    enum noside noside, LONGEST low_bound, LONGEST high_bound)
+ {
+   LONGEST index;
+-  int element_size = TYPE_LENGTH (value_type (element));
++  LONGEST element_size = TYPE_LENGTH (value_type (element));
+ 
+   if (exp->elts[*pos].opcode == BINOP_COMMA)
+     {
+@@ -800,11 +801,11 @@ binop_promote (const struct language_defn *language, struct gdbarch *gdbarch,
+     /* FIXME: Also mixed integral/booleans, with result an integer.  */
+     {
+       const struct builtin_type *builtin = builtin_type (gdbarch);
+-      unsigned int promoted_len1 = TYPE_LENGTH (type1);
+-      unsigned int promoted_len2 = TYPE_LENGTH (type2);
++      ULONGEST promoted_len1 = TYPE_LENGTH (type1);
++      ULONGEST promoted_len2 = TYPE_LENGTH (type2);
+       int is_unsigned1 = TYPE_UNSIGNED (type1);
+       int is_unsigned2 = TYPE_UNSIGNED (type2);
+-      unsigned int result_len;
++      ULONGEST result_len;
+       int unsigned_operation;
+ 
+       /* Determine type length and signedness after promotion for
+@@ -1546,7 +1547,7 @@ evaluate_subexp_standard (struct type *expect_type,
+   struct value **argvec;
+   int code;
+   int ix;
+-  long mem_offset;
++  LONGEST mem_offset;
+   struct type **arg_types;
+ 
+   pc = (*pos)++;
+@@ -1729,7 +1730,7 @@ evaluate_subexp_standard (struct type *expect_type,
+ 	  struct type *range_type = TYPE_INDEX_TYPE (type);
+ 	  struct type *element_type = TYPE_TARGET_TYPE (type);
+ 	  struct value *array = allocate_value (expect_type);
+-	  int element_size = TYPE_LENGTH (check_typedef (element_type));
++	  LONGEST element_size = TYPE_LENGTH (check_typedef (element_type));
+ 	  LONGEST low_bound, high_bound, index;
+ 
+ 	  if (get_discrete_bounds (range_type, &low_bound, &high_bound) < 0)
+diff --git a/gdb/f-lang.c b/gdb/f-lang.c
+--- a/gdb/f-lang.c
++++ b/gdb/f-lang.c
+@@ -101,7 +101,7 @@ f_printchar (int c, struct type *type, struct ui_file *stream)
+ 
+ static void
+ f_printstr (struct ui_file *stream, struct type *type, const gdb_byte *string,
+-	    unsigned int length, const char *encoding, int force_ellipses,
++	    ULONGEST length, const char *encoding, int force_ellipses,
+ 	    const struct value_print_options *options)
+ {
+   const char *type_encoding = f_get_encoding (type);
+diff --git a/gdb/f-lang.h b/gdb/f-lang.h
+--- a/gdb/f-lang.h
++++ b/gdb/f-lang.h
+@@ -28,7 +28,7 @@ extern int f_parse (struct parser_state *);
+ extern void f_print_type (struct type *, const char *, struct ui_file *, int,
+ 			  int, const struct type_print_options *);
+ 
+-extern void f_val_print (struct type *, int, CORE_ADDR,
++extern void f_val_print (struct type *, LONGEST, CORE_ADDR,
+ 			 struct ui_file *, int,
+ 			 struct value *,
+ 			 const struct value_print_options *);
+diff --git a/gdb/f-valprint.c b/gdb/f-valprint.c
+--- a/gdb/f-valprint.c
++++ b/gdb/f-valprint.c
+@@ -36,7 +36,7 @@
+ 
+ static void f77_get_dynamic_length_of_aggregate (struct type *);
+ 
+-int f77_array_offset_tbl[MAX_FORTRAN_DIMS + 1][2];
++LONGEST f77_array_offset_tbl[MAX_FORTRAN_DIMS + 1][2];
+ 
+ /* Array which holds offsets to be applied to get a row's elements
+    for a given array.  Array also holds the size of each subarray.  */
+@@ -71,8 +71,8 @@ f77_get_upperbound (struct type *type)
+ static void
+ f77_get_dynamic_length_of_aggregate (struct type *type)
+ {
+-  int upper_bound = -1;
+-  int lower_bound = 1;
++  LONGEST upper_bound = -1;
++  LONGEST lower_bound = 1;
+ 
+   /* Recursively go all the way down into a possibly multi-dimensional
+      F77 array and get the bounds.  For simple arrays, this is pretty
+@@ -104,7 +104,7 @@ f77_get_dynamic_length_of_aggregate (struct type *type)
+ static void
+ f77_print_array_1 (int nss, int ndimensions, struct type *type,
+ 		   const gdb_byte *valaddr,
+-		   int embedded_offset, CORE_ADDR address,
++		   LONGEST embedded_offset, CORE_ADDR address,
+ 		   struct ui_file *stream, int recurse,
+ 		   const struct value *val,
+ 		   const struct value_print_options *options,
+@@ -113,7 +113,7 @@ f77_print_array_1 (int nss, int ndimensions, struct type *type,
+   struct type *range_type = TYPE_INDEX_TYPE (check_typedef (type));
+   CORE_ADDR addr = address + embedded_offset;
+   LONGEST lowerbound, upperbound;
+-  int i;
++  LONGEST i;
+ 
+   get_discrete_bounds (range_type, &lowerbound, &upperbound);
+ 
+@@ -175,7 +175,7 @@ f77_print_array_1 (int nss, int ndimensions, struct type *type,
+ 
+ static void
+ f77_print_array (struct type *type, const gdb_byte *valaddr,
+-		 int embedded_offset,
++		 LONGEST embedded_offset,
+ 		 CORE_ADDR address, struct ui_file *stream,
+ 		 int recurse,
+ 		 const struct value *val,
+@@ -214,7 +214,7 @@ static const struct generic_val_print_decorations f_decorations =
+    function; they are identical.  */
+ 
+ void
+-f_val_print (struct type *type, int embedded_offset,
++f_val_print (struct type *type, LONGEST embedded_offset,
+ 	     CORE_ADDR address, struct ui_file *stream, int recurse,
+ 	     struct value *original_value,
+ 	     const struct value_print_options *options)
+diff --git a/gdb/findvar.c b/gdb/findvar.c
+--- a/gdb/findvar.c
++++ b/gdb/findvar.c
+@@ -821,7 +821,7 @@ struct value *
+ default_value_from_register (struct gdbarch *gdbarch, struct type *type,
+                              int regnum, struct frame_id frame_id)
+ {
+-  int len = TYPE_LENGTH (type);
++  LONGEST len = TYPE_LENGTH (type);
+   struct value *value = allocate_value (type);
+   struct frame_info *frame;
+ 
+@@ -865,7 +865,7 @@ read_frame_register_value (struct value *value, struct frame_info *frame)
+   LONGEST offset = 0;
+   LONGEST reg_offset = value_offset (value);
+   int regnum = VALUE_REGNUM (value);
+-  int len = type_length_units (check_typedef (value_type (value)));
++  LONGEST len = type_length_units (check_typedef (value_type (value)));
+ 
+   gdb_assert (VALUE_LVAL (value) == lval_register);
+ 
+@@ -880,7 +880,7 @@ read_frame_register_value (struct value *value, struct frame_info *frame)
+   while (len > 0)
+     {
+       struct value *regval = get_frame_register_value (frame, regnum);
+-      int reg_len = type_length_units (value_type (regval)) - reg_offset;
++      LONGEST reg_len = type_length_units (value_type (regval)) - reg_offset;
+ 
+       /* If the register length is larger than the number of bytes
+          remaining to copy, then only copy the appropriate bytes.  */
+diff --git a/gdb/frame.c b/gdb/frame.c
+--- a/gdb/frame.c
++++ b/gdb/frame.c
+@@ -1396,7 +1396,7 @@ deprecated_frame_register_read (struct frame_info *frame, int regnum,
+ 
+ int
+ get_frame_register_bytes (struct frame_info *frame, int regnum,
+-			  CORE_ADDR offset, int len, gdb_byte *myaddr,
++			  CORE_ADDR offset, LONGEST len, gdb_byte *myaddr,
+ 			  int *optimizedp, int *unavailablep)
+ {
+   struct gdbarch *gdbarch = get_frame_arch (frame);
+@@ -1425,7 +1425,7 @@ get_frame_register_bytes (struct frame_info *frame, int regnum,
+     }
+   if (len > maxsize)
+     error (_("Bad debug information detected: "
+-	     "Attempt to read %d bytes from registers."), len);
++	     "Attempt to read %s bytes from registers."), plongest (len));
+ 
+   /* Copy the data.  */
+   while (len > 0)
+diff --git a/gdb/frame.h b/gdb/frame.h
+--- a/gdb/frame.h
++++ b/gdb/frame.h
+@@ -620,7 +620,7 @@ extern void put_frame_register (struct frame_info *frame, int regnum,
+    contents are optimized out or unavailable, set *OPTIMIZEDP,
+    *UNAVAILABLEP accordingly.  */
+ extern int get_frame_register_bytes (struct frame_info *frame, int regnum,
+-				     CORE_ADDR offset, int len,
++				     CORE_ADDR offset, LONGEST len,
+ 				     gdb_byte *myaddr,
+ 				     int *optimizedp, int *unavailablep);
+ 
+diff --git a/gdb/gdbarch.c b/gdb/gdbarch.c
+--- a/gdb/gdbarch.c
++++ b/gdb/gdbarch.c
+@@ -1799,7 +1799,7 @@ set_gdbarch_wchar_signed (struct gdbarch *gdbarch,
+ }
+ 
+ const struct floatformat **
+-gdbarch_floatformat_for_type (struct gdbarch *gdbarch, const char *name, int length)
++gdbarch_floatformat_for_type (struct gdbarch *gdbarch, const char *name, LONGEST length)
+ {
+   gdb_assert (gdbarch != NULL);
+   gdb_assert (gdbarch->floatformat_for_type != NULL);
+diff --git a/gdb/gdbarch.h b/gdb/gdbarch.h
+--- a/gdb/gdbarch.h
++++ b/gdb/gdbarch.h
+@@ -195,8 +195,8 @@ extern void set_gdbarch_wchar_signed (struct gdbarch *gdbarch, int wchar_signed)
+    NAME, if non-NULL, is the type name, which may be used to distinguish
+    different target formats of the same length. */
+ 
+-typedef const struct floatformat ** (gdbarch_floatformat_for_type_ftype) (struct gdbarch *gdbarch, const char *name, int length);
+-extern const struct floatformat ** gdbarch_floatformat_for_type (struct gdbarch *gdbarch, const char *name, int length);
++typedef const struct floatformat ** (gdbarch_floatformat_for_type_ftype) (struct gdbarch *gdbarch, const char *name, LONGEST length);
++extern const struct floatformat ** gdbarch_floatformat_for_type (struct gdbarch *gdbarch, const char *name, LONGEST length);
+ extern void set_gdbarch_floatformat_for_type (struct gdbarch *gdbarch, gdbarch_floatformat_for_type_ftype *floatformat_for_type);
+ 
+ /* For most targets, a pointer on the target and its representation as an
+diff --git a/gdb/gdbarch.sh b/gdb/gdbarch.sh
+--- a/gdb/gdbarch.sh
++++ b/gdb/gdbarch.sh
+@@ -385,7 +385,7 @@ v;int;wchar_signed;;;1;-1;1
+ # Returns the floating-point format to be used for values of length LENGTH.
+ # NAME, if non-NULL, is the type name, which may be used to distinguish
+ # different target formats of the same length.
+-m;const struct floatformat **;floatformat_for_type;const char *name, int length;name, length;0;default_floatformat_for_type;;0
++m;const struct floatformat **;floatformat_for_type;const char *name, LONGEST length;name, length;0;default_floatformat_for_type;;0
+ 
+ # For most targets, a pointer on the target and its representation as an
+ # address in GDB have the same size and "look the same".  For such a
+diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
+--- a/gdb/gdbtypes.c
++++ b/gdb/gdbtypes.c
+@@ -2906,7 +2906,7 @@ floatformat_from_type (const struct type *type)
+    least as long as OBJFILE.  */
+ 
+ struct type *
+-init_type (struct objfile *objfile, enum type_code code, int bit,
++init_type (struct objfile *objfile, enum type_code code, LONGEST bit,
+ 	   const char *name)
+ {
+   struct type *type;
+@@ -3360,8 +3360,8 @@ is_public_ancestor (struct type *base, struct type *dclass)
+ 
+ static int
+ is_unique_ancestor_worker (struct type *base, struct type *dclass,
+-			   int *offset,
+-			   const gdb_byte *valaddr, int embedded_offset,
++			   LONGEST *offset,
++			   const gdb_byte *valaddr, LONGEST embedded_offset,
+ 			   CORE_ADDR address, struct value *val)
+ {
+   int i, count = 0;
+@@ -3372,7 +3372,7 @@ is_unique_ancestor_worker (struct type *base, struct type *dclass,
+   for (i = 0; i < TYPE_N_BASECLASSES (dclass) && count < 2; ++i)
+     {
+       struct type *iter;
+-      int this_offset;
++      LONGEST this_offset;
+ 
+       iter = check_typedef (TYPE_BASECLASS (dclass, i));
+ 
+@@ -3413,7 +3413,7 @@ is_unique_ancestor_worker (struct type *base, struct type *dclass,
+ int
+ is_unique_ancestor (struct type *base, struct value *val)
+ {
+-  int offset = -1;
++  LONGEST offset = -1;
+ 
+   return is_unique_ancestor_worker (base, value_type (val), &offset,
+ 				    value_contents_for_printing (val),
+@@ -4642,7 +4642,7 @@ recursive_dump_type (struct type *type, int spaces)
+       break;
+     }
+   puts_filtered ("\n");
+-  printfi_filtered (spaces, "length %d\n", TYPE_LENGTH (type));
++  printfi_filtered (spaces, "length %s\n", pulongest (TYPE_LENGTH (type)));
+   if (TYPE_OBJFILE_OWNED (type))
+     {
+       printfi_filtered (spaces, "objfile ");
+@@ -5085,7 +5085,7 @@ copy_type (const struct type *type)
+ 
+ struct type *
+ arch_type (struct gdbarch *gdbarch,
+-	   enum type_code code, int bit, const char *name)
++	   enum type_code code, LONGEST bit, const char *name)
+ {
+   struct type *type;
+ 
+diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h
+--- a/gdb/gdbtypes.h
++++ b/gdb/gdbtypes.h
+@@ -862,7 +862,7 @@ struct type
+      type_length_units function should be used in order to get the length
+      expressed in target addressable memory units.  */
+ 
+-  unsigned int length;
++  ULONGEST length;
+ 
+   /* * Core type, shared by a group of qualified types.  */
+ 
+@@ -1783,7 +1783,7 @@ extern unsigned int type_length_units (struct type *type);
+ 
+ /* * Helper function to construct objfile-owned types.  */
+ 
+-extern struct type *init_type (struct objfile *, enum type_code, int,
++extern struct type *init_type (struct objfile *, enum type_code, LONGEST,
+ 			       const char *);
+ extern struct type *init_integer_type (struct objfile *, int, int,
+ 				       const char *);
+@@ -1800,7 +1800,7 @@ extern struct type *init_pointer_type (struct objfile *, int, const char *,
+ 				       struct type *);
+ 
+ /* Helper functions to construct architecture-owned types.  */
+-extern struct type *arch_type (struct gdbarch *, enum type_code, int,
++extern struct type *arch_type (struct gdbarch *, enum type_code, LONGEST,
+ 			       const char *);
+ extern struct type *arch_integer_type (struct gdbarch *, int, int,
+ 				       const char *);
+diff --git a/gdb/gnu-v2-abi.c b/gdb/gnu-v2-abi.c
+--- a/gdb/gnu-v2-abi.c
++++ b/gdb/gnu-v2-abi.c
+@@ -82,7 +82,7 @@ gnuv2_is_operator_name (const char *name)
+    TYPE is the type in which F is located.  */
+ static struct value *
+ gnuv2_virtual_fn_field (struct value **arg1p, struct fn_field * f, int j,
+-			struct type * type, int offset)
++			struct type *type, LONGEST offset)
+ {
+   struct value *arg1 = *arg1p;
+   struct type *type1 = check_typedef (value_type (arg1));
+@@ -338,7 +338,7 @@ vb_match (struct type *type, int index, struct type *basetype)
+    target).  The result is the offset of the baseclass value relative
+    to (the address of)(ARG) + OFFSET.  */
+ 
+-static int
++static LONGEST
+ gnuv2_baseclass_offset (struct type *type, int index,
+ 			const bfd_byte *valaddr, LONGEST embedded_offset,
+ 			CORE_ADDR address, const struct value *val)
+@@ -358,8 +358,7 @@ gnuv2_baseclass_offset (struct type *type, int index,
+ 	  if (vb_match (type, i, basetype))
+ 	    {
+ 	      struct type *field_type;
+-	      LONGEST field_offset;
+-	      int field_length;
++	      LONGEST field_offset, field_length;
+ 	      CORE_ADDR addr;
+ 
+ 	      field_type = check_typedef (TYPE_FIELD_TYPE (type, i));
+@@ -383,7 +382,7 @@ gnuv2_baseclass_offset (struct type *type, int index,
+ 	  /* Don't go through baseclass_offset, as that wraps
+ 	     exceptions, thus, inner exceptions would be wrapped more
+ 	     than once.  */
+-	  int boffset =
++	  LONGEST boffset =
+ 	    gnuv2_baseclass_offset (type, i, valaddr,
+ 				    embedded_offset, address, val);
+ 
+diff --git a/gdb/gnu-v3-abi.c b/gdb/gnu-v3-abi.c
+--- a/gdb/gnu-v3-abi.c
++++ b/gdb/gnu-v3-abi.c
+@@ -109,7 +109,7 @@ build_gdb_vtable_type (struct gdbarch *arch)
+ {
+   struct type *t;
+   struct field *field_list, *field;
+-  int offset;
++  LONGEST offset;
+ 
+   struct type *void_ptr_type
+     = builtin_type (arch)->builtin_data_ptr;
+@@ -185,7 +185,7 @@ vtable_ptrdiff_type (struct gdbarch *gdbarch)
+ /* Return the offset from the start of the imaginary `struct
+    gdb_gnu_v3_abi_vtable' object to the vtable's "address point"
+    (i.e., where objects' virtual table pointers point).  */
+-static int
++static LONGEST
+ vtable_address_point_offset (struct gdbarch *gdbarch)
+ {
+   struct type *vtable_type
+@@ -409,7 +409,7 @@ gnuv3_get_virtual_fn (struct gdbarch *gdbarch, struct value *container,
+ static struct value *
+ gnuv3_virtual_fn_field (struct value **value_p,
+                         struct fn_field *f, int j,
+-			struct type *vfn_base, int offset)
++			struct type *vfn_base, LONGEST offset)
+ {
+   struct type *values_type = check_typedef (value_type (*value_p));
+   struct gdbarch *gdbarch;
+@@ -439,7 +439,7 @@ gnuv3_virtual_fn_field (struct value **value_p,
+ 
+    -1 is returned on error.  */
+ 
+-static int
++static LONGEST
+ gnuv3_baseclass_offset (struct type *type, int index,
+ 			const bfd_byte *valaddr, LONGEST embedded_offset,
+ 			CORE_ADDR address, const struct value *val)
+@@ -448,7 +448,7 @@ gnuv3_baseclass_offset (struct type *type, int index,
+   struct type *ptr_type;
+   struct value *vtable;
+   struct value *vbase_array;
+-  long int cur_base_offset, base_offset;
++  LONGEST cur_base_offset, base_offset;
+ 
+   /* Determine architecture.  */
+   gdbarch = get_type_arch (type);
+@@ -471,7 +471,7 @@ gnuv3_baseclass_offset (struct type *type, int index,
+   cur_base_offset = cur_base_offset + vtable_address_point_offset (gdbarch);
+   if ((- cur_base_offset) % TYPE_LENGTH (ptr_type) != 0)
+     error (_("Misaligned vbase offset."));
+-  cur_base_offset = cur_base_offset / ((int) TYPE_LENGTH (ptr_type));
++  cur_base_offset = cur_base_offset / ((LONGEST) TYPE_LENGTH (ptr_type));
+ 
+   vtable = gnuv3_get_vtable (gdbarch, type, address + embedded_offset);
+   gdb_assert (vtable != NULL);
+@@ -515,7 +515,7 @@ gnuv3_find_method_in (struct type *domain, CORE_ADDR voffset,
+      we're out of luck.  */
+   for (i = 0; i < TYPE_N_BASECLASSES (domain); i++)
+     {
+-      int pos;
++      LONGEST pos;
+       struct type *basetype;
+ 
+       if (BASETYPE_VIA_VIRTUAL (domain, i))
+diff --git a/gdb/go-lang.h b/gdb/go-lang.h
+--- a/gdb/go-lang.h
++++ b/gdb/go-lang.h
+@@ -83,7 +83,7 @@ extern void go_print_type (struct type *type, const char *varstring,
+ /* Defined in go-valprint.c.  */
+ 
+ extern void go_val_print (struct type *type,
+-			  int embedded_offset, CORE_ADDR address,
++			  LONGEST embedded_offset, CORE_ADDR address,
+ 			  struct ui_file *stream, int recurse,
+ 			  struct value *val,
+ 			  const struct value_print_options *options);
+diff --git a/gdb/go-valprint.c b/gdb/go-valprint.c
+--- a/gdb/go-valprint.c
++++ b/gdb/go-valprint.c
+@@ -86,7 +86,7 @@ print_go_string (struct type *type,
+ /* Implements the la_val_print routine for language Go.  */
+ 
+ void
+-go_val_print (struct type *type, int embedded_offset,
++go_val_print (struct type *type, LONGEST embedded_offset,
+ 	      CORE_ADDR address, struct ui_file *stream, int recurse,
+ 	      struct value *val,
+ 	      const struct value_print_options *options)
+diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c
+--- a/gdb/i386-tdep.c
++++ b/gdb/i386-tdep.c
+@@ -8155,7 +8155,7 @@ i386_fast_tracepoint_valid_at (struct gdbarch *gdbarch, CORE_ADDR addr,
+ 
+ const struct floatformat **
+ i386_floatformat_for_type (struct gdbarch *gdbarch,
+-			   const char *name, int len)
++			   const char *name, LONGEST len)
+ {
+   if (len == 128 && name)
+     if (strcmp (name, "__float128") == 0
+diff --git a/gdb/language.c b/gdb/language.c
+--- a/gdb/language.c
++++ b/gdb/language.c
+@@ -766,7 +766,7 @@ unk_lang_printchar (int c, struct type *type, struct ui_file *stream)
+ 
+ static void
+ unk_lang_printstr (struct ui_file *stream, struct type *type,
+-		   const gdb_byte *string, unsigned int length,
++		   const gdb_byte *string, ULONGEST length,
+ 		   const char *encoding, int force_ellipses,
+ 		   const struct value_print_options *options)
+ {
+@@ -785,7 +785,7 @@ unk_lang_print_type (struct type *type, const char *varstring,
+ 
+ static void
+ unk_lang_val_print (struct type *type,
+-		    int embedded_offset, CORE_ADDR address,
++		    LONGEST embedded_offset, CORE_ADDR address,
+ 		    struct ui_file *stream, int recurse,
+ 		    struct value *val,
+ 		    const struct value_print_options *options)
+diff --git a/gdb/language.h b/gdb/language.h
+--- a/gdb/language.h
++++ b/gdb/language.h
+@@ -184,7 +184,7 @@ struct language_defn
+ 			  struct ui_file * stream);
+ 
+     void (*la_printstr) (struct ui_file * stream, struct type *elttype,
+-			 const gdb_byte *string, unsigned int length,
++			 const gdb_byte *string, ULONGEST length,
+ 			 const char *encoding, int force_ellipses,
+ 			 const struct value_print_options *);
+ 
+@@ -222,7 +222,7 @@ struct language_defn
+        printing.  */
+ 
+     void (*la_val_print) (struct type *type,
+-			  int embedded_offset, CORE_ADDR address,
++			  LONGEST embedded_offset, CORE_ADDR address,
+ 			  struct ui_file *stream, int recurse,
+ 			  struct value *val,
+ 			  const struct value_print_options *options);
+diff --git a/gdb/m2-lang.c b/gdb/m2-lang.c
+--- a/gdb/m2-lang.c
++++ b/gdb/m2-lang.c
+@@ -103,10 +103,10 @@ m2_printchar (int c, struct type *type, struct ui_file *stream)
+ 
+ static void
+ m2_printstr (struct ui_file *stream, struct type *type, const gdb_byte *string,
+-	     unsigned int length, const char *encoding, int force_ellipses,
++	     ULONGEST length, const char *encoding, int force_ellipses,
+ 	     const struct value_print_options *options)
+ {
+-  unsigned int i;
++  ULONGEST i;
+   unsigned int things_printed = 0;
+   int in_quotes = 0;
+   int need_comma = 0;
+@@ -121,9 +121,9 @@ m2_printstr (struct ui_file *stream, struct type *type, const gdb_byte *string,
+     {
+       /* Position of the character we are examining
+          to see whether it is repeated.  */
+-      unsigned int rep1;
++      ULONGEST rep1;
+       /* Number of repetitions we have detected so far.  */
+-      unsigned int reps;
++      ULONGEST reps;
+ 
+       QUIT;
+ 
+@@ -149,7 +149,7 @@ m2_printstr (struct ui_file *stream, struct type *type, const gdb_byte *string,
+ 	      in_quotes = 0;
+ 	    }
+ 	  m2_printchar (string[i], type, stream);
+-	  fprintf_filtered (stream, " <repeats %u times>", reps);
++	  fprintf_filtered (stream, " <repeats %s times>", pulongest (reps));
+ 	  i = rep1 - 1;
+ 	  things_printed += options->repeat_count_threshold;
+ 	  need_comma = 1;
+diff --git a/gdb/m2-lang.h b/gdb/m2-lang.h
+--- a/gdb/m2-lang.h
++++ b/gdb/m2-lang.h
+@@ -32,7 +32,7 @@ extern void m2_print_typedef (struct type *, struct symbol *,
+ extern int m2_is_long_set (struct type *type);
+ extern int m2_is_unbounded_array (struct type *type);
+ 
+-extern void m2_val_print (struct type *, int, CORE_ADDR,
++extern void m2_val_print (struct type *, LONGEST, CORE_ADDR,
+ 			  struct ui_file *, int,
+ 			  struct value *,
+ 			  const struct value_print_options *);
+diff --git a/gdb/m2-typeprint.c b/gdb/m2-typeprint.c
+--- a/gdb/m2-typeprint.c
++++ b/gdb/m2-typeprint.c
+@@ -234,9 +234,12 @@ static void m2_array (struct type *type, struct ui_file *stream,
+ 	  m2_print_bounds (TYPE_INDEX_TYPE (type), stream, show, -1, 1);
+ 	}
+       else
+-	fprintf_filtered (stream, "%d",
+-			  (TYPE_LENGTH (type)
+-			   / TYPE_LENGTH (TYPE_TARGET_TYPE (type))));
++        {
++	  ULONGEST val = (TYPE_LENGTH (type)
++			  / TYPE_LENGTH (TYPE_TARGET_TYPE (type)));
++
++	  fprintf_filtered (stream, "%s", pulongest (val));
++	}
+     }
+   fprintf_filtered (stream, "] OF ");
+   m2_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level, flags);
+diff --git a/gdb/m2-valprint.c b/gdb/m2-valprint.c
+--- a/gdb/m2-valprint.c
++++ b/gdb/m2-valprint.c
+@@ -35,7 +35,7 @@ static int print_unpacked_pointer (struct type *type,
+ 				   struct ui_file *stream);
+ static void
+ m2_print_array_contents (struct type *type, const gdb_byte *valaddr,
+-			 int embedded_offset, CORE_ADDR address,
++			 LONGEST embedded_offset, CORE_ADDR address,
+ 			 struct ui_file *stream, int recurse,
+ 			 struct value *val,
+ 			 const struct value_print_options *options,
+@@ -67,7 +67,7 @@ get_long_set_bounds (struct type *type, LONGEST *low, LONGEST *high)
+ 
+ static void
+ m2_print_long_set (struct type *type, const gdb_byte *valaddr,
+-		   int embedded_offset, CORE_ADDR address,
++		   LONGEST embedded_offset, CORE_ADDR address,
+ 		   struct ui_file *stream)
+ {
+   int empty_set        = 1;
+@@ -158,7 +158,7 @@ m2_print_long_set (struct type *type, const gdb_byte *valaddr,
+ 
+ static void
+ m2_print_unbounded_array (struct type *type, const gdb_byte *valaddr,
+-			  int embedded_offset, CORE_ADDR address,
++			  LONGEST embedded_offset, CORE_ADDR address,
+ 			  struct ui_file *stream, int recurse,
+ 			  const struct value_print_options *options)
+ {
+@@ -260,7 +260,7 @@ print_variable_at_address (struct type *type,
+ 
+ static void
+ m2_print_array_contents (struct type *type, const gdb_byte *valaddr,
+-			 int embedded_offset, CORE_ADDR address,
++			 LONGEST embedded_offset, CORE_ADDR address,
+ 			 struct ui_file *stream, int recurse,
+ 			 struct value *val,
+ 			 const struct value_print_options *options,
+@@ -308,12 +308,12 @@ static const struct generic_val_print_decorations m2_decorations =
+    function; they are identical.  */
+ 
+ void
+-m2_val_print (struct type *type, int embedded_offset,
++m2_val_print (struct type *type, LONGEST embedded_offset,
+ 	      CORE_ADDR address, struct ui_file *stream, int recurse,
+ 	      struct value *original_value,
+ 	      const struct value_print_options *options)
+ {
+-  unsigned len;
++  ULONGEST len;
+   struct type *elttype;
+   CORE_ADDR addr;
+   const gdb_byte *valaddr = value_contents_for_printing (original_value);
+@@ -339,7 +339,7 @@ m2_val_print (struct type *type, int embedded_offset,
+ 	         elements up to it.  */
+ 	      if (options->stop_print_at_null)
+ 		{
+-		  unsigned int temp_len;
++		  ULONGEST temp_len;
+ 
+ 		  /* Look for a NULL char.  */
+ 		  for (temp_len = 0;
+@@ -415,7 +415,7 @@ m2_val_print (struct type *type, int embedded_offset,
+ 	{
+ 	  struct type *range = elttype;
+ 	  LONGEST low_bound, high_bound;
+-	  int i;
++	  LONGEST i;
+ 	  int need_comma = 0;
+ 
+ 	  fputs_filtered ("{", stream);
+diff --git a/gdb/memrange.c b/gdb/memrange.c
+--- a/gdb/memrange.c
++++ b/gdb/memrange.c
+@@ -22,8 +22,8 @@
+ #include <algorithm>
+ 
+ int
+-mem_ranges_overlap (CORE_ADDR start1, int len1,
+-		    CORE_ADDR start2, int len2)
++mem_ranges_overlap (CORE_ADDR start1, LONGEST len1,
++		    CORE_ADDR start2, LONGEST len2)
+ {
+   ULONGEST h, l;
+ 
+diff --git a/gdb/memrange.h b/gdb/memrange.h
+--- a/gdb/memrange.h
++++ b/gdb/memrange.h
+@@ -28,7 +28,7 @@ struct mem_range
+ {
+   mem_range () = default;
+ 
+-  mem_range (CORE_ADDR start_, int length_)
++  mem_range (CORE_ADDR start_, LONGEST length_)
+   : start (start_), length (length_)
+   {}
+ 
+@@ -47,14 +47,14 @@ struct mem_range
+   CORE_ADDR start;
+ 
+   /* Length of the range.  */
+-  int length;
++  LONGEST length;
+ };
+ 
+ /* Returns true if the ranges defined by [start1, start1+len1) and
+    [start2, start2+len2) overlap.  */
+ 
+-extern int mem_ranges_overlap (CORE_ADDR start1, int len1,
+-			       CORE_ADDR start2, int len2);
++extern int mem_ranges_overlap (CORE_ADDR start1, LONGEST len1,
++			       CORE_ADDR start2, LONGEST len2);
+ 
+ /* Returns true if ADDR is in RANGE.  */
+ 
+diff --git a/gdb/mips-linux-nat.c b/gdb/mips-linux-nat.c
+--- a/gdb/mips-linux-nat.c
++++ b/gdb/mips-linux-nat.c
+@@ -614,7 +614,7 @@ mips_linux_nat_target::stopped_data_address (CORE_ADDR *paddr)
+    the specified region can be covered by the watch registers.  */
+ 
+ int
+-mips_linux_nat_target::region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
++mips_linux_nat_target::region_ok_for_hw_watchpoint (CORE_ADDR addr, LONGEST len)
+ {
+   struct pt_watch_regs dummy_regs;
+   int i;
+diff --git a/gdb/nat/x86-dregs.c b/gdb/nat/x86-dregs.c
+--- a/gdb/nat/x86-dregs.c
++++ b/gdb/nat/x86-dregs.c
+@@ -380,7 +380,7 @@ x86_remove_aligned_watchpoint (struct x86_debug_reg_state *state,
+ 
+ static int
+ x86_handle_nonaligned_watchpoint (struct x86_debug_reg_state *state,
+-				  x86_wp_op_t what, CORE_ADDR addr, int len,
++				  x86_wp_op_t what, CORE_ADDR addr, LONGEST len,
+ 				  enum target_hw_bp_type type)
+ {
+   int retval = 0;
+@@ -548,7 +548,7 @@ x86_dr_remove_watchpoint (struct x86_debug_reg_state *state,
+ 
+ int
+ x86_dr_region_ok_for_watchpoint (struct x86_debug_reg_state *state,
+-				 CORE_ADDR addr, int len)
++				 CORE_ADDR addr, LONGEST len)
+ {
+   int nregs;
+ 
+diff --git a/gdb/nat/x86-dregs.h b/gdb/nat/x86-dregs.h
+--- a/gdb/nat/x86-dregs.h
++++ b/gdb/nat/x86-dregs.h
+@@ -116,7 +116,7 @@ extern int x86_dr_remove_watchpoint (struct x86_debug_reg_state *state,
+ /* Return non-zero if we can watch a memory region that starts at
+    address ADDR and whose length is LEN bytes.  */
+ extern int x86_dr_region_ok_for_watchpoint (struct x86_debug_reg_state *state,
+-					    CORE_ADDR addr, int len);
++					    CORE_ADDR addr, LONGEST len);
+ 
+ /* If the inferior has some break/watchpoint that triggered, set the
+    address associated with that break/watchpoint and return true.
+diff --git a/gdb/opencl-lang.c b/gdb/opencl-lang.c
+--- a/gdb/opencl-lang.c
++++ b/gdb/opencl-lang.c
+@@ -76,11 +76,11 @@ builtin_opencl_type (struct gdbarch *gdbarch)
+ 
+ static struct type *
+ lookup_opencl_vector_type (struct gdbarch *gdbarch, enum type_code code,
+-			   unsigned int el_length, unsigned int flag_unsigned,
++			   ULONGEST el_length, unsigned int flag_unsigned,
+ 			   int n)
+ {
+   int i;
+-  unsigned int length;
++  ULONGEST length;
+   struct type *type = NULL;
+   struct type **types = builtin_opencl_type (gdbarch);
+ 
+@@ -172,7 +172,7 @@ lval_func_read (struct value *v)
+   struct type *eltype = TYPE_TARGET_TYPE (check_typedef (value_type (c->val)));
+   LONGEST offset = value_offset (v);
+   LONGEST elsize = TYPE_LENGTH (eltype);
+-  int n, i, j = 0;
++  LONGEST n, i, j = 0;
+   LONGEST lowb = 0;
+   LONGEST highb = 0;
+ 
+@@ -201,7 +201,7 @@ lval_func_write (struct value *v, struct value *fromval)
+   struct type *eltype = TYPE_TARGET_TYPE (check_typedef (value_type (c->val)));
+   LONGEST offset = value_offset (v);
+   LONGEST elsize = TYPE_LENGTH (eltype);
+-  int n, i, j = 0;
++  LONGEST n, i, j = 0;
+   LONGEST lowb = 0;
+   LONGEST highb = 0;
+ 
+@@ -241,17 +241,17 @@ lval_func_write (struct value *v, struct value *fromval)
+ 
+ static int
+ lval_func_check_synthetic_pointer (const struct value *v,
+-				   LONGEST offset, int length)
++				   LONGEST offset, LONGEST length)
+ {
+   struct lval_closure *c = (struct lval_closure *) value_computed_closure (v);
+   /* Size of the target type in bits.  */
+-  int elsize =
++  LONGEST elsize =
+       TYPE_LENGTH (TYPE_TARGET_TYPE (check_typedef (value_type (c->val)))) * 8;
+-  int startrest = offset % elsize;
+-  int start = offset / elsize;
+-  int endrest = (offset + length) % elsize;
+-  int end = (offset + length) / elsize;
+-  int i;
++  LONGEST startrest = offset % elsize;
++  LONGEST start = offset / elsize;
++  LONGEST endrest = (offset + length) % elsize;
++  LONGEST end = (offset + length) / elsize;
++  LONGEST i;
+ 
+   if (endrest)
+     end++;
+@@ -261,8 +261,8 @@ lval_func_check_synthetic_pointer (const struct value *v,
+ 
+   for (i = start; i < end; i++)
+     {
+-      int comp_offset = (i == start) ? startrest : 0;
+-      int comp_length = (i == end) ? endrest : elsize;
++      LONGEST comp_offset = (i == start) ? startrest : 0;
++      LONGEST comp_length = (i == end) ? endrest : elsize;
+ 
+       if (!value_bits_synthetic_pointer (c->val,
+ 					 c->indices[i] * elsize + comp_offset,
+diff --git a/gdb/p-lang.c b/gdb/p-lang.c
+--- a/gdb/p-lang.c
++++ b/gdb/p-lang.c
+@@ -93,8 +93,8 @@ pascal_main_name (void)
+    are not multiple of TARGET_CHAR_BIT then the results are wrong
+    but this does not happen for Free Pascal nor for GPC.  */
+ int
+-is_pascal_string_type (struct type *type,int *length_pos,
+-                       int *length_size, int *string_pos,
++is_pascal_string_type (struct type *type, LONGEST *length_pos,
++		       LONGEST *length_size, LONGEST *string_pos,
+ 		       struct type **char_type,
+ 		       const char **arrayname)
+ {
+@@ -214,12 +214,12 @@ pascal_printchar (int c, struct type *type, struct ui_file *stream)
+ 
+ void
+ pascal_printstr (struct ui_file *stream, struct type *type,
+-		 const gdb_byte *string, unsigned int length,
++		 const gdb_byte *string, ULONGEST length,
+ 		 const char *encoding, int force_ellipses,
+ 		 const struct value_print_options *options)
+ {
+   enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (type));
+-  unsigned int i;
++  ULONGEST i;
+   unsigned int things_printed = 0;
+   int in_quotes = 0;
+   int need_comma = 0;
+@@ -247,9 +247,9 @@ pascal_printstr (struct ui_file *stream, struct type *type,
+     {
+       /* Position of the character we are examining
+          to see whether it is repeated.  */
+-      unsigned int rep1;
++      ULONGEST rep1;
+       /* Number of repetitions we have detected so far.  */
+-      unsigned int reps;
++      ULONGEST reps;
+       unsigned long int current_char;
+ 
+       QUIT;
+@@ -281,7 +281,7 @@ pascal_printstr (struct ui_file *stream, struct type *type,
+ 	      in_quotes = 0;
+ 	    }
+ 	  pascal_printchar (current_char, type, stream);
+-	  fprintf_filtered (stream, " <repeats %u times>", reps);
++	  fprintf_filtered (stream, " <repeats %s times>", pulongest (reps));
+ 	  i = rep1 - 1;
+ 	  things_printed += options->repeat_count_threshold;
+ 	  need_comma = 1;
+diff --git a/gdb/p-lang.h b/gdb/p-lang.h
+--- a/gdb/p-lang.h
++++ b/gdb/p-lang.h
+@@ -34,7 +34,7 @@ extern void pascal_print_type (struct type *, const char *, struct ui_file *,
+ extern void pascal_print_typedef (struct type *, struct symbol *,
+ 				  struct ui_file *);
+ 
+-extern void pascal_val_print (struct type *, int,
++extern void pascal_val_print (struct type *, LONGEST,
+ 			      CORE_ADDR, struct ui_file *, int,
+ 			      struct value *,
+ 			      const struct value_print_options *);
+@@ -48,13 +48,13 @@ extern void pascal_type_print_method_args (const char *, const char *,
+ /* These are in p-lang.c: */
+ 
+ extern int
+-  is_pascal_string_type (struct type *, int *, int *, int *,
++  is_pascal_string_type (struct type *, LONGEST *, LONGEST *, LONGEST *,
+ 			 struct type **, const char **);
+ 
+ extern void pascal_printchar (int, struct type *, struct ui_file *);
+ 
+ extern void pascal_printstr (struct ui_file *, struct type *, const gdb_byte *,
+-			     unsigned int, const char *, int,
++			     ULONGEST, const char *, int,
+ 			     const struct value_print_options *);
+ 
+ extern struct type **const pascal_builtin_types[];
+diff --git a/gdb/p-valprint.c b/gdb/p-valprint.c
+--- a/gdb/p-valprint.c
++++ b/gdb/p-valprint.c
+@@ -60,7 +60,7 @@ static const struct generic_val_print_decorations p_decorations =
+ 
+ void
+ pascal_val_print (struct type *type,
+-		  int embedded_offset, CORE_ADDR address,
++		  LONGEST embedded_offset, CORE_ADDR address,
+ 		  struct ui_file *stream, int recurse,
+ 		  struct value *original_value,
+ 		  const struct value_print_options *options)
+@@ -71,8 +71,8 @@ pascal_val_print (struct type *type,
+   unsigned len;
+   LONGEST low_bound, high_bound;
+   struct type *elttype;
+-  unsigned eltlen;
+-  int length_pos, length_size, string_pos;
++  ULONGEST eltlen;
++  LONGEST length_pos, length_size, string_pos;
+   struct type *char_type;
+   CORE_ADDR addr;
+   int want_space = 0;
+diff --git a/gdb/ppc-linux-nat.c b/gdb/ppc-linux-nat.c
+--- a/gdb/ppc-linux-nat.c
++++ b/gdb/ppc-linux-nat.c
+@@ -1308,7 +1308,7 @@ ppc_linux_nat_target::can_use_hw_breakpoint (enum bptype type, int cnt, int ot)
+ }
+ 
+ int
+-ppc_linux_nat_target::region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
++ppc_linux_nat_target::region_ok_for_hw_watchpoint (CORE_ADDR addr, LONGEST len)
+ {
+   /* Handle sub-8-byte quantities.  */
+   if (len <= 0)
+diff --git a/gdb/ppc-linux-tdep.c b/gdb/ppc-linux-tdep.c
+--- a/gdb/ppc-linux-tdep.c
++++ b/gdb/ppc-linux-tdep.c
+@@ -1706,7 +1706,7 @@ ppc_init_linux_record_tdep (struct linux_record_tdep *record_tdep,
+ 
+ const struct floatformat **
+ ppc_floatformat_for_type (struct gdbarch *gdbarch,
+-                          const char *name, int len)
++                          const char *name, LONGEST len)
+ {
+   if (len == 128 && name)
+     {
+diff --git a/gdb/printcmd.c b/gdb/printcmd.c
+--- a/gdb/printcmd.c
++++ b/gdb/printcmd.c
+@@ -275,7 +275,7 @@ print_formatted (struct value *val, int size,
+ 		 struct ui_file *stream)
+ {
+   struct type *type = check_typedef (value_type (val));
+-  int len = TYPE_LENGTH (type);
++  LONGEST len = TYPE_LENGTH (type);
+ 
+   if (VALUE_LVAL (val) == lval_memory)
+     next_address = value_address (val) + len;
+@@ -351,7 +351,7 @@ print_scalar_formatted (const gdb_byte *valaddr, struct type *type,
+ 			int size, struct ui_file *stream)
+ {
+   struct gdbarch *gdbarch = get_type_arch (type);
+-  unsigned int len = TYPE_LENGTH (type);
++  ULONGEST len = TYPE_LENGTH (type);
+   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+ 
+   /* String printing should go through val_print_scalar_formatted.  */
+diff --git a/gdb/procfs.c b/gdb/procfs.c
+--- a/gdb/procfs.c
++++ b/gdb/procfs.c
+@@ -3358,7 +3358,7 @@ procfs_target::remove_watchpoint (CORE_ADDR addr, int len,
+ }
+ 
+ int
+-procfs_target::region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
++procfs_target::region_ok_for_hw_watchpoint (CORE_ADDR addr, LONGEST len)
+ {
+   /* The man page for proc(4) on Solaris 2.6 and up says that the
+      system can support "thousands" of hardware watchpoints, but gives
+diff --git a/gdb/regcache.c b/gdb/regcache.c
+--- a/gdb/regcache.c
++++ b/gdb/regcache.c
+@@ -795,7 +795,7 @@ regcache::cooked_write (int regnum, const gdb_byte *buf)
+ /* See regcache.h.  */
+ 
+ enum register_status
+-readable_regcache::read_part (int regnum, int offset, int len,
++readable_regcache::read_part (int regnum, LONGEST offset, LONGEST len,
+ 			      gdb_byte *out, bool is_raw)
+ {
+   int reg_size = register_size (arch (), regnum);
+@@ -862,7 +862,7 @@ reg_buffer::raw_collect_part (int regnum, int offset, int len,
+ /* See regcache.h.  */
+ 
+ enum register_status
+-regcache::write_part (int regnum, int offset, int len,
++regcache::write_part (int regnum, LONGEST offset, LONGEST len,
+ 		      const gdb_byte *in, bool is_raw)
+ {
+   int reg_size = register_size (arch (), regnum);
+@@ -933,7 +933,7 @@ reg_buffer::raw_supply_part (int regnum, int offset, int len,
+ }
+ 
+ enum register_status
+-readable_regcache::raw_read_part (int regnum, int offset, int len,
++readable_regcache::raw_read_part (int regnum, int offset, LONGEST len,
+ 				  gdb_byte *buf)
+ {
+   assert_regnum (regnum);
+@@ -943,7 +943,7 @@ readable_regcache::raw_read_part (int regnum, int offset, int len,
+ /* See regcache.h.  */
+ 
+ void
+-regcache::raw_write_part (int regnum, int offset, int len,
++regcache::raw_write_part (int regnum, int offset, LONGEST len,
+ 			  const gdb_byte *buf)
+ {
+   assert_regnum (regnum);
+@@ -953,7 +953,7 @@ regcache::raw_write_part (int regnum, int offset, int len,
+ /* See regcache.h.  */
+ 
+ enum register_status
+-readable_regcache::cooked_read_part (int regnum, int offset, int len,
++readable_regcache::cooked_read_part (int regnum, LONGEST offset, LONGEST len,
+ 				     gdb_byte *buf)
+ {
+   gdb_assert (regnum >= 0 && regnum < m_descr->nr_cooked_registers);
+@@ -963,7 +963,7 @@ readable_regcache::cooked_read_part (int regnum, int offset, int len,
+ /* See regcache.h.  */
+ 
+ void
+-regcache::cooked_write_part (int regnum, int offset, int len,
++regcache::cooked_write_part (int regnum, LONGEST offset, LONGEST len,
+ 			     const gdb_byte *buf)
+ {
+   gdb_assert (regnum >= 0 && regnum < m_descr->nr_cooked_registers);
+diff --git a/gdb/regcache.h b/gdb/regcache.h
+--- a/gdb/regcache.h
++++ b/gdb/regcache.h
+@@ -256,8 +256,8 @@ public:
+   enum register_status raw_read (int regnum, T *val);
+ 
+   /* Partial transfer of raw registers.  Return the status of the register.  */
+-  enum register_status raw_read_part (int regnum, int offset, int len,
+-				      gdb_byte *buf);
++  enum register_status raw_read_part (int regnum, int offset,
++				      LONGEST len, gdb_byte *buf);
+ 
+   /* Make certain that the register REGNUM is up-to-date.  */
+   virtual void raw_update (int regnum) = 0;
+@@ -269,8 +269,8 @@ public:
+   enum register_status cooked_read (int regnum, T *val);
+ 
+   /* Partial transfer of a cooked register.  */
+-  enum register_status cooked_read_part (int regnum, int offset, int len,
+-					 gdb_byte *buf);
++  enum register_status cooked_read_part (int regnum, LONGEST offset,
++					 LONGEST len, gdb_byte *buf);
+ 
+   /* Read register REGNUM from the regcache and return a new value.  This
+      will call mark_value_bytes_unavailable as appropriate.  */
+@@ -280,7 +280,7 @@ protected:
+ 
+   /* Perform a partial register transfer using a read, modify, write
+      operation.  Will fail if register is currently invalid.  */
+-  enum register_status read_part (int regnum, int offset, int len,
++  enum register_status read_part (int regnum, LONGEST offset, LONGEST len,
+ 				  gdb_byte *out, bool is_raw);
+ };
+ 
+@@ -338,11 +338,12 @@ public:
+ 
+   /* Partial transfer of raw registers.  Perform read, modify, write style
+      operations.  */
+-  void raw_write_part (int regnum, int offset, int len, const gdb_byte *buf);
++  void raw_write_part (int regnum, int offset, LONGEST len,
++		       const gdb_byte *buf);
+ 
+   /* Partial transfer of a cooked register.  Perform read, modify, write style
+      operations.  */
+-  void cooked_write_part (int regnum, int offset, int len,
++  void cooked_write_part (int regnum, LONGEST offset, LONGEST len,
+ 			  const gdb_byte *buf);
+ 
+   void supply_regset (const struct regset *regset,
+@@ -393,7 +394,7 @@ private:
+ 
+   /* Perform a partial register transfer using a read, modify, write
+      operation.  */
+-  enum register_status write_part (int regnum, int offset, int len,
++  enum register_status write_part (int regnum, LONGEST offset, LONGEST len,
+ 				   const gdb_byte *in, bool is_raw);
+ 
+   /* The address space of this register cache (for registers where it
+diff --git a/gdb/remote.c b/gdb/remote.c
+--- a/gdb/remote.c
++++ b/gdb/remote.c
+@@ -462,7 +462,7 @@ public:
+ 
+   int remove_hw_breakpoint (struct gdbarch *, struct bp_target_info *) override;
+ 
+-  int region_ok_for_hw_watchpoint (CORE_ADDR, int) override;
++  int region_ok_for_hw_watchpoint (CORE_ADDR, LONGEST) override;
+ 
+   int insert_watchpoint (CORE_ADDR, int, enum target_hw_bp_type,
+ 			 struct expression *) override;
+@@ -10413,7 +10413,7 @@ int remote_hw_watchpoint_length_limit = -1;
+ int remote_hw_breakpoint_limit = -1;
+ 
+ int
+-remote_target::region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
++remote_target::region_ok_for_hw_watchpoint (CORE_ADDR addr, LONGEST len)
+ {
+   if (remote_hw_watchpoint_length_limit == 0)
+     return 0;
+diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c
+--- a/gdb/rust-lang.c
++++ b/gdb/rust-lang.c
+@@ -288,7 +288,7 @@ rust_printchar (int c, struct type *type, struct ui_file *stream)
+ 
+ static void
+ rust_printstr (struct ui_file *stream, struct type *type,
+-	       const gdb_byte *string, unsigned int length,
++	       const gdb_byte *string, ULONGEST length,
+ 	       const char *user_encoding, int force_ellipses,
+ 	       const struct value_print_options *options)
+ {
+@@ -497,7 +497,7 @@ static const struct generic_val_print_decorations rust_decorations =
+ /* la_val_print implementation for Rust.  */
+ 
+ static void
+-rust_val_print (struct type *type, int embedded_offset,
++rust_val_print (struct type *type, LONGEST embedded_offset,
+ 		CORE_ADDR address, struct ui_file *stream, int recurse,
+ 		struct value *val,
+ 		const struct value_print_options *options)
+diff --git a/gdb/s390-linux-nat.c b/gdb/s390-linux-nat.c
+--- a/gdb/s390-linux-nat.c
++++ b/gdb/s390-linux-nat.c
+@@ -952,7 +952,8 @@ s390_linux_nat_target::remove_hw_breakpoint (struct gdbarch *gdbarch,
+ }
+ 
+ int
+-s390_linux_nat_target::region_ok_for_hw_watchpoint (CORE_ADDR addr, int cnt)
++s390_linux_nat_target::region_ok_for_hw_watchpoint (CORE_ADDR addr,
++						    LONGEST cnt)
+ {
+   return 1;
+ }
+diff --git a/gdb/spu-multiarch.c b/gdb/spu-multiarch.c
+--- a/gdb/spu-multiarch.c
++++ b/gdb/spu-multiarch.c
+@@ -66,7 +66,7 @@ struct spu_multiarch_target final : public target_ops
+ 		     const gdb_byte *pattern, ULONGEST pattern_len,
+ 		     CORE_ADDR *found_addrp) override;
+ 
+-  int region_ok_for_hw_watchpoint (CORE_ADDR, int) override;
++  int region_ok_for_hw_watchpoint (CORE_ADDR, LONGEST) override;
+ 
+   struct gdbarch *thread_architecture (ptid_t) override;
+ };
+@@ -163,7 +163,7 @@ spu_multiarch_target::thread_architecture (ptid_t ptid)
+ /* Override the to_region_ok_for_hw_watchpoint routine.  */
+ 
+ int
+-spu_multiarch_target::region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
++spu_multiarch_target::region_ok_for_hw_watchpoint (CORE_ADDR addr, LONGEST len)
+ {
+   /* We cannot watch SPU local store.  */
+   if (SPUADDR_SPU (addr) != -1)
+diff --git a/gdb/stack.c b/gdb/stack.c
+--- a/gdb/stack.c
++++ b/gdb/stack.c
+@@ -190,7 +190,7 @@ print_stack_frame (struct frame_info *frame, int print_level,
+    argument (not just the first nameless argument).  */
+ 
+ static void
+-print_frame_nameless_args (struct frame_info *frame, long start, int num,
++print_frame_nameless_args (struct frame_info *frame, LONGEST start, int num,
+ 			   int first, struct ui_file *stream)
+ {
+   struct gdbarch *gdbarch = get_frame_arch (frame);
+@@ -540,7 +540,7 @@ print_frame_args (struct symbol *func, struct frame_info *frame,
+   /* Offset of next stack argument beyond the one we have seen that is
+      at the highest offset, or -1 if we haven't come to a stack
+      argument yet.  */
+-  long highest_offset = -1;
++  LONGEST highest_offset = -1;
+   /* Number of ints of arguments that we have printed so far.  */
+   int args_printed = 0;
+   /* True if we should print arguments, false otherwise.  */
+@@ -569,8 +569,8 @@ print_frame_args (struct symbol *func, struct frame_info *frame,
+ 	    case LOC_ARG:
+ 	    case LOC_REF_ARG:
+ 	      {
+-		long current_offset = SYMBOL_VALUE (sym);
+-		int arg_size = TYPE_LENGTH (SYMBOL_TYPE (sym));
++		LONGEST current_offset = SYMBOL_VALUE (sym);
++		LONGEST arg_size = TYPE_LENGTH (SYMBOL_TYPE (sym));
+ 
+ 		/* Compute address of next argument by adding the size of
+ 		   this argument and rounding to an int boundary.  */
+@@ -705,7 +705,7 @@ print_frame_args (struct symbol *func, struct frame_info *frame,
+      enough about the stack to find them.  */
+   if (num != -1)
+     {
+-      long start;
++      LONGEST start;
+ 
+       if (highest_offset == -1)
+ 	start = gdbarch_frame_args_skip (get_frame_arch (frame));
+diff --git a/gdb/symmisc.c b/gdb/symmisc.c
+--- a/gdb/symmisc.c
++++ b/gdb/symmisc.c
+@@ -586,11 +586,11 @@ print_symbol (struct gdbarch *gdbarch, struct symbol *symbol,
+ 
+ 	case LOC_CONST_BYTES:
+ 	  {
+-	    unsigned i;
++	    ULONGEST i;
+ 	    struct type *type = check_typedef (SYMBOL_TYPE (symbol));
+ 
+-	    fprintf_filtered (outfile, "const %u hex bytes:",
+-			      TYPE_LENGTH (type));
++	    fprintf_filtered (outfile, "const %s hex bytes:",
++			      pulongest (TYPE_LENGTH (type)));
+ 	    for (i = 0; i < TYPE_LENGTH (type); i++)
+ 	      fprintf_filtered (outfile, " %02x",
+ 				(unsigned) SYMBOL_VALUE_BYTES (symbol)[i]);
+diff --git a/gdb/target-delegates.c b/gdb/target-delegates.c
+--- a/gdb/target-delegates.c
++++ b/gdb/target-delegates.c
+@@ -39,7 +39,7 @@ struct dummy_target : public target_ops
+   bool have_continuable_watchpoint () override;
+   bool stopped_data_address (CORE_ADDR *arg0) override;
+   bool watchpoint_addr_within_range (CORE_ADDR arg0, CORE_ADDR arg1, int arg2) override;
+-  int region_ok_for_hw_watchpoint (CORE_ADDR arg0, int arg1) override;
++  int region_ok_for_hw_watchpoint (CORE_ADDR arg0, LONGEST arg1) override;
+   bool can_accel_watchpoint_condition (CORE_ADDR arg0, int arg1, int arg2, struct expression *arg3) override;
+   int masked_watch_num_registers (CORE_ADDR arg0, CORE_ADDR arg1) override;
+   int can_do_single_step () override;
+@@ -207,7 +207,7 @@ struct debug_target : public target_ops
+   bool have_continuable_watchpoint () override;
+   bool stopped_data_address (CORE_ADDR *arg0) override;
+   bool watchpoint_addr_within_range (CORE_ADDR arg0, CORE_ADDR arg1, int arg2) override;
+-  int region_ok_for_hw_watchpoint (CORE_ADDR arg0, int arg1) override;
++  int region_ok_for_hw_watchpoint (CORE_ADDR arg0, LONGEST arg1) override;
+   bool can_accel_watchpoint_condition (CORE_ADDR arg0, int arg1, int arg2, struct expression *arg3) override;
+   int masked_watch_num_registers (CORE_ADDR arg0, CORE_ADDR arg1) override;
+   int can_do_single_step () override;
+@@ -1098,19 +1098,19 @@ debug_target::watchpoint_addr_within_range (CORE_ADDR arg0, CORE_ADDR arg1, int
+ }
+ 
+ int
+-target_ops::region_ok_for_hw_watchpoint (CORE_ADDR arg0, int arg1)
++target_ops::region_ok_for_hw_watchpoint (CORE_ADDR arg0, LONGEST arg1)
+ {
+   return this->beneath ()->region_ok_for_hw_watchpoint (arg0, arg1);
+ }
+ 
+ int
+-dummy_target::region_ok_for_hw_watchpoint (CORE_ADDR arg0, int arg1)
++dummy_target::region_ok_for_hw_watchpoint (CORE_ADDR arg0, LONGEST arg1)
+ {
+   return default_region_ok_for_hw_watchpoint (this, arg0, arg1);
+ }
+ 
+ int
+-debug_target::region_ok_for_hw_watchpoint (CORE_ADDR arg0, int arg1)
++debug_target::region_ok_for_hw_watchpoint (CORE_ADDR arg0, LONGEST arg1)
+ {
+   int result;
+   fprintf_unfiltered (gdb_stdlog, "-> %s->region_ok_for_hw_watchpoint (...)\n", this->beneath ()->shortname ());
+@@ -1118,7 +1118,7 @@ debug_target::region_ok_for_hw_watchpoint (CORE_ADDR arg0, int arg1)
+   fprintf_unfiltered (gdb_stdlog, "<- %s->region_ok_for_hw_watchpoint (", this->beneath ()->shortname ());
+   target_debug_print_CORE_ADDR (arg0);
+   fputs_unfiltered (", ", gdb_stdlog);
+-  target_debug_print_int (arg1);
++  target_debug_print_LONGEST (arg1);
+   fputs_unfiltered (") = ", gdb_stdlog);
+   target_debug_print_int (result);
+   fputs_unfiltered ("\n", gdb_stdlog);
+diff --git a/gdb/target.c b/gdb/target.c
+--- a/gdb/target.c
++++ b/gdb/target.c
+@@ -59,7 +59,7 @@ static int default_watchpoint_addr_within_range (struct target_ops *,
+ 						 CORE_ADDR, CORE_ADDR, int);
+ 
+ static int default_region_ok_for_hw_watchpoint (struct target_ops *,
+-						CORE_ADDR, int);
++						CORE_ADDR, LONGEST);
+ 
+ static void default_rcmd (struct target_ops *, const char *, struct ui_file *);
+ 
+@@ -3181,7 +3181,7 @@ target_fileio_read_stralloc (struct inferior *inf, const char *filename)
+ 
+ static int
+ default_region_ok_for_hw_watchpoint (struct target_ops *self,
+-				     CORE_ADDR addr, int len)
++				     CORE_ADDR addr, LONGEST len)
+ {
+   return (len <= gdbarch_ptr_bit (target_gdbarch ()) / TARGET_CHAR_BIT);
+ }
+diff --git a/gdb/target.h b/gdb/target.h
+--- a/gdb/target.h
++++ b/gdb/target.h
+@@ -562,7 +562,7 @@ struct target_ops
+ 
+     /* Documentation of this routine is provided with the corresponding
+        target_* macro.  */
+-    virtual int region_ok_for_hw_watchpoint (CORE_ADDR, int)
++    virtual int region_ok_for_hw_watchpoint (CORE_ADDR, LONGEST)
+       TARGET_DEFAULT_FUNC (default_region_ok_for_hw_watchpoint);
+ 
+     virtual bool can_accel_watchpoint_condition (CORE_ADDR, int, int,
+diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c
+--- a/gdb/tracepoint.c
++++ b/gdb/tracepoint.c
+@@ -829,10 +829,10 @@ collection_list::add_register (unsigned int regno)
+ void
+ collection_list::add_memrange (struct gdbarch *gdbarch,
+ 			       int type, bfd_signed_vma base,
+-			       unsigned long len)
++			       ULONGEST len)
+ {
+   if (info_verbose)
+-    printf_filtered ("(%d,%s,%ld)\n", type, paddress (gdbarch, base), len);
++    printf_filtered ("(%d,%s,%s)\n", type, paddress (gdbarch, base), pulongest (len));
+ 
+   /* type: memrange_absolute == memory, other n == basereg */
+   /* base: addr if memory, offset if reg relative.  */
+@@ -852,7 +852,7 @@ collection_list::collect_symbol (struct symbol *sym,
+ 				 CORE_ADDR scope,
+ 				 int trace_string)
+ {
+-  unsigned long len;
++  ULONGEST len;
+   unsigned int reg;
+   bfd_signed_vma offset;
+   int treat_as_expr = 0;
+@@ -873,8 +873,8 @@ collection_list::collect_symbol (struct symbol *sym,
+       offset = SYMBOL_VALUE_ADDRESS (sym);
+       if (info_verbose)
+ 	{
+-	  printf_filtered ("LOC_STATIC %s: collect %ld bytes at %s.\n",
+-			   SYMBOL_PRINT_NAME (sym), len,
++	  printf_filtered ("LOC_STATIC %s: collect %s bytes at %s.\n",
++			   SYMBOL_PRINT_NAME (sym), pulongest (len),
+ 			   paddress (gdbarch, offset));
+ 	}
+       /* A struct may be a C++ class with static fields, go to general
+@@ -906,9 +906,9 @@ collection_list::collect_symbol (struct symbol *sym,
+       offset = frame_offset + SYMBOL_VALUE (sym);
+       if (info_verbose)
+ 	{
+-	  printf_filtered ("LOC_LOCAL %s: Collect %ld bytes at offset %s"
++	  printf_filtered ("LOC_LOCAL %s: Collect %s bytes at offset %s"
+ 			   " from frame ptr reg %d\n",
+-			   SYMBOL_PRINT_NAME (sym), len,
++			   SYMBOL_PRINT_NAME (sym), pulongest (len),
+ 			   paddress (gdbarch, offset), reg);
+ 	}
+       add_memrange (gdbarch, reg, offset, len);
+@@ -918,9 +918,9 @@ collection_list::collect_symbol (struct symbol *sym,
+       offset = 0;
+       if (info_verbose)
+ 	{
+-	  printf_filtered ("LOC_REGPARM_ADDR %s: Collect %ld bytes at offset %s"
++	  printf_filtered ("LOC_REGPARM_ADDR %s: Collect %s bytes at offset %s"
+ 			   " from reg %d\n",
+-			   SYMBOL_PRINT_NAME (sym), len,
++			   SYMBOL_PRINT_NAME (sym), pulongest (len),
+ 			   paddress (gdbarch, offset), reg);
+ 	}
+       add_memrange (gdbarch, reg, offset, len);
+@@ -930,9 +930,9 @@ collection_list::collect_symbol (struct symbol *sym,
+       offset = frame_offset + SYMBOL_VALUE (sym);
+       if (info_verbose)
+ 	{
+-	  printf_filtered ("LOC_LOCAL %s: Collect %ld bytes at offset %s"
++	  printf_filtered ("LOC_LOCAL %s: Collect %s bytes at offset %s"
+ 			   " from frame ptr reg %d\n",
+-			   SYMBOL_PRINT_NAME (sym), len,
++			   SYMBOL_PRINT_NAME (sym), pulongest (len),
+ 			   paddress (gdbarch, offset), reg);
+ 	}
+       add_memrange (gdbarch, reg, offset, len);
+@@ -2447,7 +2447,8 @@ info_scope_command (const char *args_in, int from_tty)
+   const char *symname;
+   const char *save_args = args_in;
+   struct block_iterator iter;
+-  int j, count = 0;
++  int count = 0;
++  LONGEST j;
+   struct gdbarch *gdbarch;
+   int regno;
+   const char *args = args_in;
+@@ -2591,8 +2592,11 @@ info_scope_command (const char *args_in, int from_tty)
+ 		}
+ 	    }
+ 	  if (SYMBOL_TYPE (sym))
+-	    printf_filtered (", length %d.\n",
+-			     TYPE_LENGTH (check_typedef (SYMBOL_TYPE (sym))));
++	    {
++	      ULONGEST len = TYPE_LENGTH (check_typedef (SYMBOL_TYPE (sym)));
++
++	      printf_filtered (", length %s.\n", pulongest (len));
++	    }
+ 	}
+       if (BLOCK_FUNCTION (block))
+ 	break;
+diff --git a/gdb/tracepoint.h b/gdb/tracepoint.h
+--- a/gdb/tracepoint.h
++++ b/gdb/tracepoint.h
+@@ -265,7 +265,7 @@ public:
+   void add_register (unsigned int regno);
+   void add_memrange (struct gdbarch *gdbarch,
+ 		     int type, bfd_signed_vma base,
+-		     unsigned long len);
++		     ULONGEST len);
+   void collect_symbol (struct symbol *sym,
+ 		       struct gdbarch *gdbarch,
+ 		       long frame_regno, long frame_offset,
+diff --git a/gdb/typeprint.c b/gdb/typeprint.c
+--- a/gdb/typeprint.c
++++ b/gdb/typeprint.c
+@@ -120,7 +120,8 @@ print_offset_data::update (struct type *type, unsigned int field_idx,
+     {
+       /* Since union fields don't have the concept of offsets, we just
+ 	 print their sizes.  */
+-      fprintf_filtered (stream, "/*              %4u */", TYPE_LENGTH (ftype));
++      fprintf_filtered (stream, "/*              %4s */",
++			pulongest (TYPE_LENGTH (ftype)));
+       return;
+     }
+ 
+@@ -183,8 +184,8 @@ print_offset_data::finish (struct type *type, int level,
+ 
+   fputs_filtered ("\n", stream);
+   print_spaces_filtered (level + 4 + print_offset_data::indentation, stream);
+-  fprintf_filtered (stream, "/* total size (bytes): %4u */\n",
+-		    TYPE_LENGTH (type));
++  fprintf_filtered (stream, "/* total size (bytes): %4s */\n",
++		    pulongest (TYPE_LENGTH (type)));
+ }
+ 
+ 
+diff --git a/gdb/valarith.c b/gdb/valarith.c
+--- a/gdb/valarith.c
++++ b/gdb/valarith.c
+@@ -182,7 +182,7 @@ value_subscript (struct value *array, LONGEST index)
+    to doubles, but no longer does.  */
+ 
+ struct value *
+-value_subscripted_rvalue (struct value *array, LONGEST index, int lowerbound)
++value_subscripted_rvalue (struct value *array, LONGEST index, LONGEST lowerbound)
+ {
+   struct type *array_type = check_typedef (value_type (array));
+   struct type *elt_type = check_typedef (TYPE_TARGET_TYPE (array_type));
+@@ -659,7 +659,7 @@ value_concat (struct value *arg1, struct value *arg2)
+   struct value *inval1;
+   struct value *inval2;
+   struct value *outval = NULL;
+-  int inval1len, inval2len;
++  ssize_t inval1len, inval2len;
+   int count, idx;
+   char inchar;
+   struct type *type1 = check_typedef (value_type (arg1));
+@@ -1419,7 +1419,7 @@ value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
+ int
+ value_logical_not (struct value *arg1)
+ {
+-  int len;
++  LONGEST len;
+   const gdb_byte *p;
+   struct type *type1;
+ 
+@@ -1447,11 +1447,11 @@ value_logical_not (struct value *arg1)
+ static int
+ value_strcmp (struct value *arg1, struct value *arg2)
+ {
+-  int len1 = TYPE_LENGTH (value_type (arg1));
+-  int len2 = TYPE_LENGTH (value_type (arg2));
++  LONGEST len1 = TYPE_LENGTH (value_type (arg1));
++  LONGEST len2 = TYPE_LENGTH (value_type (arg2));
+   const gdb_byte *s1 = value_contents (arg1);
+   const gdb_byte *s2 = value_contents (arg2);
+-  int i, len = len1 < len2 ? len1 : len2;
++  LONGEST i, len = len1 < len2 ? len1 : len2;
+ 
+   for (i = 0; i < len; i++)
+     {
+diff --git a/gdb/valops.c b/gdb/valops.c
+--- a/gdb/valops.c
++++ b/gdb/valops.c
+@@ -81,7 +81,7 @@ oload_classification classify_oload_match (struct badness_vector *,
+ 					   int, int);
+ 
+ static struct value *value_struct_elt_for_reference (struct type *,
+-						     int, struct type *,
++						     LONGEST, struct type *,
+ 						     const char *,
+ 						     struct type *,
+ 						     int, enum noside);
+@@ -183,7 +183,7 @@ find_function_in_inferior (const char *name, struct objfile **objf_p)
+    space.  */
+ 
+ struct value *
+-value_allocate_space_in_inferior (int len)
++value_allocate_space_in_inferior (LONGEST len)
+ {
+   struct objfile *objf;
+   struct value *val = find_function_in_inferior ("malloc", &objf);
+@@ -398,12 +398,12 @@ value_cast (struct type *type, struct value *arg2)
+   if (code1 == TYPE_CODE_ARRAY)
+     {
+       struct type *element_type = TYPE_TARGET_TYPE (type);
+-      unsigned element_length = TYPE_LENGTH (check_typedef (element_type));
++      ULONGEST element_length = TYPE_LENGTH (check_typedef (element_type));
+ 
+       if (element_length > 0 && TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type))
+ 	{
+ 	  struct type *range_type = TYPE_INDEX_TYPE (type);
+-	  int val_length = TYPE_LENGTH (type2);
++	  LONGEST val_length = TYPE_LENGTH (type2);
+ 	  LONGEST low_bound, high_bound, new_length;
+ 
+ 	  if (get_discrete_bounds (range_type, &low_bound, &high_bound) < 0)
+@@ -1055,7 +1055,7 @@ value_assign (struct value *toval, struct value *fromval)
+       {
+ 	const gdb_byte *dest_buffer;
+ 	CORE_ADDR changed_addr;
+-	int changed_len;
++	LONGEST changed_len;
+         gdb_byte buffer[sizeof (LONGEST)];
+ 
+ 	if (value_bitsize (toval))
+@@ -3357,7 +3357,7 @@ compare_parameters (struct type *t1, struct type *t2, int skip_artificial)
+    the form "DOMAIN::NAME".  */
+ 
+ static struct value *
+-value_struct_elt_for_reference (struct type *domain, int offset,
++value_struct_elt_for_reference (struct type *domain, LONGEST offset,
+ 				struct type *curtype, const char *name,
+ 				struct type *intype, 
+ 				int want_address,
+@@ -3391,7 +3391,7 @@ value_struct_elt_for_reference (struct type *domain, int offset,
+ 	  if (want_address)
+ 	    return value_from_longest
+ 	      (lookup_memberptr_type (TYPE_FIELD_TYPE (t, i), domain),
+-	       offset + (LONGEST) (TYPE_FIELD_BITPOS (t, i) >> 3));
++	       offset + (TYPE_FIELD_BITPOS (t, i) >> 3));
+ 	  else if (noside != EVAL_NORMAL)
+ 	    return allocate_value (TYPE_FIELD_TYPE (t, i));
+ 	  else
+@@ -3564,7 +3564,7 @@ value_struct_elt_for_reference (struct type *domain, int offset,
+   for (i = TYPE_N_BASECLASSES (t) - 1; i >= 0; i--)
+     {
+       struct value *v;
+-      int base_offset;
++      LONGEST base_offset;
+ 
+       if (BASETYPE_VIA_VIRTUAL (t, i))
+ 	base_offset = 0;
+@@ -3713,7 +3713,7 @@ value_rtti_indirect_type (struct value *v, int *full,
+ struct value *
+ value_full_object (struct value *argp, 
+ 		   struct type *rtype, 
+-		   int xfull, int xtop,
++		   int xfull, LONGEST xtop,
+ 		   int xusing_enc)
+ {
+   struct type *real_type;
+diff --git a/gdb/valprint.c b/gdb/valprint.c
+--- a/gdb/valprint.c
++++ b/gdb/valprint.c
+@@ -879,7 +879,7 @@ generic_val_print_complex (struct type *type,
+ 
+ void
+ generic_val_print (struct type *type,
+-		   int embedded_offset, CORE_ADDR address,
++		   LONGEST embedded_offset, CORE_ADDR address,
+ 		   struct ui_file *stream, int recurse,
+ 		   struct value *original_value,
+ 		   const struct value_print_options *options,
+@@ -1773,7 +1773,7 @@ print_decimal_chars (struct ui_file *stream, const gdb_byte *valaddr,
+ 
+ void
+ print_hex_chars (struct ui_file *stream, const gdb_byte *valaddr,
+-		 unsigned len, enum bfd_endian byte_order,
++		 ULONGEST len, enum bfd_endian byte_order,
+ 		 bool zero_pad)
+ {
+   const gdb_byte *p;
+@@ -1926,17 +1926,17 @@ val_print_array_elements (struct type *type,
+ 			  int recurse,
+ 			  struct value *val,
+ 			  const struct value_print_options *options,
+-			  unsigned int i)
++			  ULONGEST i)
+ {
+   unsigned int things_printed = 0;
+-  unsigned len;
++  ULONGEST len;
+   struct type *elttype, *index_type, *base_index_type;
+-  unsigned eltlen;
++  ULONGEST eltlen;
+   /* Position of the array element we are examining to see
+      whether it is repeated.  */
+-  unsigned int rep1;
++  ULONGEST rep1;
+   /* Number of repetitions we have detected so far.  */
+-  unsigned int reps;
++  ULONGEST reps;
+   LONGEST low_bound, high_bound;
+   LONGEST low_pos, high_pos;
+ 
+@@ -2026,7 +2026,7 @@ val_print_array_elements (struct type *type,
+ 		     address, stream, recurse + 1, val, options,
+ 		     current_language);
+ 	  annotate_elt_rep (reps);
+-	  fprintf_filtered (stream, " <repeats %u times>", reps);
++	  fprintf_filtered (stream, " <repeats %s times>", pulongest (reps));
+ 	  annotate_elt_rep_end ();
+ 
+ 	  i = rep1 - 1;
+@@ -2669,7 +2669,7 @@ print_converted_chars_to_obstack (struct obstack *obstack,
+ 
+ void
+ generic_printstr (struct ui_file *stream, struct type *type, 
+-		  const gdb_byte *string, unsigned int length, 
++		  const gdb_byte *string, ULONGEST length,
+ 		  const char *encoding, int force_ellipses,
+ 		  int quote_char, int c_style_terminator,
+ 		  const struct value_print_options *options)
+diff --git a/gdb/valprint.h b/gdb/valprint.h
+--- a/gdb/valprint.h
++++ b/gdb/valprint.h
+@@ -119,7 +119,7 @@ extern void val_print_array_elements (struct type *, LONGEST,
+ 				      CORE_ADDR, struct ui_file *, int,
+ 				      struct value *,
+ 				      const struct value_print_options *,
+-				      unsigned int);
++				      ULONGEST);
+ 
+ extern void val_print_scalar_formatted (struct type *,
+ 					LONGEST,
+@@ -138,7 +138,7 @@ extern void print_decimal_chars (struct ui_file *, const gdb_byte *,
+ 				 unsigned int, bool, enum bfd_endian);
+ 
+ extern void print_hex_chars (struct ui_file *, const gdb_byte *,
+-			     unsigned int, enum bfd_endian, bool);
++			     ULONGEST, enum bfd_endian, bool);
+ 
+ extern void print_char_chars (struct ui_file *, struct type *,
+ 			      const gdb_byte *, unsigned int, enum bfd_endian);
+@@ -192,7 +192,7 @@ struct generic_val_print_decorations
+ 
+ 
+ extern void generic_val_print (struct type *type,
+-			       int embedded_offset, CORE_ADDR address,
++			       LONGEST embedded_offset, CORE_ADDR address,
+ 			       struct ui_file *stream, int recurse,
+ 			       struct value *original_value,
+ 			       const struct value_print_options *options,
+@@ -202,7 +202,7 @@ extern void generic_emit_char (int c, struct type *type, struct ui_file *stream,
+ 			       int quoter, const char *encoding);
+ 
+ extern void generic_printstr (struct ui_file *stream, struct type *type, 
+-			      const gdb_byte *string, unsigned int length, 
++			      const gdb_byte *string, ULONGEST length,
+ 			      const char *encoding, int force_ellipses,
+ 			      int quote_char, int c_style_terminator,
+ 			      const struct value_print_options *options);
+diff --git a/gdb/value.c b/gdb/value.c
+--- a/gdb/value.c
++++ b/gdb/value.c
+@@ -383,7 +383,8 @@ value_bytes_available (const struct value *value,
+ }
+ 
+ int
+-value_bits_any_optimized_out (const struct value *value, int bit_offset, int bit_length)
++value_bits_any_optimized_out (const struct value *value, LONGEST bit_offset,
++			      LONGEST bit_length)
+ {
+   gdb_assert (!value->lazy);
+ 
+@@ -831,8 +832,8 @@ find_first_range_overlap_and_match (struct ranges_and_idx *rp1,
+    Return true if the available bits match.  */
+ 
+ static bool
+-value_contents_bits_eq (const struct value *val1, int offset1,
+-			const struct value *val2, int offset2,
++value_contents_bits_eq (const struct value *val1, LONGEST offset1,
++			const struct value *val2, LONGEST offset2,
+ 			int length)
+ {
+   /* Each array element corresponds to a ranges source (unavailable,
+@@ -1423,7 +1424,8 @@ value_optimized_out (struct value *value)
+    the following LENGTH bytes.  */
+ 
+ void
+-mark_value_bytes_optimized_out (struct value *value, int offset, int length)
++mark_value_bytes_optimized_out (struct value *value, LONGEST offset,
++				LONGEST length)
+ {
+   mark_value_bits_optimized_out (value,
+ 				 offset * TARGET_CHAR_BIT,
+diff --git a/gdb/value.h b/gdb/value.h
+--- a/gdb/value.h
++++ b/gdb/value.h
+@@ -274,7 +274,7 @@ struct lval_funcs
+   /* If non-NULL, this is used to determine whether the indicated bits
+      of VALUE are a synthetic pointer.  */
+   int (*check_synthetic_pointer) (const struct value *value,
+-				  LONGEST offset, int length);
++				  LONGEST offset, LONGEST length);
+ 
+   /* Return a duplicate of VALUE's closure, for use in a new value.
+      This may simply return the same closure, if VALUE's is
+@@ -405,7 +405,8 @@ extern int value_optimized_out (struct value *value);
+    otherwise.  */
+ 
+ extern int value_bits_any_optimized_out (const struct value *value,
+-					 int bit_offset, int bit_length);
++					 LONGEST bit_offset,
++					 LONGEST bit_length);
+ 
+ /* Like value_optimized_out, but return true iff the whole value is
+    optimized out.  */
+@@ -415,7 +416,7 @@ extern int value_entirely_optimized_out (struct value *value);
+    LENGTH bytes as optimized out.  */
+ 
+ extern void mark_value_bytes_optimized_out (struct value *value,
+-					    int offset, int length);
++					    LONGEST offset, LONGEST length);
+ 
+ /* Mark VALUE's content bits starting at OFFSET and extending for
+    LENGTH bits as optimized out.  */
+@@ -849,12 +850,11 @@ extern struct value *value_primitive_field (struct value *arg1, LONGEST offset,
+ 					    int fieldno,
+ 					    struct type *arg_type);
+ 
+-
+ extern struct type *value_rtti_indirect_type (struct value *, int *, LONGEST *,
+ 					      int *);
+ 
+ extern struct value *value_full_object (struct value *, struct type *, int,
+-					int, int);
++					LONGEST, int);
+ 
+ extern struct value *value_cast_pointers (struct type *, struct value *, int);
+ 
+@@ -1147,10 +1147,11 @@ extern struct value *value_literal_complex (struct value *, struct value *,
+ extern struct value *find_function_in_inferior (const char *,
+ 						struct objfile **);
+ 
+-extern struct value *value_allocate_space_in_inferior (int);
++extern struct value *value_allocate_space_in_inferior (LONGEST);
+ 
+ extern struct value *value_subscripted_rvalue (struct value *array,
+-					       LONGEST index, int lowerbound);
++					       LONGEST index,
++					       LONGEST lowerbound);
+ 
+ /* User function handler.  */
+ 
+diff --git a/gdb/x86-nat.c b/gdb/x86-nat.c
+--- a/gdb/x86-nat.c
++++ b/gdb/x86-nat.c
+@@ -173,7 +173,7 @@ x86_remove_watchpoint (CORE_ADDR addr, int len,
+    address ADDR and whose length is LEN bytes.  */
+ 
+ int
+-x86_region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
++x86_region_ok_for_hw_watchpoint (CORE_ADDR addr, LONGEST len)
+ {
+   struct x86_debug_reg_state *state
+     = x86_debug_reg_state (inferior_ptid.pid ());
+diff --git a/gdb/x86-nat.h b/gdb/x86-nat.h
+--- a/gdb/x86-nat.h
++++ b/gdb/x86-nat.h
+@@ -49,7 +49,7 @@ extern void x86_forget_process (pid_t pid);
+    definitions.  */
+ 
+ extern int x86_can_use_hw_breakpoint (enum bptype type, int cnt, int othertype);
+-extern int x86_region_ok_for_hw_watchpoint (CORE_ADDR addr, int len);
++extern int x86_region_ok_for_hw_watchpoint (CORE_ADDR addr, LONGEST len);
+ extern int x86_stopped_by_watchpoint ();
+ extern int x86_stopped_data_address (CORE_ADDR *addr_p);
+ extern int x86_insert_watchpoint (CORE_ADDR addr, int len,
+@@ -82,7 +82,7 @@ struct x86_nat_target : public BaseTarget
+   int can_use_hw_breakpoint (enum bptype type, int cnt, int othertype) override
+   { return x86_can_use_hw_breakpoint (type, cnt, othertype); }
+ 
+-  int region_ok_for_hw_watchpoint (CORE_ADDR addr, int len) override
++  int region_ok_for_hw_watchpoint (CORE_ADDR addr, LONGEST len) override
+   { return x86_region_ok_for_hw_watchpoint (addr, len); }
+ 
+   int insert_watchpoint (CORE_ADDR addr, int len,
diff --git a/SOURCES/gdb-rhbz795424-bitpos-21of25.patch b/SOURCES/gdb-rhbz795424-bitpos-21of25.patch
new file mode 100644
index 0000000..5617a50
--- /dev/null
+++ b/SOURCES/gdb-rhbz795424-bitpos-21of25.patch
@@ -0,0 +1,181 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-rhbz795424-bitpos-21of25.patch
+
+;; Fix `GDB cannot access struct member whose offset is larger than 256MB'
+;; (RH BZ 795424).
+;;=push
+
+http://sourceware.org/ml/gdb-patches/2012-09/msg00632.html
+
+--MP_/PnL6l3LUsXWpZ/olqawWlzb
+Content-Type: text/plain; charset=US-ASCII
+Content-Transfer-Encoding: 7bit
+Content-Disposition: inline
+
+Hi,
+
+This is part two of the bitpos expansion patch.  This implements checks
+in some places in the code to ensure that a type size in ULONGEST is
+small enough to fit into host memory.  Tested for regressions on x86_64
+Fedora 16.
+
+Regards,
+Siddhesh
+
+--MP_/PnL6l3LUsXWpZ/olqawWlzb
+Content-Type: text/plain
+Content-Transfer-Encoding: quoted-printable
+Content-Disposition: attachment; filename=ChangeLog-ensure_sizet
+
+gdb/ChangeLog
+
+	* alpha-tdep.c (alpha_push_dummy_call) Check for underflow in
+	SP.
+	* cp-valprint (cp_print_value): Ensure BASECLASS fits into
+	size_t.
+	* dwarf2loc.c (read_pieced_value): Ensure that THIS_SIZE fits
+	into size_t.
+	(write_pieced_value): Likewise.
+	* findcmd.c (parse_find_args): Ensure PATTERN_BUF_SIZE fits into
+	size_t.
+	* p-valprint (pascal_object_print_value): Ensure BASECLASS fits
+	into size_t.
+	* utils.c (ulongest_fits_host_or_error): New function to find if
+	a ULONGEST number fits into size_t.
+	* utils.h: Declare ulongest_fits_host_or_error.
+	* valops.c (search_struct_method): Ensure BASECLASS fits into
+	size_t.
+	* value.c (allocate_value_lazy): Ensure TYPE fits into size_t.
+	(allocate_value_contents): Likewise.
+	(set_value_enclosing_type): Ensure NEW_ENCL_TYPE fits into
+	size_t.
+	* vax-tdep.c (vax_return_value): Ensure that TYPE fits into
+	size_t.
+
+--MP_/PnL6l3LUsXWpZ/olqawWlzb
+Content-Type: text/x-patch
+Content-Transfer-Encoding: 7bit
+Content-Disposition: attachment; filename=bitpos-ensure-size_t.patch
+
+diff --git a/gdb/alpha-tdep.c b/gdb/alpha-tdep.c
+--- a/gdb/alpha-tdep.c
++++ b/gdb/alpha-tdep.c
+@@ -413,6 +413,13 @@ alpha_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+     accumulate_size = 0;
+   else
+     accumulate_size -= sizeof(arg_reg_buffer);
++
++  /* Check for underflow.  */
++  if (sp - accumulate_size > sp)
++    error (_("Insufficient memory in GDB host for arguments, "
++	     "need %s bytes, but less than %s bytes available."),
++	   plongest (accumulate_size), plongest (CORE_ADDR_MAX - sp));
++
+   sp -= accumulate_size;
+ 
+   /* Keep sp aligned to a multiple of 16 as the ABI requires.  */
+diff --git a/gdb/cp-valprint.c b/gdb/cp-valprint.c
+--- a/gdb/cp-valprint.c
++++ b/gdb/cp-valprint.c
+@@ -529,6 +529,7 @@ cp_print_value (struct type *type, struct type *real_type,
+ 	      if ((boffset + offset) < 0
+ 		  || (boffset + offset) >= TYPE_LENGTH (real_type))
+ 		{
++		  ulongest_fits_host_or_error (TYPE_LENGTH (baseclass));
+ 		  gdb::byte_vector buf (TYPE_LENGTH (baseclass));
+ 
+ 		  if (target_read_memory (address + boffset, buf.data (),
+diff --git a/gdb/defs.h b/gdb/defs.h
+--- a/gdb/defs.h
++++ b/gdb/defs.h
+@@ -665,4 +665,6 @@ DEF_ENUM_FLAGS_TYPE (enum user_selected_what_flag, user_selected_what);
+ 
+ #include "utils.h"
+ 
++extern void ulongest_fits_host_or_error (ULONGEST num);
++
+ #endif /* #ifndef DEFS_H */
+diff --git a/gdb/p-valprint.c b/gdb/p-valprint.c
+--- a/gdb/p-valprint.c
++++ b/gdb/p-valprint.c
+@@ -773,6 +773,7 @@ pascal_object_print_value (struct type *type, const gdb_byte *valaddr,
+ 
+ 	  if (boffset < 0 || boffset >= TYPE_LENGTH (type))
+ 	    {
++	      ulongest_fits_host_or_error (TYPE_LENGTH (baseclass));
+ 	      buf.resize (TYPE_LENGTH (baseclass));
+ 
+ 	      base_valaddr = buf.data ();
+diff --git a/gdb/utils.c b/gdb/utils.c
+--- a/gdb/utils.c
++++ b/gdb/utils.c
+@@ -2834,6 +2834,17 @@ string_to_core_addr (const char *my_string)
+   return addr;
+ }
+ 
++/* Ensure that the input NUM is not larger than the maximum capacity of the
++   host system.  We choose SIZE_MAX / 8 as a conservative estimate of the size
++   of a resource that a system may allocate.  */
++void
++ulongest_fits_host_or_error (ULONGEST num)
++{
++  if (num > SIZE_MAX / 8)
++    error (_("Insufficient memory in host GDB for object of size %s bytes, "
++	     "maximum allowed %s bytes."), pulongest (num),
++	   pulongest (SIZE_MAX / 8));
++}
+ #if GDB_SELF_TEST
+ 
+ static void
+diff --git a/gdb/valops.c b/gdb/valops.c
+--- a/gdb/valops.c
++++ b/gdb/valops.c
+@@ -2088,6 +2088,7 @@ search_struct_method (const char *name, struct value **arg1p,
+ 	    {
+ 	      CORE_ADDR address;
+ 
++	      ulongest_fits_host_or_error (TYPE_LENGTH (baseclass));
+ 	      gdb::byte_vector tmp (TYPE_LENGTH (baseclass));
+ 	      address = value_address (*arg1p);
+ 
+diff --git a/gdb/value.c b/gdb/value.c
+--- a/gdb/value.c
++++ b/gdb/value.c
+@@ -933,6 +933,7 @@ allocate_value_lazy (struct type *type)
+      description correctly.  */
+   check_typedef (type);
+ 
++  ulongest_fits_host_or_error (TYPE_LENGTH (type));
+   val = new struct value (type);
+ 
+   /* Values start out on the all_values chain.  */
+@@ -1015,6 +1016,8 @@ check_type_length_before_alloc (const struct type *type)
+ static void
+ allocate_value_contents (struct value *val)
+ {
++  ulongest_fits_host_or_error (TYPE_LENGTH (val->enclosing_type));
++
+   if (!val->contents)
+     {
+       check_type_length_before_alloc (val->enclosing_type);
+@@ -2876,6 +2879,7 @@ set_value_enclosing_type (struct value *val, struct type *new_encl_type)
+   if (TYPE_LENGTH (new_encl_type) > TYPE_LENGTH (value_enclosing_type (val)))
+     {
+       check_type_length_before_alloc (new_encl_type);
++      ulongest_fits_host_or_error (TYPE_LENGTH (new_encl_type));
+       val->contents
+ 	.reset ((gdb_byte *) xrealloc (val->contents.release (),
+ 				       TYPE_LENGTH (new_encl_type)));
+diff --git a/gdb/vax-tdep.c b/gdb/vax-tdep.c
+--- a/gdb/vax-tdep.c
++++ b/gdb/vax-tdep.c
+@@ -218,6 +218,7 @@ vax_return_value (struct gdbarch *gdbarch, struct value *function,
+ 	  ULONGEST addr;
+ 
+ 	  regcache_raw_read_unsigned (regcache, VAX_R0_REGNUM, &addr);
++	  ulongest_fits_host_or_error (TYPE_LENGTH (type));
+ 	  read_memory (addr, readbuf, len);
+ 	}
+ 
diff --git a/SOURCES/gdb-rhbz795424-bitpos-22of25.patch b/SOURCES/gdb-rhbz795424-bitpos-22of25.patch
new file mode 100644
index 0000000..8072f77
--- /dev/null
+++ b/SOURCES/gdb-rhbz795424-bitpos-22of25.patch
@@ -0,0 +1,558 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-rhbz795424-bitpos-22of25.patch
+
+;; Fix `GDB cannot access struct member whose offset is larger than 256MB'
+;; (RH BZ 795424).
+;;=push
+
+http://sourceware.org/ml/gdb-patches/2012-09/msg00629.html
+
+--MP_/6HRlH6vpyqtSy4CYyMrX6b2
+Content-Type: text/plain; charset=US-ASCII
+Content-Transfer-Encoding: 7bit
+Content-Disposition: inline
+
+Hi,
+
+This is part three of the bitpos expansion change.  Some architectures
+allow arbitrary length watchpoints and combined with the fact that type
+lengths could be large enough, we need LONGEST for watchpoint lengths.
+It is architecture dependent however, whether the LONGEST is needed or
+not.  This patch updates the signatures of watchpoint insertion and
+removal functions of all architectures (to comply with the function
+signatures in the callback struct), but expands types only in
+architectures that need it.  Tested on Fedora 16 x86_64.
+
+Regards,
+Siddhesh
+--MP_/6HRlH6vpyqtSy4CYyMrX6b2
+Content-Type: text/plain
+Content-Transfer-Encoding: quoted-printable
+Content-Disposition: attachment; filename=ChangeLog-wp
+
+gdb/ChangeLog:
+
+	* arm-linux-nat.c (arm_linux_insert_watchpoint): Expand
+	parameter LEN to LONGEST.
+	(arm_linux_remove_watchpoint): Likewise.
+	(arm_linux_watchpoint_addr_within_range): Expand parameter
+	LENGTH to LONGEST.
+	* i386-nat.c (i386_insert_watchpoint): Expand parameter LEN to
+	LONGEST.
+	(i386_remove_watchpoint): Likewise.
+	* ia64-linux-nat.c (ia64_linux_insert_watchpoint): Likewise.
+	(ia64_linux_remove_watchpoint): Likewise.
+	* inf-ttrace.c (inf_ttrace_insert_watchpoint): Likewise.
+	Expand NUM_PAGES, PAGE to LONGEST.
+	(inf_ttrace_remove_watchpoint): Likewise.
+	* mips-linux-nat.c (mips_linux_insert_watchpoint): Expand
+	parameter LEN to LONGEST.
+	(mips_linux_remove_watchpoint): Likewise.
+	* nto-procfs.c (procfs_remove_hw_watchpoint): Likewise.
+	(procfs_insert_hw_watchpoint): Likewise.
+	* ppc-linux-nat.c (calculate_dvc): Likewise.  Expand I,
+	NUM_BYTE_ENABLE to LONGEST.
+	(check_condition): Expand parameter LEN to point to LONGEST.
+	(ppc_linux_can_accel_watchpoint_condition): Expand parameter
+	LEN to LONGEST.
+	(create_watchpoint_request): Likewise.
+	(ppc_linux_insert_watchpoint): Likewise.
+	(ppc_linux_remove_watchpoint): Likewise.
+	(ppc_linux_watchpoint_addr_within_range): Expand parameter
+	LENGTH to LONGEST.
+	* procfs.c (proc_set_watchpoint): Expand parameter LEN to
+	LONGEST.
+	(procfs_set_watchpoint): Likewise.
+	(procfs_insert_watchpoint): Likewise.
+	(procfs_remove_watchpoint): Likewise.
+	* remote-m32r-sdi.c (m32r_insert_watchpoint): Likewise.  Use
+	plongest to format print LEN.
+	(m32r_remove_watchpoint): Likewise.
+	* remote-mips.c (mips_insert_watchpoint): Expand parameter LEN
+	to LONGEST.
+	(mips_remove_watchpoint): Likewise.
+	* remote.c (remote_insert_watchpoint): Likewise.
+	Use phex_nz to format print LEN.
+	(remote_remove_watchpoint): Likewise.
+	(remote_watchpoint_addr_within_range): Expand parameter LENGTH
+	to LONGEST.
+	* s390-linux-nat.c (s390_insert_watchpoint): Expand parameter LEN to
+	LONGEST.
+	(s390_remove_watchpoint): Likewise.
+	* target.c (update_current_target): Expand parameter LEN for
+	callbacks to TO_INSERT_WATCHPOINT, TO_REMOVE_WATCHPOINT,
+	TO_CAN_ACCEL_WATCHPOINT_CONDITION, to LONGEST.
+	(default_watchpoint_addr_within_range): Expand parameter
+	LENGTH to LONGEST.
+	(debug_to_can_accel_watchpoint_condition): Expand parameter LEN
+	to LONGEST.  Use plongest to format print LEN.
+	(debug_to_watchpoint_addr_within_range): Expand parameter LENGTH
+	to LONGEST.  Use plongest to format print LENGTH.
+	(debug_to_insert_watchpoint): Expand parameter LEN to LONGEST.
+	Use plongest to format print LEN.
+	(debug_to_remove_watchpoint): Likewise.
+	* target.h (struct target_ops): Expand parameter LEN of
+	TO_REMOVE_WATCHPOINT, TO_INSERT_WATCHPOINT,
+	TO_WATCHPOINT_ADDR_WITHIN_RANGE and
+	TO_CAN_ACCEL_WATCHPOINT_CONDITION to LONGEST.
+
+--MP_/6HRlH6vpyqtSy4CYyMrX6b2
+Content-Type: text/x-patch
+Content-Transfer-Encoding: 7bit
+Content-Disposition: attachment; filename=bitpos-wp.patch
+
+diff --git a/gdb/aarch64-linux-nat.c b/gdb/aarch64-linux-nat.c
+--- a/gdb/aarch64-linux-nat.c
++++ b/gdb/aarch64-linux-nat.c
+@@ -63,14 +63,14 @@ public:
+   int can_use_hw_breakpoint (enum bptype, int, int) override;
+   int insert_hw_breakpoint (struct gdbarch *, struct bp_target_info *) override;
+   int remove_hw_breakpoint (struct gdbarch *, struct bp_target_info *) override;
+-  int region_ok_for_hw_watchpoint (CORE_ADDR, int) override;
++  int region_ok_for_hw_watchpoint (CORE_ADDR, LONGEST) override;
+   int insert_watchpoint (CORE_ADDR, int, enum target_hw_bp_type,
+ 			 struct expression *) override;
+   int remove_watchpoint (CORE_ADDR, int, enum target_hw_bp_type,
+ 			 struct expression *) override;
+   bool stopped_by_watchpoint () override;
+   bool stopped_data_address (CORE_ADDR *) override;
+-  bool watchpoint_addr_within_range (CORE_ADDR, CORE_ADDR, int) override;
++  bool watchpoint_addr_within_range (CORE_ADDR, CORE_ADDR, LONGEST) override;
+ 
+   int can_do_single_step () override;
+ 
+@@ -887,7 +887,8 @@ aarch64_linux_nat_target::stopped_by_watchpoint ()
+ 
+ bool
+ aarch64_linux_nat_target::watchpoint_addr_within_range (CORE_ADDR addr,
+-							CORE_ADDR start, int length)
++							CORE_ADDR start,
++							LONGEST length)
+ {
+   return start <= addr && start + length - 1 >= addr;
+ }
+diff --git a/gdb/arm-linux-nat.c b/gdb/arm-linux-nat.c
+--- a/gdb/arm-linux-nat.c
++++ b/gdb/arm-linux-nat.c
+@@ -80,7 +80,7 @@ public:
+ 
+   int remove_hw_breakpoint (struct gdbarch *, struct bp_target_info *) override;
+ 
+-  int region_ok_for_hw_watchpoint (CORE_ADDR, int) override;
++  int region_ok_for_hw_watchpoint (CORE_ADDR, LONGEST) override;
+ 
+   int insert_watchpoint (CORE_ADDR, int, enum target_hw_bp_type,
+ 			 struct expression *) override;
+@@ -91,7 +91,7 @@ public:
+ 
+   bool stopped_data_address (CORE_ADDR *) override;
+ 
+-  bool watchpoint_addr_within_range (CORE_ADDR, CORE_ADDR, int) override;
++  bool watchpoint_addr_within_range (CORE_ADDR, CORE_ADDR, LONGEST) override;
+ 
+   const struct target_desc *read_description () override;
+ 
+@@ -1207,7 +1207,7 @@ arm_linux_nat_target::stopped_by_watchpoint ()
+ bool
+ arm_linux_nat_target::watchpoint_addr_within_range (CORE_ADDR addr,
+ 						    CORE_ADDR start,
+-						    int length)
++						    LONGEST length)
+ {
+   return start <= addr && start + length - 1 >= addr;
+ }
+diff --git a/gdb/nat/aarch64-linux-hw-point.c b/gdb/nat/aarch64-linux-hw-point.c
+--- a/gdb/nat/aarch64-linux-hw-point.c
++++ b/gdb/nat/aarch64-linux-hw-point.c
+@@ -137,7 +137,7 @@ aarch64_point_encode_ctrl_reg (enum target_hw_bp_type type, int offset, int len)
+    Return 0 for any non-compliant ADDR and/or LEN; return 1 otherwise.  */
+ 
+ static int
+-aarch64_point_is_aligned (int is_watchpoint, CORE_ADDR addr, int len)
++aarch64_point_is_aligned (int is_watchpoint, CORE_ADDR addr, LONGEST len)
+ {
+   unsigned int alignment = 0;
+ 
+@@ -212,9 +212,10 @@ aarch64_point_is_aligned (int is_watchpoint, CORE_ADDR addr, int len)
+    an address within the latter. */
+ 
+ static void
+-aarch64_align_watchpoint (CORE_ADDR addr, int len, CORE_ADDR *aligned_addr_p,
++aarch64_align_watchpoint (CORE_ADDR addr, LONGEST len,
++			  CORE_ADDR *aligned_addr_p,
+ 			  int *aligned_offset_p, int *aligned_len_p,
+-			  CORE_ADDR *next_addr_p, int *next_len_p,
++			  CORE_ADDR *next_addr_p, LONGEST *next_len_p,
+ 			  CORE_ADDR *next_addr_orig_p)
+ {
+   int aligned_len;
+@@ -611,7 +612,7 @@ aarch64_handle_aligned_watchpoint (enum target_hw_bp_type type,
+ 
+ static int
+ aarch64_handle_unaligned_watchpoint (enum target_hw_bp_type type,
+-				     CORE_ADDR addr, int len, int is_insert,
++				     CORE_ADDR addr, LONGEST len, int is_insert,
+ 				     struct aarch64_debug_reg_state *state)
+ {
+   CORE_ADDR addr_orig = addr;
+@@ -641,12 +642,12 @@ aarch64_handle_unaligned_watchpoint (enum target_hw_bp_type type,
+ 		      "                                "
+ 		      "addr_orig: %s\n"
+ 		      "                                "
+-		      "next_addr: %s,    next_len: %d\n"
++		      "next_addr: %s,    next_len: %s\n"
+ 		      "                           "
+ 		      "addr_orig_next: %s\n",
+ 		      is_insert, core_addr_to_string_nz (aligned_addr),
+ 		      aligned_len, core_addr_to_string_nz (addr_orig),
+-		      core_addr_to_string_nz (addr), len,
++		      core_addr_to_string_nz (addr), plongest (len),
+ 		      core_addr_to_string_nz (addr_orig_next));
+ 
+       addr_orig = addr_orig_next;
+@@ -660,7 +661,7 @@ aarch64_handle_unaligned_watchpoint (enum target_hw_bp_type type,
+ 
+ int
+ aarch64_handle_watchpoint (enum target_hw_bp_type type, CORE_ADDR addr,
+-			   int len, int is_insert,
++			   LONGEST len, int is_insert,
+ 			   struct aarch64_debug_reg_state *state)
+ {
+   if (aarch64_point_is_aligned (1 /* is_watchpoint */ , addr, len))
+@@ -722,14 +723,14 @@ aarch64_linux_set_debug_regs (struct aarch64_debug_reg_state *state,
+ void
+ aarch64_show_debug_reg_state (struct aarch64_debug_reg_state *state,
+ 			      const char *func, CORE_ADDR addr,
+-			      int len, enum target_hw_bp_type type)
++			      LONGEST len, enum target_hw_bp_type type)
+ {
+   int i;
+ 
+   debug_printf ("%s", func);
+   if (addr || len)
+-    debug_printf (" (addr=0x%08lx, len=%d, type=%s)",
+-		  (unsigned long) addr, len,
++    debug_printf (" (addr=0x%08lx, len=%s, type=%s)",
++		  (unsigned long) addr, plongest (len),
+ 		  type == hw_write ? "hw-write-watchpoint"
+ 		  : (type == hw_read ? "hw-read-watchpoint"
+ 		     : (type == hw_access ? "hw-access-watchpoint"
+@@ -812,7 +813,7 @@ aarch64_linux_get_debug_reg_capacity (int tid)
+    ADDR and whose length is LEN in bytes.  */
+ 
+ int
+-aarch64_linux_region_ok_for_watchpoint (CORE_ADDR addr, int len)
++aarch64_linux_region_ok_for_watchpoint (CORE_ADDR addr, LONGEST len)
+ {
+   CORE_ADDR aligned_addr;
+ 
+diff --git a/gdb/nat/aarch64-linux-hw-point.h b/gdb/nat/aarch64-linux-hw-point.h
+--- a/gdb/nat/aarch64-linux-hw-point.h
++++ b/gdb/nat/aarch64-linux-hw-point.h
+@@ -176,7 +176,7 @@ int aarch64_handle_breakpoint (enum target_hw_bp_type type, CORE_ADDR addr,
+ 			       int len, int is_insert,
+ 			       struct aarch64_debug_reg_state *state);
+ int aarch64_handle_watchpoint (enum target_hw_bp_type type, CORE_ADDR addr,
+-			       int len, int is_insert,
++			       LONGEST len, int is_insert,
+ 			       struct aarch64_debug_reg_state *state);
+ 
+ void aarch64_linux_set_debug_regs (struct aarch64_debug_reg_state *state,
+@@ -184,12 +184,12 @@ void aarch64_linux_set_debug_regs (struct aarch64_debug_reg_state *state,
+ 
+ void aarch64_show_debug_reg_state (struct aarch64_debug_reg_state *state,
+ 				   const char *func, CORE_ADDR addr,
+-				   int len, enum target_hw_bp_type type);
++				   LONGEST len, enum target_hw_bp_type type);
+ 
+ void aarch64_linux_get_debug_reg_capacity (int tid);
+ 
+ struct aarch64_debug_reg_state *aarch64_get_debug_reg_state (pid_t pid);
+ 
+-int aarch64_linux_region_ok_for_watchpoint (CORE_ADDR addr, int len);
++int aarch64_linux_region_ok_for_watchpoint (CORE_ADDR addr, LONGEST len);
+ 
+ #endif /* AARCH64_LINUX_HW_POINT_H */
+diff --git a/gdb/ppc-linux-nat.c b/gdb/ppc-linux-nat.c
+--- a/gdb/ppc-linux-nat.c
++++ b/gdb/ppc-linux-nat.c
+@@ -282,7 +282,7 @@ struct ppc_linux_nat_target final : public linux_nat_target
+   int remove_hw_breakpoint (struct gdbarch *, struct bp_target_info *)
+     override;
+ 
+-  int region_ok_for_hw_watchpoint (CORE_ADDR, int) override;
++  int region_ok_for_hw_watchpoint (CORE_ADDR, LONGEST) override;
+ 
+   int insert_watchpoint (CORE_ADDR, int, enum target_hw_bp_type,
+ 			 struct expression *) override;
+@@ -300,9 +300,9 @@ struct ppc_linux_nat_target final : public linux_nat_target
+ 
+   bool stopped_data_address (CORE_ADDR *) override;
+ 
+-  bool watchpoint_addr_within_range (CORE_ADDR, CORE_ADDR, int) override;
++  bool watchpoint_addr_within_range (CORE_ADDR, CORE_ADDR, LONGEST) override;
+ 
+-  bool can_accel_watchpoint_condition (CORE_ADDR, int, int, struct expression *)
++  bool can_accel_watchpoint_condition (CORE_ADDR, LONGEST, int, struct expression *)
+     override;
+ 
+   int masked_watch_num_registers (CORE_ADDR, CORE_ADDR) override;
+@@ -1659,11 +1659,11 @@ can_use_watchpoint_cond_accel (void)
+    CONDITION_VALUE will hold the value which should be put in the
+    DVC register.  */
+ static void
+-calculate_dvc (CORE_ADDR addr, int len, CORE_ADDR data_value,
++calculate_dvc (CORE_ADDR addr, LONGEST len, CORE_ADDR data_value,
+ 	       uint32_t *condition_mode, uint64_t *condition_value)
+ {
+-  int i, num_byte_enable, align_offset, num_bytes_off_dvc,
+-      rightmost_enabled_byte;
++  LONGEST i, num_byte_enable;
++  int align_offset, num_bytes_off_dvc, rightmost_enabled_byte;
+   CORE_ADDR addr_end_data, addr_end_dvc;
+ 
+   /* The DVC register compares bytes within fixed-length windows which
+@@ -1751,7 +1751,7 @@ num_memory_accesses (const std::vector<value_ref_ptr> &chain)
+    of the constant.  */
+ static int
+ check_condition (CORE_ADDR watch_addr, struct expression *cond,
+-		 CORE_ADDR *data_value, int *len)
++		 CORE_ADDR *data_value, LONGEST *len)
+ {
+   int pc = 1, num_accesses_left, num_accesses_right;
+   struct value *left_val, *right_val;
+@@ -1802,7 +1802,8 @@ check_condition (CORE_ADDR watch_addr, struct expression *cond,
+    the condition expression, thus only triggering the watchpoint when it is
+    true.  */
+ bool
+-ppc_linux_nat_target::can_accel_watchpoint_condition (CORE_ADDR addr, int len,
++ppc_linux_nat_target::can_accel_watchpoint_condition (CORE_ADDR addr,
++						      LONGEST len,
+ 						      int rw,
+ 						      struct expression *cond)
+ {
+@@ -1820,7 +1821,7 @@ ppc_linux_nat_target::can_accel_watchpoint_condition (CORE_ADDR addr, int len,
+ 
+ static void
+ create_watchpoint_request (struct ppc_hw_breakpoint *p, CORE_ADDR addr,
+-			   int len, enum target_hw_bp_type type,
++			   LONGEST len, enum target_hw_bp_type type,
+ 			   struct expression *cond, int insert)
+ {
+   if (len == 1
+@@ -2086,7 +2087,7 @@ ppc_linux_nat_target::stopped_by_watchpoint ()
+ bool
+ ppc_linux_nat_target::watchpoint_addr_within_range (CORE_ADDR addr,
+ 						    CORE_ADDR start,
+-						    int length)
++						    LONGEST length)
+ {
+   int mask;
+ 
+diff --git a/gdb/procfs.c b/gdb/procfs.c
+--- a/gdb/procfs.c
++++ b/gdb/procfs.c
+@@ -1561,7 +1561,7 @@ procfs_address_to_host_pointer (CORE_ADDR addr)
+ }
+ 
+ static int
+-proc_set_watchpoint (procinfo *pi, CORE_ADDR addr, int len, int wflags)
++proc_set_watchpoint (procinfo *pi, CORE_ADDR addr, LONGEST len, int wflags)
+ {
+   struct {
+     procfs_ctl_t cmd;
+@@ -3214,7 +3214,7 @@ procfs_target::pid_to_str (ptid_t ptid)
+ /* Insert a watchpoint.  */
+ 
+ static int
+-procfs_set_watchpoint (ptid_t ptid, CORE_ADDR addr, int len, int rwflag,
++procfs_set_watchpoint (ptid_t ptid, CORE_ADDR addr, LONGEST len, int rwflag,
+ 		       int after)
+ {
+   int       pflags = 0;
+diff --git a/gdb/remote.c b/gdb/remote.c
+--- a/gdb/remote.c
++++ b/gdb/remote.c
+@@ -454,7 +454,7 @@ public:
+ 
+   bool stopped_data_address (CORE_ADDR *) override;
+ 
+-  bool watchpoint_addr_within_range (CORE_ADDR, CORE_ADDR, int) override;
++  bool watchpoint_addr_within_range (CORE_ADDR, CORE_ADDR, LONGEST) override;
+ 
+   int can_use_hw_breakpoint (enum bptype, int, int) override;
+ 
+@@ -10342,7 +10342,7 @@ remote_target::insert_watchpoint (CORE_ADDR addr, int len,
+   p = strchr (rs->buf, '\0');
+   addr = remote_address_masked (addr);
+   p += hexnumstr (p, (ULONGEST) addr);
+-  xsnprintf (p, endbuf - p, ",%x", len);
++  xsnprintf (p, endbuf - p, ",%s", phex_nz (len, sizeof (len)));
+ 
+   putpkt (rs->buf);
+   getpkt (&rs->buf, &rs->buf_size, 0);
+@@ -10362,7 +10362,7 @@ remote_target::insert_watchpoint (CORE_ADDR addr, int len,
+ 
+ bool
+ remote_target::watchpoint_addr_within_range (CORE_ADDR addr,
+-					     CORE_ADDR start, int length)
++					     CORE_ADDR start, LONGEST length)
+ {
+   CORE_ADDR diff = remote_address_masked (addr - start);
+ 
+@@ -10391,7 +10391,7 @@ remote_target::remove_watchpoint (CORE_ADDR addr, int len,
+   p = strchr (rs->buf, '\0');
+   addr = remote_address_masked (addr);
+   p += hexnumstr (p, (ULONGEST) addr);
+-  xsnprintf (p, endbuf - p, ",%x", len);
++  xsnprintf (p, endbuf - p, ",%s", phex_nz (len, sizeof (len)));
+   putpkt (rs->buf);
+   getpkt (&rs->buf, &rs->buf_size, 0);
+ 
+diff --git a/gdb/s390-linux-nat.c b/gdb/s390-linux-nat.c
+--- a/gdb/s390-linux-nat.c
++++ b/gdb/s390-linux-nat.c
+@@ -121,7 +121,7 @@ public:
+     override;
+   int remove_hw_breakpoint (struct gdbarch *, struct bp_target_info *)
+     override;
+-  int region_ok_for_hw_watchpoint (CORE_ADDR, int) override;
++  int region_ok_for_hw_watchpoint (CORE_ADDR, LONGEST) override;
+   bool have_continuable_watchpoint () override { return true; }
+   bool stopped_by_watchpoint () override;
+   int insert_watchpoint (CORE_ADDR, int, enum target_hw_bp_type,
+diff --git a/gdb/target-delegates.c b/gdb/target-delegates.c
+--- a/gdb/target-delegates.c
++++ b/gdb/target-delegates.c
+@@ -38,9 +38,9 @@ struct dummy_target : public target_ops
+   int have_steppable_watchpoint () override;
+   bool have_continuable_watchpoint () override;
+   bool stopped_data_address (CORE_ADDR *arg0) override;
+-  bool watchpoint_addr_within_range (CORE_ADDR arg0, CORE_ADDR arg1, int arg2) override;
++  bool watchpoint_addr_within_range (CORE_ADDR arg0, CORE_ADDR arg1, LONGEST arg2) override;
+   int region_ok_for_hw_watchpoint (CORE_ADDR arg0, LONGEST arg1) override;
+-  bool can_accel_watchpoint_condition (CORE_ADDR arg0, int arg1, int arg2, struct expression *arg3) override;
++  bool can_accel_watchpoint_condition (CORE_ADDR arg0, LONGEST arg1, int arg2, struct expression *arg3) override;
+   int masked_watch_num_registers (CORE_ADDR arg0, CORE_ADDR arg1) override;
+   int can_do_single_step () override;
+   bool supports_terminal_ours () override;
+@@ -206,9 +206,9 @@ struct debug_target : public target_ops
+   int have_steppable_watchpoint () override;
+   bool have_continuable_watchpoint () override;
+   bool stopped_data_address (CORE_ADDR *arg0) override;
+-  bool watchpoint_addr_within_range (CORE_ADDR arg0, CORE_ADDR arg1, int arg2) override;
++  bool watchpoint_addr_within_range (CORE_ADDR arg0, CORE_ADDR arg1, LONGEST arg2) override;
+   int region_ok_for_hw_watchpoint (CORE_ADDR arg0, LONGEST arg1) override;
+-  bool can_accel_watchpoint_condition (CORE_ADDR arg0, int arg1, int arg2, struct expression *arg3) override;
++  bool can_accel_watchpoint_condition (CORE_ADDR arg0, LONGEST arg1, int arg2, struct expression *arg3) override;
+   int masked_watch_num_registers (CORE_ADDR arg0, CORE_ADDR arg1) override;
+   int can_do_single_step () override;
+   bool supports_terminal_ours () override;
+@@ -1068,19 +1068,19 @@ debug_target::stopped_data_address (CORE_ADDR *arg0)
+ }
+ 
+ bool
+-target_ops::watchpoint_addr_within_range (CORE_ADDR arg0, CORE_ADDR arg1, int arg2)
++target_ops::watchpoint_addr_within_range (CORE_ADDR arg0, CORE_ADDR arg1, LONGEST arg2)
+ {
+   return this->beneath ()->watchpoint_addr_within_range (arg0, arg1, arg2);
+ }
+ 
+ bool
+-dummy_target::watchpoint_addr_within_range (CORE_ADDR arg0, CORE_ADDR arg1, int arg2)
++dummy_target::watchpoint_addr_within_range (CORE_ADDR arg0, CORE_ADDR arg1, LONGEST arg2)
+ {
+   return default_watchpoint_addr_within_range (this, arg0, arg1, arg2);
+ }
+ 
+ bool
+-debug_target::watchpoint_addr_within_range (CORE_ADDR arg0, CORE_ADDR arg1, int arg2)
++debug_target::watchpoint_addr_within_range (CORE_ADDR arg0, CORE_ADDR arg1, LONGEST arg2)
+ {
+   bool result;
+   fprintf_unfiltered (gdb_stdlog, "-> %s->watchpoint_addr_within_range (...)\n", this->beneath ()->shortname ());
+@@ -1090,7 +1090,7 @@ debug_target::watchpoint_addr_within_range (CORE_ADDR arg0, CORE_ADDR arg1, int
+   fputs_unfiltered (", ", gdb_stdlog);
+   target_debug_print_CORE_ADDR (arg1);
+   fputs_unfiltered (", ", gdb_stdlog);
+-  target_debug_print_int (arg2);
++  target_debug_print_LONGEST (arg2);
+   fputs_unfiltered (") = ", gdb_stdlog);
+   target_debug_print_bool (result);
+   fputs_unfiltered ("\n", gdb_stdlog);
+@@ -1126,19 +1126,19 @@ debug_target::region_ok_for_hw_watchpoint (CORE_ADDR arg0, LONGEST arg1)
+ }
+ 
+ bool
+-target_ops::can_accel_watchpoint_condition (CORE_ADDR arg0, int arg1, int arg2, struct expression *arg3)
++target_ops::can_accel_watchpoint_condition (CORE_ADDR arg0, LONGEST arg1, int arg2, struct expression *arg3)
+ {
+   return this->beneath ()->can_accel_watchpoint_condition (arg0, arg1, arg2, arg3);
+ }
+ 
+ bool
+-dummy_target::can_accel_watchpoint_condition (CORE_ADDR arg0, int arg1, int arg2, struct expression *arg3)
++dummy_target::can_accel_watchpoint_condition (CORE_ADDR arg0, LONGEST arg1, int arg2, struct expression *arg3)
+ {
+   return false;
+ }
+ 
+ bool
+-debug_target::can_accel_watchpoint_condition (CORE_ADDR arg0, int arg1, int arg2, struct expression *arg3)
++debug_target::can_accel_watchpoint_condition (CORE_ADDR arg0, LONGEST arg1, int arg2, struct expression *arg3)
+ {
+   bool result;
+   fprintf_unfiltered (gdb_stdlog, "-> %s->can_accel_watchpoint_condition (...)\n", this->beneath ()->shortname ());
+@@ -1146,7 +1146,7 @@ debug_target::can_accel_watchpoint_condition (CORE_ADDR arg0, int arg1, int arg2
+   fprintf_unfiltered (gdb_stdlog, "<- %s->can_accel_watchpoint_condition (", this->beneath ()->shortname ());
+   target_debug_print_CORE_ADDR (arg0);
+   fputs_unfiltered (", ", gdb_stdlog);
+-  target_debug_print_int (arg1);
++  target_debug_print_LONGEST (arg1);
+   fputs_unfiltered (", ", gdb_stdlog);
+   target_debug_print_int (arg2);
+   fputs_unfiltered (", ", gdb_stdlog);
+diff --git a/gdb/target.c b/gdb/target.c
+--- a/gdb/target.c
++++ b/gdb/target.c
+@@ -56,7 +56,7 @@ static void generic_tls_error (void) ATTRIBUTE_NORETURN;
+ static void default_terminal_info (struct target_ops *, const char *, int);
+ 
+ static int default_watchpoint_addr_within_range (struct target_ops *,
+-						 CORE_ADDR, CORE_ADDR, int);
++						 CORE_ADDR, CORE_ADDR, LONGEST);
+ 
+ static int default_region_ok_for_hw_watchpoint (struct target_ops *,
+ 						CORE_ADDR, LONGEST);
+@@ -3189,7 +3189,7 @@ default_region_ok_for_hw_watchpoint (struct target_ops *self,
+ static int
+ default_watchpoint_addr_within_range (struct target_ops *target,
+ 				      CORE_ADDR addr,
+-				      CORE_ADDR start, int length)
++				      CORE_ADDR start, LONGEST length)
+ {
+   return addr >= start && addr < start + length;
+ }
+diff --git a/gdb/target.h b/gdb/target.h
+--- a/gdb/target.h
++++ b/gdb/target.h
+@@ -557,7 +557,7 @@ struct target_ops
+       TARGET_DEFAULT_RETURN (false);
+     virtual bool stopped_data_address (CORE_ADDR *)
+       TARGET_DEFAULT_RETURN (false);
+-    virtual bool watchpoint_addr_within_range (CORE_ADDR, CORE_ADDR, int)
++    virtual bool watchpoint_addr_within_range (CORE_ADDR, CORE_ADDR, LONGEST)
+       TARGET_DEFAULT_FUNC (default_watchpoint_addr_within_range);
+ 
+     /* Documentation of this routine is provided with the corresponding
+@@ -565,7 +565,7 @@ struct target_ops
+     virtual int region_ok_for_hw_watchpoint (CORE_ADDR, LONGEST)
+       TARGET_DEFAULT_FUNC (default_region_ok_for_hw_watchpoint);
+ 
+-    virtual bool can_accel_watchpoint_condition (CORE_ADDR, int, int,
++    virtual bool can_accel_watchpoint_condition (CORE_ADDR, LONGEST, int,
+ 						 struct expression *)
+       TARGET_DEFAULT_RETURN (false);
+     virtual int masked_watch_num_registers (CORE_ADDR, CORE_ADDR)
diff --git a/SOURCES/gdb-rhbz795424-bitpos-23of25.patch b/SOURCES/gdb-rhbz795424-bitpos-23of25.patch
new file mode 100644
index 0000000..ebbe696
--- /dev/null
+++ b/SOURCES/gdb-rhbz795424-bitpos-23of25.patch
@@ -0,0 +1,1207 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-rhbz795424-bitpos-23of25.patch
+
+;; Fix `GDB cannot access struct member whose offset is larger than 256MB'
+;; (RH BZ 795424).
+;;=push
+
+http://sourceware.org/ml/gdb-patches/2012-09/msg00630.html
+
+--MP_/X_WjDOvz/B_fvlsrmCwRdxe
+Content-Type: text/plain; charset=US-ASCII
+Content-Transfer-Encoding: 7bit
+Content-Disposition: inline
+
+Hi,
+
+This is the last part of the bitpos change.  This patch does the same
+thing that patch 1/4 does, except that it does so in the *-tdep files
+wherever necessary.  I separated these changes mainly because they are
+related and can be reviewed independently.  Tested on Fedora 16 x86_64.
+
+Regards,
+Siddhesh
+
+--MP_/X_WjDOvz/B_fvlsrmCwRdxe
+Content-Type: text/plain
+Content-Transfer-Encoding: quoted-printable
+Content-Disposition: attachment; filename=ChangeLog-tdep
+
+gdb/ChangeLog
+
+	* alpha-tdep.c (alpha_push_dummy_call): Expand ACCUMULATE_SIZE,
+	REQUIRED_ARG_REGS, OFFSET, LEN, TLEN to ssize_t.
+	(struct alpha_arg): Expand members LEN, OFFSET to ssize_t.
+	* amd64-tdep.c (amd64_push_arguments): Expand NUM_ELEMENTS,
+	ELEMENT and LEN to LONGEST.
+	(amd64_return_value): Expand LEN to LONGEST.
+	* amd64-windows-tdep.c (amd64_windows_return_value): Expand LEN
+	to LONGEST.
+	* arm-tdep.c (arm_vfp_cprc_sub_candidate): Return LONGEST.
+	Expand COUNT, SUB_COUNT to LONGEST.
+	(arm_vfp_call_candidate): Expand C to LONGEST.
+	(arm_push_dummy_call): Expand LEN to LONGEST.
+	* avr-tdep.c (struct stack_item): Expand member LEN to ssize_t.
+	(push_stack_item): Expand parameter LEN to ssize_t.
+	(avr_push_dummy_call): Expand LAST_REGNUM, J, LEN to ssize_t.
+	* bfin-tdep.c (bfin_push_dummy_call): Expand TOTAL_LEN,
+	CONTAINER_LEN to ssize_t.
+	* cris-tdep.c (struct stack_item): Expand member LEN to ssize_t.
+	(push_stack_item): Expand parameter LEN to ssize_t.
+	(cris_push_dummy_call): Expand LEN, REG_DEMAND, I to ssize_t.
+	* h8300-tdep.c (h8300_push_dummy_call): Expand STACK_ALLOC,
+	STACK_OFFSET to LONGEST.  Expand LEN, PADDED_LEN, OFFSET to
+	ssize_t.
+	* hppa-tdep.c (hppa64_push_dummy_call): Expand LEN to LONGEST.
+	(hppa64_return_value): Likewise.
+	* i386-darwin-tdep.c (i386_darwin_push_dummy_call): Expand
+	ARGS_SPACE to LONGEST.
+	* i386-tdep.c (i386_push_dummy_call): Expand ARG_SPACE,
+	ARG_SPACE_USED, LEN to LONGEST.
+	(i386_reg_struct_return_p): Expand LEN to LONGEST.
+	(i386_convert_register_p): Likewise.
+	(i386_register_to_value): Likewise.
+	(i386_value_to_register): Likewise.
+	* ia64-tdep.c (ia64_push_dummy_call): Expand ARGOFFSET, LEN,
+	NSLOTS, MEMSLOTS to LONGEST.
+	* iq2000-tdep.c (iq2000_push_dummy_call): Expand TYPELEN,
+	STACKSPACE to LONGEST.
+	* m32r-tdep.c (m32r_push_dummy_call): Expand LEN to LONGEST.
+	* m68k-tdep.c (m68k_reg_struct_return_p): Expand LEN to LONGEST.
+	(m68k_push_dummy_call): Expand LEN, CONTAINER_LEN, OFFSET to
+	LONGEST.
+	* m88k-tdep.c (m88k_store_arguments): Expand NUM_STACK_WORDS,
+	LEN, STACK_WORD to LONGEST.
+	* mep-tdep.c (push_large_arguments): Expand ARG_LEN to ULONGEST.
+	* microblaze-tdep.c (microblaze_store_return_value): Expand LEN to
+	LONGEST.
+	* mips-tdep.c (mips_xfer_register): Expand parameter BUF_OFFSET to
+	LONGEST.  Use plongest to format print BUF_OFFSET.
+	(mips_eabi_push_dummy_call): Expand LEN to LONGEST.  Use plongest
+	to format print LEN.
+	(mips_n32n64_fp_arg_chunk_p): Expand parameter OFFSET to LONGEST.
+	Expand POS to LONGEST.
+	(mips_n32n64_push_dummy_call): Expand LEN to LONGEST.
+	(mips_n32n64_return_value): Expand OFFSET to LONGEST.  Use
+	plongest to format print OFFSET.
+	(mips_o32_push_dummy_call): Expand LEN to LONGEST.  Use plongest
+	to format print LEN.
+	(mips_o64_push_dummy_call): Expand LEN, STACK_OFFSET to LONGEST.
+	Use plongest to format print LEN.
+	* mn10300-tdep.c (mn10300_push_dummy_call): Expand LEN to
+	LONGEST.
+	* mt-tdep.c (mt_push_dummy_call): Expand STACK_DEST, TYPELEN to
+	LONGEST.
+	* ppc-sysv-tdep.c (ppc_sysv_abi_push_dummy_call): Expand
+	ARGSPACE, ARGOFFSET, STRUCTOFFSET, LEN, to LONGEST.
+	(ppc64_sysv_abi_push_dummy_call): Expand BYTE, LEN to ssize_t.
+	* rl78-tdep.c (rl78_push_dummy_call): Expand LEN, CONTAINER_LEN
+	to LONGEST.
+	* rs6000-aix-tdep.c (rs6000_push_dummy_call): Expand ARGBYTES,
+	LEN to LONGEST.
+	(ran_out_of_registers_for_arguments): Expand SPACE, JJ to
+	LONGEST.
+	* s390-linux-tdep.c (s390_value_from_register): Expand LEN to LONGEST.
+	(is_power_of_two): Expand parameter N to ULONGEST.
+	(s390_push_dummy_call): Expand LENGTH to ULONGEST.
+	* score-tdep.c (score_push_dummy_call): Expand ARGLEN to
+	LONGEST.
+	* sh-tdep.c (sh_use_struct_convention) Expand len to LONGEST.
+	(sh_justify_value_in_reg): Expand parameter LEN to LONGEST.
+	(sh_push_dummy_call_fpu): Expand LEN to LONGEST.  Expand REG_SIZE
+	to ssize_t.
+	(sh_push_dummy_call_nofpu): Likewise.
+	* sh64-tdep.c (sh64_push_dummy_call): Expand STACK_OFFSET,
+	STACK_ALLOC, LEN to LONGEST.
+	* sparc-tdep.c (sparc32_store_arguments): Expand LEN to LONGEST.
+	* sparc64-tdep.c (sparc64_store_floating_fields): Expand
+	parameter BITPOS to LONGEST.  Expand SUBPOS to LONGEST.
+	(sparc64_extract_floating_fields): Likewise.
+	(sparc64_store_arguments): Expand LEN to LONGEST.
+	* spu-tdep.c (spu_push_dummy_call): Expand N_REGS, LEN to LONGEST.
+	(spu_value_from_register): Expand LEN to LONGEST.
+	* tic6x-tdep.c (tic6x_push_dummy_call): Expand REFERENCES_OFFST,
+	LEN to LONGEST.  Expand LEN to ssize_t.  Use plongest to format
+	print LEN.
+	* tilegx-tdep.c (tilegx_push_dummy_call): Expand TYPELEN,
+	SLACKLEN, ALIGNLEN to LONGEST.
+	* v850-tdep.c (v850_push_dummy_call): Expand LEN to LONGEST.
+	* vax-tdep.c (vax_store_arguments): Expand COUNT, LEN to LONGEST.
+	(vax_return_value): Expand LEN to LONGEST.
+	* xstormy16-tdep.c (xstormy16_push_dummy_call): Expand J, TYPELEN
+	to LONGEST.
+	* xtensa-tdep.c (xtensa_store_return_value): Print LEN instead of
+	TYPE_LENGTH..
+	(struct argument_info): Expoand member LENGTH to ssize_t.
+	(struct argument_info.u): Expand member OFFSET to ssize_t.
+	(xtensa_push_dummy_call): Expand SIZE, ONSTACK_SIZE to LONGEST.
+	Expand N to ssize_t.  Use pulongest to format print TYPE_LENGTH.
+
+--MP_/X_WjDOvz/B_fvlsrmCwRdxe
+Content-Type: text/x-patch
+Content-Transfer-Encoding: 7bit
+Content-Disposition: attachment; filename=bitpos-tdep.patch
+
+diff --git a/gdb/alpha-tdep.c b/gdb/alpha-tdep.c
+--- a/gdb/alpha-tdep.c
++++ b/gdb/alpha-tdep.c
+@@ -299,17 +299,17 @@ alpha_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+ {
+   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+   int i;
+-  int accumulate_size = struct_return ? 8 : 0;
++  ssize_t accumulate_size = struct_return ? 8 : 0;
+   struct alpha_arg
+     {
+       const gdb_byte *contents;
+-      int len;
+-      int offset;
++      ssize_t len;
++      ssize_t offset;
+     };
+   struct alpha_arg *alpha_args = XALLOCAVEC (struct alpha_arg, nargs);
+   struct alpha_arg *m_arg;
+   gdb_byte arg_reg_buffer[ALPHA_REGISTER_SIZE * ALPHA_NUM_ARG_REGS];
+-  int required_arg_regs;
++  ssize_t required_arg_regs;
+   CORE_ADDR func_addr = find_function_addr (function, NULL);
+ 
+   /* The ABI places the address of the called function in T12.  */
+@@ -429,8 +429,8 @@ alpha_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+   for (i = nargs; m_arg--, --i >= 0;)
+     {
+       const gdb_byte *contents = m_arg->contents;
+-      int offset = m_arg->offset;
+-      int len = m_arg->len;
++      ssize_t offset = m_arg->offset;
++      ssize_t len = m_arg->len;
+ 
+       /* Copy the bytes destined for registers into arg_reg_buffer.  */
+       if (offset < sizeof(arg_reg_buffer))
+@@ -442,7 +442,7 @@ alpha_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+ 	    }
+ 	  else
+ 	    {
+-	      int tlen = sizeof(arg_reg_buffer) - offset;
++	      ssize_t tlen = sizeof(arg_reg_buffer) - offset;
+ 	      memcpy (arg_reg_buffer + offset, contents, tlen);
+ 	      offset += tlen;
+ 	      contents += tlen;
+diff --git a/gdb/amd64-tdep.c b/gdb/amd64-tdep.c
+--- a/gdb/amd64-tdep.c
++++ b/gdb/amd64-tdep.c
+@@ -878,8 +878,8 @@ amd64_push_arguments (struct regcache *regcache, int nargs,
+   };
+   struct value **stack_args = XALLOCAVEC (struct value *, nargs);
+   int num_stack_args = 0;
+-  int num_elements = 0;
+-  int element = 0;
++  LONGEST num_elements = 0;
++  LONGEST element = 0;
+   int integer_reg = 0;
+   int sse_reg = 0;
+   int i;
+@@ -891,7 +891,7 @@ amd64_push_arguments (struct regcache *regcache, int nargs,
+   for (i = 0; i < nargs; i++)
+     {
+       struct type *type = value_type (args[i]);
+-      int len = TYPE_LENGTH (type);
++      LONGEST len = TYPE_LENGTH (type);
+       enum amd64_reg_class theclass[2];
+       int needed_integer_regs = 0;
+       int needed_sse_regs = 0;
+@@ -955,7 +955,7 @@ amd64_push_arguments (struct regcache *regcache, int nargs,
+ 
+ 	      gdb_assert (regnum != -1);
+ 	      memset (buf, 0, sizeof buf);
+-	      memcpy (buf, valbuf + j * 8, std::min (len, 8));
++	      memcpy (buf, valbuf + j * 8, std::min (len, (LONGEST) 8));
+ 	      regcache->raw_write_part (regnum, offset, 8, buf);
+ 	    }
+ 	}
+diff --git a/gdb/amd64-windows-tdep.c b/gdb/amd64-windows-tdep.c
+--- a/gdb/amd64-windows-tdep.c
++++ b/gdb/amd64-windows-tdep.c
+@@ -291,7 +291,7 @@ amd64_windows_return_value (struct gdbarch *gdbarch, struct value *function,
+ 			    struct type *type, struct regcache *regcache,
+ 			    gdb_byte *readbuf, const gdb_byte *writebuf)
+ {
+-  int len = TYPE_LENGTH (type);
++  LONGEST len = TYPE_LENGTH (type);
+   int regnum = -1;
+ 
+   /* See if our value is returned through a register.  If it is, then
+diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c
+--- a/gdb/arm-tdep.c
++++ b/gdb/arm-tdep.c
+@@ -3468,7 +3468,7 @@ arm_vfp_cprc_reg_char (enum arm_vfp_cprc_base_type b)
+    array).  Vector types are not currently supported, matching the
+    generic AAPCS support.  */
+ 
+-static int
++static LONGEST
+ arm_vfp_cprc_sub_candidate (struct type *t,
+ 			    enum arm_vfp_cprc_base_type *base_type)
+ {
+@@ -3551,7 +3551,7 @@ arm_vfp_cprc_sub_candidate (struct type *t,
+ 	  }
+ 	else
+ 	  {
+-	    int count;
++	    LONGEST count;
+ 	    unsigned unitlen;
+ 
+ 	    count = arm_vfp_cprc_sub_candidate (TYPE_TARGET_TYPE (t),
+@@ -3574,12 +3574,12 @@ arm_vfp_cprc_sub_candidate (struct type *t,
+ 
+     case TYPE_CODE_STRUCT:
+       {
+-	int count = 0;
++	LONGEST count = 0;
+ 	unsigned unitlen;
+ 	int i;
+ 	for (i = 0; i < TYPE_NFIELDS (t); i++)
+ 	  {
+-	    int sub_count = 0;
++	    LONGEST sub_count = 0;
+ 
+ 	    if (!field_is_static (&TYPE_FIELD (t, i)))
+ 	      sub_count = arm_vfp_cprc_sub_candidate (TYPE_FIELD_TYPE (t, i),
+@@ -3603,13 +3603,15 @@ arm_vfp_cprc_sub_candidate (struct type *t,
+ 
+     case TYPE_CODE_UNION:
+       {
+-	int count = 0;
++	LONGEST count = 0;
+ 	unsigned unitlen;
+ 	int i;
+ 	for (i = 0; i < TYPE_NFIELDS (t); i++)
+ 	  {
+-	    int sub_count = arm_vfp_cprc_sub_candidate (TYPE_FIELD_TYPE (t, i),
+-							base_type);
++	    LONGEST sub_count;
++
++	    sub_count = arm_vfp_cprc_sub_candidate (TYPE_FIELD_TYPE (t, i),
++						    base_type);
+ 	    if (sub_count == -1)
+ 	      return -1;
+ 	    count = (count > sub_count ? count : sub_count);
+@@ -3645,7 +3647,7 @@ arm_vfp_call_candidate (struct type *t, enum arm_vfp_cprc_base_type *base_type,
+ 			int *count)
+ {
+   enum arm_vfp_cprc_base_type b = VFP_CPRC_UNKNOWN;
+-  int c = arm_vfp_cprc_sub_candidate (t, &b);
++  LONGEST c = arm_vfp_cprc_sub_candidate (t, &b);
+   if (c <= 0 || c > 4)
+     return 0;
+   *base_type = b;
+@@ -3726,7 +3728,7 @@ arm_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+ 
+   for (argnum = 0; argnum < nargs; argnum++)
+     {
+-      int len;
++      LONGEST len;
+       struct type *arg_type;
+       struct type *target_type;
+       enum type_code typecode;
+diff --git a/gdb/avr-tdep.c b/gdb/avr-tdep.c
+--- a/gdb/avr-tdep.c
++++ b/gdb/avr-tdep.c
+@@ -1192,13 +1192,13 @@ avr_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
+ 
+ struct stack_item
+ {
+-  int len;
++  ssize_t len;
+   struct stack_item *prev;
+   gdb_byte *data;
+ };
+ 
+ static struct stack_item *
+-push_stack_item (struct stack_item *prev, const bfd_byte *contents, int len)
++push_stack_item (struct stack_item *prev, const bfd_byte *contents, ssize_t len)
+ {
+   struct stack_item *si;
+   si = XNEW (struct stack_item);
+@@ -1286,12 +1286,12 @@ avr_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+ 
+   for (i = 0; i < nargs; i++)
+     {
+-      int last_regnum;
+-      int j;
++      ssize_t last_regnum;
++      ssize_t j;
+       struct value *arg = args[i];
+       struct type *type = check_typedef (value_type (arg));
+       const bfd_byte *contents = value_contents (arg);
+-      int len = TYPE_LENGTH (type);
++      ssize_t len = TYPE_LENGTH (type);
+ 
+       /* Calculate the potential last register needed.
+          E.g. For length 2, registers regnum and regnum-1 (say 25 and 24)
+diff --git a/gdb/bfin-tdep.c b/gdb/bfin-tdep.c
+--- a/gdb/bfin-tdep.c
++++ b/gdb/bfin-tdep.c
+@@ -504,7 +504,7 @@ bfin_push_dummy_call (struct gdbarch *gdbarch,
+   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+   int i;
+   long reg_r0, reg_r1, reg_r2;
+-  int total_len = 0;
++  ssize_t total_len = 0;
+ 
+   for (i = nargs - 1; i >= 0; i--)
+     {
+@@ -526,7 +526,7 @@ bfin_push_dummy_call (struct gdbarch *gdbarch,
+     {
+       struct type *value_type = value_enclosing_type (args[i]);
+       struct type *arg_type = check_typedef (value_type);
+-      int container_len = (TYPE_LENGTH (value_type) + 3) & ~3;
++      ssize_t container_len = (TYPE_LENGTH (value_type) + 3) & ~3;
+ 
+       sp -= container_len;
+       write_memory (sp, value_contents (args[i]), container_len);
+diff --git a/gdb/cris-tdep.c b/gdb/cris-tdep.c
+--- a/gdb/cris-tdep.c
++++ b/gdb/cris-tdep.c
+@@ -663,13 +663,13 @@ static CORE_ADDR cris_unwind_sp (struct gdbarch *gdbarch,
+ 
+ struct stack_item
+ {
+-  int len;
++  ssize_t len;
+   struct stack_item *prev;
+   gdb_byte *data;
+ };
+ 
+ static struct stack_item *
+-push_stack_item (struct stack_item *prev, const gdb_byte *contents, int len)
++push_stack_item (struct stack_item *prev, const gdb_byte *contents, ssize_t len)
+ {
+   struct stack_item *si = XNEW (struct stack_item);
+   si->data = (gdb_byte *) xmalloc (len);
+@@ -833,13 +833,13 @@ cris_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+ 
+   for (argnum = 0; argnum < nargs; argnum++)
+     {
+-      int len;
++      ssize_t len;
+       const gdb_byte *val;
+-      int reg_demand;
+-      int i;
++      ssize_t reg_demand;
++      ssize_t i;
+       
+-      len = TYPE_LENGTH (value_type (args[argnum]));
+       val = value_contents (args[argnum]);
++      len = TYPE_LENGTH (value_type (args[argnum]));
+       
+       /* How may registers worth of storage do we need for this argument?  */
+       reg_demand = (len / 4) + (len % 4 != 0 ? 1 : 0);
+diff --git a/gdb/h8300-tdep.c b/gdb/h8300-tdep.c
+--- a/gdb/h8300-tdep.c
++++ b/gdb/h8300-tdep.c
+@@ -637,7 +637,7 @@ h8300_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+ 		       int struct_return, CORE_ADDR struct_addr)
+ {
+   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+-  int stack_alloc = 0, stack_offset = 0;
++  LONGEST stack_alloc = 0, stack_offset = 0;
+   int wordsize = BINWORD (gdbarch);
+   int reg = E_ARG0_REGNUM;
+   int argument;
+@@ -663,11 +663,11 @@ h8300_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+   for (argument = 0; argument < nargs; argument++)
+     {
+       struct type *type = value_type (args[argument]);
+-      int len = TYPE_LENGTH (type);
++      ssize_t len = TYPE_LENGTH (type);
+       char *contents = (char *) value_contents (args[argument]);
+ 
+       /* Pad the argument appropriately.  */
+-      int padded_len = align_up (len, wordsize);
++      ssize_t padded_len = align_up (len, wordsize);
+       /* Use std::vector here to get zero initialization.  */
+       std::vector<gdb_byte> padded (padded_len);
+ 
+@@ -696,7 +696,7 @@ h8300_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+ 	      /* Heavens to Betsy --- it's really going in registers!
+ 	         Note that on the h8/300s, there are gaps between the
+ 	         registers in the register file.  */
+-	      int offset;
++	      ssize_t offset;
+ 
+ 	      for (offset = 0; offset < padded_len; offset += wordsize)
+ 		{
+diff --git a/gdb/hppa-tdep.c b/gdb/hppa-tdep.c
+--- a/gdb/hppa-tdep.c
++++ b/gdb/hppa-tdep.c
+@@ -984,7 +984,7 @@ hppa64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+     {
+       struct value *arg = args[i];
+       struct type *type = value_type (arg);
+-      int len = TYPE_LENGTH (type);
++      LONGEST len = TYPE_LENGTH (type);
+       const bfd_byte *valbuf;
+       bfd_byte fptrbuf[8];
+       int regnum;
+@@ -1177,7 +1177,7 @@ hppa64_return_value (struct gdbarch *gdbarch, struct value *function,
+ 		     struct type *type, struct regcache *regcache,
+ 		     gdb_byte *readbuf, const gdb_byte *writebuf)
+ {
+-  int len = TYPE_LENGTH (type);
++  LONGEST len = TYPE_LENGTH (type);
+   int regnum, offset;
+ 
+   if (len > 16)
+diff --git a/gdb/i386-darwin-tdep.c b/gdb/i386-darwin-tdep.c
+--- a/gdb/i386-darwin-tdep.c
++++ b/gdb/i386-darwin-tdep.c
+@@ -166,7 +166,7 @@ i386_darwin_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+ 
+   for (write_pass = 0; write_pass < 2; write_pass++)
+     {
+-      int args_space = 0;
++      LONGEST args_space = 0;
+       int num_m128 = 0;
+ 
+       if (struct_return)
+diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c
+--- a/gdb/i386-tdep.c
++++ b/gdb/i386-tdep.c
+@@ -2678,7 +2678,7 @@ i386_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+   gdb_byte buf[4];
+   int i;
+   int write_pass;
+-  int args_space = 0;
++  LONGEST args_space = 0;
+ 
+   /* BND registers can be in arbitrary values at the moment of the
+      inferior call.  This can cause boundary violations that are not
+@@ -2693,7 +2693,7 @@ i386_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+ 
+   for (write_pass = 0; write_pass < 2; write_pass++)
+     {
+-      int args_space_used = 0;
++      LONGEST args_space_used = 0;
+ 
+       if (struct_return)
+ 	{
+@@ -2710,7 +2710,7 @@ i386_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+ 
+       for (i = 0; i < nargs; i++)
+ 	{
+-	  int len = TYPE_LENGTH (value_enclosing_type (args[i]));
++	  LONGEST len = TYPE_LENGTH (value_enclosing_type (args[i]));
+ 
+ 	  if (write_pass)
+ 	    {
+@@ -2917,7 +2917,7 @@ i386_reg_struct_return_p (struct gdbarch *gdbarch, struct type *type)
+ {
+   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+   enum type_code code = TYPE_CODE (type);
+-  int len = TYPE_LENGTH (type);
++  LONGEST len = TYPE_LENGTH (type);
+ 
+   gdb_assert (code == TYPE_CODE_STRUCT
+               || code == TYPE_CODE_UNION
+@@ -3703,7 +3703,7 @@ static int
+ i386_convert_register_p (struct gdbarch *gdbarch,
+ 			 int regnum, struct type *type)
+ {
+-  int len = TYPE_LENGTH (type);
++  LONGEST len = TYPE_LENGTH (type);
+ 
+   /* Values may be spread across multiple registers.  Most debugging
+      formats aren't expressive enough to specify the locations, so
+@@ -3736,7 +3736,7 @@ i386_register_to_value (struct frame_info *frame, int regnum,
+ 			int *optimizedp, int *unavailablep)
+ {
+   struct gdbarch *gdbarch = get_frame_arch (frame);
+-  int len = TYPE_LENGTH (type);
++  LONGEST len = TYPE_LENGTH (type);
+ 
+   if (i386_fp_regnum_p (gdbarch, regnum))
+     return i387_register_to_value (frame, regnum, type, to,
+@@ -3772,7 +3772,7 @@ static void
+ i386_value_to_register (struct frame_info *frame, int regnum,
+ 			struct type *type, const gdb_byte *from)
+ {
+-  int len = TYPE_LENGTH (type);
++  LONGEST len = TYPE_LENGTH (type);
+ 
+   if (i386_fp_regnum_p (get_frame_arch (frame), regnum))
+     {
+diff --git a/gdb/iq2000-tdep.c b/gdb/iq2000-tdep.c
+--- a/gdb/iq2000-tdep.c
++++ b/gdb/iq2000-tdep.c
+@@ -651,8 +651,9 @@ iq2000_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+   const bfd_byte *val;
+   bfd_byte buf[4];
+   struct type *type;
+-  int i, argreg, typelen, slacklen;
+-  int stackspace = 0;
++  int i, argreg, slacklen;
++  LONGEST typelen;
++  LONGEST stackspace = 0;
+   /* Used to copy struct arguments into the stack.  */
+   CORE_ADDR struct_ptr;
+ 
+diff --git a/gdb/m32r-tdep.c b/gdb/m32r-tdep.c
+--- a/gdb/m32r-tdep.c
++++ b/gdb/m32r-tdep.c
+@@ -671,7 +671,7 @@ m32r_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+   CORE_ADDR regval;
+   gdb_byte *val;
+   gdb_byte valbuf[M32R_ARG_REGISTER_SIZE];
+-  int len;
++  LONGEST len;
+ 
+   /* First force sp to a 4-byte alignment.  */
+   sp = sp & ~3;
+diff --git a/gdb/m68k-tdep.c b/gdb/m68k-tdep.c
+--- a/gdb/m68k-tdep.c
++++ b/gdb/m68k-tdep.c
+@@ -372,7 +372,7 @@ m68k_reg_struct_return_p (struct gdbarch *gdbarch, struct type *type)
+ {
+   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+   enum type_code code = TYPE_CODE (type);
+-  int len = TYPE_LENGTH (type);
++  LONGEST len = TYPE_LENGTH (type);
+ 
+   gdb_assert (code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION
+ 	      || code == TYPE_CODE_COMPLEX);
+@@ -504,9 +504,9 @@ m68k_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+   for (i = nargs - 1; i >= 0; i--)
+     {
+       struct type *value_type = value_enclosing_type (args[i]);
+-      int len = TYPE_LENGTH (value_type);
+-      int container_len = (len + 3) & ~3;
+-      int offset;
++      LONGEST len = TYPE_LENGTH (value_type);
++      LONGEST container_len = (len + 3) & ~3;
++      LONGEST offset;
+ 
+       /* Non-scalars bigger than 4 bytes are left aligned, others are
+ 	 right aligned.  */
+diff --git a/gdb/mep-tdep.c b/gdb/mep-tdep.c
+--- a/gdb/mep-tdep.c
++++ b/gdb/mep-tdep.c
+@@ -2239,7 +2239,7 @@ push_large_arguments (CORE_ADDR sp, int argc, struct value **argv,
+ 
+   for (i = 0; i < argc; i++)
+     {
+-      unsigned arg_len = TYPE_LENGTH (value_type (argv[i]));
++      ULONGEST arg_len = TYPE_LENGTH (value_type (argv[i]));
+ 
+       if (arg_len > MEP_GPR_SIZE)
+         {
+diff --git a/gdb/mips-tdep.c b/gdb/mips-tdep.c
+--- a/gdb/mips-tdep.c
++++ b/gdb/mips-tdep.c
+@@ -489,7 +489,7 @@ static void
+ mips_xfer_register (struct gdbarch *gdbarch, struct regcache *regcache,
+ 		    int reg_num, int length,
+ 		    enum bfd_endian endian, gdb_byte *in,
+-		    const gdb_byte *out, int buf_offset)
++		    const gdb_byte *out, LONGEST buf_offset)
+ {
+   int reg_offset = 0;
+ 
+@@ -512,8 +512,8 @@ mips_xfer_register (struct gdbarch *gdbarch, struct regcache *regcache,
+     }
+   if (mips_debug)
+     fprintf_unfiltered (gdb_stderr,
+-			"xfer $%d, reg offset %d, buf offset %d, length %d, ",
+-			reg_num, reg_offset, buf_offset, length);
++			"xfer $%d, reg offset %d, buf offset %s, length %d, ",
++			reg_num, reg_offset, plongest (buf_offset), length);
+   if (mips_debug && out != NULL)
+     {
+       int i;
+@@ -4543,13 +4543,13 @@ mips_eabi_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+       gdb_byte ref_valbuf[MAX_MIPS_ABI_REGSIZE];
+       struct value *arg = args[argnum];
+       struct type *arg_type = check_typedef (value_type (arg));
+-      int len = TYPE_LENGTH (arg_type);
++      LONGEST len = TYPE_LENGTH (arg_type);
+       enum type_code typecode = TYPE_CODE (arg_type);
+ 
+       if (mips_debug)
+ 	fprintf_unfiltered (gdb_stdlog,
+-			    "mips_eabi_push_dummy_call: %d len=%d type=%d",
+-			    argnum + 1, len, (int) typecode);
++			    "mips_eabi_push_dummy_call: %d len=%s type=%d",
++			    argnum + 1, plongest (len), (int) typecode);
+ 
+       /* The EABI passes structures that do not fit in a register by
+          reference.  */
+@@ -4819,7 +4819,7 @@ mips_eabi_return_value (struct gdbarch *gdbarch, struct value *function,
+ 
+ static int
+ mips_n32n64_fp_arg_chunk_p (struct gdbarch *gdbarch, struct type *arg_type,
+-			    int offset)
++			    LONGEST offset)
+ {
+   int i;
+ 
+@@ -4834,7 +4834,7 @@ mips_n32n64_fp_arg_chunk_p (struct gdbarch *gdbarch, struct type *arg_type,
+ 
+   for (i = 0; i < TYPE_NFIELDS (arg_type); i++)
+     {
+-      int pos;
++      LONGEST pos;
+       struct type *field_type;
+ 
+       /* We're only looking at normal fields.  */
+@@ -4876,7 +4876,7 @@ mips_n32n64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+   int argreg;
+   int float_argreg;
+   int argnum;
+-  int len = 0;
++  LONGEST len = 0;
+   int stack_offset = 0;
+   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+   CORE_ADDR func_addr = find_function_addr (function, NULL);
+@@ -5227,11 +5227,11 @@ mips_n32n64_return_value (struct gdbarch *gdbarch, struct value *function,
+ 				: MIPS_V0_REGNUM);
+ 	   field < TYPE_NFIELDS (type); field++, regnum += 2)
+ 	{
+-	  int offset = (FIELD_BITPOS (TYPE_FIELDS (type)[field])
+-			/ TARGET_CHAR_BIT);
++	  LONGEST offset = (FIELD_BITPOS (TYPE_FIELDS (type)[field])
++			    / TARGET_CHAR_BIT);
+ 	  if (mips_debug)
+-	    fprintf_unfiltered (gdb_stderr, "Return float struct+%d\n",
+-				offset);
++	    fprintf_unfiltered (gdb_stderr, "Return float struct+%s\n",
++				plongest (offset));
+ 	  if (TYPE_LENGTH (TYPE_FIELD_TYPE (type, field)) == 16)
+ 	    {
+ 	      /* A 16-byte long double field goes in two consecutive
+@@ -5273,8 +5273,8 @@ mips_n32n64_return_value (struct gdbarch *gdbarch, struct value *function,
+ 	  if (offset + xfer > TYPE_LENGTH (type))
+ 	    xfer = TYPE_LENGTH (type) - offset;
+ 	  if (mips_debug)
+-	    fprintf_unfiltered (gdb_stderr, "Return struct+%d:%d in $%d\n",
+-				offset, xfer, regnum);
++	    fprintf_unfiltered (gdb_stderr, "Return struct+%s:%d in $%d\n",
++				plongest (offset), xfer, regnum);
+ 	  mips_xfer_register (gdbarch, regcache,
+ 			      gdbarch_num_regs (gdbarch) + regnum,
+ 			      xfer, BFD_ENDIAN_UNKNOWN, readbuf, writebuf,
+@@ -5332,7 +5332,7 @@ mips_o32_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+   int argreg;
+   int float_argreg;
+   int argnum;
+-  int len = 0;
++  LONGEST len = 0;
+   int stack_offset = 0;
+   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+   CORE_ADDR func_addr = find_function_addr (function, NULL);
+@@ -5396,13 +5396,13 @@ mips_o32_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+       const gdb_byte *val;
+       struct value *arg = args[argnum];
+       struct type *arg_type = check_typedef (value_type (arg));
+-      int len = TYPE_LENGTH (arg_type);
++      LONGEST len = TYPE_LENGTH (arg_type);
+       enum type_code typecode = TYPE_CODE (arg_type);
+ 
+       if (mips_debug)
+ 	fprintf_unfiltered (gdb_stdlog,
+-			    "mips_o32_push_dummy_call: %d len=%d type=%d",
+-			    argnum + 1, len, (int) typecode);
++			    "mips_o32_push_dummy_call: %d len=%s type=%d",
++			    argnum + 1, plongest (len), (int) typecode);
+ 
+       val = value_contents (arg);
+ 
+@@ -5856,8 +5856,8 @@ mips_o64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+   int argreg;
+   int float_argreg;
+   int argnum;
+-  int len = 0;
+-  int stack_offset = 0;
++  LONGEST len = 0;
++  LONGEST stack_offset = 0;
+   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+   CORE_ADDR func_addr = find_function_addr (function, NULL);
+ 
+@@ -5917,13 +5917,13 @@ mips_o64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+       const gdb_byte *val;
+       struct value *arg = args[argnum];
+       struct type *arg_type = check_typedef (value_type (arg));
+-      int len = TYPE_LENGTH (arg_type);
++      LONGEST len = TYPE_LENGTH (arg_type);
+       enum type_code typecode = TYPE_CODE (arg_type);
+ 
+       if (mips_debug)
+ 	fprintf_unfiltered (gdb_stdlog,
+-			    "mips_o64_push_dummy_call: %d len=%d type=%d",
+-			    argnum + 1, len, (int) typecode);
++			    "mips_o64_push_dummy_call: %d len=%s type=%d",
++			    argnum + 1, plongest (len), (int) typecode);
+ 
+       val = value_contents (arg);
+ 
+diff --git a/gdb/mn10300-tdep.c b/gdb/mn10300-tdep.c
+--- a/gdb/mn10300-tdep.c
++++ b/gdb/mn10300-tdep.c
+@@ -1197,7 +1197,7 @@ mn10300_push_dummy_call (struct gdbarch *gdbarch,
+   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+   const int push_size = register_size (gdbarch, E_PC_REGNUM);
+   int regs_used;
+-  int len, arg_len; 
++  LONGEST len, arg_len; 
+   int stack_offset = 0;
+   int argnum;
+   const gdb_byte *val;
+diff --git a/gdb/ppc-sysv-tdep.c b/gdb/ppc-sysv-tdep.c
+--- a/gdb/ppc-sysv-tdep.c
++++ b/gdb/ppc-sysv-tdep.c
+@@ -68,7 +68,7 @@ ppc_sysv_abi_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+   int opencl_abi = ppc_sysv_use_opencl_abi (value_type (function));
+   ULONGEST saved_sp;
+-  int argspace = 0;		/* 0 is an initial wrong guess.  */
++  LONGEST argspace = 0;		/* 0 is an initial wrong guess.  */
+   int write_pass;
+ 
+   gdb_assert (tdep->wordsize == 4);
+@@ -99,9 +99,9 @@ ppc_sysv_abi_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+       /* Next available vector register for vector arguments.  */
+       int vreg = 2;
+       /* Arguments start above the "LR save word" and "Back chain".  */
+-      int argoffset = 2 * tdep->wordsize;
++      LONGEST argoffset = 2 * tdep->wordsize;
+       /* Structures start after the arguments.  */
+-      int structoffset = argoffset + argspace;
++      LONGEST structoffset = argoffset + argspace;
+ 
+       /* If the function is returning a `struct', then the first word
+          (which will be passed in r3) is used for struct return
+@@ -120,7 +120,7 @@ ppc_sysv_abi_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+ 	{
+ 	  struct value *arg = args[argno];
+ 	  struct type *type = check_typedef (value_type (arg));
+-	  int len = TYPE_LENGTH (type);
++	  ssize_t len = TYPE_LENGTH (type);
+ 	  const bfd_byte *val = value_contents (arg);
+ 
+ 	  if (TYPE_CODE (type) == TYPE_CODE_FLT && len <= 8
+@@ -1246,11 +1246,11 @@ struct ppc64_sysv_argpos
+ 
+ static void
+ ppc64_sysv_abi_push_val (struct gdbarch *gdbarch,
+-			 const bfd_byte *val, int len, int align,
++			 const bfd_byte *val, ssize_t len, int align,
+ 			 struct ppc64_sysv_argpos *argpos)
+ {
+   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+-  int offset = 0;
++  LONGEST offset = 0;
+ 
+   /* Enforce alignment of stack location, if requested.  */
+   if (align > tdep->wordsize)
+@@ -1287,7 +1287,7 @@ ppc64_sysv_abi_push_val (struct gdbarch *gdbarch,
+     {
+       if (argpos->regcache && argpos->greg <= 10)
+ 	argpos->regcache->cooked_write_part
+-	  (tdep->ppc_gp0_regnum + argpos->greg, offset, len, val);
++	  (tdep->ppc_gp0_regnum + argpos->greg, offset, (LONGEST) len, val);
+       argpos->greg++;
+     }
+ }
+@@ -1346,7 +1346,7 @@ ppc64_sysv_abi_push_freg (struct gdbarch *gdbarch,
+       if (argpos->regcache && argpos->freg <= 13)
+ 	{
+ 	  int regnum = tdep->ppc_fp0_regnum + argpos->freg;
+-	  int offset = 0;
++	  LONGEST offset = 0;
+ 
+ 	  if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
+ 	    offset = 8 - TYPE_LENGTH (type);
+@@ -1795,7 +1795,7 @@ ppc64_sysv_abi_return_value_base (struct gdbarch *gdbarch, struct type *valtype,
+       && TYPE_CODE (valtype) == TYPE_CODE_DECFLOAT)
+     {
+       int regnum = tdep->ppc_fp0_regnum + 1 + index;
+-      int offset = 0;
++      LONGEST offset = 0;
+ 
+       if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
+ 	offset = 8 - TYPE_LENGTH (valtype);
+@@ -1871,7 +1871,7 @@ ppc64_sysv_abi_return_value_base (struct gdbarch *gdbarch, struct type *valtype,
+       && TYPE_CODE (valtype) == TYPE_CODE_ARRAY && TYPE_VECTOR (valtype))
+     {
+       int regnum = tdep->ppc_gp0_regnum + 3 + index;
+-      int offset = 0;
++      LONGEST offset = 0;
+ 
+       if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
+ 	offset = 8 - TYPE_LENGTH (valtype);
+@@ -1979,7 +1979,8 @@ ppc64_sysv_abi_return_value (struct gdbarch *gdbarch, struct value *function,
+       && TYPE_LENGTH (TYPE_TARGET_TYPE (valtype)) == 1)
+     {
+       int regnum = tdep->ppc_gp0_regnum + 3;
+-      int offset = (register_size (gdbarch, regnum) - TYPE_LENGTH (valtype));
++      LONGEST offset
++	= (register_size (gdbarch, regnum) - TYPE_LENGTH (valtype));
+ 
+       if (writebuf != NULL)
+ 	regcache->cooked_write_part (regnum, offset, TYPE_LENGTH (valtype),
+diff --git a/gdb/rl78-tdep.c b/gdb/rl78-tdep.c
+--- a/gdb/rl78-tdep.c
++++ b/gdb/rl78-tdep.c
+@@ -1346,8 +1346,8 @@ rl78_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+   for (i = nargs - 1; i >= 0; i--)
+     {
+       struct type *value_type = value_enclosing_type (args[i]);
+-      int len = TYPE_LENGTH (value_type);
+-      int container_len = (len + 1) & ~1;
++      LONGEST len = TYPE_LENGTH (value_type);
++      LONGEST container_len = (len + 1) & ~1;
+ 
+       sp -= container_len;
+       write_memory (rl78_make_data_address (sp),
+diff --git a/gdb/rs6000-aix-tdep.c b/gdb/rs6000-aix-tdep.c
+--- a/gdb/rs6000-aix-tdep.c
++++ b/gdb/rs6000-aix-tdep.c
+@@ -177,9 +177,9 @@ rs6000_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+   int ii;
+-  int len = 0;
++  LONGEST len = 0;
+   int argno;			/* current argument number */
+-  int argbytes;			/* current argument byte */
++  LONGEST argbytes;		/* current argument byte */
+   gdb_byte tmp_buffer[50];
+   int f_argno = 0;		/* current floating point argno */
+   int wordsize = gdbarch_tdep (gdbarch)->wordsize;
+@@ -307,7 +307,7 @@ ran_out_of_registers_for_arguments:
+ 
+   if ((argno < nargs) || argbytes)
+     {
+-      int space = 0, jj;
++      LONGEST space = 0, jj;
+ 
+       if (argbytes)
+ 	{
+diff --git a/gdb/score-tdep.c b/gdb/score-tdep.c
+--- a/gdb/score-tdep.c
++++ b/gdb/score-tdep.c
+@@ -516,7 +516,7 @@ score_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+   int argnum;
+   int argreg;
+-  int arglen = 0;
++  LONGEST arglen = 0;
+   CORE_ADDR stack_offset = 0;
+   CORE_ADDR addr = 0;
+ 
+diff --git a/gdb/sh-tdep.c b/gdb/sh-tdep.c
+--- a/gdb/sh-tdep.c
++++ b/gdb/sh-tdep.c
+@@ -812,7 +812,7 @@ sh_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
+ static int
+ sh_use_struct_convention (int renesas_abi, struct type *type)
+ {
+-  int len = TYPE_LENGTH (type);
++  LONGEST len = TYPE_LENGTH (type);
+   int nelem = TYPE_NFIELDS (type);
+ 
+   /* The Renesas ABI returns aggregate types always on stack.  */
+@@ -914,7 +914,7 @@ sh_frame_align (struct gdbarch *ignore, CORE_ADDR sp)
+ 
+ /* Helper function to justify value in register according to endianess.  */
+ static const gdb_byte *
+-sh_justify_value_in_reg (struct gdbarch *gdbarch, struct value *val, int len)
++sh_justify_value_in_reg (struct gdbarch *gdbarch, struct value *val, LONGEST len)
+ {
+   static gdb_byte valbuf[4];
+ 
+@@ -1074,7 +1074,8 @@ sh_push_dummy_call_fpu (struct gdbarch *gdbarch,
+   struct type *type;
+   CORE_ADDR regval;
+   const gdb_byte *val;
+-  int len, reg_size = 0;
++  LONGEST len;
++  int reg_size = 0;
+   int pass_on_stack = 0;
+   int treat_as_flt;
+   int last_reg_arg = INT_MAX;
+@@ -1215,7 +1216,8 @@ sh_push_dummy_call_nofpu (struct gdbarch *gdbarch,
+   struct type *type;
+   CORE_ADDR regval;
+   const gdb_byte *val;
+-  int len, reg_size = 0;
++  LONGEST len;
++  int reg_size = 0;
+   int pass_on_stack = 0;
+   int last_reg_arg = INT_MAX;
+ 
+diff --git a/gdb/sparc64-tdep.c b/gdb/sparc64-tdep.c
+--- a/gdb/sparc64-tdep.c
++++ b/gdb/sparc64-tdep.c
+@@ -1205,7 +1205,7 @@ sparc64_16_byte_align_p (struct type *type)
+ 
+ static void
+ sparc64_store_floating_fields (struct regcache *regcache, struct type *type,
+-			       const gdb_byte *valbuf, int element, int bitpos)
++			       const gdb_byte *valbuf, int element, LONGEST bitpos)
+ {
+   struct gdbarch *gdbarch = regcache->arch ();
+   int len = TYPE_LENGTH (type);
+@@ -1265,7 +1265,7 @@ sparc64_store_floating_fields (struct regcache *regcache, struct type *type,
+       for (i = 0; i < TYPE_NFIELDS (type); i++)
+ 	{
+ 	  struct type *subtype = check_typedef (TYPE_FIELD_TYPE (type, i));
+-	  int subpos = bitpos + TYPE_FIELD_BITPOS (type, i);
++	  LONGEST subpos = bitpos + TYPE_FIELD_BITPOS (type, i);
+ 
+ 	  sparc64_store_floating_fields (regcache, subtype, valbuf,
+ 					 element, subpos);
+@@ -1297,7 +1297,7 @@ sparc64_store_floating_fields (struct regcache *regcache, struct type *type,
+ 
+ static void
+ sparc64_extract_floating_fields (struct regcache *regcache, struct type *type,
+-				 gdb_byte *valbuf, int bitpos)
++				 gdb_byte *valbuf, LONGEST bitpos)
+ {
+   struct gdbarch *gdbarch = regcache->arch ();
+ 
+@@ -1353,7 +1353,7 @@ sparc64_extract_floating_fields (struct regcache *regcache, struct type *type,
+       for (i = 0; i < TYPE_NFIELDS (type); i++)
+ 	{
+ 	  struct type *subtype = check_typedef (TYPE_FIELD_TYPE (type, i));
+-	  int subpos = bitpos + TYPE_FIELD_BITPOS (type, i);
++	  LONGEST subpos = bitpos + TYPE_FIELD_BITPOS (type, i);
+ 
+ 	  sparc64_extract_floating_fields (regcache, subtype, valbuf, subpos);
+ 	}
+@@ -1386,7 +1386,7 @@ sparc64_store_arguments (struct regcache *regcache, int nargs,
+   for (i = 0; i < nargs; i++)
+     {
+       struct type *type = value_type (args[i]);
+-      int len = TYPE_LENGTH (type);
++      LONGEST len = TYPE_LENGTH (type);
+ 
+       if (sparc64_structure_or_union_p (type)
+ 	  || (sparc64_complex_floating_p (type) && len == 32))
+@@ -1486,7 +1486,7 @@ sparc64_store_arguments (struct regcache *regcache, int nargs,
+     {
+       const gdb_byte *valbuf = value_contents (args[i]);
+       struct type *type = value_type (args[i]);
+-      int len = TYPE_LENGTH (type);
++      LONGEST len = TYPE_LENGTH (type);
+       int regnum = -1;
+       gdb_byte buf[16];
+ 
+diff --git a/gdb/spu-tdep.c b/gdb/spu-tdep.c
+--- a/gdb/spu-tdep.c
++++ b/gdb/spu-tdep.c
+@@ -1431,7 +1431,7 @@ spu_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+       struct value *arg = args[i];
+       struct type *type = check_typedef (value_type (arg));
+       const gdb_byte *contents = value_contents (arg);
+-      int n_regs = align_up (TYPE_LENGTH (type), 16) / 16;
++      LONGEST n_regs = align_up (TYPE_LENGTH (type), 16) / 16;
+ 
+       /* If the argument doesn't wholly fit into registers, it and
+ 	 all subsequent arguments go to the stack.  */
+@@ -1463,7 +1463,7 @@ spu_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+ 	{
+ 	  struct value *arg = args[i];
+ 	  struct type *type = check_typedef (value_type (arg));
+-	  int len = TYPE_LENGTH (type);
++	  LONGEST len = TYPE_LENGTH (type);
+ 	  int preferred_slot;
+ 	  
+ 	  if (spu_scalar_value_p (type))
+diff --git a/gdb/tic6x-tdep.c b/gdb/tic6x-tdep.c
+--- a/gdb/tic6x-tdep.c
++++ b/gdb/tic6x-tdep.c
+@@ -881,7 +881,7 @@ tic6x_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+   int argreg = 0;
+   int argnum;
+   int stack_offset = 4;
+-  int references_offset = 4;
++  LONGEST references_offset = 4;
+   CORE_ADDR func_addr = find_function_addr (function, NULL);
+   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+   struct type *func_type = value_type (function);
+@@ -915,7 +915,7 @@ tic6x_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+   /* Now make space on the stack for the args.  */
+   for (argnum = 0; argnum < nargs; argnum++)
+     {
+-      int len = align_up (TYPE_LENGTH (value_type (args[argnum])), 4);
++      LONGEST len = align_up (TYPE_LENGTH (value_type (args[argnum])), 4);
+       if (argnum >= 10 - argreg)
+ 	references_offset += len;
+       stack_offset += len;
+@@ -934,7 +934,7 @@ tic6x_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+       const gdb_byte *val;
+       struct value *arg = args[argnum];
+       struct type *arg_type = check_typedef (value_type (arg));
+-      int len = TYPE_LENGTH (arg_type);
++      ssize_t len = TYPE_LENGTH (arg_type);
+       enum type_code typecode = TYPE_CODE (arg_type);
+ 
+       val = value_contents (arg);
+@@ -1090,7 +1090,8 @@ tic6x_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
+ 	    }
+ 	  else
+ 	    internal_error (__FILE__, __LINE__,
+-			    _("unexpected length %d of arg %d"), len, argnum);
++			    _("unexpected length %s of arg %d"),
++			    plongest (len), argnum);
+ 
+ 	  addr = sp + stack_offset;
+ 	  write_memory (addr, val, len);
+diff --git a/gdb/tilegx-tdep.c b/gdb/tilegx-tdep.c
+--- a/gdb/tilegx-tdep.c
++++ b/gdb/tilegx-tdep.c
+@@ -288,7 +288,7 @@ tilegx_push_dummy_call (struct gdbarch *gdbarch,
+   CORE_ADDR stack_dest = sp;
+   int argreg = TILEGX_R0_REGNUM;
+   int i, j;
+-  int typelen, slacklen;
++  LONGEST typelen, slacklen;
+   static const gdb_byte four_zero_words[16] = { 0 };
+ 
+   /* If struct_return is 1, then the struct return address will
+diff --git a/gdb/v850-tdep.c b/gdb/v850-tdep.c
+--- a/gdb/v850-tdep.c
++++ b/gdb/v850-tdep.c
+@@ -1019,7 +1019,7 @@ v850_push_dummy_call (struct gdbarch *gdbarch,
+   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+   int argreg;
+   int argnum;
+-  int len = 0;
++  LONGEST len = 0;
+   int stack_offset;
+ 
+   if (gdbarch_tdep (gdbarch)->abi == V850_ABI_RH850)
+@@ -1047,7 +1047,7 @@ v850_push_dummy_call (struct gdbarch *gdbarch,
+      in four registers available.  Loop thru args from first to last.  */
+   for (argnum = 0; argnum < nargs; argnum++)
+     {
+-      int len;
++      LONGEST len;
+       gdb_byte *val;
+       gdb_byte valbuf[v850_reg_size];
+ 
+diff --git a/gdb/vax-tdep.c b/gdb/vax-tdep.c
+--- a/gdb/vax-tdep.c
++++ b/gdb/vax-tdep.c
+@@ -110,7 +110,7 @@ vax_store_arguments (struct regcache *regcache, int nargs,
+   struct gdbarch *gdbarch = regcache->arch ();
+   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+   gdb_byte buf[4];
+-  int count = 0;
++  LONGEST count = 0;
+   int i;
+ 
+   /* We create an argument list on the stack, and make the argument
+@@ -119,7 +119,7 @@ vax_store_arguments (struct regcache *regcache, int nargs,
+   /* Push arguments in reverse order.  */
+   for (i = nargs - 1; i >= 0; i--)
+     {
+-      int len = TYPE_LENGTH (value_enclosing_type (args[i]));
++      LONGEST len = TYPE_LENGTH (value_enclosing_type (args[i]));
+ 
+       sp -= (len + 3) & ~3;
+       count += (len + 3) / 4;
+diff --git a/gdb/xstormy16-tdep.c b/gdb/xstormy16-tdep.c
+--- a/gdb/xstormy16-tdep.c
++++ b/gdb/xstormy16-tdep.c
+@@ -232,8 +232,9 @@ xstormy16_push_dummy_call (struct gdbarch *gdbarch,
+   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+   CORE_ADDR stack_dest = sp;
+   int argreg = E_1ST_ARG_REGNUM;
+-  int i, j;
+-  int typelen, slacklen;
++  int i, slacklen;
++  LONGEST j;
++  LONGEST typelen;
+   const gdb_byte *val;
+   gdb_byte buf[xstormy16_pc_size];
+ 
+diff --git a/gdb/xtensa-tdep.c b/gdb/xtensa-tdep.c
+--- a/gdb/xtensa-tdep.c
++++ b/gdb/xtensa-tdep.c
+@@ -1626,8 +1626,7 @@ xtensa_store_return_value (struct type *type,
+ 
+       if (len > (callsize > 8 ? 8 : 16))
+ 	internal_error (__FILE__, __LINE__,
+-			_("unimplemented for this length: %d"),
+-			TYPE_LENGTH (type));
++			_("unimplemented for this length: %d"), len);
+       areg = arreg_number (gdbarch,
+ 			   gdbarch_tdep (gdbarch)->a0_base + 2 + callsize, wb);
+ 
+@@ -1701,18 +1700,18 @@ xtensa_push_dummy_call (struct gdbarch *gdbarch,
+ {
+   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
+   int i;
+-  int size, onstack_size;
++  LONGEST size, onstack_size;
+   gdb_byte *buf = (gdb_byte *) alloca (16);
+   CORE_ADDR ra, ps;
+   struct argument_info
+   {
+     const bfd_byte *contents;
+-    int length;
++    ssize_t length;
+     int onstack;		/* onstack == 0 => in reg */
+     int align;			/* alignment */
+     union
+     {
+-      int offset;		/* stack offset if on stack.  */
++      ssize_t offset;		/* stack offset if on stack.  */
+       int regno;		/* regno if in register.  */
+     } u;
+   };
+@@ -1736,9 +1735,10 @@ xtensa_push_dummy_call (struct gdbarch *gdbarch,
+         {
+ 	  struct value *arg = args[i];
+ 	  struct type *arg_type = check_typedef (value_type (arg));
+-	  fprintf_unfiltered (gdb_stdlog, "%2d: %s %3d ", i,
+-			      host_address_to_string (arg),
+-			      TYPE_LENGTH (arg_type));
++	  const char *arg_type_len_s = pulongest (TYPE_LENGTH (arg_type));
++
++	  fprintf_unfiltered (gdb_stdlog, "%2d: %s %s ", i,
++			      host_address_to_string (arg), arg_type_len_s);
+ 	  switch (TYPE_CODE (arg_type))
+ 	    {
+ 	    case TYPE_CODE_INT:
+@@ -1808,8 +1808,8 @@ xtensa_push_dummy_call (struct gdbarch *gdbarch,
+ 	  info->align = TYPE_LENGTH (builtin_type (gdbarch)->builtin_long);
+ 	  break;
+ 	}
+-      info->length = TYPE_LENGTH (arg_type);
+       info->contents = value_contents (arg);
++      info->length = TYPE_LENGTH (arg_type);
+ 
+       /* Align size and onstack_size.  */
+       size = (size + info->align - 1) & ~(info->align - 1);
+@@ -1854,7 +1854,7 @@ xtensa_push_dummy_call (struct gdbarch *gdbarch,
+ 
+       if (info->onstack)
+ 	{
+-	  int n = info->length;
++	  ssize_t n = info->length;
+ 	  CORE_ADDR offset = sp + info->u.offset;
+ 
+ 	  /* Odd-sized structs are aligned to the lower side of a memory
+@@ -1870,7 +1870,7 @@ xtensa_push_dummy_call (struct gdbarch *gdbarch,
+ 	}
+       else
+ 	{
+-	  int n = info->length;
++	  ssize_t n = info->length;
+ 	  const bfd_byte *cp = info->contents;
+ 	  int r = info->u.regno;
+ 
diff --git a/SOURCES/gdb-rhbz795424-bitpos-25of25-test.patch b/SOURCES/gdb-rhbz795424-bitpos-25of25-test.patch
new file mode 100644
index 0000000..1738f5b
--- /dev/null
+++ b/SOURCES/gdb-rhbz795424-bitpos-25of25-test.patch
@@ -0,0 +1,638 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-rhbz795424-bitpos-25of25-test.patch
+
+;; Fix `GDB cannot access struct member whose offset is larger than 256MB'
+;; (RH BZ 795424).
+;;=push
+
+http://sourceware.org/ml/gdb-patches/2012-10/msg00231.html
+
+On Mon, 15 Oct 2012 15:25:55 +0200, Jan Kratochvil wrote:
+> I have filed for it now:
+> 	Invalid debug/ array bounds w/-fno-range-check and 32-bit target
+> 	http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54934
+
+Therefore it looks as a valid gfortran FSF GCC HEAD bug so provided
+a hand-patched .S file for i386; patched GDB PASSes with it.
+
+Thanks,
+Jan
+
+2012-10-15  Siddhesh Poyarekar  <siddhesh@redhat.com>
+	    Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.fortran/array-bounds.exp: New test file.
+	* gdb.fortran/array-bounds.f: New test file.
+	* gdb.fortran/array-bounds.S: New test file.
+
+diff --git a/gdb/testsuite/gdb.fortran/array-bounds.S b/gdb/testsuite/gdb.fortran/array-bounds.S
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.fortran/array-bounds.S
+@@ -0,0 +1,529 @@
++/* Copyright 2012 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++   This file is part of the gdb testsuite.  */
++
++	.file	"array-bounds.f"
++	.text
++.Ltext0:
++	.type	MAIN__, @function
++MAIN__:
++.LFB0:
++	.file 1 "gdb.fortran/array-bounds.f"
++	# gdb.fortran/array-bounds.f:16
++	.loc 1 16 0
++	.cfi_startproc
++# BLOCK 2 seq:0
++# PRED: ENTRY (FALLTHRU)
++	pushl	%ebp
++.LCFI0:
++	.cfi_def_cfa_offset 8
++	.cfi_offset 5, -8
++	movl	%esp, %ebp
++.LCFI1:
++	.cfi_def_cfa_register 5
++	subl	$40, %esp
++.LBB2:
++# SUCC: 3 (FALLTHRU)
++	# gdb.fortran/array-bounds.f:18
++	.loc 1 18 0
++	movl	$-1, %eax
++# BLOCK 3 seq:1
++# PRED: 2 (FALLTHRU) 4 [100.0%] 
++.L3:
++	# gdb.fortran/array-bounds.f:18
++	.loc 1 18 0 is_stmt 0 discriminator 1
++	testl	%eax, %eax
++# SUCC: 5 4 (FALLTHRU)
++	jg	.L2
++# BLOCK 4 seq:2
++# PRED: 3 (FALLTHRU)
++	# gdb.fortran/array-bounds.f:18
++	.loc 1 18 0 discriminator 2
++	leal	1(%eax), %ecx
++	movl	.LC0, %edx
++	movl	%edx, -16(%ebp,%ecx,4)
++	addl	$1, %eax
++# SUCC: 3 [100.0%] 
++	jmp	.L3
++# BLOCK 5 seq:3
++# PRED: 3
++.L2:
++.LBE2:
++	# gdb.fortran/array-bounds.f:19
++	.loc 1 19 0 is_stmt 1
++	movl	-16(%ebp), %eax
++	movl	-12(%ebp), %edx
++	movl	%eax, -24(%ebp)
++	movl	%edx, -20(%ebp)
++	# gdb.fortran/array-bounds.f:20
++	.loc 1 20 0
++	movl	$0, 4(%esp)
++	movl	$0, (%esp)
++# SUCC:
++	call	_gfortran_stop_string
++	.cfi_endproc
++.LFE0:
++	.size	MAIN__, .-MAIN__
++	.globl	main
++	.type	main, @function
++main:
++.LFB1:
++	# gdb.fortran/array-bounds.f:21
++	.loc 1 21 0
++	.cfi_startproc
++# BLOCK 2 seq:0
++# PRED: ENTRY (FALLTHRU)
++	pushl	%ebp
++.LCFI2:
++	.cfi_def_cfa_offset 8
++	.cfi_offset 5, -8
++	movl	%esp, %ebp
++.LCFI3:
++	.cfi_def_cfa_register 5
++	andl	$-16, %esp
++	subl	$16, %esp
++	# gdb.fortran/array-bounds.f:21
++	.loc 1 21 0
++	movl	12(%ebp), %eax
++	movl	%eax, 4(%esp)
++	movl	8(%ebp), %eax
++	movl	%eax, (%esp)
++	call	_gfortran_set_args
++	movl	$options.1.1824, 4(%esp)
++	movl	$7, (%esp)
++	call	_gfortran_set_options
++	call	MAIN__
++	movl	$0, %eax
++	leave
++.LCFI4:
++	.cfi_restore 5
++	.cfi_def_cfa 4, 4
++# SUCC: EXIT [100.0%] 
++	ret
++	.cfi_endproc
++.LFE1:
++	.size	main, .-main
++	.section	.rodata
++	.align 4
++	.type	options.1.1824, @object
++	.size	options.1.1824, 28
++options.1.1824:
++	.long	68
++	.long	1023
++	.long	0
++	.long	0
++	.long	1
++	.long	1
++	.long	0
++	.align 4
++.LC0:
++	.long	1109917696
++	.text
++.Letext0:
++	.section	.debug_info,"",@progbits
++.Ldebug_info0:
++	.long	2f - 1f	# Length of Compilation Unit Info
++1:
++	.value	0x2	# DWARF version number
++	.long	.Ldebug_abbrev0	# Offset Into Abbrev. Section
++	.byte	0x4	# Pointer Size (in bytes)
++dieb:	.uleb128 0x1	# (DIE (0xb) DW_TAG_compile_unit)
++	.long	.LASF5	# DW_AT_producer: "GNU Fortran 4.8.0 20121015 (experimental) -ffixed-form -m32 -mtune=generic -march=x86-64 -g -gdwarf-2 -fintrinsic-modules-path .../gcchead-root/lib/gcc/x86_64-unknown-linux-gnu/4.8.0/finclude"
++	.byte	0xe	# DW_AT_language
++	.byte	0x2	# DW_AT_identifier_case
++	.long	.LASF6	# DW_AT_name: "gdb.fortran/array-bounds.f"
++	.long	.LASF7	# DW_AT_comp_dir: ""
++	.long	.Ltext0	# DW_AT_low_pc
++	.long	.Letext0	# DW_AT_high_pc
++	.long	.Ldebug_line0	# DW_AT_stmt_list
++die26:	.uleb128 0x2	# (DIE (0x26) DW_TAG_subprogram)
++	.long	.LASF8	# DW_AT_name: "MAIN__"
++	.byte	0x1	# DW_AT_decl_file (gdb.fortran/array-bounds.f)
++	.byte	0x10	# DW_AT_decl_line
++	.long	.LFB0	# DW_AT_low_pc
++	.long	.LFE0	# DW_AT_high_pc
++	.long	.LLST0	# DW_AT_frame_base
++	.byte	0x1	# DW_AT_GNU_all_tail_call_sites
++	.byte	0x1	# DW_AT_main_subprogram
++	.byte	0x2	# DW_AT_calling_convention
++	.long	die66 - .Ldebug_info0	# DW_AT_sibling
++die40:	.uleb128 0x3	# (DIE (0x40) DW_TAG_variable)
++	.ascii "bar\0"	# DW_AT_name
++	.byte	0x1	# DW_AT_decl_file (gdb.fortran/array-bounds.f)
++	.byte	0x11	# DW_AT_decl_line
++	.long	die66 - .Ldebug_info0	# DW_AT_type
++	.byte	0x2	# DW_AT_location
++	.byte	0x91	# DW_OP_fbreg
++	.sleb128 -24
++die4e:	.uleb128 0x3	# (DIE (0x4e) DW_TAG_variable)
++	.ascii "foo\0"	# DW_AT_name
++	.byte	0x1	# DW_AT_decl_file (gdb.fortran/array-bounds.f)
++	.byte	0x10	# DW_AT_decl_line
++	.long	die88 - .Ldebug_info0	# DW_AT_type
++	.byte	0x2	# DW_AT_location
++	.byte	0x91	# DW_OP_fbreg
++	.sleb128 -32
++die5c:	.uleb128 0x4	# (DIE (0x5c) DW_TAG_lexical_block)
++	.long	.LBB2	# DW_AT_low_pc
++	.long	.LBE2	# DW_AT_high_pc
++	.byte	0	# end of children of DIE 0x26
++die66:	.uleb128 0x5	# (DIE (0x66) DW_TAG_array_type)
++	.long	die81 - .Ldebug_info0	# DW_AT_type
++	.long	die7a - .Ldebug_info0	# DW_AT_sibling
++die6f:	.uleb128 0x6	# (DIE (0x6f) DW_TAG_subrange_type)
++	.long	die7a - .Ldebug_info0	# DW_AT_type
++#if 0
++	.long	0xffffffff	# DW_AT_lower_bound
++	.byte	0	# DW_AT_upper_bound
++#else
++	.quad	0xfffffffeffffffff	# DW_AT_lower_bound
++	.quad	0xffffffff00000000	# DW_AT_upper_bound
++#endif
++	.byte	0	# end of children of DIE 0x66
++die7a:	.uleb128 0x7	# (DIE (0x7a) DW_TAG_base_type)
++#if 0
++	.byte	0x4	# DW_AT_byte_size
++#else
++	.byte	0x8	# DW_AT_byte_size
++#endif
++	.byte	0x5	# DW_AT_encoding
++	.long	.LASF0	# DW_AT_name: "integer(kind=4)"
++die81:	.uleb128 0x7	# (DIE (0x81) DW_TAG_base_type)
++	.byte	0x4	# DW_AT_byte_size
++	.byte	0x4	# DW_AT_encoding
++	.long	.LASF1	# DW_AT_name: "real(kind=4)"
++die88:	.uleb128 0x5	# (DIE (0x88) DW_TAG_array_type)
++	.long	die81 - .Ldebug_info0	# DW_AT_type
++	.long	die99 - .Ldebug_info0	# DW_AT_sibling
++die91:	.uleb128 0x8	# (DIE (0x91) DW_TAG_subrange_type)
++	.long	die7a - .Ldebug_info0	# DW_AT_type
++#if 0
++	.byte	0	# DW_AT_lower_bound
++	.byte	0x1	# DW_AT_upper_bound
++#else
++	.quad	0x100000000	# DW_AT_lower_bound
++	.quad	0x100000001	# DW_AT_upper_bound
++#endif
++	.byte	0	# end of children of DIE 0x88
++die99:	.uleb128 0x9	# (DIE (0x99) DW_TAG_subprogram)
++	.byte	0x1	# DW_AT_external
++	.long	.LASF9	# DW_AT_name: "main"
++	.byte	0x1	# DW_AT_decl_file (gdb.fortran/array-bounds.f)
++	.byte	0x15	# DW_AT_decl_line
++	.long	die7a - .Ldebug_info0	# DW_AT_type
++	.long	.LFB1	# DW_AT_low_pc
++	.long	.LFE1	# DW_AT_high_pc
++	.long	.LLST1	# DW_AT_frame_base
++	.byte	0x1	# DW_AT_GNU_all_tail_call_sites
++	.long	died4 - .Ldebug_info0	# DW_AT_sibling
++dieb6:	.uleb128 0xa	# (DIE (0xb6) DW_TAG_formal_parameter)
++	.long	.LASF2	# DW_AT_name: "argc"
++	.byte	0x1	# DW_AT_decl_file (gdb.fortran/array-bounds.f)
++	.byte	0x15	# DW_AT_decl_line
++	.long	died4 - .Ldebug_info0	# DW_AT_type
++	.byte	0x2	# DW_AT_location
++	.byte	0x91	# DW_OP_fbreg
++	.sleb128 0
++diec4:	.uleb128 0xa	# (DIE (0xc4) DW_TAG_formal_parameter)
++	.long	.LASF3	# DW_AT_name: "argv"
++	.byte	0x1	# DW_AT_decl_file (gdb.fortran/array-bounds.f)
++	.byte	0x15	# DW_AT_decl_line
++	.long	died9 - .Ldebug_info0	# DW_AT_type
++	.byte	0x3	# DW_AT_location
++	.byte	0x91	# DW_OP_fbreg
++	.sleb128 4
++	.byte	0x6	# DW_OP_deref
++	.byte	0	# end of children of DIE 0x99
++died4:	.uleb128 0xb	# (DIE (0xd4) DW_TAG_const_type)
++	.long	die7a - .Ldebug_info0	# DW_AT_type
++died9:	.uleb128 0xc	# (DIE (0xd9) DW_TAG_pointer_type)
++	.byte	0x4	# DW_AT_byte_size
++	.long	diedf - .Ldebug_info0	# DW_AT_type
++diedf:	.uleb128 0x7	# (DIE (0xdf) DW_TAG_base_type)
++	.byte	0x1	# DW_AT_byte_size
++	.byte	0x8	# DW_AT_encoding
++	.long	.LASF4	# DW_AT_name: "character(kind=1)"
++	.byte	0	# end of children of DIE 0xb
++2:
++	.section	.debug_abbrev,"",@progbits
++.Ldebug_abbrev0:
++	.uleb128 0x1	# (abbrev code)
++	.uleb128 0x11	# (TAG: DW_TAG_compile_unit)
++	.byte	0x1	# DW_children_yes
++	.uleb128 0x25	# (DW_AT_producer)
++	.uleb128 0xe	# (DW_FORM_strp)
++	.uleb128 0x13	# (DW_AT_language)
++	.uleb128 0xb	# (DW_FORM_data1)
++	.uleb128 0x42	# (DW_AT_identifier_case)
++	.uleb128 0xb	# (DW_FORM_data1)
++	.uleb128 0x3	# (DW_AT_name)
++	.uleb128 0xe	# (DW_FORM_strp)
++	.uleb128 0x1b	# (DW_AT_comp_dir)
++	.uleb128 0xe	# (DW_FORM_strp)
++	.uleb128 0x11	# (DW_AT_low_pc)
++	.uleb128 0x1	# (DW_FORM_addr)
++	.uleb128 0x12	# (DW_AT_high_pc)
++	.uleb128 0x1	# (DW_FORM_addr)
++	.uleb128 0x10	# (DW_AT_stmt_list)
++	.uleb128 0x6	# (DW_FORM_data4)
++	.byte	0
++	.byte	0
++	.uleb128 0x2	# (abbrev code)
++	.uleb128 0x2e	# (TAG: DW_TAG_subprogram)
++	.byte	0x1	# DW_children_yes
++	.uleb128 0x3	# (DW_AT_name)
++	.uleb128 0xe	# (DW_FORM_strp)
++	.uleb128 0x3a	# (DW_AT_decl_file)
++	.uleb128 0xb	# (DW_FORM_data1)
++	.uleb128 0x3b	# (DW_AT_decl_line)
++	.uleb128 0xb	# (DW_FORM_data1)
++	.uleb128 0x11	# (DW_AT_low_pc)
++	.uleb128 0x1	# (DW_FORM_addr)
++	.uleb128 0x12	# (DW_AT_high_pc)
++	.uleb128 0x1	# (DW_FORM_addr)
++	.uleb128 0x40	# (DW_AT_frame_base)
++	.uleb128 0x6	# (DW_FORM_data4)
++	.uleb128 0x2116	# (DW_AT_GNU_all_tail_call_sites)
++	.uleb128 0xc	# (DW_FORM_flag)
++	.uleb128 0x6a	# (DW_AT_main_subprogram)
++	.uleb128 0xc	# (DW_FORM_flag)
++	.uleb128 0x36	# (DW_AT_calling_convention)
++	.uleb128 0xb	# (DW_FORM_data1)
++	.uleb128 0x1	# (DW_AT_sibling)
++	.uleb128 0x13	# (DW_FORM_ref4)
++	.byte	0
++	.byte	0
++	.uleb128 0x3	# (abbrev code)
++	.uleb128 0x34	# (TAG: DW_TAG_variable)
++	.byte	0	# DW_children_no
++	.uleb128 0x3	# (DW_AT_name)
++	.uleb128 0x8	# (DW_FORM_string)
++	.uleb128 0x3a	# (DW_AT_decl_file)
++	.uleb128 0xb	# (DW_FORM_data1)
++	.uleb128 0x3b	# (DW_AT_decl_line)
++	.uleb128 0xb	# (DW_FORM_data1)
++	.uleb128 0x49	# (DW_AT_type)
++	.uleb128 0x13	# (DW_FORM_ref4)
++	.uleb128 0x2	# (DW_AT_location)
++	.uleb128 0xa	# (DW_FORM_block1)
++	.byte	0
++	.byte	0
++	.uleb128 0x4	# (abbrev code)
++	.uleb128 0xb	# (TAG: DW_TAG_lexical_block)
++	.byte	0	# DW_children_no
++	.uleb128 0x11	# (DW_AT_low_pc)
++	.uleb128 0x1	# (DW_FORM_addr)
++	.uleb128 0x12	# (DW_AT_high_pc)
++	.uleb128 0x1	# (DW_FORM_addr)
++	.byte	0
++	.byte	0
++	.uleb128 0x5	# (abbrev code)
++	.uleb128 0x1	# (TAG: DW_TAG_array_type)
++	.byte	0x1	# DW_children_yes
++	.uleb128 0x49	# (DW_AT_type)
++	.uleb128 0x13	# (DW_FORM_ref4)
++	.uleb128 0x1	# (DW_AT_sibling)
++	.uleb128 0x13	# (DW_FORM_ref4)
++	.byte	0
++	.byte	0
++	.uleb128 0x6	# (abbrev code)
++	.uleb128 0x21	# (TAG: DW_TAG_subrange_type)
++	.byte	0	# DW_children_no
++	.uleb128 0x49	# (DW_AT_type)
++	.uleb128 0x13	# (DW_FORM_ref4)
++#if 0
++	.uleb128 0x22	# (DW_AT_lower_bound)
++	.uleb128 0x6	# (DW_FORM_data4)
++	.uleb128 0x2f	# (DW_AT_upper_bound)
++	.uleb128 0xb	# (DW_FORM_data1)
++#else
++	.uleb128 0x22	# (DW_AT_lower_bound)
++	.uleb128 0x7	# (DW_FORM_data8)
++	.uleb128 0x2f	# (DW_AT_upper_bound)
++	.uleb128 0x7	# (DW_FORM_data8)
++#endif
++	.byte	0
++	.byte	0
++	.uleb128 0x7	# (abbrev code)
++	.uleb128 0x24	# (TAG: DW_TAG_base_type)
++	.byte	0	# DW_children_no
++	.uleb128 0xb	# (DW_AT_byte_size)
++	.uleb128 0xb	# (DW_FORM_data1)
++	.uleb128 0x3e	# (DW_AT_encoding)
++	.uleb128 0xb	# (DW_FORM_data1)
++	.uleb128 0x3	# (DW_AT_name)
++	.uleb128 0xe	# (DW_FORM_strp)
++	.byte	0
++	.byte	0
++	.uleb128 0x8	# (abbrev code)
++	.uleb128 0x21	# (TAG: DW_TAG_subrange_type)
++	.byte	0	# DW_children_no
++	.uleb128 0x49	# (DW_AT_type)
++	.uleb128 0x13	# (DW_FORM_ref4)
++#if 0
++	.uleb128 0x22	# (DW_AT_lower_bound)
++	.uleb128 0xb	# (DW_FORM_data1)
++	.uleb128 0x2f	# (DW_AT_upper_bound)
++	.uleb128 0xb	# (DW_FORM_data1)
++#else
++	.uleb128 0x22	# (DW_AT_lower_bound)
++	.uleb128 0x7	# (DW_FORM_data8)
++	.uleb128 0x2f	# (DW_AT_upper_bound)
++	.uleb128 0x7	# (DW_FORM_data8)
++#endif
++	.byte	0
++	.byte	0
++	.uleb128 0x9	# (abbrev code)
++	.uleb128 0x2e	# (TAG: DW_TAG_subprogram)
++	.byte	0x1	# DW_children_yes
++	.uleb128 0x3f	# (DW_AT_external)
++	.uleb128 0xc	# (DW_FORM_flag)
++	.uleb128 0x3	# (DW_AT_name)
++	.uleb128 0xe	# (DW_FORM_strp)
++	.uleb128 0x3a	# (DW_AT_decl_file)
++	.uleb128 0xb	# (DW_FORM_data1)
++	.uleb128 0x3b	# (DW_AT_decl_line)
++	.uleb128 0xb	# (DW_FORM_data1)
++	.uleb128 0x49	# (DW_AT_type)
++	.uleb128 0x13	# (DW_FORM_ref4)
++	.uleb128 0x11	# (DW_AT_low_pc)
++	.uleb128 0x1	# (DW_FORM_addr)
++	.uleb128 0x12	# (DW_AT_high_pc)
++	.uleb128 0x1	# (DW_FORM_addr)
++	.uleb128 0x40	# (DW_AT_frame_base)
++	.uleb128 0x6	# (DW_FORM_data4)
++	.uleb128 0x2116	# (DW_AT_GNU_all_tail_call_sites)
++	.uleb128 0xc	# (DW_FORM_flag)
++	.uleb128 0x1	# (DW_AT_sibling)
++	.uleb128 0x13	# (DW_FORM_ref4)
++	.byte	0
++	.byte	0
++	.uleb128 0xa	# (abbrev code)
++	.uleb128 0x5	# (TAG: DW_TAG_formal_parameter)
++	.byte	0	# DW_children_no
++	.uleb128 0x3	# (DW_AT_name)
++	.uleb128 0xe	# (DW_FORM_strp)
++	.uleb128 0x3a	# (DW_AT_decl_file)
++	.uleb128 0xb	# (DW_FORM_data1)
++	.uleb128 0x3b	# (DW_AT_decl_line)
++	.uleb128 0xb	# (DW_FORM_data1)
++	.uleb128 0x49	# (DW_AT_type)
++	.uleb128 0x13	# (DW_FORM_ref4)
++	.uleb128 0x2	# (DW_AT_location)
++	.uleb128 0xa	# (DW_FORM_block1)
++	.byte	0
++	.byte	0
++	.uleb128 0xb	# (abbrev code)
++	.uleb128 0x26	# (TAG: DW_TAG_const_type)
++	.byte	0	# DW_children_no
++	.uleb128 0x49	# (DW_AT_type)
++	.uleb128 0x13	# (DW_FORM_ref4)
++	.byte	0
++	.byte	0
++	.uleb128 0xc	# (abbrev code)
++	.uleb128 0xf	# (TAG: DW_TAG_pointer_type)
++	.byte	0	# DW_children_no
++	.uleb128 0xb	# (DW_AT_byte_size)
++	.uleb128 0xb	# (DW_FORM_data1)
++	.uleb128 0x49	# (DW_AT_type)
++	.uleb128 0x13	# (DW_FORM_ref4)
++	.byte	0
++	.byte	0
++	.byte	0
++	.section	.debug_loc,"",@progbits
++.Ldebug_loc0:
++.LLST0:
++	.long	.LFB0-.Ltext0	# Location list begin address (*.LLST0)
++	.long	.LCFI0-.Ltext0	# Location list end address (*.LLST0)
++	.value	0x2	# Location expression size
++	.byte	0x74	# DW_OP_breg4
++	.sleb128 4
++	.long	.LCFI0-.Ltext0	# Location list begin address (*.LLST0)
++	.long	.LCFI1-.Ltext0	# Location list end address (*.LLST0)
++	.value	0x2	# Location expression size
++	.byte	0x74	# DW_OP_breg4
++	.sleb128 8
++	.long	.LCFI1-.Ltext0	# Location list begin address (*.LLST0)
++	.long	.LFE0-.Ltext0	# Location list end address (*.LLST0)
++	.value	0x2	# Location expression size
++	.byte	0x75	# DW_OP_breg5
++	.sleb128 8
++	.long	0	# Location list terminator begin (*.LLST0)
++	.long	0	# Location list terminator end (*.LLST0)
++.LLST1:
++	.long	.LFB1-.Ltext0	# Location list begin address (*.LLST1)
++	.long	.LCFI2-.Ltext0	# Location list end address (*.LLST1)
++	.value	0x2	# Location expression size
++	.byte	0x74	# DW_OP_breg4
++	.sleb128 4
++	.long	.LCFI2-.Ltext0	# Location list begin address (*.LLST1)
++	.long	.LCFI3-.Ltext0	# Location list end address (*.LLST1)
++	.value	0x2	# Location expression size
++	.byte	0x74	# DW_OP_breg4
++	.sleb128 8
++	.long	.LCFI3-.Ltext0	# Location list begin address (*.LLST1)
++	.long	.LCFI4-.Ltext0	# Location list end address (*.LLST1)
++	.value	0x2	# Location expression size
++	.byte	0x75	# DW_OP_breg5
++	.sleb128 8
++	.long	.LCFI4-.Ltext0	# Location list begin address (*.LLST1)
++	.long	.LFE1-.Ltext0	# Location list end address (*.LLST1)
++	.value	0x2	# Location expression size
++	.byte	0x74	# DW_OP_breg4
++	.sleb128 4
++	.long	0	# Location list terminator begin (*.LLST1)
++	.long	0	# Location list terminator end (*.LLST1)
++	.section	.debug_aranges,"",@progbits
++	.long	0x1c	# Length of Address Ranges Info
++	.value	0x2	# DWARF Version
++	.long	.Ldebug_info0	# Offset of Compilation Unit Info
++	.byte	0x4	# Size of Address
++	.byte	0	# Size of Segment Descriptor
++	.value	0	# Pad to 8 byte boundary
++	.value	0
++	.long	.Ltext0	# Address
++	.long	.Letext0-.Ltext0	# Length
++	.long	0
++	.long	0
++	.section	.debug_line,"",@progbits
++.Ldebug_line0:
++	.section	.debug_str,"MS",@progbits,1
++.LASF4:
++	.string	"character(kind=1)"
++.LASF5:
++	.string	"GNU Fortran 4.8.0 20121015 (experimental) -ffixed-form -m32 -mtune=generic -march=x86-64 -g -gdwarf-2 -fintrinsic-modules-path .../gcchead-root/lib/gcc/x86_64-unknown-linux-gnu/4.8.0/finclude"
++.LASF7:
++	.string	""
++.LASF0:
++#if 0
++	.string	"integer(kind=4)"
++#else
++	.string	"integer(kind=8)"
++#endif
++.LASF9:
++	.string	"main"
++.LASF8:
++	.string	"MAIN__"
++.LASF6:
++	.string	"gdb.fortran/array-bounds.f"
++.LASF2:
++	.string	"argc"
++.LASF1:
++	.string	"real(kind=4)"
++.LASF3:
++	.string	"argv"
++	.ident	"GCC: (GNU) 4.8.0 20121015 (experimental)"
++	.section	.note.GNU-stack,"",@progbits
+diff --git a/gdb/testsuite/gdb.fortran/array-bounds.exp b/gdb/testsuite/gdb.fortran/array-bounds.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.fortran/array-bounds.exp
+@@ -0,0 +1,43 @@
++# Copyright 2012 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++# This file is part of the gdb testsuite.  It contains test to ensure that
++# array bounds accept LONGEST.
++
++if { [skip_fortran_tests] } { return -1 }
++
++set testfile "array-bounds"
++
++if { [is_ilp32_target] && ([istarget "i\[34567\]86-*-linux*"]
++			   || [istarget "x86_64-*-linux*"]) } {
++    set srcfile ${testfile}.S
++    set opts {nodebug f90}
++} else {
++    set srcfile ${testfile}.f
++    set opts {debug f90}
++}
++
++if {[prepare_for_testing $testfile.exp $testfile $srcfile $opts]} {
++    print "compile failed"
++    return -1
++}
++
++if { ![runto MAIN__] } {
++    perror "Could not run to breakpoint `MAIN__'."
++    continue
++}
++
++gdb_test "print &foo" {.*\(4294967296:4294967297\).*}
++gdb_test "print &bar" {.*\(-4294967297:-4294967296\).*}
+diff --git a/gdb/testsuite/gdb.fortran/array-bounds.f b/gdb/testsuite/gdb.fortran/array-bounds.f
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.fortran/array-bounds.f
+@@ -0,0 +1,22 @@
++c Copyright 2012 Free Software Foundation, Inc.
++
++c This program is free software; you can redistribute it and/or modify
++c it under the terms of the GNU General Public License as published by
++c the Free Software Foundation; either version 3 of the License, or
++c (at your option) any later version.
++c
++c This program is distributed in the hope that it will be useful,
++c but WITHOUT ANY WARRANTY; without even the implied warranty of
++c MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++c GNU General Public License for more details.
++c
++c You should have received a copy of the GNU General Public License
++c along with this program.  If not, see <http://www.gnu.org/licenses/>.
++
++        dimension foo(4294967296_8:4294967297_8)
++        dimension bar(-4294967297_8:-4294967296_8)
++        bar = 42
++        foo=bar
++        stop
++        end
++
diff --git a/SOURCES/gdb-rhbz795424-bitpos-25of25.patch b/SOURCES/gdb-rhbz795424-bitpos-25of25.patch
new file mode 100644
index 0000000..de6a324
--- /dev/null
+++ b/SOURCES/gdb-rhbz795424-bitpos-25of25.patch
@@ -0,0 +1,140 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-rhbz795424-bitpos-25of25.patch
+
+;; Fix `GDB cannot access struct member whose offset is larger than 256MB'
+;; (RH BZ 795424).
+;;=push
+
+http://sourceware.org/ml/gdb-patches/2012-08/msg00562.html
+
+--MP_/90J7bck2fqDySEX9JkZtaqL
+Content-Type: text/plain; charset=US-ASCII
+Content-Transfer-Encoding: 7bit
+Content-Disposition: inline
+
+Hi,
+
+Range bounds for a gdb type can have LONGEST values for low and high
+bounds. Fortran range bounds functions however use only int. The larger
+ranges don't compile by default on gcc, but it is possible to override
+the check in the compiler by using -fno-range-check. As a result, this
+check is necessary so that we don't print junk in case of an overflow.
+
+Attached patch does this expansion and also includes a test case that
+verifies that the problem is fixed. I have also verified on x86_64 that
+this patch does not cause any regressions.
+
+Regards,
+Siddhesh
+
+gdb/ChangeLog:
+
+	* f-lang.h (f77_get_upperbound): Return LONGEST.
+	(f77_get_lowerbound): Likewise.
+	* f-typeprint.c (f_type_print_varspec_suffix): Expand
+	UPPER_BOUND and LOWER_BOUND to LONGEST.  Use plongest to format
+	print them.
+	(f_type_print_base): Expand UPPER_BOUND to LONGEST.  Use
+	plongest to format print it.
+	* f-valprint.c (f77_get_lowerbound): Return LONGEST.
+	(f77_get_upperbound): Likewise.
+	(f77_get_dynamic_length_of_aggregate): Expand UPPER_BOUND,
+	LOWER_BOUND to LONGEST.
+	(f77_create_arrayprint_offset_tbl): Likewise.
+
+testsuite/ChangeLog:
+
+	* gdb.fortran/array-bounds.exp: New test case.
+	* gdb.fortran/array-bounds.f: New test case.
+
+--MP_/90J7bck2fqDySEX9JkZtaqL
+Content-Type: text/x-patch
+Content-Transfer-Encoding: 7bit
+Content-Disposition: attachment; filename=f77-bounds.patch
+
+diff --git a/gdb/f-lang.h b/gdb/f-lang.h
+--- a/gdb/f-lang.h
++++ b/gdb/f-lang.h
+@@ -47,9 +47,9 @@ struct common_block
+   struct symbol *contents[1];
+ };
+ 
+-extern int f77_get_upperbound (struct type *);
++extern LONGEST f77_get_upperbound (struct type *);
+ 
+-extern int f77_get_lowerbound (struct type *);
++extern LONGEST f77_get_lowerbound (struct type *);
+ 
+ extern void f77_get_dynamic_array_length (struct type *);
+ 
+diff --git a/gdb/f-typeprint.c b/gdb/f-typeprint.c
+--- a/gdb/f-typeprint.c
++++ b/gdb/f-typeprint.c
+@@ -149,7 +149,7 @@ f_type_print_varspec_suffix (struct type *type, struct ui_file *stream,
+ 			     int show, int passed_a_ptr, int demangled_args,
+ 			     int arrayprint_recurse_level, int print_rank_only)
+ {
+-  int upper_bound, lower_bound;
++  LONGEST upper_bound, lower_bound;
+ 
+   /* No static variables are permitted as an error call may occur during
+      execution of this function.  */
+@@ -196,7 +196,7 @@ f_type_print_varspec_suffix (struct type *type, struct ui_file *stream,
+ 	{
+ 	  lower_bound = f77_get_lowerbound (type);
+ 	  if (lower_bound != 1)	/* Not the default.  */
+-	    fprintf_filtered (stream, "%d:", lower_bound);
++	    fprintf_filtered (stream, "%s:", plongest (lower_bound));
+ 
+ 	  /* Make sure that, if we have an assumed size array, we
+ 	       print out a warning and print the upperbound as '*'.  */
+@@ -206,7 +206,7 @@ f_type_print_varspec_suffix (struct type *type, struct ui_file *stream,
+ 	  else
+ 	    {
+ 	      upper_bound = f77_get_upperbound (type);
+-	      fprintf_filtered (stream, "%d", upper_bound);
++	      fprintf_filtered (stream, "%s", plongest (upper_bound));
+ 	    }
+ 	}
+ 
+@@ -278,7 +278,7 @@ void
+ f_type_print_base (struct type *type, struct ui_file *stream, int show,
+ 		   int level)
+ {
+-  int upper_bound;
++  LONGEST upper_bound;
+   int index;
+ 
+   QUIT;
+@@ -370,7 +370,7 @@ f_type_print_base (struct type *type, struct ui_file *stream, int show,
+       else
+ 	{
+ 	  upper_bound = f77_get_upperbound (type);
+-	  fprintf_filtered (stream, "character*%d", upper_bound);
++	  fprintf_filtered (stream, "character*%s", plongest (upper_bound));
+ 	}
+       break;
+ 
+diff --git a/gdb/f-valprint.c b/gdb/f-valprint.c
+--- a/gdb/f-valprint.c
++++ b/gdb/f-valprint.c
+@@ -41,7 +41,7 @@ LONGEST f77_array_offset_tbl[MAX_FORTRAN_DIMS + 1][2];
+ /* Array which holds offsets to be applied to get a row's elements
+    for a given array.  Array also holds the size of each subarray.  */
+ 
+-int
++LONGEST
+ f77_get_lowerbound (struct type *type)
+ {
+   if (TYPE_ARRAY_LOWER_BOUND_IS_UNDEFINED (type))
+@@ -50,7 +50,7 @@ f77_get_lowerbound (struct type *type)
+   return TYPE_ARRAY_LOWER_BOUND_VALUE (type);
+ }
+ 
+-int
++LONGEST
+ f77_get_upperbound (struct type *type)
+ {
+   if (TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type))
diff --git a/SOURCES/gdb-rhbz795424-bitpos-lazyvalue.patch b/SOURCES/gdb-rhbz795424-bitpos-lazyvalue.patch
new file mode 100644
index 0000000..0f5c2e8
--- /dev/null
+++ b/SOURCES/gdb-rhbz795424-bitpos-lazyvalue.patch
@@ -0,0 +1,432 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-rhbz795424-bitpos-lazyvalue.patch
+
+;; Fix `GDB cannot access struct member whose offset is larger than 256MB'
+;; (RH BZ 795424).
+;;=push
+
+diff --git a/gdb/testsuite/gdb.base/longest-types-64bit.S b/gdb/testsuite/gdb.base/longest-types-64bit.S
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/longest-types-64bit.S
+@@ -0,0 +1,249 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2012 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++	.file	"longest-types-64bit.c"
++	.text
++.Ltext0:
++	.globl main
++main:
++	.comm	f,8,8
++.Letext0:
++	.file 1 "gdb.base/longest-types-64bit.c"
++	.section	.debug_info,"",@progbits
++.Ldebug_info0:
++	.4byte	0x9a	/* Length of Compilation Unit Info */
++	.2byte	0x2	/* DWARF version number */
++	.4byte	.Ldebug_abbrev0	/* Offset Into Abbrev. Section */
++	.byte	0x8	/* Pointer Size (in bytes) */
++	.uleb128 0x1	/* (DIE (0xb) DW_TAG_compile_unit) */
++	.4byte	.LASF3	/* DW_AT_producer: "GNU C 4.7.3 20121109 (prerelease)" */
++	.byte	0x1	/* DW_AT_language */
++	.4byte	.LASF4	/* DW_AT_name: "gdb.base/longest-types-64bit.c" */
++	.4byte	.LASF5	/* DW_AT_comp_dir: "" */
++	.4byte	.Ldebug_line0	/* DW_AT_stmt_list */
++	.uleb128 0x2	/* (DIE (0x1d) DW_TAG_structure_type) */
++	.ascii "foo\0"	/* DW_AT_name */
++	.4byte	0xff000002	/* DW_AT_byte_size */
++	.byte	0x1	/* DW_AT_decl_file (gdb.base/longest-types-64bit.c) */
++	.byte	0x12	/* DW_AT_decl_line */
++	.4byte	0x4e	/* DW_AT_sibling */
++	.uleb128 0x3	/* (DIE (0x2c) DW_TAG_member) */
++	.ascii "buf\0"	/* DW_AT_name */
++	.byte	0x1	/* DW_AT_decl_file (gdb.base/longest-types-64bit.c) */
++	.byte	0x14	/* DW_AT_decl_line */
++	.4byte	0x4e	/* DW_AT_type */
++	.byte	0x2	/* DW_AT_data_member_location */
++	.byte	0x23	/* DW_OP_plus_uconst */
++	.uleb128 0
++	.uleb128 0x4	/* (DIE (0x3a) DW_TAG_member) */
++	.4byte	.LASF0	/* DW_AT_name: "buf2" */
++	.byte	0x1	/* DW_AT_decl_file (gdb.base/longest-types-64bit.c) */
++	.byte	0x15	/* DW_AT_decl_line */
++	.4byte	0x73	/* DW_AT_type */
++	.byte	0x7	/* DW_AT_data_member_location */
++	.byte	0x23	/* DW_OP_plus_uconst */
++	.uleb128 0xffff000000
++	.byte	0	/* end of children of DIE 0x1d */
++	.uleb128 0x5	/* (DIE (0x4e) DW_TAG_array_type) */
++	.4byte	0x6c	/* DW_AT_type */
++	.4byte	0x65	/* DW_AT_sibling */
++	.uleb128 0x6	/* (DIE (0x57) DW_TAG_subrange_type) */
++	.4byte	0x65	/* DW_AT_type */
++	.quad	0xfffeffffff	/* DW_AT_upper_bound */
++	.byte	0	/* end of children of DIE 0x4e */
++	.uleb128 0x7	/* (DIE (0x65) DW_TAG_base_type) */
++	.byte	0x8	/* DW_AT_byte_size */
++	.byte	0x7	/* DW_AT_encoding */
++	.4byte	.LASF1	/* DW_AT_name: "sizetype" */
++	.uleb128 0x7	/* (DIE (0x6c) DW_TAG_base_type) */
++	.byte	0x1	/* DW_AT_byte_size */
++	.byte	0x6	/* DW_AT_encoding */
++	.4byte	.LASF2	/* DW_AT_name: "char" */
++	.uleb128 0x5	/* (DIE (0x73) DW_TAG_array_type) */
++	.4byte	0x6c	/* DW_AT_type */
++	.4byte	0x83	/* DW_AT_sibling */
++	.uleb128 0x8	/* (DIE (0x7c) DW_TAG_subrange_type) */
++	.4byte	0x65	/* DW_AT_type */
++	.byte	0x1	/* DW_AT_upper_bound */
++	.byte	0	/* end of children of DIE 0x73 */
++	.uleb128 0x9	/* (DIE (0x83) DW_TAG_variable) */
++	.ascii "f\0"	/* DW_AT_name */
++	.byte	0x1	/* DW_AT_decl_file (gdb.base/longest-types-64bit.c) */
++	.byte	0x16	/* DW_AT_decl_line */
++	.4byte	0x97	/* DW_AT_type */
++	.byte	0x1	/* DW_AT_external */
++	.byte	0x9	/* DW_AT_location */
++	.byte	0x3	/* DW_OP_addr */
++	.quad	f
++	.uleb128 0xa	/* (DIE (0x97) DW_TAG_pointer_type) */
++	.byte	0x8	/* DW_AT_byte_size */
++	.4byte	0x1d	/* DW_AT_type */
++	.byte	0	/* end of children of DIE 0xb */
++	.section	.debug_abbrev,"",@progbits
++.Ldebug_abbrev0:
++	.uleb128 0x1	/* (abbrev code) */
++	.uleb128 0x11	/* (TAG: DW_TAG_compile_unit) */
++	.byte	0x1	/* DW_children_yes */
++	.uleb128 0x25	/* (DW_AT_producer) */
++	.uleb128 0xe	/* (DW_FORM_strp) */
++	.uleb128 0x13	/* (DW_AT_language) */
++	.uleb128 0xb	/* (DW_FORM_data1) */
++	.uleb128 0x3	/* (DW_AT_name) */
++	.uleb128 0xe	/* (DW_FORM_strp) */
++	.uleb128 0x1b	/* (DW_AT_comp_dir) */
++	.uleb128 0xe	/* (DW_FORM_strp) */
++	.uleb128 0x10	/* (DW_AT_stmt_list) */
++	.uleb128 0x6	/* (DW_FORM_data4) */
++	.byte	0
++	.byte	0
++	.uleb128 0x2	/* (abbrev code) */
++	.uleb128 0x13	/* (TAG: DW_TAG_structure_type) */
++	.byte	0x1	/* DW_children_yes */
++	.uleb128 0x3	/* (DW_AT_name) */
++	.uleb128 0x8	/* (DW_FORM_string) */
++	.uleb128 0xb	/* (DW_AT_byte_size) */
++	.uleb128 0x6	/* (DW_FORM_data4) */
++	.uleb128 0x3a	/* (DW_AT_decl_file) */
++	.uleb128 0xb	/* (DW_FORM_data1) */
++	.uleb128 0x3b	/* (DW_AT_decl_line) */
++	.uleb128 0xb	/* (DW_FORM_data1) */
++	.uleb128 0x1	/* (DW_AT_sibling) */
++	.uleb128 0x13	/* (DW_FORM_ref4) */
++	.byte	0
++	.byte	0
++	.uleb128 0x3	/* (abbrev code) */
++	.uleb128 0xd	/* (TAG: DW_TAG_member) */
++	.byte	0	/* DW_children_no */
++	.uleb128 0x3	/* (DW_AT_name) */
++	.uleb128 0x8	/* (DW_FORM_string) */
++	.uleb128 0x3a	/* (DW_AT_decl_file) */
++	.uleb128 0xb	/* (DW_FORM_data1) */
++	.uleb128 0x3b	/* (DW_AT_decl_line) */
++	.uleb128 0xb	/* (DW_FORM_data1) */
++	.uleb128 0x49	/* (DW_AT_type) */
++	.uleb128 0x13	/* (DW_FORM_ref4) */
++	.uleb128 0x38	/* (DW_AT_data_member_location) */
++	.uleb128 0xa	/* (DW_FORM_block1) */
++	.byte	0
++	.byte	0
++	.uleb128 0x4	/* (abbrev code) */
++	.uleb128 0xd	/* (TAG: DW_TAG_member) */
++	.byte	0	/* DW_children_no */
++	.uleb128 0x3	/* (DW_AT_name) */
++	.uleb128 0xe	/* (DW_FORM_strp) */
++	.uleb128 0x3a	/* (DW_AT_decl_file) */
++	.uleb128 0xb	/* (DW_FORM_data1) */
++	.uleb128 0x3b	/* (DW_AT_decl_line) */
++	.uleb128 0xb	/* (DW_FORM_data1) */
++	.uleb128 0x49	/* (DW_AT_type) */
++	.uleb128 0x13	/* (DW_FORM_ref4) */
++	.uleb128 0x38	/* (DW_AT_data_member_location) */
++	.uleb128 0xa	/* (DW_FORM_block1) */
++	.byte	0
++	.byte	0
++	.uleb128 0x5	/* (abbrev code) */
++	.uleb128 0x1	/* (TAG: DW_TAG_array_type) */
++	.byte	0x1	/* DW_children_yes */
++	.uleb128 0x49	/* (DW_AT_type) */
++	.uleb128 0x13	/* (DW_FORM_ref4) */
++	.uleb128 0x1	/* (DW_AT_sibling) */
++	.uleb128 0x13	/* (DW_FORM_ref4) */
++	.byte	0
++	.byte	0
++	.uleb128 0x6	/* (abbrev code) */
++	.uleb128 0x21	/* (TAG: DW_TAG_subrange_type) */
++	.byte	0	/* DW_children_no */
++	.uleb128 0x49	/* (DW_AT_type) */
++	.uleb128 0x13	/* (DW_FORM_ref4) */
++	.uleb128 0x2f	/* (DW_AT_upper_bound) */
++	.uleb128 0x7	/* (DW_FORM_data8) */
++	.byte	0
++	.byte	0
++	.uleb128 0x7	/* (abbrev code) */
++	.uleb128 0x24	/* (TAG: DW_TAG_base_type) */
++	.byte	0	/* DW_children_no */
++	.uleb128 0xb	/* (DW_AT_byte_size) */
++	.uleb128 0xb	/* (DW_FORM_data1) */
++	.uleb128 0x3e	/* (DW_AT_encoding) */
++	.uleb128 0xb	/* (DW_FORM_data1) */
++	.uleb128 0x3	/* (DW_AT_name) */
++	.uleb128 0xe	/* (DW_FORM_strp) */
++	.byte	0
++	.byte	0
++	.uleb128 0x8	/* (abbrev code) */
++	.uleb128 0x21	/* (TAG: DW_TAG_subrange_type) */
++	.byte	0	/* DW_children_no */
++	.uleb128 0x49	/* (DW_AT_type) */
++	.uleb128 0x13	/* (DW_FORM_ref4) */
++	.uleb128 0x2f	/* (DW_AT_upper_bound) */
++	.uleb128 0xb	/* (DW_FORM_data1) */
++	.byte	0
++	.byte	0
++	.uleb128 0x9	/* (abbrev code) */
++	.uleb128 0x34	/* (TAG: DW_TAG_variable) */
++	.byte	0	/* DW_children_no */
++	.uleb128 0x3	/* (DW_AT_name) */
++	.uleb128 0x8	/* (DW_FORM_string) */
++	.uleb128 0x3a	/* (DW_AT_decl_file) */
++	.uleb128 0xb	/* (DW_FORM_data1) */
++	.uleb128 0x3b	/* (DW_AT_decl_line) */
++	.uleb128 0xb	/* (DW_FORM_data1) */
++	.uleb128 0x49	/* (DW_AT_type) */
++	.uleb128 0x13	/* (DW_FORM_ref4) */
++	.uleb128 0x3f	/* (DW_AT_external) */
++	.uleb128 0xc	/* (DW_FORM_flag) */
++	.uleb128 0x2	/* (DW_AT_location) */
++	.uleb128 0xa	/* (DW_FORM_block1) */
++	.byte	0
++	.byte	0
++	.uleb128 0xa	/* (abbrev code) */
++	.uleb128 0xf	/* (TAG: DW_TAG_pointer_type) */
++	.byte	0	/* DW_children_no */
++	.uleb128 0xb	/* (DW_AT_byte_size) */
++	.uleb128 0xb	/* (DW_FORM_data1) */
++	.uleb128 0x49	/* (DW_AT_type) */
++	.uleb128 0x13	/* (DW_FORM_ref4) */
++	.byte	0
++	.byte	0
++	.byte	0
++	.section	.debug_aranges,"",@progbits
++	.4byte	0x1c	/* Length of Address Ranges Info */
++	.2byte	0x2	/* DWARF Version */
++	.4byte	.Ldebug_info0	/* Offset of Compilation Unit Info */
++	.byte	0x8	/* Size of Address */
++	.byte	0	/* Size of Segment Descriptor */
++	.2byte	0	/* Pad to 16 byte boundary */
++	.2byte	0
++	.quad	0
++	.quad	0
++	.section	.debug_line,"",@progbits
++.Ldebug_line0:
++	.section	.debug_str,"MS",@progbits,1
++.LASF4:
++	.string	"gdb.base/longest-types-64bit.c"
++.LASF3:
++	.string	"GNU C 4.7.3 20121109 (prerelease)"
++.LASF0:
++	.string	"buf2"
++.LASF1:
++	.string	"sizetype"
++.LASF5:
++	.string	""
++.LASF2:
++	.string	"char"
++	.ident	"GCC: (GNU) 4.7.3 20121109 (prerelease)"
++	.section	.note.GNU-stack,"",@progbits
+diff --git a/gdb/testsuite/gdb.base/longest-types-64bit.bz2.uu b/gdb/testsuite/gdb.base/longest-types-64bit.bz2.uu
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/longest-types-64bit.bz2.uu
+@@ -0,0 +1,67 @@
++begin 755 gdb.base/longest-types-64bit.bz2
++M0EIH.3%!62936<'N#OH`"G/________^______?_Y______//]7SQD5'^/_%
++M=VY7?F_[X`F]]SG7531-==V:Z-.FW;M.U7=';:UH@<&FD31,E3]J'HE-/TR@
++M]4_5/32;%/U3]1--HU/U$#$R'I'J,FC0T-,)B'J#:CU,F@]0`/4:>F@CU/4,
++MA@$S2>IH!H`TR/0-$$:9`C(&FHU3VE-J;4\%,@>4T:#]49-J/4`>HT!H#3)^
++MJ`!H-``T]0&@-```:'J``&@`:9!`R9,@&3(`#3!#0!H``-#$--`,@``T`T#(
++M:`:`&0&@::,0:-```:``-`E-$1#4-3:4]3R9-39(Q/)#3R-30:9#$T!D!H&@
++M,CTGI!H#(#0T`#0``T`T`:``-``T`0,F3(!DR``TP0T`:``#0Q#30#(``-`-
++M`R&@&@!D!H&FC$&C0``&@`#0)%)H32>JGZ&!)Z1B1X@)DTVC4>H`&0:``R&@
++M,C0:``T``,C0``!H``#(`T`:#0U^\?]7K8M.96V/2[?M*DC)>WIUF)H7T\<T
++M[0D)70G25.YB!,:;8Q(;&XPAB4+$Q%:P)PA-;E=!-&$KNR22EM>$:KKRE&\Q
++M..M]L1*,!>D!X)RW,[,1I,9N%X-N&2+*:&)DJY4(VFQG%9K[/?J06WACF6-I
++MJ&JJ9,ZK4;X28M@[==%ME(A54:%>+3->MRK(G!8#TY>@E$6DR&<_5:C&/RZE
++MI<ON+RY5`LA"@DD$$DF!I9O]5X%G985_=V<.;?K9:G2R-#K<CB,1;26A<H4G
++M3R3I!)WX,-%>,!E6#`;*8R*E@++*))U)[6=OKFM%'+$-H5\X@1D)_Y*"NKV.
++M&\F8?SXW^<O]_DW.8WD@HY.NMMIBXFVROM_SKZ#4-`>HQ:Y@(Q[.>PEG=]@^
++M%C"3EZ/1X'H*02ZQH":6"@;8Z0LEW6<OKJ%$`01%`B;O!N*W1V.HC$``,:CS
++M6(/OTI'-:O6=7$/#?0T9Q[GSY1)6V`+CV@#XWMF`<S:AG<!43X"VGD,E=>)>
++M6^V=*`FB'5G4MD8L3J5XT#SW;J1]ZO+"SPIS%J(P46+Q=CC2$H-`-B&TD)M`
++M&A:066DA%AB0C6,460>M8B+$:-BR&@NM()F`S',,F8+#&0.SMOK@.G<'83N.
++MDA"#5-`JVC("1*TA;/M()&8J0+YH%IFV)+OA@4,`E?3M$[$@&Q`3]A!$&A(-
++M$PBT+2,@PU+2H9(T-H3N6'(2;""%2T*1I2P@`L?AG8&A!=31J7)1(9FB'8X=
++MWJ0S#YEG9K$.#.[L.[CNA"4JSJ^GK2*)UH=MC0.R8+E75'.09<NU&R0G1>[G
++MMQ1*[GI:>#>K`_NZS:V6>$K;OX6#!!N'"2413$DTL&]7KY>B<3V5!!C8#X5+
++MF%9<N\]C%B6OS;LH@1LR3R<LS+<]N]9\JZ<LJ#2_S2'UW('DZ!N>X!8NOKM5
++M+"N&P4.75C16!A9Q;:C.6N`WZDV=-]!<BTB<1Q*P(T4'&*2:@$=J@(M8)!5=
++MO;[ECS>,5PG<T[XC594XI0@RVPD86,M11%(T>]SNP[GV^L?YGI]7_'D8N?XV
++M'[7KZJWYVMXGBQS[`!)YI%3:D)I2!;%'R`W&YB<`9O2#F"C/)F;JK9P+@3&(
++MAH31[W)=YCODQDUKNM7A"3.C!2%CHTJNZ"Z\+#F-?(DLE>XAC%07B8;$%J_L
++MJPK48QC&,916=IM+<1&WRKLB6&Q2O79*!7S$,`7J8*!`!=K:5W550[NH9M#_
++MKL!LT,&;59GZW7S"5Z4%`%&!`9"J9`0:IR&H=MTKT=PEYC$,4K90M9AT'%;_
++MB0HVLE)(W&YWF,C:TURXO:`M[RX(A-GT97456Q4Z*HPU*4J:*[WU-4GD.9UV
++MSA#L4X[[*Y+)8IF.EO<.TP4IC2?(4HX)W1#:GOMOD2F;HM1BV#<E%PM+0&N5
++MP@$\$FD4C-Q^L"H^)NP2-.^JTT!8+!;'Z=KM7%'K@\)*PSETF&M6<Q#>;PH[
++M7:PJ-!#,!6N<3')-0C,>15'IZ>@U^CJJJ+>+>%%)%BBATD\)*F6&BLMIR&?\
++MQ2_?33@"NR1/CN\:)>5DG6`>$;$3QA94'-3]*CU6YG])<=2)'GC"RP-RK&-3
++MZDT-M_)R+F06DS?CR>E@^!,33"U6X<@OXO$Q>U$\T@IU<H-42=0YE[$,T`\H
++M('>'@T=>K`G7H8K5GLXMS3*^@JLVBHHE'.&?9RKC?Y`&&3J5!/C$++<@U#Q'
++M9R3I.$+S`%]-.UO>WH^C73F<&;RIJR+(Q@7(3PP*W[-O,,DD3S7BUK^I@D%*
++M`Y<*2TXJ&7;2'6'R.U>]0-="M`K+&N%/==N4U@9%@M1)U&251C($^S"WL"]T
++M-XN'D2[II3-$K%+&`3['O)%,8G*E%_8RV6A5B_4(2/?-AIC.\/>,YFJ<(G.8
++MAVP?UN*=ME:7&T!C%)I:&4H:-5>&^!&0>A.O'0G'/6&ZZ964@04&=#DC`%&:
++MUNLOS?,?'T:T!8L80<H_W1>='M:96K4;JX)6.('1#J$.1/L)$IS<4/*'2D34
++M/@J\BA(I2T40JS%9G8F!7U5_!#'U!+[7$ES&)@:*QAET-IBX6'_N5^7/#>@V
++MN3&,-6(AG[8&!8LV+F_U"W?/)+Y^,;=1K:SW28<0WA2"UPHP^8FG#R$!`Y`,
++MLF<`U*NNU\[6N03"*?I8D=K7.Z*H=A_3<H1Z%.Q8%2SR@I45('.EGR<N^\`Z
++M\[Z\D+/3>7;S=LVC(BQ,5<M0A"#`]7UK7W3%5(:FBMER3XSP15N!)`-^ZJZ%
++M:4)>8Q_\#G`'P*_-]T!G4$`V0BS]'S)D/;V7R?.2F?SF)N+2+#P2_<G#1B)C
++M(8?NF/+?:UMR3B#9$MBDCI2G7&N'T`FV!ERQ[21DOJ_8I73#BILTTSK)B5P<
++MG22S=*7TI>G(49TCE&*UIVT-MP808VTVV-$(*`VT<%>%96AHOL`(7%SI2%-R
++M#G2F02VQQH-7KT3E05I9Z)E\$Y8ED1KU`(4QHT%B]1$F:F1&8DAN.Q4&*?F@
++M.8D965.$PRH<VD+()"8&I%<R"P,Y[A,)^B(O%1(J%,)M(O6)8E%LY?C6X@@K
++M(F!2TA\,RE<O"E2*G?JE2YF\*OJM?$KWXW6R(3LR-)W.[:ZJC?ZE4,("J$()
++M5@U!62M"WBJ=&Q(L$5,4494K=.0B0#,C3$*``XLTF$DN!6P#%,4K%HTIC[*O
++M6"4S,;RN&@=NP7@72:=U#&JPBQ-60OEAWY;CUYF+$73.R>T5HD,G=G!KTF3D
++M94"&ZA-F,.19=8`\(Q;A07Q%!19*3#*F9Q+D(0K@V87@O.=7EJIM6`!4`>D!
++M)49QHA!BV+:4O@K00$$!5*6>A@2@4D)@R\"%$2F"O:24J*L(RP#N;O4K7I&2
++M[#)KR47H-N[<O^S-)"_Q\>VJ%3>$`9,AF8QID&I3G+D`*]BX98B$2K":A7_\
++M_]7LT!4,$NL5)NE>9[:MK2_/'GO:7"P`=<X'"U9""0<PJ`3`.:*(Z]-.GQ,9
++M>P(\L]O?"-APH(834$,W!IJS+U1F1C.!D$!&KS^-6%F90PQ[F]F=$^QE\X+-
++M@.W*LPH_78B>MHH@69RU[*'1J@8QAC\KSV@IG\(;_CUW:ZR2.,0$E3LZ_^P=
++M<_DCP"Q<`;+_;YP#^U%&E^#2M%,T?F3UN^>TSH)GFL"\%RF[KNZ+[R+@<&.$
++MC42)B96\1-.O_I).K7)X]W>EQ):4C(XB*+:S%0_37D^EBP+1HU(D?3"%_O2R
++M6-#X>AU#<$*!/,W6QC^;O^%]LR&_X'<8X$<3CUU_QFAJ;">H)2443GD4W!4#
++?<55!2^6_8J$)-O<>\H0U/6Q^>UG0%W)%.%"0P>X.^@``
++`
++end
+diff --git a/gdb/testsuite/gdb.base/longest-types-64bit.c b/gdb/testsuite/gdb.base/longest-types-64bit.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/longest-types-64bit.c
+@@ -0,0 +1,28 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2012 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++struct foo
++{
++  char buf[0xffff000000];
++  char buf2[2];
++} *f;
++
++int
++main (void)
++{
++  return 0;
++}
+diff --git a/gdb/testsuite/gdb.base/longest-types-64bit.exp b/gdb/testsuite/gdb.base/longest-types-64bit.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/longest-types-64bit.exp
+@@ -0,0 +1,59 @@
++# This testcase is part of GDB, the GNU debugger.
++
++# Copyright 2012 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++standard_testfile .c longest-types-64bit.S
++
++proc test { name } { with_test_prefix $name {
++    # 64-bit array size should not overflow
++    gdb_test "print &f->buf" {= \(char \(\*\)\[1099494850560\]\) 0x0}
++
++    # The offset should not overflow
++    gdb_test "print &f->buf2" {= \(char \(\*\)\[2\]\) 0xffff000000}
++}}
++
++
++# Test 64-bit file first as it is not compiled so its compilation never fails.
++
++set file64bitbz2uu ${srcdir}/${subdir}/${testfile}.bz2.uu
++set file64bit [standard_output_file ${testfile}]
++
++if {[catch "system \"uudecode -o - ${file64bitbz2uu} | bzip2 -dc >${file64bit}\""] != 0} {
++    untested "failed uudecode or bzip2"
++    return -1
++}
++file stat ${file64bit} file64bitstat
++if {$file64bitstat(size) != 9501} {
++    untested "uudecode or bzip2 produce invalid result"
++    return -1
++}
++
++clean_restart ${file64bit}
++
++#if { [prepare_for_testing ${testfile}.exp ${testfile} $srcfile2 {nodebug}] } {
++#    return -1
++#}
++
++test "64bit"
++
++
++# And here is the native build test.
++
++if { [prepare_for_testing ${testfile}.exp ${testfile} $srcfile {debug quiet}] } {
++    return -1
++}
++
++test "native"
diff --git a/SOURCES/gdb-rhbz881849-ipv6-1of3.patch b/SOURCES/gdb-rhbz881849-ipv6-1of3.patch
new file mode 100644
index 0000000..542db3a
--- /dev/null
+++ b/SOURCES/gdb-rhbz881849-ipv6-1of3.patch
@@ -0,0 +1,1934 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Sergio Durigan Junior <sergiodj@redhat.com>
+Date: Fri, 18 May 2018 01:29:24 -0400
+Subject: gdb-rhbz881849-ipv6-1of3.patch
+
+;; Implement IPv6 support for GDB/gdbserver (RH BZ 881849, Sergio Durigan Junior).
+
+Implement IPv6 support for GDB/gdbserver
+
+This patch implements IPv6 support for both GDB and gdbserver.  Based
+on my research, it is the fourth attempt to do that since 2006.  Since
+I used ideas from all of the previous patches, I also added their
+authors's names on the ChangeLogs as a way to recognize their
+efforts.  For reference sake, you can find the previous attempts at:
+
+  https://sourceware.org/ml/gdb-patches/2006-09/msg00192.html
+
+  https://sourceware.org/ml/gdb-patches/2014-02/msg00248.html
+
+  https://sourceware.org/ml/gdb-patches/2016-02/msg00226.html
+
+The basic idea behind the patch is to start using the new
+'getaddrinfo'/'getnameinfo' calls, which are responsible for
+translating names and addresses in a protocol-independent way.  This
+means that if we ever have a new version of the IP protocol, we won't
+need to change the code again (or, at least, won't have to change the
+majority of the code).
+
+The function 'getaddrinfo' returns a linked list of possible addresses
+to connect to.  Dealing with multiple addresses proved to be a hard
+task with the current TCP auto-retry mechanism implemented on
+ser-tcp:net_open.  For example, when gdbserver listened only on an
+IPv4 socket:
+
+  $ ./gdbserver --once 127.0.0.1:1234 ./a.out
+
+and GDB was instructed to try to connect to both IPv6 and IPv4
+sockets:
+
+  $ ./gdb -ex 'target extended-remote localhost:1234' ./a.out
+
+the user would notice a somewhat big delay before GDB was able to
+connect to the IPv4 socket.  This happened because GDB was trying to
+connect to the IPv6 socket first, and had to wait until the connection
+timed out before it tried to connect to the IPv4 socket.
+
+For that reason, I had to rewrite the main loop and implement a new
+method for handling multiple connections.  After some discussion,
+Pedro and I agreed on the following algorithm:
+
+  1) For each entry returned by 'getaddrinfo', we try to open a socket
+  and connect to it.
+
+  2.a) If we have a successful 'connect', we just use that connection.
+
+  2.b) If we don't have a successfull 'connect', but if we've got a
+  ECONNREFUSED (meaning the the connection was refused), we keep track
+  of this fact by using a flag.
+
+  2.c) If we don't have a successfull 'connect', but if we've got a
+  EINPROGRESS (meaning that the connection is in progress), we perform
+  a 'select' call on the socket until we have a result (either a
+  successful connection, or an error on the socket).
+
+  3) If tcp_auto_retry is true, and we haven't gotten a successful
+  connection, and at least one of our attempts failed with
+  ECONNREFUSED, then we wait a little bit (i.e., call
+  'wait_for_connect'), check to see if there was a
+  timeout/interruption (in which case we bail out), and then go back
+  to (1).
+
+After multiple tests, I was able to connect without delay on the
+scenario described above, and was also able to connect in all other
+types of scenarios.
+
+I also implemented some hostname parsing functions (along with their
+corresponding unit tests) which are used to help GDB and gdbserver to
+parse hostname strings provided by the user.  These new functions are
+living inside common/netstuff.[ch].  I've had to do that since IPv6
+introduces a new URL scheme, which defines that square brackets can be
+used to enclose the host part and differentiate it from the
+port (e.g., "[::1]:1234" means "host ::1, port 1234").  I spent some
+time thinking about a reasonable way to interpret what the user wants,
+and I came up with the following:
+
+  - If the user has provided a prefix that doesn't specify the protocol
+    version (i.e., "tcp:" or "udp:"), or if the user has not provided
+    any prefix, don't make any assumptions (i.e., assume AF_UNSPEC when
+    dealing with 'getaddrinfo') *unless* the host starts with "[" (in
+    which case, assume it's an IPv6 host).
+
+  - If the user has provided a prefix that does specify the protocol
+    version (i.e., "tcp4:", "tcp6:", "udp4:" or "udp6:"), then respect
+    that.
+
+This method doesn't follow strictly what RFC 2732 proposes (that
+literal IPv6 addresses should be provided enclosed in "[" and "]")
+because IPv6 addresses still can be provided without square brackets
+in our case, but since we have prefixes to specify protocol versions I
+think this is not an issue.
+
+Another thing worth mentioning is the new 'GDB_TEST_SOCKETHOST'
+testcase parameter, which makes it possible to specify the
+hostname (without the port) to be used when testing GDB and
+gdbserver.  For example, to run IPv6 tests:
+
+  $ make check-gdb RUNTESTFLAGS='GDB_TEST_SOCKETHOST=tcp6:[::1]'
+
+Or, to run IPv4 tests:
+
+  $ make check-gdb RUNTESTFLAGS='GDB_TEST_SOCKETHOST=tcp4:127.0.0.1'
+
+This required a few changes on the gdbserver-base.exp, and also a
+minimal adjustment on gdb.server/run-without-local-binary.exp.
+
+Finally, I've implemented a new testcase,
+gdb.server/server-connect.exp, which is supposed to run on the native
+host and perform various "smoke tests" using different connection
+methods.
+
+This patch has been regression-tested on BuildBot and locally, and
+also built using a x86_64-w64-mingw32 GCC, and no problems were found.
+
+gdb/ChangeLog:
+2018-07-11  Sergio Durigan Junior  <sergiodj@redhat.com>
+	    Jan Kratochvil  <jan.kratochvil@redhat.com>
+	    Paul Fertser  <fercerpav@gmail.com>
+	    Tsutomu Seki  <sekiriki@gmail.com>
+	    Pedro Alves  <palves@redhat.com>
+
+	* Makefile.in (SUBDIR_UNITTESTS_SRCS): Add
+	'unittests/parse-connection-spec-selftests.c'.
+	(COMMON_SFILES): Add 'common/netstuff.c'.
+	(HFILES_NO_SRCDIR): Add 'common/netstuff.h'.
+	* NEWS (Changes since GDB 8.2): Mention IPv6 support.
+	* common/netstuff.c: New file.
+	* common/netstuff.h: New file.
+	* ser-tcp.c: Include 'netstuff.h' and 'wspiapi.h'.
+	(wait_for_connect): Update comment.  New parameter
+	'gdb::optional<int> sock' instead of 'struct serial *scb'.
+	Use 'sock' directly instead of 'scb->fd'.
+	(try_connect): New function, with code from 'net_open'.
+	(net_open): Rewrite main loop to deal with multiple
+	sockets/addresses.  Handle IPv6-style hostnames; implement
+	support for IPv6 connections.
+	* unittests/parse-connection-spec-selftests.c: New file.
+
+gdb/gdbserver/ChangeLog:
+2018-07-11  Sergio Durigan Junior  <sergiodj@redhat.com>
+	    Jan Kratochvil  <jan.kratochvil@redhat.com>
+	    Paul Fertser  <fercerpav@gmail.com>
+	    Tsutomu Seki  <sekiriki@gmail.com>
+
+	* Makefile.in (SFILES): Add '$(srcdir)/common/netstuff.c'.
+	(OBS): Add 'common/netstuff.o'.
+	(GDBREPLAY_OBS): Likewise.
+	* gdbreplay.c: Include 'wspiapi.h' and 'netstuff.h'.
+	(remote_open): Implement support for IPv6
+	connections.
+	* remote-utils.c: Include 'netstuff.h', 'filestuff.h'
+	and 'wspiapi.h'.
+	(handle_accept_event): Accept connections from IPv6 sources.
+	(remote_prepare): Handle IPv6-style hostnames; implement
+	support for IPv6 connections.
+	(remote_open): Implement support for printing connections from
+	IPv6 sources.
+
+gdb/testsuite/ChangeLog:
+2018-07-11  Sergio Durigan Junior  <sergiodj@redhat.com>
+	    Jan Kratochvil  <jan.kratochvil@redhat.com>
+	    Paul Fertser  <fercerpav@gmail.com>
+	    Tsutomu Seki  <sekiriki@gmail.com>
+
+	* README (Testsuite Parameters): Mention new 'GDB_TEST_SOCKETHOST'
+	parameter.
+	* boards/native-extended-gdbserver.exp: Do not set 'sockethost'
+	by default.
+	* boards/native-gdbserver.exp: Likewise.
+	* gdb.server/run-without-local-binary.exp: Improve regexp used
+	for detecting when a remote debugging connection succeeds.
+	* gdb.server/server-connect.exp: New file.
+	* lib/gdbserver-support.exp (gdbserver_default_get_comm_port):
+	Do not prefix the port number with ":".
+	(gdbserver_start): New global GDB_TEST_SOCKETHOST.  Implement
+	support for detecting and using it.  Add '$debughost_gdbserver'
+	to the list of arguments used to start gdbserver.  Handle case
+	when gdbserver cannot resolve a network name.
+
+gdb/doc/ChangeLog:
+2018-07-11  Sergio Durigan Junior  <sergiodj@redhat.com>
+	    Jan Kratochvil  <jan.kratochvil@redhat.com>
+	    Paul Fertser  <fercerpav@gmail.com>
+	    Tsutomu Seki  <sekiriki@gmail.com>
+
+	* gdb.texinfo (Remote Connection Commands): Add explanation
+	about new IPv6 support.  Add new connection prefixes.
+
+diff --git a/gdb/Makefile.in b/gdb/Makefile.in
+--- a/gdb/Makefile.in
++++ b/gdb/Makefile.in
+@@ -430,6 +430,7 @@ SUBDIR_UNITTESTS_SRCS = \
+ 	unittests/offset-type-selftests.c \
+ 	unittests/observable-selftests.c \
+ 	unittests/optional-selftests.c \
++	unittests/parse-connection-spec-selftests.c \
+ 	unittests/ptid-selftests.c \
+ 	unittests/rsp-low-selftests.c \
+ 	unittests/scoped_fd-selftests.c \
+@@ -967,6 +968,7 @@ COMMON_SFILES = \
+ 	common/job-control.c \
+ 	common/gdb_tilde_expand.c \
+ 	common/gdb_vecs.c \
++	common/netstuff.c \
+ 	common/new-op.c \
+ 	common/pathstuff.c \
+ 	common/print-utils.c \
+@@ -1448,6 +1450,7 @@ HFILES_NO_SRCDIR = \
+ 	common/gdb_vecs.h \
+ 	common/gdb_wait.h \
+ 	common/common-inferior.h \
++	common/netstuff.h \
+ 	common/host-defs.h \
+ 	common/pathstuff.h \
+ 	common/print-utils.h \
+diff --git a/gdb/NEWS b/gdb/NEWS
+--- a/gdb/NEWS
++++ b/gdb/NEWS
+@@ -1,6 +1,12 @@
+ 		What has changed in GDB?
+ 	     (Organized release by release)
+ 
++*** Changes since GDB 8.2
++
++* GDB and GDBserver now support IPv6 connections.  IPv6 addresses
++  can be passed using the '[ADDRESS]:PORT' notation, or the regular
++  'ADDRESS:PORT' method.
++
+ *** Changes in GDB 8.2
+ 
+ * The 'set disassembler-options' command now supports specifying options
+diff --git a/gdb/common/netstuff.c b/gdb/common/netstuff.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/common/netstuff.c
+@@ -0,0 +1,155 @@
++/* Operations on network stuff.
++   Copyright (C) 2018 Free Software Foundation, Inc.
++
++   This file is part of GDB.
++
++   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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++#include "common-defs.h"
++#include "netstuff.h"
++#include <algorithm>
++
++#ifdef USE_WIN32API
++#include <winsock2.h>
++#include <wspiapi.h>
++#else
++#include <netinet/in.h>
++#include <arpa/inet.h>
++#include <netdb.h>
++#include <sys/socket.h>
++#include <netinet/tcp.h>
++#endif
++
++/* See common/netstuff.h.  */
++
++scoped_free_addrinfo::~scoped_free_addrinfo ()
++{
++  freeaddrinfo (m_res);
++}
++
++/* See common/netstuff.h.  */
++
++parsed_connection_spec
++parse_connection_spec_without_prefix (std::string spec, struct addrinfo *hint)
++{
++  parsed_connection_spec ret;
++  size_t last_colon_pos = 0;
++  /* We're dealing with IPv6 if:
++
++     - ai_family is AF_INET6, or
++     - ai_family is not AF_INET, and
++       - spec[0] is '[', or
++       - the number of ':' on spec is greater than 1.  */
++  bool is_ipv6 = (hint->ai_family == AF_INET6
++		  || (hint->ai_family != AF_INET
++		      && (spec[0] == '['
++			  || std::count (spec.begin (),
++					 spec.end (), ':') > 1)));
++
++  if (is_ipv6)
++    {
++      if (spec[0] == '[')
++	{
++	  /* IPv6 addresses can be written as '[ADDR]:PORT', and we
++	     support this notation.  */
++	  size_t close_bracket_pos = spec.find_first_of (']');
++
++	  if (close_bracket_pos == std::string::npos)
++	    error (_("Missing close bracket in hostname '%s'"),
++		   spec.c_str ());
++
++	  hint->ai_family = AF_INET6;
++
++	  const char c = spec[close_bracket_pos + 1];
++
++	  if (c == '\0')
++	    last_colon_pos = std::string::npos;
++	  else if (c != ':')
++	    error (_("Invalid cruft after close bracket in '%s'"),
++		   spec.c_str ());
++
++	  /* Erase both '[' and ']'.  */
++	  spec.erase (0, 1);
++	  spec.erase (close_bracket_pos - 1, 1);
++	}
++      else if (spec.find_first_of (']') != std::string::npos)
++	error (_("Missing open bracket in hostname '%s'"),
++	       spec.c_str ());
++    }
++
++  if (last_colon_pos == 0)
++    last_colon_pos = spec.find_last_of (':');
++
++  /* The length of the hostname part.  */
++  size_t host_len;
++
++  if (last_colon_pos != std::string::npos)
++    {
++      /* The user has provided a port.  */
++      host_len = last_colon_pos;
++      ret.port_str = spec.substr (last_colon_pos + 1);
++    }
++  else
++    host_len = spec.size ();
++
++  ret.host_str = spec.substr (0, host_len);
++
++  /* Default hostname is localhost.  */
++  if (ret.host_str.empty ())
++    ret.host_str = "localhost";
++
++  return ret;
++}
++
++/* See common/netstuff.h.  */
++
++parsed_connection_spec
++parse_connection_spec (const char *spec, struct addrinfo *hint)
++{
++  /* Struct to hold the association between valid prefixes, their
++     family and socktype.  */
++  struct host_prefix
++    {
++      /* The prefix.  */
++      const char *prefix;
++
++      /* The 'ai_family'.  */
++      int family;
++
++      /* The 'ai_socktype'.  */
++      int socktype;
++    };
++  static const struct host_prefix prefixes[] =
++    {
++      { "udp:",  AF_UNSPEC, SOCK_DGRAM },
++      { "tcp:",  AF_UNSPEC, SOCK_STREAM },
++      { "udp4:", AF_INET,   SOCK_DGRAM },
++      { "tcp4:", AF_INET,   SOCK_STREAM },
++      { "udp6:", AF_INET6,  SOCK_DGRAM },
++      { "tcp6:", AF_INET6,  SOCK_STREAM },
++    };
++
++  for (const host_prefix prefix : prefixes)
++    if (startswith (spec, prefix.prefix))
++      {
++	spec += strlen (prefix.prefix);
++	hint->ai_family = prefix.family;
++	hint->ai_socktype = prefix.socktype;
++	hint->ai_protocol
++	  = hint->ai_socktype == SOCK_DGRAM ? IPPROTO_UDP : IPPROTO_TCP;
++	break;
++      }
++
++  return parse_connection_spec_without_prefix (spec, hint);
++}
+diff --git a/gdb/common/netstuff.h b/gdb/common/netstuff.h
+new file mode 100644
+--- /dev/null
++++ b/gdb/common/netstuff.h
+@@ -0,0 +1,76 @@
++/* Operations on network stuff.
++   Copyright (C) 2018 Free Software Foundation, Inc.
++
++   This file is part of GDB.
++
++   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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++#ifndef NETSTUFF_H
++#define NETSTUFF_H
++
++#include <string>
++
++/* Like NI_MAXHOST/NI_MAXSERV, but enough for numeric forms.  */
++#define GDB_NI_MAX_ADDR 64
++#define GDB_NI_MAX_PORT 16
++
++/* Helper class to guarantee that we always call 'freeaddrinfo'.  */
++
++class scoped_free_addrinfo
++{
++public:
++  /* Default constructor.  */
++  explicit scoped_free_addrinfo (struct addrinfo *ainfo)
++    : m_res (ainfo)
++  {
++  }
++
++  /* Destructor responsible for free'ing M_RES by calling
++     'freeaddrinfo'.  */
++  ~scoped_free_addrinfo ();
++
++  DISABLE_COPY_AND_ASSIGN (scoped_free_addrinfo);
++
++private:
++  /* The addrinfo resource.  */
++  struct addrinfo *m_res;
++};
++
++/* The struct we return after parsing the connection spec.  */
++
++struct parsed_connection_spec
++{
++  /* The hostname.  */
++  std::string host_str;
++
++  /* The port, if any.  */
++  std::string port_str;
++};
++
++
++/* Parse SPEC (which is a string in the form of "ADDR:PORT") and
++   return a 'parsed_connection_spec' structure with the proper fields
++   filled in.  Also adjust HINT accordingly.  */
++extern parsed_connection_spec
++  parse_connection_spec_without_prefix (std::string spec,
++					struct addrinfo *hint);
++
++/* Parse SPEC (which is a string in the form of
++   "[tcp[6]:|udp[6]:]ADDR:PORT") and return a 'parsed_connection_spec'
++   structure with the proper fields filled in.  Also adjust HINT
++   accordingly.  */
++extern parsed_connection_spec parse_connection_spec (const char *spec,
++						     struct addrinfo *hint);
++
++#endif /* ! NETSTUFF_H */
+diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog
+--- a/gdb/doc/ChangeLog
++++ b/gdb/doc/ChangeLog
+@@ -1,3 +1,11 @@
++2018-07-11  Sergio Durigan Junior  <sergiodj@redhat.com>
++	    Jan Kratochvil  <jan.kratochvil@redhat.com>
++	    Paul Fertser  <fercerpav@gmail.com>
++	    Tsutomu Seki  <sekiriki@gmail.com>
++
++	* gdb.texinfo (Remote Connection Commands): Add explanation
++	about new IPv6 support.  Add new connection prefixes.
++
+ 2018-08-21  Alan Hayward  <alan.hayward@arm.com>
+ 
+ 	* gdb.texinfo (AArch64 SVE): New subsubsection.
+diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
+--- a/gdb/doc/gdb.texinfo
++++ b/gdb/doc/gdb.texinfo
+@@ -20548,16 +20548,27 @@ If you're using a serial line, you may want to give @value{GDBN} the
+ @code{target} command.
+ 
+ @item target remote @code{@var{host}:@var{port}}
++@itemx target remote @code{@var{[host]}:@var{port}}
+ @itemx target remote @code{tcp:@var{host}:@var{port}}
++@itemx target remote @code{tcp:@var{[host]}:@var{port}}
++@itemx target remote @code{tcp4:@var{host}:@var{port}}
++@itemx target remote @code{tcp6:@var{host}:@var{port}}
++@itemx target remote @code{tcp6:@var{[host]}:@var{port}}
+ @itemx target extended-remote @code{@var{host}:@var{port}}
++@itemx target extended-remote @code{@var{[host]}:@var{port}}
+ @itemx target extended-remote @code{tcp:@var{host}:@var{port}}
++@itemx target extended-remote @code{tcp:@var{[host]}:@var{port}}
++@itemx target extended-remote @code{tcp4:@var{host}:@var{port}}
++@itemx target extended-remote @code{tcp6:@var{host}:@var{port}}
++@itemx target extended-remote @code{tcp6:@var{[host]}:@var{port}}
+ @cindex @acronym{TCP} port, @code{target remote}
+ Debug using a @acronym{TCP} connection to @var{port} on @var{host}.
+-The @var{host} may be either a host name or a numeric @acronym{IP}
+-address; @var{port} must be a decimal number.  The @var{host} could be
+-the target machine itself, if it is directly connected to the net, or
+-it might be a terminal server which in turn has a serial line to the
+-target.
++The @var{host} may be either a host name, a numeric @acronym{IPv4}
++address, or a numeric @acronym{IPv6} address (with or without the
++square brackets to separate the address from the port); @var{port}
++must be a decimal number.  The @var{host} could be the target machine
++itself, if it is directly connected to the net, or it might be a
++terminal server which in turn has a serial line to the target.
+ 
+ For example, to connect to port 2828 on a terminal server named
+ @code{manyfarms}:
+@@ -20566,6 +20577,28 @@ For example, to connect to port 2828 on a terminal server named
+ target remote manyfarms:2828
+ @end smallexample
+ 
++To connect to port 2828 on a terminal server whose address is
++@code{2001:0db8:85a3:0000:0000:8a2e:0370:7334}, you can either use the
++square bracket syntax:
++
++@smallexample
++target remote [2001:0db8:85a3:0000:0000:8a2e:0370:7334]:2828
++@end smallexample
++
++@noindent
++or explicitly specify the @acronym{IPv6} protocol:
++
++@smallexample
++target remote tcp6:2001:0db8:85a3:0000:0000:8a2e:0370:7334:2828
++@end smallexample
++
++This last example may be confusing to the reader, because there is no
++visible separation between the hostname and the port number.
++Therefore, we recommend the user to provide @acronym{IPv6} addresses
++using square brackets for clarity.  However, it is important to
++mention that for @value{GDBN} there is no ambiguity: the number after
++the last colon is considered to be the port number.
++
+ If your remote target is actually running on the same machine as your
+ debugger session (e.g.@: a simulator for your target running on the
+ same host), you can omit the hostname.  For example, to connect to
+@@ -20579,7 +20612,15 @@ target remote :1234
+ Note that the colon is still required here.
+ 
+ @item target remote @code{udp:@var{host}:@var{port}}
++@itemx target remote @code{udp:@var{[host]}:@var{port}}
++@itemx target remote @code{udp4:@var{host}:@var{port}}
++@itemx target remote @code{udp6:@var{[host]}:@var{port}}
++@itemx target extended-remote @code{udp:@var{host}:@var{port}}
+ @itemx target extended-remote @code{udp:@var{host}:@var{port}}
++@itemx target extended-remote @code{udp:@var{[host]}:@var{port}}
++@itemx target extended-remote @code{udp4:@var{host}:@var{port}}
++@itemx target extended-remote @code{udp6:@var{host}:@var{port}}
++@itemx target extended-remote @code{udp6:@var{[host]}:@var{port}}
+ @cindex @acronym{UDP} port, @code{target remote}
+ Debug using @acronym{UDP} packets to @var{port} on @var{host}.  For example, to
+ connect to @acronym{UDP} port 2828 on a terminal server named @code{manyfarms}:
+diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
+--- a/gdb/gdbserver/ChangeLog
++++ b/gdb/gdbserver/ChangeLog
+@@ -1,3 +1,22 @@
++2018-07-11  Sergio Durigan Junior  <sergiodj@redhat.com>
++	    Jan Kratochvil  <jan.kratochvil@redhat.com>
++	    Paul Fertser  <fercerpav@gmail.com>
++	    Tsutomu Seki  <sekiriki@gmail.com>
++
++	* Makefile.in (SFILES): Add '$(srcdir)/common/netstuff.c'.
++	(OBS): Add 'common/netstuff.o'.
++	(GDBREPLAY_OBS): Likewise.
++	* gdbreplay.c: Include 'wspiapi.h' and 'netstuff.h'.
++	(remote_open): Implement support for IPv6
++	connections.
++	* remote-utils.c: Include 'netstuff.h', 'filestuff.h'
++	and 'wspiapi.h'.
++	(handle_accept_event): Accept connections from IPv6 sources.
++	(remote_prepare): Handle IPv6-style hostnames; implement
++	support for IPv6 connections.
++	(remote_open): Implement support for printing connections from
++	IPv6 sources.
++
+ 2018-08-26  Simon Marchi  <simon.marchi@ericsson.com>
+ 
+ 	PR gdb/23374
+diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in
+--- a/gdb/gdbserver/Makefile.in
++++ b/gdb/gdbserver/Makefile.in
+@@ -211,6 +211,7 @@ SFILES = \
+ 	$(srcdir)/common/job-control.c \
+ 	$(srcdir)/common/gdb_tilde_expand.c \
+ 	$(srcdir)/common/gdb_vecs.c \
++	$(srcdir)/common/netstuff.c \
+ 	$(srcdir)/common/new-op.c \
+ 	$(srcdir)/common/pathstuff.c \
+ 	$(srcdir)/common/print-utils.c \
+@@ -254,6 +255,7 @@ OBS = \
+ 	common/format.o \
+ 	common/gdb_tilde_expand.o \
+ 	common/gdb_vecs.o \
++	common/netstuff.o \
+ 	common/new-op.o \
+ 	common/pathstuff.o \
+ 	common/print-utils.o \
+@@ -290,6 +292,7 @@ GDBREPLAY_OBS = \
+ 	common/common-exceptions.o \
+ 	common/common-utils.o \
+ 	common/errors.o \
++	common/netstuff.o \
+ 	common/print-utils.o \
+ 	gdbreplay.o \
+ 	utils.o \
+diff --git a/gdb/gdbserver/gdbreplay.c b/gdb/gdbserver/gdbreplay.c
+--- a/gdb/gdbserver/gdbreplay.c
++++ b/gdb/gdbserver/gdbreplay.c
+@@ -46,8 +46,11 @@
+ 
+ #if USE_WIN32API
+ #include <winsock2.h>
++#include <wspiapi.h>
+ #endif
+ 
++#include "netstuff.h"
++
+ #ifndef HAVE_SOCKLEN_T
+ typedef int socklen_t;
+ #endif
+@@ -142,56 +145,108 @@ remote_close (void)
+ static void
+ remote_open (char *name)
+ {
+-  if (!strchr (name, ':'))
++  char *last_colon = strrchr (name, ':');
++
++  if (last_colon == NULL)
+     {
+       fprintf (stderr, "%s: Must specify tcp connection as host:addr\n", name);
+       fflush (stderr);
+       exit (1);
+     }
+-  else
+-    {
++
+ #ifdef USE_WIN32API
+-      static int winsock_initialized;
++  static int winsock_initialized;
+ #endif
+-      char *port_str;
+-      int port;
+-      struct sockaddr_in sockaddr;
+-      socklen_t tmp;
+-      int tmp_desc;
++  char *port_str;
++  int tmp;
++  int tmp_desc;
++  struct addrinfo hint;
++  struct addrinfo *ainfo;
+ 
+-      port_str = strchr (name, ':');
++  memset (&hint, 0, sizeof (hint));
++  /* Assume no prefix will be passed, therefore we should use
++     AF_UNSPEC.  */
++  hint.ai_family = AF_UNSPEC;
++  hint.ai_socktype = SOCK_STREAM;
++  hint.ai_protocol = IPPROTO_TCP;
+ 
+-      port = atoi (port_str + 1);
++  parsed_connection_spec parsed = parse_connection_spec (name, &hint);
++
++  if (parsed.port_str.empty ())
++    error (_("Missing port on hostname '%s'"), name);
+ 
+ #ifdef USE_WIN32API
+-      if (!winsock_initialized)
+-	{
+-	  WSADATA wsad;
++  if (!winsock_initialized)
++    {
++      WSADATA wsad;
+ 
+-	  WSAStartup (MAKEWORD (1, 0), &wsad);
+-	  winsock_initialized = 1;
+-	}
++      WSAStartup (MAKEWORD (1, 0), &wsad);
++      winsock_initialized = 1;
++    }
+ #endif
+ 
+-      tmp_desc = socket (PF_INET, SOCK_STREAM, 0);
+-      if (tmp_desc == -1)
+-	perror_with_name ("Can't open socket");
++  int r = getaddrinfo (parsed.host_str.c_str (), parsed.port_str.c_str (),
++		       &hint, &ainfo);
+ 
+-      /* Allow rapid reuse of this port. */
+-      tmp = 1;
+-      setsockopt (tmp_desc, SOL_SOCKET, SO_REUSEADDR, (char *) &tmp,
+-		  sizeof (tmp));
++  if (r != 0)
++    {
++      fprintf (stderr, "%s:%s: cannot resolve name: %s\n",
++	       parsed.host_str.c_str (), parsed.port_str.c_str (),
++	       gai_strerror (r));
++      fflush (stderr);
++      exit (1);
++    }
++
++  scoped_free_addrinfo free_ainfo (ainfo);
++
++  struct addrinfo *p;
++
++  for (p = ainfo; p != NULL; p = p->ai_next)
++    {
++      tmp_desc = socket (p->ai_family, p->ai_socktype, p->ai_protocol);
+ 
+-      sockaddr.sin_family = PF_INET;
+-      sockaddr.sin_port = htons (port);
+-      sockaddr.sin_addr.s_addr = INADDR_ANY;
++      if (tmp_desc >= 0)
++	break;
++    }
++
++  if (p == NULL)
++    perror_with_name ("Cannot open socket");
+ 
+-      if (bind (tmp_desc, (struct sockaddr *) &sockaddr, sizeof (sockaddr))
+-	  || listen (tmp_desc, 1))
+-	perror_with_name ("Can't bind address");
++  /* Allow rapid reuse of this port. */
++  tmp = 1;
++  setsockopt (tmp_desc, SOL_SOCKET, SO_REUSEADDR, (char *) &tmp,
++	      sizeof (tmp));
++
++  switch (p->ai_family)
++    {
++    case AF_INET:
++      ((struct sockaddr_in *) p->ai_addr)->sin_addr.s_addr = INADDR_ANY;
++      break;
++    case AF_INET6:
++      ((struct sockaddr_in6 *) p->ai_addr)->sin6_addr = in6addr_any;
++      break;
++    default:
++      fprintf (stderr, "Invalid 'ai_family' %d\n", p->ai_family);
++      exit (1);
++    }
++
++  if (bind (tmp_desc, p->ai_addr, p->ai_addrlen) != 0)
++    perror_with_name ("Can't bind address");
++
++  if (p->ai_socktype == SOCK_DGRAM)
++    remote_desc = tmp_desc;
++  else
++    {
++      struct sockaddr_storage sockaddr;
++      socklen_t sockaddrsize = sizeof (sockaddr);
++      char orig_host[GDB_NI_MAX_ADDR], orig_port[GDB_NI_MAX_PORT];
++
++      if (listen (tmp_desc, 1) != 0)
++	perror_with_name ("Can't listen on socket");
++
++      remote_desc = accept (tmp_desc, (struct sockaddr *) &sockaddr,
++			    &sockaddrsize);
+ 
+-      tmp = sizeof (sockaddr);
+-      remote_desc = accept (tmp_desc, (struct sockaddr *) &sockaddr, &tmp);
+       if (remote_desc == -1)
+ 	perror_with_name ("Accept failed");
+ 
+@@ -206,6 +261,16 @@ remote_open (char *name)
+       setsockopt (remote_desc, IPPROTO_TCP, TCP_NODELAY,
+ 		  (char *) &tmp, sizeof (tmp));
+ 
++      if (getnameinfo ((struct sockaddr *) &sockaddr, sockaddrsize,
++		       orig_host, sizeof (orig_host),
++		       orig_port, sizeof (orig_port),
++		       NI_NUMERICHOST | NI_NUMERICSERV) == 0)
++	{
++	  fprintf (stderr, "Remote debugging from host %s, port %s\n",
++		   orig_host, orig_port);
++	  fflush (stderr);
++	}
++
+ #ifndef USE_WIN32API
+       close (tmp_desc);		/* No longer need this */
+ 
+diff --git a/gdb/gdbserver/remote-utils.c b/gdb/gdbserver/remote-utils.c
+--- a/gdb/gdbserver/remote-utils.c
++++ b/gdb/gdbserver/remote-utils.c
+@@ -26,6 +26,8 @@
+ #include "dll.h"
+ #include "rsp-low.h"
+ #include "gdbthread.h"
++#include "netstuff.h"
++#include "filestuff.h"
+ #include <ctype.h>
+ #if HAVE_SYS_IOCTL_H
+ #include <sys/ioctl.h>
+@@ -63,6 +65,7 @@
+ 
+ #if USE_WIN32API
+ #include <winsock2.h>
++#include <wspiapi.h>
+ #endif
+ 
+ #if __QNX__
+@@ -151,19 +154,18 @@ enable_async_notification (int fd)
+ static int
+ handle_accept_event (int err, gdb_client_data client_data)
+ {
+-  struct sockaddr_in sockaddr;
+-  socklen_t tmp;
++  struct sockaddr_storage sockaddr;
++  socklen_t len = sizeof (sockaddr);
+ 
+   if (debug_threads)
+     debug_printf ("handling possible accept event\n");
+ 
+-  tmp = sizeof (sockaddr);
+-  remote_desc = accept (listen_desc, (struct sockaddr *) &sockaddr, &tmp);
++  remote_desc = accept (listen_desc, (struct sockaddr *) &sockaddr, &len);
+   if (remote_desc == -1)
+     perror_with_name ("Accept failed");
+ 
+   /* Enable TCP keep alive process. */
+-  tmp = 1;
++  socklen_t tmp = 1;
+   setsockopt (remote_desc, SOL_SOCKET, SO_KEEPALIVE,
+ 	      (char *) &tmp, sizeof (tmp));
+ 
+@@ -192,8 +194,19 @@ handle_accept_event (int err, gdb_client_data client_data)
+   delete_file_handler (listen_desc);
+ 
+   /* Convert IP address to string.  */
+-  fprintf (stderr, "Remote debugging from host %s\n",
+-	   inet_ntoa (sockaddr.sin_addr));
++  char orig_host[GDB_NI_MAX_ADDR], orig_port[GDB_NI_MAX_PORT];
++
++  int r = getnameinfo ((struct sockaddr *) &sockaddr, len,
++		       orig_host, sizeof (orig_host),
++		       orig_port, sizeof (orig_port),
++		       NI_NUMERICHOST | NI_NUMERICSERV);
++
++  if (r != 0)
++    fprintf (stderr, _("Could not obtain remote address: %s\n"),
++	     gai_strerror (r));
++  else
++    fprintf (stderr, _("Remote debugging from host %s, port %s\n"),
++	     orig_host, orig_port);
+ 
+   enable_async_notification (remote_desc);
+ 
+@@ -222,10 +235,7 @@ remote_prepare (const char *name)
+ #ifdef USE_WIN32API
+   static int winsock_initialized;
+ #endif
+-  int port;
+-  struct sockaddr_in sockaddr;
+   socklen_t tmp;
+-  char *port_end;
+ 
+   remote_is_stdio = 0;
+   if (strcmp (name, STDIO_CONNECTION_NAME) == 0)
+@@ -238,17 +248,25 @@ remote_prepare (const char *name)
+       return;
+     }
+ 
+-  port_str = strchr (name, ':');
+-  if (port_str == NULL)
++  struct addrinfo hint;
++  struct addrinfo *ainfo;
++
++  memset (&hint, 0, sizeof (hint));
++  /* Assume no prefix will be passed, therefore we should use
++     AF_UNSPEC.  */
++  hint.ai_family = AF_UNSPEC;
++  hint.ai_socktype = SOCK_STREAM;
++  hint.ai_protocol = IPPROTO_TCP;
++
++  parsed_connection_spec parsed
++    = parse_connection_spec_without_prefix (name, &hint);
++
++  if (parsed.port_str.empty ())
+     {
+       cs.transport_is_reliable = 0;
+       return;
+     }
+ 
+-  port = strtoul (port_str + 1, &port_end, 10);
+-  if (port_str[1] == '\0' || *port_end != '\0')
+-    error ("Bad port argument: %s", name);
+-
+ #ifdef USE_WIN32API
+   if (!winsock_initialized)
+     {
+@@ -259,8 +277,26 @@ remote_prepare (const char *name)
+     }
+ #endif
+ 
+-  listen_desc = socket (PF_INET, SOCK_STREAM, IPPROTO_TCP);
+-  if (listen_desc == -1)
++  int r = getaddrinfo (parsed.host_str.c_str (), parsed.port_str.c_str (),
++		       &hint, &ainfo);
++
++  if (r != 0)
++    error (_("%s: cannot resolve name: %s"), name, gai_strerror (r));
++
++  scoped_free_addrinfo freeaddrinfo (ainfo);
++
++  struct addrinfo *iter;
++
++  for (iter = ainfo; iter != NULL; iter = iter->ai_next)
++    {
++      listen_desc = gdb_socket_cloexec (iter->ai_family, iter->ai_socktype,
++					iter->ai_protocol);
++
++      if (listen_desc >= 0)
++	break;
++    }
++
++  if (iter == NULL)
+     perror_with_name ("Can't open socket");
+ 
+   /* Allow rapid reuse of this port. */
+@@ -268,14 +304,25 @@ remote_prepare (const char *name)
+   setsockopt (listen_desc, SOL_SOCKET, SO_REUSEADDR, (char *) &tmp,
+ 	      sizeof (tmp));
+ 
+-  sockaddr.sin_family = PF_INET;
+-  sockaddr.sin_port = htons (port);
+-  sockaddr.sin_addr.s_addr = INADDR_ANY;
++  switch (iter->ai_family)
++    {
++    case AF_INET:
++      ((struct sockaddr_in *) iter->ai_addr)->sin_addr.s_addr = INADDR_ANY;
++      break;
++    case AF_INET6:
++      ((struct sockaddr_in6 *) iter->ai_addr)->sin6_addr = in6addr_any;
++      break;
++    default:
++      internal_error (__FILE__, __LINE__,
++		      _("Invalid 'ai_family' %d\n"), iter->ai_family);
++    }
+ 
+-  if (bind (listen_desc, (struct sockaddr *) &sockaddr, sizeof (sockaddr))
+-      || listen (listen_desc, 1))
++  if (bind (listen_desc, iter->ai_addr, iter->ai_addrlen) != 0)
+     perror_with_name ("Can't bind address");
+ 
++  if (listen (listen_desc, 1) != 0)
++    perror_with_name ("Can't listen on socket");
++
+   cs.transport_is_reliable = 1;
+ }
+ 
+@@ -350,18 +397,24 @@ remote_open (const char *name)
+ #endif /* USE_WIN32API */
+   else
+     {
+-      int port;
+-      socklen_t len;
+-      struct sockaddr_in sockaddr;
+-
+-      len = sizeof (sockaddr);
+-      if (getsockname (listen_desc,
+-		       (struct sockaddr *) &sockaddr, &len) < 0
+-	  || len < sizeof (sockaddr))
++      char listen_port[GDB_NI_MAX_PORT];
++      struct sockaddr_storage sockaddr;
++      socklen_t len = sizeof (sockaddr);
++
++      if (getsockname (listen_desc, (struct sockaddr *) &sockaddr, &len) < 0)
+ 	perror_with_name ("Can't determine port");
+-      port = ntohs (sockaddr.sin_port);
+ 
+-      fprintf (stderr, "Listening on port %d\n", port);
++      int r = getnameinfo ((struct sockaddr *) &sockaddr, len,
++			   NULL, 0,
++			   listen_port, sizeof (listen_port),
++			   NI_NUMERICSERV);
++
++      if (r != 0)
++	fprintf (stderr, _("Can't obtain port where we are listening: %s"),
++		 gai_strerror (r));
++      else
++	fprintf (stderr, _("Listening on port %s\n"), listen_port);
++
+       fflush (stderr);
+ 
+       /* Register the event loop handler.  */
+diff --git a/gdb/ser-tcp.c b/gdb/ser-tcp.c
+--- a/gdb/ser-tcp.c
++++ b/gdb/ser-tcp.c
+@@ -25,6 +25,7 @@
+ #include "cli/cli-decode.h"
+ #include "cli/cli-setshow.h"
+ #include "filestuff.h"
++#include "netstuff.h"
+ 
+ #include <sys/types.h>
+ 
+@@ -39,6 +40,7 @@
+ 
+ #ifdef USE_WIN32API
+ #include <winsock2.h>
++#include <wspiapi.h>
+ #ifndef ETIMEDOUT
+ #define ETIMEDOUT WSAETIMEDOUT
+ #endif
+@@ -81,12 +83,13 @@ static unsigned int tcp_retry_limit = 15;
+ 
+ #define POLL_INTERVAL 5
+ 
+-/* Helper function to wait a while.  If SCB is non-null, wait on its
+-   file descriptor.  Otherwise just wait on a timeout, updating *POLLS.
+-   Returns -1 on timeout or interrupt, otherwise the value of select.  */
++/* Helper function to wait a while.  If SOCK is not -1, wait on its
++   file descriptor.  Otherwise just wait on a timeout, updating
++   *POLLS.  Returns -1 on timeout or interrupt, otherwise the value of
++   select.  */
+ 
+ static int
+-wait_for_connect (struct serial *scb, unsigned int *polls)
++wait_for_connect (int sock, unsigned int *polls)
+ {
+   struct timeval t;
+   int n;
+@@ -120,24 +123,24 @@ wait_for_connect (struct serial *scb, unsigned int *polls)
+       t.tv_usec = 0;
+     }
+ 
+-  if (scb)
++  if (sock >= 0)
+     {
+       fd_set rset, wset, eset;
+ 
+       FD_ZERO (&rset);
+-      FD_SET (scb->fd, &rset);
++      FD_SET (sock, &rset);
+       wset = rset;
+       eset = rset;
+-	  
++
+       /* POSIX systems return connection success or failure by signalling
+ 	 wset.  Windows systems return success in wset and failure in
+ 	 eset.
+-     
++
+ 	 We must call select here, rather than gdb_select, because
+ 	 the serial structure has not yet been initialized - the
+ 	 MinGW select wrapper will not know that this FD refers
+ 	 to a socket.  */
+-      n = select (scb->fd + 1, &rset, &wset, &eset, &t);
++      n = select (sock + 1, &rset, &wset, &eset, &t);
+     }
+   else
+     /* Use gdb_select here, since we have no file descriptors, and on
+@@ -153,80 +156,28 @@ wait_for_connect (struct serial *scb, unsigned int *polls)
+   return n;
+ }
+ 
+-/* Open a tcp socket.  */
++/* Try to connect to the host represented by AINFO.  If the connection
++   succeeds, return its socket.  Otherwise, return -1 and set ERRNO
++   accordingly.  POLLS is used when 'connect' returns EINPROGRESS, and
++   we need to invoke 'wait_for_connect' to obtain the status.  */
+ 
+-int
+-net_open (struct serial *scb, const char *name)
++static int
++try_connect (const struct addrinfo *ainfo, unsigned int *polls)
+ {
+-  char hostname[100];
+-  const char *port_str;
+-  int n, port, tmp;
+-  int use_udp;
+-  struct hostent *hostent;
+-  struct sockaddr_in sockaddr;
+-#ifdef USE_WIN32API
+-  u_long ioarg;
+-#else
+-  int ioarg;
+-#endif
+-  unsigned int polls = 0;
+-
+-  use_udp = 0;
+-  if (startswith (name, "udp:"))
+-    {
+-      use_udp = 1;
+-      name = name + 4;
+-    }
+-  else if (startswith (name, "tcp:"))
+-    name = name + 4;
+-
+-  port_str = strchr (name, ':');
+-
+-  if (!port_str)
+-    error (_("net_open: No colon in host name!"));  /* Shouldn't ever
+-						       happen.  */
+-
+-  tmp = std::min (port_str - name, (ptrdiff_t) sizeof hostname - 1);
+-  strncpy (hostname, name, tmp);	/* Don't want colon.  */
+-  hostname[tmp] = '\000';	/* Tie off host name.  */
+-  port = atoi (port_str + 1);
+-
+-  /* Default hostname is localhost.  */
+-  if (!hostname[0])
+-    strcpy (hostname, "localhost");
+-
+-  hostent = gethostbyname (hostname);
+-  if (!hostent)
+-    {
+-      fprintf_unfiltered (gdb_stderr, "%s: unknown host\n", hostname);
+-      errno = ENOENT;
+-      return -1;
+-    }
++  int sock = gdb_socket_cloexec (ainfo->ai_family, ainfo->ai_socktype,
++				 ainfo->ai_protocol);
+ 
+-  sockaddr.sin_family = PF_INET;
+-  sockaddr.sin_port = htons (port);
+-  memcpy (&sockaddr.sin_addr.s_addr, hostent->h_addr,
+-	  sizeof (struct in_addr));
+-
+- retry:
+-
+-  if (use_udp)
+-    scb->fd = gdb_socket_cloexec (PF_INET, SOCK_DGRAM, 0);
+-  else
+-    scb->fd = gdb_socket_cloexec (PF_INET, SOCK_STREAM, 0);
+-
+-  if (scb->fd == -1)
++  if (sock < 0)
+     return -1;
+-  
++
+   /* Set socket nonblocking.  */
+-  ioarg = 1;
+-  ioctl (scb->fd, FIONBIO, &ioarg);
++  int ioarg = 1;
++
++  ioctl (sock, FIONBIO, &ioarg);
+ 
+   /* Use Non-blocking connect.  connect() will return 0 if connected
+      already.  */
+-  n = connect (scb->fd, (struct sockaddr *) &sockaddr, sizeof (sockaddr));
+-
+-  if (n < 0)
++  if (connect (sock, ainfo->ai_addr, ainfo->ai_addrlen) < 0)
+     {
+ #ifdef USE_WIN32API
+       int err = WSAGetLastError();
+@@ -234,21 +185,26 @@ net_open (struct serial *scb, const char *name)
+       int err = errno;
+ #endif
+ 
+-      /* Maybe we're waiting for the remote target to become ready to
+-	 accept connections.  */
+-      if (tcp_auto_retry
++      /* If we've got a "connection refused" error, just return
++	 -1.  The caller will know what to do.  */
++      if (
+ #ifdef USE_WIN32API
+-	  && err == WSAECONNREFUSED
++	  err == WSAECONNREFUSED
+ #else
+-	  && err == ECONNREFUSED
++	  err == ECONNREFUSED
+ #endif
+-	  && wait_for_connect (NULL, &polls) >= 0)
++	  )
+ 	{
+-	  close (scb->fd);
+-	  goto retry;
++	  close (sock);
++	  errno = err;
++	  return -1;
+ 	}
+ 
+       if (
++	  /* Any other error (except EINPROGRESS) will be "swallowed"
++	     here.  We return without specifying a return value, and
++	     set errno if the caller wants to inspect what
++	     happened.  */
+ #ifdef USE_WIN32API
+ 	  /* Under Windows, calling "connect" with a non-blocking socket
+ 	     results in WSAEWOULDBLOCK, not WSAEINPROGRESS.  */
+@@ -258,66 +214,166 @@ net_open (struct serial *scb, const char *name)
+ #endif
+ 	  )
+ 	{
++	  close (sock);
+ 	  errno = err;
+-	  net_close (scb);
+ 	  return -1;
+ 	}
+ 
+       /* Looks like we need to wait for the connect.  */
+-      do 
+-	{
+-	  n = wait_for_connect (scb, &polls);
+-	} 
++      int n;
++
++      do
++	n = wait_for_connect (sock, polls);
+       while (n == 0);
++
+       if (n < 0)
+ 	{
+-	  net_close (scb);
++	  int saved_errno = errno;
++
++	  /* A negative value here means that we either timed out or
++	     got interrupted by the user.  Just return.  */
++	  close (sock);
++	  errno = saved_errno;
+ 	  return -1;
+ 	}
+     }
+ 
+   /* Got something.  Is it an error?  */
+-  {
+-    int res, err;
+-    socklen_t len;
+-
+-    len = sizeof (err);
+-    /* On Windows, the fourth parameter to getsockopt is a "char *";
+-       on UNIX systems it is generally "void *".  The cast to "char *"
+-       is OK everywhere, since in C++ any data pointer type can be
+-       implicitly converted to "void *".  */
+-    res = getsockopt (scb->fd, SOL_SOCKET, SO_ERROR, (char *) &err, &len);
+-    if (res < 0 || err)
+-      {
+-	/* Maybe the target still isn't ready to accept the connection.  */
+-	if (tcp_auto_retry
++  int err;
++  socklen_t len = sizeof (err);
++
++  /* On Windows, the fourth parameter to getsockopt is a "char *";
++     on UNIX systems it is generally "void *".  The cast to "char *"
++     is OK everywhere, since in C++ any data pointer type can be
++     implicitly converted to "void *".  */
++  int ret = getsockopt (sock, SOL_SOCKET, SO_ERROR, (char *) &err, &len);
++
++  if (ret < 0)
++    {
++      int saved_errno = errno;
++
++      close (sock);
++      errno = saved_errno;
++      return -1;
++    }
++  else if (ret == 0 && err != 0)
++    {
++      close (sock);
++      errno = err;
++      return -1;
++    }
++
++  /* The connection succeeded.  Return the socket.  */
++  return sock;
++}
++
++/* Open a tcp socket.  */
++
++int
++net_open (struct serial *scb, const char *name)
++{
++  struct addrinfo hint;
++  struct addrinfo *ainfo;
++
++  memset (&hint, 0, sizeof (hint));
++  /* Assume no prefix will be passed, therefore we should use
++     AF_UNSPEC.  */
++  hint.ai_family = AF_UNSPEC;
++  hint.ai_socktype = SOCK_STREAM;
++  hint.ai_protocol = IPPROTO_TCP;
++
++  parsed_connection_spec parsed = parse_connection_spec (name, &hint);
++
++  if (parsed.port_str.empty ())
++    error (_("Missing port on hostname '%s'"), name);
++
++  int r = getaddrinfo (parsed.host_str.c_str (),
++		       parsed.port_str.c_str (),
++		       &hint, &ainfo);
++
++  if (r != 0)
++    {
++      fprintf_unfiltered (gdb_stderr, _("%s: cannot resolve name: %s\n"),
++			  name, gai_strerror (r));
++      errno = ENOENT;
++      return -1;
++    }
++
++  scoped_free_addrinfo free_ainfo (ainfo);
++
++  /* Flag to indicate whether we've got a connection refused.  It will
++     be true if any of the connections tried was refused.  */
++  bool got_connrefused;
++  /* If a connection succeeeds, SUCCESS_AINFO will point to the
++     'struct addrinfo' that succeed.  */
++  struct addrinfo *success_ainfo = NULL;
++  unsigned int polls = 0;
++
++  /* Assume the worst.  */
++  scb->fd = -1;
++
++  do
++    {
++      got_connrefused = false;
++
++      for (struct addrinfo *iter = ainfo; iter != NULL; iter = iter->ai_next)
++	{
++	  /* Iterate over the list of possible addresses to connect
++	     to.  For each, we'll try to connect and see if it
++	     succeeds.  */
++	  int sock = try_connect (iter, &polls);
++
++	  if (sock >= 0)
++	    {
++	      /* We've gotten a successful connection.  Save its
++		 'struct addrinfo', the socket, and break.  */
++	      success_ainfo = iter;
++	      scb->fd = sock;
++	      break;
++	    }
++	  else if (
+ #ifdef USE_WIN32API
+-	    && err == WSAECONNREFUSED
++	  errno == WSAECONNREFUSED
+ #else
+-	    && err == ECONNREFUSED
++	  errno == ECONNREFUSED
+ #endif
+-	    && wait_for_connect (NULL, &polls) >= 0)
+-	  {
+-	    close (scb->fd);
+-	    goto retry;
+-	  }
+-	if (err)
+-	  errno = err;
+-	net_close (scb);
+-	return -1;
+-      }
+-  } 
++		   )
++	    got_connrefused = true;
++	}
++    }
++  /* Just retry if:
++
++     - tcp_auto_retry is true, and
++     - We haven't gotten a connection yet, and
++     - Any of our connection attempts returned with ECONNREFUSED, and
++     - wait_for_connect signals that we can keep going.  */
++  while (tcp_auto_retry
++	 && success_ainfo == NULL
++	 && got_connrefused
++	 && wait_for_connect (-1, &polls) >= 0);
++
++  if (success_ainfo == NULL)
++    {
++      net_close (scb);
++      return -1;
++    }
+ 
+   /* Turn off nonblocking.  */
+-  ioarg = 0;
++#ifdef USE_WIN32API
++  u_long ioarg = 0;
++#else
++  int ioarg = 0;
++#endif
++
+   ioctl (scb->fd, FIONBIO, &ioarg);
+ 
+-  if (use_udp == 0)
++  if (success_ainfo->ai_socktype == IPPROTO_TCP)
+     {
+       /* Disable Nagle algorithm.  Needed in some cases.  */
+-      tmp = 1;
++      int tmp = 1;
++
+       setsockopt (scb->fd, IPPROTO_TCP, TCP_NODELAY,
+-		  (char *)&tmp, sizeof (tmp));
++		  (char *) &tmp, sizeof (tmp));
+     }
+ 
+ #ifdef SIGPIPE
+diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
+--- a/gdb/testsuite/ChangeLog
++++ b/gdb/testsuite/ChangeLog
+@@ -1,3 +1,23 @@
++2018-07-11  Sergio Durigan Junior  <sergiodj@redhat.com>
++	    Jan Kratochvil  <jan.kratochvil@redhat.com>
++	    Paul Fertser  <fercerpav@gmail.com>
++	    Tsutomu Seki  <sekiriki@gmail.com>
++
++	* README (Testsuite Parameters): Mention new 'GDB_TEST_SOCKETHOST'
++	parameter.
++	* boards/native-extended-gdbserver.exp: Do not set 'sockethost'
++	by default.
++	* boards/native-gdbserver.exp: Likewise.
++	* gdb.server/run-without-local-binary.exp: Improve regexp used
++	for detecting when a remote debugging connection succeeds.
++	* gdb.server/server-connect.exp: New file.
++	* lib/gdbserver-support.exp (gdbserver_default_get_comm_port):
++	Do not prefix the port number with ":".
++	(gdbserver_start): New global GDB_TEST_SOCKETHOST.  Implement
++	support for detecting and using it.  Add '$debughost_gdbserver'
++	to the list of arguments used to start gdbserver.  Handle case
++	when gdbserver cannot resolve a network name.
++
+ 2018-08-31  Tom Tromey  <tom@tromey.com>
+ 
+ 	* gdb.rust/simple.rs: Rename second variable "v".
+diff --git a/gdb/testsuite/README b/gdb/testsuite/README
+--- a/gdb/testsuite/README
++++ b/gdb/testsuite/README
+@@ -259,6 +259,20 @@ This make (not runtest) variable is used to specify whether the
+ testsuite preloads the read1.so library into expect.  Any non-empty
+ value means true.  See "Race detection" below.
+ 
++GDB_TEST_SOCKETHOST
++
++This variable can provide the hostname/address that should be used
++when performing GDBserver-related tests.  This is useful in some
++situations, e.g., when you want to test the IPv6 connectivity of GDB
++and GDBserver, or when using a different hostname/address is needed.
++For example, to make GDB and GDBserver use IPv6-only connections, you
++can do:
++
++	make check TESTS="gdb.server/*.exp" RUNTESTFLAGS='GDB_TEST_SOCKETHOST=tcp6:[::1]'
++
++Note that only a hostname/address can be provided, without a port
++number.
++
+ Race detection
+ **************
+ 
+diff --git a/gdb/testsuite/boards/native-extended-gdbserver.exp b/gdb/testsuite/boards/native-extended-gdbserver.exp
+--- a/gdb/testsuite/boards/native-extended-gdbserver.exp
++++ b/gdb/testsuite/boards/native-extended-gdbserver.exp
+@@ -24,8 +24,6 @@ load_generic_config "extended-gdbserver"
+ load_board_description "gdbserver-base"
+ load_board_description "local-board"
+ 
+-set_board_info sockethost "localhost:"
+-
+ # We will be using the extended GDB remote protocol.
+ set_board_info gdb_protocol "extended-remote"
+ 
+diff --git a/gdb/testsuite/boards/native-gdbserver.exp b/gdb/testsuite/boards/native-gdbserver.exp
+--- a/gdb/testsuite/boards/native-gdbserver.exp
++++ b/gdb/testsuite/boards/native-gdbserver.exp
+@@ -30,7 +30,6 @@ set_board_info gdb,do_reload_on_run 1
+ # There's no support for argument-passing (yet).
+ set_board_info noargs 1
+ 
+-set_board_info sockethost "localhost:"
+ set_board_info use_gdb_stub 1
+ set_board_info exit_is_reliable 1
+ 
+diff --git a/gdb/testsuite/gdb.server/run-without-local-binary.exp b/gdb/testsuite/gdb.server/run-without-local-binary.exp
+--- a/gdb/testsuite/gdb.server/run-without-local-binary.exp
++++ b/gdb/testsuite/gdb.server/run-without-local-binary.exp
+@@ -53,7 +53,7 @@ save_vars { GDBFLAGS } {
+     set use_gdb_stub 0
+ 
+     gdb_test "target ${gdbserver_protocol} ${gdbserver_gdbport}" \
+-	"Remote debugging using $gdbserver_gdbport" \
++	"Remote debugging using [string_to_regexp $gdbserver_gdbport]" \
+ 	"connect to gdbserver"
+ 
+     gdb_test "run" \
+diff --git a/gdb/testsuite/gdb.server/server-connect.exp b/gdb/testsuite/gdb.server/server-connect.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.server/server-connect.exp
+@@ -0,0 +1,111 @@
++# This testcase is part of GDB, the GNU debugger.
++#
++# Copyright 2018 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++# Test multiple types of connection (IPv4, IPv6, TCP, UDP) and make
++# sure both gdbserver and GDB work.
++
++load_lib gdbserver-support.exp
++
++standard_testfile normal.c
++
++if {[skip_gdbserver_tests]} {
++    return 0
++}
++
++# We want to have control over where we start gdbserver.
++if { [is_remote target] } {
++    return 0
++}
++
++if { [prepare_for_testing "failed to prepare" $testfile $srcfile debug] } {
++    return -1
++}
++
++# Make sure we're disconnected, in case we're testing with an
++# extended-remote board, therefore already connected.
++gdb_test "disconnect" ".*"
++
++set target_exec [gdbserver_download_current_prog]
++
++# An array containing the test instructions for each scenario.  The
++# description of each field is as follows:
++#
++# - The connection specification to be used when starting
++#   gdbserver/GDB.  This string will be used to set the
++#   GDB_TEST_SOCKETHOST when calling gdbserver_start.
++#
++# - A flag indicating whether gdbserver should fail when we attempt to
++#   start it.  Useful when testing erroneous connection specs such as
++#   "tcp8:".
++#
++# - The prefix that should be prepended to the test messages.
++set test_params \
++    { \
++	  { "tcp4:127.0.0.1" 0 "tcp4" } \
++	  { "tcp6:::1"       0 "tcp6" } \
++	  { "tcp6:[::1]"     0 "tcp6-with-brackets" } \
++	  { "tcp:localhost"  0 "tcp" } \
++	  { "udp4:127.0.0.1" 0 "udp4" } \
++	  { "udp6:::1"       0 "udp6" } \
++	  { "udp6:[::1]"     0 "udp6-with-brackets" } \
++	  { "tcp8:123"       1 "tcp8" } \
++	  { "udp123:::"      1 "udp123" } \
++	  { "garbage:1234"   1 "garbage:1234" } \
++    }
++
++# The best way to test different types of connections is to set the
++# GDB_TEST_SOCKETHOST variable accordingly.
++save_vars { GDB_TEST_SOCKETHOST } {
++    foreach line $test_params {
++	set sockhost [lindex $line 0]
++	set gdbserver_should_fail [lindex $line 1]
++	set prefix [lindex $line 2]
++
++	with_test_prefix $prefix {
++	    set GDB_TEST_SOCKETHOST $sockhost
++	    set test "start gdbserver"
++
++	    # Try to start gdbserver.
++	    set catchres [catch {set res [gdbserver_start "" $target_exec]} errmsg]
++
++	    if { $catchres != 0 } {
++		if { $gdbserver_should_fail } {
++		    pass "$test: gdbserver failed as expected"
++		} else {
++		    fail "$test: $errmsg"
++		}
++		continue
++	    } else {
++		if { $gdbserver_should_fail } {
++		    fail "$test: gdbserver should fail but did not"
++		} else {
++		    pass "$test"
++		}
++	    }
++
++	    set gdbserver_protocol [lindex $res 0]
++	    set gdbserver_gdbport [lindex $res 1]
++	    set test "connect to gdbserver using $sockhost"
++
++	    if { [gdb_target_cmd $gdbserver_protocol $gdbserver_gdbport] == 0 } {
++		pass $test
++	    } else {
++		fail $test
++	    }
++	}
++    }
++}
+diff --git a/gdb/testsuite/lib/gdbserver-support.exp b/gdb/testsuite/lib/gdbserver-support.exp
+--- a/gdb/testsuite/lib/gdbserver-support.exp
++++ b/gdb/testsuite/lib/gdbserver-support.exp
+@@ -211,7 +211,7 @@ proc gdbserver_default_get_remote_address { host port } {
+ # Default routine to compute the "comm" argument for gdbserver.
+ 
+ proc gdbserver_default_get_comm_port { port } {
+-    return ":$port"
++    return "$port"
+ }
+ 
+ # Start a gdbserver process with initial OPTIONS and trailing ARGUMENTS.
+@@ -221,6 +221,7 @@ proc gdbserver_default_get_comm_port { port } {
+ 
+ proc gdbserver_start { options arguments } {
+     global portnum
++    global GDB_TEST_SOCKETHOST
+ 
+     # Port id -- either specified in baseboard file, or managed here.
+     if [target_info exists gdb,socketport] {
+@@ -231,10 +232,22 @@ proc gdbserver_start { options arguments } {
+     }
+ 
+     # Extract the local and remote host ids from the target board struct.
+-    if [target_info exists sockethost] {
++    if { [info exists GDB_TEST_SOCKETHOST] } {
++	# The user is not supposed to provide a port number, just a
++	# hostname/address, therefore we add the trailing ":" here.
++	set debughost "${GDB_TEST_SOCKETHOST}:"
++	# Escape open and close square brackets.
++	set debughost_tmp [string map { [ \\[ ] \\] } $debughost]
++	# We need a "gdbserver" version of the debughost, which will
++	# have the possible connection prefix stripped.  This is
++	# because gdbserver currently doesn't recognize the prefixes.
++	regsub -all "^\(tcp:|udp:|tcp4:|udp4:|tcp6:|udp6:\)" $debughost_tmp "" debughost_gdbserver
++    } elseif [target_info exists sockethost] {
+ 	set debughost [target_info sockethost]
++	set debughost_gdbserver $debughost
+     } else {
+ 	set debughost "localhost:"
++	set debughost_gdbserver $debughost
+     }
+ 
+     # Some boards use a different value for the port that is passed to
+@@ -277,8 +290,14 @@ proc gdbserver_start { options arguments } {
+ 	if { $options != "" } {
+ 	    append gdbserver_command " $options"
+ 	}
++	if { $debughost_gdbserver != "" } {
++	    append gdbserver_command " $debughost_gdbserver"
++	}
+ 	if { $portnum != "" } {
+-	    append gdbserver_command " [$get_comm_port $portnum]"
++	    if { $debughost_gdbserver == "" } {
++		append gdbserver_command " "
++	    }
++	    append gdbserver_command "[$get_comm_port $portnum]"
+ 	}
+ 	if { $arguments != "" } {
+ 	    append gdbserver_command " $arguments"
+@@ -307,6 +326,9 @@ proc gdbserver_start { options arguments } {
+ 		    continue
+ 		}
+ 	    }
++	    -re ".*: cannot resolve name: Name or service not known\r\n" {
++		error "gdbserver cannot resolve name."
++	    }
+ 	    timeout {
+ 		error "Timeout waiting for gdbserver response."
+ 	    }
+diff --git a/gdb/unittests/parse-connection-spec-selftests.c b/gdb/unittests/parse-connection-spec-selftests.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/unittests/parse-connection-spec-selftests.c
+@@ -0,0 +1,249 @@
++/* Self tests for parsing connection specs for GDB, the GNU debugger.
++
++   Copyright (C) 2018 Free Software Foundation, Inc.
++
++   This file is part of GDB.
++
++   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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++#include "defs.h"
++#include "selftest.h"
++#include "common/netstuff.h"
++#include "diagnostics.h"
++#ifdef USE_WIN32API
++#include <winsock2.h>
++#include <wspiapi.h>
++#else
++#include <netinet/in.h>
++#include <arpa/inet.h>
++#include <netdb.h>
++#include <sys/socket.h>
++#include <netinet/tcp.h>
++#endif
++
++namespace selftests {
++namespace parse_connection_spec_tests {
++
++/* Auxiliary struct that holds info about a specific test for a
++   connection spec.  */
++
++struct parse_conn_test
++{
++  /* The connection spec.  */
++  const char *connspec;
++
++  /* Expected result from 'parse_connection_spec'.  */
++  parsed_connection_spec expected_result;
++
++  /* True if this test should fail, false otherwise.  If true, only
++     the CONNSPEC field should be considered as valid.  */
++  bool should_fail;
++
++  /* The expected AI_FAMILY to be found on the 'struct addrinfo'
++     HINT.  */
++  int exp_ai_family;
++
++  /* The expected AI_SOCKTYPE to be found on the 'struct addrinfo'
++     HINT.  */
++  int exp_ai_socktype;
++
++  /* The expected AI_PROTOCOL to be found on the 'struct addrinfo'
++     HINT.  */
++  int exp_ai_protocol;
++};
++
++/* Some defines to help us fill a 'struct parse_conn_test'.  */
++
++/* Initialize a full entry.  */
++#define INIT_ENTRY(ADDR, EXP_HOST, EXP_PORT, SHOULD_FAIL, EXP_AI_FAMILY, \
++		   EXP_AI_SOCKTYPE, EXP_AI_PROTOCOL)			\
++  { ADDR, { EXP_HOST, EXP_PORT }, SHOULD_FAIL, EXP_AI_FAMILY, \
++    EXP_AI_SOCKTYPE, EXP_AI_PROTOCOL }
++
++/* Initialize an unprefixed entry.  In this case, we don't expect
++   anything on the 'struct addrinfo' HINT.  */
++#define INIT_UNPREFIXED_ENTRY(ADDR, EXP_HOST, EXP_PORT) \
++  INIT_ENTRY (ADDR, EXP_HOST, EXP_PORT, false, 0, 0, 0)
++
++/* Initialized an unprefixed IPv6 entry.  In this case, we don't
++   expect anything on the 'struct addrinfo' HINT.  */
++#define INIT_UNPREFIXED_IPV6_ENTRY(ADDR, EXP_HOST, EXP_PORT) \
++  INIT_ENTRY (ADDR, EXP_HOST, EXP_PORT, false, AF_INET6, 0, 0)
++
++/* Initialize a prefixed entry.  */
++#define INIT_PREFIXED_ENTRY(ADDR, EXP_HOST, EXP_PORT, EXP_AI_FAMILY, \
++			    EXP_AI_SOCKTYPE, EXP_AI_PROTOCOL) \
++  INIT_ENTRY (ADDR, EXP_HOST, EXP_PORT, false, EXP_AI_FAMILY, \
++	      EXP_AI_SOCKTYPE, EXP_AI_PROTOCOL)
++
++/* Initialize an entry prefixed with "tcp4:".  */
++#define INIT_PREFIXED_IPV4_TCP(ADDR, EXP_HOST, EXP_PORT) \
++  INIT_PREFIXED_ENTRY (ADDR, EXP_HOST, EXP_PORT, AF_INET, SOCK_STREAM, \
++		       IPPROTO_TCP)
++
++/* Initialize an entry prefixed with "tcp6:".  */
++#define INIT_PREFIXED_IPV6_TCP(ADDR, EXP_HOST, EXP_PORT) \
++  INIT_PREFIXED_ENTRY (ADDR, EXP_HOST, EXP_PORT, AF_INET6, SOCK_STREAM, \
++		       IPPROTO_TCP)
++
++/* Initialize an entry prefixed with "udp4:".  */
++#define INIT_PREFIXED_IPV4_UDP(ADDR, EXP_HOST, EXP_PORT) \
++  INIT_PREFIXED_ENTRY (ADDR, EXP_HOST, EXP_PORT, AF_INET, SOCK_DGRAM, \
++		       IPPROTO_UDP)
++
++/* Initialize an entry prefixed with "udp6:".  */
++#define INIT_PREFIXED_IPV6_UDP(ADDR, EXP_HOST, EXP_PORT) \
++  INIT_PREFIXED_ENTRY (ADDR, EXP_HOST, EXP_PORT, AF_INET6, SOCK_DGRAM, \
++		       IPPROTO_UDP)
++
++/* Initialize a bogus entry, i.e., a connection spec that should
++   fail.  */
++#define INIT_BOGUS_ENTRY(ADDR) \
++  INIT_ENTRY (ADDR, "", "", true, 0, 0, 0)
++
++/* The variable which holds all of our tests.  */
++
++static const parse_conn_test conn_test[] =
++  {
++    /* Unprefixed addresses.  */
++
++    /* IPv4, host and port present.  */
++    INIT_UNPREFIXED_ENTRY ("127.0.0.1:1234", "127.0.0.1", "1234"),
++    /* IPv4, only host.  */
++    INIT_UNPREFIXED_ENTRY ("127.0.0.1", "127.0.0.1", ""),
++    /* IPv4, missing port.  */
++    INIT_UNPREFIXED_ENTRY ("127.0.0.1:", "127.0.0.1", ""),
++
++    /* IPv6, host and port present, no brackets.  */
++    INIT_UNPREFIXED_ENTRY ("::1:1234", "::1", "1234"),
++    /* IPv6, missing port, no brackets.  */
++    INIT_UNPREFIXED_ENTRY ("::1:", "::1", ""),
++    /* IPv6, host and port present, with brackets.  */
++    INIT_UNPREFIXED_IPV6_ENTRY ("[::1]:1234", "::1", "1234"),
++    /* IPv6, only host, with brackets.  */
++    INIT_UNPREFIXED_IPV6_ENTRY ("[::1]", "::1", ""),
++    /* IPv6, missing port, with brackets.  */
++    INIT_UNPREFIXED_IPV6_ENTRY ("[::1]:", "::1", ""),
++
++    /* Unspecified, only port.  */
++    INIT_UNPREFIXED_ENTRY (":1234", "localhost", "1234"),
++
++    /* Prefixed addresses.  */
++
++    /* Prefixed "tcp4:" IPv4, host and port presents.  */
++    INIT_PREFIXED_IPV4_TCP ("tcp4:127.0.0.1:1234", "127.0.0.1", "1234"),
++    /* Prefixed "tcp4:" IPv4, only port.  */
++    INIT_PREFIXED_IPV4_TCP ("tcp4::1234", "localhost", "1234"),
++    /* Prefixed "tcp4:" IPv4, only host.  */
++    INIT_PREFIXED_IPV4_TCP ("tcp4:127.0.0.1", "127.0.0.1", ""),
++    /* Prefixed "tcp4:" IPv4, missing port.  */
++    INIT_PREFIXED_IPV4_TCP ("tcp4:127.0.0.1:", "127.0.0.1", ""),
++
++    /* Prefixed "udp4:" IPv4, host and port present.  */
++    INIT_PREFIXED_IPV4_UDP ("udp4:127.0.0.1:1234", "127.0.0.1", "1234"),
++    /* Prefixed "udp4:" IPv4, only port.  */
++    INIT_PREFIXED_IPV4_UDP ("udp4::1234", "localhost", "1234"),
++    /* Prefixed "udp4:" IPv4, only host.  */
++    INIT_PREFIXED_IPV4_UDP ("udp4:127.0.0.1", "127.0.0.1", ""),
++    /* Prefixed "udp4:" IPv4, missing port.  */
++    INIT_PREFIXED_IPV4_UDP ("udp4:127.0.0.1:", "127.0.0.1", ""),
++
++
++    /* Prefixed "tcp6:" IPv6, host and port present.  */
++    INIT_PREFIXED_IPV6_TCP ("tcp6:::1:1234", "::1", "1234"),
++    /* Prefixed "tcp6:" IPv6, only port.  */
++    INIT_PREFIXED_IPV6_TCP ("tcp6::1234", "localhost", "1234"),
++    /* Prefixed "tcp6:" IPv6, only host.  */
++    //INIT_PREFIXED_IPV6_TCP ("tcp6:::1", "::1", ""),
++    /* Prefixed "tcp6:" IPv6, missing port.  */
++    INIT_PREFIXED_IPV6_TCP ("tcp6:::1:", "::1", ""),
++
++    /* Prefixed "udp6:" IPv6, host and port present.  */
++    INIT_PREFIXED_IPV6_UDP ("udp6:::1:1234", "::1", "1234"),
++    /* Prefixed "udp6:" IPv6, only port.  */
++    INIT_PREFIXED_IPV6_UDP ("udp6::1234", "localhost", "1234"),
++    /* Prefixed "udp6:" IPv6, only host.  */
++    //INIT_PREFIXED_IPV6_UDP ("udp6:::1", "::1", ""),
++    /* Prefixed "udp6:" IPv6, missing port.  */
++    INIT_PREFIXED_IPV6_UDP ("udp6:::1:", "::1", ""),
++
++    /* Prefixed "tcp6:" IPv6 with brackets, host and port present.  */
++    INIT_PREFIXED_IPV6_TCP ("tcp6:[::1]:1234", "::1", "1234"),
++    /* Prefixed "tcp6:" IPv6 with brackets, only host.  */
++    INIT_PREFIXED_IPV6_TCP ("tcp6:[::1]", "::1", ""),
++    /* Prefixed "tcp6:" IPv6 with brackets, missing port.  */
++    INIT_PREFIXED_IPV6_TCP ("tcp6:[::1]:", "::1", ""),
++
++    /* Prefixed "udp6:" IPv6 with brackets, host and port present.  */
++    INIT_PREFIXED_IPV6_UDP ("udp6:[::1]:1234", "::1", "1234"),
++    /* Prefixed "udp6:" IPv6 with brackets, only host.  */
++    INIT_PREFIXED_IPV6_UDP ("udp6:[::1]", "::1", ""),
++    /* Prefixed "udp6:" IPv6 with brackets, missing port.  */
++    INIT_PREFIXED_IPV6_UDP ("udp6:[::1]:", "::1", ""),
++
++
++    /* Bogus addresses.  */
++    INIT_BOGUS_ENTRY ("tcp6:[::1]123:44"),
++    INIT_BOGUS_ENTRY ("[::1"),
++    INIT_BOGUS_ENTRY ("tcp6:::1]:"),
++  };
++
++/* Test a connection spec C.  */
++
++static void
++test_conn (const parse_conn_test &c)
++{
++  struct addrinfo hint;
++  parsed_connection_spec ret;
++
++  memset (&hint, 0, sizeof (hint));
++
++  TRY
++    {
++      ret = parse_connection_spec (c.connspec, &hint);
++    }
++  CATCH (ex, RETURN_MASK_ERROR)
++    {
++      /* If we caught an error, we should check if this connection
++	 spec was supposed to fail.  */
++      SELF_CHECK (c.should_fail);
++      return;
++    }
++  END_CATCH
++
++  SELF_CHECK (!c.should_fail);
++  SELF_CHECK (ret.host_str == c.expected_result.host_str);
++  SELF_CHECK (ret.port_str == c.expected_result.port_str);
++  SELF_CHECK (hint.ai_family == c.exp_ai_family);
++  SELF_CHECK (hint.ai_socktype == c.exp_ai_socktype);
++  SELF_CHECK (hint.ai_protocol == c.exp_ai_protocol);
++}
++
++/* Run the tests associated with parsing connection specs.  */
++
++static void
++run_tests ()
++{
++  for (const parse_conn_test &c : conn_test)
++    test_conn (c);
++}
++} /* namespace parse_connection_spec_tests */
++} /* namespace selftests */
++
++void
++_initialize_parse_connection_spec_selftests ()
++{
++  selftests::register_test ("parse_connection_spec",
++			    selftests::parse_connection_spec_tests::run_tests);
++}
diff --git a/SOURCES/gdb-rhbz881849-ipv6-2of3.patch b/SOURCES/gdb-rhbz881849-ipv6-2of3.patch
new file mode 100644
index 0000000..390be0f
--- /dev/null
+++ b/SOURCES/gdb-rhbz881849-ipv6-2of3.patch
@@ -0,0 +1,54 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Sergio Durigan Junior <sergiodj@redhat.com>
+Date: Mon, 30 Jul 2018 15:23:27 -0400
+Subject: gdb-rhbz881849-ipv6-2of3.patch
+
+Match any kind of error after "cannot resolve name" on lib/gdbserver-support.exp:gdbserver_start
+
+On commit:
+
+commit 7f1f7e23939adc7d71036a17fc6081e3af7ca585
+Author: Sergio Durigan Junior <sergiodj@redhat.com>
+Date:   Fri Jul 13 16:20:34 2018 -0400
+
+    Expect for another variant of error message when gdbserver cannot resolve hostname
+
+I extended the regular expression being used to identify whether
+gdbserver could not resolve a (host)name.  This was needed because the
+error message being printed had a different variation across some
+systems.  However, as it turns out, I've just noticed that the message
+has yet another variation:
+
+  target remote tcp8:123:2353
+  tcp8:123:2353: cannot resolve name: System error
+                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+  tcp8:123:2353: No such file or directory.
+  (gdb) FAIL: gdb.server/server-connect.exp: tcp8: connect to gdbserver using tcp8:123
+
+which is causing FAILs on some systems (namely, Fedora-i686 on
+BuildBot).
+
+So instead of trying to predict everything that can be printed, I
+decided to just match anything after the "cannot resolve name: " part.
+This patch implements that.
+
+Regression tested on the BuildBot.
+
+gdb/testsuite/ChangeLog:
+2018-07-30  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	* lib/gdbserver-support.exp (gdbserver_start): Match any kind of
+	error after "cannot resolve name" string.
+
+diff --git a/gdb/testsuite/lib/gdbserver-support.exp b/gdb/testsuite/lib/gdbserver-support.exp
+--- a/gdb/testsuite/lib/gdbserver-support.exp
++++ b/gdb/testsuite/lib/gdbserver-support.exp
+@@ -326,7 +326,7 @@ proc gdbserver_start { options arguments } {
+ 		    continue
+ 		}
+ 	    }
+-	    -re ".*: cannot resolve name: Name or service not known\r\n" {
++	    -re ".*: cannot resolve name: .*\r\n" {
+ 		error "gdbserver cannot resolve name."
+ 	    }
+ 	    timeout {
diff --git a/SOURCES/gdb-rhbz881849-ipv6-3of3.patch b/SOURCES/gdb-rhbz881849-ipv6-3of3.patch
new file mode 100644
index 0000000..32f3744
--- /dev/null
+++ b/SOURCES/gdb-rhbz881849-ipv6-3of3.patch
@@ -0,0 +1,72 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Sergio Durigan Junior <sergiodj@redhat.com>
+Date: Fri, 3 Aug 2018 18:04:38 -0400
+Subject: gdb-rhbz881849-ipv6-3of3.patch
+
+Fix thinko when deciding whether to disable TCP's Nagle algorithm
+
+This patch fixes a thinko that happened when I was implementing the
+IPv6 support on GDB/gdbserver.  On certain situations, it is necessary
+to disable TCP's Nagle algorithm (NODELAY).  For obvious reasons, this
+only applies when we are dealing with a TCP connection.
+
+While implementing the IPv6 patch, I noticed that the net_open
+function (on gdb/ser-tcp.c) kept a flag indicating whether the
+connection type was UDP or TCP.  I eliminated that flag, and started
+using the 'struct addrinfo *' related to the successful connection
+directly.  However, I made a mistake:
+
+  if (success_ainfo->ai_socktype == IPPROTO_TCP)
+                     ^^^^^^^^^^^
+    {
+      /* Disable Nagle algorithm.  Needed in some cases.  */
+      int tmp = 1;
+
+      setsockopt (scb->fd, IPPROTO_TCP, TCP_NODELAY,
+		  (char *) &tmp, sizeof (tmp));
+    }
+
+The 'ai_socktype' field specifies the socket type (SOCK_STREAM or
+SOCK_DGRAM), and not the protocol.  This test was always failing, and
+the Nagle algorithm was never being disabled.
+
+The obvious fix is to use the 'ai_protocol' field.  This is what this
+patch does.
+
+Huge "thank you" to Joel Brobecker who reported the regression (he was
+experiencing an unusual delay while debugging a bare-metal program
+running under QEMU) and helped me set up a proper reproducer for the
+bug.
+
+gdb/ChangeLog:
+2018-08-03  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	* ser-tcp.c (net_open): Fix thinko when deciding whether to
+	disable TCP's Nagle algorithm (use "ai_protocol" instead of
+	"ai_socktype").
+
+diff --git a/gdb/ChangeLog b/gdb/ChangeLog
+--- a/gdb/ChangeLog
++++ b/gdb/ChangeLog
+@@ -1,3 +1,9 @@
++2018-08-03  Sergio Durigan Junior  <sergiodj@redhat.com>
++
++	* ser-tcp.c (net_open): Fix thinko when deciding whether to
++	disable TCP's Nagle algorithm (use "ai_protocol" instead of
++	"ai_socktype").
++
+ 2018-09-05  Joel Brobecker  <brobecker@adacore.com>
+ 
+ 	* version.in: Set GDB version number to 8.2.
+diff --git a/gdb/ser-tcp.c b/gdb/ser-tcp.c
+--- a/gdb/ser-tcp.c
++++ b/gdb/ser-tcp.c
+@@ -367,7 +367,7 @@ net_open (struct serial *scb, const char *name)
+ 
+   ioctl (scb->fd, FIONBIO, &ioarg);
+ 
+-  if (success_ainfo->ai_socktype == IPPROTO_TCP)
++  if (success_ainfo->ai_protocol == IPPROTO_TCP)
+     {
+       /* Disable Nagle algorithm.  Needed in some cases.  */
+       int tmp = 1;
diff --git a/SOURCES/gdb-rhbz947564-findvar-assertion-frame-failed-testcase.patch b/SOURCES/gdb-rhbz947564-findvar-assertion-frame-failed-testcase.patch
new file mode 100644
index 0000000..0df5ee5
--- /dev/null
+++ b/SOURCES/gdb-rhbz947564-findvar-assertion-frame-failed-testcase.patch
@@ -0,0 +1,147 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-rhbz947564-findvar-assertion-frame-failed-testcase.patch
+
+;; Import regression test for `gdb/findvar.c:417: internal-error:
+;; read_var_value: Assertion `frame' failed.' (RH BZ 947564) from RHEL 6.5.
+;;=fedoratest
+
+diff --git a/gdb/testsuite/gdb.threads/tls-rhbz947564.cc b/gdb/testsuite/gdb.threads/tls-rhbz947564.cc
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.threads/tls-rhbz947564.cc
+@@ -0,0 +1,53 @@
++#include <iostream>
++#include <pthread.h>
++
++class x
++  {
++  public:
++    int n;
++
++    x() : n(0) {}
++  };
++
++class y
++  {
++  public:
++    int v;
++
++    y() : v(0) {}
++    static __thread x *xp;
++  };
++
++__thread x *y::xp;
++
++static void
++foo (y *yp)
++{
++  yp->v = 1;   /* foo_marker */
++}
++
++static void *
++bar (void *unused)
++{
++  x xinst;
++  y::xp= &xinst;
++
++  y yy;
++  foo(&yy);
++
++  return NULL;
++}
++
++int
++main(int argc, char *argv[])
++{
++  pthread_t t[2];
++
++  pthread_create (&t[0], NULL, bar, NULL);
++  pthread_create (&t[1], NULL, bar, NULL);
++
++  pthread_join (t[0], NULL);
++  pthread_join (t[1], NULL);
++
++  return 0;
++}
+diff --git a/gdb/testsuite/gdb.threads/tls-rhbz947564.exp b/gdb/testsuite/gdb.threads/tls-rhbz947564.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.threads/tls-rhbz947564.exp
+@@ -0,0 +1,75 @@
++# Copyright (C) 2013 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++set testfile tls-rhbz947564
++set srcfile ${testfile}.cc
++set binfile [standard_output_file ${testfile}]
++
++if [istarget "*-*-linux"] then {
++    set target_cflags "-D_MIT_POSIX_THREADS"
++} else {
++    set target_cflags ""
++}
++
++if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list c++ debug]] != "" } {
++    return -1
++}
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++
++gdb_load ${binfile}
++
++if { ![runto_main] } {
++    fail "Can't run to function main"
++    return 0
++}
++
++gdb_breakpoint "foo"
++gdb_continue_to_breakpoint "foo" ".* foo_marker .*"
++
++proc get_xp_val {try} {
++    global expect_out
++    global gdb_prompt
++    global hex
++
++    set xp_val ""
++    gdb_test_multiple "print *yp" "print yp value" {
++	-re { = \{v = 0, static xp = (0x[0-9a-f]+)\}.* } {
++	    pass "print $try value of *yp"
++	    set xp_val $expect_out(1,string)
++	}
++	-re "$gdb_prompt $" {
++	    fail "print $try value of *yp"
++	}
++	timeout {
++	    fail "print $try value of *yp (timeout)"
++	}
++    }
++    return $xp_val
++}
++
++set first_run [get_xp_val "first"]
++
++gdb_test "continue" "Breakpoint \[0-9\]+, foo \\\(yp=$hex\\\) at.*"
++
++set second_run [get_xp_val "second"]
++
++if { $first_run != $second_run } {
++    pass "different values for TLS variable"
++} else {
++    fail "different values for TLS variable"
++}
diff --git a/SOURCES/gdb-rhel5.9-testcase-xlf-var-inside-mod.patch b/SOURCES/gdb-rhel5.9-testcase-xlf-var-inside-mod.patch
new file mode 100644
index 0000000..b130d1f
--- /dev/null
+++ b/SOURCES/gdb-rhel5.9-testcase-xlf-var-inside-mod.patch
@@ -0,0 +1,731 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-rhel5.9-testcase-xlf-var-inside-mod.patch
+
+;; Include testcase for `Unable to see a variable inside a module (XLF)' (BZ 823789).
+;;=fedoratest
+
+diff --git a/gdb/testsuite/gdb.fortran/xlf-variable.S b/gdb/testsuite/gdb.fortran/xlf-variable.S
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.fortran/xlf-variable.S
+@@ -0,0 +1,638 @@
++/* Copyright (C) 2012 Free Software Foundation, Inc.
++
++   This file is part of GDB.
++
++   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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++/* This file has been generated from the file named `xlf-variable.f', which
++   should be present in this directory.  The command used to generate this
++   file was:
++
++     xlf -qnoopt -g9 -S xlf-variable.f -o xlf-variable.S
++
++   After issuing this command, you must hand-edit this file and remove the
++   mentions for `_xlfExit', since it is only present in XLF-specific
++   libraries.  You must also make sure to remove the file named `mod1.mod'
++   which will be created in the compilation directory.
++
++   In order to generated this file, the following XLF package was used:
++
++     xlf.14.1.0.0.linux.eval.tar.gz
++
++   These instructions may be different for different versions of the XLF
++   compiler.  */
++
++.set r0,0; .set SP,1; .set RTOC,2; .set r3,3; .set r4,4
++.set r5,5; .set r6,6; .set r7,7; .set r8,8; .set r9,9
++.set r10,10; .set r11,11; .set r12,12; .set r13,13; .set r14,14
++.set r15,15; .set r16,16; .set r17,17; .set r18,18; .set r19,19
++.set r20,20; .set r21,21; .set r22,22; .set r23,23; .set r24,24
++.set r25,25; .set r26,26; .set r27,27; .set r28,28; .set r29,29
++.set r30,30; .set r31,31
++.set fp0,0; .set fp1,1; .set fp2,2; .set fp3,3; .set fp4,4
++.set fp5,5; .set fp6,6; .set fp7,7; .set fp8,8; .set fp9,9
++.set fp10,10; .set fp11,11; .set fp12,12; .set fp13,13; .set fp14,14
++.set fp15,15; .set fp16,16; .set fp17,17; .set fp18,18; .set fp19,19
++.set fp20,20; .set fp21,21; .set fp22,22; .set fp23,23; .set fp24,24
++.set fp25,25; .set fp26,26; .set fp27,27; .set fp28,28; .set fp29,29
++.set fp30,30; .set fp31,31
++.set v0,0; .set v1,1; .set v2,2; .set v3,3; .set v4,4
++.set v5,5; .set v6,6; .set v7,7; .set v8,8; .set v9,9
++.set v10,10; .set v11,11; .set v12,12; .set v13,13; .set v14,14
++.set v15,15; .set v16,16; .set v17,17; .set v18,18; .set v19,19
++.set v20,20; .set v21,21; .set v22,22; .set v23,23; .set v24,24
++.set v25,25; .set v26,26; .set v27,27; .set v28,28; .set v29,29
++.set v30,30; .set v31,31
++.set q0,0; .set q1,1; .set q2,2; .set q3,3; .set q4,4
++.set q5,5; .set q6,6; .set q7,7; .set q8,8; .set q9,9
++.set q10,10; .set q11,11; .set q12,12; .set q13,13; .set q14,14
++.set q15,15; .set q16,16; .set q17,17; .set q18,18; .set q19,19
++.set q20,20; .set q21,21; .set q22,22; .set q23,23; .set q24,24
++.set q25,25; .set q26,26; .set q27,27; .set q28,28; .set q29,29
++.set q30,30; .set q31,31
++.set MQ,0; .set XER,1; .set FROM_RTCU,4; .set FROM_RTCL,5; .set FROM_DEC,6
++.set LR,8; .set CTR,9; .set TID,17; .set DSISR,18; .set DAR,19; .set TO_RTCU,20
++.set TO_RTCL,21; .set TO_DEC,22; .set SDR_0,24; .set SDR_1,25; .set SRR_0,26
++.set SRR_1,27
++.set BO_dCTR_NZERO_AND_NOT,0; .set BO_dCTR_NZERO_AND_NOT_1,1
++.set BO_dCTR_ZERO_AND_NOT,2; .set BO_dCTR_ZERO_AND_NOT_1,3
++.set BO_IF_NOT,4; .set BO_IF_NOT_1,5; .set BO_IF_NOT_2,6
++.set BO_IF_NOT_3,7; .set BO_dCTR_NZERO_AND,8; .set BO_dCTR_NZERO_AND_1,9
++.set BO_dCTR_ZERO_AND,10; .set BO_dCTR_ZERO_AND_1,11; .set BO_IF,12
++.set BO_IF_1,13; .set BO_IF_2,14; .set BO_IF_3,15; .set BO_dCTR_NZERO,16
++.set BO_dCTR_NZERO_1,17; .set BO_dCTR_ZERO,18; .set BO_dCTR_ZERO_1,19
++.set BO_ALWAYS,20; .set BO_ALWAYS_1,21; .set BO_ALWAYS_2,22
++.set BO_ALWAYS_3,23; .set BO_dCTR_NZERO_8,24; .set BO_dCTR_NZERO_9,25
++.set BO_dCTR_ZERO_8,26; .set BO_dCTR_ZERO_9,27; .set BO_ALWAYS_8,28
++.set BO_ALWAYS_9,29; .set BO_ALWAYS_10,30; .set BO_ALWAYS_11,31
++.set CR0_LT,0; .set CR0_GT,1; .set CR0_EQ,2; .set CR0_SO,3
++.set CR1_FX,4; .set CR1_FEX,5; .set CR1_VX,6; .set CR1_OX,7
++.set CR2_LT,8; .set CR2_GT,9; .set CR2_EQ,10; .set CR2_SO,11
++.set CR3_LT,12; .set CR3_GT,13; .set CR3_EQ,14; .set CR3_SO,15
++.set CR4_LT,16; .set CR4_GT,17; .set CR4_EQ,18; .set CR4_SO,19
++.set CR5_LT,20; .set CR5_GT,21; .set CR5_EQ,22; .set CR5_SO,23
++.set CR6_LT,24; .set CR6_GT,25; .set CR6_EQ,26; .set CR6_SO,27
++.set CR7_LT,28; .set CR7_GT,29; .set CR7_EQ,30; .set CR7_SO,31
++.set TO_LT,16; .set TO_GT,8; .set TO_EQ,4; .set TO_LLT,2; .set TO_LGT,1
++
++	.file	"xlf-variable.f"
++	.globl	__mod1_NMOD_____mod1
++	.type	__mod1_NMOD_____mod1,@function
++	.size	__mod1_NMOD_____mod1,32
++	.globl	main
++	.type	main,@function
++	.size	main,68
++	.globl	__mod1_NMOD_sub1
++	.type	__mod1_NMOD_sub1,@function
++	.size	__mod1_NMOD_sub1,136
++	.globl	_main
++	.type	_main,@function
++	.size	_main,68
++
++	.section	".text"
++	.align	7
++.LC.text:
++__mod1_NMOD_____mod1:
++	stwu       SP,-32(SP)
++	stw        r31,28(SP)
++	or         r31,SP,SP
++	b          $+0x4
++	addi       r11,r31,32
++	lwz        r31,-4(r11)
++	or         SP,r11,r11
++	bclr       BO_ALWAYS,CR0_LT
++.LC.text32:
++
++__mod1_NMOD_sub1:
++	stwu       SP,-32(SP)
++	stw        r31,28(SP)
++	stw        r30,24(SP)
++	or         r31,SP,SP
++	addis      r30,r0,.const_dr@ha
++	addi       r30,r30,.const_dr@l
++	addis      r3,r0,__N_mod1@ha
++	addi       r3,r3,__N_mod1@l
++	addi       r0,r0,1
++	stb        r0,4(r3)
++	addi       r4,r0,14
++	stb        r4,5(r3)
++	stb        r0,7(r3)
++	addis      r5,r0,__N__mod1@ha
++	addi       r5,r5,__N__mod1@l
++	stw        r5,0(r3)
++	lbz        r5,6(r3)
++	rlwinm     r5,r5,0,25,25
++	ori        r5,r5,0x0040
++	stb        r5,6(r3)
++	lwz        r5,0(r3)
++	lfs        fp0,0(r30)
++	stfs       fp0,0(r5)
++	stb        r0,4(r3)
++	stb        r4,5(r3)
++	addi       r4,r0,0
++	stb        r4,6(r3)
++	stb        r0,7(r3)
++	b          $+0x4
++	addi       r11,r31,32
++	lwz        r30,-8(r11)
++	lwz        r31,-4(r11)
++	or         SP,r11,r11
++	bclr       BO_ALWAYS,CR0_LT
++.LC.text168:
++	.long 0
++	.skip 0x54
++.LC.text256:
++
++main:
++_main:
++	mfspr      r0,LR
++	stwu       SP,-32(SP)
++	stw        r31,28(SP)
++	stw        r0,36(SP)
++	or         r31,SP,SP
++	bl         __mod1_NMOD_sub1
++	addi       r3,r0,0
++.LC.text288:
++
++	tw         TO_EQ,r14,r14
++	addi       r3,r0,0
++	b          $+0x4
++	addi       r11,r31,32
++	lwz        r31,-4(r11)
++	lwz        r0,4(r11)
++	mtspr      LR,r0
++	or         SP,r11,r11
++	bclr       BO_ALWAYS,CR0_LT
++.LC.text324:
++
++
++	.section	".rodata","a"
++	.align	2
++.LC.rodata:
++	.type    .const_dr,@object
++	.size    .const_dr,4
++.const_dr:
++	.long 0x40400000
++
++	.section	".eh_frame","wa"
++	.align	2
++.LC.eh_frame:
++	.long 0x0000000c
++	.long 0x00000000
++	.long 0x0100047c
++	.long 0x410c0100
++	.long 0x0000001c
++	.long 0x00000014
++	.long .LC.text
++	.long 0x00000020
++	.long 0x410e2041
++	.long 0x9f01410d
++	.long 0x1f410a42
++	.long 0xdf420b00
++	.long 0x00000020
++	.long 0x00000034
++	.long .LC.text32
++	.long 0x00000088
++	.long 0x410e2041
++	.long 0x9f01419e
++	.long 0x02410d1f
++	.long 0x590a42de
++	.long 0x41df420b
++	.long 0x0000000c
++	.long 0x00000000
++	.long 0x0100047c
++	.long 0x410c0100
++	.long 0x00000020
++	.long 0x00000014
++	.long .LC.text256
++	.long 0x00000044
++	.long 0x420e2041
++	.long 0x9f014111
++	.long 0x417f410d
++	.long 0x1f460a42
++	.long 0xdf440b00
++
++	.section	".data","wa"
++	.align	4
++.LC.data:
++	.globl __N_mod1
++	.type    __N_mod1,@object
++	.size    __N_mod1,8
++__N_mod1:
++	.long 0x00000000
++	.long 0x01000001
++
++	.section	".except.1","wa"
++	.align	1
++.LC.except.1:
++	.long .LC.text288
++	.byte 0x01
++	.byte 0x09
++
++	.ident  "Fri Jun 15 16:35:45 2012 .IBM XL Fortran for Linux, V14.1 (5765-J05, 5725-C75) Version 14.01.0000.0000.Fri Jun 15 16:35:45 2012 .IBM XL Fortran for Linux, V14.1 (5765-J05, 5725-C75) Version 14.01.0000.0000."
++
++	.section	".debug_aranges"
++	.align	0
++.LC.debug_aranges:
++	.long 0x0000001c
++	.byte 0x00
++	.byte 0x02
++	.long .LC.debug_info
++	.long 0x04000000
++	.byte 0x00
++	.byte 0x00
++	.long .LC.text
++	.long 0x000000a8
++	.long 0x00000000
++	.long 0x00000000
++	.long 0x0000001c
++	.byte 0x00
++	.byte 0x02
++	.long .LC.debug_info273
++	.long 0x04000000
++	.byte 0x00
++	.byte 0x00
++	.long .LC.text256
++	.long 0x00000044
++	.long 0x00000000
++	.long 0x00000000
++
++	.section	".debug_pubnames"
++	.align	0
++.LC.debug_pubnames:
++	.long 0x0000002f
++	.byte 0x00
++	.byte 0x02
++	.long .LC.debug_info
++	.long 0x00000111
++	.long 0x000000dc
++	.long 0x79000000
++	.long 0x00ec7a00
++	.long 0x000000fc
++	.long 0x5f5f6d6f
++	.long 0x64315f4e
++	.long 0x4d4f445f
++	.long 0x73756231
++	.long 0x00000000
++	.long 0x00000000
++	.byte 0x18
++	.byte 0x00
++	.byte 0x02
++	.long .LC.debug_info273
++	.long 0x00000127
++	.long 0x0000010f
++	.long 0x5f6d6169
++	.long 0x6e000000
++	.byte 0x00
++	.byte 0x00
++
++	.section	".debug_info"
++	.align	0
++.LC.debug_info:
++	.long 0x0000010d
++	.byte 0x00
++	.byte 0x02
++	.long .LC.debug_abbrev
++	.long 0x0401786c
++	.long 0x662d7661
++	.long 0x72696162
++	.long 0x6c652e66
++	.byte 0x00
++	.long .LC.debug_line
++	.long .LC.text
++	.long .LC.text168
++	.long 0x082f726f
++	.long 0x6f742f73
++	.long 0x65726769
++	.long 0x6f646a2f
++	.long 0x6764622d
++	.long 0x372e302e
++	.long 0x312d3432
++	.long 0x2e656c35
++	.long 0x2f676462
++	.long 0x2d372e30
++	.long 0x2e312f67
++	.long 0x64622f74
++	.long 0x65737473
++	.long 0x75697465
++	.long 0x2f676462
++	.long 0x2e666f72
++	.long 0x7472616e
++	.long 0x0049424d
++	.long 0x20584c20
++	.long 0x466f7274
++	.long 0x72616e20
++	.long 0x666f7220
++	.long 0x4c696e75
++	.long 0x782c2056
++	.long 0x31342e31
++	.long 0x20283537
++	.long 0x36352d4a
++	.long 0x30352c20
++	.long 0x35373235
++	.long 0x2d433735
++	.long 0x29205665
++	.long 0x7273696f
++	.long 0x6e203134
++	.long 0x2e30312e
++	.long 0x30303030
++	.long 0x2e303030
++	.long 0x30000249
++	.long 0x4e544547
++	.long 0x45520004
++	.long 0x05030005
++	.long 0x02524541
++	.long 0x4c000404
++	.long 0x04050000
++	.long 0x0000c706
++	.long 0x6d6f6431
++	.long 0x00070503
++	.long __N_mod1
++	.long 0x79000100
++	.long 0x01000000
++	.long 0xd0070503
++	.long __N__mod1
++	.long 0x7a000100
++	.long 0x01000000
++	.long 0xc7087375
++	.byte 0x62
++	.byte 0x31
++	.byte 0x00
++	.long .LC.text32
++	.long .LC.text168
++	.long 0x01180101
++	.byte 0x6f
++	.byte 0x00
++	.byte 0x00
++.LC.debug_info273:
++	.long 0x00000123
++	.byte 0x00
++	.byte 0x02
++	.long .LC.debug_abbrev97
++	.long 0x0401786c
++	.long 0x662d7661
++	.long 0x72696162
++	.long 0x6c652e66
++	.byte 0x00
++	.long .LC.debug_line98
++	.long .LC.text256
++	.long .LC.text324
++	.long 0x082f726f
++	.long 0x6f742f73
++	.long 0x65726769
++	.long 0x6f646a2f
++	.long 0x6764622d
++	.long 0x372e302e
++	.long 0x312d3432
++	.long 0x2e656c35
++	.long 0x2f676462
++	.long 0x2d372e30
++	.long 0x2e312f67
++	.long 0x64622f74
++	.long 0x65737473
++	.long 0x75697465
++	.long 0x2f676462
++	.long 0x2e666f72
++	.long 0x7472616e
++	.long 0x0049424d
++	.long 0x20584c20
++	.long 0x466f7274
++	.long 0x72616e20
++	.long 0x666f7220
++	.long 0x4c696e75
++	.long 0x782c2056
++	.long 0x31342e31
++	.long 0x20283537
++	.long 0x36352d4a
++	.long 0x30352c20
++	.long 0x35373235
++	.long 0x2d433735
++	.long 0x29205665
++	.long 0x7273696f
++	.long 0x6e203134
++	.long 0x2e30312e
++	.long 0x30303030
++	.long 0x2e303030
++	.long 0x30000249
++	.long 0x4e544547
++	.long 0x45520004
++	.long 0x05030005
++	.long 0x02524541
++	.long 0x4c000404
++	.long 0x04000000
++	.long 0xb9050000
++	.long 0x0000c706
++	.long 0x000000f4
++	.long 0x26264e26
++	.long 0x6d6f6431
++	.long 0x00080779
++	.long 0x00022300
++	.long 0x000000d4
++	.long 0x00060000
++	.long 0x010f2626
++	.long 0x4e26266d
++	.long 0x6f643100
++	.long 0x04077a00
++	.long 0x02230000
++	.long 0x0000c700
++	.long 0x085f6d61
++	.byte 0x69
++	.byte 0x6e
++	.byte 0x00
++	.long .LC.text256
++	.long .LC.text324
++	.long 0x0201016f
++	.long 0x000000b9
++	.byte 0x00
++
++	.section	".debug_abbrev"
++	.align	0
++.LC.debug_abbrev:
++	.long 0x01110103
++	.long 0x08100611
++	.long 0x01120113
++	.long 0x0b1b0825
++	.long 0x08000002
++	.long 0x24000308
++	.long 0x0b0b3e0b
++	.long 0x00000324
++	.long 0x000b0b3e
++	.long 0x0b000004
++	.long 0x15000000
++	.long 0x050f0033
++	.long 0x0b491300
++	.long 0x00061e01
++	.long 0x03080000
++	.long 0x07340002
++	.long 0x0a03083a
++	.long 0x0b3b0b3f
++	.long 0x0c491300
++	.long 0x00082e00
++	.long 0x03081101
++	.long 0x12013a0b
++	.long 0x3b0b3f0c
++	.long 0x400a0000
++	.byte 0x00
++.LC.debug_abbrev97:
++	.long 0x01110103
++	.long 0x08100611
++	.long 0x01120113
++	.long 0x0b1b0825
++	.long 0x08000002
++	.long 0x24000308
++	.long 0x0b0b3e0b
++	.long 0x00000324
++	.long 0x000b0b3e
++	.long 0x0b000004
++	.long 0x15004913
++	.long 0x0000050f
++	.long 0x00330b49
++	.long 0x13000006
++	.long 0x13010113
++	.long 0x03080b0b
++	.long 0x0000070d
++	.long 0x00030838
++	.long 0x0a491300
++	.long 0x00082e00
++	.long 0x03081101
++	.long 0x1201360b
++	.long 0x3f0c400a
++	.long 0x49130000
++	.byte 0x00
++
++	.section	".debug_line"
++	.align	0
++.LC.debug_line:
++	.long 0x0000005e
++	.long 0x00020000
++	.long 0x00220101
++	.long 0x9cdc0a00
++	.long 0x01010101
++	.long 0x00000001
++	.long 0x00786c66
++	.long 0x2d766172
++	.long 0x6961626c
++	.long 0x652e6600
++	.long 0x00000000
++	.long 0x04010005
++	.byte 0x02
++	.long .LC.text
++	.long 0x03130109
++	.long 0x000c0309
++	.long 0x01090014
++	.long 0x037b0109
++	.long 0x00180301
++	.long 0x01090038
++	.long 0x03010109
++	.long 0x000c0301
++	.long 0x01090014
++	.long 0x03010109
++	.long 0x00180001
++	.byte 0x01
++.LC.debug_line98:
++	.long 0x00000046
++	.long 0x00020000
++	.long 0x00220101
++	.long 0x9cdc0a00
++	.long 0x01010101
++	.long 0x00000001
++	.long 0x00786c66
++	.long 0x2d766172
++	.long 0x6961626c
++	.long 0x652e6600
++	.long 0x00000000
++	.long 0x04010005
++	.byte 0x02
++	.long .LC.text256
++	.long 0x031f0109
++	.long 0x00140300
++	.long 0x01090004
++	.long 0x03010109
++	.long 0x002c0001
++	.byte 0x01
++
++	.section	".debug_frame"
++	.align	0
++.LC.debug_frame:
++	.long 0x0000000c
++	.long 0xffffffff
++	.long 0x0100047c
++	.long 0x410c0100
++	.long 0x0000001c
++	.long .LC.debug_frame
++	.long .LC.text
++	.long 0x00000020
++	.long 0x410e2041
++	.long 0x9f01410d
++	.long 0x1f410a42
++	.long 0xdf420b00
++	.long 0x00000020
++	.long .LC.debug_frame
++	.long .LC.text32
++	.long 0x00000088
++	.long 0x410e2041
++	.long 0x9f01419e
++	.long 0x02410d1f
++	.long 0x590a42de
++	.long 0x41df420b
++.LC.debug_frame84:
++	.long 0x0000000c
++	.long 0xffffffff
++	.long 0x0100047c
++	.long 0x410c0100
++	.long 0x00000020
++	.long .LC.debug_frame84
++	.long .LC.text256
++	.long 0x00000044
++	.long 0x420e2041
++	.long 0x9f014111
++	.long 0x417f410d
++	.long 0x1f460a42
++	.long 0xdf440b00
++
++	.section	".debug_pubtypes"
++	.align	0
++.LC.debug_pubtypes:
++	.long 0x00000023
++	.byte 0x00
++	.byte 0x02
++	.long .LC.debug_info
++	.long 0x00000111
++	.long 0x000000b9
++	.long 0x494e5445
++	.long 0x47455200
++	.long 0x000000c7
++	.long 0x5245414c
++	.long 0x00000000
++	.long 0x00000000
++	.byte 0x3e
++	.byte 0x00
++	.byte 0x02
++	.long .LC.debug_info273
++	.long 0x00000127
++	.long 0x000000b9
++	.long 0x494e5445
++	.long 0x47455200
++	.long 0x000000c7
++	.long 0x5245414c
++	.long 0x00000000
++	.long 0xda26264e
++	.long 0x266d6f64
++	.long 0x31000000
++	.long 0x00f42626
++	.long 0x4e26266d
++	.long 0x6f643100
++	.long 0x00000000
++
++	.comm   __N__mod1,4,16
+diff --git a/gdb/testsuite/gdb.fortran/xlf-variable.exp b/gdb/testsuite/gdb.fortran/xlf-variable.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.fortran/xlf-variable.exp
+@@ -0,0 +1,37 @@
++# Copyright 2012 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++# This test can only be run on PPC64 machines.
++
++if { ![istarget powerpc64-*] || ![is_ilp32_target] } {
++    return -1
++}
++
++set testfile "xlf-variable"
++set srcfile ${testfile}.S
++
++if { [prepare_for_testing $testfile.exp $testfile $srcfile] } {
++    return -1
++}
++
++if { ![runto_main] } {
++    return -1
++}
++
++gdb_test "step" ".*y => z.*" "y => z"
++gdb_test "step" ".*y = 3\.0.*" "y = 3.0"
++gdb_test "step" ".*nullify \\(y\\).*" "nullify (y)"
++gdb_test "print z" "= 3" "z = 3"
++gdb_test "ptype z" "= REAL" "z is REAL"
+diff --git a/gdb/testsuite/gdb.fortran/xlf-variable.f b/gdb/testsuite/gdb.fortran/xlf-variable.f
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.fortran/xlf-variable.f
+@@ -0,0 +1,33 @@
++c Copyright 2012 Free Software Foundation, Inc.
++c
++c This program is free software; you can redistribute it and/or modify
++c it under the terms of the GNU General Public License as published by
++c the Free Software Foundation; either version 3 of the License, or
++c (at your option) any later version.
++c
++c This program is distributed in the hope that it will be useful,
++c but WITHOUT ANY WARRANTY; without even the implied warranty of
++c MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++c GNU General Public License for more details.
++c
++c You should have received a copy of the GNU General Public License
++c along with this program.  If not, see <http://www.gnu.org/licenses/>.
++
++c This file is the Fortran source file for xlf-variable.f.
++c It was used to generate the assembly output called xlf-variable.S,
++c which was generated using IBM's XLF compiler.
++
++        module mod1
++          real, pointer :: y
++          real, target :: z
++        contains
++          subroutine sub1
++            y => z
++            y = 3.0
++            nullify (y)
++          end subroutine
++        end module
++
++        use mod1
++        call sub1
++        end
diff --git a/SOURCES/gdb-runtest-pie-override.patch b/SOURCES/gdb-runtest-pie-override.patch
new file mode 100644
index 0000000..f878dc3
--- /dev/null
+++ b/SOURCES/gdb-runtest-pie-override.patch
@@ -0,0 +1,49 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-runtest-pie-override.patch
+
+;; Hack for proper PIE run of the testsuite.
+;;=fedoratest
+
+make check//unix/-fPIE/-pie RUNTESTFLAGS=solib-display.exp
+
+gcc -fpic -c  -fPIE -pie -o x.o x.c
+/usr/lib/gcc/x86_64-redhat-linux/4.6.1/../../../../lib64/Scrt1.o: In function `_start':
+(.text+0x20): undefined reference to `main'
+
+=> Change the order for overrides.
+
+One has to also use -fPIC rather than -fPIE, -fPIC is stronger.
+
+The correct way would be:
+make check//unix RUNTESTFLAGS='CC_FOR_TARGET=gcc\ -fPIC\ -pie CXX_FOR_TARGET=g++\ -fPIC\ -pie solib-display.exp'
+
+But there is a problem with testsuite.unix non-unique subdir name and also
+a problem with make -j parallelization of the testsuite.
+
+diff --git a/gdb/testsuite/lib/future.exp b/gdb/testsuite/lib/future.exp
+--- a/gdb/testsuite/lib/future.exp
++++ b/gdb/testsuite/lib/future.exp
+@@ -185,6 +185,10 @@ proc gdb_default_target_compile {source destfile type options} {
+     set ldflags ""
+     set dest [target_info name]
+ 
++    if {[board_info $dest exists multilib_flags]} {
++	append add_flags " [board_info $dest multilib_flags]"
++    }
++
+     if {[info exists CFLAGS_FOR_TARGET]} {
+ 	append add_flags " $CFLAGS_FOR_TARGET"
+     }
+@@ -519,10 +523,6 @@ proc gdb_default_target_compile {source destfile type options} {
+ 	}
+     }
+ 
+-    if {[board_info $dest exists multilib_flags]} {
+-	append add_flags " [board_info $dest multilib_flags]"
+-    }
+-
+     verbose "doing compile"
+ 
+     set sources ""
diff --git a/SOURCES/gdb-simultaneous-step-resume-breakpoint-test.patch b/SOURCES/gdb-simultaneous-step-resume-breakpoint-test.patch
new file mode 100644
index 0000000..5e1315b
--- /dev/null
+++ b/SOURCES/gdb-simultaneous-step-resume-breakpoint-test.patch
@@ -0,0 +1,162 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-simultaneous-step-resume-breakpoint-test.patch
+
+;; New test for step-resume breakpoint placed in multiple threads at once.
+;;=fedoratest
+
+diff --git a/gdb/testsuite/gdb.threads/simultaneous-step-resume-breakpoint.c b/gdb/testsuite/gdb.threads/simultaneous-step-resume-breakpoint.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.threads/simultaneous-step-resume-breakpoint.c
+@@ -0,0 +1,79 @@
++/* Copyright 2009 Free Software Foundation, Inc.
++
++   Written by Fred Fish of Cygnus Support
++   Contributed by Cygnus Support
++
++   This file is part of GDB.
++
++   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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++/* Test multiple threads stepping into a .debug_line-less function with
++   a breakpoint placed on its return-to-caller point.  */
++
++#include <pthread.h>
++#include <assert.h>
++#include <unistd.h>
++#include <errno.h>
++#include <stdio.h>
++
++#define THREADS 3
++
++static void *
++func (void *unused)
++{
++  int i;
++
++  errno = 0;
++  i = 0xdeadf00d;
++  i = sleep (THREADS);	/* sleep-call */
++  if (errno != 0)	/* sleep-after */
++    perror ("sleep");
++
++  /* The GDB bug with forgotten step-resume breakpoint could leave stale
++     breakpoint on the I assignment making it a nop.  */
++  if (i == 0xdeadf00d)
++    assert (0);
++
++  assert (i == 0);
++
++  pthread_exit (NULL);
++}
++
++int
++main (void)
++{
++  pthread_t threads[THREADS];
++  int threadi;
++
++  for (threadi = 0; threadi < THREADS; threadi++)
++    {
++      int i;
++
++      i = pthread_create (&threads[threadi], NULL, func, NULL);
++      assert (i == 0);
++
++      i = sleep (1);
++      assert (i == 0);
++    }
++
++  for (threadi = 0; threadi < THREADS; threadi++)
++    {
++      int i;
++
++      i = pthread_join (threads[threadi], NULL);
++      assert (i == 0);
++    }
++
++  return 0;	/* final-exit */
++}
+diff --git a/gdb/testsuite/gdb.threads/simultaneous-step-resume-breakpoint.exp b/gdb/testsuite/gdb.threads/simultaneous-step-resume-breakpoint.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.threads/simultaneous-step-resume-breakpoint.exp
+@@ -0,0 +1,65 @@
++# Copyright (C) 2009 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++# Test multiple threads stepping into a .debug_line-less function with
++# a breakpoint placed on its return-to-caller point.
++
++set testfile simultaneous-step-resume-breakpoint
++set srcfile ${testfile}.c
++set binfile [standard_output_file ${testfile}]
++
++if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
++    return -1
++}
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++
++# Ensure we have no debuginfo for the `sleep' call itself (=for libc).
++gdb_test "set debug-file-directory /DoesNotExist"
++
++gdb_load ${binfile}
++if ![runto_main] {
++   return -1
++}
++
++# Red Hat vendor patch does set it to "step" by default.
++gdb_test "set scheduler-locking off"
++
++gdb_breakpoint [gdb_get_line_number "final-exit"]
++
++gdb_breakpoint [gdb_get_line_number "sleep-call"]
++gdb_continue_to_breakpoint "sleep-call"
++
++gdb_test "step" "sleep-call.*" "step thread 1"
++gdb_test "step" "sleep-call.*" "step thread 2"
++gdb_test "step" "sleep-after.*" "step thread 3"
++
++set test "first continue"
++gdb_test_multiple "continue" $test {
++    -re "final-exit.*$gdb_prompt $" {
++	# gdb-7.0.
++	pass $test
++	return
++    }
++    -re "sleep-after.*$gdb_prompt $" {
++	# Fedora/RHEL branch.
++	pass $test
++    }
++}
++
++gdb_test "continue" "sleep-after.*" "second continue"
++gdb_test "continue" "final-exit.*" "third continue"
diff --git a/SOURCES/gdb-test-bt-cfi-without-die.patch b/SOURCES/gdb-test-bt-cfi-without-die.patch
new file mode 100644
index 0000000..6167c14
--- /dev/null
+++ b/SOURCES/gdb-test-bt-cfi-without-die.patch
@@ -0,0 +1,214 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-test-bt-cfi-without-die.patch
+
+;; [delayed-symfile] Test a backtrace regression on CFIs without DIE (BZ 614604).
+;;=fedoratest
+
+http://sourceware.org/ml/archer/2010-q3/msg00028.html
+
+On Wed, 25 Feb 2009 00:14:29 +0100, Jan Kratochvil wrote:
+> commit 6a37c2b9962258ecf9299cc34a650e64a06acaa5
+>
+> There was a regression on gdb.base/savedregs.exp.
+>
+> quick_addrmap/require_partial_symbols should be used even for the unwind debug
+> info checking as its load has been also delayed by this branch.
+[...]
+> --- a/gdb/dwarf2-frame.c
+> +++ b/gdb/dwarf2-frame.c
+[...]
+> @@ -1499,6 +1500,14 @@ dwarf2_frame_find_fde (CORE_ADDR *pc)
+>        struct dwarf2_fde *fde;
+>        CORE_ADDR offset;
+>
+> +      if (objfile->quick_addrmap)
+> +	{
+> +	  if (!addrmap_find (objfile->quick_addrmap, *pc))
+> +	    continue;
+> +	}
+> +      /* FIXME: Read-in only .debug_frame/.eh_frame without .debug_info?  */
+> +      require_partial_symbols (objfile);
+> +
+
+but this has caused a different regression (as discussed in the confcall).
+
+QUICK_ADDRMAP is built only from .debug_aranges.  But we can have existing
+built .debug_aranges for CUs in OBJFILE but still some CUs do not need to have
+DWARF at all while they can feature CFIs (.eh_frame or .debug_frame).
+It has been described by Daniel Jacobowitz at:
+	Re: [2/4] RFC: check psymtabs_addrmap before reading FDEs
+	http://sourceware.org/ml/gdb-patches/2010-07/msg00012.html
+
+Sorry for this regression by me (in that fix of a different regression).
+
+Fixed it the "slow way" as this branch is now obsoleted by .gdb-index.
+
+No regressions on {x86_64,x86_64-m32,i686}-fedora13-linux-gnu.
+
+Checked-in.
+
+Thanks,
+Jan
+
+eb8df8566acc1ed963e3e9b77c13b9c2c3db03fb
+
+Test CFI is parsed even for range (function) not described by any DIE.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=614028
+
+gdb/
+	* dwarf2-frame.c (dwarf2_frame_find_fde): Remove the
+	OBJFILE->QUICK_ADDRMAP check.  New comment why.
+
+gdb/testsuite/
+	* gdb.base/cfi-without-die.exp, gdb.base/cfi-without-die-main.c,
+	gdb.base/cfi-without-die-caller.c: New files.
+
+diff --git a/gdb/testsuite/gdb.base/cfi-without-die-caller.c b/gdb/testsuite/gdb.base/cfi-without-die-caller.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/cfi-without-die-caller.c
+@@ -0,0 +1,28 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2005, 2007, 2008, 2009, 2010 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++typedef int (*callback_t) (void);
++
++int
++caller (callback_t callback)
++{
++  /* Ensure some frame content to push away the return address.  */
++  volatile const long one = 1;
++
++  /* Modify the return value to prevent any tail-call optimization.  */
++  return (*callback) () - one;
++}
+diff --git a/gdb/testsuite/gdb.base/cfi-without-die-main.c b/gdb/testsuite/gdb.base/cfi-without-die-main.c
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/cfi-without-die-main.c
+@@ -0,0 +1,32 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2005, 2007, 2008, 2009, 2010 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++typedef int (*callback_t) (void);
++
++extern int caller (callback_t callback);
++
++int
++callback (void)
++{
++  return 1;
++}
++
++int
++main (void)
++{
++  return caller (callback);
++}
+diff --git a/gdb/testsuite/gdb.base/cfi-without-die.exp b/gdb/testsuite/gdb.base/cfi-without-die.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.base/cfi-without-die.exp
+@@ -0,0 +1,71 @@
++# Copyright 2010 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++# Test CFI is parsed even for range (function) not described by any DIE.
++
++set testfile cfi-without-die
++set srcmainfile ${testfile}-main.c
++set srccallerfile ${testfile}-caller.c
++set executable ${testfile}
++set objmainfile [standard_output_file ${testfile}-main.o]
++set objcallerfile [standard_output_file ${testfile}-caller.o]
++set binfile [standard_output_file ${executable}]
++
++if { [gdb_compile "${srcdir}/${subdir}/${srccallerfile}" ${objcallerfile} \
++      object [list {additional_flags=-fomit-frame-pointer -fno-unwind-tables -fno-asynchronous-unwind-tables}]] != ""
++     || [gdb_compile "${srcdir}/${subdir}/${srcmainfile}" ${objmainfile} object {debug}] != ""
++     || [gdb_compile "${objmainfile} ${objcallerfile}" ${binfile} executable {}] != "" } {
++     untested ${testfile}.exp
++     return -1
++}
++
++clean_restart $executable
++
++if ![runto callback] then {
++   fail "verify unwinding: Can't run to callback"
++   return 0
++}
++set test "verify unwinding breaks without CFI"
++gdb_test_multiple "bt" $test {
++    -re " in \[?\]\[?\] .*\r\n$gdb_prompt $" {
++	# It may backtrace through some random frames even to main().
++	pass $test
++    }
++    -re " in main .*\r\n$gdb_prompt $" {
++	fail $test
++    }
++    -re "\r\n$gdb_prompt $" {
++	pass $test
++    }
++}
++
++if { [gdb_compile "${srcdir}/${subdir}/${srccallerfile}" ${objcallerfile} \
++      object [list {additional_flags=-fomit-frame-pointer -funwind-tables -fasynchronous-unwind-tables}]] != ""
++     || [gdb_compile "${srcdir}/${subdir}/${srcmainfile}" ${objmainfile} object {debug}] != ""
++     || [gdb_compile "${objmainfile} ${objcallerfile}" ${binfile} executable {}] != "" } {
++     untested ${testfile}.exp
++     return -1
++}
++
++clean_restart $executable
++
++if ![runto callback] then {
++   fail "test CFI without DIEs: Can't run to callback"
++   return 0
++}
++# #0  callback () at ...
++# #1  0x00000000004004e9 in caller ()
++# #2  0x00000000004004cd in main () at ...
++gdb_test "bt" "#0 +callback \[^\r\n\]+\r\n#1 \[^\r\n\]+ in caller \[^\r\n\]+\r\n#2 \[^\r\n\]+ in main \[^\r\n\]+" "verify unwindin works for CFI without DIEs"
diff --git a/SOURCES/gdb-test-dw2-aranges.patch b/SOURCES/gdb-test-dw2-aranges.patch
new file mode 100644
index 0000000..054a769
--- /dev/null
+++ b/SOURCES/gdb-test-dw2-aranges.patch
@@ -0,0 +1,220 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-test-dw2-aranges.patch
+
+;; [archer-tromey-delayed-symfile] New test gdb.dwarf2/dw2-aranges.exp.
+;;=fedoratest
+
+[archer-tromey-delayed-symfile]
+
+commit 77fa7778a37b0d28a7e4e5235f074a10ecf1815d
+Author: Jan Kratochvil <jkratoch@host1.dyn.jankratochvil.net>
+Date:   Sat Aug 15 15:05:54 2009 +0200
+
+    Test for "handle incorrect aranges".
+
+    readelf:
+    Contents of the .debug_aranges section:
+
+      Length:                   8
+      Version:                  2
+      Offset into .debug_info:  0x0
+      Pointer Size:             0
+      Segment Size:             0
+
+        Address    Length
+    Floating point exception
+
+    	* gdb.dwarf2/dw2-aranges.exp, gdb.dwarf2/dw2-aranges.S: New files.
+
+diff --git a/gdb/testsuite/gdb.dwarf2/dw2-aranges.S b/gdb/testsuite/gdb.dwarf2/dw2-aranges.S
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.dwarf2/dw2-aranges.S
+@@ -0,0 +1,140 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++   Copyright 2004, 2007, 2008, 2009 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.  */
++
++/* Test .debug_aranges containing zero address_size.  */
++
++/* Dummy function to provide debug information for.  */
++
++	.text
++.Lbegin_text1:
++	.globl main
++	.type main, %function
++main:
++.Lbegin_main:
++	.int 0
++.Lend_main:
++	.size main, .-main
++.Lend_text1:
++
++/* Debug information */
++
++	.section .debug_info
++.Lcu1_begin:
++	/* CU header */
++	.4byte	.Lcu1_end - .Lcu1_start		/* Length of Compilation Unit */
++.Lcu1_start:
++	.2byte	2				/* DWARF Version */
++	.4byte	.Labbrev1_begin			/* Offset into abbrev section */
++	.byte	4				/* Pointer size */
++
++	/* CU die */
++	.uleb128 1				/* Abbrev: DW_TAG_compile_unit */
++	.4byte	.Lend_text1			/* DW_AT_high_pc */
++	.4byte	.Lbegin_text1			/* DW_AT_low_pc */
++	.ascii	"file1.txt\0"			/* DW_AT_name */
++	.ascii	"GNU C 3.3.3\0"			/* DW_AT_producer */
++	.byte	1				/* DW_AT_language (C) */
++
++	/* main */
++	.uleb128	2			/* Abbrev: DW_TAG_subprogram */
++	.byte		1			/* DW_AT_external */
++	.byte		1			/* DW_AT_decl_file */
++	.byte		2			/* DW_AT_decl_line */
++	.ascii		"main\0"		/* DW_AT_name */
++	.4byte		.Ltype_int-.Lcu1_begin	/* DW_AT_type */
++	.4byte		.Lbegin_main	/* DW_AT_low_pc */
++	.4byte		.Lend_main		/* DW_AT_high_pc */
++	.byte		1			/* DW_AT_frame_base: length */
++	.byte		0x55			/* DW_AT_frame_base: DW_OP_reg5 */
++
++.Ltype_int:
++	.uleb128	3			/* Abbrev: DW_TAG_base_type */
++	.ascii		"int\0"			/* DW_AT_name */
++	.byte		4			/* DW_AT_byte_size */
++	.byte		5			/* DW_AT_encoding */
++
++	.byte		0			/* End of children of CU */
++
++.Lcu1_end:
++
++/* Abbrev table */
++	.section .debug_abbrev
++.Labbrev1_begin:
++	.uleb128	1			/* Abbrev code */
++	.uleb128	0x11			/* DW_TAG_compile_unit */
++	.byte		1			/* has_children */
++	.uleb128	0x12			/* DW_AT_high_pc */
++	.uleb128	0x1			/* DW_FORM_addr */
++	.uleb128	0x11			/* DW_AT_low_pc */
++	.uleb128	0x1			/* DW_FORM_addr */
++	.uleb128	0x3			/* DW_AT_name */
++	.uleb128	0x8			/* DW_FORM_string */
++	.uleb128	0x25			/* DW_AT_producer */
++	.uleb128	0x8			/* DW_FORM_string */
++	.uleb128	0x13			/* DW_AT_language */
++	.uleb128	0xb			/* DW_FORM_data1 */
++	.byte		0x0			/* Terminator */
++	.byte		0x0			/* Terminator */
++
++	.uleb128	2			/* Abbrev code */
++	.uleb128	0x2e			/* DW_TAG_subprogram */
++	.byte		0			/* has_children */
++	.uleb128	0x3f			/* DW_AT_external */
++	.uleb128	0xc			/* DW_FORM_flag */
++	.uleb128	0x3a			/* DW_AT_decl_file */
++	.uleb128	0xb			/* DW_FORM_data1 */
++	.uleb128	0x3b			/* DW_AT_decl_line */
++	.uleb128	0xb			/* DW_FORM_data1 */
++	.uleb128	0x3			/* DW_AT_name */
++	.uleb128	0x8			/* DW_FORM_string */
++	.uleb128	0x49			/* DW_AT_type */
++	.uleb128	0x13			/* DW_FORM_ref4 */
++	.uleb128	0x11			/* DW_AT_low_pc */
++	.uleb128	0x1			/* DW_FORM_addr */
++	.uleb128	0x12			/* DW_AT_high_pc */
++	.uleb128	0x1			/* DW_FORM_addr */
++	.uleb128	0x40			/* DW_AT_frame_base */
++	.uleb128	0xa			/* DW_FORM_block1 */
++	.byte		0x0			/* Terminator */
++	.byte		0x0			/* Terminator */
++
++	.uleb128	3			/* Abbrev code */
++	.uleb128	0x24			/* DW_TAG_base_type */
++	.byte		0			/* has_children */
++	.uleb128	0x3			/* DW_AT_name */
++	.uleb128	0x8			/* DW_FORM_string */
++	.uleb128	0xb			/* DW_AT_byte_size */
++	.uleb128	0xb			/* DW_FORM_data1 */
++	.uleb128	0x3e			/* DW_AT_encoding */
++	.uleb128	0xb			/* DW_FORM_data1 */
++	.byte		0x0			/* Terminator */
++	.byte		0x0			/* Terminator */
++
++	.byte		0x0			/* Terminator */
++	.byte		0x0			/* Terminator */
++
++/* aranges table */
++	.section .debug_aranges
++	.long	.Laranges_end - 1f
++1:
++	.2byte	2				/* aranges Version */
++	.4byte	.Lcu1_begin - .debug_info	/* Offset into .debug_info section */
++	/* The GDB crasher is this zero value.  */
++	.byte		0			/* aranges address_size */
++	.byte		0			/* aranges segment_size */
++
++.Laranges_end:
+diff --git a/gdb/testsuite/gdb.dwarf2/dw2-aranges.exp b/gdb/testsuite/gdb.dwarf2/dw2-aranges.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.dwarf2/dw2-aranges.exp
+@@ -0,0 +1,40 @@
++# Copyright 2004, 2005, 2007, 2008, 2009 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++# Test .debug_aranges containing zero address_size.
++
++# This test can only be run on targets which support DWARF-2 and use gas.
++# For now pick a sampling of likely targets.
++if {![istarget *-*-linux*]
++    && ![istarget *-*-gnu*]
++    && ![istarget *-*-elf*]
++    && ![istarget *-*-openbsd*]
++    && ![istarget arm-*-eabi*]
++    && ![istarget powerpc-*-eabi*]} {
++    return 0  
++}
++
++set testfile "dw2-aranges"
++set srcfile ${testfile}.S
++set binfile [standard_output_file ${testfile}]
++
++if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {nodebug}] != "" } {
++    return -1
++}
++
++clean_restart $testfile
++
++# Failed gdb_load would abort the testcase execution earlier.
++pass "file loaded"
diff --git a/SOURCES/gdb-test-expr-cumulative-archer.patch b/SOURCES/gdb-test-expr-cumulative-archer.patch
new file mode 100644
index 0000000..28a903d
--- /dev/null
+++ b/SOURCES/gdb-test-expr-cumulative-archer.patch
@@ -0,0 +1,223 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-test-expr-cumulative-archer.patch
+
+;; [archer-keiths-expr-cumulative+upstream] Import C++ testcases.
+;;=fedoratest
+
+archer archer-keiths-expr-cumulative
+b5a7497340b24199f0c7ba7fdf0d54d4df44d6bc
+
+diff --git a/gdb/testsuite/gdb.cp/namespace-nested-imports.cc b/gdb/testsuite/gdb.cp/namespace-nested-imports.cc
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.cp/namespace-nested-imports.cc
+@@ -0,0 +1,36 @@
++namespace A
++{
++  namespace B
++  {
++    int ab = 11;
++  }
++}
++
++namespace C
++{
++  namespace D
++  {
++    using namespace A::B;
++
++    int
++    second()
++    {
++      ab;
++      return 0;
++    }
++  }
++
++  int
++  first()
++  {
++    //ab;
++    return D::second();
++  }
++}
++
++int
++main()
++{
++  //ab;
++  return C::first();
++}
+diff --git a/gdb/testsuite/gdb.cp/namespace-nested-imports.exp b/gdb/testsuite/gdb.cp/namespace-nested-imports.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.cp/namespace-nested-imports.exp
+@@ -0,0 +1,50 @@
++# Copyright 2008 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++set testfile namespace-nested-imports
++set srcfile ${testfile}.cc
++set binfile [standard_output_file ${testfile}]
++if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
++    untested "Couldn't compile test program"
++    return -1
++}
++
++# Get things started.
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++gdb_load ${binfile}
++
++############################################
++if ![runto_main] then {
++    perror "couldn't run to breakpoint main"
++    continue
++}
++
++gdb_test "print ab" "No symbol .* in current context."
++
++############################################
++gdb_breakpoint C::first
++gdb_continue_to_breakpoint "C::first"
++
++gdb_test "print ab" "No symbol .* in current context."
++gdb_test "print C::D::ab" "= 11"
++
++############################################
++gdb_breakpoint C::D::second
++gdb_continue_to_breakpoint "C::D::second"
++
++gdb_test "print ab" "= 11"
+diff --git a/gdb/testsuite/gdb.cp/namespace-no-imports.cc b/gdb/testsuite/gdb.cp/namespace-no-imports.cc
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.cp/namespace-no-imports.cc
+@@ -0,0 +1,37 @@
++
++namespace A
++{
++  int _a = 11;
++
++  namespace B{
++
++    int ab = 22;
++
++    namespace C{
++
++      int abc = 33;
++
++      int second(){
++        return 0;
++      }
++
++    }
++
++    int first(){
++      _a;
++      ab;
++      C::abc;
++      return C::second();
++    }
++  }
++}
++
++
++int
++main()
++{
++  A::_a;
++  A::B::ab;
++  A::B::C::abc;
++  return A::B::first();
++}
+diff --git a/gdb/testsuite/gdb.cp/namespace-no-imports.exp b/gdb/testsuite/gdb.cp/namespace-no-imports.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.cp/namespace-no-imports.exp
+@@ -0,0 +1,69 @@
++# Copyright 2008 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++set testfile namespace-no-imports
++set srcfile ${testfile}.cc
++set binfile [standard_output_file ${testfile}]
++if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
++    untested "Couldn't compile test program"
++    return -1
++}
++
++# Get things started.
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++gdb_load ${binfile}
++
++############################################
++if ![runto_main] then {
++    perror "couldn't run to breakpoint main"
++    continue
++}
++
++gdb_test "print A::_a" "= 11"
++gdb_test "print A::B::ab" "= 22"
++gdb_test "print A::B::C::abc" "= 33"
++
++gdb_test "print _a" "No symbol .* in current context."
++gdb_test "print ab" "No symbol .* in current context."
++gdb_test "print abc" "No symbol .* in current context."
++
++############################################
++gdb_breakpoint A::B::first
++gdb_continue_to_breakpoint "A::B::first"
++
++gdb_test "print A::_a" "= 11"
++gdb_test "print A::B::ab" "= 22"
++gdb_test "print A::B::C::abc" "= 33"
++
++gdb_test "print _a" "= 11"
++gdb_test "print ab" "= 22"
++gdb_test "print C::abc" "= 33"
++
++gdb_test "print abc" "No symbol .* in current context."
++
++############################################
++gdb_breakpoint A::B::C::second
++gdb_continue_to_breakpoint "A::B::C::second"
++
++gdb_test "print A::_a" "= 11"
++gdb_test "print A::B::ab" "= 22"
++gdb_test "print A::B::C::abc" "= 33"
++
++gdb_test "print _a" "= 11"
++gdb_test "print ab" "= 22"
++gdb_test "print abc" "= 33"
diff --git a/SOURCES/gdb-test-ivy-bridge.patch b/SOURCES/gdb-test-ivy-bridge.patch
new file mode 100644
index 0000000..c0d8edc
--- /dev/null
+++ b/SOURCES/gdb-test-ivy-bridge.patch
@@ -0,0 +1,469 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-test-ivy-bridge.patch
+
+;; Test GDB opcodes/ disassembly of Intel Ivy Bridge instructions (BZ 696890).
+;;=fedoratest
+
+diff --git a/gdb/testsuite/gdb.arch/amd64-ivy-bridge.S b/gdb/testsuite/gdb.arch/amd64-ivy-bridge.S
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.arch/amd64-ivy-bridge.S
+@@ -0,0 +1,98 @@
++/* Copyright 2011 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++   This file is part of the gdb testsuite.  */
++
++	.globl _start
++_start:	.text
++
++/* gas/i386/x86-64-rdrnd.s */
++	.att_syntax prefix
++	rdrand %bx
++	rdrand %ebx
++	rdrand %rbx
++	rdrand %r8w
++	rdrand %r8d
++	rdrand %r8
++
++	.intel_syntax noprefix
++	rdrand bx
++	rdrand ebx
++	rdrand rbx
++	rdrand r8w
++	rdrand r8d
++	rdrand r8
++
++/* gas/i386/x86-64-f16c.s */
++	.att_syntax prefix
++	vcvtph2ps %xmm4,%ymm4
++	vcvtph2ps (%r8),%ymm8
++	vcvtph2ps %xmm4,%xmm6
++	vcvtph2ps (%rcx),%xmm4
++	vcvtps2ph $0x2,%ymm4,%xmm4
++	vcvtps2ph $0x2,%ymm8,(%r8)
++	vcvtps2ph $0x2,%xmm4,%xmm4
++	vcvtps2ph $0x2,%xmm4,(%rcx) 
++
++	.intel_syntax noprefix
++	vcvtph2ps ymm4,xmm4
++	vcvtph2ps ymm8,XMMWORD PTR [r8]
++	vcvtph2ps ymm4,[rcx]
++	vcvtph2ps xmm6,xmm4
++	vcvtph2ps xmm4,QWORD PTR [rcx]          
++	vcvtph2ps xmm4,[rcx]
++	vcvtps2ph xmm4,ymm4,0x2
++	vcvtps2ph XMMWORD PTR [rcx],ymm4,0x2    
++	vcvtps2ph [rcx],ymm4,0x2 
++	vcvtps2ph xmm4,xmm4,0x2
++	vcvtps2ph QWORD PTR [r8],xmm8,0x2       
++	vcvtps2ph [rcx],xmm4,0x2 
++
++/* gas/i386/x86-64-fsgs.s */
++	.att_syntax prefix
++	rdfsbase %ebx
++	rdfsbase %rbx
++	rdfsbase %r8d
++	rdfsbase %r8
++	rdgsbase %ebx
++	rdgsbase %rbx   
++	rdgsbase %r8d   
++	rdgsbase %r8    
++	wrfsbase %ebx   
++	wrfsbase %rbx   
++	wrfsbase %r8d   
++	wrfsbase %r8    
++	wrgsbase %ebx   
++	wrgsbase %rbx   
++	wrgsbase %r8d   
++	wrgsbase %r8    
++
++	.intel_syntax noprefix
++	rdfsbase ebx    
++	rdfsbase rbx    
++	rdfsbase r8d    
++	rdfsbase r8
++	rdgsbase ebx    
++	rdgsbase rbx    
++	rdgsbase r8d    
++	rdgsbase r8
++	wrfsbase ebx    
++	wrfsbase rbx    
++	wrfsbase r8d    
++	wrfsbase r8
++	wrgsbase ebx    
++	wrgsbase rbx    
++	wrgsbase r8d    
++	wrgsbase r8
+diff --git a/gdb/testsuite/gdb.arch/amd64-ivy-bridge.exp b/gdb/testsuite/gdb.arch/amd64-ivy-bridge.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.arch/amd64-ivy-bridge.exp
+@@ -0,0 +1,170 @@
++# Copyright 2011 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++if {![istarget "x86_64-*-*"]} then {
++    return
++}
++
++set testfile amd64-ivy-bridge
++set test compilation
++if [prepare_for_testing ${testfile}.exp ${testfile}.x ${testfile}.S [list debug "additional_flags=-m64 -nostdlib"]] {
++    fail $test
++    return -1
++}
++pass $test
++
++gdb_test_no_output "set disassembly-flavor att"
++# gas/i386/x86-64-rdrnd.d
++# gas/i386/x86-64-f16c.d
++# gas/i386/x86-64-fsgs.d
++gdb_test "disassemble/r _start" "\r
++Dump of assembler code for function _start:\r
++\[^\r\n\]+:\t66 0f c7 f3\t\(             \)?rdrand %bx\r
++\[^\r\n\]+:\t0f c7 f3\t\(                \)?rdrand %ebx\r
++\[^\r\n\]+:\t48 0f c7 f3\t\(             \)?rdrand %rbx\r
++\[^\r\n\]+:\t66 41 0f c7 f0\t\(          \)?rdrand %r8w\r
++\[^\r\n\]+:\t41 0f c7 f0\t\(             \)?rdrand %r8d\r
++\[^\r\n\]+:\t49 0f c7 f0\t\(             \)?rdrand %r8\r
++\[^\r\n\]+:\t66 0f c7 f3\t\(             \)?rdrand %bx\r
++\[^\r\n\]+:\t0f c7 f3\t\(                \)?rdrand %ebx\r
++\[^\r\n\]+:\t48 0f c7 f3\t\(             \)?rdrand %rbx\r
++\[^\r\n\]+:\t66 41 0f c7 f0\t\(          \)?rdrand %r8w\r
++\[^\r\n\]+:\t41 0f c7 f0\t\(             \)?rdrand %r8d\r
++\[^\r\n\]+:\t49 0f c7 f0\t\(             \)?rdrand %r8\r
++\[^\r\n\]+:\tc4 e2 7d 13 e4\t\(          \)?vcvtph2ps %xmm4,%ymm4\r
++\[^\r\n\]+:\tc4 42 7d 13 00\t\(          \)?vcvtph2ps \\(%r8\\),%ymm8\r
++\[^\r\n\]+:\tc4 e2 79 13 f4\t\(          \)?vcvtph2ps %xmm4,%xmm6\r
++\[^\r\n\]+:\tc4 e2 79 13 21\t\(          \)?vcvtph2ps \\(%rcx\\),%xmm4\r
++\[^\r\n\]+:\tc4 e3 7d 1d e4 02\t\(       \)?vcvtps2ph \\\$0x2,%ymm4,%xmm4\r
++\[^\r\n\]+:\tc4 43 7d 1d 00 02\t\(       \)?vcvtps2ph \\\$0x2,%ymm8,\\(%r8\\)\r
++\[^\r\n\]+:\tc4 e3 79 1d e4 02\t\(       \)?vcvtps2ph \\\$0x2,%xmm4,%xmm4\r
++\[^\r\n\]+:\tc4 e3 79 1d 21 02\t\(       \)?vcvtps2ph \\\$0x2,%xmm4,\\(%rcx\\)\r
++\[^\r\n\]+:\tc4 e2 7d 13 e4\t\(          \)?vcvtph2ps %xmm4,%ymm4\r
++\[^\r\n\]+:\tc4 42 7d 13 00\t\(          \)?vcvtph2ps \\(%r8\\),%ymm8\r
++\[^\r\n\]+:\tc4 e2 7d 13 21\t\(          \)?vcvtph2ps \\(%rcx\\),%ymm4\r
++\[^\r\n\]+:\tc4 e2 79 13 f4\t\(          \)?vcvtph2ps %xmm4,%xmm6\r
++\[^\r\n\]+:\tc4 e2 79 13 21\t\(          \)?vcvtph2ps \\(%rcx\\),%xmm4\r
++\[^\r\n\]+:\tc4 e2 79 13 21\t\(          \)?vcvtph2ps \\(%rcx\\),%xmm4\r
++\[^\r\n\]+:\tc4 e3 7d 1d e4 02\t\(       \)?vcvtps2ph \\\$0x2,%ymm4,%xmm4\r
++\[^\r\n\]+:\tc4 e3 7d 1d 21 02\t\(       \)?vcvtps2ph \\\$0x2,%ymm4,\\(%rcx\\)\r
++\[^\r\n\]+:\tc4 e3 7d 1d 21 02\t\(       \)?vcvtps2ph \\\$0x2,%ymm4,\\(%rcx\\)\r
++\[^\r\n\]+:\tc4 e3 79 1d e4 02\t\(       \)?vcvtps2ph \\\$0x2,%xmm4,%xmm4\r
++\[^\r\n\]+:\tc4 43 79 1d 00 02\t\(       \)?vcvtps2ph \\\$0x2,%xmm8,\\(%r8\\)\r
++\[^\r\n\]+:\tc4 e3 79 1d 21 02\t\(       \)?vcvtps2ph \\\$0x2,%xmm4,\\(%rcx\\)\r
++\[^\r\n\]+:\tf3 0f ae c3\t\(             \)?rdfsbase %ebx\r
++\[^\r\n\]+:\tf3 48 0f ae c3\t\(          \)?rdfsbase %rbx\r
++\[^\r\n\]+:\tf3 41 0f ae c0\t\(          \)?rdfsbase %r8d\r
++\[^\r\n\]+:\tf3 49 0f ae c0\t\(          \)?rdfsbase %r8\r
++\[^\r\n\]+:\tf3 0f ae cb\t\(             \)?rdgsbase %ebx\r
++\[^\r\n\]+:\tf3 48 0f ae cb\t\(          \)?rdgsbase %rbx\r
++\[^\r\n\]+:\tf3 41 0f ae c8\t\(          \)?rdgsbase %r8d\r
++\[^\r\n\]+:\tf3 49 0f ae c8\t\(          \)?rdgsbase %r8\r
++\[^\r\n\]+:\tf3 0f ae d3\t\(             \)?wrfsbase %ebx\r
++\[^\r\n\]+:\tf3 48 0f ae d3\t\(          \)?wrfsbase %rbx\r
++\[^\r\n\]+:\tf3 41 0f ae d0\t\(          \)?wrfsbase %r8d\r
++\[^\r\n\]+:\tf3 49 0f ae d0\t\(          \)?wrfsbase %r8\r
++\[^\r\n\]+:\tf3 0f ae db\t\(             \)?wrgsbase %ebx\r
++\[^\r\n\]+:\tf3 48 0f ae db\t\(          \)?wrgsbase %rbx\r
++\[^\r\n\]+:\tf3 41 0f ae d8\t\(          \)?wrgsbase %r8d\r
++\[^\r\n\]+:\tf3 49 0f ae d8\t\(          \)?wrgsbase %r8\r
++\[^\r\n\]+:\tf3 0f ae c3\t\(             \)?rdfsbase %ebx\r
++\[^\r\n\]+:\tf3 48 0f ae c3\t\(          \)?rdfsbase %rbx\r
++\[^\r\n\]+:\tf3 41 0f ae c0\t\(          \)?rdfsbase %r8d\r
++\[^\r\n\]+:\tf3 49 0f ae c0\t\(          \)?rdfsbase %r8\r
++\[^\r\n\]+:\tf3 0f ae cb\t\(             \)?rdgsbase %ebx\r
++\[^\r\n\]+:\tf3 48 0f ae cb\t\(          \)?rdgsbase %rbx\r
++\[^\r\n\]+:\tf3 41 0f ae c8\t\(          \)?rdgsbase %r8d\r
++\[^\r\n\]+:\tf3 49 0f ae c8\t\(          \)?rdgsbase %r8\r
++\[^\r\n\]+:\tf3 0f ae d3\t\(             \)?wrfsbase %ebx\r
++\[^\r\n\]+:\tf3 48 0f ae d3\t\(          \)?wrfsbase %rbx\r
++\[^\r\n\]+:\tf3 41 0f ae d0\t\(          \)?wrfsbase %r8d\r
++\[^\r\n\]+:\tf3 49 0f ae d0\t\(          \)?wrfsbase %r8\r
++\[^\r\n\]+:\tf3 0f ae db\t\(             \)?wrgsbase %ebx\r
++\[^\r\n\]+:\tf3 48 0f ae db\t\(          \)?wrgsbase %rbx\r
++\[^\r\n\]+:\tf3 41 0f ae d8\t\(          \)?wrgsbase %r8d\r
++\[^\r\n\]+:\tf3 49 0f ae d8\t\(          \)?wrgsbase %r8\r
++End of assembler dump\\." "att"
++
++gdb_test_no_output "set disassembly-flavor intel"
++# gas/i386/x86-64-rdrnd-intel.d
++# gas/i386/x86-64-f16c-intel.d
++# gas/i386/x86-64-fsgs-intel.d
++gdb_test "disassemble/r _start" "\r
++Dump of assembler code for function _start:\r
++\[^\r\n\]+:\t66 0f c7 f3\t\(             \)?rdrand bx\r
++\[^\r\n\]+:\t0f c7 f3\t\(                \)?rdrand ebx\r
++\[^\r\n\]+:\t48 0f c7 f3\t\(             \)?rdrand rbx\r
++\[^\r\n\]+:\t66 41 0f c7 f0\t\(          \)?rdrand r8w\r
++\[^\r\n\]+:\t41 0f c7 f0\t\(             \)?rdrand r8d\r
++\[^\r\n\]+:\t49 0f c7 f0\t\(             \)?rdrand r8\r
++\[^\r\n\]+:\t66 0f c7 f3\t\(             \)?rdrand bx\r
++\[^\r\n\]+:\t0f c7 f3\t\(                \)?rdrand ebx\r
++\[^\r\n\]+:\t48 0f c7 f3\t\(             \)?rdrand rbx\r
++\[^\r\n\]+:\t66 41 0f c7 f0\t\(          \)?rdrand r8w\r
++\[^\r\n\]+:\t41 0f c7 f0\t\(             \)?rdrand r8d\r
++\[^\r\n\]+:\t49 0f c7 f0\t\(             \)?rdrand r8\r
++\[^\r\n\]+:\tc4 e2 7d 13 e4\t\(          \)?vcvtph2ps ymm4,xmm4\r
++\[^\r\n\]+:\tc4 42 7d 13 00\t\(          \)?vcvtph2ps ymm8,XMMWORD PTR \\\[r8\\\]\r
++\[^\r\n\]+:\tc4 e2 79 13 f4\t\(          \)?vcvtph2ps xmm6,xmm4\r
++\[^\r\n\]+:\tc4 e2 79 13 21\t\(          \)?vcvtph2ps xmm4,QWORD PTR \\\[rcx\\\]\r
++\[^\r\n\]+:\tc4 e3 7d 1d e4 02\t\(       \)?vcvtps2ph xmm4,ymm4,0x2\r
++\[^\r\n\]+:\tc4 43 7d 1d 00 02\t\(       \)?vcvtps2ph XMMWORD PTR \\\[r8\\\],ymm8,0x2\r
++\[^\r\n\]+:\tc4 e3 79 1d e4 02\t\(       \)?vcvtps2ph xmm4,xmm4,0x2\r
++\[^\r\n\]+:\tc4 e3 79 1d 21 02\t\(       \)?vcvtps2ph QWORD PTR \\\[rcx\\\],xmm4,0x2\r
++\[^\r\n\]+:\tc4 e2 7d 13 e4\t\(          \)?vcvtph2ps ymm4,xmm4\r
++\[^\r\n\]+:\tc4 42 7d 13 00\t\(          \)?vcvtph2ps ymm8,XMMWORD PTR \\\[r8\\\]\r
++\[^\r\n\]+:\tc4 e2 7d 13 21\t\(          \)?vcvtph2ps ymm4,XMMWORD PTR \\\[rcx\\\]\r
++\[^\r\n\]+:\tc4 e2 79 13 f4\t\(          \)?vcvtph2ps xmm6,xmm4\r
++\[^\r\n\]+:\tc4 e2 79 13 21\t\(          \)?vcvtph2ps xmm4,QWORD PTR \\\[rcx\\\]\r
++\[^\r\n\]+:\tc4 e2 79 13 21\t\(          \)?vcvtph2ps xmm4,QWORD PTR \\\[rcx\\\]\r
++\[^\r\n\]+:\tc4 e3 7d 1d e4 02\t\(       \)?vcvtps2ph xmm4,ymm4,0x2\r
++\[^\r\n\]+:\tc4 e3 7d 1d 21 02\t\(       \)?vcvtps2ph XMMWORD PTR \\\[rcx\\\],ymm4,0x2\r
++\[^\r\n\]+:\tc4 e3 7d 1d 21 02\t\(       \)?vcvtps2ph XMMWORD PTR \\\[rcx\\\],ymm4,0x2\r
++\[^\r\n\]+:\tc4 e3 79 1d e4 02\t\(       \)?vcvtps2ph xmm4,xmm4,0x2\r
++\[^\r\n\]+:\tc4 43 79 1d 00 02\t\(       \)?vcvtps2ph QWORD PTR \\\[r8\\\],xmm8,0x2\r
++\[^\r\n\]+:\tc4 e3 79 1d 21 02\t\(       \)?vcvtps2ph QWORD PTR \\\[rcx\\\],xmm4,0x2\r
++\[^\r\n\]+:\tf3 0f ae c3\t\(             \)?rdfsbase ebx\r
++\[^\r\n\]+:\tf3 48 0f ae c3\t\(          \)?rdfsbase rbx\r
++\[^\r\n\]+:\tf3 41 0f ae c0\t\(          \)?rdfsbase r8d\r
++\[^\r\n\]+:\tf3 49 0f ae c0\t\(          \)?rdfsbase r8\r
++\[^\r\n\]+:\tf3 0f ae cb\t\(             \)?rdgsbase ebx\r
++\[^\r\n\]+:\tf3 48 0f ae cb\t\(          \)?rdgsbase rbx\r
++\[^\r\n\]+:\tf3 41 0f ae c8\t\(          \)?rdgsbase r8d\r
++\[^\r\n\]+:\tf3 49 0f ae c8\t\(          \)?rdgsbase r8\r
++\[^\r\n\]+:\tf3 0f ae d3\t\(             \)?wrfsbase ebx\r
++\[^\r\n\]+:\tf3 48 0f ae d3\t\(          \)?wrfsbase rbx\r
++\[^\r\n\]+:\tf3 41 0f ae d0\t\(          \)?wrfsbase r8d\r
++\[^\r\n\]+:\tf3 49 0f ae d0\t\(          \)?wrfsbase r8\r
++\[^\r\n\]+:\tf3 0f ae db\t\(             \)?wrgsbase ebx\r
++\[^\r\n\]+:\tf3 48 0f ae db\t\(          \)?wrgsbase rbx\r
++\[^\r\n\]+:\tf3 41 0f ae d8\t\(          \)?wrgsbase r8d\r
++\[^\r\n\]+:\tf3 49 0f ae d8\t\(          \)?wrgsbase r8\r
++\[^\r\n\]+:\tf3 0f ae c3\t\(             \)?rdfsbase ebx\r
++\[^\r\n\]+:\tf3 48 0f ae c3\t\(          \)?rdfsbase rbx\r
++\[^\r\n\]+:\tf3 41 0f ae c0\t\(          \)?rdfsbase r8d\r
++\[^\r\n\]+:\tf3 49 0f ae c0\t\(          \)?rdfsbase r8\r
++\[^\r\n\]+:\tf3 0f ae cb\t\(             \)?rdgsbase ebx\r
++\[^\r\n\]+:\tf3 48 0f ae cb\t\(          \)?rdgsbase rbx\r
++\[^\r\n\]+:\tf3 41 0f ae c8\t\(          \)?rdgsbase r8d\r
++\[^\r\n\]+:\tf3 49 0f ae c8\t\(          \)?rdgsbase r8\r
++\[^\r\n\]+:\tf3 0f ae d3\t\(             \)?wrfsbase ebx\r
++\[^\r\n\]+:\tf3 48 0f ae d3\t\(          \)?wrfsbase rbx\r
++\[^\r\n\]+:\tf3 41 0f ae d0\t\(          \)?wrfsbase r8d\r
++\[^\r\n\]+:\tf3 49 0f ae d0\t\(          \)?wrfsbase r8\r
++\[^\r\n\]+:\tf3 0f ae db\t\(             \)?wrgsbase ebx\r
++\[^\r\n\]+:\tf3 48 0f ae db\t\(          \)?wrgsbase rbx\r
++\[^\r\n\]+:\tf3 41 0f ae d8\t\(          \)?wrgsbase r8d\r
++\[^\r\n\]+:\tf3 49 0f ae d8\t\(          \)?wrgsbase r8\r
++End of assembler dump\\." "intel"
+diff --git a/gdb/testsuite/gdb.arch/i386-ivy-bridge.S b/gdb/testsuite/gdb.arch/i386-ivy-bridge.S
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.arch/i386-ivy-bridge.S
+@@ -0,0 +1,67 @@
++/* Copyright 2011 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++   This file is part of the gdb testsuite.  */
++
++	.globl _start
++_start:	.text
++
++/* gas/i386/rdrnd.s */
++	.att_syntax prefix
++	rdrand %bx
++	rdrand %ebx
++
++	.intel_syntax noprefix
++	rdrand bx
++	rdrand ebx
++
++/* gas/i386/f16c.s */
++	.att_syntax prefix
++	vcvtph2ps %xmm4,%ymm4
++	vcvtph2ps (%ecx),%ymm4
++	vcvtph2ps %xmm4,%xmm6
++	vcvtph2ps (%ecx),%xmm4
++	vcvtps2ph $0x2,%ymm4,%xmm4
++	vcvtps2ph $0x2,%ymm4,(%ecx) 
++	vcvtps2ph $0x2,%xmm4,%xmm4
++	vcvtps2ph $0x2,%xmm4,(%ecx) 
++
++	.intel_syntax noprefix
++	vcvtph2ps ymm4,xmm4
++	vcvtph2ps ymm4,XMMWORD PTR [ecx]
++	vcvtph2ps ymm4,[ecx]
++	vcvtph2ps xmm6,xmm4
++	vcvtph2ps xmm4,QWORD PTR [ecx]          
++	vcvtph2ps xmm4,[ecx]
++	vcvtps2ph xmm4,ymm4,0x2
++	vcvtps2ph XMMWORD PTR [ecx],ymm4,0x2    
++	vcvtps2ph [ecx],ymm4,0x2 
++	vcvtps2ph xmm4,xmm4,0x2
++	vcvtps2ph QWORD PTR [ecx],xmm4,0x2      
++	vcvtps2ph [ecx],xmm4,0x2 
++
++/* gas/i386/fsgs.s */
++	.att_syntax prefix
++	rdfsbase %ebx
++	rdgsbase %ebx
++	wrfsbase %ebx
++	wrgsbase %ebx
++
++	.intel_syntax noprefix
++	rdfsbase ebx    
++	rdgsbase ebx    
++	wrfsbase ebx    
++	wrgsbase ebx    
++
+diff --git a/gdb/testsuite/gdb.arch/i386-ivy-bridge.exp b/gdb/testsuite/gdb.arch/i386-ivy-bridge.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.arch/i386-ivy-bridge.exp
+@@ -0,0 +1,106 @@
++# Copyright 2011 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++if {![istarget "x86_64-*-*"] && ![istarget "i?86-*-*"]} then {
++    return
++}
++
++set testfile i386-ivy-bridge
++set test compilation
++if [prepare_for_testing ${testfile}.exp ${testfile}.x ${testfile}.S [list debug "additional_flags=-m32 -nostdlib"]] {
++    fail $test
++    return -1
++}
++pass $test
++
++gdb_test_no_output "set disassembly-flavor att"
++# gas/i386/rdrnd.d
++# gas/i386/f16c.d
++# gas/i386/fsgs.d
++gdb_test "disassemble/r _start" "\r
++Dump of assembler code for function _start:\r
++\[^\r\n\]+:\t66 0f c7 f3\t\(             \)?rdrand %bx\r
++\[^\r\n\]+:\t0f c7 f3\t\(                \)?rdrand %ebx\r
++\[^\r\n\]+:\t66 0f c7 f3\t\(             \)?rdrand %bx\r
++\[^\r\n\]+:\t0f c7 f3\t\(                \)?rdrand %ebx\r
++\[^\r\n\]+:\tc4 e2 7d 13 e4\t\(          \)?vcvtph2ps %xmm4,%ymm4\r
++\[^\r\n\]+:\tc4 e2 7d 13 21\t\(          \)?vcvtph2ps \\(%ecx\\),%ymm4\r
++\[^\r\n\]+:\tc4 e2 79 13 f4\t\(          \)?vcvtph2ps %xmm4,%xmm6\r
++\[^\r\n\]+:\tc4 e2 79 13 21\t\(          \)?vcvtph2ps \\(%ecx\\),%xmm4\r
++\[^\r\n\]+:\tc4 e3 7d 1d e4 02\t\(       \)?vcvtps2ph \\\$0x2,%ymm4,%xmm4\r
++\[^\r\n\]+:\tc4 e3 7d 1d 21 02\t\(       \)?vcvtps2ph \\\$0x2,%ymm4,\\(%ecx\\)\r
++\[^\r\n\]+:\tc4 e3 79 1d e4 02\t\(       \)?vcvtps2ph \\\$0x2,%xmm4,%xmm4\r
++\[^\r\n\]+:\tc4 e3 79 1d 21 02\t\(       \)?vcvtps2ph \\\$0x2,%xmm4,\\(%ecx\\)\r
++\[^\r\n\]+:\tc4 e2 7d 13 e4\t\(          \)?vcvtph2ps %xmm4,%ymm4\r
++\[^\r\n\]+:\tc4 e2 7d 13 21\t\(          \)?vcvtph2ps \\(%ecx\\),%ymm4\r
++\[^\r\n\]+:\tc4 e2 7d 13 21\t\(          \)?vcvtph2ps \\(%ecx\\),%ymm4\r
++\[^\r\n\]+:\tc4 e2 79 13 f4\t\(          \)?vcvtph2ps %xmm4,%xmm6\r
++\[^\r\n\]+:\tc4 e2 79 13 21\t\(          \)?vcvtph2ps \\(%ecx\\),%xmm4\r
++\[^\r\n\]+:\tc4 e2 79 13 21\t\(          \)?vcvtph2ps \\(%ecx\\),%xmm4\r
++\[^\r\n\]+:\tc4 e3 7d 1d e4 02\t\(       \)?vcvtps2ph \\\$0x2,%ymm4,%xmm4\r
++\[^\r\n\]+:\tc4 e3 7d 1d 21 02\t\(       \)?vcvtps2ph \\\$0x2,%ymm4,\\(%ecx\\)\r
++\[^\r\n\]+:\tc4 e3 7d 1d 21 02\t\(       \)?vcvtps2ph \\\$0x2,%ymm4,\\(%ecx\\)\r
++\[^\r\n\]+:\tc4 e3 79 1d e4 02\t\(       \)?vcvtps2ph \\\$0x2,%xmm4,%xmm4\r
++\[^\r\n\]+:\tc4 e3 79 1d 21 02\t\(       \)?vcvtps2ph \\\$0x2,%xmm4,\\(%ecx\\)\r
++\[^\r\n\]+:\tc4 e3 79 1d 21 02\t\(       \)?vcvtps2ph \\\$0x2,%xmm4,\\(%ecx\\)\r
++\[^\r\n\]+:\tf3 0f ae c3\t\(             \)?rdfsbase %ebx\r
++\[^\r\n\]+:\tf3 0f ae cb\t\(             \)?rdgsbase %ebx\r
++\[^\r\n\]+:\tf3 0f ae d3\t\(             \)?wrfsbase %ebx\r
++\[^\r\n\]+:\tf3 0f ae db\t\(             \)?wrgsbase %ebx\r
++\[^\r\n\]+:\tf3 0f ae c3\t\(             \)?rdfsbase %ebx\r
++\[^\r\n\]+:\tf3 0f ae cb\t\(             \)?rdgsbase %ebx\r
++\[^\r\n\]+:\tf3 0f ae d3\t\(             \)?wrfsbase %ebx\r
++\[^\r\n\]+:\tf3 0f ae db\t\(             \)?wrgsbase %ebx\r
++End of assembler dump\\." "att"
++
++gdb_test_no_output "set disassembly-flavor intel"
++# gas/i386/rdrnd-intel.d
++# gas/i386/f16c-intel.d
++# gas/i386/fsgs-intel.d
++gdb_test "disassemble/r _start" "\r
++Dump of assembler code for function _start:\r
++\[^\r\n\]+:\t66 0f c7 f3\t\(             \)?rdrand bx\r
++\[^\r\n\]+:\t0f c7 f3\t\(                \)?rdrand ebx\r
++\[^\r\n\]+:\t66 0f c7 f3\t\(             \)?rdrand bx\r
++\[^\r\n\]+:\t0f c7 f3\t\(                \)?rdrand ebx\r
++\[^\r\n\]+:\tc4 e2 7d 13 e4\t\(          \)?vcvtph2ps ymm4,xmm4\r
++\[^\r\n\]+:\tc4 e2 7d 13 21\t\(          \)?vcvtph2ps ymm4,XMMWORD PTR \\\[ecx\\\]\r
++\[^\r\n\]+:\tc4 e2 79 13 f4\t\(          \)?vcvtph2ps xmm6,xmm4\r
++\[^\r\n\]+:\tc4 e2 79 13 21\t\(          \)?vcvtph2ps xmm4,QWORD PTR \\\[ecx\\\]\r
++\[^\r\n\]+:\tc4 e3 7d 1d e4 02\t\(       \)?vcvtps2ph xmm4,ymm4,0x2\r
++\[^\r\n\]+:\tc4 e3 7d 1d 21 02\t\(       \)?vcvtps2ph XMMWORD PTR \\\[ecx\\\],ymm4,0x2\r
++\[^\r\n\]+:\tc4 e3 79 1d e4 02\t\(       \)?vcvtps2ph xmm4,xmm4,0x2\r
++\[^\r\n\]+:\tc4 e3 79 1d 21 02\t\(       \)?vcvtps2ph QWORD PTR \\\[ecx\\\],xmm4,0x2\r
++\[^\r\n\]+:\tc4 e2 7d 13 e4\t\(          \)?vcvtph2ps ymm4,xmm4\r
++\[^\r\n\]+:\tc4 e2 7d 13 21\t\(          \)?vcvtph2ps ymm4,XMMWORD PTR \\\[ecx\\\]\r
++\[^\r\n\]+:\tc4 e2 7d 13 21\t\(          \)?vcvtph2ps ymm4,XMMWORD PTR \\\[ecx\\\]\r
++\[^\r\n\]+:\tc4 e2 79 13 f4\t\(          \)?vcvtph2ps xmm6,xmm4\r
++\[^\r\n\]+:\tc4 e2 79 13 21\t\(          \)?vcvtph2ps xmm4,QWORD PTR \\\[ecx\\\]\r
++\[^\r\n\]+:\tc4 e2 79 13 21\t\(          \)?vcvtph2ps xmm4,QWORD PTR \\\[ecx\\\]\r
++\[^\r\n\]+:\tc4 e3 7d 1d e4 02\t\(       \)?vcvtps2ph xmm4,ymm4,0x2\r
++\[^\r\n\]+:\tc4 e3 7d 1d 21 02\t\(       \)?vcvtps2ph XMMWORD PTR \\\[ecx\\\],ymm4,0x2\r
++\[^\r\n\]+:\tc4 e3 7d 1d 21 02\t\(       \)?vcvtps2ph XMMWORD PTR \\\[ecx\\\],ymm4,0x2\r
++\[^\r\n\]+:\tc4 e3 79 1d e4 02\t\(       \)?vcvtps2ph xmm4,xmm4,0x2\r
++\[^\r\n\]+:\tc4 e3 79 1d 21 02\t\(       \)?vcvtps2ph QWORD PTR \\\[ecx\\\],xmm4,0x2\r
++\[^\r\n\]+:\tc4 e3 79 1d 21 02\t\(       \)?vcvtps2ph QWORD PTR \\\[ecx\\\],xmm4,0x2\r
++\[^\r\n\]+:\tf3 0f ae c3\t\(             \)?rdfsbase ebx\r
++\[^\r\n\]+:\tf3 0f ae cb\t\(             \)?rdgsbase ebx\r
++\[^\r\n\]+:\tf3 0f ae d3\t\(             \)?wrfsbase ebx\r
++\[^\r\n\]+:\tf3 0f ae db\t\(             \)?wrgsbase ebx\r
++\[^\r\n\]+:\tf3 0f ae c3\t\(             \)?rdfsbase ebx\r
++\[^\r\n\]+:\tf3 0f ae cb\t\(             \)?rdgsbase ebx\r
++\[^\r\n\]+:\tf3 0f ae d3\t\(             \)?wrfsbase ebx\r
++\[^\r\n\]+:\tf3 0f ae db\t\(             \)?wrgsbase ebx\r
++End of assembler dump\\." "intel"
diff --git a/SOURCES/gdb-test-pid0-core.patch b/SOURCES/gdb-test-pid0-core.patch
new file mode 100644
index 0000000..4401dcd
--- /dev/null
+++ b/SOURCES/gdb-test-pid0-core.patch
@@ -0,0 +1,92 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-test-pid0-core.patch
+
+;; New test gdb.arch/x86_64-pid0-core.exp for kernel PID 0 cores (BZ 611435).
+;;=fedoratest
+
+https://bugzilla.redhat.com/show_bug.cgi?id=611435
+
+Fix:
+Re: [RFA]corelow.c: Add tid to add_to_thread_list
+http://sourceware.org/ml/gdb-patches/2010-08/msg00085.html
+http://sourceware.org/ml/gdb-cvs/2010-08/msg00026.html
+2e5bcfdef1ec3883d48c3f87a4be5c0dff25e17e
+
+diff --git a/gdb/testsuite/gdb.arch/x86_64-pid0-core.core.bz2.uu b/gdb/testsuite/gdb.arch/x86_64-pid0-core.core.bz2.uu
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.arch/x86_64-pid0-core.core.bz2.uu
+@@ -0,0 +1,20 @@
++begin 600 x86_64-pid0-core.core.bz2
++M0EIH.3%!629362,CA>P!$/'_____^*#EZ-A!SP36P&_:G0#=14``04A&8,'U
++M2*9`>$$)P`*RN"#*;#4R()IJ8C$TT&FC3$&@`T`#:C1H8C0T,@,FC,D"4T2!
++M"/2CU'B90]31ZAD#U`&AZF@/4:``!HT&F@!H<`#0-`-#0``#3$-&F@```#0R
++M``#")2FD]2>4]0TTT-!HTT--,0,"#$`R!I@AD`#1H,3&GZT.4TO$#H40/`0C
++M2$IRXS,<55!8T,&&,R.Z441"?J9I%G6GUA2!.[]Z"C5S[&19,%VS7E6[3"60
++M@`-*2G)QEQ(;?0Y<=MK]/U?Q)LB%+F37TJ9BI*46)H'*Z@V"`"$"P7]&<Q<?
++M>XZ:JE0E<*:#1M$P3G]>VCI)(A!O$64`5$4`E$$-.``7&(09`8HO`B6K!Q^&
++M562%N)2+0@*HB@%D@5$%!*0!L1&0D4D6\:-$A`)`+<6D82PP*H(J(H!?F;0$
++M%PXB7N!2D4!44`W7"ADEQM6<B]J<B(%1GF'5*0;_00KO55=43LPR0,Q?N72`
++M8"W*_;DV<AN#,XRU]Q-J2FDAFKAQ(9A+ZK$MCY#EI8:W-(15>O9TBO5,_]1)
++M($Q2))#),UE,QQK)E$,3D\W.>!4)QO8A_@^Z_SXS<OEHM*+"M8I1)-C(=DIJ
++MW+@WN)O)YO;3:I9YW-A$)N'2<A`F3),R3"3-'"S3E1;6VE*_95KD<!0050(G
++M,JV"N(Z:@0E#)50BSF)$T6_IN)#"Z8PLQ4UQ9]@Z'+;T]990-:Y:2`P26#!D
++MV+0L6"X@C9`GHAGSY7)%LWOY+E[2/>4;Q8=HV6[:&$@2$@$R29IBW)K%3"O`
++M9^Y0YJ&BXY1U2HTZ5)2H-V\_(.DZHWE+C#WS($(!I"3CUH2#(+(OWUV"*<<9
++MJ%A!J[%O.P&V%GI.`L7<1@0>,^1F\MY=V5UT,&NOG%7TTZ[03!@BHB@&)<A^
++4B.Z!/,0-IZ^W_Q=R13A0D",CA>P`
++`
++end
+diff --git a/gdb/testsuite/gdb.arch/x86_64-pid0-core.exp b/gdb/testsuite/gdb.arch/x86_64-pid0-core.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.arch/x86_64-pid0-core.exp
+@@ -0,0 +1,46 @@
++# This testcase is part of GDB, the GNU debugger.
++# 
++# Copyright 2010 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
++
++# Some kernel core files have PID 0 - for the idle task.
++
++if ![istarget "x86_64-*-*"] {
++    verbose "Skipping x86_64-pid0-core test."
++    return
++}
++
++set testfile "x86_64-pid0-core"
++set corebz2uufile ${srcdir}/${subdir}/${testfile}.core.bz2.uu
++set corefile [standard_output_file ${testfile}.core]
++
++if {[catch "system \"uudecode -o - ${corebz2uufile} | bzip2 -dc >${corefile}\""] != 0} {
++    untested "failed uudecode or bzip2"
++    return -1
++}
++file stat ${corefile} corestat
++if {$corestat(size) != 8798208} {
++    untested "uudecode or bzip2 produce invalid result"
++    return -1
++}
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++
++# Former crash was:
++# thread.c:884: internal-error: switch_to_thread: Assertion `inf != NULL' failed.
++gdb_test "core-file ${corefile}" "Program terminated with signal (11|SIGSEGV), Segmentation fault\\.\r\n.*"
diff --git a/SOURCES/gdb-testsuite-readline63-sigint-revert.patch b/SOURCES/gdb-testsuite-readline63-sigint-revert.patch
new file mode 100644
index 0000000..c5e1b2e
--- /dev/null
+++ b/SOURCES/gdb-testsuite-readline63-sigint-revert.patch
@@ -0,0 +1,33 @@
+diff --git b/gdb/testsuite/gdb.gdb/selftest.exp a/gdb/testsuite/gdb.gdb/selftest.exp
+index 7e6a4e1..969797a 100644
+--- b/gdb/testsuite/gdb.gdb/selftest.exp
++++ a/gdb/testsuite/gdb.gdb/selftest.exp
+@@ -451,25 +451,9 @@ proc test_with_self { executable } {
+     }
+     
+     set description "send SIGINT signal to child process"
+-    gdb_test_multiple "signal SIGINT" "$description" {
+-	-re "^signal SIGINT\r\nContinuing with signal SIGINT.\r\nQuit\r\n" {
+-	    pass "$description"
+-	}
+-    }
+-
+-    set description "send ^C to child process again"
+-    send_gdb "\003"
+-    gdb_expect {
+-	-re "(Thread .*|Program) received signal SIGINT.*$gdb_prompt $" {
+-	    pass "$description"
+-	}
+-	-re ".*$gdb_prompt $" {
+-	    fail "$description"
+-	}
+-	timeout {
+-	    fail "$description (timeout)"
+-	}
+-    }
++    gdb_test "signal SIGINT" \
++	"Continuing with signal SIGINT.*" \
++	"$description"
+ 
+     # Switch back to the GDB thread if Guile support is linked in.
+     # "signal SIGINT" could also switch the current thread.
diff --git a/SOURCES/gdb-testsuite-readline63-sigint.patch b/SOURCES/gdb-testsuite-readline63-sigint.patch
new file mode 100644
index 0000000..338895a
--- /dev/null
+++ b/SOURCES/gdb-testsuite-readline63-sigint.patch
@@ -0,0 +1,46 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-testsuite-readline63-sigint.patch
+
+;; [testsuite] Fix false selftest.exp FAIL from system readline-6.3+ (Patrick Palka).
+;;=fedoratest
+
+gdb/users/ppalka/readline-7.0-update
+commit 379059215e823555a37a8dc7e02cef8fd86566e4
+https://sourceware.org/ml/gdb-patches/2015-07/msg00422.html
+Message-Id: <1436927724-4059-1-git-send-email-patrick@parcs.ath.cx>
+https://bugzilla.redhat.com/show_bug.cgi?id=1301175
+
+diff --git a/gdb/testsuite/gdb.gdb/selftest.exp b/gdb/testsuite/gdb.gdb/selftest.exp
+--- a/gdb/testsuite/gdb.gdb/selftest.exp
++++ b/gdb/testsuite/gdb.gdb/selftest.exp
+@@ -113,9 +113,25 @@ proc test_with_self { } {
+     }
+     
+     set description "send SIGINT signal to child process"
+-    gdb_test "signal SIGINT" \
+-	"Continuing with signal SIGINT.*" \
+-	"$description"
++    gdb_test_multiple "signal SIGINT" "$description" {
++	-re "^signal SIGINT\r\nContinuing with signal SIGINT.\r\nQuit\r\n" {
++	    pass "$description"
++	}
++    }
++
++    set description "send ^C to child process again"
++    send_gdb "\003"
++    gdb_expect {
++	-re "(Thread .*|Program) received signal SIGINT.*$gdb_prompt $" {
++	    pass "$description"
++	}
++	-re ".*$gdb_prompt $" {
++	    fail "$description"
++	}
++	timeout {
++	    fail "$description (timeout)"
++	}
++    }
+ 
+     # Switch back to the GDB thread if Guile support is linked in.
+     # "signal SIGINT" could also switch the current thread.
diff --git a/SOURCES/gdb-use-pulongest-aarch64-linux-tdep.patch b/SOURCES/gdb-use-pulongest-aarch64-linux-tdep.patch
new file mode 100644
index 0000000..ebc7b9a
--- /dev/null
+++ b/SOURCES/gdb-use-pulongest-aarch64-linux-tdep.patch
@@ -0,0 +1,44 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Sergio Durigan Junior <sergiodj@redhat.com>
+Date: Thu, 6 Sep 2018 00:22:18 -0400
+Subject: gdb-use-pulongest-aarch64-linux-tdep.patch
+
+;; Use pulongest in aarch64-linux-tdep.c.
+;; This patch was forgotten during the 8.2 release process, and is
+;; needed to unbreak GDB when compiling on 32-bit arches.
+
+Use pulongest in aarch64-linux-tdep.c
+
+While testing a patch on the buildbot, I got this error:
+
+../../binutils-gdb/gdb/aarch64-linux-tdep.c: In function uint64_t aarch64_linux_core_read_vq(gdbarch*, bfd*):
+../../binutils-gdb/gdb/aarch64-linux-tdep.c:285:29: error: format %ld expects argument of type long int, but argument 2 has type uint64_t {aka long long unsigned int} [-Werror=format=]
+
+This patch avoids the problem by using pulongest rather than %ld.
+This seems safe to me because, if aarch64-linux-tdep.c is included in
+the build, then ULONGEST must be a 64-bit type.
+
+gdb/ChangeLog
+2018-08-15  Tom Tromey  <tom@tromey.com>
+
+	* aarch64-linux-tdep.c (aarch64_linux_core_read_vq): Use pulongest.
+
+diff --git a/gdb/aarch64-linux-tdep.c b/gdb/aarch64-linux-tdep.c
+--- a/gdb/aarch64-linux-tdep.c
++++ b/gdb/aarch64-linux-tdep.c
+@@ -282,12 +282,13 @@ aarch64_linux_core_read_vq (struct gdbarch *gdbarch, bfd *abfd)
+   if (vq > AARCH64_MAX_SVE_VQ)
+     {
+       warning (_("SVE Vector length in core file not supported by this version"
+-		 " of GDB.  (VQ=%ld)"), vq);
++		 " of GDB.  (VQ=%s)"), pulongest (vq));
+       return 0;
+     }
+   else if (vq == 0)
+     {
+-      warning (_("SVE Vector length in core file is invalid. (VQ=%ld"), vq);
++      warning (_("SVE Vector length in core file is invalid. (VQ=%s"),
++	       pulongest (vq));
+       return 0;
+     }
+ 
diff --git a/SOURCES/gdb-vla-intel-fix-print-char-array.patch b/SOURCES/gdb-vla-intel-fix-print-char-array.patch
new file mode 100644
index 0000000..944f82b
--- /dev/null
+++ b/SOURCES/gdb-vla-intel-fix-print-char-array.patch
@@ -0,0 +1,61 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Sergio Durigan Junior <sergiodj@redhat.com>
+Date: Thu, 7 Dec 2017 16:20:31 -0500
+Subject: gdb-vla-intel-fix-print-char-array.patch
+
+;; Revert upstream commit 469412dd9ccc4de5874fd3299b105833f36b34cd
+
+Revert commit (only the part touching gdb/f-valprint.c):
+
+  commit 469412dd9ccc4de5874fd3299b105833f36b34cd
+  Author: Christoph Weinmann <christoph.t.weinmann@intel.com>
+  Date:   Fri Sep 8 15:11:47 2017 +0200
+
+      Remove C/C++ relevant code in Fortran specific file.
+
+      Remove code relevant for printing C/C++ Integer values in a
+      Fortran specific file to unify printing of Fortran values.
+      This does not change the output.
+
+And adjust its testcase.
+
+diff --git a/gdb/f-valprint.c b/gdb/f-valprint.c
+--- a/gdb/f-valprint.c
++++ b/gdb/f-valprint.c
+@@ -313,8 +313,22 @@ f_val_print (struct type *type, LONGEST embedded_offset,
+ 				      original_value, &opts, 0, stream);
+ 	}
+       else
+-	val_print_scalar_formatted (type, embedded_offset,
+-				    original_value, options, 0, stream);
++	{
++	  val_print_scalar_formatted (type, embedded_offset,
++				      original_value, options, 0, stream);
++	  /* C and C++ has no single byte int type, char is used instead.
++	     Since we don't know whether the value is really intended to
++	     be used as an integer or a character, print the character
++	     equivalent as well.  */
++	  if (TYPE_LENGTH (type) == 1)
++	    {
++	      LONGEST c;
++
++	      fputs_filtered (" ", stream);
++	      c = unpack_long (type, valaddr + embedded_offset);
++	      LA_PRINT_CHAR ((unsigned char) c, type, stream);
++	    }
++	}
+       break;
+ 
+     case TYPE_CODE_STRUCT:
+diff --git a/gdb/testsuite/gdb.fortran/printing-types.exp b/gdb/testsuite/gdb.fortran/printing-types.exp
+--- a/gdb/testsuite/gdb.fortran/printing-types.exp
++++ b/gdb/testsuite/gdb.fortran/printing-types.exp
+@@ -29,7 +29,7 @@ if {![runto MAIN__]} then {
+ gdb_breakpoint [gdb_get_line_number "write"]
+ gdb_continue_to_breakpoint "write"
+ 
+-gdb_test "print oneByte"	" = 1"
++gdb_test "print oneByte"	" = 1 \'\\\\001\'"
+ gdb_test "print twobytes"	" = 2"
+ gdb_test "print chvalue"	" = \'a\'"
+ gdb_test "print logvalue"	" = \.TRUE\."
diff --git a/SOURCES/gdb-vla-intel-fortran-strides.patch b/SOURCES/gdb-vla-intel-fortran-strides.patch
new file mode 100644
index 0000000..7868efe
--- /dev/null
+++ b/SOURCES/gdb-vla-intel-fortran-strides.patch
@@ -0,0 +1,2023 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-vla-intel-fortran-strides.patch
+
+;; VLA (Fortran dynamic arrays) from Intel + archer-jankratochvil-vla tests.
+;;=push
+
+git diff --stat -p gdb/master...gdb/users/bheckel/fortran-strides
+dbfd7140bf4c0500d1f5d192be781f83f78f7922
+
+ gdb/dwarf2loc.c                             |  46 ++-
+ gdb/dwarf2loc.h                             |   6 +
+ gdb/dwarf2read.c                            |  13 +-
+ gdb/eval.c                                  | 391 +++++++++++++++++++++-----
+ gdb/expprint.c                              |  20 +-
+ gdb/expression.h                            |  18 +-
+ gdb/f-exp.y                                 |  42 ++-
+ gdb/f-valprint.c                            |   8 +-
+ gdb/gdbtypes.c                              |  34 ++-
+ gdb/gdbtypes.h                              |  18 +-
+ gdb/parse.c                                 |  24 +-
+ gdb/rust-exp.y                              |  12 +-
+ gdb/rust-lang.c                             |  17 +-
+ gdb/testsuite/gdb.fortran/static-arrays.exp | 421 ++++++++++++++++++++++++++++
+ gdb/testsuite/gdb.fortran/static-arrays.f90 |  55 ++++
+ gdb/testsuite/gdb.fortran/vla-ptype.exp     |   4 +
+ gdb/testsuite/gdb.fortran/vla-sizeof.exp    |   4 +
+ gdb/testsuite/gdb.fortran/vla-stride.exp    |  44 +++
+ gdb/testsuite/gdb.fortran/vla-stride.f90    |  29 ++
+ gdb/testsuite/gdb.fortran/vla.f90           |  10 +
+ gdb/valarith.c                              |  10 +-
+ gdb/valops.c                                | 197 +++++++++++--
+ gdb/value.h                                 |   2 +
+ 23 files changed, 1242 insertions(+), 183 deletions(-)
+
+diff --git a/gdb/dwarf2loc.c b/gdb/dwarf2loc.c
+--- a/gdb/dwarf2loc.c
++++ b/gdb/dwarf2loc.c
+@@ -2600,11 +2600,14 @@ dwarf2_locexpr_baton_eval (const struct dwarf2_locexpr_baton *dlbaton,
+ /* See dwarf2loc.h.  */
+ 
+ int
+-dwarf2_evaluate_property (const struct dynamic_prop *prop,
++dwarf2_evaluate_property_signed (const struct dynamic_prop *prop,
+ 			  struct frame_info *frame,
+ 			  struct property_addr_info *addr_stack,
+-			  CORE_ADDR *value)
++			  CORE_ADDR *value,
++			  int is_signed)
+ {
++  int rc = 0;
++
+   if (prop == NULL)
+     return 0;
+ 
+@@ -2628,7 +2631,7 @@ dwarf2_evaluate_property (const struct dynamic_prop *prop,
+ 
+ 		*value = value_as_address (val);
+ 	      }
+-	    return 1;
++	    rc = 1;
+ 	  }
+       }
+       break;
+@@ -2650,7 +2653,7 @@ dwarf2_evaluate_property (const struct dynamic_prop *prop,
+ 	    if (!value_optimized_out (val))
+ 	      {
+ 		*value = value_as_address (val);
+-		return 1;
++		rc = 1;
+ 	      }
+ 	  }
+       }
+@@ -2658,8 +2661,8 @@ dwarf2_evaluate_property (const struct dynamic_prop *prop,
+ 
+     case PROP_CONST:
+       *value = prop->data.const_val;
+-      return 1;
+-
++      rc = 1;
++      break;
+     case PROP_ADDR_OFFSET:
+       {
+ 	struct dwarf2_property_baton *baton
+@@ -2680,11 +2683,38 @@ dwarf2_evaluate_property (const struct dynamic_prop *prop,
+ 	  val = value_at (baton->offset_info.type,
+ 			  pinfo->addr + baton->offset_info.offset);
+ 	*value = value_as_address (val);
+-	return 1;
++	rc = 1;
+       }
++      break;
+     }
+ 
+-  return 0;
++  if (rc == 1 && is_signed == 1)
++    {
++      /* If we have a valid return candidate and it's value is signed,
++         we have to sign-extend the value because CORE_ADDR on 64bit machine has
++         8 bytes but address size of an 32bit application is 4 bytes.  */
++      struct gdbarch * gdbarch = target_gdbarch ();
++      const int addr_bit = gdbarch_addr_bit (gdbarch);
++      const CORE_ADDR neg_mask = ((~0) <<  (addr_bit - 1));
++
++      /* Check if signed bit is set and sign-extend values.  */
++      if (*value & (neg_mask))
++	*value |= (neg_mask );
++    }
++  return rc;
++}
++
++int
++dwarf2_evaluate_property (const struct dynamic_prop *prop,
++			  struct frame_info *frame,
++			  struct property_addr_info *addr_stack,
++			  CORE_ADDR *value)
++{
++  return dwarf2_evaluate_property_signed (prop,
++				   frame,
++				   addr_stack,
++				   value,
++				   0);
+ }
+ 
+ /* See dwarf2loc.h.  */
+diff --git a/gdb/dwarf2loc.h b/gdb/dwarf2loc.h
+--- a/gdb/dwarf2loc.h
++++ b/gdb/dwarf2loc.h
+@@ -143,6 +143,12 @@ int dwarf2_evaluate_property (const struct dynamic_prop *prop,
+ 			      struct property_addr_info *addr_stack,
+ 			      CORE_ADDR *value);
+ 
++int dwarf2_evaluate_property_signed (const struct dynamic_prop *prop,
++			      struct frame_info *frame,
++			      struct property_addr_info *addr_stack,
++			      CORE_ADDR *value,
++			      int is_signed);
++
+ /* A helper for the compiler interface that compiles a single dynamic
+    property to C code.
+ 
+diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
+--- a/gdb/dwarf2read.c
++++ b/gdb/dwarf2read.c
+@@ -17566,7 +17566,7 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
+   struct type *base_type, *orig_base_type;
+   struct type *range_type;
+   struct attribute *attr;
+-  struct dynamic_prop low, high;
++  struct dynamic_prop low, high, stride;
+   int low_default_is_valid;
+   int high_bound_is_count = 0;
+   const char *name;
+@@ -17586,7 +17586,9 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
+ 
+   low.kind = PROP_CONST;
+   high.kind = PROP_CONST;
++  stride.kind = PROP_CONST;
+   high.data.const_val = 0;
++  stride.data.const_val = 0;
+ 
+   /* Set LOW_DEFAULT_IS_VALID if current language and DWARF version allow
+      omitting DW_AT_lower_bound.  */
+@@ -17619,6 +17621,14 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
+       break;
+     }
+ 
++  attr = dwarf2_attr (die, DW_AT_byte_stride, cu);
++  if (attr)
++    if (!attr_to_dynamic_prop (attr, die, cu, &stride))
++        complaint (_("Missing DW_AT_byte_stride "
++		     "- DIE at 0x%s [in module %s]"),
++		   sect_offset_str (die->sect_off),
++		   objfile_name (cu->per_cu->dwarf2_per_objfile->objfile));
++
+   attr = dwarf2_attr (die, DW_AT_lower_bound, cu);
+   if (attr)
+     attr_to_dynamic_prop (attr, die, cu, &low);
+@@ -17696,7 +17706,7 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
+       && !TYPE_UNSIGNED (base_type) && (high.data.const_val & negative_mask))
+     high.data.const_val |= negative_mask;
+ 
+-  range_type = create_range_type (NULL, orig_base_type, &low, &high);
++  range_type = create_range_type (NULL, orig_base_type, &low, &high, &stride);
+ 
+   if (high_bound_is_count)
+     TYPE_RANGE_DATA (range_type)->flag_upper_bound_is_count = 1;
+diff --git a/gdb/eval.c b/gdb/eval.c
+--- a/gdb/eval.c
++++ b/gdb/eval.c
+@@ -377,29 +377,325 @@ init_array_element (struct value *array, struct value *element,
+   return index;
+ }
+ 
++/* Evaluates any operation on Fortran arrays or strings with at least
++   one user provided parameter.  Expects the input ARRAY to be either
++   an array, or a string.  Evaluates EXP by incrementing POS, and
++   writes the content from the elt stack into a local struct.  NARGS
++   specifies number of literal or range arguments the user provided.
++   NARGS must be the same number as ARRAY has dimensions.  */
++
+ static struct value *
+-value_f90_subarray (struct value *array,
+-		    struct expression *exp, int *pos, enum noside noside)
++value_f90_subarray (struct value *array, struct expression *exp,
++		    int *pos, int nargs, enum noside noside)
+ {
+-  int pc = (*pos) + 1;
++  int i, dim_count = 0;
+   LONGEST low_bound, high_bound;
+-  struct type *range = check_typedef (TYPE_INDEX_TYPE (value_type (array)));
+-  enum range_type range_type
+-    = (enum range_type) longest_to_int (exp->elts[pc].longconst);
+- 
+-  *pos += 3;
+-
+-  if (range_type == LOW_BOUND_DEFAULT || range_type == BOTH_BOUND_DEFAULT)
+-    low_bound = TYPE_LOW_BOUND (range);
+-  else
+-    low_bound = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside));
++  struct value *new_array = array;
++  struct type *array_type = check_typedef (value_type (new_array));
++  struct type *elt_type;
++
++  typedef struct subscript_range
++  {
++    enum range_type f90_range_type;
++    LONGEST low, high, stride;
++  } subscript_range;
++
++  typedef enum subscript_kind
++  {
++    SUBSCRIPT_RANGE,    /* e.g. "(lowbound:highbound)"  */
++    SUBSCRIPT_INDEX    /* e.g. "(literal)"  */
++  } kind;
++
++  /* Local struct to hold user data for Fortran subarray dimensions.  */
++  struct subscript_store
++  {
++    /* For every dimension, we are either working on a range or an index
++       expression, so we store this info separately for later.  */
++    enum subscript_kind kind;
++
++    /* We also store either the lower and upper bound info, or the index
++       number.  Before evaluation of the input values, we do not know if we are
++       actually working on a range of ranges, or an index in a range.  So as a
++       first step we store all input in a union.  The array calculation itself
++       deals with this later on.  */
++    union element_range
++    {
++      subscript_range range;
++      LONGEST number;
++    } U;
++  } *subscript_array;
++
++  /* Check if the number of arguments provided by the user matches
++     the number of dimension of the array.  A string has only one
++     dimension.  */
++  if (nargs != calc_f77_array_dims (value_type (new_array)))
++    error (_("Wrong number of subscripts"));
++
++  subscript_array = (struct subscript_store*) alloca (sizeof (*subscript_array) * nargs);
++
++  /* Parse the user input into the SUBSCRIPT_ARRAY to store it.  We need
++     to evaluate it first, as the input is from left-to-right.  The
++     array is stored from right-to-left.  So we have to use the user
++     input in reverse order.  Later on, we need the input information to
++     re-calculate the output array.  For multi-dimensional arrays, we
++     can be dealing with any possible combination of ranges and indices
++     for every dimension.  */
++  for (i = 0; i < nargs; i++)
++    {
++      struct subscript_store *index = &subscript_array[i];
+ 
+-  if (range_type == HIGH_BOUND_DEFAULT || range_type == BOTH_BOUND_DEFAULT)
+-    high_bound = TYPE_HIGH_BOUND (range);
+-  else
+-    high_bound = value_as_long (evaluate_subexp (NULL_TYPE, exp, pos, noside));
++      /* The user input is a range, with or without lower and upper bound.
++	 E.g.: "p arry(2:5)", "p arry( :5)", "p arry( : )", etc.  */
++      if (exp->elts[*pos].opcode == OP_RANGE)
++	{
++	  int pc = (*pos) + 1;
++	  subscript_range *range;
++
++	  index->kind = SUBSCRIPT_RANGE;
++	  range = &index->U.range;
++
++	  *pos += 3;
++	  range->f90_range_type = (enum range_type) exp->elts[pc].longconst;
++
++	  /* If a lower bound was provided by the user, the bit has been
++	     set and we can assign the value from the elt stack.  Same for
++	     upper bound.  */
++	  if ((range->f90_range_type & SUBARRAY_LOW_BOUND)
++	      == SUBARRAY_LOW_BOUND)
++	    range->low = value_as_long (evaluate_subexp (NULL_TYPE, exp,
++							 pos, noside));
++	  if ((range->f90_range_type & SUBARRAY_HIGH_BOUND)
++	      == SUBARRAY_HIGH_BOUND)
++	    range->high = value_as_long (evaluate_subexp (NULL_TYPE, exp,
++							  pos, noside));
++
++	  /* Assign the user's stride value if provided.  */
++	  if ((range->f90_range_type & SUBARRAY_STRIDE) == SUBARRAY_STRIDE)
++	    range->stride = value_as_long (evaluate_subexp (NULL_TYPE, exp,
++							     pos, noside));
++
++	  /* Assign the default stride value '1'.  */
++	  else
++	    range->stride = 1;
++
++	  /* Check the provided stride value is illegal, aka '0'.  */
++	  if (range->stride == 0)
++	    error (_("Stride must not be 0"));
++	}
++      /* User input is an index.  E.g.: "p arry(5)".  */
++      else
++	{
++	  struct value *val;
++
++	  index->kind = SUBSCRIPT_INDEX;
++
++	  /* Evaluate each subscript; it must be a legal integer in F77.  This
++	     ensures the validity of the provided index.  */
++	  val = evaluate_subexp_with_coercion (exp, pos, noside);
++	  index->U.number = value_as_long (val);
++	}
++
++    }
++
++  /* Traverse the array from right to left and set the high and low bounds
++     for later use.  */
++  for (i = nargs - 1; i >= 0; i--)
++    {
++      struct subscript_store *index = &subscript_array[i];
++      struct type *index_type = TYPE_INDEX_TYPE (array_type);
++
++      switch (index->kind)
++	{
++	case SUBSCRIPT_RANGE:
++	  {
++
++	    /* When we hit the first range specified by the user, we must
++	       treat any subsequent user entry as a range.  We simply
++	       increment DIM_COUNT which tells us how many times we are
++	       calling VALUE_SLICE_1.  */
++	    subscript_range *range = &index->U.range;
++
++	    /* If no lower bound was provided by the user, we take the
++	       default boundary.  Same for the high bound.  */
++	    if ((range->f90_range_type & SUBARRAY_LOW_BOUND) == 0)
++	      range->low = TYPE_LOW_BOUND (index_type);
++
++	    if ((range->f90_range_type & SUBARRAY_HIGH_BOUND) == 0)
++	      range->high = TYPE_HIGH_BOUND (index_type);
++
++	    /* Both user provided low and high bound have to be inside the
++	       array bounds.  Throw an error if not.  */
++	    if (range->low < TYPE_LOW_BOUND (index_type)
++		|| range->low > TYPE_HIGH_BOUND (index_type)
++		|| range->high < TYPE_LOW_BOUND (index_type)
++		|| range->high > TYPE_HIGH_BOUND (index_type))
++	      error (_("provided bound(s) outside array bound(s)"));
++
++	    /* For a negative stride the lower boundary must be larger than the
++	       upper boundary.
++	       For a positive stride the lower boundary must be smaller than the
++	       upper boundary.  */
++	    if ((range->stride < 0 && range->low < range->high)
++		|| (range->stride > 0 && range->low > range->high))
++	      error (_("Wrong value provided for stride and boundaries"));
++
++	  }
++	  break;
++
++	case SUBSCRIPT_INDEX:
++	  break;
++
++	}
++
++       array_type = TYPE_TARGET_TYPE (array_type);
++    }
++
++  /* Reset ARRAY_TYPE before slicing.*/
++  array_type = check_typedef (value_type (new_array));
++
++  /* Traverse the array from right to left and evaluate each corresponding
++     user input.  VALUE_SUBSCRIPT is called for every index, until a range
++     expression is evaluated.  After a range expression has been evaluated,
++     every subsequent expression is also treated as a range.  */
++  for (i = nargs - 1; i >= 0; i--)
++    {
++      struct subscript_store *index = &subscript_array[i];
++      struct type *index_type = TYPE_INDEX_TYPE (array_type);
++
++      switch (index->kind)
++	{
++	case SUBSCRIPT_RANGE:
++	  {
++
++	    /* When we hit the first range specified by the user, we must
++	       treat any subsequent user entry as a range.  We simply
++	       increment DIM_COUNT which tells us how many times we are
++	       calling VALUE_SLICE_1.  */
++	    subscript_range *range = &index->U.range;
++
++	    /* DIM_COUNT counts every user argument that is treated as a range.
++	       This is necessary for expressions like 'print array(7, 8:9).
++	       Here the first argument is a literal, but must be treated as a
++	       range argument to allow the correct output representation.  */
++	    dim_count++;
++
++	    new_array
++	      = value_slice_1 (new_array, range->low,
++			       range->high - range->low + 1,
++			       range->stride, dim_count);
++	  }
++	  break;
++
++	case SUBSCRIPT_INDEX:
++	  {
++	    /* DIM_COUNT only stays '0' when no range argument was processed
++	       before, starting from the last dimension.  This way we can
++	       reduce the number of dimensions from the result array.
++	       However, if a range has been processed before an index, we
++	       treat the index like a range with equal low- and high bounds
++	       to get the value offset right.  */
++	    if (dim_count == 0)
++	      new_array
++	        = value_subscripted_rvalue (new_array, index->U.number,
++					    f77_get_lowerbound (value_type
++								  (new_array)));
++	    else
++	      {
++		dim_count++;
++
++		/* We might end up here, because we have to treat the provided
++		   index like a range. But now VALUE_SUBSCRIPTED_RVALUE
++		   cannot do the range checks for us. So we have to make sure
++		   ourselves that the user provided index is inside the
++		   array bounds.  Throw an error if not.  */
++		if (index->U.number < TYPE_LOW_BOUND (index_type)
++		    && index->U.number > TYPE_HIGH_BOUND (index_type))
++		  error (_("provided bound(s) outside array bound(s)"));
++
++		if (index->U.number > TYPE_LOW_BOUND (index_type)
++		    && index->U.number > TYPE_HIGH_BOUND (index_type))
++		  error (_("provided bound(s) outside array bound(s)"));
++
++		new_array = value_slice_1 (new_array,
++					   index->U.number,
++					   1, /* COUNT is '1' element  */
++					   1, /* STRIDE set to '1'  */
++					   dim_count);
++	      }
++
++	  }
++	  break;
++	}
++      array_type = TYPE_TARGET_TYPE (array_type);
++    }
++
++  /* With DIM_COUNT > 1 we currently have a one dimensional array, but expect
++     an array of arrays, depending on how many ranges have been provided by
++     the user.  So we need to rebuild the array dimensions for printing it
++     correctly.
++     Starting from right to left in the user input, after we hit the first
++     range argument every subsequent argument is also treated as a range.
++     E.g.:
++     "p ary(3, 7, 2:15)" in Fortran has only 1 dimension, but we calculated 3
++     ranges.
++     "p ary(3, 7:12, 4)" in Fortran has only 1 dimension, but we calculated 2
++     ranges.
++     "p ary(2:4, 5, 7)" in Fortran has only 1 dimension, and we calculated 1
++     range.  */
++  if (dim_count > 1)
++    {
++      struct value *v = NULL;
++
++      elt_type = TYPE_TARGET_TYPE (value_type (new_array));
++
++      /* Every SUBSCRIPT_RANGE in the user input signifies an actual range in
++	 the output array.  So we traverse the SUBSCRIPT_ARRAY again, looking
++	 for a range entry.  When we find one, we use the range info to create
++	 an additional range_type to set the correct bounds and dimensions for
++	 the output array.  In addition, we may have a stride value that is not
++	 '1', forcing us to adjust the number of elements in a range, according
++	 to the stride value.  */
++      for (i = 0; i < nargs; i++)
++	{
++	  struct subscript_store *index = &subscript_array[i];
++
++	  if (index->kind == SUBSCRIPT_RANGE)
++	    {
++	      struct type *range_type, *interim_array_type;
++
++	      int new_length;
+ 
+-  return value_slice (array, low_bound, high_bound - low_bound + 1);
++	      /* The length of a sub-dimension with all elements between the
++		 bounds plus the start element itself.  It may be modified by
++		 a user provided stride value.  */
++	      new_length = index->U.range.high - index->U.range.low;
++
++	      new_length /= index->U.range.stride;
++
++	      range_type
++		= create_static_range_type (NULL,
++					    elt_type,
++					    index->U.range.low,
++					    index->U.range.low + new_length);
++
++	      interim_array_type = create_array_type (NULL,
++						      elt_type,
++						      range_type);
++
++	      TYPE_CODE (interim_array_type)
++		= TYPE_CODE (value_type (new_array));
++
++	      v = allocate_value (interim_array_type);
++
++	      elt_type = value_type (v);
++	    }
++
++	}
++      value_contents_copy (v, 0, new_array, 0, TYPE_LENGTH (elt_type));
++      return v;
++    }
++
++  return new_array;
+ }
+ 
+ 
+@@ -1926,19 +2222,8 @@ evaluate_subexp_standard (struct type *expect_type,
+       switch (code)
+ 	{
+ 	case TYPE_CODE_ARRAY:
+-	  if (exp->elts[*pos].opcode == OP_RANGE)
+-	    return value_f90_subarray (arg1, exp, pos, noside);
+-	  else
+-	    goto multi_f77_subscript;
+-
+ 	case TYPE_CODE_STRING:
+-	  if (exp->elts[*pos].opcode == OP_RANGE)
+-	    return value_f90_subarray (arg1, exp, pos, noside);
+-	  else
+-	    {
+-	      arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
+-	      return value_subscript (arg1, value_as_long (arg2));
+-	    }
++	  return value_f90_subarray (arg1, exp, pos, nargs, noside);
+ 
+ 	case TYPE_CODE_PTR:
+ 	case TYPE_CODE_FUNC:
+@@ -2334,49 +2619,6 @@ evaluate_subexp_standard (struct type *expect_type,
+ 	}
+       return (arg1);
+ 
+-    multi_f77_subscript:
+-      {
+-	LONGEST subscript_array[MAX_FORTRAN_DIMS];
+-	int ndimensions = 1, i;
+-	struct value *array = arg1;
+-
+-	if (nargs > MAX_FORTRAN_DIMS)
+-	  error (_("Too many subscripts for F77 (%d Max)"), MAX_FORTRAN_DIMS);
+-
+-	ndimensions = calc_f77_array_dims (type);
+-
+-	if (nargs != ndimensions)
+-	  error (_("Wrong number of subscripts"));
+-
+-	gdb_assert (nargs > 0);
+-
+-	/* Now that we know we have a legal array subscript expression 
+-	   let us actually find out where this element exists in the array.  */
+-
+-	/* Take array indices left to right.  */
+-	for (i = 0; i < nargs; i++)
+-	  {
+-	    /* Evaluate each subscript; it must be a legal integer in F77.  */
+-	    arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
+-
+-	    /* Fill in the subscript array.  */
+-
+-	    subscript_array[i] = value_as_long (arg2);
+-	  }
+-
+-	/* Internal type of array is arranged right to left.  */
+-	for (i = nargs; i > 0; i--)
+-	  {
+-	    struct type *array_type = check_typedef (value_type (array));
+-	    LONGEST index = subscript_array[i - 1];
+-
+-	    array = value_subscripted_rvalue (array, index,
+-					      f77_get_lowerbound (array_type));
+-	  }
+-
+-	return array;
+-      }
+-
+     case BINOP_LOGICAL_AND:
+       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
+       if (noside == EVAL_SKIP)
+@@ -3293,6 +3535,9 @@ calc_f77_array_dims (struct type *array_type)
+   int ndimen = 1;
+   struct type *tmp_type;
+ 
++  if (TYPE_CODE (array_type) == TYPE_CODE_STRING)
++    return 1;
++
+   if ((TYPE_CODE (array_type) != TYPE_CODE_ARRAY))
+     error (_("Can't get dimensions for a non-array type"));
+ 
+diff --git a/gdb/expprint.c b/gdb/expprint.c
+--- a/gdb/expprint.c
++++ b/gdb/expprint.c
+@@ -578,17 +578,14 @@ print_subexp_standard (struct expression *exp, int *pos,
+ 	  longest_to_int (exp->elts[pc + 1].longconst);
+ 	*pos += 2;
+ 
+-	if (range_type == NONE_BOUND_DEFAULT_EXCLUSIVE
+-	    || range_type == LOW_BOUND_DEFAULT_EXCLUSIVE)
++	if ((range_type & SUBARRAY_HIGH_BOUND_EXCLUSIVE)
++	    == SUBARRAY_HIGH_BOUND_EXCLUSIVE)
+ 	  fputs_filtered ("EXCLUSIVE_", stream);
+ 	fputs_filtered ("RANGE(", stream);
+-	if (range_type == HIGH_BOUND_DEFAULT
+-	    || range_type == NONE_BOUND_DEFAULT
+-	    || range_type == NONE_BOUND_DEFAULT_EXCLUSIVE)
++	if ((range_type & SUBARRAY_LOW_BOUND) == SUBARRAY_LOW_BOUND)
+ 	  print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
+ 	fputs_filtered ("..", stream);
+-	if (range_type == LOW_BOUND_DEFAULT
+-	    || range_type == NONE_BOUND_DEFAULT)
++	if ((range_type & SUBARRAY_HIGH_BOUND) == SUBARRAY_HIGH_BOUND)
+ 	  print_subexp (exp, pos, stream, PREC_ABOVE_COMMA);
+ 	fputs_filtered (")", stream);
+ 	return;
+@@ -1098,22 +1095,24 @@ dump_subexp_body_standard (struct expression *exp,
+ 
+ 	switch (range_type)
+ 	  {
+-	  case BOTH_BOUND_DEFAULT:
++	  case SUBARRAY_NONE_BOUND:
+ 	    fputs_filtered ("Range '..'", stream);
+ 	    break;
+-	  case LOW_BOUND_DEFAULT:
++	  case SUBARRAY_HIGH_BOUND:
+ 	    fputs_filtered ("Range '..EXP'", stream);
+ 	    break;
+-	  case LOW_BOUND_DEFAULT_EXCLUSIVE:
+-	    fputs_filtered ("ExclusiveRange '..EXP'", stream);
+-	    break;
+-	  case HIGH_BOUND_DEFAULT:
++	  case SUBARRAY_LOW_BOUND:
+ 	    fputs_filtered ("Range 'EXP..'", stream);
+ 	    break;
+-	  case NONE_BOUND_DEFAULT:
++	  case (SUBARRAY_LOW_BOUND
++		| SUBARRAY_HIGH_BOUND
++		| SUBARRAY_HIGH_BOUND_EXCLUSIVE):
++	    fputs_filtered ("ExclusiveRange '..EXP'", stream);
++	    break;
++	  case (SUBARRAY_LOW_BOUND | SUBARRAY_HIGH_BOUND):
+ 	    fputs_filtered ("Range 'EXP..EXP'", stream);
+ 	    break;
+-	  case NONE_BOUND_DEFAULT_EXCLUSIVE:
++	  case (SUBARRAY_HIGH_BOUND | SUBARRAY_HIGH_BOUND_EXCLUSIVE):
+ 	    fputs_filtered ("ExclusiveRange 'EXP..EXP'", stream);
+ 	    break;
+ 	  default:
+@@ -1121,11 +1120,9 @@ dump_subexp_body_standard (struct expression *exp,
+ 	    break;
+ 	  }
+ 
+-	if (range_type == HIGH_BOUND_DEFAULT
+-	    || range_type == NONE_BOUND_DEFAULT)
++	if ((range_type & SUBARRAY_LOW_BOUND) == SUBARRAY_LOW_BOUND)
+ 	  elt = dump_subexp (exp, stream, elt);
+-	if (range_type == LOW_BOUND_DEFAULT
+-	    || range_type == NONE_BOUND_DEFAULT)
++	if ((range_type & SUBARRAY_HIGH_BOUND) == SUBARRAY_HIGH_BOUND)
+ 	  elt = dump_subexp (exp, stream, elt);
+       }
+       break;
+diff --git a/gdb/expression.h b/gdb/expression.h
+--- a/gdb/expression.h
++++ b/gdb/expression.h
+@@ -148,28 +148,27 @@ extern void dump_raw_expression (struct expression *,
+ 				 struct ui_file *, const char *);
+ extern void dump_prefix_expression (struct expression *, struct ui_file *);
+ 
+-/* In an OP_RANGE expression, either bound could be empty, indicating
+-   that its value is by default that of the corresponding bound of the
+-   array or string.  Also, the upper end of the range can be exclusive
+-   or inclusive.  So we have six sorts of subrange.  This enumeration
+-   type is to identify this.  */
++/* In an OP_RANGE expression, either bound can be provided by the
++   user, or not.  In addition to this, the user can also specify a
++   stride value to indicated only certain elements of the array.
++   Also, the upper end of the range can be exclusive or inclusive.
++   This enumeration type is to identify this.  */
+ 
+ enum range_type
+-{
+-  /* Neither the low nor the high bound was given -- so this refers to
+-     the entire available range.  */
+-  BOTH_BOUND_DEFAULT,
+-  /* The low bound was not given and the high bound is inclusive.  */
+-  LOW_BOUND_DEFAULT,
+-  /* The high bound was not given and the low bound in inclusive.  */
+-  HIGH_BOUND_DEFAULT,
+-  /* Both bounds were given and both are inclusive.  */
+-  NONE_BOUND_DEFAULT,
+-  /* The low bound was not given and the high bound is exclusive.  */
+-  NONE_BOUND_DEFAULT_EXCLUSIVE,
+-  /* Both bounds were given.  The low bound is inclusive and the high
+-     bound is exclusive.  */
+-  LOW_BOUND_DEFAULT_EXCLUSIVE,
+-};
++  {
++    SUBARRAY_NONE_BOUND = 0x0,		/* "( : )"  */
++    SUBARRAY_LOW_BOUND = 0x1,		/* "(low:)"  */
++    SUBARRAY_HIGH_BOUND = 0x2,		/* "(:high)"  */
++    SUBARRAY_STRIDE = 0x4,		/* "(::stride)"  */
++    /* The low bound was not given and the high bound is exclusive.
++       In this case we always use (SUBARRAY_HIGH_BOUND |
++       SUBARRAY_HIGH_BOUND_EXCLUSIVE).  */
++    SUBARRAY_HIGH_BOUND_EXCLUSIVE = 0x8,
++    /* Both bounds were given.  The low bound is inclusive and the high
++       bound is exclusive.  In this case, we use (SUBARRAY_LOW_BOUND |
++       SUBARRAY_HIGH_BOUND | SUBARRAY_HIGH_BOUND_EXCLUSIVE).  */
++    // SUBARRAY_LOW_BOUND_EXCLUSIVE = (SUBARRAY_LOW_BOUND
++    // 				    | SUBARRAY_HIGH_BOUND_EXCLUSIVE),
++  };
+ 
+ #endif /* !defined (EXPRESSION_H) */
+diff --git a/gdb/f-exp.y b/gdb/f-exp.y
+--- a/gdb/f-exp.y
++++ b/gdb/f-exp.y
+@@ -257,31 +257,63 @@ arglist :	subrange
+    
+ arglist	:	arglist ',' exp   %prec ABOVE_COMMA
+ 			{ arglist_len++; }
++	|	arglist ',' subrange	%prec ABOVE_COMMA
++			{ arglist_len++; }
+ 	;
+ 
+ /* There are four sorts of subrange types in F90.  */
+ 
+ subrange:	exp ':' exp	%prec ABOVE_COMMA
+-			{ write_exp_elt_opcode (pstate, OP_RANGE); 
+-			  write_exp_elt_longcst (pstate, NONE_BOUND_DEFAULT);
++			{ write_exp_elt_opcode (pstate, OP_RANGE);
++			  write_exp_elt_longcst (pstate,
++						 SUBARRAY_LOW_BOUND | SUBARRAY_HIGH_BOUND);
+ 			  write_exp_elt_opcode (pstate, OP_RANGE); }
+ 	;
+ 
+ subrange:	exp ':'	%prec ABOVE_COMMA
+ 			{ write_exp_elt_opcode (pstate, OP_RANGE);
+-			  write_exp_elt_longcst (pstate, HIGH_BOUND_DEFAULT);
++			  write_exp_elt_longcst (pstate, SUBARRAY_LOW_BOUND);
+ 			  write_exp_elt_opcode (pstate, OP_RANGE); }
+ 	;
+ 
+ subrange:	':' exp	%prec ABOVE_COMMA
+ 			{ write_exp_elt_opcode (pstate, OP_RANGE);
+-			  write_exp_elt_longcst (pstate, LOW_BOUND_DEFAULT);
++			  write_exp_elt_longcst (pstate, SUBARRAY_HIGH_BOUND);
+ 			  write_exp_elt_opcode (pstate, OP_RANGE); }
+ 	;
+ 
+ subrange:	':'	%prec ABOVE_COMMA
+ 			{ write_exp_elt_opcode (pstate, OP_RANGE);
+-			  write_exp_elt_longcst (pstate, BOTH_BOUND_DEFAULT);
++			  write_exp_elt_longcst (pstate, SUBARRAY_NONE_BOUND);
++			  write_exp_elt_opcode (pstate, OP_RANGE); }
++	;
++
++/* Each subrange type can have a stride argument.  */
++subrange:	exp ':' exp ':' exp %prec ABOVE_COMMA
++			{ write_exp_elt_opcode (pstate, OP_RANGE);
++			  write_exp_elt_longcst (pstate, SUBARRAY_LOW_BOUND
++						 | SUBARRAY_HIGH_BOUND
++						 | SUBARRAY_STRIDE);
++			  write_exp_elt_opcode (pstate, OP_RANGE); }
++	;
++
++subrange:	exp ':' ':' exp %prec ABOVE_COMMA
++			{ write_exp_elt_opcode (pstate, OP_RANGE);
++			  write_exp_elt_longcst (pstate, SUBARRAY_LOW_BOUND
++						 | SUBARRAY_STRIDE);
++			  write_exp_elt_opcode (pstate, OP_RANGE); }
++	;
++
++subrange:	':' exp ':' exp %prec ABOVE_COMMA
++			{ write_exp_elt_opcode (pstate, OP_RANGE);
++			  write_exp_elt_longcst (pstate, SUBARRAY_HIGH_BOUND
++						 | SUBARRAY_STRIDE);
++			  write_exp_elt_opcode (pstate, OP_RANGE); }
++	;
++
++subrange:	':' ':' exp %prec ABOVE_COMMA
++			{ write_exp_elt_opcode (pstate, OP_RANGE);
++			  write_exp_elt_longcst (pstate, SUBARRAY_STRIDE);
+ 			  write_exp_elt_opcode (pstate, OP_RANGE); }
+ 	;
+ 
+diff --git a/gdb/f-valprint.c b/gdb/f-valprint.c
+--- a/gdb/f-valprint.c
++++ b/gdb/f-valprint.c
+@@ -119,8 +119,14 @@ f77_print_array_1 (int nss, int ndimensions, struct type *type,
+ 
+   if (nss != ndimensions)
+     {
+-      size_t dim_size = TYPE_LENGTH (TYPE_TARGET_TYPE (type));
++      size_t dim_size;
+       size_t offs = 0;
++      LONGEST byte_stride = abs (TYPE_BYTE_STRIDE (range_type));
++
++      if (byte_stride)
++        dim_size = byte_stride;
++      else
++        dim_size = TYPE_LENGTH (TYPE_TARGET_TYPE (type));
+ 
+       for (i = lowerbound;
+ 	   (i < upperbound + 1 && (*elts) < options->print_max);
+diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
+--- a/gdb/gdbtypes.c
++++ b/gdb/gdbtypes.c
+@@ -902,7 +902,8 @@ operator== (const range_bounds &l, const range_bounds &r)
+ struct type *
+ create_range_type (struct type *result_type, struct type *index_type,
+ 		   const struct dynamic_prop *low_bound,
+-		   const struct dynamic_prop *high_bound)
++		   const struct dynamic_prop *high_bound,
++		   const struct dynamic_prop *stride)
+ {
+   if (result_type == NULL)
+     result_type = alloc_type_copy (index_type);
+@@ -917,6 +918,7 @@ create_range_type (struct type *result_type, struct type *index_type,
+     TYPE_ZALLOC (result_type, sizeof (struct range_bounds));
+   TYPE_RANGE_DATA (result_type)->low = *low_bound;
+   TYPE_RANGE_DATA (result_type)->high = *high_bound;
++  TYPE_RANGE_DATA (result_type)->stride = *stride;
+ 
+   if (low_bound->kind == PROP_CONST && low_bound->data.const_val >= 0)
+     TYPE_UNSIGNED (result_type) = 1;
+@@ -945,7 +947,7 @@ struct type *
+ create_static_range_type (struct type *result_type, struct type *index_type,
+ 			  LONGEST low_bound, LONGEST high_bound)
+ {
+-  struct dynamic_prop low, high;
++  struct dynamic_prop low, high, stride;
+ 
+   low.kind = PROP_CONST;
+   low.data.const_val = low_bound;
+@@ -953,7 +955,11 @@ create_static_range_type (struct type *result_type, struct type *index_type,
+   high.kind = PROP_CONST;
+   high.data.const_val = high_bound;
+ 
+-  result_type = create_range_type (result_type, index_type, &low, &high);
++  stride.kind = PROP_CONST;
++  stride.data.const_val = 0;
++
++  result_type = create_range_type (result_type, index_type,
++                                   &low, &high, &stride);
+ 
+   return result_type;
+ }
+@@ -1171,16 +1177,20 @@ create_array_type_with_stride (struct type *result_type,
+       && (!type_not_associated (result_type)
+ 	  && !type_not_allocated (result_type)))
+     {
+-      LONGEST low_bound, high_bound;
++      LONGEST low_bound, high_bound, byte_stride;
+ 
+       if (get_discrete_bounds (range_type, &low_bound, &high_bound) < 0)
+ 	low_bound = high_bound = 0;
+       element_type = check_typedef (element_type);
++      byte_stride = abs (TYPE_BYTE_STRIDE (range_type));
++
+       /* Be careful when setting the array length.  Ada arrays can be
+ 	 empty arrays with the high_bound being smaller than the low_bound.
+ 	 In such cases, the array length should be zero.  */
+       if (high_bound < low_bound)
+ 	TYPE_LENGTH (result_type) = 0;
++      else if (byte_stride > 0)
++	TYPE_LENGTH (result_type) = byte_stride * (high_bound - low_bound + 1);
+       else if (bit_stride > 0)
+ 	TYPE_LENGTH (result_type) =
+ 	  (bit_stride * (high_bound - low_bound + 1) + 7) / 8;
+@@ -1981,12 +1991,12 @@ resolve_dynamic_range (struct type *dyn_range_type,
+   CORE_ADDR value;
+   struct type *static_range_type, *static_target_type;
+   const struct dynamic_prop *prop;
+-  struct dynamic_prop low_bound, high_bound;
++  struct dynamic_prop low_bound, high_bound, stride;
+ 
+   gdb_assert (TYPE_CODE (dyn_range_type) == TYPE_CODE_RANGE);
+ 
+   prop = &TYPE_RANGE_DATA (dyn_range_type)->low;
+-  if (dwarf2_evaluate_property (prop, NULL, addr_stack, &value))
++  if (dwarf2_evaluate_property_signed (prop, NULL, addr_stack, &value, 1))
+     {
+       low_bound.kind = PROP_CONST;
+       low_bound.data.const_val = value;
+@@ -1998,7 +2008,7 @@ resolve_dynamic_range (struct type *dyn_range_type,
+     }
+ 
+   prop = &TYPE_RANGE_DATA (dyn_range_type)->high;
+-  if (dwarf2_evaluate_property (prop, NULL, addr_stack, &value))
++  if (dwarf2_evaluate_property_signed (prop, NULL, addr_stack, &value, 1))
+     {
+       high_bound.kind = PROP_CONST;
+       high_bound.data.const_val = value;
+@@ -2013,12 +2023,20 @@ resolve_dynamic_range (struct type *dyn_range_type,
+       high_bound.data.const_val = 0;
+     }
+ 
++  prop = &TYPE_RANGE_DATA (dyn_range_type)->stride;
++  if (dwarf2_evaluate_property_signed (prop, NULL, addr_stack, &value, 1))
++    {
++      stride.kind = PROP_CONST;
++      stride.data.const_val = value;
++    }
++
+   static_target_type
+     = resolve_dynamic_type_internal (TYPE_TARGET_TYPE (dyn_range_type),
+ 				     addr_stack, 0);
+   static_range_type = create_range_type (copy_type (dyn_range_type),
+ 					 static_target_type,
+-					 &low_bound, &high_bound);
++					 &low_bound, &high_bound, &stride);
++
+   TYPE_RANGE_DATA (static_range_type)->flag_bound_evaluated = 1;
+   return static_range_type;
+ }
+diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h
+--- a/gdb/gdbtypes.h
++++ b/gdb/gdbtypes.h
+@@ -612,6 +612,10 @@ struct range_bounds
+ 
+   struct dynamic_prop high;
+ 
++  /* * Stride of range.  */
++
++  struct dynamic_prop stride;
++
+   /* True if HIGH range bound contains the number of elements in the
+      subrange. This affects how the final hight bound is computed.  */
+ 
+@@ -776,7 +780,6 @@ struct main_type
+     /* * Union member used for range types.  */
+ 
+     struct range_bounds *bounds;
+-
+   } flds_bnds;
+ 
+   /* * Slot to point to additional language-specific fields of this
+@@ -1329,6 +1332,15 @@ extern bool set_type_align (struct type *, ULONGEST);
+   TYPE_RANGE_DATA(range_type)->high.kind
+ #define TYPE_LOW_BOUND_KIND(range_type) \
+   TYPE_RANGE_DATA(range_type)->low.kind
++#define TYPE_BYTE_STRIDE(range_type) \
++  TYPE_RANGE_DATA(range_type)->stride.data.const_val
++#define TYPE_BYTE_STRIDE_BLOCK(range_type) \
++  TYPE_RANGE_DATA(range_type)->stride.data.locexpr
++#define TYPE_BYTE_STRIDE_LOCLIST(range_type) \
++  TYPE_RANGE_DATA(range_type)->stride.data.loclist
++#define TYPE_BYTE_STRIDE_KIND(range_type) \
++  TYPE_RANGE_DATA(range_type)->stride.kind
++
+ 
+ /* Property accessors for the type data location.  */
+ #define TYPE_DATA_LOCATION(thistype) \
+@@ -1363,6 +1375,9 @@ extern bool set_type_align (struct type *, ULONGEST);
+    TYPE_HIGH_BOUND_UNDEFINED(TYPE_INDEX_TYPE(arraytype))
+ #define TYPE_ARRAY_LOWER_BOUND_IS_UNDEFINED(arraytype) \
+    TYPE_LOW_BOUND_UNDEFINED(TYPE_INDEX_TYPE(arraytype))
++#define TYPE_ARRAY_STRIDE_IS_UNDEFINED(arraytype) \
++   (TYPE_BYTE_STRIDE(TYPE_INDEX_TYPE(arraytype)) == 0)
++
+ 
+ #define TYPE_ARRAY_UPPER_BOUND_VALUE(arraytype) \
+    (TYPE_HIGH_BOUND(TYPE_INDEX_TYPE((arraytype))))
+@@ -1892,6 +1907,7 @@ extern struct type *create_array_type_with_stride
+    struct dynamic_prop *, unsigned int);
+ 
+ extern struct type *create_range_type (struct type *, struct type *,
++				       const struct dynamic_prop *,
+ 				       const struct dynamic_prop *,
+ 				       const struct dynamic_prop *);
+ 
+diff --git a/gdb/parse.c b/gdb/parse.c
+--- a/gdb/parse.c
++++ b/gdb/parse.c
+@@ -989,24 +989,20 @@ operator_length_standard (const struct expression *expr, int endpos,
+ 
+     case OP_RANGE:
+       oplen = 3;
++      args = 0;
+       range_type = (enum range_type)
+ 	longest_to_int (expr->elts[endpos - 2].longconst);
+ 
+-      switch (range_type)
+-	{
+-	case LOW_BOUND_DEFAULT:
+-	case LOW_BOUND_DEFAULT_EXCLUSIVE:
+-	case HIGH_BOUND_DEFAULT:
+-	  args = 1;
+-	  break;
+-	case BOTH_BOUND_DEFAULT:
+-	  args = 0;
+-	  break;
+-	case NONE_BOUND_DEFAULT:
+-	case NONE_BOUND_DEFAULT_EXCLUSIVE:
+-	  args = 2;
+-	  break;
+-	}
++      /* Increment the argument counter for each argument
++	 provided by the user.  */
++      if ((range_type & SUBARRAY_LOW_BOUND) == SUBARRAY_LOW_BOUND)
++	args++;
++
++      if ((range_type & SUBARRAY_HIGH_BOUND) == SUBARRAY_HIGH_BOUND)
++	args++;
++
++      if ((range_type & SUBARRAY_STRIDE) == SUBARRAY_STRIDE)
++	args++;
+ 
+       break;
+ 
+diff --git a/gdb/rust-exp.y b/gdb/rust-exp.y
+--- a/gdb/rust-exp.y
++++ b/gdb/rust-exp.y
+@@ -2478,24 +2478,28 @@ convert_ast_to_expression (struct parser_state *state,
+ 
+     case OP_RANGE:
+       {
+-	enum range_type kind = BOTH_BOUND_DEFAULT;
++	enum range_type kind = SUBARRAY_NONE_BOUND;
+ 
+ 	if (operation->left.op != NULL)
+ 	  {
+ 	    convert_ast_to_expression (state, operation->left.op, top);
+-	    kind = HIGH_BOUND_DEFAULT;
++	    kind = SUBARRAY_LOW_BOUND;
+ 	  }
+ 	if (operation->right.op != NULL)
+ 	  {
+ 	    convert_ast_to_expression (state, operation->right.op, top);
+-	    if (kind == BOTH_BOUND_DEFAULT)
+-	      kind = (operation->inclusive
+-		      ? LOW_BOUND_DEFAULT : LOW_BOUND_DEFAULT_EXCLUSIVE);
++	    if (kind == SUBARRAY_NONE_BOUND)
++	      {
++		kind = (range_type) SUBARRAY_HIGH_BOUND;
++		if (!operation->inclusive)
++		  kind = (range_type) (kind | SUBARRAY_HIGH_BOUND_EXCLUSIVE);
++	      }
+ 	    else
+ 	      {
+-		gdb_assert (kind == HIGH_BOUND_DEFAULT);
+-		kind = (operation->inclusive
+-			? NONE_BOUND_DEFAULT : NONE_BOUND_DEFAULT_EXCLUSIVE);
++		gdb_assert (kind == SUBARRAY_LOW_BOUND);
++		kind = (range_type) (kind | SUBARRAY_HIGH_BOUND);
++		if (!operation->inclusive)
++		  kind = (range_type) (kind | SUBARRAY_HIGH_BOUND_EXCLUSIVE);
+ 	      }
+ 	  }
+ 	else
+diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c
+--- a/gdb/rust-lang.c
++++ b/gdb/rust-lang.c
+@@ -1149,13 +1149,11 @@ rust_range (struct expression *exp, int *pos, enum noside noside)
+   kind = (enum range_type) longest_to_int (exp->elts[*pos + 1].longconst);
+   *pos += 3;
+ 
+-  if (kind == HIGH_BOUND_DEFAULT || kind == NONE_BOUND_DEFAULT
+-      || kind == NONE_BOUND_DEFAULT_EXCLUSIVE)
++  if ((kind & SUBARRAY_LOW_BOUND) == SUBARRAY_LOW_BOUND)
+     low = evaluate_subexp (NULL_TYPE, exp, pos, noside);
+-  if (kind == LOW_BOUND_DEFAULT || kind == LOW_BOUND_DEFAULT_EXCLUSIVE
+-      || kind == NONE_BOUND_DEFAULT || kind == NONE_BOUND_DEFAULT_EXCLUSIVE)
++  if ((kind & SUBARRAY_HIGH_BOUND) == SUBARRAY_HIGH_BOUND)
+     high = evaluate_subexp (NULL_TYPE, exp, pos, noside);
+-  bool inclusive = (kind == NONE_BOUND_DEFAULT || kind == LOW_BOUND_DEFAULT);
++  bool inclusive = (!((kind & SUBARRAY_HIGH_BOUND_EXCLUSIVE) == SUBARRAY_HIGH_BOUND_EXCLUSIVE));
+ 
+   if (noside == EVAL_SKIP)
+     return value_from_longest (builtin_type (exp->gdbarch)->builtin_int, 1);
+@@ -1244,7 +1242,7 @@ rust_compute_range (struct type *type, struct value *range,
+ 
+   *low = 0;
+   *high = 0;
+-  *kind = BOTH_BOUND_DEFAULT;
++  *kind = SUBARRAY_NONE_BOUND;
+ 
+   if (TYPE_NFIELDS (type) == 0)
+     return;
+@@ -1252,15 +1250,14 @@ rust_compute_range (struct type *type, struct value *range,
+   i = 0;
+   if (strcmp (TYPE_FIELD_NAME (type, 0), "start") == 0)
+     {
+-      *kind = HIGH_BOUND_DEFAULT;
++      *kind = SUBARRAY_LOW_BOUND;
+       *low = value_as_long (value_field (range, 0));
+       ++i;
+     }
+   if (TYPE_NFIELDS (type) > i
+       && strcmp (TYPE_FIELD_NAME (type, i), "end") == 0)
+     {
+-      *kind = (*kind == BOTH_BOUND_DEFAULT
+-	       ? LOW_BOUND_DEFAULT : NONE_BOUND_DEFAULT);
++      *kind = (range_type) (*kind | SUBARRAY_HIGH_BOUND);
+       *high = value_as_long (value_field (range, i));
+ 
+       if (rust_inclusive_range_type_p (type))
+@@ -1278,7 +1275,7 @@ rust_subscript (struct expression *exp, int *pos, enum noside noside,
+   struct type *rhstype;
+   LONGEST low, high_bound;
+   /* Initialized to appease the compiler.  */
+-  enum range_type kind = BOTH_BOUND_DEFAULT;
++  enum range_type kind = SUBARRAY_NONE_BOUND;
+   LONGEST high = 0;
+   int want_slice = 0;
+ 
+@@ -1376,7 +1373,7 @@ rust_subscript (struct expression *exp, int *pos, enum noside noside,
+ 	error (_("Cannot subscript non-array type"));
+ 
+       if (want_slice
+-	  && (kind == BOTH_BOUND_DEFAULT || kind == LOW_BOUND_DEFAULT))
++	  && ((kind & SUBARRAY_LOW_BOUND) != SUBARRAY_LOW_BOUND))
+ 	low = low_bound;
+       if (low < 0)
+ 	error (_("Index less than zero"));
+@@ -1394,7 +1391,7 @@ rust_subscript (struct expression *exp, int *pos, enum noside noside,
+ 	  CORE_ADDR addr;
+ 	  struct value *addrval, *tem;
+ 
+-	  if (kind == BOTH_BOUND_DEFAULT || kind == HIGH_BOUND_DEFAULT)
++	  if ((kind & SUBARRAY_HIGH_BOUND) != SUBARRAY_HIGH_BOUND)
+ 	    high = high_bound;
+ 	  if (high < 0)
+ 	    error (_("High index less than zero"));
+diff --git a/gdb/testsuite/gdb.fortran/static-arrays.exp b/gdb/testsuite/gdb.fortran/static-arrays.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.fortran/static-arrays.exp
+@@ -0,0 +1,421 @@
++# Copyright 2015 Free Software Foundation, Inc.
++#
++# Contributed by Intel Corp. <christoph.t.weinmann@intel.com>
++#
++# 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++standard_testfile static-arrays.f90
++
++if { [prepare_for_testing $testfile.exp $testfile $srcfile {debug f90}] } {
++    return -1
++}
++
++if ![runto MAIN__] then {
++    perror "couldn't run to breakpoint MAIN__"
++    continue
++}
++
++gdb_breakpoint [gdb_get_line_number "BP1"]
++gdb_continue_to_breakpoint "BP1" ".*BP1.*"
++
++# Tests subarrays of one dimensional arrays with subrange variations
++gdb_test "print ar1" "\\$\[0-9\]+ = \\(1, 2, 3, 4, 5, 6, 7, 8, 9\\)" \
++		"print ar1."
++gdb_test "print ar1\(4:7\)" "\\$\[0-9\]+ = \\(4, 5, 6, 7\\)" \
++		"print ar1\(4:7\)"
++gdb_test "print ar1\(8:\)" "\\$\[0-9\]+ = \\(8, 9\\).*" \
++		"print ar1\(8:\)"
++gdb_test "print ar1\(:3\)" "\\$\[0-9\]+ = \\(1, 2, 3\\).*" \
++		"print ar1\(:3\)"
++gdb_test "print ar1\(:\)" "\\$\[0-9\]+ = \\(1, 2, 3, 4, 5, 6, 7, 8, 9\\)" \
++		"print ar1\(:\)"
++
++# Check assignment
++gdb_test_no_output "set \$my_ary = ar1\(3:8\)"
++gdb_test "print \$my_ary" \
++		"\\$\[0-9\]+ = \\(3, 4, 5, 6, 7, 8\\)" \
++		"Assignment of subarray to variable"
++gdb_test_no_output "set ar1\(5\) = 42"
++		gdb_test "print ar1\(3:8\)" \
++		"\\$\[0-9\]+ = \\(3, 4, 42, 6, 7, 8\\)" \
++		"print ar1\(3:8\) after assignment"
++gdb_test "print \$my_ary" \
++		"\\$\[0-9\]+ = \\(3, 4, 5, 6, 7, 8\\)" \
++		"Assignment of subarray to variable after original array changed"
++
++# Test for subarrays of one dimensional arrays with literals
++		gdb_test "print ar1\(3\)" "\\$\[0-9\]+ = 3" \
++		"print ar1\(3\)"
++
++# Tests for subranges of 2 dimensional arrays with subrange variations
++gdb_test "print ar2\(2:3, 3:4\)" \
++		"\\$\[0-9\]+ = \\(\\( 23, 33\\) \\( 24, 34\\) \\)" \
++		"print ar2\(2:3, 3:4\)."
++gdb_test "print ar2\(8:9,8:\)" \
++		"\\$\[0-9\]+ = \\(\\( 88, 98\\) \\( 89, 99\\) \\)" \
++		"print ar2\(8:9,8:\)"
++gdb_test "print ar2\(8:9,:2\)" \
++		"\\$\[0-9\]+ = \\(\\( 81, 91\\) \\( 82, 92\\) \\)" \
++		"print ar2\(8:9,:2\)"
++
++gdb_test "print ar2\(8:,8:9\)" \
++		"\\$\[0-9\]+ = \\(\\( 88, 98\\) \\( 89, 99\\) \\)" \
++		"print ar2\(8:,8:9\)"
++gdb_test "print ar2\(8:,8:\)" \
++		"\\$\[0-9\]+ = \\(\\( 88, 98\\) \\( 89, 99\\) \\)" \
++		"print ar2\(8:,8:\)"
++gdb_test "print ar2\(8:,:2\)" \
++		"\\$\[0-9\]+ = \\(\\( 81, 91\\) \\( 82, 92\\) \\)" \
++		"print ar2\(8:,:2\)"
++
++gdb_test "print ar2\(:2,2:3\)" \
++		"\\$\[0-9\]+ = \\(\\( 12, 22\\) \\( 13, 23\\) \\)" \
++		"print ar2\(:2,2:3\)"
++gdb_test "print ar2\(:2,8:\)" \
++		"\\$\[0-9\]+ = \\(\\( 18, 28\\) \\( 19, 29\\) \\)" \
++		"print ar2\(:2,8:\)"
++gdb_test "print ar2\(:2,:2\)" \
++		"\\$\[0-9\]+ = \\(\\( 11, 21\\) \\( 12, 22\\) \\)" \
++		"print ar2\(:2,:2\)"
++
++# Test subranges of 2 dimensional arrays with literals and subrange variations
++gdb_test "print ar2\(7, 3:6\)" \
++		"\\$\[0-9\]+ = \\(73, 74, 75, 76\\)" \
++		"print ar2\(7, 3:6\)"
++gdb_test "print ar2\(7,8:\)" \
++		"\\$\[0-9\]+ = \\(78, 79\\)" \
++		"print ar2\(7,8:\)"
++gdb_test "print ar2\(7,:2\)" \
++		"\\$\[0-9\]+ = \\(71, 72\\)" \
++		"print ar2\(7,:2\)"
++
++gdb_test "print ar2\(7:8,4\)" \
++		"\\$\[0-9\]+ = \\(74, 84\\)" \
++		"print ar2(7:8,4\)"
++gdb_test "print ar2\(8:,4\)" \
++		"\\$\[0-9\]+ = \\(84, 94\\)" \
++		"print ar2\(8:,4\)"
++gdb_test "print ar2\(:2,4\)" \
++		"\\$\[0-9\]+ = \\(14, 24\\)" \
++		"print ar2\(:2,4\)"
++gdb_test "print ar2\(3,4\)" \
++		"\\$\[0-9\]+ = 34" \
++		"print ar2\(3,4\)"
++
++# Test subarrays of 3 dimensional arrays with literals and subrange variations
++gdb_test "print ar3\(2:4,3:4,7:8\)" \
++		"\\$\[0-9\]+ = \\(\\( \\( 237, 337, 437\\) \\( 247, 347, 447\\)\
++		 \\) \\( \\( 238, 338, 438\\) \\( 248, 348, 448\\) \\) \\)" \
++		"print ar3\(2:4,3:4,7:8\)"
++gdb_test "print ar3\(2:3,4:5,8:\)" \
++		"\\$\[0-9\]+ = \\(\\( \\( 248, 348\\) \\( 258, 358\\) \\) \\(\
++		 \\( 249, 349\\) \\( 259, 359\\) \\) \\)" \
++		"print ar3\(2:3,4:5,8:\)"
++gdb_test "print ar3\(2:3,4:5,:2\)" \
++		"\\$\[0-9\]+ = \\(\\( \\( 241, 341\\) \\( 251, 351\\) \\) \\(\
++		 \\( 242, 342\\) \\( 252, 352\\) \\) \\)" \
++		"print ar3\(2:3,4:5,:2\)"
++
++gdb_test "print ar3\(2:3,8:,7:8\)" \
++		"\\$\[0-9\]+ = \\(\\( \\( 287, 387\\) \\( 297, 397\\) \\) \\(\
++		 \\( 288, 388\\) \\( 298, 398\\) \\) \\)" \
++		"print ar3\(2:3,8:,7:8\)"
++gdb_test "print ar3\(2:3,8:,8:\)" \
++		"\\$\[0-9\]+ = \\(\\( \\( 288, 388\\) \\( 298, 398\\) \\) \\(\
++		 \\( 289, 389\\) \\( 299, 399\\) \\) \\)" \
++		"print ar3\(2:3,8:,8:\)"
++gdb_test "print ar3\(2:3,8:,:2\)" \
++		"\\$\[0-9\]+ = \\(\\( \\( 281, 381\\) \\( 291, 391\\) \\) \\(\
++		 \\( 282, 382\\) \\( 292, 392\\) \\) \\)" \
++		"print ar3\(2:3,8:,:2\)"
++
++gdb_test "print ar3\(2:3,:2,7:8\)" \
++		"\\$\[0-9\]+ = \\(\\( \\( 217, 317\\) \\( 227, 327\\) \\) \\(\
++		 \\( 218, 318\\) \\( 228, 328\\) \\) \\)" \
++		"print ar3\(2:3,:2,7:8\)"
++gdb_test "print ar3\(2:3,:2,8:\)" \
++		"\\$\[0-9\]+ = \\(\\( \\( 218, 318\\) \\( 228, 328\\) \\) \\(\
++		 \\( 219, 319\\) \\( 229, 329\\) \\) \\)" \
++		"print ar3\(2:3,:2,8:\)"
++gdb_test "print ar3\(2:3,:2,:2\)" \
++		"\\$\[0-9\]+ = \\(\\( \\( 211, 311\\) \\( 221, 321\\) \\) \\(\
++		 \\( 212, 312\\) \\( 222, 322\\) \\) \\)" \
++		"print ar3\(2:3,:2,:2\)"
++
++gdb_test "print ar3\(8:,3:4,7:8\)" \
++		"\\$\[0-9\]+ = \\(\\( \\( 837, 937\\) \\( 847, 947\\) \\) \\(\
++		 \\( 838, 938\\) \\( 848, 948\\) \\) \\)" \
++		"print ar3\(8:,3:4,7:8\)"
++gdb_test "print ar3\(8:,4:5,8:\)" \
++		"\\$\[0-9\]+ = \\(\\( \\( 848, 948\\) \\( 858, 958\\) \\) \\(\
++		 \\( 849, 949\\) \\( 859, 959\\) \\) \\)" \
++		"print ar3\(8:,4:5,8:\)"
++gdb_test "print ar3\(8:,4:5,:2\)" \
++		"\\$\[0-9\]+ = \\(\\( \\( 841, 941\\) \\( 851, 951\\) \\) \\(\
++		 \\( 842, 942\\) \\( 852, 952\\) \\) \\)" \
++		"print ar3\(8:,4:5,:2\)"
++
++gdb_test "print ar3\(8:,8:,7:8\)" \
++		"\\$\[0-9\]+ = \\(\\( \\( 887, 987\\) \\( 897, 997\\) \\) \\(\
++		 \\( 888, 988\\) \\( 898, 998\\) \\) \\)" \
++		"print ar3\(8:,8:,7:8\)"
++gdb_test "print ar3\(8:,8:,8:\)" \
++		"\\$\[0-9\]+ = \\(\\( \\( 888, 988\\) \\( 898, 998\\) \\) \\(\
++		 \\( 889, 989\\) \\( 899, 999\\) \\) \\)" \
++		"print ar3\(8:,8:,8:\)"
++gdb_test "print ar3\(8:,8:,:2\)" \
++		"\\$\[0-9\]+ = \\(\\( \\( 881, 981\\) \\( 891, 991\\) \\) \\(\
++		 \\( 882, 982\\) \\( 892, 992\\) \\) \\)" \
++		"print ar3\(8:,8:,:2\)"
++
++gdb_test "print ar3\(8:,:2,7:8\)" \
++		"\\$\[0-9\]+ = \\(\\( \\( 817, 917\\) \\( 827, 927\\) \\) \\(\
++		 \\( 818, 918\\) \\( 828, 928\\) \\) \\)" \
++		"print ar3\(8:,:2,7:8\)"
++gdb_test "print ar3\(8:,:2,8:\)" \
++		"\\$\[0-9\]+ = \\(\\( \\( 818, 918\\) \\( 828, 928\\) \\) \\(\
++		 \\( 819, 919\\) \\( 829, 929\\) \\) \\)" \
++		"print ar3\(8:,:2,8:\)"
++gdb_test "print ar3\(8:,:2,:2\)" \
++		"\\$\[0-9\]+ = \\(\\( \\( 811, 911\\) \\( 821, 921\\) \\) \\(\
++		 \\( 812, 912\\) \\( 822, 922\\) \\) \\)" \
++		"print ar3\(8:,:2,:2\)"
++
++
++gdb_test "print ar3\(:2,3:4,7:8\)" \
++		"\\$\[0-9\]+ = \\(\\( \\( 137, 237\\) \\( 147, 247\\) \\) \\(\
++		 \\( 138, 238\\) \\( 148, 248\\) \\) \\)" \
++		"print ar3 \(:2,3:4,7:8\)."
++gdb_test "print ar3\(:2,3:4,8:\)" \
++		"\\$\[0-9\]+ = \\(\\( \\( 138, 238\\) \\( 148, 248\\) \\) \\(\
++		 \\( 139, 239\\) \\( 149, 249\\) \\) \\)" \
++		"print ar3\(:2,3:4,8:\)"
++gdb_test "print ar3\(:2,3:4,:2\)" \
++		"\\$\[0-9\]+ = \\(\\( \\( 131, 231\\) \\( 141, 241\\) \\) \\(\
++		 \\( 132, 232\\) \\( 142, 242\\) \\) \\)" \
++		"print ar3\(:2,3:4,:2\)"
++
++gdb_test "print ar3\(:2,8:,7:8\)" "\\$\[0-9\]+ = \\(\\( \\( 187, 287\\) \\(\
++		 197, 297\\) \\) \\( \\( 188, 288\\) \\( 198, 298\\) \\) \\)" \
++		"print ar3\(:2,8:,7:8\)"
++gdb_test "print ar3\(:2,8:,8:\)" "\\$\[0-9\]+ = \\(\\( \\( 188, 288\\) \\( 198,\
++		 298\\) \\) \\( \\( 189, 289\\) \\( 199, 299\\) \\) \\)" \
++		"print ar3\(:2,8:,8:\)"
++gdb_test "print ar3\(:2,8:,:2\)" "\\$\[0-9\]+ = \\(\\( \\( 181, 281\\) \\( 191,\
++		 291\\) \\) \\( \\( 182, 282\\) \\( 192, 292\\) \\) \\)" \
++		"print ar3\(:2,8:,:2\)"
++
++gdb_test "print ar3\(:2,:2,7:8\)" \
++		"\\$\[0-9\]+ = \\(\\( \\( 117, 217\\) \\( 127, 227\\) \\) \\(\
++		 \\( 118, 218\\) \\( 128, 228\\) \\) \\)" \
++		"print ar3\(:2,:2,7:8\)"
++gdb_test "print ar3\(:2,:2,8:\)" \
++		"\\$\[0-9\]+ = \\(\\( \\( 118, 218\\) \\( 128, 228\\) \\) \\(\
++		 \\( 119, 219\\) \\( 129, 229\\) \\) \\)" \
++		"print ar3\(:2,:2,8:\)"
++gdb_test "print ar3\(:2,:2,:2\)" \
++		"\\$\[0-9\]+ = \\(\\( \\( 111, 211\\) \\( 121, 221\\) \\) \\(\
++		 \\( 112, 212\\) \\( 122, 222\\) \\) \\)" \
++		"print ar3\(:2,:2,:2\)"
++
++#Tests for subarrays of 3 dimensional arrays with literals and subranges
++gdb_test "print ar3\(3,3:4,7:8\)" \
++		"\\$\[0-9\]+ = \\(\\( 337, 347\\) \\( 338, 348\\) \\)" \
++		"print ar3\(3,3:4,7:8\)"
++gdb_test "print ar3\(3,4:5,8:\)" \
++		"\\$\[0-9\]+ = \\(\\( 348, 358\\) \\( 349, 359\\) \\)" \
++		"print ar3\(3,4:5,8:\)"
++gdb_test "print ar3\(3,4:5,:2\)" \
++		"\\$\[0-9\]+ = \\(\\( 341, 351\\) \\( 342, 352\\) \\)" \
++		"print ar3\(3,4:5,:2\)"
++gdb_test "print ar3\(3,4:5,3\)" \
++		"\\$\[0-9\]+ = \\(343, 353\\)" \
++		"print ar3\(3,4:5,3\)"
++
++gdb_test "print ar3\(2,8:,7:8\)" \
++		"\\$\[0-9\]+ = \\(\\( 287, 297\\) \\( 288, 298\\) \\)" \
++		"print ar3\(2,8:,7:8\)"
++gdb_test "print ar3\(2,8:,8:\)" \
++		"\\$\[0-9\]+ = \\(\\( 288, 298\\) \\( 289, 299\\) \\)" \
++		"print ar3\(2,8:,8:\)"
++gdb_test "print ar3\(2,8:,:2\)"\
++		"\\$\[0-9\]+ = \\(\\( 281, 291\\) \\( 282, 292\\) \\)" \
++		"print ar3\(2,8:,:2\)"
++gdb_test "print ar3\(2,8:,3\)" \
++		"\\$\[0-9\]+ = \\(283, 293\\)" \
++		"print ar3\(2,8:,3\)"
++
++gdb_test "print ar3\(2,:2,7:8\)" \
++		"\\$\[0-9\]+ = \\(\\( 217, 227\\) \\( 218, 228\\) \\)" \
++		"print ar3\(2,:2,7:8\)"
++gdb_test "print ar3\(2,:2,8:\)" \
++		"\\$\[0-9\]+ = \\(\\( 218, 228\\) \\( 219, 229\\) \\)" \
++		"print ar3\(2,:2,8:\)"
++gdb_test "print ar3\(2,:2,:2\)" \
++		"\\$\[0-9\]+ = \\(\\( 211, 221\\) \\( 212, 222\\) \\)" \
++		"print ar3\(2,:2,:2\)"
++gdb_test "print ar3\(2,:2,3\)" \
++		"\\$\[0-9\]+ = \\(213, 223\\)" \
++		"print ar3\(2,:2,3\)"
++
++gdb_test "print ar3\(3,4,7:8\)" \
++		"\\$\[0-9\]+ = \\(347, 348\\)" \
++		"print ar3\(3,4,7:8\)"
++gdb_test "print ar3\(3,4,8:\)" \
++		"\\$\[0-9\]+ = \\(348, 349\\)" \
++i		"print ar3\(3,4,8:\)"
++gdb_test "print ar3\(3,4,:2\)" \
++		"\\$\[0-9\]+ = \\(341, 342\\)" \
++		"print ar3\(3,4,:2\)"
++gdb_test "print ar3\(5,6,7\)" \
++		"\\$\[0-9\]+ = 567" \
++		"print ar3\(5,6,7\)"
++
++gdb_test "print ar3\(3:4,6,7:8\)" \
++		"\\$\[0-9\]+ = \\(\\( 367, 467\\) \\( 368, 468\\) \\)" \
++		"print ar3\(3:4,6,7:8\)"
++gdb_test "print ar3\(3:4,6,8:\)" \
++		"\\$\[0-9\]+ = \\(\\( 368, 468\\) \\( 369, 469\\) \\)" \
++		"print ar3\(3:4,6,8:\)"
++gdb_test "print ar3\(3:4,6,:2\)" \
++		"\\$\[0-9\]+ = \\(\\( 361, 461\\) \\( 362, 462\\) \\)" \
++		"print ar3\(3:4,6,:2\)"
++gdb_test "print ar3\(3:4,6,5\)" \
++		"\\$\[0-9\]+ = \\(365, 465\\)" \
++		"print ar3\(3:4,6,5\)"
++
++gdb_test "print ar3\(8:,6,7:8\)" \
++		"\\$\[0-9\]+ = \\(\\( 867, 967\\) \\( 868, 968\\) \\)" \
++		"print ar3\(8:,6,7:8\)"
++gdb_test "print ar3\(8:,6,8:\)" \
++		"\\$\[0-9\]+ = \\(\\( 868, 968\\) \\( 869, 969\\) \\)" \
++		"print ar3\(8:,6,8:\)"
++gdb_test "print ar3\(8:,6,:2\)" \
++		"\\$\[0-9\]+ = \\(\\( 861, 961\\) \\( 862, 962\\) \\)" \
++		"print ar3\(8:,6,:2\)"
++gdb_test "print ar3\(8:,6,5\)" \
++		"\\$\[0-9\]+ = \\(865, 965\\)" \
++		"print ar3\(8:,6,5\)"
++
++gdb_test "print ar3\(:2,6,7:8\)" \
++		"\\$\[0-9\]+ = \\(\\( 167, 267\\) \\( 168, 268\\) \\)" \
++		"print ar3\(:2,6,7:8\)"
++gdb_test "print ar3\(:2,6,8:\)" \
++		"\\$\[0-9\]+ = \\(\\( 168, 268\\) \\( 169, 269\\) \\)" \
++		"print ar3\(:2,6,8:\)"
++gdb_test "print ar3\(:2,6,:2\)" \
++		"\\$\[0-9\]+ = \\(\\( 161, 261\\) \\( 162, 262\\) \\)" \
++		"print ar3\(:2,6,:2\)"
++gdb_test "print ar3\(:2,6,5\)" \
++		"\\$\[0-9\]+ = \\(165, 265\\)" \
++		"print ar3\(:2,6,5\)"
++
++gdb_test "print ar3\(3:4,5:6,4\)" \
++		"\\$\[0-9\]+ = \\(\\( 354, 454\\) \\( 364, 464\\) \\)" \
++		"print ar2\(3:4,5:6,4\)"
++gdb_test "print ar3\(8:,5:6,4\)" \
++		"\\$\[0-9\]+ = \\(\\( 854, 954\\) \\( 864, 964\\) \\)" \
++		"print ar2\(8:,5:6,4\)"
++gdb_test "print ar3\(:2,5:6,4\)" \
++		"\\$\[0-9\]+ = \\(\\( 154, 254\\) \\( 164, 264\\) \\)" \
++		"print ar2\(:2,5:6,4\)"
++
++# Stride > 1
++gdb_test "print ar1\(2:6:2\)" \
++		"\\$\[0-9\]+ = \\(2, 4, 6\\)" \
++		"print ar1\(2:6:2\)"
++gdb_test "print ar2\(2:6:2,3:4\)" \
++		"\\$\[0-9\]+ = \\(\\( 23, 43, 63\\) \\( 24, 44, 64\\) \\)" \
++		"print ar2\(2:6:2,3:4\)"
++gdb_test "print ar2\(2:6:2,3\)" \
++		"\\$\[0-9\]+ = \\(23, 43, 63\\)" \
++		"print ar2\(2:6:2,3\)"
++gdb_test "print ar3\(2:6:2,3:5:2,4:7:3\)" \
++		"\\$\[0-9\]+ = \\(\\( \\( 234, 434, 634\\) \\( 254, 454, 654\\)\
++		 \\) \\( \\( 237, 437, 637\\) \\( 257, 457, 657\\) \\) \\)" \
++		"print ar3\(2:6:2,3:5:2,4:7:3\)"
++gdb_test "print ar3\(2:6:2,5,4:7:3\)" \
++		"\\$\[0-9\]+ = \\(\\( 254, 454, 654\\) \\( 257, 457, 657\\)\
++		 \\)" \
++		"print ar3\(2:6:2,5,4:7:3\)"
++
++# Stride < 0
++gdb_test "print ar1\(8:2:-2\)" \
++		"\\$\[0-9\]+ = \\(8, 6, 4, 2\\)" \
++		"print ar1\(8:2:-2\)"
++gdb_test "print ar2\(8:2:-2,3:4\)" \
++		"\\$\[0-9\]+ = \\(\\( 83, 63, 43, 23\\) \\( 84, 64, 44, 24\\)\
++		 \\)" \
++		"print ar2\(8:2:-2,3:4\)"
++gdb_test "print ar2\(2:6:2,3\)" \
++		"\\$\[0-9\]+ = \\(23, 43, 63\\)" \
++		"print ar2\(2:6:2,3\)"
++gdb_test "print ar3\(2:3,7:3:-4,4:7:3\)" \
++		"\\$\[0-9\]+ = \\(\\( \\( 274, 374\\) \\( 234, 334\\) \\) \\(\
++		 \\( 277, 377\\) \\( 237, 337\\) \\) \\)" \
++		"print ar3\(2:3,7:3:-4,4:7:3\)"
++gdb_test "print ar3\(2:6:2,5,7:4:-3\)" \
++		"\\$\[0-9\]+ = \\(\\( 257, 457, 657\\) \\( 254, 454, 654\\)\
++		 \\)" \
++		"print ar3\(2:6:2,5,7:4:-3\)"
++
++# Tests with negative and mixed indices
++gdb_test "p ar4\(2:4, -2:1, -15:-14\)" \
++		"\\$\[0-9\]+ = \\(\\( \\( 261, 361, 461\\) \\( 271, 371, 471\\)\
++		 \\( 281, 381, 481\\) \\( 291, 391, 491\\) \\) \\( \\( 262,\
++		 362, 462\\) \\( 272, 372, 472\\) \\( 282, 382, 482\\) \\( 292,\
++		 392, 492\\) \\) \\)" \
++		"print ar4(2:4, -2:1, -15:-14)"
++
++gdb_test "p ar4\(7,-6:2:3,-7\)" \
++                "\\$\[0-9\]+ = \\(729, 759, 789\\)" \
++                "print ar4(7,-6:2:3,-7)"
++
++gdb_test "p ar4\(9:2:-2, -6:2:3, -6:-15:-3\)" \
++                "\\$\[0-9\]+ = \\(\\( \\( 930, 730, 530, 330\\) \\( 960, 760,\
++		 560, 360\\) \\( 990, 790, 590, 390\\) \\) \\( \\( 927, 727,\
++		 527, 327\\) \\( 957, 757, 557, 357\\) \\( 987, 787, 587,\
++		 387\\) \\) \\( \\( 924, 724, 524, 324\\) \\( 954, 754, 554,\
++		 354\\) \\( 984, 784, 584, 384\\) \\) \\( \\( 921, 721, 521,\
++		 321\\) \\( 951, 751, 551, 351\\) \\( 981, 781, 581, 381\\) \\)\
++		 \\)" \
++                "print ar4(9:2:-2, -6:2:3, -6:-15:-3)"
++
++gdb_test "p ar4\(:,:,:\)" \
++                "\\$\[0-9\]+ = \\(\\( \\( 111, 211, 311, 411, 511, 611, 711,\
++		 811, .*" \
++                "print ar4(:,:,:)"
++
++# Provoke error messages for bad user input
++gdb_test "print ar1\(0:4\)" \
++		"provided bound\\(s\\) outside array bound\\(s\\)" \
++		"print ar1\(0:4\)"
++gdb_test "print ar1\(8:12\)" \
++		"provided bound\\(s\\) outside array bound\\(s\\)" \
++		"print ar1\(8:12\)"
++gdb_test "print ar1\(8:2:\)" \
++		"A syntax error in expression, near `\\)'." \
++		"print ar1\(8:2:\)"
++gdb_test "print ar1\(8:2:2\)" \
++		"Wrong value provided for stride and boundaries" \
++		"print ar1\(8:2:2\)"
++gdb_test "print ar1\(2:8:-2\)" \
++		"Wrong value provided for stride and boundaries" \
++		"print ar1\(2:8:-2\)"
++gdb_test "print ar1\(2:7:0\)" \
++		"Stride must not be 0" \
++		"print ar1\(2:7:0\)"
++gdb_test "print ar1\(3:7\) = 42" \
++		"Invalid cast." \
++		"Assignment of value to subarray"
+diff --git a/gdb/testsuite/gdb.fortran/static-arrays.f90 b/gdb/testsuite/gdb.fortran/static-arrays.f90
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.fortran/static-arrays.f90
+@@ -0,0 +1,55 @@
++! Copyright 2015 Free Software Foundation, Inc.
++!
++! Contributed by Intel Corp. <christoph.t.weinmann@intel.com>
++!
++! 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++subroutine sub
++  integer, dimension(9) :: ar1
++  integer, dimension(9,9) :: ar2
++  integer, dimension(9,9,9) :: ar3
++  integer, dimension(10,-7:3, -15:-5) :: ar4
++  integer :: i,j,k
++
++  ar1 = 1
++  ar2 = 1
++  ar3 = 1
++  ar4 = 4
++
++  ! Resulting array ar3 looks like ((( 111, 112, 113, 114,...)))
++  do i = 1, 9, 1
++    ar1(i) = i
++    do j = 1, 9, 1
++      ar2(i,j) = i*10 + j
++      do k = 1, 9, 1
++        ar3(i,j,k) = i*100 + j*10 + k
++      end do
++    end do
++  end do
++
++  do i = 1, 10, 1
++    do j = -7, 3, 1
++      do k = -15, -5, 1
++        ar4(i,j,k) = i*100 + (j+8)*10 + (k+16)
++      end do
++    end do
++  end do
++
++  ar1(1) = 11  !BP1
++  return
++end
++
++program testprog
++  call sub
++end
+diff --git a/gdb/testsuite/gdb.fortran/vla-ptype.exp b/gdb/testsuite/gdb.fortran/vla-ptype.exp
+--- a/gdb/testsuite/gdb.fortran/vla-ptype.exp
++++ b/gdb/testsuite/gdb.fortran/vla-ptype.exp
+@@ -98,3 +98,7 @@ gdb_test "ptype vla2" "type = <not allocated>" "ptype vla2 not allocated"
+ gdb_test "ptype vla2(5, 45, 20)" \
+   "no such vector element \\\(vector not allocated\\\)" \
+   "ptype vla2(5, 45, 20) not allocated"
++
++gdb_breakpoint [gdb_get_line_number "vla1-neg-bounds"]
++gdb_continue_to_breakpoint "vla1-neg-bounds"
++gdb_test "ptype vla1" "type = $real \\(-2:1,-5:4,-3:-1\\)" "ptype vla1 negative bounds"
+diff --git a/gdb/testsuite/gdb.fortran/vla-sizeof.exp b/gdb/testsuite/gdb.fortran/vla-sizeof.exp
+--- a/gdb/testsuite/gdb.fortran/vla-sizeof.exp
++++ b/gdb/testsuite/gdb.fortran/vla-sizeof.exp
+@@ -44,3 +44,7 @@ gdb_test "print sizeof(pvla)" " = 0" "print sizeof non-associated pvla"
+ gdb_breakpoint [gdb_get_line_number "pvla-associated"]
+ gdb_continue_to_breakpoint "pvla-associated"
+ gdb_test "print sizeof(pvla)" " = 4000" "print sizeof associated pvla"
++
++gdb_breakpoint [gdb_get_line_number "vla1-neg-bounds"]
++gdb_continue_to_breakpoint "vla1-neg-bounds"
++gdb_test "print sizeof(vla1)" " = 480" "print sizeof vla1 negative bounds"
+diff --git a/gdb/testsuite/gdb.fortran/vla-stride.exp b/gdb/testsuite/gdb.fortran/vla-stride.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.fortran/vla-stride.exp
+@@ -0,0 +1,44 @@
++# Copyright 2016 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++standard_testfile ".f90"
++
++if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
++    {debug f90 quiet}] } {
++    return -1
++}
++
++if ![runto MAIN__] then {
++    perror "couldn't run to breakpoint MAIN__"
++    continue
++}
++
++gdb_breakpoint [gdb_get_line_number "re-reverse-elements"]
++gdb_continue_to_breakpoint "re-reverse-elements"
++gdb_test "print pvla" " = \\\(1, 2, 3, 4, 5, 6, 7, 8, 9, 10\\\)" \
++  "print re-reverse-elements"
++gdb_test "print pvla(1)" " = 1" "print first re-reverse-element"
++gdb_test "print pvla(10)" " = 10" "print last re-reverse-element"
++
++gdb_breakpoint [gdb_get_line_number "odd-elements"]
++gdb_continue_to_breakpoint "odd-elements"
++gdb_test "print pvla" " = \\\(1, 3, 5, 7, 9\\\)" "print odd-elements"
++gdb_test "print pvla(1)" " = 1" "print first odd-element"
++gdb_test "print pvla(5)" " = 9" "print last odd-element"
++
++gdb_breakpoint [gdb_get_line_number "single-element"]
++gdb_continue_to_breakpoint "single-element"
++gdb_test "print pvla" " = \\\(5\\\)" "print single-element"
++gdb_test "print pvla(1)" " = 5" "print one single-element"
+diff --git a/gdb/testsuite/gdb.fortran/vla-stride.f90 b/gdb/testsuite/gdb.fortran/vla-stride.f90
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.fortran/vla-stride.f90
+@@ -0,0 +1,29 @@
++! Copyright 2016 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++program vla_stride
++  integer, target, allocatable :: vla (:)
++  integer, pointer :: pvla (:)
++
++  allocate(vla(10))
++  vla = (/ (I, I = 1,10) /)
++
++  pvla => vla(10:1:-1)
++  pvla => pvla(10:1:-1)
++  pvla => vla(1:10:2)   ! re-reverse-elements
++  pvla => vla(5:4:-2)   ! odd-elements
++
++  pvla => null()        ! single-element
++end program vla_stride
+diff --git a/gdb/testsuite/gdb.fortran/vla.f90 b/gdb/testsuite/gdb.fortran/vla.f90
+--- a/gdb/testsuite/gdb.fortran/vla.f90
++++ b/gdb/testsuite/gdb.fortran/vla.f90
+@@ -54,4 +54,14 @@ program vla
+ 
+   allocate (vla3 (2,2))               ! vla2-deallocated
+   vla3(:,:) = 13
++
++  allocate (vla1 (-2:1, -5:4, -3:-1))
++  l = allocated(vla1)
++
++  vla1(:, :, :) = 1
++  vla1(-2, -3, -1) = -231
++
++  deallocate (vla1)                   ! vla1-neg-bounds
++  l = allocated(vla1)
++
+ end program vla
+diff --git a/gdb/valarith.c b/gdb/valarith.c
+--- a/gdb/valarith.c
++++ b/gdb/valarith.c
+@@ -187,10 +187,16 @@ value_subscripted_rvalue (struct value *array, LONGEST index, int lowerbound)
+   struct type *array_type = check_typedef (value_type (array));
+   struct type *elt_type = check_typedef (TYPE_TARGET_TYPE (array_type));
+   ULONGEST elt_size = type_length_units (elt_type);
+-  ULONGEST elt_offs = elt_size * (index - lowerbound);
++  LONGEST elt_offs = index - lowerbound;
++  LONGEST elt_stride = TYPE_BYTE_STRIDE (TYPE_INDEX_TYPE (array_type));
++
++  if (elt_stride != 0)
++    elt_offs *= elt_stride;
++  else
++    elt_offs *= elt_size;
+ 
+   if (index < lowerbound || (!TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (array_type)
+-			     && elt_offs >= type_length_units (array_type)))
++			     && abs (elt_offs) >= type_length_units (array_type)))
+     {
+       if (type_not_associated (array_type))
+         error (_("no such vector element (vector not associated)"));
+diff --git a/gdb/valops.c b/gdb/valops.c
+--- a/gdb/valops.c
++++ b/gdb/valops.c
+@@ -3808,56 +3808,195 @@ value_of_this_silent (const struct language_defn *lang)
+ 
+ struct value *
+ value_slice (struct value *array, int lowbound, int length)
++{
++  /* Pass unaltered arguments to VALUE_SLICE_1, plus a default stride
++     value of '1', which returns every element between LOWBOUND and
++     (LOWBOUND + LENGTH).  We also provide a default CALL_COUNT of '1'
++     as we are only considering the highest dimension, or we are
++     working on a one dimensional array.  So we call VALUE_SLICE_1
++     exactly once.  */
++  return value_slice_1 (array, lowbound, length, 1, 1);
++}
++
++/* VALUE_SLICE_1 is called for each array dimension to calculate the number
++   of elements as defined by the subscript expression.
++   CALL_COUNT is used to determine if we are calling the function once, e.g.
++   we are working on the current dimension of ARRAY, or if we are calling
++   the function repeatedly.  In the later case we need to take elements
++   from the TARGET_TYPE of ARRAY.
++   With a CALL_COUNT greater than 1 we calculate the offsets for every element
++   that should be in the result array.  Then we fetch the contents and then
++   copy them into the result array.  The result array will have one dimension
++   less than the input array, so later on we need to recreate the indices and
++   ranges in the calling function.  */
++
++struct value *
++value_slice_1 (struct value *array, int lowbound, int length,
++	       int stride_length, int call_count)
+ {
+   struct type *slice_range_type, *slice_type, *range_type;
+-  LONGEST lowerbound, upperbound;
+-  struct value *slice;
+-  struct type *array_type;
++  struct type *array_type = check_typedef (value_type (array));
++  struct type *elt_type = check_typedef (TYPE_TARGET_TYPE (array_type));
++  unsigned int elt_size, elt_offs;
++  LONGEST ary_high_bound, ary_low_bound;
++  struct value *v;
++  int slice_range_size, i = 0, row_count = 1, elem_count = 1;
+ 
+-  array_type = check_typedef (value_type (array));
++  /* Check for legacy code if we are actually dealing with an array or
++     string.  */
+   if (TYPE_CODE (array_type) != TYPE_CODE_ARRAY
+       && TYPE_CODE (array_type) != TYPE_CODE_STRING)
+     error (_("cannot take slice of non-array"));
+ 
+-  range_type = TYPE_INDEX_TYPE (array_type);
+-  if (get_discrete_bounds (range_type, &lowerbound, &upperbound) < 0)
+-    error (_("slice from bad array or bitstring"));
++  ary_low_bound = TYPE_LOW_BOUND (TYPE_INDEX_TYPE (array_type));
++  ary_high_bound = TYPE_HIGH_BOUND (TYPE_INDEX_TYPE (array_type));
++
++  /* When we are working on a multi-dimensional array, we need to get the
++     attributes of the underlying type.  */
++  if (call_count > 1)
++    {
++      ary_low_bound = TYPE_LOW_BOUND (TYPE_INDEX_TYPE (elt_type));
++      ary_high_bound = TYPE_HIGH_BOUND (TYPE_INDEX_TYPE (elt_type));
++      elt_type = check_typedef (TYPE_TARGET_TYPE (elt_type));
++      row_count = TYPE_LENGTH (array_type)
++		    / TYPE_LENGTH (TYPE_TARGET_TYPE (array_type));
++    }
++
++  /* With a stride of '1', the number of elements per result row is equal to
++     the LENGTH of the subarray.  With non-default stride values, we skip
++     elements, but have to add the start element to the total number of
++     elements per row.  */
++  if (stride_length == 1)
++    elem_count = length;
++  else
++    elem_count = ((length - 1) / stride_length) + 1;
++
++  elt_size = TYPE_LENGTH (elt_type);
++  elt_offs = lowbound - ary_low_bound;
+ 
+-  if (lowbound < lowerbound || length < 0
+-      || lowbound + length - 1 > upperbound)
+-    error (_("slice out of range"));
++  elt_offs *= elt_size;
++
++  /* Check for valid user input.  In case of Fortran this was already done
++     in the calling function.  */
++  if (call_count == 1
++	&& (!TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (array_type)
++	      && elt_offs >= TYPE_LENGTH (array_type)))
++    error (_("no such vector element"));
++
++  /* CALL_COUNT is 1 when we are dealing either with the highest dimension
++     of the array, or a one dimensional array.  Set RANGE_TYPE accordingly.
++     In both cases we calculate how many rows/elements will be in the output
++     array by setting slice_range_size.  */
++  if (call_count == 1)
++    {
++      range_type = TYPE_INDEX_TYPE (array_type);
++      slice_range_size = ary_low_bound + elem_count - 1;
++
++      /* Check if the array bounds are valid.  */
++      if (get_discrete_bounds (range_type, &ary_low_bound, &ary_high_bound) < 0)
++	error (_("slice from bad array or bitstring"));
++    }
++  /* When CALL_COUNT is greater than 1, we are dealing with an array of arrays.
++     So we need to get the type below the current one and set the RANGE_TYPE
++     accordingly.  */
++  else
++    {
++      range_type = TYPE_INDEX_TYPE (TYPE_TARGET_TYPE (array_type));
++      slice_range_size = ary_low_bound + (row_count * elem_count) - 1;
++      ary_low_bound = TYPE_LOW_BOUND (range_type);
++    }
+ 
+   /* FIXME-type-allocation: need a way to free this type when we are
+-     done with it.  */
+-  slice_range_type = create_static_range_type ((struct type *) NULL,
+-					       TYPE_TARGET_TYPE (range_type),
+-					       lowbound,
+-					       lowbound + length - 1);
++      done with it.  */
+ 
++  slice_range_type = create_static_range_type (NULL, TYPE_TARGET_TYPE (range_type),
++					       ary_low_bound, slice_range_size);
+   {
+-    struct type *element_type = TYPE_TARGET_TYPE (array_type);
+-    LONGEST offset
+-      = (lowbound - lowerbound) * TYPE_LENGTH (check_typedef (element_type));
++    struct type *element_type;
++
++    /* When both CALL_COUNT and STRIDE_LENGTH equal 1, we can use the legacy
++       code for subarrays.  */
++    if (call_count == 1 && stride_length == 1)
++      {
++	element_type = TYPE_TARGET_TYPE (array_type);
++
++	slice_type = create_array_type (NULL, element_type, slice_range_type);
+ 
+-    slice_type = create_array_type ((struct type *) NULL,
+-				    element_type,
+-				    slice_range_type);
+-    TYPE_CODE (slice_type) = TYPE_CODE (array_type);
++	TYPE_CODE (slice_type) = TYPE_CODE (array_type);
+ 
+-    if (VALUE_LVAL (array) == lval_memory && value_lazy (array))
+-      slice = allocate_value_lazy (slice_type);
++	if (VALUE_LVAL (array) == lval_memory && value_lazy (array))
++	  v = allocate_value_lazy (slice_type);
++	else
++	  {
++	    v = allocate_value (slice_type);
++	    value_contents_copy (v,
++				 value_embedded_offset (v),
++				 array,
++				 value_embedded_offset (array) + elt_offs,
++				 elt_size * longest_to_int (length));
++	  }
++
++      }
++    /* With a CALL_COUNT or STRIDE_LENGTH are greater than 1 we are working
++       on a range of ranges.  So we copy the relevant elements into the
++       new array we return.  */
+     else
+       {
+-	slice = allocate_value (slice_type);
+-	value_contents_copy (slice, 0, array, offset,
+-			     type_length_units (slice_type));
++	int j, offs_store = elt_offs;
++	LONGEST dst_offset = 0;
++	LONGEST src_row_length = TYPE_LENGTH (TYPE_TARGET_TYPE (array_type));
++
++	if (call_count == 1)
++	  {
++	    /* When CALL_COUNT is equal to 1 we are working on the current range
++	       and use these elements directly.  */
++	    element_type = TYPE_TARGET_TYPE (array_type);
++	  }
++	else
++	  {
++	    /* Working on an array of arrays, the type of the elements is the type
++	       of the subarrays' type.  */
++	    element_type = TYPE_TARGET_TYPE (TYPE_TARGET_TYPE (array_type));
++	  }
++
++	slice_type = create_array_type (NULL, element_type, slice_range_type);
++
++	 /* If we have a one dimensional array, we copy its TYPE_CODE.  For a
++	    multi dimensional array we copy the embedded type's TYPE_CODE.  */
++	if (call_count == 1)
++	  TYPE_CODE (slice_type) = TYPE_CODE (array_type);
++	else
++	  TYPE_CODE (slice_type) = TYPE_CODE (TYPE_TARGET_TYPE (array_type));
++
++	v = allocate_value (slice_type);
++
++	/* Iterate through the rows of the outer array and set the new offset
++	   for each row.  */
++	for (i = 0; i < row_count; i++)
++	  {
++	    elt_offs = offs_store + i * src_row_length;
++
++	    /* Iterate through the elements in each row to copy only those.  */
++	    for (j = 1; j <= elem_count; j++)
++	      {
++		/* Fetches the contents of ARRAY and copies them into V.  */
++		value_contents_copy (v, dst_offset, array, elt_offs, elt_size);
++		elt_offs += elt_size * stride_length;
++		dst_offset += elt_size;
++	      }
++	  }
+       }
+ 
+-    set_value_component_location (slice, array);
+-    set_value_offset (slice, value_offset (array) + offset);
++    set_value_component_location (v, array);
++    if (VALUE_LVAL (v) == lval_register)
++      {
++	VALUE_REGNUM (v) = VALUE_REGNUM (array);
++	VALUE_NEXT_FRAME_ID (v) = VALUE_NEXT_FRAME_ID (array);
++      }
++    set_value_offset (v, value_offset (array) + elt_offs);
+   }
+ 
+-  return slice;
++  return v;
+ }
+ 
+ /* Create a value for a FORTRAN complex number.  Currently most of the
+diff --git a/gdb/value.h b/gdb/value.h
+--- a/gdb/value.h
++++ b/gdb/value.h
+@@ -1139,6 +1139,8 @@ extern struct value *varying_to_slice (struct value *);
+ 
+ extern struct value *value_slice (struct value *, int, int);
+ 
++extern struct value *value_slice_1 (struct value *, int, int, int, int);
++
+ extern struct value *value_literal_complex (struct value *, struct value *,
+ 					    struct type *);
+ 
diff --git a/SOURCES/gdb-vla-intel-fortran-vla-strings.patch b/SOURCES/gdb-vla-intel-fortran-vla-strings.patch
new file mode 100644
index 0000000..49ab71c
--- /dev/null
+++ b/SOURCES/gdb-vla-intel-fortran-vla-strings.patch
@@ -0,0 +1,1354 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-vla-intel-fortran-vla-strings.patch
+
+;;=push
+
+git diff --stat -p gdb/master...gdb/users/bheckel/fortran-vla-strings
+0ad7d8d1a3a36c6e04e3b6d37d8825f18d595723
+
+ gdb/NEWS                                  |   2 +
+ gdb/c-valprint.c                          |  22 +++++
+ gdb/dwarf2read.c                          | 158 +++++++++++++++++++++++++-----
+ gdb/f-typeprint.c                         |  93 +++++++++---------
+ gdb/gdbtypes.c                            |  44 ++++++++-
+ gdb/testsuite/gdb.cp/vla-cxx.cc           |   9 ++
+ gdb/testsuite/gdb.cp/vla-cxx.exp          |   9 ++
+ gdb/testsuite/gdb.fortran/pointers.exp    | 143 +++++++++++++++++++++++++++
+ gdb/testsuite/gdb.fortran/pointers.f90    | 109 +++++++++++++++++++++
+ gdb/testsuite/gdb.fortran/print_type.exp  | 100 +++++++++++++++++++
+ gdb/testsuite/gdb.fortran/vla-ptype.exp   |  12 +--
+ gdb/testsuite/gdb.fortran/vla-strings.exp | 103 +++++++++++++++++++
+ gdb/testsuite/gdb.fortran/vla-strings.f90 |  39 ++++++++
+ gdb/testsuite/gdb.fortran/vla-type.exp    |   7 +-
+ gdb/testsuite/gdb.fortran/vla-value.exp   |  12 ++-
+ gdb/testsuite/gdb.mi/mi-var-child-f.exp   |   7 +-
+ gdb/testsuite/gdb.mi/mi-vla-fortran.exp   |  27 ++---
+ gdb/typeprint.c                           |  19 ++++
+ gdb/valops.c                              |  16 ++-
+ gdb/valprint.c                            |   6 --
+ 20 files changed, 827 insertions(+), 110 deletions(-)
+
+diff --git a/gdb/NEWS b/gdb/NEWS
+--- a/gdb/NEWS
++++ b/gdb/NEWS
+@@ -109,6 +109,8 @@ SH-5/SH64 running OpenBSD 	SH-5/SH64 support in sh*-*-openbsd*
+ 
+ *** Changes in GDB 8.1
+ 
++* Fortran: Support pointers to dynamic types.
++
+ * GDB now supports dynamically creating arbitrary register groups specified
+   in XML target descriptions.  This allows for finer grain grouping of
+   registers on systems with a large amount of registers.
+diff --git a/gdb/c-valprint.c b/gdb/c-valprint.c
+--- a/gdb/c-valprint.c
++++ b/gdb/c-valprint.c
+@@ -653,6 +653,28 @@ c_value_print (struct value *val, struct ui_file *stream,
+       else
+ 	{
+ 	  /* normal case */
++	  if (TYPE_CODE (type) == TYPE_CODE_PTR
++	      && 1 == is_dynamic_type (type))
++	    {
++	      CORE_ADDR addr;
++	      if (NULL != TYPE_DATA_LOCATION (TYPE_TARGET_TYPE (type)))
++		addr = value_address (val);
++	      else
++		addr = value_as_address (val);
++
++	      /* We resolve the target-type only when the
++	         pointer is associated.  */
++	      if ((addr != 0)
++		  && (0 == type_not_associated (type)))
++		  TYPE_TARGET_TYPE (type) =
++		      resolve_dynamic_type (TYPE_TARGET_TYPE (type),
++					    NULL, addr);
++	    }
++	  else
++	    {
++	      /* Do nothing. References are already resolved from the beginning,
++	         only pointers are resolved when we actual need the target.  */
++	    }
+ 	  fprintf_filtered (stream, "(");
+ 	  type_print (value_type (val), "", stream, -1);
+ 	  fprintf_filtered (stream, ") ");
+diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
+--- a/gdb/dwarf2read.c
++++ b/gdb/dwarf2read.c
+@@ -1789,7 +1789,8 @@ static void read_signatured_type (struct signatured_type *);
+ 
+ static int attr_to_dynamic_prop (const struct attribute *attr,
+ 				 struct die_info *die, struct dwarf2_cu *cu,
+-				 struct dynamic_prop *prop);
++				 struct dynamic_prop *prop, const gdb_byte *additional_data,
++				 int additional_data_size);
+ 
+ /* memory allocation interface */
+ 
+@@ -13648,7 +13649,7 @@ read_func_scope (struct die_info *die, struct dwarf2_cu *cu)
+     {
+       newobj->static_link
+ 	= XOBNEW (&objfile->objfile_obstack, struct dynamic_prop);
+-      attr_to_dynamic_prop (attr, die, cu, newobj->static_link);
++      attr_to_dynamic_prop (attr, die, cu, newobj->static_link, NULL, 0);
+     }
+ 
+   cu->list_in_scope = &local_symbols;
+@@ -16329,7 +16330,8 @@ read_array_type (struct die_info *die, struct dwarf2_cu *cu)
+ 
+       byte_stride_prop
+ 	= (struct dynamic_prop *) alloca (sizeof (struct dynamic_prop));
+-      stride_ok = attr_to_dynamic_prop (attr, die, cu, byte_stride_prop);
++      stride_ok = attr_to_dynamic_prop (attr, die, cu, byte_stride_prop,
++					NULL, 0);
+       if (!stride_ok)
+ 	{
+ 	  complaint (_("unable to read array DW_AT_byte_stride "
+@@ -17090,29 +17092,90 @@ read_tag_string_type (struct die_info *die, struct dwarf2_cu *cu)
+   struct gdbarch *gdbarch = get_objfile_arch (objfile);
+   struct type *type, *range_type, *index_type, *char_type;
+   struct attribute *attr;
+-  unsigned int length;
++  unsigned int length = UINT_MAX;
++
++  index_type = objfile_type (objfile)->builtin_int;
++  range_type = create_static_range_type (NULL, index_type, 1, length);
+ 
++  /* If DW_AT_string_length is defined, the length is stored in memory.  */
+   attr = dwarf2_attr (die, DW_AT_string_length, cu);
+   if (attr)
+     {
+-      length = DW_UNSND (attr);
++      if (attr_form_is_block (attr))
++	{
++	  struct attribute *byte_size, *bit_size;
++	  struct dynamic_prop high;
++
++	  byte_size = dwarf2_attr (die, DW_AT_byte_size, cu);
++	  bit_size = dwarf2_attr (die, DW_AT_bit_size, cu);
++
++	  /* DW_AT_byte_size should never occur in combination with
++	     DW_AT_bit_size.  */
++	  if (byte_size != NULL && bit_size != NULL)
++	    complaint (_("DW_AT_byte_size AND "
++			 "DW_AT_bit_size found together at the same time."));
++
++	  /* If DW_AT_string_length AND DW_AT_byte_size exist together,
++	     DW_AT_byte_size describes the number of bytes that should be read
++	     from the length memory location.  */
++	  if (byte_size != NULL)
++	    {
++	      /* Build new dwarf2_locexpr_baton structure with additions to the
++		 data attribute, to reflect DWARF specialities to get address
++		 sizes.  */
++	      const gdb_byte append_ops[] =
++		{
++		/* DW_OP_deref_size: size of an address on the target machine
++		   (bytes), where the size will be specified by the next
++		   operand.  */
++		DW_OP_deref_size,
++		/* Operand for DW_OP_deref_size.  */
++		DW_UNSND(byte_size) };
++
++	      if (!attr_to_dynamic_prop (attr, die, cu, &high, append_ops,
++					 ARRAY_SIZE(append_ops)))
++		complaint (_("Could not parse DW_AT_byte_size"));
++	    }
++	  else if (bit_size != NULL)
++	    complaint (_("DW_AT_string_length AND "
++			 "DW_AT_bit_size found but not supported yet."));
++	  /* If DW_AT_string_length WITHOUT DW_AT_byte_size exist, the default
++	     is the address size of the target machine.  */
++	  else
++	    {
++	      const gdb_byte append_ops[] =
++		{ DW_OP_deref };
++
++	      if (!attr_to_dynamic_prop (attr, die, cu, &high, append_ops,
++					 ARRAY_SIZE(append_ops)))
++		complaint (_("Could not parse DW_AT_string_length"));
++	    }
++
++	  TYPE_RANGE_DATA (range_type)->high = high;
++	}
++      else
++	{
++	  TYPE_HIGH_BOUND (range_type) = DW_UNSND(attr);
++	  TYPE_HIGH_BOUND_KIND (range_type) = PROP_CONST;
++	}
+     }
+   else
+     {
+-      /* Check for the DW_AT_byte_size attribute.  */
++      /* Check for the DW_AT_byte_size attribute, which represents the length
++	 in this case.  */
+       attr = dwarf2_attr (die, DW_AT_byte_size, cu);
+       if (attr)
+-        {
+-          length = DW_UNSND (attr);
+-        }
++	{
++	  TYPE_HIGH_BOUND (range_type) = DW_UNSND(attr);
++	  TYPE_HIGH_BOUND_KIND (range_type) = PROP_CONST;
++	}
+       else
+-        {
+-          length = 1;
+-        }
++	{
++	  TYPE_HIGH_BOUND (range_type) = 1;
++	  TYPE_HIGH_BOUND_KIND (range_type) = PROP_CONST;
++	}
+     }
+ 
+-  index_type = objfile_type (objfile)->builtin_int;
+-  range_type = create_static_range_type (NULL, index_type, 1, length);
+   char_type = language_string_char_type (cu->language_defn, gdbarch);
+   type = create_string_type (NULL, char_type, range_type);
+ 
+@@ -17460,7 +17523,8 @@ read_base_type (struct die_info *die, struct dwarf2_cu *cu)
+ 
+ static int
+ attr_to_dynamic_prop (const struct attribute *attr, struct die_info *die,
+-		      struct dwarf2_cu *cu, struct dynamic_prop *prop)
++		      struct dwarf2_cu *cu, struct dynamic_prop *prop,
++		      const gdb_byte *additional_data, int additional_data_size)
+ {
+   struct dwarf2_property_baton *baton;
+   struct obstack *obstack
+@@ -17471,14 +17535,33 @@ attr_to_dynamic_prop (const struct attribute *attr, struct die_info *die,
+ 
+   if (attr_form_is_block (attr))
+     {
+-      baton = XOBNEW (obstack, struct dwarf2_property_baton);
++      baton = XOBNEW(obstack, struct dwarf2_property_baton);
+       baton->referenced_type = NULL;
+       baton->locexpr.per_cu = cu->per_cu;
+-      baton->locexpr.size = DW_BLOCK (attr)->size;
+-      baton->locexpr.data = DW_BLOCK (attr)->data;
++
++      if (additional_data != NULL && additional_data_size > 0)
++	{
++	  gdb_byte *data;
++
++	  data = (gdb_byte *) obstack_alloc(
++	      &cu->per_cu->dwarf2_per_objfile->objfile->objfile_obstack,
++	      DW_BLOCK (attr)->size + additional_data_size);
++	  memcpy (data, DW_BLOCK (attr)->data, DW_BLOCK (attr)->size);
++	  memcpy (data + DW_BLOCK (attr)->size, additional_data,
++		  additional_data_size);
++
++	  baton->locexpr.data = data;
++	  baton->locexpr.size = DW_BLOCK (attr)->size + additional_data_size;
++	}
++      else
++	{
++	  baton->locexpr.data = DW_BLOCK (attr)->data;
++	  baton->locexpr.size = DW_BLOCK (attr)->size;
++	}
++
+       prop->data.baton = baton;
+       prop->kind = PROP_LOCEXPR;
+-      gdb_assert (prop->data.baton != NULL);
++      gdb_assert(prop->data.baton != NULL);
+     }
+   else if (attr_form_is_ref (attr))
+     {
+@@ -17511,8 +17594,28 @@ attr_to_dynamic_prop (const struct attribute *attr, struct die_info *die,
+ 		baton = XOBNEW (obstack, struct dwarf2_property_baton);
+ 		baton->referenced_type = die_type (target_die, target_cu);
+ 		baton->locexpr.per_cu = cu->per_cu;
+-		baton->locexpr.size = DW_BLOCK (target_attr)->size;
+-		baton->locexpr.data = DW_BLOCK (target_attr)->data;
++
++		if (additional_data != NULL && additional_data_size > 0)
++		  {
++		    gdb_byte *data;
++
++		    data = (gdb_byte *) obstack_alloc (&cu->per_cu->dwarf2_per_objfile->objfile->objfile_obstack,
++			    DW_BLOCK (target_attr)->size + additional_data_size);
++		    memcpy (data, DW_BLOCK (target_attr)->data,
++			    DW_BLOCK (target_attr)->size);
++		    memcpy (data + DW_BLOCK (target_attr)->size,
++			    additional_data, additional_data_size);
++
++		    baton->locexpr.data = data;
++		    baton->locexpr.size = (DW_BLOCK (target_attr)->size
++					   + additional_data_size);
++		  }
++		else
++		  {
++		    baton->locexpr.data = DW_BLOCK (target_attr)->data;
++		    baton->locexpr.size = DW_BLOCK (target_attr)->size;
++		  }
++
+ 		prop->data.baton = baton;
+ 		prop->kind = PROP_LOCEXPR;
+ 		gdb_assert (prop->data.baton != NULL);
+@@ -17623,7 +17726,7 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
+ 
+   attr = dwarf2_attr (die, DW_AT_byte_stride, cu);
+   if (attr)
+-    if (!attr_to_dynamic_prop (attr, die, cu, &stride))
++    if (!attr_to_dynamic_prop (attr, die, cu, &stride, NULL, 0))
+         complaint (_("Missing DW_AT_byte_stride "
+ 		     "- DIE at 0x%s [in module %s]"),
+ 		   sect_offset_str (die->sect_off),
+@@ -17631,7 +17734,7 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
+ 
+   attr = dwarf2_attr (die, DW_AT_lower_bound, cu);
+   if (attr)
+-    attr_to_dynamic_prop (attr, die, cu, &low);
++    attr_to_dynamic_prop (attr, die, cu, &low, NULL, 0);
+   else if (!low_default_is_valid)
+     complaint (_("Missing DW_AT_lower_bound "
+ 				      "- DIE at %s [in module %s]"),
+@@ -17639,10 +17742,10 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
+ 	       objfile_name (cu->per_cu->dwarf2_per_objfile->objfile));
+ 
+   attr = dwarf2_attr (die, DW_AT_upper_bound, cu);
+-  if (!attr_to_dynamic_prop (attr, die, cu, &high))
++  if (!attr_to_dynamic_prop (attr, die, cu, &high, NULL, 0))
+     {
+       attr = dwarf2_attr (die, DW_AT_count, cu);
+-      if (attr_to_dynamic_prop (attr, die, cu, &high))
++      if (attr_to_dynamic_prop (attr, die, cu, &high, NULL, 0))
+ 	{
+ 	  /* If bounds are constant do the final calculation here.  */
+ 	  if (low.kind == PROP_CONST && high.kind == PROP_CONST)
+@@ -25143,7 +25246,7 @@ set_die_type (struct die_info *die, struct type *type, struct dwarf2_cu *cu)
+   attr = dwarf2_attr (die, DW_AT_allocated, cu);
+   if (attr_form_is_block (attr))
+     {
+-      if (attr_to_dynamic_prop (attr, die, cu, &prop))
++      if (attr_to_dynamic_prop (attr, die, cu, &prop, NULL, 0))
+         add_dyn_prop (DYN_PROP_ALLOCATED, prop, type);
+     }
+   else if (attr != NULL)
+@@ -25157,7 +25260,7 @@ set_die_type (struct die_info *die, struct type *type, struct dwarf2_cu *cu)
+   attr = dwarf2_attr (die, DW_AT_associated, cu);
+   if (attr_form_is_block (attr))
+     {
+-      if (attr_to_dynamic_prop (attr, die, cu, &prop))
++      if (attr_to_dynamic_prop (attr, die, cu, &prop, NULL, 0))
+         add_dyn_prop (DYN_PROP_ASSOCIATED, prop, type);
+     }
+   else if (attr != NULL)
+@@ -25169,7 +25272,7 @@ set_die_type (struct die_info *die, struct type *type, struct dwarf2_cu *cu)
+ 
+   /* Read DW_AT_data_location and set in type.  */
+   attr = dwarf2_attr (die, DW_AT_data_location, cu);
+-  if (attr_to_dynamic_prop (attr, die, cu, &prop))
++  if (attr_to_dynamic_prop (attr, die, cu, &prop, NULL, 0))
+     add_dyn_prop (DYN_PROP_DATA_LOCATION, prop, type);
+ 
+   if (dwarf2_per_objfile->die_type_hash == NULL)
+diff --git a/gdb/f-typeprint.c b/gdb/f-typeprint.c
+--- a/gdb/f-typeprint.c
++++ b/gdb/f-typeprint.c
+@@ -37,7 +37,7 @@ static void f_type_print_args (struct type *, struct ui_file *);
+ #endif
+ 
+ static void f_type_print_varspec_suffix (struct type *, struct ui_file *, int,
+-					 int, int, int);
++					 int, int, int, int);
+ 
+ void f_type_print_varspec_prefix (struct type *, struct ui_file *,
+ 				  int, int);
+@@ -53,18 +53,6 @@ f_print_type (struct type *type, const char *varstring, struct ui_file *stream,
+ {
+   enum type_code code;
+ 
+-  if (type_not_associated (type))
+-    {
+-      val_print_not_associated (stream);
+-      return;
+-    }
+-
+-  if (type_not_allocated (type))
+-    {
+-      val_print_not_allocated (stream);
+-      return;
+-    }
+-
+   f_type_print_base (type, stream, show, level);
+   code = TYPE_CODE (type);
+   if ((varstring != NULL && *varstring != '\0')
+@@ -89,7 +77,7 @@ f_print_type (struct type *type, const char *varstring, struct ui_file *stream,
+ 
+       demangled_args = (*varstring != '\0'
+ 			&& varstring[strlen (varstring) - 1] == ')');
+-      f_type_print_varspec_suffix (type, stream, show, 0, demangled_args, 0);
++      f_type_print_varspec_suffix (type, stream, show, 0, demangled_args, 0, 0);
+    }
+ }
+ 
+@@ -159,7 +147,7 @@ f_type_print_varspec_prefix (struct type *type, struct ui_file *stream,
+ static void
+ f_type_print_varspec_suffix (struct type *type, struct ui_file *stream,
+ 			     int show, int passed_a_ptr, int demangled_args,
+-			     int arrayprint_recurse_level)
++			     int arrayprint_recurse_level, int print_rank_only)
+ {
+   int upper_bound, lower_bound;
+ 
+@@ -183,34 +171,50 @@ f_type_print_varspec_suffix (struct type *type, struct ui_file *stream,
+ 	fprintf_filtered (stream, "(");
+ 
+       if (type_not_associated (type))
+-        val_print_not_associated (stream);
++	print_rank_only = 1;
+       else if (type_not_allocated (type))
+-        val_print_not_allocated (stream);
++	print_rank_only = 1;
++      else if ((TYPE_ASSOCIATED_PROP (type)
++		&& PROP_CONST != TYPE_DYN_PROP_KIND (TYPE_ASSOCIATED_PROP (type)))
++	      || (TYPE_ALLOCATED_PROP (type)
++		&& PROP_CONST != TYPE_DYN_PROP_KIND (TYPE_ALLOCATED_PROP (type)))
++	      || (TYPE_DATA_LOCATION (type)
++		  && PROP_CONST != TYPE_DYN_PROP_KIND (TYPE_DATA_LOCATION (type))))
++	/* This case exist when we ptype a typename which has the
++	   dynamic properties but cannot be resolved as there is
++	   no object.  */
++	print_rank_only = 1;
++
++      if (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_ARRAY)
++	f_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0,
++				     0, 0, arrayprint_recurse_level,
++				     print_rank_only);
++
++      if (print_rank_only == 1)
++	fprintf_filtered (stream, ":");
+       else
+-        {
+-          if (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_ARRAY)
+-            f_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0,
+-                                        0, 0, arrayprint_recurse_level);
+-
+-          lower_bound = f77_get_lowerbound (type);
+-          if (lower_bound != 1)	/* Not the default.  */
+-            fprintf_filtered (stream, "%d:", lower_bound);
+-
+-          /* Make sure that, if we have an assumed size array, we
+-             print out a warning and print the upperbound as '*'.  */
+-
+-          if (TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type))
+-            fprintf_filtered (stream, "*");
+-          else
+-            {
+-              upper_bound = f77_get_upperbound (type);
+-              fprintf_filtered (stream, "%d", upper_bound);
+-            }
+-
+-          if (TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_ARRAY)
+-            f_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0,
+-                                        0, 0, arrayprint_recurse_level);
+-        }
++	{
++	  lower_bound = f77_get_lowerbound (type);
++	  if (lower_bound != 1)	/* Not the default.  */
++	    fprintf_filtered (stream, "%d:", lower_bound);
++
++	  /* Make sure that, if we have an assumed size array, we
++	       print out a warning and print the upperbound as '*'.  */
++
++	  if (TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type))
++	    fprintf_filtered (stream, "*");
++	  else
++	    {
++	      upper_bound = f77_get_upperbound (type);
++	      fprintf_filtered (stream, "%d", upper_bound);
++	    }
++	}
++
++      if (TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_ARRAY)
++	f_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0,
++				     0, 0, arrayprint_recurse_level,
++				     print_rank_only);
++
+       if (arrayprint_recurse_level == 1)
+ 	fprintf_filtered (stream, ")");
+       else
+@@ -221,13 +225,14 @@ f_type_print_varspec_suffix (struct type *type, struct ui_file *stream,
+     case TYPE_CODE_PTR:
+     case TYPE_CODE_REF:
+       f_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 1, 0,
+-				   arrayprint_recurse_level);
++				   arrayprint_recurse_level, 0);
+       fprintf_filtered (stream, ")");
+       break;
+ 
+     case TYPE_CODE_FUNC:
+       f_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0,
+-				   passed_a_ptr, 0, arrayprint_recurse_level);
++				   passed_a_ptr, 0, arrayprint_recurse_level,
++				   0);
+       if (passed_a_ptr)
+ 	fprintf_filtered (stream, ")");
+ 
+@@ -388,7 +393,7 @@ f_type_print_base (struct type *type, struct ui_file *stream, int show,
+ 	      fputs_filtered (" :: ", stream);
+ 	      fputs_filtered (TYPE_FIELD_NAME (type, index), stream);
+ 	      f_type_print_varspec_suffix (TYPE_FIELD_TYPE (type, index),
+-					   stream, show - 1, 0, 0, 0);
++					   stream, show - 1, 0, 0, 0, 0);
+ 	      fputs_filtered ("\n", stream);
+ 	    }
+ 	  fprintfi_filtered (level, stream, "End Type ");
+diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
+--- a/gdb/gdbtypes.c
++++ b/gdb/gdbtypes.c
+@@ -1904,7 +1904,8 @@ is_dynamic_type_internal (struct type *type, int top_level)
+   type = check_typedef (type);
+ 
+   /* We only want to recognize references at the outermost level.  */
+-  if (top_level && TYPE_CODE (type) == TYPE_CODE_REF)
++  if (top_level &&
++      (TYPE_CODE (type) == TYPE_CODE_REF || TYPE_CODE (type) == TYPE_CODE_PTR))
+     type = check_typedef (TYPE_TARGET_TYPE (type));
+ 
+   /* Types that have a dynamic TYPE_DATA_LOCATION are considered
+@@ -1938,6 +1939,7 @@ is_dynamic_type_internal (struct type *type, int top_level)
+       }
+ 
+     case TYPE_CODE_ARRAY:
++    case TYPE_CODE_STRING:
+       {
+ 	gdb_assert (TYPE_NFIELDS (type) == 1);
+ 
+@@ -2056,7 +2058,8 @@ resolve_dynamic_array (struct type *type,
+   struct dynamic_prop *prop;
+   unsigned int bit_stride = 0;
+ 
+-  gdb_assert (TYPE_CODE (type) == TYPE_CODE_ARRAY);
++  gdb_assert (TYPE_CODE (type) == TYPE_CODE_ARRAY
++	      || TYPE_CODE (type) == TYPE_CODE_STRING);
+ 
+   type = copy_type (type);
+ 
+@@ -2081,11 +2084,15 @@ resolve_dynamic_array (struct type *type,
+ 
+   ary_dim = check_typedef (TYPE_TARGET_TYPE (elt_type));
+ 
+-  if (ary_dim != NULL && TYPE_CODE (ary_dim) == TYPE_CODE_ARRAY)
++  if (ary_dim != NULL && (TYPE_CODE (ary_dim) == TYPE_CODE_ARRAY
++      || TYPE_CODE (ary_dim) == TYPE_CODE_STRING))
+     elt_type = resolve_dynamic_array (ary_dim, addr_stack);
+   else
+     elt_type = TYPE_TARGET_TYPE (type);
+ 
++  if (TYPE_CODE (type) == TYPE_CODE_STRING)
++    return create_string_type (type, elt_type, range_type);
++
+   prop = get_dyn_prop (DYN_PROP_BYTE_STRIDE, type);
+   if (prop != NULL)
+     {
+@@ -2240,6 +2247,28 @@ resolve_dynamic_struct (struct type *type,
+   return resolved_type;
+ }
+ 
++/* Worker for pointer types.  */
++
++static struct type *
++resolve_dynamic_pointer (struct type *type,
++			 struct property_addr_info *addr_stack)
++{
++  struct dynamic_prop *prop;
++  CORE_ADDR value;
++
++  type = copy_type (type);
++
++  /* Resolve associated property.  */
++  prop = TYPE_ASSOCIATED_PROP (type);
++  if (prop != NULL && dwarf2_evaluate_property (prop, NULL, addr_stack, &value))
++    {
++      TYPE_DYN_PROP_ADDR (prop) = value;
++      TYPE_DYN_PROP_KIND (prop) = PROP_CONST;
++    }
++
++  return type;
++}
++
+ /* Worker for resolved_dynamic_type.  */
+ 
+ static struct type *
+@@ -2288,7 +2317,12 @@ resolve_dynamic_type_internal (struct type *type,
+ 	    break;
+ 	  }
+ 
++        case TYPE_CODE_PTR:
++ 	  resolved_type = resolve_dynamic_pointer (type, addr_stack);
++ 	  break;
++
+ 	case TYPE_CODE_ARRAY:
++	case TYPE_CODE_STRING:
+ 	  resolved_type = resolve_dynamic_array (type, addr_stack);
+ 	  break;
+ 
+diff --git a/gdb/testsuite/gdb.cp/vla-cxx.cc b/gdb/testsuite/gdb.cp/vla-cxx.cc
+--- a/gdb/testsuite/gdb.cp/vla-cxx.cc
++++ b/gdb/testsuite/gdb.cp/vla-cxx.cc
+@@ -15,6 +15,10 @@
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+ 
++extern "C" {
++#include <stddef.h>
++}
++
+ struct container;
+ 
+ struct element
+@@ -40,11 +44,16 @@ int main(int argc, char **argv)
+   typedef typeof (vla) &vlareftypedef;
+   vlareftypedef vlaref2 (vla);
+   container c;
++  typeof (vla) *ptr = NULL;
++
++  // Before pointer assignment
++  ptr = &vla;
+ 
+   for (int i = 0; i < z; ++i)
+     vla[i] = 5 + 2 * i;
+ 
+   // vlas_filled
+   vla[0] = 2 * vla[0];
++
+   return vla[2];
+ }
+diff --git a/gdb/testsuite/gdb.cp/vla-cxx.exp b/gdb/testsuite/gdb.cp/vla-cxx.exp
+--- a/gdb/testsuite/gdb.cp/vla-cxx.exp
++++ b/gdb/testsuite/gdb.cp/vla-cxx.exp
+@@ -23,6 +23,12 @@ if ![runto_main] {
+     return -1
+ }
+ 
++gdb_breakpoint [gdb_get_line_number "Before pointer assignment"]
++gdb_continue_to_breakpoint "Before pointer assignment"
++gdb_test "ptype ptr" "int \\(\\*\\)\\\[variable length\\\]" "ptype ptr, Before pointer assignment"
++gdb_test "print ptr" "\\(int \\(\\*\\)\\\[variable length\\\]\\) 0x0" "print ptr, Before pointer assignment"
++gdb_test "print *ptr" "Cannot access memory at address 0x0" "print *ptr, Before pointer assignment"
++
+ gdb_breakpoint [gdb_get_line_number "vlas_filled"]
+ gdb_continue_to_breakpoint "vlas_filled"
+ 
+@@ -33,3 +39,6 @@ gdb_test "print vlaref" " = \\(int \\(&\\)\\\[3\\\]\\) @$hex: \\{5, 7, 9\\}"
+ # bug being tested, it's better not to depend on the exact spelling.
+ gdb_test "print vlaref2" " = \\(.*\\) @$hex: \\{5, 7, 9\\}"
+ gdb_test "print c" " = \\{e = \\{c = @$hex\\}\\}"
++gdb_test "ptype ptr" "int \\(\\*\\)\\\[3\\\]"
++gdb_test "print ptr" "\\(int \\(\\*\\)\\\[3\\\]\\) $hex"
++gdb_test "print *ptr" " = \\{5, 7, 9\\}"
+diff --git a/gdb/testsuite/gdb.fortran/pointers.exp b/gdb/testsuite/gdb.fortran/pointers.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.fortran/pointers.exp
+@@ -0,0 +1,143 @@
++# Copyright 2016 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++standard_testfile "pointers.f90"
++load_lib fortran.exp
++
++if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
++    {debug f90 quiet}] } {
++    return -1
++}
++
++if ![runto_main] {
++    untested "could not run to main"
++    return -1
++}
++
++# Depending on the compiler being used, the type names can be printed differently.
++set logical [fortran_logical4]
++set real [fortran_real4]
++set int [fortran_int4]
++set complex [fortran_complex4]
++
++
++gdb_breakpoint [gdb_get_line_number "Before pointer assignment"]
++gdb_continue_to_breakpoint "Before pointer assignment"
++gdb_test "print logp" "= \\(PTR TO -> \\( $logical \\)\\) 0x0" "print logp, not associated"
++gdb_test "print *logp" "Cannot access memory at address 0x0" "print *logp, not associated"
++gdb_test "print comp" "= \\(PTR TO -> \\( $complex \\)\\) 0x0" "print comp, not associated"
++gdb_test "print *comp" "Cannot access memory at address 0x0" "print *comp, not associated"
++gdb_test "print charp" "= \\(PTR TO -> \\( character\\*1 \\)\\) 0x0" "print charp, not associated"
++gdb_test "print *charp" "Cannot access memory at address 0x0" "print *charp, not associated"
++gdb_test "print charap" "= \\(PTR TO -> \\( character\\*3 \\)\\) 0x0" "print charap, not associated"
++gdb_test "print *charap" "Cannot access memory at address 0x0" "print *charap, not associated"
++gdb_test "print intp" "= \\(PTR TO -> \\( $int \\)\\) 0x0" "print intp, not associated"
++gdb_test "print *intp" "Cannot access memory at address 0x0" "print *intp, not associated"
++set test "print intap, not associated"
++gdb_test_multiple "print intap" $test {
++  -re " = \\(PTR TO -> \\( $int \\(:,:\\)\\)\\) <not associated>\r\n$gdb_prompt $" {
++    pass $test
++  }
++  -re " = <not associated>\r\n$gdb_prompt $" {
++    pass $test
++  }
++}
++gdb_test "print realp" "= \\(PTR TO -> \\( $real \\)\\) 0x0" "print realp, not associated"
++gdb_test "print *realp" "Cannot access memory at address 0x0" "print *realp, not associated"
++gdb_test "print \$my_var = intp" "= \\(PTR TO -> \\( $int \\)\\) 0x0"
++set test "print cyclicp1, not associated"
++gdb_test_multiple "print cyclicp1" $test {
++  -re "= \\( i = -?\\d+, p = 0x0 \\)\r\n$gdb_prompt $" {
++    pass $test
++  }
++  -re "= \\( i = -?\\d+, p = <not associated> \\)\r\n$gdb_prompt $" {
++    pass $test
++  }
++}
++set test "print cyclicp1%p, not associated"
++gdb_test_multiple "print cyclicp1%p" $test {
++  -re "= \\(PTR TO -> \\( Type typewithpointer \\)\\) 0x0\r\n$gdb_prompt $" {
++    pass $test
++  }
++  -re "= \\(PTR TO -> \\( Type typewithpointer \\)\\) <not associated>\r\n$gdb_prompt $" {
++    pass $test
++  }
++}
++
++
++gdb_breakpoint [gdb_get_line_number "Before value assignment"]
++gdb_continue_to_breakpoint "Before value assignment"
++gdb_test "print *(twop)%ivla2" "= <not allocated>"
++
++
++gdb_breakpoint [gdb_get_line_number "After value assignment"]
++gdb_continue_to_breakpoint "After value assignment"
++gdb_test "print logp" "= \\(PTR TO -> \\( $logical \\)\\) $hex\( <.*>\)?"
++gdb_test "print *logp" "= \\.TRUE\\."
++gdb_test "print comp" "= \\(PTR TO -> \\( $complex \\)\\) $hex\( <.*>\)?"
++gdb_test "print *comp" "= \\(1,2\\)"
++gdb_test "print charp" "= \\(PTR TO -> \\( character\\*1 \\)\\) $hex\( <.*>\)?"
++gdb_test "print *charp" "= 'a'"
++gdb_test "print charap" "= \\(PTR TO -> \\( character\\*3 \\)\\) $hex\( <.*>\)?"
++gdb_test "print *charap" "= 'abc'"
++gdb_test "print intp" "= \\(PTR TO -> \\( $int \\)\\) $hex\( <.*>\)?"
++gdb_test "print *intp" "= 10"
++set test_name "print intap, associated"
++gdb_test_multiple "print intap" $test_name {
++  -re "= \\(\\( 1, 1, 3(, 1){7}\\) \\( 1(, 1){9}\\) \\)\r\n$gdb_prompt $" {
++    pass $test_name
++  }
++  -re "= \\(PTR TO -> \\( $int \\(10,2\\)\\)\\) $hex\( <.*>\)?\r\n$gdb_prompt $" {
++    gdb_test "print *intap" "= \\(\\( 1, 1, 3(, 1){7}\\) \\( 1(, 1){9}\\) \\)"
++    pass $test_name
++  }
++}
++set test_name "print intvlap, associated"
++gdb_test_multiple "print intvlap" $test_name {
++  -re "= \\(2, 2, 2, 4(, 2){6}\\)\r\n$gdb_prompt $" {
++    pass $test_name
++  }
++  -re "= \\(PTR TO -> \\( $int \\(10\\)\\)\\) $hex\( <.*>\)?\r\n$gdb_prompt $" {
++    gdb_test "print *intvlap" "= \\(2, 2, 2, 4(, 2){6}\\)"
++    pass $test_name
++  }
++}
++gdb_test "print realp" "= \\(PTR TO -> \\( $real \\)\\) $hex\( <.*>\)?"
++gdb_test "print *realp" "= 3\\.14000\\d+"
++gdb_test "print arrayOfPtr(2)%p" "= \\(PTR TO -> \\( Type two \\)\\) $hex\( <.*>\)?"
++gdb_test "print *(arrayOfPtr(2)%p)" "= \\( ivla1 = \\(11, 12, 13\\), ivla2 = \\(\\( 211, 221\\) \\( 212, 222\\) \\) \\)"
++set test_name "print arrayOfPtr(3)%p"
++gdb_test_multiple $test_name $test_name {
++  -re "= \\(PTR TO -> \\( Type two \\)\\) <not associated>\r\n$gdb_prompt $" {
++    pass $test_name
++  }
++  -re "= \\(PTR TO -> \\( Type two \\)\\) 0x0\r\n$gdb_prompt $" {
++    pass $test_name
++  }
++}
++set test_name "print *(arrayOfPtr(3)%p), associated"
++gdb_test_multiple "print *(arrayOfPtr(3)%p)" $test_name {
++  -re "Cannot access memory at address 0x0\r\n$gdb_prompt $" {
++    pass $test_name
++  }
++  -re "Attempt to take contents of a not associated pointer.\r\n$gdb_prompt $" {
++    pass $test_name
++  }
++}
++gdb_test "print cyclicp1" "= \\( i = 1, p = $hex\( <.*>\)? \\)"
++gdb_test "print cyclicp1%p" "= \\(PTR TO -> \\( Type typewithpointer \\)\\) $hex\( <.*>\)?"
++gdb_test "print *((integer*) &inta + 2)" "= 3" "print temporary pointer, array"
++gdb_test "print *((integer*) &intvla + 3)" "= 4" "print temporary pointer, allocated vla"
++gdb_test "print \$pc" "= \\(PTR TO -> \\( void \\(\\)\\(\\)\\)\\) $hex <pointers\\+\\d+>" "Print program counter"
+diff --git a/gdb/testsuite/gdb.fortran/pointers.f90 b/gdb/testsuite/gdb.fortran/pointers.f90
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.fortran/pointers.f90
+@@ -0,0 +1,109 @@
++! Copyright 2016 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++program pointers
++
++  type :: two
++    integer, allocatable :: ivla1 (:)
++    integer, allocatable :: ivla2 (:, :)
++  end type two
++
++  type :: typeWithPointer
++    integer i
++    type(typeWithPointer), pointer:: p
++  end type typeWithPointer
++
++  type :: twoPtr
++    type (two), pointer :: p
++  end type twoPtr
++
++  logical, target :: logv
++  complex, target :: comv
++  character, target :: charv
++  character (len=3), target :: chara
++  integer, target :: intv
++  integer, target, dimension (10,2) :: inta
++  integer, target, allocatable, dimension (:) :: intvla
++  real, target    :: realv
++  type(two), target  :: twov
++  type(twoPtr) :: arrayOfPtr (3)
++  type(typeWithPointer), target:: cyclicp1,cyclicp2
++
++  logical, pointer :: logp
++  complex, pointer :: comp
++  character, pointer:: charp
++  character (len=3), pointer:: charap
++  integer, pointer :: intp
++  integer, pointer, dimension (:,:) :: intap
++  integer, pointer, dimension (:) :: intvlap
++  real, pointer :: realp
++  type(two), pointer :: twop
++
++  nullify (logp)
++  nullify (comp)
++  nullify (charp)
++  nullify (charap)
++  nullify (intp)
++  nullify (intap)
++  nullify (intvlap)
++  nullify (realp)
++  nullify (twop)
++  nullify (arrayOfPtr(1)%p)
++  nullify (arrayOfPtr(2)%p)
++  nullify (arrayOfPtr(3)%p)
++  nullify (cyclicp1%p)
++  nullify (cyclicp2%p)
++
++  logp => logv    ! Before pointer assignment
++  comp => comv
++  charp => charv
++  charap => chara
++  intp => intv
++  intap => inta
++  intvlap => intvla
++  realp => realv
++  twop => twov
++  arrayOfPtr(2)%p => twov
++  cyclicp1%i = 1
++  cyclicp1%p => cyclicp2
++  cyclicp2%i = 2
++  cyclicp2%p => cyclicp1
++
++  logv = associated(logp)     ! Before value assignment
++  comv = cmplx(1,2)
++  charv = "a"
++  chara = "abc"
++  intv = 10
++  inta(:,:) = 1
++  inta(3,1) = 3
++  allocate (intvla(10))
++  intvla(:) = 2
++  intvla(4) = 4
++  intvlap => intvla
++  realv = 3.14
++
++  allocate (twov%ivla1(3))
++  allocate (twov%ivla2(2,2))
++  twov%ivla1(1) = 11
++  twov%ivla1(2) = 12
++  twov%ivla1(3) = 13
++  twov%ivla2(1,1) = 211
++  twov%ivla2(2,1) = 221
++  twov%ivla2(1,2) = 212
++  twov%ivla2(2,2) = 222
++
++  intv = intv + 1 ! After value assignment
++
++end program pointers
+diff --git a/gdb/testsuite/gdb.fortran/print_type.exp b/gdb/testsuite/gdb.fortran/print_type.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.fortran/print_type.exp
+@@ -0,0 +1,100 @@
++# Copyright 2016 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++standard_testfile "pointers.f90"
++load_lib fortran.exp
++
++if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
++    {debug f90 quiet}] } {
++    return -1
++}
++
++
++if ![runto_main] {
++    untested "could not run to main"
++    return -1
++}
++
++# Depending on the compiler being used, the type names can be printed differently.
++set logical [fortran_logical4]
++set real [fortran_real4]
++set int [fortran_int4]
++set complex [fortran_complex4]
++
++gdb_breakpoint [gdb_get_line_number "Before pointer assignment"]
++gdb_continue_to_breakpoint "Before pointer assignment"
++gdb_test "ptype logp" "type = PTR TO -> \\( $logical \\)" "ptype logp, not associated"
++gdb_test "ptype comp" "type = PTR TO -> \\( $complex \\)" "ptype comp, not associated"
++gdb_test "ptype charp" "type = PTR TO -> \\( character\\*1 \\)" "ptype charp, not associated"
++gdb_test "ptype charap" "type = PTR TO -> \\( character\\*3 \\)" "ptype charap, not associated"
++gdb_test "ptype intp" "type = PTR TO -> \\( $int \\)" "ptype intp, not associated"
++set test "ptype intap, not associated"
++gdb_test_multiple "ptype intap" $test {
++    -re "type = PTR TO -> \\( $int \\(:,:\\)\\)\r\n$gdb_prompt $" {
++        pass $test
++    }
++    -re "type = $int \\(:,:\\)\r\n$gdb_prompt $" {
++        pass $test
++    }
++}
++gdb_test "ptype realp" "type = PTR TO -> \\( $real \\)" "ptype realp, not associated"
++gdb_test "ptype twop" \
++    [multi_line "type = PTR TO -> \\( Type two" \
++                "    $int :: ivla1\\(:\\)" \
++                "    $int :: ivla2\\(:,:\\)" \
++                "End Type two \\)"] \
++    "ptype twop, not associated"
++gdb_test "ptype two" \
++    [multi_line "type = Type two" \
++                "    $int :: ivla1\\(:\\)" \
++                "    $int :: ivla2\\(:,:\\)" \
++                "End Type two"]
++
++
++gdb_breakpoint [gdb_get_line_number "Before value assignment"]
++gdb_continue_to_breakpoint "Before value assignment"
++gdb_test "ptype twop" \
++    [multi_line "type = PTR TO -> \\( Type two" \
++                "    $int :: ivla1\\(:\\)" \
++                "    $int :: ivla2\\(:,:\\)" \
++                "End Type two \\)"]
++
++
++gdb_breakpoint [gdb_get_line_number "After value assignment"]
++gdb_continue_to_breakpoint "After value assignment"
++gdb_test "ptype logv" "type = $logical"
++gdb_test "ptype comv" "type = $complex"
++gdb_test "ptype charv" "type = character\\*1"
++gdb_test "ptype chara" "type = character\\*3"
++gdb_test "ptype intv" "type = $int"
++gdb_test "ptype inta" "type = $int \\(10,2\\)"
++gdb_test "ptype realv" "type = $real"
++
++
++gdb_test "ptype logp" "type = PTR TO -> \\( $logical \\)"
++gdb_test "ptype comp" "type = PTR TO -> \\( $complex \\)"
++gdb_test "ptype charp" "type = PTR TO -> \\( character\\*1 \\)"
++gdb_test "ptype charap" "type = PTR TO -> \\( character\\*3 \\)"
++gdb_test "ptype intp" "type = PTR TO -> \\( $int \\)"
++set test "ptype intap"
++gdb_test_multiple $test $test {
++    -re "type = $int \\(10,2\\)\r\n$gdb_prompt $" {
++        pass $test
++    }
++    -re "type = PTR TO -> \\( $int \\(10,2\\)\\)\r\n$gdb_prompt $" {
++        pass $test
++    }
++}
++gdb_test "ptype realp" "type = PTR TO -> \\( $real \\)"
+diff --git a/gdb/testsuite/gdb.fortran/vla-ptype.exp b/gdb/testsuite/gdb.fortran/vla-ptype.exp
+--- a/gdb/testsuite/gdb.fortran/vla-ptype.exp
++++ b/gdb/testsuite/gdb.fortran/vla-ptype.exp
+@@ -32,9 +32,9 @@ set real [fortran_real4]
+ # Check the ptype of various VLA states and pointer to VLA's.
+ gdb_breakpoint [gdb_get_line_number "vla1-init"]
+ gdb_continue_to_breakpoint "vla1-init"
+-gdb_test "ptype vla1" "type = <not allocated>" "ptype vla1 not initialized"
+-gdb_test "ptype vla2" "type = <not allocated>" "ptype vla2 not initialized"
+-gdb_test "ptype pvla" "type = <not associated>" "ptype pvla not initialized"
++gdb_test "ptype vla1" "type = $real \\(:,:,:\\)" "ptype vla1 not initialized"
++gdb_test "ptype vla2" "type = $real \\(:,:,:\\)" "ptype vla2 not initialized"
++gdb_test "ptype pvla" "type = $real \\(:,:,:\\)" "ptype pvla not initialized"
+ gdb_test "ptype vla1(3, 6, 9)" "no such vector element \\\(vector not allocated\\\)" \
+   "ptype vla1(3, 6, 9) not initialized"
+ gdb_test "ptype vla2(5, 45, 20)" \
+@@ -81,20 +81,20 @@ gdb_test "ptype vla2(5, 45, 20)" "type = $real" \
+ 
+ gdb_breakpoint [gdb_get_line_number "pvla-deassociated"]
+ gdb_continue_to_breakpoint "pvla-deassociated"
+-gdb_test "ptype pvla" "type = <not associated>" "ptype pvla deassociated"
++gdb_test "ptype pvla" "type = $real \\(:,:,:\\)" "ptype pvla deassociated"
+ gdb_test "ptype pvla(5, 45, 20)" \
+   "no such vector element \\\(vector not associated\\\)" \
+   "ptype pvla(5, 45, 20) not associated"
+ 
+ gdb_breakpoint [gdb_get_line_number "vla1-deallocated"]
+ gdb_continue_to_breakpoint "vla1-deallocated"
+-gdb_test "ptype vla1" "type = <not allocated>" "ptype vla1 not allocated"
++gdb_test "ptype vla1" "type = $real \\(:,:,:\\)" "ptype vla1 not allocated"
+ gdb_test "ptype vla1(3, 6, 9)" "no such vector element \\\(vector not allocated\\\)" \
+   "ptype vla1(3, 6, 9) not allocated"
+ 
+ gdb_breakpoint [gdb_get_line_number "vla2-deallocated"]
+ gdb_continue_to_breakpoint "vla2-deallocated"
+-gdb_test "ptype vla2" "type = <not allocated>" "ptype vla2 not allocated"
++gdb_test "ptype vla2" "type = $real \\(:,:,:\\)" "ptype vla2 not allocated"
+ gdb_test "ptype vla2(5, 45, 20)" \
+   "no such vector element \\\(vector not allocated\\\)" \
+   "ptype vla2(5, 45, 20) not allocated"
+diff --git a/gdb/testsuite/gdb.fortran/vla-strings.exp b/gdb/testsuite/gdb.fortran/vla-strings.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.fortran/vla-strings.exp
+@@ -0,0 +1,103 @@
++# Copyright 2016 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++standard_testfile ".f90"
++
++if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
++    {debug f90 quiet}] } {
++    return -1
++}
++
++# check that all fortran standard datatypes will be
++# handled correctly when using as VLA's
++
++if ![runto_main] {
++    untested "could not run to main"
++    return -1
++}
++
++gdb_breakpoint [gdb_get_line_number "var_char-allocated-1"]
++gdb_continue_to_breakpoint "var_char-allocated-1"
++set test "whatis var_char first time"
++gdb_test_multiple "whatis var_char" $test {
++    -re "type = PTR TO -> \\( character\\*10 \\)\r\n$gdb_prompt $" {
++	    pass $test
++    }
++    -re "type = character\\*10\r\n$gdb_prompt $" {
++	    pass $test
++    }
++}
++set test "ptype var_char first time"
++gdb_test_multiple "ptype var_char" $test {
++    -re "type = PTR TO -> \\( character\\*10 \\)\r\n$gdb_prompt $" {
++	    pass $test
++    }
++    -re "type = character\\*10\r\n$gdb_prompt $" {
++	    pass $test
++    }
++}
++
++
++gdb_test "next" "\\d+.*var_char = 'foo'.*" \
++  "next to allocation status of var_char"
++gdb_test "print l" " = \\.TRUE\\." "print allocation status first time"
++
++
++gdb_breakpoint [gdb_get_line_number "var_char-filled-1"]
++gdb_continue_to_breakpoint "var_char-filled-1"
++set test "print var_char, var_char-filled-1"
++gdb_test_multiple "print var_char" $test {
++    -re "= \\(PTR TO -> \\( character\\*3 \\)\\) $hex\r\n$gdb_prompt $" {
++        gdb_test "print *var_char" "= 'foo'" "print *var_char, var_char-filled-1"
++	    pass $test
++    }
++    -re "= 'foo'\r\n$gdb_prompt $" {
++	    pass $test
++    }
++}
++set test "ptype var_char, var_char-filled-1"
++gdb_test_multiple "ptype var_char" $test {
++    -re "type = PTR TO -> \\( character\\*3 \\)\r\n$gdb_prompt $" {
++	    pass $test
++    }
++    -re "type = character\\*3\r\n$gdb_prompt $" {
++	    pass $test
++    }
++}
++gdb_test "print var_char(1)" " = 102 'f'" "print var_char(1)"
++gdb_test "print var_char(3)" " = 111 'o'" "print var_char(3)"
++
++
++gdb_breakpoint [gdb_get_line_number "var_char-filled-2"]
++gdb_continue_to_breakpoint "var_char-filled-2"
++set test "print var_char, var_char-filled-2"
++gdb_test_multiple "print var_char" $test {
++    -re "= \\(PTR TO -> \\( character\\*6 \\)\\) $hex\r\n$gdb_prompt $" {
++        gdb_test "print *var_char" "= 'foobar'" "print *var_char, var_char-filled-2"
++	    pass $test
++    }
++    -re "= 'foobar'\r\n$gdb_prompt $" {
++	    pass $test
++    }
++}
++set test "ptype var_char, var_char-filled-2"
++gdb_test_multiple "ptype var_char" $test {
++    -re "type = PTR TO -> \\( character\\*6 \\)\r\n$gdb_prompt $" {
++	    pass $test
++    }
++    -re "type = character\\*6\r\n$gdb_prompt $" {
++	    pass $test
++    }
++}
+diff --git a/gdb/testsuite/gdb.fortran/vla-strings.f90 b/gdb/testsuite/gdb.fortran/vla-strings.f90
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.fortran/vla-strings.f90
+@@ -0,0 +1,39 @@
++! Copyright 2016 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++program vla_strings
++  character(len=:), target, allocatable   :: var_char
++  character(len=:), pointer               :: var_char_p
++  logical                                 :: l
++
++  allocate(character(len=10) :: var_char)
++  l = allocated(var_char)                 ! var_char-allocated-1
++  var_char = 'foo'
++  deallocate(var_char)                    ! var_char-filled-1
++  l = allocated(var_char)                 ! var_char-deallocated
++  allocate(character(len=42) :: var_char)
++  l = allocated(var_char)
++  var_char = 'foobar'
++  var_char = ''                           ! var_char-filled-2
++  var_char = 'bar'                        ! var_char-empty
++  deallocate(var_char)
++  allocate(character(len=21) :: var_char)
++  l = allocated(var_char)                 ! var_char-allocated-3
++  var_char = 'johndoe'
++  var_char_p => var_char
++  l = associated(var_char_p)              ! var_char_p-associated
++  var_char_p => null()
++  l = associated(var_char_p)              ! var_char_p-not-associated
++end program vla_strings
+diff --git a/gdb/testsuite/gdb.fortran/vla-type.exp b/gdb/testsuite/gdb.fortran/vla-type.exp
+--- a/gdb/testsuite/gdb.fortran/vla-type.exp
++++ b/gdb/testsuite/gdb.fortran/vla-type.exp
+@@ -132,7 +132,10 @@ gdb_test "ptype fivearr(2)%tone" \
+                      "End Type one" ]
+ 
+ # Check allocation status of dynamic array and it's dynamic members
+-gdb_test "ptype fivedynarr" "type = <not allocated>"
++gdb_test "ptype fivedynarr" \
++         [multi_line "type = Type five" \
++                     "    Type one :: tone" \
++                     "End Type five \\(:\\)" ]
+ gdb_test "next" ""
+ gdb_test "ptype fivedynarr(2)" \
+          [multi_line "type = Type five" \
+@@ -141,7 +144,7 @@ gdb_test "ptype fivedynarr(2)" \
+          "ptype fivedynarr(2), tone is not allocated"
+ gdb_test "ptype fivedynarr(2)%tone" \
+          [multi_line "type = Type one" \
+-                     "    $int :: ivla\\(<not allocated>\\)" \
++                     "    $int :: ivla\\(:,:,:\\)" \
+                      "End Type one" ] \
+          "ptype fivedynarr(2)%tone, not allocated"
+ 
+diff --git a/gdb/testsuite/gdb.fortran/vla-value.exp b/gdb/testsuite/gdb.fortran/vla-value.exp
+--- a/gdb/testsuite/gdb.fortran/vla-value.exp
++++ b/gdb/testsuite/gdb.fortran/vla-value.exp
+@@ -35,7 +35,7 @@ gdb_breakpoint [gdb_get_line_number "vla1-init"]
+ gdb_continue_to_breakpoint "vla1-init"
+ gdb_test "print vla1" " = <not allocated>" "print non-allocated vla1"
+ gdb_test "print &vla1" \
+-  " = \\\(PTR TO -> \\\( $real \\\(<not allocated>\\\)\\\)\\\) $hex" \
++  " = \\\(PTR TO -> \\\( $real \\\(:,:,:\\\)\\\)\\\) $hex" \
+   "print non-allocated &vla1"
+ gdb_test "print vla1(1,1,1)" "no such vector element \\\(vector not allocated\\\)" \
+   "print member in non-allocated vla1 (1)"
+@@ -76,7 +76,7 @@ gdb_test "print vla1(9, 9, 9)" " = 999" \
+ # Try to access values in undefined pointer to VLA (dangling)
+ gdb_test "print pvla" " = <not associated>" "print undefined pvla"
+ gdb_test "print &pvla" \
+-  " = \\\(PTR TO -> \\\( $real \\\(<not associated>\\\)\\\)\\\) $hex" \
++  " = \\\(PTR TO -> \\\( $real \\\(:,:,:\\\)\\\)\\\) $hex" \
+   "print non-associated &pvla"
+ gdb_test "print pvla(1, 3, 8)" "no such vector element \\\(vector not associated\\\)" \
+   "print undefined pvla(1,3,8)"
+diff --git a/gdb/testsuite/gdb.mi/mi-vla-fortran.exp b/gdb/testsuite/gdb.mi/mi-vla-fortran.exp
+--- a/gdb/testsuite/gdb.mi/mi-vla-fortran.exp
++++ b/gdb/testsuite/gdb.mi/mi-vla-fortran.exp
+@@ -51,10 +51,10 @@ mi_expect_stop "breakpoint-hit" "vla" "" ".*vla.f90" "$bp_lineno" \
+ mi_gdb_test "500-data-evaluate-expression vla1" \
+   "500\\^done,value=\"<not allocated>\"" "evaluate not allocated vla, before allocation"
+ 
+-mi_create_varobj_checked vla1_not_allocated vla1 "<not allocated>" \
++mi_create_varobj_checked vla1_not_allocated vla1 "$real \\(:\\)" \
+   "create local variable vla1_not_allocated"
+ mi_gdb_test "501-var-info-type vla1_not_allocated" \
+-  "501\\^done,type=\"<not allocated>\"" \
++  "501\\^done,type=\"$real \\(:\\)\"" \
+   "info type variable vla1_not_allocated"
+ mi_gdb_test "502-var-show-format vla1_not_allocated" \
+   "502\\^done,format=\"natural\"" \
+@@ -146,10 +146,10 @@ gdb_expect {
+     -re "580\\^done,value=\"<not associated>\".*${mi_gdb_prompt}$" {
+ 	pass $test
+ 
+-	mi_create_varobj_checked pvla2_not_associated pvla2 "<not associated>" \
++	mi_create_varobj_checked pvla2_not_associated pvla2 "$real \\(:,:\\)" \
+ 	    "create local variable pvla2_not_associated"
+ 	mi_gdb_test "581-var-info-type pvla2_not_associated" \
+-	    "581\\^done,type=\"<not associated>\"" \
++	    "581\\^done,type=\"$real \\(:,:\\)\"" \
+ 	    "info type variable pvla2_not_associated"
+ 	mi_gdb_test "582-var-show-format pvla2_not_associated" \
+ 	    "582\\^done,format=\"natural\"" \
+diff --git a/gdb/typeprint.c b/gdb/typeprint.c
+--- a/gdb/typeprint.c
++++ b/gdb/typeprint.c
+@@ -589,6 +589,25 @@ whatis_exp (const char *exp, int show)
+       printf_filtered (" */\n");    
+     }
+ 
++  /* Resolve any dynamic target type, as we might print
++     additional information about the target.
++     For example, in Fortran and C we are printing the dimension of the
++     dynamic array the pointer is pointing to.  */
++  if (TYPE_CODE (type) == TYPE_CODE_PTR
++      && is_dynamic_type (type) == 1)
++    {
++      CORE_ADDR addr;
++      if (NULL != TYPE_DATA_LOCATION (TYPE_TARGET_TYPE(type)))
++	addr = value_address (val);
++      else
++	addr = value_as_address (val);
++
++      if (addr != 0
++	  && type_not_associated (type) == 0)
++	TYPE_TARGET_TYPE (type) = resolve_dynamic_type (TYPE_TARGET_TYPE (type),
++							NULL, addr);
++    }
++
+   LA_PRINT_TYPE (type, "", gdb_stdout, show, 0, &flags);
+   printf_filtered ("\n");
+ }
+diff --git a/gdb/valops.c b/gdb/valops.c
+--- a/gdb/valops.c
++++ b/gdb/valops.c
+@@ -1565,6 +1565,19 @@ value_ind (struct value *arg1)
+   if (TYPE_CODE (base_type) == TYPE_CODE_PTR)
+     {
+       struct type *enc_type;
++      CORE_ADDR addr;
++
++      if (type_not_associated (base_type))
++        error (_("Attempt to take contents of a not associated pointer."));
++
++      if (NULL != TYPE_DATA_LOCATION (TYPE_TARGET_TYPE (base_type)))
++	addr = value_address (arg1);
++      else
++	addr = value_as_address (arg1);
++
++      if (addr != 0)
++	TYPE_TARGET_TYPE (base_type) =
++	    resolve_dynamic_type (TYPE_TARGET_TYPE (base_type), NULL, addr);
+ 
+       /* We may be pointing to something embedded in a larger object.
+          Get the real type of the enclosing object.  */
+@@ -1580,8 +1593,7 @@ value_ind (struct value *arg1)
+       else
+ 	/* Retrieve the enclosing object pointed to.  */
+ 	arg2 = value_at_lazy (enc_type, 
+-			      (value_as_address (arg1)
+-			       - value_pointed_to_offset (arg1)));
++			      (addr - value_pointed_to_offset (arg1)));
+ 
+       enc_type = value_type (arg2);
+       return readjust_indirect_value_type (arg2, enc_type, base_type, arg1);
+diff --git a/gdb/valprint.c b/gdb/valprint.c
+--- a/gdb/valprint.c
++++ b/gdb/valprint.c
+@@ -1108,12 +1108,6 @@ value_check_printable (struct value *val, struct ui_file *stream,
+       return 0;
+     }
+ 
+-  if (type_not_associated (value_type (val)))
+-    {
+-      val_print_not_associated (stream);
+-      return 0;
+-    }
+-
+   if (type_not_allocated (value_type (val)))
+     {
+       val_print_not_allocated (stream);
diff --git a/SOURCES/gdb-vla-intel-stringbt-fix.patch b/SOURCES/gdb-vla-intel-stringbt-fix.patch
new file mode 100644
index 0000000..b2170f4
--- /dev/null
+++ b/SOURCES/gdb-vla-intel-stringbt-fix.patch
@@ -0,0 +1,175 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Jan Kratochvil <jan.kratochvil@redhat.com>
+Date: Fri, 1 Aug 2014 23:02:17 +0200
+Subject: gdb-vla-intel-stringbt-fix.patch
+
+;;=push+jan
+
+http://sourceware.org/ml/gdb-patches/2014-08/msg00025.html
+
+On Fri, 01 Aug 2014 09:20:19 +0200, Keven Boell wrote:
+> I just tried it on Fedora 20 i686.  Applied the patch, you mentioned, on top of
+> the Fortran VLA series and executed your dynamic-other-frame test.  Everything
+> is working fine here, I cannot reproduce the crash.
+
+I have it reproducible on Fedora 20 i686 with plain
+CFLAGS=-g ./configure;make;cd gdb/testsuite;make site.exp;runtest gdb.fortran/dynamic-other-frame.exp
+
+Besides that I have updated the testcase with
+	gdb_test_no_output "set print frame-arguments all"
+so that there is no longer needed the patch:
+	[patch] Display Fortran strings in backtraces
+	https://sourceware.org/ml/gdb-patches/2014-07/msg00709.html
+
+The fix below has no regressions for me.  Unfortunately I do not see why you
+cannot reproduce it.
+
+Thanks,
+Jan
+
+diff --git a/gdb/dwarf2loc.c b/gdb/dwarf2loc.c
+--- a/gdb/dwarf2loc.c
++++ b/gdb/dwarf2loc.c
+@@ -42,6 +42,7 @@
+ #include <algorithm>
+ #include <vector>
+ #include <unordered_set>
++#include <functional>
+ #include "common/underlying.h"
+ #include "common/byte-vector.h"
+ 
+@@ -2348,6 +2349,20 @@ dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame,
+   ctx.per_cu = per_cu;
+   ctx.obj_address = 0;
+ 
++frame_id old_frame_id (get_frame_id (deprecated_safe_get_selected_frame ()));
++class RestoreCall {
++private:
++  const std::function<void ()> func;
++public:
++  RestoreCall(std::function<void ()> func_):func(func_) {}
++  ~RestoreCall() { func(); }
++} restore_frame([=]() {
++  frame_info *old_frame (frame_find_by_id (old_frame_id));
++  if (old_frame != NULL)
++    select_frame (old_frame);
++});
++if (frame != NULL) select_frame (frame);
++
+   scoped_value_mark free_values;
+ 
+   ctx.gdbarch = get_objfile_arch (objfile);
+diff --git a/gdb/testsuite/gdb.fortran/dynamic-other-frame-stub.f90 b/gdb/testsuite/gdb.fortran/dynamic-other-frame-stub.f90
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.fortran/dynamic-other-frame-stub.f90
+@@ -0,0 +1,24 @@
++! Copyright 2010 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 2 of the License, 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; if not, write to the Free Software
++! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++!
++! Ihis file is the Fortran source file for dynamic.exp.
++! Original file written by Jakub Jelinek <jakub@redhat.com>.
++! Modified for the GDB testcase by Jan Kratochvil <jan.kratochvil@redhat.com>.
++
++subroutine bar
++  real :: dummy
++  dummy = 1
++end subroutine bar
+diff --git a/gdb/testsuite/gdb.fortran/dynamic-other-frame.exp b/gdb/testsuite/gdb.fortran/dynamic-other-frame.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.fortran/dynamic-other-frame.exp
+@@ -0,0 +1,39 @@
++# Copyright 2010 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 2 of the License, 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; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
++
++set testfile "dynamic-other-frame"
++set srcfile1 ${testfile}.f90
++set srcfile2 ${testfile}-stub.f90
++set objfile2 [standard_output_file ${testfile}-stub.o]
++set executable ${testfile}
++set binfile [standard_output_file ${executable}]
++
++if { [gdb_compile "${srcdir}/${subdir}/${srcfile2}" "${objfile2}" object {f90}] != ""
++     || [gdb_compile "${srcdir}/${subdir}/${srcfile1} ${objfile2}" "${binfile}" executable {debug f90}] != "" } {
++    untested "Couldn't compile ${srcfile1} or ${srcfile2}"
++    return -1
++}
++
++clean_restart ${executable}
++
++gdb_test_no_output "set print frame-arguments all"
++
++if ![runto bar_] then {
++    perror "couldn't run to bar_"
++    continue
++}
++
++gdb_test "bt" {foo \(string='hello'.*}
+diff --git a/gdb/testsuite/gdb.fortran/dynamic-other-frame.f90 b/gdb/testsuite/gdb.fortran/dynamic-other-frame.f90
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.fortran/dynamic-other-frame.f90
+@@ -0,0 +1,36 @@
++! Copyright 2010 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 2 of the License, 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; if not, write to the Free Software
++! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++!
++! Ihis file is the Fortran source file for dynamic.exp.
++! Original file written by Jakub Jelinek <jakub@redhat.com>.
++! Modified for the GDB testcase by Jan Kratochvil <jan.kratochvil@redhat.com>.
++
++subroutine foo (string)
++  interface
++    subroutine bar
++    end subroutine
++  end interface
++  character string*(*)
++  call bar                                ! stop-here
++end subroutine foo
++program test
++  interface
++    subroutine foo (string)
++    character string*(*)
++    end subroutine
++  end interface
++  call foo ('hello')
++end
diff --git a/SOURCES/gdb-vla-intel-tests.patch b/SOURCES/gdb-vla-intel-tests.patch
new file mode 100644
index 0000000..36c97ab
--- /dev/null
+++ b/SOURCES/gdb-vla-intel-tests.patch
@@ -0,0 +1,300 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-vla-intel-tests.patch
+
+;;=fedoratest
+
+diff --git a/gdb/testsuite/gdb.fortran/vla-func.exp b/gdb/testsuite/gdb.fortran/vla-func.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.fortran/vla-func.exp
+@@ -0,0 +1,61 @@
++# Copyright 2014 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++standard_testfile ".f90"
++
++if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
++    {debug f90 quiet}] } {
++    return -1
++}
++
++if ![runto MAIN__] then {
++    perror "couldn't run to breakpoint MAIN__"
++    continue
++}
++
++# Check VLA passed to first Fortran function.
++gdb_breakpoint [gdb_get_line_number "func1-vla-passed"]
++gdb_continue_to_breakpoint "func1-vla-passed"
++gdb_test "print vla" " = \\( *\\( *22, *22, *22,\[()22, .\]*\\)" \
++  "print vla (func1)"
++gdb_test "ptype vla" "type = integer\\\(kind=4\\\) \\\(10,10\\\)" \
++  "ptype vla (func1)"
++
++gdb_breakpoint [gdb_get_line_number "func1-vla-modified"]
++gdb_continue_to_breakpoint "func1-vla-modified"
++gdb_test "print vla(5,5)" " = 55" "print vla(5,5) (func1)"
++gdb_test "print vla(7,7)" " = 77" "print vla(5,5) (func1)"
++
++# Check if the values are correct after returning from func1
++gdb_breakpoint [gdb_get_line_number "func1-returned"]
++gdb_continue_to_breakpoint "func1-returned"
++gdb_test "print ret" " = .TRUE." "print ret after func1 returned"
++
++# Check VLA passed to second Fortran function
++gdb_breakpoint [gdb_get_line_number "func2-vla-passed"]
++gdb_continue_to_breakpoint "func2-vla-passed"
++gdb_test "print vla" \
++  " = \\\(44, 44, 44, 44, 44, 44, 44, 44, 44, 44\\\)" \
++  "print vla (func2)"
++gdb_test "ptype vla" "type = integer\\\(kind=4\\\) \\\(10\\\)" \
++  "ptype vla (func2)"
++
++# Check if the returned VLA has the correct values and ptype.
++gdb_breakpoint [gdb_get_line_number "func2-returned"]
++gdb_continue_to_breakpoint "func2-returned"
++gdb_test "print vla3" " = \\\(1, 2, 44, 4, 44, 44, 44, 8, 44, 44\\\)" \
++  "print vla3 (after func2)"
++gdb_test "ptype vla3" "type = integer\\\(kind=4\\\) \\\(10\\\)" \
++  "ptype vla3 (after func2)"
+diff --git a/gdb/testsuite/gdb.fortran/vla-func.f90 b/gdb/testsuite/gdb.fortran/vla-func.f90
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.fortran/vla-func.f90
+@@ -0,0 +1,71 @@
++! Copyright 2014 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 2 of the License, 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; if not, write to the Free Software
++! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++logical function func1 (vla)
++  implicit none
++  integer, allocatable :: vla (:, :)
++  func1 = allocated(vla)
++  vla(5,5) = 55               ! func1-vla-passed
++  vla(7,7) = 77
++  return                      ! func1-vla-modified
++end function func1
++
++function func2(vla)
++  implicit none
++  integer :: vla (:)
++  integer :: func2(size(vla))
++  integer :: k
++
++  vla(1) = 1                    ! func2-vla-passed
++  vla(2) = 2
++  vla(4) = 4
++  vla(8) = 8
++
++  func2 = vla
++end function func2
++
++program vla_func
++  implicit none
++  interface
++    logical function func1 (vla)
++      integer, allocatable :: vla (:, :)
++    end function
++  end interface
++  interface
++    function func2 (vla)
++      integer :: vla (:)
++      integer func2(size(vla))
++    end function
++  end interface
++
++  logical :: ret
++  integer, allocatable :: vla1 (:, :)
++  integer, allocatable :: vla2 (:)
++  integer, allocatable :: vla3 (:)
++
++  ret = .FALSE.
++
++  allocate (vla1 (10,10))
++  vla1(:,:) = 22
++
++  allocate (vla2 (10))
++  vla2(:) = 44
++
++  ret = func1(vla1)
++  vla3 = func2(vla2)          ! func1-returned
++
++  ret = .TRUE.                ! func2-returned
++end program vla_func
+diff --git a/gdb/testsuite/gdb.fortran/vla-stringsold.exp b/gdb/testsuite/gdb.fortran/vla-stringsold.exp
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.fortran/vla-stringsold.exp
+@@ -0,0 +1,101 @@
++# Copyright 2014 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 of the License, 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.  If not, see <http://www.gnu.org/licenses/>.
++
++standard_testfile ".f90"
++
++if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
++    {debug f90 quiet}] } {
++    return -1
++}
++
++# check that all fortran standard datatypes will be
++# handled correctly when using as VLA's
++
++if ![runto MAIN__] then {
++    perror "couldn't run to breakpoint MAIN__"
++    continue
++}
++
++gdb_breakpoint [gdb_get_line_number "var_char-allocated-1"]
++gdb_continue_to_breakpoint "var_char-allocated-1"
++gdb_test "print var_char" \
++  " = \\(PTR TO -> \\( character\\*10 \\)\\) ${hex}" \
++  "print var_char after allocated first time"
++gdb_test "whatis var_char" "type = PTR TO -> \\( character\\*10 \\)" \
++  "whatis var_char first time"
++gdb_test "ptype var_char" "type = PTR TO -> \\( character\\*10 \\)" \
++  "ptype var_char first time"
++gdb_test "next" "\\d+.*var_char = 'foo'.*" \
++  "next to allocation status of var_char"
++gdb_test "print l" " = .TRUE." "print allocation status first time"
++
++gdb_breakpoint [gdb_get_line_number "var_char-filled-1"]
++gdb_continue_to_breakpoint "var_char-filled-1"
++gdb_test "print var_char" \
++  " = \\(PTR TO -> \\( character\\*3 \\)\\) ${hex}" \
++  "print var_char after filled first time"
++gdb_test "print *var_char" " = 'foo'" \
++  "print *var_char after filled first time"
++gdb_test "whatis var_char" "type = PTR TO -> \\( character\\*3 \\)" \
++  "whatis var_char after filled first time"
++gdb_test "ptype var_char" "type = PTR TO -> \\( character\\*3 \\)" \
++  "ptype var_char after filled first time"
++gdb_test "print var_char(1)" " = 102 'f'" "print var_char(1)"
++gdb_test "print var_char(3)" " = 111 'o'" "print var_char(3)"
++
++gdb_breakpoint [gdb_get_line_number "var_char-filled-2"]
++gdb_continue_to_breakpoint "var_char-filled-2"
++gdb_test "print var_char" \
++  " = \\(PTR TO -> \\( character\\*6 \\)\\) ${hex}" \
++  "print var_char after allocated second time"
++gdb_test "print *var_char" " = 'foobar'" \
++  "print *var_char after allocated second time"
++gdb_test "whatis var_char" "type = PTR TO -> \\( character\\*6 \\)" \
++  "whatis var_char second time"
++gdb_test "ptype var_char" "type = PTR TO -> \\( character\\*6 \\)" \
++  "ptype var_char second time"
++
++gdb_breakpoint [gdb_get_line_number "var_char-empty"]
++gdb_continue_to_breakpoint "var_char-empty"
++gdb_test "print var_char" \
++  " = \\(PTR TO -> \\( character\\*0 \\)\\) ${hex}" \
++  "print var_char after set empty"
++gdb_test "print *var_char" " = \"\"" "print *var_char after set empty"
++gdb_test "whatis var_char" "type = PTR TO -> \\( character\\*0 \\)" \
++  "whatis var_char after set empty"
++gdb_test "ptype var_char" "type = PTR TO -> \\( character\\*0 \\)" \
++  "ptype var_char after set empty"
++
++gdb_breakpoint [gdb_get_line_number "var_char-allocated-3"]
++gdb_continue_to_breakpoint "var_char-allocated-3"
++gdb_test "print var_char" \
++  " = \\(PTR TO -> \\( character\\*21 \\)\\) ${hex}" \
++  "print var_char after allocated third time"
++gdb_test "whatis var_char" "type = PTR TO -> \\( character\\*21 \\)" \
++  "whatis var_char after allocated third time"
++gdb_test "ptype var_char" "type = PTR TO -> \\( character\\*21 \\)" \
++  "ptype var_char after allocated third time"
++
++gdb_breakpoint [gdb_get_line_number "var_char_p-associated"]
++gdb_continue_to_breakpoint "var_char_p-associated"
++gdb_test "print var_char_p" \
++  " = \\(PTR TO -> \\( character\\*7 \\)\\) ${hex}" \
++  "print var_char_p after associated"
++gdb_test "print *var_char_p" " = 'johndoe'" \
++  "print *var_char_ after associated"
++gdb_test "whatis var_char_p" "type = PTR TO -> \\( character\\*7 \\)" \
++  "whatis var_char_p after associated"
++gdb_test "ptype var_char_p" "type = PTR TO -> \\( character\\*7 \\)" \
++  "ptype var_char_p after associated"
+diff --git a/gdb/testsuite/gdb.fortran/vla-stringsold.f90 b/gdb/testsuite/gdb.fortran/vla-stringsold.f90
+new file mode 100644
+--- /dev/null
++++ b/gdb/testsuite/gdb.fortran/vla-stringsold.f90
+@@ -0,0 +1,40 @@
++! Copyright 2014 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 2 of the License, 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; if not, write to the Free Software
++! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++program vla_strings
++  character(len=:), target, allocatable   :: var_char
++  character(len=:), pointer               :: var_char_p
++  logical                                 :: l
++
++  allocate(character(len=10) :: var_char)
++  l = allocated(var_char)                 ! var_char-allocated-1
++  var_char = 'foo'
++  deallocate(var_char)                    ! var_char-filled-1
++  l = allocated(var_char)                 ! var_char-deallocated
++  allocate(character(len=42) :: var_char)
++  l = allocated(var_char)
++  var_char = 'foobar'
++  var_char = ''                           ! var_char-filled-2
++  var_char = 'bar'                        ! var_char-empty
++  deallocate(var_char)
++  allocate(character(len=21) :: var_char)
++  l = allocated(var_char)                 ! var_char-allocated-3
++  var_char = 'johndoe'
++  var_char_p => var_char
++  l = associated(var_char_p)              ! var_char_p-associated
++  var_char_p => null()
++  l = associated(var_char_p)              ! var_char_p-not-associated
++end program vla_strings
diff --git a/SOURCES/gdb-x86_64-i386-syscall-restart.patch b/SOURCES/gdb-x86_64-i386-syscall-restart.patch
new file mode 100644
index 0000000..575674f
--- /dev/null
+++ b/SOURCES/gdb-x86_64-i386-syscall-restart.patch
@@ -0,0 +1,123 @@
+From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
+From: Fedora GDB patches <invalid@email.com>
+Date: Fri, 27 Oct 2017 21:07:50 +0200
+Subject: gdb-x86_64-i386-syscall-restart.patch
+
+;; Fix syscall restarts for amd64->i386 biarch.
+;;=push+jan
+
+http://sourceware.org/ml/gdb-patches/2009-11/msg00592.html
+Subject: [patch] Fix syscall restarts for amd64->i386 biarch
+
+Hi,
+
+tested only on recent Linux kernels, it should apply also on vanilla ones.
+There were various changes of the kernels behavior in the past.
+
+FSF GDB HEAD state:
+kernel debugger inferior state
+x86_64 x86_64   x86_64   PASS
+x86_64 x86_64   i386     FAIL without this patch, PASS with this patch
+x86_64 i386     i386     PASS on recent kernels
+                         (FAIL: kernel-2.6.31.5-127.fc12.x86_64 - Fedora 12)
+                         (PASS: kernel-2.6.32-0.55.rc8.git1.fc13.x86_64)
+i386   i386     i386     PASS
+
+Currently gdb.base/interrupt.exp fails on amd64 host running under
+--target_board unix/-m32 with:
+	continue
+	Continuing.
+	Unknown error 512
+
+<linux/errno.h>:
+/*
+ * These should never be seen by user programs.  To return one of ERESTART*
+ * codes, signal_pending() MUST be set.  Note that ptrace can observe these
+ * at syscall exit tracing, but they will never be left for the debugged user
+ * process to see.
+ */
+
+"Unknown error 512" printed above is printed by the inferior itself, not by GDB.
+
+It is because GDB reads it as 0xfffffffffffffe00 but writes it back as
+0xfffffe00.
++      /* Sign-extend %eax as during return from a syscall it is being checked
++	 for -ERESTART* values -512 being above 0xfffffffffffffe00; tested by
++	 interrupt.exp.  */
+
+Quote of Roland McGrath from IRC:
+
+roland: in the user_regset model, there are 64-bit user_regset flavors and
+32-bit user_regset flavors, so at the kabi level the (kernel) caller can say
+what it means: calls on the 32-bit user_regset flavor will behave as if on
+a 32-bit kernel/userland.  in ptrace, there is no way for x86_64 ptrace calls
+to say "i think of the inferior as being 32 bits, so act accordingly" (tho ppc
+and/or sparc have ptr
+roland: ace requests that do that iirc)
+roland: ergo 64-bit ptrace callers must either save/restore full 64-bits so
+the kernel's sign-extension choices are preserved, or else grok magic ways to
+expand stored 32-bit register contents to 64-bit values to stuff via 64-bit
+ptrace
+[...]
+roland: there is a "32-bit-flavored task", but it's not really true that it
+has 32-bit registers.  there is no 32-bit-only userland condition.  any task
+can always ljmp to the 64-bit code segment and run 64-bit insns including
+a 64-bit syscall
+roland: so a 64-bit debugger should see and be able to fiddle the full
+registers.  it can even change cs via ptrace to force the inferior into
+running 32 or 64 bit code.
+
+Saving whole 64bits for i386 targets on x86_64 hosts does not much match the
+GDB architecture as `struct type' for these registers still should be 32bit
+etc.   Therefore provided just this exception.
+
+The problem is reproducible only if one does an inferior call during the
+interruption to do full inferior save/restore from GDB regcache.
+
+Regression tested on {x86_64,x86_64-m32,i686}-fedora12-linux-gnu.
+
+Thanks,
+Jan
+
+gdb/
+2009-11-29  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* amd64-nat.c (amd64_collect_native_gregset): Do not pre-clear %eax.
+	Sign extend it afterwards.
+
+diff --git a/gdb/amd64-nat.c b/gdb/amd64-nat.c
+--- a/gdb/amd64-nat.c
++++ b/gdb/amd64-nat.c
+@@ -135,9 +135,9 @@ amd64_collect_native_gregset (const struct regcache *regcache,
+     {
+       num_regs = amd64_native_gregset32_num_regs;
+ 
+-      /* Make sure %eax, %ebx, %ecx, %edx, %esi, %edi, %ebp, %esp and
++      /* Make sure %ebx, %ecx, %edx, %esi, %edi, %ebp, %esp and
+          %eip get zero-extended to 64 bits.  */
+-      for (i = 0; i <= I386_EIP_REGNUM; i++)
++      for (i = I386_ECX_REGNUM; i <= I386_EIP_REGNUM; i++)
+ 	{
+ 	  if (regnum == -1 || regnum == i)
+ 	    memset (regs + amd64_native_gregset_reg_offset (gdbarch, i), 0, 8);
+@@ -163,4 +163,20 @@ amd64_collect_native_gregset (const struct regcache *regcache,
+ 	    regcache->raw_collect (i, regs + offset);
+ 	}
+     }
++
++  if (gdbarch_bfd_arch_info (gdbarch)->bits_per_word == 32)
++    {
++      /* Sign-extend %eax as during return from a syscall it is being checked
++	 for -ERESTART* values -512 being above 0xfffffffffffffe00; tested by
++	 interrupt.exp.  */
++
++      int i = I386_EAX_REGNUM;
++
++      if (regnum == -1 || regnum == i)
++	{
++	  void *ptr = regs + amd64_native_gregset_reg_offset (gdbarch, i);
++
++	  *(int64_t *) ptr = *(int32_t *) ptr;
++	}
++    }
+ }
diff --git a/SOURCES/gdbinit b/SOURCES/gdbinit
new file mode 100644
index 0000000..b59fb0d
--- /dev/null
+++ b/SOURCES/gdbinit
@@ -0,0 +1,9 @@
+# System-wide GDB initialization file.
+python
+import glob
+# glob.iglob is not available in python-2.4 (RHEL-5).
+for f in glob.glob('%{_sysconfdir}/gdbinit.d/*.gdb'):
+  gdb.execute('source %s' % f)
+for f in glob.glob('%{_sysconfdir}/gdbinit.d/*.py'):
+  gdb.execute('source %s' % f)
+end
diff --git a/SOURCES/gdbtui b/SOURCES/gdbtui
new file mode 100755
index 0000000..88f9d55
--- /dev/null
+++ b/SOURCES/gdbtui
@@ -0,0 +1,2 @@
+#! /bin/sh
+exec gdb -tui "$@"
diff --git a/SOURCES/v1.5-libipt-static.patch b/SOURCES/v1.5-libipt-static.patch
new file mode 100644
index 0000000..6599445
--- /dev/null
+++ b/SOURCES/v1.5-libipt-static.patch
@@ -0,0 +1,26 @@
+Index: processor-trace-2.0/libipt/CMakeLists.txt
+===================================================================
+--- processor-trace-2.0.orig/libipt/CMakeLists.txt
++++ processor-trace-2.0/libipt/CMakeLists.txt
+@@ -85,7 +85,7 @@ endif (CMAKE_HOST_WIN32)
+ 
+ set(LIBIPT_FILES ${LIBIPT_FILES} ${LIBIPT_SECTION_FILES})
+ 
+-add_library(libipt SHARED
++add_library(libipt STATIC
+   ${LIBIPT_FILES}
+ )
+ 
+Index: processor-trace-2.0/libipt/src/posix/init.c
+===================================================================
+--- processor-trace-2.0.orig/libipt/src/posix/init.c
++++ processor-trace-2.0/libipt/src/posix/init.c
+@@ -29,7 +29,7 @@
+ #include "pt_ild.h"
+ 
+ 
+-static void __attribute__((constructor)) init(void)
++void __libipt_init(void)
+ {
+ 	/* Initialize the Intel(R) Processor Trace instruction decoder. */
+ 	pt_ild_init();
diff --git a/SPECS/gdb.spec b/SPECS/gdb.spec
new file mode 100644
index 0000000..54f41ef
--- /dev/null
+++ b/SPECS/gdb.spec
@@ -0,0 +1,5347 @@
+# rpmbuild parameters:
+# --with testsuite: Run the testsuite (biarch if possible).  Default is without.
+# --with buildisa: Use %%{?_isa} for BuildRequires
+# --with asan: gcc -fsanitize=address
+# --without python: No python support.
+# --with profile: gcc -fprofile-generate / -fprofile-use: Before better
+#                 workload gets run it decreases the general performance now.
+# --define 'scl somepkgname': Independent packages by scl-utils-build.
+
+%{?scl:%scl_package gdb}
+%{!?scl:
+ %global pkg_name %{name}
+ %global _root_prefix %{_prefix}
+ %global _root_datadir %{_datadir}
+ %global _root_libdir %{_libdir}
+}
+
+Name: %{?scl_prefix}gdb
+
+# Freeze it when GDB gets branched
+%global snapsrc    20180828
+# See timestamp of source gnulib installed into gdb/gnulib/ .
+%global snapgnulib 20161115
+%global tarname gdb-%{version}
+Version: 8.2
+
+# The release always contains a leading reserved number, start it at 1.
+# `upstream' is not a part of `name' to stay fully rpm dependencies compatible for the testing.
+Release: 5%{?dist}
+
+License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ and GPLv2+ with exceptions and GPL+ and LGPLv2+ and LGPLv3+ and BSD and Public Domain and GFDL
+Group: Development/Debuggers
+# Do not provide URL for snapshots as the file lasts there only for 2 days.
+# ftp://sourceware.org/pub/gdb/releases/FIXME{tarname}.tar.xz
+#Source: %{tarname}.tar.xz
+Source: ftp://sourceware.org/pub/gdb/releases/%{tarname}.tar.xz
+URL: http://gnu.org/software/gdb/
+
+# For our convenience
+%global gdb_src %{tarname}
+%global gdb_build build-%{_target_platform}
+
+# error: Installed (but unpackaged) file(s) found: /usr/lib/debug/usr/bin/gdb-gdb.py
+# https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/message/PBOJDOFMWTRV3ZOKNV5HN7IBX5EPHDHF/
+%undefine _debuginfo_subpackages
+
+# For DTS RHEL<=7 GDB it is better to use none than a Requires dependency.
+%if 0%{!?rhel:1} || 0%{?rhel} > 7
+Recommends: %{?scl_prefix}gcc-gdb-plugin%{?_isa}
+Recommends: dnf-command(debuginfo-install)
+%endif
+
+%if 0%{!?scl:1}
+# when manpages were moved from -headless to main
+# https://bugzilla.redhat.com/show_bug.cgi?id=1402554
+# theoretically should not be required due to versioned dependeny
+# below, but it cannot hurt either -- rdieter
+Conflicts: gdb-headless < 7.12-29
+
+Summary: A stub package for GNU source-level debugger
+Requires: gdb-headless%{?_isa} = %{version}-%{release}
+
+%description
+'gdb' package is only a stub to install gcc-gdb-plugin for 'compile' commands.
+See package 'gdb-headless'.
+
+%package headless
+Group: Development/Debuggers
+%endif
+
+Summary: A GNU source-level debugger for C, C++, Fortran, Go and other languages
+
+# Make sure we get rid of the old package gdb64, now that we have unified
+# support for 32-64 bits in one single 64-bit gdb.
+%ifarch ppc64
+Obsoletes: gdb64 < 5.3.91
+%endif
+
+%ifarch %{arm}
+%global have_inproctrace 0
+%else
+%global have_inproctrace 1
+%endif
+
+# gdb-add-index cannot be run even for SCL package on RHEL<=6.
+%if 0%{!?rhel:1} || 0%{?rhel} > 6
+# eu-strip: -g recognizes .gdb_index as a debugging section. (#631997)
+Conflicts: elfutils < 0.149
+%endif
+
+# https://fedorahosted.org/fpc/ticket/43 https://fedorahosted.org/fpc/ticket/109
+Provides: bundled(libiberty) = %{snapsrc}
+Provides: bundled(gnulib) = %{snapgnulib}
+Provides: bundled(binutils) = %{snapsrc}
+# https://fedorahosted.org/fpc/ticket/130
+Provides: bundled(md5-gcc) = %{snapsrc}
+
+# https://fedoraproject.org/wiki/Packaging:Guidelines#BuildRequires_and_.25.7B_isa.7D
+%if 0%{?_with_buildisa:1} || 0%{?_with_testsuite:1}
+%global buildisa %{?_isa}
+%else
+%global buildisa %{nil}
+%endif
+
+%if 0%{!?rhel:1} || 0%{?rhel} > 7
+# https://bugzilla.redhat.com/show_bug.cgi?id=1209492
+Recommends: default-yama-scope
+%endif
+
+%if 0%{?el6:1}
+%global librpmver 1
+%else
+# FIXME: %elif does not work.
+%if 0%{?el7:1}
+%global librpmver 3
+%else
+%if 0%{?fedora} >= 27 || 0%{?rhel} > 7
+%global librpmver 8
+%else
+%global librpmver 7
+%endif
+%endif
+%endif
+%if 0%{?__isa_bits} == 64
+%global librpmname librpm.so.%{librpmver}()(64bit)
+%else
+%global librpmname librpm.so.%{librpmver}
+%endif
+BuildRequires: rpm-libs%{buildisa}
+%if 0%{?_with_buildisa:1}
+BuildRequires: %{librpmname}
+%endif
+%if 0%{!?rhel:1} || 0%{?rhel} > 7
+Recommends: %{librpmname}
+%endif
+
+%if 0%{?el6:1}
+# GDB C++11 requires devtoolset gcc.
+BuildRequires: %{?scl_prefix}gcc-c++
+%endif
+
+# GDB patches have the format `gdb-<version>-bz<red-hat-bz-#>-<desc>.patch'.
+# They should be created using patch level 1: diff -up ./gdb (or gdb-6.3/gdb).
+
+#=
+#push=Should be pushed upstream.
+#fedora=Should stay as a Fedora patch.
+#fedoratest=Keep it in Fedora only as a regression test safety.
+
+# Cleanup any leftover testsuite processes as it may stuck mock(1) builds.
+#=push+jan
+Source2: gdb-orphanripper.c
+
+# Man page for gstack(1).
+#=push+jan
+Source3: gdb-gstack.man
+
+# /etc/gdbinit (from Debian but with Fedora compliant location).
+#=fedora
+Source4: gdbinit
+
+# libstdc++ pretty printers from GCC SVN.
+%global libstdcxxpython gdb-libstdc++-v3-python-8.1.1-20180626
+#=fedora
+Source5: %{libstdcxxpython}.tar.xz
+
+# Provide gdbtui for RHEL-5 and RHEL-6 as it is removed upstream (BZ 797664).
+#=fedora
+Source6: gdbtui
+
+# libipt: Intel Processor Trace Decoder Library
+%global libipt_version 2.0
+#=fedora
+Source7: v%{libipt_version}.tar.gz
+#=fedora
+Patch1142: v1.5-libipt-static.patch
+
+## [testsuite] Fix false selftest.exp FAIL from system readline-6.3+ (Patrick Palka).
+##=fedoratest
+#Patch1075: gdb-testsuite-readline63-sigint.patch
+##=fedoratest
+Patch1119: gdb-testsuite-readline63-sigint-revert.patch
+
+# Include the auto-generated file containing the "Patch:" directives.
+# See README.local-patches for more details.
+Source8: _gdb.spec.Patch.include
+Source9: _gdb.spec.patch.include
+%include %{SOURCE8}
+
+%if 0%{!?rhel:1} || 0%{?rhel} > 6
+# RL_STATE_FEDORA_GDB would not be found for:
+# Patch642: gdb-readline62-ask-more-rh.patch
+# --with-system-readline
+BuildRequires: readline-devel%{buildisa} >= 6.2-4
+%endif # 0%{!?rhel:1} || 0%{?rhel} > 6
+
+BuildRequires: gcc-c++ ncurses-devel%{buildisa} texinfo gettext flex bison
+BuildRequires: expat-devel%{buildisa}
+%if 0%{!?rhel:1} || 0%{?rhel} > 6
+BuildRequires: xz-devel%{buildisa}
+%endif
+# dlopen() no longer makes rpm-libsFIXME{?_isa} (it's .so) a mandatory dependency.
+BuildRequires: rpm-devel%{buildisa}
+BuildRequires: zlib-devel%{buildisa} libselinux-devel%{buildisa}
+%if 0%{!?_without_python:1}
+%if 0%{?rhel:1} && 0%{?rhel} <= 7
+BuildRequires: python-devel%{buildisa}
+%else
+%global __python %{__python3}
+BuildRequires: python3-devel%{buildisa}
+%endif
+%if 0%{?rhel:1} && 0%{?rhel} <= 7
+# Temporarily before python files get moved to libstdc++.rpm
+# libstdc++%{bits_other} is not present in Koji, the .spec script generating
+# gdb/python/libstdcxx/ also does not depend on the %{bits_other} files.
+BuildRequires: libstdc++%{buildisa}
+%endif # 0%{?rhel:1} && 0%{?rhel} <= 7
+%endif # 0%{!?_without_python:1}
+# gdb-doc in PDF, see: https://bugzilla.redhat.com/show_bug.cgi?id=919891#c10
+BuildRequires: texinfo-tex
+%if 0%{!?rhel:1} || 0%{?rhel} > 6
+BuildRequires: texlive-collection-latexrecommended
+%endif
+# Permit rebuilding *.[0-9] files even if they are distributed in gdb-*.tar:
+BuildRequires: /usr/bin/pod2man
+%if 0%{!?rhel:1} || 0%{?rhel} > 7
+BuildRequires: libbabeltrace-devel%{buildisa}
+BuildRequires: guile-devel%{buildisa}
+%endif
+%global have_libipt 0
+%if 0%{!?rhel:1} || 0%{?rhel} > 7 || (0%{?rhel} == 7 && 0%{?scl:1})
+%ifarch %{ix86} x86_64
+%global have_libipt 1
+%if 0%{?el7:1} && 0%{?scl:1}
+BuildRequires: cmake
+%else
+BuildRequires: libipt-devel%{buildisa}
+%endif
+%endif
+%endif
+%if 0%{!?rhel:1} || 0%{?rhel} > 6
+# See https://bugzilla.redhat.com/show_bug.cgi?id=1593280
+# DTS RHEL-6 has mpfr-2 while GDB requires mpfr-3.
+BuildRequires: mpfr-devel%{buildisa}
+%endif
+
+%if 0%{?_with_testsuite:1}
+
+# Ensure the devel libraries are installed for both multilib arches.
+%global bits_local %{?_isa}
+%global bits_other %{?_isa}
+%ifarch s390x
+%if 0%{!?rhel:1} || 0%{?rhel} < 8
+%global bits_other (%{__isa_name}-32)
+%endif
+%else #!s390x
+%ifarch ppc
+%global bits_other (%{__isa_name}-64)
+%else #!ppc
+%ifarch sparc64 ppc64 s390x x86_64
+%global bits_other (%{__isa_name}-32)
+%endif #sparc64 ppc64 s390x x86_64
+%endif #!ppc
+%endif #!s390x
+
+BuildRequires: sharutils dejagnu
+# gcc-objc++ is not covered by the GDB testsuite.
+BuildRequires: gcc gcc-c++ gcc-gfortran
+%if 0%{!?rhel:1} || 0%{?rhel} < 8
+BuildRequires: gcc-objc
+%endif
+%if 0%{!?rhel:1} || 0%{?rhel} > 7
+BuildRequires: gcc-gdb-plugin%{?_isa}
+%endif
+%if 0%{?rhel:1} && 0%{?rhel} < 7
+BuildRequires: gcc-java libgcj%{bits_local} libgcj%{bits_other}
+# for gcc-java linkage:
+BuildRequires: zlib-devel%{bits_local} zlib-devel%{bits_other}
+%endif
+# Exception for RHEL<=7
+%ifarch aarch64
+%if 0%{!?rhel:1} || 0%{?rhel} == 7
+BuildRequires: gcc-go
+BuildRequires: libgo-devel%{bits_local} libgo-devel%{bits_other}
+%endif
+%else
+%if 0%{!?rhel:1} || 0%{?rhel} == 7
+BuildRequires: gcc-go
+BuildRequires: libgo-devel%{bits_local} libgo-devel%{bits_other}
+%endif
+%endif
+# archer-sergiodj-stap-patch-split
+BuildRequires: systemtap-sdt-devel
+%if 0%{?rhel:1} && 0%{?rhel} <= 7
+# Copied from prelink-0.4.2-3.fc13.
+# Prelink is not yet ported to ppc64le.
+%ifarch %{ix86} alpha sparc sparcv9 sparc64 s390 s390x x86_64 ppc ppc64
+# Prelink is broken on sparcv9/sparc64.
+%ifnarch sparc sparcv9 sparc64
+BuildRequires: prelink
+%endif
+%endif
+%endif
+# MPX not supported on RHEL
+%if 0%{!?rhel:1}
+%ifarch %{ix86} x86_64
+BuildRequires: libmpx%{bits_local} libmpx%{bits_other}
+%endif
+BuildRequires: opencl-headers ocl-icd-devel%{bits_local} ocl-icd-devel%{bits_other}
+%endif
+%if 0%{!?rhel:1}
+# Fedora arm+ppc64le do not yet have fpc built.
+%ifnarch %{arm} ppc64le
+BuildRequires: fpc
+%endif
+%endif
+# Copied from: gcc-6.2.1-1.fc26
+# Exception for RHEL<=7
+%ifarch s390x
+%if 0%{!?rhel:1} || 0%{?rhel} <= 7
+BuildRequires: gcc-gnat
+BuildRequires: libgnat%{bits_local} libgnat%{bits_other}
+%endif
+%else
+%ifarch %{ix86} x86_64 ia64 ppc %{power64} alpha s390x %{arm} aarch64
+%if 0%{!?rhel:1} || 0%{?rhel} <= 7
+BuildRequires: gcc-gnat
+BuildRequires: libgnat%{bits_local} libgnat%{bits_other}
+%endif
+%endif
+%endif
+BuildRequires: glibc-devel%{bits_local} glibc-devel%{bits_other}
+BuildRequires: libgcc%{bits_local} libgcc%{bits_other}
+BuildRequires: libgfortran%{bits_local} libgfortran%{bits_other}
+# libstdc++-devel of matching bits is required only for g++ -static.
+BuildRequires: libstdc++%{bits_local} libstdc++%{bits_other}
+%if 0%{!?rhel:1} || 0%{?rhel} > 6
+%ifarch %{ix86} x86_64
+BuildRequires: libquadmath%{bits_local} libquadmath%{bits_other}
+%endif
+%endif
+BuildRequires: glibc-static%{bits_local}
+# multilib glibc-static is open Bug 488472:
+#BuildRequires: glibc-static%{bits_other}
+# Exception for RHEL<=7
+%ifarch s390x
+BuildRequires: valgrind%{bits_local}
+%if 0%{!?rhel:1} || 0%{?rhel} > 7
+BuildRequires: valgrind%{bits_local} valgrind%{bits_other}
+%endif
+%else
+BuildRequires: valgrind%{bits_local} valgrind%{bits_other}
+%endif
+%if 0%{!?rhel:1} || 0%{?rhel} > 6
+BuildRequires: xz
+%endif
+%if 0%{!?rhel:1} || 0%{?rhel} > 7
+BuildRequires: rust
+%endif
+
+%endif # 0%{?_with_testsuite:1}
+
+%{?scl:Requires:%scl_runtime}
+
+# FIXME: The text needs to be duplicated to prevent 2 empty heading lines.
+%if 0%{!?scl:1}
+%description headless
+GDB, the GNU debugger, allows you to debug programs written in C, C++,
+Java, and other languages, by executing them in a controlled fashion
+and printing their data.
+%else
+%description
+GDB, the GNU debugger, allows you to debug programs written in C, C++,
+Java, and other languages, by executing them in a controlled fashion
+and printing their data.
+%endif
+
+%package gdbserver
+Summary: A standalone server for GDB (the GNU source-level debugger)
+Group: Development/Debuggers
+
+%description gdbserver
+GDB, the GNU debugger, allows you to debug programs written in C, C++,
+Java, and other languages, by executing them in a controlled fashion
+and printing their data.
+
+This package provides a program that allows you to run GDB on a different
+machine than the one which is running the program being debugged.
+
+%package doc
+Summary: Documentation for GDB (the GNU source-level debugger)
+License: GFDL
+Group: Documentation
+BuildArch: noarch
+%if 0%{?scl:1}
+# As of F-28, packages won't need to call /sbin/install-info by hand
+# anymore.  We make an exception for DTS here.
+# https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/MP2QVJZBOJZEOQO2G7UB2HLXKXYPF2G5/
+Requires(post): /sbin/install-info
+Requires(preun): /sbin/install-info
+%endif
+
+%description doc
+GDB, the GNU debugger, allows you to debug programs written in C, C++,
+Java, and other languages, by executing them in a controlled fashion
+and printing their data.
+
+This package provides INFO, HTML and PDF user manual for GDB.
+
+%prep
+%setup -q -n %{gdb_src}
+
+%if 0%{?rhel:1} && 0%{?rhel} <= 7
+# libstdc++ pretty printers.
+tar xJf %{SOURCE5}
+%endif # 0%{?rhel:1} && 0%{?rhel} <= 7
+
+%if 0%{have_libipt} && 0%{?el7:1} && 0%{?scl:1}
+tar xzf %{SOURCE7}
+(
+ cd processor-trace-%{libipt_version}
+%patch1142 -p1
+)
+%endif
+
+# Files have `# <number> <file>' statements breaking VPATH / find-debuginfo.sh .
+(cd gdb;rm -fv $(perl -pe 's/\\\n/ /' <Makefile.in|sed -n 's/^YYFILES = //p'))
+
+# *.info* is needlessly split in the distro tar; also it would not get used as
+# we build in %{gdb_build}, just to be sure.
+find -name "*.info*"|xargs rm -f
+
+# Apply patches defined on _gdb.spec.Patch.include
+
+# Include the auto-generated "%patch" directives.
+# See README.local-patches for more details.
+%include %{SOURCE9}
+
+%if 0%{!?el6:1}
+for i in \
+  gdb/python/lib/gdb/FrameWrapper.py \
+  gdb/python/lib/gdb/backtrace.py \
+  gdb/python/lib/gdb/command/backtrace.py \
+  ;do
+  test -e $i
+  : >$i
+done
+%endif
+
+%if 0%{?rhel:1} && 0%{?rhel} <= 7
+%patch1119 -p1
+%endif
+
+find -name "*.orig" | xargs rm -f
+! find -name "*.rej" # Should not happen.
+
+# Change the version that gets printed at GDB startup, so it is RH specific.
+cat > gdb/version.in << _FOO
+%if 0%{!?rhel:1}
+Fedora %{version}-%{release}
+%else # !0%{!?rhel:1} 
+Red Hat Enterprise Linux %{version}-%{release}
+%endif # !0%{!?rhel:1} 
+_FOO
+
+# Remove the info and other generated files added by the FSF release
+# process.
+rm -f libdecnumber/gstdint.h
+rm -f bfd/doc/*.info
+rm -f bfd/doc/*.info-*
+rm -f gdb/doc/*.info
+rm -f gdb/doc/*.info-*
+
+%if 0%{!?rhel:1} || 0%{?rhel} > 6
+# RL_STATE_FEDORA_GDB would not be found for:
+# Patch642: gdb-readline62-ask-more-rh.patch
+# --with-system-readline
+mv -f readline/doc readline-doc
+rm -rf readline/*
+mv -f readline-doc readline/doc
+%endif # 0%{!?rhel:1} || 0%{?rhel} > 6
+
+rm -rf zlib texinfo
+
+%build
+rm -rf %{buildroot}
+
+test -e %{_root_libdir}/librpm.so.%{librpmver}
+
+%if 0%{?el6:1}
+# GDB C++11 requires devtoolset gcc.
+%{?scl:PATH=%{_bindir}${PATH:+:${PATH}}}
+%endif
+
+# Identify the build directory with the version of gdb as well as the
+# architecture, to allow for mutliple versions to be installed and
+# built.
+# Initially we're in the %{gdb_src} directory.
+
+for fprofile in %{?_with_profile:-fprofile} ""
+do
+
+mkdir %{gdb_build}$fprofile
+cd %{gdb_build}$fprofile
+
+export CFLAGS="$RPM_OPT_FLAGS %{?_with_asan:-fsanitize=address}"
+export LDFLAGS="%{?__global_ldflags} %{?_with_asan:-fsanitize=address}"
+
+%if 0%{!?rhel:1} || 0%{?rhel} > 7
+CFLAGS="$CFLAGS -DDNF_DEBUGINFO_INSTALL"
+%endif
+
+# Patch833: gdb-6.6-buildid-locate-rpm-scl.patch
+%if 0%{?el6:1} && 0%{?scl:1}
+CFLAGS="$CFLAGS -DGDB_INDEX_VERIFY_VENDOR"
+%endif
+
+# [dts+el7] [x86*] Bundle linux_perf.h for libipt (RH BZ 1256513).
+%if %{have_libipt} && 0%{?el7:1} && 0%{?scl:1}
+CFLAGS="$CFLAGS -DPERF_ATTR_SIZE_VER5_BUNDLE"
+%endif
+
+# Patch642: gdb-readline62-ask-more-rh.patch
+%if 0%{?rhel} == 7
+CFLAGS="$CFLAGS -DNEED_RL_STATE_FEDORA_GDB"
+%else
+# FIXME: Why not just: ! grep -w ...
+if grep -w RL_STATE_FEDORA_GDB %{_includedir}/readline/readline.h;then false;fi
+%endif
+
+# Patch337: gdb-6.8-attach-signalled-detach-stopped.patch
+# Patch331: gdb-6.8-quit-never-aborts.patch
+%if 0%{?rhel:1} && 0%{?rhel} <= 6
+CFLAGS="$CFLAGS -DNEED_DETACH_SIGSTOP"
+%endif
+
+%if 0%{have_libipt} && 0%{?el7:1} && 0%{?scl:1}
+(
+ mkdir processor-trace-%{libipt_version}-root
+ mkdir processor-trace-%{libipt_version}-build
+ cd    processor-trace-%{libipt_version}-build
+ # -DPTUNIT:BOOL=ON has no effect on ctest.
+ %cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo \
+	-DPTUNIT:BOOL=OFF \
+	-DDEVBUILD:BOOL=ON \
+	../../processor-trace-%{libipt_version}
+ make VERBOSE=1 %{?_smp_mflags}
+ ctest -V %{?_smp_mflags}
+ make install DESTDIR=../processor-trace-%{libipt_version}-root
+)
+# There is also: --with-libipt-prefix
+CFLAGS="$CFLAGS -I$PWD/processor-trace-%{libipt_version}-root%{_includedir}"
+LDFLAGS="$LDFLAGS -L$PWD/processor-trace-%{libipt_version}-root%{_libdir}"
+%endif
+
+export CXXFLAGS="$CFLAGS"
+
+# --htmldir and --pdfdir are not used as they are used from %{gdb_build}.
+../configure							\
+	--prefix=%{_prefix}					\
+	--libdir=%{_libdir}					\
+	--sysconfdir=%{_sysconfdir}				\
+	--mandir=%{_mandir}					\
+	--infodir=%{_infodir}					\
+	--with-system-gdbinit=%{_sysconfdir}/gdbinit		\
+	--with-gdb-datadir=%{_datadir}/gdb			\
+	--enable-gdb-build-warnings=,-Wno-unused		\
+	--enable-build-with-cxx					\
+%ifnarch %{ix86} alpha ppc s390 s390x x86_64 ppc64 ppc64le sparc sparcv9 sparc64 %{arm} aarch64
+	--disable-werror					\
+%else
+	--enable-werror						\
+%endif
+	--with-separate-debug-dir=/usr/lib/debug		\
+	--disable-sim						\
+	--disable-rpath						\
+	--without-stage1-ldflags				\
+	--disable-libmcheck					\
+%if 0%{!?rhel:1} || 0%{?rhel} > 7
+	--with-babeltrace					\
+	--with-guile						\
+%else
+	--without-babeltrace					\
+	--without-guile						\
+%endif
+%if 0%{!?rhel:1} || 0%{?rhel} > 6
+	--with-system-readline					\
+%else
+	--without-system-readline				\
+%endif
+	--with-expat						\
+$(: ppc64 host build crashes on ppc variant of libexpat.so )	\
+	--without-libexpat-prefix				\
+	--enable-tui						\
+%if 0%{!?_without_python:1}
+	--with-python=%{__python}				\
+%else
+	--without-python					\
+%endif
+	--with-rpm=librpm.so.%{librpmver}			\
+%if 0%{!?rhel:1} || 0%{?rhel} > 6
+	--with-lzma						\
+%else
+	--without-lzma						\
+%endif
+	--without-libunwind					\
+%ifarch sparc sparcv9 sparc64
+	--without-mmap						\
+%endif
+	--enable-64-bit-bfd					\
+%if %{have_inproctrace}
+	--enable-inprocess-agent				\
+%else
+	--disable-inprocess-agent				\
+%endif
+	--with-system-zlib					\
+%if %{have_libipt}
+	--with-intel-pt						\
+%else
+	--without-intel-pt					\
+%endif
+%if 0%{!?rhel:1} || 0%{?rhel} > 6
+	--with-mpfr						\
+%else
+	--without-mpfr						\
+%endif
+	      --with-auto-load-dir='$debugdir:$datadir/auto-load%{?scl::%{_root_datadir}/gdb/auto-load}'	\
+	--with-auto-load-safe-path='$debugdir:$datadir/auto-load%{?scl::%{_root_datadir}/gdb/auto-load}'	\
+%ifarch sparc sparcv9
+	sparc-%{_vendor}-%{_target_os}%{?_gnu}
+%else
+	--enable-targets=s390-linux-gnu,powerpc-linux-gnu,arm-linux-gnu,aarch64-linux-gnu	\
+	%{_target_platform}
+%endif
+
+if [ -z "%{!?_with_profile:no}" ]
+then
+  # Run all the configure tests being incompatible with $FPROFILE_CFLAGS.
+  make %{?_smp_mflags} configure-host configure-target
+  make %{?_smp_mflags} clean
+
+  # Workaround -fprofile-use:
+  # linux-x86-low.c:2225: Error: symbol `start_i386_goto' is already defined
+  make %{?_smp_mflags} -C gdb/gdbserver linux-x86-low.o
+fi
+
+# Global CFLAGS would fail on:
+# conftest.c:1:1: error: coverage mismatch for function 'main' while reading counter 'arcs'
+if [ "$fprofile" = "-fprofile" ]
+then
+  FPROFILE_CFLAGS='-fprofile-generate'
+elif [ -z "%{!?_with_profile:no}" ]
+then
+  FPROFILE_CFLAGS='-fprofile-use'
+  # We cannot use -fprofile-dir as the bare filenames clash.
+  (cd ../%{gdb_build}-fprofile;
+   # It was 333 on x86_64.
+   test $(find -name "*.gcda"|wc -l) -gt 300
+   find -name "*.gcda" | while read -r i
+   do
+     ln $i ../%{gdb_build}/$i
+   done
+  )
+else
+  FPROFILE_CFLAGS=""
+fi
+
+# Prepare gdb/config.h first.
+make %{?_smp_mflags} CFLAGS="$CFLAGS $FPROFILE_CFLAGS" LDFLAGS="$LDFLAGS $FPROFILE_CFLAGS" V=1 maybe-configure-gdb
+perl -i.relocatable -pe 's/^(D\[".*_RELOCATABLE"\]=" )1(")$/${1}0$2/' gdb/config.status
+
+make %{?_smp_mflags} CFLAGS="$CFLAGS $FPROFILE_CFLAGS" LDFLAGS="$LDFLAGS $FPROFILE_CFLAGS" V=1
+
+! grep '_RELOCATABLE.*1' gdb/config.h
+grep '^#define HAVE_LIBSELINUX 1$' gdb/config.h
+grep '^#define HAVE_SELINUX_SELINUX_H 1$' gdb/config.h
+
+if [ "$fprofile" = "-fprofile" ]
+then
+  cd gdb
+  cp -p gdb gdb-withindex
+  PATH="$PWD:$PATH" sh ../../gdb/gdb-add-index $PWD/gdb-withindex
+  ./gdb -nx -ex q ./gdb-withindex
+  ./gdb -nx -readnow -ex q ./gdb-withindex
+  cd ..
+fi
+
+cd ..
+
+done	# fprofile
+
+cd %{gdb_build}
+
+make %{?_smp_mflags} \
+     -C gdb/doc {gdb,annotate}{.info,/index.html,.pdf} MAKEHTMLFLAGS=--no-split MAKEINFOFLAGS=--no-split V=1
+
+# Copy the <sourcetree>/gdb/NEWS file to the directory above it.
+cp $RPM_BUILD_DIR/%{gdb_src}/gdb/NEWS $RPM_BUILD_DIR/%{gdb_src}
+
+%check
+# Initially we're in the %{gdb_src} directory.
+cd %{gdb_build}
+
+%if 0%{!?_with_testsuite:1}
+echo ====================TESTSUITE DISABLED=========================
+%else
+echo ====================TESTING=========================
+cd gdb
+gcc -o ./orphanripper %{SOURCE2} -Wall -lutil -ggdb2
+# Need to use a single --ignore option, second use overrides first.
+# No `%{?_smp_mflags}' here as it may race.
+# WARNING: can't generate a core file - core tests suppressed - check ulimit
+# "readline-overflow.exp" - Testcase is broken, functionality is OK.
+(
+  # ULIMIT required for `gdb.base/auxv.exp'.
+  ulimit -H -c
+  ulimit -c unlimited || :
+
+  # Setup $CHECK as `check//unix/' or `check//unix/-m64' for explicit bitsize.
+  # Never use two different bitsizes as it fails on ppc64.
+  echo 'int main (void) { return 0; }' >biarch.c
+  CHECK=""
+  for BI in -m64 -m32 -m31 ""
+  do
+    # Do not use size-less options if any of the sizes works.
+    # On ia64 there is no -m64 flag while we must not leave a bare `check' here
+    # as it would switch over some testing scripts to the backward compatibility
+    # mode: when `make check' was executed from inside the testsuite/ directory.
+    if [ -z "$BI" -a -n "$CHECK" ];then
+      continue
+    fi
+    # Do not use $RPM_OPT_FLAGS as the other non-size options will not be used
+    # in the real run of the testsuite.
+    if ! gcc $BI -o biarch biarch.c
+    then
+      continue
+    fi
+    CHECK="$CHECK check//unix/$BI check//native-gdbserver/$BI check//native-extended-gdbserver/$BI"
+  done
+  # Do not try -m64 inferiors for -m32 GDB as it cannot handle inferiors larger
+  # than itself.
+  # s390 -m31 still uses the standard ELF32 binary format.
+  gcc $RPM_OPT_FLAGS -o biarch biarch.c
+  RPM_SIZE="$(file ./biarch|sed -n 's/^.*: ELF \(32\|64\)-bit .*$/\1/p')"
+  if [ "$RPM_SIZE" != "64" ]
+  then
+    CHECK="$(echo " $CHECK "|sed 's#check//unix/-m64 check//native-gdbserver/-m64 check//native-extended-gdbserver/-m64# #')"
+  fi
+
+  # Disable some problematic testcases.
+  # RUNTESTFLAGS='--ignore ...' is not used below as it gets separated by the
+  # `check//...' target spawn and too much escaping there would be dense.
+  for test in				\
+    gdb.base/readline-overflow.exp	\
+    gdb.base/bigcore.exp		\
+  ; do
+    mv -f ../../gdb/testsuite/$test ../gdb/testsuite/$test-DISABLED || :
+  done
+
+  # Run all the scheduled testsuite runs also in the PIE mode.
+  # See also: gdb-runtest-pie-override.exp
+  ###CHECK="$(echo $CHECK|sed 's#check//unix/[^ ]*#& &/-fPIC/-pie#g')"
+
+  ./orphanripper make %{?_smp_mflags} -k $CHECK || :
+)
+for t in sum log
+do
+  for file in testsuite*/gdb.$t
+  do
+    suffix="${file#testsuite}"
+    suffix="${suffix%/gdb.$t}"
+    ln $file gdb-%{_target_platform}$suffix.$t || :
+  done
+done
+# `tar | bzip2 | uuencode' may have some piping problems in Brew.
+tar cjf gdb-%{_target_platform}.tar.bz2 gdb-%{_target_platform}*.{sum,log}
+uuencode gdb-%{_target_platform}.tar.bz2 gdb-%{_target_platform}.tar.bz2
+cd ../..
+echo ====================TESTING END=====================
+%endif
+
+%install
+# Initially we're in the %{gdb_src} directory.
+cd %{gdb_build}
+rm -rf $RPM_BUILD_ROOT
+
+%if 0%{?el6:1}
+# GDB C++11 requires devtoolset gcc.
+%{?scl:PATH=%{_bindir}${PATH:+:${PATH}}}
+%endif
+
+make %{?_smp_mflags} install DESTDIR=$RPM_BUILD_ROOT
+
+%if 0%{!?scl:1}
+mkdir -p $RPM_BUILD_ROOT%{_prefix}/libexec
+mv -f $RPM_BUILD_ROOT%{_bindir}/gdb $RPM_BUILD_ROOT%{_prefix}/libexec/gdb
+%if 0%{?rhel:1} && 0%{?rhel} <= 6
+# RHEL-6: ln: invalid option -- 'r': https://bugzilla.redhat.com/show_bug.cgi?id=1384947
+# RHEL-6 also does not have: /usr/bin/realpath
+ln -s $(
+  perl -le 'sub x{$_=$_[0];s{/+}{/}g;s{/$}{};return split "/";}@a=x shift;@b=x shift;while($a[0] eq $b[0]){shift @a;shift @b;}print join "/",map("..",@a),@b;' \
+    $RPM_BUILD_ROOT%{_bindir} $RPM_BUILD_ROOT%{_prefix}/libexec/gdb
+) $RPM_BUILD_ROOT%{_bindir}/gdb
+%else
+ln -s -r                                                 $RPM_BUILD_ROOT%{_prefix}/libexec/gdb  $RPM_BUILD_ROOT%{_bindir}/gdb
+%endif
+%endif
+
+# Provide gdbtui for RHEL-5 and RHEL-6 as it is removed upstream (BZ 797664).
+%if 0%{?rhel:1} && 0%{?rhel} <= 6
+test ! -e $RPM_BUILD_ROOT%{_prefix}/bin/gdbtui
+install -m 755 %{SOURCE6} $RPM_BUILD_ROOT%{_prefix}/bin/gdbtui
+ln -sf gdb.1 $RPM_BUILD_ROOT%{_mandir}/man1/gdbtui.1
+%endif # 0%{?rhel:1} && 0%{?rhel} <= 6
+
+mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/gdbinit.d
+touch -r %{SOURCE4} $RPM_BUILD_ROOT%{_sysconfdir}/gdbinit.d
+sed 's#%%{_sysconfdir}#%{_sysconfdir}#g' <%{SOURCE4} >$RPM_BUILD_ROOT%{_sysconfdir}/gdbinit
+touch -r %{SOURCE4} $RPM_BUILD_ROOT%{_sysconfdir}/gdbinit
+
+for i in `find $RPM_BUILD_ROOT%{_datadir}/gdb/python/gdb -name "*.py"`
+do
+  # Files could be also patched getting the current time.
+  touch -r $RPM_BUILD_DIR/%{gdb_src}/gdb/ChangeLog $i
+done
+
+%if 0%{?_enable_debug_packages:1} && 0%{!?_without_python:1}
+mkdir -p $RPM_BUILD_ROOT/usr/lib/debug%{_bindir}
+cp -p ./gdb/gdb-gdb.py $RPM_BUILD_ROOT/usr/lib/debug%{_bindir}/
+for pyo in "" "-O";do
+  # RHEL-5: AttributeError: 'module' object has no attribute 'compile_file'
+  %{__python} $pyo -c 'import compileall, re, sys; sys.exit (not compileall.compile_dir("'"$RPM_BUILD_ROOT/usr/lib/debug%{_bindir}"'", 1, "'"/usr/lib/debug%{_bindir}"'"))'
+done
+%endif # 0%{?_enable_debug_packages:1} && 0%{!?_without_python:1}
+
+%if 0%{!?_without_python:1}
+%if 0%{!?rhel:1} || 0%{?rhel} > 6
+# BZ 999645: /usr/share/gdb/auto-load/ needs filesystem symlinks
+for i in $(echo bin lib $(basename %{_libdir}) sbin|tr ' ' '\n'|sort -u);do
+  # mkdir to satisfy dangling symlinks build check.
+  mkdir -p $RPM_BUILD_ROOT%{_datadir}/gdb/auto-load/%{_root_prefix}/$i
+  ln -s $(echo %{_root_prefix}|sed 's#^/*##')/$i \
+        $RPM_BUILD_ROOT%{_datadir}/gdb/auto-load/$i
+done
+%endif # 0%{!?rhel:1} || 0%{?rhel} > 6
+%if 0%{?rhel:1} && 0%{?rhel} <= 7
+# Temporarily now:
+for LIB in $(echo lib $(basename %{_libdir})|tr ' ' '\n'|sort -u);do
+  LIBPATH="$RPM_BUILD_ROOT%{_datadir}/gdb/auto-load%{_root_prefix}/$LIB"
+  mkdir -p $LIBPATH
+  # basename is being run only for the native (non-biarch) file.
+  sed -e 's,@pythondir@,%{_datadir}/gdb/python,'		\
+      -e 's,@toolexeclibdir@,%{_root_prefix}/'"$LIB,"		\
+      < $RPM_BUILD_DIR/%{gdb_src}/%{libstdcxxpython}/hook.in	\
+      > $LIBPATH/$(basename %{_root_prefix}/%{_lib}/libstdc++.so.6.*)-gdb.py
+  # Test the filename 'libstdc++.so.6.*' has matched.
+  test -f $LIBPATH/libstdc++.so.6.[0-9]*-gdb.py
+done
+test ! -e $RPM_BUILD_ROOT%{_datadir}/gdb/python/libstdcxx
+cp -a $RPM_BUILD_DIR/%{gdb_src}/%{libstdcxxpython}/libstdcxx	\
+      $RPM_BUILD_ROOT%{_datadir}/gdb/python/libstdcxx
+%endif # 0%{?rhel:1} && 0%{?rhel} <= 7
+for i in `find $RPM_BUILD_ROOT%{_datadir}/gdb -name "*.py"`; do
+  # Files are installed by install(1) not preserving the timestamps.
+  touch -r $RPM_BUILD_DIR/%{gdb_src}/gdb/ChangeLog $i
+done
+%endif # 0%{!?_without_python:1}
+
+# gdb-add-index cannot be run even for SCL package on RHEL<=6.
+%if 0%{?rhel:1} && 0%{?rhel} <= 6
+rm -f $RPM_BUILD_ROOT%{_bindir}/gdb-add-index
+rm -f $RPM_BUILD_ROOT%{_mandir}/*/gdb-add-index.1*
+%endif
+
+# Remove the files that are part of a gdb build but that are owned and
+# provided by other packages.
+# These are part of binutils
+
+rm -rf $RPM_BUILD_ROOT%{_datadir}/locale/
+rm -f $RPM_BUILD_ROOT%{_infodir}/bfd*
+rm -f $RPM_BUILD_ROOT%{_infodir}/standard*
+rm -f $RPM_BUILD_ROOT%{_infodir}/configure*
+# Just exclude the header files in the top directory, and don't exclude
+# the gdb/ directory, as it contains jit-reader.h.
+rm -rf $RPM_BUILD_ROOT%{_includedir}/*.h
+rm -rf $RPM_BUILD_ROOT/%{_libdir}/lib{bfd*,opcodes*,iberty*}
+
+# pstack obsoletion
+
+cp -p %{SOURCE3} $RPM_BUILD_ROOT%{_mandir}/man1/gstack.1
+ln -s gstack.1 $RPM_BUILD_ROOT%{_mandir}/man1/pstack.1
+ln -s gstack $RPM_BUILD_ROOT%{_bindir}/pstack
+
+# Packaged GDB is not a cross-target one.
+(cd $RPM_BUILD_ROOT%{_datadir}/gdb/syscalls
+ rm -f mips*.xml
+%ifnarch sparc sparcv9 sparc64
+ rm -f sparc*.xml
+%endif
+%ifnarch x86_64
+ rm -f amd64-linux.xml
+%endif
+%ifnarch %{ix86} x86_64
+ rm -f i386-linux.xml
+%endif
+)
+
+# Documentation only for development.
+rm -f $RPM_BUILD_ROOT%{_infodir}/gdbint*
+rm -f $RPM_BUILD_ROOT%{_infodir}/stabs*
+
+# Delete this too because the dir file will be updated at rpm install time.
+# We don't want a gdb specific one overwriting the system wide one.
+
+rm -f $RPM_BUILD_ROOT%{_infodir}/dir
+
+%if 0%{?rhel:1}  && 0%{?rhel} <= 7
+# /usr/share/gdb/guile/ gets installed even --without-guile
+# https://sourceware.org/bugzilla/show_bug.cgi?id=17105
+rm -rf $RPM_BUILD_ROOT%{_datadir}/gdb/guile
+%endif
+
+# These files are unrelated to Fedora Linux.
+rm -f $RPM_BUILD_ROOT%{_datadir}/gdb/system-gdbinit/elinos.py
+rm -f $RPM_BUILD_ROOT%{_datadir}/gdb/system-gdbinit/wrs-linux.py
+rmdir $RPM_BUILD_ROOT%{_datadir}/gdb/system-gdbinit
+
+# Patch848: gdb-dts-rhel6-python-compat.patch
+%if 0%{!?el6:1}
+rm -f $RPM_BUILD_ROOT%{_datadir}/gdb/python/gdb/FrameWrapper.py
+rm -f $RPM_BUILD_ROOT%{_datadir}/gdb/python/gdb/backtrace.py
+rm -f $RPM_BUILD_ROOT%{_datadir}/gdb/python/gdb/command/backtrace.py
+%endif
+
+%files
+# File must begin with "/": {GFDL,COPYING3,COPYING,COPYING.LIB,COPYING3.LIB}
+%if 0%{!?el6:1}
+%license COPYING3 COPYING COPYING.LIB COPYING3.LIB
+%else
+%doc     COPYING3 COPYING COPYING.LIB COPYING3.LIB
+%endif
+%doc README NEWS
+%{_bindir}/gdb
+%{_bindir}/gcore
+%{_mandir}/*/gcore.1*
+%{_bindir}/gstack
+%{_mandir}/*/gstack.1*
+%{_bindir}/pstack
+%{_mandir}/*/pstack.1*
+# Provide gdb/jit-reader.h so that users are able to write their own GDB JIT
+# plugins.
+%{_includedir}/gdb
+%if 0%{!?scl:1}
+%files headless
+%{_prefix}/libexec/gdb
+%endif
+%config(noreplace) %{_sysconfdir}/gdbinit
+%{_mandir}/*/gdb.1*
+%{_sysconfdir}/gdbinit.d
+%{_mandir}/*/gdbinit.5*
+# gdb-add-index cannot be run even for SCL package on RHEL<=6.
+%if 0%{!?rhel:1} || 0%{?rhel} > 6
+%{_bindir}/gdb-add-index
+%{_mandir}/*/gdb-add-index.1*
+%endif
+# Provide gdbtui for RHEL-5 and RHEL-6 as it is removed upstream (BZ 797664).
+%if 0%{?rhel:1} && 0%{?rhel} <= 6
+%{_bindir}/gdbtui
+%{_mandir}/*/gdbtui.1*
+%endif # 0%{?rhel:1} && 0%{?rhel} <= 6
+%{_datadir}/gdb
+
+# don't include the files in include, they are part of binutils
+
+%ifnarch sparc sparcv9
+%files gdbserver
+%{_bindir}/gdbserver
+%{_mandir}/*/gdbserver.1*
+%if %{have_inproctrace}
+%{_libdir}/libinproctrace.so
+%endif # %{have_inproctrace}
+%endif
+
+%if 0%{!?_without_python:1}
+# [rhel] Do not migrate /usr/share/gdb/auto-load/ with symlinks on RHELs.
+%if 0%{!?rhel:1}
+%pre
+for i in $(echo bin lib $(basename %{_libdir}) sbin|tr ' ' '\n'|sort -u);do
+  src="%{_datadir}/gdb/auto-load/$i"
+  dst="%{_datadir}/gdb/auto-load/%{_root_prefix}/$i"
+  if test -d $src -a ! -L $src;then
+    if ! rmdir 2>/dev/null $src;then
+      mv -n $src/* $dst/
+      rmdir $src
+    fi
+  fi
+done
+%endif # 0%{!?rhel:1}
+%endif # 0%{!?_without_python:1}
+
+%files doc
+%doc %{gdb_build}/gdb/doc/{gdb,annotate}.{html,pdf}
+%{_infodir}/annotate.info*
+%{_infodir}/gdb.info*
+
+%if 0%{?scl:1}
+# As of F-28, packages won't need to call /sbin/install-info by hand
+# anymore.  We make an exception for DTS here.
+# https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/MP2QVJZBOJZEOQO2G7UB2HLXKXYPF2G5/
+
+%post doc
+# This step is part of the installation of the RPM. Not to be confused
+# with the 'make install ' of the build (rpmbuild) process.
+
+# For --excludedocs:
+if [ -e %{_infodir}/gdb.info.gz ]
+then
+  /sbin/install-info --info-dir=%{_infodir} %{_infodir}/annotate.info.gz || :
+  /sbin/install-info --info-dir=%{_infodir} %{_infodir}/gdb.info.gz || :
+fi
+
+%preun doc
+if [ $1 = 0 ]
+then
+  # For --excludedocs:
+  if [ -e %{_infodir}/gdb.info.gz ]
+  then
+    /sbin/install-info --delete --info-dir=%{_infodir} %{_infodir}/annotate.info.gz || :
+    /sbin/install-info --delete --info-dir=%{_infodir} %{_infodir}/gdb.info.gz || :
+  fi
+fi
+%endif
+
+%changelog
+* Fri Jan 11 2019 Keith Seitz <keiths@redhat.com> - 8.2-5.el8
+- Merge from Fedora 29:
+  gdb-rhbz1560010-fix-assertion-symbol-language-dict-language-?of5.patch
+  (Keith Seitz, RHBZ 1664456).
+
+* Fri Dec 14 2018 Keith Seitz <keiths@redhat.com> - 8.2-4.el8
+- Update gdb.spec for RHEL supported architectures and multilibs.
+- Merge from Fedora 29:
+   gdb-rhbz1639242-fix-dwarf2_find_containing_comp_unit-binary-search.patch
+   [RHEL RHBZ#1660220]
+   gdb-rhbz1653410-avoid-crash-when-calling-warning-too-early.patch
+   [RHEL RHBZ#1660221]
+
+* Thu Oct  4 2018 Jan Kratochvil <jan.kratochvil@redhat.com> - 8.2-3.fc29
+- Fix annobin complaints (RH BZ 1630564):
+  --without-stage1-ldflags: Disable static libstdc++ and libgcc linking.
+  --disable-libmcheck: That is a distro-level decision, not package decision.
+
+* Thu Sep  6 2018 Sergio Durigan Junior <sergiodj@redhat.com> - 8.2-2.fc29
+- Backport "Use pulongest in aarch64-linux-tdep.c" (Tom Tromey),
+  needed to unbreak the compilation on 32-bit architectures.
+
+* Wed Sep  5 2018 Sergio Durigan Junior <sergiodj@redhat.com> - 8.2-1.fc29
+- Rebase to FSF GDB 8.2.
+- Backport "Indicate batch mode failures by exiting with nonzero status"
+  (Gary Benson, RH BZ 1491128).
+
+* Tue Aug 28 2018 Sergio Durigan Junior <sergiodj@redhat.com> - 8.1.90.20180828-46.fc29
+- Rebase to FSF GDB 8.1.90.20180828 (8.2pre).
+
+* Tue Aug 21 2018 Sergio Durigan Junior <sergiodj@redhat.com> - 8.1.90.20180727-45.fc29
+- Enable verbose output when running "make".
+
+* Thu Aug  9 2018 Jan Kratochvil <jan.kratochvil@redhat.com> - 8.1.90.20180727-44.fc29
+- Add GDB support to access/display POWER8 registers (IBM, RH BZ 1187581).
+
+* Thu Aug  9 2018 Sergio Durigan Junior <sergiodj@redhat.com> - 8.1.90.20180727-43.fc29
+- Reenable libipt.
+
+* Wed Aug  8 2018 Sergio Durigan Junior <sergiodj@redhat.com> - 8.1.90.20180727-42.fc29
+- Again, temporarily disable libipt (needed to upgrade libipt to 2.0).
+
+* Wed Aug  8 2018 Sergio Durigan Junior <sergiodj@redhat.com> - 8.1.90.20180727-41.fc29
+- Reenable libipt.
+- Rebuild due to new libipt release.
+- Adjust bundled libipt; remove unnecessary patch.
+- Sync IPv6 patch with F-28 GDB.
+
+* Wed Aug  8 2018 Sergio Durigan Junior <sergiodj@redhat.com> - 8.1.90.20180727-40.fc29
+- Temporarily disable libipt (needed to upgrade libipt to 2.0).
+
+* Wed Aug  8 2018 Jan Kratochvil <jan.kratochvil@redhat.com> - 8.1.90.20180727-39.fc29
+- [dts] Fix build by removing a patch for already removed pahole.py .
+- [dts rhel6] Fix build by updating gdb-gnat-dwarf-crash-3of3.patch .
+
+* Mon Jul 30 2018 Sergio Durigan Junior <sergiodj@redhat.com> - 8.1.90.20180727-38.fc29
+- Recompile to fix RH BZ 1609504 (due to RH BZ 1609577).
+
+* Sat Jul 28 2018 Sergio Durigan Junior <sergiodj@fedoraproject.org> - 8.1.90.20180727-37.fc29
+- Rebase to FSF GDB 8.1.90.20180727 (8.2pre).
+
+* Wed Jul 25 2018 Sergio Durigan Junior <sergiodj@redhat.com> - 8.1.90.20180724-36.fc29
+- Rebase to FSF GDB 8.1.90.20180724 (8.2pre).
+
+* Sat Jul 14 2018 Sergio Durigan Junior <sergiodj@redhat.com> - 8.1.90.20180714-35.fc29
+- Rebase to FSF GDB 8.1.90.20180714 (8.2pre).
+- Backport IPv6 patch (RH BZ 881849, Sergio Durigan Junior).
+
+* Fri Jul 13 2018 Fedora Release Engineering <releng@fedoraproject.org>
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
+
+* Thu Jul 12 2018 Jan Kratochvil <jan.kratochvil@redhat.com> - 8.1.90.20180708-33.fc29
+- [dts] [rhel6] Do not use mpfr as rhel6 has mpfr-2 while GDB requires mpfr-3.
+
+* Thu Jul 12 2018 Jan Kratochvil <jan.kratochvil@redhat.com> - 8.1.90.20180708-32.fc29
+- Remove as no longer needed:
+  Workaround gcc-8.0: -Wno-error=cast-function-type,stringop-truncation
+
+* Thu Jul 12 2018 Jan Kratochvil <jan.kratochvil@redhat.com> - 8.1.90.20180708-31.fc29
+- [dts] Upgrade libstdc++-v3-python to 8.1.1-20180626.
+
+* Thu Jul 12 2018 Sergio Durigan Junior <sergiodj@redhat.com> - 8.1.90.20180708-30.fc29
+- Rebuild due to GCC ABI change.
+
+* Sun Jul  8 2018 Sergio Durigan Junior <sergiodj@redhat.com> - 8.1.90.20180708-29.fc29
+- Rebase to FSF GDB 8.1.90.20180708 (8.2pre).
+
+* Wed Jul  4 2018 Sergio Durigan Junior <sergiodj@redhat.com> - 8.1.50.20180704-28.fc29
+- Rebase to FSF GDB 8.1.50.20180704 (8.2pre).
+- Remove defattr directives from specfile.
+
+* Mon Jul 02 2018 Miro Hrončok <mhroncok@redhat.com>
+- Rebuilt for Python 3.7
+
+* Fri Jun 29 2018 Sergio Durigan Junior <sergiodj@redhat.com> - 8.1.50.20180629-26.fc29
+- Rebase to FSF GDB 8.1.50.20180629 (8.2pre).
+- Remove pahole.py.
+- Adjust handling of gdb-gdb.py.
+
+* Sun Jun 24 2018 Sergio Durigan Junior <sergiodj@redhat.com> - 8.1.50.20180624-25.fc29
+- Rebase to FSF GDB 8.1.50.20180624 (8.2pre).
+
+* Wed Jun 20 2018 Sergio Durigan Junior <sergiodj@redhat.com> - 8.1.50.20180618-24.fc29
+- Add BuildRequires: mpfr-devel (RH BZ 1593280).
+
+* Mon Jun 18 2018 Sergio Durigan Junior <sergiodj@redhat.com> - 8.1.50.20180618-23.fc29
+- Rebase to FSF GDB 8.1.50.20180618 (8.2pre).
+
+* Mon Jun 18 2018 Sergio Durigan Junior <sergiodj@fedoraproject.org> - 8.1.50.20180613-22.fc29
+- Do not run /sbin/install-info when installing the documentation
+  (except for DTS).
+
+* Wed Jun 13 2018 Sergio Durigan Junior <sergiodj@redhat.com> - 8.1.50.20180613-21.fc29
+- Rebase to FSF GDB 8.1.50.20180613 (8.2pre).
+
+* Wed Jun 13 2018 Miro Hrončok <mhroncok@redhat.com>
+- Rebuilt for Python 3.7
+
+* Wed Jun 13 2018 Miro Hrončok <mhroncok@redhat.com>
+- Bootstrap for Python 3.7
+
+* Fri Jun  8 2018 Sergio Durigan Junior <sergiodj@redhat.com> - 8.1.50.20180605-18.fc29
+- Fix Python 3.7 breakage (RH BZ 1577396).
+
+* Tue Jun  5 2018 Sergio Durigan Junior <sergiodj@redhat.com> - 8.1.50.20180605-17.fc29
+- Rebase to FSF GDB 8.1.50.20180605 (8.2pre).
+
+* Sat Jun  2 2018 Sergio Durigan Junior <sergiodj@redhat.com> - 8.1.50.20180522-16.fc29
+- Rebase to FSF GDB 8.1.50.20180529 (8.2pre).
+
+* Wed May 30 2018 Sergio Durigan Junior <sergiodj@redhat.com> - 8.1.50.20180522-15.fc28
+- Rebase to FSF GDB 8.1.50.20180522 (8.2pre).
+
+* Mon Apr  2 2018 Jan Kratochvil <jan.kratochvil@redhat.com> - 8.1-14.fc28
+- Revert 'Fix PDF build on Rawhide/F-29', rm -rf texinfo/ (from RH BZ 1562580).
+
+* Sat Mar 31 2018 Jan Kratochvil <jan.kratochvil@redhat.com> - 8.1-13.fc28
+- Fix PDF build on Rawhide/F-29.
+
+* Fri Mar 23 2018 Jan Kratochvil <jan.kratochvil@redhat.com> - 8.1-12.fc28
+- Add test: [s390x] Backport arch12 instructions decoding (RH BZ 1553104).
+
+* Sat Mar  3 2018 Jan Kratochvil <jan.kratochvil@redhat.com> - 8.1-11.fc28
+- Add: BuildRequires: gcc-c++
+  https://fedoraproject.org/wiki/Packaging:C_and_C%2B%2B#BuildRequires_and_Requires
+
+* Tue Feb 20 2018 Rex Dieter <rdieter@fedoraproject.org> - 8.1-10.fc28
+- rebuild (guile)
+
+* Sat Feb 17 2018 Jan Kratochvil <jan.kratochvil@redhat.com> - 8.1-9.fc28
+- [testsuite] Revert disable of BuildRequires: gcc-go (for RH BZ 1541639).
+
+* Fri Feb 09 2018 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 8.1-8.fc28
+- Escape macros in %%changelog
+
+* Wed Feb 07 2018 Fedora Release Engineering <releng@fedoraproject.org> - 8.1-7.fc28
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
+
+* Tue Feb  6 2018 Jan Kratochvil <jan.kratochvil@redhat.com> - 8.1-6.fc28
+- Fix .spec build compatibility with <=F-27 and <=RHEL-7.
+- [testsuite] Temporarily disable BuildRequires: gcc-go (for RH BZ 1541639).
+
+* Sun Feb  4 2018 Jan Kratochvil <jan.kratochvil@redhat.com> - 8.1-5.fc28
+- Workaround gcc-8.0: -Wno-error=cast-function-type,stringop-truncation
+- Fix ppc64 stwux encoding as found by gcc-8.0 -Werror=tautological-compare.
+
+* Sun Feb  4 2018 Jan Kratochvil <jan.kratochvil@redhat.com> - 8.1-4.fc28
+- Fix -D_GLIBCXX_DEBUG gdb-add-index regression (RH BZ 1540559).
+
+* Wed Jan 31 2018 Sergio Durigan Junior <sergiodj@redhat.com> - 8.1-3.fc26
+- Rebase to FSF GDB 8.1.
+
+* Fri Jan 19 2018 Sergio Durigan Junior <sergiodj@redhat.com> - 8.0.90.20180109-2.fc26
+- Remove gdb-6.3-rh-dummykfail-20041202.patch (RH BZ 1535228).
+- Remove gdb-glibc-vdso-workaround.patch (RH BZ 1535244).
+
+* Wed Jan 10 2018 Sergio Durigan Junior <sergiodj@redhat.com> - 8.0.90.20180109-1.fc26
+- Rebase to pre-FSF GDB 8.1 (8.1.90.20180109).
+
+* Sat Dec 16 2017 Sergio Durigan Junior <sergiodj@redhat.com> - 8.0.50.20171204-35.fc26
+- Rebase to FSF GDB 8.0.50.20171213 (8.1pre).
+
+* Sun Dec 10 2017 Sergio Durigan Junior <sergiodj@redhat.com> - 8.0.50.20171204-34.fc26
+- chmod +x on the generate-*.sh script.s
+- Remove references to gdb-8.0.1 from 'sources' and '.gitignore'.
+- Regenerate first line of the patches (remove commit hash).
+- Fix empty Source line.
+
+* Thu Dec  7 2017 Sergio Durigan Junior <sergiodj@redhat.com> - 8.0.50.20171204-33.fc26
+- Rebase to FSF GDB 8.0.50.20171204 (8.1pre).
+- Implemented new method for dealing with local patches.
+
+* Mon Dec  4 2017 Sergio Durigan Junior <sergiodj@redhat.com> - 8.0.1-32.fc26
+- Convert all the patches to 'git-am' format.
+
+* Sat Dec  2 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 8.0.1-31.fc26
+- [testsuite] Fix BuildRequires for non-x86* arches.
+
+* Fri Oct 27 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 8.0.1-30.fc26
+- Use inlined func name for printing breakpoints (RH BZ 1228556, Keith Seitz).
+
+* Sat Oct  7 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 8.0.1-29.fc26
+- [s390x] Backport arch14 guarded-storage register support (RH BZ 1498758).
+
+* Thu Sep 28 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 8.0.1-28.fc26
+- Performance fix of gcore to use --readnever (for RH BZ 1493675).
+
+* Tue Sep 26 2017 Troy Dawson <tdawson@redhat.com> - 8.0.1-27.fc26
+- Cleanup spec file conditionals
+
+* Tue Sep 12 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 8.0.1-26.fc26
+- Rebase to FSF GDB 8.0.1 (8.0 stable branch).
+
+* Wed Aug 30 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 8.0-25.fc26
+- [rhel6] Fix T-stopping of processes after their detachment (RH BZ 1486223).
+
+* Thu Aug 24 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 8.0-24.fc26
+- Backport DWARF-5 and breakpoint fixes from upstream stable branch 8.0.
+
+* Sat Aug 19 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 8.0-23.fc26
+- [s390x] Backport arch12 support and other s390x fixes (RH BZ 1420304).
+
+* Fri Aug 18 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 8.0-22.fc26
+- Backport a fix for clang && -gsplit-dwarf debuggees (RH BZ 1482892).
+
+* Sun Aug 13 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 8.0-21.fc26
+- Fix compatibility with F-27 debuginfo packaging.
+- Fix compatibility with F-27 librpm version 8.
+
+* Thu Aug  3 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 8.0-20.fc26
+- Two fixes from upstream stable branch 8.0.
+
+* Wed Aug  2 2017 Fedora Release Engineering <releng@fedoraproject.org> - 8.0-19.fc26
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
+
+* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 8.0-18.fc26
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
+
+* Mon Jun 12 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 8.0-17.fc26
+- [rhel6 dts] Use devtoolset gcc for GDB being now in C++11.
+
+* Sat Jun 10 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 8.0-16.fc26
+- [dts] Upgrade libstdc++-v3-python to 7.1.1-20170526.
+
+* Fri Jun  9 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 8.0-15.fc26
+- [rhel dts libipt] Fix#2 [-Werror=implicit-fallthrough=] with gcc-7.1.1.
+
+* Fri Jun  9 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 8.0-14.fc26
+- [rhel dts libipt] Fix [-Werror=implicit-fallthrough=] with gcc-7.1.1.
+
+* Fri Jun  9 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 8.0-13.fc26
+- Rebase to FSF GDB 8.0 final.
+- [rhel7 dts] Rebase bundled libipt to 1.6.1.
+
+* Sat May 20 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.99.90.20170420-12.fc26
+- Move 'dnf-command(debuginfo-install)' gdb-headless -> gdb (RH BZ 1452335).
+
+* Mon May 15 2017 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 7.99.90.20170420-11.fc26
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_27_Mass_Rebuild
+
+* Mon May  8 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.99.90.20170420-10.fc26
+- [.spec] Update patches categorization.
+
+* Fri Apr 21 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.99.90.20170420-9.fc26
+- [ppc*] Fix gdb.arch/powerpc-power7.exp testcase regression (RH BZ 1440044).
+
+* Fri Apr 21 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.99.90.20170420-8.fc26
+- Rebase to FSF GDB 7.99.90.20170420 (pre-8.0 stable branch).
+
+* Wed Apr 19 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12.50.20170309-7.fc26
+- Fix reported gdb-vla-intel-stringbt-fix.patch regression (SuSE).
+- Remove gcc-7 compilation compatibility hack.
+
+* Fri Mar 10 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12.50.20170309-6.fc26
+- [testsuite] [ppc*,s390*] Do not FAIL rhbz1261564-aarch64-watchpoint.exp
+  (RH BZ 1352563).
+
+* Thu Mar  9 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12.50.20170309-5.fc26
+- Rebase to pre-7.13 FSF GDB trunk.
+
+* Thu Mar  2 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12.50.20170226-4.fc26
+- Fix gdb-vla-intel-fortran-strides.patch rebase regression.
+
+* Tue Feb 28 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12.50.20170226-3.fc26
+- Fix gdb.arch/amd64-entry-value-paramref.exp rebase regression.
+
+* Tue Feb 28 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12.50.20170226-2.fc26
+- [testsuite] [rhel] Fix py-gil-mthread.exp for Python 2 compat (RH BZ 1427487).
+
+* Mon Feb 27 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12.50.20170226-1.fc26
+- Rebase to pre-7.13 FSF GDB trunk.
+- Dropped gdb-6.7-bz426600-DW_TAG_interface_type-test.patch as GCJ is no more.
+
+* Fri Feb 24 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12.1-47.fc26
+- New testcase for: Fix <tab>-completion crash (Gary Benson, RH BZ 1398387).
+- [testsuite] Use more standard_output_file.
+
+* Wed Feb 15 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12.1-46.fc26
+- Fix <tab>-completion crash (Gary Benson, RH BZ 1398387).
+
+* Tue Feb 14 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12.1-45.fc26
+- Release bump.
+
+* Sun Feb 12 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12.1-44.fc26
+- [dts] Upgrade libstdc++-v3-python to 6.3.1-20170212.
+
+* Wed Feb  8 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12.1-43.fc26
+- Fix build compatibility with gcc-7.
+
+* Wed Feb  8 2017 Stephen Gallagher <sgallagh@redhat.com> - 7.12.1-42.fc26
+- Add missing %%license macro
+
+* Sat Jan 21 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12.1-41.fc26
+- Rebase to released FSF GDB 7.12.1.
+
+* Tue Jan 17 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12-40.fc26
+- Enable libinproctrace.so on all archs except arm32.
+
+* Thu Jan 12 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12-39.fc26
+- Fix gdb-readline62-ask-more-rh.patch for Rawhide readline-7.0.
+
+* Thu Jan 12 2017 Igor Gnatenko <ignatenko@redhat.com> - 7.12-38.fc26
+- Rebuild for readline 7.x
+
+* Thu Jan 12 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12-37.fc25
+- [rhel6] Fix missing /usr/bin/realpath.
+
+* Wed Jan 11 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12-36.fc25
+- Update from FSF GDB 7.12 stable branch to snapshot: gdb-7.12.0.20170111
+
+* Sun Jan  8 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12-35.fc25
+- Fix Python backtraces for 32-bit inferiors (Tom Tromey, RH BZ 1411094).
+
+* Fri Jan  6 2017 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12-34.fc25
+- Fix gdb-add-index for 444 *.debug files.
+
+* Mon Jan 02 2017 Rex Dieter <rdieter@fedoraproject.org> - 7.12-33.fc25
+- fix logic of prior Conflicts
+
+* Mon Jan 02 2017 Rex Dieter <rdieter@fedoraproject.org> - 7.12-32.fc25
+- Conflicts: gdb-headless < 7.12-29 (#1402554)
+
+* Fri Dec 09 2016 Charalampos Stratakis <cstratak@redhat.com> - 7.12-31.fc25
+- Python 3.6 rebuild: Rebuild with python3 support.
+
+* Fri Dec 09 2016 Charalampos Stratakis <cstratak@redhat.com> - 7.12-30.fc25
+- Python 3.6 rebuild: Rebuild without python3 support.
+
+* Mon Oct 31 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12-29.fc25
+- Fix gdb-headless /usr/bin/ executables (BZ 1390251).
+
+* Mon Oct 24 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12-28.fc25
+- Fix testcase: gdb.base/gdb-rhbz1156192-recursive-dlopen.exp
+
+* Sun Oct 23 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12-27.fc25
+- More work on missing testcases present in rhel6 GDB; some still FAIL.
+
+* Thu Oct 20 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12-26.fc25
+- Add missing testcases present in rhel6 GDB; some still FAIL.
+
+* Fri Oct 14 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12-25.fc25
+- [rhel6] Fix .spec without devtoolset-6-build installed (RH BZ 1384947).
+
+* Wed Oct 12 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12-24.fc25
+- Fix TLS (such as 'errno') regression.
+
+* Wed Oct 12 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12-23.fc25
+- [testsuite] Various testsuite fixes.
+- [aarch64] Fix gdb.cp/nextoverthrow.exp regression (Yao Qi).
+
+* Fri Oct  7 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12-22.fc25
+- Fix .spec build: error: Macro %%buildisa has empty body
+
+* Fri Oct  7 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12-21.fc25
+- Rebase to FSF GDB 7.12.
+
+* Thu Oct  6 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12-0.20.20161006.fc25
+- Rebase to FSF GDB 7.11.90.20161006 (pre-7.12 branch snapshot).
+
+* Thu Sep 29 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12-0.19.20160929.fc25
+- Rebase to FSF GDB 7.11.90.20160929 (pre-7.12 branch snapshot).
+ - Fixes GDB crashes on inf. function call scripts (RH BZ 1378147, Pedro Alves).
+
+* Wed Sep 28 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12-0.18.20160928.fc25
+- Fix attachment of JIT-debug-enabled inf. (7.11.1 regression, RH BZ 1375553).
+- Rebase to FSF GDB 7.11.90.20160928 (pre-7.12 branch snapshot).
+
+* Wed Sep 14 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12-0.17.20160907.fc25
+- Fix description empty lines.
+
+* Wed Sep 14 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12-0.16.20160907.fc25
+- Provide gdb-headless package (RH BZ 1195005).
+
+* Mon Sep 12 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12-0.15.20160907.fc25
+- [testsuite] More testsuite fixes.
+
+* Mon Sep 12 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12-0.14.20160907.fc25
+- Various mostly testsuite compatibility and regression fixes.
+
+* Wed Sep  7 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12-0.13.20160907.fc25
+- Rebase to FSF GDB 7.11.90.20160907 (pre-7.12 branch snapshot).
+- Rebase Intel VLA patchset.
+
+* Wed Sep  7 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12-0.12.20160904.fc25
+- [rhel6+7] Fix compatibility of bison <3.1 and gcc >=6.
+
+* Sun Sep  4 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12-0.11.20160904.fc25
+- Release bump for a mistaken build.
+
+* Sun Sep  4 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12-0.10.20160904.fc25
+- Fix libipt bundling in 7.12.
+
+* Sun Sep  4 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.12-0.9.20160904.fc25
+- Rebase to FSF GDB 7.11.90.20160904 (pre-7.12 branch snapshot).
+- Make Version tag 7.12; but it is still a pre-release.
+
+* Mon Aug 29 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11.90.20160829-8.fc25
+- Rebase to FSF GDB 7.11.90.20160829 (pre-7.12 branch snapshot).
+
+* Fri Aug 26 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11.90.20160807-7.fc25
+- Fix Intel VLA patchset regression: dynamic.exp: p varw filled
+
+* Tue Aug 23 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11.90.20160807-6.fc25
+- Merge Fedora packaging changes from Fedora 24 gdb-7.11.1-83.fc24:
+
+* Tue Aug 23 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11.1-83.fc24
+- [dts+el7] [x86*] Bundle libipt - fix#3 its initialization (RH BZ 1256513).
+
+* Tue Aug 23 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11.1-82.fc24
+- [dts+el7] [x86*] Bundle libipt - fix#2 its initialization (RH BZ 1256513).
+
+* Tue Aug 23 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11.1-81.fc24
+- [dts+el7] [x86*] Bundle libipt - fix its initialization (RH BZ 1256513).
+
+* Mon Aug 22 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11.1-80.fc24
+- [dts] Upgrade libstdc++-v3-python to 6.1.1-20160817.
+
+* Fri Aug 19 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11.1-79.fc24
+- [dts+el7] [x86*] Bundle linux_perf.h for libipt (RH BZ 1256513).
+
+* Wed Aug 17 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11.1-78.fc24
+- [dts+el7] [x86*] Bundle libipt (RH BZ 1256513).
+
+* Sun Aug  7 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11.90.20160807-5.fc25
+- Rebase to FSF GDB 7.11.90.20160807 (pre-7.12 branch snapshot).
+
+* Sun Jul 31 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11.50.20160721-4.fc25
+- Testcase for: Load strictly build-id-checked core files only if no executable
+  is specified (Jan Kratochvil, RH BZ 1339862).
+
+* Thu Jul 28 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11.50.20160721-3.fc25
+- Do not apply RHEL-6 patches on non-RHEL-6 even for testsuite.
+
+* Thu Jul 21 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11.50.20160721-2.fc25
+- Rebase to FSF GDB 7.11.50.20160721 (pre-7.12 trunk snapshot).
+
+* Sun Jul 17 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11.50.20160716-1.fc25
+- Rebase to FSF GDB 7.11.50.20160716 (pre-7.12 trunk snapshot).
+
+* Mon Jun 27 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11.1-76.fc24
+- Test 'info type-printers' Python error (RH BZ 1350436).
+
+* Mon Jun  6 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11.1-75.fc24
+- Rebase to released FSF GDB 7.11.1.
+
+* Mon May 30 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11-74.fc24
+- Import bare DW_TAG_lexical_block (RH BZ 1325396).
+
+* Tue May  3 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11-73.fc24
+- Fix compilation error by upstream symfile.c fix.
+
+* Tue May  3 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11-72.fc24
+- Fix messages suggesting more recent RHEL gdbserver (RH BZ 1321114).
+
+* Wed Apr 27 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11-71.fc24
+- Import upstream 7.11 branch stable fixes.
+
+* Sat Apr 23 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11-70.fc24
+- New test for Python "Cannot locate object file for block" (for RH BZ 1325795).
+
+* Tue Apr 12 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11-69.fc24
+- Never kill PID on: gdb exec PID (Jan Kratochvil, RH BZ 1219747).
+
+* Fri Apr  8 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11-68.fc24
+- [--with testsuite] Add two more BuildRequires.
+
+* Fri Apr  8 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11-67.fc24
+- [testsuite] Fix several false FAILs.
+
+* Wed Apr  6 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11-66.fc24
+- Import upstream 7.11 branch stable fixes.
+
+* Wed Apr  6 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11-65.fc24
+- Add messages suggesting more recent RHEL gdbserver (RH BZ 1321114).
+
+* Wed Apr  6 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11-64.fc24
+- Fix non-stop gdb -p <container>: internal error (Pedro Alves, RH BZ 1318049).
+
+* Sat Mar 19 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11-63.fc24
+- .spec cleanup: Drop strict-aliasing GCC bug workaround (from RH BZ 1315191).
+
+* Fri Mar 18 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11-62.fc24
+- .spec cleanup: Drop SCL obsoletes of devtoolset-1.1*: *-1.0*
+
+* Thu Mar 17 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11-61.fc24
+- Add message suggesting gdbserver for non-matching PID namespaces.
+
+* Tue Mar 15 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11-60.fc24
+- New Fedora GDB testfile: rhbz1261564-aarch64-watchpoint.exp
+- Backport gdb-7.11 stable branch PR gdb/19676 fix (Pedro Alves).
+
+* Tue Mar  8 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11-59.fc24
+- Fix strict-aliasing rules compilation error (RH BZ 1315191).
+
+* Fri Feb 26 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11-58.fc24
+- Rebase VLA (Fortran dynamic arrays) strides (multi-dim. subarrays) from Intel.
+
+* Thu Feb 25 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11-57.fc24
+- Release bump only.
+
+* Wed Feb 24 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11-56.fc24
+- Release bump only.
+
+* Wed Feb 24 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.11-55.fc24
+- Rebase to released FSF GDB 7.11.
+
+* Tue Feb 16 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.10.90.20160216-54.fc24
+- Rebase to FSF GDB 7.10.90.20160216 (pre-7.11 branch snapshot).
+
+* Tue Feb 16 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.10.90.20160211-53.fc24
+- Drop gdb-testsuite-subdirs-revert.patch.
+
+* Sat Feb 13 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.10.90.20160211-52.fc24
+- Rebase to FSF GDB 7.10.90.20160211 (pre-7.11 branch snapshot).
+
+* Wed Feb 03 2016 Fedora Release Engineering <releng@fedoraproject.org> - 7.10.50.20160131-51.fc24
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
+
+* Sun Jan 31 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.10.50.20160131-50.fc24
+- Rebase to FSF GDB 7.10.50.20160131 (trunk snapshot).
+
+* Sun Jan 31 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.10.50.20160121-49.fc24
+- Fix another false gcc6 compilation warning (Mark Wielaard).
+
+* Sun Jan 31 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.10.50.20160121-48.fc24
+- Fix false gcc6 compilation warning for: bfd/elf64-s390.c
+
+* Sun Jan 31 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.10.50.20160121-47.fc24
+- [testsuite] Fix false selftest.exp FAIL from system readline-6.3+ (Patrick Palka).
+
+* Fri Jan 22 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.10.50.20160121-46.fc24
+- Fix gdb.gdb/selftest.exp false FAIL.
+
+* Fri Jan 22 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.10.50.20160121-45.fc24
+- Rebase to FSF GDB 7.10.50.20160121 (trunk snapshot).
+
+* Wed Jan 20 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.10.50.20160106-44.fc24
+- Suppress librpm non-absolute filename warnings for /^remote:/ filenames.
+
+* Sat Jan 16 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.10.50.20160106-43.fc24
+- Test clflushopt instruction decode (for RH BZ 1262471).
+
+* Sat Jan  9 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.10.50.20160106-42.fc24
+- Simplify .spec: Remove conditional revert of: gdb-pahole-python2.patch
+
+* Sat Jan  9 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.10.50.20160106-41.fc24
+- Simplify .spec: Remove conditional revert of: gdb-6.8-attach-signalled-detach-stopped.patch
+- Simplify .spec: Remove conditional revert of: gdb-6.8-quit-never-aborts.patch
+
+* Sat Jan  9 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.10.50.20160106-40.fc24
+- Merge gdb-rhel5-compat.patch into: gdb-6.8-attach-signalled-detach-stopped.patch
+
+* Sat Jan  9 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.10.50.20160106-39.fc24
+- Simplify .spec: Remove conditional revert of: gdb-readline62-ask-more-rh.patch
+
+* Sat Jan  9 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.10.50.20160106-38.fc24
+- Simplify .spec: Remove conditional revert of: gdb-6.6-buildid-locate-rpm-scl.patch
+
+* Sat Jan  9 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.10.50.20160106-37.fc24
+- Simplify .spec: Remove conditional revert of: gdb-dts-rhel6-python-compat.patch
+
+* Sat Jan  9 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.10.50.20160106-36.fc24
+- VLA (Fortran dynamic arrays) strides (multi-dimensional subarrays) from Intel.
+
+* Fri Jan  8 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.10.50.20160106-35.fc24
+- Fix false FAILs on too long base directory.
+
+* Fri Jan  8 2016 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.10.50.20160106-34.fc24
+- Rebase to FSF GDB 7.10.50.20160106 (trunk snapshot).
+
+* Sat Nov 14 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.10.50.20151113-33.fc24
+- Rebase to FSF GDB 7.10.50.20151113 (trunk snapshot).
+- [testsuite] BuildRequire libmpx for --with testsuite.
+- Force libncursesw over libncurses to match the includes (RH BZ 1270534).
+
+* Thu Nov 12 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 7.10.50.20151027-32.fc24
+- Rebuilt for https://fedoraproject.org/wiki/Changes/python3.5
+
+* Sun Nov  8 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.10.50.20151027-31.fc24
+- [aarch64] Fix build regression (RH BZ 1278902, bugreport by Peter Robinson).
+
+* Tue Nov  3 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.10.50.20151027-30.fc24
+- Rebase to FSF GDB 7.10.50.20151027 (trunk snapshot).
+
+* Mon Oct 12 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.10-29.fc23
+- Fix internal error on DW_OP_bregx(-1) (RH BZ 1270564).
+
+* Mon Sep 28 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.10-28.fc23
+- Add --with buildisa, remove %%{?_isa} from BuildRequires by default:
+  https://github.com/msimacek/koschei/issues/54
+
+* Thu Sep 24 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.10-27.fc23
+- [rhel6,rhel7] Keep pahole.py and make it Python2 compatible.
+
+* Wed Sep 23 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.10-26.fc23
+- [rhel7] Provide libstdc++-v3-python with C++11 even on RHEL-7 (RH BZ 1239290).
+- Do not provide libstdc++-v3-python lib64 files on 32-bit archs.
+- [rhel6,rhel7] Delete pahole.py on Python2 systems.
+
+* Wed Sep 23 2015 Robert Kuska <rkuska@redhat.com> - 7.10-25.fc23
+- Python3.5 Rebuild: Rebuild wit python3 support 
+
+* Wed Sep 23 2015 Robert Kuska <rkuska@redhat.com> - 7.10-24.fc23
+- Python3.5 Rebuild: Rebuild without python3 support 
+
+* Fri Sep 18 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.10-23.fc23
+- Fix the pahole command breakage due to its Python3 port (RH BZ 1264532).
+
+* Sun Sep 13 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.10-22.fc23
+- Fix gstack to use gdb from $PATH (bugreport by Frank Hirtz, RH BZ 1262589).
+
+* Fri Sep 11 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.10-21.fc23
+- [testsuite] Fix gcc-gdb-plugin and gcc-go BuildRequires for --with testsuite.
+
+* Thu Sep 10 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.10-20.fc23
+- [ppc64le] Use skip_entrypoint for skip_trampoline_code (RH BZ 1260558).
+
+* Thu Sep 10 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.10-19.fc23
+- Add changelog entry and fix librpm dependency broken by Peter Robinson.
+
+* Thu Sep  3 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.10-18.fc23
+- Enable libipt (Intel Processor Trace Decoder Library).
+
+* Wed Sep  2 2015 Sergio Durigan Junior <sergiodj@redhat.com> - 7.10-17.fc23
+- Fix 'Make the probes-based dynamic linker interface more robust to
+  errors' (Sergio Durigan Junior, RH BZ 1259132).
+
+* Tue Sep  1 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.10-16.fc23
+- [RHEL] Fix librpm Recommends compatibility.
+
+* Sat Aug 29 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.10-15.fc23
+- Rebase to FSF GDB 7.10 final.
+
+* Sat Aug 22 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.10-14.fc23
+- Re-enable --with testsuite BuildRequires: prelink for RHELs.
+
+* Sat Aug 22 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.10-13.fc23
+- Rebase to FSF GDB 7.9.90.20150822 (7.10 branch snapshot).
+- Remove --with testsuite BuildRequires: prelink (prelink is orphaned in F-23+).
+
+* Thu Aug  6 2015 Sergio Durigan Junior <sergiodj@redhat.com> - 7.9.90.20150717-12.fc23
+- Add "Recommends: default-yama-scope" (for RH BZ 1209492).
+
+* Thu Aug  6 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.9.90.20150717-11.fc23
+- Fix librpm version for f23.
+
+* Sun Aug  2 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.9.90.20150717-10.fc23
+- Fix unpackaged d-exp.c source for the debuginfo rpm.
+- Fix librpm version dependency Koji build failure (for RH BZ 1249325).
+
+* Sun Aug  2 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.9.90.20150717-9.fc23
+- Fix librpm version dependency (for RH BZ 1249325, from Igor Gnatenko).
+
+* Sat Aug  1 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.9.90.20150717-8.fc23
+- Fix librpm version 3->7 for Rawhide
+  (RH BZ 1249325, bugreport by Zbigniew Jędrzejewski-Szmek).
+- Fix yum vs. dnf message suggestion for Rawhide
+  (RH BZ 1249326, bugreport by Zbigniew Jędrzejewski-Szmek).
+
+* Fri Jul 17 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.9.90.20150717-7.fc23
+- Rebase to FSF GDB 7.9.90.20150717 (7.10 branch snapshot).
+
+* Fri Jul 10 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.9.90.20150709-6.fc23
+- Rebase to FSF GDB 7.9.90.20150709 (7.10 branch snapshot).
+
+* Tue Jul  7 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.9.50.20150531-5.fc23
+- Upgrade libstdc++-v3-python to r225521 (RH BZ 1239290).
+
+* Thu Jul  2 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.9.50.20150531-4.fc23
+- [RHEL] Use Python2, disable Guile.
+
+* Fri Jun 26 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.9.50.20150531-3.fc23
+- Fix 'info type-printers' Python error (Clem Dickey, RH BZ 1085576).
+
+* Tue Jun 16 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.9.50.20150531-2.fc23
+- Fix enum e e 'Attempt to use a type name as an expr.' (Keith Seitz, PR 16253).
+
+* Sun May 31 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.9.50.20150531-1.fc23
+- Rebase to FSF GDB 7.9.50.20150531 (pre-7.10 trunk snapshot).
+
+* Fri May 15 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.9.1-14.fc22
+- Fix ignored Requires for gdb-doc (RH BZ 1221814).
+
+* Thu May 14 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.9.1-13.fc22
+- Change 'Recommends: dnf-plugins-core' to 'dnf-command(debuginfo-install)'.
+
+* Wed May 13 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.9.1-12.fc22
+- Rebase to FSF GDB 7.9.1 (7.9 stable branch).
+- Add 'Recommends: dnf-plugins-core' for 'dnf debuginfo-install'.
+
+* Thu Apr  2 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.9-11.fc22
+- Suggest s/debuginfo-install/dnf debuginfo-install/ (BZ 1208650, Omair Majid).
+
+* Sun Feb 22 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.9-10.fc22
+- Rebase to the final 7.9 release.
+
+* Sun Feb 22 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.8.90.20150202-9.fc22
+- Change Require->Recommends for gcc-gdb-plugin (RH BZ 1195005).
+
+* Sat Feb 21 2015 Till Maas <opensource@till.name> - 7.8.90.20150214-8
+- Rebuilt for Fedora 23 Change
+  https://fedoraproject.org/wiki/Changes/Harden_all_packages_with_position-independent_code
+
+* Mon Feb 16 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.8.90.20150214-7.fc22
+- Switch Python 2->3 (RH BZ 1014549).
+
+* Sat Feb 14 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.8.90.20150214-6.fc22
+- Rebase to 7.9-branch snapshot 7.8.90.20150214.
+
+* Wed Feb 11 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.8.90.20150202-5.fc22
+- Enable guile support.
+
+* Wed Feb 11 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.8.90.20150202-4.fc22
+- Fix gcc5 compilation errors (RH BZ 1190649).
+
+* Mon Feb  9 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.8.90.20150202-3.fc22
+- Require gcc-gdb-plugin.
+
+* Mon Feb  2 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.8.90.20150202-2.fc22
+- Rebase to 7.9-branch snapshot 7.8.90.20150202.
+- Temporarily disable dg-extract-results.py to fix gdb.sum sorting.
+
+* Thu Jan  8 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.8.50.20150108-1.fc22
+- Rebase to pre-7.9 snapshot 7.8.50.20150108.
+- Fix jit-reader.h for multi-lib.
+
+* Sun Dec 28 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.8.1-36.fc21
+- Rebase to 7.8.1.20141228 for a performance fix (PR binutils/17677).
+
+* Sat Dec 13 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.8.1-35.fc21
+- Fix resolve_dynamic_struct: Assertion `TYPE_NFIELDS (type) > 0' (PR 17642).
+
+* Sat Nov 22 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.8.1-34.fc21
+- [ppc64] Fix compatibility of Fedora errno workaround (for RH BZ 1166549).
+
+* Fri Nov 21 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.8.1-33.fc21
+- Fix regression accessing errno from a core file (RH BZ 1166549).
+
+* Thu Nov 20 2014 Sergio Durigan Junior <sergiodj@redhat.com> - 7.8.1-32.fc21
+- Fix 'Unowned dir /usr/include/gdb/' (RH BZ 1164991).
+
+* Sat Nov 15 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.8.1-31.fc21
+- Fix '[RFE] please add add-auto-load-scripts-directory command' (RH
+  BZ 1163339, Jan Kratochvil).
+
+* Thu Oct 30 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.8.1-30.fc21
+- Rebase to FSF GDB 7.8.1.
+
+* Mon Oct 27 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.8-29.fc21
+- Backport vDSO regression.
+- Revert the makeinfo workaround from 7.8-27.fc21.
+- Further 1.75x improvement of the interactive symbols lookup (Doug Evans).
+
+* Mon Oct 20 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.8-28.fc21
+- Accelerate interactive symbols lookup 15x.
+
+* Sun Oct 19 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.8-27.fc21
+- Workaround makeinfo F-22 Bug 1154436.
+
+* Sun Oct 19 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.8-26.fc21
+- Import 5 upstream gdb-7.8 branch fixes (async fix by Pedro Alves).
+
+* Fri Oct 03 2014 Sergio Durigan Junior <sergiodj@redhat.com> - 7.8-25.fc21
+- Fix 'Slow gstack performance' (RH BZ 1103894, Jan Kratochvil).
+
+* Fri Oct  3 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.8-24.fc21
+- Fix "save breakpoints" for signal catchpoints and disabled breakpoints
+  (BZ 1146170, Miroslav Franc).
+
+* Mon Sep 15 2014 Sergio Durigan Junior <sergiodj@redhat.com> - 7.8-23.fc21
+- Install gdb/jit-reader.h on include directory (BZ 1141968).
+
+* Sun Sep 14 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.8-22.fc21
+- [testsuite] Fix runaway gdb.base/attach processes.
+
+* Sun Sep  7 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.8-21.fc21
+- Fix GDB SIGTT* Stopped when using the PID argument (BZ 1136704, Pedro Alves).
+
+* Wed Aug 20 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.8-20.fc21
+- Fix babeltrace errors (Yao Qi).
+- Fix crash on Python frame filters with unreadable arg (BZ 1126177).
+
+* Sat Aug 16 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 7.8-19
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
+
+* Thu Aug 14 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.8-18.fc21
+- [rhel] Adjust the previous patch for compilation on older GCCs.
+
+* Wed Aug 13 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.8-17.fc21
+- Fix Python GIL with gdb.execute("continue") (Phil Muldoon, BZ 1116957).
+
+* Mon Aug  4 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.8-16.fc21
+- Enable babeltrace compile-time feature.
+
+* Sat Aug  2 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.8-15.fc21
+- Rebase to FSF GDB 7.8.
+- Display Fortran strings in backtraces.
+
+* Thu Jul 24 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.8-14.fc21
+- Rebase to FSF GDB 7.7.91.20140724 (pre-7.8 snapshot).
+- Import TUI regression fix (Pedro Alves, BZ 1123003).
+
+* Tue Jul 22 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.8-13.fc21
+- Bump the package version number to final 7.8; still using 7.7.91.20140721.tar.
+
+* Tue Jul 22 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.7.91.20140721-12.fc21
+- Rebase to FSF GDB 7.7.91.20140721 (pre-7.8 snapshot).
+- Rebase the Intel VLA patchset.
+- New fix of the optimized-out entry data values crash (BZ 1111910).
+- [testsuite] Fix paginate-*.exp race for "read1".
+
+* Fri Jul 11 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.7.90.20140711-11.fc21
+- Fix regression#2 of the optimized-out entry data values fix (of BZ 1111910).
+- Rebase to FSF GDB 7.7.90.20140711 (pre-7.8 snapshot).
+- [testsuite] Disable --with testsuite PIE testing, it has too many false FAILs.
+
+* Wed Jul  9 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.7.90.20140627-10.fc21
+- Fix regression of the optimized-out entry data values fix (of BZ 1111910).
+
+* Tue Jul  8 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.7.90.20140627-9.fc21
+- Rebase the Intel VLA patchset.
+- Python completion w/overriden completer (Sergio Durigan Junior, BZ 1075199).
+- Remove %%{_bindir}/mono-gdb.py workaround of mono BZ 815501.
+
+* Tue Jul  1 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.7.90.20140627-8.fc21
+- Do not remove %%{_datadir}/gdb/syscalls/ppc*.xml as it is secondary target.
+- Remove: %%{_datadir}/gdb/guile
+- Remove: %%{_datadir}/gdb/system-gdbinit
+
+* Mon Jun 30 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.7.90.20140627-7.fc21
+- Fix crash on optimized-out entry data values (BZ 1111910).
+
+* Fri Jun 27 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.7.90.20140627-6.fc21
+- Rebase to FSF GDB 7.7.90.20140627 (pre-7.8 snapshot).
+
+* Fri Jun 27 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.7.90.20140613-5.fc21
+- Continue backtrace even if a frame filter throws an exception (Phil Muldoon).
+
+* Tue Jun 24 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.7.90.20140613-4.fc21
+- [aarch64] Fix compilation error.
+
+* Fri Jun 20 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.7.90.20140613-3.fc21
+- Fix --with-system-readline with readline-6.3 patch 5.
+  - Use --enable-werror again.
+
+* Thu Jun 19 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.7.90.20140613-2.fc21
+- Temporarily use --disable-werror for readline-6.3's deprecated 'VFunction'.
+
+* Thu Jun 19 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.7.90.20140613-1.fc21
+- Rebase to FSF GDB 7.7.90.20140613 (pre-7.8 snapshot).
+
+* Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 7.7.1-21
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
+
+* Tue Jun  3 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.7.1-20.fc21
+- Fix#2 /usr/share/gdb/system-gdbinit/ timestamps causing non-matching *.py[oc].
+
+* Tue Jun  3 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.7.1-19.fc21
+- Fix /usr/share/gdb/auto-load/ (safely) dangling symlinks.
+- Fix /usr/share/gdb/system-gdbinit/ timestamps causing non-matching *.py[oc].
+
+* Tue Jun  3 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.7.1-18.fc21
+- [ppc64le testsuite] Add comments about prelink+valgrind not yet ported.
+
+* Fri May 30 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.7.1-17.fc21
+- [arm*,aarch64] Turn on --enable-werror, fix aarch64 for it.
+
+* Fri May 30 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.7.1-16.fc21
+- [aarch64] Fix signal frame unwinding (BZ 1086894, upstream).
+
+* Mon May 26 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.7.1-15.fc21
+- [testsuite] Drop BuildRequires: gcc-java+libgcj on Fedora (no longer in F21+).
+
+* Fri May 16 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.7.1-14.fc21
+- [rhel5] Drop the RHEL-5 support - simplify this .spec file.
+
+* Wed May 14 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.7.1-13.fc21
+- [s390*] Import upstream fix for 64->32 debugging.
+
+* Mon May 12 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.7.1-12.fc21
+- [s390*] Fix compilation error.
+
+* Fri May  9 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.7.1-11.fc21
+- [ppc*] Import ppc64le support (BZ 1096303, Ulrich Weigand).
+
+* Tue May  6 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.7.1-10.fc21
+- Rebase to FSF GDB 7.7.1.
+
+* Mon May  5 2014 Sergio Durigan Junior <sergiodj@redhat.com> - 7.7-9.fc21
+- Improve testcase message for RH BZ 981154.
+
+* Mon May  5 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.7-8.fc21
+- Fix TLS access for -static -pthread (BZ 1080660).
+
+* Mon May  5 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.7-7.fc21
+- Add GFDL License to the main package (man pages are generated from .texinfo).
+
+* Thu Apr 24 2014 Sergio Durigan Junior <sergiodj@redhat.com> - 7.7-6.fc21
+- Fix build failures for GCC 4.9 (Nick Clifton).
+
+* Thu Apr 24 2014 Sergio Durigan Junior <sergiodj@redhat.com> - 7.7-5.fc21
+- Fix 'gdb gives highly misleading error when debuginfo pkg is present,
+  but not corresponding binary pkg' (RH BZ 981154).
+
+* Mon Feb 24 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.7-4.fc21
+- Fix crash of -readnow /usr/lib/debug/usr/bin/gnatbind.debug (BZ 1069211).
+
+* Sun Feb 23 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.7-3.fc21
+- [rhel6] DTS backward Python compatibility API (BZ 1020004, Phil Muldoon).
+- [rhel6] Do not install its man page if gdb-add-index is not installed.
+- [rhel] Do not migrate /usr/share/gdb/auto-load/ with symlinks on RHELs.
+- Fix gdb-7.7 auto-load from /usr/share/gdb/auto-load/ regression.
+
+* Sun Feb  9 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.7-2.fc21
+- [rhel] Fix rebase build regression on RHEL systems (Tobias Burnus).
+
+* Fri Feb  7 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.7-1.fc21
+- Rebase to FSF GDB 7.7.
+- New rpmbuild option: --with asan
+
+* Thu Jan 23 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6.50.20140119-20.fc20
+- [s390*,ppc*] Enable secondary targets s390* and ppc* (BZ 1056259).
+
+* Sun Jan 19 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6.50.20140119-19.fc20
+- Backport several gdb-7.6.x stable branch fixes (BZ 1055155).
+
+* Wed Dec 25 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6.50.20130731-18.fc20
+- [aarch64] Backport two breakpoint/watchpoint fixes.
+
+* Mon Nov 18 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6.50.20130731-17.fc20
+- [rhel7] [--with testsuite] Remove gcc-java&co. BuildRequires.
+
+* Sat Nov  9 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6.50.20130731-16.fc20
+- Fix explicit Class:: inside class scope (BZ 874817, Keith Seitz).
+
+* Tue Nov  5 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6.50.20130731-15.fc20
+- [aarch64] Backport two fixes (BZ 1026484).
+
+* Sun Nov  3 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6.50.20130731-14.fc20
+- Fix %%{_bindir}gdb-add-index to also use -iex 'set auto-load no'.
+
+* Wed Oct 30 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6.50.20130731-13.fc20
+- [rhel5] Fix /etc/gdbinit compatibility with python-2.4.
+
+* Mon Sep 30 2013 Sergio Durigan Junior <sergiodj@redhat.com> - 7.6.50.20130731-12.fc20
+- Fix the case when GDB leaks memory because value_struct_elt does not call
+  check_typedef.  (Doug Evans, BZ 15695, filed as RH BZ 1013453).
+
+* Wed Sep 25 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6.50.20130731-11.fc20
+- Enable arm-linux-gnu and aarch64-linux-gnu targets on all archs (BZ 1011647).
+
+* Mon Sep  9 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6.50.20130731-10.fc20
+- Fix the version string to be GNU standards compliant (BZ 1004949).
+
+* Fri Aug 30 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6.50.20130731-9.fc20
+- Load /etc/gdbinit.d/*.{gdb,py} files automatically (BZ 981520).
+
+* Fri Aug 30 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6.50.20130731-8.fc20
+- New %%pre to fix failed upgrade of the previous commit (BZ 999645).
+- Fix false warnings of new %%pre during future upgrades (BZ 999645).
+
+* Wed Aug 28 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6.50.20130731-7.fc20
+- Fix /usr/share/gdb/auto-load/ need of filesystem symlinks (BZ 999645).
+  It needs: yum remove gdb-heap; yum reinstall gdb; yum install gdb-heap
+
+* Thu Aug  8 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6.50.20130731-6.fc20
+- [rhel5] tps-srpmtest does not set %%{rhel} (BZ 1002198, Miroslav Franc).
+
+* Thu Aug  8 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6.50.20130731-5.fc20
+- Simplify BuildRequires by texlive-collection-latexrecommended (see BZ 919891).
+
+* Tue Aug  6 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6.50.20130731-4.fc20
+- Revert the texlive-collection-latexrecommended change (see BZ 919891).
+
+* Tue Aug  6 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6.50.20130731-3.fc20
+- Simplify BuildRequires by texlive-collection-latexrecommended (see BZ 919891).
+- Fix crash on 'enable count' (Simon Marchi, BZ 993118).
+
+* Fri Aug  2 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6.50.20130731-2.fc20
+- Drop ia64 patches and .spec support.
+
+* Fri Aug  2 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6.50.20130731-1.fc20
+- Rebase to FSF GDB 7.6.50.20130731 (snapshot between 7.6 and future 7.7).
+
+* Mon Jul 29 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6-36.fc20
+- Remove %%{gdb_docdir}, rebuild for unversioned docdirs (for BZ 986871).
+
+* Wed Jul 24 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6-35.fc20
+- [ppc] Support Power8 CPU (IBM, BZ 731875).
+
+* Wed Jul 17 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6-34.fc20
+- Remove --disablerepo='*' from BZ 554152 as it conflicts with BZ 981154.
+
+* Wed Jul 17 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6-33.fc20
+- Fix yum install command output when the binary RPM is missing (BZ 981154).
+- Fix the changlog entry formatting for 6.3.0.0-0.1.
+
+* Mon Jun 10 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6-32.fc19
+- [scl] Disable Python frame filters on scl.
+- Update libraries opening performance fix from upstream.
+- Fix C++ lookups performance regression (Doug Evans, BZ 972677).
+
+* Tue May 28 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6-31.fc19
+- [ppc] Backport hardware watchpoints fix (Edjunior Machado, BZ 967915).
+
+* Tue May 21 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6-30.fc19
+- Backported Python frame filters (Phil Muldoon).
+- Backported breakpoint conditions crash fix (Sergio Durigan Junior).
+
+* Sun May 19 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6-29.fc19
+- Fix performance regression opening many libraries (Gary Benson, BZ 965106).
+
+* Thu May  9 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6-28.fc19
+- Fix needless expansion of non-gdbindex symtabs (Doug Evans).
+
+* Mon May  6 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6-27.fc19
+- [testsuite] [RHEL-5] Fix gdb-orphanripper.c runtime error.
+
+* Fri May  3 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6-26.fc19
+- Fix gcore for vDSO (on ppc64).
+
+* Sat Apr 27 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6-25.fc19
+- Fix false "Unknown error 512" on x32 (H.J. Lu, BZ 956883).
+
+* Fri Apr 26 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6-24.fc19
+- Rebase to FSF GDB 7.6.
+
+* Wed Apr 24 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.91.20130423-23.fc19
+- Fix man page BuildRequires (for BZ 881892).
+
+* Tue Apr 23 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.91.20130423-22.fc19
+- [spec] Fix virtual bundles after GDB has been branched.
+
+* Tue Apr 23 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.91.20130423-21.fc19
+- Rebase to FSF GDB 7.5.91.20130423 (pre-7.6 snapshot).
+
+* Mon Apr 22 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.91.20130407-20.fc19
+- [SCL] Skip deprecated .gdb_index warning for Red Hat built files (BZ 953585).
+
+* Mon Apr 22 2013 Sergio Durigan Junior <sergiodj@redhat.com> - 7.5.91.20130407-19.fc19
+- [RHEL-6] Regression test for RH BZ 947564.
+
+* Thu Apr 11 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.91.20130407-18.fc19
+- Provide man page for gcore.1 and gdb-add-index.1 (BZ 881892).
+
+* Sun Apr  7 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.91.20130407-17.fc19
+- [RHEL-5] Fix noarch doc build.
+
+* Sun Apr  7 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.91.20130407-16.fc19
+- Rebase to FSF GDB 7.5.91.20130407 (pre-7.6 snapshot).
+- [SCL] Remove BuildRequires of gcc-go on SCL (Miroslav Franc, BZ 948982).
+- Provide man page for gdbinit.5 (BZ 881892), document gdb -p in man (BZ 659000).
+
+* Tue Apr  2 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.91.20130402-15.fc19
+- Rebase to FSF GDB 7.5.91.20130402 (pre-7.6 snapshot).
+
+* Sat Mar 23 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.91.20130323-14.fc19
+- Rebase to FSF GDB 7.5.91.20130310 (pre-7.6 snapshot).
+- Fix crash regression from the dlopen of libpthread.so fix (BZ 911712).
+
+* Mon Mar 11 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.50.20130310-13.fc19
+- [RHEL-5] Import build regression fix.
+
+* Sun Mar 10 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.50.20130310-12.fc19
+- Add workaround of PDF gdb-doc build (filed as RH BZ 919891).
+
+* Sun Mar 10 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.50.20130310-11.fc19
+- Re-enable (again) PDF in gdb-doc after texinfo RH BZ 876710 has been fixed.
+
+* Sun Mar 10 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.50.20130310-10.fc19
+- Rebase to FSF GDB 7.5.50.20130310 (pre-7.6 snapshot).
+- Fix various entry-values sub-optimal results.
+
+* Mon Feb 25 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.50.20130215-9.fc19
+- testsuite: Fix gdb.arch/powerpc-power6.exp testcase (IBM, RH BZ 890900).
+
+* Tue Feb 19 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.50.20130215-8.fc19
+- Temporarily disable PDF in gdb-doc for still unavailable texinfo RH BZ 876710.
+
+* Mon Feb 18 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.50.20130215-7.fc19
+- Rebase to FSF GDB 7.5.50.20130215 (pre-7.6 snapshot).
+
+* Fri Feb  8 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.50.20130118-6.fc19
+- Re-enable PDF in gdb-doc after texinfo RH BZ 876710 has been fixed.
+
+* Mon Feb  4 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.50.20130118-5.fc19
+- Release bump only.
+
+* Fri Feb  1 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.50.20130118-4.fc19
+- Fix assert crashes with minidebuginfo (BZ 903522).
+
+* Fri Jan 25 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.50.20130118-3.fc19
+- Release bump only.
+
+* Mon Jan 21 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.50.20130118-2.fc19
+- [RHEL] Reintroduce gdb-6.8-quit-never-aborts.patch.
+
+* Sat Jan 19 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.50.20130118-1.fc19
+- Rebase to FSF GDB 7.5.50.20130118 (pre-7.6 snapshot).
+
+* Sun Jan 13 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.1-35.fc18
+- [testsuite] Fix gdb-orphanripper.c lockup on F-17 (/dev/pts/* glibc chown).
+
+* Tue Jan  8 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.1-34.fc18
+- Update dlopen to support map_failed probe of glibc (Gary Benson, BZ 886516).
+
+* Thu Jan  3 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.1-33.fc18
+- [ppc*] Fix PowerPC disassembly regression (Alan Modra, Edjunior Machado).
+
+* Thu Dec 13 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.1-32.fc18
+- 'dwz -m' parsing fix (Tom Tromey).
+
+* Mon Dec  3 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.1-31.fc18
+- Fix DW_OP_GNU_implicit_pointer offset bug (Tom Tromey).
+
+* Sun Dec  2 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.1-30.fc18
+- Temporarily disable PDF in gdb-doc before texinfo RH BZ 876710 gets fixed.
+
+* Thu Nov 29 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.1-29.fc18
+- Provide Source URL when it is a release.
+
+* Thu Nov 29 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.1-28.fc18
+- Fix (unsplit) split info doc.
+
+* Thu Nov 29 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.1-27.fc18
+- Rebase to FSF GDB 7.5.1 (7.5 stable branch).
+
+* Fri Nov  9 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.0.20120926-26.fc18
+- Fix `GDB cannot access struct member whose offset is larger than 256MB'
+  (RH BZ 871066).
+
+* Fri Oct  5 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.0.20120926-25.fc18
+- entry values: Fix resolving in inlined frames.
+
+* Thu Sep 27 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.0.20120926-24.fc18
+- Permit passing pointers as address number even for C++ methods (Keith Seitz).
+
+* Thu Sep 27 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.0.20120926-23.fc18
+- Fix crash printing classes (BZ 849357, Tom Tromey).
+
+* Wed Sep 26 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.0.20120926-22.fc18
+- Fix .spec 'bundled' Provides for the stable branch rebase.
+
+* Wed Sep 26 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.0.20120926-21.fc18
+- [ppc32] Fix stepping over symbol-less code crash regression (BZ 860696).
+- Rebase to FSF GDB 7.5.0.20120926 (7.5 stable branch).
+  - Remove the .spec Source keyword URL as not valid now.
+
+* Fri Sep 14 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5-20.fc18
+- [RHEL-6] Disable no longer valid workaround of man pages .gz suffix.
+
+* Sat Aug 18 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5-19.fc18
+- Rebase to FSF GDB 7.5.
+- Update dlopen to support two variants of glibc (Gary Benson, BZ 669432).
+
+* Fri Aug 17 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.91.20120801-18.fc18
+- Drop Source URL for snapshots.
+- Separate %%{snapgnulib} from %%{snap}.
+- Fix %%{libstdcxxpython} to be %%{name}-prefixed.
+- Fix debug info for go-exp.y and go-exp.c.
+- Include RHEL-5 compatible %%{buildroot} cleanup.
+- Use %%__global_ldflags.
+
+* Wed Aug  1 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.91.20120801-17.fc18
+- Rebase to FSF GDB 7.4.91.20120801.
+- [dwz] Rebase it from FSF GDB HEAD.
+
+* Thu Jul 19 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 7.4.50.20120714-16.fc18
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
+
+* Mon Jul 16 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120714-15.fc18
+- [devtoolset] Include Obsoletes of devtoolset-1.0-* by devtoolset-1.1-*.
+
+* Sun Jul 15 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120714-14.fc18
+- Rebase to FSF GDB 7.4.50.20120714.
+  - Fix entryval feature crash on some .debug files optimized by dwz (BZ 839596).
+- Fix another stale frame_info * (PR 11914, like PR 13866).
+
+* Fri Jul  6 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120703-13.fc18
+- [RHEL] Disable MiniDebugInfo F-18 feature on RHEL <= 6 (BZ 834068).
+
+* Fri Jul  6 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120703-12.fc18
+- Fix .spec metadata for the MiniDebugInfo F-18 feature (BZ 834068).
+
+* Fri Jul  6 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120703-11.fc18
+- [archer-tromey-dwz-multifile-rebase] Fix DWARF files reading (Tom Tromey).
+
+* Fri Jul  6 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120703-10.fc18
+- Fix build-id-core-loads internal error (BZ 837870).
+
+* Thu Jul  5 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120703-9.fc18
+- Implement MiniDebugInfo F-18 Feature consumer (Alexander Larsson, BZ 834068).
+
+* Tue Jul  3 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120703-8.fc18
+- Rebase to FSF GDB 7.4.50.20120703.
+- [archer-tromey-dwz-multifile-rebase] Merge new branch (Tom Tromey).
+- [arm] <--with testsuite>: Disable fpc BuildRequires as it is not yet built.
+- Revert function returning pointer fix (PR 9514) regressing Fedora errno patch.
+
+* Thu Jun 21 2012 Sergio Durigan Junior <sergiodj@redhat.com> - 7.4.50.20120603-7.fc18
+- Include testcase for BZ 818343.
+
+* Tue Jun 19 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120603-6.fc18
+- Fix regression of undisplayed missing shared libraries caused by a fix for:
+  GNU/Linux core open: Can't read pathname for load map: Input/output error.
+
+* Sun Jun 17 2012 Sergio Durigan Junior <sergiodj@redhat.com> - 7.4.50.20120603-5.fc18
+- Include testcase for BZ 823789.
+
+* Thu Jun 14 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120603-4.fc18
+- Support DW_OP_GNU_parameter_ref for -O2 -g inferiors (BZ 827375).
+
+* Wed Jun  6 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120603-3.fc18
+- Disable -lmcheck in the development builds.
+- Fix assertion on some files as glibc-2.15.90-8.fc18 (Doug Evans).
+
+* Sun Jun  3 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120603-2.fc18
+- Fix Release.
+- Make yum --enablerepo compatible with at least mock-1.1.21-1.fc16 Rawhide cfg.
+
+* Sun Jun  3 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120602-1.fc18
+- Rebase to FSF GDB 7.4.50.20120602.
+- [testsuite] BuildRequire gcc-go.
+- Drop printing 2D C++ vectors as matrices which no longer worked (BZ 562763).
+- Fix dejagnu-1.5-4.fc17 compatibility for Go (for BZ 635651).
+- Use librpm.so.3 for rpm-4.10.0 in Fedora 18.
+- Revert recent breakage of UNIX objfiles order for symbols lookup.
+
+* Sat Jun  2 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-48.fc17
+- [ppc] Fix hardware watchpoints on PowerPC (BZ 827600, Edjunior Machado).
+
+* Mon May 28 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-47.fc17
+- Workaround PR libc/14166 for inferior calls of strstr.
+
+* Mon May 14 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-46.fc17
+- [RHEL5] Workaround doc build race.
+
+* Mon May 14 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-45.fc17
+- Rename "set auto-load" patchset variable $ddir to $datadir.
+
+* Wed May  9 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-44.fc17
+- Fix in "set auto-load" patchset for SCL scripts inheritance (BZ 815910).
+
+* Wed Apr 25 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-43.fc17
+- [RHEL5] Workaround kernel for detaching SIGSTOPped processes (BZ 809382).
+
+* Tue Apr 24 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-42.fc17
+- Update "set auto-load" patchset and the --with-auto-load-safe-path setting.
+- [RHEL] Disable gdb-add-index even on RHEL-6 as RHEL-6.0 had too old elfutils.
+
+* Wed Apr 18 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-41.fc17
+- [RHEL] Fix --with-auto-load-safe-path systems prior to /usr move.
+
+* Wed Apr 18 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-40.fc17
+- Security fix for loading untrusted inferiors, see "set auto-load" (BZ 756117).
+
+* Fri Apr 13 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-39.fc17
+- [RHEL7] Fix/remove readline-devel BuildRequires redundant distro suffic .fc17.
+
+* Wed Apr  4 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-38.fc17
+- Workaround crashes from stale frame_info pointer (BZ 804256).
+
+* Wed Apr  4 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-37.fc17
+- testsuite: Fix break-interp.exp expections for updated glibc (BZ 752834).
+
+* Wed Apr  4 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-36.fc17
+- [RHEL5,RHEL6] Reintroduce fix attaching to stopped processes.
+
+* Fri Mar 30 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-35.fc17
+- Fix performance regressions with .gdb_index (Tom Tromey, BZ 805274).
+
+* Fri Mar 30 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-34.fc17
+- Fixup %%{_datadir}/gdb timestamps for multilib conflicts on RHELs.
+
+* Mon Mar 26 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-33.fc17
+- [vla] Fix regression on no type for subrange from IBM XLF Fortran (BZ 806920).
+
+* Sat Mar 17 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-32.fc17
+- Fix loading of core files without build-ids but with build-ids in executables.
+
+* Fri Mar  9 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-31.fc17
+- Fix an implied regression by the inferior calls fix below (BZ 799531).
+
+* Fri Mar  9 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-30.fc17
+- Fix SELinux deny_ptrace .spec build rules (BZ 786878).
+
+* Tue Mar  6 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-29.fc17
+- Fix inferior calls, particularly uncaught thrown exceptions (BZ 799531).
+- Fix DWARF DIEs CU vs. section relative offsets (Joel Brobecker, me).
+
+* Tue Mar  6 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-28.fc17
+- Print reasons for failed attach/spawn incl. SELinux deny_ptrace (BZ 786878).
+
+* Sun Mar  4 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-27.fc17
+- [rhel5] Fix up the previous commit (BZ 799318).
+
+* Sun Mar  4 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-26.fc17
+- [rhel5] Fix up the previous commit (BZ 799318).
+
+* Sun Mar  4 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-25.fc17
+- [rhel5] Workaround rpmbuild to make the doc subpkg noarch again (BZ 799318).
+
+* Fri Mar  2 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-24.fc17
+- [vla] Fix crash for dynamic.exp with gcc-gfortran-4.1.2-51.el5.x86_64.
+- Reintroduce RHEL-5 glibc workaround for bt-clone-stop.exp.
+- testsuite: Update/fix rh634108-solib_address.exp for the upstreamed API.
+
+* Wed Feb 29 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-23.fc17
+- Add kernel vDSO workaround (`no loadable ...') on RHEL-5 (kernel BZ 765875).
+- Fix skipping of prologues on RHEL-5 gcc-4.1 -O2 -g code (BZ 797889).
+- Fix breakpoint warning during 'next' over exit() (Tom Tromey, BZ 797892).
+
+* Tue Feb 28 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-22.fc17
+- testsuite: Fix gdb.base/macscp.exp ccache workaround in SCL mode.
+- Adjust the RHEL/F version string automatically (BZ 797651, BZ 797646).
+- Provide gdbtui for RHEL-5 and RHEL-6 as it is removed upstream (BZ 797664).
+
+* Fri Feb 24 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-21.fc17
+- testsuite: Do not use gcc44/gfortran44 on RHEL-5 if in SCL mode.
+
+* Wed Feb 22 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-20.fc17
+- Fix libinproctrace.so build on RHEL-5 i386 (disable it on RHEL-5).
+
+* Wed Feb 22 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-19.fc17
+- Implement SCL (scl-utils-build) macros.
+
+* Tue Feb 21 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-18.fc17
+- Fix debuginfo gdb-gdb.py build without redhat-rpm-config and on RHEL-5.
+- Provide precompiled variants of gdb-gdb.py.
+
+* Mon Feb 13 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-17.fc17
+- gstack: Turn off --readnever (suggested by Oliver Henshaw).
+
+* Fri Feb 10 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-16.fc17
+- [RHELs] Drop simulation of legacy behavior - new GDB should behave as new GDB.
+
+* Fri Feb 10 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-15.fc17
+- Simplify %%setup .spec rule.
+
+* Fri Feb 10 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-14.fc17
+- Drop --with upstream .spec rules.
+
+* Fri Feb 10 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-13.fc17
+- Drop --with debug .spec rules.
+
+* Thu Feb  9 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-12.fc17
+- Improve performance for C++ symbols expansion (Tom Tromey, BZ 787487).
+- Install also gdb-gdb.py pretty printers.
+
+* Thu Feb  9 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-11.fc17
+- Fix possible NULL crash in find_charset_names (Tom Tromey, BZ 786091).
+- [ppc*] Fix build failure due to GCC aliasing warning (BZ 786504).
+
+* Sat Jan 21 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-10.fc17
+- Rebase to FSF GDB 7.4.50.20120120.
+- Drop the g77 .spec provisioning as it has been fixed in FSF GDB.
+
+* Thu Jan 19 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120103-9.fc17
+- Enable smaller %%{_bindir}/gdb in future by no longer using -rdynamic.
+- Make --enablerepo to use '*-debug*' for RHEL compatibility (BZ 781571).
+- On older RHELs make readline bundled again (BZ 701131).
+- Fix build compatibility with RHEL-5 due to false noarch build.
+
+* Wed Jan 11 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120103-8.fc17
+- Disable unexpected GDB directories relocatability.
+
+* Wed Jan 11 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120103-7.fc17
+- Fix BuildRequires for RHEL compatibility (BZ 701131).
+
+* Wed Jan 11 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120103-6.fc17
+- Provide %%snap timestamp for: Provides: bundled(librarypackage)
+- Replace %%define by %%global.
+- Replace Java in Summary with Fortran (only GCC-compiled Java is supported).
+- Unbundle readline-6.2 with a workaround of skipped "ask" (BZ 701131).
+- Work around readline-6.2 incompatibility not asking for --more-- (BZ 701131).
+
+* Sat Jan  7 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120103-5.fc17
+- Mark %%{_sysconfdir}/gdbinit as %%config(noreplace).
+- Add appropriate: Provides: bundled(librarypackage).
+- Remove excessive explicit Requires: librarypackage.
+
+* Thu Jan  5 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120103-4.fc17
+- Fix linking on non-x86* (such as s390*) after libgdb.a removal.
+
+* Wed Jan  4 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120103-3.fc17
+- Reinclude gdb-dlopen-stap-probe.patch (missing in Fedora glibc - BZ 752476).
+
+* Tue Jan  3 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120103-2.fc17
+- Fix SystemTap support regression on i686 (Sergio Durigan Junior).
+
+* Tue Jan  3 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120103-1.fc17
+- Rebase to FSF GDB 7.4.50.20120103.
+
+* Mon Nov 28 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.3.50.20110722-11.fc17
+- No longer build bundled libstdc++ pretty printers on RHELs >= 7.
+
+* Sat Nov 5 2011 Sergio Durigan Junior <sergiodj@redhat.com> - 7.3.50.20110722-10.fc16
+- Backport fix for crash in cp_scan_for_anonymous_namespace
+  (Aleksandar Ristovski, BZ 750341).
+
+* Fri Oct 14 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.3.50.20110722-9.fc16
+- Backport `info os processes' crash fix - for Eclipse (Pedro Alves, BZ 746294).
+
+* Tue Oct 11 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.3.50.20110722-8.fc16
+- Fix PIE testsuite run; new lib/future.exp hack and use -fPIC instead of -fPIE.
+
+* Mon Sep 26 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.3.50.20110722-7.fc16
+- [vla] Fix VLA arrays displayed in `bt full' (BZ 738482).
+- Fix DW_OP_GNU_implicit_pointer for DWARF32 v3+ on 64-bit arches.
+- Fix internal error on some optimized-out values.
+
+* Tue Aug 16 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.3.50.20110722-6.fc16
+- Python command/function auto-loading (Phil Muldoon, BZ 730976).
+- Work around PR libc/13097 "linux-vdso.so.1" warning message.
+- [TUI] Fix stepi on stripped code.
+- Add BuildRequires: systemtap-sdt-devel for archer-sergiodj-stap-patch-split.
+
+* Wed Aug 10 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.3.50.20110722-5.fc16
+- Fix dlopen of libpthread.so, patched glibc required (Gary Benson, BZ 669432).
+
+* Tue Aug  9 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.3.50.20110722-4.fc16
+- Improve GDB performance on inferior dlopen calls (Gary Benson, BZ 698001).
+- [python] Fix crash when pretty printer fails (Phil Muldoon, BZ 712715).
+- Fix crash on invalid C++ mangled names (BZ 729283).
+
+* Fri Jul 29 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.3.50.20110722-3.fc16
+- Fix regression from VLA merge affecting -O0 -g watchpoints.
+
+* Fri Jul 29 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.3.50.20110722-2.fc16
+- Include gcc -g3 .debug_macro implementation by Tom Tromey.
+
+* Sat Jul 23 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.3.50.20110722-1.fc16
+- Rebase to FSF GDB 7.3.50.20110722.
+- Improve gcc-4.6 stdarg false prologue end workaround (GDB PR 12435 + GCC PR 47471).
+
+* Sun Jul  3 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.90.20110703-40.fc15
+- Rebase to FSF GDB 7.2.90.20110703 (which is a 7.3 pre-release).
+  - Adjust the `print errno' patch due to the DW_AT_linkage_name following again.
+
+* Fri Jun 24 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.90.20110525-39.fc15
+- Fix install-info for the gdb-doc subpackage (BZ 715228).
+
+* Wed May 25 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.90.20110525-38.fc15
+- Rebase to FSF GDB 7.2.90.20110525 (which is a 7.3 pre-release).
+- [stap] Fix double free (Sergio Durigan Junior).
+
+* Tue May  3 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.90.20110429-37.fc15
+- Search also for .<seqno> files in /usr/lib/debug/.build-id (BZ 641377).
+
+* Mon May  2 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.90.20110429-36.fc15
+- Bundle readline-6.2 with a workaround of skipped "ask" (BZ 701131).
+  - Use --without-system-readline, disable Requires and BuildRequires of readline.
+  - Drop gdb-6.5-readline-long-line-crash.patch and gdb-readline-6.0-signal.patch.
+
+* Fri Apr 29 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.90.20110429-35.fc15
+- Rebase to FSF GDB 7.2.90.20110429 (which is a 7.3 pre-release).
+- Fix -O2 -g breakpoints internal error + prologue skipping (BZ 612253).
+- Fix case insensitive symbols for Fortran by iFort (BZ 645773).
+- Fix physname-related CU expansion issue for C++ (PR 12708).
+- Fix Python access to inlined frames (BZ 694824).
+
+* Mon Apr 11 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.90.20110411-34.fc15
+- Rebase to FSF GDB 7.2.90.20110411 (which is a 7.3 pre-release).
+- Include the proper fix for anonymous struct typedefs (Tom Tromey, BZ 672230).
+
+* Wed Mar 30 2011 Fabio M. Di Nitto <fdinitto@redhat.com> - 7.2.50.20110328-33.fc15
+- Cleanup spec file to add sparc|sparcv9|sparc64.
+- Add sparc specific workarounds to toolchain badness:
+  - disable mmap in bdf/ via --without-mmap configure option.
+  - add patch to not build mmap support on sparc for gdb/.
+  - gdb code is NOT at fault, but we need a working gdb while we sort out
+    the toolchain and rebuild all packages. this workaround is NOT for upstream.
+
+* Tue Mar 29 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.50.20110328-32.fc15
+- Fix occasional crash on `print errno' with no -pthread and no -g3 (BZ 690908).
+
+* Mon Mar 28 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.50.20110328-31.fc15
+- Rebase to FSF GDB 7.2.50.20110328 (which is a 7.3 pre-release).
+- Bundle %%{libstdcxxpython}.tar.bz2 unconditionally - for rebulds on RHELs.
+
+* Sun Mar 20 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.50.20110320-30.fc15
+- Fix threading internal error on corrupted memory (BZ 677654).
+- Fix i386 rwatch+awatch before run (BZ 688788, on top of BZ 541866).
+
+* Sun Mar 20 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.50.20110320-29.fc15
+- Rebase to FSF GDB 7.2.50.20110320 (which is a 7.3 pre-release).
+- Merge archer-sergiodj-stap, the SystemTap probes breakpoints feature.
+  - [stap] Fix -O2 warnings.
+- Fix Ada support crash on uninitialized gdbarch.
+
+* Sat Mar  5 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.50.20110305-28.fc15
+- Rebase to FSF GDB 7.2.50.20110305 (which is a 7.3 pre-release).
+
+* Fri Feb 25 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.50.20110222-27.fc15
+- Include doc also in the PDF form; new BuildRequires: texinfo-tex.
+
+* Wed Feb 23 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.50.20110222-26.fc15
+- Rebase to FSF GDB 7.2.50.20110222 (which is a 7.3 pre-release).
+- Fix attach/core-load of {,un}prelinked i386 libs (bugreport by Michal Toman).
+
+* Mon Feb 21 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.50.20110218-25.fc15
+- Drop %%{_datadir}/gdb/syscalls/* for unsupported arches.
+
+* Fri Feb 18 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.50.20110218-24.fc15
+- Rebase to FSF GDB 7.2.50.20110218 (which is a 7.3 pre-release).
+- [vla] Fox Fortran vector slices for allocated arrays (for BZ 609782).
+
+* Tue Feb 15 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.50.20110213-23.fc15
+- Move the GFDL License to gdb-doc.
+
+* Tue Feb 15 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.50.20110213-22.fc15
+- Fix gdb-doc Group to be Documentation, also provide it as noarch.
+
+* Tue Feb 15 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.50.20110213-21.fc15
+- Drop non-user (gdbint) and obsolete (stabs) documentation.
+- Install also HTML files besides the INFO file.
+- Create new subpackage gdb-doc for both INFO and HTML files.
+
+* Sun Feb 13 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.50.20110213-20.fc15
+- Rebase to FSF GDB 7.2.50.20110213 (which is a 7.3 pre-release).
+- Fix occasionall unfound source lines (affecting at least glibc debugging).
+- Fix const/volatile qualifiers of C++ types (PR c++/12328).
+- Be backward compatible for --rebuild with <=fc14 librpm.so.1.
+
+* Tue Feb 08 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 7.2.50.20110206-19.fc15
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
+
+* Sun Feb  6 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.50.20110206-18.fc15
+- Fix regressions on C++ names resolving (PR 11734, PR 12273, Keith Seitz).
+
+* Sun Feb  6 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.50.20110206-17.fc15
+- Rebase to FSF GDB 7.2.50.20110206 (which is a 7.3 pre-release).
+
+* Thu Jan 27 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.50.20110125-16.fc15
+- Fix Python new-backtrace command (BZ 672235, Phil Muldoon).
+
+* Wed Jan 26 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.50.20110125-15.fc15
+- Temporary fix of F15 gcc-4.6 child DIEs of DW_TAG_typedef (BZ 672230).
+- Workaround gcc-4.6 stdarg false prologue end (GDB PR 12435 + GCC PR 47471).
+
+* Tue Jan 25 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.50.20110125-14.fc15
+- Rebase to FSF GDB 7.2.50.20110125 (which is a 7.3 pre-release).
+- Fix discontiguous address ranges in .gdb_index - v3->v4 (BZ 672281).
+- Fix DWARF-3+ DW_AT_accessibility default assumption for F15 gcc-4.6.
+
+* Thu Jan 20 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.50.20110117-13.fc15
+- Use librpm.so.2 for rpm-4.9.0 in Fedora 15.
+
+* Mon Jan 17 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.50.20110117-12.fc15
+- Use %%{?dist} for sanity checking tools compliance (suggested by Petr Muller).
+
+* Mon Jan 17 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.50.20110117-11.fc15
+- Rebase to FSF GDB 7.2.50.20110117 (which is a 7.3 pre-release).
+- Fix callback-mode readline-6.0 regression for CTRL-C (for RHEL-6.0).
+  - Fix occasional NULL dereference of the readline-6.0 workaround (BZ 575516).
+
+* Sat Jan 15 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.50.20110107-10.fc15
+- [delayed-symfile] Test a backtrace regression on CFIs without DIE (BZ 614604).
+- [archer-tromey-delayed-symfile] New test gdb.dwarf2/dw2-aranges.exp.
+- [archer-keiths-expr-cumulative+upstream] Import C++ testcases.
+  - testsuite: Fix gdb-test-expr-cumulative-archer.patch compatibility.
+
+* Fri Jan  7 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.50.20110107-9.fc15
+- Remove --with-pythondir as no longer valid.
+- Provide %%{_bindir}gdb-add-index even on RHEL-5.
+- Provide again libstdc++ pretty printers for any RHEL.
+
+* Fri Jan  7 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.50.20110107-8.fc15
+- Rebase to FSF GDB 7.2.50.20110107 (which is a 7.3 pre-release).
+- Import archer-tromey-python (BZ 666177, branch update by Phil Muldoon).
+
+* Tue Jan  4 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.50.20110104-7.fc15
+- Rebase to FSF GDB 7.2.50.20110104 (which is a 7.3 pre-release).
+- New testcase py-prettyprint.exp:print hint_error (for BZ 611569, BZ 629236).
+- New test gdb.arch/x86_64-pid0-core.exp for kernel PID 0 cores (BZ 611435).
+
+* Sat Jan  1 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.50.20101231-6.fc15
+- Fix --with-system-readline doc build upstream regression.
+
+* Sat Jan  1 2011 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.50.20101231-5.fc15
+- Rebase to FSF GDB 7.2.50.20101231 (which is a 7.3 pre-release).
+- Remove gdb-6.3-bt-past-zero-20051201.patch, gdb-archer-ada.patch and
+  gdb-6.3-framepczero-20040927.patch already removed from .spec before.
+- Remove gdb-6.5-dwarf-stack-overflow.patch, upstreamed (Tom Tromey).
+- Remove gdb-6.6-bz225783-gdb-debuginfo-paths.patch, upstreamed (Tom Tromey).
+- Remove gdb-6.6-readline-system.patch, reimplemented upstream (Tom Tromey).
+- Remove gdb-bz642879-elfread-sigint-stale.patch, upstreamed (Jan Kratochvil).
+- Remove gdb-next-over-throw.patch, upstreamed (Tom Tromey).
+
+* Mon Dec 27 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.50.20101117-4.fc15
+- Provide stub %%{_sysconfdir}/gdbinit (BZ 651232).
+
+* Mon Dec 27 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.50.20101117-3.fc15
+- Fix ppc* compilation of PRPSINFO in the core files (BZ 662995, for BZ 254229).
+- Fix (disable) non-x86* compilation of libinproctrace.so (for BZ 662995).
+
+* Thu Nov 18 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.50.20101117-2.fc15
+- Drop gdb-6.8-glibc-headers-compat.patch: GNU/Linux irrelevant (Tom Tromey).
+- Drop gdb-6.3-terminal-fix-20050214.patch: The bug is not reproducible.
+- Drop gdb-6.7-kernel-headers-compat.patch: kernel-headers seem to be fixed.
+- Drop gdb-archer-ada.patch: No longer needed for Ada (Keith Seitz).
+- New PR backtrace/12237, drop gdb-6.3-framepczero-20040927.patch
+  gdb-6.3-bt-past-zero-20051201.patch as they already had no effect.
+- Drop gdb-6.8-gcc35998-ada-memory-trash.patch as a different fix is upstream.
+- Drop gdb-6.3-inheritance-20050324.patch: the call is redundent (Tom Tromey).
+- Drop gdb-6.3-large-core-20051206.patch: obsoleted by MAX_COPY_BYTES.
+
+* Thu Nov 18 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.50.20101117-1.fc15
+- Rebase to FSF GDB 7.2.50.20101117 (which is a 7.3 pre-release).
+
+* Sun Nov  7 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2-25.fc14
+- iFort compat. - case insensitive DWARF not in lowercase (BZ 645773).
+
+* Thu Oct 14 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2-24.fc14
+- Add gdb.spec comments on the *.patch files upstream merge status.
+
+* Thu Oct 14 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2-23.fc14
+- Workaround librpm BZ 643031 due to its unexpected exit() calls (BZ 642879).
+- Fix crash on CTRL-C while reading an ELF symbol file (BZ 642879).
+
+* Tue Oct 12 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2-22.fc14
+- testsuite: Provide missing lib/gdb-python.exp (for BZ 639089).
+
+* Tue Oct 12 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2-21.fc14
+- Fix python stale error state, also fix its save/restore (BZ 639089).
+- Fix inferior exec of new PIE x86_64 (BZ 638979).
+
+* Tue Oct 12 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2-20.fc14
+- Fixup Release for 20.fc14.
+
+* Tue Oct 12 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2-19.fc14
+- Use .gdb_index v3 to fix excessive resources rqmnts (BZ 640634, Tom Tromey).
+
+* Wed Oct  6 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2-18.fc14
+- Fix false warning: non-absolute filename: <the main exec. file> (BZ 640648).
+
+* Thu Sep 30 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2-17.fc14
+- New Conflicts: elfutils < 0.149 due to the .gdb_index .debug support.
+
+* Wed Sep 29 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2-16.fc14
+- [ifunc] Fix crash on deleting watchpoint of an autovariable (BZ 637770).
+
+* Mon Sep 27 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2-15.fc14
+- Revert the -O0 switch formerly to workaround GCC BZ 634757 (cmove bug).
+- Remove no longer used BuildRequires: libstdc++.
+- Remove commented out python libstdc++ .spec code.
+
+* Sat Sep 25 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2-14.fc14
+- Fixup %%{_datadir}/gdb/python/gdb timestamps for multilib conflicts.
+
+* Sat Sep 25 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2-13.fc14
+- Fix .gdb_index for big-endian hosts (Tom Tromey).
+
+* Sat Sep 25 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2-12.fc14
+- Fix lost siginfo_t in linux-nat (BZ 592031).
+
+* Sat Sep 25 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2-11.fc14
+- Fix infinite loop crash on self-referencing class (BZ 627432).
+
+* Thu Sep 23 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2-10.fc14
+- gcore/-Wl,-z,relro: Always write out all the pages until kernel gets a fix.
+
+* Wed Sep 22 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2-9.fc14
+- Fix gcore writer for -Wl,-z,relro (PR corefiles/11804).
+
+* Wed Sep 22 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2-8.fc14
+- Enable python by default even in Brew and on all the arches (BZ 609157).
+
+* Wed Sep 22 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2-7.fc14
+- python: load *-gdb.py for shlibs during attach (BZ 634660).
+- Fix double free crash during overload resolution (PR 12028, Sami Wagiaalla).
+
+* Sat Sep 18 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2-6.fc14
+- Fix python gdb.solib_address (BZ 634108, fix by Phil Muldoon).
+- Temporarily build with -O0 to workaround GCC BZ 634757 (cmove bug).
+
+* Tue Sep 14 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2-5.fc14
+- Fix Ada regression when any .gdb_index library is present.
+
+* Sat Sep 11 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2-4.fc14
+- Fix symbol lookup misses methods of current class (BZ 631158, Sami Wagiaalla).
+- Fix python gdb.execute-to_string redirection (BZ 627506, with Paul Bolle).
+
+* Wed Sep  8 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2-3.fc14
+- Do not crash on broken separate debuginfo due to old elfutils (BZ 631575).
+
+* Sat Sep 04 2010 Dennis Gilmore <dennis@ausil.us> - 7.2-2.fc14
+- libinproctrace doesnt exist on sparc arches
+
+* Fri Sep  3 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2-1.fc14
+- Formal update to the final FSF GDB release.
+
+* Tue Aug 24 2010 Dan Horák <dan[at]danny.cz> - 7.1.90.20100806-12.fc14
+- libinproctrace doesn't exist on s390(x)
+
+* Thu Aug 19 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1.90.20100806-11.fc14
+- Fix crash on MI variable calling inferior function (BZ 610986).
+
+* Tue Aug 10 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1.90.20100806-10.fc14
+- Fix /usr/bin/gdb-add-index missing -nx for gdb.
+- New option --with profile (disabled by default - missing workload, BZ 615603).
+
+* Sat Aug  7 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1.90.20100806-9.fc14
+- Fix python gdb.execute to_string pagination (BZ 620930).
+
+* Fri Aug  6 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1.90.20100806-8.fc14
+- Out of memory is just an error, not fatal (uninitialized VLS vars, BZ 568248).
+
+* Fri Aug  6 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1.90.20100806-7.fc14
+- Fix gcore from very small terminal windows (BZ 555076).
+- Fix false `filesystem' debuginfo rpm request (BZ 599598).
+
+* Wed Jul 28 2010 Mamoru Tasaka <mtasaka@ioa.s.u-tokyo.ac.jp> - 7.1.90.20100721-6.fc14
+- Rebuild against python 2.7
+
+* Thu Jul 22 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1.90.20100721-5.fc14
+- Fix /usr/bin/gdb-add-index $d -> $dir typo.
+
+* Thu Jul 22 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1.90.20100721-4.fc14
+- Import archer-tromey-python.
+- Import archer-tromey-optional-psymtab (as present in FSF GDB post-7.2).
+  - Provide /usr/bin/gdb-add-index for rpm-build (Tom Tromey).
+
+* Thu Jul 22 2010 David Malcolm <dmalcolm@redhat.com> - 7.1.90.20100721-3.fc14
+- Rebuilt for https://fedoraproject.org/wiki/Features/Python_2.7/MassRebuild
+
+* Wed Jul 21 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1.90.20100721-2.fc14
+- Fix prelinked executables with sepdebug and copy relocations (BZ 614659).
+
+* Wed Jul 21 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1.90.20100721-1.fc14
+- Rebase to FSF GDB 7.1.90.20100721 (which is 7.2 pre-release).
+
+* Tue Jul 13 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1-29.fc14
+- Disable temporarily Python files before the new rebase is done (BZ 613710).
+
+* Sun Jul 11 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1-28.fc14
+- Rebuild for Fedora 14.
+
+* Wed Jun 30 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1-28.fc13
+- Print 2D C++ vectors as matrices (BZ 562763, sourceware10659, Chris Moller).
+
+* Wed Jun 30 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1-27.fc13
+- Fix obstack corruptions on C++ (BZ 606185, Chris Moller, Jan Kratochvil).
+- Improve support for typedefs in classes (BZ 602314).
+- Fix `set print object on' for some non-dynamic classes (BZ 606660).
+
+* Wed Jun  9 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1-26.fc13
+- Backport DWARF-4 support (BZ 601887, Tom Tromey).
+
+* Wed Jun  9 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1-25.fc13
+- Fix ADL anonymous type crash (BZ 600746, Sami Wagiaalla).
+
+* Tue Jun  1 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1-24.fc13
+- Fix crash on /proc/PID/stat race during inferior exit (BZ 596751).
+- testsuite: gdb.threads/watchthreads-reorder.exp kernel-2.6.33 compat. fix.
+
+* Sun May 30 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1-23.fc13
+- Fix and support DW_OP_*piece (Tom Tromey, BZ 589467).
+- Fix follow-exec for C++ programs (bugreported by Martin Stransky).
+
+* Mon May 24 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1-22.fc13
+- Remove core file when starting a process (BZ 594560).
+- Fix lock up on loops in the solib chain (BZ 593926).
+- Import fix of TUI layout internal error (BZ 595475).
+
+* Sun May 16 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1-21.fc13
+- Make gdb-6.8-bz254229-gcore-prpsinfo.patch RHEL-5 /usr/bin/patch compatible
+  (bugreported by Jonas Maebe).
+
+* Thu May 13 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1-20.fc13
+- Fix crash on VLA bound referencing an optimized-out variable (BZ 591879).
+- Re-enable the BZ 575292 and BZ 585445 C++ fix using an updated patch.
+
+* Wed May 12 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1-19.fc13
+- Backport <tab>-completion bug on anonymous structure fields (BZ 590648).
+- testsuite: Fix gdb.base/vla-overflow.exp FAILing on s390x (BZ 590635).
+- Workaround non-stop moribund locations exploited by kernel utrace (BZ 590623).
+
+* Thu Apr 29 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1-18.fc13
+- Make _Unwind_DebugHook independent from step-resume breakpoint (Tom Tromey).
+
+* Tue Apr 27 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1-17.fc13
+- Fail gracefully if the _Unwind_DebugHook arg. is optimized out (Tom Tromey).
+
+* Tue Apr 27 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1-16.fc13
+- Temporarily workaround the crash of BZ 575292 as there was now BZ 585445.
+
+* Mon Apr 26 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1-15.fc13
+- Fix crash when using GNU IFUNC call from breakpoint condition.
+- Avoid internal error by disabling the previous BZ 575292 fix (BZ 585445).
+
+* Thu Apr 22 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1-14.fc13
+- Fix crash on C++ types in some debug info files (BZ 575292, Keith Seitz).
+- Pretty printers not well documented (BZ 570635, Tom Tromey, Jan Kratochvil).
+
+* Fri Apr 16 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1-13.fc13
+- archer-jankratochvil-fedora13 commit: 39998c496988faaa1509cc6ab76b5c4777659bf4
+- [vla] Fix boundaries for arrays on -O2 -g (support bound-ref->var->loclist).
+- [vla] Fix copy_type_recursive for unavailable variables (Joost van der Sluis).
+
+* Sun Apr 11 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1-12.fc13
+- Fix crash on trying to load invalid executable (BZ 581215).
+
+* Thu Apr  8 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1-11.fc13
+- testsuite: Fix gdb.base/gstack.exp also for ppc64 inferiors (for BZ 579793).
+
+* Thu Apr  8 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1-10.fc13
+- Fix s390 --with testsuite Buildrequiers to be (s390-32) (BZ 580347, Cai Qian).
+
+* Wed Apr  7 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1-9.fc13
+- Fix gstack to print even the frame #0.  New gdb.base/gstack.exp.  (BZ 579793)
+- Merge gdb-6.3-gstack-without-path-20060414.p* into gdb-6.3-gstack-20050411.p*,
+  no real code change.
+
+* Mon Apr  5 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1-8.fc13
+- Fix breakpoint at *_start (BZ 162775, bugreport by John Reiser).
+
+* Sat Apr  3 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1-7.fc13
+- Fix ppc build of the AVX registers support (for BZ 578250).
+
+* Sat Apr  3 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1-6.fc13
+- Support AVX registers (BZ 578250).
+
+* Sat Apr  3 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1-5.fc13
+- Fix dangling displays in separate debuginfo (BZ 574483).
+
+* Wed Mar 31 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1-4.fc13
+- Remove gdb-readline-6.0-signal.patch with a bug causing crash while no longer
+  required with F-13 readline-6.1 (BZ 575516)
+
+* Mon Mar 29 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1-3.fc13
+- [expr-cumulative] using-directive: Fix memory leak (Sami Wagiaalla).
+
+* Mon Mar 29 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1-2.fc13
+- Drop obsoleted `gdb-archer-pie-0315-breakpoint_address_match.patch'.
+- Do not consider memory error on reading _r_debug->r_map as fatal (BZ 576742).
+  - PIE: Attach binary even after re-prelinked underneath.
+  - PIE: Attach binary even after ld.so re-prelinked underneath.
+  - PIE: Fix occasional error attaching i686 binary (BZ 576742).
+- testsuite: Fix unstable results of gdb.base/prelink.exp.
+
+* Thu Mar 25 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.1-1.fc13
+- Update to new FSF GDB release.
+
+* Mon Mar 15 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.90.20100312-24.fc13
+- Drop gdb-6.5-bz218379-ppc-solib-trampoline-fix.patch having false symbols
+  resolving (related to BZ 573277).
+
+* Fri Mar 12 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.90.20100312-23.fc13
+- Update to new FSF GDB snapshot.
+- Fix double-free on std::terminate handler (Tom Tromey, BZ 562975).
+
+* Wed Mar 10 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.90.20100306-22.fc13
+- Another License update.
+
+* Wed Mar 10 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.90.20100306-21.fc13
+- Update License for all the licenses contained in .src.rpm.
+
+* Mon Mar  8 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.90.20100306-20.fc13
+- Remove unapplied: gdb-6.8-inlining-addon.patch gdb-6.8-inlining-by-name.patch
+
+* Mon Mar  8 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.90.20100306-19.fc13
+- Include also %%doc COPYING3 (review by Petr Machata).
+- Remove URL for Source (review by Matej Cepl).
+
+* Sun Mar  7 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.90.20100306-18.fc13
+- archer-jankratochvil-fedora13 commit: 59c35a31f0981a0f0b884b32c91ae6325b2126cd
+
+* Sun Feb 28 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.50.20100203-17.fc13
+- Fix false warning: section .gnu.liblist not found in ...
+- Fix crash on stale addrinfo->sectindex (more sensitive due to the PIE patch).
+
+* Fri Feb 26 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.50.20100203-16.fc13
+- Fix ia64 part of the bt-clone-stop.exp fix.
+- Fix gdb.ada/* regressions (Keith Seitz).
+- Remove false gdb_assert on $sp underflow.
+
+* Mon Feb  8 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.50.20100203-15.fc13
+- Fix i386+x86_64 rwatch+awatch before run, regression against 6.8 (BZ 541866).
+
+* Wed Feb  3 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.50.20100203-14.fc13
+- Rediff gdb-6.8-bz254229-gcore-prpsinfo.patch for older patch(1) compatibility.
+
+* Wed Feb  3 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.50.20100203-13.fc13
+- archer-jankratochvil-fedora13 commit: 59c35a31f0981a0f0b884b32c91ae6325b2126cd
+- Fortran: Fix regression on setting breakpoint at toplevel symbols (BZ 559291;
+  David Moore, Intel).
+
+* Mon Feb  1 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.50.20100128-12.fc13
+- archer-jankratochvil-fedora13 commit: 5a573e8b26a2f0a6947d4c0249e43e5456610860
+- Remove ExcludeArch on ia64 as it is now fixed up.
+
+* Sun Jan 31 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.50.20100128-11.fc13
+- Fix failed gdb_assert due to the PIE patchset (BZ 559414).
+
+* Thu Jan 28 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.50.20100128-10.fc13
+- Upgrade to the FSF GDB snapshot: 7.0.50.20100128
+- archer-jankratochvil-fedora13 commit: 39c5a8b75fad3acd7204903db5dee025055a4594
+  - Fix a regression on "AAA::ALPHA" test due to a merge from FSF GDB.
+- Fix a regression of previous release due to false identification as core file.
+- Move ifunc .patch into the GIT-managed archer-jankratochvil-fedora13 branch.
+- Update gdb.pie/corefile.exp from 2007-01-26 FSF GDB commit by Andreas Schwab.
+
+* Mon Jan 25 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.50.20100121-9.fc13
+- Enable loading a core file just as a single argument to /usr/bin/gdb.
+
+* Sun Jan 24 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.50.20100121-8.fc13
+- testsuite: Fix gdb.arch/i386-bp_permanent.exp regression
+
+* Sun Jan 24 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.50.20100121-7.fc13
+- Update gdb.arch/powerpc-power7.exp for current binutils HEAD.
+
+* Fri Jan 22 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.50.20100121-6.fc13
+- Disable addon (finish) due to inline-cmds.exp: up from outer_inline2 assert.
+- Fix gdb.arch/powerpc-power7.exp compatibility.
+
+* Fri Jan 22 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.50.20100121-5.fc13
+- Disable break-by-name on inlined functions due to a regression on parameters
+  of inlined functions falsely <optimized out> (BZ 556975 Comment 8).
+
+* Fri Jan 22 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.50.20100121-4.fc13
+- Adjust BuildRequires for RHELs, add ExcludeArch on ia64.
+- Disable one PIE-introduced assertion on RHELs.
+
+* Thu Jan 21 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.50.20100121-3.fc13
+- Revert FSF GDB gdbserver tracepoints as incomplete now.
+
+* Thu Jan 21 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.50.20100121-2.fc13
+- archer-jankratochvil-fedora13 commit: 21e418c04290aa5d2e75543d31fe3fe5d70d6d41
+- [expr-cumulative] Fix "break expr if (cond)" regression.
+
+* Thu Jan 21 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.50.20100121-1.fc13
+- Upgrade to the FSF GDB snapshot: 7.0.50.20100121
+- archer-jankratochvil-fedora13 commit: ccde1530479cc966374351038057b9dda90aa251
+- [expr-cumulative] Archer branch is now included.
+
+* Tue Jan 19 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.50.20100118-2.fc13
+- Fix false PASS->FAIL of gdb.arch/i386-biarch-core.exp.
+
+* Tue Jan 19 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.50.20100118-1.fc13
+- Upgrade to the FSF GDB snapshot: 7.0.50.20100118
+- Upgrade libstdc++-v3-python to r155978 (Phil Muldoon).
+
+* Sat Jan 16 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.50.20100116-1.fc13
+- Upgrade to the FSF GDB snapshot: 7.0.50.20100116
+- archer-jankratochvil-fedora13 commit: 81810a20b2d2c3bf18e151de3cddfc96445b3c46
+- [expr-cumulative] Archer branch is missing in this release.
+- Update rpm.org#76 workaround for rpm-4.8 using librpm.so.1.
+- Dissect archer-jankratochvil-misc into Patch403...Patch408.
+- Some regressions exist in this release.
+
+* Tue Jan 12 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.1-25.fc12
+- non-librpm missing debuginfo yumcommand now prints also --disablerepo='*'
+  to save some bandwidth by yum (Robin Green, BZ 554152).
+
+* Sun Jan 10 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.1-24.fc12
+- testsuite: BuildRequires also valgrind.
+
+* Fri Jan  8 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.1-23.fc12
+- Workaround missing libstdc++%%{bits_other} in Koji.
+
+* Fri Jan  8 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.1-22.fc12
+- Comply with new package review:
+  - Fix .spec Source as this is not a snapshot now.
+  - Convert all spaces to tabs.
+  - Fix missing %%defattr at %%files for gdbserver.
+  - Replace all hardcoded-library-path by variants of %%{_isa}.
+- Include %%{_isa} for appropriate Requires and BuildRequires.
+
+* Thu Jan  7 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.1-21.fc12
+- [vla] Fix regression on fields of structs in internal vars (BZ 553338).
+- archer-jankratochvil-fedora12 commit: 6e73988f653ba986e8742f208f17ec084292cbd5
+
+* Thu Jan  7 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.1-20.fc12
+- Fix crash reading broken stabs (it377671).
+
+* Sun Jan  3 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.1-19.fc12
+- testsuite: Fixup false FAILs for gdb.cp/constructortest.exp.
+
+* Sat Jan  2 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.1-18.fc12
+- Fix regression of gdb-7.0 (from 6.8) crashing on typedefed bitfields.
+- Fix related_breakpoint stale ref crash.
+
+* Fri Jan  1 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0.1-17.fc12
+- Formal upgrade to the FSF GDB release gdb-7.0.1.
+  - Fix regression of gdb-7.0.1 not preserving typedef of a field.
+
+* Fri Jan  1 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0-16.fc12
+- More RHEL-5 compatibility updates.
+  - Disable the build-id support by default.
+  - Bundle back gdbserver to the base gdb package.
+  - Remove bundled pstack.
+  - Drop the BuildRequires of rpm-devel.
+
+* Fri Jan  1 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0-15.fc12
+- Fix error on a sw watchpoint active at function epilogue (hit on s390x).
+- testsuite: Fix false MI "unknown output after running" regression.
+- testsuite: Update ia64-sigtramp.exp for recent GDB.
+- Implement bt-clone-stop.exp fix also for ia64.
+- testsuite: Upstream condbreak.exp results stability fix (Daniel Jacobowitz).
+
+* Thu Dec 24 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0-14.fc12
+- testsuite: Fix constructortest.exp and expand-sals.exp for gcc-4.4.2-20.fc12.
+
+* Mon Dec 21 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0-13.fc12
+- [pie] Fix a race in testcase gdb.base/valgrind-db-attach.exp.
+- Fix regression by python on ia64 due to stale current frame.
+- Disable python iff RHEL-5 && (Brew || ppc64).
+
+* Mon Dec 21 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0-12.fc12
+- Workaround build on native ppc64 host.
+- More RHEL-5 compatibility updates.
+  - Disable warning messages new for gdb-6.8+ for RHEL-5 backward compatibility.
+  - Workaround RHEL-5 kernels for detaching SIGSTOPped processes (BZ 498595).
+  - Serialize the testsuite output to keep the order for regression checks.
+  - Re-enable python for all non-ppc* arches.
+  - More gcc44 stack exceptions when running the testsuite on RHEL-5.
+- Fix backward compatibility with G++ 4.1 namespaces "::".
+- Fix regression on re-setting the single ppc watchpoint slot.
+- Update snapshot of FSF gdb-7.0.x branch.
+  - Backport fix of dcache invalidation locking up GDB on ppc64 targets.
+
+* Fri Dec 18 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0-11.fc12
+- [pie] Fix general ppc64 regression due to a function descriptors bug.
+- [pie] Fix also keeping breakpoints disabled in PIE mode.
+- Import upstream <tab>-completion crash fix.
+- Drop some unused patches from the repository.
+- More RHEL-5 build compatibility updates.
+  - Use gfortran44 when running the testsuite on RHEL-5.
+  - Disable python there due to insufficient ppc multilib.
+- Fix orphanripper hangs and thus enable it again.
+
+* Mon Dec 14 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0-10.fc12
+- Make gdb-6.3-rh-testversion-20041202.patch to accept both RHEL and Fedora GDB.
+- Adjust BuildRequires for Fedora-12, RHEL-6 and RHEL-5 builds.
+- [vla] Fix compatibility of dynamic arrays with iFort (BZ 514287).
+- Fix stepping through OMP parallel Fortran sections (BZ 533176).
+- New fix of bp conditionals [bp_location-accel] regression (BZ 538626).
+
+* Mon Dec  7 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0-9.fc12
+- Replace the PIE (Position Indepdent Executable) support patch by a new one.
+- Drop gdb-6.3-nonthreaded-wp-20050117.patch as fuzzy + redundant.
+- Fix callback-mode readline-6.0 regression for CTRL-C.
+- Fix syscall restarts for amd64->i386 biarch.
+- Various testsuite results stability fixes.
+- Fix crash on reading stabs on 64bit (BZ 537837).
+- archer-jankratochvil-fedora12 commit: 16276c1aad1366b92e687c72cab30192280e1906
+- archer-jankratochvil-pie-fedora12 ct: 2ae60b5156d43aabfe5757940eaf7b4370fb05d2
+
+* Thu Dec  3 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0-8.fc12
+- Fix slowness/hang when printing some variables (Sami Wagiaalla, BZ 541093).
+- archer-jankratochvil-fedora12 commit: 6817a81cd411acc9579f04dcc105e9bce72859ff
+
+* Wed Nov 25 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0-7.fc12
+- Support GNU IFUNCs - indirect functions (BZ 539590).
+- Fix bp conditionals [bp_location-accel] regression (Phil Muldoon, BZ 538626).
+- Fix missed breakpoint location [bp_location-accel] regression (upstream).
+
+* Fri Oct 30 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0-6
+- Fix missing zlib-devel BuildRequires to support compressed DWARF sections.
+- Include post-7.0 FSF GDB fixes.
+
+* Fri Oct 23 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0-5
+- Make the package buildable on RHEL-5/CentOS-5 (without librpm there).
+- archer-jankratochvil-fedora12 commit: 5b73ea6a0f74e63db3b504792fc1d37f548bdf5c
+
+* Fri Oct 23 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0-4
+- Fix rpm --excludedocs (BZ 515998).
+
+* Thu Oct 22 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0-3
+- Support multiple directories for `set debug-file-directory' (BZ 528668).
+
+* Mon Oct 19 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0-2
+- Sync the .spec with RHEL/CentOS without EPEL, do not BuildRequires: fpc there.
+
+* Wed Oct  7 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.0-1
+- Formal upgrade to the final FSF GDB release gdb-7.0.
+- Fix GNU/Linux core open: Can't read pathname for load map: Input/output error.
+- archer-jankratochvil-fedora12 commit: ce4ead356654b951a49ca78d81ebfff95e758bf5
+
+* Wed Sep 30 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.91.20090930-2
+- Bump release.
+
+* Wed Sep 30 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.91.20090930-1
+- Fix broken python "help()" command "modules" (BZ 526552).
+- Upgrade to the FSF GDB gdb-7.0 snapshot: 6.8.91.20090930
+- archer-jankratochvil-fedora12 commit: 7cb860f03e2437c97239334ebe240d06f45723e0
+
+* Sun Sep 27 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.91.20090925-3
+- New test for step-resume breakpoint placed in multiple threads at once.
+
+* Fri Sep 25 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.91.20090925-2
+- Fix buildid-loading libs w/matching name but different build-id (BZ 524572).
+
+* Fri Sep 25 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.91.20090925-1
+- Upgrade to the FSF GDB gdb-7.0 snapshot: 6.8.91.20090925
+- archer-jankratochvil-fedora12 commit: 4338ea85c798007c32594032f602db9fd230eba9
+  - [python] Don't directly reference self.frame (Tom Tromey).
+  - [expr] Updates from branch (Keith Seitz).
+
+* Mon Sep 21 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.91.20090921-1
+- Upgrade to the FSF GDB gdb-7.0 snapshot: 6.8.91.20090921
+- archer-jankratochvil-fedora12 commit: 0d5c38dd89050c0ee1cf049656f177c170d675d4
+  - [expr] Check has_stack_frames before calling find_pc_line (Sami Wagiaalla).
+
+* Thu Sep 17 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.91.20090917-2
+- Include bundled libstdc++ python; it will be in libstdc++-devel since gcc-4.5.
+
+* Thu Sep 17 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.91.20090917-1
+- Upgrade to the FSF GDB gdb-7.0 branch and snapshot: 6.8.91.20090917
+- archer-jankratochvil-fedora12 commit: 16f3f01cc2cbc15283462eaabdfcde92cf42cdc6
+- Drop the qsort_cmp workaround as resolved in FSF GDB now (BZ 515434).
+
+* Thu Sep 10 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090910-1
+- Upgrade to the FSF GDB gdb-6.8.50 snapshot: 6.8.50.20090910
+- archer-jankratochvil-fedora12 commit: 941eb487a42933e442cb4d11344cda96ecb8a04d
+  - [next-over-throw] Fix exceptions thrown during next (Tom Tromey).
+  - [bp_location-accel] Do not (much) slow down on 500+ breakpoints (me).
+
+* Thu Sep  3 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090818-8
+- archer-jankratochvil-fedora12 commit: a081d2f12945e9468edd5f4341d3e945bd0fefe9
+  - [expr] Fix too slow lookups in large C++ programs (Sami Wagiaalla).
+  - [python] Fix varobj changed values reporting (GDB PR 10584, Tom Tromey).
+
+* Tue Sep  1 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090818-7
+- archer-jankratochvil-fedora12 commit: d25596676e8811b03f8c9aba6bbd04ebaa9ff5db
+  - [call-frame-cfa] Fix parsing CFA-relative frames (BZ 516627, Tom Tromey).
+  - [vla] variable length Fortran strings for -O -g code (part of BZ 508406, me).
+  - [python] varobj + general fixes (Tom Tromey).
+
+* Fri Aug 28 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090818-6
+- Real upstream fixup of qsort_cmp (BZ 515434).
+- Revert bitfields regression (BZ 520129).
+
+* Tue Aug 25 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090818-5
+- Temporarily disable assertion checks crashing in qsort_cmp (BZ 515434).
+
+* Wed Aug 19 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090818-4
+- Fixup "bad type" internal error, import from FSF GDB.
+- archer-jankratochvil-fedora12 commit: 2ba2bc451eb832182ef84c3934115de7a329da7c
+
+* Tue Aug 18 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090818-3
+- archer-jankratochvil-fedora12 commit: 850e3cb38a25cb7fdfa4cef667626ffbde51bcac
+- Fix the hardware watchpoints.
+
+* Tue Aug 18 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090818-2
+- Fix patch fuzz 0.
+
+* Tue Aug 18 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090818-1
+- Upgrade to the FSF GDB gdb-6.8.50 snapshot: 6.8.50.20090818
+- archer-jankratochvil-fedora12 commit: 5e0d1cc74f119391a2c3ae25ef5749fc28674f06
+
+* Wed Aug 12 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090811-4
+- Fix minor regressions introduced by the rebase from F-11 (6.8.50.20090302).
+
+* Tue Aug 11 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090811-3
+- archer-jankratochvil-fedora12 commit: 2888fafe63889757c6fd27ccc2f25661d43fd1a4
+- Drop archer-jankratochvil-vla VAROBJ invalidate/revalidate split to fix
+  regressions against FSF GDB HEAD.
+
+* Tue Aug 11 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090811-2
+- archer-jankratochvil-fedora12 commit: 93f5e942bdcdcc376ece452c309bedabae71def9
+- Fix "can't compute CFA for this frame" (by Tom Tromey, BZ 516627).
+
+* Tue Aug 11 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090811-1
+- Support constant DW_AT_data_member_location by GCC PR debug/40659 (BZ 515377).
+- Fix .spec URL.
+- archer-jankratochvil-fedora12 commit: 81de3c6abae4f7e3738aa9bcc0ab2f8725cce252
+
+* Mon Aug 10 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090810-2
+- Upgrade to the FSF GDB gdb-6.8.50 snapshot: 6.8.50.20090810
+- archer-jankratochvil-fedora12 commit: 93ec16e6f5000dd64d433d86674e820ed0f35b72
+
+* Tue Aug  4 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090803-2
+- Drop the bundled libstdc++ python - it should be packaged on its own now.
+
+* Tue Aug  4 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090803-1
+- Upgrade to the FSF GDB gdb-6.8.50 snapshot: 6.8.50.20090803
+- archer-jankratochvil-fedora12 commit: 0222cb1f4ddd1eda32965e464cb60b1e44e110b2
+
+* Fri Jul 31 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-42
+- Release bump only.
+
+* Fri Jul 31 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-41
+- Fix compatibility of --with-system-readline and readline-6.0+.
+- Temporarily disabled orphanripper on Fedora 12.
+
+* Fri Jul 24 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 6.8.50.20090302-40
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild
+
+* Mon Jul  6 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-39
+- testsuite: Fix multiple runs in parallel on a single host.
+- testsuite: Remove the rpmbuild option: --with parallel
+- testsuite: Run the testsuite with default rpm _smp_mflags.
+
+* Mon Jul  6 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-38
+- Archer update to the snapshot: 17bfc0488f54aeeb7a9e20ef3caa7e31e8e985fb
+- Archer backport: de9c5190034b84b0a5fb4b98b05b304cda187700
+  - [vla] Fix a crash regression on constant DW_AT_data_member_location.
+
+* Mon Jun 29 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-37
+- Replace the fix of cloned-TIDs with no pthread from upstream (BZ 471819).
+- Fix a parallel testsuite runs incompatibility in gdb.base/gcore-shmid0.exp.
+
+* Mon Jun 29 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-36
+- Fix GDB crash on cloned-TIDs with no associated pthread (BZ 471819).
+- Workaround rpm.org#76 rpm-devel requirement for debuginfo names (BZ 508193).
+
+* Mon Jun 22 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-35
+- Accelerate sorting blocks on reading a file (found on WebKit) (BZ 507267).
+
+* Mon Jun 22 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-34
+- Fix backtraces from core files with the executable found+loaded via build-id.
+  - Due to F-11 GCC no longer needlessly duplicating .eh_frame as .debug_frame.
+
+* Tue Jun 16 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-33
+- Archer update to the snapshot: 05c402a02716177c4ddd272a6e312cbd2908ed68
+- Archer backport: 05c402a02716177c4ddd272a6e312cbd2908ed68
+  - Remove the [archer-pmuldoon-exception-rewind-master] branch.
+  - Include this functionality as a FSF GDB accepted patchset.
+
+* Mon Jun 15 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-32
+- Fix crash on pending breakpoints with PIE (position-indep.-exec.) (BZ 505943).
+
+* Fri Jun 12 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-31
+- Fix an occasional crash during printing of missing debuginfo rpms (BZ 505401).
+
+* Fri Jun 12 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-30
+- Implement DW_OP_call_frame_cfa (for recent GCC).
+
+* Thu Jun 11 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-29
+- Archer update to the snapshot: 30c13da4efe18f43ee34aa4b29bc86e1a53de548
+- Archer backport: 30c13da4efe18f43ee34aa4b29bc86e1a53de548
+  - Fix dereferencing unbound C arrays (BZ 505163).
+
+* Wed Jun 10 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-28
+- Archer update to the snapshot: 000db8b7bfef8581ef099ccca8689cfddfea1be8
+- Archer backport: b8d3bea36b137effc929e02c4dadf73716cb330b
+  - Ignore explicit die representing global scope '::' (gcc 4.1 bug).
+- Archer backport: c2d5c4a39b10994d86d8f2f90dfed769e8f216f3
+  - Fix parsing DW_AT_const_value using DW_FORM_string
+- Archer backport: 8d9ab68fc0955c9de6320bec2821a21e3244600d
+		 + db41e11ae0a3aec7120ad6ce86450d838af74dd6
+  - Fix Fortran modules/namespaces parsing (but no change was visible in F11).
+- Archer backport: 000db8b7bfef8581ef099ccca8689cfddfea1be8
+  - Fix "some Python error when displaying some C++ objects" (BZ 504356).
+- testsuite: Support new rpmbuild option: --with parallel
+- testsuite: gdb-orphanripper.c: Fix uninitialized `termios.c_line'.
+- Fix crashes due to (missing) varobj revalidation, for VLA (for BZ 377541).
+- Archer backport: 58dcda94ac5d6398f47382505e9d3d9d866d79bf
+		 + f3de7bbd655337fe6705aeaafcc970deff3dd5d5
+  - Implement Fortran modules namespaces (BZ 466118).
+- Fix crash in the charset support.
+
+* Thu Apr 30 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-27
+- Fix race in the ia64 testcase `gdb-6.3-rh-testlibunwind-20041202.patch'.
+
+* Mon Apr 27 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-26
+- Support a new rpmbuild option: --without python
+
+* Mon Apr 27 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-25
+- The Koji build failures may have been by forgotten check-in of the Patch360.
+
+* Mon Apr 27 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-24
+- Another new Koji build fix attempt now by: BuildPreReq: python
+
+* Mon Apr 27 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-23
+- Fix BuildRequires for new Koji.
+
+* Mon Apr 27 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-22
+- Fix pstack/gstack cutting very long lines (BZ 497849).
+
+* Sun Apr 19 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-21
+- New test for parsing elf64-i386 files for kdump PAE vmcore dumps (BZ 457187).
+
+* Thu Apr 16 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-20
+- Fix crash in the charset support.
+
+* Wed Apr 15 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-19
+- Fix crash on pretty-printer reading uninitialized std::string (BZ 495781).
+
+* Mon Apr 13 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-18
+- Archer update to the snapshot: d1fee5066408a09423621d1ebc64e6d3e248ed08
+- Archer backport: 4854339f75bdaf4b228fc35579bddbb2a1fecdc1
+  - Fix Python FrameIterator.
+
+* Mon Apr 13 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-17
+- Archer update to the snapshot: 7c250ce99c90cf6097e2ec55ea0f205830979cee
+- Archer backport: c14d9ab7eef43281b2052c885f89d2db96fb5f8e
+  - Revert a change regressing: gdb.objc/basicclass.exp
+- Archer backport: ebd649b96e61a1fb481801b65d827bca998c6633
+		 + 1f080e897996d60ab7fde20423e2947512115667
+		 + 1948198702b51b31d79793fc49434b529b4e245f
+		 + e107fb9687bb1e7f74170aa3d19c4a8f6edbb10f
+		 + 1e012c996e121cb35053d239a46bd5dc65b0ce60
+  - Update the Python API from upstream.
+- Archer backport: d3c83ad5ec9f7672b87af9ad29279f459e53da11
+  - Fix a Python branch crash.
+
+* Mon Apr 13 2009 Dennis Gilmore <dennis@ausil.us> - 6.8.50.20090302-16
+- enable gdbserver package on sparc64
+
+* Sun Apr  5 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-15
+- Archer update to the snapshot: 7c7c77576669d17ad5072daa47ea3a4fd954483d
+- Archer backport: 7c7c77576669d17ad5072daa47ea3a4fd954483d (Peter Bergner)
+  - Disassemble Power7 instructions right in the default/only -Many GDB mode.
+
+* Sun Apr  5 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-14
+- Archer update to the snapshot: f6273d446ff87e50976600ba3f71b88d61043e20
+- Archer backport: f6273d446ff87e50976600ba3f71b88d61043e20
+  - Use pretty-printers to print base classes inside a derived class.
+
+* Mon Mar 30 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-13
+- Archer update to the snapshot: d144a3633454046aaeae3e2c369c271834431d36
+- Archer backport: a2c49b7640ebe7ce1376902d48d5bbbee600996b
+  - Fixup compilation older GCCs.
+- Archer backport: fe48224ce1bd22f37a7fa6d111d54c1a340392bf
+  - KFAIL 4 cases of: gdb.arch/powerpc-power7.exp
+- Archer backport: d144a3633454046aaeae3e2c369c271834431d36
+  - Fix C local extern variables (requires gcc-4.4.0-0.30).
+
+* Fri Mar 27 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-12
+- Archer update to the snapshot: 837d9879980148af05eae540d92caeb7200f1813
+- Archer backport: 8340d06295c8db80c544503458305197891e0348
+  - Fixes [master] regression for Eclipse CDT testsuite.
+- Archer backport: 16328456d5740917ade0a49bcecc14c4564b9a99
+  - Fixes #2 [expr] compatibility with gcc-4.4 on gdb.cp/namespace-using.exp.
+- Rebase [expr] on the Keith Seitz's sync with FSF GDB fixing the former merge.
+
+* Sun Mar 22 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-11
+- Archer update to the snapshot: e734ed95d296a3342d4147873c4641cea6c4d7fe
+- Archer backport: 1e1d73cda98b1adda884b80e07c7b4929c175628
+  - Fixes [expr] compatibility with gcc-4.4 on gdb.cp/namespace-using.exp.
+
+* Sun Mar 15 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-10
+- Archer update to the snapshot: 935f217d3367a642374bc56c6b146d376fc3edab
+- Archer backport: 281278326412f9d6a3fabb8adc1d419fd7ddc7d7
+  - Fix [expr] crash reading invalid DWARF C++ symbol "" (BZ 490319).
+
+* Thu Mar 12 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-9
+- Archer backport: aafe933b497eee8cfab736a10bae1a90d4bceb18
+  - [python] Remove duplicate target-wide-charset parameter
+
+* Mon Mar  9 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-8
+- Archer update to the snapshot: a99e30d08ade4a2df0f943b036cd653bcd12b04d
+- Fixes internal error on breaking at a multi-locations C++ caller (BZ 488572).
+
+* Mon Mar  9 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-7
+- Archer update to the snapshot: ec29855686f2a78d90ebcc63765681249bbbe808
+- Temporarily place libstdc++ pretty printers in this gdb.rpm.
+
+* Sat Mar  7 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-6
+- Archer update to the snapshot: 543fb2154d3bd551344b990b911be5c6cc703504
+ - Fixes [delayed-symfile] excessive `(no debugging symbols found)' messages.
+
+* Sat Mar  7 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-5
+- Improve `gdb-6.6-buildid-locate-rpm.patch' by dlopen() (+pkg-config compat.).
+
+* Sat Mar  7 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-4
+- Split `gdb-6.6-buildid-locate.patch' to `gdb-6.6-buildid-locate-rpm.patch'.
+
+* Sat Mar  7 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-3
+- Archer update to the snapshot: 6cf16c0711e844094ab694b3d929f7bd30b49f61
+- Fix crash on the inlined functions support.
+- Fix crash from the PIE support, its varobj_refresh() was called only before
+  varobj_invalidate() which is sufficient.
+- Fix BuildRequires for the `--with testsuite' runs.
+- Use the newly introduced `--with-pythondir' option.
+- Remove libstdcxx [python] pretty printers (as included in libstdc++ rpm now).
+
+* Fri Mar 06 2009 Jesse Keating <jkeating@redhat.com> - 6.8.50.20090302-2
+- Rebuild for new rpm libs
+
+* Mon Mar  2 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-1
+- Include the Archer Project: http://sourceware.org/gdb/wiki/ProjectArcher
+  snapshot: 8cc3753a9aad85bf53bef54c04334c60d16cb251
+  * [python] Python scripting support: http://sourceware.org/gdb/wiki/PythonGdb
+  * [catch-syscall] Trap and display syscalls.
+  * [delayed-symfile] Improve startup performance by lazily read psymtabs.
+  * [exception-rewind] Fix fatal C++ exceptions in an inferior function call.
+  * [expr] Expressions, single-quote elimination, C++ input canonicalization.
+  * [using-directive] C++ namespaces.
+  * [vla] C variable length arrays / DW_FORM_block / Fortran dynamic arrays.
+  * [misc] Fix debuginfoless `return' (BZ 365111), fix command-line macros for
+    expected GCC (BZ 479914), new testcase for valgrind (for BZ 483262),
+    implement `info common' for Fortran, fix Fortran logical-kind=8 (BZ 465310),
+    fix static variable in C++ constructors (BZ 445912), fix power7 (BZ 485319).
+- Upgrade to the FSF GDB gdb-6.8.50 snapshot.
+- Fix parsing elf64-i386 files for kdump PAE vmcore dumps (BZ 457187).
+  - Turn on 64-bit BFD support, globally enable AC_SYS_LARGEFILE.
+
+* Tue Feb 24 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 6.8.50.20090210-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild
+
+* Wed Feb 11 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090210-1
+- Upgrade to the FSF GDB gdb-6.8.50 snapshot.
+
+* Wed Feb 11 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090209-1
+- Upgrade to the FSF GDB gdb-6.8.50 snapshot.
+
+* Mon Feb  9 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20081214-2
+- Fix crash / implement `finish' into inlined functions (BZ 479781).
+- Drop the gdb.threads/attach-into-signal.exp change as obsolete.
+
+* Sun Dec 14 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20081214-1
+- Upgrade to the upstream gdb-6.8.50 snapshot.
+
+* Mon Dec  1 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8-33
+- Make `--with testsuite' BuildRequires properly conditional.
+
+* Mon Dec  1 2008 Stepan Kasal <skasal@redhat.com> - 6.8-32
+- Remove trivial BuildRequires, use rpm macros in a few remaining places.
+
+* Tue Nov 18 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8-31
+- Enable ia64 hardware watchpoints if created before starting inferior.
+
+* Sun Nov  9 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8-30
+- Fix a race in the testcase `gdb.threads/step-thread-exit.exp'.
+
+* Sun Nov  9 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8-29
+- Fix more the variable-length-arrays support (BZ 468266, feature BZ 377541).
+- Integrate the `bt full' protection (for BZ 466901) into the VLA patch.
+
+* Thu Nov  6 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8-28
+- Fix the "never terminate `bt full'" patch false GCC warning / build error.
+
+* Thu Nov  6 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8-27
+- Fix resolving of variables at locations lists in prelinked libs (BZ 466901),
+  bugreported by Michal Babej.
+- Never terminate `bt full' on a problem of variable resolving (for BZ 466901).
+
+* Thu Nov  6 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8-26
+- Fix more the variable-length-arrays support (BZ 468266, feature BZ 377541).
+- Fix the watchpoints conditionals.
+- Fix on PPC spurious SIGTRAPs on active watchpoints.
+- Fix occasional stepping lockup on many threads, seen on ia64.
+
+* Mon Nov  3 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8-25
+- Fix the variable-length-arrays support (BZ 468266, feature BZ 377541).
+- Fix the debuginfo-install suggestions for missing base packages (BZ 467901),
+  also update the rpm/yum code to no longer require _RPM_4_4_COMPAT.
+
+* Tue Sep  2 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8-24
+- Fix PIE patch regression for loading binaries from valgrind (BZ 460319).
+
+* Thu Aug 28 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8-23
+- Fix attaching to stopped processes, based on the upstream version now.
+  - Just kernel-2.6.25 neither upstream nor utrace work with it; 2.6.9 works.
+- Fix occasional crash on a removed watchpoint.
+- Fix false testcase FAILs for `gdb.pie/break.exp'.
+- Fix a false warning (+a testcase FAIL) on s390x watchpoints.
+- Fix a false FAIL on s390x `gdb.base/dump.exp'.
+
+* Wed Aug 27 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8-22
+- Remove `gdb-6.3-nonthreaded-wp-20050117.patch' as obsoleted + regressing now.
+- Make the GDB quit processing non-abortable to cleanup everything properly.
+- Support DW_TAG_constant for Fortran in recent Fedora/RH GCCs.
+- Fix crash on DW_TAG_module for Fortran in recent Fedora/RH GCCs.
+- Readd resolving of bare names of constructors and destructors.
+- Include various vendor testcases:
+  - Leftover zombie process (BZ 243845).
+  - Multithreaded watchpoints (`gdb.threads/watchthreads2.exp').
+  - PIE testcases (`gdb.pie/*').
+  - C++ contructors/destructors (`gdb.cp/constructortest.exp').
+
+* Sat Aug 23 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8-21
+- Fix MI debuginfo print on reloaded exec, found by Denys Vlasenko (BZ 459414).
+- Extend the Fortran dynamic variables patch also for dynamic Fortran strings.
+
+* Wed Aug 13 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8-20
+- Temporarily disable attaching to a stopped process (BZ 453688)
+  - To be reintroduced after a fix of the kernel BZ 454404.
+
+* Mon Aug  4 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8-19
+- Fix `errno' printing on nonthreaded non-g3 inferiors (TLS minsym is absolute).
+
+* Fri Aug  1 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8-18
+- Fix powerpc recent secure PLTs handling (shared library calls) (BZ 452960).
+- Fix the testsuite .spec runner to run biarch also on ppc.
+- Reenable testcases threadcrash.exp, chng-syms.exp, checkpoint.exp (BZ 207002).
+- Fix PRPSINFO in the core files dumped by gcore (BZ 254229), reformatted patch
+  from Denys Vlasenko.
+- Fix register assignments with no GDB stack frames, Denys Vlasenko (BZ 436037).
+
+* Mon Jul 14 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8-17
+- Refresh the patchset with fuzz 0 (for new rpmbuild).
+
+* Mon Jul 14 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8-16
+- Rebuild with the new rpm-4.5.90 in the buildroot.
+
+* Sat Jul 12 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8-15
+- Temporary rpm-4.5.90 compatibility workaround by Panu Matilainen.
+- Fix a regression in the constant watchpoints fix, found by Daniel Jacobowitz.
+- Fix the prelink testcase for false FAILs on i386.
+
+* Tue Jul  8 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8-14
+- Fix crash due to calling an inferior function right after a watchpoint stop.
+
+* Thu Jul  3 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8-13
+- Support transparent debugging of inlined functions for an optimized code.
+
+* Fri Jun 20 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8-12
+- Remove the gdb/gdbtui binaries duplicity.
+
+* Tue Jun 17 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8-11
+- Fix the testsuite run for ia64 (where no -m64 is present).
+- Test a crash on libraries missing the .text section.
+- Protect development in the build tree by automatic Makefile dependencies.
+- Refuse creating watchpoints of an address value, suggested by Martin Stransky.
+- Disable randomization (such as by setarch -R), suggested by Jakub Jelinek.
+- Fix compatibility with recent glibc headers.
+
+* Sun Jun  1 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8-10
+- Fix crash on a watchpoint update on an inferior stop.
+- Fix the s390x part of the hardware watchpoints after a fork.
+
+* Thu May 22 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8-9
+- Fix memory trashing on binaries from GNAT/Ada (workaround GCC PR 35998).
+
+* Thu May 15 2008 Tom "spot" Callaway <tcallawa@redhat.com> - 6.8-8
+- Silence memcpy check which returns false positive (sparc64)
+
+* Thu May 15 2008 Tom "spot" Callaway <tcallawa@redhat.com> - 6.8-7
+- patch from DaveM for sparc/sparc64
+- touch up spec to enable sparcv9/sparc64
+
+* Sat May  3 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8-6
+- Fix gdb.base/gcore-shmid0.exp to be unresolved on recent kernels.
+- Make the testsuite results of dfp-test.exp more stable.
+
+* Sun Apr 27 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8-5
+- Remove the kernel VDSO workaround (`no loadable ...') (kernel BZ 312011).
+
+* Wed Apr 23 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8-4
+- Backport fix on various forms of threads tracking across exec() (BZ 442765).
+- Testsuite: Include more biarch libraries on %%{multilib_64_archs}.
+- Disable the build-id warnings for the testsuite run as they cause some FAILs.
+- Fix PIE support for 32bit inferiors on 64bit debugger.
+- Fix trashing memory on one ada/gnat testcase.
+- Make the testsuite results on ada more stable.
+
+* Wed Apr 16 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8-3
+- Fix ia64 compilation errors (Yi Zhan, BZ 442684).
+- Fix build on non-standard rpm-devel includes (Robert Scheck, BZ 442449).
+- Do not run the PIE mode for the testsuite during `--with upstream'.
+- Fix test of the crash on a sw watchpoint condition getting out of the scope.
+
+* Fri Apr 11 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8-2
+- Fix a regression due to PIE of reloading a changed exec file (BZ 433410).
+- Include also biarch libgcc on %%{multilib_64_archs} for the testsuite.
+- Cosmetic fix of a testcase sanity breakpoint setting (part of BZ 233852).
+- New test of hiding unexpected breakpoints on intentional step commands.
+- New test of GCORE for shmid 0 shared memory mappings.
+- New test of a crash on `focus cmd', `focus prev' commands.
+- Fix a minor test race of the hardware watchpoints after the fork call.
+- Test crash on a sw watchpoint condition getting out of the scope.
+
+* Fri Mar 28 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8-1
+- Upgrade to the latest upstream final release gdb-6.8.
+
+* Mon Mar 10 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.7.50.20080227-3
+- build-id warnings integrated more with rpm and the lists of the warnings got
+  replaced usually by a single-line `debuginfo-install' advice.
+  - FIXME: Testsuite needs an update for the new pre-prompt messages.
+- Fix the `--with upstream' compilation - gstack/pstack are now omitted.
+
+* Tue Mar  4 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.7.50.20080227-2
+- Drop the unused `ChangeLog.RedHat' file stubs.
+- New rpm option `--with upstream' to drop the Fedora patches for testing.
+- Drop some no longer valid .spec file comments.
+- Include the Fortran dynamic arrays entry for changelog of 6.7.50.20080227-1.
+
+* Mon Mar  3 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.7.50.20080227-1
+- Upgrade to the upstream gdb-6.8 prerelease.
+- Cleanup the leftover `.orig' files during %%prep.
+- Add expat-devel check by the configure script (for the other-arch builds).
+- `--with testsuite' now also BuildRequires: fpc
+- Backport fix of a segfault + PIE regression since 6.7.1 on PIE executables.
+- Update the printed GDB version string to be Fedora specific.
+- Fix/implement the Fortran dynamic arrays support (BZ 377541).
+
+* Sat Mar  1 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.7.1-16
+- Run the full testsuite also in the `-fPIE -pie' mode.
+
+* Mon Feb 25 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.7.1-15
+- New --with parameters `testsuite' and `debug'.
+  - Testsuite is now run during the build only on explicit `--with testsuite'.
+- Testsuite now possibly produces two outputs for the two GDB target arches.
+
+* Thu Feb 21 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.7.1-14
+- Rename `set debug build-id' as `set build-id-verbose', former level 1 moved
+  to level 2, default value is now 1, use `set build-id-verbose 0' now to
+  disable the missing separate debug filenames messages (BZ 432164).
+
+* Wed Feb 20 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.7.1-13
+- ia64 build fixes from Doug Chapman (BZ 428882).
+- gdbserver separated into an extra package (BZ 405791).
+- pstack obsoleted by included gstack (BZ 197020).
+- Fix #include <asm/ptrace.h> on kernel-headers-2.6.25-0.40.rc1.git2.fc9.x86_64.
+- Drop the PowerPC simulator as no longer being compatible with Fedora binaries.
+
+* Thu Feb  7 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.7.1-12
+- build-id debug messages print now the library names unconditionally.
+
+* Thu Jan 24 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.7.1-11
+- Improve the text UI messages for the build-id debug files locating.
+  - Require now the rpm libraries.
+- Fix false `(no debugging symbols found)' on `-readnever' runs.
+- Extend the testcase `gdb.arch/powerpc-prologue.exp' for ppc64.
+
+* Sat Jan 12 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.7.1-10
+- Compilation fixup (-9 was never released).
+
+* Sat Jan 12 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.7.1-9
+- Fix also threaded inferiors for hardware watchpoints after the fork call.
+- Test debugging statically linked threaded inferiors (BZ 239652).
+  - It requires recent glibc to work in this case properly.
+- Testcase cleanup fixup of the gcore memory and time requirements of 6.7.1-8.
+
+* Thu Jan 10 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.7.1-8
+- Fix detaching from a threaded formerly stopped process with non-primary
+  thread currently active (general BZ 233852).
+  - Enable back again the testcases named `attachstop.exp' (no such exist now).
+  - Rename the testcase `gdb.threads/attachstop' to `gdb.threads/attachstop-mt'.
+- Test ia64 memory leaks of the code using libunwind.
+- Testcase delay increase (for BZ 247354).
+- Test gcore memory and time requirements for large inferiors.
+
+* Mon Jan  7 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.7.1-7
+- Backport the gcc-4.3 compatibility -Werror fixes.
+- Fix documentation on hardware watchpoints wrt multiple threads.
+- Rename the patch file for BZ 235197 from its former name 234468.
+- Fix the vendora testcase `attach-32.exp' affecting the other tests results.
+- Support DW_TAG_interface_type the same way as DW_TAG_class_type (BZ 426600).
+
+* Mon Dec 10 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.7.1-6
+- Testsuite fixes for more stable/comparable results.
+
+* Sat Nov 24 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.7.1-5
+- Reduce the excessive gcc-* packages dependencies outside of mock/koji.
+
+* Fri Nov 16 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.7.1-4
+- Fix `errno' resolving across separate debuginfo files.
+- Fix segfault on no file loaded, `set debug solib 1', `info sharedlibrary'.
+- Extend the testsuite run for all the languages if %%{dist} is defined.
+- Support gdb.fortran/ tests by substituting the g77 compiler by gfortran.
+
+* Sun Nov  4 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.7.1-3
+- Fix `errno' resolving on recent glibc with broken DW_AT_MIPS_linkage_name.
+- Imported new test for 6.7 PPC hiding of call-volatile parameter register.
+
+* Sat Nov  3 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.7.1-2
+- Backport `Breakpoints at multiple locations' patch primarily for C++.
+
+* Thu Nov  1 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.7.1-1
+- Upgrade to GDB 6.7.1.  Drop redundant patches, forward-port remaining ones.
+
+* Thu Nov  1 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.7-1
+- Upgrade to GDB 6.7.  Drop redundant patches, forward-port remaining ones.
+- Fix rereading of the main executable on its change.
+
+* Fri Oct 19 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-37
+- Fix hiding unexpected breakpoints on intentional step/next commands.
+- Fix s390 compilation warning/failure due to a wrongly sized type-cast.
+
+* Sun Oct 14 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-36
+- Fix hardware watchpoints after inferior forks-off some process.
+
+* Sat Oct 13 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-35
+- Fix non-threaded watchpoints CTRL-C regression on `set follow child'.
+
+* Fri Oct 12 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-34
+- Fix gdbserver for threaded applications and recent glibc (BZ 328021).
+
+* Tue Oct  9 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-33
+- Fix debug load for sparse assembler files (such as vDSO32 for i386-on-x86_64).
+
+* Mon Oct  8 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-32
+- Set the breakpoints always to all the ctors/dtors variants (BZ 301701).
+- Fix a TUI visual corruption due to the build-id warnings (BZ 320061).
+- Fixed the kernel i386-on-x86_64 VDSO loading (producing `Lowest section in').
+
+* Fri Oct  5 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-31
+- Fix address changes of the ctors/dtors breakpoints w/multiple PCs (BZ 301701).
+- Delete an info doc file on `rpmbuild -bp' later rebuilt during `rpmbuild -bc'.
+
+* Tue Sep 25 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-30
+- Fix re-setting of the ctors/dtors breakpoints with multiple PCs (BZ 301701).
+- Avoid one useless user question in the core files locator (build-id).
+
+* Sun Sep 23 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-29
+- Fixed the kernel VDSO loading (`warning: no loadable sections found in ...').
+- Fix the testcase for pending signals (from BZ 233852).
+
+* Sat Sep 22 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-28
+- Support also the `$allocate' and `$delete' ctor/dtor variants (BZ 301701).
+- Fix the build compatibility with texinfo >= 4.10.
+- Fix the testcase for pending signals (from BZ 233852).
+
+* Sun Sep 16 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-27
+- Fix attaching to stopped processes and/or pending signals.
+
+* Tue Aug 28 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-26
+- New fast verification whether the .debug file matches its peer (build-id).
+- New locating of the matching binaries from the pure core file (build-id).
+
+* Fri Aug 17 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-25
+- Fixed excessive RPATH (related to BZ 228891).
+
+* Wed Aug  8 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-24
+- Fixed compatibility with the Rawhide glibc open(2) syscall sanity checking.
+- Update the core_dump_elf_headers=1 compatibility code to the upstream variant.
+
+* Mon Aug  6 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-23
+- Update PPC unwinding patches to their upstream variants (BZ 140532).
+
+* Wed Jul 25 2007 Jesse Keating <jkeating@redhat.com> - 6.6-22
+- Rebuild for RH #249435
+
+* Mon Jul 23 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-21
+- Fixed compatibility with Rawhide kernel fs.binfmt_elf.core_dump_elf_headers=1.
+- .spec file updates to mostly pass RPMLINT - Fedora merge review (BZ 225783).
+- Fixed testcase of the exit of a thread group leader (of BZ 247354).
+- Cleanup any leftover testsuite processes as it may stuck mock(1) builds.
+
+* Sun Jul  8 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-20
+- Do not hang on exit of a thread group leader (BZ 247354).
+- New test for upstream fix of VDSO decoding while attaching to an i386 process.
+- Fixed BZ # 232014 -> 232015.
+
+* Thu Jul  5 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-19
+- Link with libreadline provided by the operating system.
+
+* Tue Jun 26 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-18
+- Fix PPC software watchpoints active while stepping atomic instr. (BZ 237572).
+
+* Thu Jun 21 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-17
+- Support for stepping over PPC atomic instruction sequences (BZ 237572).
+- `set scheduler-locking step' is no longer enforced but it is now default.
+
+* Wed Jun 20 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-16
+- Fix attaching a stopped process on expected + upstream kernels (BZ 233852).
+ - Fix attaching during a pending signal being delivered.
+
+* Thu Jun  7 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-15
+- Testcase update to cover PPC Power6/DFP instructions disassembly (BZ 230000).
+- Disable some known timeouting/failing testcases to reduce the build time.
+- Fix crash on missing filenames debug info (BZ 242155).
+
+* Sat Apr 28 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-14
+- Fixup for the PPC Power6/DFP instructions disassembly (BZ 230000).
+- New testcase for the GCORE buffer overflow (for BZ 238285, formerly 235753).
+
+* Wed Apr 25 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-13
+- Fix `gcore' command for 32bit PPC inferiors on 64bit PPC hosts (BZ 232015).
+
+* Wed Apr 25 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-12
+- Enable PowerPC to print 128-bit long double variables (BZ 237872).
+- New testcase for gcore of 32bit inferiors on 64bit hosts.
+
+* Tue Apr 24 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-11
+- Package review, analysed by Ralf Corsepius (BZ 225783).
+ - Fix prelink(8) testcase for non-root $PATH missing `/usr/sbin' (BZ 225783).
+ - Fix debugging GDB itself - the compiled in source files paths (BZ 225783).
+ - Fix harmless GCORE stack buffer overflow, by _FORTIFY_SOURCE=2 (BZ 238285).
+ - Fix XML support - the build was missing `expat-devel'.
+ - Updated the `info' files handling by the spec file.
+ - Building now with the standard Fedora code protections - _FORTIFY_SOURCE=2.
+ - Use multiple CPUs for the build (%%{?_smp_mflags}).
+ - Separate testsuite run to its %%check section.
+ - Fix (remove) non-ASCII spec file characters.
+ - Remove system tools versions dumping - already present in mock build logs.
+
+* Sun Apr 22 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-10
+- Notify user of a child forked process being detached (BZ 235197).
+
+* Sun Apr 22 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-9
+- Allow running `/usr/bin/gcore' with provided but inaccessible tty (BZ 229517).
+- Fix testcase for watchpoints in threads (for BZ 237096).
+- BuildRequires now `libunwind-devel' instead of the former `libunwind'.
+- Use the runtime libunwind .so.7, it requires now >= 0.99-0.1.frysk20070405cvs.
+
+* Sat Mar 24 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-8
+- Use definition of an empty structure as it is not an opaque type (BZ 233716).
+- Fixed the gdb.base/attachstop.exp testcase false 2 FAILs.
+
+* Thu Mar 15 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-7
+- Suggest SELinux permissions problem; no assertion failure anymore (BZ 232371).
+
+* Wed Mar 14 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-6
+- Fix occasional dwarf2_read_address: Corrupted DWARF expression (BZ 232353).
+
+* Mon Mar 12 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-5
+- Temporary support for shared libraries >2GB on 64bit hosts. (BZ 231832)
+
+* Sun Feb 25 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-4
+- Backport + testcase for PPC Power6/DFP instructions disassembly (BZ 230000).
+
+* Mon Feb  5 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-3
+- Fix a race during attaching to dying threads; backport (BZ 209445).
+- Testcase of unwinding has now marked its unsolvable cases (for BZ 140532).
+
+* Fri Jan 26 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-2
+- Backported post gdb-6.6 release PPC `show endian' fixup.
+- Fix displaying of numeric char arrays as strings (BZ 224128).
+- Simplified patches by merging upstream accepted ones into a single file.
+
+* Sat Jan 20 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-1
+- Upgrade to GDB 6.6.  Drop redundant patches, forward-port remaining ones.
+- Backported post gdb-6.6 release ia64 unwinding fixups.
+- Testcase for exec() from threaded program (BZ 202689).
+
+* Mon Jan 15 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.5-27
+- Fix the testsuite results broken in 6.5-26, stop invalid testsuite runs.
+
+* Sat Jan 13 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.5-26
+- Fix unwinding of non-debug (.eh_frame) PPC code, Andreas Schwab (BZ 140532).
+- Fix unwinding of debug (.debug_frame) PPC code, workaround GCC (BZ 140532).
+- Fix missing testsuite .log output of testcases using get_compiler_info().
+
+* Fri Jan 12 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.5-25
+- Fix unwinding of non-CFI (w/o debuginfo) PPC code by recent GCC (BZ 140532).
+
+* Thu Jan 11 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.5-24
+- Backport readline history for input mode commands like `command' (BZ 215816).
+
+* Tue Jan  9 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.5-23
+- Find symbols properly at their original (included) file (BZ 109921).
+- Remove the stuck mock(1) builds disfunctional workaround (-> mock BZ 221351).
+
+* Sat Dec 30 2006 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.5-22
+- Fix unwinding crash on older gcj(1) code (extended CFI support) (BZ 165025).
+- Include testcase for the readline history of input mode commands (BZ 215816).
+
+* Sat Dec 23 2006 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.5-21
+- Try to reduce sideeffects of skipping ppc .so libs trampolines (BZ 218379).
+- Fix lockup on trampoline vs. its function lookup; unreproducible (BZ 218379).
+
+* Tue Dec 19 2006 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.5-20
+- Fix bogus 0x0 unwind of the thread's topmost function clone(3) (BZ 216711).
+- Testcase for readline segfault on excessively long hand-typed lines.
+
+* Tue Dec 12 2006 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.5-19
+- Fix attachment also to a threaded stopped process (BZ 219118).
+- Cleanup any leftover testsuite processes as it may stuck mock(1) builds.
+
+* Sat Nov 25 2006 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.5-18
+- Fix readline history for input mode commands like `command' (BZ 215816).
+
+* Thu Nov 16 2006 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.5-17
+- Bugfix testcase typo of gdb-6.5-16.
+
+* Thu Nov 16 2006 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.5-16
+- Provide testcase for accessing the last address space byte.
+
+* Thu Nov  9 2006 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.5-15
+- Fix readline segfault on excessively long hand-typed lines.
+
+* Thu Nov  2 2006 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.5-14
+- Fix "??" resolving of symbols from (non-prelinked) debuginfo packages.
+- Fix "??" resolving of symbols from overlapping functions (nanosleep(3)).
+- Also disable testcase "checkpoint.exp" for a possible kernel Bug 207002.
+- Provided (disabled during build) threading testsuite from BEA.
+
+* Sat Oct 14 2006 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.5-13
+- Fix deadlock accessing last address space byte; for corrupted backtraces.
+
+* Sun Oct  8 2006 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.5-12
+- Disabled IPv6 until its user visible syntax gets stable upstream.
+
+* Sun Oct  1 2006 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.5-11
+- No longer disassemble invalid i386 opcodes of movQ/movA (BZ 172034).
+- Simplify the IPv6 patch for gdbserver (BZ 198365).
+- Suggest fixing your target architecture for gdbserver(1) (BZ 190810).
+- Fix dereferencing registers for 32bit inferiors on 64bit hosts (BZ 181390).
+- Fix `gcore' command for 32bit inferiors on 64bit hosts.
+
+* Wed Sep 27 2006 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.5-10
+- Support IPv6 for gdbserver (BZ 198365).
+- Temporarily disable testcase "chng-syms.exp" for a possible kernel Bug 207002.
+
+* Thu Sep 21 2006 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.5-9
+- Fix crash on C++ symbol failing to be demangled (BZ 206813).
+- Fix attach to stopped process, supersede `gdb-6.3-attach-stop-20051011.patch'.
+- Fix TLS symbols resolving for objects with separate .debug file (-debuginfo).
+- Fix TLS symbols resolving for shared libraries with a relative pathname.
+- Support TLS symbols (+`errno' suggestion if no pthread is found) (BZ 185337).
+
+* Mon Sep 11 2006 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.5-8
+- Fix gdb printf command argument using "%%p" (BZ 205551).
+
+* Mon Sep  4 2006 Alexandre Oliva <aoliva@redhat.com> - 6.5-7
+- Fix bug in patch for CVE-2006-4146. (BZ 203873, BZ 203880)
+
+* Thu Aug 24 2006 Alexandre Oliva <aoliva@redhat.com> - 6.5-6
+- Avoid overflows and underflows in dwarf expression computation stack.
+(BZ 203873)
+
+* Thu Aug 24 2006 Alexandre Oliva <aoliva@redhat.com> - 6.5-5
+- Backport support for i386 nop memory instructions.
+- Fix debuginfo addresses resolving for --emit-relocs Linux kernels
+(BZ 203661, from Jan Kratochvil, like the remaining changes).
+- Bugfix segv on the source display by ^X 1 (fixes Patch130, BZ
+200048).
+- Do not step into the PPC solib trampolines (BZ 200533).
+- Fix exec() from threaded program, partial CVS backport (BZ 182116).
+- Fix occasional failure to load shared libraries (BZ 146810).
+- Bugfix object names completion (fixes Patch116, BZ 193763).
+- Avoid crash of 'info threads' if stale threads exist (BZ 195429).
+- Handle corrupted or missing location list information (BZ 196439).
+
+* Thu Jul 13 2006 Alexandre Oliva <aoliva@redhat.com> - 6.5-3
+- Add missing definition of multilib_64_archs for glibc-devel buildreqs.
+- Backport support for .gnu.hash sections.
+
+* Wed Jul 12 2006 Alexandre Oliva <aoliva@redhat.com> - 6.5-2
+- BuildReq sharutils, prelink and, on multilib systems, 32-bit glibc-devel.
+- Drop obsolete attach-stop patch.
+- Fix testcases in threaded-watchpoints2 and step-thread-exit patches.
+- Re-enable attach-pie.exp, asm-source.exp and sigstep.exp tests.
+
+* Tue Jul 11 2006 Alexandre Oliva <aoliva@redhat.com> - 6.5-1
+- Upgrade to GDB 6.5.  Drop redundant patches, forward-port remaining
+ones.  Re-enable ada and objc testsuites.
+
+* Thu Jun 15 2006 Alexandre Oliva <aoliva@redhat.com> - 6.3.0.0-1.132
+- Require flex and bison at build time.
+- Additional patch for BZ 175083, to cope with waitpid setting status
+even when returning zero.
+
+* Wed May 31 2006 Alexandre Oliva <aoliva@redhat.com> - 6.3.0.0-1.131
+- Require gettext at build time.  (BZ193366)
+
+* Sat May 27 2006 Alexandre Oliva <aoliva@redhat.com> - 6.3.0.0-1.130
+- Rewrite patch for BZ 175270, BZ 175083 so as to catch the exception
+earlier.
+- Remove too-fragile testcases from patches for CFA value and "S"
+augmentation.
+
+* Wed May 17 2006 Alexandre Oliva <aoliva@redhat.com> - 6.3.0.0-1.129
+- Add not-automatically-generated file to fopen64 patch (BZ 191948).
+
+* Fri Apr 14 2006 Alexandre Oliva <aoliva@redhat.com> - 6.3.0.0-1.128
+- Avoid race conditions caused by exceptions messing with signal masks.
+(BZ 175270, BZ 175083, maybe BZ 172938).
+- Hardcode /bin and /usr/bin paths into gstack (BZ 179829, BZ 190548).
+- Build in a subdir of the source tree instead of in a sibling directory.
+- Switch to versioning scheme that uses the same base revision number
+for all OSes, and uses a suffix to tell the builds apart and ensure
+upgradability.
+
+* Thu Apr 13 2006 Stepan Kasal <skasal@redhat.com> - 6.3.0.0-1.127
+- Bump up release number.
+
+* Thu Apr 13 2006 Stepan Kasal <skasal@redhat.com> - 6.3.0.0-1.123
+- Use fopen64 where available.  Fixes BZ 178796, BZ 190547.
+- Use bigger numbers than int.  Fixes BZ 171783, BZ 179096.
+
+* Wed Mar  8 2006 Alexandre Oliva <aoliva@redhat.com> - 6.3.0.0-1.122
+- Bump up release number.
+
+* Wed Mar  8 2006 Alexandre Oliva <aoliva@redhat.com> - 6.3.0.0-1.119
+- Fix regression in PIE debugging (BZ 133944) (re?)introduced by the
+prelink fix (BZ 175075, BZ 190545).  Improve testcase for the prelink
+fix.
+- Revert dwarf2 frame identifier change.
+
+* Tue Mar  7 2006 Alexandre Oliva <aoliva@redhat.com> - 6.3.0.0-1.118
+- Bump up release number.
+
+* Tue Mar  7 2006 Alexandre Oliva <aoliva@redhat.com> - 6.3.0.0-1.115
+- Change dwarf2 frame identifiers to use the actual PC instead of the
+function's entry point.
+- Fix FSF and GDB contact addresses in new testcases.
+- Do not try to compile x86_64-only CFA testcase on 32-bit x86.
+- Change prelink test to issue untested instead of warning message if
+system libraries are not prelinked.
+
+* Fri Mar  3 2006 Alexandre Oliva <aoliva@redhat.com> - 6.3.0.0-1.114
+- Bump up release number.
+
+* Fri Mar  3 2006 Alexandre Oliva <aoliva@redhat.com> - 6.3.0.0-1.111
+- Add support for "S" augmentation for signal stack frames.
+- Add support for CFA value expressions and encodings.
+- Various improvements to the prelink test.
+
+* Thu Feb 23 2006 Alexandre Oliva <aoliva@redhat.com> - 6.3.0.0-1.110
+- Bump up release number.
+
+* Thu Feb 23 2006 Alexandre Oliva <aoliva@redhat.com> - 6.3.0.0-1.107
+- Enable gdb to debug core files and executables with mismatched
+prelink base addresses.  Fixes BZ 175075, BZ 190545.
+
+* Tue Feb 14 2006 Alexandre Oliva <aoliva@redhat.com> - 6.3.0.0-1.106
+- Bump up release number.
+
+* Tue Feb 14 2006 Alexandre Oliva <aoliva@redhat.com> - 6.3.0.0-1.103
+- Adjust type-punning patch to include fix not needed upstream.
+
+* Tue Feb 14 2006 Alexandre Oliva <aoliva@redhat.com> - 6.3.0.0-1.102
+- Bump up release number.
+
+* Tue Feb 14 2006 Alexandre Oliva <aoliva@redhat.com> - 6.3.0.0-1.99
+- Use type-punning warning fixes as accepted upstream.
+
+* Fri Feb 10 2006 Jesse Keating <jkeating@redhat.com> - 6.3.0.0-1.98.2
+- bump again for double-long bug on ppc(64)
+
+* Tue Feb 07 2006 Jesse Keating <jkeating@redhat.com> - 6.3.0.0-1.98.1
+- rebuilt for new gcc4.1 snapshot and glibc changes
+
+* Mon Jan 16 2006 Alexandre Oliva <aoliva@redhat.com> - 6.3.0.0-1.98
+- Bump up release number.
+
+* Mon Dec 19 2005 Alexandre Oliva <aoliva@redhat.com> - 6.3.0.0-1.94
+- Fix type-punning warnings issued by GCC 4.1.
+
+* Fri Dec 16 2005 Jesse Keating <jkeating@redhat.com>
+- rebuilt for new gcj
+
+* Thu Dec 01 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.93
+- Bump up release number.
+
+* Thu Dec 01 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.90
+- Add option to allow backtracing past zero pc value.
+- Bugzilla 170275
+
+* Tue Nov 15 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.89
+- Bump up release number.
+
+* Tue Nov 15 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.86
+- Fix ia64 user-specified SIGILL handling error.
+- Bugzilla 165038.
+
+* Tue Oct 18 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.85
+- Bump up release number.
+
+* Tue Oct 18 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.82
+- Modify attach patch to add missing fclose.
+- Bugzilla 166712
+
+* Tue Oct 11 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.81
+- Bump up release number.
+
+* Tue Oct 11 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.78
+- Support gdb attaching to a stopped process.
+
+* Thu Sep 29 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.77
+- Bump up release number.
+
+* Thu Sep 29 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.74
+- Fix up DSO read logic when process is attached.
+
+* Mon Sep 26 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.73
+- Bump up release number.
+
+* Mon Sep 26 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.70
+- Fix frame pointer calculation for ia64 sigtramp frame.
+
+* Thu Sep 22 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.69
+- Bump up release number.
+
+* Thu Sep 22 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.66
+- Remove extraneous xfree.
+
+* Wed Sep 07 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.65
+- Bump up release number.
+
+* Wed Sep 07 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.62
+- Readd readnever option
+
+* Wed Jul 27 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.61
+- Bump up release number.
+
+* Tue Jul 26 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.57
+- Bump up release number.
+
+* Tue Jul 26 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.54
+- Add testcase to verify printing of inherited members
+- Bugzilla 146835
+
+* Mon Jul 25 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.53
+- Bump up release number.
+
+* Mon Jul 25 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.50
+- Fix bug with info frame and cursor address on ia64.
+- Add testcase to verify pseudo-registers calculated for ia64 sigtramp.
+- Bugzilla 160339
+
+* Fri Jul 22 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.49
+- Bump up release number.
+
+* Fri Jul 22 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.46
+- Fix attaching to 32-bit processes on 64-bit systems.
+- Bugzilla 160254
+
+* Thu Jul 14 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.45
+- Bump up release number.
+
+* Thu Jul 14 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.42
+- Add work-around to make ia64 gcore work faster.
+- Bugzilla 147436
+
+* Thu Jul 14 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.41
+- Bump up release number.
+
+* Mon Jul 11 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.38
+- Fix backtracing across sigaltstack for ia64
+- Bugzilla 151741
+
+* Fri Jul 08 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.37
+- Bump up release number.
+
+* Fri Jul 08 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.35
+- Build pseudo-registers properly for sigtramp frame.
+- Bugzilla 160339
+
+* Fri Jul 08 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.34
+- Bump up release number.
+
+* Thu Jul 07 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.31
+- Modify security errata to include additional bfd robustness updates
+- Bugzilla 158680
+
+* Fri Jun 10 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.30
+- Bump up release number.
+
+* Fri Jun 10 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.28
+- Security errata for bfd and .gdbinit file usage
+- Bugzilla 158680
+
+* Wed May 18 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.24
+- Bump up release number.
+
+* Wed May 18 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.23
+- Bump up release number.
+
+* Wed May 18 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.22
+- Specify SA_RESTART for linux-nat.c handlers and use my_waitpid
+  which handles EINTR.
+
+* Tue May 03 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.21
+- Bump up release number.
+
+* Tue May 03 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.20
+- Bump up release number.
+
+* Tue May 03 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.19
+- Fix for partial die in cache error
+- Bugzilla 137904
+
+* Wed Apr 27 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.18
+- Bump up release number.
+
+* Wed Apr 27 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.17
+- Bump up release number.
+
+* Wed Apr 27 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.16
+- Update ia64 sigtramp support to use libunwind and fix top-level
+  rse register reads to also use libunwind.
+- Bugzilla 151741
+
+* Thu Apr 21 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.15
+- Bump up release number.
+
+* Thu Apr 21 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.14
+- Bump up release number.
+
+* Thu Apr 21 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.13
+- Do not issue warning message for gcore under ia64
+- Bugzilla 146416
+
+* Mon Apr 11 2005 Andrew Cagney <cagney@redhat.com> - 6.3.0.0-1.12
+- Update gstack patch, handle systems that lack /proc/<pid>/tasks.
+
+* Fri Apr 8 2005 Andrew Cagney <cagney@redhat.com> - 6.3.0.0-1.11
+- Replace patch warning about DW_OP_piece with a patch that implements
+  the DW_OP_piece read path.
+
+* Sat Apr 2 2005 Andrew Cagney <cagney@redhat.com> - 6.3.0.0-1.10
+- Print a warning when the separate debug info's CRC doen't match;
+  test.
+
+* Wed Mar 30 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.9
+- Bump up release number.
+
+* Wed Mar 30 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.7
+- Add proper vsyscall page support for ia64.
+
+* Thu Mar 24 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.6
+- Bump up release number.
+
+* Thu Mar 24 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.4
+- Fix printing of inherited members of C++ classes.
+- Fix for Bugzilla 146835.
+
+* Tue Mar 22 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.3
+- Bump up release number.
+
+* Thu Mar 17 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-1.1
+- Remove warnings that cause errors when compiled with gcc4 and -Werror.
+
+* Wed Mar 16 2005 Elliot Lee <sopwith@redhat.com>
+- rebuilt
+
+* Fri Mar 04 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-0.37
+- Bump up release number.
+
+* Thu Mar 03 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-0.35
+- Add follow-fork fix from mainline sources.
+
+* Thu Mar 03 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-0.34
+- Bump up release number.
+
+* Mon Feb 28 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-0.32
+- Modify debug register handling for x86, x86-64 to be thread-specific.
+- Modify threaded watchpoint code for x86, x86-64 to properly insert
+  and remove watchpoints on all threads.
+
+* Tue Feb 22 2005 Andrew Cagney <cagney@redhat.com> - 6.3.0.0-0.31
+- Bump version number.
+
+* Tue Feb 22 2005 Andrew Cagney <cagney@redhat.com> - 6.3.0.0-0.30
+- Bump version number.
+
+* Tue Feb 22 2005 Andrew Cagney <cagney@redhat.com> - 6.3.0.0-0.29
+- Modify gdb-6.3-dwattype0-20050201.patch to check for a zero address
+  and not zero unsnd.  Fix BE 32- vs 64-bit problem.
+
+* Mon Feb 21 2005 Andrew Cagney <cagney@redhat.com> - 6.3.0.0-0.28
+- Back port patch adding symfile-mem.o to all GNU/Linux builds.
+  Fix BZ 146087.
+
+* Wed Feb 16 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-0.27
+- Bump up release number.
+
+* Wed Feb 16 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-0.26
+- Fix unload.exp testcase.
+
+* Mon Feb 14 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-0.25
+- Bump up release number.
+
+* Mon Feb 14 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-0.24
+- Fix gdb to always grab the terminal before a readline call.
+- Bugzilla 147880
+
+* Fri Feb 11 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-0.23
+- Bump up release number.
+
+* Fri Feb 11 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-0.21
+- Fix gdb to handle stepping over the end of an exiting thread.
+- Bugzilla 146848
+
+* Thu Feb 10 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-0.20
+- Bump up release number.
+
+* Tue Feb 08 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-0.18
+- Modify previous gcore patch to not use linux_proc_xfer_memory even
+  for main thread.
+
+* Mon Feb 07 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-0.17
+- Modify previous gcore patch to only apply to ia64.
+
+* Fri Feb 04 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-0.16
+- Fix gcore to work properly for threaded applications
+- Bugzilla 145309, 145092
+
+* Fri Feb 04 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-0.15
+- Tolerate DW_AT_type referencing <0> and instead of generating an
+  error, treat as unknown type.
+- Bugzilla 144852.
+
+* Thu Feb  3 2005 Andrew Cagney <cagney@redhat.com> - 6.3.0.0-0.14
+- Separate out test patches.
+
+* Thu Jan 27 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-0.13
+- Fix to allow ia64 gdb to backtrace from syscalls in a corefile.
+- Bugzilla 145092.
+
+* Wed Jan 26 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-0.12
+- Fix to support examining files even when the executable moves
+- Bugzilla 142122
+
+* Wed Jan 26 2005 Andrew Cagney <cagney@redhat.com> - 6.3.0.0-0.11
+- gdb-6.3-ppcdotsyms-20050126.patch: Backport BFD changes for reading
+  synthetic symbols.  Rewrite code reading elf minimal symbols so that
+  it includes synthetics.
+
+* Fri Jan 21 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-0.10
+- Fix to prevent resetting unwind kernel table size to invalid value
+  when debugging a core file
+- Bugzilla 145309
+
+* Fri Jan 21 2005 Andrew Cagney <cagney@redhat.com> - 6.3.0.0-0.9
+- When single stepping handle both back-to-back and nested signals.
+- Disable .symbol patch, results in BFD errors.
+
+* Fri Jan 21 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-0.8
+- Support listing both in-charge and not-in-charge dtors when
+  just the dtor name is given.
+- Add new test case for newly added ctor/dtor functionality.
+
+* Thu Jan 20 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-0.7
+- Fix to allow breaking by line in both the in-charge and
+  not-in-charge ctor/dtor.
+- Bugzilla 117826
+
+* Thu Jan 20 2005 Andrew Cagney <cagney@redhat.com> - 6.3.0.0-0.6
+- Rebuild.
+
+* Thu Jan 20 2005 Andrew Cagney <cagney@redhat.com> - 6.3.0.0-0.5
+- Use bfd_get_synthetic_symtab to read in any synthetic symbols
+  such as 64-bit PPC's ".symbol"s.
+
+* Tue Jan 18 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-0.4
+- Modify non-threaded watchpoint patch to use new observer.
+
+* Mon Jan 17 2005 Jeff Johnston <jjohnstn@redhat.com> - 6.3.0.0-0.3
+- Fix for non-threaded watchpoints.
+
+* Mon Jan 17 2005 Andrew Cagney <cagney@redhat.com> - 6.3.0.0-0.2
+- Enable PPC CFI, remove merged ppc patches.
+
+* Wed Jan 12 2005 Elena Zannoni <ezannoni@redhat.com> - 6.3.0.0-0.1
+- commit co-authors Andrew Cagney <cagney@redhat.com> and
+  Jeff Johnston <jjohnstn@redhat.com>.
+- Various fixes to complete the import and merge.
+
+* Wed Dec 01 2004 Andrew Cagney <cagney@redhat.com> - 6.3.0.0
+- Import GDB 6.3, get building, add all patches.
+
+* Tue Nov 30 2004 Jeff Johnston <jjohnstn@redhat.com> - 1.200400607.63
+- When removing breakpoints, continue removing breakpoints even if an
+  error occurs on the list.
+
+* Sun Nov 28 2004 Andrew Cagney <cagney@redhat.com> - 1.200400607.62
+- Bump version for RHEL4 build.
+
+* Wed Nov 24 2004 Andrew Cagney <cagney@redhat.com> - 1.200400607.61
+- For PPC-64, fix search for a symbol (wasn't specifying the section).
+
+* Wed Nov 24 2004 Andrew Cagney <cagney@redhat.com> - 1.200400607.60
+- For PPC-64, do not set malloc name to ".malloc"; no longer needed.
+- For all, only define kfail when not already defined.
+
+* Wed Nov 24 2004 Andrew Cagney <cagney@redhat.com> - 1.200400607.59
+- Bump version.
+
+* Wed Nov 24 2004 Andrew Cagney <cagney@redhat.com> - 1.200400607.58
+- Add rs6000 reggroups; fixes problem of PS register being trashed
+  causing mysterious branch breakpoints.
+
+* Tue Nov 23 2004 Andrew Cagney <cagney@redhat.com> - 1.200400607.57
+- Backport i386 prolog parser - better backtraces out of semop().
+- Add option --readnever to suppress the reading of symbolic debug
+  information.
+- Add script gstack.sh, installed as gstack.
+  Bugzilla 136584, 137121
+- Add missing files gdb.pie/attach2.c, gdb.pie/break1.c and
+  gdb.pie/Makefile.in along with testsuite/configure stuff for pie.
+
+* Tue Nov 23 2004 Andrew Cagney <cagney@redhat.com> - 1.200400607.57
+- Backport i386 prolog parser - better backtraces out of semop().
+- Add option --readnever to suppress the reading of symbolic debug
+  information.
+- Add script gstack.sh, installed as gstack.
+  Bugzilla 136584, 137121
+
+* Mon Nov 22 2004 Jeff Johnston <jjohnstn@redhat.com> - 1.200400607.56
+- Bump up release number.
+
+* Mon Nov 22 2004 Jeff Johnston <jjohnstn@redhat.com> - 1.200400607.55
+- Multiple ia64 backtrace fixes.  Bugzilla 125157
+
+* Thu Nov 11 2004 Elena Zannoni <ezannoni@redhat.com> - 1.200400607.54
+- Bump up release number
+
+* Thu Nov 11 2004 Elena Zannoni <ezannoni@redhat.com> - 1.200400607.51
+- Modify configure line to not use absolute paths. This was
+  creating problems with makeinfo/texinfo.
+- Get rid of makeinfo hack.
+Bugzilla 135633
+
+* Tue Nov 09 2004 Jeff Johnston <jjohnstn@redhat.com> - 1.200400607.50
+- Bump up release number
+
+* Tue Nov 09 2004 Jeff Johnston <jjohnstn@redhat.com> - 1.200400607.49
+- Bump up release number
+
+* Tue Nov 09 2004 Jeff Johnston <jjohnstn@redhat.com> - 1.200400607.48
+- Expose $base, $allocate constructors and $delete, $base destructors
+  for breakpoints.
+
+* Tue Nov 09 2004 Andrew Cagney <cagney@redhat.com> - 1.200400607.47
+- Enable PPC CFI.
+
+* Mon Nov 08 2004 Jeff Johnston <jjohnstn@redhat.com> - 1.200400607.46
+- Bump up release number
+
+* Mon Nov 08 2004 Jeff Johnston <jjohnstn@redhat.com> - 1.200400607.45
+- Bump up release number
+
+* Fri Nov 05 2004 Jeff Johnston <jjohnstn@redhat.com> - 1.200400607.44
+- Allow macros to continue past a backtrace error
+
+* Tue Oct 26 2004 Andrew Cagney <cagney@redhat.com> - 1.200400607.43
+- Hack around broken PT_FPSCR defined in headers.
+- Import latest s390 fixes.
+- Disable sigstep.exp - s390 has problems.
+- Use PC's symtab when looking for a symbol.
+- Work around DW_OP_piece.
+
+* Fri Oct 22 2004 Andrew Cagney <cagney@redhat.com> - 1.200400607.42
+- For 64-bit PPC, convert _dl_debug_state descriptor into a code address.
+- Fix --ignore option.
+
+* Sun Oct 10 2004 Andrew Cagney <cagney@redhat.com> - 1.200400607.40
+- Disable attach-pie.exp test, hangs on amd64 without auxv.
+- Move pie tests to pie.
+
+* Sun Oct 10 2004 Andrew Cagney <cagney@redhat.com> - 1.200400607.39
+- Fix comment bug in sigstep.exp.
+
+* Thu Oct 07 2004 Jeff Johnston <jjohnstn@redhat.com> - 1.200400607.38
+- Do not invalidate cached thread info when resuming threads.
+- Bump up release number.
+
+* Fri Oct 01 2004 Jeff Johnston <jjohnstn@redhat.com> - 1.200400607.35
+- Fix S/390 watchpoint support to work better under threading.
+
+* Fri Oct 01 2004 Jeff Johnston <jjohnstn@redhat.com> - 1.200400607.34
+- Fix thread_db_get_lwp to handle 2nd format ptids.
+
+* Mon Sep 27 2004 Andrew Cagney <cagney@redhat.com> - 1.200400607.33
+- Don't unwind past a zero PC (when normal frames).
+
+* Mon Sep 27 2004 Jeff Johnston <jjohnstn@redhat.com> - 1.200400607.32
+- Add threaded watchpoint support for x86, x86-64, and ia64.
+
+* Mon Sep 27 2004 Andrew Cagney <cagney@redhat.com> - 1.200400607.31
+- Instead of deleting bigcore.exp, use runtest --ignore.
+
+* Thu Sep 23 2004 Andrew Cagney <cagney@redhat.com> - 1.200400607.30
+- Merge in mainline testsuite up to 2004-09-23, pick up sig*.exp tests.
+  Merge in mainline infrun.c, pick up all infrun.c fixes.
+  Generate bigcore's corefile from the running inferior.
+  Limit bigcore's corefile to max file-size.
+
+* Thu Sep 02 2004 Jeff Johnston <jjohnstn@redhat.com> - 1.200400607.29
+- Fix low-level lin-lwp code to wait specifically for any stepping
+  LWP (bugzilla 130896)
+
+* Tue Aug 31 2004 Jeff Johnston <jjohnstn@redhat.com> - 1.200400607.28
+- Add test case for bugzilla 128618 fix.
+
+* Mon Aug 30 2004 Jeff Johnston <jjohnstn@redhat.com> - 1.200400607.27
+- Add support for breakpoints in manually loaded/unloaded shared libs.
+  (bugzilla 128618)
+
+* Mon Aug 30 2004 Jeff Johnston <jjohnstn@redhat.com> - 1.200400607.26
+- Add java inferior call support.
+
+* Mon Aug 30 2004 Andrew Cagney <cagney@redhat.com> - 1.200400607.25
+- Convert "main" the function descriptor, into an address.
+
+* Mon Aug 30 2004 Andrew Cagney <cagney@redhat.com> - 1.200400607.24
+- Fix single-stepping when a signal is pending, was exiting program.
+  -- needs kernel fix so that ptrace(PT_STEP,SIG) doesn't do a PT_CONT.
+  -- sigstep.exp tests pass with this fix applied.
+
+* Mon Aug 30 2004 Elena Zannoni <ezannoni@redhat.com> - 1.200400607.23
+- Delete some part of gdb-6.1post-test-rh.patch, to avoid confusing
+  gdb when testing itself, and loading separate debug info.
+
+* Fri Aug 13 2004 Jeff Johnston <jjohnstn@redhat.com> - 1.200400607.22
+- Check in gdb mainline fix for applications calling clone directly.
+
+* Tue Aug 10 2004 Jeff Johnston <jjohnstn@redhat.com> - 1.200400607.21
+- Alter libunwind frame code to allow using libunwind 0.97 and up.
+
+* Tue Aug 03 2004 Jeff Johnston <jjohnstn@redhat.com> - 1.200400607.20
+- Fix the ia64 libunwind test to match current output.
+
+* Fri Jul 30 2004 Elena Zannoni <ezannoni@redhat.com> - 1.200400607.19
+- Fix the tests where gdb debugs itself, as to not copy
+  the executable to xgdb.
+
+* Mon Jul 26 2004 Elena Zannoni <ezannoni@redhat.com> - 1.200400607.18
+- Add Pie patches back in.
+
+* Fri Jul 16 2004 Andrew Cagney <cagney@redhat.com> - 1.200400607.17
+- Fix stepping over a no-debug shared-library function.
+- Fix patch vsyscall patch name.
+
+* Thu Jul 8 2004 Jeff Johnston <jjohnstn@redhat.com> - 1.200400607.16
+- Update thread code with fix from gdb HEAD
+
+* Wed Jul 7 2004 Andrew Cagney <cagney@redhat.com> - 1.200400607.15
+- disable vsyscall
+- import Bob's crasher fix
+- disable bigcore.exp
+
+* Mon Jul 5 2004 Andrew Cagney <cagney@redhat.com> - 1.200400607.14
+- Make large corefiles work on systems that require O_LARGEFILE.
+
+* Tue Jun 29 2004 Elena Zannoni <ezannoni@redhat.com> - 1.200400607.13
+- Fix BuildRequires for libunwind on ia64.
+
+* Mon Jun 28 2004 Andrew Cagney <cagney@redhat.com> - 1.200400607.12
+- Import wild frame ID patch.  Stops GDB incorrectly matching invalid
+  frame IDs.
+- Disable bigcore on ia64 and amd64.
+
+* Fri Jun 25 2004 Andrew Cagney <cagney@redhat.com> - 1.200400607.11
+- Fix testsuite to kill attach process (from corrinna/mainline).
+- Fix build problems with vsyscall patch.
+
+* Fri Jun 25 2004 Andrew Cagney <cagney@redhat.com> - 1.200400607.10
+- Fix annotate test messages.
+- Recognize VSYSCALL pages.
+
+* Thu Jun 24 2004 Jeff Johnston <jjohnstn@redhat.com> - 1.200400607.9
+- Fix ia64 watchpoint support.
+
+* Wed Jun 23 2004 Andrew Cagney <cagney@redhat.com> - 1.200400607.8
+- Do not xfail signals on i387, convert KFAIL to FAIL and not XFAIL.
+
+* Wed Jun 23 2004 Andrew Cagney <cagney@redhat.com> - 1.200400607.7
+- Fix to ppc64 unwinder - handle glibcs function within syscall
+  function hack.
+- Update sigbpt.exp, ena-dis-br.exp observer.exp signull.exp,
+  step-test.exp and sizeof.exp, so that test names are architecture
+  clean.
+- Disable bigcore.exp on PowerPC 64.
+
+* Tue Jun 22 2004 Andrew Cagney <cagney@redhat.com> - 1.200400607.6
+- Merge in mainline testsuite changes up to 2004-06-21.
+- Re-implement 32 and 64-bit PPC signal trampolines.
+- Check i386 and amd64 signal trampolines before dwarf2.
+- Allow tramp-frame when there is a symbol.
+- Test interaction between single-step, breakpoint and signal.
+- ABI: Fix PPC64 function parameters, sizeof long-double, and enum
+  return values.
+
+* Mon Jun 21 2004 Elena Zannoni <ezannoni@redhat.com> - 1.200400607.5
+- Fix sed line for gz info files.
+
+* Mon Jun 21 2004 Andrew Cagney <cagney@redhat.com> - 1.200400607.4
+- Tar/uuencode both the .sum and .log test results.
+
+* Tue Jun 15 2004 Elena Zannoni <ezannoni@redhat.com> - 0.200400607.3
+- Remove installation of mmalloc, and its info files.
+- Add hack to deal with differring info files generated by makeinfo.
+- Restore release number convention.
+
+* Tue Jun 15 2004 Elliot Lee <sopwith@redhat.com>
+- rebuilt
+
+* Thu Jun 10 2004 Elena Zannoni <ezannoni@redhat.com> - 0.200400607.2
+- Fix Requires and BuildRequires for libunwind dependencies.
+- Add patch to silence gcc3.4 warnings.
+
+* Wed Jun 09 2004 Elena Zannoni <ezannoni@redhat.com> - 0.200400607.1
+- New import: revamp everything. Remove all patches for now.
+- Update the Requires and BuildRequires sections.
+- Removed stupid Ada testcases (there is no ada support in gdb yet).
+
+* Mon May 10 2004 Elena Zannoni <ezannoni@redhat.com> - 0.20040223.20
+- Disable PIE again.
+- obsolete gdb64 only if on ppc64.
+
+* Mon May 03 2004 Jeff Johnston <jjohnstn@redhat.com> - 0.20040223.19
+- Add -u parameter to build ChangeLog patch.
+
+* Mon May 03 2004 Jeff Johnston <jjohnstn@redhat.com> - 0.20040223.18
+- Update thread fix made for .6 release to FSF version.
+
+* Thu Apr 22 2004 Elena Zannoni <ezannoni@redhat.com> - 0.20040223.17
+- Disable PIE again.
+
+* Thu Apr 22 2004 Jeff Johnston <jjohnstn@redhat.com> - 0.20040223.16
+- Bump version number.
+
+* Wed Apr 21 2004 Jeff Johnston <jjohnstn@redhat.com> - 0.20040223.15
+- fix ia64 info frame command
+- also fix ia64 tdep file for which elf header file to include
+
+* Tue Mar 30 2004 Elena Zannoni <ezannoni@redhat.com> - 0.20040223.14
+- re-enable pie.
+
+* Tue Mar 30 2004 Elena Zannoni <ezannoni@redhat.com> - 0.20040223.13
+- Fix testsuite glitches.
+
+* Wed Mar 24 2004 Elena Zannoni <ezannoni@redhat.com> - 0.20040223.12
+- Fix typo.
+
+* Wed Mar 24 2004 Elena Zannoni <ezannoni@redhat.com> - 0.20040223.11
+- Make gdb compile w/o warnings with gcc-3.4.
+- Reenable PIE support code.
+
+* Tue Mar 23 2004 Elena Zannoni <ezannoni@redhat.com> - 0.20040223.10
+- Bump version number
+
+* Tue Mar 23 2004 Elena Zannoni <ezannoni@redhat.com> - 0.20040223.9
+- temporarily disable PIE support.
+- Add section to obsolete gdb64 package.
+
+* Sun Mar 21 2004 Elena Zannoni <ezannoni@redhat.com> - 0.20040223.8
+- Add support for debugging of PIE executables.
+
+* Tue Mar 09 2004 Elena Zannoni <ezannoni@redhat.com> - 0.20040223.7
+- Bump version number.
+
+* Mon Mar 08 2004 Jeff Johnston <jjohnstn@redhat.com> - 0.20040223.6
+- Fix thread support to recognize new threads even when they reuse
+  tids of expired threads.  Also ensure that terminal is held by gdb
+  while determining if a thread-create event has occurred.
+
+* Mon Mar 08 2004 Andrew Cagney <cagney@redhat.com> - 0.20040223.5
+- Sync with 6.1 branch; eliminate all amd64 patches;
+  add more robust 32x64 PPC64 patches.
+
+* Tue Mar 02 2004 Elliot Lee <sopwith@redhat.com>
+- rebuilt
+
+* Tue Mar 2 2004 Andrew Cagney <cagney@redhat.com> - 0.20040223.4
+- 32x64 fixes that work with threads, replaced old
+  non-thread 32x64 patch, add nat patch.
+
+* Wed Feb 25 2004 Elena Zannoni <ezannoni@redhat.com> - 0.20040223.3
+- Add patch for x86_64 in 32 bit mode.
+
+* Wed Feb 25 2004 Elena Zannoni <ezannoni@redhat.com> - 0.20040223.2
+- Remove ppc64 hacks.
+- Refresh some patches.
+
+* Wed Feb 25 2004 Elena Zannoni <ezannoni@redhat.com> - 0.20040223.1
+- Import new gdb snapshot from mainline FSF.
+- Update patch list.
+
+* Tue Feb 17 2004 Jeff Johnston <jjohnstn@redhat.com> - 1.20031117.8
+- Switch ia64-tdep.c to use new abi used by libunwind-0.95 and up.
+- Fix gate area specification for ia64-linux-tdep.c.
+- Fix long double support for ia64.
+
+* Fri Feb 13 2004 Elliot Lee <sopwith@redhat.com>
+- rebuilt
+
+* Thu Jan 08 2004 Elena Zannoni <ezannoni@redhat.com> - 0.20031117.7
+- Add fixes for ppc32 support on ppc64 platform, from Andrew Cagney.
+
+* Tue Jan 06 2004 Elena Zannoni <ezannoni@redhat.com> - 0.20031117.6
+- Add patch to have unique binary names in the testsuite.
+- Disable s390/s390x pthread.exp test (FIXME)
+- Don't install any info files for the ppc platform. Let's take them
+  from the ppc64 one (or we get install conflicts).
+- Remove generated info files from the source tree. They are generated
+  as part of the FSF snapshot process.
+
+* Mon Nov 24 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20031117.5
+- Add patches from old rpm for i386 support on x86_64.
+- Add build dependency on libunwind for ia64.
+
+* Fri Nov 21 2003 Jeremy Katz <katzj@redhat.com> - 0.20031117.4
+- more rpm tricks to get the gdb64 package happier
+
+* Thu Nov 20 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20031117.3
+- Add sick and twisted workaround for ppc64 architecture.
+
+* Wed Nov 19 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20031117.2
+- Fix typo in libunwind test.
+
+* Tue Nov 18 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20031117.1
+- Import new gdb snapshot from mainline FSF.
+- Fix some testfiles.
+- Add fixes for gcore, and patch for libunwind support on ia64.
+- Add tests to see what versions of gcc, binutils, glibc and kernel we
+  are running with.
+
+* Wed Oct 15 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20030710.41
+- Bump up version number.
+
+* Wed Sep 24 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20030710.40
+- Fix problem with gcore and single threaded programs. (bugzilla 103531)
+
+* Mon Sep 22 2003 Jeff Johnston <jjohnstn@redhat.com> - 0.20030710.39
+- Fix call to quit_target from quit_force.
+
+* Sun Sep 21 2003 Andrew Cagney <cagney@redhat.com> - 0.20030710.38
+- Fix PPC64 push dummy call.
+- Re-fix PPC64 return value (had wrong / old patch).
+
+* Sat Sep 20 2003 Andrew Cagney <cagney@redhat.com> - 0.20030710.37
+- Fix PPC32 return values.
+
+* Sat Sep 20 2003 Andrew Cagney <cagney@redhat.com> - 0.20030710.36
+- Rewrite ppc64 retun value methods so that they (hopefully)
+match the SysV spec.
+- Enable ppc64 testsuite.
+
+* Thu Sep 18 2003 Andrew Cagney <cagney@redhat.com> - 0.20030710.35
+- Hack around problem "break main" vs "break .main" when there is
+only a minimal ppc64 symbol table.  The former is a function descriptor
+and not where you want the breakpoint to go.  Only convert descriptors
+to pointers when the address is in the ".opd" section.
+
+* Wed Sep 17 2003 Andrew Cagney <cagney@redhat.com> - 0.20030710.34
+- Fix ppc32 push_dummy_call.
+
+* Tue Sep 16 2003 Andrew Cagney <cagney@redhat.com> - 0.20030710.33
+- Pack gdb.sum and gdb.log using uuencode and bzip.
+
+* Tue Sep 16 2003 Jeff Johnston <jjohnstn@redhat.com> - 0.20030710.32
+- Catch errors when quitting so exit of gdb still occurs.
+
+* Mon Sep 15 2003 Andrew Cagney <cagney@redhat.com> - 0.20030710.31
+- Fix ppc32 use_struct_convention.
+
+* Thu Sep 11 2003 Andrew Cagney <cagney@redhat.com> - 0.20030710.30
+- Mods to dwarf2-frame.c to work around a lack of GCC/CFI info.
+
+* Thu Sep 11 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20030710.29
+- Bump up version number.
+
+* Wed Sep 10 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20030710.28
+- Fix a core dump with MI.
+- Add new ChangeLog patch for mi changes.
+
+* Thu Sep 04 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20030710.27
+- Change the name of the package to gdb64 in ppc64 case.
+
+* Tue Aug 26 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20030710.26
+- Add testcase for separate debug info.
+
+* Tue Aug 26 2003 Andrew Cagney <cagney@redhat.com> - 0.20030710.25
+- fix i386 on x86-64 TLS
+- add "base-aug2003" suffix to older x86i386 patch
+
+* Tue Aug 26 2003 Andrew Cagney <cagney@redhat.com> - 0.20030710.24
+- skip the ppc64 and x86-64 frame redzone.
+
+* Fri Aug 22 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20030710.23
+- Relax one testcase in selftest.exp a bit.
+- Accept different output as well in thread bt (platform dependent).
+- Enable testsuite run for ia64, ppc, s390 and s390x. They are in
+  reasonably good shape.
+
+* Thu Aug 21 2003 Jeff Johnston <jjohnstn@redhat.com> - 0.20030710.22
+- Multiple ia64 fixes.
+- Fix ia64 printing of function pointers.
+- Fix ia64 prologue examination to ignore predicated insns if we
+  haven't found the return address yet.
+- Skip dump.exp testcase for ia64
+
+* Thu Aug 21 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20030710.21
+- Bump release number.
+
+* Wed Aug 20 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20030710.20
+- Relax pattern in annota2.exp test.
+
+* Wed Aug 20 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20030710.19
+- rename gdb binary to gdb64 for ppc64 platform.
+
+* Tue Aug 19 2003 Jeff Johnston <jjohnstn@redhat.com> - 0.20030710.18
+- Fix ia64 pc unwinding to include psr slot.
+
+* Mon Aug 18 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20030710.17
+- Fix info installation for annotate.texi. (Bugzilla 102521)
+
+* Fri Aug 15 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20030710.16
+- revamp tls tests a bit.
+- Handle new output from gdb in relocate.exp
+
+* Wed Aug 13 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20030710.15
+- Fix problem for processing of separate debug info files.
+
+* Wed Aug 13 2003 Jeff Johnston <jjohnstn@redhat.com> - 0.20030710.14
+- add ia64.inc file for testing ia64 in gdb.asm testsuite
+
+* Fri Aug 8 2003 Andrew Cagney <cagney@redhat.com> - 0.20030710.13
+- print the libthread_db library path, print when threads are enabled
+
+* Thu Aug 7 2003 Andrew Cagney <cagney@redhat.com> - 0.20030710.12
+- "cat" the test log into the build log
+
+* Wed Aug 06 2003 Jeff Johnston <jjohnstn@redhat.com> - 0.20030710.11
+- modernize ia64 gdb to use new frame model
+- remove/replace deprecated interfaces used by ia64 gdb
+
+* Wed Aug 06 2003 Andrew Cagney <cagney@redhat.com> - 0.20030710.10
+- Sync to gdb-5.3.90-sync-20030806.patch.
+
+* Tue Jul 29 2003 Andrew Cagney <cagney@redhat.com> - 0.20030710.9
+- add x86-64 i386 fixes
+
+* Tue Jul 29 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20030710.8
+- Fix some tests by xfailing the correct target triplet for RedHat.
+- Remove include of config.h from pthreads.c testcases.
+
+* Mon Jul 28 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20030710.7
+- Fix some test failures, by escaping correctly.
+
+* Thu Jul 24 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20030710.6
+- Remove one testcase that is redundant.
+
+* Wed Jul 23 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20030710.5
+- Bump up release number.
+
+* Wed Jul 23 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20030710.4
+- Bring in sync with current head of gdb-6 branch.
+- Remove linespec patch, because included in the new sync patch.
+
+* Fri Jul 18 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20030710.3
+- Add patch to avoid gdb segfault with bad debug info.
+- Change location of build tree to avoid conflicts with older versions
+  possibly installed.
+
+* Thu Jul 17 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20030710.2
+- Add patch to synchronize the current snapshot with the gdb-6 branch head.
+- Remove some patches that are includd in such diff.
+- Enable tests on AMD64 as well.
+
+* Fri Jul 11 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20030710.1
+- Import new gdb snapshot.
+- Revamp gdb.spec. Get rid of patches that apply to older versions.
+- Add patches for ppc64 support, kfail and make gdb more robust in copingi
+  with bad debug info.
+
+* Wed Jul 02 2003 Jeff Johnston <jjohnstn@redhat.com> - 1.20021129.39
+- Fix bug with ia64 checking of hardware breakpoints.
+
+* Mon Jun 30 2003 Elena Zannoni <ezannoni@redhat.com> - 1.20021129.38
+- Add necessary function for NPTL support on x86-64.
+
+* Wed Jun 04 2003 Elliot Lee <sopwith@redhat.com>
+- rebuilt
+
+* Wed Jun 04 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20021129.37
+* Tue Jun 03 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20021129.36
+- Enable warnings for x86_64, not x86-64.
+- Fix warnings from infptrace.c and dwarfread.c.
+- Print error message only when reading separate debug info really
+  doesn't work (jimb@redhat.com).
+
+* Fri May 23 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20021129.35
+- Fixes for fetching and storing access registers on s390x (jimb@redhat.com).
+  Bugzilla 91455.
+
+* Wed May 21 2003 Jeff Johnston <jjohnstn@redhat.com> - 0.20021129.34
+- Do not generate error on detach failure.  Bugzilla 90900.
+
+* Thu May 8 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20021129.33
+- New tests for asm on s390x (jimb@redhat.com). Bugzilla 90503.
+- Fixes for prologue analysis on s390x (jimb@redhat.com). Bugzilla 90506.
+- bfd fix for 64-bit platforms (jimb@redhat.com).
+- Disable ppc64 builds until we have a port.
+
+* Thu May 1 2003 Jeff Johnston <jjohnstn@redhat.com> - 0.20021129.32
+- Add ia64 support to the float.exp testcase.
+
+* Thu May 1 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20021129.31
+- Clean up the tls tests some more.
+- Fix problem with non US-eng locale. Bugzilla bug 88823.
+
+* Wed Apr 30 2003 Jeff Johnston <jjohnstn@redhat.com> - 0.20021129.30
+- Fix ia64 prologue skipping.
+- Fix ia64 line table.
+- Fix setting of prev_pc in infrun.c.
+
+* Mon Mar 31 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20021129.29
+- Include the gcore script, as gdb_gcore.sh and install it in
+  /usr/bin as gcore.
+- One more disassembly fix for core files. Added to
+  gdb-5.3post-disasm-mar2003.patch. Bugzilla 87677.
+- Enable build warnings for x86-64.
+
+* Mon Mar 31 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20021129.28
+- Fix Java strings printing.
+- Fix memory corruption in disassembly code. Bugzilla 85644.
+- Testsuite fixes (jimb@redhat.com). Bugzilla 85457.
+- Fixes for s390 stack handling (jimb@redhat.com). Bugzilla 85039.
+- Fixes for s390 struct return (jimb@redhat.com).
+
+* Wed Mar 26 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20021129.27
+- Fixes for disassembly of code in threaded applications. Bugzilla 87495.
+- Fixes for s390 prologue analysis. (jimb@redhat.com).
+  Bugzilla bugs 85251, 85214.
+
+* Thu Mar 20 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20021129.26
+- Fix inferior function calls with void return on x86-64. Bugzilla bug 83197.
+- Fix for upstream PR/699.
+- Fix some problems with gdb-5.3post-thrtst-feb2003.patch.
+
+* Wed Mar 19 2003 Jeff Johnston <jjohnstn@redhat.com> - 0.20021129.25
+- Fix for thread-db.c: check_event() - Bugzilla bug 86231.
+
+* Fri Mar 14 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20021129.24
+- Fix some problems with inferior function calls on x86-64.
+
+* Fri Mar 07 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20021129.23
+- testsuite patches. Bugzilla 85215 85028 85335.
+
+* Thu Mar 06 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20021129.22
+- Fix testsuite problems related to having '+' in the directory name.
+  Bugzilla 85031.
+
+* Mon Mar 03 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20021129.21
+- Fix a few inferior function call problems.
+
+* Mon Mar 03 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20021129.20
+- Split the changelog patches in two. Cleanup messy patch section.
+
+* Thu Feb 27 2003 Jeff Johnston <jjohnstn@redhat.com> - 0.20021129.19
+- Perform run-time check for tkill syscall in lin-lwp.c.
+
+* Mon Feb 24 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20021129.18
+- Update copyright year printed in version.
+
+* Mon Feb 24 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20021129.17
+- Refresh build.
+
+* Mon Feb 24 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20021129.16
+- Add some testsuite cleanups, to avoid spurious test failures.
+
+* Fri Feb 21 2003 Jeff Johnston <jjohnstn@redhat.com> - 0.20021129.15
+- Add patch to handle thread exiting when LD_ASSUME_KERNEL=2.4.1 which
+  fixes Bugzilla bug 84217.
+
+* Fri Feb 21 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20021129.14
+- New patch to fix disassembly on s390. Bugzilla bug 84286.
+- New patch for attach/ptrace fix. Bugzilla bug 84220.
+- Reenable tests for x86.
+
+* Thu Feb 20 2003 Jeff Johnston <jjohnstn@redhat.com> - 0.20021129.13
+- Add patch for mixed stabs with dwarf2 - bugzilla bug 84253.
+
+* Wed Feb 12 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20021129.12
+- Disable tests also for x86.
+
+* Tue Feb 11 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20021129.11
+- Add patch for mi threads tests.
+- Add patch for dwarf2 debug_ranges section.
+- Add patch for detach bug.
+
+* Mon Feb 10 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20021129.10
+- Add patch for testsuite auto answering internal error queries.
+- Add new TLS tests.
+- Add cleanup patches for thread tests.
+
+* Mon Feb 03 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20021129.9
+- Add new patch for thread support. Apply on all arches.
+- Do not apply old patches, but leave them around for now.
+- Add new patch for dwarf2 debug info reading.
+- Add new patch for dwarf2 cfi engine cleanup.
+- Add new patch for uiout problems.
+- Add new patch for s390 build.
+- Disable tests on all platforms but x86.
+
+* Mon Jan 27 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20021129.8
+- Move all the changelog entries to a single patch.
+- Add tests to the args patch.
+- Add new patch for until command fix (bugzilla Bug 19890).
+- s390 and s390x can be built with -Werror.
+- Run make check for s390 and s390x too.
+- Include an updated version of the thread nptl patch (still WIP).
+
+* Wed Jan 15 2003 Phil Knirsch <pknirsch@redhat.com> - 0.20021129.7
+- Apply the 2nd misc patch for s390 and s390x, too.
+
+* Tue Jan 14 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20021129.6
+- Add patches for NPTL support, to be applied on i386 only.
+  (this is still WIP)
+- Split old misc patch in two parts.
+- Temporarily disable testsuite run on alpha.
+
+* Sun Jan 12 2003 Elena Zannoni <ezannoni@redhat.com> - 0.20021129.5
+- Add patch for --args with zero-length arguments. Fix for bug 79833.
+
+* Tue Dec 17 2002 Elliot Lee <sopwith@redhat.com> - 0.20021129.4
+- The define directive to rpm is significant even if the line it is
+  in happens to start with a '#' character. Fixed.
+
+* Fri Dec 13 2002 Elena Zannoni <ezannoni@redhat.com> - 0.20021129.3
+- Merge previous patches for warnings into a single one.
+- Add changelogs to patches.
+- Add, but don't use, a macro to avoid stripping.
+
+* Fri Dec  6 2002 Elena Zannoni <ezannoni@redhat.com>
+- Add patch to allow debugging of executables with debug info stored
+  in separate files.
+- Add patch for Makefile dependencies and disable warnings for
+  building thread-db.c.
+- Re-enable building with -Werror for alpha, ia64, ppc.
+
+* Mon Dec  2 2002 Elena Zannoni <ezannoni@redhat.com>
+- Don't pass to gdb an empty build warnings flag, or that will disable warnings
+  completely. We want to build using gdb's standard warnings instead.
+
+* Mon Dec  2 2002 Elena Zannoni <ezannoni@redhat.com>
+- Don't do testing for x86_64.
+
+* Sun Dec  1 2002 Elena Zannoni <ezannoni@redhat.com>
+- x86_64 doesn't build with Werror yet.
+- Add patch for alpha.
+- Alpha doesn't build with -Werror either.
+- Add patch for ia64.
+- Add patch for ppc.
+- Drop ia64 from -Werror list.
+- Drop ppc from -Werror list.
+
+* Sun Dec  1 2002 Elena Zannoni <ezannoni@redhat.com>
+- Add dejagnu to the build requirements.
+- Enable make check.
+- Add enable-gdb-build-warnings to the configure flags.
+
+* Fri Nov 29 2002 Elena Zannoni <ezannoni@redhat.com>
+- Import new upstream sources.
+- Change version and release strings.
+- Upgrade patches.
+- Build gdb/gdbserver as well.
+- Define and use 'cvsdate'.
+- Do %%setup specifying the source directory name.
+- Don't cd up one dir before removing tcl and friends.
+- Change the configure command to allow for the new source tree name.
+- Ditto for the copy of NEWS.
+- Add some comments.
+
+* Mon Nov 25 2002 Elena Zannoni <ezannoni@redhat.com> 5.2.1-5
+General revamp.
+- Add patch for gdb/doc/Makefile.in. Part of fix for bug 77615.
+- Add patch for mmalloc/Makefile.in. Part of fix for bug 77615.
+- Change string printed in version.in to <version>-<release>rh.
+- Move the deletion of dejagnu, expect, tcl to the prep section,
+  from the build section.
+- Add build directory housekeeping to build section.
+- Use macros for configure parameters.
+- Do the build in a separate directory.
+- Prepare for testing, but not enable it yet.
+- Correctly copy the NEWS file to the top level directory, for the doc
+  section to find it.
+- Cd to build directory before doing install.
+- Use makeinstall macro, w/o options.
+- Remove workaround for broken gdb info files. Part of fix for bug 77615.
+- Remove share/locale directory, it is in binutils.
+- Remove info/dir file.
+- Clarify meaning of post-install section.
+- Add gdbint info files to post-install, pre-uninstall and files sections.
+  Part of fix for bugs 77615, 76423.
+- Add libmmalloc.a to package.
+
+* Fri Aug 23 2002 Florian La Roche <Florian.LaRoche@redhat.de>
+- added mainframe patch from developerworks
+
+* Wed Aug 21 2002 Trond Eivind Glomsrod <teg@redhat.com> 5.2.1-3
+- Add changelogs to the previous patch
+
+* Wed Aug 14 2002 Trond Eivind Glomsrod <teg@redhat.com> 5.2.1-2
+- Add some patches from Elena Zannoni <ezannoni@redhat.com>
+
+* Tue Jul 23 2002 Trond Eivind Glomsrod <teg@redhat.com> 5.2.1-1
+- 5.2.1
+
+* Mon Jul 22 2002 Florian La Roche <Florian.LaRoche@redhat.de>
+- compile on mainframe
+
+* Mon Jul  8 2002 Trond Eivind Glomsrod <teg@redhat.com> 5.2-3
+- Rebuild
+
+* Tue May  7 2002 Trond Eivind Glomsrod <teg@redhat.com> 5.2-2
+- Rebuild
+
+* Mon Apr 29 2002 Trond Eivind Glomsrod <teg@redhat.com> 5.2-1
+- 5.2
+
+* Mon Apr 29 2002 Trond Eivind Glomsrod <teg@redhat.com> 5.1.92-1
+- 5.1.92. Hopefully identical to 5.2 final
+
+* Mon Apr 22 2002 Trond Eivind Glomsrod <teg@redhat.com> 5.1.91-1
+- 5.1.91. 5.2 expected in a week
+
+* Thu Mar 28 2002 Trond Eivind Glomsrod <teg@redhat.com> 5.1.90CVS-5
+- Update to current
+
+* Thu Mar 28 2002 Trond Eivind Glomsrod <teg@redhat.com> 5.1.90CVS-4
+- Update to current
+
+* Thu Mar 28 2002 Trond Eivind Glomsrod <teg@redhat.com> 5.1.90CVS-3
+- Update to current
+
+* Wed Mar 20 2002 Trond Eivind Glomsrod <teg@redhat.com> 5.1.90CVS-2
+- Update to current
+
+* Wed Mar 13 2002 Trond Eivind Glomsrod <teg@redhat.com> 5.1.90CVS-1
+- Update to current 5.2 branch
+
+* Thu Jan 24 2002 Trond Eivind Glomsrod <teg@redhat.com> 5.1.1-1
+- 5.1.1
+- add URL
+
+* Wed Jan 09 2002 Tim Powers <timp@redhat.com>
+- automated rebuild
+
+* Mon Dec 10 2001 Trond Eivind Glomsrod <teg@redhat.com> 5.1-2
+- Fix some thread+fpu problems
+
+* Mon Nov 26 2001 Trond Eivind Glomsrod <teg@redhat.com> 5.1-1
+- 5.1
+
+* Mon Nov 19 2001 Trond Eivind Glomsrod <teg@redhat.com> 5.0.94-0.71
+- 5.0.94. Almost there....
+
+* Mon Nov 12 2001 Trond Eivind Glomsrod <teg@redhat.com> 5.0.93-2
+- Add patch from jakub@redhat.com to improve handling of DWARF
+
+* Mon Nov 12 2001 Trond Eivind Glomsrod <teg@redhat.com> 5.0.93-1
+- 5.0.93
+- handle missing info pages in post/pre scripts
+
+* Wed Oct 31 2001 Trond Eivind Glomsrod <teg@redhat.com> 5.0.92-1
+- 5.0.92
+
+* Fri Oct 26 2001 Trond Eivind Glomsrod <teg@redhat.com> 5.0.91rh-1
+- New snapshot
+- Use the 5.0.91 versioning from the snapshot
+
+* Wed Oct 17 2001 Trond Eivind Glomsrod <teg@redhat.com> 5.0rh-17
+- New snapshot
+
+* Thu Sep 27 2001 Trond Eivind Glomsrod <teg@redhat.com>
+- New snapshot
+
+* Wed Sep 12 2001 Trond Eivind Glomsrod <teg@redhat.com> 5.0rh-16
+- New snapshot
+
+* Mon Aug 13 2001 Trond Eivind Glomsrod <teg@redhat.com> 5.0rh-15
+- Don't buildrequire compat-glibc (#51690)
+
+* Thu Aug  9 2001 Trond Eivind Glomsrod <teg@redhat.com>
+- New snapshot, from the stable branch eventually leading to gdb 5.1
+
+* Mon Jul 30 2001 Trond Eivind Glomsrod <teg@redhat.com>
+- s/Copyright/License/
+- Add texinfo to BuildRequires
+
+* Mon Jun 25 2001 Trond Eivind Glomsrod <teg@redhat.com>
+- New snapshot
+
+* Fri Jun 15 2001 Trond Eivind Glomsrod <teg@redhat.com>
+- New snapshot
+- Add ncurses-devel to buildprereq
+- Remove perl from buildprereq, as gdb changed the way
+  version strings are generated
+
+* Thu Jun 14 2001 Trond Eivind Glomsrod <teg@redhat.com>
+- New snapshot
+
+* Wed May 16 2001 Trond Eivind Glomsrod <teg@redhat.com>
+- New snapshot - this had thread fixes for curing #39070
+- New way of specifying version
+
+* Tue May  1 2001 Trond Eivind Glomsrod <teg@redhat.com>
+- New tarball
+- Kevin's patch is now part of gdb
+
+* Mon Apr  9 2001 Trond Eivind Glomsrod <teg@redhat.com>
+- Add patch from kevinb@redhat.com to fix floating point + thread
+  problem (#24310)
+- remove old workarounds
+- new snapshot
+
+* Thu Apr  5 2001 Trond Eivind Glomsrod <teg@redhat.com>
+- New snapshot
+
+* Sat Mar 17 2001 Bill Nottingham <notting@redhat.com>
+- on ia64, there are no old headers :)
+
+* Fri Mar 16 2001 Trond Eivind Glomsrod <teg@redhat.com>
+- build with old headers, new compiler
+
+* Fri Mar 16 2001 Trond Eivind Glomsrod <teg@redhat.com>
+- new snapshot
+
+* Mon Feb 26 2001 Trond Eivind Glomsrod <teg@redhat.com>
+- new snapshot which should fix some more IA64 problems (#29151)
+- remove IA64 patch, it's now integrated
+
+* Wed Feb 21 2001 Trond Eivind Glomsrod <teg@redhat.com>
+- add IA64 and Alpha patches from Kevin Buettner <kevinb@redhat.com>
+- use perl instead of patch for fixing the version string
+
+* Tue Feb 20 2001 Trond Eivind Glomsrod <teg@redhat.com>
+- don't use kgcc anymore
+- mark it as our own version
+- new snapshot
+
+* Mon Jan 22 2001 Bernhard Rosenkraenzer <bero@redhat.com>
+- Link with ncurses 5.x even though we're using kgcc.
+  No need to drag in requirements on ncurses4 (Bug #24445)
+
+* Fri Jan 19 2001 Trond Eivind Glomsrod <teg@redhat.com>
+- new snapshot
+
+* Wed Dec 20 2000 Trond Eivind Glomsrod <teg@redhat.com>
+- new snapshot
+
+* Mon Dec 04 2000 Trond Eivind Glomsrod <teg@redhat.com>
+- new snapshot
+- new alpha patch - it now compiles everywhere. Finally.
+
+* Fri Dec 01 2000 Trond Eivind Glomsrod <teg@redhat.com>
+- new snapshot
+
+* Mon Nov 20 2000 Trond Eivind Glomsrod <teg@redhat.com>
+- new CVS snapshot
+- disable the patches
+- don't use %%configure, as it confuses the autoconf script
+- enable SPARC, disable Alpha
+
+
+* Wed Aug 09 2000 Trond Eivind Glomsrod <teg@redhat.com>
+- added patch from GDB team for C++ symbol handling
+
+* Tue Jul 25 2000 Trond Eivind Glomsrod <teg@redhat.com>
+- upgrade to CVS snapshot
+- excludearch SPARC, build on IA61
+
+* Wed Jul 19 2000 Trond Eivind Glomsrod <teg@redhat.com>
+- rebuild
+
+* Thu Jul 13 2000 Prospector <bugzilla@redhat.com>
+- automatic rebuild
+
+* Sun Jul 02 2000 Trond Eivind Glomsrod <teg@redhat.com>
+- rebuild
+
+* Thu Jun 08 2000 Trond Eivind Glomsrod <teg@redhat.com>
+- use %%configure, %%makeinstall, %%{_infodir}, %%{_mandir},
+  and %%{_tmppath}
+- the install scripts  for info are broken(they don't care about
+  you specify in the installstep), work around that.
+- don't build for IA64
+
+* Mon May 22 2000 Trond Eivind Glomsrod <teg@redhat.com>
+- upgraded to 5.0 - dump all patches. Reapply later if needed.
+- added the NEWS file to the %%doc files
+- don't delete files which doesn't get installed (readline, texinfo)
+- let build system handle stripping and gzipping
+- don't delete libmmalloc
+- apply patch from jakub@redhat.com to make it build on SPARC
+
+* Fri Apr 28 2000 Matt Wilson <msw@redhat.com>
+- rebuilt against new ncurses
+
+* Tue Mar  7 2000 Jeff Johnson <jbj@redhat.com>
+- rebuild for sparc baud rates > 38400.
+
+* Tue Feb  8 2000 Jakub Jelinek <jakub@redhat.com>
+- fix core file handling on i386 with glibc 2.1.3 headers
+
+* Fri Jan 14 2000 Jakub Jelinek <jakub@redhat.com>
+- fix reading registers from core on sparc.
+- hack around build problems on i386 with glibc 2.1.3 headers
+
+* Thu Oct 7 1999 Jim Kingdon
+- List files to install in /usr/info specifically (so we don't pick up
+things like info.info from GDB snapshots).
+
+* Thu Oct 7 1999 Jim Kingdon
+- Update GDB to 19991004 snapshot.  This eliminates the need for the
+sigtramp, sparc, xref, and threads patches.  Update sparcmin patch.
+
+* Mon Aug 23 1999 Jim Kingdon
+- Omit readline manpage.
+
+* Sat Aug  7 1999 Jim Kingdon
+- Remove H.J. Lu's patches (they had been commented out).
+- Add sigtramp patch (from gdb.cygnus.com) and threads patch (adapted
+from code fusion CD-ROM).
+
+* Wed Apr 14 1999 Jeff Johnson <jbj@redhat.com>
+- merge H.J. Lu's patches into 4.18.
+
+* Mon Apr 05 1999 Cristian Gafton <gafton@redhat.com>
+- updated the kern22 patch with stuff from davem
+
+* Thu Apr  1 1999 Jeff Johnson <jbj@redhat.com>
+- sparc with 2.2 kernels no longer uses sunos ptrace (davem)
+
+* Sun Mar 21 1999 Cristian Gafton <gafton@redhat.com>
+- auto rebuild in the new build environment (release 3)
+
+* Mon Mar  8 1999 Jeff Johnson <jbj@redhat.com>
+- Sparc fiddles for Red Hat 6.0.