Re: Improve end check on rs6000 prologue analyzer

Mark Kettenis
2006-10-18T19:58:49Z

> Date: Tue, 17 Oct 2006 17:21:14 -0400
> From: Daniel Jacobowitz <drow@false.org>
>
> Hi Mark,
>
> Do you think you could try out this one, instead? I worked out what
> was going wrong for me: sign extension. I was testing a 64-bit GDB
> binary on 32-bit programs, which caused (op >> 22) == 0x20f to fail;
> when it didn't fail, on a 32-bit host, that check allows any load into
> r31 to be considered part of the prologue. But it was advancing so far
> that for small functions, the breakpoint was placed after the restore
> of r31 in the epilogue - much too far.
>
> This patch fixes the original bug, fixes the sign extension problem,
> and generally overhauls the prologue skipping (as opposed to scanning)
> to work more like MIPS's. It tests with no regressions on
> powerpc-linux, using a 32-bit binary this time.

Unfortunately, I still get a few regressions, see below. They all
seem to be problems with not skipping the complete prologue. I get
the feeling that using line number information for prologue skipping
is just not reliable :(.

--- gdb.sum.2 Wed Oct 18 19:44:32 2006
+++ gdb.sum Wed Oct 18 20:44:26 2006
@@ -1,4 +1,4 @@
-Test Run By kettenis on Wed Oct 18 19:25:55 2006
+Test Run By kettenis on Wed Oct 18 20:25:47 2006
Native configuration is powerpc-unknown-openbsd3.9

=== gdb tests ===
@@ -5011,7 +5011,7 @@
PASS: gdb.base/sepdebug.exp: breakpoint function, optimized file
PASS: gdb.base/sepdebug.exp: breakpoint small function, optimized file
PASS: gdb.base/sepdebug.exp: run until function breakpoint, optimized file
-PASS: gdb.base/sepdebug.exp: run until breakpoint set at small function, optimized file
+FAIL: gdb.base/sepdebug.exp: run until breakpoint set at small function, optimized file
Running ../../../../src/gdb/gdb/testsuite/gdb.base/sepsymtab.exp ...
PASS: gdb.base/sepsymtab.exp: info sym main
Running ../../../../src/gdb/gdb/testsuite/gdb.base/setshow.exp ...
@@ -8540,7 +8540,7 @@
PASS: gdb.cp/m-data.exp: template object, base enum
PASS: gdb.cp/m-data.exp: template object, derived enum
PASS: gdb.cp/m-data.exp: continue to breakpoint: continue to shadow breakpoint
-PASS: gdb.cp/m-data.exp: shadowing member
+FAIL: gdb.cp/m-data.exp: shadowing member
PASS: gdb.cp/m-data.exp: shadowed global variable
Running ../../../../src/gdb/gdb/testsuite/gdb.cp/m-static.exp ...
PASS: gdb.cp/m-static.exp: continue to breakpoint: end of constructors
@@ -9314,6 +9314,21 @@
PASS: gdb.gdb/selftest.exp: set listsize to 1
PASS: gdb.gdb/selftest.exp: run until breakpoint at captured_main
PASS: gdb.gdb/selftest.exp: printed version as string
+PASS: gdb.gdb/selftest.exp: step over ttyarg initialization
+FAIL: gdb.gdb/selftest.exp: step over ttyarg initialization ended up at odd location
+PASS: gdb.gdb/selftest.exp: step over ttyarg initialization
+PASS: gdb.gdb/selftest.exp: step over cdarg initialization
+FAIL: gdb.gdb/selftest.exp: step over cdarg initialization ended up at odd location
+PASS: gdb.gdb/selftest.exp: step over cdarg initialization
+PASS: gdb.gdb/selftest.exp: step over corearg initialization
+FAIL: gdb.gdb/selftest.exp: step over corearg initialization ended up at odd location
+PASS: gdb.gdb/selftest.exp: step over corearg initialization
+PASS: gdb.gdb/selftest.exp: step over execarg initialization
+FAIL: gdb.gdb/selftest.exp: step over execarg initialization ended up at odd location
+PASS: gdb.gdb/selftest.exp: step over execarg initialization
+PASS: gdb.gdb/selftest.exp: step over symarg initialization
+FAIL: gdb.gdb/selftest.exp: step over symarg initialization ended up at odd location
+PASS: gdb.gdb/selftest.exp: step over symarg initialization
PASS: gdb.gdb/selftest.exp: step over argc initialization
PASS: gdb.gdb/selftest.exp: step over argv initialization
PASS: gdb.gdb/selftest.exp: next over get_run_time and everything it calls
@@ -9334,7 +9349,7 @@
PASS: gdb.gdb/selftest.exp: Set xgdb prompt
PASS: gdb.gdb/selftest.exp: send ^C to child process
PASS: gdb.gdb/selftest.exp: send SIGINT signal to child process
-PASS: gdb.gdb/selftest.exp: backtrace through signal handler
+FAIL: gdb.gdb/selftest.exp: backtrace through signal handler
Running ../../../../src/gdb/gdb/testsuite/gdb.gdb/xfullpath.exp ...
PASS: gdb.gdb/xfullpath.exp: breakpoint in captured_main
PASS: gdb.gdb/xfullpath.exp: run until breakpoint at captured_main
@@ -11227,8 +11242,8 @@

=== gdb Summary ===

-# of expected passes 10594
-# of unexpected failures 89
+# of expected passes 10605
+# of unexpected failures 93
# of expected failures 42
# of known failures 79
# of unresolved testcases 1