Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Anton Blanchard <anton@samba.org>
To: Joel Brobecker <brobecker@adacore.com>
Cc: gdb-patches@sourceware.org, emachado@linux.vnet.ibm.com
Subject: Re: [PATCH 1/3] Fix ppc64 single step over atomic sequence testcase
Date: Tue, 12 Jun 2012 12:45:00 -0000	[thread overview]
Message-ID: <20120612224515.15bc044d@kryten> (raw)
In-Reply-To: <20120611193326.GN2687@adacore.com>


Hi Joel,

> Thanks for your contributions,
> 
> First, a quick question: Are you making these contributions on behalf
> of a corporation, or on your own? This is for copyright assignment
> purposes - I just want to make sure that we have one already on file.

Thanks for the review. I work for IBM and my paperwork should be on
file.

> > The current ppc64 single step over atomic sequence testcase is
> > broken. Convert the test into assembly and use stepi to step
> > through it.
> 
> It would be useful for you to say what exactly is broken, and on
> which platform. At least it seems to have been working for some
> people (at IBM).

Sorry the explanation was a bit terse. The testcase assumes it only
requires two "next"s to get through the test function:

set bp1 [gdb_get_line_number "lwarx"]
gdb_breakpoint "$bp1" "Breakpoint $decimal at $hex" \
  "Set the breakpoint at the start of the sequence"

gdb_test continue "Continuing.*Breakpoint $decimal.*" \
  "Continue until breakpoint"

gdb_test next ".*__asm __volatile.*" \
  "Step through the lwarx/stwcx sequence"

gdb_test next ".*return 0.*" \
  "Step through the ldarx/stdcx sequence"

If I run this testcase manually on Fedora 16 (gcc 4.6.2), it
actually takes 7 steps to get through it:

Breakpoint 2, main () at ./gdb.arch/ppc64-atomic-inst.c:27
27	  __asm __volatile ("1:     lwarx   %0,0,%2\n"              \
(gdb) next
32	                    : "b" (word_addr), "m" (*word_addr)     \
(gdb) next
27	  __asm __volatile ("1:     lwarx   %0,0,%2\n"              \
(gdb) next
39	                    : "=&b" (dword), "=m" (*dword_addr)     \
(gdb) next
35	  __asm __volatile ("1:     ldarx   %0,0,%2\n"              \
(gdb) next
40	                    : "b" (dword_addr), "m" (*dword_addr)   \
(gdb) next
35	  __asm __volatile ("1:     ldarx   %0,0,%2\n"              \
(gdb) next
43	  return 0;
(gdb) 

I'm not sure what is expected here, is "next" supposed to step all the
way through inline assembly? Perhaps it is, but it seems fragile to
depend on this high level behaviour.

Anton

> 
> > 2012-06-05  Anton Blanchard  <anton@samba.org>
> > 
> > 	* gdb.arch/ppc64-atomic-inst.c: Remove
> > 	* gdb.arch/ppc64-atomic-inst.s: New file
> > 	* gdb.arch/ppc64-atomic-inst.exp: Adapt for asm based
> > testcase 
> > 
> > Index: gdb/gdb/testsuite/gdb.arch/ppc64-atomic-inst.exp
> > ===================================================================
> > --- gdb.orig/gdb/testsuite/gdb.arch/ppc64-atomic-inst.exp
> > +++ gdb/gdb/testsuite/gdb.arch/ppc64-atomic-inst.exp
> > @@ -27,7 +27,7 @@ if {![istarget "powerpc*"] || ![is_lp64_
> >  }
> >  
> >  set testfile "ppc64-atomic-inst"
> > -set srcfile ${testfile}.c
> > +set srcfile ${testfile}.s
> >  set binfile ${objdir}/${subdir}/${testfile}
> >  set compile_flags {debug quiet}
> >  
> > @@ -50,11 +50,18 @@ set bp1 [gdb_get_line_number "lwarx"]
> >  gdb_breakpoint "$bp1" "Breakpoint $decimal at $hex" \
> >    "Set the breakpoint at the start of the sequence"
> >  
> > +set bp2 [gdb_get_line_number "ldarx"]
> > +gdb_breakpoint "$bp2" "Breakpoint $decimal at $hex" \
> > +  "Set the breakpoint at the start of the sequence"
> > +
> >  gdb_test continue "Continuing.*Breakpoint $decimal.*" \
> >    "Continue until breakpoint"
> >  
> > -gdb_test next ".*__asm __volatile.*" \
> > +gdb_test nexti "bne.*1b" \
> >    "Step through the lwarx/stwcx sequence"
> >  
> > -gdb_test next ".*return 0.*" \
> > -  "Step through the ldarx/stdcx sequence"
> > +gdb_test continue "Continuing.*Breakpoint $decimal.*" \
> > +  "Continue until breakpoint"
> > +
> > +gdb_test nexti "bne.*1b" \
> > +  "Step through the lwarx/stwcx sequence"
> > Index: gdb/gdb/testsuite/gdb.arch/ppc64-atomic-inst.c
> > ===================================================================
> > --- gdb.orig/gdb/testsuite/gdb.arch/ppc64-atomic-inst.c
> > +++ /dev/null
> > @@ -1,44 +0,0 @@
> > -/* This file is part of GDB, the GNU debugger.
> > -
> > -   Copyright 2008-2012 Free Software Foundation, Inc.
> > -
> > -   This program is free software; you can redistribute it and/or
> > modify
> > -   it under the terms of the GNU General Public License as
> > published by
> > -   the Free Software Foundation; either version 3 of the License,
> > or
> > -   (at your option) any later version.
> > -
> > -   This program is distributed in the hope that it will be useful,
> > -   but WITHOUT ANY WARRANTY; without even the implied warranty of
> > -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> > -   GNU General Public License for more details.
> > -
> > -   You should have received a copy of the GNU General Public
> > License
> > -   along with this program.  If not, see
> > <http://www.gnu.org/licenses/>.  */ -
> > -#include <stdio.h>
> > -
> > -int main()
> > -{
> > -  unsigned int word = 0;
> > -  unsigned int *word_addr = &word;
> > -  unsigned long dword = 0;
> > -  unsigned long *dword_addr = &dword;
> > -
> > -  __asm __volatile ("1:     lwarx   %0,0,%2\n"              \
> > -                    "       addi    %0,%0,1\n"              \
> > -                    "       stwcx.  %0,0,%2\n"              \
> > -                    "       bne-    1b"
> > \
> > -                    : "=&b" (word), "=m" (*word_addr)       \
> > -                    : "b" (word_addr), "m" (*word_addr)     \
> > -                    : "cr0", "memory");
> > \ -
> > -  __asm __volatile ("1:     ldarx   %0,0,%2\n"              \
> > -                    "       addi    %0,%0,1\n"              \
> > -                    "       stdcx.  %0,0,%2\n"              \
> > -                    "       bne-    1b"                     \
> > -                    : "=&b" (dword), "=m" (*dword_addr)     \
> > -                    : "b" (dword_addr), "m" (*dword_addr)   \
> > -                    : "cr0", "memory");                     \
> > -
> > -  return 0;
> > -}
> > Index: gdb/gdb/testsuite/gdb.arch/ppc64-atomic-inst.s
> > ===================================================================
> > --- /dev/null
> > +++ gdb/gdb/testsuite/gdb.arch/ppc64-atomic-inst.s
> > @@ -0,0 +1,26 @@
> > +        .include "gdb.asm/common.inc"
> > +        .include "gdb.asm/powerpc64.inc"
> > +
> > +.global main
> > +gdbasm_declare main
> > +	li	0,0
> > +	addi	4,1,-8
> > +
> > +	stw	0,0(4)
> > +1:	lwarx	5,0,4
> > +	cmpwi	5,0
> > +	bne	2f
> > +	addi	5,5,1
> > +	stwcx.	5,0,4
> > +	bne	1b
> > +
> > +	std	0,0(4)
> > +2:	ldarx	5,0,4
> > +	cmpdi	5,0
> > +	bne	3f
> > +	addi	5,5,1
> > +	stdcx.	5,0,4
> > +	bne	1b
> > +
> > +3:	li	3,0
> > +	blr
> 


  reply	other threads:[~2012-06-12 12:45 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-06  3:56 Anton Blanchard
2012-06-06  3:57 ` [PATCH 2/3] Support up to 3 conditional branches in an atomic sequence Anton Blanchard
2012-06-13 16:02   ` Joel Brobecker
2012-07-16  6:34     ` Anton Blanchard
2012-09-28 10:44       ` Joel Brobecker
2012-09-28 11:44       ` Pedro Alves
2012-06-06  3:58 ` [PATCH 3/3] Add multiple branches to single step through atomic sequence testcase Anton Blanchard
2012-06-13 16:06   ` Joel Brobecker
2012-07-16  6:43     ` Anton Blanchard
2012-09-28 10:44   ` Joel Brobecker
2012-06-11 19:33 ` [PATCH 1/3] Fix ppc64 single step over " Joel Brobecker
2012-06-12 12:45   ` Anton Blanchard [this message]
2012-06-12 13:06     ` Luis Gustavo
2012-06-12 13:17       ` Joel Brobecker
2012-06-12 13:28         ` Luis Gustavo
2012-06-12 16:53           ` Edjunior Barbosa Machado
2012-06-13  0:46             ` Anton Blanchard
2012-06-13 14:00               ` Edjunior Barbosa Machado
2012-06-13 15:37                 ` Joel Brobecker
2012-07-16  6:23                   ` Anton Blanchard
2012-09-26 23:21                     ` Edjunior Barbosa Machado
2012-09-27 19:03                       ` Luis Gustavo
2012-09-28 10:16                     ` Joel Brobecker
2013-07-29  7:39 Anton Blanchard
2013-07-30 17:15 ` Edjunior Barbosa Machado
2013-07-31 12:31   ` Anton Blanchard
2013-08-01 15:54     ` Ulrich Weigand
2013-08-02 13:45       ` Anton Blanchard
2014-03-31  2:59 Anton Blanchard
2014-03-31 15:38 ` Ulrich Weigand

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20120612224515.15bc044d@kryten \
    --to=anton@samba.org \
    --cc=brobecker@adacore.com \
    --cc=emachado@linux.vnet.ibm.com \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox