Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Tom Tromey <tromey@redhat.com>
To: Pedro Alves <palves@redhat.com>
Cc: gdb-patches@sourceware.org
Subject: Re: RFA: handle "MiniDebuginfo" section
Date: Fri, 09 Nov 2012 21:28:00 -0000	[thread overview]
Message-ID: <87haoycvqi.fsf@fleche.redhat.com> (raw)
In-Reply-To: <509D47B5.6020302@redhat.com> (Pedro Alves's message of "Fri, 09	Nov 2012 18:13:09 +0000")

Pedro> Seems like this won't work with remote hosts as is.  Can we make
Pedro> it use "remote_file host delete", "remote_spawn host", etc.?  If
Pedro> not, perhaps just bail early if [is_remote host].

FWIW, I took a stab at this, using the appended patch.
However, I could not get it to work.  I always get an error:

ERROR: bad spawn_id (process died earlier?)
    while executing
"expect {
	-i $spawn_id -timeout $timeout -re ".+" {
	    append output $expect_out(buffer)
	    if { [string length $output] < 512000 } {
		exp_contin..."
    (procedure "local_exec" line 94)
    invoked from within
[...]


I don't know if this is my bug, or dejagnu's, or expect's -- but I
couldn't find a way to work around it.

According to comments in remote.exp it is not ok to use redirections in
a remote_exec.  So I am going to just skip the remote host case.

Tom

diff --git a/gdb/testsuite/gdb.dwarf2/dw2-gnu-debugdata.exp b/gdb/testsuite/gdb.dwarf2/dw2-gnu-debugdata.exp
index e384412..85391e6 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-gnu-debugdata.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-gnu-debugdata.exp
@@ -24,12 +24,20 @@ if [build_executable ${testfile}.exp $testfile] {
     return -1
 }
 
-proc run { test cmdline } {
-    verbose "cmdline is $cmdline"
-    set result [catch "exec $cmdline" output]
+source /tmp/remote.exp
+
+set pipeline_counter 0
+
+# A wrapper for 'remote_exec host' that passes or fails a test.
+# Returns 0 if all went well, nonzero on failure.
+# TEST is the name of the test, other arguments are as for
+# remote_exec.
+proc run {test program args} {
+    verbose -log "cmdline is remote_exec host $program $args"
+    set result [eval remote_exec host [list $program] $args]
     verbose "result is $result"
-    verbose "output is $output"
-    if {$result == 0} {
+    lassign $result output status
+    if {$status == 0} {
 	pass $test
 	return 0
     } else {
@@ -38,50 +46,89 @@ proc run { test cmdline } {
     }
 }
 
-set strip_program [transform strip]
-set nm_program [transform nm]
+# Run a pipeline of processes through 'run'.
+# TEST is the base name of the test, it is modified and passed to 'run'.
+# Each subsequent argument is a list of the form {PROGRAM [ARG]...}.
+# It is passed to 'run'.  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 -log "raw args are $arglist"
+	lassign $arglist program arguments input output
+
+	if {$input == ""} {
+	    set input $input_file
+	}
+	if {$output == ""} {
+	    set output pipe.[pid].$pipeline_counter
+	    incr pipeline_counter
+	}
+	verbose -log "cooked args are [list $program $arguments $input $output]"
+
+	if {[run "$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.
-file delete -- ${binfile}.dynsyms
-if [run "nm -D" "[transform nm] -D ${binfile} --format=posix --defined-only | awk \\{print\\ \\\$1\\} | sort > ${binfile}.dynsyms"] {
+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.
-file delete -- ${binfile}.funcsyms
-if [run "nm" "[transform nm] ${binfile} --format=posix --defined-only | awk \\{if(\\\$2==\"T\"||\\\$2==\"t\")print\\ \\\$1\\} | sort > ${binfile}.funcsyms"] {
+remote_file host delete ${binfile}.funcsyms
+if {[pipeline "nm" \
+	 [list [transform nm] "${binfile} --format=posix --defined-only"] \
+	 [list awk "\\{if(\\\$2==\"T\"||\\\$2==\"t\")print\\ \\\$1\\}"] \
+	 [list sort "" "" "${binfile}.funcsyms"]]} {
     return -1
 }
 
 # Keep all the function symbols not already in the dynamic symbol
 # table.
-file delete -- ${binfile}.keep_symbols
-if [run "comm" "comm -13 ${binfile}.dynsyms ${binfile}.funcsyms > ${binfile}.keep_symbols"] {
+remote_file host delete ${binfile}.keep_symbols
+if {[run "comm" "comm" "-13 ${binfile}.dynsyms ${binfile}.funcsyms" "" \
+	 "${binfile}.keep_symbols"]} {
     return -1
 }
 
 # Copy the full debuginfo, keeping only a minimal set of symbols and
 # removing some unnecessary sections.
-file delete -- ${binfile}.mini_debuginfo
-if [run "objcopy 1" "[transform objcopy] -S --remove-section .gdb_index --remove-section .comment --keep-symbols=${binfile}.keep_symbols ${binfile} ${binfile}.mini_debuginfo"] {
+remote_file host delete ${binfile}.mini_debuginfo
+if {[run "objcopy 1" [transform objcopy] "-S --remove-section .gdb_index --remove-section .comment --keep-symbols=${binfile}.keep_symbols ${binfile} ${binfile}.mini_debuginfo"]} {
     return -1
 }
 
 # GDB specific - we do not have split executable in advance.
-file delete -- ${binfile}.strip
-if [run "strip" "[transform strip] --strip-all -o ${binfile}.strip ${binfile}"] {
+remote_file host delete ${binfile}.strip
+if {[run "strip" [transform strip] \
+	 "--strip-all -o ${binfile}.strip ${binfile}"]} {
     return -1
 }
 
 # Inject the compressed data into the .gnu_debugdata section of the
 # original binary.
-file delete -- ${binfile}.mini_debuginfo.xz
-if [run "xz" "xz ${binfile}.mini_debuginfo"] {
+remote_file host delete ${binfile}.mini_debuginfo.xz
+if {[run "xz" "xz" "${binfile}.mini_debuginfo"]} {
     return -1
 }
-file delete -- ${binfile}.test
-if [run "objcopy 2" "[transform objcopy] --add-section .gnu_debugdata=${binfile}.mini_debuginfo.xz ${binfile}.strip ${binfile}.test"] {
+remote_file host delete ${binfile}.test
+if {[run "objcopy 2" [transform objcopy] "--add-section .gnu_debugdata=${binfile}.mini_debuginfo.xz ${binfile}.strip ${binfile}.test"]} {
     return -1
 }
 


  reply	other threads:[~2012-11-09 21:28 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-09 17:33 Tom Tromey
2012-11-09 18:07 ` Eli Zaretskii
2012-11-09 18:13 ` Pedro Alves
2012-11-09 21:28   ` Tom Tromey [this message]
2012-11-13 12:56     ` Pedro Alves
2012-11-13 15:26       ` Pedro Alves
2012-11-13 18:32       ` Tom Tromey
2012-11-09 18:23 ` Joel Brobecker
2012-11-09 18:53   ` Pedro Alves
2012-11-09 19:13   ` Tom Tromey
2012-11-12 16:04   ` Tom Tromey
2012-11-12 17:04     ` Joel Brobecker
2012-11-12 18:24       ` Tom Tromey
2012-11-12 16:28 ` Tom Tromey
2012-11-13 18:36   ` Tom Tromey
2012-11-13 18:42     ` Eli Zaretskii
2012-11-13 19:12     ` Pedro Alves
2012-11-13 20:57       ` Tom Tromey
2012-11-14 16:13         ` Tom Tromey
2012-11-14 16:19           ` Pedro Alves
2012-11-14 16:59             ` Tom Tromey
2012-11-14 19:37           ` Doug Evans
2012-11-14 22:12             ` Joel Brobecker
2012-11-15 11:18             ` Pedro Alves
2012-11-16 19:51               ` Tom Tromey
2012-11-19 14:41                 ` Pedro Alves
2012-11-26 19:21                   ` Tom Tromey
2012-11-26 22:24                     ` Andrew Pinski
2012-11-27  2:23                       ` Tom Tromey
2012-11-29 19:19                     ` Ulrich Weigand
2012-11-29 19:23                       ` Tom Tromey
2012-11-29 19:33                         ` Ulrich Weigand
2012-11-29 20:51                           ` Tom Tromey
2012-11-30 14:05                             ` Ulrich Weigand
2012-11-30 20:59                               ` Tom Tromey
2012-12-05 17:09                                 ` Ulrich Weigand
2012-12-11 16:42                     ` Yufeng Zhang
2012-11-16 20:04             ` Tom Tromey
2012-11-12 21:26 ` Doug Evans
2012-11-13 17:43   ` Tom Tromey
2012-11-13 15:44 ` Jan Kratochvil
2012-11-13 18:34   ` Tom Tromey

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87haoycvqi.fsf@fleche.redhat.com \
    --to=tromey@redhat.com \
    --cc=gdb-patches@sourceware.org \
    --cc=palves@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox