Stop using snprintf in write_hex_to_fd (XCC)
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 23 Aug 2016 21:28:56 +0000 (17:28 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 30 Aug 2016 19:34:05 +0000 (15:34 -0400)
commita84d47b41e748957b859038fb228f2f817706e93
tree4073a3e1fe31a9f5e38eeacb8c754654c106831e
parentcd2b9e9dc7254bce197149742810c5d29cf77577
Stop using snprintf in write_hex_to_fd (XCC)

This is somewhat of a stopgap to deal with a brutal bug.  VM guests were
seeing XMM corruption.  Eventually, we boiled down to a simple test that
even showed the host task thread's xmm state was getting corrupted.  We
noticed that printf calls (used in debugging) were clobbering the xmm
state, which stands to reason: most any glibc string or memory operation
uses xmms.  Check out strrchr, strlen, and memcmp.

It's quite legal for any function to use xmm state - we're supposed to save
it before clobbering it.  The problem comes with vcore context.  If vcore
context calls any of these functions, including snprintf, it can clobber FP
state.  Unlike other functions, vcore context is not supposed to do that.

The specific scenario was that the VMM 2LS's vcore timer tick would fire.
When we reenabled the vcore tick, we'd ultimately call write_hex_to_fd,
which would use snprintf.  That would clobber the FPU state, which was the
guest's state.

The long term fix is to either aggressively save and restore FP state in
vcore context or ensure that no glibc helpers use xmms when we're in vcore
context.  The choice will probably depend on how expensive the FP
save/restores are on x86.  Fixing the glibc helpers would be a minor pain;
we'd need our own sysdep, but we'd still want to call the xmm version
during non-vcore-context.  That also doesn't protect us from any other apps
that might try to call an xmm op during an event handler.

So in that regard, it's a stopgap.  I also like not relying on glibc in
general from vcore context, so the less snprintfs for simple things, the
better.

Rebuild glibc.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/Versions
tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/plan9_sockets.c
tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/sys/plan9_helpers.h