linux/scripts/adjust_autoksyms.sh
<<
>>
Prefs
   1#!/bin/sh
   2# SPDX-License-Identifier: GPL-2.0-only
   3
   4# Script to update include/generated/autoksyms.h and dependency files
   5#
   6# Copyright:    (C) 2016  Linaro Limited
   7# Created by:   Nicolas Pitre, January 2016
   8#
   9
  10# Update the include/generated/autoksyms.h file.
  11#
  12# For each symbol being added or removed, the corresponding dependency
  13# file's timestamp is updated to force a rebuild of the affected source
  14# file. All arguments passed to this script are assumed to be a command
  15# to be exec'd to trigger a rebuild of those files.
  16
  17set -e
  18
  19cur_ksyms_file="include/generated/autoksyms.h"
  20new_ksyms_file="include/generated/autoksyms.h.tmpnew"
  21
  22info() {
  23        if [ "$quiet" != "silent_" ]; then
  24                printf "  %-7s %s\n" "$1" "$2"
  25        fi
  26}
  27
  28info "CHK" "$cur_ksyms_file"
  29
  30# Use "make V=1" to debug this script.
  31case "$KBUILD_VERBOSE" in
  32*1*)
  33        set -x
  34        ;;
  35esac
  36
  37# Generate a new symbol list file
  38$CONFIG_SHELL $srctree/scripts/gen_autoksyms.sh "$new_ksyms_file"
  39
  40# Extract changes between old and new list and touch corresponding
  41# dependency files.
  42changed=$(
  43count=0
  44sort "$cur_ksyms_file" "$new_ksyms_file" | uniq -u |
  45sed -n 's/^#define __KSYM_\(.*\) 1/\1/p' |
  46while read sympath; do
  47        if [ -z "$sympath" ]; then continue; fi
  48        depfile="include/ksym/${sympath}"
  49        mkdir -p "$(dirname "$depfile")"
  50        touch "$depfile"
  51        # Filesystems with coarse time precision may create timestamps
  52        # equal to the one from a file that was very recently built and that
  53        # needs to be rebuild. Let's guard against that by making sure our
  54        # dep files are always newer than the first file we created here.
  55        while [ ! "$depfile" -nt "$new_ksyms_file" ]; do
  56                touch "$depfile"
  57        done
  58        echo $((count += 1))
  59done | tail -1 )
  60changed=${changed:-0}
  61
  62if [ $changed -gt 0 ]; then
  63        # Replace the old list with tne new one
  64        old=$(grep -c "^#define __KSYM_" "$cur_ksyms_file" || true)
  65        new=$(grep -c "^#define __KSYM_" "$new_ksyms_file" || true)
  66        info "KSYMS" "symbols: before=$old, after=$new, changed=$changed"
  67        info "UPD" "$cur_ksyms_file"
  68        mv -f "$new_ksyms_file" "$cur_ksyms_file"
  69        # Then trigger a rebuild of affected source files
  70        exec $@
  71else
  72        rm -f "$new_ksyms_file"
  73fi
  74