Permalink
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
linux/scripts/extract-vmlinux
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Based on 1 normalized pattern(s): licensed under the gnu general public license version 2 gplv2 extracted by the scancode license scanner the SPDX license identifier GPL-2.0-only has been chosen to replace the boilerplate/reference in 5 file(s). Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Kate Stewart <kstewart@linuxfoundation.org> Reviewed-by: Armijn Hemel <armijn@tjaldur.nl> Reviewed-by: Allison Randal <allison@lohutok.net> Cc: linux-spdx@vger.kernel.org Link: https://lkml.kernel.org/r/20190531081036.993848054@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
executable file
64 lines (55 sloc)
1.66 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# SPDX-License-Identifier: GPL-2.0-only | |
# ---------------------------------------------------------------------- | |
# extract-vmlinux - Extract uncompressed vmlinux from a kernel image | |
# | |
# Inspired from extract-ikconfig | |
# (c) 2009,2010 Dick Streefland <dick@streefland.net> | |
# | |
# (c) 2011 Corentin Chary <corentin.chary@gmail.com> | |
# | |
# ---------------------------------------------------------------------- | |
check_vmlinux() | |
{ | |
# Use readelf to check if it's a valid ELF | |
# TODO: find a better to way to check that it's really vmlinux | |
# and not just an elf | |
readelf -h $1 > /dev/null 2>&1 || return 1 | |
cat $1 | |
exit 0 | |
} | |
try_decompress() | |
{ | |
# The obscure use of the "tr" filter is to work around older versions of | |
# "grep" that report the byte offset of the line instead of the pattern. | |
# Try to find the header ($1) and decompress from here | |
for pos in `tr "$1\n$2" "\n$2=" < "$img" | grep -abo "^$2"` | |
do | |
pos=${pos%%:*} | |
tail -c+$pos "$img" | $3 > $tmp 2> /dev/null | |
check_vmlinux $tmp | |
done | |
} | |
# Check invocation: | |
me=${0##*/} | |
img=$1 | |
if [ $# -ne 1 -o ! -s "$img" ] | |
then | |
echo "Usage: $me <kernel-image>" >&2 | |
exit 2 | |
fi | |
# Prepare temp files: | |
tmp=$(mktemp /tmp/vmlinux-XXX) | |
trap "rm -f $tmp" 0 | |
# That didn't work, so retry after decompression. | |
try_decompress '\037\213\010' xy gunzip | |
try_decompress '\3757zXZ\000' abcde unxz | |
try_decompress 'BZh' xy bunzip2 | |
try_decompress '\135\0\0\0' xxx unlzma | |
try_decompress '\211\114\132' xy 'lzop -d' | |
try_decompress '\002!L\030' xxx 'lz4 -d' | |
try_decompress '(\265/\375' xxx unzstd | |
# Finally check for uncompressed images or objects: | |
check_vmlinux $img | |
# Bail out: | |
echo "$me: Cannot find vmlinux." >&2 |