summaryrefslogtreecommitdiff
path: root/resources/gdb/debug.pl
diff options
context:
space:
mode:
Diffstat (limited to 'resources/gdb/debug.pl')
-rw-r--r--resources/gdb/debug.pl93
1 files changed, 93 insertions, 0 deletions
diff --git a/resources/gdb/debug.pl b/resources/gdb/debug.pl
new file mode 100644
index 0000000..5bca69a
--- /dev/null
+++ b/resources/gdb/debug.pl
@@ -0,0 +1,93 @@
+# Perl script to easily launch AT91 debug sessions.
+
+use File::Basename;
+
+# List of supported boards
+my @boards = ("at91sam7se-ek",
+ "at91sam9260-ek",
+ "at91sam9261-ek",
+ "at91sam9263-ek",
+ "at91sam9rl-ek",
+ "at91sam9xe-ek",
+ "at91sam9g20-ek",
+ "at91sam9m10-ek",
+ "at91cap9-dk",
+ "at91cap9-stk"
+ );
+
+# Check that an argument has been provided
+if (!@ARGV[0]) {
+
+ print("Usage: " . basename($0) . " <elf-file>\n");
+ exit(1);
+}
+
+# Parse file name
+my $file = @ARGV[0];
+my $script = "";
+my $gdb = dirname($0);
+
+# Check #2: this must be an elf file
+if ($file !~ m/.*.elf/i) {
+
+ print(".elf file expected.\n");
+ exit(2);
+}
+
+# Check #1: 'sdram' or 'ddram' or 'bcram' token in filename
+if (($file =~ m/.*sdram.*/i) or ($file =~ m/.*ddram.*/i) or ($file =~ m/.*bcram.*/i) or ($file =~ m/.*sam9.*/i) or ($file =~ m/.*cap9.*/i) ) {
+
+ # Find board basename
+ foreach $board (@boards) {
+
+ if (index($file, $board) != -1) {
+
+ $script = "$gdb\\$board";
+ }
+ }
+
+ # Add -ek-mck or -ek-sdram depending on need
+ if ($file =~ m/.*sdram.*/i) {
+
+ $script .= "-sdram.gdb";
+ }
+ elsif ($file =~ m/.*ddram.*/i) {
+
+ $script .= "-ddram.gdb";
+ }
+ elsif ($file =~ m/.*bcram.*/i) {
+
+ $script .= "-bcram.gdb";
+ }
+ else {
+
+ $script .= "-sram.gdb";
+ }
+}
+
+# Create command file to define "reset" command
+open(CMD, ">cmd.gdb") or die("Could not create command file:\n$!");
+print(CMD "define reset\n");
+print(CMD " target remote localhost:2331\n");
+print(CMD " monitor reset\n");
+if ($script) {
+
+ print(CMD " source $script\n");
+}
+print(CMD " load\n");
+print(CMD "end");
+close(CMD);
+
+# Launch GDB
+$pid = fork();
+if ($pid == 0) {
+
+ exec("arm-none-eabi-gdb -x cmd.gdb -ex \"reset\" $file");
+}
+else {
+
+ $SIG{INT} = 'IGNORE';
+ $res = waitpid($pid, 0);
+}
+print("Done\n");
+unlink("cmd.gdb");
personal git repositories of Harald Welte. Your mileage may vary