# Copyright (C) 2010, 2011 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/>.

# This test tries to disassemble over the boundary between two compilation
# units displaying source lines.  This checks that the disassemble routine
# can handle our use of line number 0 to mark the end of sequence.

if { [prepare_for_testing disasm-end-cu.exp "disasm-end-cu" {disasm-end-cu-1.c disasm-end-cu-2.c} {debug}] } {
    return -1
}

if ![runto_main] {
    return -1
}

set main_addr [get_hexadecimal_valueof "&main" "0"]
set dummy_3_addr [get_hexadecimal_valueof "&dummy_3" "0"]

if {$main_addr == 0 || $dummy_3_addr == 0 || $dummy_3_addr <= $main_addr} {
    fail "Unable to extract required addresses, or addresses out of order"
    return -1
}

gdb_test_multiple "disassemble /m ${main_addr},${dummy_3_addr}" "Disassemble address range with source" {
    -re "Dump of assembler code from ${main_addr} to ${dummy_3_addr}:\r\nEnd of assembler dump\." {
        fail "No output from the disassemble command"
    }
    -re "Line number 0 out of range;.* has $decimal lines\." {
        fail "The disassemble command failed"
    }
    -re "Dump of assembler code from ${main_addr} to ${dummy_3_addr}:\r\n.*main.*End of assembler dump\." {
        pass "disassemble command returned some output"
    }
    -re ".*$gdb_prompt $" {
        fail "Unexpected output from disassemble command"
    }
}
