diff options
Diffstat (limited to 'debian/patches/upstreamme0002-kern-make-printf-handle-long-long-integers.patch')
-rw-r--r-- | debian/patches/upstreamme0002-kern-make-printf-handle-long-long-integers.patch | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/debian/patches/upstreamme0002-kern-make-printf-handle-long-long-integers.patch b/debian/patches/upstreamme0002-kern-make-printf-handle-long-long-integers.patch new file mode 100644 index 0000000..76fa0eb --- /dev/null +++ b/debian/patches/upstreamme0002-kern-make-printf-handle-long-long-integers.patch @@ -0,0 +1,121 @@ +From 81a3958304581ade78069d850261e74a9a58a014 Mon Sep 17 00:00:00 2001 +From: Justus Winter <4winter@informatik.uni-hamburg.de> +Date: Sat, 4 Jul 2015 11:59:48 +0200 +Subject: [PATCH gnumach 2/5] kern: make printf handle long long integers + +* Makefile.am (clib_routines): Steal `__umoddi3'. +* kern/printf.c (MAXBUF): Increase size. +(printnum, _doprnt): Handle long long integers. +* kern/printf.h (printnum): Adjust declaration. +--- + Makefile.am | 2 +- + kern/printf.c | 28 +++++++++++++++++++++------- + kern/printf.h | 2 +- + 3 files changed, 23 insertions(+), 9 deletions(-) + +diff --git a/Makefile.am b/Makefile.am +index 913db55..76a192b 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -159,7 +159,7 @@ noinst_PROGRAMS += \ + clib_routines := memcmp memcpy memmove \ + strchr strstr strsep strtok \ + htonl htons ntohl ntohs \ +- udivdi3 __udivdi3 \ ++ udivdi3 __udivdi3 __umoddi3 \ + __rel_iplt_start __rel_iplt_end \ + __ffsdi2 \ + _START _start etext _edata end _end # actually ld magic, not libc. +diff --git a/kern/printf.c b/kern/printf.c +index 1db0d08..e060b9d 100644 +--- a/kern/printf.c ++++ b/kern/printf.c +@@ -126,11 +126,11 @@ + #define isdigit(d) ((d) >= '0' && (d) <= '9') + #define Ctod(c) ((c) - '0') + +-#define MAXBUF (sizeof(long int) * 8) /* enough for binary */ ++#define MAXBUF (sizeof(long long int) * 8) /* enough for binary */ + + + void printnum( +- unsigned long u, ++ unsigned long long u, + int base, + void (*putc)( char, vm_offset_t ), + vm_offset_t putc_arg) +@@ -178,8 +178,9 @@ void _doprnt( + int prec; + boolean_t ladjust; + char padc; +- long n; +- unsigned long u; ++ long long n; ++ unsigned long long u; ++ int have_long_long = 0; + int plus_sign; + int sign_char; + boolean_t altfmt, truncate; +@@ -276,6 +277,10 @@ void _doprnt( + + if (c == 'l') + c = *++fmt; /* need it if sizeof(int) < sizeof(long) */ ++ if (c == 'l') { ++ c = *++fmt; /* handle `long long' */ ++ have_long_long = 1; ++ } + + truncate = FALSE; + +@@ -287,7 +292,10 @@ void _doprnt( + boolean_t any; + int i; + +- u = va_arg(argp, unsigned long); ++ if (! have_long_long) ++ u = va_arg(argp, unsigned long); ++ else ++ u = va_arg(argp, unsigned long long); + p = va_arg(argp, char *); + base = *p++; + printnum(u, base, putc, putc_arg); +@@ -431,7 +439,10 @@ void _doprnt( + goto print_unsigned; + + print_signed: +- n = va_arg(argp, long); ++ if (! have_long_long) ++ n = va_arg(argp, long); ++ else ++ n = va_arg(argp, long long); + if (n >= 0) { + u = n; + sign_char = plus_sign; +@@ -443,7 +454,10 @@ void _doprnt( + goto print_num; + + print_unsigned: +- u = va_arg(argp, unsigned long); ++ if (! have_long_long) ++ u = va_arg(argp, unsigned long); ++ else ++ u = va_arg(argp, unsigned long long); + goto print_num; + + print_num: +diff --git a/kern/printf.h b/kern/printf.h +index 86857d3..76047f0 100644 +--- a/kern/printf.h ++++ b/kern/printf.h +@@ -35,7 +35,7 @@ extern void _doprnt (const char *fmt, + int radix, + vm_offset_t putc_arg); + +-extern void printnum (unsigned long u, int base, ++extern void printnum (unsigned long long u, int base, + void (*putc)(char, vm_offset_t), + vm_offset_t putc_arg); + +-- +2.1.4 + |