mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-24 18:44:27 -04:00 
			
		
		
		
	When CONFIG_BUILD_SUFFIX is enabled, the target-* folders in build_dir and staging_dir have this suffix in the name, but not the toolchain directories. When detecting the names for "arch" and "libc", also accept the suffix and do not use it for the toolchain path. Signed-off-by: Thomas Langer <thomas.langer@intel.com>
		
			
				
	
	
		
			90 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env perl
 | |
| 
 | |
| use strict;
 | |
| use warnings;
 | |
| use FindBin '$Bin';
 | |
| use File::Temp 'tempfile';
 | |
| 
 | |
| @ARGV == 2 || do {
 | |
| 	die "Usage: $0 <corefile|host:port> <executable>\n";
 | |
| 	exit 1;
 | |
| };
 | |
| 
 | |
| if( opendir SD, "$Bin/../staging_dir" )
 | |
| {
 | |
| 	my ( $tid, $arch, $libc, @arches );
 | |
| 
 | |
| 	if( $ARGV[1] =~ m!\btarget-(.+?)_([^/_]+libc|musl)_?([^/]*).*\b!i )
 | |
| 	{
 | |
| 		print("Using target $1 ($2, $3)\n");
 | |
| 		($arch, $libc) = ($1, $2);
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		# Find arches
 | |
| 		print("Choose target:\n");
 | |
| 
 | |
| 		while( defined( my $e = readdir SD ) )
 | |
| 		{
 | |
| 			if( -d "$Bin/../staging_dir/$e" && $e =~ /^target-(.+?)_([^\/_]+libc|musl)_?([^\/]*).*/i )
 | |
| 			{
 | |
| 				push @arches, [ $1, $2 ];
 | |
| 				printf(" %2d) %s (%s %s)\n", @arches + 0, $1, $2, $3);
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		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]};
 | |
| 		}
 | |
| 		else
 | |
| 		{
 | |
| 			($arch, $libc) = @{$arches[0]};
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	closedir SD;
 | |
| 
 | |
| 	# Find gdb
 | |
| 	my ($gdb) = glob("$Bin/../staging_dir/toolchain-${arch}_*_${libc}*/bin/*-gdb");
 | |
| 	if( defined($gdb) && -x $gdb )
 | |
| 	{
 | |
| 		my ( $fh, $fp ) = tempfile();
 | |
| 
 | |
| 		# Find sysroot
 | |
| 		my ($sysroot) = glob("$Bin/../staging_dir/target-${arch}_${libc}*/root-*/");
 | |
| 
 | |
| 		print $fh "set sysroot $sysroot\n" if $sysroot;
 | |
| 		my $cmd = "target extended-remote";
 | |
| 		-f $ARGV[0] and $cmd = "core-file";
 | |
| 		print $fh "$cmd $ARGV[0]\n";
 | |
| 
 | |
| 		# History settings
 | |
| 		print $fh "set history filename $Bin/../tmp/.gdb_history\n";
 | |
| 		print $fh "set history size 100000000\n";
 | |
| 		print $fh "set history save on\n";
 | |
| 
 | |
| 		my $file = -f "$sysroot/$ARGV[1]" ? "$sysroot/$ARGV[1]" : $ARGV[1];
 | |
| 		system($gdb, '-x', $fp, $file);
 | |
| 
 | |
| 		close($fh);
 | |
| 		unlink($fp);
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		print("No gdb found! Make sure that CONFIG_GDB is set!\n");
 | |
| 		exit(1);
 | |
| 	}
 | |
| }
 | |
| else
 | |
| {
 | |
| 	print("No staging_dir found! You need to compile at least once!\n");
 | |
| 	exit(1);
 | |
| }
 |