Rev 1797 | Rev 2061 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1797 | Rev 1864 | ||
---|---|---|---|
Line 24... | Line 24... | ||
24 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
24 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
25 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
25 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
26 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
27 | */ |
27 | */ |
28 | 28 | ||
29 | /** @addtogroup libcsparc64 |
29 | /** @addtogroup libcsparc64 sparc64 |
- | 30 | * @ingroup lc |
|
30 | * @{ |
31 | * @{ |
31 | */ |
32 | */ |
32 | /** @file |
33 | /** @file |
- | 34 | * |
|
33 | */ |
35 | */ |
34 | 36 | ||
35 | #include <thread.h> |
37 | #include <thread.h> |
36 | #include <malloc.h> |
38 | #include <malloc.h> |
37 | 39 | ||
38 | /** Allocate TLS & TCB for initial module threads |
40 | /** Allocate TLS & TCB for initial module threads |
39 | * |
41 | * |
40 | * @param data Start of data section |
42 | * @param data Start of data section |
41 | * @return pointer to tcb_t structure |
43 | * @return pointer to tcb_t structure |
42 | * |
- | |
43 | */ |
44 | */ |
44 | tcb_t * __alloc_tls(void **data, size_t size) |
45 | tcb_t * __alloc_tls(void **data, size_t size) |
45 | { |
46 | { |
46 | tcb_t *result; |
47 | tcb_t *tcb; |
- | 48 | ||
- | 49 | *data = malloc(sizeof(tcb_t) + size); |
|
- | 50 | ||
- | 51 | tcb = (tcb_t *) (*data + size); |
|
- | 52 | tcb->self = tcb; |
|
47 | 53 | ||
48 | result = malloc(sizeof(tcb_t) + size); |
- | |
49 | *data = ((void *)result) + sizeof(tcb_t); |
- | |
50 | return result; |
54 | return tcb; |
51 | } |
55 | } |
52 | 56 | ||
53 | void __free_tls_arch(tcb_t *tcb, size_t size) |
57 | void __free_tls_arch(tcb_t *tcb, size_t size) |
54 | { |
58 | { |
- | 59 | void *start = ((void *)tcb) - size; |
|
55 | free(tcb); |
60 | free(start); |
56 | } |
61 | } |
57 | 62 | ||
58 | /** @} |
63 | /** @} |
59 | */ |
64 | */ |