[PATCH] Powerpc fix for gdb.base/ending-run.exp

Carl Love cel@us.ibm.com
Fri Mar 11 17:49:11 GMT 2022


Joel, GDB maintainers:

On Fri, 2022-03-11 at 06:28 +0400, Joel Brobecker wrote:
> 
> [...]
> > Anyway, it does appear that once you step off of the test program
> > you
> > end up in function __libc_start_call_main.  
> 
> Good to know. Perhaps you could mention that in a comment inside
> the block handling this scenario.

I added comments as requested to the gdb_test_multiple statement to
handle the case for Power when the needed debug info files are not
installed.
> 
> > > ... I would set program_exited instead of
> > > program_exited_normally.
> > > In fact, I think there was a confusion about this, since
> > > program_exited_normally gets unconditionally set just a few
> > > lines below.
> > 
> > I made the change you mentioned above and removed the additional
> > power gdb_test_multiple clause below.  The test also passes with
> > these
> > changes.
> 
> OK, good.
> 
> > The error occurs on Ubuntu on Power 10.  Per a suggestion, I tested
> > the
> > patch on a Red Hat distro.  The test passes fine there.  Ubuntu
> > puts
> > the debug info symbols in separate packages from the development
> > packages.  I have been thru the list of available packages and
> > tried
> > installing all the relavent packages to no avail.
> > 
> > The guess is with the proper symbols available on Ubuntu, the test
> > will
> > pass without my patch.  Just don't know what the missing package
> > is.
> 
> I don't think this is a problem. For me, the testcase should be
> able to be adapt to the distro it is running on, and if it is
> running on a distro that doesn't allow the testcase to run properly,
> then it should handle it gracefully (ideally).

I also updated the commit message to say the output is normal on
Powerpc when the debug info files are not installed.

The patch was tested on a refreshed copy of the latest mainline git
tree.  The two test failures were fixed with no additional regression
failures. 

Please let me know if the patch is acceptable with the above fixes.  
Thanks for your time and help with the patch.

                          Carl Love

------------------------------------------------
Powerpc fix for gdb.base/ending-run.exp

The last two tests in this test case fail.  The next to the
last test does a next command when the program is stopped at
the closing bracket for main.  On Powerpc, the message printed
is:

0x00007ffff7d01524 in ?? () from /lib/powerpc64le-linux-gnu/libc.so.6

which fails to match any of the test_multiple options.

The test then does another next command.  On Powerpc, the
message printed it:

Cannot find bounds of current function

which again is not any of the options in the test_multiple.

I checked the behavior on Powerpc to see if this is typical.
I ran gdb on the following simple program as shown below.

#include <stdio.h>
int
main(void)
{
  printf("Hello, world!\n");
  return 0;
}

gdb ./hello_world
<snip the gdb start info>

Type "apropos word" to search for commands related to "word"...
Reading symbols from ./hello_world...
(No debugging symbols found in ./hello_world)
(gdb) break main
Breakpoint 1 at 0x818
(gdb) r

Starting program: /home/carll/hello_world
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/powerpc64le-linux-gnu/libthread_db.so.1".

Breakpoint 1, 0x0000000100000818 in main ()
(gdb) n
Single stepping until exit from function main,
which has no line number information.
Hello, world!
0x00007ffff7d01524 in ?? () from /lib/powerpc64le-linux-gnu/libc.so.6
(gdb) n
Cannot find bounds of current function

So it would seem that the messages seen from the test case are
"normal" output for Powerpc.  Further investigation revealed that this
behavior is the result of the system not having all the needed debug info
files installed.  With the debug info files installed on the system the
test passes without this patch.

The following patch adds the output from Powerpc as an option
to the test_multiple, identifying the output as the expected output
on Powerpc when the debug info files are not installed.

The patch has been tested on a Power 10 system and an Intel
64-bit system.  No additional regression failures were seen on
either platform.
---
 gdb/testsuite/gdb.base/ending-run.exp | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/gdb/testsuite/gdb.base/ending-run.exp b/gdb/testsuite/gdb.base/ending-run.exp
index 32435b2b509..38a52b91e9c 100644
--- a/gdb/testsuite/gdb.base/ending-run.exp
+++ b/gdb/testsuite/gdb.base/ending-run.exp
@@ -202,6 +202,13 @@ gdb_test_multiple "next" "step out of main" {
 	# This is what happens on system using uClibc.
 	pass "step out of main"
     }
+    -re ".*from /lib/powerpc.*$gdb_prompt $" {
+	# This case occurs on Powerpc when gdb steps out of main and the
+	# needed debug info files are not loaded on the system so gdb can
+	# see it stepped to function into __libc_start_call_main.
+	pass "step out of main"
+	set program_exited 1
+    }
 }
 
 # When we're talking to a program running on a real stand-alone board,
-- 
2.32.0




More information about the Gdb-patches mailing list