Blame SOURCES/gdb-rhbz1842691-corefile-mem-access-11of15.patch

0efd7d
From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
0efd7d
From: Keith Seitz <keiths@redhat.com>
0efd7d
Date: Tue, 28 Jul 2020 09:26:44 -0400
0efd7d
Subject: gdb-rhbz1842691-corefile-mem-access-11of15.patch
0efd7d
0efd7d
;; Adjust coredump-filter.exp to account for NT_FILE note handling
0efd7d
;; Kevin Buettner, RH BZ 1842961
0efd7d
0efd7d
   Author: Kevin Buettner <kevinb@redhat.com>
0efd7d
   Date:   Fri Jul 3 20:10:22 2020 -0700
0efd7d
0efd7d
    Adjust coredump-filter.exp to account for NT_FILE note handling
0efd7d
0efd7d
    This commit makes adjustments to coredump-filter.exp to account
0efd7d
    for the fact that NT_FILE file-backed mappings are now available
0efd7d
    when a core file is loaded.  Thus, a test which was expected
0efd7d
    to PASS when a memory region was determined to be unavailable
0efd7d
    (due to no file-backed mappings being available) will now FAIL
0efd7d
    due to those mappings being available from having loaded the
0efd7d
    NT_FILE note.
0efd7d
0efd7d
    I had originally marked the test as XFAIL, but Mihails Strasuns
0efd7d
    suggested a much better approach:
0efd7d
0efd7d
        1) First test that it still works if file is accessible in the
0efd7d
           filesystem.
0efd7d
        2) Temporarily move / rename the file and test that disassembly
0efd7d
           doesn't work anymore.
0efd7d
0efd7d
    That's what this commit implements.
0efd7d
0efd7d
    gdb/testsuite/ChangeLog:
0efd7d
0efd7d
    	* gdb.base/coredump-filter.exp: Add second
0efd7d
    	non-Private-Shared-Anon-File test.
0efd7d
    	(test_disasm): Rename binfile for test which is expected
0efd7d
    	to fail.
0efd7d
0efd7d
diff --git a/gdb/testsuite/gdb.base/coredump-filter.exp b/gdb/testsuite/gdb.base/coredump-filter.exp
0efd7d
--- a/gdb/testsuite/gdb.base/coredump-filter.exp
0efd7d
+++ b/gdb/testsuite/gdb.base/coredump-filter.exp
0efd7d
@@ -80,15 +80,26 @@ proc do_load_and_test_core { core var working_var working_value dump_excluded }
0efd7d
 # disassemble of a function (i.e., the binary's .text section).  GDB
0efd7d
 # should fail in this case.  However, it must succeed if the binary is
0efd7d
 # provided along with the corefile.  This is what we test here.
0efd7d
+#
0efd7d
+# A further complication is that Linux NT_FILE notes are now read from
0efd7d
+# the corefile.  This note allows GDB to find the binary for file
0efd7d
+# backed mappings even though the binary wasn't loaded by GDB in the
0efd7d
+# conventional manner.  In order to see the expected failure for this
0efd7d
+# case, we rename the binary in order to perform this test.
0efd7d
 
0efd7d
 proc test_disasm { core address should_fail } {
0efd7d
-    global testfile hex
0efd7d
+    global testfile hex binfile
0efd7d
 
0efd7d
     # Restart GDB without loading the binary.
0efd7d
     with_test_prefix "no binary" {
0efd7d
 	gdb_exit
0efd7d
 	gdb_start
0efd7d
 
0efd7d
+	set hide_binfile [standard_output_file "${testfile}.hide"]
0efd7d
+	if { $should_fail == 1 } {
0efd7d
+	    remote_exec host "mv -f $binfile $hide_binfile"
0efd7d
+	}
0efd7d
+
0efd7d
 	set core_loaded [gdb_core_cmd "$core" "load core"]
0efd7d
 	if { $core_loaded == -1 } {
0efd7d
 	    fail "loading $core"
0efd7d
@@ -96,6 +107,7 @@ proc test_disasm { core address should_fail } {
0efd7d
 	}
0efd7d
 
0efd7d
 	if { $should_fail == 1 } {
0efd7d
+	    remote_exec host "mv -f $hide_binfile $binfile"
0efd7d
 	    gdb_test "x/i \$pc" "=> $hex:\tCannot access memory at address $hex" \
0efd7d
 		"disassemble function with corefile and without a binary"
0efd7d
 	} else {
0efd7d
@@ -225,5 +237,9 @@ foreach item $all_anon_corefiles {
0efd7d
 }
0efd7d
 
0efd7d
 with_test_prefix "loading and testing corefile for non-Private-Shared-Anon-File" {
0efd7d
+    test_disasm $non_private_shared_anon_file_core $main_addr 0
0efd7d
+}
0efd7d
+
0efd7d
+with_test_prefix "loading and testing corefile for non-Private-Shared-Anon-File with renamed binary" {
0efd7d
     test_disasm $non_private_shared_anon_file_core $main_addr 1
0efd7d
 }