Fixes set_tls_desc() bug (XCC)
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 26 Sep 2012 01:44:00 +0000 (18:44 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Wed, 26 Sep 2012 01:44:00 +0000 (18:44 -0700)
commit10471e0bb7b21fc81ad5220e9c078456f3131bae
treecd2ee6752796c84c3abb7c27fcaa1fb0da7e44eb
parent154e1657163c76bfec3c1ad50528c086a153c42b
Fixes set_tls_desc() bug (XCC)

set_tls_desc() has historically set __vcoreid within the TLS to whatever
vcoreid it is being loaded on.  This was an ugly leftover from back in
the day.  It is necessary to do this for uthreads that are starting up
on a vcore (so they know which vcore it is), but we *never* want to do
this for vcore contexts.

This surfaced when handling_vc_preempt(), when we changed into a
remote vcore's TLS.  That would clobber their __vcoreid, which would lead
to all sorts of confusion (using the wrong MCS lock qnode, loading other
vcore TLSs instead of your own, telling uthread's the wrong vcoreid,
etc).

You need to rebuild glibc (copy over the edited file before building).
tests/eth_audio.c
tests/msr_get_cores.c
tests/msr_get_singlecore.c
tools/compilers/gcc-glibc/glibc-2.14.1-ros/sysdeps/ros/vcore-tls.c
user/c3po/threads/ucontext.c
user/parlib/uthread.c