OpenWrt – Blame information for rev 2
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 1 | #!/usr/bin/env perl |
2 | |||
3 | use strict; |
||
4 | use warnings; |
||
5 | use FindBin '$Bin'; |
||
6 | use File::Temp 'tempfile'; |
||
7 | |||
8 | @ARGV == 2 || do { |
||
9 | die "Usage: $0 <corefile|host:port> <executable>\n"; |
||
10 | exit 1; |
||
11 | }; |
||
12 | |||
13 | if( opendir SD, "$Bin/../staging_dir" ) |
||
14 | { |
||
15 | my ( $tid, $arch, $libc, @arches ); |
||
16 | |||
17 | if( $ARGV[1] =~ m!\btarget-(.+?)_(([^/_]+libc|musl)[^/_]*)\b!i ) |
||
18 | { |
||
19 | print("Using target $1 ($2)\n"); |
||
20 | ($arch, $libc) = ($1, $2); |
||
21 | } |
||
22 | else |
||
23 | { |
||
24 | # Find arches |
||
25 | print("Choose target:\n"); |
||
26 | |||
27 | while( defined( my $e = readdir SD ) ) |
||
28 | { |
||
29 | if( -d "$Bin/../staging_dir/$e" && $e =~ /^target-(.+?)_(([^_]+libc|musl).*)/i ) |
||
30 | { |
||
31 | push @arches, [ $1, $2 ]; |
||
32 | printf(" %2d) %s (%s)\n", @arches + 0, $1, $2); |
||
33 | } |
||
34 | } |
||
35 | |||
36 | if( @arches > 1 ) |
||
37 | { |
||
38 | # Query arch |
||
39 | do { |
||
40 | print("Target? > "); |
||
41 | chomp($tid = <STDIN>); |
||
42 | } while( !defined($tid) || $tid !~ /^\d+$/ || $tid < 1 || $tid > @arches ); |
||
43 | |||
44 | ($arch, $libc) = @{$arches[$tid-1]}; |
||
45 | } |
||
46 | else |
||
47 | { |
||
48 | ($arch, $libc) = @{$arches[0]}; |
||
49 | } |
||
50 | } |
||
51 | |||
52 | closedir SD; |
||
53 | |||
54 | # Find gdb |
||
55 | my ($gdb) = glob("$Bin/../staging_dir/toolchain-${arch}_*_${libc}*/bin/*-gdb"); |
||
56 | if( defined($gdb) && -x $gdb ) |
||
57 | { |
||
58 | my ( $fh, $fp ) = tempfile(); |
||
59 | |||
60 | # Find sysroot |
||
61 | my ($sysroot) = glob("$Bin/../staging_dir/target-${arch}_${libc}*/root-*/"); |
||
62 | |||
63 | print $fh "set sysroot $sysroot\n" if $sysroot; |
||
64 | my $cmd = "target extended-remote"; |
||
65 | -f $ARGV[0] and $cmd = "core-file"; |
||
66 | print $fh "$cmd $ARGV[0]\n"; |
||
67 | |||
68 | # History settings |
||
69 | print $fh "set history filename $Bin/../tmp/.gdb_history\n"; |
||
70 | print $fh "set history size 100000000\n"; |
||
71 | print $fh "set history save on\n"; |
||
72 | |||
73 | my $file = -f "$sysroot/$ARGV[1]" ? "$sysroot/$ARGV[1]" : $ARGV[1]; |
||
74 | system($gdb, '-x', $fp, $file); |
||
75 | |||
76 | close($fh); |
||
77 | unlink($fp); |
||
78 | } |
||
79 | else |
||
80 | { |
||
81 | print("No gdb found! Make sure that CONFIG_GDB is set!\n"); |
||
82 | exit(1); |
||
83 | } |
||
84 | } |
||
85 | else |
||
86 | { |
||
87 | print("No staging_dir found! You need to compile at least once!\n"); |
||
88 | exit(1); |
||
89 | } |