FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
linux/scripts/decodecode at master · snits/linux · GitHub
snits
/
linux
Public
forked from
torvalds/linux
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
0
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
linux
/
scripts
/
decodecode
Copy path
More file actions
More file actions
Latest commit
History
History
History
executable file
·
105 lines (85 loc) · 2.18 KB
Breadcrumbs
linux
/
scripts
/
decodecode
Copy path
File metadata and controls
executable file
·
105 lines (85 loc) · 2.18 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#!
/bin/sh
#
SPDX-License-Identifier: GPL-2.0
#
Disassemble the Code: line in Linux oopses
#
usage: decodecode < oops.file
#
#
options: set env. variable AFLAGS=options to pass options to "as";
#
e.g., to decode an i386 oops on an x86_64 system, use:
#
AFLAGS=--32 decodecode < 386.oops
cleanup
() {
rm -f
$T
$T
.s
$T
.o
$T
.oo
$T
.aa
$T
.dis
exit
1
}
die
() {
echo
"
$@
"
exit
1
}
trap
cleanup EXIT
T=
`
mktemp
`
||
die
"
cannot create temp file
"
code=
while
read
i
;
do
case
"
$i
"
in
*
Code:
*
)
code=
$i
;;
esac
done
if
[
-z
"
$code
"
]
;
then
rm
$T
exit
fi
echo
$code
code=
`
echo
$code
|
sed -e
'
s/.*Code: //
'
`
width=
`
expr index
"
$code
"
'
'
`
width=
$((
(
$width
-
1
)
/
2
))
case
$width
in
1) type=byte ;;
2) type=2byte ;;
4) type=4byte ;;
esac
disas
() {
${CROSS_COMPILE}
as
$AFLAGS
-o
$1
.o
$1
.s
>
/dev/null
2>&1
if
[
"
$ARCH
"
=
"
arm
"
]
;
then
if
[
$width
-eq
2 ]
;
then
OBJDUMPFLAGS=
"
-M force-thumb
"
fi
${CROSS_COMPILE}
strip
$1
.o
fi
${CROSS_COMPILE}
objdump
$OBJDUMPFLAGS
-S
$1
.o
|
\
grep -v
"
/tmp\|Disassembly\|\.text\|^$
"
>
$1
.dis
2>&1
}
marker=
`
expr index
"
$code
"
"
\<
"
`
if
[
$marker
-eq
0 ]
;
then
marker=
`
expr index
"
$code
"
"
\(
"
`
fi
touch
$T
.oo
if
[
$marker
-ne
0 ]
;
then
echo
All code
>>
$T
.oo
echo
========
>>
$T
.oo
beforemark=
`
echo
"
$code
"
`
echo
-n
"
.
$type
0x
"
>
$T
.s
echo
$beforemark
|
sed -e
'
s/ /,0x/g; s/[<>()]//g
'
>>
$T
.s
disas
$T
cat
$T
.dis
>>
$T
.oo
rm -f
$T
.o
$T
.s
$T
.dis
#
and fix code at-and-after marker
code=
`
echo
"
$code
"
|
cut -c
$((
${marker}
+
1
))
-
`
fi
echo
Code starting with the faulting instruction
>
$T
.aa
echo
===========================================
>>
$T
.aa
code=
`
echo
$code
|
sed -e
'
s/ [<(]/ /;s/[>)] / /;s/ /,0x/g; s/[>)]$//
'
`
echo
-n
"
.
$type
0x
"
>
$T
.s
echo
$code
>>
$T
.s
disas
$T
cat
$T
.dis
>>
$T
.aa
#
(lines of whole $T.oo) - (lines of $T.aa, i.e. "Code starting") + 3,
#
i.e. the title + the "===..=" line (sed is counting from 1, 0 address is
#
special)
faultlinenum=
$((
$(wc
-
l
$T
.oo
|
cut
-
d" "
-
f
1
)
-
\
$(wc -l
$T
.aa | cut -d" " -f
1
) +
3
))
faultline=
`
cat
$T
.dis
|
head -1
|
cut -d
"
:
"
-f2-
`
faultline=
`
echo
"
$faultline
"
|
sed -e
'
s/\[/\\\[/g; s/\]/\\\]/g
'
`
cat
$T
.oo
|
sed -e
"
${faultlinenum}
s/^\(.*:\)\(.*\)/\1\*\2\t\t<-- trapping instruction/
"
echo
cat
$T
.aa
cleanup
Back
|
FazBrowse Home
|
New Git URL