Rebase to FSF GDB 8.2.50.20181010 (8.3pre).

Remove 'gdb-6.8-sparc64-silence-memcpy-check.patch'.
Remove 'gdb-7.2.50-sparc-add-workaround-to-broken-debug-files.patch'.
This commit is contained in:
Sergio Durigan Junior 2018-10-10 18:37:53 -04:00
parent a3b5cf46c2
commit d82716127f
19 changed files with 129 additions and 233 deletions

2
.gitignore vendored
View File

@ -1,3 +1,3 @@
/gdb-libstdc++-v3-python-8.1.1-20180626.tar.xz
/v2.0.tar.gz
/gdb-8.2.50.20181006.tar.xz
/gdb-8.2.50.20181010.tar.xz

View File

@ -180,328 +180,310 @@ Patch044: gdb-6.3-focus-cmd-prev-test.patch
#=fedoratest
Patch045: 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.
Patch046: gdb-6.8-sparc64-silence-memcpy-check.patch
# Test a crash on libraries missing the .text section.
#=fedoratest
Patch047: gdb-6.5-section-num-fixup-test.patch
Patch046: gdb-6.5-section-num-fixup-test.patch
# Fix register assignments with no GDB stack frames (BZ 436037).
#=push+jan: This fix is incorrect.
Patch048: gdb-6.8-bz436037-reg-no-longer-active.patch
Patch047: gdb-6.8-bz436037-reg-no-longer-active.patch
# Test the watchpoints conditionals works.
#=fedoratest
Patch049: gdb-6.8-watchpoint-conditionals-test.patch
Patch048: gdb-6.8-watchpoint-conditionals-test.patch
# Fix resolving of variables at locations lists in prelinked libs (BZ 466901).
#=fedoratest
Patch050: gdb-6.8-bz466901-backtrace-full-prelinked.patch
Patch049: gdb-6.8-bz466901-backtrace-full-prelinked.patch
# New test for step-resume breakpoint placed in multiple threads at once.
#=fedoratest
Patch051: gdb-simultaneous-step-resume-breakpoint-test.patch
Patch050: 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@.*>
Patch052: gdb-core-open-vdso-warning.patch
Patch051: gdb-core-open-vdso-warning.patch
# Fix syscall restarts for amd64->i386 biarch.
#=push+jan
Patch053: gdb-x86_64-i386-syscall-restart.patch
Patch052: gdb-x86_64-i386-syscall-restart.patch
# Fix stepping with OMP parallel Fortran sections (BZ 533176).
#=push+jan: It requires some better DWARF annotations.
Patch054: gdb-bz533176-fortran-omp-step.patch
Patch053: gdb-bz533176-fortran-omp-step.patch
# Fix regression by python on ia64 due to stale current frame.
#=push+jan
Patch055: gdb-follow-child-stale-parent.patch
Patch054: 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.
Patch056: gdb-ccache-workaround.patch
Patch055: gdb-ccache-workaround.patch
#=push+jan: May get obsoleted by Tom's unrelocated objfiles patch.
Patch057: gdb-archer-pie-addons.patch
Patch056: gdb-archer-pie-addons.patch
#=push+jan: Breakpoints disabling matching should not be based on address.
Patch058: gdb-archer-pie-addons-keep-disabled.patch
Patch057: gdb-archer-pie-addons-keep-disabled.patch
# Testcase for "Do not make up line information" fix by Daniel Jacobowitz.
#=fedoratest
Patch059: gdb-lineno-makeup-test.patch
Patch058: gdb-lineno-makeup-test.patch
# Test power7 ppc disassembly.
#=fedoratest
Patch060: gdb-ppc-power7-test.patch
Patch059: 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.
Patch061: gdb-bz541866-rwatch-before-run.patch
Patch060: 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.
Patch062: gdb-moribund-utrace-workaround.patch
Patch061: gdb-moribund-utrace-workaround.patch
# Fix follow-exec for C++ programs (bugreported by Martin Stransky).
#=fedoratest
Patch063: gdb-archer-next-over-throw-cxx-exec.patch
Patch062: gdb-archer-next-over-throw-cxx-exec.patch
# Backport DWARF-4 support (BZ 601887, Tom Tromey).
#=fedoratest
Patch064: gdb-bz601887-dwarf4-rh-test.patch
Patch063: gdb-bz601887-dwarf4-rh-test.patch
#=push+jan
Patch065: gdb-6.6-buildid-locate-core-as-arg.patch
Patch064: gdb-6.6-buildid-locate-core-as-arg.patch
# Workaround librpm BZ 643031 due to its unexpected exit() calls (BZ 642879).
#=push+jan
Patch066: gdb-6.6-buildid-locate-rpm-librpm-workaround.patch
Patch065: gdb-6.6-buildid-locate-rpm-librpm-workaround.patch
# [delayed-symfile] Test a backtrace regression on CFIs without DIE (BZ 614604).
#=fedoratest
Patch067: gdb-test-bt-cfi-without-die.patch
Patch066: 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.
Patch068: gdb-bz568248-oom-is-error.patch
Patch067: gdb-bz568248-oom-is-error.patch
# Verify GDB Python built-in function gdb.solib_address exists (BZ # 634108).
#=fedoratest
Patch069: gdb-bz634108-solib_address.patch
Patch068: gdb-bz634108-solib_address.patch
# New test gdb.arch/x86_64-pid0-core.exp for kernel PID 0 cores (BZ 611435).
#=fedoratest
Patch070: gdb-test-pid0-core.patch
Patch069: gdb-test-pid0-core.patch
# [archer-tromey-delayed-symfile] New test gdb.dwarf2/dw2-aranges.exp.
#=fedoratest
Patch071: gdb-test-dw2-aranges.patch
Patch070: gdb-test-dw2-aranges.patch
# [archer-keiths-expr-cumulative+upstream] Import C++ testcases.
#=fedoratest
Patch072: gdb-test-expr-cumulative-archer.patch
Patch071: gdb-test-expr-cumulative-archer.patch
# Fix regressions on C++ names resolving (PR 11734, PR 12273, Keith Seitz).
#=fedoratest
Patch073: gdb-physname-pr11734-test.patch
Patch072: gdb-physname-pr11734-test.patch
# Fix regressions on C++ names resolving (PR 11734, PR 12273, Keith Seitz).
#=fedoratest
Patch074: 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
Patch075: gdb-7.2.50-sparc-add-workaround-to-broken-debug-files.patch
Patch073: gdb-physname-pr12273-test.patch
# Test GDB opcodes/ disassembly of Intel Ivy Bridge instructions (BZ 696890).
#=fedoratest
Patch076: gdb-test-ivy-bridge.patch
Patch074: gdb-test-ivy-bridge.patch
# Hack for proper PIE run of the testsuite.
#=fedoratest
Patch077: gdb-runtest-pie-override.patch
Patch075: gdb-runtest-pie-override.patch
# Print reasons for failed attach/spawn incl. SELinux deny_ptrace (BZ 786878).
#=push+jan
Patch078: gdb-attach-fail-reasons-5of5.patch
Patch076: gdb-attach-fail-reasons-5of5.patch
# Workaround PR libc/14166 for inferior calls of strstr.
#=fedora: Compatibility with RHELs (unchecked which ones).
Patch079: gdb-glibc-strstr-workaround.patch
Patch077: gdb-glibc-strstr-workaround.patch
# Include testcase for `Unable to see a variable inside a module (XLF)' (BZ 823789).
#=fedoratest
Patch080: gdb-rhel5.9-testcase-xlf-var-inside-mod.patch
Patch078: gdb-rhel5.9-testcase-xlf-var-inside-mod.patch
# Testcase for `Setting solib-absolute-prefix breaks vDSO' (BZ 818343).
#=fedoratest
Patch081: gdb-rhbz-818343-set-solib-absolute-prefix-testcase.patch
Patch079: 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
Patch082: gdb-rhbz795424-bitpos-20of25.patch
Patch080: gdb-rhbz795424-bitpos-20of25.patch
# Fix `GDB cannot access struct member whose offset is larger than 256MB'
# (RH BZ 795424).
#=push
Patch083: gdb-rhbz795424-bitpos-21of25.patch
Patch081: gdb-rhbz795424-bitpos-21of25.patch
# Fix `GDB cannot access struct member whose offset is larger than 256MB'
# (RH BZ 795424).
#=push
Patch084: gdb-rhbz795424-bitpos-22of25.patch
Patch082: gdb-rhbz795424-bitpos-22of25.patch
# Fix `GDB cannot access struct member whose offset is larger than 256MB'
# (RH BZ 795424).
#=push
Patch085: gdb-rhbz795424-bitpos-23of25.patch
Patch083: gdb-rhbz795424-bitpos-23of25.patch
# Fix `GDB cannot access struct member whose offset is larger than 256MB'
# (RH BZ 795424).
#=push
Patch086: gdb-rhbz795424-bitpos-25of25.patch
Patch084: gdb-rhbz795424-bitpos-25of25.patch
# Fix `GDB cannot access struct member whose offset is larger than 256MB'
# (RH BZ 795424).
#=push
Patch087: gdb-rhbz795424-bitpos-25of25-test.patch
Patch085: gdb-rhbz795424-bitpos-25of25-test.patch
# Fix `GDB cannot access struct member whose offset is larger than 256MB'
# (RH BZ 795424).
#=push
Patch088: gdb-rhbz795424-bitpos-lazyvalue.patch
Patch086: 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
Patch089: gdb-rhbz947564-findvar-assertion-frame-failed-testcase.patch
Patch087: gdb-rhbz947564-findvar-assertion-frame-failed-testcase.patch
# Fix crash of -readnow /usr/lib/debug/usr/bin/gnatbind.debug (BZ 1069211).
#=push+jan
Patch090: gdb-gnat-dwarf-crash-3of3.patch
Patch088: gdb-gnat-dwarf-crash-3of3.patch
# Fix 'memory leak in infpy_read_memory()' (RH BZ 1007614)
#=fedoratest
Patch091: gdb-rhbz1007614-memleak-infpy_read_memory-test.patch
Patch089: 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
Patch092: gdb-6.6-buildid-locate-misleading-warning-missing-debuginfo-rhbz981154.patch
Patch090: gdb-6.6-buildid-locate-misleading-warning-missing-debuginfo-rhbz981154.patch
#=fedoratest
Patch093: gdb-archer-vla-tests.patch
Patch091: gdb-archer-vla-tests.patch
#=fedoratest
Patch094: gdb-vla-intel-tests.patch
Patch092: gdb-vla-intel-tests.patch
# Continue backtrace even if a frame filter throws an exception (Phil Muldoon).
#=push
Patch095: gdb-btrobust.patch
Patch093: gdb-btrobust.patch
# Display Fortran strings in backtraces.
#=fedoratest
Patch096: gdb-fortran-frame-string.patch
Patch094: gdb-fortran-frame-string.patch
# Fix Python GIL with gdb.execute("continue") (Phil Muldoon, BZ 1116957).
#=push
Patch097: gdb-python-gil.patch
Patch095: gdb-python-gil.patch
# Testcase for '[SAP] Recursive dlopen causes SAP HANA installer to
# crash.' (RH BZ 1156192).
#=fedoratest
Patch098: gdb-rhbz1156192-recursive-dlopen-test.patch
Patch096: gdb-rhbz1156192-recursive-dlopen-test.patch
# Fix jit-reader.h for multi-lib.
#=push+jan
Patch099: gdb-jit-reader-multilib.patch
Patch097: gdb-jit-reader-multilib.patch
# Fix '`catch syscall' doesn't work for parent after `fork' is called'
# (Philippe Waroquiers, RH BZ 1149205).
#=fedoratest
Patch100: gdb-rhbz1149205-catch-syscall-after-fork-test.patch
Patch098: 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
Patch101: gdb-rhbz1186476-internal-error-unqualified-name-re-set-test.patch
Patch099: gdb-rhbz1186476-internal-error-unqualified-name-re-set-test.patch
# Test 'info type-printers' Python error (RH BZ 1350436).
#=fedoratest
Patch102: gdb-rhbz1350436-type-printers-error.patch
Patch100: gdb-rhbz1350436-type-printers-error.patch
# Fix '[ppc64] and [s390x] wrong prologue skip on -O2 -g code' (Jan
# Kratochvil, RH BZ 1084404).
#=fedoratest
Patch103: gdb-rhbz1084404-ppc64-s390x-wrong-prologue-skip-O2-g-3of3.patch
Patch101: 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
Patch104: gdb-bz1219747-attach-kills.patch
Patch102: gdb-bz1219747-attach-kills.patch
# Force libncursesw over libncurses to match the includes (RH BZ 1270534).
#=push+jan
Patch105: gdb-fedora-libncursesw.patch
Patch103: gdb-fedora-libncursesw.patch
# Test clflushopt instruction decode (for RH BZ 1262471).
#=fedoratest
Patch106: gdb-opcodes-clflushopt-test.patch
Patch104: gdb-opcodes-clflushopt-test.patch
# [rhel6] DTS backward Python compatibility API (BZ 1020004, Phil Muldoon).
#=fedora
Patch107: gdb-dts-rhel6-python-compat.patch
Patch105: gdb-dts-rhel6-python-compat.patch
# [SCL] Skip deprecated .gdb_index warning for Red Hat built files (BZ 953585).
#=push+jan
Patch108: gdb-6.6-buildid-locate-rpm-scl.patch
Patch106: gdb-6.6-buildid-locate-rpm-scl.patch
# Work around readline-6.2 incompatibility not asking for --more-- (BZ 701131).
#=fedora
Patch109: gdb-readline62-ask-more-rh.patch
Patch107: 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 .
Patch110: gdb-6.8-quit-never-aborts.patch
Patch108: gdb-6.8-quit-never-aborts.patch
# [aarch64] Fix hardware watchpoints (RH BZ 1261564).
#=fedoratest
Patch111: gdb-rhbz1261564-aarch64-hw-watchpoint-test.patch
Patch109: gdb-rhbz1261564-aarch64-hw-watchpoint-test.patch
# Add messages suggesting more recent RHEL gdbserver (RH BZ 1321114).
#=fedora
Patch112: gdb-container-rh-pkg.patch
Patch110: gdb-container-rh-pkg.patch
# New test for Python "Cannot locate object file for block" (for RH BZ 1325795).
#=fedoratest
Patch113: gdb-rhbz1325795-framefilters-test.patch
Patch111: gdb-rhbz1325795-framefilters-test.patch
# [dts+el7] [x86*] Bundle linux_perf.h for libipt (RH BZ 1256513).
#=fedora
Patch114: gdb-linux_perf-bundle.patch
Patch112: gdb-linux_perf-bundle.patch
# Fix gdb-headless /usr/bin/ executables (BZ 1390251).
#=fedora
Patch115: gdb-libexec-add-index.patch
Patch113: gdb-libexec-add-index.patch
# New testcase for: Fix <tab>-completion crash (Gary Benson, RH BZ 1398387).
#=fedoratest
Patch116: gdb-rhbz1398387-tab-crash-test.patch
Patch114: gdb-rhbz1398387-tab-crash-test.patch
# [testsuite] Fix false selftest.exp FAIL from system readline-6.3+ (Patrick Palka).
#=fedoratest
Patch117: gdb-testsuite-readline63-sigint.patch
Patch115: gdb-testsuite-readline63-sigint.patch
# Python patches of: http://sourceware.org/gdb/wiki/ProjectArcher
#=push
Patch118: gdb-archer.patch
Patch116: gdb-archer.patch
# Revert upstream commit 469412dd9ccc4de5874fd3299b105833f36b34cd
Patch119: gdb-vla-intel-fix-print-char-array.patch
Patch117: gdb-vla-intel-fix-print-char-array.patch
# [s390x] Backport arch12 instructions decoding (RH BZ 1553104).
# =fedoratest
Patch120: gdb-rhbz1553104-s390x-arch12-test.patch
Patch118: gdb-rhbz1553104-s390x-arch12-test.patch
# This patch is needed to compile GDB after -Werror=narrowing has
# been enabled by default.
# Author: Sergio Durigan Junior.
Patch121: gdb-rhbz795424-bitpos-arrayview.patch
Patch119: gdb-rhbz795424-bitpos-arrayview.patch

View File

@ -117,5 +117,3 @@
%patch117 -p1
%patch118 -p1
%patch119 -p1
%patch120 -p1
%patch121 -p1

View File

@ -1 +1 @@
ce3a1736b59a05128049459fcd6c91c221f40257
daff3a48c17625ade8b57cf770fc77b4c1815df2

View File

@ -43,7 +43,6 @@ gdb-6.5-gcore-buffer-limit-test.patch
gdb-6.3-mapping-zero-inode-test.patch
gdb-6.3-focus-cmd-prev-test.patch
gdb-6.8-bz442765-threaded-exec-test.patch
gdb-6.8-sparc64-silence-memcpy-check.patch
gdb-6.5-section-num-fixup-test.patch
gdb-6.8-bz436037-reg-no-longer-active.patch
gdb-6.8-watchpoint-conditionals-test.patch
@ -72,7 +71,6 @@ gdb-test-dw2-aranges.patch
gdb-test-expr-cumulative-archer.patch
gdb-physname-pr11734-test.patch
gdb-physname-pr12273-test.patch
gdb-7.2.50-sparc-add-workaround-to-broken-debug-files.patch
gdb-test-ivy-bridge.patch
gdb-runtest-pie-override.patch
gdb-attach-fail-reasons-5of5.patch

View File

@ -16,7 +16,7 @@ Subject: gdb-6.3-gstack-20050411.patch
diff --git a/gdb/Makefile.in b/gdb/Makefile.in
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -1733,7 +1733,7 @@ info install-info clean-info dvi pdf install-pdf html install-html: force
@@ -1734,7 +1734,7 @@ info install-info clean-info dvi pdf install-pdf html install-html: force
install: all
@$(MAKE) $(FLAGS_TO_PASS) install-only
@ -25,7 +25,7 @@ diff --git a/gdb/Makefile.in b/gdb/Makefile.in
transformed_name=`t='$(program_transform_name)'; \
echo gdb | sed -e "$$t"` ; \
if test "x$$transformed_name" = x; then \
@@ -1782,7 +1782,25 @@ install-guile:
@@ -1783,7 +1783,25 @@ install-guile:
install-python:
$(SHELL) $(srcdir)/../mkinstalldirs $(DESTDIR)$(GDB_DATADIR)/python/gdb
@ -52,7 +52,7 @@ diff --git a/gdb/Makefile.in b/gdb/Makefile.in
transformed_name=`t='$(program_transform_name)'; \
echo gdb | sed -e $$t` ; \
if test "x$$transformed_name" = x; then \
@@ -1805,6 +1823,18 @@ uninstall: force $(CONFIG_UNINSTALL)
@@ -1806,6 +1824,18 @@ uninstall: force $(CONFIG_UNINSTALL)
fi
@$(MAKE) DO=uninstall "DODIRS=$(SUBDIRS)" $(FLAGS_TO_PASS) subdir_do

View File

@ -99,7 +99,7 @@ diff --git a/gdb/build-id.c b/gdb/build-id.c
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -3467,6 +3467,16 @@ read_gdb_index_from_buffer (struct objfile *objfile,
@@ -3468,6 +3468,16 @@ read_gdb_index_from_buffer (struct objfile *objfile,
"set use-deprecated-index-sections on". */
if (version < 6 && !deprecated_ok)
{
@ -116,7 +116,7 @@ diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
static int warning_printed = 0;
if (!warning_printed)
{
@@ -3478,6 +3488,10 @@ to use the section anyway."),
@@ -3479,6 +3489,10 @@ to use the section anyway."),
warning_printed = 1;
}
return 0;

View File

@ -977,7 +977,7 @@ diff --git a/gdb/corelow.c b/gdb/corelow.c
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -19829,6 +19829,27 @@ information files.
@@ -19835,6 +19835,27 @@ information files.
@end table
@ -1020,7 +1020,7 @@ diff --git a/gdb/dwarf-index-cache.c b/gdb/dwarf-index-cache.c
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -2693,7 +2693,7 @@ dwarf2_get_dwz_file (struct dwarf2_per_objfile *dwarf2_per_objfile)
@@ -2694,7 +2694,7 @@ dwarf2_get_dwz_file (struct dwarf2_per_objfile *dwarf2_per_objfile)
}
if (dwz_bfd == NULL)
@ -1029,7 +1029,7 @@ diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
if (dwz_bfd == NULL)
error (_("could not find '.gnu_debugaltlink' file for %s"),
@@ -6197,7 +6197,7 @@ get_gdb_index_contents_from_section (objfile *obj, T *section_owner)
@@ -6198,7 +6198,7 @@ get_gdb_index_contents_from_section (objfile *obj, T *section_owner)
static gdb::array_view<const gdb_byte>
get_gdb_index_contents_from_cache (objfile *obj, dwarf2_per_objfile *dwarf2_obj)
{
@ -1038,7 +1038,7 @@ diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
if (build_id == nullptr)
return {};
@@ -6210,7 +6210,7 @@ get_gdb_index_contents_from_cache (objfile *obj, dwarf2_per_objfile *dwarf2_obj)
@@ -6211,7 +6211,7 @@ get_gdb_index_contents_from_cache (objfile *obj, dwarf2_per_objfile *dwarf2_obj)
static gdb::array_view<const gdb_byte>
get_gdb_index_contents_from_cache_dwz (objfile *obj, dwz_file *dwz)
{

View File

@ -1,19 +0,0 @@
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)

View File

@ -1,68 +0,0 @@
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. */

View File

@ -17,7 +17,7 @@ tromey/python
diff --git a/gdb/Makefile.in b/gdb/Makefile.in
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -2093,6 +2093,12 @@ stamp-h: $(srcdir)/config.in config.status
@@ -2094,6 +2094,12 @@ stamp-h: $(srcdir)/config.in config.status
CONFIG_LINKS= \
$(SHELL) config.status
@ -53,7 +53,7 @@ diff --git a/gdb/data-directory/Makefile.in b/gdb/data-directory/Makefile.in
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.
@@ -1251,6 +1251,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.

View File

@ -97,7 +97,7 @@ new file mode 100644
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
@@ -242,6 +242,7 @@ case ${gdb_host} in
;;
i386)
# Host: Intel 386 running GNU/Linux.
@ -105,7 +105,7 @@ diff --git a/gdb/configure.nat b/gdb/configure.nat
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"
@@ -294,6 +295,7 @@ case ${gdb_host} in
@@ -298,6 +299,7 @@ case ${gdb_host} in
case ${gdb_host_cpu} in
i386)
# Host: GNU/Linux x86-64

View File

@ -9,7 +9,7 @@ Subject: gdb-glibc-strstr-workaround.patch
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -21441,6 +21441,26 @@ new_symbol (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
@@ -21458,6 +21458,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);

View File

@ -42,7 +42,7 @@ gdb/
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -10584,6 +10584,13 @@ private:
@@ -10585,6 +10585,13 @@ private:
static void
process_die (struct die_info *die, struct dwarf2_cu *cu)
{

View File

@ -1634,7 +1634,7 @@ diff --git a/gdb/dwarf2loc.c b/gdb/dwarf2loc.c
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -2031,11 +2031,11 @@ dwarf2_complex_location_expr_complaint (void)
@@ -2032,11 +2032,11 @@ dwarf2_complex_location_expr_complaint (void)
}
static void
@ -1650,7 +1650,7 @@ diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
}
static void
@@ -15075,8 +15075,8 @@ dwarf2_add_field (struct field_info *fip, struct die_info *die,
@@ -15092,8 +15092,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. */
@ -2691,7 +2691,7 @@ diff --git a/gdb/regcache.c b/gdb/regcache.c
diff --git a/gdb/regcache.h b/gdb/regcache.h
--- a/gdb/regcache.h
+++ b/gdb/regcache.h
@@ -256,8 +256,8 @@ public:
@@ -273,8 +273,8 @@ public:
enum register_status raw_read (int regnum, T *val);
/* Partial transfer of raw registers. Return the status of the register. */
@ -2702,7 +2702,7 @@ diff --git a/gdb/regcache.h b/gdb/regcache.h
/* Make certain that the register REGNUM is up-to-date. */
virtual void raw_update (int regnum) = 0;
@@ -269,8 +269,8 @@ public:
@@ -286,8 +286,8 @@ public:
enum register_status cooked_read (int regnum, T *val);
/* Partial transfer of a cooked register. */
@ -2713,7 +2713,7 @@ diff --git a/gdb/regcache.h b/gdb/regcache.h
/* 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:
@@ -297,7 +297,7 @@ protected:
/* Perform a partial register transfer using a read, modify, write
operation. Will fail if register is currently invalid. */
@ -2722,7 +2722,7 @@ diff --git a/gdb/regcache.h b/gdb/regcache.h
gdb_byte *out, bool is_raw);
};
@@ -338,11 +338,12 @@ public:
@@ -355,11 +355,12 @@ public:
/* Partial transfer of raw registers. Perform read, modify, write style
operations. */
@ -2737,7 +2737,7 @@ diff --git a/gdb/regcache.h b/gdb/regcache.h
const gdb_byte *buf);
void supply_regset (const struct regset *regset,
@@ -393,7 +394,7 @@ private:
@@ -410,7 +411,7 @@ private:
/* Perform a partial register transfer using a read, modify, write
operation. */
@ -3189,7 +3189,7 @@ diff --git a/gdb/valops.c b/gdb/valops.c
gdb_byte buffer[sizeof (LONGEST)];
if (value_bitsize (toval))
@@ -3349,7 +3349,7 @@ compare_parameters (struct type *t1, struct type *t2, int skip_artificial)
@@ -3392,7 +3392,7 @@ get_baseclass_offset (struct type *vt, struct type *cls,
the form "DOMAIN::NAME". */
static struct value *
@ -3198,7 +3198,7 @@ diff --git a/gdb/valops.c b/gdb/valops.c
struct type *curtype, const char *name,
struct type *intype,
int want_address,
@@ -3383,7 +3383,7 @@ value_struct_elt_for_reference (struct type *domain, int offset,
@@ -3426,7 +3426,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),
@ -3207,7 +3207,7 @@ diff --git a/gdb/valops.c b/gdb/valops.c
else if (noside != EVAL_NORMAL)
return allocate_value (TYPE_FIELD_TYPE (t, i));
else
@@ -3556,7 +3556,7 @@ value_struct_elt_for_reference (struct type *domain, int offset,
@@ -3617,7 +3617,7 @@ value_struct_elt_for_reference (struct type *domain, int offset,
for (i = TYPE_N_BASECLASSES (t) - 1; i >= 0; i--)
{
struct value *v;
@ -3216,7 +3216,7 @@ diff --git a/gdb/valops.c b/gdb/valops.c
if (BASETYPE_VIA_VIRTUAL (t, i))
base_offset = 0;
@@ -3705,7 +3705,7 @@ value_rtti_indirect_type (struct value *v, int *full,
@@ -3766,7 +3766,7 @@ value_rtti_indirect_type (struct value *v, int *full,
struct value *
value_full_object (struct value *argp,
struct type *rtype,

View File

@ -143,7 +143,7 @@ diff --git a/gdb/dwarf2loc.h b/gdb/dwarf2loc.h
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -17703,7 +17703,7 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
@@ -17720,7 +17720,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;
@ -152,7 +152,7 @@ diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
int low_default_is_valid;
int high_bound_is_count = 0;
const char *name;
@@ -17723,7 +17723,9 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
@@ -17740,7 +17740,9 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
low.kind = PROP_CONST;
high.kind = PROP_CONST;
@ -162,7 +162,7 @@ diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
/* Set LOW_DEFAULT_IS_VALID if current language and DWARF version allow
omitting DW_AT_lower_bound. */
@@ -17756,6 +17758,14 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
@@ -17773,6 +17775,14 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
break;
}
@ -177,7 +177,7 @@ diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
attr = dwarf2_attr (die, DW_AT_lower_bound, cu);
if (attr)
attr_to_dynamic_prop (attr, die, cu, &low);
@@ -17848,7 +17858,7 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
@@ -17865,7 +17875,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;
@ -1818,7 +1818,7 @@ diff --git a/gdb/valarith.c b/gdb/valarith.c
diff --git a/gdb/valops.c b/gdb/valops.c
--- a/gdb/valops.c
+++ b/gdb/valops.c
@@ -3800,56 +3800,195 @@ value_of_this_silent (const struct language_defn *lang)
@@ -3861,56 +3861,195 @@ value_of_this_silent (const struct language_defn *lang)
struct value *
value_slice (struct value *array, int lowbound, int length)

View File

@ -33,7 +33,7 @@ git diff --stat -p gdb/master...gdb/users/bheckel/fortran-vla-strings
diff --git a/gdb/NEWS b/gdb/NEWS
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -229,6 +229,8 @@ SH-5/SH64 running OpenBSD SH-5/SH64 support in sh*-*-openbsd*
@@ -239,6 +239,8 @@ SH-5/SH64 running OpenBSD SH-5/SH64 support in sh*-*-openbsd*
*** Changes in GDB 8.1
@ -77,7 +77,7 @@ diff --git a/gdb/c-valprint.c b/gdb/c-valprint.c
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -1799,7 +1799,8 @@ static void read_signatured_type (struct signatured_type *);
@@ -1800,7 +1800,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,
@ -87,7 +87,7 @@ diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
/* memory allocation interface */
@@ -13746,7 +13747,7 @@ read_func_scope (struct die_info *die, struct dwarf2_cu *cu)
@@ -13748,7 +13749,7 @@ read_func_scope (struct die_info *die, struct dwarf2_cu *cu)
{
newobj->static_link
= XOBNEW (&objfile->objfile_obstack, struct dynamic_prop);
@ -96,7 +96,7 @@ diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
}
cu->list_in_scope = cu->builder->get_local_symbols ();
@@ -16466,7 +16467,8 @@ read_array_type (struct die_info *die, struct dwarf2_cu *cu)
@@ -16483,7 +16484,8 @@ read_array_type (struct die_info *die, struct dwarf2_cu *cu)
byte_stride_prop
= (struct dynamic_prop *) alloca (sizeof (struct dynamic_prop));
@ -106,7 +106,7 @@ diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
if (!stride_ok)
{
complaint (_("unable to read array DW_AT_byte_stride "
@@ -17227,29 +17229,90 @@ read_tag_string_type (struct die_info *die, struct dwarf2_cu *cu)
@@ -17244,29 +17246,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;
@ -208,7 +208,7 @@ diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
char_type = language_string_char_type (cu->language_defn, gdbarch);
type = create_string_type (NULL, char_type, range_type);
@@ -17597,7 +17660,8 @@ read_base_type (struct die_info *die, struct dwarf2_cu *cu)
@@ -17614,7 +17677,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,
@ -218,7 +218,7 @@ diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
{
struct dwarf2_property_baton *baton;
struct obstack *obstack
@@ -17608,14 +17672,33 @@ attr_to_dynamic_prop (const struct attribute *attr, struct die_info *die,
@@ -17625,14 +17689,33 @@ attr_to_dynamic_prop (const struct attribute *attr, struct die_info *die,
if (attr_form_is_block (attr))
{
@ -256,7 +256,7 @@ diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
}
else if (attr_form_is_ref (attr))
{
@@ -17648,8 +17731,28 @@ attr_to_dynamic_prop (const struct attribute *attr, struct die_info *die,
@@ -17665,8 +17748,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;
@ -287,7 +287,7 @@ diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
prop->data.baton = baton;
prop->kind = PROP_LOCEXPR;
gdb_assert (prop->data.baton != NULL);
@@ -17760,7 +17863,7 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
@@ -17777,7 +17880,7 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
attr = dwarf2_attr (die, DW_AT_byte_stride, cu);
if (attr)
@ -296,7 +296,7 @@ diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
complaint (_("Missing DW_AT_byte_stride "
"- DIE at 0x%s [in module %s]"),
sect_offset_str (die->sect_off),
@@ -17768,7 +17871,7 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
@@ -17785,7 +17888,7 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
attr = dwarf2_attr (die, DW_AT_lower_bound, cu);
if (attr)
@ -305,7 +305,7 @@ diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
else if (!low_default_is_valid)
complaint (_("Missing DW_AT_lower_bound "
"- DIE at %s [in module %s]"),
@@ -17777,10 +17880,10 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
@@ -17794,10 +17897,10 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
struct attribute *attr_ub, *attr_count;
attr = attr_ub = dwarf2_attr (die, DW_AT_upper_bound, cu);
@ -318,7 +318,7 @@ diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
{
/* If bounds are constant do the final calculation here. */
if (low.kind == PROP_CONST && high.kind == PROP_CONST)
@@ -25335,7 +25438,7 @@ set_die_type (struct die_info *die, struct type *type, struct dwarf2_cu *cu)
@@ -25353,7 +25456,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))
{
@ -327,7 +327,7 @@ diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
add_dyn_prop (DYN_PROP_ALLOCATED, prop, type);
}
else if (attr != NULL)
@@ -25349,7 +25452,7 @@ set_die_type (struct die_info *die, struct type *type, struct dwarf2_cu *cu)
@@ -25367,7 +25470,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))
{
@ -336,7 +336,7 @@ diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
add_dyn_prop (DYN_PROP_ASSOCIATED, prop, type);
}
else if (attr != NULL)
@@ -25361,7 +25464,7 @@ set_die_type (struct die_info *die, struct type *type, struct dwarf2_cu *cu)
@@ -25379,7 +25482,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);

View File

@ -18,7 +18,7 @@
Name: %{?scl_prefix}gdb
# Freeze it when GDB gets branched
%global snapsrc 20181006
%global snapsrc 20181010
# See timestamp of source gnulib installed into gdb/gnulib/ .
%global snapgnulib 20161115
%global tarname gdb-%{version}
@ -26,7 +26,7 @@ Version: 8.2.50.%{snapsrc}
# 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: 4%{?dist}
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
@ -1024,6 +1024,11 @@ fi
%endif
%changelog
* Wed Oct 10 2018 Sergio Durigan Junior <sergiodj@redhat.com> - 8.2.50.20181010-5.fc30
- Rebase to FSF GDB 8.2.50.20181010 (8.3pre).
- Remove 'gdb-6.8-sparc64-silence-memcpy-check.patch'.
- Remove 'gdb-7.2.50-sparc-add-workaround-to-broken-debug-files.patch'.
* Sat Oct 6 2018 Sergio Durigan Junior <sergiodj@redhat.com> - 8.2.50.20181006-4.fc30
- Rebase to FSF GDB 8.2.50.20181006 (8.3pre).

View File

@ -1,3 +1,3 @@
SHA512 (gdb-libstdc++-v3-python-8.1.1-20180626.tar.xz) = a8b1c54dd348cfeb37da73f968742896be3dd13a4215f8d8519870c2abea915f5176c3fa6989ddd10f20020a16f0fab20cbae68ee8d58a82234d8778023520f8
SHA512 (v2.0.tar.gz) = ec63151e842c81cc73ea11ba560b63e005cefbe19d98de24ae5c8caa4de7c9c1d71d1ec5b6214a347592eac675b75a3d2b26d4691ca86f91020ebfea8e912939
SHA512 (gdb-8.2.50.20181006.tar.xz) = 60258237e19127f339f7bfe0a75a1ea46be3e1c789c2ab184825b7eff8977f27454feaf84b283f1807e2a0355e8c8c1216ac3a1bd7c3cddd934d06532b0bea09
SHA512 (gdb-8.2.50.20181010.tar.xz) = 1c7797e87b87de8cbe948b2bb97613a282f066c8c4a262f25f37ecf7d217bdb8cc84da7e147f81b4ebc00ea2f873ac9440c80f6da822a2df2563e57a2c7b9a83