Blame view

scripts/extract-vmlinux 1.66 KB
09d481270   Corentin Chary   scripts: add extr...
1
  #!/bin/sh
4317cf95c   Thomas Gleixner   treewide: Replace...
2
  # SPDX-License-Identifier: GPL-2.0-only
09d481270   Corentin Chary   scripts: add extr...
3
4
5
6
7
8
9
10
  # ----------------------------------------------------------------------
  # 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>
  #
09d481270   Corentin Chary   scripts: add extr...
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
  # ----------------------------------------------------------------------
  
  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
  $2" "
  $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
09d481270   Corentin Chary   scripts: add extr...
52
53
54
55
56
57
  # 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'
47a18a2da   Adam Borowski   scripts: teach ex...
58
59
  try_decompress '\002!L\030'   xxx   'lz4 -d'
  try_decompress '(\265/\375'   xxx   unzstd
09d481270   Corentin Chary   scripts: add extr...
60

db139d71c   Helge Deller   extract-vmlinux: ...
61
62
  # Finally check for uncompressed images or objects:
  check_vmlinux $img
09d481270   Corentin Chary   scripts: add extr...
63
64
  # Bail out:
  echo "$me: Cannot find vmlinux." >&2