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 --- |