From 88617fd27763f484db120475851a797183afbe08 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Mon, 3 Aug 2009 15:29:29 +0200 Subject: [PATCH] TRK: Stabilize on Windows, introduce perl script for portability --- tests/manual/trk/adapter.cpp | 28 +++++-- tests/manual/trk/run.pl | 144 +++++++++++++++++++++++++++++++++ tests/manual/trk/run.sh | 72 ----------------- tests/manual/trk/trkserver.pro | 1 + 4 files changed, 166 insertions(+), 79 deletions(-) create mode 100755 tests/manual/trk/run.pl delete mode 100755 tests/manual/trk/run.sh diff --git a/tests/manual/trk/adapter.cpp b/tests/manual/trk/adapter.cpp index 9eaec584242..2d16408df58 100644 --- a/tests/manual/trk/adapter.cpp +++ b/tests/manual/trk/adapter.cpp @@ -29,6 +29,7 @@ #include "trkutils.h" +#include #include #include #include @@ -239,11 +240,12 @@ private: void sendGdbMessage(const QByteArray &msg, const QByteArray &logNote = QByteArray()); void sendGdbMessageAfterSync(const QByteArray &msg, const QByteArray &logNote = QByteArray()); void sendGdbAckMessage(); + bool sendGdbPacket(const QByteArray &packet, bool doFlush); void logMessage(const QString &msg, bool force = false); QTcpServer m_gdbServer; - QTcpSocket *m_gdbConnection; + QPointer m_gdbConnection; QString m_gdbServerName; quint16 m_gdbServerPort; QByteArray m_gdbReadBuffer; @@ -425,14 +427,28 @@ void Adapter::readFromGdb() } } +bool Adapter::sendGdbPacket(const QByteArray &packet, bool doFlush) +{ + if (!m_gdbConnection || m_gdbConnection->state() != QAbstractSocket::ConnectedState) { + logMessage(QString::fromLatin1("Cannot write to gdb: Not connected (%1)").arg(QString::fromLatin1(packet)), true); + return false; + } + if (m_gdbConnection->write(packet) == -1) { + logMessage(QString::fromLatin1("Cannot write to gdb: %1 (%2)").arg(m_gdbConnection->errorString()).arg(QString::fromLatin1(packet)), true); + return false; + } + if (doFlush) + m_gdbConnection->flush(); + return true; +} + void Adapter::sendGdbAckMessage() { if (!m_gdbAckMode) return; QByteArray packet = "+"; logMessage("gdb: <- " + packet); - m_gdbConnection->write(packet); - //m_gdbConnection->flush(); + sendGdbPacket(packet, false); } void Adapter::sendGdbMessage(const QByteArray &msg, const QByteArray &logNote) @@ -453,11 +469,9 @@ void Adapter::sendGdbMessage(const QByteArray &msg, const QByteArray &logNote) packet.append(checkSum); int pad = qMax(0, 24 - packet.size()); logMessage("gdb: <- " + packet + QByteArray(pad, ' ') + logNote); - m_gdbConnection->write(packet); - m_gdbConnection->flush(); + sendGdbPacket(packet, true); } - void Adapter::sendGdbMessageAfterSync(const QByteArray &msg, const QByteArray &logNote) { QByteArray ba = msg + char(1) + logNote; @@ -532,7 +546,7 @@ void Adapter::handleGdbResponse(const QByteArray &response) else if (response.startsWith("D")) { sendGdbAckMessage(); sendGdbMessage("OK", "shutting down"); - qApp->exit(1); + qApp->quit(); } else if (response == "g") { diff --git a/tests/manual/trk/run.pl b/tests/manual/trk/run.pl new file mode 100755 index 00000000000..cad329e9def --- /dev/null +++ b/tests/manual/trk/run.pl @@ -0,0 +1,144 @@ +#!/usr/bin/perl -w + +use strict; +use English; # gives us $OSNAME +use File::Temp; +use File::Spec; +use Cwd; + +my @ADAPTER_OPTIONS = (); +my @TRKSERVEROPTIONS = (); +my $DUMP_POSTFIX ='-BigEndian.bin'; +my $ENDIANESS ='big'; + +my $isUnix = $OSNAME eq 'linux' ? 1 : 0; +my $MAKE= $isUnix ? 'make' : 'nmake'; +my $trkservername; +my $runTrkServer = 1; + +my $usage=<; +$trkservername = ('TRKSERVER-' . $userid) unless defined $trkservername; +my $gdbserverip= '127.0.0.1'; +my $gdbserverport= 2222 + $userid; + +system('fuser', '-n', 'tcp', '-k', $gdbserverport) if ($isUnix); + +# Who writes that? +my $tempFile = File::Spec->catfile(File::Temp::tempdir(), $trkservername); +unlink ($tempFile) if -f $tempFile; + +# ------- Launch trkserver +if ($runTrkServer) { + my $MEMORYDUMP='TrkDump-78-6a-40-00' . $DUMP_POSTFIX; + my @ADDITIONAL_DUMPS=('0x00402000' . $DUMP_POSTFIX, '0x786a4000' . $DUMP_POSTFIX, '0x00600000' . $DUMP_POSTFIX); + + my @TRKSERVER_ARGS; + if ($isUnix) { + push(@TRKSERVER_ARGS, File::Spec->catfile(File::Spec->curdir(), 'trkserver')); + } else { + push(@TRKSERVER_ARGS, 'cmd.exe', '/c', 'start', File::Spec->catfile(File::Spec->curdir(), 'debug', 'trkserver.exe')); + } + + push(@TRKSERVER_ARGS, @TRKSERVEROPTIONS, $trkservername, $MEMORYDUMP, @ADDITIONAL_DUMPS); + + print '### Executing: ', join(' ', @TRKSERVER_ARGS), "\n"; + my $trkserverpid = fork(); + if ($trkserverpid == 0) { + exec(@TRKSERVER_ARGS); + exit(0); + } + + push(@ADAPTER_OPTIONS, '-s'); + + sleep(1); +} + +# ------- Launch adapter +my @ADAPTER_ARGS; +if ($isUnix) { + push(@ADAPTER_ARGS, File::Spec->catfile(File::Spec->curdir(), 'adapter')); +} else { + push(@ADAPTER_ARGS, 'cmd.exe', '/c', 'start', File::Spec->catfile(File::Spec->curdir(), 'debug', 'adapter.exe')); +} + +push(@ADAPTER_ARGS, @ADAPTER_OPTIONS, $trkservername, $gdbserverip . ':' . $gdbserverport); +print '### Executing: ', join(' ', @ADAPTER_ARGS), "\n"; +my $adapterpid=fork(); +if ($adapterpid == 0) { + exec(@ADAPTER_ARGS); + exit(0); +} + +# ------- Write out .gdbinit +my $gdbInit = <' . $gdbInitFile) or die ('Cannot write to ' . $gdbInitFile . ' ' . $!); +print GDB_INIT $gdbInit; +close( GDB_INIT); diff --git a/tests/manual/trk/run.sh b/tests/manual/trk/run.sh deleted file mode 100755 index d12107195ca..00000000000 --- a/tests/manual/trk/run.sh +++ /dev/null @@ -1,72 +0,0 @@ -#!/bin/sh - -ADAPTER_OPTIONS="-s" -TRKSERVEROPTIONS="" -DUMP_POSTFIX='-BigEndian.bin' -ENDIANESS='big' - -while expr " $1" : " -.*" >/dev/null -do - if [ " $1" = " -av" ] - then - ADAPTER_OPTIONS="$ADAPTER_OPTIONS -v" - elif [ " $1" = " -aq" ] - then - ADAPTER_OPTIONS="$ADAPTER_OPTIONS -q" - elif [ " $1" = " -tv" ] - then - TRKSERVEROPTIONS="$TRKSERVEROPTIONS -v" - elif [ " $1" = " -tq" ] - then - TRKSERVEROPTIONS="$TRKSERVEROPTIONS -q" - elif [ " $1" = " -l" ] - then - DUMP_POSTFIX='.bin' - ENDIANESS='little' - ADAPTER_OPTIONS="$ADAPTER_OPTIONS -l" - fi - shift 1 -done - -make || exit 1 - -killall -s USR1 adapter trkserver > /dev/null 2>&1 -killall adapter trkserver > /dev/null 2>&1 - -userid=`id -u` -trkservername="TRKSERVER-${userid}"; -gdbserverip=127.0.0.1 -gdbserverport=$[2222 + ${userid}] - -fuser -n tcp -k ${gdbserverport} -rm /tmp/${trkservername} - -MEMORYDUMP="TrkDump-78-6a-40-00$DUMP_POSTFIX" -ADDITIONAL_DUMPS="0x00402000$DUMP_POSTFIX 0x786a4000$DUMP_POSTFIX 0x00600000$DUMP_POSTFIX" -./trkserver $TRKSERVEROPTIONS ${trkservername} ${MEMORYDUMP} ${ADDITIONAL_DUMPS}& -trkserverpid=$! - -sleep 1 -./adapter $ADAPTER_OPTIONS ${trkservername} ${gdbserverip}:${gdbserverport} & -adapterpid=$! - -echo "# This is generated. Changes will be lost. -#set remote noack-packet on -set confirm off -set endian $ENDIANESS -#set debug remote 1 -#target remote ${gdbserverip}:${gdbserverport} -target extended-remote ${gdbserverip}:${gdbserverport} -#file filebrowseapp.sym -add-symbol-file filebrowseapp.sym 0x786A4000 -symbol-file filebrowseapp.sym -p E32Main -#continue -#info files -#file filebrowseapp.sym -readnow -#add-symbol-file filebrowseapp.sym 0x786A4000 -" > .gdbinit - -#kill -s USR1 ${adapterpid} -#kill -s USR1 ${trkserverpid} -#killall arm-gdb diff --git a/tests/manual/trk/trkserver.pro b/tests/manual/trk/trkserver.pro index 3b841f5ae65..a333dc2c363 100644 --- a/tests/manual/trk/trkserver.pro +++ b/tests/manual/trk/trkserver.pro @@ -2,6 +2,7 @@ TEMPLATE = app QT = core network +win32:CONFIG+=console HEADERS += \ trkutils.h