e22f8b7c8c
Switch the license of all .f and .f90 files to GPLv3. Switch the license of all .s and .S files to GPLv3.
268 lines
8.8 KiB
Text
268 lines
8.8 KiB
Text
# Copyright 1992, 1994, 1995, 1997, 2007 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/>.
|
|
|
|
# Please email any bugs, comments, and/or additions to this file to:
|
|
# bug-gdb@prep.ai.mit.edu
|
|
|
|
# This file was written by Fred Fish. (fnf@cygnus.com)
|
|
|
|
if $tracelevel then {
|
|
strace $tracelevel
|
|
}
|
|
|
|
set prms_id 0
|
|
set bug_id 0
|
|
|
|
set testfile "bitfields"
|
|
set srcfile ${testfile}.c
|
|
set binfile ${objdir}/${subdir}/${testfile}
|
|
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
|
|
untested bitfields.exp
|
|
return -1
|
|
}
|
|
|
|
#
|
|
# Test bitfield locating and uniqueness.
|
|
# For each member, set that member to 1 and verify that the member (and only
|
|
# that member) is 1, then reset it back to 0.
|
|
#
|
|
|
|
proc bitfield_uniqueness {} {
|
|
global decimal
|
|
global hex
|
|
global gdb_prompt
|
|
global srcfile
|
|
|
|
if { ! [runto break1] } {
|
|
gdb_suppress_tests;
|
|
}
|
|
|
|
if [gdb_test "print flags" ".*uc = 1 .*, s1 = 0, u1 = 0, s2 = 0, u2 = 0, s3 = 0, u3 = 0, s9 = 0, u9 = 0, sc = 0.*"] {
|
|
gdb_suppress_tests;
|
|
}
|
|
if [gdb_test "cont" "Break.*break1 \\(\\) at .*$srcfile:$decimal.*" "continuing to break1 #1"] {
|
|
gdb_suppress_tests;
|
|
}
|
|
# Note that we check for s1 as either 1 or -1, so that failure to
|
|
# treat it correctly as a signed 1bit field (values 0 or -1) while
|
|
# printing its value does not cause a spurious failure. We do the
|
|
# signedness preservation test later.
|
|
if [gdb_test "print flags" ".*uc = 0 .*, s1 = (1|-1), u1 = 0, s2 = 0, u2 = 0, s3 = 0, u3 = 0, s9 = 0, u9 = 0, sc = 0.*" "bitfield uniqueness (s1)"] {
|
|
gdb_suppress_tests;
|
|
}
|
|
if [gdb_test "cont" "Break.*break1 \\(\\) at .*$srcfile:$decimal.*" "continuing to break1 #2"] {
|
|
gdb_suppress_tests;
|
|
}
|
|
if [gdb_test "print flags" ".*uc = 0 .*, s1 = 0, u1 = 1, s2 = 0, u2 = 0, s3 = 0, u3 = 0, s9 = 0, u9 = 0, sc = 0.*" "bitfield uniqueness (u1)"] {
|
|
gdb_suppress_tests;
|
|
}
|
|
if [gdb_test "cont" "Break.*break1 \\(\\) at .*$srcfile:$decimal.*" "continuing to break1 #3"] {
|
|
gdb_suppress_tests;
|
|
}
|
|
if [gdb_test "print flags" ".*uc = 0 .*, s1 = 0, u1 = 0, s2 = 1, u2 = 0, s3 = 0, u3 = 0, s9 = 0, u9 = 0, sc = 0.*" "bitfield uniqueness (s2)"] {
|
|
gdb_suppress_tests;
|
|
}
|
|
if [gdb_test "cont" "Break.*break1 \\(\\) at .*$srcfile:$decimal.*" "continuing to break1 #4"] {
|
|
gdb_suppress_tests;
|
|
}
|
|
if [gdb_test "print flags" ".*uc = 0 .*, s1 = 0, u1 = 0, s2 = 0, u2 = 1, s3 = 0, u3 = 0, s9 = 0, u9 = 0, sc = 0.*" "bitfield uniqueness (u2)"] {
|
|
gdb_suppress_tests;
|
|
}
|
|
if [gdb_test "cont" "Break.*break1 \\(\\) at .*$srcfile:$decimal.*" "continuing to break1 #5"] {
|
|
gdb_suppress_tests;
|
|
}
|
|
if [gdb_test "print flags" ".*uc = 0 .*, s1 = 0, u1 = 0, s2 = 0, u2 = 0, s3 = 1, u3 = 0, s9 = 0, u9 = 0, sc = 0.*" "bitfield uniqueness (s3)"] {
|
|
gdb_suppress_tests;
|
|
}
|
|
if [gdb_test "cont" "Break.*break1 \\(\\) at .*$srcfile:$decimal.*" "continuing to break1 #6"] {
|
|
gdb_suppress_tests;
|
|
}
|
|
if [gdb_test "print flags" ".*uc = 0 .*, s1 = 0, u1 = 0, s2 = 0, u2 = 0, s3 = 0, u3 = 1, s9 = 0, u9 = 0, sc = 0.*" "bitfield uniqueness (u3)"] {
|
|
gdb_suppress_tests
|
|
}
|
|
if [gdb_test "cont" "Break.*break1 \\(\\) at .*$srcfile:$decimal.*" "continuing to break1 #7"] {
|
|
gdb_suppress_tests
|
|
}
|
|
if [gdb_test "print flags" ".*uc = 0 .*, s1 = 0, u1 = 0, s2 = 0, u2 = 0, s3 = 0, u3 = 0, s9 = 1, u9 = 0, sc = 0.*" "bitfield uniqueness (s9)"] {
|
|
gdb_suppress_tests
|
|
}
|
|
if [gdb_test "cont" "Break.*break1 \\(\\) at .*$srcfile:$decimal.*" "continuing to break1 #8"] {
|
|
gdb_suppress_tests
|
|
}
|
|
if [gdb_test "print flags" ".*uc = 0 .*, s1 = 0, u1 = 0, s2 = 0, u2 = 0, s3 = 0, u3 = 0, s9 = 0, u9 = 1, sc = 0.*" "bitfield uniqueness (u9)"] {
|
|
gdb_suppress_tests
|
|
}
|
|
if [gdb_test "cont" "Break.*break1 \\(\\) at .*$srcfile:$decimal.*" "continuing to break1 #9"] {
|
|
gdb_suppress_tests
|
|
}
|
|
if [gdb_test "print flags" ".*uc = 0 .*, s1 = 0, u1 = 0, s2 = 0, u2 = 0, s3 = 0, u3 = 0, s9 = 0, u9 = 0, sc = 1.*" "bitfield uniqueness (sc)"] {
|
|
gdb_suppress_tests
|
|
}
|
|
# Hmmmm?
|
|
gdb_stop_suppressing_tests;
|
|
}
|
|
|
|
|
|
#
|
|
# Test bitfield containment.
|
|
# Fill alternating fields with all 1's and verify that none of the bits
|
|
# "bleed over" to the other fields.
|
|
#
|
|
|
|
proc bitfield_containment {} {
|
|
global decimal
|
|
global hex
|
|
global gdb_prompt
|
|
global srcfile
|
|
|
|
delete_breakpoints
|
|
|
|
if { ![runto break2] } {
|
|
gdb_suppress_tests
|
|
}
|
|
|
|
if [gdb_test "print/x flags" "= {uc = 0xff, s1 = 0x0, u1 = 0x1, s2 = 0x0, u2 = 0x3, s3 = 0x0, u3 = 0x7, s9 = 0x0, u9 = 0x1ff, sc = 0x0}" "bitfield containment #1"] {
|
|
gdb_suppress_tests
|
|
}
|
|
|
|
if [gdb_test "cont" "Break.*break2 \\(\\) at .*$srcfile:$decimal.*" "continuing to break2"] {
|
|
gdb_suppress_tests
|
|
}
|
|
|
|
# If program is compiled with Sun CC, then these print out as their
|
|
# actual sizes; if compiled with gcc, they print out as 0xffffffff
|
|
# (which strikes me as bogus, but accept it at least for now).
|
|
if [gdb_test "print/x flags" "= {uc = 0x0, s1 = 0x(1|f*), u1 = 0x0, s2 = 0x(3|f*), u2 = 0x0, s3 = 0x(7|f*), u3 = 0x0, s9 = 0x(1ff|f*), u9 = 0x0, sc = 0xff}" "bitfield containment #2"] {
|
|
gdb_suppress_tests
|
|
}
|
|
gdb_stop_suppressing_tests;
|
|
}
|
|
|
|
# Test unsigned bitfields for unsignedness and range.
|
|
# Fill the unsigned fields with the maximum positive value and verify that
|
|
# the values are printed correctly.
|
|
|
|
proc bitfield_unsignedness {} {
|
|
global decimal
|
|
global hex
|
|
global gdb_prompt
|
|
global srcfile
|
|
|
|
delete_breakpoints
|
|
|
|
if { ![runto break3] } {
|
|
gdb_suppress_tests
|
|
}
|
|
|
|
if [gdb_test "print flags" ".*uc = 0 .*, s1 = 0, u1 = 1, s2 = 0, u2 = 3, s3 = 0, u3 = 7, s9 = 0, u9 = 511, sc = 0.*" "unsigned bitfield ranges"] {
|
|
gdb_suppress_tests
|
|
}
|
|
gdb_stop_suppressing_tests;
|
|
}
|
|
|
|
#
|
|
# Test signed bitfields for signedness and range.
|
|
# Fill the signed fields with the maximum positive value, then the maximally
|
|
# negative value, then -1, and verify in each case that the values are
|
|
# printed correctly.
|
|
#
|
|
|
|
proc bitfield_signedness {} {
|
|
global decimal
|
|
global hex
|
|
global gdb_prompt
|
|
global srcfile
|
|
|
|
delete_breakpoints
|
|
|
|
if { ! [runto break4] } {
|
|
gdb_suppress_tests
|
|
}
|
|
|
|
if [gdb_test "print flags" "= {uc = 0 .*, s1 = 0, u1 = 0, s2 = 1, u2 = 0, s3 = 3, u3 = 0, s9 = 255, u9 = 0, sc = 0 .*}" "signed bitfields, max positive values"] {
|
|
gdb_suppress_tests
|
|
}
|
|
|
|
if [gdb_test "cont" "Break.*break4 \\(\\) at .*$srcfile:$decimal.*" "continuing to break4 #1"] {
|
|
gdb_suppress_tests
|
|
}
|
|
|
|
# Determine if the target has signed bitfields so we can xfail the
|
|
# the signed bitfield tests if it doesn't.
|
|
send_gdb "print i\n"
|
|
gdb_expect {
|
|
-re ".* = -256.*$gdb_prompt $" {
|
|
pass "determining signed-ness of bitfields"
|
|
}
|
|
-re ".* = 256.*$gdb_prompt $" {
|
|
pass "determining signed-ness of bitfields"
|
|
setup_xfail "*-*-*"
|
|
}
|
|
-re ".*$gdb_prompt $" {
|
|
fail "determining signed-ness of bitfields"
|
|
gdb_suppress_tests
|
|
}
|
|
default {
|
|
fail "determining signed-ness of bitfields" ;
|
|
gdb_suppress_tests;
|
|
}
|
|
}
|
|
|
|
if [gdb_test "print flags" ".*uc = 0 .*, s1 = -1, u1 = 0, s2 = -2, u2 = 0, s3 = -4, u3 = 0, s9 = -256, u9 = 0, sc = 0.*" "signed bitfields, max negative values"] {
|
|
gdb_suppress_tests
|
|
}
|
|
|
|
if [gdb_test "cont" "Break.*break4 \\(\\) at .*$srcfile:$decimal.*" "continuing to break4 #2"] {
|
|
gdb_suppress_tests
|
|
}
|
|
|
|
if [gdb_test "print flags" ".*uc = 0 .*, s1 = -1, u1 = 0, s2 = -1, u2 = 0, s3 = -1, u3 = 0, s9 = -1, u9 = 0, sc = 0.*" "signed bitfields with -1"] {
|
|
gdb_suppress_tests
|
|
}
|
|
# Hmmmm???
|
|
gdb_stop_suppressing_tests;
|
|
}
|
|
|
|
gdb_start
|
|
gdb_reinitialize_dir $srcdir/$subdir
|
|
gdb_load ${binfile}
|
|
|
|
send_gdb "set print sevenbit-strings\n" ; gdb_expect -re "$gdb_prompt $"
|
|
|
|
bitfield_uniqueness
|
|
if [istarget "mips-idt-*"] then {
|
|
# Restart because IDT/SIM runs out of file descriptors.
|
|
gdb_exit
|
|
gdb_start
|
|
gdb_reinitialize_dir $srcdir/$subdir
|
|
gdb_load ${binfile}
|
|
}
|
|
bitfield_containment
|
|
if [istarget "mips-idt-*"] then {
|
|
# Restart because IDT/SIM runs out of file descriptors.
|
|
gdb_exit
|
|
gdb_start
|
|
gdb_reinitialize_dir $srcdir/$subdir
|
|
gdb_load ${binfile}
|
|
}
|
|
bitfield_unsignedness
|
|
if [istarget "mips-idt-*"] then {
|
|
# Restart because IDT/SIM runs out of file descriptors.
|
|
gdb_exit
|
|
gdb_start
|
|
gdb_reinitialize_dir $srcdir/$subdir
|
|
gdb_load ${binfile}
|
|
}
|
|
bitfield_signedness
|