This is the mail archive of the mailing list for the GDB project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [patch/rfc] post-process the `maint print architecture'

On Tue, Jan 07, 2003 at 10:10:36AM -0500, Andrew Cagney wrote:


>The idea sounds good to me.
>Instead of ed'ing Gdb.log, how about just naming the first file
>Gdb.out or Gdb-raw.log, and then sed'ing into Gdb.log.

I can save the unedited output.

To make sed worthwhile, I'd need to construct a sed script that did all substitutions in a single pass. Otherwize the script ends up repeating:
sed -e ... < input > output
mv output input
which is equivalent to ed. That, I think, is something for a rainy day.

It's as simple as "sed -e ... -e ... -e ... -e ... < input > output",
isn't it?  Or via -f and a file, the same thing.
Yes - `construct a sed script'. I've done it (attached, committed). Doesn't make it any faster though. The slow bit is:

+ func="`addr2line -f -e ./gdb/gdb -s ${addr} | sed -n -e 1p`"


2003-01-08  Andrew Cagney  <>

	* Edit the output of `maint print architecture'
	replacing hex constants with function names and stripping leading
	file name directory prefixes.

RCS file: /cvs/src/src/gdb/,v
retrieving revision 1.3
diff -u -r1.3
---	2 Jan 2003 16:40:33 -0000	1.3
+++	8 Jan 2003 23:46:52 -0000
@@ -279,12 +279,32 @@
     fail "gdb printed no output" ! -s Gdb.log
     grep -e internal-error Gdb.log && fail "gdb panic" 1
+    echo ... cleanup ${target}
+    # Create a sed script that cleans up the output from GDB.
+    rm -f mbuild.sed
+    touch mbuild.sed || exit 1
+    # Rules to replace <0xNNNN> with the corresponding function's
+    # name.
+    sed -n -e '/<0x0*>/d' -e 's/^.*<0x\([0-9a-f]*\)>.*$/0x\1/p' Gdb.log \
+    | sort -u \
+    | while read addr
+    do
+	func="`addr2line -f -e ./gdb/gdb -s ${addr} | sed -n -e 1p`"
+	test ${verbose} -gt 0 && echo "${addr} ${func}" 1>&2
+	echo "s/<${addr}>/<${func}>/g"
+    done >> mbuild.sed
+    # Rules to strip the leading paths off of file names.
+    echo 's/"\/.*\/gdb\//"gdb\//g' >> mbuild.sed
     # Replace the build directory with a file as semaphore that stops
     # a rebuild. (should the logs be saved?)
     cd ${builddir}
     rm -f ${target}.tmp
-    mv ${target}/Gdb.log ${target}.tmp
+    sed -f ${target}/mbuild.sed ${target}/Gdb.log > ${target}.tmp
     rm -rf ${target}
     mv ${target}.tmp ${target}

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]