Ignore:
Timestamp:
2006-09-03T23:37:14Z (19 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
fd85ae5
Parents:
002e613
Message:

sparc64 update.

  • Prototype userspace layer implementation that at least relates to sparc64 and compiles cleanly.
  • Fixes for kernel's preemptible_handler and code related to running userspace.
  • Enable userspace. Several dozen instructions are now run in userspace! We are pretty near the userspace milestone for sparc64.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/libc/arch/sparc64/include/psthread.h

    r002e613 rcfa70add  
    11/*
    2  * Copyright (C) 2006 Martin Decky
     2 * Copyright (C) 2005 Jakub Jermar
    33 * All rights reserved.
    44 *
     
    2727 */
    2828
    29 /** @addtogroup libcsparc64     
     29/** @addtogroup libcsparc64
    3030 * @{
    3131 */
     
    3333 */
    3434
    35 #ifndef __LIBC__sparc64__PSTHREAD_H__
    36 #define __LIBC__sparc64__PSTHREAD_H__
     35#ifndef LIBC_sparc64_PSTHREAD_H_
     36#define LIBC_sparc64_PSTHREAD_H_
    3737
     38#include <libarch/stack.h>
    3839#include <types.h>
     40#include <align.h>
    3941
    40 /* We define our own context_set, because we need to set
    41  * the TLS pointer to the tcb+0x7000
    42  *
    43  * See tls_set in thread.h
     42#define SP_DELTA        STACK_WINDOW_SAVE_AREA_SIZE
     43
     44#ifdef context_set
     45#undef context_set
     46#endif
     47
     48#define context_set(c, _pc, stack, size, ptls)                                                          \
     49        (c)->pc = ((uintptr_t) _pc) - 8;                                                                \
     50        (c)->sp = ((uintptr_t) stack) + ALIGN_UP((size), STACK_ALIGNMENT) - (STACK_BIAS + SP_DELTA);    \
     51        (c)->fp = -STACK_BIAS;                                                                          \
     52        (c)->tp = ptls
     53       
     54/*
     55 * Only save registers that must be preserved across
     56 * function calls.
    4457 */
    45 #define context_set(c, _pc, stack, size, ptls)                  \
    46         (c)->pc = (sysarg_t) (_pc);                             \
    47         (c)->sp = ((sysarg_t) (stack)) + (size) - SP_DELTA;     \
    48         (c)->tls = ((sysarg_t) (ptls)) + 0x7000 + sizeof(tcb_t);
    49 
    50 #define SP_DELTA        16
    51 
    5258typedef struct {
    53         uint64_t sp;
    54         uint64_t pc;
    55        
    56         uint64_t tls;
    57 } __attribute__ ((packed)) context_t;
     59        uintptr_t sp;           /* %o6 */
     60        uintptr_t pc;           /* %o7 */
     61        uint64_t i0;
     62        uint64_t i1;
     63        uint64_t i2;
     64        uint64_t i3;
     65        uint64_t i4;
     66        uint64_t i5;
     67        uintptr_t fp;           /* %i6 */
     68        uintptr_t i7;
     69        uint64_t l0;
     70        uint64_t l1;
     71        uint64_t l2;
     72        uint64_t l3;
     73        uint64_t l4;
     74        uint64_t l5;
     75        uint64_t l6;
     76        uint64_t l7;
     77        uint64_t tp;            /* %g7 */
     78} context_t;
    5879
    5980#endif
Note: See TracChangeset for help on using the changeset viewer.