Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(245)

Unified Diff: gdb/testsuite/gdb.base/gnu-debugdata.exp

Issue 124383005: GDB 7.6.50 (Closed) Base URL: http://git.chromium.org/native_client/nacl-gdb.git@upstream
Patch Set: Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gdb/testsuite/gdb.base/gnu-debugdata.c ('k') | gdb/testsuite/gdb.base/gnu-ifunc.c » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gdb/testsuite/gdb.base/gnu-debugdata.exp
diff --git a/gdb/testsuite/gdb.base/gnu-debugdata.exp b/gdb/testsuite/gdb.base/gnu-debugdata.exp
new file mode 100644
index 0000000000000000000000000000000000000000..4ed3438252774d85e279ea10bf4a767370128965
--- /dev/null
+++ b/gdb/testsuite/gdb.base/gnu-debugdata.exp
@@ -0,0 +1,159 @@
+# Copyright 2012-2013 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/>.
+
+standard_testfile
+
+if [build_executable ${testfile}.exp $testfile] {
+ return -1
+}
+
+set pipeline_counter 0
+
+set objcopy_program [gdb_find_objcopy]
+
+# Run a pipeline of processes through 'run_on_host'.
+# TEST is the base name of the test, it is modified and passed to 'run_on_host'.
+# Each subsequent argument is a list of the form {PROGRAM [ARG]...}.
+# It is passed to 'run_on_host'. However, before being passed, if input and
+# output files are not specified in the list, then this proc provides them.
+# Each program in the pipeline takes its input from the previous
+# program's output.
+
+proc pipeline {test args} {
+ global pipeline_counter
+
+ set input_file {}
+ foreach arglist $args {
+ verbose "raw args are $arglist"
+
+ set program [lindex $arglist 0]
+ set arguments [lindex $arglist 1]
+ set input [lindex $arglist 2]
+ set output [lindex $arglist 3]
+
+ if {$input == ""} {
+ set input $input_file
+ }
+ if {$output == ""} {
+ set output [standard_output_file pipe.[pid].$pipeline_counter]
+ incr pipeline_counter
+ }
+ verbose "cooked args are [list $program $arguments $input $output]"
+
+ if {[run_on_host "$test - invoke $program" $program $arguments \
+ $input $output]} {
+ return -1
+ }
+
+ set input_file $output
+ }
+ return 0
+}
+
+# Extract the dynamic symbols from the main binary, there is no need
+# to also have these in the normal symbol table.
+remote_file host delete ${binfile}.dynsyms
+if {[pipeline "nm -D" \
+ [list [transform nm] "-D ${binfile} --format=posix --defined-only"] \
+ [list awk "\\{print\\ \\\$1\\}"] \
+ [list sort "" "" "${binfile}.dynsyms"]]} {
+ return -1
+}
+
+# Extract all the text (i.e. function) symbols from the debuginfo.
+# (Note that we actually also accept "D" symbols, for the benefit
+# of platforms like PowerPC64 that use function descriptors.)
+remote_file host delete ${binfile}.funcsyms
+if {[pipeline "nm" \
+ [list [transform nm] "${binfile} --format=posix --defined-only"] \
+ [list awk "\\{if(\\\$2==\"T\"||\\\$2==\"t\"||\\\$2==\"D\")print\\ \\\$1\\}"] \
+ [list sort "" "" "${binfile}.funcsyms"]]} {
+ return -1
+}
+
+# Keep all the function symbols not already in the dynamic symbol
+# table.
+remote_file host delete ${binfile}.keep_symbols
+if {[run_on_host "comm" "comm" "-13 ${binfile}.dynsyms ${binfile}.funcsyms" "" \
+ "${binfile}.keep_symbols"]} {
+ return -1
+}
+
+# GDB specific - we do not have split executable in advance.
+remote_file host delete ${binfile}.strip
+if {[run_on_host "strip" [transform strip] \
+ "--strip-all -R .comment -o ${binfile}.strip ${binfile}"]} {
+ return -1
+}
+
+# Separate full debug info into ${binfile}.debug.
+remote_file host delete ${binfile}.debug
+if {[run_on_host "copydebug" ${objcopy_program} \
+ "--only-keep-debug ${binfile} ${binfile}.debug"]} {
+ return -1
+}
+
+# Copy the full debuginfo, keeping only a minimal set of symbols and
+# removing some unnecessary sections.
+remote_file host delete ${binfile}.mini_debuginfo
+if {[run_on_host "objcopy 1" ${objcopy_program} "-S --remove-section .gdb_index --remove-section .comment --keep-symbols=${binfile}.keep_symbols ${binfile}.debug ${binfile}.mini_debuginfo"]} {
+ return -1
+}
+
+# Add the .gnu_debuglink section to the .gnu_debugdata file.
+# .gnu_debuglink is normally not present in the .gnu_debugdata section but in
+# some files there may be PT_NOTE with NT_GNU_BUILD_ID and GDB could look up
+# the .debug file from it. This is only an additional test of GDB, such link
+# is not present in usual MiniDebugInfo sections.
+if {[run_on_host "addlink" ${objcopy_program} \
+ "--add-gnu-debuglink=${binfile}.debug ${binfile}.mini_debuginfo ${binfile}.mini_debuginfo-debuglink"]} {
+ return -1
+}
+
+# Inject the compressed data into the .gnu_debugdata section of the
+# original binary.
+remote_file host delete ${binfile}.mini_debuginfo-debuglink.xz
+if {[run_on_host "xz" "xz" "-k ${binfile}.mini_debuginfo-debuglink"]} {
+ return -1
+}
+remote_file host delete ${binfile}.test
+if {[run_on_host "objcopy 2" ${objcopy_program} "--add-section .gnu_debugdata=${binfile}.mini_debuginfo-debuglink.xz ${binfile}.strip ${binfile}.test"]} {
+ return -1
+}
+
+clean_restart "$testfile.strip"
+
+gdb_test "p debugdata_function" \
+ {No symbol table is loaded\. Use the "file" command\.} \
+ "no symtab"
+
+clean_restart "$testfile.test"
+
+if {$gdb_file_cmd_debug_info == "lzma"} {
+ unsupported "LZMA support not available in this gdb"
+} else {
+ gdb_test "p debugdata_function" \
+ { = {<text variable, no debug info>} 0x[0-9a-f]+ <debugdata_function>} \
+ "have symtab"
+}
+
+# Be sure to test the 'close' method on the MiniDebugInfo BFD.
+if {[gdb_unload]} {
+ fail "unload MiniDebugInfo"
+} else {
+ pass "unload MiniDebugInfo"
+}
+
+gdb_exit
« no previous file with comments | « gdb/testsuite/gdb.base/gnu-debugdata.c ('k') | gdb/testsuite/gdb.base/gnu-ifunc.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698