changeset 22602:5c904c0e545f

12208 dboot_printf(): support %u Reviewed by: Andy Stormont <astormont@racktopsystems.com> Reviewed by: Toomas Soome <tsoome@me.com> Approved by: Dan McDonald <danmcd@joyent.com>
author John Levon <john.levon@joyent.com>
date Fri, 17 Jan 2020 06:21:50 -0800
parents 1704d8bb7302
children eaaf077f17f2
files usr/src/uts/i86pc/dboot/dboot_elfload.c usr/src/uts/i86pc/dboot/dboot_printf.c
diffstat 2 files changed, 12 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/uts/i86pc/dboot/dboot_elfload.c	Sat Jan 18 12:13:39 2020 +0000
+++ b/usr/src/uts/i86pc/dboot/dboot_elfload.c	Fri Jan 17 06:21:50 2020 -0800
@@ -185,7 +185,7 @@
 		/* zero out bss */
 		if (shdr->sh_type == SHT_NOBITS) {
 			if (prom_debug)
-				dboot_printf("zeroing BSS %ld bytes from "
+				dboot_printf("zeroing BSS %lu bytes from "
 				    "physaddr 0x%" PRIx64
 				    " (end=0x%" PRIx64 ")\n",
 				    (ulong_t)shdr->sh_size,
--- a/usr/src/uts/i86pc/dboot/dboot_printf.c	Sat Jan 18 12:13:39 2020 +0000
+++ b/usr/src/uts/i86pc/dboot/dboot_printf.c	Fri Jan 17 06:21:50 2020 -0800
@@ -21,6 +21,7 @@
 
 /*
  * Copyright (c) 2012 Gary Mills
+ * Copyright 2020 Joyent, Inc.
  *
  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
@@ -93,7 +94,7 @@
 }
 
 static void
-dboot_putnum(uint64_t x, uint_t is_signed, uint8_t base)
+dboot_putnum(uint64_t x, boolean_t is_signed, uint8_t base)
 {
 	char buffer[64];	/* digits in reverse order */
 	int i;
@@ -114,7 +115,7 @@
 }
 
 /*
- * very primitive printf - only does %s, %d, %x, %lx, or %%
+ * Very primitive printf - only does a subset of the standard format characters.
  */
 static void
 do_dboot_printf(char *fmt, va_list args)
@@ -123,7 +124,6 @@
 	uint64_t x;
 	uint8_t base;
 	uint8_t size;
-	uint_t is_signed = 1;
 
 	if (fmt == NULL) {
 		dboot_puts("dboot_printf(): 1st arg is NULL\n");
@@ -159,7 +159,7 @@
 
 		case 'p':
 			x = va_arg(args, ulong_t);
-			dboot_putnum(x, !is_signed, 16);
+			dboot_putnum(x, B_FALSE, 16);
 			break;
 
 		case 'l':
@@ -176,9 +176,13 @@
 				x = va_arg(args, long);
 			else
 				x = va_arg(args, long long);
-			dboot_putnum(x, is_signed, 10);
+			dboot_putnum(x, B_TRUE, 10);
 			break;
 
+		case 'u':
+			base = 10;
+			goto unsigned_num;
+
 		case 'b':
 			base = 2;
 			goto unsigned_num;
@@ -192,11 +196,11 @@
 unsigned_num:
 			if (size == 0)
 				x = va_arg(args, uint_t);
-			else if (size == sizeof (long))
+			else if (size == sizeof (ulong_t))
 				x = va_arg(args, ulong_t);
 			else
 				x = va_arg(args, unsigned long long);
-			dboot_putnum(x, !is_signed, base);
+			dboot_putnum(x, B_FALSE, base);
 			break;
 
 		default: