Commit 1954ee55605a75c91924b63c2584f4d53f11afc7

Authored by Linus Torvalds

Merge branch 'for-linus-1' of git://git.kernel.org/pub/scm/linux/kernel/git/rost…

…edt/linux-2.6-kconfig

* 'for-linus-1' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-2.6-kconfig:
  kconfig: simplification of scripts/extract-ikconfig

Showing 4 changed files Side-by-side Diff

Documentation/dontdiff
... ... @@ -69,7 +69,6 @@
69 69 bbootsect
70 70 bin2c
71 71 binkernel.spec
72   -binoffset
73 72 bootsect
74 73 bounds.h
75 74 bsetup
... ... @@ -6,6 +6,5 @@
6 6 pnmtologo
7 7 bin2c
8 8 unifdef
9   -binoffset
10 9 ihex2fw
scripts/binoffset.c
1   -/***************************************************************************
2   - * binoffset.c
3   - * (C) 2002 Randy Dunlap <rdunlap@xenotime.net>
4   -
5   -# This program is free software; you can redistribute it and/or modify
6   -# it under the terms of the GNU General Public License as published by
7   -# the Free Software Foundation; either version 2 of the License, or
8   -# (at your option) any later version.
9   -#
10   -# This program is distributed in the hope that it will be useful,
11   -# but WITHOUT ANY WARRANTY; without even the implied warranty of
12   -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13   -# GNU General Public License for more details.
14   -#
15   -# You should have received a copy of the GNU General Public License
16   -# along with this program; if not, write to the Free Software
17   -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18   -
19   -# binoffset.c:
20   -# - searches a (binary) file for a specified (binary) pattern
21   -# - returns the offset of the located pattern or ~0 if not found
22   -# - exits with exit status 0 normally or non-0 if pattern is not found
23   -# or any other error occurs.
24   -
25   -****************************************************************/
26   -
27   -#include <stdio.h>
28   -#include <stdlib.h>
29   -#include <string.h>
30   -#include <errno.h>
31   -#include <unistd.h>
32   -#include <fcntl.h>
33   -#include <sys/types.h>
34   -#include <sys/stat.h>
35   -#include <sys/mman.h>
36   -
37   -#define VERSION "0.1"
38   -#define BUF_SIZE (16 * 1024)
39   -#define PAT_SIZE 100
40   -
41   -char *progname;
42   -char *inputname;
43   -int inputfd;
44   -unsigned int bix; /* buf index */
45   -unsigned char patterns [PAT_SIZE] = {0}; /* byte-sized pattern array */
46   -int pat_len; /* actual number of pattern bytes */
47   -unsigned char *madr; /* mmap address */
48   -size_t filesize;
49   -int num_matches = 0;
50   -off_t firstloc = 0;
51   -
52   -void usage (void)
53   -{
54   - fprintf (stderr, "%s ver. %s\n", progname, VERSION);
55   - fprintf (stderr, "usage: %s filename pattern_bytes\n",
56   - progname);
57   - fprintf (stderr, " [prints location of pattern_bytes in file]\n");
58   - exit (1);
59   -}
60   -
61   -void get_pattern (int pat_count, char *pats [])
62   -{
63   - int ix, err, tmp;
64   -
65   -#ifdef DEBUG
66   - fprintf (stderr,"get_pattern: count = %d\n", pat_count);
67   - for (ix = 0; ix < pat_count; ix++)
68   - fprintf (stderr, " pat # %d: [%s]\n", ix, pats[ix]);
69   -#endif
70   -
71   - for (ix = 0; ix < pat_count; ix++) {
72   - tmp = 0;
73   - err = sscanf (pats[ix], "%5i", &tmp);
74   - if (err != 1 || tmp > 0xff) {
75   - fprintf (stderr, "pattern or value error in pattern # %d [%s]\n",
76   - ix, pats[ix]);
77   - usage ();
78   - }
79   - patterns [ix] = tmp;
80   - }
81   - pat_len = pat_count;
82   -}
83   -
84   -void search_pattern (void)
85   -{
86   - for (bix = 0; bix < filesize; bix++) {
87   - if (madr[bix] == patterns[0]) {
88   - if (memcmp (&madr[bix], patterns, pat_len) == 0) {
89   - if (num_matches == 0)
90   - firstloc = bix;
91   - num_matches++;
92   - }
93   - }
94   - }
95   -}
96   -
97   -#ifdef NOTDEF
98   -size_t get_filesize (int fd)
99   -{
100   - off_t end_off = lseek (fd, 0, SEEK_END);
101   - lseek (fd, 0, SEEK_SET);
102   - return (size_t) end_off;
103   -}
104   -#endif
105   -
106   -size_t get_filesize (int fd)
107   -{
108   - int err;
109   - struct stat stat;
110   -
111   - err = fstat (fd, &stat);
112   - fprintf (stderr, "filesize: %ld\n", err < 0 ? (long)err : stat.st_size);
113   - if (err < 0)
114   - return err;
115   - return (size_t) stat.st_size;
116   -}
117   -
118   -int main (int argc, char *argv [])
119   -{
120   - progname = argv[0];
121   -
122   - if (argc < 3)
123   - usage ();
124   -
125   - get_pattern (argc - 2, argv + 2);
126   -
127   - inputname = argv[1];
128   -
129   - inputfd = open (inputname, O_RDONLY);
130   - if (inputfd == -1) {
131   - fprintf (stderr, "%s: cannot open '%s'\n",
132   - progname, inputname);
133   - exit (3);
134   - }
135   -
136   - filesize = get_filesize (inputfd);
137   -
138   - madr = mmap (0, filesize, PROT_READ, MAP_PRIVATE, inputfd, 0);
139   - if (madr == MAP_FAILED) {
140   - fprintf (stderr, "mmap error = %d\n", errno);
141   - close (inputfd);
142   - exit (4);
143   - }
144   -
145   - search_pattern ();
146   -
147   - if (munmap (madr, filesize))
148   - fprintf (stderr, "munmap error = %d\n", errno);
149   -
150   - if (close (inputfd))
151   - fprintf (stderr, "%s: error %d closing '%s'\n",
152   - progname, errno, inputname);
153   -
154   - fprintf (stderr, "number of pattern matches = %d\n", num_matches);
155   - if (num_matches == 0)
156   - firstloc = ~0;
157   - printf ("%ld\n", firstloc);
158   - fprintf (stderr, "%ld\n", firstloc);
159   -
160   - exit (num_matches ? 0 : 2);
161   -}
162   -
163   -/* end binoffset.c */
scripts/extract-ikconfig
1 1 #!/bin/sh
2   -# extracts .config info from a [b]zImage file
3   -# uses: binoffset (new), dd, zcat, strings, grep
4   -# $arg1 is [b]zImage filename
  2 +# ----------------------------------------------------------------------
  3 +# extract-ikconfig - Extract the .config file from a kernel image
  4 +#
  5 +# This will only work when the kernel was compiled with CONFIG_IKCONFIG.
  6 +#
  7 +# The obscure use of the "tr" filter is to work around older versions of
  8 +# "grep" that report the byte offset of the line instead of the pattern.
  9 +#
  10 +# (c) 2009, Dick Streefland <dick@streefland.net>
  11 +# Licensed under the terms of the GNU General Public License.
  12 +# ----------------------------------------------------------------------
5 13  
6   -binoffset="./scripts/binoffset"
7   -test -e $binoffset || cc -o $binoffset ./scripts/binoffset.c || exit 1
  14 +gz1='\037\213\010'
  15 +gz2='01'
  16 +cf1='IKCFG_ST\037\213\010'
  17 +cf2='0123456789'
8 18  
9   -IKCFG_ST="0x49 0x4b 0x43 0x46 0x47 0x5f 0x53 0x54"
10   -IKCFG_ED="0x49 0x4b 0x43 0x46 0x47 0x5f 0x45 0x44"
11   -dump_config() {
12   - file="$1"
13   -
14   - start=`$binoffset $file $IKCFG_ST 2>/dev/null`
15   - [ "$?" != "0" ] && start="-1"
16   - if [ "$start" -eq "-1" ]; then
17   - return
18   - fi
19   - end=`$binoffset $file $IKCFG_ED 2>/dev/null`
20   - [ "$?" != "0" ] && end="-1"
21   - if [ "$end" -eq "-1" ]; then
22   - return
23   - fi
24   -
25   - start=`expr $start + 8`
26   - size=`expr $end - $start`
27   -
28   - dd if="$file" ibs=1 skip="$start" count="$size" 2>/dev/null | zcat
29   -
30   - clean_up
31   - exit 0
32   -}
33   -
34   -
35   -usage()
  19 +dump_config()
36 20 {
37   - echo " usage: extract-ikconfig [b]zImage_filename"
38   -}
39   -
40   -clean_up()
41   -{
42   - if [ "$TMPFILE" != "" ]; then
43   - rm -f $TMPFILE
  21 + if pos=`tr "$cf1\n$cf2" "\n$cf2=" < "$1" | grep -abo "^$cf2"`
  22 + then
  23 + pos=${pos%%:*}
  24 + tail -c+$(($pos+8)) "$1" | zcat -q
  25 + exit 0
44 26 fi
45 27 }
46 28  
47   -if [ $# -lt 1 ]
  29 +# Check invocation:
  30 +me=${0##*/}
  31 +img=$1
  32 +if [ $# -ne 1 -o ! -s "$img" ]
48 33 then
49   - usage
50   - exit 1
  34 + echo "Usage: $me <kernel-image>" >&2
  35 + exit 2
51 36 fi
52 37  
53   -TMPFILE=`mktemp -t ikconfig-XXXXXX` || exit 1
54   -image="$1"
  38 +# Initial attempt for uncompressed images or objects:
  39 +dump_config "$img"
55 40  
56   -# vmlinux: Attempt to dump the configuration from the file directly
57   -dump_config "$image"
  41 +# That didn't work, so decompress and try again:
  42 +tmp=/tmp/ikconfig$$
  43 +trap "rm -f $tmp" 0
  44 +for pos in `tr "$gz1\n$gz2" "\n$gz2=" < "$img" | grep -abo "^$gz2"`
  45 +do
  46 + pos=${pos%%:*}
  47 + tail -c+$pos "$img" | zcat 2> /dev/null > $tmp
  48 + dump_config $tmp
  49 +done
58 50  
59   -GZHDR1="0x1f 0x8b 0x08 0x00"
60   -GZHDR2="0x1f 0x8b 0x08 0x08"
61   -
62   -ELFHDR="0x7f 0x45 0x4c 0x46"
63   -
64   -# vmlinux.gz: Check for a compressed images
65   -off=`$binoffset "$image" $GZHDR1 2>/dev/null`
66   -[ "$?" != "0" ] && off="-1"
67   -if [ "$off" -eq "-1" ]; then
68   - off=`$binoffset "$image" $GZHDR2 2>/dev/null`
69   - [ "$?" != "0" ] && off="-1"
70   -fi
71   -if [ "$off" -eq "0" ]; then
72   - zcat <"$image" >"$TMPFILE"
73   - dump_config "$TMPFILE"
74   -elif [ "$off" -ne "-1" ]; then
75   - (dd ibs="$off" skip=1 count=0 && dd bs=512k) <"$image" 2>/dev/null | \
76   - zcat >"$TMPFILE"
77   - dump_config "$TMPFILE"
78   -
79   -# check if this is simply an ELF file
80   -else
81   - off=`$binoffset "$image" $ELFHDR 2>/dev/null`
82   - [ "$?" != "0" ] && off="-1"
83   - if [ "$off" -eq "0" ]; then
84   - dump_config "$image"
85   - fi
86   -fi
87   -
88   -echo "ERROR: Unable to extract kernel configuration information."
89   -echo " This kernel image may not have the config info."
90   -
91   -clean_up
  51 +# Bail out:
  52 +echo "$me: Cannot find kernel config." >&2
92 53 exit 1