~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/powerpc/kernel/prom_init_check.sh

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 #!/bin/sh
  2 # SPDX-License-Identifier: GPL-2.0-or-later
  3 #
  4 # Copyright © 2008 IBM Corporation
  5 #
  6 
  7 # This script checks prom_init.o to see what external symbols it
  8 # is using, if it finds symbols not in the whitelist it returns
  9 # an error. The point of this is to discourage people from
 10 # intentionally or accidentally adding new code to prom_init.c
 11 # which has side effects on other parts of the kernel.
 12 
 13 # If you really need to reference something from prom_init.o add
 14 # it to the list below:
 15 
 16 has_renamed_memintrinsics()
 17 {
 18         grep -q "^CONFIG_KASAN=y$" ${KCONFIG_CONFIG} && \
 19                 ! grep -q "^CONFIG_CC_HAS_KASAN_MEMINTRINSIC_PREFIX=y" ${KCONFIG_CONFIG}
 20 }
 21 
 22 if has_renamed_memintrinsics
 23 then
 24         MEM_FUNCS="__memcpy __memset"
 25 else
 26         MEM_FUNCS="memcpy memset"
 27 fi
 28 
 29 WHITELIST="add_reloc_offset __bss_start __bss_stop copy_and_flush
 30 _end enter_prom $MEM_FUNCS reloc_offset __secondary_hold
 31 __secondary_hold_acknowledge __secondary_hold_spinloop __start
 32 logo_linux_clut224 btext_prepare_BAT
 33 reloc_got2 kernstart_addr memstart_addr linux_banner _stext
 34 btext_setup_display TOC. relocate"
 35 
 36 NM="$1"
 37 OBJ="$2"
 38 
 39 ERROR=0
 40 
 41 check_section()
 42 {
 43     file=$1
 44     section=$2
 45     size=$(objdump -h -j $section $file 2>/dev/null | awk "\$2 == \"$section\" {print \$3}")
 46     size=${size:-0}
 47     if [ $size -ne 0 ]; then
 48         ERROR=1
 49         echo "Error: Section $section not empty in prom_init.c" >&2
 50     fi
 51 }
 52 
 53 for UNDEF in $($NM -u $OBJ | awk '{print $2}')
 54 do
 55         # On 64-bit nm gives us the function descriptors, which have
 56         # a leading . on the name, so strip it off here.
 57         UNDEF="${UNDEF#.}"
 58 
 59         case "$KBUILD_VERBOSE" in
 60         *1*)
 61                 echo "Checking prom_init.o symbol '$UNDEF'" ;;
 62         esac
 63 
 64         OK=0
 65         for WHITE in $WHITELIST
 66         do
 67                 if [ "$UNDEF" = "$WHITE" ]; then
 68                         OK=1
 69                         break
 70                 fi
 71         done
 72 
 73         # ignore register save/restore funcitons
 74         case $UNDEF in
 75         _restgpr_*|_restgpr0_*|_rest32gpr_*)
 76                 OK=1
 77                 ;;
 78         _savegpr_*|_savegpr0_*|_save32gpr_*)
 79                 OK=1
 80                 ;;
 81         esac
 82 
 83         if [ $OK -eq 0 ]; then
 84                 ERROR=1
 85                 echo "Error: External symbol '$UNDEF' referenced" \
 86                      "from prom_init.c" >&2
 87         fi
 88 done
 89 
 90 check_section $OBJ .data
 91 check_section $OBJ .bss
 92 check_section $OBJ .init.data
 93 
 94 exit $ERROR

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php