git: 9857f824ec77 - stable/14 - arm_kernel_bothdr.awk: Update to latest ota

From: Warner Losh <imp_at_FreeBSD.org>
Date: Wed, 24 Apr 2024 23:58:41 UTC
The branch stable/14 has been updated by imp:

URL: https://cgit.FreeBSD.org/src/commit/?id=9857f824ec77cdc27c82e0871356eb2e9662fc86

commit 9857f824ec77cdc27c82e0871356eb2e9662fc86
Author:     Warner Losh <imp@FreeBSD.org>
AuthorDate: 2024-04-15 21:07:46 +0000
Commit:     Warner Losh <imp@FreeBSD.org>
CommitDate: 2024-04-24 23:57:55 +0000

    arm_kernel_bothdr.awk: Update to latest ota
    
    The latest ota is the first one in FreeBSD that treats 0 + "0xf" as
    being '0' instead of '15'. Don't use this old trick anymore to convert
    from hexidecimal to a number. Write a function to do that instead. This
    fixes kernel.bin building on arm*. awk on 14 doesn't need this, but to
    build FreeBSD stable/14's kernel.bin on 15 we'll need it, so fast MFC.
    
    MFC After:              3 days
    Sponsored by:           Netflix
    Reviewed by:            kevans
    Differential Revision:  https://reviews.freebsd.org/D44801
    
    (cherry picked from commit de22251127cd0e89ce1edb56c58b202496a97ba3)
---
 sys/tools/arm_kernel_boothdr.awk | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/sys/tools/arm_kernel_boothdr.awk b/sys/tools/arm_kernel_boothdr.awk
index dcc65ab40b66..e0f193f7922c 100644
--- a/sys/tools/arm_kernel_boothdr.awk
+++ b/sys/tools/arm_kernel_boothdr.awk
@@ -47,6 +47,10 @@ BEGIN {
 	}
 
 	gHdrType = hdrtype
+	for (i = 0; i < 16; i++) {
+		hex[sprintf("%x", i)] = i;
+		hex[sprintf("%X", i)] = i;
+	}
 }
 
 function addr_to_offset(addr) {
@@ -56,11 +60,13 @@ function addr_to_offset(addr) {
 
 function hexstr_to_num(str) {
 
-	# Prepend a 0x onto the string, then coerce it to a number by doing
-	# arithmetic with it, which makes awk run it through strtod(),
-	# which handles hex numbers that have a 0x prefix.
+	sum = 0;
+	len = length(str);
+	for (i = 1; i <= len; i++) {
+		sum = sum * 16 + hex[substr(str, i, 1)];
+	}
 
-	return 0 + ("0x" str)
+	return sum;
 }
 
 function write_le32(num) {