Skip to content

Commit

Permalink
address comments
Browse files Browse the repository at this point in the history
  • Loading branch information
pcd1193182 committed Oct 29, 2018
1 parent 361c338 commit 43ded79
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 20 deletions.
38 changes: 20 additions & 18 deletions kpatch-build/kpatch-build
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ SKIPGCCCHECK=0
ARCH_KCFLAGS=""
declare -a PATCH_LIST
APPLIED_PATCHES=0
EXTERNAL=
EXTERNAL_MODULE=

warn() {
echo "ERROR: $1" >&2
Expand Down Expand Up @@ -200,8 +200,8 @@ gcc_version_check() {
echo 'void main(void) {}' > "$c"
out="$(gcc -c -pg -ffunction-sections -o "$o" "$c" 2>&1)"
gccver="$(gcc_version_from_file "$o")"
if [[ -n "$EXTERNAL" ]]; then
kgccver="$(gcc_version_from_file "$EXTERNAL")"
if [[ -n "$EXTERNAL_MODULE" ]]; then
kgccver="$(gcc_version_from_file "$EXTERNAL_MODULE")"
else
kgccver="$(gcc_version_from_file "$VMLINUX")"
fi
Expand Down Expand Up @@ -463,7 +463,8 @@ while [[ $# -gt 0 ]]; do
fi
;;
-e|--external)
EXTERNAL="$(readlink -f "$2")"
[[ ! -f "$2" ]] && die "external module '$2' not found"
EXTERNAL_MODULE="$(readlink -f "$2")"
shift
;;
--skip-cleanup)
Expand Down Expand Up @@ -509,7 +510,7 @@ if [[ -n "$SRCRPM" ]]; then
ARCHVERSION="${ARCHVERSION#alt-}"
fi

if [[ -n "$EXTERNAL" ]] && [[ -z "$USERSRCDIR" ]]; then
if [[ -n "$EXTERNAL_MODULE" ]] && [[ -z "$USERSRCDIR" ]]; then
warn "--external requires --sourcedir"
exit 1
fi
Expand All @@ -526,7 +527,7 @@ if [[ -n "$USERSRCDIR" ]]; then
fi
SRCDIR="$USERSRCDIR"

if [[ -z "$EXTERNAL" ]]; then
if [[ -z "$EXTERNAL_MODULE" ]]; then
[[ -z "$VMLINUX" ]] && VMLINUX="$SRCDIR"/vmlinux
[[ ! -e "$VMLINUX" ]] && die "can't find vmlinux"

Expand Down Expand Up @@ -581,10 +582,10 @@ if [[ -n "$USERSRCDIR" ]]; then
echo "Using source directory at $USERSRCDIR"

# save original vmlinux before it gets overwritten by sourcedir build
[[ -z "$EXTERNAL" ]] && [[ "$VMLINUX" -ef "$SRCDIR"/vmlinux ]] && cp -f "$VMLINUX" "$TEMPDIR/vmlinux" && VMLINUX="$TEMPDIR/vmlinux"
[[ -z "$EXTERNAL_MODULE" ]] && [[ "$VMLINUX" -ef "$SRCDIR"/vmlinux ]] && cp -f "$VMLINUX" "$TEMPDIR/vmlinux" && VMLINUX="$TEMPDIR/vmlinux"

# For external modules, use the running kernel's config
[[ -n "$EXTERNAL" ]] && [[ -z "$CONFIGFILE" ]] && CONFIGFILE="/boot/config-${ARCHVERSION}"
[[ -n "$EXTERNAL_MODULE" ]] && [[ -z "$CONFIGFILE" ]] && CONFIGFILE="/boot/config-${ARCHVERSION}"

elif [[ -e "$SRCDIR"/.config ]] && [[ -e "$VERSIONFILE" ]] && [[ "$(cat "$VERSIONFILE")" = "$ARCHVERSION" ]]; then
echo "Using cache at $SRCDIR"
Expand Down Expand Up @@ -731,14 +732,14 @@ if [[ $DEBUG -ge 4 ]]; then
export KPATCH_GCC_DEBUG=1
fi

echo "Building original module"
[[ -n "$EXTERNAL" ]] || ./scripts/setlocalversion --save-scmversion || die
echo "Building original source"
[[ -n "$EXTERNAL_MODULE" ]] || ./scripts/setlocalversion --save-scmversion || die
unset KPATCH_GCC_TEMPDIR
# $TARGETS used as list, no quotes.
# shellcheck disable=SC2086
CROSS_COMPILE="$TOOLSDIR/kpatch-gcc " make "-j$CPUS" $TARGETS 2>&1 | logger || die

echo "Building patched module"
echo "Building patched source"
apply_patches
mkdir -p "$TEMPDIR/orig" "$TEMPDIR/patched"
KPATCH_GCC_TEMPDIR="$TEMPDIR"
Expand All @@ -762,7 +763,7 @@ if [[ ! -e "$TEMPDIR/changed_objs" ]]; then
die "no changed objects found"
fi

[[ -n "$EXTERNAL" ]] || grep -q vmlinux "$SRCDIR/Module.symvers" || die "truncated $SRCDIR/Module.symvers file"
[[ -n "$EXTERNAL_MODULE" ]] || grep -q vmlinux "$SRCDIR/Module.symvers" || die "truncated $SRCDIR/Module.symvers file"

# Read as words, no quotes.
# shellcheck disable=SC2013
Expand Down Expand Up @@ -820,19 +821,20 @@ for i in $FILES; do
KOBJFILE_PATH="$VMLINUX"
SYMTAB="${TEMPDIR}/${KOBJFILE_NAME}.symtab"
SYMVERS_FILE="$SRCDIR/Module.symvers"
elif [[ "$(basename "$KOBJFILE")" = "$(basename "$EXTERNAL")" ]]; then
KOBJFILE_NAME="$(basename "$EXTERNAL" | sed 's/.ko$//')"
KOBJFILE_PATH="$EXTERNAL"
SYMTAB="${TEMPDIR}/${KOBJFILE_NAME}.symtab"
elif [[ "$(basename "$KOBJFILE")" = "$(basename "$EXTERNAL_MODULE")" ]]; then
KOBJFILE_NAME="$(basename "$EXTERNAL_MODULE" | sed 's/.ko$//')"
KOBJFILE_PATH="$EXTERNAL_MODULE"
SYMTAB="${TEMPDIR}/module/${KOBJFILE_NAME}.symtab"
SYMVERS_FILE="$TEMPDIR/Module.symvers"
BUILDDIR="/lib/modules/$ARCHVERSION/build/"
cp "$SRCDIR/Module.symvers" "$SYMVERS_FILE"
awk '{ print $1 " " $2 " '"$BUILDDIR"'" $3 " "$4}' "${BUILDDIR}/Module.symvers" >> "$SYMVERS_FILE"
else
KOBJFILE_NAME=$(basename "${KOBJFILE%.ko}")
KOBJFILE_NAME="${KOBJFILE_NAME/-/_}"
KOBJFILE_PATH="${TEMPDIR}/$KOBJFILE"
KOBJFILE_PATH="${TEMPDIR}/module/$KOBJFILE"
SYMTAB="${KOBJFILE_PATH}.symtab"
SYMVERS_FILE="$SRCDIR/Module.symvers"
fi

eu-readelf -s "$KOBJFILE_PATH" > "$SYMTAB"
Expand Down Expand Up @@ -902,7 +904,7 @@ else
fi

cd "$TEMPDIR/patch" || die
if [[ -z "$EXTERNAL" ]]; then
if [[ -z "$EXTERNAL_MODULE" ]]; then
KPATCH_BUILD="$SRCDIR"
else
KPATCH_BUILD="/lib/modules/$ARCHVERSION/build"
Expand Down
4 changes: 2 additions & 2 deletions kpatch-build/kpatch-gcc
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,8 @@ elif [[ "$TOOLCHAINCMD" = "ld" ]] ; then
relobj=${obj//$KPATCH_GCC_SRCDIR/}
case "$obj" in
*.ko)
mkdir -p "$KPATCH_GCC_TEMPDIR/$(dirname "$relobj")"
cp -f "$obj" "$KPATCH_GCC_TEMPDIR/$relobj"
mkdir -p "$KPATCH_GCC_TEMPDIR/module/$(dirname "$relobj")"
cp -f "$obj" "$KPATCH_GCC_TEMPDIR/module/$relobj"
break
;;
.tmp_vmlinux*|vmlinux)
Expand Down

0 comments on commit 43ded79

Please sign in to comment.