summaryrefslogtreecommitdiffstats
path: root/scripts/extract-vmlinux
diff options
context:
space:
mode:
authorCheng Lingfei <chenglingfei@foxmail.com>2026-08-24 20:45:46 +0800
committerTejun Heo <tj@kernel.org>2026-08-24 06:55:59 -1000
commit909a3f0e9d8b0d8001cf6e99808f88eca8e44328 (patch)
treebe05d18bd5619b55ff3b30f28a292907021768ee /scripts/extract-vmlinux
downloadlinux-stable-909a3f0e9d8b0d8001cf6e99808f88eca8e44328.tar.gz
linux-stable-909a3f0e9d8b0d8001cf6e99808f88eca8e44328.zip
docs: cgroup-v2: fix misc.events key format descriptiongrafted
In misc cgroup, misc.events does not output a simple "max" key. Instead, each registered misc resource outputs a separate key suffixed with ".max" (i.e., "<res>.max"). Update the documentation to clarify that the entry key is "<res>.max". Suggested-by: Michal Koutný <mkoutny@suse.com> Signed-off-by: Cheng Lingfei <chenglingfei@foxmail.com> Signed-off-by: Tejun Heo <tj@kernel.org>
Diffstat (limited to 'scripts/extract-vmlinux')
-rwxr-xr-xscripts/extract-vmlinux65
1 files changed, 65 insertions, 0 deletions
diff --git a/scripts/extract-vmlinux b/scripts/extract-vmlinux
new file mode 100755
index 000000000..266df9bc7
--- /dev/null
+++ b/scripts/extract-vmlinux
@@ -0,0 +1,65 @@
+#!/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>
+#
+# ----------------------------------------------------------------------
+
+me=${0##*/}
+
+check_vmlinux()
+{
+ if file "$1" | grep -q 'Linux kernel.*boot executable' ||
+ readelf -h "$1" > /dev/null 2>&1
+ then
+ cat "$1"
+ echo "$me: Extracted vmlinux using '$2' from offset $3" >&2
+ exit 0
+ fi
+}
+
+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 "$3" $pos
+ done
+}
+
+# Check invocation:
+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" cat 0
+
+# Bail out:
+echo "$me: Cannot find vmlinux." >&2