3 changed files with 115 additions and 0 deletions
@ -0,0 +1,44 @@ |
|||
/* This file is part of GDB, the GNU debugger.
|
|||
|
|||
Copyright 2008 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; |
|||
} |
|||
@ -0,0 +1,66 @@ |
|||
# Copyright 2008 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, write to the Free Software |
|||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
|||
# |
|||
# This file is part of the gdb testsuite. |
|||
|
|||
if $tracelevel { |
|||
strace $tracelevel |
|||
} |
|||
|
|||
# Test single stepping through atomic sequences beginning with |
|||
# a lwarx/ldarx instruction and ending with a stwcx/stdcx |
|||
# instruction. |
|||
|
|||
set prms_id 0 |
|||
set bug_id 0 |
|||
|
|||
if ![istarget "powerpc64-*"] then { |
|||
verbose "Skipping testing of powerpc64 single stepping over atomic sequences." |
|||
return |
|||
} |
|||
|
|||
set testfile "ppc64-atomic-inst" |
|||
set srcfile ${testfile}.c |
|||
set binfile ${objdir}/${subdir}/${testfile} |
|||
set compile_flags "debug" |
|||
|
|||
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [concat debug additional_flags=-m64]] != "" } { |
|||
unsupported "Testcase compile failed." |
|||
return -1 |
|||
} |
|||
|
|||
gdb_exit |
|||
gdb_start |
|||
gdb_reinitialize_dir $srcdir/$subdir |
|||
gdb_load ${binfile} |
|||
|
|||
if ![runto_main] then { |
|||
perror "Couldn't run to breakpoint" |
|||
continue |
|||
} |
|||
|
|||
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" |
|||
Loading…
Reference in new issue