diff options
Diffstat (limited to 'arch/powerpc')
-rw-r--r-- | arch/powerpc/kernel/Makefile | 5 | ||||
-rw-r--r-- | arch/powerpc/kernel/setup_64.c | 18 |
2 files changed, 16 insertions, 7 deletions
diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile index 30101762f7c0..a733347964a0 100644 --- a/arch/powerpc/kernel/Makefile +++ b/arch/powerpc/kernel/Makefile | |||
@@ -12,7 +12,8 @@ endif | |||
12 | 12 | ||
13 | obj-y := semaphore.o cputable.o ptrace.o syscalls.o \ | 13 | obj-y := semaphore.o cputable.o ptrace.o syscalls.o \ |
14 | signal_32.o pmc.o | 14 | signal_32.o pmc.o |
15 | obj-$(CONFIG_PPC64) += binfmt_elf32.o sys_ppc32.o ptrace32.o | 15 | obj-$(CONFIG_PPC64) += setup_64.o binfmt_elf32.o sys_ppc32.o \ |
16 | ptrace32.o | ||
16 | obj-$(CONFIG_ALTIVEC) += vecemu.o vector.o | 17 | obj-$(CONFIG_ALTIVEC) += vecemu.o vector.o |
17 | obj-$(CONFIG_POWER4) += idle_power4.o | 18 | obj-$(CONFIG_POWER4) += idle_power4.o |
18 | obj-$(CONFIG_PPC_OF) += of_device.o | 19 | obj-$(CONFIG_PPC_OF) += of_device.o |
@@ -34,7 +35,7 @@ extra-y += vmlinux.lds | |||
34 | obj-y += process.o init_task.o time.o \ | 35 | obj-y += process.o init_task.o time.o \ |
35 | prom.o systbl.o traps.o setup-common.o | 36 | prom.o systbl.o traps.o setup-common.o |
36 | obj-$(CONFIG_PPC32) += entry_32.o idle_6xx.o setup_32.o misc_32.o | 37 | obj-$(CONFIG_PPC32) += entry_32.o idle_6xx.o setup_32.o misc_32.o |
37 | obj-$(CONFIG_PPC64) += setup_64.o misc_64.o | 38 | obj-$(CONFIG_PPC64) += misc_64.o |
38 | obj-$(CONFIG_PPC_OF) += prom_init.o | 39 | obj-$(CONFIG_PPC_OF) += prom_init.o |
39 | obj-$(CONFIG_MODULES) += ppc_ksyms.o | 40 | obj-$(CONFIG_MODULES) += ppc_ksyms.o |
40 | obj-$(CONFIG_BOOTX_TEXT) += btext.o | 41 | obj-$(CONFIG_BOOTX_TEXT) += btext.o |
diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c index 9cdf294e76f6..721adeea601d 100644 --- a/arch/powerpc/kernel/setup_64.c +++ b/arch/powerpc/kernel/setup_64.c | |||
@@ -702,6 +702,17 @@ static void __init emergency_stack_init(void) | |||
702 | limit)) + PAGE_SIZE; | 702 | limit)) + PAGE_SIZE; |
703 | } | 703 | } |
704 | 704 | ||
705 | extern unsigned long *sys_call_table; | ||
706 | extern unsigned long sys_ni_syscall; | ||
707 | #ifdef CONFIG_PPC_MERGE | ||
708 | #define SYS_CALL_ENTRY64(i) sys_call_table[(i) * 2] | ||
709 | #define SYS_CALL_ENTRY32(i) sys_call_table[(i) * 2 + 1] | ||
710 | #else | ||
711 | extern unsigned long *sys_call_table32; | ||
712 | #define SYS_CALL_ENTRY64(i) sys_call_table[(i)] | ||
713 | #define SYS_CALL_ENTRY32(i) sys_call_table32[(i)] | ||
714 | #endif | ||
715 | |||
705 | /* | 716 | /* |
706 | * Called from setup_arch to initialize the bitmap of available | 717 | * Called from setup_arch to initialize the bitmap of available |
707 | * syscalls in the systemcfg page | 718 | * syscalls in the systemcfg page |
@@ -709,17 +720,14 @@ static void __init emergency_stack_init(void) | |||
709 | void __init setup_syscall_map(void) | 720 | void __init setup_syscall_map(void) |
710 | { | 721 | { |
711 | unsigned int i, count64 = 0, count32 = 0; | 722 | unsigned int i, count64 = 0, count32 = 0; |
712 | extern unsigned long *sys_call_table; | ||
713 | extern unsigned long sys_ni_syscall; | ||
714 | |||
715 | 723 | ||
716 | for (i = 0; i < __NR_syscalls; i++) { | 724 | for (i = 0; i < __NR_syscalls; i++) { |
717 | if (sys_call_table[i*2] != sys_ni_syscall) { | 725 | if (SYS_CALL_ENTRY64(i) != sys_ni_syscall) { |
718 | count64++; | 726 | count64++; |
719 | systemcfg->syscall_map_64[i >> 5] |= | 727 | systemcfg->syscall_map_64[i >> 5] |= |
720 | 0x80000000UL >> (i & 0x1f); | 728 | 0x80000000UL >> (i & 0x1f); |
721 | } | 729 | } |
722 | if (sys_call_table[i*2+1] != sys_ni_syscall) { | 730 | if (SYS_CALL_ENTRY32(i) != sys_ni_syscall) { |
723 | count32++; | 731 | count32++; |
724 | systemcfg->syscall_map_32[i >> 5] |= | 732 | systemcfg->syscall_map_32[i >> 5] |= |
725 | 0x80000000UL >> (i & 0x1f); | 733 | 0x80000000UL >> (i & 0x1f); |