X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/1dc2db31a33723283805e325c9dcdde41d03bac1..1c84f069b6bf766c644489b36326abd79208aac4:/scripts/remote-gdb

diff --git a/scripts/remote-gdb b/scripts/remote-gdb
index 9701b31c1..aad23e324 100755
--- a/scripts/remote-gdb
+++ b/scripts/remote-gdb
@@ -14,7 +14,7 @@ if( opendir SD, "$Bin/../staging_dir" )
 {
 	my ( $tid, $arch, $libc, @arches );
 
-	if( $ARGV[1] =~ m!\btarget-([^_/]+)_([^_/]+)\b! )
+	if( $ARGV[1] =~ m!\btarget-(.+?)_([^_]+libc[^_/]+)\b!i )
 	{
 		print("Using target $1 ($2)\n");
 		($arch, $libc) = ($1, $2);
@@ -26,42 +26,46 @@ if( opendir SD, "$Bin/../staging_dir" )
 
 		while( defined( my $e = readdir SD ) )
 		{
-			if( -d "$Bin/../staging_dir/$e" && $e =~ /^target-([^_]+)_([^_]+)/ )
+			if( -d "$Bin/../staging_dir/$e" && $e =~ /^target-(.+?)_([^_]+libc[^_]+)/i )
 			{
 				push @arches, [ $1, $2 ];
 				printf(" %2d) %s (%s)\n", @arches + 0, $1, $2);
 			}
 		}
 
-		# Query arch
-		do {
-			print("Target? > ");
-			chomp($tid = <STDIN>);
-		} while( !defined($tid) || $tid !~ /^\d+$/ || $tid < 1 || $tid > @arches );
+		if( @arches > 1 )
+		{
+			# Query arch
+			do {
+				print("Target? > ");
+				chomp($tid = <STDIN>);
+			} while( !defined($tid) || $tid !~ /^\d+$/ || $tid < 1 || $tid > @arches );
 
-		($arch, $libc) = @{$arches[$tid-1]};
+			($arch, $libc) = @{$arches[$tid-1]};
+		}
+		else
+		{
+			($arch, $libc) = @{$arches[0]};
+		}
 	}
 
 	closedir SD;
 
 	# Find gdb
-	my ($gdb) = glob("$Bin/../build_dir/toolchain-${arch}_*_${libc}/gdb-*/gdb/gdb");
+	my ($gdb) = glob("$Bin/../staging_dir/toolchain-${arch}_*_${libc}/bin/*-gdb");
 
-	if( -x $gdb )
+	if( defined($gdb) && -x $gdb )
 	{
 		my ( $fh, $fp ) = tempfile();
 
-		# Find library paths
-		my $libdirs = join ':', (
-			glob("$Bin/../staging_dir/target-${arch}_${libc}/root-*/{,usr/}lib/"),
-			glob("$Bin/../staging_dir/target-${arch}_${libc}/{,usr/}lib/"),
-			glob("$Bin/../staging_dir/toolchain-${arch}_*_${libc}/lib/")
-		);
+		# Find sysroot
+		my ($sysroot) = glob("$Bin/../staging_dir/target-${arch}_${libc}/root-*/");
 
-		print $fh "set solib-search-path $libdirs\n";
+		print $fh "set sysroot $sysroot\n" if $sysroot;
 		print $fh "target remote $ARGV[0]\n";
 
-		system($gdb, '-x', $fp, $ARGV[1]);
+		my $file = -f "$sysroot/$ARGV[1]" ? "$sysroot/$ARGV[1]" : $ARGV[1];
+		system($gdb, '-x', $fp, $file);
 
 		close($fh);
 		unlink($fp);