Changeset d681c17 in mainline


Ignore:
Timestamp:
2006-09-05T14:52:11Z (18 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
5035eeb7
Parents:
2def788
Message:

sparc64 work.

  • the syscall wrapper needs to use the "memory" clobber specifier to prevent over-optimization.
  • on sparc64, the user address space spans the whole 64-bit space and therefore the macro USER_ADDRESS_SPACE_SIZE_ARCH, as it was defined, overflows to 0
  • stop using USER_ADDRESS_SPACE_SIZE_ARCH and define MAX_HEAP_SIZE instead
  • in our situation when kernel and user address spaces are separate, the G (global) bit cannot be used (there is no point in it anymore)
  • add the DEBUG() macro to stdio.h; DEBUG() uses SYS_IO and is a good debugging tool for getting early userspace to work
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/sparc64/src/mm/tlb.c

    r2def788 rd681c17  
    104104        data.p = true;
    105105        data.w = true;
    106         data.g = true;
     106        data.g = false;
    107107
    108108        dtlb_data_in_write(data.value);
  • kernel/arch/sparc64/src/start.S

    r2def788 rd681c17  
    126126       
    127127        ! write DTLB data and install the kernel mapping
    128         SET_TLB_DATA(g1, g2, TTE_G)
     128        SET_TLB_DATA(g1, g2, 0)                 ! use non-global mapping
     129        stxa %g1, [%g0] ASI_DTLB_DATA_IN_REG           
     130        membar #Sync
     131
     132        /*
     133         * Because we cannot use global mappings (because we want to
     134         * have separate 64-bit address spaces for both the kernel
     135         * and the userspace), we prepare the identity mapping also in
     136         * context 1. This step is required by the
     137         * code installing the ITLB mapping.
     138         */
     139        ! write DTLB tag of context 1 (i.e. MEM_CONTEXT_TEMP)
     140        SET_TLB_TAG(g1, MEM_CONTEXT_TEMP)
     141        stxa %g1, [VA_DMMU_TAG_ACCESS] %asi                     
     142        membar #Sync
     143
     144        ! write DTLB data and install the kernel mapping in context 1
     145        SET_TLB_DATA(g1, g2, 0)                 ! use non-global mapping
    129146        stxa %g1, [%g0] ASI_DTLB_DATA_IN_REG           
    130147        membar #Sync
  • kernel/generic/include/mm/as.h

    r2def788 rd681c17  
    6262#define USER_ADDRESS_SPACE_START        USER_ADDRESS_SPACE_START_ARCH
    6363#define USER_ADDRESS_SPACE_END          USER_ADDRESS_SPACE_END_ARCH
    64 
    65 #define IS_KA(addr)     ((addr)>=KERNEL_ADDRESS_SPACE_START && (addr)<=KERNEL_ADDRESS_SPACE_END)
    6664
    6765#define USTACK_ADDRESS  USTACK_ADDRESS_ARCH
  • uspace/libc/arch/sparc64/include/syscall.h

    r2def788 rd681c17  
    5151                : "=r" (a1)
    5252                : "r" (a1), "r" (a2), "r" (a3), "r" (a4), "i" (id)
     53                : "memory"
    5354        );
    5455       
  • uspace/libc/generic/as.c

    r2def788 rd681c17  
    3737#include <unistd.h>
    3838#include <align.h>
     39#include <types.h>
     40
     41/**
     42 * Either 4*256M on 32-bit architecures or 16*256M on 64-bit architectures.
     43 */
     44#define MAX_HEAP_SIZE   (sizeof(uintptr_t)<<28)
    3945
    4046/** Create address space area.
     
    142148        /* Set heapsize to some meaningful value */
    143149        if (maxheapsize == -1)
    144                 set_maxheapsize(ALIGN_UP(USER_ADDRESS_SPACE_SIZE_ARCH >> 1, PAGE_SIZE));
     150                set_maxheapsize(MAX_HEAP_SIZE);
    145151       
    146152        if (!last_allocated)
  • uspace/libc/generic/psthread.c

    r2def788 rd681c17  
    6262static int threads_in_manager;
    6363
    64 /** Setup PSthread information into TCB structure */
     64/** Setup psthread information into TCB structure */
    6565psthread_data_t * psthread_setup()
    6666{
     
    9090}
    9191
    92 /** Function that is called on entry to new uspace thread */
     92/** Function that is called on entry to new pseudo thread */
    9393void psthread_main(void)
    9494{
     
    210210}
    211211
    212 /**
    213  * Create a userspace thread
     212/** Create a userspace pseudo thread.
    214213 *
    215214 * @param func Pseudo thread function.
  • uspace/libc/include/as.h

    r2def788 rd681c17  
    4141#include <kernel/mm/as.h>
    4242
    43 #define USER_ADDRESS_SPACE_SIZE_ARCH (USER_ADDRESS_SPACE_END_ARCH-USER_ADDRESS_SPACE_START_ARCH+1)
    44 
    4543extern void *as_area_create(void *address, size_t size, int flags);
    4644extern int as_area_resize(void *address, size_t size, int flags);
  • uspace/libc/include/stdio.h

    r2def788 rd681c17  
    4141#define EOF (-1)
    4242
     43#include <string.h>
    4344#include <io/stream.h>
     45
     46#define DEBUG(fmt, ...) \
     47{ \
     48        char buf[256]; \
     49        int n; \
     50        n = snprintf(buf, sizeof(buf), fmt, ##__VA_ARGS__); \
     51        if (n > 0) \
     52                (void) __SYSCALL3(SYS_IO, 1, (sysarg_t) buf, strlen(buf)); \
     53}
    4454
    4555extern int getchar(void);
Note: See TracChangeset for help on using the changeset viewer.