Parlib is no PIC-capable
authorBarret Rhoden <brho@cs.berkeley.edu>
Fri, 17 Apr 2015 14:46:15 +0000 (10:46 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Fri, 17 Apr 2015 14:51:01 +0000 (10:51 -0400)
commit7fdd2be0109357d1489be94f28e2ba02e1c02382
tree42e809ab113e4b42e9a9e6b5e1bf14a1cab51b7d
parent0694c8d72d784f62b1d4fcb9bd266b15da343342
Parlib is no PIC-capable

We needed some minor changes, mostly to uthread, to be able to build
parlib with -fPIC (and as a .so).

Thanks to the lack of TLS-clobbers, anytime we set_tls_desc and then
access TLS variables in the same function, we need to wrap those
accesses with 'begin_safe_access'.  Otherwise, the compiler will cache
the address of TLS variables and not discard and recompute the address
after a TLS change.

The other big change is that leaq needed to do PC-relative addressing.
Otherwise the asm emits a _32S relocation, which fails when we make a
shared library with parlib.  For a nice review of relocations, check
out: http://www.mindfruit.co.uk/2012/06/relocations-relocations.html
user/parlib/include/vcore.h
user/parlib/include/x86/vcore64.h
user/parlib/uthread.c