From 9fec194bd1d8ab8faef6d098640564a18dbc225c Mon Sep 17 00:00:00 2001
From: Kevin Mihelich <kevin@archlinuxarm.org>
Date: Tue, 21 Mar 2023 17:56:32 -0600
Subject: [PATCH 3/3] check for ALARM kernels in run_post_hooks

---
 functions  | 25 ++++++++++++++++++++-----
 mkinitcpio | 11 +++++++++++
 2 files changed, 31 insertions(+), 5 deletions(-)

diff --git a/functions b/functions
index 6eab867..c26c4d1 100644
--- a/functions
+++ b/functions
@@ -297,13 +297,28 @@ kver_generic() {
         reader='zcat'
     fi
 
-    [[ "$(detect_compression "$1")" == 'gzip' ]] && reader='zcat'
+    if [[ $1 =~ "/zImage" || $1 =~ /kernel7.img ]]; then
+        # Check for xz zImage
+        skip=$(LC_ALL=C grep -a -b -o $'\xFD\x37\x7A\x58\x5A\x00' $1 | tail -n 1 | cut -d ':' -f 1)
+        if [[ ! -z $skip ]]; then
+            read -r _ _ kver _ < <(dd if=$1 iflag=skip_bytes skip=$skip | xzcat | grep -m1 -aoE 'Linux version .(\.[-[:alnum:]+]+)+')
+        fi
+        if [[ -z "$kver" ]]; then
+            # Check for gzip zImage
+            skip=$(LC_ALL=C grep -a -b -o $'\x1f\x8b\x08\x00\x00\x00\x00\x00' $1 | head -n 1 | cut -d ':' -f 1)
+            if [[ ! -z $skip ]]; then
+              read -r _ _ kver _ < <(dd if=$1 iflag=skip_bytes skip=$skip | zcat | grep -m1 -aoE 'Linux version .(\.[-[:alnum:]+]+)+')
+            fi
+        fi
+    else
+        [[ "$(detect_compression "$1")" == 'gzip' ]] && reader='zcat'
 
-    read -r _ _ kver _ < <($reader "$1" | grep -m1 -aoE 'Linux version .(\.[-[:alnum:]+]+)+')
+        read -r _ _ kver _ < <($reader "$1" | grep -m1 -aoE 'Linux version .(\.[-[:alnum:]+]+)+')
 
-    # try if the image is gzip compressed
-    if [[ -z "$kver" ]]; then
-        read _ _ kver _ < <(gzip -c -d "$1" | grep -m1 -aoE 'Linux version .(\.[-[:alnum:]]+)+')
+        # try if the image is gzip compressed
+        if [[ -z "$kver" ]]; then
+            read _ _ kver _ < <(gzip -c -d "$1" | grep -m1 -aoE 'Linux version .(\.[-[:alnum:]]+)+')
+        fi
     fi
 
     printf '%s' "$kver"
diff --git a/mkinitcpio b/mkinitcpio
index 98a80e0..b7d6b15 100755
--- a/mkinitcpio
+++ b/mkinitcpio
@@ -880,6 +880,17 @@ if [[ "$KERNELVERSION" != 'none' ]]; then
         done
     fi
 
+    if [[ -z "$KERNELIMAGE" ]]; then
+        # check version of ALARM kernels in /boot
+        for img in /boot/*Image* /boot/kernel*.img; do
+            if [[ -f $img && "$(kver "$img")" == "$KERNELVERSION" ]]; then
+                KERNELIMAGE="$img"
+                quiet "located kernel image: '%s'" "$KERNELIMAGE"
+                break
+            fi
+        done
+    fi
+
     if [[ -z "$KERNELIMAGE" ]]; then
         # check version of all kernels in /boot
         for img in /boot/vmlinuz-*; do
-- 
2.36.1