Blame view

scripts/adjust_autoksyms.sh 2.62 KB
23121ca2b   Nicolas Pitre   kbuild: create/ad...
1
  #!/bin/sh
d2912cb15   Thomas Gleixner   treewide: Replace...
2
  # SPDX-License-Identifier: GPL-2.0-only
23121ca2b   Nicolas Pitre   kbuild: create/ad...
3
4
5
6
7
8
  
  # Script to create/update include/generated/autoksyms.h and dependency files
  #
  # Copyright:	(C) 2016  Linaro Limited
  # Created by:	Nicolas Pitre, January 2016
  #
23121ca2b   Nicolas Pitre   kbuild: create/ad...
9
10
  
  # Create/update the include/generated/autoksyms.h file from the list
60ae1b194   Masahiro Yamada   kbuild: remove th...
11
  # of all module's needed symbols as recorded on the second line of *.mod files.
23121ca2b   Nicolas Pitre   kbuild: create/ad...
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
  #
  # For each symbol being added or removed, the corresponding dependency
  # file's timestamp is updated to force a rebuild of the affected source
  # file. All arguments passed to this script are assumed to be a command
  # to be exec'd to trigger a rebuild of those files.
  
  set -e
  
  cur_ksyms_file="include/generated/autoksyms.h"
  new_ksyms_file="include/generated/autoksyms.h.tmpnew"
  
  info() {
  	if [ "$quiet" != "silent_" ]; then
  		printf "  %-7s %s
  " "$1" "$2"
  	fi
  }
  
  info "CHK" "$cur_ksyms_file"
  
  # Use "make V=1" to debug this script.
  case "$KBUILD_VERBOSE" in
  *1*)
  	set -x
  	;;
  esac
  
  # We need access to CONFIG_ symbols
94cf8acc3   Masahiro Yamada   kbuild: source in...
40
  . include/config/auto.conf
23121ca2b   Nicolas Pitre   kbuild: create/ad...
41

23121ca2b   Nicolas Pitre   kbuild: create/ad...
42
43
44
45
46
47
48
49
  # Generate a new ksym list file with symbols needed by the current
  # set of modules.
  cat > "$new_ksyms_file" << EOT
  /*
   * Automatically generated file; DO NOT EDIT.
   */
  
  EOT
b7dca6dd1   Masahiro Yamada   kbuild: create *....
50
  sed 's/ko$/mod/' modules.order |
60ae1b194   Masahiro Yamada   kbuild: remove th...
51
52
  xargs -n1 sed -n -e '2{s/ /
  /g;/^$/!p;}' -- |
b7dca6dd1   Masahiro Yamada   kbuild: create *....
53
54
  sort -u |
  sed -e 's/\(.*\)/#define __KSYM_\1 1/' >> "$new_ksyms_file"
23121ca2b   Nicolas Pitre   kbuild: create/ad...
55
56
57
58
59
60
61
62
63
64
65
66
67
68
  
  # Special case for modversions (see modpost.c)
  if [ -n "$CONFIG_MODVERSIONS" ]; then
  	echo "#define __KSYM_module_layout 1" >> "$new_ksyms_file"
  fi
  
  # Extract changes between old and new list and touch corresponding
  # dependency files.
  changed=$(
  count=0
  sort "$cur_ksyms_file" "$new_ksyms_file" | uniq -u |
  sed -n 's/^#define __KSYM_\(.*\) 1/\1/p' | tr "A-Z_" "a-z/" |
  while read sympath; do
  	if [ -z "$sympath" ]; then continue; fi
fbfa9be99   Masahiro Yamada   kbuild: move incl...
69
  	depfile="include/ksym/${sympath}.h"
23121ca2b   Nicolas Pitre   kbuild: create/ad...
70
71
  	mkdir -p "$(dirname "$depfile")"
  	touch "$depfile"
825d48758   Nicolas Pitre   kbuild: make scri...
72
73
74
75
76
77
78
  	# Filesystems with coarse time precision may create timestamps
  	# equal to the one from a file that was very recently built and that
  	# needs to be rebuild. Let's guard against that by making sure our
  	# dep files are always newer than the first file we created here.
  	while [ ! "$depfile" -nt "$new_ksyms_file" ]; do
  		touch "$depfile"
  	done
23121ca2b   Nicolas Pitre   kbuild: create/ad...
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
  	echo $((count += 1))
  done | tail -1 )
  changed=${changed:-0}
  
  if [ $changed -gt 0 ]; then
  	# Replace the old list with tne new one
  	old=$(grep -c "^#define __KSYM_" "$cur_ksyms_file" || true)
  	new=$(grep -c "^#define __KSYM_" "$new_ksyms_file" || true)
  	info "KSYMS" "symbols: before=$old, after=$new, changed=$changed"
  	info "UPD" "$cur_ksyms_file"
  	mv -f "$new_ksyms_file" "$cur_ksyms_file"
  	# Then trigger a rebuild of affected source files
  	exec $@
  else
  	rm -f "$new_ksyms_file"
  fi