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,
unsigned char fmtch, unsigned char *startp, unsigned char *endp);
union {
unsigned long u32;
va_list ap32;
} x;
// union {
// unsigned long u32;
// va_list ap32;
// } x;
int
_doprnt (char const *fmt, va_list ap, FILE *stream)
@@ -368,13 +368,18 @@ number: if (sign && ((long) ul != 0L)) {
case 'F':
case 'g':
case 'G': {
// --- IM - vaarg alignment issue fix:
double d;
unsigned long *da;
da = (unsigned long *) ≈
unsigned long *l = (unsigned long *) &d;
x.ap32 = ap;
if ( x.u32 & 4) {
if ( (*da) & 4) { // maj
l[0]= 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);
}
// ---
/*
* don't do unrealistic precision; just pad it with
* zeroes later, so buffer size stays rational.

View File

@@ -50,7 +50,7 @@ TAGSFILE = tags
MANROFF = nroff -man -h -Tascii
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 \
$(TOPSRC)/src/crt0.o -L$(TOPSRC)/src