syscall.S (b05005772f34497eb2b7415a651fe785cbe70e16) syscall.S (2fd83038160531245099c3c5b3511fa4b80765eb)
1/*
2 * Linux/PA-RISC Project (http://www.parisc-linux.org/)
3 *
4 * System call entry code Copyright (c) Matthew Wilcox 1999 <willy@bofh.ai>
5 * Licensed under the GNU GPL.
6 * thanks to Philipp Rumpf, Mike Shaver and various others
7 * sorry about the wall, puffin..
8 */

--- 41 unchanged lines hidden (view full) ---

50 /* Linux gateway page is aliased to virtual page 0 in the kernel
51 * address space. Since it is a gateway page it cannot be
52 * dereferenced, so null pointers will still fault. We start
53 * the actual entry point at 0x100. We put break instructions
54 * at the beginning of the page to trap null indirect function
55 * pointers.
56 */
57
1/*
2 * Linux/PA-RISC Project (http://www.parisc-linux.org/)
3 *
4 * System call entry code Copyright (c) Matthew Wilcox 1999 <willy@bofh.ai>
5 * Licensed under the GNU GPL.
6 * thanks to Philipp Rumpf, Mike Shaver and various others
7 * sorry about the wall, puffin..
8 */

--- 41 unchanged lines hidden (view full) ---

50 /* Linux gateway page is aliased to virtual page 0 in the kernel
51 * address space. Since it is a gateway page it cannot be
52 * dereferenced, so null pointers will still fault. We start
53 * the actual entry point at 0x100. We put break instructions
54 * at the beginning of the page to trap null indirect function
55 * pointers.
56 */
57
58 .align 4096
58 .align ASM_PAGE_SIZE
59linux_gateway_page:
60
61 /* ADDRESS 0x00 to 0xb0 = 176 bytes / 4 bytes per insn = 44 insns */
62 .rept 44
63 KILL_INSN
64 .endr
65
66 /* ADDRESS 0xb0 to 0xb4, lws uses 1 insns for entry */

--- 560 unchanged lines hidden (view full) ---

627 .word (1b - linux_gateway_page)
628 .word (3b - linux_gateway_page)
629#endif
630 .previous
631
632end_compare_and_swap:
633
634 /* Make sure nothing else is placed on this page */
59linux_gateway_page:
60
61 /* ADDRESS 0x00 to 0xb0 = 176 bytes / 4 bytes per insn = 44 insns */
62 .rept 44
63 KILL_INSN
64 .endr
65
66 /* ADDRESS 0xb0 to 0xb4, lws uses 1 insns for entry */

--- 560 unchanged lines hidden (view full) ---

627 .word (1b - linux_gateway_page)
628 .word (3b - linux_gateway_page)
629#endif
630 .previous
631
632end_compare_and_swap:
633
634 /* Make sure nothing else is placed on this page */
635 .align 4096
635 .align ASM_PAGE_SIZE
636 .export end_linux_gateway_page
637end_linux_gateway_page:
638
639 /* Relocate symbols assuming linux_gateway_page is mapped
640 to virtual address 0x0 */
641#ifdef CONFIG_64BIT
642 /* FIXME: The code will always be on the gateay page
643 and thus it will be on the first 4k, the
644 assembler seems to think that the final
645 subtraction result is only a word in
646 length, so we pad the value.
647 */
648#define LWS_ENTRY(_name_) .word 0,(lws_##_name_ - linux_gateway_page)
649#else
650#define LWS_ENTRY(_name_) .word (lws_##_name_ - linux_gateway_page)
651#endif
652
653 .section .rodata,"a"
654
636 .export end_linux_gateway_page
637end_linux_gateway_page:
638
639 /* Relocate symbols assuming linux_gateway_page is mapped
640 to virtual address 0x0 */
641#ifdef CONFIG_64BIT
642 /* FIXME: The code will always be on the gateay page
643 and thus it will be on the first 4k, the
644 assembler seems to think that the final
645 subtraction result is only a word in
646 length, so we pad the value.
647 */
648#define LWS_ENTRY(_name_) .word 0,(lws_##_name_ - linux_gateway_page)
649#else
650#define LWS_ENTRY(_name_) .word (lws_##_name_ - linux_gateway_page)
651#endif
652
653 .section .rodata,"a"
654
655 .align 4096
655 .align ASM_PAGE_SIZE
656 /* Light-weight-syscall table */
657 /* Start of lws table. */
658 .export lws_table
659.Llws_table:
660lws_table:
661 LWS_ENTRY(compare_and_swap32) /* 0 - ELF32 Atomic compare and swap */
662 LWS_ENTRY(compare_and_swap64) /* 1 - ELF64 Atomic compare and swap */
663 /* End of lws table */
664
656 /* Light-weight-syscall table */
657 /* Start of lws table. */
658 .export lws_table
659.Llws_table:
660lws_table:
661 LWS_ENTRY(compare_and_swap32) /* 0 - ELF32 Atomic compare and swap */
662 LWS_ENTRY(compare_and_swap64) /* 1 - ELF64 Atomic compare and swap */
663 /* End of lws table */
664
665 .align 4096
665 .align ASM_PAGE_SIZE
666 .export sys_call_table
667.Lsys_call_table:
668sys_call_table:
669#include "syscall_table.S"
670
671#ifdef CONFIG_64BIT
666 .export sys_call_table
667.Lsys_call_table:
668sys_call_table:
669#include "syscall_table.S"
670
671#ifdef CONFIG_64BIT
672 .align 4096
672 .align ASM_PAGE_SIZE
673 .export sys_call_table64
674.Lsys_call_table64:
675sys_call_table64:
676#define SYSCALL_TABLE_64BIT
677#include "syscall_table.S"
678#endif
679
680#ifdef CONFIG_SMP

--- 25 unchanged lines hidden ---
673 .export sys_call_table64
674.Lsys_call_table64:
675sys_call_table64:
676#define SYSCALL_TABLE_64BIT
677#include "syscall_table.S"
678#endif
679
680#ifdef CONFIG_SMP

--- 25 unchanged lines hidden ---