# 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}"] != "" } {
    gdb_suppress_entire_file "WARNING: +objdebug option is not supported in this compiler version, test ignored."
}

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.*"
}

