Changeset fa23560 in mainline for uspace/lib/libc/generic/thread.c


Ignore:
Timestamp:
2007-10-30T22:54:11Z (18 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
4d21cf8
Parents:
b2a0f6dd
Message:

Unify implementations of TLS variant I and variant II alloc_tls() and
free_tls_arch().

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/libc/generic/thread.c

    rb2a0f6dd rfa23560  
    4242#include <async.h>
    4343
    44 #include <stdio.h>
    45 
    46 
    4744#ifndef THREAD_INITIAL_STACK_PAGES_NO
    4845#define THREAD_INITIAL_STACK_PAGES_NO 1
    4946#endif
    50 
    51 static LIST_INITIALIZE(thread_garbage);
    52 
    53 extern char _tdata_start;
    54 extern char _tdata_end;
    55 extern char _tbss_start;
    56 extern char _tbss_end;
    57 
    58 /** Create TLS (Thread Local Storage) data structures.
    59  *
    60  * The code requires, that sections .tdata and .tbss are adjacent. It may be
    61  * changed in the future.
    62  *
    63  * @return Pointer to TCB.
    64  */
    65 tcb_t *__make_tls(void)
    66 {
    67         void *data;
    68         tcb_t *tcb;
    69         size_t tls_size = &_tbss_end - &_tdata_start;
    70        
    71         tcb = __alloc_tls(&data, tls_size);
    72        
    73         /*
    74          * Copy thread local data from the initialization image.
    75          */
    76         memcpy(data, &_tdata_start, &_tdata_end - &_tdata_start);
    77         /*
    78          * Zero out the thread local uninitialized data.
    79          */
    80         memset(data + (&_tbss_start - &_tdata_start), 0,
    81             &_tbss_end - &_tbss_start);
    82 
    83         return tcb;
    84 }
    85 
    86 void __free_tls(tcb_t *tcb)
    87 {
    88         size_t tls_size = &_tbss_end - &_tdata_start;
    89         __free_tls_arch(tcb, tls_size);
    90 }
    9147
    9248/** Main thread function.
Note: See TracChangeset for help on using the changeset viewer.