Blob Blame History Raw
http://sourceware.org/ml/gdb-cvs/2010-10/msg00065.html

### src/gdb/testsuite/ChangeLog	2010/10/08 18:28:46	1.2471
### src/gdb/testsuite/ChangeLog	2010/10/11 08:45:11	1.2472
## -1,3 +1,10 @@
+2010-10-11  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	Fix results of prelinked PIEs on ppc*.
+	* gdb.base/break-interp.exp (reach, test_core, test_attach_gdb):
+	Accept also DISPLACEMENT "PRESENT".
+	(main): Replace "ZERO" displacements by "PRESENT".
+
 2010-10-08  Sami Wagiaalla  <swagiaal@redhat.com>
 
 	* gdb.cp/oranking.exp: New test.
--- src/gdb/testsuite/gdb.base/break-interp.exp	2010/09/10 20:29:25	1.20
+++ src/gdb/testsuite/gdb.base/break-interp.exp	2010/10/11 08:45:12	1.21
@@ -109,7 +109,9 @@
 }
 
 # `runto' does not check we stopped really at the function we specified.
-# DISPLACEMENT can be "NONE", "ZERO" or "NONZERO"
+# DISPLACEMENT can be "NONE" for no message to be present, "ZERO" for
+# displacement of 0 bytes to be present, "NONZERO" for displacement of non-0
+# bytes to be present and "PRESENT" if both "ZERO" and "NONZERO" are valid.
 proc reach {func command displacement} {
     global gdb_prompt expect_out
 
@@ -128,7 +130,7 @@
 		} else {
 		    set case "NONZERO"
 		}
-		if {$displacement == $case} {
+		if {$displacement == $case || $displacement == "PRESENT"} {
 		    pass $test_displacement
 		    set displacement "FOUND-$displacement"
 		} else {
@@ -184,7 +186,7 @@
 	    } else {
 		set case "NONZERO"
 	    }
-	    if {$displacement == $case} {
+	    if {$displacement == $case || $displacement == "PRESENT"} {
 		pass $test_displacement
 		set displacement "FOUND-$displacement"
 	    } else {
@@ -241,7 +243,7 @@
 	    } else {
 		set case "NONZERO"
 	    }
-	    if {$displacement == $case} {
+	    if {$displacement == $case || $displacement == "PRESENT"} {
 		pass $test_displacement
 		set displacement "FOUND-$displacement"
 	    } else {
@@ -428,7 +430,7 @@
 		} else {
 		    set case "NONZERO"
 		}
-		if {$displacement == $case} {
+		if {$displacement == $case || $displacement == "PRESENT"} {
 		    pass $test_displacement
 		    set displacement "FOUND-$displacement"
 		} else {
@@ -533,7 +535,10 @@
 	if {$ldprelink == "NO"} {
 	    set displacement "NONZERO"
 	} else {
-	    set displacement "ZERO"
+	    # x86* kernel loads prelinked PIE binary at its prelinked address
+	    # but ppc* kernel loads it at a random address.  prelink normally
+	    # skips PIE binaries during the system scan.
+	    set displacement "PRESENT"
 	}
 	test_ld $interp 0 [expr {$ldsepdebug == "NO"}] $displacement
 
@@ -582,7 +587,11 @@
 		    } elseif {$binprelink == "NO"} {
 			set displacement "NONZERO"
 		    } else {
-			set displacement "ZERO"
+			# x86* kernel loads prelinked PIE binary at its
+			# prelinked address but ppc* kernel loads it at
+			# a random address.  prelink normally skips PIE
+			# binaries during the system scan.
+			set displacement "PRESENT"
 		    }
 
 		    if {[prelink$binprelink $relink_args [file tail $exec]]