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

# 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"
    }
}
