# Test reading debug information from in object files.

if { [skip_hp_tests] } { continue }

if { ![istarget "hppa*-*-hpux*"] } {
    verbose "HPUX test ignored for non-hppa targets."
    return 0
}

set testfile "test"
set srcsubdir ${srcdir}/${subdir}/objdbg02
set objdbgdir ${objdir}/${subdir}/objdbg02
set binfile ${objdbgdir}/${testfile}
set toolssubdir ${srcdir}/${subdir}/tools

# Create and source the file that provides information about the compiler
# used to compile the test case.
if [get_compiler_info ${binfile}] {
    return -1
}

if {!$hp_aCC_compiler && !$hp_cc_compiler} {
  return 0
}

if { [gdb_compile "${toolssubdir}/test-objdbg.cc" "${objdbgdir}/test-objdbg.o" object "debug c++ {additional_flags=-I${toolssubdir} +objdebug}"] != "" } {
    untested objdbg02.exp
    return -1
}

if { [gdb_compile "${srcsubdir}/x1.cc" "${objdbgdir}/x1.o" object "debug c++ {additional_flags=-I${srcsubdir} +objdebug}"] != "" } {
    perror "Couldn't compile x1.cc"
    return -1
}

if { [gdb_compile "${srcsubdir}/x2.cc" "${objdbgdir}/x2.o" object "debug c++ {additional_flags=-I${srcsubdir} +objdebug}"] != "" } {
    perror "Couldn't compile x2.cc"
    return -1
}

if { [gdb_compile "${srcsubdir}/x3.cc" "${objdbgdir}/x3.o" object "debug c++ {additional_flags=-I${srcsubdir} +objdebug}"] != "" } {
    perror "Couldn't compile x3.cc"
    return -1
}

remote_exec build "rm -f ${objdbgdir}/test.a"
set status [remote_exec build "ar cr ${objdbgdir}/test.a ${objdbgdir}/x2.o ${objdbgdir}/x3.o"]
if { [lindex $status 0] != 0 } {
    perror "Couldn't compile test.a"
    return -1
}
remote_exec build "rm -f ${objdbgdir}/x2.o ${objdbgdir}/x3.o"

if { [gdb_compile "${objdbgdir}/x1.o ${objdbgdir}/test.a" "$binfile" executable "debug c++ {additional_flags=-I${srcsubdir} +objdebug}"] != "" } {
    perror "Couldn't compile ${binfile}"
    return -1
}

# Test loading debug information from an archive file

gdb_exit
gdb_start
gdb_reinitialize_dir ${srcsubdir}
gdb_load ${binfile}

gdb_test "b main" "Breakpoint \[0-9\]+ at 0x\[0-9a-f\]+: file ..*/x1.cc, line 12."
gdb_test "run" "Starting program:.*Breakpoint \[0-9\]+, main .*/x1.cc:12.*"
gdb_test "s 1" ".*13.*"
gdb_test "s 1" "foo1 .*/x2.cc:15.*"
gdb_test "s 1" ".*16.*"
gdb_test "s 1" "foo2 .*/x2.cc:10.*"
gdb_test "s 1" ".*11.*"
gdb_test "s 1" "foo1 .*/x2.cc:17.*"
gdb_test "s 1" "main .*/x1.cc:14.*"
gdb_test "s 1" "foo3 .*/x3.cc:5.*"
gdb_test "s 1" ".*6.*"
gdb_test "s 1" "main .*/x1.cc:15.*"
gdb_test "s 1" ".*16.*"
if [istarget "hppa64-*-*"] {
    gdb_test "s 1" "0x\[0-9a-f\]+ in .*START.*"
    gdb_test "c" ".*Program exited normally.*"
} else {
    gdb_test "s 1" "0x\[0-9a-f\]+ in _start .*"
    gdb_test "s 1" ".*Program exited normally.*"
}

