scripts/decodecode

Source file repositories/reference/linux-study-clean/scripts/decodecode

File Facts

System
Linux kernel
Corpus path
scripts/decodecode
Extension
[no extension]
Size
4991 bytes
Lines
252
Domain
Support Tooling And Documentation
Bucket
scripts
Inferred role
Support Tooling And Documentation: scripts
Status
atlas-only

Why This File Exists

Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.

Dependency Surface

Detected Declarations

Annotated Snippet

#!/bin/bash
# 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
# PC=hex - the PC (program counter) the oops points to

faultlinenum=1

cleanup() {
	rm -f $T $T.s $T.o $T.oo $T.aa $T.dis
}

die() {
	echo "$@"
	exit 1
}

trap cleanup EXIT

T=`mktemp` || die "cannot create temp file"
code=
cont=

while read i ; do

case "$i" in
*Code:*)
	code=$i
	cont=yes
	;;
*)
	[ -n "$cont" ] && {
		xdump="$(echo $i | grep '^[[:xdigit:]<>[:space:]]\+$')"
		if [ -n "$xdump" ]; then
			code="$code $xdump"
		else
			cont=
		fi
	}
	;;
esac

done

if [ -z "$code" ]; then
	rm $T
	die "Code line not found"
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

if [ -z "$ARCH" ]; then
    case `uname -m` in
	aarch64*) ARCH=arm64 ;;
	arm*) ARCH=arm ;;
	loongarch*) ARCH=loongarch ;;
    esac

Annotation

Implementation Notes