Fix of the vaarg fix

This commit is contained in:
igor-m
2014-04-13 09:34:13 +02:00
parent 297b14aa0c
commit c04495837f
2 changed files with 15 additions and 8 deletions

View File

@@ -53,10 +53,10 @@ static unsigned char mkhex (unsigned char ch);
static int cvt (double number, int prec, int sharpflag, unsigned char *negp, static int cvt (double number, int prec, int sharpflag, unsigned char *negp,
unsigned char fmtch, unsigned char *startp, unsigned char *endp); unsigned char fmtch, unsigned char *startp, unsigned char *endp);
union { // union {
unsigned long u32; // unsigned long u32;
va_list ap32; // va_list ap32;
} x; // } x;
int int
_doprnt (char const *fmt, va_list ap, FILE *stream) _doprnt (char const *fmt, va_list ap, FILE *stream)
@@ -368,13 +368,18 @@ number: if (sign && ((long) ul != 0L)) {
case 'F': case 'F':
case 'g': case 'g':
case 'G': { case 'G': {
// --- IM - vaarg alignment issue fix:
double d; double d;
unsigned long *da;
da = (unsigned long *) ≈
unsigned long *l = (unsigned long *) &d; unsigned long *l = (unsigned long *) &d;
x.ap32 = ap; if ( (*da) & 4) { // maj
if ( x.u32 & 4) {
l[0]= va_arg(ap, unsigned long); l[0]= va_arg(ap, unsigned long);
l[1]= va_arg(ap, unsigned long); l[1]= va_arg(ap, unsigned long);
} }
@@ -384,6 +389,8 @@ number: if (sign && ((long) ul != 0L)) {
l[1]= va_arg(ap, unsigned long); l[1]= va_arg(ap, unsigned long);
} }
// ---
/* /*
* don't do unrealistic precision; just pad it with * don't do unrealistic precision; just pad it with
* zeroes later, so buffer size stays rational. * zeroes later, so buffer size stays rational.

View File

@@ -50,7 +50,7 @@ TAGSFILE = tags
MANROFF = nroff -man -h -Tascii MANROFF = nroff -man -h -Tascii
ELF2AOUT = $(TOPSRC)/tools/elf2aout/elf2aout ELF2AOUT = $(TOPSRC)/tools/elf2aout/elf2aout
CFLAGS = -O CFLAGS = -O -fno-short-double
LDFLAGS += -N -nostartfiles -fno-dwarf2-cfi-asm -T$(TOPSRC)/src/elf32-mips.ld \ LDFLAGS += -N -nostartfiles -fno-dwarf2-cfi-asm -T$(TOPSRC)/src/elf32-mips.ld \
$(TOPSRC)/src/crt0.o -L$(TOPSRC)/src $(TOPSRC)/src/crt0.o -L$(TOPSRC)/src