# Copyright 2010 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/>.

# Test some DWARF piece operators.

# This test can only be run on targets which support DWARF-2 and use gas.
# For now pick a sampling of likely targets.
if {![istarget *-*-linux*]
    && ![istarget *-*-gnu*]
    && ![istarget *-*-elf*]
    && ![istarget *-*-openbsd*]
    && ![istarget arm-*-eabi*]
    && ![istarget powerpc-*-eabi*]} {
    return 0  
}
# This test can only be run on x86 targets.
if {![istarget i?86-*]} {
    return 0  
}

set testfile "pieces"
set srcfile ${testfile}.S
set csrcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}.x

if {[prepare_for_testing ${testfile}.exp ${testfile}.x $srcfile]} {
    return -1
}

if ![runto_main] {
    return -1
}

# Function f1 tests a particular gdb bug involving DW_OP_piece.
proc pieces_test_f1 {} {
    global csrcfile
    set line [gdb_get_line_number "f1 breakpoint" $csrcfile]
    gdb_test "break pieces.c:$line" "Breakpoint 2.*" \
	"set f1 breakpoint for pieces"
    gdb_continue_to_breakpoint "continue to f1 breakpoint for pieces"
    gdb_test "print a" " = {i = 4, j = 14}" "print a in pieces:f1"
    gdb_test "print a.j" " = 14" "print a.j in pieces:f1"
}

# Function f2 tests for a bug when indexing into an array created
# using DW_OP_piece.
proc pieces_test_f2 {} {
    global csrcfile
    set line [gdb_get_line_number "f2 breakpoint" $csrcfile]
    gdb_test "break pieces.c:$line" "Breakpoint 3.*" \
       "set f2 breakpoint for pieces"
    gdb_continue_to_breakpoint "continue to f2 breakpoint for pieces"
    gdb_test "print a" " = .4, 14." "print a in pieces:f2"
    gdb_test "print a\[0\]" " = 4" "print a\[0\] in pieces:f2"
    gdb_test "print a\[1\]" " = 14" "print a\[1\] in pieces:f2"
}

# Function f3 tests DW_OP_bit_piece.
proc pieces_test_f3 {} {
    global csrcfile
    set line [gdb_get_line_number "f3 breakpoint" $csrcfile]
    gdb_test "break pieces.c:$line" "Breakpoint 4.*" \
       "set f3 breakpoint for pieces"
    gdb_continue_to_breakpoint "continue to f3 breakpoint for pieces"
    gdb_test "print a.i" " = 4" "print a.i in pieces:f3"
    gdb_test "print a.j" " = 14" "print a.j in pieces:f3"
    gdb_test "print a.i = 7" " = 7" "set a.i in pieces:f3"
    gdb_test "print a.i" " = 7" "print new a.i in pieces:f3"
}

# Function f6 tests for an empty DW_OP_piece.
proc pieces_test_f6 {} {
    global csrcfile
    set line [gdb_get_line_number "f6 breakpoint" $csrcfile]
    gdb_test "break pieces.c:$line" "Breakpoint 5.*" \
       "set f6 breakpoint for pieces"
    gdb_continue_to_breakpoint "continue to f6 breakpoint for pieces"
    gdb_test "print a" \
	" = {i = 7, j = 8, q = .value optimized out.}" \
	"print a with optimized out piece"
    # Note: no warning for this case.
    gdb_test_multiple "print a.i" \
	"print a.i with optimized out piece" {
	    -re "warning: some bits in computed object" {
		fail "print a.i with optimized out piece"
	    }
	    -re " = 7" {
		pass "print a.i with optimized out piece"
	    }
	}
}

pieces_test_f1
pieces_test_f2
pieces_test_f3
pieces_test_f6
