| 1 | |
| 2 | |
| 3 | |
| 4 | |
| 5 | |
| 6 |
|
| 7 | |
| 8 | |
| 9 | |
| 10 | |
| 11 | |
| 12 |
|
| 13 | |
| 14 | |
| 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 | |
| 56 | |
| 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 | |
| 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
|