This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Fix gdb.arch/i386-biarch-core.exp FAIL on i386.


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=775a3298dca48e76e29045912e08025abacafa94

commit 775a3298dca48e76e29045912e08025abacafa94
Author: Jan Kratochvil <jan.kratochvil@redhat.com>
Date:   Thu Jul 16 18:01:22 2015 +0200

    Fix gdb.arch/i386-biarch-core.exp FAIL on i386.
    
    This new test fails on i686 buildbot slaves,
    
    (gdb) core-file /home/gdb-buildbot-2/fedora-x86-64-2/fedora-i686/build/gdb/testsuite/gdb.arch/i386-biarch-core.core
    "/home/gdb-buildbot-2/fedora-x86-64-2/fedora-i686/build/gdb/testsuite/gdb.arch/i386-biarch-core.core"
    is not a core dump: File format not recognized
    (gdb) FAIL: gdb.arch/i386-biarch-core.exp: core-file
    
    There are two problems:
    
    (1) The testcase did not really test if elf64-i386 is supported by GDB (BFD).
    That was OK for a Fedora testcase but I forgot about it when submitting it
    upstream.
    
    I haven't really verified if the GNU target is elf64-little but it seems so,
    no other one seems suitable from:
    	elf32-x86-64
    	elf64-big
    	elf64-k1om
    	elf64-l1om
    	elf64-little
    	elf64-x86-64
    	pei-x86-64
    
    (2) The output of the "core-file" command itself can be arbitrary as the
    elf64-i386 file with x86_64 registers is really broken; but that does not
    matter much, important is the following test whether core file memory is
    readable.
    	./configure --enable-64-bit-bfd
    	(gdb) core-file /home/jkratoch/redhat/gdb-test-build32-plus64/gdb/testsuite/gdb.arch/i386-biarch-core.core^M
    	warning: Couldn't find general-purpose registers in core file.^M
    	Failed to read a valid object file image from memory.^M
    	warning: Couldn't find general-purpose registers in core file.^M
    	#0  <unavailable> in ?? ()^M
    	(gdb) FAIL: gdb.arch/i386-biarch-core.exp: core-file
    	x/i 0x400078^M
    	   0x400078:    hlt    ^M
    	(gdb) PASS: gdb.arch/i386-biarch-core.exp: .text is readable
    
    I do not know much dejagnu but I expect 'istarget' tests against the site.exp
    'target_triplet' content which is set to the primary GDB target
    (--target=...).
    
    GDB is normally never configured for primary target elf64-i386, I think BFD
    does not know such explicit target, it gets recognized as elf64-little.
    
    In fact many testfiles of the GDB testsuite are wrong as they require
    'istarget' (therefore primary GDB target) even for just loading arch specific
    files which would be sufficient with secondary target (--enable-targets=...)
    support.
    
    This my new patch removes this 'istarget' check as it is IMO unrelated to what
    we need to test.  Although you are right we do 'x/i' and test for 'hlt' so
    I think we should test also for available 'set architecture i386'.
    We could also test by 'x/bx' instead of 'x/i' to avoid such additional
    test/requirement.
    
    This testcase comes from a different bug from 2009:
    	https://bugzilla.redhat.com/show_bug.cgi?id=457187
    	http://pkgs.fedoraproject.org/cgit/gdb.git/commit/?id=94cd124608bf0dd359cb48a710800d72c21b30c3
    
    That bug has been fixed in the meantime but the same testcase was reproducing
    this new different bug - internal error regression - so I submitted it.
    
    We can remove the "x/bx $address" test but it was useful for the previous bug
    from 2009 as that time the internal error regression did not happen, just the
    core file was not recognized (which would not be detected by the proposed
    ignoring of the "core-file" command output) and so the core file was not
    available.  That can be tested by the "x/bx $address" test.
    
    gdb/testsuite/ChangeLog
    2015-07-16  Jan Kratochvil  <jan.kratochvil@redhat.com>
    
    	* gdb.arch/i386-biarch-core.exp: Replace istarget
    	by "complete set gnutarget". Remove expectation for the "core-file"
    	command.

Diff:
---
 gdb/testsuite/ChangeLog                     |  6 ++++++
 gdb/testsuite/gdb.arch/i386-biarch-core.exp | 29 ++++++++++++++++++++---------
 2 files changed, 26 insertions(+), 9 deletions(-)

diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 6175620..520f606 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2015-07-16  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* gdb.arch/i386-biarch-core.exp: Replace istarget
+	by "complete set gnutarget". Remove expectation for the "core-file"
+	command.
+
 2015-07-15  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
 	Revert the previous commit:
diff --git a/gdb/testsuite/gdb.arch/i386-biarch-core.exp b/gdb/testsuite/gdb.arch/i386-biarch-core.exp
index 60d049b..bc82287 100644
--- a/gdb/testsuite/gdb.arch/i386-biarch-core.exp
+++ b/gdb/testsuite/gdb.arch/i386-biarch-core.exp
@@ -23,9 +23,20 @@
 
 standard_testfile
 
-if { ![istarget "i?86-*-*"] && ![istarget "x86_64-*-*"] } then {
-    verbose "Skipping i386-biarch-core test."
-    return
+gdb_exit
+gdb_start
+gdb_reinitialize_dir $srcdir/$subdir
+
+set test "complete set gnutarget"
+gdb_test_multiple "complete set gnutarget " $test {
+    -re "set gnutarget elf64-little\r\n(.*\r\n)?$gdb_prompt $" {
+	pass $test
+    }
+    -re "\r\n$gdb_prompt $" {
+	pass $test
+	untested ".text is readable"
+	return
+    }
 }
 
 set corebz2file ${srcdir}/${subdir}/${testfile}.core.bz2
@@ -43,16 +54,16 @@ if {$corestat(size) != 102400} {
     return -1
 }
 
-gdb_exit
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-
 # Wrongly built GDB complains by:
 # "..." is not a core dump: File format not recognized
 # As the provided test core has 64bit PRSTATUS i386 built GDB cannot parse it.
 # This is just a problem of the test case, real-world elf64-i386 file will have
 # 32bit PRSTATUS.  One cannot prepare elf64-i386 core file from elf32-i386 by
 # objcopy as it corrupts the core file beyond all recognition.
-gdb_test "core-file ${corefile}" "\r\nwarning: Unexpected size of section `\\.reg/6901' in core file\\.\r\n.*Core was generated by `\[^\r\n\]*'\\.\r\nProgram terminated with signal SIGSEGV, Segmentation fault\\.\r\n.*" "core-file"
+# The output therefore does not matter much, just we should not get GDB
+# internal error.
+gdb_test "core-file ${corefile}" ".*" "core-file"
 
-gdb_test "x/i $address" "\r\n\[ \t\]*$address:\[ \t\]*hlt\[ \t\]*" ".text is readable"
+# Test if at least the core file segments memory has been loaded.
+# https://bugzilla.redhat.com/show_bug.cgi?id=457187
+gdb_test "x/bx $address" "\r\n\[ \t\]*$address:\[ \t\]*0xf4\[ \t\]*" ".text is readable"


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]