Subversion Repositories HelenOS-historic

Rev

Rev 754 | Rev 794 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 754 Rev 756
Line 145... Line 145...
145
         */
145
         */
146
       
146
       
147
        if (KA2PA(config.init_addr) % FRAME_SIZE)
147
        if (KA2PA(config.init_addr) % FRAME_SIZE)
148
            panic("config.init_addr is not frame aligned");
148
            panic("config.init_addr is not frame aligned");
149
       
149
       
150
        as = as_create(NULL, 0);
150
        as = as_create(0);
151
        if (!as)
151
        if (!as)
152
            panic("as_create\n");
152
            panic("as_create\n");
153
        u = task_create(as);
153
        u = task_create(as);
154
        if (!u)
154
        if (!u)
155
            panic("task_create\n");
155
            panic("task_create\n");
156
        t = thread_create(uinit, NULL, u, THREAD_USER_STACK);
156
        t = thread_create(uinit, NULL, u, THREAD_USER_STACK);
157
        if (!t)
157
        if (!t)
158
            panic("thread_create\n");
158
            panic("thread_create\n");
159
       
159
       
160
        /*
160
        /*
161
         * Create the text as_area and copy the userspace code there.
161
         * Create the text as_area and initialize its mapping.
162
         */
162
         */
163
       
163
       
164
        frame = KA2PA(config.init_addr);
164
        frame = KA2PA(config.init_addr);
165
        frames = config.init_size / FRAME_SIZE;
165
        frames = config.init_size / FRAME_SIZE;
166
        if (config.init_size % FRAME_SIZE > 0)
166
        if (config.init_size % FRAME_SIZE > 0)
167
            frames++;
167
            frames++;
168
       
168
       
169
        a = as_area_create(as, AS_AREA_TEXT, frames, UTEXT_ADDRESS);
169
        a = as_area_create(as, AS_AREA_TEXT, frames, UTEXT_ADDRESS);
170
        if (!a)
170
        if (!a)
171
            panic("as_area_create: text\n");
171
            panic("as_area_create: text\n");
-
 
172
 
-
 
173
        for (i = 0; i < frames; i++)
-
 
174
            as_set_mapping(as, UTEXT_ADDRESS + i * PAGE_SIZE, frame + i * FRAME_SIZE);
172
       
175
 
173
        /*
176
        /*
174
         * Create the data as_area.
177
         * Create the data as_area.
175
         */
178
         */
176
        a = as_area_create(as, AS_AREA_STACK, 1, USTACK_ADDRESS);
179
        a = as_area_create(as, AS_AREA_STACK, 1, USTACK_ADDRESS);
177
        if (!a)
180
        if (!a)
178
            panic("as_area_create: stack\n");
181
            panic("as_area_create: stack\n");
179
 
182
 
180
        /*
-
 
181
         * Initialize text area mapping.
-
 
182
         */
-
 
183
        for (i = 0; i < frames; i++)
-
 
184
            as_set_mapping(as, UTEXT_ADDRESS + i * PAGE_SIZE, frame + i * FRAME_SIZE);
-
 
185
 
-
 
186
   
-
 
187
        thread_ready(t);
183
        thread_ready(t);
188
    }
184
    }
189
 
185
 
190
#ifdef CONFIG_TEST
186
#ifdef CONFIG_TEST
191
    test();
187
    test();