Re: [PATCH 8/8] Tests for validate symbol file using build-id.

Jan Kratochvil
2013-04-17T20:34:14Z

On Tue, 16 Apr 2013 17:44:56 +0200, Aleksandar Ristovski wrote:
[...]
> +proc solib_matching_test { solibfile symsloaded msg } {
> + global gdb_prompt
> + global testfile
> + global executable
> + global srcdir
> + global subdir
> + global binlibfiledirrun
> + global binlibfiledirgdb
> + global srcfile
> +
> + clean_restart ${binlibfiledirrun}/${executable}
> +
> + gdb_test_no_output "set solib-search-path \"${binlibfiledirgdb}\"" ""
> + if { [gdb_test "cd ${binlibfiledirgdb}" "" ""] != 0 } {
> + untested "cd ${binlibfiledirgdb}"
> + return -1
> + }
> +
> + # Do not auto load shared libraries, the test needs to have control
> + # over when the relevant output gets printed.
> + gdb_test_no_output "set auto-solib-add off" ""
> +
> + if ![runto "${srcfile}:[gdb_get_line_number "set breakpoint 1 here"]"] {
> + return -1
> + }
> +
> + gdb_test "sharedlibrary" "" ""
> +
> + set nocrlf "\[^\r\n\]*"
> + set expected_header "From${nocrlf}To${nocrlf}Syms${nocrlf}Read${nocrlf}Shared${nocrlf}"
> + set expected_line "${symsloaded}${nocrlf}${solibfile}"
> +
> + gdb_test "info sharedlibrary ${solibfile}" \
> + "${expected_header}\r\n.*${expected_line}.*" \
> + "${msg} - Symbols for ${solibfile} loaded: expected '${symsloaded}'"
> +
> + return 0
> +}
> +
> +# Copy binary to working dir so it pulls in the library from that dir
> +# (by the virtue of $ORIGIN).
> +file copy -force "${binlibfiledirgdb}/${executable}" \
> + "${binlibfiledirrun}/${executable}"
> +
> +# Test unstripped, .dynamic matching
> +if { [solib_matching_test "${binlibfilebase}" "No" \
> + "test unstripped, .dynamic matching"] != 0 } {
> + untested "test unstripped, .dynamic matching"

I do not understand this message. "untested" means some tests were skipped.
But here no tests are skipped.

And the callee in one case already prints "untested" itself
(cd ${binlibfiledirgdb}) and in other case it just prints FAIL without any
"untested" output (runto). In the first case there will be two "untested"
messages.

When you are so corrected with "untested" messages make sure it is printed
even in the failed "runto" case and also that "untested" is printed only once.

> +}
> +
> +# Keep original so for debugging purposes
> +file copy -force "${binlibfilegdb}" "${binlibfilegdb}-orig"
> +set objcopy_program [transform objcopy]
> +set result [catch "exec $objcopy_program --only-keep-debug ${binlibfilegdb}"]
> +if {$result != 0} {
> + untested "test --only-keep-debug (objcopy)"

"untested" is inappropriate here because no tests are skipped. Either put
also "return -1" here or remove the "untested" message.

Maybe you meant "xfail" here, that something failed in the supporting system
environment.

> +}
> +
> +# Test --only-keep-debug, .dynamic matching so
> +if { [solib_matching_test "${binlibfilebase}" "No" \
> + "test --only-keep-debug"] != 0 } {
> + untested "test --only-keep-debug"

Likewise probably "xfail".

> +}
> +
> +# Keep previous so for debugging puroses
> +file copy -force "${binlibfilegdb}" "${binlibfilegdb}-orig1"
> +
> +# Copy loaded so over the one gdb will find
> +file copy -force "${binlibfilerun}" "${binlibfilegdb}"
> +
> +# Now test it does not mis-invalidate matching libraries
> +if { [solib_matching_test "${binlibfilebase}" "Yes" \
> + "test matching libraries"] } {
> + untested "test matching libraries"

Likewise duplicate "untested" message.

> +}
> --
> 1.7.10.4

Thanks,
Jan