Fix of 16byte stack alignment, doprnt.c does not require va_arg fix now
This commit is contained in:
@@ -53,11 +53,6 @@ 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;
|
||||
|
||||
int
|
||||
_doprnt (char const *fmt, va_list ap, FILE *stream)
|
||||
{
|
||||
@@ -69,7 +64,6 @@ _doprnt (char const *fmt, va_list ap, FILE *stream)
|
||||
unsigned long ul;
|
||||
|
||||
double d;
|
||||
unsigned long *da;
|
||||
|
||||
if (! stream)
|
||||
return 0;
|
||||
@@ -372,22 +366,8 @@ number: if (sign && ((long) ul != 0L)) {
|
||||
case 'g':
|
||||
case 'G': {
|
||||
|
||||
// --- IM - vaarg alignment issue fix:
|
||||
|
||||
da = (unsigned long *) ≈
|
||||
|
||||
unsigned long *l = (unsigned long *) &d;
|
||||
|
||||
if ( ((unsigned long)da) & 4) { // maj_II
|
||||
l[0]= va_arg(ap, unsigned long);
|
||||
l[1]= va_arg(ap, unsigned long);
|
||||
}
|
||||
else {
|
||||
l[0]= va_arg(ap, unsigned long);
|
||||
l[0]= va_arg(ap, unsigned long);
|
||||
l[1]= va_arg(ap, unsigned long);
|
||||
}
|
||||
|
||||
// ---va_arg alignment fix
|
||||
d = va_arg(ap, double);
|
||||
// ---
|
||||
|
||||
/*
|
||||
|
||||
@@ -113,6 +113,7 @@ struct sigstack {
|
||||
struct sigcontext {
|
||||
int sc_onstack; /* sigstack state to restore */
|
||||
long sc_mask; /* signal mask to restore */
|
||||
int sc_align[2]; /* align to 16 bytes */
|
||||
int sc_r1; /* r1 to restore */
|
||||
int sc_r2; /* and other registers */
|
||||
int sc_r3;
|
||||
|
||||
@@ -432,7 +432,7 @@ badarg:
|
||||
*/
|
||||
ucp = USER_DATA_END - nc - NBPW;
|
||||
ap = ucp - na*NBPW - 2*NBPW;
|
||||
u.u_frame [FRAME_SP] = ap - 16;
|
||||
u.u_frame [FRAME_SP] = (ap - 16) & ~0xf; /* align to 16 bytes */
|
||||
u.u_frame [FRAME_R4] = na - ne; /* $a0 := argc */
|
||||
u.u_frame [FRAME_R5] = ap; /* $a1 := argv */
|
||||
u.u_frame [FRAME_R6] = ap + (na-ne+1)*NBPW; /* $a2 := env */
|
||||
|
||||
Reference in New Issue
Block a user