Rev 3022 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3022 | Rev 4055 | ||
---|---|---|---|
Line 327... | Line 327... | ||
327 | .org trap_table + TT_FILL_1_NORMAL*ENTRY_SIZE |
327 | .org trap_table + TT_FILL_1_NORMAL*ENTRY_SIZE |
328 | .global fill_1_normal_tl0 |
328 | .global fill_1_normal_tl0 |
329 | fill_1_normal_tl0: |
329 | fill_1_normal_tl0: |
330 | FILL_NORMAL_HANDLER_USERSPACE |
330 | FILL_NORMAL_HANDLER_USERSPACE |
331 | 331 | ||
332 | /* TT = 0x100, TL = 0, trap_instruction_0 */ |
- | |
333 | .org trap_table + TT_TRAP_INSTRUCTION(0)*ENTRY_SIZE |
- | |
334 | .global trap_instruction_0_tl0 |
- | |
335 | trap_instruction_0_tl0: |
- | |
336 | TRAP_INSTRUCTION 0 |
- | |
337 | - | ||
338 | /* TT = 0x101, TL = 0, trap_instruction_1 */ |
- | |
339 | .org trap_table + TT_TRAP_INSTRUCTION(1)*ENTRY_SIZE |
- | |
340 | .global trap_instruction_1_tl0 |
- | |
341 | trap_instruction_1_tl0: |
- | |
342 | TRAP_INSTRUCTION 1 |
- | |
343 | - | ||
344 | /* TT = 0x102, TL = 0, trap_instruction_2 */ |
- | |
345 | .org trap_table + TT_TRAP_INSTRUCTION(2)*ENTRY_SIZE |
- | |
346 | .global trap_instruction_2_tl0 |
- | |
347 | trap_instruction_2_tl0: |
- | |
348 | TRAP_INSTRUCTION 2 |
- | |
349 | - | ||
350 | /* TT = 0x103, TL = 0, trap_instruction_3 */ |
- | |
351 | .org trap_table + TT_TRAP_INSTRUCTION(3)*ENTRY_SIZE |
- | |
352 | .global trap_instruction_3_tl0 |
- | |
353 | trap_instruction_3_tl0: |
- | |
354 | TRAP_INSTRUCTION 3 |
- | |
355 | - | ||
356 | /* TT = 0x104, TL = 0, trap_instruction_4 */ |
- | |
357 | .org trap_table + TT_TRAP_INSTRUCTION(4)*ENTRY_SIZE |
- | |
358 | .global trap_instruction_4_tl0 |
- | |
359 | trap_instruction_4_tl0: |
- | |
360 | TRAP_INSTRUCTION 4 |
- | |
361 | - | ||
362 | /* TT = 0x105, TL = 0, trap_instruction_5 */ |
- | |
363 | .org trap_table + TT_TRAP_INSTRUCTION(5)*ENTRY_SIZE |
- | |
364 | .global trap_instruction_5_tl0 |
- | |
365 | trap_instruction_5_tl0: |
- | |
366 | TRAP_INSTRUCTION 5 |
- | |
367 | - | ||
368 | /* TT = 0x106, TL = 0, trap_instruction_6 */ |
- | |
369 | .org trap_table + TT_TRAP_INSTRUCTION(6)*ENTRY_SIZE |
- | |
370 | .global trap_instruction_6_tl0 |
- | |
371 | trap_instruction_6_tl0: |
- | |
372 | TRAP_INSTRUCTION 6 |
- | |
373 | - | ||
374 | /* TT = 0x107, TL = 0, trap_instruction_7 */ |
332 | /* TT = 0x100 - 0x17f, TL = 0, trap_instruction_0 - trap_instruction_7f */ |
375 | .org trap_table + TT_TRAP_INSTRUCTION(7)*ENTRY_SIZE |
- | |
376 | .global trap_instruction_7_tl0 |
- | |
377 | trap_instruction_7_tl0: |
- | |
378 | TRAP_INSTRUCTION 7 |
- | |
379 | - | ||
380 | /* TT = 0x108, TL = 0, trap_instruction_8 */ |
- | |
381 | .org trap_table + TT_TRAP_INSTRUCTION(8)*ENTRY_SIZE |
- | |
382 | .global trap_instruction_8_tl0 |
- | |
383 | trap_instruction_8_tl0: |
- | |
384 | TRAP_INSTRUCTION 8 |
- | |
385 | - | ||
386 | /* TT = 0x109, TL = 0, trap_instruction_9 */ |
- | |
387 | .org trap_table + TT_TRAP_INSTRUCTION(9)*ENTRY_SIZE |
- | |
388 | .global trap_instruction_9_tl0 |
- | |
389 | trap_instruction_9_tl0: |
- | |
390 | TRAP_INSTRUCTION 9 |
- | |
391 | - | ||
392 | /* TT = 0x10a, TL = 0, trap_instruction_10 */ |
- | |
393 | .org trap_table + TT_TRAP_INSTRUCTION(10)*ENTRY_SIZE |
- | |
394 | .global trap_instruction_10_tl0 |
- | |
395 | trap_instruction_10_tl0: |
- | |
396 | TRAP_INSTRUCTION 10 |
- | |
397 | - | ||
398 | /* TT = 0x10b, TL = 0, trap_instruction_11 */ |
333 | .irp cur, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,\ |
399 | .org trap_table + TT_TRAP_INSTRUCTION(11)*ENTRY_SIZE |
- | |
400 | .global trap_instruction_11_tl0 |
- | |
401 | trap_instruction_11_tl0: |
- | |
402 | TRAP_INSTRUCTION 11 |
- | |
403 | - | ||
404 | /* TT = 0x10c, TL = 0, trap_instruction_12 */ |
- | |
405 | .org trap_table + TT_TRAP_INSTRUCTION(12)*ENTRY_SIZE |
- | |
406 | .global trap_instruction_12_tl0 |
- | |
407 | trap_instruction_12_tl0: |
- | |
408 | TRAP_INSTRUCTION 12 |
- | |
409 | - | ||
410 | /* TT = 0x10d, TL = 0, trap_instruction_13 */ |
- | |
411 | .org trap_table + TT_TRAP_INSTRUCTION(13)*ENTRY_SIZE |
- | |
412 | .global trap_instruction_13_tl0 |
- | |
413 | trap_instruction_13_tl0: |
- | |
414 | TRAP_INSTRUCTION 13 |
- | |
415 | - | ||
416 | /* TT = 0x10e, TL = 0, trap_instruction_14 */ |
- | |
417 | .org trap_table + TT_TRAP_INSTRUCTION(14)*ENTRY_SIZE |
- | |
418 | .global trap_instruction_14_tl0 |
- | |
419 | trap_instruction_14_tl0: |
- | |
420 | TRAP_INSTRUCTION 14 |
- | |
421 | - | ||
422 | /* TT = 0x10f, TL = 0, trap_instruction_15 */ |
334 | 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,\ |
423 | .org trap_table + TT_TRAP_INSTRUCTION(15)*ENTRY_SIZE |
- | |
424 | .global trap_instruction_15_tl0 |
- | |
425 | trap_instruction_15_tl0: |
- | |
426 | TRAP_INSTRUCTION 15 |
- | |
427 | - | ||
428 | /* TT = 0x110, TL = 0, trap_instruction_16 */ |
335 | 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,\ |
429 | .org trap_table + TT_TRAP_INSTRUCTION(16)*ENTRY_SIZE |
- | |
430 | .global trap_instruction_16_tl0 |
- | |
431 | trap_instruction_16_tl0: |
- | |
432 | TRAP_INSTRUCTION 16 |
- | |
433 | - | ||
434 | /* TT = 0x111, TL = 0, trap_instruction_17 */ |
- | |
435 | .org trap_table + TT_TRAP_INSTRUCTION(17)*ENTRY_SIZE |
- | |
436 | .global trap_instruction_17_tl0 |
- | |
437 | trap_instruction_17_tl0: |
- | |
438 | TRAP_INSTRUCTION 17 |
- | |
439 | - | ||
440 | /* TT = 0x112, TL = 0, trap_instruction_18 */ |
336 | 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,\ |
441 | .org trap_table + TT_TRAP_INSTRUCTION(18)*ENTRY_SIZE |
- | |
442 | .global trap_instruction_18_tl0 |
- | |
443 | trap_instruction_18_tl0: |
- | |
444 | TRAP_INSTRUCTION 18 |
- | |
445 | - | ||
446 | /* TT = 0x113, TL = 0, trap_instruction_19 */ |
337 | 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,\ |
447 | .org trap_table + TT_TRAP_INSTRUCTION(19)*ENTRY_SIZE |
- | |
448 | .global trap_instruction_19_tl0 |
- | |
449 | trap_instruction_19_tl0: |
- | |
450 | TRAP_INSTRUCTION 19 |
- | |
451 | - | ||
452 | /* TT = 0x114, TL = 0, trap_instruction_20 */ |
338 | 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,\ |
453 | .org trap_table + TT_TRAP_INSTRUCTION(20)*ENTRY_SIZE |
- | |
454 | .global trap_instruction_20_tl0 |
- | |
455 | trap_instruction_20_tl0: |
- | |
456 | TRAP_INSTRUCTION 20 |
- | |
457 | - | ||
458 | /* TT = 0x115, TL = 0, trap_instruction_21 */ |
339 | 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,\ |
459 | .org trap_table + TT_TRAP_INSTRUCTION(21)*ENTRY_SIZE |
- | |
460 | .global trap_instruction_21_tl0 |
- | |
461 | trap_instruction_21_tl0: |
- | |
462 | TRAP_INSTRUCTION 21 |
- | |
463 | - | ||
464 | /* TT = 0x116, TL = 0, trap_instruction_22 */ |
- | |
465 | .org trap_table + TT_TRAP_INSTRUCTION(22)*ENTRY_SIZE |
- | |
466 | .global trap_instruction_22_tl0 |
- | |
467 | trap_instruction_22_tl0: |
- | |
468 | TRAP_INSTRUCTION 22 |
- | |
469 | - | ||
470 | /* TT = 0x117, TL = 0, trap_instruction_23 */ |
- | |
471 | .org trap_table + TT_TRAP_INSTRUCTION(23)*ENTRY_SIZE |
- | |
472 | .global trap_instruction_23_tl0 |
- | |
473 | trap_instruction_23_tl0: |
- | |
474 | TRAP_INSTRUCTION 23 |
- | |
475 | - | ||
476 | /* TT = 0x118, TL = 0, trap_instruction_24 */ |
- | |
477 | .org trap_table + TT_TRAP_INSTRUCTION(24)*ENTRY_SIZE |
- | |
478 | .global trap_instruction_24_tl0 |
- | |
479 | trap_instruction_24_tl0: |
- | |
480 | TRAP_INSTRUCTION 24 |
- | |
481 | - | ||
482 | /* TT = 0x119, TL = 0, trap_instruction_25 */ |
- | |
483 | .org trap_table + TT_TRAP_INSTRUCTION(25)*ENTRY_SIZE |
- | |
484 | .global trap_instruction_25_tl0 |
- | |
485 | trap_instruction_25_tl0: |
- | |
486 | TRAP_INSTRUCTION 25 |
- | |
487 | - | ||
488 | /* TT = 0x11a, TL = 0, trap_instruction_26 */ |
- | |
489 | .org trap_table + TT_TRAP_INSTRUCTION(26)*ENTRY_SIZE |
- | |
490 | .global trap_instruction_26_tl0 |
- | |
491 | trap_instruction_26_tl0: |
- | |
492 | TRAP_INSTRUCTION 26 |
- | |
493 | - | ||
494 | /* TT = 0x11b, TL = 0, trap_instruction_27 */ |
- | |
495 | .org trap_table + TT_TRAP_INSTRUCTION(27)*ENTRY_SIZE |
- | |
496 | .global trap_instruction_27_tl0 |
- | |
497 | trap_instruction_27_tl0: |
- | |
498 | TRAP_INSTRUCTION 27 |
340 | 127 |
499 | - | ||
500 | /* TT = 0x11c, TL = 0, trap_instruction_28 */ |
- | |
501 | .org trap_table + TT_TRAP_INSTRUCTION(28)*ENTRY_SIZE |
341 | .org trap_table + (TT_TRAP_INSTRUCTION_0+\cur)*ENTRY_SIZE |
502 | .global trap_instruction_28_tl0 |
342 | .global trap_instruction_\cur\()_tl0 |
503 | trap_instruction_28_tl0: |
343 | trap_instruction_\cur\()_tl0: |
504 | TRAP_INSTRUCTION 28 |
- | |
505 | - | ||
506 | /* TT = 0x11d, TL = 0, trap_instruction_29 */ |
- | |
507 | .org trap_table + TT_TRAP_INSTRUCTION(29)*ENTRY_SIZE |
- | |
508 | .global trap_instruction_29_tl0 |
344 | ba trap_instruction_handler |
509 | trap_instruction_29_tl0: |
- | |
510 | TRAP_INSTRUCTION 29 |
345 | mov \cur, %g2 |
511 | - | ||
512 | /* TT = 0x11e, TL = 0, trap_instruction_30 */ |
- | |
513 | .org trap_table + TT_TRAP_INSTRUCTION(30)*ENTRY_SIZE |
- | |
514 | .global trap_instruction_30_tl0 |
- | |
515 | trap_instruction_30_tl0: |
- | |
516 | TRAP_INSTRUCTION 30 |
- | |
517 | 346 | .endr |
|
518 | /* TT = 0x11f, TL = 0, trap_instruction_31 */ |
- | |
519 | .org trap_table + TT_TRAP_INSTRUCTION(31)*ENTRY_SIZE |
- | |
520 | .global trap_instruction_31_tl0 |
- | |
521 | trap_instruction_31_tl0: |
- | |
522 | TRAP_INSTRUCTION 31 |
- | |
523 | 347 | ||
524 | /* |
348 | /* |
525 | * Handlers for TL>0. |
349 | * Handlers for TL>0. |
526 | */ |
350 | */ |
527 | 351 | ||
Line 780... | Line 604... | ||
780 | */ |
604 | */ |
781 | call %l0 |
605 | call %l0 |
782 | add %sp, PREEMPTIBLE_HANDLER_STACK_FRAME_SIZE + STACK_BIAS + SAVED_TNPC, %o1 |
606 | add %sp, PREEMPTIBLE_HANDLER_STACK_FRAME_SIZE + STACK_BIAS + SAVED_TNPC, %o1 |
783 | .else |
607 | .else |
784 | /* |
608 | /* |
785 | * Call the higher-level syscall handler. |
609 | * Call the higher-level syscall handler and enable interrupts. |
786 | */ |
610 | */ |
787 | call syscall_handler |
611 | call syscall_handler |
788 | nop |
- | |
- | 612 | wrpr %g0, PSTATE_PRIV_BIT | PSTATE_PEF_BIT | PSTATE_IE_BIT, %pstate |
|
789 | mov %o0, %i0 ! copy the value returned by the syscall |
613 | mov %o0, %i0 ! copy the value returned by the syscall |
790 | .endif |
614 | .endif |
791 | 615 | ||
792 | RESTORE_GLOBALS |
616 | RESTORE_GLOBALS |
793 | rdpr %pstate, %l1 ! we must preserve the PEF bit |
617 | rdpr %pstate, %l1 ! we must preserve the PEF bit |
Line 922... | Line 746... | ||
922 | /* |
746 | /* |
923 | * CWP is now in the window last saved in the userspace window buffer. |
747 | * CWP is now in the window last saved in the userspace window buffer. |
924 | * Fill all windows stored in the buffer. |
748 | * Fill all windows stored in the buffer. |
925 | */ |
749 | */ |
926 | clr %g4 |
750 | clr %g4 |
927 | set PAGE_SIZE - 1, %g5 |
- | |
928 | 0: andcc %g7, %g5, %g0 ! PAGE_SIZE alignment check |
751 | 0: andcc %g7, UWB_ALIGNMENT - 1, %g0 ! alignment check |
929 | bz 0f ! %g7 is page-aligned, no more windows to refill |
752 | bz 0f ! %g7 is UWB_ALIGNMENT-aligned, no more windows to refill |
930 | nop |
753 | nop |
931 | 754 | ||
932 | add %g7, -STACK_WINDOW_SAVE_AREA_SIZE, %g7 |
755 | add %g7, -STACK_WINDOW_SAVE_AREA_SIZE, %g7 |
933 | ldx [%g7 + L0_OFFSET], %l0 |
756 | ldx [%g7 + L0_OFFSET], %l0 |
934 | ldx [%g7 + L1_OFFSET], %l1 |
757 | ldx [%g7 + L1_OFFSET], %l1 |