# 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}/objdbg03
set objdbgdir ${objdir}/${subdir}/objdbg03
set binfile ${objdbgdir}/${testfile}
set toolssubdir ${srcdir}/${subdir}/tools
if [istarget "hppa64-*-*"] {
  set symaddrfile ${toolssubdir}/symaddr.pa64
} else {
  set symaddrfile ${toolssubdir}/symaddr
}

# Create and source the file that provides information about the compiler
# used to compile the test case.
if [get_compiler_info] {
    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 objdbg03.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
}

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

#
# Test some normal commons
#

# Print the types

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

gdb_test "ptype common1" "type = int"
gdb_test "ptype common2" "type = int"
gdb_test "ptype common3" "type = int"
gdb_test "ptype data1" "type = int"
gdb_test "ptype data2" "type = int"
gdb_test "ptype data3" "type = int"
gdb_test "ptype common11" "type = int"
gdb_test "ptype common10" "type = int"
gdb_test "ptype data10" "type = int"
gdb_test "ptype data11" "type = int"

# Print the values

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 11."
gdb_test "run" "Starting program:.*Breakpoint \[0-9\]+, main .*/x1.cc:11.*"
gdb_test "p data1" "..* = 1"
gdb_test "p data2" "..* = 2"
gdb_test "p data3" "..* = 3"
gdb_test "p data10" "..* = 10"
gdb_test "p data11" "..* = 11"
gdb_test "n" ".*12.*"
gdb_test "p common11" "..* = 11"

gdb_test "s 1" "foo .*/x3.cc:15.*"
gdb_test "s 4" ".*20.*"
gdb_test "p data4" "..* = 4"
gdb_test "p common4" "..* = 4"
gdb_test "n" ".*21.*"

gdb_test "n" "main .*/x1.cc:14.*"
gdb_test "p common1" "..* = 1"
gdb_test "p common2" "..* = 2"
gdb_test "p common3" "..* = 3"

# Verify that addresses match those in the executable

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

set exec_output_data1 [lindex [remote_exec build "${symaddrfile} ${binfile} data1"] 1]
regsub -all "\[\r\n\]" ${exec_output_data1} "" exec_output_data1

set exec_output_data2 [lindex [remote_exec build "${symaddrfile} ${binfile} data2"] 1]
regsub -all "\[\r\n\]" ${exec_output_data2} "" exec_output_data2

set exec_output_data3 [lindex [remote_exec build "${symaddrfile} ${binfile} data3"] 1]
regsub -all "\[\r\n\]" ${exec_output_data3} "" exec_output_data3

set exec_output_data10 [lindex [remote_exec build "${symaddrfile} ${binfile} data10"] 1]
regsub -all "\[\r\n\]" ${exec_output_data10} "" exec_output_data10

set exec_output_data11 [lindex [remote_exec build "${symaddrfile} ${binfile} data11"] 1]
regsub -all "\[\r\n\]" ${exec_output_data11} "" exec_output_data11

set exec_output_common1 [lindex [remote_exec build "${symaddrfile} ${binfile} common1"] 1]
regsub -all "\[\r\n\]" ${exec_output_common1} "" exec_output_common1

set exec_output_common2 [lindex [remote_exec build "${symaddrfile} ${binfile} common2"] 1]
regsub -all "\[\r\n\]" ${exec_output_common2} "" exec_output_common2

set exec_output_common3 [lindex [remote_exec build "${symaddrfile} ${binfile} common3"] 1]
regsub -all "\[\r\n\]" ${exec_output_common3} "" exec_output_common3

set exec_output_common10 [lindex [remote_exec build "${symaddrfile} ${binfile} common10"] 1]
regsub -all "\[\r\n\]" ${exec_output_common10} "" exec_output_common10

set exec_output_common11 [lindex [remote_exec build "${symaddrfile} ${binfile} common11"] 1]
regsub -all "\[\r\n\]" ${exec_output_common11} "" exec_output_common11

if [istarget "hppa64-*-*"] {
    gdb_test "p &data1" "..* = \\(int \[*\]\\) ${exec_output_data1}"
    gdb_test "p &data2" "..* = \\(int \[*\]\\) ${exec_output_data2}"
    gdb_test "p &data3" "..* = \\(int \[*\]\\) ${exec_output_data3}"
    gdb_test "p &data10" "..* = \\(int \[*\]\\) ${exec_output_data10}"
    gdb_test "p &data11" "..* = \\(int \[*\]\\) ${exec_output_data11}"
    gdb_test "p &common1" "..* = \\(int \[*\]\\) ${exec_output_common1}"
    gdb_test "p &common2" "..* = \\(int \[*\]\\) ${exec_output_common2}"
    gdb_test "p &common3" "..* = \\(int \[*\]\\) ${exec_output_common3}"
    gdb_test "p &common10" "..* = \\(int \[*\]\\) ${exec_output_common10}"
    gdb_test "p &common11" "..* = \\(int \[*\]\\) ${exec_output_common11}"
} else {
    gdb_test "p &data1" "..* = \\(int \[*\]\\) 0x${exec_output_data1}"
    gdb_test "p &data2" "..* = \\(int \[*\]\\) 0x${exec_output_data2}"
    gdb_test "p &data3" "..* = \\(int \[*\]\\) 0x${exec_output_data3}"
    gdb_test "p &data10" "..* = \\(int \[*\]\\) 0x${exec_output_data10}"
    gdb_test "p &data11" "..* = \\(int \[*\]\\) 0x${exec_output_data11}"
    gdb_test "p &common1" "..* = \\(int \[*\]\\) 0x${exec_output_common1}"
    gdb_test "p &common2" "..* = \\(int \[*\]\\) 0x${exec_output_common2}"
    gdb_test "p &common3" "..* = \\(int \[*\]\\) 0x${exec_output_common3}"
    gdb_test "p &common10" "..* = \\(int \[*\]\\) 0x${exec_output_common10}"
    gdb_test "p &common11" "..* = \\(int \[*\]\\) 0x${exec_output_common11}"
}
