-diff -Nurb --exclude='*.swp' --exclude=tags --exclude='*.patch' --exclude='*.diff' linux-2.6.22-580/arch/i386/Kconfig linux-2.6.22-590/arch/i386/Kconfig
---- linux-2.6.22-580/arch/i386/Kconfig 2009-02-18 09:56:02.000000000 -0500
-+++ linux-2.6.22-590/arch/i386/Kconfig 2009-02-18 09:57:23.000000000 -0500
+diff -Nurb --exclude='*.cmd' --exclude='*.orig' --exclude='*.swp' --exclude=tags --exclude='*.patch' --exclude='*.diff' --exclude='*.svn*' linux-2.6.22-590/arch/i386/Kconfig linux-2.6.22-591/arch/i386/Kconfig
+--- linux-2.6.22-590/arch/i386/Kconfig 2009-03-16 20:49:42.000000000 -0400
++++ linux-2.6.22-591/arch/i386/Kconfig 2009-03-16 20:58:59.000000000 -0400
@@ -1217,6 +1217,14 @@
source "arch/i386/oprofile/Kconfig"
config KPROBES
bool "Kprobes (EXPERIMENTAL)"
depends on KALLSYMS && EXPERIMENTAL && MODULES
-diff -Nurb --exclude='*.swp' --exclude=tags --exclude='*.patch' --exclude='*.diff' linux-2.6.22-580/arch/i386/kernel/asm-offsets.c linux-2.6.22-590/arch/i386/kernel/asm-offsets.c
---- linux-2.6.22-580/arch/i386/kernel/asm-offsets.c 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22-590/arch/i386/kernel/asm-offsets.c 2009-02-18 09:57:23.000000000 -0500
+--- linux-2.6.22-590/arch/i386/kernel/asm-offsets.c 2007-07-08 19:32:17.000000000 -0400
++++ linux-2.6.22-591/arch/i386/kernel/asm-offsets.c 2009-03-16 20:58:59.000000000 -0400
@@ -9,6 +9,7 @@
#include <linux/signal.h>
#include <linux/personality.h>
+ STACKOFFSET(THREAD_esp, thread_struct, esp);
+ STACKOFFSET(EVENT_event_data, event, event_data);
+ STACKOFFSET(EVENT_task, event, task);
-+ STACKOFFSET(EVENT_event_type, event, event_data);
++ STACKOFFSET(EVENT_event_type, event, event_type);
+ STACKOFFSET(SPEC_number, event_spec, number);
+ DEFINE(EVENT_SIZE, sizeof(struct event));
+ DEFINE(SPEC_SIZE, sizeof(struct event_spec));
OFFSET(TI_exec_domain, thread_info, exec_domain);
OFFSET(TI_flags, thread_info, flags);
OFFSET(TI_status, thread_info, status);
-diff -Nurb --exclude='*.swp' --exclude=tags --exclude='*.patch' --exclude='*.diff' linux-2.6.22-580/arch/i386/kernel/entry. linux-2.6.22-590/arch/i386/kernel/entry.
---- linux-2.6.22-580/arch/i386/kernel/entry. 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.22-590/arch/i386/kernel/entry. 2009-02-18 09:57:23.000000000 -0500
-@@ -0,0 +1,1027 @@
-+/*
-+ * linux/arch/i386/entry.S
-+ *
-+ * Copyright (C) 1991, 1992 Linus Torvalds
-+ */
-+
-+/*
-+ * entry.S contains the system-call and fault low-level handling routines.
-+ * This also contains the timer-interrupt handler, as well as all interrupts
-+ * and faults that can result in a task-switch.
-+ *
-+ * NOTE: This code handles signal-recognition, which happens every time
-+ * after a timer-interrupt and after each system call.
-+ *
-+ * I changed all the .align's to 4 (16 byte alignment), as that's faster
-+ * on a 486.
-+ *
-+ * Stack layout in 'syscall_exit':
-+ * ptrace needs to have all regs on the stack.
-+ * if the order here is changed, it needs to be
-+ * updated in fork.c:copy_process, signal.c:do_signal,
-+ * ptrace.c and ptrace.h
-+ *
-+ * 0(%esp) - %ebx
-+ * 4(%esp) - %ecx
-+ * 8(%esp) - %edx
-+ * C(%esp) - %esi
-+ * 10(%esp) - %edi
-+ * 14(%esp) - %ebp
-+ * 18(%esp) - %eax
-+ * 1C(%esp) - %ds
-+ * 20(%esp) - %es
-+ * 24(%esp) - %fs
-+ * 28(%esp) - orig_eax
-+ * 2C(%esp) - %eip
-+ * 30(%esp) - %cs
-+ * 34(%esp) - %eflags
-+ * 38(%esp) - %oldesp
-+ * 3C(%esp) - %oldss
-+ *
-+ * "current" is in register %ebx during any slow entries.
-+ */
-+
-+#include <linux/linkage.h>
-+#include <asm/thread_info.h>
-+#include <asm/irqflags.h>
-+#include <asm/errno.h>
-+#include <asm/segment.h>
-+#include <asm/smp.h>
-+#include <asm/page.h>
-+#include <asm/desc.h>
-+#include <asm/percpu.h>
-+#include <asm/dwarf2.h>
-+#include "irq_vectors.h"
-+
-+/*
-+ * We use macros for low-level operations which need to be overridden
-+ * for paravirtualization. The following will never clobber any registers:
-+ * INTERRUPT_RETURN (aka. "iret")
-+ * GET_CR0_INTO_EAX (aka. "movl %cr0, %eax")
-+ * ENABLE_INTERRUPTS_SYSEXIT (aka "sti; sysexit").
-+ *
-+ * For DISABLE_INTERRUPTS/ENABLE_INTERRUPTS (aka "cli"/"sti"), you must
-+ * specify what registers can be overwritten (CLBR_NONE, CLBR_EAX/EDX/ECX/ANY).
-+ * Allowing a register to be clobbered can shrink the paravirt replacement
-+ * enough to patch inline, increasing performance.
-+ */
-+
-+#define nr_syscalls ((syscall_table_size)/4)
-+
-+CF_MASK = 0x00000001
-+TF_MASK = 0x00000100
-+IF_MASK = 0x00000200
-+DF_MASK = 0x00000400
-+NT_MASK = 0x00004000
-+VM_MASK = 0x00020000
-+
-+#ifdef CONFIG_PREEMPT
-+#define preempt_stop(clobbers) DISABLE_INTERRUPTS(clobbers); TRACE_IRQS_OFF
-+#else
-+#define preempt_stop(clobbers)
-+#define resume_kernel restore_nocheck
-+#endif
-+
-+.macro TRACE_IRQS_IRET
-+#ifdef CONFIG_TRACE_IRQFLAGS
-+ testl $IF_MASK,PT_EFLAGS(%esp) # interrupts off?
-+ jz 1f
-+ TRACE_IRQS_ON
-+1:
-+#endif
-+.endm
-+
-+#ifdef CONFIG_VM86
-+#define resume_userspace_sig check_userspace
-+#else
-+#define resume_userspace_sig resume_userspace
-+#endif
-+
-+#define SAVE_ALL \
-+ cld; \
-+ pushl %fs; \
-+ CFI_ADJUST_CFA_OFFSET 4;\
-+ /*CFI_REL_OFFSET fs, 0;*/\
-+ pushl %es; \
-+ CFI_ADJUST_CFA_OFFSET 4;\
-+ /*CFI_REL_OFFSET es, 0;*/\
-+ pushl %ds; \
-+ CFI_ADJUST_CFA_OFFSET 4;\
-+ /*CFI_REL_OFFSET ds, 0;*/\
-+ pushl %eax; \
-+ CFI_ADJUST_CFA_OFFSET 4;\
-+ CFI_REL_OFFSET eax, 0;\
-+ pushl %ebp; \
-+ CFI_ADJUST_CFA_OFFSET 4;\
-+ CFI_REL_OFFSET ebp, 0;\
-+ pushl %edi; \
-+ CFI_ADJUST_CFA_OFFSET 4;\
-+ CFI_REL_OFFSET edi, 0;\
-+ pushl %esi; \
-+ CFI_ADJUST_CFA_OFFSET 4;\
-+ CFI_REL_OFFSET esi, 0;\
-+ pushl %edx; \
-+ CFI_ADJUST_CFA_OFFSET 4;\
-+ CFI_REL_OFFSET edx, 0;\
-+ pushl %ecx; \
-+ CFI_ADJUST_CFA_OFFSET 4;\
-+ CFI_REL_OFFSET ecx, 0;\
-+ pushl %ebx; \
-+ CFI_ADJUST_CFA_OFFSET 4;\
-+ CFI_REL_OFFSET ebx, 0;\
-+ movl $(__USER_DS), %edx; \
-+ movl %edx, %ds; \
-+ movl %edx, %es; \
-+ movl $(__KERNEL_PERCPU), %edx; \
-+ movl %edx, %fs
-+
-+#define RESTORE_INT_REGS \
-+ popl %ebx; \
-+ CFI_ADJUST_CFA_OFFSET -4;\
-+ CFI_RESTORE ebx;\
-+ popl %ecx; \
-+ CFI_ADJUST_CFA_OFFSET -4;\
-+ CFI_RESTORE ecx;\
-+ popl %edx; \
-+ CFI_ADJUST_CFA_OFFSET -4;\
-+ CFI_RESTORE edx;\
-+ popl %esi; \
-+ CFI_ADJUST_CFA_OFFSET -4;\
-+ CFI_RESTORE esi;\
-+ popl %edi; \
-+ CFI_ADJUST_CFA_OFFSET -4;\
-+ CFI_RESTORE edi;\
-+ popl %ebp; \
-+ CFI_ADJUST_CFA_OFFSET -4;\
-+ CFI_RESTORE ebp;\
-+ popl %eax; \
-+ CFI_ADJUST_CFA_OFFSET -4;\
-+ CFI_RESTORE eax
-+
-+#define RESTORE_REGS \
-+ RESTORE_INT_REGS; \
-+1: popl %ds; \
-+ CFI_ADJUST_CFA_OFFSET -4;\
-+ /*CFI_RESTORE ds;*/\
-+2: popl %es; \
-+ CFI_ADJUST_CFA_OFFSET -4;\
-+ /*CFI_RESTORE es;*/\
-+3: popl %fs; \
-+ CFI_ADJUST_CFA_OFFSET -4;\
-+ /*CFI_RESTORE fs;*/\
-+.pushsection .fixup,"ax"; \
-+4: movl $0,(%esp); \
-+ jmp 1b; \
-+5: movl $0,(%esp); \
-+ jmp 2b; \
-+6: movl $0,(%esp); \
-+ jmp 3b; \
-+.section __ex_table,"a";\
-+ .align 4; \
-+ .long 1b,4b; \
-+ .long 2b,5b; \
-+ .long 3b,6b; \
-+.popsection
-+
-+#define RING0_INT_FRAME \
-+ CFI_STARTPROC simple;\
-+ CFI_SIGNAL_FRAME;\
-+ CFI_DEF_CFA esp, 3*4;\
-+ /*CFI_OFFSET cs, -2*4;*/\
-+ CFI_OFFSET eip, -3*4
-+
-+#define RING0_EC_FRAME \
-+ CFI_STARTPROC simple;\
-+ CFI_SIGNAL_FRAME;\
-+ CFI_DEF_CFA esp, 4*4;\
-+ /*CFI_OFFSET cs, -2*4;*/\
-+ CFI_OFFSET eip, -3*4
-+
-+#define RING0_PTREGS_FRAME \
-+ CFI_STARTPROC simple;\
-+ CFI_SIGNAL_FRAME;\
-+ CFI_DEF_CFA esp, PT_OLDESP-PT_EBX;\
-+ /*CFI_OFFSET cs, PT_CS-PT_OLDESP;*/\
-+ CFI_OFFSET eip, PT_EIP-PT_OLDESP;\
-+ /*CFI_OFFSET es, PT_ES-PT_OLDESP;*/\
-+ /*CFI_OFFSET ds, PT_DS-PT_OLDESP;*/\
-+ CFI_OFFSET eax, PT_EAX-PT_OLDESP;\
-+ CFI_OFFSET ebp, PT_EBP-PT_OLDESP;\
-+ CFI_OFFSET edi, PT_EDI-PT_OLDESP;\
-+ CFI_OFFSET esi, PT_ESI-PT_OLDESP;\
-+ CFI_OFFSET edx, PT_EDX-PT_OLDESP;\
-+ CFI_OFFSET ecx, PT_ECX-PT_OLDESP;\
-+ CFI_OFFSET ebx, PT_EBX-PT_OLDESP
-+
-+ENTRY(ret_from_fork)
-+ CFI_STARTPROC
-+ pushl %eax
-+ CFI_ADJUST_CFA_OFFSET 4
-+ call schedule_tail
-+ GET_THREAD_INFO(%ebp)
-+ popl %eax
-+ CFI_ADJUST_CFA_OFFSET -4
-+ pushl $0x0202 # Reset kernel eflags
-+ CFI_ADJUST_CFA_OFFSET 4
-+ popfl
-+ CFI_ADJUST_CFA_OFFSET -4
-+ jmp syscall_exit
-+ CFI_ENDPROC
-+END(ret_from_fork)
-+
-+/*
-+ * Return to user mode is not as complex as all this looks,
-+ * but we want the default path for a system call return to
-+ * go as quickly as possible which is why some of this is
-+ * less clear than it otherwise should be.
-+ */
-+
-+ # userspace resumption stub bypassing syscall exit tracing
-+ ALIGN
-+ RING0_PTREGS_FRAME
-+ret_from_exception:
-+ preempt_stop(CLBR_ANY)
-+ret_from_intr:
-+ GET_THREAD_INFO(%ebp)
-+check_userspace:
-+ movl PT_EFLAGS(%esp), %eax # mix EFLAGS and CS
-+ movb PT_CS(%esp), %al
-+ andl $(VM_MASK | SEGMENT_RPL_MASK), %eax
-+ cmpl $USER_RPL, %eax
-+ jb resume_kernel # not returning to v8086 or userspace
-+
-+ENTRY(resume_userspace)
-+ DISABLE_INTERRUPTS(CLBR_ANY) # make sure we don't miss an interrupt
-+ # setting need_resched or sigpending
-+ # between sampling and the iret
-+ movl TI_flags(%ebp), %ecx
-+ andl $_TIF_WORK_MASK, %ecx # is there any work to be done on
-+ # int/exception return?
-+ jne work_pending
-+ jmp restore_all
-+END(ret_from_exception)
-+
-+#ifdef CONFIG_PREEMPT
-+ENTRY(resume_kernel)
-+ DISABLE_INTERRUPTS(CLBR_ANY)
-+ cmpl $0,TI_preempt_count(%ebp) # non-zero preempt_count ?
-+ jnz restore_nocheck
-+need_resched:
-+ movl TI_flags(%ebp), %ecx # need_resched set ?
-+ testb $_TIF_NEED_RESCHED, %cl
-+ jz restore_all
-+ testl $IF_MASK,PT_EFLAGS(%esp) # interrupts off (exception path) ?
-+ jz restore_all
-+ call preempt_schedule_irq
-+ jmp need_resched
-+END(resume_kernel)
-+#endif
-+ CFI_ENDPROC
-+
-+/* SYSENTER_RETURN points to after the "sysenter" instruction in
-+ the vsyscall page. See vsyscall-sysentry.S, which defines the symbol. */
-+
-+ # sysenter call handler stub
-+ENTRY(sysenter_entry)
-+ CFI_STARTPROC simple
-+ CFI_SIGNAL_FRAME
-+ CFI_DEF_CFA esp, 0
-+ CFI_REGISTER esp, ebp
-+ movl TSS_sysenter_esp0(%esp),%esp
-+sysenter_past_esp:
-+ /*
-+ * No need to follow this irqs on/off section: the syscall
-+ * disabled irqs and here we enable it straight after entry:
-+ */
-+ ENABLE_INTERRUPTS(CLBR_NONE)
-+ pushl $(__USER_DS)
-+ CFI_ADJUST_CFA_OFFSET 4
-+ /*CFI_REL_OFFSET ss, 0*/
-+ pushl %ebp
-+ CFI_ADJUST_CFA_OFFSET 4
-+ CFI_REL_OFFSET esp, 0
-+ pushfl
-+ CFI_ADJUST_CFA_OFFSET 4
-+ pushl $(__USER_CS)
-+ CFI_ADJUST_CFA_OFFSET 4
-+ /*CFI_REL_OFFSET cs, 0*/
-+ /*
-+ * Push current_thread_info()->sysenter_return to the stack.
-+ * A tiny bit of offset fixup is necessary - 4*4 means the 4 words
-+ * pushed above; +8 corresponds to copy_thread's esp0 setting.
-+ */
-+ pushl (TI_sysenter_return-THREAD_SIZE+8+4*4)(%esp)
-+ CFI_ADJUST_CFA_OFFSET 4
-+ CFI_REL_OFFSET eip, 0
-+
-+/*
-+ * Load the potential sixth argument from user stack.
-+ * Careful about security.
-+ */
-+ cmpl $__PAGE_OFFSET-3,%ebp
-+ jae syscall_fault
-+1: movl (%ebp),%ebp
-+.section __ex_table,"a"
-+ .align 4
-+ .long 1b,syscall_fault
-+.previous
-+
-+ pushl %eax
-+ CFI_ADJUST_CFA_OFFSET 4
-+ SAVE_ALL
-+ GET_THREAD_INFO(%ebp)
-+
-+ /* Note, _TIF_SECCOMP is bit number 8, and so it needs testw and not testb */
-+ testw $(_TIF_SYSCALL_EMU|_TIF_SYSCALL_TRACE|_TIF_SECCOMP|_TIF_SYSCALL_AUDIT),TI_flags(%ebp)
-+ jnz syscall_trace_entry
-+ cmpl $(nr_syscalls), %eax
-+ jae syscall_badsys
-+ call *sys_call_table(,%eax,4)
-+ movl %eax,PT_EAX(%esp)
-+ DISABLE_INTERRUPTS(CLBR_ANY)
-+ TRACE_IRQS_OFF
-+ movl TI_flags(%ebp), %ecx
-+ testw $_TIF_ALLWORK_MASK, %cx
-+ jne syscall_exit_work
-+/* if something modifies registers it must also disable sysexit */
-+ movl PT_EIP(%esp), %edx
-+ movl PT_OLDESP(%esp), %ecx
-+ xorl %ebp,%ebp
-+ TRACE_IRQS_ON
-+1: mov PT_FS(%esp), %fs
-+ ENABLE_INTERRUPTS_SYSEXIT
-+ CFI_ENDPROC
-+.pushsection .fixup,"ax"
-+2: movl $0,PT_FS(%esp)
-+ jmp 1b
-+.section __ex_table,"a"
-+ .align 4
-+ .long 1b,2b
-+.popsection
-+ENDPROC(sysenter_entry)
-+
-+ # system call handler stub
-+ENTRY(system_call)
-+ RING0_INT_FRAME # can't unwind into user space anyway
-+ pushl %eax # save orig_eax
-+ CFI_ADJUST_CFA_OFFSET 4
-+ SAVE_ALL
-+ GET_THREAD_INFO(%ebp)
-+ # system call tracing in operation / emulation
-+ /* Note, _TIF_SECCOMP is bit number 8, and so it needs testw and not testb */
-+ testw $(_TIF_SYSCALL_EMU|_TIF_SYSCALL_TRACE|_TIF_SECCOMP|_TIF_SYSCALL_AUDIT),TI_flags(%ebp)
-+ jnz syscall_trace_entry
-+ cmpl $(nr_syscalls), %eax
-+ jae syscall_badsys
-+syscall_call:
-+ call *sys_call_table(,%eax,4)
-+ movl %eax,PT_EAX(%esp) # store the return value
-+syscall_exit:
-+ DISABLE_INTERRUPTS(CLBR_ANY) # make sure we don't miss an interrupt
-+ # setting need_resched or sigpending
-+ # between sampling and the iret
-+ TRACE_IRQS_OFF
-+ testl $TF_MASK,PT_EFLAGS(%esp) # If tracing set singlestep flag on exit
-+ jz no_singlestep
-+ orl $_TIF_SINGLESTEP,TI_flags(%ebp)
-+no_singlestep:
-+ movl TI_flags(%ebp), %ecx
-+ testw $_TIF_ALLWORK_MASK, %cx # current->work
-+ jne syscall_exit_work
-+
-+restore_all:
-+ movl PT_EFLAGS(%esp), %eax # mix EFLAGS, SS and CS
-+ # Warning: PT_OLDSS(%esp) contains the wrong/random values if we
-+ # are returning to the kernel.
-+ # See comments in process.c:copy_thread() for details.
-+ movb PT_OLDSS(%esp), %ah
-+ movb PT_CS(%esp), %al
-+ andl $(VM_MASK | (SEGMENT_TI_MASK << 8) | SEGMENT_RPL_MASK), %eax
-+ cmpl $((SEGMENT_LDT << 8) | USER_RPL), %eax
-+ CFI_REMEMBER_STATE
-+ je ldt_ss # returning to user-space with LDT SS
-+restore_nocheck:
-+ TRACE_IRQS_IRET
-+restore_nocheck_notrace:
-+ RESTORE_REGS
-+ addl $4, %esp # skip orig_eax/error_code
-+ CFI_ADJUST_CFA_OFFSET -4
-+1: INTERRUPT_RETURN
-+.section .fixup,"ax"
-+iret_exc:
-+ pushl $0 # no error code
-+ pushl $do_iret_error
-+ jmp error_code
-+.previous
-+.section __ex_table,"a"
-+ .align 4
-+ .long 1b,iret_exc
-+.previous
-+
-+ CFI_RESTORE_STATE
-+ldt_ss:
-+ larl PT_OLDSS(%esp), %eax
-+ jnz restore_nocheck
-+ testl $0x00400000, %eax # returning to 32bit stack?
-+ jnz restore_nocheck # allright, normal return
-+
-+#ifdef CONFIG_PARAVIRT
-+ /*
-+ * The kernel can't run on a non-flat stack if paravirt mode
-+ * is active. Rather than try to fixup the high bits of
-+ * ESP, bypass this code entirely. This may break DOSemu
-+ * and/or Wine support in a paravirt VM, although the option
-+ * is still available to implement the setting of the high
-+ * 16-bits in the INTERRUPT_RETURN paravirt-op.
-+ */
-+ cmpl $0, paravirt_ops+PARAVIRT_enabled
-+ jne restore_nocheck
-+#endif
-+
-+ /* If returning to userspace with 16bit stack,
-+ * try to fix the higher word of ESP, as the CPU
-+ * won't restore it.
-+ * This is an "official" bug of all the x86-compatible
-+ * CPUs, which we can try to work around to make
-+ * dosemu and wine happy. */
-+ movl PT_OLDESP(%esp), %eax
-+ movl %esp, %edx
-+ call patch_espfix_desc
-+ pushl $__ESPFIX_SS
-+ CFI_ADJUST_CFA_OFFSET 4
-+ pushl %eax
-+ CFI_ADJUST_CFA_OFFSET 4
-+ DISABLE_INTERRUPTS(CLBR_EAX)
-+ TRACE_IRQS_OFF
-+ lss (%esp), %esp
-+ CFI_ADJUST_CFA_OFFSET -8
-+ jmp restore_nocheck
-+ CFI_ENDPROC
-+ENDPROC(system_call)
-+
-+ # perform work that needs to be done immediately before resumption
-+ ALIGN
-+ RING0_PTREGS_FRAME # can't unwind into user space anyway
-+work_pending:
-+ testb $_TIF_NEED_RESCHED, %cl
-+ jz work_notifysig
-+work_resched:
-+ call schedule
-+ DISABLE_INTERRUPTS(CLBR_ANY) # make sure we don't miss an interrupt
-+ # setting need_resched or sigpending
-+ # between sampling and the iret
-+ TRACE_IRQS_OFF
-+ movl TI_flags(%ebp), %ecx
-+ andl $_TIF_WORK_MASK, %ecx # is there any work to be done other
-+ # than syscall tracing?
-+ jz restore_all
-+ testb $_TIF_NEED_RESCHED, %cl
-+ jnz work_resched
-+
-+work_notifysig: # deal with pending signals and
-+ # notify-resume requests
-+#ifdef CONFIG_VM86
-+ testl $VM_MASK, PT_EFLAGS(%esp)
-+ movl %esp, %eax
-+ jne work_notifysig_v86 # returning to kernel-space or
-+ # vm86-space
-+ xorl %edx, %edx
-+ call do_notify_resume
-+ jmp resume_userspace_sig
-+
-+ ALIGN
-+work_notifysig_v86:
-+ pushl %ecx # save ti_flags for do_notify_resume
-+ CFI_ADJUST_CFA_OFFSET 4
-+ call save_v86_state # %eax contains pt_regs pointer
-+ popl %ecx
-+ CFI_ADJUST_CFA_OFFSET -4
-+ movl %eax, %esp
-+#else
-+ movl %esp, %eax
-+#endif
-+ xorl %edx, %edx
-+ call do_notify_resume
-+ jmp resume_userspace_sig
-+END(work_pending)
-+
-+ # perform syscall exit tracing
-+ ALIGN
-+syscall_trace_entry:
-+ movl $-ENOSYS,PT_EAX(%esp)
-+ movl %esp, %eax
-+ xorl %edx,%edx
-+ call do_syscall_trace
-+ cmpl $0, %eax
-+ jne resume_userspace # ret != 0 -> running under PTRACE_SYSEMU,
-+ # so must skip actual syscall
-+ movl PT_ORIG_EAX(%esp), %eax
-+ cmpl $(nr_syscalls), %eax
-+ jnae syscall_call
-+ jmp syscall_exit
-+END(syscall_trace_entry)
-+
-+ # perform syscall exit tracing
-+ ALIGN
-+syscall_exit_work:
-+ testb $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SINGLESTEP), %cl
-+ jz work_pending
-+ TRACE_IRQS_ON
-+ ENABLE_INTERRUPTS(CLBR_ANY) # could let do_syscall_trace() call
-+ # schedule() instead
-+ movl %esp, %eax
-+ movl $1, %edx
-+ call do_syscall_trace
-+ jmp resume_userspace
-+END(syscall_exit_work)
-+ CFI_ENDPROC
-+
-+ RING0_INT_FRAME # can't unwind into user space anyway
-+syscall_fault:
-+ pushl %eax # save orig_eax
-+ CFI_ADJUST_CFA_OFFSET 4
-+ SAVE_ALL
-+ GET_THREAD_INFO(%ebp)
-+ movl $-EFAULT,PT_EAX(%esp)
-+ jmp resume_userspace
-+END(syscall_fault)
-+
-+syscall_badsys:
-+ movl $-ENOSYS,PT_EAX(%esp)
-+ jmp resume_userspace
-+END(syscall_badsys)
-+ CFI_ENDPROC
-+
-+#define FIXUP_ESPFIX_STACK \
-+ /* since we are on a wrong stack, we cant make it a C code :( */ \
-+ PER_CPU(gdt_page, %ebx); \
-+ GET_DESC_BASE(GDT_ENTRY_ESPFIX_SS, %ebx, %eax, %ax, %al, %ah); \
-+ addl %esp, %eax; \
-+ pushl $__KERNEL_DS; \
-+ CFI_ADJUST_CFA_OFFSET 4; \
-+ pushl %eax; \
-+ CFI_ADJUST_CFA_OFFSET 4; \
-+ lss (%esp), %esp; \
-+ CFI_ADJUST_CFA_OFFSET -8;
-+#define UNWIND_ESPFIX_STACK \
-+ movl %ss, %eax; \
-+ /* see if on espfix stack */ \
-+ cmpw $__ESPFIX_SS, %ax; \
-+ jne 27f; \
-+ movl $__KERNEL_DS, %eax; \
-+ movl %eax, %ds; \
-+ movl %eax, %es; \
-+ /* switch to normal stack */ \
-+ FIXUP_ESPFIX_STACK; \
-+27:;
-+
-+/*
-+ * Build the entry stubs and pointer table with
-+ * some assembler magic.
-+ */
-+.data
-+ENTRY(interrupt)
-+.text
-+
-+ENTRY(irq_entries_start)
-+ RING0_INT_FRAME
-+vector=0
-+.rept NR_IRQS
-+ ALIGN
-+ .if vector
-+ CFI_ADJUST_CFA_OFFSET -4
-+ .endif
-+1: pushl $~(vector)
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp common_interrupt
-+ .previous
-+ .long 1b
-+ .text
-+vector=vector+1
-+.endr
-+END(irq_entries_start)
-+
-+.previous
-+END(interrupt)
-+.previous
-+
-+/*
-+ * the CPU automatically disables interrupts when executing an IRQ vector,
-+ * so IRQ-flags tracing has to follow that:
-+ */
-+ ALIGN
-+common_interrupt:
-+ SAVE_ALL
-+ TRACE_IRQS_OFF
-+ movl %esp,%eax
-+ call do_IRQ
-+ jmp ret_from_intr
-+ENDPROC(common_interrupt)
-+ CFI_ENDPROC
-+
-+#define BUILD_INTERRUPT(name, nr) \
-+ENTRY(name) \
-+ RING0_INT_FRAME; \
-+ pushl $~(nr); \
-+ CFI_ADJUST_CFA_OFFSET 4; \
-+ SAVE_ALL; \
-+ TRACE_IRQS_OFF \
-+ movl %esp,%eax; \
-+ call smp_##name; \
-+ jmp ret_from_intr; \
-+ CFI_ENDPROC; \
-+ENDPROC(name)
-+
-+/* The include is where all of the SMP etc. interrupts come from */
-+#include "entry_arch.h"
-+
-+KPROBE_ENTRY(page_fault)
-+ RING0_EC_FRAME
-+ pushl $do_page_fault
-+ CFI_ADJUST_CFA_OFFSET 4
-+ ALIGN
-+error_code:
-+ /* the function address is in %fs's slot on the stack */
-+ pushl %es
-+ CFI_ADJUST_CFA_OFFSET 4
-+ /*CFI_REL_OFFSET es, 0*/
-+ pushl %ds
-+ CFI_ADJUST_CFA_OFFSET 4
-+ /*CFI_REL_OFFSET ds, 0*/
-+ pushl %eax
-+ CFI_ADJUST_CFA_OFFSET 4
-+ CFI_REL_OFFSET eax, 0
-+ pushl %ebp
-+ CFI_ADJUST_CFA_OFFSET 4
-+ CFI_REL_OFFSET ebp, 0
-+ pushl %edi
-+ CFI_ADJUST_CFA_OFFSET 4
-+ CFI_REL_OFFSET edi, 0
-+ pushl %esi
-+ CFI_ADJUST_CFA_OFFSET 4
-+ CFI_REL_OFFSET esi, 0
-+ pushl %edx
-+ CFI_ADJUST_CFA_OFFSET 4
-+ CFI_REL_OFFSET edx, 0
-+ pushl %ecx
-+ CFI_ADJUST_CFA_OFFSET 4
-+ CFI_REL_OFFSET ecx, 0
-+ pushl %ebx
-+ CFI_ADJUST_CFA_OFFSET 4
-+ CFI_REL_OFFSET ebx, 0
-+ cld
-+ pushl %fs
-+ CFI_ADJUST_CFA_OFFSET 4
-+ /*CFI_REL_OFFSET fs, 0*/
-+ movl $(__KERNEL_PERCPU), %ecx
-+ movl %ecx, %fs
-+ UNWIND_ESPFIX_STACK
-+ popl %ecx
-+ CFI_ADJUST_CFA_OFFSET -4
-+ /*CFI_REGISTER es, ecx*/
-+ movl PT_FS(%esp), %edi # get the function address
-+ movl PT_ORIG_EAX(%esp), %edx # get the error code
-+ movl $-1, PT_ORIG_EAX(%esp) # no syscall to restart
-+ mov %ecx, PT_FS(%esp)
-+ /*CFI_REL_OFFSET fs, ES*/
-+ movl $(__USER_DS), %ecx
-+ movl %ecx, %ds
-+ movl %ecx, %es
-+ movl %esp,%eax # pt_regs pointer
-+ call *%edi
-+ jmp ret_from_exception
-+ CFI_ENDPROC
-+KPROBE_END(page_fault)
-+
-+ENTRY(coprocessor_error)
-+ RING0_INT_FRAME
-+ pushl $0
-+ CFI_ADJUST_CFA_OFFSET 4
-+ pushl $do_coprocessor_error
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(coprocessor_error)
-+
-+ENTRY(simd_coprocessor_error)
-+ RING0_INT_FRAME
-+ pushl $0
-+ CFI_ADJUST_CFA_OFFSET 4
-+ pushl $do_simd_coprocessor_error
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(simd_coprocessor_error)
-+
-+ENTRY(device_not_available)
-+ RING0_INT_FRAME
-+ pushl $-1 # mark this as an int
-+ CFI_ADJUST_CFA_OFFSET 4
-+ SAVE_ALL
-+ GET_CR0_INTO_EAX
-+ testl $0x4, %eax # EM (math emulation bit)
-+ jne device_not_available_emulate
-+ preempt_stop(CLBR_ANY)
-+ call math_state_restore
-+ jmp ret_from_exception
-+device_not_available_emulate:
-+ pushl $0 # temporary storage for ORIG_EIP
-+ CFI_ADJUST_CFA_OFFSET 4
-+ call math_emulate
-+ addl $4, %esp
-+ CFI_ADJUST_CFA_OFFSET -4
-+ jmp ret_from_exception
-+ CFI_ENDPROC
-+END(device_not_available)
-+
-+/*
-+ * Debug traps and NMI can happen at the one SYSENTER instruction
-+ * that sets up the real kernel stack. Check here, since we can't
-+ * allow the wrong stack to be used.
-+ *
-+ * "TSS_sysenter_esp0+12" is because the NMI/debug handler will have
-+ * already pushed 3 words if it hits on the sysenter instruction:
-+ * eflags, cs and eip.
-+ *
-+ * We just load the right stack, and push the three (known) values
-+ * by hand onto the new stack - while updating the return eip past
-+ * the instruction that would have done it for sysenter.
-+ */
-+#define FIX_STACK(offset, ok, label) \
-+ cmpw $__KERNEL_CS,4(%esp); \
-+ jne ok; \
-+label: \
-+ movl TSS_sysenter_esp0+offset(%esp),%esp; \
-+ CFI_DEF_CFA esp, 0; \
-+ CFI_UNDEFINED eip; \
-+ pushfl; \
-+ CFI_ADJUST_CFA_OFFSET 4; \
-+ pushl $__KERNEL_CS; \
-+ CFI_ADJUST_CFA_OFFSET 4; \
-+ pushl $sysenter_past_esp; \
-+ CFI_ADJUST_CFA_OFFSET 4; \
-+ CFI_REL_OFFSET eip, 0
-+
-+KPROBE_ENTRY(debug)
-+ RING0_INT_FRAME
-+ cmpl $sysenter_entry,(%esp)
-+ jne debug_stack_correct
-+ FIX_STACK(12, debug_stack_correct, debug_esp_fix_insn)
-+debug_stack_correct:
-+ pushl $-1 # mark this as an int
-+ CFI_ADJUST_CFA_OFFSET 4
-+ SAVE_ALL
-+ xorl %edx,%edx # error code 0
-+ movl %esp,%eax # pt_regs pointer
-+ call do_debug
-+ jmp ret_from_exception
-+ CFI_ENDPROC
-+KPROBE_END(debug)
-+
-+/*
-+ * NMI is doubly nasty. It can happen _while_ we're handling
-+ * a debug fault, and the debug fault hasn't yet been able to
-+ * clear up the stack. So we first check whether we got an
-+ * NMI on the sysenter entry path, but after that we need to
-+ * check whether we got an NMI on the debug path where the debug
-+ * fault happened on the sysenter path.
-+ */
-+KPROBE_ENTRY(nmi)
-+ RING0_INT_FRAME
-+ pushl %eax
-+ CFI_ADJUST_CFA_OFFSET 4
-+ movl %ss, %eax
-+ cmpw $__ESPFIX_SS, %ax
-+ popl %eax
-+ CFI_ADJUST_CFA_OFFSET -4
-+ je nmi_espfix_stack
-+ cmpl $sysenter_entry,(%esp)
-+ je nmi_stack_fixup
-+ pushl %eax
-+ CFI_ADJUST_CFA_OFFSET 4
-+ movl %esp,%eax
-+ /* Do not access memory above the end of our stack page,
-+ * it might not exist.
-+ */
-+ andl $(THREAD_SIZE-1),%eax
-+ cmpl $(THREAD_SIZE-20),%eax
-+ popl %eax
-+ CFI_ADJUST_CFA_OFFSET -4
-+ jae nmi_stack_correct
-+ cmpl $sysenter_entry,12(%esp)
-+ je nmi_debug_stack_check
-+nmi_stack_correct:
-+ /* We have a RING0_INT_FRAME here */
-+ pushl %eax
-+ CFI_ADJUST_CFA_OFFSET 4
-+ SAVE_ALL
-+ xorl %edx,%edx # zero error code
-+ movl %esp,%eax # pt_regs pointer
-+ call do_nmi
-+ jmp restore_nocheck_notrace
-+ CFI_ENDPROC
-+
-+nmi_stack_fixup:
-+ RING0_INT_FRAME
-+ FIX_STACK(12,nmi_stack_correct, 1)
-+ jmp nmi_stack_correct
-+
-+nmi_debug_stack_check:
-+ /* We have a RING0_INT_FRAME here */
-+ cmpw $__KERNEL_CS,16(%esp)
-+ jne nmi_stack_correct
-+ cmpl $debug,(%esp)
-+ jb nmi_stack_correct
-+ cmpl $debug_esp_fix_insn,(%esp)
-+ ja nmi_stack_correct
-+ FIX_STACK(24,nmi_stack_correct, 1)
-+ jmp nmi_stack_correct
-+
-+nmi_espfix_stack:
-+ /* We have a RING0_INT_FRAME here.
-+ *
-+ * create the pointer to lss back
-+ */
-+ pushl %ss
-+ CFI_ADJUST_CFA_OFFSET 4
-+ pushl %esp
-+ CFI_ADJUST_CFA_OFFSET 4
-+ addw $4, (%esp)
-+ /* copy the iret frame of 12 bytes */
-+ .rept 3
-+ pushl 16(%esp)
-+ CFI_ADJUST_CFA_OFFSET 4
-+ .endr
-+ pushl %eax
-+ CFI_ADJUST_CFA_OFFSET 4
-+ SAVE_ALL
-+ FIXUP_ESPFIX_STACK # %eax == %esp
-+ xorl %edx,%edx # zero error code
-+ call do_nmi
-+ RESTORE_REGS
-+ lss 12+4(%esp), %esp # back to espfix stack
-+ CFI_ADJUST_CFA_OFFSET -24
-+1: INTERRUPT_RETURN
-+ CFI_ENDPROC
-+.section __ex_table,"a"
-+ .align 4
-+ .long 1b,iret_exc
-+.previous
-+KPROBE_END(nmi)
-+
-+#ifdef CONFIG_PARAVIRT
-+ENTRY(native_iret)
-+1: iret
-+.section __ex_table,"a"
-+ .align 4
-+ .long 1b,iret_exc
-+.previous
-+END(native_iret)
-+
-+ENTRY(native_irq_enable_sysexit)
-+ sti
-+ sysexit
-+END(native_irq_enable_sysexit)
-+#endif
-+
-+KPROBE_ENTRY(int3)
-+ RING0_INT_FRAME
-+ pushl $-1 # mark this as an int
-+ CFI_ADJUST_CFA_OFFSET 4
-+ SAVE_ALL
-+ xorl %edx,%edx # zero error code
-+ movl %esp,%eax # pt_regs pointer
-+ call do_int3
-+ jmp ret_from_exception
-+ CFI_ENDPROC
-+KPROBE_END(int3)
-+
-+ENTRY(overflow)
-+ RING0_INT_FRAME
-+ pushl $0
-+ CFI_ADJUST_CFA_OFFSET 4
-+ pushl $do_overflow
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(overflow)
-+
-+ENTRY(bounds)
-+ RING0_INT_FRAME
-+ pushl $0
-+ CFI_ADJUST_CFA_OFFSET 4
-+ pushl $do_bounds
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(bounds)
-+
-+ENTRY(invalid_op)
-+ RING0_INT_FRAME
-+ pushl $0
-+ CFI_ADJUST_CFA_OFFSET 4
-+ pushl $do_invalid_op
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(invalid_op)
-+
-+ENTRY(coprocessor_segment_overrun)
-+ RING0_INT_FRAME
-+ pushl $0
-+ CFI_ADJUST_CFA_OFFSET 4
-+ pushl $do_coprocessor_segment_overrun
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(coprocessor_segment_overrun)
-+
-+ENTRY(invalid_TSS)
-+ RING0_EC_FRAME
-+ pushl $do_invalid_TSS
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(invalid_TSS)
-+
-+ENTRY(segment_not_present)
-+ RING0_EC_FRAME
-+ pushl $do_segment_not_present
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(segment_not_present)
-+
-+ENTRY(stack_segment)
-+ RING0_EC_FRAME
-+ pushl $do_stack_segment
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(stack_segment)
-+
-+KPROBE_ENTRY(general_protection)
-+ RING0_EC_FRAME
-+ pushl $do_general_protection
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+KPROBE_END(general_protection)
-+
-+ENTRY(alignment_check)
-+ RING0_EC_FRAME
-+ pushl $do_alignment_check
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(alignment_check)
-+
-+ENTRY(divide_error)
-+ RING0_INT_FRAME
-+ pushl $0 # no error code
-+ CFI_ADJUST_CFA_OFFSET 4
-+ pushl $do_divide_error
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(divide_error)
-+
-+#ifdef CONFIG_X86_MCE
-+ENTRY(machine_check)
-+ RING0_INT_FRAME
-+ pushl $0
-+ CFI_ADJUST_CFA_OFFSET 4
-+ pushl machine_check_vector
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(machine_check)
-+#endif
-+
-+ENTRY(spurious_interrupt_bug)
-+ RING0_INT_FRAME
-+ pushl $0
-+ CFI_ADJUST_CFA_OFFSET 4
-+ pushl $do_spurious_interrupt_bug
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(spurious_interrupt_bug)
-+
-+ENTRY(kernel_thread_helper)
-+ pushl $0 # fake return address for unwinder
-+ CFI_STARTPROC
-+ movl %edx,%eax
-+ push %edx
-+ CFI_ADJUST_CFA_OFFSET 4
-+ call *%ebx
-+ push %eax
-+ CFI_ADJUST_CFA_OFFSET 4
-+ call do_exit
-+ CFI_ENDPROC
-+ENDPROC(kernel_thread_helper)
-+
-+.section .rodata,"a"
-+#include "syscall_table.S"
-+
-+syscall_table_size=(.-sys_call_table)
-diff -Nurb --exclude='*.swp' --exclude=tags --exclude='*.patch' --exclude='*.diff' linux-2.6.22-580/arch/i386/kernel/entry.S.syscallprobe linux-2.6.22-590/arch/i386/kernel/entry.S.syscallprobe
---- linux-2.6.22-580/arch/i386/kernel/entry.S.syscallprobe 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.22-590/arch/i386/kernel/entry.S.syscallprobe 2009-02-18 09:57:23.000000000 -0500
-@@ -0,0 +1,1055 @@
-+/*
-+ * linux/arch/i386/entry.S
-+ *
-+ * Copyright (C) 1991, 1992 Linus Torvalds
-+ */
-+
-+/*
-+ * entry.S contains the system-call and fault low-level handling routines.
-+ * This also contains the timer-interrupt handler, as well as all interrupts
-+ * and faults that can result in a task-switch.
-+ *
-+ * NOTE: This code handles signal-recognition, which happens every time
-+ * after a timer-interrupt and after each system call.
-+ *
-+ * I changed all the .align's to 4 (16 byte alignment), as that's faster
-+ * on a 486.
-+ *
-+ * Stack layout in 'syscall_exit':
-+ * ptrace needs to have all regs on the stack.
-+ * if the order here is changed, it needs to be
-+ * updated in fork.c:copy_process, signal.c:do_signal,
-+ * ptrace.c and ptrace.h
-+ *
-+ * 0(%esp) - %ebx
-+ * 4(%esp) - %ecx
-+ * 8(%esp) - %edx
-+ * C(%esp) - %esi
-+ * 10(%esp) - %edi
-+ * 14(%esp) - %ebp
-+ * 18(%esp) - %eax
-+ * 1C(%esp) - %ds
-+ * 20(%esp) - %es
-+ * 24(%esp) - %fs
-+ * 28(%esp) - orig_eax
-+ * 2C(%esp) - %eip
-+ * 30(%esp) - %cs
-+ * 34(%esp) - %eflags
-+ * 38(%esp) - %oldesp
-+ * 3C(%esp) - %oldss
-+ *
-+ * "current" is in register %ebx during any slow entries.
-+ */
-+
-+#include <linux/linkage.h>
-+#include <asm/thread_info.h>
-+#include <asm/irqflags.h>
-+#include <asm/errno.h>
-+#include <asm/segment.h>
-+#include <asm/smp.h>
-+#include <asm/page.h>
-+#include <asm/desc.h>
-+#include <asm/percpu.h>
-+#include <asm/dwarf2.h>
-+#include "irq_vectors.h"
-+
-+/*
-+ * We use macros for low-level operations which need to be overridden
-+ * for paravirtualization. The following will never clobber any registers:
-+ * INTERRUPT_RETURN (aka. "iret")
-+ * GET_CR0_INTO_EAX (aka. "movl %cr0, %eax")
-+ * ENABLE_INTERRUPTS_SYSEXIT (aka "sti; sysexit").
-+ *
-+ * For DISABLE_INTERRUPTS/ENABLE_INTERRUPTS (aka "cli"/"sti"), you must
-+ * specify what registers can be overwritten (CLBR_NONE, CLBR_EAX/EDX/ECX/ANY).
-+ * Allowing a register to be clobbered can shrink the paravirt replacement
-+ * enough to patch inline, increasing performance.
-+ */
-+
-+#define nr_syscalls ((syscall_table_size)/4)
-+
-+CF_MASK = 0x00000001
-+TF_MASK = 0x00000100
-+IF_MASK = 0x00000200
-+DF_MASK = 0x00000400
-+NT_MASK = 0x00004000
-+VM_MASK = 0x00020000
-+
-+#ifdef CONFIG_PREEMPT
-+#define preempt_stop(clobbers) DISABLE_INTERRUPTS(clobbers); TRACE_IRQS_OFF
-+#else
-+#define preempt_stop(clobbers)
-+#define resume_kernel restore_nocheck
-+#endif
-+
-+.macro TRACE_IRQS_IRET
-+#ifdef CONFIG_TRACE_IRQFLAGS
-+ testl $IF_MASK,PT_EFLAGS(%esp) # interrupts off?
-+ jz 1f
-+ TRACE_IRQS_ON
-+1:
-+#endif
-+.endm
-+
-+#ifdef CONFIG_VM86
-+#define resume_userspace_sig check_userspace
-+#else
-+#define resume_userspace_sig resume_userspace
-+#endif
-+
-+#define SAVE_ALL \
-+ cld; \
-+ pushl %fs; \
-+ CFI_ADJUST_CFA_OFFSET 4;\
-+ /*CFI_REL_OFFSET fs, 0;*/\
-+ pushl %es; \
-+ CFI_ADJUST_CFA_OFFSET 4;\
-+ /*CFI_REL_OFFSET es, 0;*/\
-+ pushl %ds; \
-+ CFI_ADJUST_CFA_OFFSET 4;\
-+ /*CFI_REL_OFFSET ds, 0;*/\
-+ pushl %eax; \
-+ CFI_ADJUST_CFA_OFFSET 4;\
-+ CFI_REL_OFFSET eax, 0;\
-+ pushl %ebp; \
-+ CFI_ADJUST_CFA_OFFSET 4;\
-+ CFI_REL_OFFSET ebp, 0;\
-+ pushl %edi; \
-+ CFI_ADJUST_CFA_OFFSET 4;\
-+ CFI_REL_OFFSET edi, 0;\
-+ pushl %esi; \
-+ CFI_ADJUST_CFA_OFFSET 4;\
-+ CFI_REL_OFFSET esi, 0;\
-+ pushl %edx; \
-+ CFI_ADJUST_CFA_OFFSET 4;\
-+ CFI_REL_OFFSET edx, 0;\
-+ pushl %ecx; \
-+ CFI_ADJUST_CFA_OFFSET 4;\
-+ CFI_REL_OFFSET ecx, 0;\
-+ pushl %ebx; \
-+ CFI_ADJUST_CFA_OFFSET 4;\
-+ CFI_REL_OFFSET ebx, 0;\
-+ movl $(__USER_DS), %edx; \
-+ movl %edx, %ds; \
-+ movl %edx, %es; \
-+ movl $(__KERNEL_PERCPU), %edx; \
-+ movl %edx, %fs
-+
-+#define RESTORE_INT_REGS \
-+ popl %ebx; \
-+ CFI_ADJUST_CFA_OFFSET -4;\
-+ CFI_RESTORE ebx;\
-+ popl %ecx; \
-+ CFI_ADJUST_CFA_OFFSET -4;\
-+ CFI_RESTORE ecx;\
-+ popl %edx; \
-+ CFI_ADJUST_CFA_OFFSET -4;\
-+ CFI_RESTORE edx;\
-+ popl %esi; \
-+ CFI_ADJUST_CFA_OFFSET -4;\
-+ CFI_RESTORE esi;\
-+ popl %edi; \
-+ CFI_ADJUST_CFA_OFFSET -4;\
-+ CFI_RESTORE edi;\
-+ popl %ebp; \
-+ CFI_ADJUST_CFA_OFFSET -4;\
-+ CFI_RESTORE ebp;\
-+ popl %eax; \
-+ CFI_ADJUST_CFA_OFFSET -4;\
-+ CFI_RESTORE eax
-+
-+#define RESTORE_REGS \
-+ RESTORE_INT_REGS; \
-+1: popl %ds; \
-+ CFI_ADJUST_CFA_OFFSET -4;\
-+ /*CFI_RESTORE ds;*/\
-+2: popl %es; \
-+ CFI_ADJUST_CFA_OFFSET -4;\
-+ /*CFI_RESTORE es;*/\
-+3: popl %fs; \
-+ CFI_ADJUST_CFA_OFFSET -4;\
-+ /*CFI_RESTORE fs;*/\
-+.pushsection .fixup,"ax"; \
-+4: movl $0,(%esp); \
-+ jmp 1b; \
-+5: movl $0,(%esp); \
-+ jmp 2b; \
-+6: movl $0,(%esp); \
-+ jmp 3b; \
-+.section __ex_table,"a";\
-+ .align 4; \
-+ .long 1b,4b; \
-+ .long 2b,5b; \
-+ .long 3b,6b; \
-+.popsection
-+
-+#define RING0_INT_FRAME \
-+ CFI_STARTPROC simple;\
-+ CFI_SIGNAL_FRAME;\
-+ CFI_DEF_CFA esp, 3*4;\
-+ /*CFI_OFFSET cs, -2*4;*/\
-+ CFI_OFFSET eip, -3*4
-+
-+#define RING0_EC_FRAME \
-+ CFI_STARTPROC simple;\
-+ CFI_SIGNAL_FRAME;\
-+ CFI_DEF_CFA esp, 4*4;\
-+ /*CFI_OFFSET cs, -2*4;*/\
-+ CFI_OFFSET eip, -3*4
-+
-+#define RING0_PTREGS_FRAME \
-+ CFI_STARTPROC simple;\
-+ CFI_SIGNAL_FRAME;\
-+ CFI_DEF_CFA esp, PT_OLDESP-PT_EBX;\
-+ /*CFI_OFFSET cs, PT_CS-PT_OLDESP;*/\
-+ CFI_OFFSET eip, PT_EIP-PT_OLDESP;\
-+ /*CFI_OFFSET es, PT_ES-PT_OLDESP;*/\
-+ /*CFI_OFFSET ds, PT_DS-PT_OLDESP;*/\
-+ CFI_OFFSET eax, PT_EAX-PT_OLDESP;\
-+ CFI_OFFSET ebp, PT_EBP-PT_OLDESP;\
-+ CFI_OFFSET edi, PT_EDI-PT_OLDESP;\
-+ CFI_OFFSET esi, PT_ESI-PT_OLDESP;\
-+ CFI_OFFSET edx, PT_EDX-PT_OLDESP;\
-+ CFI_OFFSET ecx, PT_ECX-PT_OLDESP;\
-+ CFI_OFFSET ebx, PT_EBX-PT_OLDESP
-+
-+ENTRY(ret_from_fork)
-+ CFI_STARTPROC
-+ pushl %eax
-+ CFI_ADJUST_CFA_OFFSET 4
-+ call schedule_tail
-+ GET_THREAD_INFO(%ebp)
-+ popl %eax
-+ CFI_ADJUST_CFA_OFFSET -4
-+ pushl $0x0202 # Reset kernel eflags
-+ CFI_ADJUST_CFA_OFFSET 4
-+ popfl
-+ CFI_ADJUST_CFA_OFFSET -4
-+ jmp syscall_exit
-+ CFI_ENDPROC
-+END(ret_from_fork)
-+
-+/*
-+ * Return to user mode is not as complex as all this looks,
-+ * but we want the default path for a system call return to
-+ * go as quickly as possible which is why some of this is
-+ * less clear than it otherwise should be.
-+ */
-+
-+ # userspace resumption stub bypassing syscall exit tracing
-+ ALIGN
-+ RING0_PTREGS_FRAME
-+ret_from_exception:
-+ preempt_stop(CLBR_ANY)
-+ret_from_intr:
-+ GET_THREAD_INFO(%ebp)
-+check_userspace:
-+ movl PT_EFLAGS(%esp), %eax # mix EFLAGS and CS
-+ movb PT_CS(%esp), %al
-+ andl $(VM_MASK | SEGMENT_RPL_MASK), %eax
-+ cmpl $USER_RPL, %eax
-+ jb resume_kernel # not returning to v8086 or userspace
-+
-+ENTRY(resume_userspace)
-+ DISABLE_INTERRUPTS(CLBR_ANY) # make sure we don't miss an interrupt
-+ # setting need_resched or sigpending
-+ # between sampling and the iret
-+ movl TI_flags(%ebp), %ecx
-+ andl $_TIF_WORK_MASK, %ecx # is there any work to be done on
-+ # int/exception return?
-+ jne work_pending
-+ jmp restore_all
-+END(ret_from_exception)
-+
-+#ifdef CONFIG_PREEMPT
-+ENTRY(resume_kernel)
-+ DISABLE_INTERRUPTS(CLBR_ANY)
-+ cmpl $0,TI_preempt_count(%ebp) # non-zero preempt_count ?
-+ jnz restore_nocheck
-+need_resched:
-+ movl TI_flags(%ebp), %ecx # need_resched set ?
-+ testb $_TIF_NEED_RESCHED, %cl
-+ jz restore_all
-+ testl $IF_MASK,PT_EFLAGS(%esp) # interrupts off (exception path) ?
-+ jz restore_all
-+ call preempt_schedule_irq
-+ jmp need_resched
-+END(resume_kernel)
-+#endif
-+ CFI_ENDPROC
-+
-+/* SYSENTER_RETURN points to after the "sysenter" instruction in
-+ the vsyscall page. See vsyscall-sysentry.S, which defines the symbol. */
-+
-+ # sysenter call handler stub
-+ENTRY(sysenter_entry)
-+ CFI_STARTPROC simple
-+ CFI_SIGNAL_FRAME
-+ CFI_DEF_CFA esp, 0
-+ CFI_REGISTER esp, ebp
-+ movl TSS_sysenter_esp0(%esp),%esp
-+sysenter_past_esp:
-+ /*
-+ * No need to follow this irqs on/off section: the syscall
-+ * disabled irqs and here we enable it straight after entry:
-+ */
-+ ENABLE_INTERRUPTS(CLBR_NONE)
-+ pushl $(__USER_DS)
-+ CFI_ADJUST_CFA_OFFSET 4
-+ /*CFI_REL_OFFSET ss, 0*/
-+ pushl %ebp
-+ CFI_ADJUST_CFA_OFFSET 4
-+ CFI_REL_OFFSET esp, 0
-+ pushfl
-+ CFI_ADJUST_CFA_OFFSET 4
-+ pushl $(__USER_CS)
-+ CFI_ADJUST_CFA_OFFSET 4
-+ /*CFI_REL_OFFSET cs, 0*/
-+ /*
-+ * Push current_thread_info()->sysenter_return to the stack.
-+ * A tiny bit of offset fixup is necessary - 4*4 means the 4 words
-+ * pushed above; +8 corresponds to copy_thread's esp0 setting.
-+ */
-+ pushl (TI_sysenter_return-THREAD_SIZE+8+4*4)(%esp)
-+ CFI_ADJUST_CFA_OFFSET 4
-+ CFI_REL_OFFSET eip, 0
-+
-+/*
-+ * Load the potential sixth argument from user stack.
-+ * Careful about security.
-+ */
-+ cmpl $__PAGE_OFFSET-3,%ebp
-+ jae syscall_fault
-+1: movl (%ebp),%ebp
-+.section __ex_table,"a"
-+ .align 4
-+ .long 1b,syscall_fault
-+.previous
-+
-+ pushl %eax
-+ CFI_ADJUST_CFA_OFFSET 4
-+ SAVE_ALL
-+ GET_THREAD_INFO(%ebp)
-+
-+ /* Note, _TIF_SECCOMP is bit number 8, and so it needs testw and not testb */
-+ testw $(_TIF_SYSCALL_EMU|_TIF_SYSCALL_TRACE|_TIF_SECCOMP|_TIF_SYSCALL_AUDIT),TI_flags(%ebp)
-+ jnz syscall_trace_entry
-+ cmpl $(nr_syscalls), %eax
-+ jae syscall_badsys
-+ call *sys_call_table(,%eax,4)
-+ movl %eax,PT_EAX(%esp)
-+ DISABLE_INTERRUPTS(CLBR_ANY)
-+ TRACE_IRQS_OFF
-+ movl TI_flags(%ebp), %ecx
-+ testw $_TIF_ALLWORK_MASK, %cx
-+ jne syscall_exit_work
-+/* if something modifies registers it must also disable sysexit */
-+ movl PT_EIP(%esp), %edx
-+ movl PT_OLDESP(%esp), %ecx
-+ xorl %ebp,%ebp
-+ TRACE_IRQS_ON
-+1: mov PT_FS(%esp), %fs
-+ ENABLE_INTERRUPTS_SYSEXIT
-+ CFI_ENDPROC
-+.pushsection .fixup,"ax"
-+2: movl $0,PT_FS(%esp)
-+ jmp 1b
-+.section __ex_table,"a"
-+ .align 4
-+ .long 1b,2b
-+.popsection
-+ENDPROC(sysenter_entry)
-+
-+ # system call handler stub
-+ENTRY(system_call)
-+ RING0_INT_FRAME # can't unwind into user space anyway
-+ pushl %eax # save orig_eax
-+ CFI_ADJUST_CFA_OFFSET 4
-+ SAVE_ALL
-+ GET_THREAD_INFO(%ebp)
-+ # system call tracing in operation / emulation
-+ /* Note, _TIF_SECCOMP is bit number 8, and so it needs testw and not testb */
-+ testw $(_TIF_SYSCALL_EMU|_TIF_SYSCALL_TRACE|_TIF_SECCOMP|_TIF_SYSCALL_AUDIT),TI_flags(%ebp)
-+ jnz syscall_trace_entry
-+ cmpl $(nr_syscalls), %eax
-+ jae syscall_badsys
-+syscall_call:
+--- linux-2.6.22-590/arch/i386/kernel/entry.S 2009-03-16 20:49:07.000000000 -0400
++++ linux-2.6.22-591/arch/i386/kernel/entry.S 2009-03-16 20:58:59.000000000 -0400
+@@ -374,6 +374,33 @@
+ cmpl $(nr_syscalls), %eax
+ jae syscall_badsys
+ syscall_call:
+ /* Move Chopstix syscall probe here */
+ /* Save and clobber: eax, ecx, ebp */
-+ pushl %ebp
-+ movl %esp, %ebp
+ pushl %eax
+ pushl %ecx
++ pushl %ebp
++ movl %esp, %ebp
+ subl $SPEC_EVENT_SIZE, %esp
+ movl rec_event, %ecx
+ testl %ecx, %ecx
+ jz carry_on
++ # struct event is first, just below %ebp
+ movl %eax, (SPEC_number-EVENT_SIZE)(%ebp)
-+ leal SPEC_EVENT_SIZE(%ebp), %eax
++ leal -SPEC_EVENT_SIZE(%ebp), %eax
+ movl %eax, EVENT_event_data(%ebp)
-+ GET_THREAD_INFO(%eax)
-+ movl %eax, EVENT_task(%ebp)
-+ movl $7, EVENT_event_type(%ebp)
++ movl $6, EVENT_event_type(%ebp)
+ movl rec_event, %edx
+ movl $1, 4(%esp)
+ leal -EVENT_SIZE(%ebp), %eax
+ movl %eax, (%esp)
-+ /*call rec_event_asm */
++ call rec_event_asm
+carry_on:
+ addl $SPEC_EVENT_SIZE, %esp
++ popl %ebp
+ popl %ecx
+ popl %eax
-+ popl %ebp
+ /* End chopstix */
+
-+ call *sys_call_table(,%eax,4)
-+ movl %eax,PT_EAX(%esp) # store the return value
-+syscall_exit:
-+ DISABLE_INTERRUPTS(CLBR_ANY) # make sure we don't miss an interrupt
-+ # setting need_resched or sigpending
-+ # between sampling and the iret
-+ TRACE_IRQS_OFF
-+ testl $TF_MASK,PT_EFLAGS(%esp) # If tracing set singlestep flag on exit
-+ jz no_singlestep
-+ orl $_TIF_SINGLESTEP,TI_flags(%ebp)
-+no_singlestep:
-+ movl TI_flags(%ebp), %ecx
-+ testw $_TIF_ALLWORK_MASK, %cx # current->work
-+ jne syscall_exit_work
-+
-+restore_all:
-+ movl PT_EFLAGS(%esp), %eax # mix EFLAGS, SS and CS
-+ # Warning: PT_OLDSS(%esp) contains the wrong/random values if we
-+ # are returning to the kernel.
-+ # See comments in process.c:copy_thread() for details.
-+ movb PT_OLDSS(%esp), %ah
-+ movb PT_CS(%esp), %al
-+ andl $(VM_MASK | (SEGMENT_TI_MASK << 8) | SEGMENT_RPL_MASK), %eax
-+ cmpl $((SEGMENT_LDT << 8) | USER_RPL), %eax
-+ CFI_REMEMBER_STATE
-+ je ldt_ss # returning to user-space with LDT SS
-+restore_nocheck:
-+ TRACE_IRQS_IRET
-+restore_nocheck_notrace:
-+ RESTORE_REGS
-+ addl $4, %esp # skip orig_eax/error_code
-+ CFI_ADJUST_CFA_OFFSET -4
-+1: INTERRUPT_RETURN
-+.section .fixup,"ax"
-+iret_exc:
-+ pushl $0 # no error code
-+ pushl $do_iret_error
-+ jmp error_code
-+.previous
-+.section __ex_table,"a"
-+ .align 4
-+ .long 1b,iret_exc
-+.previous
-+
-+ CFI_RESTORE_STATE
-+ldt_ss:
-+ larl PT_OLDSS(%esp), %eax
-+ jnz restore_nocheck
-+ testl $0x00400000, %eax # returning to 32bit stack?
-+ jnz restore_nocheck # allright, normal return
-+
-+#ifdef CONFIG_PARAVIRT
-+ /*
-+ * The kernel can't run on a non-flat stack if paravirt mode
-+ * is active. Rather than try to fixup the high bits of
-+ * ESP, bypass this code entirely. This may break DOSemu
-+ * and/or Wine support in a paravirt VM, although the option
-+ * is still available to implement the setting of the high
-+ * 16-bits in the INTERRUPT_RETURN paravirt-op.
-+ */
-+ cmpl $0, paravirt_ops+PARAVIRT_enabled
-+ jne restore_nocheck
-+#endif
-+
-+ /* If returning to userspace with 16bit stack,
-+ * try to fix the higher word of ESP, as the CPU
-+ * won't restore it.
-+ * This is an "official" bug of all the x86-compatible
-+ * CPUs, which we can try to work around to make
-+ * dosemu and wine happy. */
-+ movl PT_OLDESP(%esp), %eax
-+ movl %esp, %edx
-+ call patch_espfix_desc
-+ pushl $__ESPFIX_SS
-+ CFI_ADJUST_CFA_OFFSET 4
-+ pushl %eax
-+ CFI_ADJUST_CFA_OFFSET 4
-+ DISABLE_INTERRUPTS(CLBR_EAX)
-+ TRACE_IRQS_OFF
-+ lss (%esp), %esp
-+ CFI_ADJUST_CFA_OFFSET -8
-+ jmp restore_nocheck
-+ CFI_ENDPROC
-+ENDPROC(system_call)
-+
-+ # perform work that needs to be done immediately before resumption
-+ ALIGN
-+ RING0_PTREGS_FRAME # can't unwind into user space anyway
-+work_pending:
-+ testb $_TIF_NEED_RESCHED, %cl
-+ jz work_notifysig
-+work_resched:
-+ call schedule
-+ DISABLE_INTERRUPTS(CLBR_ANY) # make sure we don't miss an interrupt
-+ # setting need_resched or sigpending
-+ # between sampling and the iret
-+ TRACE_IRQS_OFF
-+ movl TI_flags(%ebp), %ecx
-+ andl $_TIF_WORK_MASK, %ecx # is there any work to be done other
-+ # than syscall tracing?
-+ jz restore_all
-+ testb $_TIF_NEED_RESCHED, %cl
-+ jnz work_resched
-+
-+work_notifysig: # deal with pending signals and
-+ # notify-resume requests
-+#ifdef CONFIG_VM86
-+ testl $VM_MASK, PT_EFLAGS(%esp)
-+ movl %esp, %eax
-+ jne work_notifysig_v86 # returning to kernel-space or
-+ # vm86-space
-+ xorl %edx, %edx
-+ call do_notify_resume
-+ jmp resume_userspace_sig
-+
-+ ALIGN
-+work_notifysig_v86:
-+ pushl %ecx # save ti_flags for do_notify_resume
-+ CFI_ADJUST_CFA_OFFSET 4
-+ call save_v86_state # %eax contains pt_regs pointer
-+ popl %ecx
-+ CFI_ADJUST_CFA_OFFSET -4
-+ movl %eax, %esp
-+#else
-+ movl %esp, %eax
-+#endif
-+ xorl %edx, %edx
-+ call do_notify_resume
-+ jmp resume_userspace_sig
-+END(work_pending)
-+
-+ # perform syscall exit tracing
-+ ALIGN
-+syscall_trace_entry:
-+ movl $-ENOSYS,PT_EAX(%esp)
-+ movl %esp, %eax
-+ xorl %edx,%edx
-+ call do_syscall_trace
-+ cmpl $0, %eax
-+ jne resume_userspace # ret != 0 -> running under PTRACE_SYSEMU,
-+ # so must skip actual syscall
-+ movl PT_ORIG_EAX(%esp), %eax
-+ cmpl $(nr_syscalls), %eax
-+ jnae syscall_call
-+ jmp syscall_exit
-+END(syscall_trace_entry)
-+
-+ # perform syscall exit tracing
-+ ALIGN
-+syscall_exit_work:
-+ testb $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SINGLESTEP), %cl
-+ jz work_pending
-+ TRACE_IRQS_ON
-+ ENABLE_INTERRUPTS(CLBR_ANY) # could let do_syscall_trace() call
-+ # schedule() instead
-+ movl %esp, %eax
-+ movl $1, %edx
-+ call do_syscall_trace
-+ jmp resume_userspace
-+END(syscall_exit_work)
-+ CFI_ENDPROC
-+
-+ RING0_INT_FRAME # can't unwind into user space anyway
-+syscall_fault:
-+ pushl %eax # save orig_eax
-+ CFI_ADJUST_CFA_OFFSET 4
-+ SAVE_ALL
-+ GET_THREAD_INFO(%ebp)
-+ movl $-EFAULT,PT_EAX(%esp)
-+ jmp resume_userspace
-+END(syscall_fault)
-+
-+syscall_badsys:
-+ movl $-ENOSYS,PT_EAX(%esp)
-+ jmp resume_userspace
-+END(syscall_badsys)
-+ CFI_ENDPROC
-+
-+#define FIXUP_ESPFIX_STACK \
-+ /* since we are on a wrong stack, we cant make it a C code :( */ \
-+ PER_CPU(gdt_page, %ebx); \
-+ GET_DESC_BASE(GDT_ENTRY_ESPFIX_SS, %ebx, %eax, %ax, %al, %ah); \
-+ addl %esp, %eax; \
-+ pushl $__KERNEL_DS; \
-+ CFI_ADJUST_CFA_OFFSET 4; \
-+ pushl %eax; \
-+ CFI_ADJUST_CFA_OFFSET 4; \
-+ lss (%esp), %esp; \
-+ CFI_ADJUST_CFA_OFFSET -8;
-+#define UNWIND_ESPFIX_STACK \
-+ movl %ss, %eax; \
-+ /* see if on espfix stack */ \
-+ cmpw $__ESPFIX_SS, %ax; \
-+ jne 27f; \
-+ movl $__KERNEL_DS, %eax; \
-+ movl %eax, %ds; \
-+ movl %eax, %es; \
-+ /* switch to normal stack */ \
-+ FIXUP_ESPFIX_STACK; \
-+27:;
-+
-+/*
-+ * Build the entry stubs and pointer table with
-+ * some assembler magic.
-+ */
-+.data
-+ENTRY(interrupt)
-+.text
-+
-+ENTRY(irq_entries_start)
-+ RING0_INT_FRAME
-+vector=0
-+.rept NR_IRQS
-+ ALIGN
-+ .if vector
-+ CFI_ADJUST_CFA_OFFSET -4
-+ .endif
-+1: pushl $~(vector)
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp common_interrupt
-+ .previous
-+ .long 1b
-+ .text
-+vector=vector+1
-+.endr
-+END(irq_entries_start)
-+
-+.previous
-+END(interrupt)
-+.previous
-+
-+/*
-+ * the CPU automatically disables interrupts when executing an IRQ vector,
-+ * so IRQ-flags tracing has to follow that:
-+ */
-+ ALIGN
-+common_interrupt:
-+ SAVE_ALL
-+ TRACE_IRQS_OFF
-+ movl %esp,%eax
-+ call do_IRQ
-+ jmp ret_from_intr
-+ENDPROC(common_interrupt)
-+ CFI_ENDPROC
-+
-+#define BUILD_INTERRUPT(name, nr) \
-+ENTRY(name) \
-+ RING0_INT_FRAME; \
-+ pushl $~(nr); \
-+ CFI_ADJUST_CFA_OFFSET 4; \
-+ SAVE_ALL; \
-+ TRACE_IRQS_OFF \
-+ movl %esp,%eax; \
-+ call smp_##name; \
-+ jmp ret_from_intr; \
-+ CFI_ENDPROC; \
-+ENDPROC(name)
-+
-+/* The include is where all of the SMP etc. interrupts come from */
-+#include "entry_arch.h"
-+
-+KPROBE_ENTRY(page_fault)
-+ RING0_EC_FRAME
-+ pushl $do_page_fault
-+ CFI_ADJUST_CFA_OFFSET 4
-+ ALIGN
-+error_code:
-+ /* the function address is in %fs's slot on the stack */
-+ pushl %es
-+ CFI_ADJUST_CFA_OFFSET 4
-+ /*CFI_REL_OFFSET es, 0*/
-+ pushl %ds
-+ CFI_ADJUST_CFA_OFFSET 4
-+ /*CFI_REL_OFFSET ds, 0*/
-+ pushl %eax
-+ CFI_ADJUST_CFA_OFFSET 4
-+ CFI_REL_OFFSET eax, 0
-+ pushl %ebp
-+ CFI_ADJUST_CFA_OFFSET 4
-+ CFI_REL_OFFSET ebp, 0
-+ pushl %edi
-+ CFI_ADJUST_CFA_OFFSET 4
-+ CFI_REL_OFFSET edi, 0
-+ pushl %esi
-+ CFI_ADJUST_CFA_OFFSET 4
-+ CFI_REL_OFFSET esi, 0
-+ pushl %edx
-+ CFI_ADJUST_CFA_OFFSET 4
-+ CFI_REL_OFFSET edx, 0
-+ pushl %ecx
-+ CFI_ADJUST_CFA_OFFSET 4
-+ CFI_REL_OFFSET ecx, 0
-+ pushl %ebx
-+ CFI_ADJUST_CFA_OFFSET 4
-+ CFI_REL_OFFSET ebx, 0
-+ cld
-+ pushl %fs
-+ CFI_ADJUST_CFA_OFFSET 4
-+ /*CFI_REL_OFFSET fs, 0*/
-+ movl $(__KERNEL_PERCPU), %ecx
-+ movl %ecx, %fs
-+ UNWIND_ESPFIX_STACK
-+ popl %ecx
-+ CFI_ADJUST_CFA_OFFSET -4
-+ /*CFI_REGISTER es, ecx*/
-+ movl PT_FS(%esp), %edi # get the function address
-+ movl PT_ORIG_EAX(%esp), %edx # get the error code
-+ movl $-1, PT_ORIG_EAX(%esp) # no syscall to restart
-+ mov %ecx, PT_FS(%esp)
-+ /*CFI_REL_OFFSET fs, ES*/
-+ movl $(__USER_DS), %ecx
-+ movl %ecx, %ds
-+ movl %ecx, %es
-+ movl %esp,%eax # pt_regs pointer
-+ call *%edi
-+ jmp ret_from_exception
-+ CFI_ENDPROC
-+KPROBE_END(page_fault)
-+
-+ENTRY(coprocessor_error)
-+ RING0_INT_FRAME
-+ pushl $0
-+ CFI_ADJUST_CFA_OFFSET 4
-+ pushl $do_coprocessor_error
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(coprocessor_error)
-+
-+ENTRY(simd_coprocessor_error)
-+ RING0_INT_FRAME
-+ pushl $0
-+ CFI_ADJUST_CFA_OFFSET 4
-+ pushl $do_simd_coprocessor_error
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(simd_coprocessor_error)
-+
-+ENTRY(device_not_available)
-+ RING0_INT_FRAME
-+ pushl $-1 # mark this as an int
-+ CFI_ADJUST_CFA_OFFSET 4
-+ SAVE_ALL
-+ GET_CR0_INTO_EAX
-+ testl $0x4, %eax # EM (math emulation bit)
-+ jne device_not_available_emulate
-+ preempt_stop(CLBR_ANY)
-+ call math_state_restore
-+ jmp ret_from_exception
-+device_not_available_emulate:
-+ pushl $0 # temporary storage for ORIG_EIP
-+ CFI_ADJUST_CFA_OFFSET 4
-+ call math_emulate
-+ addl $4, %esp
-+ CFI_ADJUST_CFA_OFFSET -4
-+ jmp ret_from_exception
-+ CFI_ENDPROC
-+END(device_not_available)
-+
-+/*
-+ * Debug traps and NMI can happen at the one SYSENTER instruction
-+ * that sets up the real kernel stack. Check here, since we can't
-+ * allow the wrong stack to be used.
-+ *
-+ * "TSS_sysenter_esp0+12" is because the NMI/debug handler will have
-+ * already pushed 3 words if it hits on the sysenter instruction:
-+ * eflags, cs and eip.
-+ *
-+ * We just load the right stack, and push the three (known) values
-+ * by hand onto the new stack - while updating the return eip past
-+ * the instruction that would have done it for sysenter.
-+ */
-+#define FIX_STACK(offset, ok, label) \
-+ cmpw $__KERNEL_CS,4(%esp); \
-+ jne ok; \
-+label: \
-+ movl TSS_sysenter_esp0+offset(%esp),%esp; \
-+ CFI_DEF_CFA esp, 0; \
-+ CFI_UNDEFINED eip; \
-+ pushfl; \
-+ CFI_ADJUST_CFA_OFFSET 4; \
-+ pushl $__KERNEL_CS; \
-+ CFI_ADJUST_CFA_OFFSET 4; \
-+ pushl $sysenter_past_esp; \
-+ CFI_ADJUST_CFA_OFFSET 4; \
-+ CFI_REL_OFFSET eip, 0
-+
-+KPROBE_ENTRY(debug)
-+ RING0_INT_FRAME
-+ cmpl $sysenter_entry,(%esp)
-+ jne debug_stack_correct
-+ FIX_STACK(12, debug_stack_correct, debug_esp_fix_insn)
-+debug_stack_correct:
-+ pushl $-1 # mark this as an int
-+ CFI_ADJUST_CFA_OFFSET 4
-+ SAVE_ALL
-+ xorl %edx,%edx # error code 0
-+ movl %esp,%eax # pt_regs pointer
-+ call do_debug
-+ jmp ret_from_exception
-+ CFI_ENDPROC
-+KPROBE_END(debug)
-+
-+/*
-+ * NMI is doubly nasty. It can happen _while_ we're handling
-+ * a debug fault, and the debug fault hasn't yet been able to
-+ * clear up the stack. So we first check whether we got an
-+ * NMI on the sysenter entry path, but after that we need to
-+ * check whether we got an NMI on the debug path where the debug
-+ * fault happened on the sysenter path.
-+ */
-+KPROBE_ENTRY(nmi)
-+ RING0_INT_FRAME
-+ pushl %eax
-+ CFI_ADJUST_CFA_OFFSET 4
-+ movl %ss, %eax
-+ cmpw $__ESPFIX_SS, %ax
-+ popl %eax
-+ CFI_ADJUST_CFA_OFFSET -4
-+ je nmi_espfix_stack
-+ cmpl $sysenter_entry,(%esp)
-+ je nmi_stack_fixup
-+ pushl %eax
-+ CFI_ADJUST_CFA_OFFSET 4
-+ movl %esp,%eax
-+ /* Do not access memory above the end of our stack page,
-+ * it might not exist.
-+ */
-+ andl $(THREAD_SIZE-1),%eax
-+ cmpl $(THREAD_SIZE-20),%eax
-+ popl %eax
-+ CFI_ADJUST_CFA_OFFSET -4
-+ jae nmi_stack_correct
-+ cmpl $sysenter_entry,12(%esp)
-+ je nmi_debug_stack_check
-+nmi_stack_correct:
-+ /* We have a RING0_INT_FRAME here */
-+ pushl %eax
-+ CFI_ADJUST_CFA_OFFSET 4
-+ SAVE_ALL
-+ xorl %edx,%edx # zero error code
-+ movl %esp,%eax # pt_regs pointer
-+ call do_nmi
-+ jmp restore_nocheck_notrace
-+ CFI_ENDPROC
-+
-+nmi_stack_fixup:
-+ RING0_INT_FRAME
-+ FIX_STACK(12,nmi_stack_correct, 1)
-+ jmp nmi_stack_correct
-+
-+nmi_debug_stack_check:
-+ /* We have a RING0_INT_FRAME here */
-+ cmpw $__KERNEL_CS,16(%esp)
-+ jne nmi_stack_correct
-+ cmpl $debug,(%esp)
-+ jb nmi_stack_correct
-+ cmpl $debug_esp_fix_insn,(%esp)
-+ ja nmi_stack_correct
-+ FIX_STACK(24,nmi_stack_correct, 1)
-+ jmp nmi_stack_correct
-+
-+nmi_espfix_stack:
-+ /* We have a RING0_INT_FRAME here.
-+ *
-+ * create the pointer to lss back
-+ */
-+ pushl %ss
-+ CFI_ADJUST_CFA_OFFSET 4
-+ pushl %esp
-+ CFI_ADJUST_CFA_OFFSET 4
-+ addw $4, (%esp)
-+ /* copy the iret frame of 12 bytes */
-+ .rept 3
-+ pushl 16(%esp)
-+ CFI_ADJUST_CFA_OFFSET 4
-+ .endr
-+ pushl %eax
-+ CFI_ADJUST_CFA_OFFSET 4
-+ SAVE_ALL
-+ FIXUP_ESPFIX_STACK # %eax == %esp
-+ xorl %edx,%edx # zero error code
-+ call do_nmi
-+ RESTORE_REGS
-+ lss 12+4(%esp), %esp # back to espfix stack
-+ CFI_ADJUST_CFA_OFFSET -24
-+1: INTERRUPT_RETURN
-+ CFI_ENDPROC
-+.section __ex_table,"a"
-+ .align 4
-+ .long 1b,iret_exc
-+.previous
-+KPROBE_END(nmi)
-+
-+#ifdef CONFIG_PARAVIRT
-+ENTRY(native_iret)
-+1: iret
-+.section __ex_table,"a"
-+ .align 4
-+ .long 1b,iret_exc
-+.previous
-+END(native_iret)
-+
-+ENTRY(native_irq_enable_sysexit)
-+ sti
-+ sysexit
-+END(native_irq_enable_sysexit)
-+#endif
-+
-+KPROBE_ENTRY(int3)
-+ RING0_INT_FRAME
-+ pushl $-1 # mark this as an int
-+ CFI_ADJUST_CFA_OFFSET 4
-+ SAVE_ALL
-+ xorl %edx,%edx # zero error code
-+ movl %esp,%eax # pt_regs pointer
-+ call do_int3
-+ jmp ret_from_exception
-+ CFI_ENDPROC
-+KPROBE_END(int3)
-+
-+ENTRY(overflow)
-+ RING0_INT_FRAME
-+ pushl $0
-+ CFI_ADJUST_CFA_OFFSET 4
-+ pushl $do_overflow
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(overflow)
-+
-+ENTRY(bounds)
-+ RING0_INT_FRAME
-+ pushl $0
-+ CFI_ADJUST_CFA_OFFSET 4
-+ pushl $do_bounds
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(bounds)
-+
-+ENTRY(invalid_op)
-+ RING0_INT_FRAME
-+ pushl $0
-+ CFI_ADJUST_CFA_OFFSET 4
-+ pushl $do_invalid_op
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(invalid_op)
-+
-+ENTRY(coprocessor_segment_overrun)
-+ RING0_INT_FRAME
-+ pushl $0
-+ CFI_ADJUST_CFA_OFFSET 4
-+ pushl $do_coprocessor_segment_overrun
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(coprocessor_segment_overrun)
-+
-+ENTRY(invalid_TSS)
-+ RING0_EC_FRAME
-+ pushl $do_invalid_TSS
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(invalid_TSS)
-+
-+ENTRY(segment_not_present)
-+ RING0_EC_FRAME
-+ pushl $do_segment_not_present
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(segment_not_present)
-+
-+ENTRY(stack_segment)
-+ RING0_EC_FRAME
-+ pushl $do_stack_segment
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(stack_segment)
-+
-+KPROBE_ENTRY(general_protection)
-+ RING0_EC_FRAME
-+ pushl $do_general_protection
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+KPROBE_END(general_protection)
-+
-+ENTRY(alignment_check)
-+ RING0_EC_FRAME
-+ pushl $do_alignment_check
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(alignment_check)
-+
-+ENTRY(divide_error)
-+ RING0_INT_FRAME
-+ pushl $0 # no error code
-+ CFI_ADJUST_CFA_OFFSET 4
-+ pushl $do_divide_error
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(divide_error)
-+
-+#ifdef CONFIG_X86_MCE
-+ENTRY(machine_check)
-+ RING0_INT_FRAME
-+ pushl $0
-+ CFI_ADJUST_CFA_OFFSET 4
-+ pushl machine_check_vector
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(machine_check)
-+#endif
-+
-+ENTRY(spurious_interrupt_bug)
-+ RING0_INT_FRAME
-+ pushl $0
-+ CFI_ADJUST_CFA_OFFSET 4
-+ pushl $do_spurious_interrupt_bug
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(spurious_interrupt_bug)
-+
-+ENTRY(kernel_thread_helper)
-+ pushl $0 # fake return address for unwinder
-+ CFI_STARTPROC
-+ movl %edx,%eax
-+ push %edx
-+ CFI_ADJUST_CFA_OFFSET 4
-+ call *%ebx
-+ push %eax
-+ CFI_ADJUST_CFA_OFFSET 4
-+ call do_exit
-+ CFI_ENDPROC
-+ENDPROC(kernel_thread_helper)
-+
-+.section .rodata,"a"
-+#include "syscall_table.S"
-+
-+syscall_table_size=(.-sys_call_table)
-diff -Nurb --exclude='*.swp' --exclude=tags --exclude='*.patch' --exclude='*.diff' linux-2.6.22-580/arch/i386/mm/fault.c linux-2.6.22-590/arch/i386/mm/fault.c
---- linux-2.6.22-580/arch/i386/mm/fault.c 2009-02-18 09:56:02.000000000 -0500
-+++ linux-2.6.22-590/arch/i386/mm/fault.c 2009-02-18 09:57:23.000000000 -0500
+ call *sys_call_table(,%eax,4)
+ movl %eax,PT_EAX(%esp) # store the return value
+ syscall_exit:
+--- linux-2.6.22-590/arch/i386/mm/fault.c 2009-03-16 20:49:42.000000000 -0400
++++ linux-2.6.22-591/arch/i386/mm/fault.c 2009-03-16 20:58:59.000000000 -0400
@@ -60,6 +60,15 @@
DIE_PAGE_FAULT, &args);
}
fastcall void __kprobes do_page_fault(struct pt_regs *regs,
unsigned long error_code)
{
-diff -Nurb --exclude='*.swp' --exclude=tags --exclude='*.patch' --exclude='*.diff' linux-2.6.22-580/block/ll_rw_blk.c linux-2.6.22-590/block/ll_rw_blk.c
---- linux-2.6.22-580/block/ll_rw_blk.c 2009-02-18 09:55:48.000000000 -0500
-+++ linux-2.6.22-590/block/ll_rw_blk.c 2009-02-18 09:57:23.000000000 -0500
+--- linux-2.6.22-590/block/ll_rw_blk.c 2009-03-16 20:49:07.000000000 -0400
++++ linux-2.6.22-591/block/ll_rw_blk.c 2009-03-16 20:58:59.000000000 -0400
@@ -30,6 +30,7 @@
#include <linux/cpu.h>
#include <linux/blktrace_api.h>
ret = q->make_request_fn(q, bio);
} while (ret);
}
-diff -Nurb --exclude='*.swp' --exclude=tags --exclude='*.patch' --exclude='*.diff' linux-2.6.22-580/chopstix.S linux-2.6.22-590/chopstix.S
---- linux-2.6.22-580/chopstix.S 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.22-590/chopstix.S 2009-02-18 09:57:23.000000000 -0500
-@@ -0,0 +1,1055 @@
-+/*
-+ * linux/arch/i386/entry.S
-+ *
-+ * Copyright (C) 1991, 1992 Linus Torvalds
-+ */
-+
-+/*
-+ * entry.S contains the system-call and fault low-level handling routines.
-+ * This also contains the timer-interrupt handler, as well as all interrupts
-+ * and faults that can result in a task-switch.
-+ *
-+ * NOTE: This code handles signal-recognition, which happens every time
-+ * after a timer-interrupt and after each system call.
-+ *
-+ * I changed all the .align's to 4 (16 byte alignment), as that's faster
-+ * on a 486.
-+ *
-+ * Stack layout in 'syscall_exit':
-+ * ptrace needs to have all regs on the stack.
-+ * if the order here is changed, it needs to be
-+ * updated in fork.c:copy_process, signal.c:do_signal,
-+ * ptrace.c and ptrace.h
-+ *
-+ * 0(%esp) - %ebx
-+ * 4(%esp) - %ecx
-+ * 8(%esp) - %edx
-+ * C(%esp) - %esi
-+ * 10(%esp) - %edi
-+ * 14(%esp) - %ebp
-+ * 18(%esp) - %eax
-+ * 1C(%esp) - %ds
-+ * 20(%esp) - %es
-+ * 24(%esp) - %fs
-+ * 28(%esp) - orig_eax
-+ * 2C(%esp) - %eip
-+ * 30(%esp) - %cs
-+ * 34(%esp) - %eflags
-+ * 38(%esp) - %oldesp
-+ * 3C(%esp) - %oldss
-+ *
-+ * "current" is in register %ebx during any slow entries.
-+ */
-+
-+#include <linux/linkage.h>
-+#include <asm/thread_info.h>
-+#include <asm/irqflags.h>
-+#include <asm/errno.h>
-+#include <asm/segment.h>
-+#include <asm/smp.h>
-+#include <asm/page.h>
-+#include <asm/desc.h>
-+#include <asm/percpu.h>
-+#include <asm/dwarf2.h>
-+#include "irq_vectors.h"
-+
-+/*
-+ * We use macros for low-level operations which need to be overridden
-+ * for paravirtualization. The following will never clobber any registers:
-+ * INTERRUPT_RETURN (aka. "iret")
-+ * GET_CR0_INTO_EAX (aka. "movl %cr0, %eax")
-+ * ENABLE_INTERRUPTS_SYSEXIT (aka "sti; sysexit").
-+ *
-+ * For DISABLE_INTERRUPTS/ENABLE_INTERRUPTS (aka "cli"/"sti"), you must
-+ * specify what registers can be overwritten (CLBR_NONE, CLBR_EAX/EDX/ECX/ANY).
-+ * Allowing a register to be clobbered can shrink the paravirt replacement
-+ * enough to patch inline, increasing performance.
-+ */
-+
-+#define nr_syscalls ((syscall_table_size)/4)
+--- linux-2.6.22-590/drivers/oprofile/cpu_buffer.c 2007-07-08 19:32:17.000000000 -0400
++++ linux-2.6.22-591/drivers/oprofile/cpu_buffer.c 2009-03-16 20:58:59.000000000 -0400
+@@ -21,6 +21,7 @@
+ #include <linux/oprofile.h>
+ #include <linux/vmalloc.h>
+ #include <linux/errno.h>
++#include <linux/arrays.h>
+
+ #include "event_buffer.h"
+ #include "cpu_buffer.h"
+@@ -143,6 +144,17 @@
+ b->head_pos = 0;
+ }
+
++#ifdef CONFIG_CHOPSTIX
+
-+CF_MASK = 0x00000001
-+TF_MASK = 0x00000100
-+IF_MASK = 0x00000200
-+DF_MASK = 0x00000400
-+NT_MASK = 0x00004000
-+VM_MASK = 0x00020000
++struct event_spec {
++ unsigned int pc;
++ unsigned long dcookie;
++ unsigned count;
++};
+
-+#ifdef CONFIG_PREEMPT
-+#define preempt_stop(clobbers) DISABLE_INTERRUPTS(clobbers); TRACE_IRQS_OFF
-+#else
-+#define preempt_stop(clobbers)
-+#define resume_kernel restore_nocheck
++extern void (*rec_event)(void *,unsigned int);
+#endif
+
-+.macro TRACE_IRQS_IRET
-+#ifdef CONFIG_TRACE_IRQFLAGS
-+ testl $IF_MASK,PT_EFLAGS(%esp) # interrupts off?
-+ jz 1f
-+ TRACE_IRQS_ON
-+1:
-+#endif
-+.endm
+ static inline void
+ add_sample(struct oprofile_cpu_buffer * cpu_buf,
+ unsigned long pc, unsigned long event)
+@@ -151,6 +163,7 @@
+ entry->eip = pc;
+ entry->event = event;
+ increment_head(cpu_buf);
+
-+#ifdef CONFIG_VM86
-+#define resume_userspace_sig check_userspace
+ }
+
+ static inline void
+@@ -241,8 +254,28 @@
+ {
+ int is_kernel = !user_mode(regs);
+ unsigned long pc = profile_pc(regs);
++ int res=0;
+
++#ifdef CONFIG_CHOPSTIX
++ if (rec_event) {
++ struct event esig;
++ struct event_spec espec;
++ esig.task = current;
++ espec.pc=pc;
++ espec.count=1;
++ esig.event_data=&espec;
++ esig.event_type=event; /* index in the event array currently set up */
++ /* make sure the counters are loaded in the order we want them to show up*/
++ (*rec_event)(&esig, 1);
++ }
++ else {
+ oprofile_add_ext_sample(pc, regs, event, is_kernel);
++ }
+#else
-+#define resume_userspace_sig resume_userspace
++ oprofile_add_ext_sample(pc, regs, event, is_kernel);
+#endif
+
-+#define SAVE_ALL \
-+ cld; \
-+ pushl %fs; \
-+ CFI_ADJUST_CFA_OFFSET 4;\
-+ /*CFI_REL_OFFSET fs, 0;*/\
-+ pushl %es; \
-+ CFI_ADJUST_CFA_OFFSET 4;\
-+ /*CFI_REL_OFFSET es, 0;*/\
-+ pushl %ds; \
-+ CFI_ADJUST_CFA_OFFSET 4;\
-+ /*CFI_REL_OFFSET ds, 0;*/\
-+ pushl %eax; \
-+ CFI_ADJUST_CFA_OFFSET 4;\
-+ CFI_REL_OFFSET eax, 0;\
-+ pushl %ebp; \
-+ CFI_ADJUST_CFA_OFFSET 4;\
-+ CFI_REL_OFFSET ebp, 0;\
-+ pushl %edi; \
-+ CFI_ADJUST_CFA_OFFSET 4;\
-+ CFI_REL_OFFSET edi, 0;\
-+ pushl %esi; \
-+ CFI_ADJUST_CFA_OFFSET 4;\
-+ CFI_REL_OFFSET esi, 0;\
-+ pushl %edx; \
-+ CFI_ADJUST_CFA_OFFSET 4;\
-+ CFI_REL_OFFSET edx, 0;\
-+ pushl %ecx; \
-+ CFI_ADJUST_CFA_OFFSET 4;\
-+ CFI_REL_OFFSET ecx, 0;\
-+ pushl %ebx; \
-+ CFI_ADJUST_CFA_OFFSET 4;\
-+ CFI_REL_OFFSET ebx, 0;\
-+ movl $(__USER_DS), %edx; \
-+ movl %edx, %ds; \
-+ movl %edx, %es; \
-+ movl $(__KERNEL_PERCPU), %edx; \
-+ movl %edx, %fs
-+
-+#define RESTORE_INT_REGS \
-+ popl %ebx; \
-+ CFI_ADJUST_CFA_OFFSET -4;\
-+ CFI_RESTORE ebx;\
-+ popl %ecx; \
-+ CFI_ADJUST_CFA_OFFSET -4;\
-+ CFI_RESTORE ecx;\
-+ popl %edx; \
-+ CFI_ADJUST_CFA_OFFSET -4;\
-+ CFI_RESTORE edx;\
-+ popl %esi; \
-+ CFI_ADJUST_CFA_OFFSET -4;\
-+ CFI_RESTORE esi;\
-+ popl %edi; \
-+ CFI_ADJUST_CFA_OFFSET -4;\
-+ CFI_RESTORE edi;\
-+ popl %ebp; \
-+ CFI_ADJUST_CFA_OFFSET -4;\
-+ CFI_RESTORE ebp;\
-+ popl %eax; \
-+ CFI_ADJUST_CFA_OFFSET -4;\
-+ CFI_RESTORE eax
-+
-+#define RESTORE_REGS \
-+ RESTORE_INT_REGS; \
-+1: popl %ds; \
-+ CFI_ADJUST_CFA_OFFSET -4;\
-+ /*CFI_RESTORE ds;*/\
-+2: popl %es; \
-+ CFI_ADJUST_CFA_OFFSET -4;\
-+ /*CFI_RESTORE es;*/\
-+3: popl %fs; \
-+ CFI_ADJUST_CFA_OFFSET -4;\
-+ /*CFI_RESTORE fs;*/\
-+.pushsection .fixup,"ax"; \
-+4: movl $0,(%esp); \
-+ jmp 1b; \
-+5: movl $0,(%esp); \
-+ jmp 2b; \
-+6: movl $0,(%esp); \
-+ jmp 3b; \
-+.section __ex_table,"a";\
-+ .align 4; \
-+ .long 1b,4b; \
-+ .long 2b,5b; \
-+ .long 3b,6b; \
-+.popsection
-+
-+#define RING0_INT_FRAME \
-+ CFI_STARTPROC simple;\
-+ CFI_SIGNAL_FRAME;\
-+ CFI_DEF_CFA esp, 3*4;\
-+ /*CFI_OFFSET cs, -2*4;*/\
-+ CFI_OFFSET eip, -3*4
-+
-+#define RING0_EC_FRAME \
-+ CFI_STARTPROC simple;\
-+ CFI_SIGNAL_FRAME;\
-+ CFI_DEF_CFA esp, 4*4;\
-+ /*CFI_OFFSET cs, -2*4;*/\
-+ CFI_OFFSET eip, -3*4
-+
-+#define RING0_PTREGS_FRAME \
-+ CFI_STARTPROC simple;\
-+ CFI_SIGNAL_FRAME;\
-+ CFI_DEF_CFA esp, PT_OLDESP-PT_EBX;\
-+ /*CFI_OFFSET cs, PT_CS-PT_OLDESP;*/\
-+ CFI_OFFSET eip, PT_EIP-PT_OLDESP;\
-+ /*CFI_OFFSET es, PT_ES-PT_OLDESP;*/\
-+ /*CFI_OFFSET ds, PT_DS-PT_OLDESP;*/\
-+ CFI_OFFSET eax, PT_EAX-PT_OLDESP;\
-+ CFI_OFFSET ebp, PT_EBP-PT_OLDESP;\
-+ CFI_OFFSET edi, PT_EDI-PT_OLDESP;\
-+ CFI_OFFSET esi, PT_ESI-PT_OLDESP;\
-+ CFI_OFFSET edx, PT_EDX-PT_OLDESP;\
-+ CFI_OFFSET ecx, PT_ECX-PT_OLDESP;\
-+ CFI_OFFSET ebx, PT_EBX-PT_OLDESP
-+
-+ENTRY(ret_from_fork)
-+ CFI_STARTPROC
-+ pushl %eax
-+ CFI_ADJUST_CFA_OFFSET 4
-+ call schedule_tail
-+ GET_THREAD_INFO(%ebp)
-+ popl %eax
-+ CFI_ADJUST_CFA_OFFSET -4
-+ pushl $0x0202 # Reset kernel eflags
-+ CFI_ADJUST_CFA_OFFSET 4
-+ popfl
-+ CFI_ADJUST_CFA_OFFSET -4
-+ jmp syscall_exit
-+ CFI_ENDPROC
-+END(ret_from_fork)
-+
-+/*
-+ * Return to user mode is not as complex as all this looks,
-+ * but we want the default path for a system call return to
-+ * go as quickly as possible which is why some of this is
-+ * less clear than it otherwise should be.
-+ */
+
-+ # userspace resumption stub bypassing syscall exit tracing
-+ ALIGN
-+ RING0_PTREGS_FRAME
-+ret_from_exception:
-+ preempt_stop(CLBR_ANY)
-+ret_from_intr:
-+ GET_THREAD_INFO(%ebp)
-+check_userspace:
-+ movl PT_EFLAGS(%esp), %eax # mix EFLAGS and CS
-+ movb PT_CS(%esp), %al
-+ andl $(VM_MASK | SEGMENT_RPL_MASK), %eax
-+ cmpl $USER_RPL, %eax
-+ jb resume_kernel # not returning to v8086 or userspace
-+
-+ENTRY(resume_userspace)
-+ DISABLE_INTERRUPTS(CLBR_ANY) # make sure we don't miss an interrupt
-+ # setting need_resched or sigpending
-+ # between sampling and the iret
-+ movl TI_flags(%ebp), %ecx
-+ andl $_TIF_WORK_MASK, %ecx # is there any work to be done on
-+ # int/exception return?
-+ jne work_pending
-+ jmp restore_all
-+END(ret_from_exception)
-+
-+#ifdef CONFIG_PREEMPT
-+ENTRY(resume_kernel)
-+ DISABLE_INTERRUPTS(CLBR_ANY)
-+ cmpl $0,TI_preempt_count(%ebp) # non-zero preempt_count ?
-+ jnz restore_nocheck
-+need_resched:
-+ movl TI_flags(%ebp), %ecx # need_resched set ?
-+ testb $_TIF_NEED_RESCHED, %cl
-+ jz restore_all
-+ testl $IF_MASK,PT_EFLAGS(%esp) # interrupts off (exception path) ?
-+ jz restore_all
-+ call preempt_schedule_irq
-+ jmp need_resched
-+END(resume_kernel)
-+#endif
-+ CFI_ENDPROC
-+
-+/* SYSENTER_RETURN points to after the "sysenter" instruction in
-+ the vsyscall page. See vsyscall-sysentry.S, which defines the symbol. */
-+
-+ # sysenter call handler stub
-+ENTRY(sysenter_entry)
-+ CFI_STARTPROC simple
-+ CFI_SIGNAL_FRAME
-+ CFI_DEF_CFA esp, 0
-+ CFI_REGISTER esp, ebp
-+ movl TSS_sysenter_esp0(%esp),%esp
-+sysenter_past_esp:
-+ /*
-+ * No need to follow this irqs on/off section: the syscall
-+ * disabled irqs and here we enable it straight after entry:
-+ */
-+ ENABLE_INTERRUPTS(CLBR_NONE)
-+ pushl $(__USER_DS)
-+ CFI_ADJUST_CFA_OFFSET 4
-+ /*CFI_REL_OFFSET ss, 0*/
-+ pushl %ebp
-+ CFI_ADJUST_CFA_OFFSET 4
-+ CFI_REL_OFFSET esp, 0
-+ pushfl
-+ CFI_ADJUST_CFA_OFFSET 4
-+ pushl $(__USER_CS)
-+ CFI_ADJUST_CFA_OFFSET 4
-+ /*CFI_REL_OFFSET cs, 0*/
-+ /*
-+ * Push current_thread_info()->sysenter_return to the stack.
-+ * A tiny bit of offset fixup is necessary - 4*4 means the 4 words
-+ * pushed above; +8 corresponds to copy_thread's esp0 setting.
-+ */
-+ pushl (TI_sysenter_return-THREAD_SIZE+8+4*4)(%esp)
-+ CFI_ADJUST_CFA_OFFSET 4
-+ CFI_REL_OFFSET eip, 0
-+
-+/*
-+ * Load the potential sixth argument from user stack.
-+ * Careful about security.
-+ */
-+ cmpl $__PAGE_OFFSET-3,%ebp
-+ jae syscall_fault
-+1: movl (%ebp),%ebp
-+.section __ex_table,"a"
-+ .align 4
-+ .long 1b,syscall_fault
-+.previous
-+
-+ pushl %eax
-+ CFI_ADJUST_CFA_OFFSET 4
-+ SAVE_ALL
-+ GET_THREAD_INFO(%ebp)
-+
-+ /* Note, _TIF_SECCOMP is bit number 8, and so it needs testw and not testb */
-+ testw $(_TIF_SYSCALL_EMU|_TIF_SYSCALL_TRACE|_TIF_SECCOMP|_TIF_SYSCALL_AUDIT),TI_flags(%ebp)
-+ jnz syscall_trace_entry
-+ cmpl $(nr_syscalls), %eax
-+ jae syscall_badsys
-+ call *sys_call_table(,%eax,4)
-+ movl %eax,PT_EAX(%esp)
-+ DISABLE_INTERRUPTS(CLBR_ANY)
-+ TRACE_IRQS_OFF
-+ movl TI_flags(%ebp), %ecx
-+ testw $_TIF_ALLWORK_MASK, %cx
-+ jne syscall_exit_work
-+/* if something modifies registers it must also disable sysexit */
-+ movl PT_EIP(%esp), %edx
-+ movl PT_OLDESP(%esp), %ecx
-+ xorl %ebp,%ebp
-+ TRACE_IRQS_ON
-+1: mov PT_FS(%esp), %fs
-+ ENABLE_INTERRUPTS_SYSEXIT
-+ CFI_ENDPROC
-+.pushsection .fixup,"ax"
-+2: movl $0,PT_FS(%esp)
-+ jmp 1b
-+.section __ex_table,"a"
-+ .align 4
-+ .long 1b,2b
-+.popsection
-+ENDPROC(sysenter_entry)
-+
-+ # system call handler stub
-+ENTRY(system_call)
-+ RING0_INT_FRAME # can't unwind into user space anyway
-+ pushl %eax # save orig_eax
-+ CFI_ADJUST_CFA_OFFSET 4
-+ SAVE_ALL
-+ GET_THREAD_INFO(%ebp)
-+ # system call tracing in operation / emulation
-+ /* Note, _TIF_SECCOMP is bit number 8, and so it needs testw and not testb */
-+ testw $(_TIF_SYSCALL_EMU|_TIF_SYSCALL_TRACE|_TIF_SECCOMP|_TIF_SYSCALL_AUDIT),TI_flags(%ebp)
-+ jnz syscall_trace_entry
-+ cmpl $(nr_syscalls), %eax
-+ jae syscall_badsys
-+syscall_call:
-+ /* Move Chopstix syscall probe here */
-+ /* Save and clobber: eax, ecx, ebp */
-+ pushl %ebp
-+ movl %esp, %ebp
-+ pushl %eax
-+ pushl %ecx
-+ subl $16, %esp /*
-+ movl rec_event, %ecx
-+ testl %ecx, %ecx
-+ jz carry_on
-+ movl %eax, (SPEC_number-EVENT_SIZE)(%ebp)
-+ leal SPEC_EVENT_SIZE(%ebp), %eax
-+ movl %eax, EVENT_event_data(%ebp)
-+ GET_THREAD_INFO(%eax)
-+ movl %eax, EVENT_task(%ebp)
-+ movl $7, EVENT_event_type(%ebp)
-+ movl rec_event, %edx
-+ movl $1, 4(%esp)
-+ leal -EVENT_SIZE(%ebp), %eax
-+ movl %eax, (%esp)
-+ call rec_event_asm
-+carry_on: */
-+ addl $16, %esp
-+ popl %ecx
-+ popl %eax
-+ popl %ebp
-+ /* End chopstix */
-+
-+ call *sys_call_table(,%eax,4)
-+ movl %eax,PT_EAX(%esp) # store the return value
-+syscall_exit:
-+ DISABLE_INTERRUPTS(CLBR_ANY) # make sure we don't miss an interrupt
-+ # setting need_resched or sigpending
-+ # between sampling and the iret
-+ TRACE_IRQS_OFF
-+ testl $TF_MASK,PT_EFLAGS(%esp) # If tracing set singlestep flag on exit
-+ jz no_singlestep
-+ orl $_TIF_SINGLESTEP,TI_flags(%ebp)
-+no_singlestep:
-+ movl TI_flags(%ebp), %ecx
-+ testw $_TIF_ALLWORK_MASK, %cx # current->work
-+ jne syscall_exit_work
-+
-+restore_all:
-+ movl PT_EFLAGS(%esp), %eax # mix EFLAGS, SS and CS
-+ # Warning: PT_OLDSS(%esp) contains the wrong/random values if we
-+ # are returning to the kernel.
-+ # See comments in process.c:copy_thread() for details.
-+ movb PT_OLDSS(%esp), %ah
-+ movb PT_CS(%esp), %al
-+ andl $(VM_MASK | (SEGMENT_TI_MASK << 8) | SEGMENT_RPL_MASK), %eax
-+ cmpl $((SEGMENT_LDT << 8) | USER_RPL), %eax
-+ CFI_REMEMBER_STATE
-+ je ldt_ss # returning to user-space with LDT SS
-+restore_nocheck:
-+ TRACE_IRQS_IRET
-+restore_nocheck_notrace:
-+ RESTORE_REGS
-+ addl $4, %esp # skip orig_eax/error_code
-+ CFI_ADJUST_CFA_OFFSET -4
-+1: INTERRUPT_RETURN
-+.section .fixup,"ax"
-+iret_exc:
-+ pushl $0 # no error code
-+ pushl $do_iret_error
-+ jmp error_code
-+.previous
-+.section __ex_table,"a"
-+ .align 4
-+ .long 1b,iret_exc
-+.previous
-+
-+ CFI_RESTORE_STATE
-+ldt_ss:
-+ larl PT_OLDSS(%esp), %eax
-+ jnz restore_nocheck
-+ testl $0x00400000, %eax # returning to 32bit stack?
-+ jnz restore_nocheck # allright, normal return
-+
-+#ifdef CONFIG_PARAVIRT
-+ /*
-+ * The kernel can't run on a non-flat stack if paravirt mode
-+ * is active. Rather than try to fixup the high bits of
-+ * ESP, bypass this code entirely. This may break DOSemu
-+ * and/or Wine support in a paravirt VM, although the option
-+ * is still available to implement the setting of the high
-+ * 16-bits in the INTERRUPT_RETURN paravirt-op.
-+ */
-+ cmpl $0, paravirt_ops+PARAVIRT_enabled
-+ jne restore_nocheck
-+#endif
-+
-+ /* If returning to userspace with 16bit stack,
-+ * try to fix the higher word of ESP, as the CPU
-+ * won't restore it.
-+ * This is an "official" bug of all the x86-compatible
-+ * CPUs, which we can try to work around to make
-+ * dosemu and wine happy. */
-+ movl PT_OLDESP(%esp), %eax
-+ movl %esp, %edx
-+ call patch_espfix_desc
-+ pushl $__ESPFIX_SS
-+ CFI_ADJUST_CFA_OFFSET 4
-+ pushl %eax
-+ CFI_ADJUST_CFA_OFFSET 4
-+ DISABLE_INTERRUPTS(CLBR_EAX)
-+ TRACE_IRQS_OFF
-+ lss (%esp), %esp
-+ CFI_ADJUST_CFA_OFFSET -8
-+ jmp restore_nocheck
-+ CFI_ENDPROC
-+ENDPROC(system_call)
-+
-+ # perform work that needs to be done immediately before resumption
-+ ALIGN
-+ RING0_PTREGS_FRAME # can't unwind into user space anyway
-+work_pending:
-+ testb $_TIF_NEED_RESCHED, %cl
-+ jz work_notifysig
-+work_resched:
-+ call schedule
-+ DISABLE_INTERRUPTS(CLBR_ANY) # make sure we don't miss an interrupt
-+ # setting need_resched or sigpending
-+ # between sampling and the iret
-+ TRACE_IRQS_OFF
-+ movl TI_flags(%ebp), %ecx
-+ andl $_TIF_WORK_MASK, %ecx # is there any work to be done other
-+ # than syscall tracing?
-+ jz restore_all
-+ testb $_TIF_NEED_RESCHED, %cl
-+ jnz work_resched
-+
-+work_notifysig: # deal with pending signals and
-+ # notify-resume requests
-+#ifdef CONFIG_VM86
-+ testl $VM_MASK, PT_EFLAGS(%esp)
-+ movl %esp, %eax
-+ jne work_notifysig_v86 # returning to kernel-space or
-+ # vm86-space
-+ xorl %edx, %edx
-+ call do_notify_resume
-+ jmp resume_userspace_sig
-+
-+ ALIGN
-+work_notifysig_v86:
-+ pushl %ecx # save ti_flags for do_notify_resume
-+ CFI_ADJUST_CFA_OFFSET 4
-+ call save_v86_state # %eax contains pt_regs pointer
-+ popl %ecx
-+ CFI_ADJUST_CFA_OFFSET -4
-+ movl %eax, %esp
-+#else
-+ movl %esp, %eax
-+#endif
-+ xorl %edx, %edx
-+ call do_notify_resume
-+ jmp resume_userspace_sig
-+END(work_pending)
-+
-+ # perform syscall exit tracing
-+ ALIGN
-+syscall_trace_entry:
-+ movl $-ENOSYS,PT_EAX(%esp)
-+ movl %esp, %eax
-+ xorl %edx,%edx
-+ call do_syscall_trace
-+ cmpl $0, %eax
-+ jne resume_userspace # ret != 0 -> running under PTRACE_SYSEMU,
-+ # so must skip actual syscall
-+ movl PT_ORIG_EAX(%esp), %eax
-+ cmpl $(nr_syscalls), %eax
-+ jnae syscall_call
-+ jmp syscall_exit
-+END(syscall_trace_entry)
-+
-+ # perform syscall exit tracing
-+ ALIGN
-+syscall_exit_work:
-+ testb $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT|_TIF_SINGLESTEP), %cl
-+ jz work_pending
-+ TRACE_IRQS_ON
-+ ENABLE_INTERRUPTS(CLBR_ANY) # could let do_syscall_trace() call
-+ # schedule() instead
-+ movl %esp, %eax
-+ movl $1, %edx
-+ call do_syscall_trace
-+ jmp resume_userspace
-+END(syscall_exit_work)
-+ CFI_ENDPROC
-+
-+ RING0_INT_FRAME # can't unwind into user space anyway
-+syscall_fault:
-+ pushl %eax # save orig_eax
-+ CFI_ADJUST_CFA_OFFSET 4
-+ SAVE_ALL
-+ GET_THREAD_INFO(%ebp)
-+ movl $-EFAULT,PT_EAX(%esp)
-+ jmp resume_userspace
-+END(syscall_fault)
-+
-+syscall_badsys:
-+ movl $-ENOSYS,PT_EAX(%esp)
-+ jmp resume_userspace
-+END(syscall_badsys)
-+ CFI_ENDPROC
-+
-+#define FIXUP_ESPFIX_STACK \
-+ /* since we are on a wrong stack, we cant make it a C code :( */ \
-+ PER_CPU(gdt_page, %ebx); \
-+ GET_DESC_BASE(GDT_ENTRY_ESPFIX_SS, %ebx, %eax, %ax, %al, %ah); \
-+ addl %esp, %eax; \
-+ pushl $__KERNEL_DS; \
-+ CFI_ADJUST_CFA_OFFSET 4; \
-+ pushl %eax; \
-+ CFI_ADJUST_CFA_OFFSET 4; \
-+ lss (%esp), %esp; \
-+ CFI_ADJUST_CFA_OFFSET -8;
-+#define UNWIND_ESPFIX_STACK \
-+ movl %ss, %eax; \
-+ /* see if on espfix stack */ \
-+ cmpw $__ESPFIX_SS, %ax; \
-+ jne 27f; \
-+ movl $__KERNEL_DS, %eax; \
-+ movl %eax, %ds; \
-+ movl %eax, %es; \
-+ /* switch to normal stack */ \
-+ FIXUP_ESPFIX_STACK; \
-+27:;
-+
-+/*
-+ * Build the entry stubs and pointer table with
-+ * some assembler magic.
-+ */
-+.data
-+ENTRY(interrupt)
-+.text
-+
-+ENTRY(irq_entries_start)
-+ RING0_INT_FRAME
-+vector=0
-+.rept NR_IRQS
-+ ALIGN
-+ .if vector
-+ CFI_ADJUST_CFA_OFFSET -4
-+ .endif
-+1: pushl $~(vector)
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp common_interrupt
-+ .previous
-+ .long 1b
-+ .text
-+vector=vector+1
-+.endr
-+END(irq_entries_start)
-+
-+.previous
-+END(interrupt)
-+.previous
-+
-+/*
-+ * the CPU automatically disables interrupts when executing an IRQ vector,
-+ * so IRQ-flags tracing has to follow that:
-+ */
-+ ALIGN
-+common_interrupt:
-+ SAVE_ALL
-+ TRACE_IRQS_OFF
-+ movl %esp,%eax
-+ call do_IRQ
-+ jmp ret_from_intr
-+ENDPROC(common_interrupt)
-+ CFI_ENDPROC
-+
-+#define BUILD_INTERRUPT(name, nr) \
-+ENTRY(name) \
-+ RING0_INT_FRAME; \
-+ pushl $~(nr); \
-+ CFI_ADJUST_CFA_OFFSET 4; \
-+ SAVE_ALL; \
-+ TRACE_IRQS_OFF \
-+ movl %esp,%eax; \
-+ call smp_##name; \
-+ jmp ret_from_intr; \
-+ CFI_ENDPROC; \
-+ENDPROC(name)
-+
-+/* The include is where all of the SMP etc. interrupts come from */
-+#include "entry_arch.h"
-+
-+KPROBE_ENTRY(page_fault)
-+ RING0_EC_FRAME
-+ pushl $do_page_fault
-+ CFI_ADJUST_CFA_OFFSET 4
-+ ALIGN
-+error_code:
-+ /* the function address is in %fs's slot on the stack */
-+ pushl %es
-+ CFI_ADJUST_CFA_OFFSET 4
-+ /*CFI_REL_OFFSET es, 0*/
-+ pushl %ds
-+ CFI_ADJUST_CFA_OFFSET 4
-+ /*CFI_REL_OFFSET ds, 0*/
-+ pushl %eax
-+ CFI_ADJUST_CFA_OFFSET 4
-+ CFI_REL_OFFSET eax, 0
-+ pushl %ebp
-+ CFI_ADJUST_CFA_OFFSET 4
-+ CFI_REL_OFFSET ebp, 0
-+ pushl %edi
-+ CFI_ADJUST_CFA_OFFSET 4
-+ CFI_REL_OFFSET edi, 0
-+ pushl %esi
-+ CFI_ADJUST_CFA_OFFSET 4
-+ CFI_REL_OFFSET esi, 0
-+ pushl %edx
-+ CFI_ADJUST_CFA_OFFSET 4
-+ CFI_REL_OFFSET edx, 0
-+ pushl %ecx
-+ CFI_ADJUST_CFA_OFFSET 4
-+ CFI_REL_OFFSET ecx, 0
-+ pushl %ebx
-+ CFI_ADJUST_CFA_OFFSET 4
-+ CFI_REL_OFFSET ebx, 0
-+ cld
-+ pushl %fs
-+ CFI_ADJUST_CFA_OFFSET 4
-+ /*CFI_REL_OFFSET fs, 0*/
-+ movl $(__KERNEL_PERCPU), %ecx
-+ movl %ecx, %fs
-+ UNWIND_ESPFIX_STACK
-+ popl %ecx
-+ CFI_ADJUST_CFA_OFFSET -4
-+ /*CFI_REGISTER es, ecx*/
-+ movl PT_FS(%esp), %edi # get the function address
-+ movl PT_ORIG_EAX(%esp), %edx # get the error code
-+ movl $-1, PT_ORIG_EAX(%esp) # no syscall to restart
-+ mov %ecx, PT_FS(%esp)
-+ /*CFI_REL_OFFSET fs, ES*/
-+ movl $(__USER_DS), %ecx
-+ movl %ecx, %ds
-+ movl %ecx, %es
-+ movl %esp,%eax # pt_regs pointer
-+ call *%edi
-+ jmp ret_from_exception
-+ CFI_ENDPROC
-+KPROBE_END(page_fault)
-+
-+ENTRY(coprocessor_error)
-+ RING0_INT_FRAME
-+ pushl $0
-+ CFI_ADJUST_CFA_OFFSET 4
-+ pushl $do_coprocessor_error
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(coprocessor_error)
-+
-+ENTRY(simd_coprocessor_error)
-+ RING0_INT_FRAME
-+ pushl $0
-+ CFI_ADJUST_CFA_OFFSET 4
-+ pushl $do_simd_coprocessor_error
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(simd_coprocessor_error)
-+
-+ENTRY(device_not_available)
-+ RING0_INT_FRAME
-+ pushl $-1 # mark this as an int
-+ CFI_ADJUST_CFA_OFFSET 4
-+ SAVE_ALL
-+ GET_CR0_INTO_EAX
-+ testl $0x4, %eax # EM (math emulation bit)
-+ jne device_not_available_emulate
-+ preempt_stop(CLBR_ANY)
-+ call math_state_restore
-+ jmp ret_from_exception
-+device_not_available_emulate:
-+ pushl $0 # temporary storage for ORIG_EIP
-+ CFI_ADJUST_CFA_OFFSET 4
-+ call math_emulate
-+ addl $4, %esp
-+ CFI_ADJUST_CFA_OFFSET -4
-+ jmp ret_from_exception
-+ CFI_ENDPROC
-+END(device_not_available)
-+
-+/*
-+ * Debug traps and NMI can happen at the one SYSENTER instruction
-+ * that sets up the real kernel stack. Check here, since we can't
-+ * allow the wrong stack to be used.
-+ *
-+ * "TSS_sysenter_esp0+12" is because the NMI/debug handler will have
-+ * already pushed 3 words if it hits on the sysenter instruction:
-+ * eflags, cs and eip.
-+ *
-+ * We just load the right stack, and push the three (known) values
-+ * by hand onto the new stack - while updating the return eip past
-+ * the instruction that would have done it for sysenter.
-+ */
-+#define FIX_STACK(offset, ok, label) \
-+ cmpw $__KERNEL_CS,4(%esp); \
-+ jne ok; \
-+label: \
-+ movl TSS_sysenter_esp0+offset(%esp),%esp; \
-+ CFI_DEF_CFA esp, 0; \
-+ CFI_UNDEFINED eip; \
-+ pushfl; \
-+ CFI_ADJUST_CFA_OFFSET 4; \
-+ pushl $__KERNEL_CS; \
-+ CFI_ADJUST_CFA_OFFSET 4; \
-+ pushl $sysenter_past_esp; \
-+ CFI_ADJUST_CFA_OFFSET 4; \
-+ CFI_REL_OFFSET eip, 0
-+
-+KPROBE_ENTRY(debug)
-+ RING0_INT_FRAME
-+ cmpl $sysenter_entry,(%esp)
-+ jne debug_stack_correct
-+ FIX_STACK(12, debug_stack_correct, debug_esp_fix_insn)
-+debug_stack_correct:
-+ pushl $-1 # mark this as an int
-+ CFI_ADJUST_CFA_OFFSET 4
-+ SAVE_ALL
-+ xorl %edx,%edx # error code 0
-+ movl %esp,%eax # pt_regs pointer
-+ call do_debug
-+ jmp ret_from_exception
-+ CFI_ENDPROC
-+KPROBE_END(debug)
-+
-+/*
-+ * NMI is doubly nasty. It can happen _while_ we're handling
-+ * a debug fault, and the debug fault hasn't yet been able to
-+ * clear up the stack. So we first check whether we got an
-+ * NMI on the sysenter entry path, but after that we need to
-+ * check whether we got an NMI on the debug path where the debug
-+ * fault happened on the sysenter path.
-+ */
-+KPROBE_ENTRY(nmi)
-+ RING0_INT_FRAME
-+ pushl %eax
-+ CFI_ADJUST_CFA_OFFSET 4
-+ movl %ss, %eax
-+ cmpw $__ESPFIX_SS, %ax
-+ popl %eax
-+ CFI_ADJUST_CFA_OFFSET -4
-+ je nmi_espfix_stack
-+ cmpl $sysenter_entry,(%esp)
-+ je nmi_stack_fixup
-+ pushl %eax
-+ CFI_ADJUST_CFA_OFFSET 4
-+ movl %esp,%eax
-+ /* Do not access memory above the end of our stack page,
-+ * it might not exist.
-+ */
-+ andl $(THREAD_SIZE-1),%eax
-+ cmpl $(THREAD_SIZE-20),%eax
-+ popl %eax
-+ CFI_ADJUST_CFA_OFFSET -4
-+ jae nmi_stack_correct
-+ cmpl $sysenter_entry,12(%esp)
-+ je nmi_debug_stack_check
-+nmi_stack_correct:
-+ /* We have a RING0_INT_FRAME here */
-+ pushl %eax
-+ CFI_ADJUST_CFA_OFFSET 4
-+ SAVE_ALL
-+ xorl %edx,%edx # zero error code
-+ movl %esp,%eax # pt_regs pointer
-+ call do_nmi
-+ jmp restore_nocheck_notrace
-+ CFI_ENDPROC
-+
-+nmi_stack_fixup:
-+ RING0_INT_FRAME
-+ FIX_STACK(12,nmi_stack_correct, 1)
-+ jmp nmi_stack_correct
-+
-+nmi_debug_stack_check:
-+ /* We have a RING0_INT_FRAME here */
-+ cmpw $__KERNEL_CS,16(%esp)
-+ jne nmi_stack_correct
-+ cmpl $debug,(%esp)
-+ jb nmi_stack_correct
-+ cmpl $debug_esp_fix_insn,(%esp)
-+ ja nmi_stack_correct
-+ FIX_STACK(24,nmi_stack_correct, 1)
-+ jmp nmi_stack_correct
-+
-+nmi_espfix_stack:
-+ /* We have a RING0_INT_FRAME here.
-+ *
-+ * create the pointer to lss back
-+ */
-+ pushl %ss
-+ CFI_ADJUST_CFA_OFFSET 4
-+ pushl %esp
-+ CFI_ADJUST_CFA_OFFSET 4
-+ addw $4, (%esp)
-+ /* copy the iret frame of 12 bytes */
-+ .rept 3
-+ pushl 16(%esp)
-+ CFI_ADJUST_CFA_OFFSET 4
-+ .endr
-+ pushl %eax
-+ CFI_ADJUST_CFA_OFFSET 4
-+ SAVE_ALL
-+ FIXUP_ESPFIX_STACK # %eax == %esp
-+ xorl %edx,%edx # zero error code
-+ call do_nmi
-+ RESTORE_REGS
-+ lss 12+4(%esp), %esp # back to espfix stack
-+ CFI_ADJUST_CFA_OFFSET -24
-+1: INTERRUPT_RETURN
-+ CFI_ENDPROC
-+.section __ex_table,"a"
-+ .align 4
-+ .long 1b,iret_exc
-+.previous
-+KPROBE_END(nmi)
-+
-+#ifdef CONFIG_PARAVIRT
-+ENTRY(native_iret)
-+1: iret
-+.section __ex_table,"a"
-+ .align 4
-+ .long 1b,iret_exc
-+.previous
-+END(native_iret)
-+
-+ENTRY(native_irq_enable_sysexit)
-+ sti
-+ sysexit
-+END(native_irq_enable_sysexit)
-+#endif
-+
-+KPROBE_ENTRY(int3)
-+ RING0_INT_FRAME
-+ pushl $-1 # mark this as an int
-+ CFI_ADJUST_CFA_OFFSET 4
-+ SAVE_ALL
-+ xorl %edx,%edx # zero error code
-+ movl %esp,%eax # pt_regs pointer
-+ call do_int3
-+ jmp ret_from_exception
-+ CFI_ENDPROC
-+KPROBE_END(int3)
-+
-+ENTRY(overflow)
-+ RING0_INT_FRAME
-+ pushl $0
-+ CFI_ADJUST_CFA_OFFSET 4
-+ pushl $do_overflow
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(overflow)
-+
-+ENTRY(bounds)
-+ RING0_INT_FRAME
-+ pushl $0
-+ CFI_ADJUST_CFA_OFFSET 4
-+ pushl $do_bounds
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(bounds)
-+
-+ENTRY(invalid_op)
-+ RING0_INT_FRAME
-+ pushl $0
-+ CFI_ADJUST_CFA_OFFSET 4
-+ pushl $do_invalid_op
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(invalid_op)
-+
-+ENTRY(coprocessor_segment_overrun)
-+ RING0_INT_FRAME
-+ pushl $0
-+ CFI_ADJUST_CFA_OFFSET 4
-+ pushl $do_coprocessor_segment_overrun
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(coprocessor_segment_overrun)
-+
-+ENTRY(invalid_TSS)
-+ RING0_EC_FRAME
-+ pushl $do_invalid_TSS
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(invalid_TSS)
-+
-+ENTRY(segment_not_present)
-+ RING0_EC_FRAME
-+ pushl $do_segment_not_present
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(segment_not_present)
-+
-+ENTRY(stack_segment)
-+ RING0_EC_FRAME
-+ pushl $do_stack_segment
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(stack_segment)
-+
-+KPROBE_ENTRY(general_protection)
-+ RING0_EC_FRAME
-+ pushl $do_general_protection
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+KPROBE_END(general_protection)
-+
-+ENTRY(alignment_check)
-+ RING0_EC_FRAME
-+ pushl $do_alignment_check
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(alignment_check)
-+
-+ENTRY(divide_error)
-+ RING0_INT_FRAME
-+ pushl $0 # no error code
-+ CFI_ADJUST_CFA_OFFSET 4
-+ pushl $do_divide_error
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(divide_error)
-+
-+#ifdef CONFIG_X86_MCE
-+ENTRY(machine_check)
-+ RING0_INT_FRAME
-+ pushl $0
-+ CFI_ADJUST_CFA_OFFSET 4
-+ pushl machine_check_vector
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(machine_check)
-+#endif
-+
-+ENTRY(spurious_interrupt_bug)
-+ RING0_INT_FRAME
-+ pushl $0
-+ CFI_ADJUST_CFA_OFFSET 4
-+ pushl $do_spurious_interrupt_bug
-+ CFI_ADJUST_CFA_OFFSET 4
-+ jmp error_code
-+ CFI_ENDPROC
-+END(spurious_interrupt_bug)
-+
-+ENTRY(kernel_thread_helper)
-+ pushl $0 # fake return address for unwinder
-+ CFI_STARTPROC
-+ movl %edx,%eax
-+ push %edx
-+ CFI_ADJUST_CFA_OFFSET 4
-+ call *%ebx
-+ push %eax
-+ CFI_ADJUST_CFA_OFFSET 4
-+ call do_exit
-+ CFI_ENDPROC
-+ENDPROC(kernel_thread_helper)
-+
-+.section .rodata,"a"
-+#include "syscall_table.S"
-+
-+syscall_table_size=(.-sys_call_table)
-diff -Nurb --exclude='*.swp' --exclude=tags --exclude='*.patch' --exclude='*.diff' linux-2.6.22-580/drivers/oprofile/cpu_buffer.c linux-2.6.22-590/drivers/oprofile/cpu_buffer.c
---- linux-2.6.22-580/drivers/oprofile/cpu_buffer.c 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22-590/drivers/oprofile/cpu_buffer.c 2009-02-18 09:57:23.000000000 -0500
-@@ -21,6 +21,7 @@
- #include <linux/oprofile.h>
- #include <linux/vmalloc.h>
- #include <linux/errno.h>
-+#include <linux/arrays.h>
-
- #include "event_buffer.h"
- #include "cpu_buffer.h"
-@@ -143,6 +144,17 @@
- b->head_pos = 0;
- }
-
-+#ifdef CONFIG_CHOPSTIX
-+
-+struct event_spec {
-+ unsigned int pc;
-+ unsigned long dcookie;
-+ unsigned count;
-+};
-+
-+extern void (*rec_event)(void *,unsigned int);
-+#endif
-+
- static inline void
- add_sample(struct oprofile_cpu_buffer * cpu_buf,
- unsigned long pc, unsigned long event)
-@@ -151,6 +163,7 @@
- entry->eip = pc;
- entry->event = event;
- increment_head(cpu_buf);
-+
- }
-
- static inline void
-@@ -241,8 +254,28 @@
- {
- int is_kernel = !user_mode(regs);
- unsigned long pc = profile_pc(regs);
-+ int res=0;
-
-+#ifdef CONFIG_CHOPSTIX
-+ if (rec_event) {
-+ struct event esig;
-+ struct event_spec espec;
-+ esig.task = current;
-+ espec.pc=pc;
-+ espec.count=1;
-+ esig.event_data=&espec;
-+ esig.event_type=event; /* index in the event array currently set up */
-+ /* make sure the counters are loaded in the order we want them to show up*/
-+ (*rec_event)(&esig, 1);
-+ }
-+ else {
- oprofile_add_ext_sample(pc, regs, event, is_kernel);
-+ }
-+#else
-+ oprofile_add_ext_sample(pc, regs, event, is_kernel);
-+#endif
-+
-+
- }
-
- void oprofile_add_pc(unsigned long pc, int is_kernel, unsigned long event)
-diff -Nurb --exclude='*.swp' --exclude=tags --exclude='*.patch' --exclude='*.diff' linux-2.6.22-580/evsend.S linux-2.6.22-590/evsend.S
---- linux-2.6.22-580/evsend.S 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.22-590/evsend.S 2009-02-18 09:57:23.000000000 -0500
-@@ -0,0 +1,51 @@
-+ .file "evsend.c"
-+.globl num
-+ .data
-+ .align 4
-+ .type num, @object
-+ .size num, 4
-+num:
-+ .long 5
-+ .text
-+.globl main
-+ .type main, @function
-+main:
-+ leal 4(%esp), %ecx
-+ andl $-16, %esp
-+ pushl -4(%ecx)
-+ pushl %ebp
-+ movl %esp, %ebp
-+ pushl %ecx
-+ subl $68, %esp
-+ movl rec_event, %eax
-+ testl %eax, %eax
-+ je .L5
-+ movl num, %eax
-+ movzwl %ax, %eax
-+ movw %ax, -36(%ebp)
-+ movl current, %eax
-+ movl (%eax), %eax
-+ andl $4096, %eax
-+ movl %eax, -8(%ebp)
-+ leal -48(%ebp), %eax
-+ movl %eax, -24(%ebp)
-+ movl current, %eax
-+ movl %eax, -12(%ebp)
-+ movl -8(%ebp), %eax
-+ movl %eax, -48(%ebp)
-+ movl $7, -16(%ebp)
-+ movl rec_event, %edx
-+ movl $1, 4(%esp)
-+ leal -32(%ebp), %eax
-+ movl %eax, (%esp)
-+ call *%edx
-+.L5:
-+ addl $68, %esp
-+ popl %ecx
-+ popl %ebp
-+ leal -4(%ecx), %esp
-+ ret
-+ .size main, .-main
-+ .comm current,4,4
-+ .ident "GCC: (GNU) 4.1.1 (Gentoo 4.1.1-r3)"
-+ .section .note.GNU-stack,"",@progbits
-diff -Nurb --exclude='*.swp' --exclude=tags --exclude='*.patch' --exclude='*.diff' linux-2.6.22-580/evsend.c linux-2.6.22-590/evsend.c
---- linux-2.6.22-580/evsend.c 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.22-590/evsend.c 2009-02-18 09:57:23.000000000 -0500
-@@ -0,0 +1,43 @@
-+#include <linux/list.h>
-+
-+extern void (*rec_event)(void *,unsigned int);
-+struct event_spec {
-+ unsigned long pc;
-+ unsigned long dcookie;
-+ unsigned count;
-+ unsigned short number;
-+};
-+
-+struct event {
-+ struct list_head link;
-+ void *event_data;
-+ unsigned int count;
-+ unsigned int event_type;
-+ struct task_struct *task;
-+};
-+
-+int num=5;
-+
-+struct task_struct {
-+ struct thread_type {
-+ unsigned esp;
-+ } thread;
-+} *current;
-+
-+int main() {
-+ if (rec_event) {
-+ struct event event;
-+ struct event_spec espec;
-+ unsigned long eip;
-+
-+ espec.number = num;
-+ eip = current->thread.esp & 4096;
-+ event.event_data=&espec;
-+ event.task=current;
-+ espec.pc=eip;
-+ event.event_type=7;
-+ /* index in the event array currently set up */
-+ /* make sure the counters are loaded in the order we want them to show up*/
-+ (*rec_event)(&event, 1);
-+ }
-+}
-diff -Nurb --exclude='*.swp' --exclude=tags --exclude='*.patch' --exclude='*.diff' linux-2.6.22-580/fs/bio.c linux-2.6.22-590/fs/bio.c
---- linux-2.6.22-580/fs/bio.c 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22-590/fs/bio.c 2009-02-18 09:57:23.000000000 -0500
-@@ -27,6 +27,7 @@
- #include <linux/workqueue.h>
- #include <linux/blktrace_api.h>
- #include <scsi/sg.h> /* for struct sg_iovec */
-+#include <linux/arrays.h>
-
- #define BIO_POOL_SIZE 2
-
-@@ -47,6 +48,7 @@
- struct kmem_cache *slab;
- };
-
+ }
+
+ void oprofile_add_pc(unsigned long pc, int is_kernel, unsigned long event)
+--- linux-2.6.22-590/fs/bio.c 2007-07-08 19:32:17.000000000 -0400
++++ linux-2.6.22-591/fs/bio.c 2009-03-16 20:58:59.000000000 -0400
+@@ -27,6 +27,7 @@
+ #include <linux/workqueue.h>
+ #include <linux/blktrace_api.h>
+ #include <scsi/sg.h> /* for struct sg_iovec */
++#include <linux/arrays.h>
+
+ #define BIO_POOL_SIZE 2
+
+@@ -47,6 +48,7 @@
+ struct kmem_cache *slab;
+ };
+
+
/*
* if you change this list, also change bvec_alloc or things will
if (bio->bi_end_io)
bio->bi_end_io(bio, bytes_done, error);
}
-diff -Nurb --exclude='*.swp' --exclude=tags --exclude='*.patch' --exclude='*.diff' linux-2.6.22-580/fs/exec.c linux-2.6.22-590/fs/exec.c
---- linux-2.6.22-580/fs/exec.c 2009-02-18 09:56:02.000000000 -0500
-+++ linux-2.6.22-590/fs/exec.c 2009-02-18 09:57:23.000000000 -0500
+--- linux-2.6.22-580/fs/exec.c 2009-04-08 16:36:16.000000000 -0400
++++ linux-2.6.22-590/fs/exec.c 2009-04-08 16:40:34.000000000 -0400
@@ -27,6 +27,7 @@
#include <linux/mman.h>
#include <linux/a.out.h>
#include <linux/module.h>
#include <linux/namei.h>
#include <linux/proc_fs.h>
-@@ -488,6 +489,12 @@
+@@ -488,6 +489,13 @@
if (!err) {
struct inode *inode = nd.dentry->d_inode;
+#ifdef CONFIG_CHOPSTIX
+ unsigned long cookie;
-+ if (!nd.dentry->d_cookie)
++ extern void (*rec_event)(void *, unsigned int);
++ if (rec_event && !nd.dentry->d_cookie)
+ get_dcookie(nd.dentry, nd.mnt, &cookie);
+#endif
+
file = ERR_PTR(-EACCES);
if (!(nd.mnt->mnt_flags & MNT_NOEXEC) &&
S_ISREG(inode->i_mode)) {
-@@ -627,8 +634,10 @@
+@@ -627,8 +635,10 @@
* Reparenting needs write_lock on tasklist_lock,
* so it is safe to do it under read_lock.
*/
zap_other_threads(tsk);
read_unlock(&tasklist_lock);
-diff -Nurb --exclude='*.swp' --exclude=tags --exclude='*.patch' --exclude='*.diff' linux-2.6.22-580/fs/exec.c.orig linux-2.6.22-590/fs/exec.c.orig
---- linux-2.6.22-580/fs/exec.c.orig 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.22-590/fs/exec.c.orig 2009-02-18 09:56:02.000000000 -0500
-@@ -0,0 +1,1590 @@
-+/*
-+ * linux/fs/exec.c
-+ *
-+ * Copyright (C) 1991, 1992 Linus Torvalds
-+ */
-+
-+/*
-+ * #!-checking implemented by tytso.
-+ */
-+/*
-+ * Demand-loading implemented 01.12.91 - no need to read anything but
-+ * the header into memory. The inode of the executable is put into
-+ * "current->executable", and page faults do the actual loading. Clean.
-+ *
-+ * Once more I can proudly say that linux stood up to being changed: it
-+ * was less than 2 hours work to get demand-loading completely implemented.
-+ *
-+ * Demand loading changed July 1993 by Eric Youngdale. Use mmap instead,
-+ * current->executable is only used by the procfs. This allows a dispatch
-+ * table to check for several different types of binary formats. We keep
-+ * trying until we recognize the file or we run out of supported binary
-+ * formats.
-+ */
-+
-+#include <linux/slab.h>
-+#include <linux/file.h>
-+#include <linux/mman.h>
-+#include <linux/a.out.h>
-+#include <linux/stat.h>
-+#include <linux/fcntl.h>
-+#include <linux/smp_lock.h>
-+#include <linux/init.h>
-+#include <linux/pagemap.h>
-+#include <linux/highmem.h>
-+#include <linux/spinlock.h>
-+#include <linux/key.h>
-+#include <linux/personality.h>
-+#include <linux/binfmts.h>
-+#include <linux/swap.h>
-+#include <linux/utsname.h>
-+#include <linux/pid_namespace.h>
-+#include <linux/module.h>
-+#include <linux/namei.h>
-+#include <linux/proc_fs.h>
-+#include <linux/ptrace.h>
-+#include <linux/mount.h>
-+#include <linux/security.h>
-+#include <linux/syscalls.h>
-+#include <linux/rmap.h>
-+#include <linux/tsacct_kern.h>
-+#include <linux/cn_proc.h>
-+#include <linux/audit.h>
-+#include <linux/signalfd.h>
-+#include <linux/vs_memory.h>
-+
-+#include <asm/uaccess.h>
-+#include <asm/mmu_context.h>
-+
-+#ifdef CONFIG_KMOD
-+#include <linux/kmod.h>
-+#endif
-+
-+int core_uses_pid;
-+char core_pattern[CORENAME_MAX_SIZE] = "core";
-+int suid_dumpable = 0;
-+
-+EXPORT_SYMBOL(suid_dumpable);
-+/* The maximal length of core_pattern is also specified in sysctl.c */
-+
-+static struct linux_binfmt *formats;
-+static DEFINE_RWLOCK(binfmt_lock);
-+
-+int register_binfmt(struct linux_binfmt * fmt)
-+{
-+ struct linux_binfmt ** tmp = &formats;
+--- linux-2.6.22-590/include/linux/arrays.h 1969-12-31 19:00:00.000000000 -0500
++++ linux-2.6.22-591/include/linux/arrays.h 2009-03-16 20:58:59.000000000 -0400
+@@ -0,0 +1,36 @@
++#ifndef __ARRAYS_H__
++#define __ARRAYS_H__
++#include <linux/list.h>
+
-+ if (!fmt)
-+ return -EINVAL;
-+ if (fmt->next)
-+ return -EBUSY;
-+ write_lock(&binfmt_lock);
-+ while (*tmp) {
-+ if (fmt == *tmp) {
-+ write_unlock(&binfmt_lock);
-+ return -EBUSY;
-+ }
-+ tmp = &(*tmp)->next;
-+ }
-+ fmt->next = formats;
-+ formats = fmt;
-+ write_unlock(&binfmt_lock);
-+ return 0;
-+}
++#define SAMPLING_METHOD_DEFAULT 0
++#define SAMPLING_METHOD_LOG 1
+
-+EXPORT_SYMBOL(register_binfmt);
++/* Every probe has an array handler */
+
-+int unregister_binfmt(struct linux_binfmt * fmt)
-+{
-+ struct linux_binfmt ** tmp = &formats;
++/* XXX - Optimize this structure */
+
-+ write_lock(&binfmt_lock);
-+ while (*tmp) {
-+ if (fmt == *tmp) {
-+ *tmp = fmt->next;
-+ fmt->next = NULL;
-+ write_unlock(&binfmt_lock);
-+ return 0;
-+ }
-+ tmp = &(*tmp)->next;
-+ }
-+ write_unlock(&binfmt_lock);
-+ return -EINVAL;
-+}
++extern void (*rec_event)(void *,unsigned int);
++struct array_handler {
++ struct list_head link;
++ unsigned int (*hash_func)(void *);
++ unsigned int (*sampling_func)(void *,int,void *);
++ unsigned short size;
++ unsigned int threshold;
++ unsigned char **expcount;
++ unsigned int sampling_method;
++ unsigned int **arrays;
++ unsigned int arraysize;
++ unsigned int num_samples[2];
++ void **epoch_samples; /* size-sized lists of samples */
++ unsigned int (*serialize)(void *, void *);
++ unsigned char code[5];
++};
+
-+EXPORT_SYMBOL(unregister_binfmt);
++struct event {
++ struct list_head link;
++ void *event_data;
++ unsigned int count;
++ unsigned int event_type;
++ struct task_struct *task;
++};
++#endif
+--- linux-2.6.22-590/include/linux/mutex.h 2007-07-08 19:32:17.000000000 -0400
++++ linux-2.6.22-591/include/linux/mutex.h 2009-03-16 20:58:59.000000000 -0400
+@@ -53,6 +53,10 @@
+ struct thread_info *owner;
+ const char *name;
+ void *magic;
++#else
++#ifdef CONFIG_CHOPSTIX
++ struct thread_info *owner;
++#endif
+ #endif
+ #ifdef CONFIG_DEBUG_LOCK_ALLOC
+ struct lockdep_map dep_map;
+--- linux-2.6.22-590/include/linux/sched.h 2009-03-16 20:49:42.000000000 -0400
++++ linux-2.6.22-591/include/linux/sched.h 2009-03-16 20:58:59.000000000 -0400
+@@ -850,6 +850,10 @@
+ #endif
+ unsigned long sleep_avg;
+ unsigned long long timestamp, last_ran;
++#ifdef CONFIG_CHOPSTIX
++ unsigned long last_interrupted, last_ran_j;
++#endif
+
-+static inline void put_binfmt(struct linux_binfmt * fmt)
-+{
-+ module_put(fmt->module);
-+}
+ unsigned long long sched_time; /* sched_clock time spent running */
+ enum sleep_type sleep_type;
+
+--- linux-2.6.22-590/kernel/mutex.c 2007-07-08 19:32:17.000000000 -0400
++++ linux-2.6.22-591/kernel/mutex.c 2009-03-16 20:58:59.000000000 -0400
+@@ -18,6 +18,17 @@
+ #include <linux/spinlock.h>
+ #include <linux/interrupt.h>
+ #include <linux/debug_locks.h>
++#include <linux/arrays.h>
+
-+/*
-+ * Note that a shared library must be both readable and executable due to
-+ * security reasons.
-+ *
-+ * Also note that we take the address to load from from the file itself.
-+ */
-+asmlinkage long sys_uselib(const char __user * library)
-+{
-+ struct file * file;
-+ struct nameidata nd;
-+ int error;
-+
-+ error = __user_path_lookup_open(library, LOOKUP_FOLLOW, &nd, FMODE_READ|FMODE_EXEC);
-+ if (error)
-+ goto out;
-+
-+ error = -EACCES;
-+ if (nd.mnt->mnt_flags & MNT_NOEXEC)
-+ goto exit;
-+ error = -EINVAL;
-+ if (!S_ISREG(nd.dentry->d_inode->i_mode))
-+ goto exit;
-+
-+ error = vfs_permission(&nd, MAY_READ | MAY_EXEC);
-+ if (error)
-+ goto exit;
-+
-+ file = nameidata_to_filp(&nd, O_RDONLY);
-+ error = PTR_ERR(file);
-+ if (IS_ERR(file))
-+ goto out;
-+
-+ error = -ENOEXEC;
-+ if(file->f_op) {
-+ struct linux_binfmt * fmt;
-+
-+ read_lock(&binfmt_lock);
-+ for (fmt = formats ; fmt ; fmt = fmt->next) {
-+ if (!fmt->load_shlib)
-+ continue;
-+ if (!try_module_get(fmt->module))
-+ continue;
-+ read_unlock(&binfmt_lock);
-+ error = fmt->load_shlib(file);
-+ read_lock(&binfmt_lock);
-+ put_binfmt(fmt);
-+ if (error != -ENOEXEC)
-+ break;
-+ }
-+ read_unlock(&binfmt_lock);
-+ }
-+ fput(file);
-+out:
-+ return error;
-+exit:
-+ release_open_intent(&nd);
-+ path_release(&nd);
-+ goto out;
-+}
-+
-+/*
-+ * count() counts the number of strings in array ARGV.
-+ */
-+static int count(char __user * __user * argv, int max)
-+{
-+ int i = 0;
-+
-+ if (argv != NULL) {
-+ for (;;) {
-+ char __user * p;
-+
-+ if (get_user(p, argv))
-+ return -EFAULT;
-+ if (!p)
-+ break;
-+ argv++;
-+ if(++i > max)
-+ return -E2BIG;
-+ cond_resched();
-+ }
-+ }
-+ return i;
-+}
-+
-+/*
-+ * 'copy_strings()' copies argument/environment strings from user
-+ * memory to free pages in kernel mem. These are in a format ready
-+ * to be put directly into the top of new user memory.
-+ */
-+static int copy_strings(int argc, char __user * __user * argv,
-+ struct linux_binprm *bprm)
-+{
-+ struct page *kmapped_page = NULL;
-+ char *kaddr = NULL;
-+ int ret;
-+
-+ while (argc-- > 0) {
-+ char __user *str;
-+ int len;
-+ unsigned long pos;
-+
-+ if (get_user(str, argv+argc) ||
-+ !(len = strnlen_user(str, bprm->p))) {
-+ ret = -EFAULT;
-+ goto out;
-+ }
-+
-+ if (bprm->p < len) {
-+ ret = -E2BIG;
-+ goto out;
-+ }
-+
-+ bprm->p -= len;
-+ /* XXX: add architecture specific overflow check here. */
-+ pos = bprm->p;
-+
-+ while (len > 0) {
-+ int i, new, err;
-+ int offset, bytes_to_copy;
-+ struct page *page;
-+
-+ offset = pos % PAGE_SIZE;
-+ i = pos/PAGE_SIZE;
-+ page = bprm->page[i];
-+ new = 0;
-+ if (!page) {
-+ page = alloc_page(GFP_HIGHUSER);
-+ bprm->page[i] = page;
-+ if (!page) {
-+ ret = -ENOMEM;
-+ goto out;
-+ }
-+ new = 1;
-+ }
-+
-+ if (page != kmapped_page) {
-+ if (kmapped_page)
-+ kunmap(kmapped_page);
-+ kmapped_page = page;
-+ kaddr = kmap(kmapped_page);
-+ }
-+ if (new && offset)
-+ memset(kaddr, 0, offset);
-+ bytes_to_copy = PAGE_SIZE - offset;
-+ if (bytes_to_copy > len) {
-+ bytes_to_copy = len;
-+ if (new)
-+ memset(kaddr+offset+len, 0,
-+ PAGE_SIZE-offset-len);
-+ }
-+ err = copy_from_user(kaddr+offset, str, bytes_to_copy);
-+ if (err) {
-+ ret = -EFAULT;
-+ goto out;
-+ }
-+
-+ pos += bytes_to_copy;
-+ str += bytes_to_copy;
-+ len -= bytes_to_copy;
-+ }
-+ }
-+ ret = 0;
-+out:
-+ if (kmapped_page)
-+ kunmap(kmapped_page);
-+ return ret;
-+}
-+
-+/*
-+ * Like copy_strings, but get argv and its values from kernel memory.
-+ */
-+int copy_strings_kernel(int argc,char ** argv, struct linux_binprm *bprm)
-+{
-+ int r;
-+ mm_segment_t oldfs = get_fs();
-+ set_fs(KERNEL_DS);
-+ r = copy_strings(argc, (char __user * __user *)argv, bprm);
-+ set_fs(oldfs);
-+ return r;
-+}
-+
-+EXPORT_SYMBOL(copy_strings_kernel);
-+
-+#ifdef CONFIG_MMU
-+/*
-+ * This routine is used to map in a page into an address space: needed by
-+ * execve() for the initial stack and environment pages.
-+ *
-+ * vma->vm_mm->mmap_sem is held for writing.
-+ */
-+void install_arg_page(struct vm_area_struct *vma,
-+ struct page *page, unsigned long address)
-+{
-+ struct mm_struct *mm = vma->vm_mm;
-+ pte_t * pte;
-+ spinlock_t *ptl;
-+
-+ if (unlikely(anon_vma_prepare(vma)))
-+ goto out;
-+
-+ flush_dcache_page(page);
-+ pte = get_locked_pte(mm, address, &ptl);
-+ if (!pte)
-+ goto out;
-+ if (!pte_none(*pte)) {
-+ pte_unmap_unlock(pte, ptl);
-+ goto out;
-+ }
-+ inc_mm_counter(mm, anon_rss);
-+ lru_cache_add_active(page);
-+ set_pte_at(mm, address, pte, pte_mkdirty(pte_mkwrite(mk_pte(
-+ page, vma->vm_page_prot))));
-+ page_add_new_anon_rmap(page, vma, address);
-+ pte_unmap_unlock(pte, ptl);
-+
-+ /* no need for flush_tlb */
-+ return;
-+out:
-+ __free_page(page);
-+ force_sig(SIGKILL, current);
-+}
-+
-+#define EXTRA_STACK_VM_PAGES 20 /* random */
-+
-+int setup_arg_pages(struct linux_binprm *bprm,
-+ unsigned long stack_top,
-+ int executable_stack)
-+{
-+ unsigned long stack_base;
-+ struct vm_area_struct *mpnt;
-+ struct mm_struct *mm = current->mm;
-+ int i, ret;
-+ long arg_size;
-+
-+#ifdef CONFIG_STACK_GROWSUP
-+ /* Move the argument and environment strings to the bottom of the
-+ * stack space.
-+ */
-+ int offset, j;
-+ char *to, *from;
-+
-+ /* Start by shifting all the pages down */
-+ i = 0;
-+ for (j = 0; j < MAX_ARG_PAGES; j++) {
-+ struct page *page = bprm->page[j];
-+ if (!page)
-+ continue;
-+ bprm->page[i++] = page;
-+ }
-+
-+ /* Now move them within their pages */
-+ offset = bprm->p % PAGE_SIZE;
-+ to = kmap(bprm->page[0]);
-+ for (j = 1; j < i; j++) {
-+ memmove(to, to + offset, PAGE_SIZE - offset);
-+ from = kmap(bprm->page[j]);
-+ memcpy(to + PAGE_SIZE - offset, from, offset);
-+ kunmap(bprm->page[j - 1]);
-+ to = from;
-+ }
-+ memmove(to, to + offset, PAGE_SIZE - offset);
-+ kunmap(bprm->page[j - 1]);
-+
-+ /* Limit stack size to 1GB */
-+ stack_base = current->signal->rlim[RLIMIT_STACK].rlim_max;
-+ if (stack_base > (1 << 30))
-+ stack_base = 1 << 30;
-+ stack_base = PAGE_ALIGN(stack_top - stack_base);
-+
-+ /* Adjust bprm->p to point to the end of the strings. */
-+ bprm->p = stack_base + PAGE_SIZE * i - offset;
-+
-+ mm->arg_start = stack_base;
-+ arg_size = i << PAGE_SHIFT;
-+
-+ /* zero pages that were copied above */
-+ while (i < MAX_ARG_PAGES)
-+ bprm->page[i++] = NULL;
-+#else
-+ stack_base = arch_align_stack(stack_top - MAX_ARG_PAGES*PAGE_SIZE);
-+ stack_base = PAGE_ALIGN(stack_base);
-+ bprm->p += stack_base;
-+ mm->arg_start = bprm->p;
-+ arg_size = stack_top - (PAGE_MASK & (unsigned long) mm->arg_start);
-+#endif
-+
-+ arg_size += EXTRA_STACK_VM_PAGES * PAGE_SIZE;
-+
-+ if (bprm->loader)
-+ bprm->loader += stack_base;
-+ bprm->exec += stack_base;
-+
-+ mpnt = kmem_cache_zalloc(vm_area_cachep, GFP_KERNEL);
-+ if (!mpnt)
-+ return -ENOMEM;
-+
-+ down_write(&mm->mmap_sem);
-+ {
-+ mpnt->vm_mm = mm;
-+#ifdef CONFIG_STACK_GROWSUP
-+ mpnt->vm_start = stack_base;
-+ mpnt->vm_end = stack_base + arg_size;
-+#else
-+ mpnt->vm_end = stack_top;
-+ mpnt->vm_start = mpnt->vm_end - arg_size;
-+#endif
-+ /* Adjust stack execute permissions; explicitly enable
-+ * for EXSTACK_ENABLE_X, disable for EXSTACK_DISABLE_X
-+ * and leave alone (arch default) otherwise. */
-+ if (unlikely(executable_stack == EXSTACK_ENABLE_X))
-+ mpnt->vm_flags = VM_STACK_FLAGS | VM_EXEC;
-+ else if (executable_stack == EXSTACK_DISABLE_X)
-+ mpnt->vm_flags = VM_STACK_FLAGS & ~VM_EXEC;
-+ else
-+ mpnt->vm_flags = VM_STACK_FLAGS;
-+ mpnt->vm_flags |= mm->def_flags;
-+ mpnt->vm_page_prot = protection_map[mpnt->vm_flags & 0x7];
-+ if ((ret = insert_vm_struct(mm, mpnt))) {
-+ up_write(&mm->mmap_sem);
-+ kmem_cache_free(vm_area_cachep, mpnt);
-+ return ret;
-+ }
-+ vx_vmpages_sub(mm, mm->total_vm - vma_pages(mpnt));
-+ mm->stack_vm = mm->total_vm;
-+ }
-+
-+ for (i = 0 ; i < MAX_ARG_PAGES ; i++) {
-+ struct page *page = bprm->page[i];
-+ if (page) {
-+ bprm->page[i] = NULL;
-+ install_arg_page(mpnt, page, stack_base);
-+ }
-+ stack_base += PAGE_SIZE;
-+ }
-+ up_write(&mm->mmap_sem);
-+
-+ return 0;
-+}
-+
-+EXPORT_SYMBOL(setup_arg_pages);
-+
-+#define free_arg_pages(bprm) do { } while (0)
-+
-+#else
-+
-+static inline void free_arg_pages(struct linux_binprm *bprm)
-+{
-+ int i;
-+
-+ for (i = 0; i < MAX_ARG_PAGES; i++) {
-+ if (bprm->page[i])
-+ __free_page(bprm->page[i]);
-+ bprm->page[i] = NULL;
-+ }
-+}
-+
-+#endif /* CONFIG_MMU */
-+
-+struct file *open_exec(const char *name)
-+{
-+ struct nameidata nd;
-+ int err;
-+ struct file *file;
-+
-+ err = path_lookup_open(AT_FDCWD, name, LOOKUP_FOLLOW, &nd, FMODE_READ|FMODE_EXEC);
-+ file = ERR_PTR(err);
-+
-+ if (!err) {
-+ struct inode *inode = nd.dentry->d_inode;
-+ file = ERR_PTR(-EACCES);
-+ if (!(nd.mnt->mnt_flags & MNT_NOEXEC) &&
-+ S_ISREG(inode->i_mode)) {
-+ int err = vfs_permission(&nd, MAY_EXEC);
-+ file = ERR_PTR(err);
-+ if (!err) {
-+ file = nameidata_to_filp(&nd, O_RDONLY);
-+ if (!IS_ERR(file)) {
-+ err = deny_write_access(file);
-+ if (err) {
-+ fput(file);
-+ file = ERR_PTR(err);
-+ }
-+ }
-+out:
-+ return file;
-+ }
-+ }
-+ release_open_intent(&nd);
-+ path_release(&nd);
-+ }
-+ goto out;
-+}
-+
-+EXPORT_SYMBOL(open_exec);
-+
-+int kernel_read(struct file *file, unsigned long offset,
-+ char *addr, unsigned long count)
-+{
-+ mm_segment_t old_fs;
-+ loff_t pos = offset;
-+ int result;
-+
-+ old_fs = get_fs();
-+ set_fs(get_ds());
-+ /* The cast to a user pointer is valid due to the set_fs() */
-+ result = vfs_read(file, (void __user *)addr, count, &pos);
-+ set_fs(old_fs);
-+ return result;
-+}
-+
-+EXPORT_SYMBOL(kernel_read);
-+
-+static int exec_mmap(struct mm_struct *mm)
-+{
-+ struct task_struct *tsk;
-+ struct mm_struct * old_mm, *active_mm;
-+
-+ /* Notify parent that we're no longer interested in the old VM */
-+ tsk = current;
-+ old_mm = current->mm;
-+ mm_release(tsk, old_mm);
-+
-+ if (old_mm) {
-+ /*
-+ * Make sure that if there is a core dump in progress
-+ * for the old mm, we get out and die instead of going
-+ * through with the exec. We must hold mmap_sem around
-+ * checking core_waiters and changing tsk->mm. The
-+ * core-inducing thread will increment core_waiters for
-+ * each thread whose ->mm == old_mm.
-+ */
-+ down_read(&old_mm->mmap_sem);
-+ if (unlikely(old_mm->core_waiters)) {
-+ up_read(&old_mm->mmap_sem);
-+ return -EINTR;
-+ }
-+ }
-+ task_lock(tsk);
-+ active_mm = tsk->active_mm;
-+ tsk->mm = mm;
-+ tsk->active_mm = mm;
-+ activate_mm(active_mm, mm);
-+ task_unlock(tsk);
-+ arch_pick_mmap_layout(mm);
-+ if (old_mm) {
-+ up_read(&old_mm->mmap_sem);
-+ BUG_ON(active_mm != old_mm);
-+ mmput(old_mm);
-+ return 0;
-+ }
-+ mmdrop(active_mm);
-+ return 0;
-+}
-+
-+/*
-+ * This function makes sure the current process has its own signal table,
-+ * so that flush_signal_handlers can later reset the handlers without
-+ * disturbing other processes. (Other processes might share the signal
-+ * table via the CLONE_SIGHAND option to clone().)
-+ */
-+static int de_thread(struct task_struct *tsk)
-+{
-+ struct signal_struct *sig = tsk->signal;
-+ struct sighand_struct *newsighand, *oldsighand = tsk->sighand;
-+ spinlock_t *lock = &oldsighand->siglock;
-+ struct task_struct *leader = NULL;
-+ int count;
-+
-+ /*
-+ * If we don't share sighandlers, then we aren't sharing anything
-+ * and we can just re-use it all.
-+ */
-+ if (atomic_read(&oldsighand->count) <= 1) {
-+ BUG_ON(atomic_read(&sig->count) != 1);
-+ signalfd_detach(tsk);
-+ exit_itimers(sig);
-+ return 0;
-+ }
-+
-+ newsighand = kmem_cache_alloc(sighand_cachep, GFP_KERNEL);
-+ if (!newsighand)
-+ return -ENOMEM;
-+
-+ if (thread_group_empty(tsk))
-+ goto no_thread_group;
-+
-+ /*
-+ * Kill all other threads in the thread group.
-+ * We must hold tasklist_lock to call zap_other_threads.
-+ */
-+ read_lock(&tasklist_lock);
-+ spin_lock_irq(lock);
-+ if (sig->flags & SIGNAL_GROUP_EXIT) {
-+ /*
-+ * Another group action in progress, just
-+ * return so that the signal is processed.
-+ */
-+ spin_unlock_irq(lock);
-+ read_unlock(&tasklist_lock);
-+ kmem_cache_free(sighand_cachep, newsighand);
-+ return -EAGAIN;
-+ }
-+
-+ /*
-+ * child_reaper ignores SIGKILL, change it now.
-+ * Reparenting needs write_lock on tasklist_lock,
-+ * so it is safe to do it under read_lock.
-+ */
-+ if (unlikely(tsk->group_leader == child_reaper(tsk)))
-+ tsk->nsproxy->pid_ns->child_reaper = tsk;
-+
-+ zap_other_threads(tsk);
-+ read_unlock(&tasklist_lock);
-+
-+ /*
-+ * Account for the thread group leader hanging around:
-+ */
-+ count = 1;
-+ if (!thread_group_leader(tsk)) {
-+ count = 2;
-+ /*
-+ * The SIGALRM timer survives the exec, but needs to point
-+ * at us as the new group leader now. We have a race with
-+ * a timer firing now getting the old leader, so we need to
-+ * synchronize with any firing (by calling del_timer_sync)
-+ * before we can safely let the old group leader die.
-+ */
-+ sig->tsk = tsk;
-+ spin_unlock_irq(lock);
-+ if (hrtimer_cancel(&sig->real_timer))
-+ hrtimer_restart(&sig->real_timer);
-+ spin_lock_irq(lock);
-+ }
-+ while (atomic_read(&sig->count) > count) {
-+ sig->group_exit_task = tsk;
-+ sig->notify_count = count;
-+ __set_current_state(TASK_UNINTERRUPTIBLE);
-+ spin_unlock_irq(lock);
-+ schedule();
-+ spin_lock_irq(lock);
-+ }
-+ sig->group_exit_task = NULL;
-+ sig->notify_count = 0;
-+ spin_unlock_irq(lock);
-+
-+ /*
-+ * At this point all other threads have exited, all we have to
-+ * do is to wait for the thread group leader to become inactive,
-+ * and to assume its PID:
-+ */
-+ if (!thread_group_leader(tsk)) {
-+ /*
-+ * Wait for the thread group leader to be a zombie.
-+ * It should already be zombie at this point, most
-+ * of the time.
-+ */
-+ leader = tsk->group_leader;
-+ while (leader->exit_state != EXIT_ZOMBIE)
-+ yield();
-+
-+ /*
-+ * The only record we have of the real-time age of a
-+ * process, regardless of execs it's done, is start_time.
-+ * All the past CPU time is accumulated in signal_struct
-+ * from sister threads now dead. But in this non-leader
-+ * exec, nothing survives from the original leader thread,
-+ * whose birth marks the true age of this process now.
-+ * When we take on its identity by switching to its PID, we
-+ * also take its birthdate (always earlier than our own).
-+ */
-+ tsk->start_time = leader->start_time;
-+
-+ write_lock_irq(&tasklist_lock);
-+
-+ BUG_ON(leader->tgid != tsk->tgid);
-+ BUG_ON(tsk->pid == tsk->tgid);
-+ /*
-+ * An exec() starts a new thread group with the
-+ * TGID of the previous thread group. Rehash the
-+ * two threads with a switched PID, and release
-+ * the former thread group leader:
-+ */
-+
-+ /* Become a process group leader with the old leader's pid.
-+ * The old leader becomes a thread of the this thread group.
-+ * Note: The old leader also uses this pid until release_task
-+ * is called. Odd but simple and correct.
-+ */
-+ detach_pid(tsk, PIDTYPE_PID);
-+ tsk->pid = leader->pid;
-+ attach_pid(tsk, PIDTYPE_PID, find_pid(tsk->pid));
-+ transfer_pid(leader, tsk, PIDTYPE_PGID);
-+ transfer_pid(leader, tsk, PIDTYPE_SID);
-+ list_replace_rcu(&leader->tasks, &tsk->tasks);
-+
-+ tsk->group_leader = tsk;
-+ leader->group_leader = tsk;
-+
-+ tsk->exit_signal = SIGCHLD;
-+
-+ BUG_ON(leader->exit_state != EXIT_ZOMBIE);
-+ leader->exit_state = EXIT_DEAD;
-+
-+ write_unlock_irq(&tasklist_lock);
-+ }
-+
-+ /*
-+ * There may be one thread left which is just exiting,
-+ * but it's safe to stop telling the group to kill themselves.
-+ */
-+ sig->flags = 0;
-+
-+no_thread_group:
-+ signalfd_detach(tsk);
-+ exit_itimers(sig);
-+ if (leader)
-+ release_task(leader);
-+
-+ BUG_ON(atomic_read(&sig->count) != 1);
-+
-+ if (atomic_read(&oldsighand->count) == 1) {
-+ /*
-+ * Now that we nuked the rest of the thread group,
-+ * it turns out we are not sharing sighand any more either.
-+ * So we can just keep it.
-+ */
-+ kmem_cache_free(sighand_cachep, newsighand);
-+ } else {
-+ /*
-+ * Move our state over to newsighand and switch it in.
-+ */
-+ atomic_set(&newsighand->count, 1);
-+ memcpy(newsighand->action, oldsighand->action,
-+ sizeof(newsighand->action));
-+
-+ write_lock_irq(&tasklist_lock);
-+ spin_lock(&oldsighand->siglock);
-+ spin_lock_nested(&newsighand->siglock, SINGLE_DEPTH_NESTING);
-+
-+ rcu_assign_pointer(tsk->sighand, newsighand);
-+ recalc_sigpending();
-+
-+ spin_unlock(&newsighand->siglock);
-+ spin_unlock(&oldsighand->siglock);
-+ write_unlock_irq(&tasklist_lock);
-+
-+ __cleanup_sighand(oldsighand);
-+ }
-+
-+ BUG_ON(!thread_group_leader(tsk));
-+ return 0;
-+}
-+
-+/*
-+ * These functions flushes out all traces of the currently running executable
-+ * so that a new one can be started
-+ */
-+
-+static void flush_old_files(struct files_struct * files)
-+{
-+ long j = -1;
-+ struct fdtable *fdt;
-+
-+ spin_lock(&files->file_lock);
-+ for (;;) {
-+ unsigned long set, i;
-+
-+ j++;
-+ i = j * __NFDBITS;
-+ fdt = files_fdtable(files);
-+ if (i >= fdt->max_fds)
-+ break;
-+ set = fdt->close_on_exec->fds_bits[j];
-+ if (!set)
-+ continue;
-+ fdt->close_on_exec->fds_bits[j] = 0;
-+ spin_unlock(&files->file_lock);
-+ for ( ; set ; i++,set >>= 1) {
-+ if (set & 1) {
-+ sys_close(i);
-+ }
-+ }
-+ spin_lock(&files->file_lock);
-+
-+ }
-+ spin_unlock(&files->file_lock);
-+}
-+
-+void get_task_comm(char *buf, struct task_struct *tsk)
-+{
-+ /* buf must be at least sizeof(tsk->comm) in size */
-+ task_lock(tsk);
-+ strncpy(buf, tsk->comm, sizeof(tsk->comm));
-+ task_unlock(tsk);
-+}
-+
-+void set_task_comm(struct task_struct *tsk, char *buf)
-+{
-+ task_lock(tsk);
-+ strlcpy(tsk->comm, buf, sizeof(tsk->comm));
-+ task_unlock(tsk);
-+}
-+
-+int flush_old_exec(struct linux_binprm * bprm)
-+{
-+ char * name;
-+ int i, ch, retval;
-+ struct files_struct *files;
-+ char tcomm[sizeof(current->comm)];
-+
-+ /*
-+ * Make sure we have a private signal table and that
-+ * we are unassociated from the previous thread group.
-+ */
-+ retval = de_thread(current);
-+ if (retval)
-+ goto out;
-+
-+ /*
-+ * Make sure we have private file handles. Ask the
-+ * fork helper to do the work for us and the exit
-+ * helper to do the cleanup of the old one.
-+ */
-+ files = current->files; /* refcounted so safe to hold */
-+ retval = unshare_files();
-+ if (retval)
-+ goto out;
-+ /*
-+ * Release all of the old mmap stuff
-+ */
-+ retval = exec_mmap(bprm->mm);
-+ if (retval)
-+ goto mmap_failed;
-+
-+ bprm->mm = NULL; /* We're using it now */
-+
-+ /* This is the point of no return */
-+ put_files_struct(files);
-+
-+ current->sas_ss_sp = current->sas_ss_size = 0;
-+
-+ if (current->euid == current->uid && current->egid == current->gid)
-+ current->mm->dumpable = 1;
-+ else
-+ current->mm->dumpable = suid_dumpable;
-+
-+ name = bprm->filename;
-+
-+ /* Copies the binary name from after last slash */
-+ for (i=0; (ch = *(name++)) != '\0';) {
-+ if (ch == '/')
-+ i = 0; /* overwrite what we wrote */
-+ else
-+ if (i < (sizeof(tcomm) - 1))
-+ tcomm[i++] = ch;
-+ }
-+ tcomm[i] = '\0';
-+ set_task_comm(current, tcomm);
-+
-+ current->flags &= ~PF_RANDOMIZE;
-+ flush_thread();
-+
-+ /* Set the new mm task size. We have to do that late because it may
-+ * depend on TIF_32BIT which is only updated in flush_thread() on
-+ * some architectures like powerpc
-+ */
-+ current->mm->task_size = TASK_SIZE;
-+
-+ if (bprm->e_uid != current->euid || bprm->e_gid != current->egid) {
-+ suid_keys(current);
-+ current->mm->dumpable = suid_dumpable;
-+ current->pdeath_signal = 0;
-+ } else if (file_permission(bprm->file, MAY_READ) ||
-+ (bprm->interp_flags & BINPRM_FLAGS_ENFORCE_NONDUMP)) {
-+ suid_keys(current);
-+ current->mm->dumpable = suid_dumpable;
-+ }
-+
-+ /* An exec changes our domain. We are no longer part of the thread
-+ group */
-+
-+ current->self_exec_id++;
-+
-+ flush_signal_handlers(current, 0);
-+ flush_old_files(current->files);
-+
-+ return 0;
-+
-+mmap_failed:
-+ reset_files_struct(current, files);
-+out:
-+ return retval;
-+}
-+
-+EXPORT_SYMBOL(flush_old_exec);
-+
-+/*
-+ * Fill the binprm structure from the inode.
-+ * Check permissions, then read the first 128 (BINPRM_BUF_SIZE) bytes
-+ */
-+int prepare_binprm(struct linux_binprm *bprm)
-+{
-+ int mode;
-+ struct inode * inode = bprm->file->f_path.dentry->d_inode;
-+ int retval;
-+
-+ mode = inode->i_mode;
-+ if (bprm->file->f_op == NULL)
-+ return -EACCES;
-+
-+ bprm->e_uid = current->euid;
-+ bprm->e_gid = current->egid;
-+
-+ if(!(bprm->file->f_path.mnt->mnt_flags & MNT_NOSUID)) {
-+ /* Set-uid? */
-+ if (mode & S_ISUID) {
-+ current->personality &= ~PER_CLEAR_ON_SETID;
-+ bprm->e_uid = inode->i_uid;
-+ }
-+
-+ /* Set-gid? */
-+ /*
-+ * If setgid is set but no group execute bit then this
-+ * is a candidate for mandatory locking, not a setgid
-+ * executable.
-+ */
-+ if ((mode & (S_ISGID | S_IXGRP)) == (S_ISGID | S_IXGRP)) {
-+ current->personality &= ~PER_CLEAR_ON_SETID;
-+ bprm->e_gid = inode->i_gid;
-+ }
-+ }
-+
-+ /* fill in binprm security blob */
-+ retval = security_bprm_set(bprm);
-+ if (retval)
-+ return retval;
-+
-+ memset(bprm->buf,0,BINPRM_BUF_SIZE);
-+ return kernel_read(bprm->file,0,bprm->buf,BINPRM_BUF_SIZE);
-+}
-+
-+EXPORT_SYMBOL(prepare_binprm);
-+
-+static int unsafe_exec(struct task_struct *p)
-+{
-+ int unsafe = 0;
-+ if (p->ptrace & PT_PTRACED) {
-+ if (p->ptrace & PT_PTRACE_CAP)
-+ unsafe |= LSM_UNSAFE_PTRACE_CAP;
-+ else
-+ unsafe |= LSM_UNSAFE_PTRACE;
-+ }
-+ if (atomic_read(&p->fs->count) > 1 ||
-+ atomic_read(&p->files->count) > 1 ||
-+ atomic_read(&p->sighand->count) > 1)
-+ unsafe |= LSM_UNSAFE_SHARE;
-+
-+ return unsafe;
-+}
-+
-+void compute_creds(struct linux_binprm *bprm)
-+{
-+ int unsafe;
-+
-+ if (bprm->e_uid != current->uid) {
-+ suid_keys(current);
-+ current->pdeath_signal = 0;
-+ }
-+ exec_keys(current);
-+
-+ task_lock(current);
-+ unsafe = unsafe_exec(current);
-+ security_bprm_apply_creds(bprm, unsafe);
-+ task_unlock(current);
-+ security_bprm_post_apply_creds(bprm);
-+}
-+EXPORT_SYMBOL(compute_creds);
-+
-+/*
-+ * Arguments are '\0' separated strings found at the location bprm->p
-+ * points to; chop off the first by relocating brpm->p to right after
-+ * the first '\0' encountered.
-+ */
-+void remove_arg_zero(struct linux_binprm *bprm)
-+{
-+ if (bprm->argc) {
-+ char ch;
-+
-+ do {
-+ unsigned long offset;
-+ unsigned long index;
-+ char *kaddr;
-+ struct page *page;
-+
-+ offset = bprm->p & ~PAGE_MASK;
-+ index = bprm->p >> PAGE_SHIFT;
-+
-+ page = bprm->page[index];
-+ kaddr = kmap_atomic(page, KM_USER0);
-+
-+ /* run through page until we reach end or find NUL */
-+ do {
-+ ch = *(kaddr + offset);
-+
-+ /* discard that character... */
-+ bprm->p++;
-+ offset++;
-+ } while (offset < PAGE_SIZE && ch != '\0');
-+
-+ kunmap_atomic(kaddr, KM_USER0);
-+
-+ /* free the old page */
-+ if (offset == PAGE_SIZE) {
-+ __free_page(page);
-+ bprm->page[index] = NULL;
-+ }
-+ } while (ch != '\0');
-+
-+ bprm->argc--;
-+ }
-+}
-+EXPORT_SYMBOL(remove_arg_zero);
-+
-+/*
-+ * cycle the list of binary formats handler, until one recognizes the image
-+ */
-+int search_binary_handler(struct linux_binprm *bprm,struct pt_regs *regs)
-+{
-+ int try,retval;
-+ struct linux_binfmt *fmt;
-+#ifdef __alpha__
-+ /* handle /sbin/loader.. */
-+ {
-+ struct exec * eh = (struct exec *) bprm->buf;
-+
-+ if (!bprm->loader && eh->fh.f_magic == 0x183 &&
-+ (eh->fh.f_flags & 0x3000) == 0x3000)
-+ {
-+ struct file * file;
-+ unsigned long loader;
-+
-+ allow_write_access(bprm->file);
-+ fput(bprm->file);
-+ bprm->file = NULL;
-+
-+ loader = PAGE_SIZE*MAX_ARG_PAGES-sizeof(void *);
-+
-+ file = open_exec("/sbin/loader");
-+ retval = PTR_ERR(file);
-+ if (IS_ERR(file))
-+ return retval;
-+
-+ /* Remember if the application is TASO. */
-+ bprm->sh_bang = eh->ah.entry < 0x100000000UL;
-+
-+ bprm->file = file;
-+ bprm->loader = loader;
-+ retval = prepare_binprm(bprm);
-+ if (retval<0)
-+ return retval;
-+ /* should call search_binary_handler recursively here,
-+ but it does not matter */
-+ }
-+ }
-+#endif
-+ retval = security_bprm_check(bprm);
-+ if (retval)
-+ return retval;
-+
-+ /* kernel module loader fixup */
-+ /* so we don't try to load run modprobe in kernel space. */
-+ set_fs(USER_DS);
-+
-+ retval = audit_bprm(bprm);
-+ if (retval)
-+ return retval;
-+
-+ retval = -ENOENT;
-+ for (try=0; try<2; try++) {
-+ read_lock(&binfmt_lock);
-+ for (fmt = formats ; fmt ; fmt = fmt->next) {
-+ int (*fn)(struct linux_binprm *, struct pt_regs *) = fmt->load_binary;
-+ if (!fn)
-+ continue;
-+ if (!try_module_get(fmt->module))
-+ continue;
-+ read_unlock(&binfmt_lock);
-+ retval = fn(bprm, regs);
-+ if (retval >= 0) {
-+ put_binfmt(fmt);
-+ allow_write_access(bprm->file);
-+ if (bprm->file)
-+ fput(bprm->file);
-+ bprm->file = NULL;
-+ current->did_exec = 1;
-+ proc_exec_connector(current);
-+ return retval;
-+ }
-+ read_lock(&binfmt_lock);
-+ put_binfmt(fmt);
-+ if (retval != -ENOEXEC || bprm->mm == NULL)
-+ break;
-+ if (!bprm->file) {
-+ read_unlock(&binfmt_lock);
-+ return retval;
-+ }
-+ }
-+ read_unlock(&binfmt_lock);
-+ if (retval != -ENOEXEC || bprm->mm == NULL) {
-+ break;
-+#ifdef CONFIG_KMOD
-+ }else{
-+#define printable(c) (((c)=='\t') || ((c)=='\n') || (0x20<=(c) && (c)<=0x7e))
-+ if (printable(bprm->buf[0]) &&
-+ printable(bprm->buf[1]) &&
-+ printable(bprm->buf[2]) &&
-+ printable(bprm->buf[3]))
-+ break; /* -ENOEXEC */
-+ request_module("binfmt-%04x", *(unsigned short *)(&bprm->buf[2]));
-+#endif
-+ }
-+ }
-+ return retval;
-+}
-+
-+EXPORT_SYMBOL(search_binary_handler);
-+
-+/*
-+ * sys_execve() executes a new program.
-+ */
-+int do_execve(char * filename,
-+ char __user *__user *argv,
-+ char __user *__user *envp,
-+ struct pt_regs * regs)
-+{
-+ struct linux_binprm *bprm;
-+ struct file *file;
-+ int retval;
-+ int i;
-+
-+ retval = -ENOMEM;
-+ bprm = kzalloc(sizeof(*bprm), GFP_KERNEL);
-+ if (!bprm)
-+ goto out_ret;
-+
-+ file = open_exec(filename);
-+ retval = PTR_ERR(file);
-+ if (IS_ERR(file))
-+ goto out_kfree;
-+
-+ sched_exec();
-+
-+ bprm->p = PAGE_SIZE*MAX_ARG_PAGES-sizeof(void *);
-+
-+ bprm->file = file;
-+ bprm->filename = filename;
-+ bprm->interp = filename;
-+ bprm->mm = mm_alloc();
-+ retval = -ENOMEM;
-+ if (!bprm->mm)
-+ goto out_file;
-+
-+ retval = init_new_context(current, bprm->mm);
-+ if (retval < 0)
-+ goto out_mm;
-+
-+ bprm->argc = count(argv, bprm->p / sizeof(void *));
-+ if ((retval = bprm->argc) < 0)
-+ goto out_mm;
-+
-+ bprm->envc = count(envp, bprm->p / sizeof(void *));
-+ if ((retval = bprm->envc) < 0)
-+ goto out_mm;
-+
-+ retval = security_bprm_alloc(bprm);
-+ if (retval)
-+ goto out;
-+
-+ retval = prepare_binprm(bprm);
-+ if (retval < 0)
-+ goto out;
-+
-+ retval = copy_strings_kernel(1, &bprm->filename, bprm);
-+ if (retval < 0)
-+ goto out;
-+
-+ bprm->exec = bprm->p;
-+ retval = copy_strings(bprm->envc, envp, bprm);
-+ if (retval < 0)
-+ goto out;
-+
-+ retval = copy_strings(bprm->argc, argv, bprm);
-+ if (retval < 0)
-+ goto out;
-+
-+ retval = search_binary_handler(bprm,regs);
-+ if (retval >= 0) {
-+ free_arg_pages(bprm);
-+
-+ /* execve success */
-+ security_bprm_free(bprm);
-+ acct_update_integrals(current);
-+ kfree(bprm);
-+ return retval;
-+ }
-+
-+out:
-+ /* Something went wrong, return the inode and free the argument pages*/
-+ for (i = 0 ; i < MAX_ARG_PAGES ; i++) {
-+ struct page * page = bprm->page[i];
-+ if (page)
-+ __free_page(page);
-+ }
-+
-+ if (bprm->security)
-+ security_bprm_free(bprm);
-+
-+out_mm:
-+ if (bprm->mm)
-+ mmdrop(bprm->mm);
-+
-+out_file:
-+ if (bprm->file) {
-+ allow_write_access(bprm->file);
-+ fput(bprm->file);
-+ }
-+
-+out_kfree:
-+ kfree(bprm);
-+
-+out_ret:
-+ return retval;
-+}
-+
-+int set_binfmt(struct linux_binfmt *new)
-+{
-+ struct linux_binfmt *old = current->binfmt;
-+
-+ if (new) {
-+ if (!try_module_get(new->module))
-+ return -1;
-+ }
-+ current->binfmt = new;
-+ if (old)
-+ module_put(old->module);
-+ return 0;
-+}
-+
-+EXPORT_SYMBOL(set_binfmt);
-+
-+/* format_corename will inspect the pattern parameter, and output a
-+ * name into corename, which must have space for at least
-+ * CORENAME_MAX_SIZE bytes plus one byte for the zero terminator.
-+ */
-+static int format_corename(char *corename, const char *pattern, long signr)
-+{
-+ const char *pat_ptr = pattern;
-+ char *out_ptr = corename;
-+ char *const out_end = corename + CORENAME_MAX_SIZE;
-+ int rc;
-+ int pid_in_pattern = 0;
-+ int ispipe = 0;
-+
-+ if (*pattern == '|')
-+ ispipe = 1;
-+
-+ /* Repeat as long as we have more pattern to process and more output
-+ space */
-+ while (*pat_ptr) {
-+ if (*pat_ptr != '%') {
-+ if (out_ptr == out_end)
-+ goto out;
-+ *out_ptr++ = *pat_ptr++;
-+ } else {
-+ switch (*++pat_ptr) {
-+ case 0:
-+ goto out;
-+ /* Double percent, output one percent */
-+ case '%':
-+ if (out_ptr == out_end)
-+ goto out;
-+ *out_ptr++ = '%';
-+ break;
-+ /* pid */
-+ case 'p':
-+ pid_in_pattern = 1;
-+ rc = snprintf(out_ptr, out_end - out_ptr,
-+ "%d", current->tgid);
-+ if (rc > out_end - out_ptr)
-+ goto out;
-+ out_ptr += rc;
-+ break;
-+ /* uid */
-+ case 'u':
-+ rc = snprintf(out_ptr, out_end - out_ptr,
-+ "%d", current->uid);
-+ if (rc > out_end - out_ptr)
-+ goto out;
-+ out_ptr += rc;
-+ break;
-+ /* gid */
-+ case 'g':
-+ rc = snprintf(out_ptr, out_end - out_ptr,
-+ "%d", current->gid);
-+ if (rc > out_end - out_ptr)
-+ goto out;
-+ out_ptr += rc;
-+ break;
-+ /* signal that caused the coredump */
-+ case 's':
-+ rc = snprintf(out_ptr, out_end - out_ptr,
-+ "%ld", signr);
-+ if (rc > out_end - out_ptr)
-+ goto out;
-+ out_ptr += rc;
-+ break;
-+ /* UNIX time of coredump */
-+ case 't': {
-+ struct timeval tv;
-+ vx_gettimeofday(&tv);
-+ rc = snprintf(out_ptr, out_end - out_ptr,
-+ "%lu", tv.tv_sec);
-+ if (rc > out_end - out_ptr)
-+ goto out;
-+ out_ptr += rc;
-+ break;
-+ }
-+ /* hostname */
-+ case 'h':
-+ down_read(&uts_sem);
-+ rc = snprintf(out_ptr, out_end - out_ptr,
-+ "%s", utsname()->nodename);
-+ up_read(&uts_sem);
-+ if (rc > out_end - out_ptr)
-+ goto out;
-+ out_ptr += rc;
-+ break;
-+ /* executable */
-+ case 'e':
-+ rc = snprintf(out_ptr, out_end - out_ptr,
-+ "%s", current->comm);
-+ if (rc > out_end - out_ptr)
-+ goto out;
-+ out_ptr += rc;
-+ break;
-+ default:
-+ break;
-+ }
-+ ++pat_ptr;
-+ }
-+ }
-+ /* Backward compatibility with core_uses_pid:
-+ *
-+ * If core_pattern does not include a %p (as is the default)
-+ * and core_uses_pid is set, then .%pid will be appended to
-+ * the filename. Do not do this for piped commands. */
-+ if (!ispipe && !pid_in_pattern
-+ && (core_uses_pid || atomic_read(¤t->mm->mm_users) != 1)) {
-+ rc = snprintf(out_ptr, out_end - out_ptr,
-+ ".%d", current->tgid);
-+ if (rc > out_end - out_ptr)
-+ goto out;
-+ out_ptr += rc;
-+ }
-+out:
-+ *out_ptr = 0;
-+ return ispipe;
-+}
-+
-+static void zap_process(struct task_struct *start)
-+{
-+ struct task_struct *t;
-+
-+ start->signal->flags = SIGNAL_GROUP_EXIT;
-+ start->signal->group_stop_count = 0;
-+
-+ t = start;
-+ do {
-+ if (t != current && t->mm) {
-+ t->mm->core_waiters++;
-+ sigaddset(&t->pending.signal, SIGKILL);
-+ signal_wake_up(t, 1);
-+ }
-+ } while ((t = next_thread(t)) != start);
-+}
-+
-+static inline int zap_threads(struct task_struct *tsk, struct mm_struct *mm,
-+ int exit_code)
-+{
-+ struct task_struct *g, *p;
-+ unsigned long flags;
-+ int err = -EAGAIN;
-+
-+ spin_lock_irq(&tsk->sighand->siglock);
-+ if (!(tsk->signal->flags & SIGNAL_GROUP_EXIT)) {
-+ tsk->signal->group_exit_code = exit_code;
-+ zap_process(tsk);
-+ err = 0;
-+ }
-+ spin_unlock_irq(&tsk->sighand->siglock);
-+ if (err)
-+ return err;
-+
-+ if (atomic_read(&mm->mm_users) == mm->core_waiters + 1)
-+ goto done;
-+
-+ rcu_read_lock();
-+ for_each_process(g) {
-+ if (g == tsk->group_leader)
-+ continue;
-+
-+ p = g;
-+ do {
-+ if (p->mm) {
-+ if (p->mm == mm) {
-+ /*
-+ * p->sighand can't disappear, but
-+ * may be changed by de_thread()
-+ */
-+ lock_task_sighand(p, &flags);
-+ zap_process(p);
-+ unlock_task_sighand(p, &flags);
-+ }
-+ break;
-+ }
-+ } while ((p = next_thread(p)) != g);
-+ }
-+ rcu_read_unlock();
-+done:
-+ return mm->core_waiters;
-+}
-+
-+static int coredump_wait(int exit_code)
-+{
-+ struct task_struct *tsk = current;
-+ struct mm_struct *mm = tsk->mm;
-+ struct completion startup_done;
-+ struct completion *vfork_done;
-+ int core_waiters;
-+
-+ init_completion(&mm->core_done);
-+ init_completion(&startup_done);
-+ mm->core_startup_done = &startup_done;
-+
-+ core_waiters = zap_threads(tsk, mm, exit_code);
-+ up_write(&mm->mmap_sem);
-+
-+ if (unlikely(core_waiters < 0))
-+ goto fail;
-+
-+ /*
-+ * Make sure nobody is waiting for us to release the VM,
-+ * otherwise we can deadlock when we wait on each other
-+ */
-+ vfork_done = tsk->vfork_done;
-+ if (vfork_done) {
-+ tsk->vfork_done = NULL;
-+ complete(vfork_done);
-+ }
-+
-+ if (core_waiters)
-+ wait_for_completion(&startup_done);
-+fail:
-+ BUG_ON(mm->core_waiters);
-+ return core_waiters;
-+}
-+
-+int do_coredump(long signr, int exit_code, struct pt_regs * regs)
-+{
-+ char corename[CORENAME_MAX_SIZE + 1];
-+ struct mm_struct *mm = current->mm;
-+ struct linux_binfmt * binfmt;
-+ struct inode * inode;
-+ struct file * file;
-+ int retval = 0;
-+ int fsuid = current->fsuid;
-+ int flag = 0;
-+ int ispipe = 0;
-+
-+ audit_core_dumps(signr);
-+
-+ binfmt = current->binfmt;
-+ if (!binfmt || !binfmt->core_dump)
-+ goto fail;
-+ down_write(&mm->mmap_sem);
-+ if (!mm->dumpable) {
-+ up_write(&mm->mmap_sem);
-+ goto fail;
-+ }
-+
-+ /*
-+ * We cannot trust fsuid as being the "true" uid of the
-+ * process nor do we know its entire history. We only know it
-+ * was tainted so we dump it as root in mode 2.
-+ */
-+ if (mm->dumpable == 2) { /* Setuid core dump mode */
-+ flag = O_EXCL; /* Stop rewrite attacks */
-+ current->fsuid = 0; /* Dump root private */
-+ }
-+ mm->dumpable = 0;
-+
-+ retval = coredump_wait(exit_code);
-+ if (retval < 0)
-+ goto fail;
-+
-+ /*
-+ * Clear any false indication of pending signals that might
-+ * be seen by the filesystem code called to write the core file.
-+ */
-+ clear_thread_flag(TIF_SIGPENDING);
-+
-+ if (current->signal->rlim[RLIMIT_CORE].rlim_cur < binfmt->min_coredump)
-+ goto fail_unlock;
-+
-+ /*
-+ * lock_kernel() because format_corename() is controlled by sysctl, which
-+ * uses lock_kernel()
-+ */
-+ lock_kernel();
-+ ispipe = format_corename(corename, core_pattern, signr);
-+ unlock_kernel();
-+ if (ispipe) {
-+ /* SIGPIPE can happen, but it's just never processed */
-+ if(call_usermodehelper_pipe(corename+1, NULL, NULL, &file)) {
-+ printk(KERN_INFO "Core dump to %s pipe failed\n",
-+ corename);
-+ goto fail_unlock;
-+ }
-+ } else
-+ file = filp_open(corename,
-+ O_CREAT | 2 | O_NOFOLLOW | O_LARGEFILE | flag,
-+ 0600);
-+ if (IS_ERR(file))
-+ goto fail_unlock;
-+ inode = file->f_path.dentry->d_inode;
-+ if (inode->i_nlink > 1)
-+ goto close_fail; /* multiple links - don't dump */
-+ if (!ispipe && d_unhashed(file->f_path.dentry))
-+ goto close_fail;
-+
-+ /* AK: actually i see no reason to not allow this for named pipes etc.,
-+ but keep the previous behaviour for now. */
-+ if (!ispipe && !S_ISREG(inode->i_mode))
-+ goto close_fail;
-+ /*
-+ * Dont allow local users get cute and trick others to coredump
-+ * into their pre-created files:
-+ */
-+ if (inode->i_uid != current->fsuid)
-+ goto close_fail;
-+ if (!file->f_op)
-+ goto close_fail;
-+ if (!file->f_op->write)
-+ goto close_fail;
-+ if (!ispipe && do_truncate(file->f_path.dentry, 0, 0, file) != 0)
-+ goto close_fail;
-+
-+ retval = binfmt->core_dump(signr, regs, file);
-+
-+ if (retval)
-+ current->signal->group_exit_code |= 0x80;
-+close_fail:
-+ filp_close(file, NULL);
-+fail_unlock:
-+ current->fsuid = fsuid;
-+ complete_all(&mm->core_done);
-+fail:
-+ return retval;
-+}
-diff -Nurb --exclude='*.swp' --exclude=tags --exclude='*.patch' --exclude='*.diff' linux-2.6.22-580/include/linux/arrays.h linux-2.6.22-590/include/linux/arrays.h
---- linux-2.6.22-580/include/linux/arrays.h 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.22-590/include/linux/arrays.h 2009-02-18 09:57:23.000000000 -0500
-@@ -0,0 +1,36 @@
-+#ifndef __ARRAYS_H__
-+#define __ARRAYS_H__
-+#include <linux/list.h>
-+
-+#define SAMPLING_METHOD_DEFAULT 0
-+#define SAMPLING_METHOD_LOG 1
-+
-+/* Every probe has an array handler */
-+
-+/* XXX - Optimize this structure */
-+
-+extern void (*rec_event)(void *,unsigned int);
-+struct array_handler {
-+ struct list_head link;
-+ unsigned int (*hash_func)(void *);
-+ unsigned int (*sampling_func)(void *,int,void *);
-+ unsigned short size;
-+ unsigned int threshold;
-+ unsigned char **expcount;
-+ unsigned int sampling_method;
-+ unsigned int **arrays;
-+ unsigned int arraysize;
-+ unsigned int num_samples[2];
-+ void **epoch_samples; /* size-sized lists of samples */
-+ unsigned int (*serialize)(void *, void *);
-+ unsigned char code[5];
-+};
-+
-+struct event {
-+ struct list_head link;
-+ void *event_data;
-+ unsigned int count;
-+ unsigned int event_type;
-+ struct task_struct *task;
-+};
-+#endif
-diff -Nurb --exclude='*.swp' --exclude=tags --exclude='*.patch' --exclude='*.diff' linux-2.6.22-580/include/linux/mutex.h linux-2.6.22-590/include/linux/mutex.h
---- linux-2.6.22-580/include/linux/mutex.h 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22-590/include/linux/mutex.h 2009-02-18 09:57:23.000000000 -0500
-@@ -53,6 +53,10 @@
- struct thread_info *owner;
- const char *name;
- void *magic;
-+#else
-+#ifdef CONFIG_CHOPSTIX
-+ struct thread_info *owner;
-+#endif
- #endif
- #ifdef CONFIG_DEBUG_LOCK_ALLOC
- struct lockdep_map dep_map;
-diff -Nurb --exclude='*.swp' --exclude=tags --exclude='*.patch' --exclude='*.diff' linux-2.6.22-580/include/linux/sched.h linux-2.6.22-590/include/linux/sched.h
---- linux-2.6.22-580/include/linux/sched.h 2009-02-18 09:56:02.000000000 -0500
-+++ linux-2.6.22-590/include/linux/sched.h 2009-02-18 09:57:23.000000000 -0500
-@@ -850,6 +850,10 @@
- #endif
- unsigned long sleep_avg;
- unsigned long long timestamp, last_ran;
-+#ifdef CONFIG_CHOPSTIX
-+ unsigned long last_interrupted, last_ran_j;
-+#endif
-+
- unsigned long long sched_time; /* sched_clock time spent running */
- enum sleep_type sleep_type;
-
-diff -Nurb --exclude='*.swp' --exclude=tags --exclude='*.patch' --exclude='*.diff' linux-2.6.22-580/include/linux/sched.h.orig linux-2.6.22-590/include/linux/sched.h.orig
---- linux-2.6.22-580/include/linux/sched.h.orig 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.22-590/include/linux/sched.h.orig 2009-02-18 09:56:02.000000000 -0500
-@@ -0,0 +1,1737 @@
-+#ifndef _LINUX_SCHED_H
-+#define _LINUX_SCHED_H
-+
-+#include <linux/auxvec.h> /* For AT_VECTOR_SIZE */
-+
-+/*
-+ * cloning flags:
-+ */
-+#define CSIGNAL 0x000000ff /* signal mask to be sent at exit */
-+#define CLONE_VM 0x00000100 /* set if VM shared between processes */
-+#define CLONE_FS 0x00000200 /* set if fs info shared between processes */
-+#define CLONE_FILES 0x00000400 /* set if open files shared between processes */
-+#define CLONE_SIGHAND 0x00000800 /* set if signal handlers and blocked signals shared */
-+#define CLONE_PTRACE 0x00002000 /* set if we want to let tracing continue on the child too */
-+#define CLONE_VFORK 0x00004000 /* set if the parent wants the child to wake it up on mm_release */
-+#define CLONE_PARENT 0x00008000 /* set if we want to have the same parent as the cloner */
-+#define CLONE_THREAD 0x00010000 /* Same thread group? */
-+#define CLONE_NEWNS 0x00020000 /* New namespace group? */
-+#define CLONE_SYSVSEM 0x00040000 /* share system V SEM_UNDO semantics */
-+#define CLONE_SETTLS 0x00080000 /* create a new TLS for the child */
-+#define CLONE_PARENT_SETTID 0x00100000 /* set the TID in the parent */
-+#define CLONE_CHILD_CLEARTID 0x00200000 /* clear the TID in the child */
-+#define CLONE_DETACHED 0x00400000 /* Unused, ignored */
-+#define CLONE_UNTRACED 0x00800000 /* set if the tracing process can't force CLONE_PTRACE on this clone */
-+#define CLONE_CHILD_SETTID 0x01000000 /* set the TID in the child */
-+#define CLONE_STOPPED 0x02000000 /* Start in stopped state */
-+#define CLONE_NEWUTS 0x04000000 /* New utsname group? */
-+#define CLONE_NEWIPC 0x08000000 /* New ipcs */
-+#define CLONE_KTHREAD 0x10000000 /* clone a kernel thread */
-+
-+/*
-+ * Scheduling policies
-+ */
-+#define SCHED_NORMAL 0
-+#define SCHED_FIFO 1
-+#define SCHED_RR 2
-+#define SCHED_BATCH 3
-+
-+#ifdef __KERNEL__
-+
-+struct sched_param {
-+ int sched_priority;
-+};
-+
-+#include <asm/param.h> /* for HZ */
-+
-+#include <linux/capability.h>
-+#include <linux/threads.h>
-+#include <linux/kernel.h>
-+#include <linux/types.h>
-+#include <linux/timex.h>
-+#include <linux/jiffies.h>
-+#include <linux/rbtree.h>
-+#include <linux/thread_info.h>
-+#include <linux/cpumask.h>
-+#include <linux/errno.h>
-+#include <linux/nodemask.h>
-+
-+#include <asm/system.h>
-+#include <asm/semaphore.h>
-+#include <asm/page.h>
-+#include <asm/ptrace.h>
-+#include <asm/mmu.h>
-+#include <asm/cputime.h>
-+
-+#include <linux/smp.h>
-+#include <linux/sem.h>
-+#include <linux/signal.h>
-+#include <linux/securebits.h>
-+#include <linux/fs_struct.h>
-+#include <linux/compiler.h>
-+#include <linux/completion.h>
-+#include <linux/pid.h>
-+#include <linux/percpu.h>
-+#include <linux/topology.h>
-+#include <linux/seccomp.h>
-+#include <linux/rcupdate.h>
-+#include <linux/futex.h>
-+#include <linux/rtmutex.h>
-+
-+#include <linux/time.h>
-+#include <linux/param.h>
-+#include <linux/resource.h>
-+#include <linux/timer.h>
-+#include <linux/hrtimer.h>
-+#include <linux/task_io_accounting.h>
-+
-+#include <asm/processor.h>
-+
-+struct exec_domain;
-+struct futex_pi_state;
-+struct bio;
-+
-+/*
-+ * List of flags we want to share for kernel threads,
-+ * if only because they are not used by them anyway.
-+ */
-+#define CLONE_KERNEL (CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_KTHREAD)
-+
-+/*
-+ * These are the constant used to fake the fixed-point load-average
-+ * counting. Some notes:
-+ * - 11 bit fractions expand to 22 bits by the multiplies: this gives
-+ * a load-average precision of 10 bits integer + 11 bits fractional
-+ * - if you want to count load-averages more often, you need more
-+ * precision, or rounding will get you. With 2-second counting freq,
-+ * the EXP_n values would be 1981, 2034 and 2043 if still using only
-+ * 11 bit fractions.
-+ */
-+extern unsigned long avenrun[]; /* Load averages */
-+
-+#define FSHIFT 11 /* nr of bits of precision */
-+#define FIXED_1 (1<<FSHIFT) /* 1.0 as fixed-point */
-+#define LOAD_FREQ (5*HZ) /* 5 sec intervals */
-+#define EXP_1 1884 /* 1/exp(5sec/1min) as fixed-point */
-+#define EXP_5 2014 /* 1/exp(5sec/5min) */
-+#define EXP_15 2037 /* 1/exp(5sec/15min) */
-+
-+#define CALC_LOAD(load,exp,n) \
-+ load *= exp; \
-+ load += n*(FIXED_1-exp); \
-+ load >>= FSHIFT;
-+
-+extern unsigned long total_forks;
-+extern int nr_threads;
-+DECLARE_PER_CPU(unsigned long, process_counts);
-+extern int nr_processes(void);
-+extern unsigned long nr_running(void);
-+extern unsigned long nr_uninterruptible(void);
-+extern unsigned long nr_active(void);
-+extern unsigned long nr_iowait(void);
-+extern unsigned long weighted_cpuload(const int cpu);
-+
-+
-+/*
-+ * Task state bitmask. NOTE! These bits are also
-+ * encoded in fs/proc/array.c: get_task_state().
-+ *
-+ * We have two separate sets of flags: task->state
-+ * is about runnability, while task->exit_state are
-+ * about the task exiting. Confusing, but this way
-+ * modifying one set can't modify the other one by
-+ * mistake.
-+ */
-+#define TASK_RUNNING 0
-+#define TASK_INTERRUPTIBLE 1
-+#define TASK_UNINTERRUPTIBLE 2
-+#define TASK_STOPPED 4
-+#define TASK_TRACED 8
-+#define TASK_ONHOLD 16
-+/* in tsk->exit_state */
-+#define EXIT_ZOMBIE 32
-+#define EXIT_DEAD 64
-+/* in tsk->state again */
-+#define TASK_NONINTERACTIVE 128
-+#define TASK_DEAD 256
-+
-+#define __set_task_state(tsk, state_value) \
-+ do { (tsk)->state = (state_value); } while (0)
-+#define set_task_state(tsk, state_value) \
-+ set_mb((tsk)->state, (state_value))
-+
-+/*
-+ * set_current_state() includes a barrier so that the write of current->state
-+ * is correctly serialised wrt the caller's subsequent test of whether to
-+ * actually sleep:
-+ *
-+ * set_current_state(TASK_UNINTERRUPTIBLE);
-+ * if (do_i_need_to_sleep())
-+ * schedule();
-+ *
-+ * If the caller does not need such serialisation then use __set_current_state()
-+ */
-+#define __set_current_state(state_value) \
-+ do { current->state = (state_value); } while (0)
-+#define set_current_state(state_value) \
-+ set_mb(current->state, (state_value))
-+
-+/* Task command name length */
-+#define TASK_COMM_LEN 16
-+
-+#include <linux/spinlock.h>
-+
-+/*
-+ * This serializes "schedule()" and also protects
-+ * the run-queue from deletions/modifications (but
-+ * _adding_ to the beginning of the run-queue has
-+ * a separate lock).
-+ */
-+extern rwlock_t tasklist_lock;
-+extern spinlock_t mmlist_lock;
-+
-+struct task_struct;
-+
-+extern void sched_init(void);
-+extern void sched_init_smp(void);
-+extern void init_idle(struct task_struct *idle, int cpu);
-+
-+extern cpumask_t nohz_cpu_mask;
-+#if defined(CONFIG_SMP) && defined(CONFIG_NO_HZ)
-+extern int select_nohz_load_balancer(int cpu);
-+#else
-+static inline int select_nohz_load_balancer(int cpu)
-+{
-+ return 0;
-+}
-+#endif
-+
-+/*
-+ * Only dump TASK_* tasks. (0 for all tasks)
-+ */
-+extern void show_state_filter(unsigned long state_filter);
-+
-+static inline void show_state(void)
-+{
-+ show_state_filter(0);
-+}
-+
-+extern void show_regs(struct pt_regs *);
-+
-+/*
-+ * TASK is a pointer to the task whose backtrace we want to see (or NULL for current
-+ * task), SP is the stack pointer of the first frame that should be shown in the back
-+ * trace (or NULL if the entire call-chain of the task should be shown).
-+ */
-+extern void show_stack(struct task_struct *task, unsigned long *sp);
-+
-+void io_schedule(void);
-+long io_schedule_timeout(long timeout);
-+
-+extern void cpu_init (void);
-+extern void trap_init(void);
-+extern void update_process_times(int user);
-+extern void scheduler_tick(void);
-+
-+#ifdef CONFIG_DETECT_SOFTLOCKUP
-+extern void softlockup_tick(void);
-+extern void spawn_softlockup_task(void);
-+extern void touch_softlockup_watchdog(void);
-+extern void touch_all_softlockup_watchdogs(void);
-+#else
-+static inline void softlockup_tick(void)
-+{
-+}
-+static inline void spawn_softlockup_task(void)
-+{
-+}
-+static inline void touch_softlockup_watchdog(void)
-+{
-+}
-+static inline void touch_all_softlockup_watchdogs(void)
-+{
-+}
-+#endif
-+
-+
-+/* Attach to any functions which should be ignored in wchan output. */
-+#define __sched __attribute__((__section__(".sched.text")))
-+/* Is this address in the __sched functions? */
-+extern int in_sched_functions(unsigned long addr);
-+
-+#define MAX_SCHEDULE_TIMEOUT LONG_MAX
-+extern signed long FASTCALL(schedule_timeout(signed long timeout));
-+extern signed long schedule_timeout_interruptible(signed long timeout);
-+extern signed long schedule_timeout_uninterruptible(signed long timeout);
-+asmlinkage void schedule(void);
-+
-+struct nsproxy;
-+
-+/* Maximum number of active map areas.. This is a random (large) number */
-+#define DEFAULT_MAX_MAP_COUNT 65536
-+
-+extern int sysctl_max_map_count;
-+
-+#include <linux/aio.h>
-+
-+extern unsigned long
-+arch_get_unmapped_area(struct file *, unsigned long, unsigned long,
-+ unsigned long, unsigned long);
-+extern unsigned long
-+arch_get_unmapped_area_topdown(struct file *filp, unsigned long addr,
-+ unsigned long len, unsigned long pgoff,
-+ unsigned long flags);
-+extern void arch_unmap_area(struct mm_struct *, unsigned long);
-+extern void arch_unmap_area_topdown(struct mm_struct *, unsigned long);
-+
-+#if NR_CPUS >= CONFIG_SPLIT_PTLOCK_CPUS
-+/*
-+ * The mm counters are not protected by its page_table_lock,
-+ * so must be incremented atomically.
-+ */
-+typedef atomic_long_t mm_counter_t;
-+#define __set_mm_counter(mm, member, value) \
-+ atomic_long_set(&(mm)->_##member, value)
-+#define get_mm_counter(mm, member) \
-+ ((unsigned long)atomic_long_read(&(mm)->_##member))
-+
-+#else /* NR_CPUS < CONFIG_SPLIT_PTLOCK_CPUS */
-+/*
-+ * The mm counters are protected by its page_table_lock,
-+ * so can be incremented directly.
-+ */
-+typedef unsigned long mm_counter_t;
-+#define __set_mm_counter(mm, member, value) (mm)->_##member = (value)
-+#define get_mm_counter(mm, member) ((mm)->_##member)
-+
-+#endif /* NR_CPUS < CONFIG_SPLIT_PTLOCK_CPUS */
-+
-+#define set_mm_counter(mm, member, value) \
-+ vx_ ## member ## pages_sub((mm), (get_mm_counter(mm, member) - value))
-+#define add_mm_counter(mm, member, value) \
-+ vx_ ## member ## pages_add((mm), (value))
-+#define inc_mm_counter(mm, member) vx_ ## member ## pages_inc((mm))
-+#define dec_mm_counter(mm, member) vx_ ## member ## pages_dec((mm))
-+
-+#define get_mm_rss(mm) \
-+ (get_mm_counter(mm, file_rss) + get_mm_counter(mm, anon_rss))
-+#define update_hiwater_rss(mm) do { \
-+ unsigned long _rss = get_mm_rss(mm); \
-+ if ((mm)->hiwater_rss < _rss) \
-+ (mm)->hiwater_rss = _rss; \
-+} while (0)
-+#define update_hiwater_vm(mm) do { \
-+ if ((mm)->hiwater_vm < (mm)->total_vm) \
-+ (mm)->hiwater_vm = (mm)->total_vm; \
-+} while (0)
-+
-+struct mm_struct {
-+ struct vm_area_struct * mmap; /* list of VMAs */
-+ struct rb_root mm_rb;
-+ struct vm_area_struct * mmap_cache; /* last find_vma result */
-+ unsigned long (*get_unmapped_area) (struct file *filp,
-+ unsigned long addr, unsigned long len,
-+ unsigned long pgoff, unsigned long flags);
-+ void (*unmap_area) (struct mm_struct *mm, unsigned long addr);
-+ unsigned long mmap_base; /* base of mmap area */
-+ unsigned long task_size; /* size of task vm space */
-+ unsigned long cached_hole_size; /* if non-zero, the largest hole below free_area_cache */
-+ unsigned long free_area_cache; /* first hole of size cached_hole_size or larger */
-+ pgd_t * pgd;
-+ atomic_t mm_users; /* How many users with user space? */
-+ atomic_t mm_count; /* How many references to "struct mm_struct" (users count as 1) */
-+ int map_count; /* number of VMAs */
-+ struct rw_semaphore mmap_sem;
-+ spinlock_t page_table_lock; /* Protects page tables and some counters */
-+
-+ struct list_head mmlist; /* List of maybe swapped mm's. These are globally strung
-+ * together off init_mm.mmlist, and are protected
-+ * by mmlist_lock
-+ */
-+
-+ /* Special counters, in some configurations protected by the
-+ * page_table_lock, in other configurations by being atomic.
-+ */
-+ mm_counter_t _file_rss;
-+ mm_counter_t _anon_rss;
-+
-+ unsigned long hiwater_rss; /* High-watermark of RSS usage */
-+ unsigned long hiwater_vm; /* High-water virtual memory usage */
-+
-+ unsigned long total_vm, locked_vm, shared_vm, exec_vm;
-+ unsigned long stack_vm, reserved_vm, def_flags, nr_ptes;
-+ unsigned long start_code, end_code, start_data, end_data;
-+ unsigned long start_brk, brk, start_stack;
-+ unsigned long arg_start, arg_end, env_start, env_end;
-+
-+ unsigned long saved_auxv[AT_VECTOR_SIZE]; /* for /proc/PID/auxv */
-+
-+ cpumask_t cpu_vm_mask;
-+
-+ /* Architecture-specific MM context */
-+ mm_context_t context;
-+ struct vx_info *mm_vx_info;
-+
-+ /* Swap token stuff */
-+ /*
-+ * Last value of global fault stamp as seen by this process.
-+ * In other words, this value gives an indication of how long
-+ * it has been since this task got the token.
-+ * Look at mm/thrash.c
-+ */
-+ unsigned int faultstamp;
-+ unsigned int token_priority;
-+ unsigned int last_interval;
-+
-+ unsigned char dumpable:2;
-+
-+ /* coredumping support */
-+ int core_waiters;
-+ struct completion *core_startup_done, core_done;
-+
-+ /* aio bits */
-+ rwlock_t ioctx_list_lock;
-+ struct kioctx *ioctx_list;
-+};
-+
-+struct sighand_struct {
-+ atomic_t count;
-+ struct k_sigaction action[_NSIG];
-+ spinlock_t siglock;
-+ struct list_head signalfd_list;
-+};
-+
-+struct pacct_struct {
-+ int ac_flag;
-+ long ac_exitcode;
-+ unsigned long ac_mem;
-+ cputime_t ac_utime, ac_stime;
-+ unsigned long ac_minflt, ac_majflt;
-+};
-+
-+/*
-+ * NOTE! "signal_struct" does not have it's own
-+ * locking, because a shared signal_struct always
-+ * implies a shared sighand_struct, so locking
-+ * sighand_struct is always a proper superset of
-+ * the locking of signal_struct.
-+ */
-+struct signal_struct {
-+ atomic_t count;
-+ atomic_t live;
-+
-+ wait_queue_head_t wait_chldexit; /* for wait4() */
-+
-+ /* current thread group signal load-balancing target: */
-+ struct task_struct *curr_target;
-+
-+ /* shared signal handling: */
-+ struct sigpending shared_pending;
-+
-+ /* thread group exit support */
-+ int group_exit_code;
-+ /* overloaded:
-+ * - notify group_exit_task when ->count is equal to notify_count
-+ * - everyone except group_exit_task is stopped during signal delivery
-+ * of fatal signals, group_exit_task processes the signal.
-+ */
-+ struct task_struct *group_exit_task;
-+ int notify_count;
-+
-+ /* thread group stop support, overloads group_exit_code too */
-+ int group_stop_count;
-+ unsigned int flags; /* see SIGNAL_* flags below */
-+
-+ /* POSIX.1b Interval Timers */
-+ struct list_head posix_timers;
-+
-+ /* ITIMER_REAL timer for the process */
-+ struct hrtimer real_timer;
-+ struct task_struct *tsk;
-+ ktime_t it_real_incr;
-+
-+ /* ITIMER_PROF and ITIMER_VIRTUAL timers for the process */
-+ cputime_t it_prof_expires, it_virt_expires;
-+ cputime_t it_prof_incr, it_virt_incr;
-+
-+ /* job control IDs */
-+ pid_t pgrp;
-+ struct pid *tty_old_pgrp;
-+
-+ union {
-+ pid_t session __deprecated;
-+ pid_t __session;
-+ };
-+
-+ /* boolean value for session group leader */
-+ int leader;
-+
-+ struct tty_struct *tty; /* NULL if no tty */
-+
-+ /*
-+ * Cumulative resource counters for dead threads in the group,
-+ * and for reaped dead child processes forked by this group.
-+ * Live threads maintain their own counters and add to these
-+ * in __exit_signal, except for the group leader.
-+ */
-+ cputime_t utime, stime, cutime, cstime;
-+ unsigned long nvcsw, nivcsw, cnvcsw, cnivcsw;
-+ unsigned long min_flt, maj_flt, cmin_flt, cmaj_flt;
-+ unsigned long inblock, oublock, cinblock, coublock;
-+
-+ /*
-+ * Cumulative ns of scheduled CPU time for dead threads in the
-+ * group, not including a zombie group leader. (This only differs
-+ * from jiffies_to_ns(utime + stime) if sched_clock uses something
-+ * other than jiffies.)
-+ */
-+ unsigned long long sched_time;
-+
-+ /*
-+ * We don't bother to synchronize most readers of this at all,
-+ * because there is no reader checking a limit that actually needs
-+ * to get both rlim_cur and rlim_max atomically, and either one
-+ * alone is a single word that can safely be read normally.
-+ * getrlimit/setrlimit use task_lock(current->group_leader) to
-+ * protect this instead of the siglock, because they really
-+ * have no need to disable irqs.
-+ */
-+ struct rlimit rlim[RLIM_NLIMITS];
-+
-+ struct list_head cpu_timers[3];
-+
-+ /* keep the process-shared keyrings here so that they do the right
-+ * thing in threads created with CLONE_THREAD */
-+#ifdef CONFIG_KEYS
-+ struct key *session_keyring; /* keyring inherited over fork */
-+ struct key *process_keyring; /* keyring private to this process */
-+#endif
-+#ifdef CONFIG_BSD_PROCESS_ACCT
-+ struct pacct_struct pacct; /* per-process accounting information */
-+#endif
-+#ifdef CONFIG_TASKSTATS
-+ struct taskstats *stats;
-+#endif
-+};
-+
-+/* Context switch must be unlocked if interrupts are to be enabled */
-+#ifdef __ARCH_WANT_INTERRUPTS_ON_CTXSW
-+# define __ARCH_WANT_UNLOCKED_CTXSW
-+#endif
-+
-+/*
-+ * Bits in flags field of signal_struct.
-+ */
-+#define SIGNAL_STOP_STOPPED 0x00000001 /* job control stop in effect */
-+#define SIGNAL_STOP_DEQUEUED 0x00000002 /* stop signal dequeued */
-+#define SIGNAL_STOP_CONTINUED 0x00000004 /* SIGCONT since WCONTINUED reap */
-+#define SIGNAL_GROUP_EXIT 0x00000008 /* group exit in progress */
-+
-+
-+/*
-+ * Priority of a process goes from 0..MAX_PRIO-1, valid RT
-+ * priority is 0..MAX_RT_PRIO-1, and SCHED_NORMAL/SCHED_BATCH
-+ * tasks are in the range MAX_RT_PRIO..MAX_PRIO-1. Priority
-+ * values are inverted: lower p->prio value means higher priority.
-+ *
-+ * The MAX_USER_RT_PRIO value allows the actual maximum
-+ * RT priority to be separate from the value exported to
-+ * user-space. This allows kernel threads to set their
-+ * priority to a value higher than any user task. Note:
-+ * MAX_RT_PRIO must not be smaller than MAX_USER_RT_PRIO.
-+ */
-+
-+#define MAX_USER_RT_PRIO 100
-+#define MAX_RT_PRIO MAX_USER_RT_PRIO
-+
-+#define MAX_PRIO (MAX_RT_PRIO + 40)
-+
-+#define rt_prio(prio) unlikely((prio) < MAX_RT_PRIO)
-+#define rt_task(p) rt_prio((p)->prio)
-+#define batch_task(p) (unlikely((p)->policy == SCHED_BATCH))
-+#define is_rt_policy(p) ((p) != SCHED_NORMAL && (p) != SCHED_BATCH)
-+#define has_rt_policy(p) unlikely(is_rt_policy((p)->policy))
-+
-+/*
-+ * Some day this will be a full-fledged user tracking system..
-+ */
-+struct user_struct {
-+ atomic_t __count; /* reference count */
-+ atomic_t processes; /* How many processes does this user have? */
-+ atomic_t files; /* How many open files does this user have? */
-+ atomic_t sigpending; /* How many pending signals does this user have? */
-+#ifdef CONFIG_INOTIFY_USER
-+ atomic_t inotify_watches; /* How many inotify watches does this user have? */
-+ atomic_t inotify_devs; /* How many inotify devs does this user have opened? */
-+#endif
-+ /* protected by mq_lock */
-+ unsigned long mq_bytes; /* How many bytes can be allocated to mqueue? */
-+ unsigned long locked_shm; /* How many pages of mlocked shm ? */
-+
-+#ifdef CONFIG_KEYS
-+ struct key *uid_keyring; /* UID specific keyring */
-+ struct key *session_keyring; /* UID's default session keyring */
-+#endif
-+
-+ /* Hash table maintenance information */
-+ struct list_head uidhash_list;
-+ uid_t uid;
-+ xid_t xid;
-+};
-+
-+extern struct user_struct *find_user(xid_t, uid_t);
-+
-+extern struct user_struct root_user;
-+#define INIT_USER (&root_user)
-+
-+struct backing_dev_info;
-+struct reclaim_state;
-+
-+#if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)
-+struct sched_info {
-+ /* cumulative counters */
-+ unsigned long cpu_time, /* time spent on the cpu */
-+ run_delay, /* time spent waiting on a runqueue */
-+ pcnt; /* # of timeslices run on this cpu */
-+
-+ /* timestamps */
-+ unsigned long last_arrival, /* when we last ran on a cpu */
-+ last_queued; /* when we were last queued to run */
-+};
-+#endif /* defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) */
-+
-+#ifdef CONFIG_SCHEDSTATS
-+extern const struct file_operations proc_schedstat_operations;
-+#endif /* CONFIG_SCHEDSTATS */
-+
-+#ifdef CONFIG_TASK_DELAY_ACCT
-+struct task_delay_info {
-+ spinlock_t lock;
-+ unsigned int flags; /* Private per-task flags */
-+
-+ /* For each stat XXX, add following, aligned appropriately
-+ *
-+ * struct timespec XXX_start, XXX_end;
-+ * u64 XXX_delay;
-+ * u32 XXX_count;
-+ *
-+ * Atomicity of updates to XXX_delay, XXX_count protected by
-+ * single lock above (split into XXX_lock if contention is an issue).
-+ */
-+
-+ /*
-+ * XXX_count is incremented on every XXX operation, the delay
-+ * associated with the operation is added to XXX_delay.
-+ * XXX_delay contains the accumulated delay time in nanoseconds.
-+ */
-+ struct timespec blkio_start, blkio_end; /* Shared by blkio, swapin */
-+ u64 blkio_delay; /* wait for sync block io completion */
-+ u64 swapin_delay; /* wait for swapin block io completion */
-+ u32 blkio_count; /* total count of the number of sync block */
-+ /* io operations performed */
-+ u32 swapin_count; /* total count of the number of swapin block */
-+ /* io operations performed */
-+};
-+#endif /* CONFIG_TASK_DELAY_ACCT */
-+
-+static inline int sched_info_on(void)
-+{
-+#ifdef CONFIG_SCHEDSTATS
-+ return 1;
-+#elif defined(CONFIG_TASK_DELAY_ACCT)
-+ extern int delayacct_on;
-+ return delayacct_on;
-+#else
-+ return 0;
-+#endif
-+}
-+
-+enum idle_type
-+{
-+ SCHED_IDLE,
-+ NOT_IDLE,
-+ NEWLY_IDLE,
-+ MAX_IDLE_TYPES
-+};
-+
-+/*
-+ * sched-domains (multiprocessor balancing) declarations:
-+ */
-+#define SCHED_LOAD_SCALE 128UL /* increase resolution of load */
-+
-+#ifdef CONFIG_SMP
-+#define SD_LOAD_BALANCE 1 /* Do load balancing on this domain. */
-+#define SD_BALANCE_NEWIDLE 2 /* Balance when about to become idle */
-+#define SD_BALANCE_EXEC 4 /* Balance on exec */
-+#define SD_BALANCE_FORK 8 /* Balance on fork, clone */
-+#define SD_WAKE_IDLE 16 /* Wake to idle CPU on task wakeup */
-+#define SD_WAKE_AFFINE 32 /* Wake task to waking CPU */
-+#define SD_WAKE_BALANCE 64 /* Perform balancing at task wakeup */
-+#define SD_SHARE_CPUPOWER 128 /* Domain members share cpu power */
-+#define SD_POWERSAVINGS_BALANCE 256 /* Balance for power savings */
-+#define SD_SHARE_PKG_RESOURCES 512 /* Domain members share cpu pkg resources */
-+#define SD_SERIALIZE 1024 /* Only a single load balancing instance */
-+
-+#define BALANCE_FOR_MC_POWER \
-+ (sched_smt_power_savings ? SD_POWERSAVINGS_BALANCE : 0)
-+
-+#define BALANCE_FOR_PKG_POWER \
-+ ((sched_mc_power_savings || sched_smt_power_savings) ? \
-+ SD_POWERSAVINGS_BALANCE : 0)
-+
-+#define test_sd_parent(sd, flag) ((sd->parent && \
-+ (sd->parent->flags & flag)) ? 1 : 0)
-+
-+
-+struct sched_group {
-+ struct sched_group *next; /* Must be a circular list */
-+ cpumask_t cpumask;
-+
-+ /*
-+ * CPU power of this group, SCHED_LOAD_SCALE being max power for a
-+ * single CPU. This is read only (except for setup, hotplug CPU).
-+ * Note : Never change cpu_power without recompute its reciprocal
-+ */
-+ unsigned int __cpu_power;
-+ /*
-+ * reciprocal value of cpu_power to avoid expensive divides
-+ * (see include/linux/reciprocal_div.h)
-+ */
-+ u32 reciprocal_cpu_power;
-+};
-+
-+struct sched_domain {
-+ /* These fields must be setup */
-+ struct sched_domain *parent; /* top domain must be null terminated */
-+ struct sched_domain *child; /* bottom domain must be null terminated */
-+ struct sched_group *groups; /* the balancing groups of the domain */
-+ cpumask_t span; /* span of all CPUs in this domain */
-+ unsigned long min_interval; /* Minimum balance interval ms */
-+ unsigned long max_interval; /* Maximum balance interval ms */
-+ unsigned int busy_factor; /* less balancing by factor if busy */
-+ unsigned int imbalance_pct; /* No balance until over watermark */
-+ unsigned long long cache_hot_time; /* Task considered cache hot (ns) */
-+ unsigned int cache_nice_tries; /* Leave cache hot tasks for # tries */
-+ unsigned int busy_idx;
-+ unsigned int idle_idx;
-+ unsigned int newidle_idx;
-+ unsigned int wake_idx;
-+ unsigned int forkexec_idx;
-+ int flags; /* See SD_* */
-+
-+ /* Runtime fields. */
-+ unsigned long last_balance; /* init to jiffies. units in jiffies */
-+ unsigned int balance_interval; /* initialise to 1. units in ms. */
-+ unsigned int nr_balance_failed; /* initialise to 0 */
-+
-+#ifdef CONFIG_SCHEDSTATS
-+ /* load_balance() stats */
-+ unsigned long lb_cnt[MAX_IDLE_TYPES];
-+ unsigned long lb_failed[MAX_IDLE_TYPES];
-+ unsigned long lb_balanced[MAX_IDLE_TYPES];
-+ unsigned long lb_imbalance[MAX_IDLE_TYPES];
-+ unsigned long lb_gained[MAX_IDLE_TYPES];
-+ unsigned long lb_hot_gained[MAX_IDLE_TYPES];
-+ unsigned long lb_nobusyg[MAX_IDLE_TYPES];
-+ unsigned long lb_nobusyq[MAX_IDLE_TYPES];
-+
-+ /* Active load balancing */
-+ unsigned long alb_cnt;
-+ unsigned long alb_failed;
-+ unsigned long alb_pushed;
-+
-+ /* SD_BALANCE_EXEC stats */
-+ unsigned long sbe_cnt;
-+ unsigned long sbe_balanced;
-+ unsigned long sbe_pushed;
-+
-+ /* SD_BALANCE_FORK stats */
-+ unsigned long sbf_cnt;
-+ unsigned long sbf_balanced;
-+ unsigned long sbf_pushed;
-+
-+ /* try_to_wake_up() stats */
-+ unsigned long ttwu_wake_remote;
-+ unsigned long ttwu_move_affine;
-+ unsigned long ttwu_move_balance;
-+#endif
-+};
-+
-+extern int partition_sched_domains(cpumask_t *partition1,
-+ cpumask_t *partition2);
-+
-+/*
-+ * Maximum cache size the migration-costs auto-tuning code will
-+ * search from:
-+ */
-+extern unsigned int max_cache_size;
-+
-+#endif /* CONFIG_SMP */
-+
-+
-+struct io_context; /* See blkdev.h */
-+struct cpuset;
-+
-+#define NGROUPS_SMALL 32
-+#define NGROUPS_PER_BLOCK ((int)(PAGE_SIZE / sizeof(gid_t)))
-+struct group_info {
-+ int ngroups;
-+ atomic_t usage;
-+ gid_t small_block[NGROUPS_SMALL];
-+ int nblocks;
-+ gid_t *blocks[0];
-+};
-+
-+/*
-+ * get_group_info() must be called with the owning task locked (via task_lock())
-+ * when task != current. The reason being that the vast majority of callers are
-+ * looking at current->group_info, which can not be changed except by the
-+ * current task. Changing current->group_info requires the task lock, too.
-+ */
-+#define get_group_info(group_info) do { \
-+ atomic_inc(&(group_info)->usage); \
-+} while (0)
-+
-+#define put_group_info(group_info) do { \
-+ if (atomic_dec_and_test(&(group_info)->usage)) \
-+ groups_free(group_info); \
-+} while (0)
-+
-+extern struct group_info *groups_alloc(int gidsetsize);
-+extern void groups_free(struct group_info *group_info);
-+extern int set_current_groups(struct group_info *group_info);
-+extern int groups_search(struct group_info *group_info, gid_t grp);
-+/* access the groups "array" with this macro */
-+#define GROUP_AT(gi, i) \
-+ ((gi)->blocks[(i)/NGROUPS_PER_BLOCK][(i)%NGROUPS_PER_BLOCK])
-+
-+#ifdef ARCH_HAS_PREFETCH_SWITCH_STACK
-+extern void prefetch_stack(struct task_struct *t);
-+#else
-+static inline void prefetch_stack(struct task_struct *t) { }
-+#endif
-+
-+struct audit_context; /* See audit.c */
-+struct mempolicy;
-+struct pipe_inode_info;
-+struct uts_namespace;
-+
-+enum sleep_type {
-+ SLEEP_NORMAL,
-+ SLEEP_NONINTERACTIVE,
-+ SLEEP_INTERACTIVE,
-+ SLEEP_INTERRUPTED,
-+};
-+
-+struct prio_array;
-+
-+struct task_struct {
-+ volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */
-+ void *stack;
-+ atomic_t usage;
-+ unsigned int flags; /* per process flags, defined below */
-+ unsigned int ptrace;
-+
-+ int lock_depth; /* BKL lock depth */
-+
-+#ifdef CONFIG_SMP
-+#ifdef __ARCH_WANT_UNLOCKED_CTXSW
-+ int oncpu;
-+#endif
-+#endif
-+ int load_weight; /* for niceness load balancing purposes */
-+ int prio, static_prio, normal_prio;
-+ struct list_head run_list;
-+ struct prio_array *array;
-+
-+ unsigned short ioprio;
-+#ifdef CONFIG_BLK_DEV_IO_TRACE
-+ unsigned int btrace_seq;
-+#endif
-+ unsigned long sleep_avg;
-+ unsigned long long timestamp, last_ran;
-+ unsigned long long sched_time; /* sched_clock time spent running */
-+ enum sleep_type sleep_type;
-+
-+ unsigned int policy;
-+ cpumask_t cpus_allowed;
-+ unsigned int time_slice, first_time_slice;
-+
-+#if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)
-+ struct sched_info sched_info;
-+#endif
-+
-+ struct list_head tasks;
-+ /*
-+ * ptrace_list/ptrace_children forms the list of my children
-+ * that were stolen by a ptracer.
-+ */
-+ struct list_head ptrace_children;
-+ struct list_head ptrace_list;
-+
-+ struct mm_struct *mm, *active_mm;
-+
-+/* task state */
-+ struct linux_binfmt *binfmt;
-+ int exit_state;
-+ int exit_code, exit_signal;
-+ int pdeath_signal; /* The signal sent when the parent dies */
-+ /* ??? */
-+ unsigned int personality;
-+ unsigned did_exec:1;
-+ pid_t pid;
-+ pid_t tgid;
-+
-+#ifdef CONFIG_CC_STACKPROTECTOR
-+ /* Canary value for the -fstack-protector gcc feature */
-+ unsigned long stack_canary;
-+#endif
-+ /*
-+ * pointers to (original) parent process, youngest child, younger sibling,
-+ * older sibling, respectively. (p->father can be replaced with
-+ * p->parent->pid)
-+ */
-+ struct task_struct *real_parent; /* real parent process (when being debugged) */
-+ struct task_struct *parent; /* parent process */
-+ /*
-+ * children/sibling forms the list of my children plus the
-+ * tasks I'm ptracing.
-+ */
-+ struct list_head children; /* list of my children */
-+ struct list_head sibling; /* linkage in my parent's children list */
-+ struct task_struct *group_leader; /* threadgroup leader */
-+
-+ /* PID/PID hash table linkage. */
-+ struct pid_link pids[PIDTYPE_MAX];
-+ struct list_head thread_group;
-+
-+ struct completion *vfork_done; /* for vfork() */
-+ int __user *set_child_tid; /* CLONE_CHILD_SETTID */
-+ int __user *clear_child_tid; /* CLONE_CHILD_CLEARTID */
-+
-+ unsigned int rt_priority;
-+ cputime_t utime, stime;
-+ unsigned long nvcsw, nivcsw; /* context switch counts */
-+ struct timespec start_time;
-+/* mm fault and swap info: this can arguably be seen as either mm-specific or thread-specific */
-+ unsigned long min_flt, maj_flt;
-+
-+ cputime_t it_prof_expires, it_virt_expires;
-+ unsigned long long it_sched_expires;
-+ struct list_head cpu_timers[3];
-+
-+/* process credentials */
-+ uid_t uid,euid,suid,fsuid;
-+ gid_t gid,egid,sgid,fsgid;
-+ struct group_info *group_info;
-+ kernel_cap_t cap_effective, cap_inheritable, cap_permitted;
-+ unsigned keep_capabilities:1;
-+ struct user_struct *user;
-+#ifdef CONFIG_KEYS
-+ struct key *request_key_auth; /* assumed request_key authority */
-+ struct key *thread_keyring; /* keyring private to this thread */
-+ unsigned char jit_keyring; /* default keyring to attach requested keys to */
-+#endif
-+ /*
-+ * fpu_counter contains the number of consecutive context switches
-+ * that the FPU is used. If this is over a threshold, the lazy fpu
-+ * saving becomes unlazy to save the trap. This is an unsigned char
-+ * so that after 256 times the counter wraps and the behavior turns
-+ * lazy again; this to deal with bursty apps that only use FPU for
-+ * a short time
-+ */
-+ unsigned char fpu_counter;
-+ int oomkilladj; /* OOM kill score adjustment (bit shift). */
-+ char comm[TASK_COMM_LEN]; /* executable name excluding path
-+ - access with [gs]et_task_comm (which lock
-+ it with task_lock())
-+ - initialized normally by flush_old_exec */
-+/* file system info */
-+ int link_count, total_link_count;
-+#ifdef CONFIG_SYSVIPC
-+/* ipc stuff */
-+ struct sysv_sem sysvsem;
-+#endif
-+/* CPU-specific state of this task */
-+ struct thread_struct thread;
-+/* filesystem information */
-+ struct fs_struct *fs;
-+/* open file information */
-+ struct files_struct *files;
-+/* namespaces */
-+ struct nsproxy *nsproxy;
-+/* signal handlers */
-+ struct signal_struct *signal;
-+ struct sighand_struct *sighand;
-+
-+ sigset_t blocked, real_blocked;
-+ sigset_t saved_sigmask; /* To be restored with TIF_RESTORE_SIGMASK */
-+ struct sigpending pending;
-+
-+ unsigned long sas_ss_sp;
-+ size_t sas_ss_size;
-+ int (*notifier)(void *priv);
-+ void *notifier_data;
-+ sigset_t *notifier_mask;
-+
-+ void *security;
-+ struct audit_context *audit_context;
-+
-+/* vserver context data */
-+ struct vx_info *vx_info;
-+ struct nx_info *nx_info;
-+
-+ xid_t xid;
-+ nid_t nid;
-+ tag_t tag;
-+
-+ seccomp_t seccomp;
-+
-+/* Thread group tracking */
-+ u32 parent_exec_id;
-+ u32 self_exec_id;
-+/* Protection of (de-)allocation: mm, files, fs, tty, keyrings */
-+ spinlock_t alloc_lock;
-+
-+ /* Protection of the PI data structures: */
-+ spinlock_t pi_lock;
-+
-+#ifdef CONFIG_RT_MUTEXES
-+ /* PI waiters blocked on a rt_mutex held by this task */
-+ struct plist_head pi_waiters;
-+ /* Deadlock detection and priority inheritance handling */
-+ struct rt_mutex_waiter *pi_blocked_on;
-+#endif
-+
-+#ifdef CONFIG_DEBUG_MUTEXES
-+ /* mutex deadlock detection */
-+ struct mutex_waiter *blocked_on;
-+#endif
-+#ifdef CONFIG_TRACE_IRQFLAGS
-+ unsigned int irq_events;
-+ int hardirqs_enabled;
-+ unsigned long hardirq_enable_ip;
-+ unsigned int hardirq_enable_event;
-+ unsigned long hardirq_disable_ip;
-+ unsigned int hardirq_disable_event;
-+ int softirqs_enabled;
-+ unsigned long softirq_disable_ip;
-+ unsigned int softirq_disable_event;
-+ unsigned long softirq_enable_ip;
-+ unsigned int softirq_enable_event;
-+ int hardirq_context;
-+ int softirq_context;
-+#endif
-+#ifdef CONFIG_LOCKDEP
-+# define MAX_LOCK_DEPTH 30UL
-+ u64 curr_chain_key;
-+ int lockdep_depth;
-+ struct held_lock held_locks[MAX_LOCK_DEPTH];
-+ unsigned int lockdep_recursion;
-+#endif
-+
-+/* journalling filesystem info */
-+ void *journal_info;
-+
-+/* stacked block device info */
-+ struct bio *bio_list, **bio_tail;
-+
-+/* VM state */
-+ struct reclaim_state *reclaim_state;
-+
-+ struct backing_dev_info *backing_dev_info;
-+
-+ struct io_context *io_context;
-+
-+ unsigned long ptrace_message;
-+ siginfo_t *last_siginfo; /* For ptrace use. */
-+/*
-+ * current io wait handle: wait queue entry to use for io waits
-+ * If this thread is processing aio, this points at the waitqueue
-+ * inside the currently handled kiocb. It may be NULL (i.e. default
-+ * to a stack based synchronous wait) if its doing sync IO.
-+ */
-+ wait_queue_t *io_wait;
-+#ifdef CONFIG_TASK_XACCT
-+/* i/o counters(bytes read/written, #syscalls */
-+ u64 rchar, wchar, syscr, syscw;
-+#endif
-+ struct task_io_accounting ioac;
-+#if defined(CONFIG_TASK_XACCT)
-+ u64 acct_rss_mem1; /* accumulated rss usage */
-+ u64 acct_vm_mem1; /* accumulated virtual memory usage */
-+ cputime_t acct_stimexpd;/* stime since last update */
-+#endif
-+#ifdef CONFIG_NUMA
-+ struct mempolicy *mempolicy;
-+ short il_next;
-+#endif
-+#ifdef CONFIG_CPUSETS
-+ struct cpuset *cpuset;
-+ nodemask_t mems_allowed;
-+ int cpuset_mems_generation;
-+ int cpuset_mem_spread_rotor;
-+#endif
-+ struct robust_list_head __user *robust_list;
-+#ifdef CONFIG_COMPAT
-+ struct compat_robust_list_head __user *compat_robust_list;
-+#endif
-+ struct list_head pi_state_list;
-+ struct futex_pi_state *pi_state_cache;
-+
-+ atomic_t fs_excl; /* holding fs exclusive resources */
-+ struct rcu_head rcu;
-+
-+ /*
-+ * cache last used pipe for splice
-+ */
-+ struct pipe_inode_info *splice_pipe;
-+#ifdef CONFIG_TASK_DELAY_ACCT
-+ struct task_delay_info *delays;
-+#endif
-+#ifdef CONFIG_FAULT_INJECTION
-+ int make_it_fail;
-+#endif
-+};
-+
-+static inline pid_t process_group(struct task_struct *tsk)
-+{
-+ return tsk->signal->pgrp;
-+}
-+
-+static inline pid_t signal_session(struct signal_struct *sig)
-+{
-+ return sig->__session;
-+}
-+
-+static inline pid_t process_session(struct task_struct *tsk)
-+{
-+ return signal_session(tsk->signal);
-+}
-+
-+static inline void set_signal_session(struct signal_struct *sig, pid_t session)
-+{
-+ sig->__session = session;
-+}
-+
-+static inline struct pid *task_pid(struct task_struct *task)
-+{
-+ return task->pids[PIDTYPE_PID].pid;
-+}
-+
-+static inline struct pid *task_tgid(struct task_struct *task)
-+{
-+ return task->group_leader->pids[PIDTYPE_PID].pid;
-+}
-+
-+static inline struct pid *task_pgrp(struct task_struct *task)
-+{
-+ return task->group_leader->pids[PIDTYPE_PGID].pid;
-+}
-+
-+static inline struct pid *task_session(struct task_struct *task)
-+{
-+ return task->group_leader->pids[PIDTYPE_SID].pid;
-+}
-+
-+/**
-+ * pid_alive - check that a task structure is not stale
-+ * @p: Task structure to be checked.
-+ *
-+ * Test if a process is not yet dead (at most zombie state)
-+ * If pid_alive fails, then pointers within the task structure
-+ * can be stale and must not be dereferenced.
-+ */
-+static inline int pid_alive(struct task_struct *p)
-+{
-+ return p->pids[PIDTYPE_PID].pid != NULL;
-+}
-+
-+/**
-+ * is_init - check if a task structure is init
-+ * @tsk: Task structure to be checked.
-+ *
-+ * Check if a task structure is the first user space task the kernel created.
-+ */
-+static inline int is_init(struct task_struct *tsk)
-+{
-+ return tsk->pid == 1;
-+}
-+
-+extern struct pid *cad_pid;
-+
-+extern void free_task(struct task_struct *tsk);
-+#define get_task_struct(tsk) do { atomic_inc(&(tsk)->usage); } while(0)
-+
-+extern void __put_task_struct(struct task_struct *t);
-+
-+static inline void put_task_struct(struct task_struct *t)
-+{
-+ if (atomic_dec_and_test(&t->usage))
-+ __put_task_struct(t);
-+}
-+
-+/*
-+ * Per process flags
-+ */
-+#define PF_ALIGNWARN 0x00000001 /* Print alignment warning msgs */
-+ /* Not implemented yet, only for 486*/
-+#define PF_STARTING 0x00000002 /* being created */
-+#define PF_EXITING 0x00000004 /* getting shut down */
-+#define PF_EXITPIDONE 0x00000008 /* pi exit done on shut down */
-+#define PF_FORKNOEXEC 0x00000040 /* forked but didn't exec */
-+#define PF_SUPERPRIV 0x00000100 /* used super-user privileges */
-+#define PF_DUMPCORE 0x00000200 /* dumped core */
-+#define PF_SIGNALED 0x00000400 /* killed by a signal */
-+#define PF_MEMALLOC 0x00000800 /* Allocating memory */
-+#define PF_FLUSHER 0x00001000 /* responsible for disk writeback */
-+#define PF_USED_MATH 0x00002000 /* if unset the fpu must be initialized before use */
-+#define PF_NOFREEZE 0x00008000 /* this thread should not be frozen */
-+#define PF_FROZEN 0x00010000 /* frozen for system suspend */
-+#define PF_FSTRANS 0x00020000 /* inside a filesystem transaction */
-+#define PF_KSWAPD 0x00040000 /* I am kswapd */
-+#define PF_SWAPOFF 0x00080000 /* I am in swapoff */
-+#define PF_LESS_THROTTLE 0x00100000 /* Throttle me less: I clean memory */
-+#define PF_BORROWED_MM 0x00200000 /* I am a kthread doing use_mm */
-+#define PF_RANDOMIZE 0x00400000 /* randomize virtual address space */
-+#define PF_SWAPWRITE 0x00800000 /* Allowed to write to swap */
-+#define PF_SPREAD_PAGE 0x01000000 /* Spread page cache over cpuset */
-+#define PF_SPREAD_SLAB 0x02000000 /* Spread some slab caches over cpuset */
-+#define PF_MEMPOLICY 0x10000000 /* Non-default NUMA mempolicy */
-+#define PF_MUTEX_TESTER 0x20000000 /* Thread belongs to the rt mutex tester */
-+#define PF_FREEZER_SKIP 0x40000000 /* Freezer should not count it as freezeable */
-+
-+/*
-+ * Only the _current_ task can read/write to tsk->flags, but other
-+ * tasks can access tsk->flags in readonly mode for example
-+ * with tsk_used_math (like during threaded core dumping).
-+ * There is however an exception to this rule during ptrace
-+ * or during fork: the ptracer task is allowed to write to the
-+ * child->flags of its traced child (same goes for fork, the parent
-+ * can write to the child->flags), because we're guaranteed the
-+ * child is not running and in turn not changing child->flags
-+ * at the same time the parent does it.
-+ */
-+#define clear_stopped_child_used_math(child) do { (child)->flags &= ~PF_USED_MATH; } while (0)
-+#define set_stopped_child_used_math(child) do { (child)->flags |= PF_USED_MATH; } while (0)
-+#define clear_used_math() clear_stopped_child_used_math(current)
-+#define set_used_math() set_stopped_child_used_math(current)
-+#define conditional_stopped_child_used_math(condition, child) \
-+ do { (child)->flags &= ~PF_USED_MATH, (child)->flags |= (condition) ? PF_USED_MATH : 0; } while (0)
-+#define conditional_used_math(condition) \
-+ conditional_stopped_child_used_math(condition, current)
-+#define copy_to_stopped_child_used_math(child) \
-+ do { (child)->flags &= ~PF_USED_MATH, (child)->flags |= current->flags & PF_USED_MATH; } while (0)
-+/* NOTE: this will return 0 or PF_USED_MATH, it will never return 1 */
-+#define tsk_used_math(p) ((p)->flags & PF_USED_MATH)
-+#define used_math() tsk_used_math(current)
-+
-+#ifdef CONFIG_SMP
-+extern int set_cpus_allowed(struct task_struct *p, cpumask_t new_mask);
-+#else
-+static inline int set_cpus_allowed(struct task_struct *p, cpumask_t new_mask)
-+{
-+ if (!cpu_isset(0, new_mask))
-+ return -EINVAL;
-+ return 0;
-+}
-+#endif
-+
-+extern unsigned long long sched_clock(void);
-+extern unsigned long long
-+current_sched_time(const struct task_struct *current_task);
-+
-+/* sched_exec is called by processes performing an exec */
-+#ifdef CONFIG_SMP
-+extern void sched_exec(void);
-+#else
-+#define sched_exec() {}
-+#endif
-+
-+#ifdef CONFIG_HOTPLUG_CPU
-+extern void idle_task_exit(void);
-+#else
-+static inline void idle_task_exit(void) {}
-+#endif
-+
-+extern void sched_idle_next(void);
-+
-+#ifdef CONFIG_RT_MUTEXES
-+extern int rt_mutex_getprio(struct task_struct *p);
-+extern void rt_mutex_setprio(struct task_struct *p, int prio);
-+extern void rt_mutex_adjust_pi(struct task_struct *p);
-+#else
-+static inline int rt_mutex_getprio(struct task_struct *p)
-+{
-+ return p->normal_prio;
-+}
-+# define rt_mutex_adjust_pi(p) do { } while (0)
-+#endif
-+
-+extern void set_user_nice(struct task_struct *p, long nice);
-+extern int task_prio(const struct task_struct *p);
-+extern int task_nice(const struct task_struct *p);
-+extern int can_nice(const struct task_struct *p, const int nice);
-+extern int task_curr(const struct task_struct *p);
-+extern int idle_cpu(int cpu);
-+extern int sched_setscheduler(struct task_struct *, int, struct sched_param *);
-+extern struct task_struct *idle_task(int cpu);
-+extern struct task_struct *curr_task(int cpu);
-+extern void set_curr_task(int cpu, struct task_struct *p);
-+
-+void yield(void);
-+
-+/*
-+ * The default (Linux) execution domain.
-+ */
-+extern struct exec_domain default_exec_domain;
-+
-+union thread_union {
-+ struct thread_info thread_info;
-+ unsigned long stack[THREAD_SIZE/sizeof(long)];
-+};
-+
-+#ifndef __HAVE_ARCH_KSTACK_END
-+static inline int kstack_end(void *addr)
-+{
-+ /* Reliable end of stack detection:
-+ * Some APM bios versions misalign the stack
-+ */
-+ return !(((unsigned long)addr+sizeof(void*)-1) & (THREAD_SIZE-sizeof(void*)));
-+}
-+#endif
-+
-+extern union thread_union init_thread_union;
-+extern struct task_struct init_task;
-+
-+extern struct mm_struct init_mm;
-+
-+#define find_task_by_real_pid(nr) \
-+ find_task_by_pid_type(PIDTYPE_REALPID, nr)
-+#define find_task_by_pid(nr) \
-+ find_task_by_pid_type(PIDTYPE_PID, nr)
-+
-+extern struct task_struct *find_task_by_pid_type(int type, int pid);
-+extern void __set_special_pids(pid_t session, pid_t pgrp);
-+
-+/* per-UID process charging. */
-+extern struct user_struct * alloc_uid(xid_t, uid_t);
-+static inline struct user_struct *get_uid(struct user_struct *u)
-+{
-+ atomic_inc(&u->__count);
-+ return u;
-+}
-+extern void free_uid(struct user_struct *);
-+extern void switch_uid(struct user_struct *);
-+
-+#include <asm/current.h>
-+
-+extern void do_timer(unsigned long ticks);
-+
-+extern int FASTCALL(wake_up_state(struct task_struct * tsk, unsigned int state));
-+extern int FASTCALL(wake_up_process(struct task_struct * tsk));
-+extern void FASTCALL(wake_up_new_task(struct task_struct * tsk,
-+ unsigned long clone_flags));
-+#ifdef CONFIG_SMP
-+ extern void kick_process(struct task_struct *tsk);
-+#else
-+ static inline void kick_process(struct task_struct *tsk) { }
-+#endif
-+extern void FASTCALL(sched_fork(struct task_struct * p, int clone_flags));
-+extern void FASTCALL(sched_exit(struct task_struct * p));
-+
-+extern int in_group_p(gid_t);
-+extern int in_egroup_p(gid_t);
-+
-+extern void proc_caches_init(void);
-+extern void flush_signals(struct task_struct *);
-+extern void ignore_signals(struct task_struct *);
-+extern void flush_signal_handlers(struct task_struct *, int force_default);
-+extern int dequeue_signal(struct task_struct *tsk, sigset_t *mask, siginfo_t *info);
-+
-+static inline int dequeue_signal_lock(struct task_struct *tsk, sigset_t *mask, siginfo_t *info)
-+{
-+ unsigned long flags;
-+ int ret;
-+
-+ spin_lock_irqsave(&tsk->sighand->siglock, flags);
-+ ret = dequeue_signal(tsk, mask, info);
-+ spin_unlock_irqrestore(&tsk->sighand->siglock, flags);
-+
-+ return ret;
-+}
-+
-+extern void block_all_signals(int (*notifier)(void *priv), void *priv,
-+ sigset_t *mask);
-+extern void unblock_all_signals(void);
-+extern void release_task(struct task_struct * p);
-+extern int send_sig_info(int, struct siginfo *, struct task_struct *);
-+extern int send_group_sig_info(int, struct siginfo *, struct task_struct *);
-+extern int force_sigsegv(int, struct task_struct *);
-+extern int force_sig_info(int, struct siginfo *, struct task_struct *);
-+extern int __kill_pgrp_info(int sig, struct siginfo *info, struct pid *pgrp);
-+extern int kill_pgrp_info(int sig, struct siginfo *info, struct pid *pgrp);
-+extern int kill_pid_info(int sig, struct siginfo *info, struct pid *pid);
-+extern int kill_pid_info_as_uid(int, struct siginfo *, struct pid *, uid_t, uid_t, u32);
-+extern int kill_pgrp(struct pid *pid, int sig, int priv);
-+extern int kill_pid(struct pid *pid, int sig, int priv);
-+extern int kill_proc_info(int, struct siginfo *, pid_t);
-+extern void do_notify_parent(struct task_struct *, int);
-+extern void force_sig(int, struct task_struct *);
-+extern void force_sig_specific(int, struct task_struct *);
-+extern int send_sig(int, struct task_struct *, int);
-+extern void zap_other_threads(struct task_struct *p);
-+extern int kill_proc(pid_t, int, int);
-+extern struct sigqueue *sigqueue_alloc(void);
-+extern void sigqueue_free(struct sigqueue *);
-+extern int send_sigqueue(int, struct sigqueue *, struct task_struct *);
-+extern int send_group_sigqueue(int, struct sigqueue *, struct task_struct *);
-+extern int do_sigaction(int, struct k_sigaction *, struct k_sigaction *);
-+extern int do_sigaltstack(const stack_t __user *, stack_t __user *, unsigned long);
-+
-+static inline int kill_cad_pid(int sig, int priv)
-+{
-+ return kill_pid(cad_pid, sig, priv);
-+}
-+
-+/* These can be the second arg to send_sig_info/send_group_sig_info. */
-+#define SEND_SIG_NOINFO ((struct siginfo *) 0)
-+#define SEND_SIG_PRIV ((struct siginfo *) 1)
-+#define SEND_SIG_FORCED ((struct siginfo *) 2)
-+
-+static inline int is_si_special(const struct siginfo *info)
-+{
-+ return info <= SEND_SIG_FORCED;
-+}
-+
-+/* True if we are on the alternate signal stack. */
-+
-+static inline int on_sig_stack(unsigned long sp)
-+{
-+ return (sp - current->sas_ss_sp < current->sas_ss_size);
-+}
-+
-+static inline int sas_ss_flags(unsigned long sp)
-+{
-+ return (current->sas_ss_size == 0 ? SS_DISABLE
-+ : on_sig_stack(sp) ? SS_ONSTACK : 0);
-+}
-+
-+/*
-+ * Routines for handling mm_structs
-+ */
-+extern struct mm_struct * mm_alloc(void);
-+
-+/* mmdrop drops the mm and the page tables */
-+extern void FASTCALL(__mmdrop(struct mm_struct *));
-+static inline void mmdrop(struct mm_struct * mm)
-+{
-+ if (atomic_dec_and_test(&mm->mm_count))
-+ __mmdrop(mm);
-+}
-+
-+/* mmput gets rid of the mappings and all user-space */
-+extern void mmput(struct mm_struct *);
-+/* Grab a reference to a task's mm, if it is not already going away */
-+extern struct mm_struct *get_task_mm(struct task_struct *task);
-+/* Remove the current tasks stale references to the old mm_struct */
-+extern void mm_release(struct task_struct *, struct mm_struct *);
-+
-+extern int copy_thread(int, unsigned long, unsigned long, unsigned long, struct task_struct *, struct pt_regs *);
-+extern void flush_thread(void);
-+extern void exit_thread(void);
-+
-+extern void exit_files(struct task_struct *);
-+extern void __cleanup_signal(struct signal_struct *);
-+extern void __cleanup_sighand(struct sighand_struct *);
-+extern void exit_itimers(struct signal_struct *);
-+
-+extern NORET_TYPE void do_group_exit(int);
-+
-+extern void daemonize(const char *, ...);
-+extern int allow_signal(int);
-+extern int disallow_signal(int);
-+
-+extern int do_execve(char *, char __user * __user *, char __user * __user *, struct pt_regs *);
-+extern long do_fork(unsigned long, unsigned long, struct pt_regs *, unsigned long, int __user *, int __user *);
-+struct task_struct *fork_idle(int);
-+
-+extern void set_task_comm(struct task_struct *tsk, char *from);
-+extern void get_task_comm(char *to, struct task_struct *tsk);
-+
-+#ifdef CONFIG_SMP
-+extern void wait_task_inactive(struct task_struct * p);
-+#else
-+#define wait_task_inactive(p) do { } while (0)
-+#endif
-+
-+#define remove_parent(p) list_del_init(&(p)->sibling)
-+#define add_parent(p) list_add_tail(&(p)->sibling,&(p)->parent->children)
-+
-+#define next_task(p) list_entry(rcu_dereference((p)->tasks.next), struct task_struct, tasks)
-+
-+#define for_each_process(p) \
-+ for (p = &init_task ; (p = next_task(p)) != &init_task ; )
-+
-+/*
-+ * Careful: do_each_thread/while_each_thread is a double loop so
-+ * 'break' will not work as expected - use goto instead.
-+ */
-+#define do_each_thread(g, t) \
-+ for (g = t = &init_task ; (g = t = next_task(g)) != &init_task ; ) do
-+
-+#define while_each_thread(g, t) \
-+ while ((t = next_thread(t)) != g)
-+
-+/* de_thread depends on thread_group_leader not being a pid based check */
-+#define thread_group_leader(p) (p == p->group_leader)
-+
-+/* Do to the insanities of de_thread it is possible for a process
-+ * to have the pid of the thread group leader without actually being
-+ * the thread group leader. For iteration through the pids in proc
-+ * all we care about is that we have a task with the appropriate
-+ * pid, we don't actually care if we have the right task.
-+ */
-+static inline int has_group_leader_pid(struct task_struct *p)
-+{
-+ return p->pid == p->tgid;
-+}
-+
-+static inline struct task_struct *next_thread(const struct task_struct *p)
-+{
-+ return list_entry(rcu_dereference(p->thread_group.next),
-+ struct task_struct, thread_group);
-+}
-+
-+static inline int thread_group_empty(struct task_struct *p)
-+{
-+ return list_empty(&p->thread_group);
-+}
-+
-+#define delay_group_leader(p) \
-+ (thread_group_leader(p) && !thread_group_empty(p))
-+
-+/*
-+ * Protects ->fs, ->files, ->mm, ->group_info, ->comm, keyring
-+ * subscriptions and synchronises with wait4(). Also used in procfs. Also
-+ * pins the final release of task.io_context. Also protects ->cpuset.
-+ *
-+ * Nests both inside and outside of read_lock(&tasklist_lock).
-+ * It must not be nested with write_lock_irq(&tasklist_lock),
-+ * neither inside nor outside.
-+ */
-+static inline void task_lock(struct task_struct *p)
-+{
-+ spin_lock(&p->alloc_lock);
-+}
-+
-+static inline void task_unlock(struct task_struct *p)
-+{
-+ spin_unlock(&p->alloc_lock);
-+}
-+
-+extern struct sighand_struct *lock_task_sighand(struct task_struct *tsk,
-+ unsigned long *flags);
-+
-+static inline void unlock_task_sighand(struct task_struct *tsk,
-+ unsigned long *flags)
-+{
-+ spin_unlock_irqrestore(&tsk->sighand->siglock, *flags);
-+}
-+
-+#ifndef __HAVE_THREAD_FUNCTIONS
-+
-+#define task_thread_info(task) ((struct thread_info *)(task)->stack)
-+#define task_stack_page(task) ((task)->stack)
-+
-+static inline void setup_thread_stack(struct task_struct *p, struct task_struct *org)
-+{
-+ *task_thread_info(p) = *task_thread_info(org);
-+ task_thread_info(p)->task = p;
-+}
-+
-+static inline unsigned long *end_of_stack(struct task_struct *p)
-+{
-+ return (unsigned long *)(task_thread_info(p) + 1);
-+}
-+
-+#endif
-+
-+/* set thread flags in other task's structures
-+ * - see asm/thread_info.h for TIF_xxxx flags available
-+ */
-+static inline void set_tsk_thread_flag(struct task_struct *tsk, int flag)
-+{
-+ set_ti_thread_flag(task_thread_info(tsk), flag);
-+}
-+
-+static inline void clear_tsk_thread_flag(struct task_struct *tsk, int flag)
-+{
-+ clear_ti_thread_flag(task_thread_info(tsk), flag);
-+}
-+
-+static inline int test_and_set_tsk_thread_flag(struct task_struct *tsk, int flag)
-+{
-+ return test_and_set_ti_thread_flag(task_thread_info(tsk), flag);
-+}
-+
-+static inline int test_and_clear_tsk_thread_flag(struct task_struct *tsk, int flag)
-+{
-+ return test_and_clear_ti_thread_flag(task_thread_info(tsk), flag);
-+}
-+
-+static inline int test_tsk_thread_flag(struct task_struct *tsk, int flag)
-+{
-+ return test_ti_thread_flag(task_thread_info(tsk), flag);
-+}
-+
-+static inline void set_tsk_need_resched(struct task_struct *tsk)
-+{
-+ set_tsk_thread_flag(tsk,TIF_NEED_RESCHED);
-+}
-+
-+static inline void clear_tsk_need_resched(struct task_struct *tsk)
-+{
-+ clear_tsk_thread_flag(tsk,TIF_NEED_RESCHED);
-+}
-+
-+static inline int signal_pending(struct task_struct *p)
-+{
-+ return unlikely(test_tsk_thread_flag(p,TIF_SIGPENDING));
-+}
-+
-+static inline int need_resched(void)
-+{
-+ return unlikely(test_thread_flag(TIF_NEED_RESCHED));
-+}
-+
-+/*
-+ * cond_resched() and cond_resched_lock(): latency reduction via
-+ * explicit rescheduling in places that are safe. The return
-+ * value indicates whether a reschedule was done in fact.
-+ * cond_resched_lock() will drop the spinlock before scheduling,
-+ * cond_resched_softirq() will enable bhs before scheduling.
-+ */
-+extern int cond_resched(void);
-+extern int cond_resched_lock(spinlock_t * lock);
-+extern int cond_resched_softirq(void);
-+
-+/*
-+ * Does a critical section need to be broken due to another
-+ * task waiting?:
-+ */
-+#if defined(CONFIG_PREEMPT) && defined(CONFIG_SMP)
-+# define need_lockbreak(lock) ((lock)->break_lock)
-+#else
-+# define need_lockbreak(lock) 0
-+#endif
-+
-+/*
-+ * Does a critical section need to be broken due to another
-+ * task waiting or preemption being signalled:
-+ */
-+static inline int lock_need_resched(spinlock_t *lock)
-+{
-+ if (need_lockbreak(lock) || need_resched())
-+ return 1;
-+ return 0;
-+}
-+
-+/*
-+ * Reevaluate whether the task has signals pending delivery.
-+ * Wake the task if so.
-+ * This is required every time the blocked sigset_t changes.
-+ * callers must hold sighand->siglock.
-+ */
-+extern void recalc_sigpending_and_wake(struct task_struct *t);
-+extern void recalc_sigpending(void);
-+
-+extern void signal_wake_up(struct task_struct *t, int resume_stopped);
-+
-+/*
-+ * Wrappers for p->thread_info->cpu access. No-op on UP.
-+ */
-+#ifdef CONFIG_SMP
-+
-+static inline unsigned int task_cpu(const struct task_struct *p)
-+{
-+ return task_thread_info(p)->cpu;
-+}
-+
-+static inline void set_task_cpu(struct task_struct *p, unsigned int cpu)
-+{
-+ task_thread_info(p)->cpu = cpu;
-+}
-+
-+#else
-+
-+static inline unsigned int task_cpu(const struct task_struct *p)
-+{
-+ return 0;
-+}
-+
-+static inline void set_task_cpu(struct task_struct *p, unsigned int cpu)
-+{
-+}
-+
-+#endif /* CONFIG_SMP */
-+
-+#ifdef HAVE_ARCH_PICK_MMAP_LAYOUT
-+extern void arch_pick_mmap_layout(struct mm_struct *mm);
-+#else
-+static inline void arch_pick_mmap_layout(struct mm_struct *mm)
-+{
-+ mm->mmap_base = TASK_UNMAPPED_BASE;
-+ mm->get_unmapped_area = arch_get_unmapped_area;
-+ mm->unmap_area = arch_unmap_area;
-+}
-+#endif
-+
-+extern long sched_setaffinity(pid_t pid, cpumask_t new_mask);
-+extern long sched_getaffinity(pid_t pid, cpumask_t *mask);
-+
-+extern int sched_mc_power_savings, sched_smt_power_savings;
-+
-+extern void normalize_rt_tasks(void);
-+
-+#ifdef CONFIG_TASK_XACCT
-+static inline void add_rchar(struct task_struct *tsk, ssize_t amt)
-+{
-+ tsk->rchar += amt;
-+}
-+
-+static inline void add_wchar(struct task_struct *tsk, ssize_t amt)
-+{
-+ tsk->wchar += amt;
-+}
-+
-+static inline void inc_syscr(struct task_struct *tsk)
-+{
-+ tsk->syscr++;
-+}
-+
-+static inline void inc_syscw(struct task_struct *tsk)
-+{
-+ tsk->syscw++;
-+}
-+#else
-+static inline void add_rchar(struct task_struct *tsk, ssize_t amt)
-+{
-+}
-+
-+static inline void add_wchar(struct task_struct *tsk, ssize_t amt)
-+{
-+}
-+
-+static inline void inc_syscr(struct task_struct *tsk)
-+{
-+}
-+
-+static inline void inc_syscw(struct task_struct *tsk)
-+{
-+}
-+#endif
-+
-+#endif /* __KERNEL__ */
-+
-+#endif
-diff -Nurb --exclude='*.swp' --exclude=tags --exclude='*.patch' --exclude='*.diff' linux-2.6.22-580/kernel/mutex.c linux-2.6.22-590/kernel/mutex.c
---- linux-2.6.22-580/kernel/mutex.c 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22-590/kernel/mutex.c 2009-02-18 09:57:23.000000000 -0500
-@@ -18,6 +18,17 @@
- #include <linux/spinlock.h>
- #include <linux/interrupt.h>
- #include <linux/debug_locks.h>
-+#include <linux/arrays.h>
-+
-+#undef CONFIG_CHOPSTIX
-+#ifdef CONFIG_CHOPSTIX
-+struct event_spec {
-+ unsigned long pc;
-+ unsigned long dcookie;
-+ unsigned count;
-+ unsigned char reason;
-+};
-+#endif
-
- /*
- * In the DEBUG case we are using the "NULL fastpath" for mutexes,
-@@ -43,6 +54,9 @@
- __mutex_init(struct mutex *lock, const char *name, struct lock_class_key *key)
- {
- atomic_set(&lock->count, 1);
-+#ifdef CONFIG_CHOPSTIX
-+ lock->owner=NULL;
-+#endif
- spin_lock_init(&lock->wait_lock);
- INIT_LIST_HEAD(&lock->wait_list);
-
-@@ -88,6 +102,7 @@
- * The locking fastpath is the 1->0 transition from
- * 'unlocked' into 'locked' state.
- */
-+
- __mutex_fastpath_lock(&lock->count, __mutex_lock_slowpath);
- }
-
-@@ -168,6 +183,27 @@
- }
- __set_task_state(task, state);
-
-+#ifdef CONFIG_CHOPSTIX
-+ if (rec_event) {
-+ if (lock->owner) {
-+ struct event event;
-+ struct event_spec espec;
-+ struct task_struct *p = lock->owner->task;
-+ /*spin_lock(&p->alloc_lock);*/
-+ espec.reason = 0; /* lock */
-+ event.event_data=&espec;
-+ event.task = p;
-+ espec.pc=lock;
-+ event.event_type=5;
-+ (*rec_event)(&event, 1);
-+ /*spin_unlock(&p->alloc_lock);*/
-+
-+ }
-+ else
-+ BUG();
-+ }
-+#endif
-+
- /* didnt get the lock, go to sleep: */
- spin_unlock_mutex(&lock->wait_lock, flags);
- schedule();
-@@ -177,6 +213,9 @@
- /* got the lock - rejoice! */
- mutex_remove_waiter(lock, &waiter, task_thread_info(task));
- debug_mutex_set_owner(lock, task_thread_info(task));
-+#ifdef CONFIG_CHOPSTIX
-+ lock->owner = task_thread_info(task);
-+#endif
-
- /* set it to 0 if there are no waiters left: */
- if (likely(list_empty(&lock->wait_list)))
-@@ -202,6 +241,7 @@
- mutex_lock_nested(struct mutex *lock, unsigned int subclass)
- {
- might_sleep();
-+
- __mutex_lock_common(lock, TASK_UNINTERRUPTIBLE, subclass);
- }
-
-@@ -211,6 +251,7 @@
- mutex_lock_interruptible_nested(struct mutex *lock, unsigned int subclass)
- {
- might_sleep();
-+
- return __mutex_lock_common(lock, TASK_INTERRUPTIBLE, subclass);
- }
-
-@@ -246,6 +287,23 @@
-
- debug_mutex_wake_waiter(lock, waiter);
-
-+#ifdef CONFIG_CHOPSTIX
-+ if (rec_event) {
-+ if (lock->owner) {
-+ struct event event;
-+ struct event_spec espec;
-+
-+ espec.reason = 1; /* unlock */
-+ event.event_data=&espec;
-+ event.task = lock->owner->task;
-+ espec.pc=lock;
-+ event.event_type=5;
-+ (*rec_event)(&event, 1);
-+ }
-+ else
-+ BUG();
-+ }
-+#endif
- wake_up_process(waiter->task);
- }
-
-diff -Nurb --exclude='*.swp' --exclude=tags --exclude='*.patch' --exclude='*.diff' linux-2.6.22-580/kernel/sched.c linux-2.6.22-590/kernel/sched.c
---- linux-2.6.22-580/kernel/sched.c 2009-02-18 09:56:02.000000000 -0500
-+++ linux-2.6.22-590/kernel/sched.c 2009-02-18 09:57:23.000000000 -0500
-@@ -10,7 +10,7 @@
- * 1998-11-19 Implemented schedule_timeout() and related stuff
- * by Andrea Arcangeli
- * 2002-01-04 New ultra-scalable O(1) scheduler by Ingo Molnar:
-- * hybrid priority-list and round-robin design with
-+ * hybrid priority-list and round-robin deventn with
- * an array-switch method of distributing timeslices
- * and per-CPU runqueues. Cleanups and useful suggestions
- * by Davide Libenzi, preemptible kernel bits by Robert Love.
-@@ -23,6 +23,7 @@
- #include <linux/nmi.h>
- #include <linux/init.h>
- #include <asm/uaccess.h>
-+#include <linux/arrays.h>
- #include <linux/highmem.h>
- #include <linux/smp_lock.h>
- #include <asm/mmu_context.h>
-@@ -59,6 +60,9 @@
- #include <linux/vs_sched.h>
- #include <linux/vs_cvirt.h>
-
-+#define INTERRUPTIBLE -1
-+#define RUNNING 0
-+
- /*
- * Scheduler clock - returns current time in nanosec units.
- * This is default implementation.
-@@ -431,6 +435,7 @@
-
- repeat_lock_task:
- rq = task_rq(p);
-+
- spin_lock(&rq->lock);
- if (unlikely(rq != task_rq(p))) {
- spin_unlock(&rq->lock);
-@@ -1741,6 +1746,21 @@
- * event cannot wake it up and insert it on the runqueue either.
- */
- p->state = TASK_RUNNING;
-+#ifdef CONFIG_CHOPSTIX
-+ /* The jiffy of last interruption */
-+ if (p->state & TASK_UNINTERRUPTIBLE) {
-+ p->last_interrupted=jiffies;
-+ }
-+ else
-+ if (p->state & TASK_INTERRUPTIBLE) {
-+ p->last_interrupted=INTERRUPTIBLE;
-+ }
-+ else
-+ p->last_interrupted=RUNNING;
-+
-+ /* The jiffy of last execution */
-+ p->last_ran_j=jiffies;
-+#endif
-
- /*
- * Make sure we do not leak PI boosting priority to the child:
-@@ -3608,6 +3628,7 @@
-
- #endif
-
-+
- static inline int interactive_sleep(enum sleep_type sleep_type)
- {
- return (sleep_type == SLEEP_INTERACTIVE ||
-@@ -3617,16 +3638,28 @@
- /*
- * schedule() is the main scheduler function.
- */
-+
-+#ifdef CONFIG_CHOPSTIX
-+extern void (*rec_event)(void *,unsigned int);
-+struct event_spec {
-+ unsigned long pc;
-+ unsigned long dcookie;
-+ unsigned count;
-+ unsigned char reason;
-+};
-+#endif
-+
- asmlinkage void __sched schedule(void)
- {
- struct task_struct *prev, *next;
- struct prio_array *array;
- struct list_head *queue;
- unsigned long long now;
-- unsigned long run_time;
-+ unsigned long run_time, diff;
- int cpu, idx, new_prio;
- long *switch_count;
- struct rq *rq;
-+ int sampling_reason;
-
- /*
- * Test if we are atomic. Since do_exit() needs to call into
-@@ -3680,6 +3713,7 @@
- switch_count = &prev->nivcsw;
- if (prev->state && !(preempt_count() & PREEMPT_ACTIVE)) {
- switch_count = &prev->nvcsw;
-+
- if (unlikely((prev->state & TASK_INTERRUPTIBLE) &&
- unlikely(signal_pending(prev))))
- prev->state = TASK_RUNNING;
-@@ -3689,6 +3723,17 @@
- vx_uninterruptible_inc(prev);
- }
- deactivate_task(prev, rq);
-+#ifdef CONFIG_CHOPSTIX
-+ /* An uninterruptible process just yielded. Record the current jiffie */
-+ if (prev->state & TASK_UNINTERRUPTIBLE) {
-+ prev->last_interrupted=jiffies;
-+ }
-+ /* An interruptible process just yielded, or it got preempted.
-+ * Mark it as interruptible */
-+ else if (prev->state & TASK_INTERRUPTIBLE) {
-+ prev->last_interrupted=INTERRUPTIBLE;
-+ }
-+#endif
- }
- }
-
-@@ -3765,6 +3810,40 @@
- prev->sleep_avg = 0;
- prev->timestamp = prev->last_ran = now;
-
-+#ifdef CONFIG_CHOPSTIX
-+ /* Run only if the Chopstix module so decrees it */
-+ if (rec_event) {
-+ prev->last_ran_j = jiffies;
-+ if (next->last_interrupted!=INTERRUPTIBLE) {
-+ if (next->last_interrupted!=RUNNING) {
-+ diff = (jiffies-next->last_interrupted);
-+ sampling_reason = 0;/* BLOCKING */
-+ }
-+ else {
-+ diff = jiffies-next->last_ran_j;
-+ sampling_reason = 1;/* PREEMPTION */
-+ }
-+
-+ if (diff >= HZ/10) {
-+ struct event event;
-+ struct event_spec espec;
-+ unsigned long eip;
-+
-+ espec.reason = sampling_reason;
-+ eip = next->thread.esp & 4095;
-+ event.event_data=&espec;
-+ event.task=next;
-+ espec.pc=eip;
-+ event.event_type=2;
-+ /* index in the event array currently set up */
-+ /* make sure the counters are loaded in the order we want them to show up*/
-+ (*rec_event)(&event, diff);
-+ }
-+ }
-+ /* next has been elected to run */
-+ next->last_interrupted=0;
-+ }
-+#endif
- sched_info_switch(prev, next);
- if (likely(prev != next)) {
- next->timestamp = next->last_ran = now;
-@@ -4664,6 +4743,7 @@
- get_task_struct(p);
- read_unlock(&tasklist_lock);
-
-+
- retval = -EPERM;
- if ((current->euid != p->euid) && (current->euid != p->uid) &&
- !capable(CAP_SYS_NICE))
-@@ -5032,6 +5112,7 @@
- jiffies_to_timespec(p->policy == SCHED_FIFO ?
- 0 : task_timeslice(p), &t);
- read_unlock(&tasklist_lock);
-+
- retval = copy_to_user(interval, &t, sizeof(t)) ? -EFAULT : 0;
- out_nounlock:
- return retval;
-@@ -7275,3 +7356,14 @@
- }
-
- #endif
-+
-+#ifdef CONFIG_CHOPSTIX
-+void (*rec_event)(void *,unsigned int) = NULL;
-+
-+/* To support safe calling from asm */
-+asmlinkage void rec_event_asm (struct event *event_signature_in, unsigned int count) {
-+ (*rec_event)(event_signature_in, count);
-+}
-+EXPORT_SYMBOL(rec_event);
-+EXPORT_SYMBOL(in_sched_functions);
-+#endif
-diff -Nurb --exclude='*.swp' --exclude=tags --exclude='*.patch' --exclude='*.diff' linux-2.6.22-580/kernel/sched.c.orig linux-2.6.22-590/kernel/sched.c.orig
---- linux-2.6.22-580/kernel/sched.c.orig 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.22-590/kernel/sched.c.orig 2009-02-18 09:56:02.000000000 -0500
-@@ -0,0 +1,7277 @@
-+/*
-+ * kernel/sched.c
-+ *
-+ * Kernel scheduler and related syscalls
-+ *
-+ * Copyright (C) 1991-2002 Linus Torvalds
-+ *
-+ * 1996-12-23 Modified by Dave Grothe to fix bugs in semaphores and
-+ * make semaphores SMP safe
-+ * 1998-11-19 Implemented schedule_timeout() and related stuff
-+ * by Andrea Arcangeli
-+ * 2002-01-04 New ultra-scalable O(1) scheduler by Ingo Molnar:
-+ * hybrid priority-list and round-robin design with
-+ * an array-switch method of distributing timeslices
-+ * and per-CPU runqueues. Cleanups and useful suggestions
-+ * by Davide Libenzi, preemptible kernel bits by Robert Love.
-+ * 2003-09-03 Interactivity tuning by Con Kolivas.
-+ * 2004-04-02 Scheduler domains code by Nick Piggin
-+ */
-+
-+#include <linux/mm.h>
-+#include <linux/module.h>
-+#include <linux/nmi.h>
-+#include <linux/init.h>
-+#include <asm/uaccess.h>
-+#include <linux/highmem.h>
-+#include <linux/smp_lock.h>
-+#include <asm/mmu_context.h>
-+#include <linux/interrupt.h>
-+#include <linux/capability.h>
-+#include <linux/completion.h>
-+#include <linux/kernel_stat.h>
-+#include <linux/debug_locks.h>
-+#include <linux/security.h>
-+#include <linux/notifier.h>
-+#include <linux/profile.h>
-+#include <linux/freezer.h>
-+#include <linux/vmalloc.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <linux/smp.h>
-+#include <linux/threads.h>
-+#include <linux/timer.h>
-+#include <linux/rcupdate.h>
-+#include <linux/cpu.h>
-+#include <linux/cpuset.h>
-+#include <linux/percpu.h>
-+#include <linux/kthread.h>
-+#include <linux/seq_file.h>
-+#include <linux/syscalls.h>
-+#include <linux/times.h>
-+#include <linux/tsacct_kern.h>
-+#include <linux/kprobes.h>
-+#include <linux/delayacct.h>
-+#include <linux/reciprocal_div.h>
-+
-+#include <asm/tlb.h>
-+#include <asm/unistd.h>
-+#include <linux/vs_sched.h>
-+#include <linux/vs_cvirt.h>
-+
-+/*
-+ * Scheduler clock - returns current time in nanosec units.
-+ * This is default implementation.
-+ * Architectures and sub-architectures can override this.
-+ */
-+unsigned long long __attribute__((weak)) sched_clock(void)
-+{
-+ return (unsigned long long)jiffies * (1000000000 / HZ);
-+}
-+
-+/*
-+ * Convert user-nice values [ -20 ... 0 ... 19 ]
-+ * to static priority [ MAX_RT_PRIO..MAX_PRIO-1 ],
-+ * and back.
-+ */
-+#define NICE_TO_PRIO(nice) (MAX_RT_PRIO + (nice) + 20)
-+#define PRIO_TO_NICE(prio) ((prio) - MAX_RT_PRIO - 20)
-+#define TASK_NICE(p) PRIO_TO_NICE((p)->static_prio)
-+
-+/*
-+ * 'User priority' is the nice value converted to something we
-+ * can work with better when scaling various scheduler parameters,
-+ * it's a [ 0 ... 39 ] range.
-+ */
-+#define USER_PRIO(p) ((p)-MAX_RT_PRIO)
-+#define TASK_USER_PRIO(p) USER_PRIO((p)->static_prio)
-+#define MAX_USER_PRIO (USER_PRIO(MAX_PRIO))
-+
-+/*
-+ * Some helpers for converting nanosecond timing to jiffy resolution
-+ */
-+#define NS_TO_JIFFIES(TIME) ((TIME) / (1000000000 / HZ))
-+#define JIFFIES_TO_NS(TIME) ((TIME) * (1000000000 / HZ))
-+
-+/*
-+ * These are the 'tuning knobs' of the scheduler:
-+ *
-+ * Minimum timeslice is 5 msecs (or 1 jiffy, whichever is larger),
-+ * default timeslice is 100 msecs, maximum timeslice is 800 msecs.
-+ * Timeslices get refilled after they expire.
-+ */
-+#define MIN_TIMESLICE max(5 * HZ / 1000, 1)
-+#define DEF_TIMESLICE (100 * HZ / 1000)
-+#define ON_RUNQUEUE_WEIGHT 30
-+#define CHILD_PENALTY 95
-+#define PARENT_PENALTY 100
-+#define EXIT_WEIGHT 3
-+#define PRIO_BONUS_RATIO 25
-+#define MAX_BONUS (MAX_USER_PRIO * PRIO_BONUS_RATIO / 100)
-+#define INTERACTIVE_DELTA 2
-+#define MAX_SLEEP_AVG (DEF_TIMESLICE * MAX_BONUS)
-+#define STARVATION_LIMIT (MAX_SLEEP_AVG)
-+#define NS_MAX_SLEEP_AVG (JIFFIES_TO_NS(MAX_SLEEP_AVG))
-+
-+/*
-+ * If a task is 'interactive' then we reinsert it in the active
-+ * array after it has expired its current timeslice. (it will not
-+ * continue to run immediately, it will still roundrobin with
-+ * other interactive tasks.)
-+ *
-+ * This part scales the interactivity limit depending on niceness.
-+ *
-+ * We scale it linearly, offset by the INTERACTIVE_DELTA delta.
-+ * Here are a few examples of different nice levels:
-+ *
-+ * TASK_INTERACTIVE(-20): [1,1,1,1,1,1,1,1,1,0,0]
-+ * TASK_INTERACTIVE(-10): [1,1,1,1,1,1,1,0,0,0,0]
-+ * TASK_INTERACTIVE( 0): [1,1,1,1,0,0,0,0,0,0,0]
-+ * TASK_INTERACTIVE( 10): [1,1,0,0,0,0,0,0,0,0,0]
-+ * TASK_INTERACTIVE( 19): [0,0,0,0,0,0,0,0,0,0,0]
-+ *
-+ * (the X axis represents the possible -5 ... 0 ... +5 dynamic
-+ * priority range a task can explore, a value of '1' means the
-+ * task is rated interactive.)
-+ *
-+ * Ie. nice +19 tasks can never get 'interactive' enough to be
-+ * reinserted into the active array. And only heavily CPU-hog nice -20
-+ * tasks will be expired. Default nice 0 tasks are somewhere between,
-+ * it takes some effort for them to get interactive, but it's not
-+ * too hard.
-+ */
-+
-+#define CURRENT_BONUS(p) \
-+ (NS_TO_JIFFIES((p)->sleep_avg) * MAX_BONUS / \
-+ MAX_SLEEP_AVG)
-+
-+#define GRANULARITY (10 * HZ / 1000 ? : 1)
-+
-+#ifdef CONFIG_SMP
-+#define TIMESLICE_GRANULARITY(p) (GRANULARITY * \
-+ (1 << (((MAX_BONUS - CURRENT_BONUS(p)) ? : 1) - 1)) * \
-+ num_online_cpus())
-+#else
-+#define TIMESLICE_GRANULARITY(p) (GRANULARITY * \
-+ (1 << (((MAX_BONUS - CURRENT_BONUS(p)) ? : 1) - 1)))
-+#endif
-+
-+#define SCALE(v1,v1_max,v2_max) \
-+ (v1) * (v2_max) / (v1_max)
-+
-+#define DELTA(p) \
-+ (SCALE(TASK_NICE(p) + 20, 40, MAX_BONUS) - 20 * MAX_BONUS / 40 + \
-+ INTERACTIVE_DELTA)
-+
-+#define TASK_INTERACTIVE(p) \
-+ ((p)->prio <= (p)->static_prio - DELTA(p))
-+
-+#define INTERACTIVE_SLEEP(p) \
-+ (JIFFIES_TO_NS(MAX_SLEEP_AVG * \
-+ (MAX_BONUS / 2 + DELTA((p)) + 1) / MAX_BONUS - 1))
-+
-+#define TASK_PREEMPTS_CURR(p, rq) \
-+ ((p)->prio < (rq)->curr->prio)
-+
-+#define SCALE_PRIO(x, prio) \
-+ max(x * (MAX_PRIO - prio) / (MAX_USER_PRIO / 2), MIN_TIMESLICE)
-+
-+static unsigned int static_prio_timeslice(int static_prio)
-+{
-+ if (static_prio < NICE_TO_PRIO(0))
-+ return SCALE_PRIO(DEF_TIMESLICE * 4, static_prio);
-+ else
-+ return SCALE_PRIO(DEF_TIMESLICE, static_prio);
-+}
-+
-+#ifdef CONFIG_SMP
-+/*
-+ * Divide a load by a sched group cpu_power : (load / sg->__cpu_power)
-+ * Since cpu_power is a 'constant', we can use a reciprocal divide.
-+ */
-+static inline u32 sg_div_cpu_power(const struct sched_group *sg, u32 load)
-+{
-+ return reciprocal_divide(load, sg->reciprocal_cpu_power);
-+}
-+
-+/*
-+ * Each time a sched group cpu_power is changed,
-+ * we must compute its reciprocal value
-+ */
-+static inline void sg_inc_cpu_power(struct sched_group *sg, u32 val)
-+{
-+ sg->__cpu_power += val;
-+ sg->reciprocal_cpu_power = reciprocal_value(sg->__cpu_power);
-+}
-+#endif
-+
-+/*
-+ * task_timeslice() scales user-nice values [ -20 ... 0 ... 19 ]
-+ * to time slice values: [800ms ... 100ms ... 5ms]
-+ *
-+ * The higher a thread's priority, the bigger timeslices
-+ * it gets during one round of execution. But even the lowest
-+ * priority thread gets MIN_TIMESLICE worth of execution time.
-+ */
-+
-+static inline unsigned int task_timeslice(struct task_struct *p)
-+{
-+ return static_prio_timeslice(p->static_prio);
-+}
-+
-+/*
-+ * These are the runqueue data structures:
-+ */
-+
-+struct prio_array {
-+ unsigned int nr_active;
-+ DECLARE_BITMAP(bitmap, MAX_PRIO+1); /* include 1 bit for delimiter */
-+ struct list_head queue[MAX_PRIO];
-+};
-+
-+/*
-+ * This is the main, per-CPU runqueue data structure.
-+ *
-+ * Locking rule: those places that want to lock multiple runqueues
-+ * (such as the load balancing or the thread migration code), lock
-+ * acquire operations must be ordered by ascending &runqueue.
-+ */
-+struct rq {
-+ spinlock_t lock;
-+
-+ /*
-+ * nr_running and cpu_load should be in the same cacheline because
-+ * remote CPUs use both these fields when doing load calculation.
-+ */
-+ unsigned long nr_running;
-+ unsigned long raw_weighted_load;
-+#ifdef CONFIG_SMP
-+ unsigned long cpu_load[3];
-+ unsigned char idle_at_tick;
-+#ifdef CONFIG_NO_HZ
-+ unsigned char in_nohz_recently;
-+#endif
-+#endif
-+ unsigned long long nr_switches;
-+
-+ /*
-+ * This is part of a global counter where only the total sum
-+ * over all CPUs matters. A task can increase this counter on
-+ * one CPU and if it got migrated afterwards it may decrease
-+ * it on another CPU. Always updated under the runqueue lock:
-+ */
-+ unsigned long nr_uninterruptible;
-+
-+ unsigned long expired_timestamp;
-+ /* Cached timestamp set by update_cpu_clock() */
-+ unsigned long long most_recent_timestamp;
-+ struct task_struct *curr, *idle;
-+ unsigned long next_balance;
-+ struct mm_struct *prev_mm;
-+ struct prio_array *active, *expired, arrays[2];
-+ int best_expired_prio;
-+ atomic_t nr_iowait;
-+
-+#ifdef CONFIG_SMP
-+ struct sched_domain *sd;
-+
-+ /* For active balancing */
-+ int active_balance;
-+ int push_cpu;
-+ int cpu; /* cpu of this runqueue */
-+
-+ struct task_struct *migration_thread;
-+ struct list_head migration_queue;
-+#endif
-+ unsigned long norm_time;
-+ unsigned long idle_time;
-+#ifdef CONFIG_VSERVER_IDLETIME
-+ int idle_skip;
-+#endif
-+#ifdef CONFIG_VSERVER_HARDCPU
-+ struct list_head hold_queue;
-+ unsigned long nr_onhold;
-+ int idle_tokens;
-+#endif
-+
-+#ifdef CONFIG_SCHEDSTATS
-+ /* latency stats */
-+ struct sched_info rq_sched_info;
-+
-+ /* sys_sched_yield() stats */
-+ unsigned long yld_exp_empty;
-+ unsigned long yld_act_empty;
-+ unsigned long yld_both_empty;
-+ unsigned long yld_cnt;
-+
-+ /* schedule() stats */
-+ unsigned long sched_switch;
-+ unsigned long sched_cnt;
-+ unsigned long sched_goidle;
-+
-+ /* try_to_wake_up() stats */
-+ unsigned long ttwu_cnt;
-+ unsigned long ttwu_local;
-+#endif
-+ struct lock_class_key rq_lock_key;
-+};
-+
-+static DEFINE_PER_CPU(struct rq, runqueues) ____cacheline_aligned_in_smp;
-+static DEFINE_MUTEX(sched_hotcpu_mutex);
-+
-+static inline int cpu_of(struct rq *rq)
-+{
-+#ifdef CONFIG_SMP
-+ return rq->cpu;
-+#else
-+ return 0;
-+#endif
-+}
-+
-+/*
-+ * The domain tree (rq->sd) is protected by RCU's quiescent state transition.
-+ * See detach_destroy_domains: synchronize_sched for details.
-+ *
-+ * The domain tree of any CPU may only be accessed from within
-+ * preempt-disabled sections.
-+ */
-+#define for_each_domain(cpu, __sd) \
-+ for (__sd = rcu_dereference(cpu_rq(cpu)->sd); __sd; __sd = __sd->parent)
-+
-+#define cpu_rq(cpu) (&per_cpu(runqueues, (cpu)))
-+#define this_rq() (&__get_cpu_var(runqueues))
-+#define task_rq(p) cpu_rq(task_cpu(p))
-+#define cpu_curr(cpu) (cpu_rq(cpu)->curr)
-+
-+#ifndef prepare_arch_switch
-+# define prepare_arch_switch(next) do { } while (0)
-+#endif
-+#ifndef finish_arch_switch
-+# define finish_arch_switch(prev) do { } while (0)
-+#endif
-+
-+#ifndef __ARCH_WANT_UNLOCKED_CTXSW
-+static inline int task_running(struct rq *rq, struct task_struct *p)
-+{
-+ return rq->curr == p;
-+}
-+
-+static inline void prepare_lock_switch(struct rq *rq, struct task_struct *next)
-+{
-+}
-+
-+static inline void finish_lock_switch(struct rq *rq, struct task_struct *prev)
-+{
-+#ifdef CONFIG_DEBUG_SPINLOCK
-+ /* this is a valid case when another task releases the spinlock */
-+ rq->lock.owner = current;
-+#endif
-+ /*
-+ * If we are tracking spinlock dependencies then we have to
-+ * fix up the runqueue lock - which gets 'carried over' from
-+ * prev into current:
-+ */
-+ spin_acquire(&rq->lock.dep_map, 0, 0, _THIS_IP_);
-+
-+ spin_unlock_irq(&rq->lock);
-+}
-+
-+#else /* __ARCH_WANT_UNLOCKED_CTXSW */
-+static inline int task_running(struct rq *rq, struct task_struct *p)
-+{
-+#ifdef CONFIG_SMP
-+ return p->oncpu;
-+#else
-+ return rq->curr == p;
-+#endif
-+}
-+
-+static inline void prepare_lock_switch(struct rq *rq, struct task_struct *next)
-+{
-+#ifdef CONFIG_SMP
-+ /*
-+ * We can optimise this out completely for !SMP, because the
-+ * SMP rebalancing from interrupt is the only thing that cares
-+ * here.
-+ */
-+ next->oncpu = 1;
-+#endif
-+#ifdef __ARCH_WANT_INTERRUPTS_ON_CTXSW
-+ spin_unlock_irq(&rq->lock);
-+#else
-+ spin_unlock(&rq->lock);
-+#endif
-+}
-+
-+static inline void finish_lock_switch(struct rq *rq, struct task_struct *prev)
-+{
-+#ifdef CONFIG_SMP
-+ /*
-+ * After ->oncpu is cleared, the task can be moved to a different CPU.
-+ * We must ensure this doesn't happen until the switch is completely
-+ * finished.
-+ */
-+ smp_wmb();
-+ prev->oncpu = 0;
-+#endif
-+#ifndef __ARCH_WANT_INTERRUPTS_ON_CTXSW
-+ local_irq_enable();
-+#endif
-+}
-+#endif /* __ARCH_WANT_UNLOCKED_CTXSW */
-+
-+/*
-+ * __task_rq_lock - lock the runqueue a given task resides on.
-+ * Must be called interrupts disabled.
-+ */
-+static inline struct rq *__task_rq_lock(struct task_struct *p)
-+ __acquires(rq->lock)
-+{
-+ struct rq *rq;
-+
-+repeat_lock_task:
-+ rq = task_rq(p);
-+ spin_lock(&rq->lock);
-+ if (unlikely(rq != task_rq(p))) {
-+ spin_unlock(&rq->lock);
-+ goto repeat_lock_task;
-+ }
-+ return rq;
-+}
-+
-+/*
-+ * task_rq_lock - lock the runqueue a given task resides on and disable
-+ * interrupts. Note the ordering: we can safely lookup the task_rq without
-+ * explicitly disabling preemption.
-+ */
-+static struct rq *task_rq_lock(struct task_struct *p, unsigned long *flags)
-+ __acquires(rq->lock)
-+{
-+ struct rq *rq;
-+
-+repeat_lock_task:
-+ local_irq_save(*flags);
-+ rq = task_rq(p);
-+ spin_lock(&rq->lock);
-+ if (unlikely(rq != task_rq(p))) {
-+ spin_unlock_irqrestore(&rq->lock, *flags);
-+ goto repeat_lock_task;
-+ }
-+ return rq;
-+}
-+
-+static inline void __task_rq_unlock(struct rq *rq)
-+ __releases(rq->lock)
-+{
-+ spin_unlock(&rq->lock);
-+}
-+
-+static inline void task_rq_unlock(struct rq *rq, unsigned long *flags)
-+ __releases(rq->lock)
-+{
-+ spin_unlock_irqrestore(&rq->lock, *flags);
-+}
-+
-+#ifdef CONFIG_SCHEDSTATS
-+/*
-+ * bump this up when changing the output format or the meaning of an existing
-+ * format, so that tools can adapt (or abort)
-+ */
-+#define SCHEDSTAT_VERSION 14
-+
-+static int show_schedstat(struct seq_file *seq, void *v)
-+{
-+ int cpu;
-+
-+ seq_printf(seq, "version %d\n", SCHEDSTAT_VERSION);
-+ seq_printf(seq, "timestamp %lu\n", jiffies);
-+ for_each_online_cpu(cpu) {
-+ struct rq *rq = cpu_rq(cpu);
-+#ifdef CONFIG_SMP
-+ struct sched_domain *sd;
-+ int dcnt = 0;
-+#endif
-+
-+ /* runqueue-specific stats */
-+ seq_printf(seq,
-+ "cpu%d %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu",
-+ cpu, rq->yld_both_empty,
-+ rq->yld_act_empty, rq->yld_exp_empty, rq->yld_cnt,
-+ rq->sched_switch, rq->sched_cnt, rq->sched_goidle,
-+ rq->ttwu_cnt, rq->ttwu_local,
-+ rq->rq_sched_info.cpu_time,
-+ rq->rq_sched_info.run_delay, rq->rq_sched_info.pcnt);
-+
-+ seq_printf(seq, "\n");
-+
-+#ifdef CONFIG_SMP
-+ /* domain-specific stats */
-+ preempt_disable();
-+ for_each_domain(cpu, sd) {
-+ enum idle_type itype;
-+ char mask_str[NR_CPUS];
-+
-+ cpumask_scnprintf(mask_str, NR_CPUS, sd->span);
-+ seq_printf(seq, "domain%d %s", dcnt++, mask_str);
-+ for (itype = SCHED_IDLE; itype < MAX_IDLE_TYPES;
-+ itype++) {
-+ seq_printf(seq, " %lu %lu %lu %lu %lu %lu %lu "
-+ "%lu",
-+ sd->lb_cnt[itype],
-+ sd->lb_balanced[itype],
-+ sd->lb_failed[itype],
-+ sd->lb_imbalance[itype],
-+ sd->lb_gained[itype],
-+ sd->lb_hot_gained[itype],
-+ sd->lb_nobusyq[itype],
-+ sd->lb_nobusyg[itype]);
-+ }
-+ seq_printf(seq, " %lu %lu %lu %lu %lu %lu %lu %lu %lu"
-+ " %lu %lu %lu\n",
-+ sd->alb_cnt, sd->alb_failed, sd->alb_pushed,
-+ sd->sbe_cnt, sd->sbe_balanced, sd->sbe_pushed,
-+ sd->sbf_cnt, sd->sbf_balanced, sd->sbf_pushed,
-+ sd->ttwu_wake_remote, sd->ttwu_move_affine,
-+ sd->ttwu_move_balance);
-+ }
-+ preempt_enable();
-+#endif
-+ }
-+ return 0;
-+}
-+
-+static int schedstat_open(struct inode *inode, struct file *file)
-+{
-+ unsigned int size = PAGE_SIZE * (1 + num_online_cpus() / 32);
-+ char *buf = kmalloc(size, GFP_KERNEL);
-+ struct seq_file *m;
-+ int res;
-+
-+ if (!buf)
-+ return -ENOMEM;
-+ res = single_open(file, show_schedstat, NULL);
-+ if (!res) {
-+ m = file->private_data;
-+ m->buf = buf;
-+ m->size = size;
-+ } else
-+ kfree(buf);
-+ return res;
-+}
-+
-+const struct file_operations proc_schedstat_operations = {
-+ .open = schedstat_open,
-+ .read = seq_read,
-+ .llseek = seq_lseek,
-+ .release = single_release,
-+};
-+
-+/*
-+ * Expects runqueue lock to be held for atomicity of update
-+ */
-+static inline void
-+rq_sched_info_arrive(struct rq *rq, unsigned long delta_jiffies)
-+{
-+ if (rq) {
-+ rq->rq_sched_info.run_delay += delta_jiffies;
-+ rq->rq_sched_info.pcnt++;
-+ }
-+}
-+
-+/*
-+ * Expects runqueue lock to be held for atomicity of update
-+ */
-+static inline void
-+rq_sched_info_depart(struct rq *rq, unsigned long delta_jiffies)
-+{
-+ if (rq)
-+ rq->rq_sched_info.cpu_time += delta_jiffies;
-+}
-+# define schedstat_inc(rq, field) do { (rq)->field++; } while (0)
-+# define schedstat_add(rq, field, amt) do { (rq)->field += (amt); } while (0)
-+#else /* !CONFIG_SCHEDSTATS */
-+static inline void
-+rq_sched_info_arrive(struct rq *rq, unsigned long delta_jiffies)
-+{}
-+static inline void
-+rq_sched_info_depart(struct rq *rq, unsigned long delta_jiffies)
-+{}
-+# define schedstat_inc(rq, field) do { } while (0)
-+# define schedstat_add(rq, field, amt) do { } while (0)
-+#endif
-+
-+/*
-+ * this_rq_lock - lock this runqueue and disable interrupts.
-+ */
-+static inline struct rq *this_rq_lock(void)
-+ __acquires(rq->lock)
-+{
-+ struct rq *rq;
-+
-+ local_irq_disable();
-+ rq = this_rq();
-+ spin_lock(&rq->lock);
-+
-+ return rq;
-+}
-+
-+#if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)
-+/*
-+ * Called when a process is dequeued from the active array and given
-+ * the cpu. We should note that with the exception of interactive
-+ * tasks, the expired queue will become the active queue after the active
-+ * queue is empty, without explicitly dequeuing and requeuing tasks in the
-+ * expired queue. (Interactive tasks may be requeued directly to the
-+ * active queue, thus delaying tasks in the expired queue from running;
-+ * see scheduler_tick()).
-+ *
-+ * This function is only called from sched_info_arrive(), rather than
-+ * dequeue_task(). Even though a task may be queued and dequeued multiple
-+ * times as it is shuffled about, we're really interested in knowing how
-+ * long it was from the *first* time it was queued to the time that it
-+ * finally hit a cpu.
-+ */
-+static inline void sched_info_dequeued(struct task_struct *t)
-+{
-+ t->sched_info.last_queued = 0;
-+}
-+
-+/*
-+ * Called when a task finally hits the cpu. We can now calculate how
-+ * long it was waiting to run. We also note when it began so that we
-+ * can keep stats on how long its timeslice is.
-+ */
-+static void sched_info_arrive(struct task_struct *t)
-+{
-+ unsigned long now = jiffies, delta_jiffies = 0;
-+
-+ if (t->sched_info.last_queued)
-+ delta_jiffies = now - t->sched_info.last_queued;
-+ sched_info_dequeued(t);
-+ t->sched_info.run_delay += delta_jiffies;
-+ t->sched_info.last_arrival = now;
-+ t->sched_info.pcnt++;
-+
-+ rq_sched_info_arrive(task_rq(t), delta_jiffies);
-+}
-+
-+/*
-+ * Called when a process is queued into either the active or expired
-+ * array. The time is noted and later used to determine how long we
-+ * had to wait for us to reach the cpu. Since the expired queue will
-+ * become the active queue after active queue is empty, without dequeuing
-+ * and requeuing any tasks, we are interested in queuing to either. It
-+ * is unusual but not impossible for tasks to be dequeued and immediately
-+ * requeued in the same or another array: this can happen in sched_yield(),
-+ * set_user_nice(), and even load_balance() as it moves tasks from runqueue
-+ * to runqueue.
-+ *
-+ * This function is only called from enqueue_task(), but also only updates
-+ * the timestamp if it is already not set. It's assumed that
-+ * sched_info_dequeued() will clear that stamp when appropriate.
-+ */
-+static inline void sched_info_queued(struct task_struct *t)
-+{
-+ if (unlikely(sched_info_on()))
-+ if (!t->sched_info.last_queued)
-+ t->sched_info.last_queued = jiffies;
-+}
-+
-+/*
-+ * Called when a process ceases being the active-running process, either
-+ * voluntarily or involuntarily. Now we can calculate how long we ran.
-+ */
-+static inline void sched_info_depart(struct task_struct *t)
-+{
-+ unsigned long delta_jiffies = jiffies - t->sched_info.last_arrival;
-+
-+ t->sched_info.cpu_time += delta_jiffies;
-+ rq_sched_info_depart(task_rq(t), delta_jiffies);
-+}
-+
-+/*
-+ * Called when tasks are switched involuntarily due, typically, to expiring
-+ * their time slice. (This may also be called when switching to or from
-+ * the idle task.) We are only called when prev != next.
-+ */
-+static inline void
-+__sched_info_switch(struct task_struct *prev, struct task_struct *next)
-+{
-+ struct rq *rq = task_rq(prev);
-+
-+ /*
-+ * prev now departs the cpu. It's not interesting to record
-+ * stats about how efficient we were at scheduling the idle
-+ * process, however.
-+ */
-+ if (prev != rq->idle)
-+ sched_info_depart(prev);
-+
-+ if (next != rq->idle)
-+ sched_info_arrive(next);
-+}
-+static inline void
-+sched_info_switch(struct task_struct *prev, struct task_struct *next)
-+{
-+ if (unlikely(sched_info_on()))
-+ __sched_info_switch(prev, next);
-+}
-+#else
-+#define sched_info_queued(t) do { } while (0)
-+#define sched_info_switch(t, next) do { } while (0)
-+#endif /* CONFIG_SCHEDSTATS || CONFIG_TASK_DELAY_ACCT */
-+
-+/*
-+ * Adding/removing a task to/from a priority array:
-+ */
-+static void dequeue_task(struct task_struct *p, struct prio_array *array)
-+{
-+ BUG_ON(p->state & TASK_ONHOLD);
-+ array->nr_active--;
-+ list_del(&p->run_list);
-+ if (list_empty(array->queue + p->prio))
-+ __clear_bit(p->prio, array->bitmap);
-+}
-+
-+static void enqueue_task(struct task_struct *p, struct prio_array *array)
-+{
-+ BUG_ON(p->state & TASK_ONHOLD);
-+ sched_info_queued(p);
-+ list_add_tail(&p->run_list, array->queue + p->prio);
-+ __set_bit(p->prio, array->bitmap);
-+ array->nr_active++;
-+ p->array = array;
-+}
-+
-+/*
-+ * Put task to the end of the run list without the overhead of dequeue
-+ * followed by enqueue.
-+ */
-+static void requeue_task(struct task_struct *p, struct prio_array *array)
-+{
-+ BUG_ON(p->state & TASK_ONHOLD);
-+ list_move_tail(&p->run_list, array->queue + p->prio);
-+}
-+
-+static inline void
-+enqueue_task_head(struct task_struct *p, struct prio_array *array)
-+{
-+ BUG_ON(p->state & TASK_ONHOLD);
-+ list_add(&p->run_list, array->queue + p->prio);
-+ __set_bit(p->prio, array->bitmap);
-+ array->nr_active++;
-+ p->array = array;
-+}
-+
-+/*
-+ * __normal_prio - return the priority that is based on the static
-+ * priority but is modified by bonuses/penalties.
-+ *
-+ * We scale the actual sleep average [0 .... MAX_SLEEP_AVG]
-+ * into the -5 ... 0 ... +5 bonus/penalty range.
-+ *
-+ * We use 25% of the full 0...39 priority range so that:
-+ *
-+ * 1) nice +19 interactive tasks do not preempt nice 0 CPU hogs.
-+ * 2) nice -20 CPU hogs do not get preempted by nice 0 tasks.
-+ *
-+ * Both properties are important to certain workloads.
-+ */
-+
-+static inline int __normal_prio(struct task_struct *p)
-+{
-+ int bonus, prio;
-+
-+ bonus = CURRENT_BONUS(p) - MAX_BONUS / 2;
-+
-+ prio = p->static_prio - bonus;
-+
-+ /* adjust effective priority */
-+ prio = vx_adjust_prio(p, prio, MAX_USER_PRIO);
-+
-+ if (prio < MAX_RT_PRIO)
-+ prio = MAX_RT_PRIO;
-+ if (prio > MAX_PRIO-1)
-+ prio = MAX_PRIO-1;
-+ return prio;
-+}
-+
-+/*
-+ * To aid in avoiding the subversion of "niceness" due to uneven distribution
-+ * of tasks with abnormal "nice" values across CPUs the contribution that
-+ * each task makes to its run queue's load is weighted according to its
-+ * scheduling class and "nice" value. For SCHED_NORMAL tasks this is just a
-+ * scaled version of the new time slice allocation that they receive on time
-+ * slice expiry etc.
-+ */
-+
-+/*
-+ * Assume: static_prio_timeslice(NICE_TO_PRIO(0)) == DEF_TIMESLICE
-+ * If static_prio_timeslice() is ever changed to break this assumption then
-+ * this code will need modification
-+ */
-+#define TIME_SLICE_NICE_ZERO DEF_TIMESLICE
-+#define LOAD_WEIGHT(lp) \
-+ (((lp) * SCHED_LOAD_SCALE) / TIME_SLICE_NICE_ZERO)
-+#define PRIO_TO_LOAD_WEIGHT(prio) \
-+ LOAD_WEIGHT(static_prio_timeslice(prio))
-+#define RTPRIO_TO_LOAD_WEIGHT(rp) \
-+ (PRIO_TO_LOAD_WEIGHT(MAX_RT_PRIO) + LOAD_WEIGHT(rp))
-+
-+static void set_load_weight(struct task_struct *p)
-+{
-+ if (has_rt_policy(p)) {
-+#ifdef CONFIG_SMP
-+ if (p == task_rq(p)->migration_thread)
-+ /*
-+ * The migration thread does the actual balancing.
-+ * Giving its load any weight will skew balancing
-+ * adversely.
-+ */
-+ p->load_weight = 0;
-+ else
-+#endif
-+ p->load_weight = RTPRIO_TO_LOAD_WEIGHT(p->rt_priority);
-+ } else
-+ p->load_weight = PRIO_TO_LOAD_WEIGHT(p->static_prio);
-+}
-+
-+static inline void
-+inc_raw_weighted_load(struct rq *rq, const struct task_struct *p)
-+{
-+ rq->raw_weighted_load += p->load_weight;
-+}
-+
-+static inline void
-+dec_raw_weighted_load(struct rq *rq, const struct task_struct *p)
-+{
-+ rq->raw_weighted_load -= p->load_weight;
-+}
-+
-+static inline void inc_nr_running(struct task_struct *p, struct rq *rq)
-+{
-+ rq->nr_running++;
-+ inc_raw_weighted_load(rq, p);
-+}
-+
-+static inline void dec_nr_running(struct task_struct *p, struct rq *rq)
-+{
-+ rq->nr_running--;
-+ dec_raw_weighted_load(rq, p);
-+}
-+
-+/*
-+ * Calculate the expected normal priority: i.e. priority
-+ * without taking RT-inheritance into account. Might be
-+ * boosted by interactivity modifiers. Changes upon fork,
-+ * setprio syscalls, and whenever the interactivity
-+ * estimator recalculates.
-+ */
-+static inline int normal_prio(struct task_struct *p)
-+{
-+ int prio;
-+
-+ if (has_rt_policy(p))
-+ prio = MAX_RT_PRIO-1 - p->rt_priority;
-+ else
-+ prio = __normal_prio(p);
-+ return prio;
-+}
-+
-+/*
-+ * Calculate the current priority, i.e. the priority
-+ * taken into account by the scheduler. This value might
-+ * be boosted by RT tasks, or might be boosted by
-+ * interactivity modifiers. Will be RT if the task got
-+ * RT-boosted. If not then it returns p->normal_prio.
-+ */
-+static int effective_prio(struct task_struct *p)
-+{
-+ p->normal_prio = normal_prio(p);
-+ /*
-+ * If we are RT tasks or we were boosted to RT priority,
-+ * keep the priority unchanged. Otherwise, update priority
-+ * to the normal priority:
-+ */
-+ if (!rt_prio(p->prio))
-+ return p->normal_prio;
-+ return p->prio;
-+}
-+
-+#include "sched_mon.h"
-+
-+
-+/*
-+ * __activate_task - move a task to the runqueue.
-+ */
-+static void __activate_task(struct task_struct *p, struct rq *rq)
-+{
-+ struct prio_array *target = rq->active;
-+
-+ if (batch_task(p))
-+ target = rq->expired;
-+ vxm_activate_task(p, rq);
-+ enqueue_task(p, target);
-+ inc_nr_running(p, rq);
-+}
-+
-+/*
-+ * __activate_idle_task - move idle task to the _front_ of runqueue.
-+ */
-+static inline void __activate_idle_task(struct task_struct *p, struct rq *rq)
-+{
-+ vxm_activate_idle(p, rq);
-+ enqueue_task_head(p, rq->active);
-+ inc_nr_running(p, rq);
-+}
-+
-+/*
-+ * Recalculate p->normal_prio and p->prio after having slept,
-+ * updating the sleep-average too:
-+ */
-+static int recalc_task_prio(struct task_struct *p, unsigned long long now)
-+{
-+ /* Caller must always ensure 'now >= p->timestamp' */
-+ unsigned long sleep_time = now - p->timestamp;
-+
-+ if (batch_task(p))
-+ sleep_time = 0;
-+
-+ if (likely(sleep_time > 0)) {
-+ /*
-+ * This ceiling is set to the lowest priority that would allow
-+ * a task to be reinserted into the active array on timeslice
-+ * completion.
-+ */
-+ unsigned long ceiling = INTERACTIVE_SLEEP(p);
-+
-+ if (p->mm && sleep_time > ceiling && p->sleep_avg < ceiling) {
-+ /*
-+ * Prevents user tasks from achieving best priority
-+ * with one single large enough sleep.
-+ */
-+ p->sleep_avg = ceiling;
-+ /*
-+ * Using INTERACTIVE_SLEEP() as a ceiling places a
-+ * nice(0) task 1ms sleep away from promotion, and
-+ * gives it 700ms to round-robin with no chance of
-+ * being demoted. This is more than generous, so
-+ * mark this sleep as non-interactive to prevent the
-+ * on-runqueue bonus logic from intervening should
-+ * this task not receive cpu immediately.
-+ */
-+ p->sleep_type = SLEEP_NONINTERACTIVE;
-+ } else {
-+ /*
-+ * Tasks waking from uninterruptible sleep are
-+ * limited in their sleep_avg rise as they
-+ * are likely to be waiting on I/O
-+ */
-+ if (p->sleep_type == SLEEP_NONINTERACTIVE && p->mm) {
-+ if (p->sleep_avg >= ceiling)
-+ sleep_time = 0;
-+ else if (p->sleep_avg + sleep_time >=
-+ ceiling) {
-+ p->sleep_avg = ceiling;
-+ sleep_time = 0;
-+ }
-+ }
-+
-+ /*
-+ * This code gives a bonus to interactive tasks.
-+ *
-+ * The boost works by updating the 'average sleep time'
-+ * value here, based on ->timestamp. The more time a
-+ * task spends sleeping, the higher the average gets -
-+ * and the higher the priority boost gets as well.
-+ */
-+ p->sleep_avg += sleep_time;
-+
-+ }
-+ if (p->sleep_avg > NS_MAX_SLEEP_AVG)
-+ p->sleep_avg = NS_MAX_SLEEP_AVG;
-+ }
-+
-+ return effective_prio(p);
-+}
-+
-+/*
-+ * activate_task - move a task to the runqueue and do priority recalculation
-+ *
-+ * Update all the scheduling statistics stuff. (sleep average
-+ * calculation, priority modifiers, etc.)
-+ */
-+static void activate_task(struct task_struct *p, struct rq *rq, int local)
-+{
-+ unsigned long long now;
-+
-+ if (rt_task(p))
-+ goto out;
-+
-+ now = sched_clock();
-+#ifdef CONFIG_SMP
-+ if (!local) {
-+ /* Compensate for drifting sched_clock */
-+ struct rq *this_rq = this_rq();
-+ now = (now - this_rq->most_recent_timestamp)
-+ + rq->most_recent_timestamp;
-+ }
-+#endif
-+
-+ /*
-+ * Sleep time is in units of nanosecs, so shift by 20 to get a
-+ * milliseconds-range estimation of the amount of time that the task
-+ * spent sleeping:
-+ */
-+ if (unlikely(prof_on == SLEEP_PROFILING)) {
-+ if (p->state == TASK_UNINTERRUPTIBLE)
-+ profile_hits(SLEEP_PROFILING, (void *)get_wchan(p),
-+ (now - p->timestamp) >> 20);
-+ }
-+
-+ p->prio = recalc_task_prio(p, now);
-+
-+ /*
-+ * This checks to make sure it's not an uninterruptible task
-+ * that is now waking up.
-+ */
-+ if (p->sleep_type == SLEEP_NORMAL) {
-+ /*
-+ * Tasks which were woken up by interrupts (ie. hw events)
-+ * are most likely of interactive nature. So we give them
-+ * the credit of extending their sleep time to the period
-+ * of time they spend on the runqueue, waiting for execution
-+ * on a CPU, first time around:
-+ */
-+ if (in_interrupt())
-+ p->sleep_type = SLEEP_INTERRUPTED;
-+ else {
-+ /*
-+ * Normal first-time wakeups get a credit too for
-+ * on-runqueue time, but it will be weighted down:
-+ */
-+ p->sleep_type = SLEEP_INTERACTIVE;
-+ }
-+ }
-+ p->timestamp = now;
-+out:
-+ vx_activate_task(p);
-+ __activate_task(p, rq);
-+}
-+
-+/*
-+ * __deactivate_task - remove a task from the runqueue.
-+ */
-+static void __deactivate_task(struct task_struct *p, struct rq *rq)
-+{
-+ dec_nr_running(p, rq);
-+ dequeue_task(p, p->array);
-+ vxm_deactivate_task(p, rq);
-+ p->array = NULL;
-+}
-+
-+static inline
-+void deactivate_task(struct task_struct *p, struct rq *rq)
-+{
-+ vx_deactivate_task(p);
-+ __deactivate_task(p, rq);
-+}
-+
-+#include "sched_hard.h"
-+
-+/*
-+ * resched_task - mark a task 'to be rescheduled now'.
-+ *
-+ * On UP this means the setting of the need_resched flag, on SMP it
-+ * might also involve a cross-CPU call to trigger the scheduler on
-+ * the target CPU.
-+ */
-+#ifdef CONFIG_SMP
-+
-+#ifndef tsk_is_polling
-+#define tsk_is_polling(t) test_tsk_thread_flag(t, TIF_POLLING_NRFLAG)
-+#endif
-+
-+static void resched_task(struct task_struct *p)
-+{
-+ int cpu;
-+
-+ assert_spin_locked(&task_rq(p)->lock);
-+
-+ if (unlikely(test_tsk_thread_flag(p, TIF_NEED_RESCHED)))
-+ return;
-+
-+ set_tsk_thread_flag(p, TIF_NEED_RESCHED);
-+
-+ cpu = task_cpu(p);
-+ if (cpu == smp_processor_id())
-+ return;
-+
-+ /* NEED_RESCHED must be visible before we test polling */
-+ smp_mb();
-+ if (!tsk_is_polling(p))
-+ smp_send_reschedule(cpu);
-+}
-+
-+static void resched_cpu(int cpu)
-+{
-+ struct rq *rq = cpu_rq(cpu);
-+ unsigned long flags;
-+
-+ if (!spin_trylock_irqsave(&rq->lock, flags))
-+ return;
-+ resched_task(cpu_curr(cpu));
-+ spin_unlock_irqrestore(&rq->lock, flags);
-+}
-+#else
-+static inline void resched_task(struct task_struct *p)
-+{
-+ assert_spin_locked(&task_rq(p)->lock);
-+ set_tsk_need_resched(p);
-+}
-+#endif
-+
-+/**
-+ * task_curr - is this task currently executing on a CPU?
-+ * @p: the task in question.
-+ */
-+inline int task_curr(const struct task_struct *p)
-+{
-+ return cpu_curr(task_cpu(p)) == p;
-+}
-+
-+/* Used instead of source_load when we know the type == 0 */
-+unsigned long weighted_cpuload(const int cpu)
-+{
-+ return cpu_rq(cpu)->raw_weighted_load;
-+}
-+
-+#ifdef CONFIG_SMP
-+struct migration_req {
-+ struct list_head list;
-+
-+ struct task_struct *task;
-+ int dest_cpu;
-+
-+ struct completion done;
-+};
-+
-+/*
-+ * The task's runqueue lock must be held.
-+ * Returns true if you have to wait for migration thread.
-+ */
-+static int
-+migrate_task(struct task_struct *p, int dest_cpu, struct migration_req *req)
-+{
-+ struct rq *rq = task_rq(p);
-+
-+ vxm_migrate_task(p, rq, dest_cpu);
-+ /*
-+ * If the task is not on a runqueue (and not running), then
-+ * it is sufficient to simply update the task's cpu field.
-+ */
-+ if (!p->array && !task_running(rq, p)) {
-+ set_task_cpu(p, dest_cpu);
-+ return 0;
-+ }
-+
-+ init_completion(&req->done);
-+ req->task = p;
-+ req->dest_cpu = dest_cpu;
-+ list_add(&req->list, &rq->migration_queue);
-+
-+ return 1;
-+}
-+
-+/*
-+ * wait_task_inactive - wait for a thread to unschedule.
-+ *
-+ * The caller must ensure that the task *will* unschedule sometime soon,
-+ * else this function might spin for a *long* time. This function can't
-+ * be called with interrupts off, or it may introduce deadlock with
-+ * smp_call_function() if an IPI is sent by the same process we are
-+ * waiting to become inactive.
-+ */
-+void wait_task_inactive(struct task_struct *p)
-+{
-+ unsigned long flags;
-+ struct rq *rq;
-+ struct prio_array *array;
-+ int running;
-+
-+repeat:
-+ /*
-+ * We do the initial early heuristics without holding
-+ * any task-queue locks at all. We'll only try to get
-+ * the runqueue lock when things look like they will
-+ * work out!
-+ */
-+ rq = task_rq(p);
-+
-+ /*
-+ * If the task is actively running on another CPU
-+ * still, just relax and busy-wait without holding
-+ * any locks.
-+ *
-+ * NOTE! Since we don't hold any locks, it's not
-+ * even sure that "rq" stays as the right runqueue!
-+ * But we don't care, since "task_running()" will
-+ * return false if the runqueue has changed and p
-+ * is actually now running somewhere else!
-+ */
-+ while (task_running(rq, p))
-+ cpu_relax();
-+
-+ /*
-+ * Ok, time to look more closely! We need the rq
-+ * lock now, to be *sure*. If we're wrong, we'll
-+ * just go back and repeat.
-+ */
-+ rq = task_rq_lock(p, &flags);
-+ running = task_running(rq, p);
-+ array = p->array;
-+ task_rq_unlock(rq, &flags);
-+
-+ /*
-+ * Was it really running after all now that we
-+ * checked with the proper locks actually held?
-+ *
-+ * Oops. Go back and try again..
-+ */
-+ if (unlikely(running)) {
-+ cpu_relax();
-+ goto repeat;
-+ }
-+
-+ /*
-+ * It's not enough that it's not actively running,
-+ * it must be off the runqueue _entirely_, and not
-+ * preempted!
-+ *
-+ * So if it wa still runnable (but just not actively
-+ * running right now), it's preempted, and we should
-+ * yield - it could be a while.
-+ */
-+ if (unlikely(array)) {
-+ yield();
-+ goto repeat;
-+ }
-+
-+ /*
-+ * Ahh, all good. It wasn't running, and it wasn't
-+ * runnable, which means that it will never become
-+ * running in the future either. We're all done!
-+ */
-+}
-+
-+/***
-+ * kick_process - kick a running thread to enter/exit the kernel
-+ * @p: the to-be-kicked thread
-+ *
-+ * Cause a process which is running on another CPU to enter
-+ * kernel-mode, without any delay. (to get signals handled.)
-+ *
-+ * NOTE: this function doesnt have to take the runqueue lock,
-+ * because all it wants to ensure is that the remote task enters
-+ * the kernel. If the IPI races and the task has been migrated
-+ * to another CPU then no harm is done and the purpose has been
-+ * achieved as well.
-+ */
-+void kick_process(struct task_struct *p)
-+{
-+ int cpu;
-+
-+ preempt_disable();
-+ cpu = task_cpu(p);
-+ if ((cpu != smp_processor_id()) && task_curr(p))
-+ smp_send_reschedule(cpu);
-+ preempt_enable();
-+}
-+
-+/*
-+ * Return a low guess at the load of a migration-source cpu weighted
-+ * according to the scheduling class and "nice" value.
-+ *
-+ * We want to under-estimate the load of migration sources, to
-+ * balance conservatively.
-+ */
-+static inline unsigned long source_load(int cpu, int type)
-+{
-+ struct rq *rq = cpu_rq(cpu);
-+
-+ if (type == 0)
-+ return rq->raw_weighted_load;
-+
-+ return min(rq->cpu_load[type-1], rq->raw_weighted_load);
-+}
-+
-+/*
-+ * Return a high guess at the load of a migration-target cpu weighted
-+ * according to the scheduling class and "nice" value.
-+ */
-+static inline unsigned long target_load(int cpu, int type)
-+{
-+ struct rq *rq = cpu_rq(cpu);
-+
-+ if (type == 0)
-+ return rq->raw_weighted_load;
-+
-+ return max(rq->cpu_load[type-1], rq->raw_weighted_load);
-+}
-+
-+/*
-+ * Return the average load per task on the cpu's run queue
-+ */
-+static inline unsigned long cpu_avg_load_per_task(int cpu)
-+{
-+ struct rq *rq = cpu_rq(cpu);
-+ unsigned long n = rq->nr_running;
-+
-+ return n ? rq->raw_weighted_load / n : SCHED_LOAD_SCALE;
-+}
-+
-+/*
-+ * find_idlest_group finds and returns the least busy CPU group within the
-+ * domain.
-+ */
-+static struct sched_group *
-+find_idlest_group(struct sched_domain *sd, struct task_struct *p, int this_cpu)
-+{
-+ struct sched_group *idlest = NULL, *this = NULL, *group = sd->groups;
-+ unsigned long min_load = ULONG_MAX, this_load = 0;
-+ int load_idx = sd->forkexec_idx;
-+ int imbalance = 100 + (sd->imbalance_pct-100)/2;
-+
-+ do {
-+ unsigned long load, avg_load;
-+ int local_group;
-+ int i;
-+
-+ /* Skip over this group if it has no CPUs allowed */
-+ if (!cpus_intersects(group->cpumask, p->cpus_allowed))
-+ goto nextgroup;
-+
-+ local_group = cpu_isset(this_cpu, group->cpumask);
-+
-+ /* Tally up the load of all CPUs in the group */
-+ avg_load = 0;
-+
-+ for_each_cpu_mask(i, group->cpumask) {
-+ /* Bias balancing toward cpus of our domain */
-+ if (local_group)
-+ load = source_load(i, load_idx);
-+ else
-+ load = target_load(i, load_idx);
-+
-+ avg_load += load;
-+ }
-+
-+ /* Adjust by relative CPU power of the group */
-+ avg_load = sg_div_cpu_power(group,
-+ avg_load * SCHED_LOAD_SCALE);
-+
-+ if (local_group) {
-+ this_load = avg_load;
-+ this = group;
-+ } else if (avg_load < min_load) {
-+ min_load = avg_load;
-+ idlest = group;
-+ }
-+nextgroup:
-+ group = group->next;
-+ } while (group != sd->groups);
-+
-+ if (!idlest || 100*this_load < imbalance*min_load)
-+ return NULL;
-+ return idlest;
-+}
-+
-+/*
-+ * find_idlest_cpu - find the idlest cpu among the cpus in group.
-+ */
-+static int
-+find_idlest_cpu(struct sched_group *group, struct task_struct *p, int this_cpu)
-+{
-+ cpumask_t tmp;
-+ unsigned long load, min_load = ULONG_MAX;
-+ int idlest = -1;
-+ int i;
-+
-+ /* Traverse only the allowed CPUs */
-+ cpus_and(tmp, group->cpumask, p->cpus_allowed);
-+
-+ for_each_cpu_mask(i, tmp) {
-+ load = weighted_cpuload(i);
-+
-+ if (load < min_load || (load == min_load && i == this_cpu)) {
-+ min_load = load;
-+ idlest = i;
-+ }
-+ }
-+
-+ return idlest;
-+}
-+
-+/*
-+ * sched_balance_self: balance the current task (running on cpu) in domains
-+ * that have the 'flag' flag set. In practice, this is SD_BALANCE_FORK and
-+ * SD_BALANCE_EXEC.
-+ *
-+ * Balance, ie. select the least loaded group.
-+ *
-+ * Returns the target CPU number, or the same CPU if no balancing is needed.
-+ *
-+ * preempt must be disabled.
-+ */
-+static int sched_balance_self(int cpu, int flag)
-+{
-+ struct task_struct *t = current;
-+ struct sched_domain *tmp, *sd = NULL;
-+
-+ for_each_domain(cpu, tmp) {
-+ /*
-+ * If power savings logic is enabled for a domain, stop there.
-+ */
-+ if (tmp->flags & SD_POWERSAVINGS_BALANCE)
-+ break;
-+ if (tmp->flags & flag)
-+ sd = tmp;
-+ }
-+
-+ while (sd) {
-+ cpumask_t span;
-+ struct sched_group *group;
-+ int new_cpu, weight;
-+
-+ if (!(sd->flags & flag)) {
-+ sd = sd->child;
-+ continue;
-+ }
-+
-+ span = sd->span;
-+ group = find_idlest_group(sd, t, cpu);
-+ if (!group) {
-+ sd = sd->child;
-+ continue;
-+ }
-+
-+ new_cpu = find_idlest_cpu(group, t, cpu);
-+ if (new_cpu == -1 || new_cpu == cpu) {
-+ /* Now try balancing at a lower domain level of cpu */
-+ sd = sd->child;
-+ continue;
-+ }
-+
-+ /* Now try balancing at a lower domain level of new_cpu */
-+ cpu = new_cpu;
-+ sd = NULL;
-+ weight = cpus_weight(span);
-+ for_each_domain(cpu, tmp) {
-+ if (weight <= cpus_weight(tmp->span))
-+ break;
-+ if (tmp->flags & flag)
-+ sd = tmp;
-+ }
-+ /* while loop will break here if sd == NULL */
-+ }
-+
-+ return cpu;
-+}
-+
-+#endif /* CONFIG_SMP */
-+
-+/*
-+ * wake_idle() will wake a task on an idle cpu if task->cpu is
-+ * not idle and an idle cpu is available. The span of cpus to
-+ * search starts with cpus closest then further out as needed,
-+ * so we always favor a closer, idle cpu.
-+ *
-+ * Returns the CPU we should wake onto.
-+ */
-+#if defined(ARCH_HAS_SCHED_WAKE_IDLE)
-+static int wake_idle(int cpu, struct task_struct *p)
-+{
-+ cpumask_t tmp;
-+ struct sched_domain *sd;
-+ int i;
-+
-+ /*
-+ * If it is idle, then it is the best cpu to run this task.
-+ *
-+ * This cpu is also the best, if it has more than one task already.
-+ * Siblings must be also busy(in most cases) as they didn't already
-+ * pickup the extra load from this cpu and hence we need not check
-+ * sibling runqueue info. This will avoid the checks and cache miss
-+ * penalities associated with that.
-+ */
-+ if (idle_cpu(cpu) || cpu_rq(cpu)->nr_running > 1)
-+ return cpu;
-+
-+ for_each_domain(cpu, sd) {
-+ if (sd->flags & SD_WAKE_IDLE) {
-+ cpus_and(tmp, sd->span, p->cpus_allowed);
-+ for_each_cpu_mask(i, tmp) {
-+ if (idle_cpu(i))
-+ return i;
-+ }
-+ }
-+ else
-+ break;
-+ }
-+ return cpu;
-+}
-+#else
-+static inline int wake_idle(int cpu, struct task_struct *p)
-+{
-+ return cpu;
-+}
-+#endif
-+
-+/***
-+ * try_to_wake_up - wake up a thread
-+ * @p: the to-be-woken-up thread
-+ * @state: the mask of task states that can be woken
-+ * @sync: do a synchronous wakeup?
-+ *
-+ * Put it on the run-queue if it's not already there. The "current"
-+ * thread is always on the run-queue (except when the actual
-+ * re-schedule is in progress), and as such you're allowed to do
-+ * the simpler "current->state = TASK_RUNNING" to mark yourself
-+ * runnable without the overhead of this.
-+ *
-+ * returns failure only if the task is already active.
-+ */
-+static int try_to_wake_up(struct task_struct *p, unsigned int state, int sync)
-+{
-+ int cpu, this_cpu, success = 0;
-+ unsigned long flags;
-+ long old_state;
-+ struct rq *rq;
-+#ifdef CONFIG_SMP
-+ struct sched_domain *sd, *this_sd = NULL;
-+ unsigned long load, this_load;
-+ int new_cpu;
-+#endif
-+
-+ rq = task_rq_lock(p, &flags);
-+ old_state = p->state;
-+
-+ /* we need to unhold suspended tasks */
-+ if (old_state & TASK_ONHOLD) {
-+ vx_unhold_task(p, rq);
-+ old_state = p->state;
-+ }
-+ if (!(old_state & state))
-+ goto out;
-+
-+ if (p->array)
-+ goto out_running;
-+
-+ cpu = task_cpu(p);
-+ this_cpu = smp_processor_id();
-+
-+#ifdef CONFIG_SMP
-+ if (unlikely(task_running(rq, p)))
-+ goto out_activate;
-+
-+ new_cpu = cpu;
-+
-+ schedstat_inc(rq, ttwu_cnt);
-+ if (cpu == this_cpu) {
-+ schedstat_inc(rq, ttwu_local);
-+ goto out_set_cpu;
-+ }
-+
-+ for_each_domain(this_cpu, sd) {
-+ if (cpu_isset(cpu, sd->span)) {
-+ schedstat_inc(sd, ttwu_wake_remote);
-+ this_sd = sd;
-+ break;
-+ }
-+ }
-+
-+ if (unlikely(!cpu_isset(this_cpu, p->cpus_allowed)))
-+ goto out_set_cpu;
-+
-+ /*
-+ * Check for affine wakeup and passive balancing possibilities.
-+ */
-+ if (this_sd) {
-+ int idx = this_sd->wake_idx;
-+ unsigned int imbalance;
-+
-+ imbalance = 100 + (this_sd->imbalance_pct - 100) / 2;
-+
-+ load = source_load(cpu, idx);
-+ this_load = target_load(this_cpu, idx);
-+
-+ new_cpu = this_cpu; /* Wake to this CPU if we can */
-+
-+ if (this_sd->flags & SD_WAKE_AFFINE) {
-+ unsigned long tl = this_load;
-+ unsigned long tl_per_task;
-+
-+ tl_per_task = cpu_avg_load_per_task(this_cpu);
-+
-+ /*
-+ * If sync wakeup then subtract the (maximum possible)
-+ * effect of the currently running task from the load
-+ * of the current CPU:
-+ */
-+ if (sync)
-+ tl -= current->load_weight;
-+
-+ if ((tl <= load &&
-+ tl + target_load(cpu, idx) <= tl_per_task) ||
-+ 100*(tl + p->load_weight) <= imbalance*load) {
-+ /*
-+ * This domain has SD_WAKE_AFFINE and
-+ * p is cache cold in this domain, and
-+ * there is no bad imbalance.
-+ */
-+ schedstat_inc(this_sd, ttwu_move_affine);
-+ goto out_set_cpu;
-+ }
-+ }
-+
-+ /*
-+ * Start passive balancing when half the imbalance_pct
-+ * limit is reached.
-+ */
-+ if (this_sd->flags & SD_WAKE_BALANCE) {
-+ if (imbalance*this_load <= 100*load) {
-+ schedstat_inc(this_sd, ttwu_move_balance);
-+ goto out_set_cpu;
-+ }
-+ }
-+ }
-+
-+ new_cpu = cpu; /* Could not wake to this_cpu. Wake to cpu instead */
-+out_set_cpu:
-+ new_cpu = wake_idle(new_cpu, p);
-+ if (new_cpu != cpu) {
-+ set_task_cpu(p, new_cpu);
-+ task_rq_unlock(rq, &flags);
-+ /* might preempt at this point */
-+ rq = task_rq_lock(p, &flags);
-+ old_state = p->state;
-+ if (!(old_state & state))
-+ goto out;
-+ if (p->array)
-+ goto out_running;
-+
-+ this_cpu = smp_processor_id();
-+ cpu = task_cpu(p);
-+ }
-+
-+out_activate:
-+#endif /* CONFIG_SMP */
-+ if (old_state == TASK_UNINTERRUPTIBLE) {
-+ rq->nr_uninterruptible--;
-+ vx_uninterruptible_dec(p);
-+ /*
-+ * Tasks on involuntary sleep don't earn
-+ * sleep_avg beyond just interactive state.
-+ */
-+ p->sleep_type = SLEEP_NONINTERACTIVE;
-+ } else
-+
-+ /*
-+ * Tasks that have marked their sleep as noninteractive get
-+ * woken up with their sleep average not weighted in an
-+ * interactive way.
-+ */
-+ if (old_state & TASK_NONINTERACTIVE)
-+ p->sleep_type = SLEEP_NONINTERACTIVE;
-+
-+
-+ activate_task(p, rq, cpu == this_cpu);
-+ /*
-+ * Sync wakeups (i.e. those types of wakeups where the waker
-+ * has indicated that it will leave the CPU in short order)
-+ * don't trigger a preemption, if the woken up task will run on
-+ * this cpu. (in this case the 'I will reschedule' promise of
-+ * the waker guarantees that the freshly woken up task is going
-+ * to be considered on this CPU.)
-+ */
-+ if (!sync || cpu != this_cpu) {
-+ if (TASK_PREEMPTS_CURR(p, rq))
-+ resched_task(rq->curr);
-+ }
-+ success = 1;
-+
-+out_running:
-+ p->state = TASK_RUNNING;
-+out:
-+ task_rq_unlock(rq, &flags);
-+
-+ return success;
-+}
-+
-+int fastcall wake_up_process(struct task_struct *p)
-+{
-+ return try_to_wake_up(p, TASK_STOPPED | TASK_TRACED |
-+ TASK_INTERRUPTIBLE | TASK_UNINTERRUPTIBLE, 0);
-+}
-+EXPORT_SYMBOL(wake_up_process);
-+
-+int fastcall wake_up_state(struct task_struct *p, unsigned int state)
-+{
-+ return try_to_wake_up(p, state, 0);
-+}
-+
-+static void task_running_tick(struct rq *rq, struct task_struct *p, int cpu);
-+/*
-+ * Perform scheduler related setup for a newly forked process p.
-+ * p is forked by current.
-+ */
-+void fastcall sched_fork(struct task_struct *p, int clone_flags)
-+{
-+ int cpu = get_cpu();
-+
-+#ifdef CONFIG_SMP
-+ cpu = sched_balance_self(cpu, SD_BALANCE_FORK);
-+#endif
-+ set_task_cpu(p, cpu);
-+
-+ /*
-+ * We mark the process as running here, but have not actually
-+ * inserted it onto the runqueue yet. This guarantees that
-+ * nobody will actually run it, and a signal or other external
-+ * event cannot wake it up and insert it on the runqueue either.
-+ */
-+ p->state = TASK_RUNNING;
-+
-+ /*
-+ * Make sure we do not leak PI boosting priority to the child:
-+ */
-+ p->prio = current->normal_prio;
-+
-+ INIT_LIST_HEAD(&p->run_list);
-+ p->array = NULL;
-+#if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)
-+ if (unlikely(sched_info_on()))
-+ memset(&p->sched_info, 0, sizeof(p->sched_info));
-+#endif
-+#if defined(CONFIG_SMP) && defined(__ARCH_WANT_UNLOCKED_CTXSW)
-+ p->oncpu = 0;
-+#endif
-+#ifdef CONFIG_PREEMPT
-+ /* Want to start with kernel preemption disabled. */
-+ task_thread_info(p)->preempt_count = 1;
-+#endif
-+ /*
-+ * Share the timeslice between parent and child, thus the
-+ * total amount of pending timeslices in the system doesn't change,
-+ * resulting in more scheduling fairness.
-+ */
-+ local_irq_disable();
-+ p->time_slice = (current->time_slice + 1) >> 1;
-+ /*
-+ * The remainder of the first timeslice might be recovered by
-+ * the parent if the child exits early enough.
-+ */
-+ p->first_time_slice = 1;
-+ current->time_slice >>= 1;
-+ p->timestamp = sched_clock();
-+ if (unlikely(!current->time_slice)) {
-+ /*
-+ * This case is rare, it happens when the parent has only
-+ * a single jiffy left from its timeslice. Taking the
-+ * runqueue lock is not a problem.
-+ */
-+ current->time_slice = 1;
-+ task_running_tick(cpu_rq(cpu), current, cpu);
-+ }
-+ local_irq_enable();
-+ put_cpu();
-+}
-+
-+/*
-+ * wake_up_new_task - wake up a newly created task for the first time.
-+ *
-+ * This function will do some initial scheduler statistics housekeeping
-+ * that must be done for every newly created context, then puts the task
-+ * on the runqueue and wakes it.
-+ */
-+void fastcall wake_up_new_task(struct task_struct *p, unsigned long clone_flags)
-+{
-+ struct rq *rq, *this_rq;
-+ unsigned long flags;
-+ int this_cpu, cpu;
-+
-+ rq = task_rq_lock(p, &flags);
-+ BUG_ON(p->state != TASK_RUNNING);
-+ this_cpu = smp_processor_id();
-+ cpu = task_cpu(p);
-+
-+ /*
-+ * We decrease the sleep average of forking parents
-+ * and children as well, to keep max-interactive tasks
-+ * from forking tasks that are max-interactive. The parent
-+ * (current) is done further down, under its lock.
-+ */
-+ p->sleep_avg = JIFFIES_TO_NS(CURRENT_BONUS(p) *
-+ CHILD_PENALTY / 100 * MAX_SLEEP_AVG / MAX_BONUS);
-+
-+ p->prio = effective_prio(p);
-+
-+ vx_activate_task(p);
-+ if (likely(cpu == this_cpu)) {
-+ if (!(clone_flags & CLONE_VM)) {
-+ /*
-+ * The VM isn't cloned, so we're in a good position to
-+ * do child-runs-first in anticipation of an exec. This
-+ * usually avoids a lot of COW overhead.
-+ */
-+ if (unlikely(!current->array))
-+ __activate_task(p, rq);
-+ else {
-+ p->prio = current->prio;
-+ BUG_ON(p->state & TASK_ONHOLD);
-+ p->normal_prio = current->normal_prio;
-+ list_add_tail(&p->run_list, ¤t->run_list);
-+ p->array = current->array;
-+ p->array->nr_active++;
-+ inc_nr_running(p, rq);
-+ }
-+ set_need_resched();
-+ } else
-+ /* Run child last */
-+ __activate_task(p, rq);
-+ /*
-+ * We skip the following code due to cpu == this_cpu
-+ *
-+ * task_rq_unlock(rq, &flags);
-+ * this_rq = task_rq_lock(current, &flags);
-+ */
-+ this_rq = rq;
-+ } else {
-+ this_rq = cpu_rq(this_cpu);
-+
-+ /*
-+ * Not the local CPU - must adjust timestamp. This should
-+ * get optimised away in the !CONFIG_SMP case.
-+ */
-+ p->timestamp = (p->timestamp - this_rq->most_recent_timestamp)
-+ + rq->most_recent_timestamp;
-+ __activate_task(p, rq);
-+ if (TASK_PREEMPTS_CURR(p, rq))
-+ resched_task(rq->curr);
-+
-+ /*
-+ * Parent and child are on different CPUs, now get the
-+ * parent runqueue to update the parent's ->sleep_avg:
-+ */
-+ task_rq_unlock(rq, &flags);
-+ this_rq = task_rq_lock(current, &flags);
-+ }
-+ current->sleep_avg = JIFFIES_TO_NS(CURRENT_BONUS(current) *
-+ PARENT_PENALTY / 100 * MAX_SLEEP_AVG / MAX_BONUS);
-+ task_rq_unlock(this_rq, &flags);
-+}
-+
-+/*
-+ * Potentially available exiting-child timeslices are
-+ * retrieved here - this way the parent does not get
-+ * penalized for creating too many threads.
-+ *
-+ * (this cannot be used to 'generate' timeslices
-+ * artificially, because any timeslice recovered here
-+ * was given away by the parent in the first place.)
-+ */
-+void fastcall sched_exit(struct task_struct *p)
-+{
-+ unsigned long flags;
-+ struct rq *rq;
-+
-+ /*
-+ * If the child was a (relative-) CPU hog then decrease
-+ * the sleep_avg of the parent as well.
-+ */
-+ rq = task_rq_lock(p->parent, &flags);
-+ if (p->first_time_slice && task_cpu(p) == task_cpu(p->parent)) {
-+ p->parent->time_slice += p->time_slice;
-+ if (unlikely(p->parent->time_slice > task_timeslice(p)))
-+ p->parent->time_slice = task_timeslice(p);
-+ }
-+ if (p->sleep_avg < p->parent->sleep_avg)
-+ p->parent->sleep_avg = p->parent->sleep_avg /
-+ (EXIT_WEIGHT + 1) * EXIT_WEIGHT + p->sleep_avg /
-+ (EXIT_WEIGHT + 1);
-+ task_rq_unlock(rq, &flags);
-+}
-+
-+/**
-+ * prepare_task_switch - prepare to switch tasks
-+ * @rq: the runqueue preparing to switch
-+ * @next: the task we are going to switch to.
-+ *
-+ * This is called with the rq lock held and interrupts off. It must
-+ * be paired with a subsequent finish_task_switch after the context
-+ * switch.
-+ *
-+ * prepare_task_switch sets up locking and calls architecture specific
-+ * hooks.
-+ */
-+static inline void prepare_task_switch(struct rq *rq, struct task_struct *next)
-+{
-+ prepare_lock_switch(rq, next);
-+ prepare_arch_switch(next);
-+}
-+
-+/**
-+ * finish_task_switch - clean up after a task-switch
-+ * @rq: runqueue associated with task-switch
-+ * @prev: the thread we just switched away from.
-+ *
-+ * finish_task_switch must be called after the context switch, paired
-+ * with a prepare_task_switch call before the context switch.
-+ * finish_task_switch will reconcile locking set up by prepare_task_switch,
-+ * and do any other architecture-specific cleanup actions.
-+ *
-+ * Note that we may have delayed dropping an mm in context_switch(). If
-+ * so, we finish that here outside of the runqueue lock. (Doing it
-+ * with the lock held can cause deadlocks; see schedule() for
-+ * details.)
-+ */
-+static inline void finish_task_switch(struct rq *rq, struct task_struct *prev)
-+ __releases(rq->lock)
-+{
-+ struct mm_struct *mm = rq->prev_mm;
-+ long prev_state;
-+
-+ rq->prev_mm = NULL;
-+
-+ /*
-+ * A task struct has one reference for the use as "current".
-+ * If a task dies, then it sets TASK_DEAD in tsk->state and calls
-+ * schedule one last time. The schedule call will never return, and
-+ * the scheduled task must drop that reference.
-+ * The test for TASK_DEAD must occur while the runqueue locks are
-+ * still held, otherwise prev could be scheduled on another cpu, die
-+ * there before we look at prev->state, and then the reference would
-+ * be dropped twice.
-+ * Manfred Spraul <manfred@colorfullife.com>
-+ */
-+ prev_state = prev->state;
-+ finish_arch_switch(prev);
-+ finish_lock_switch(rq, prev);
-+ if (mm)
-+ mmdrop(mm);
-+ if (unlikely(prev_state == TASK_DEAD)) {
-+ /*
-+ * Remove function-return probe instances associated with this
-+ * task and put them back on the free list.
-+ */
-+ kprobe_flush_task(prev);
-+ put_task_struct(prev);
-+ }
-+}
-+
-+/**
-+ * schedule_tail - first thing a freshly forked thread must call.
-+ * @prev: the thread we just switched away from.
-+ */
-+asmlinkage void schedule_tail(struct task_struct *prev)
-+ __releases(rq->lock)
-+{
-+ struct rq *rq = this_rq();
-+
-+ finish_task_switch(rq, prev);
-+#ifdef __ARCH_WANT_UNLOCKED_CTXSW
-+ /* In this case, finish_task_switch does not reenable preemption */
-+ preempt_enable();
-+#endif
-+ if (current->set_child_tid)
-+ put_user(current->pid, current->set_child_tid);
-+}
-+
-+/*
-+ * context_switch - switch to the new MM and the new
-+ * thread's register state.
-+ */
-+static inline struct task_struct *
-+context_switch(struct rq *rq, struct task_struct *prev,
-+ struct task_struct *next)
-+{
-+ struct mm_struct *mm = next->mm;
-+ struct mm_struct *oldmm = prev->active_mm;
-+
-+ /*
-+ * For paravirt, this is coupled with an exit in switch_to to
-+ * combine the page table reload and the switch backend into
-+ * one hypercall.
-+ */
-+ arch_enter_lazy_cpu_mode();
-+
-+ if (!mm) {
-+ next->active_mm = oldmm;
-+ atomic_inc(&oldmm->mm_count);
-+ enter_lazy_tlb(oldmm, next);
-+ } else
-+ switch_mm(oldmm, mm, next);
-+
-+ if (!prev->mm) {
-+ prev->active_mm = NULL;
-+ WARN_ON(rq->prev_mm);
-+ rq->prev_mm = oldmm;
-+ }
-+ /*
-+ * Since the runqueue lock will be released by the next
-+ * task (which is an invalid locking op but in the case
-+ * of the scheduler it's an obvious special-case), so we
-+ * do an early lockdep release here:
-+ */
-+#ifndef __ARCH_WANT_UNLOCKED_CTXSW
-+ spin_release(&rq->lock.dep_map, 1, _THIS_IP_);
-+#endif
-+
-+ /* Here we just switch the register state and the stack. */
-+ switch_to(prev, next, prev);
-+
-+ return prev;
-+}
-+
-+/*
-+ * nr_running, nr_uninterruptible and nr_context_switches:
-+ *
-+ * externally visible scheduler statistics: current number of runnable
-+ * threads, current number of uninterruptible-sleeping threads, total
-+ * number of context switches performed since bootup.
-+ */
-+unsigned long nr_running(void)
-+{
-+ unsigned long i, sum = 0;
-+
-+ for_each_online_cpu(i)
-+ sum += cpu_rq(i)->nr_running;
-+
-+ return sum;
-+}
-+
-+unsigned long nr_uninterruptible(void)
-+{
-+ unsigned long i, sum = 0;
-+
-+ for_each_possible_cpu(i)
-+ sum += cpu_rq(i)->nr_uninterruptible;
-+
-+ /*
-+ * Since we read the counters lockless, it might be slightly
-+ * inaccurate. Do not allow it to go below zero though:
-+ */
-+ if (unlikely((long)sum < 0))
-+ sum = 0;
-+
-+ return sum;
-+}
-+
-+unsigned long long nr_context_switches(void)
-+{
-+ int i;
-+ unsigned long long sum = 0;
-+
-+ for_each_possible_cpu(i)
-+ sum += cpu_rq(i)->nr_switches;
-+
-+ return sum;
-+}
-+
-+unsigned long nr_iowait(void)
-+{
-+ unsigned long i, sum = 0;
-+
-+ for_each_possible_cpu(i)
-+ sum += atomic_read(&cpu_rq(i)->nr_iowait);
-+
-+ return sum;
-+}
-+
-+unsigned long nr_active(void)
-+{
-+ unsigned long i, running = 0, uninterruptible = 0;
-+
-+ for_each_online_cpu(i) {
-+ running += cpu_rq(i)->nr_running;
-+ uninterruptible += cpu_rq(i)->nr_uninterruptible;
-+ }
-+
-+ if (unlikely((long)uninterruptible < 0))
-+ uninterruptible = 0;
-+
-+ return running + uninterruptible;
-+}
-+
-+#ifdef CONFIG_SMP
-+
-+/*
-+ * Is this task likely cache-hot:
-+ */
-+static inline int
-+task_hot(struct task_struct *p, unsigned long long now, struct sched_domain *sd)
-+{
-+ return (long long)(now - p->last_ran) < (long long)sd->cache_hot_time;
-+}
-+
-+/*
-+ * double_rq_lock - safely lock two runqueues
-+ *
-+ * Note this does not disable interrupts like task_rq_lock,
-+ * you need to do so manually before calling.
-+ */
-+static void double_rq_lock(struct rq *rq1, struct rq *rq2)
-+ __acquires(rq1->lock)
-+ __acquires(rq2->lock)
-+{
-+ BUG_ON(!irqs_disabled());
-+ if (rq1 == rq2) {
-+ spin_lock(&rq1->lock);
-+ __acquire(rq2->lock); /* Fake it out ;) */
-+ } else {
-+ if (rq1 < rq2) {
-+ spin_lock(&rq1->lock);
-+ spin_lock(&rq2->lock);
-+ } else {
-+ spin_lock(&rq2->lock);
-+ spin_lock(&rq1->lock);
-+ }
-+ }
-+}
-+
-+/*
-+ * double_rq_unlock - safely unlock two runqueues
-+ *
-+ * Note this does not restore interrupts like task_rq_unlock,
-+ * you need to do so manually after calling.
-+ */
-+static void double_rq_unlock(struct rq *rq1, struct rq *rq2)
-+ __releases(rq1->lock)
-+ __releases(rq2->lock)
-+{
-+ spin_unlock(&rq1->lock);
-+ if (rq1 != rq2)
-+ spin_unlock(&rq2->lock);
-+ else
-+ __release(rq2->lock);
-+}
-+
-+/*
-+ * double_lock_balance - lock the busiest runqueue, this_rq is locked already.
-+ */
-+static void double_lock_balance(struct rq *this_rq, struct rq *busiest)
-+ __releases(this_rq->lock)
-+ __acquires(busiest->lock)
-+ __acquires(this_rq->lock)
-+{
-+ if (unlikely(!irqs_disabled())) {
-+ /* printk() doesn't work good under rq->lock */
-+ spin_unlock(&this_rq->lock);
-+ BUG_ON(1);
-+ }
-+ if (unlikely(!spin_trylock(&busiest->lock))) {
-+ if (busiest < this_rq) {
-+ spin_unlock(&this_rq->lock);
-+ spin_lock(&busiest->lock);
-+ spin_lock(&this_rq->lock);
-+ } else
-+ spin_lock(&busiest->lock);
-+ }
-+}
-+
-+/*
-+ * If dest_cpu is allowed for this process, migrate the task to it.
-+ * This is accomplished by forcing the cpu_allowed mask to only
-+ * allow dest_cpu, which will force the cpu onto dest_cpu. Then
-+ * the cpu_allowed mask is restored.
-+ */
-+static void sched_migrate_task(struct task_struct *p, int dest_cpu)
-+{
-+ struct migration_req req;
-+ unsigned long flags;
-+ struct rq *rq;
-+
-+ rq = task_rq_lock(p, &flags);
-+ if (!cpu_isset(dest_cpu, p->cpus_allowed)
-+ || unlikely(cpu_is_offline(dest_cpu)))
-+ goto out;
-+
-+ /* force the process onto the specified CPU */
-+ if (migrate_task(p, dest_cpu, &req)) {
-+ /* Need to wait for migration thread (might exit: take ref). */
-+ struct task_struct *mt = rq->migration_thread;
-+
-+ get_task_struct(mt);
-+ task_rq_unlock(rq, &flags);
-+ wake_up_process(mt);
-+ put_task_struct(mt);
-+ wait_for_completion(&req.done);
-+
-+ return;
-+ }
-+out:
-+ task_rq_unlock(rq, &flags);
-+}
-+
-+/*
-+ * sched_exec - execve() is a valuable balancing opportunity, because at
-+ * this point the task has the smallest effective memory and cache footprint.
-+ */
-+void sched_exec(void)
-+{
-+ int new_cpu, this_cpu = get_cpu();
-+ new_cpu = sched_balance_self(this_cpu, SD_BALANCE_EXEC);
-+ put_cpu();
-+ if (new_cpu != this_cpu)
-+ sched_migrate_task(current, new_cpu);
-+}
-+
-+/*
-+ * pull_task - move a task from a remote runqueue to the local runqueue.
-+ * Both runqueues must be locked.
-+ */
-+static void pull_task(struct rq *src_rq, struct prio_array *src_array,
-+ struct task_struct *p, struct rq *this_rq,
-+ struct prio_array *this_array, int this_cpu)
-+{
-+ dequeue_task(p, src_array);
-+ dec_nr_running(p, src_rq);
-+ set_task_cpu(p, this_cpu);
-+ inc_nr_running(p, this_rq);
-+ enqueue_task(p, this_array);
-+ p->timestamp = (p->timestamp - src_rq->most_recent_timestamp)
-+ + this_rq->most_recent_timestamp;
-+ /*
-+ * Note that idle threads have a prio of MAX_PRIO, for this test
-+ * to be always true for them.
-+ */
-+ if (TASK_PREEMPTS_CURR(p, this_rq))
-+ resched_task(this_rq->curr);
-+}
-+
-+/*
-+ * can_migrate_task - may task p from runqueue rq be migrated to this_cpu?
-+ */
-+static
-+int can_migrate_task(struct task_struct *p, struct rq *rq, int this_cpu,
-+ struct sched_domain *sd, enum idle_type idle,
-+ int *all_pinned)
-+{
-+ /*
-+ * We do not migrate tasks that are:
-+ * 1) running (obviously), or
-+ * 2) cannot be migrated to this CPU due to cpus_allowed, or
-+ * 3) are cache-hot on their current CPU.
-+ */
-+ if (!cpu_isset(this_cpu, p->cpus_allowed))
-+ return 0;
-+ *all_pinned = 0;
-+
-+ if (task_running(rq, p))
-+ return 0;
-+
-+ /*
-+ * Aggressive migration if:
-+ * 1) task is cache cold, or
-+ * 2) too many balance attempts have failed.
-+ */
-+
-+ if (sd->nr_balance_failed > sd->cache_nice_tries) {
-+#ifdef CONFIG_SCHEDSTATS
-+ if (task_hot(p, rq->most_recent_timestamp, sd))
-+ schedstat_inc(sd, lb_hot_gained[idle]);
-+#endif
-+ return 1;
-+ }
-+
-+ if (task_hot(p, rq->most_recent_timestamp, sd))
-+ return 0;
-+ return 1;
-+}
-+
-+#define rq_best_prio(rq) min((rq)->curr->prio, (rq)->best_expired_prio)
-+
-+/*
-+ * move_tasks tries to move up to max_nr_move tasks and max_load_move weighted
-+ * load from busiest to this_rq, as part of a balancing operation within
-+ * "domain". Returns the number of tasks moved.
-+ *
-+ * Called with both runqueues locked.
-+ */
-+static int move_tasks(struct rq *this_rq, int this_cpu, struct rq *busiest,
-+ unsigned long max_nr_move, unsigned long max_load_move,
-+ struct sched_domain *sd, enum idle_type idle,
-+ int *all_pinned)
-+{
-+ int idx, pulled = 0, pinned = 0, this_best_prio, best_prio,
-+ best_prio_seen, skip_for_load;
-+ struct prio_array *array, *dst_array;
-+ struct list_head *head, *curr;
-+ struct task_struct *tmp;
-+ long rem_load_move;
-+
-+ if (max_nr_move == 0 || max_load_move == 0)
-+ goto out;
-+
-+ rem_load_move = max_load_move;
-+ pinned = 1;
-+ this_best_prio = rq_best_prio(this_rq);
-+ best_prio = rq_best_prio(busiest);
-+ /*
-+ * Enable handling of the case where there is more than one task
-+ * with the best priority. If the current running task is one
-+ * of those with prio==best_prio we know it won't be moved
-+ * and therefore it's safe to override the skip (based on load) of
-+ * any task we find with that prio.
-+ */
-+ best_prio_seen = best_prio == busiest->curr->prio;
-+
-+ /*
-+ * We first consider expired tasks. Those will likely not be
-+ * executed in the near future, and they are most likely to
-+ * be cache-cold, thus switching CPUs has the least effect
-+ * on them.
-+ */
-+ if (busiest->expired->nr_active) {
-+ array = busiest->expired;
-+ dst_array = this_rq->expired;
-+ } else {
-+ array = busiest->active;
-+ dst_array = this_rq->active;
-+ }
-+
-+new_array:
-+ /* Start searching at priority 0: */
-+ idx = 0;
-+skip_bitmap:
-+ if (!idx)
-+ idx = sched_find_first_bit(array->bitmap);
-+ else
-+ idx = find_next_bit(array->bitmap, MAX_PRIO, idx);
-+ if (idx >= MAX_PRIO) {
-+ if (array == busiest->expired && busiest->active->nr_active) {
-+ array = busiest->active;
-+ dst_array = this_rq->active;
-+ goto new_array;
-+ }
-+ goto out;
-+ }
-+
-+ head = array->queue + idx;
-+ curr = head->prev;
-+skip_queue:
-+ tmp = list_entry(curr, struct task_struct, run_list);
-+
-+ curr = curr->prev;
-+
-+ /*
-+ * To help distribute high priority tasks accross CPUs we don't
-+ * skip a task if it will be the highest priority task (i.e. smallest
-+ * prio value) on its new queue regardless of its load weight
-+ */
-+ skip_for_load = tmp->load_weight > rem_load_move;
-+ if (skip_for_load && idx < this_best_prio)
-+ skip_for_load = !best_prio_seen && idx == best_prio;
-+ if (skip_for_load ||
-+ !can_migrate_task(tmp, busiest, this_cpu, sd, idle, &pinned)) {
-+
-+ best_prio_seen |= idx == best_prio;
-+ if (curr != head)
-+ goto skip_queue;
-+ idx++;
-+ goto skip_bitmap;
-+ }
-+
-+ pull_task(busiest, array, tmp, this_rq, dst_array, this_cpu);
-+ pulled++;
-+ rem_load_move -= tmp->load_weight;
-+
-+ /*
-+ * We only want to steal up to the prescribed number of tasks
-+ * and the prescribed amount of weighted load.
-+ */
-+ if (pulled < max_nr_move && rem_load_move > 0) {
-+ if (idx < this_best_prio)
-+ this_best_prio = idx;
-+ if (curr != head)
-+ goto skip_queue;
-+ idx++;
-+ goto skip_bitmap;
-+ }
-+out:
-+ /*
-+ * Right now, this is the only place pull_task() is called,
-+ * so we can safely collect pull_task() stats here rather than
-+ * inside pull_task().
-+ */
-+ schedstat_add(sd, lb_gained[idle], pulled);
-+
-+ if (all_pinned)
-+ *all_pinned = pinned;
-+ return pulled;
-+}
-+
-+/*
-+ * find_busiest_group finds and returns the busiest CPU group within the
-+ * domain. It calculates and returns the amount of weighted load which
-+ * should be moved to restore balance via the imbalance parameter.
-+ */
-+static struct sched_group *
-+find_busiest_group(struct sched_domain *sd, int this_cpu,
-+ unsigned long *imbalance, enum idle_type idle, int *sd_idle,
-+ cpumask_t *cpus, int *balance)
-+{
-+ struct sched_group *busiest = NULL, *this = NULL, *group = sd->groups;
-+ unsigned long max_load, avg_load, total_load, this_load, total_pwr;
-+ unsigned long max_pull;
-+ unsigned long busiest_load_per_task, busiest_nr_running;
-+ unsigned long this_load_per_task, this_nr_running;
-+ int load_idx;
-+#if defined(CONFIG_SCHED_MC) || defined(CONFIG_SCHED_SMT)
-+ int power_savings_balance = 1;
-+ unsigned long leader_nr_running = 0, min_load_per_task = 0;
-+ unsigned long min_nr_running = ULONG_MAX;
-+ struct sched_group *group_min = NULL, *group_leader = NULL;
-+#endif
-+
-+ max_load = this_load = total_load = total_pwr = 0;
-+ busiest_load_per_task = busiest_nr_running = 0;
-+ this_load_per_task = this_nr_running = 0;
-+ if (idle == NOT_IDLE)
-+ load_idx = sd->busy_idx;
-+ else if (idle == NEWLY_IDLE)
-+ load_idx = sd->newidle_idx;
-+ else
-+ load_idx = sd->idle_idx;
-+
-+ do {
-+ unsigned long load, group_capacity;
-+ int local_group;
-+ int i;
-+ unsigned int balance_cpu = -1, first_idle_cpu = 0;
-+ unsigned long sum_nr_running, sum_weighted_load;
-+
-+ local_group = cpu_isset(this_cpu, group->cpumask);
-+
-+ if (local_group)
-+ balance_cpu = first_cpu(group->cpumask);
-+
-+ /* Tally up the load of all CPUs in the group */
-+ sum_weighted_load = sum_nr_running = avg_load = 0;
-+
-+ for_each_cpu_mask(i, group->cpumask) {
-+ struct rq *rq;
-+
-+ if (!cpu_isset(i, *cpus))
-+ continue;
-+
-+ rq = cpu_rq(i);
-+
-+ if (*sd_idle && !idle_cpu(i))
-+ *sd_idle = 0;
-+
-+ /* Bias balancing toward cpus of our domain */
-+ if (local_group) {
-+ if (idle_cpu(i) && !first_idle_cpu) {
-+ first_idle_cpu = 1;
-+ balance_cpu = i;
-+ }
-+
-+ load = target_load(i, load_idx);
-+ } else
-+ load = source_load(i, load_idx);
-+
-+ avg_load += load;
-+ sum_nr_running += rq->nr_running;
-+ sum_weighted_load += rq->raw_weighted_load;
-+ }
-+
-+ /*
-+ * First idle cpu or the first cpu(busiest) in this sched group
-+ * is eligible for doing load balancing at this and above
-+ * domains.
-+ */
-+ if (local_group && balance_cpu != this_cpu && balance) {
-+ *balance = 0;
-+ goto ret;
-+ }
-+
-+ total_load += avg_load;
-+ total_pwr += group->__cpu_power;
-+
-+ /* Adjust by relative CPU power of the group */
-+ avg_load = sg_div_cpu_power(group,
-+ avg_load * SCHED_LOAD_SCALE);
-+
-+ group_capacity = group->__cpu_power / SCHED_LOAD_SCALE;
-+
-+ if (local_group) {
-+ this_load = avg_load;
-+ this = group;
-+ this_nr_running = sum_nr_running;
-+ this_load_per_task = sum_weighted_load;
-+ } else if (avg_load > max_load &&
-+ sum_nr_running > group_capacity) {
-+ max_load = avg_load;
-+ busiest = group;
-+ busiest_nr_running = sum_nr_running;
-+ busiest_load_per_task = sum_weighted_load;
-+ }
-+
-+#if defined(CONFIG_SCHED_MC) || defined(CONFIG_SCHED_SMT)
-+ /*
-+ * Busy processors will not participate in power savings
-+ * balance.
-+ */
-+ if (idle == NOT_IDLE || !(sd->flags & SD_POWERSAVINGS_BALANCE))
-+ goto group_next;
-+
-+ /*
-+ * If the local group is idle or completely loaded
-+ * no need to do power savings balance at this domain
-+ */
-+ if (local_group && (this_nr_running >= group_capacity ||
-+ !this_nr_running))
-+ power_savings_balance = 0;
-+
-+ /*
-+ * If a group is already running at full capacity or idle,
-+ * don't include that group in power savings calculations
-+ */
-+ if (!power_savings_balance || sum_nr_running >= group_capacity
-+ || !sum_nr_running)
-+ goto group_next;
-+
-+ /*
-+ * Calculate the group which has the least non-idle load.
-+ * This is the group from where we need to pick up the load
-+ * for saving power
-+ */
-+ if ((sum_nr_running < min_nr_running) ||
-+ (sum_nr_running == min_nr_running &&
-+ first_cpu(group->cpumask) <
-+ first_cpu(group_min->cpumask))) {
-+ group_min = group;
-+ min_nr_running = sum_nr_running;
-+ min_load_per_task = sum_weighted_load /
-+ sum_nr_running;
-+ }
-+
-+ /*
-+ * Calculate the group which is almost near its
-+ * capacity but still has some space to pick up some load
-+ * from other group and save more power
-+ */
-+ if (sum_nr_running <= group_capacity - 1) {
-+ if (sum_nr_running > leader_nr_running ||
-+ (sum_nr_running == leader_nr_running &&
-+ first_cpu(group->cpumask) >
-+ first_cpu(group_leader->cpumask))) {
-+ group_leader = group;
-+ leader_nr_running = sum_nr_running;
-+ }
-+ }
-+group_next:
-+#endif
-+ group = group->next;
-+ } while (group != sd->groups);
-+
-+ if (!busiest || this_load >= max_load || busiest_nr_running == 0)
-+ goto out_balanced;
-+
-+ avg_load = (SCHED_LOAD_SCALE * total_load) / total_pwr;
-+
-+ if (this_load >= avg_load ||
-+ 100*max_load <= sd->imbalance_pct*this_load)
-+ goto out_balanced;
-+
-+ busiest_load_per_task /= busiest_nr_running;
-+ /*
-+ * We're trying to get all the cpus to the average_load, so we don't
-+ * want to push ourselves above the average load, nor do we wish to
-+ * reduce the max loaded cpu below the average load, as either of these
-+ * actions would just result in more rebalancing later, and ping-pong
-+ * tasks around. Thus we look for the minimum possible imbalance.
-+ * Negative imbalances (*we* are more loaded than anyone else) will
-+ * be counted as no imbalance for these purposes -- we can't fix that
-+ * by pulling tasks to us. Be careful of negative numbers as they'll
-+ * appear as very large values with unsigned longs.
-+ */
-+ if (max_load <= busiest_load_per_task)
-+ goto out_balanced;
-+
-+ /*
-+ * In the presence of smp nice balancing, certain scenarios can have
-+ * max load less than avg load(as we skip the groups at or below
-+ * its cpu_power, while calculating max_load..)
-+ */
-+ if (max_load < avg_load) {
-+ *imbalance = 0;
-+ goto small_imbalance;
-+ }
-+
-+ /* Don't want to pull so many tasks that a group would go idle */
-+ max_pull = min(max_load - avg_load, max_load - busiest_load_per_task);
-+
-+ /* How much load to actually move to equalise the imbalance */
-+ *imbalance = min(max_pull * busiest->__cpu_power,
-+ (avg_load - this_load) * this->__cpu_power)
-+ / SCHED_LOAD_SCALE;
-+
-+ /*
-+ * if *imbalance is less than the average load per runnable task
-+ * there is no gaurantee that any tasks will be moved so we'll have
-+ * a think about bumping its value to force at least one task to be
-+ * moved
-+ */
-+ if (*imbalance < busiest_load_per_task) {
-+ unsigned long tmp, pwr_now, pwr_move;
-+ unsigned int imbn;
-+
-+small_imbalance:
-+ pwr_move = pwr_now = 0;
-+ imbn = 2;
-+ if (this_nr_running) {
-+ this_load_per_task /= this_nr_running;
-+ if (busiest_load_per_task > this_load_per_task)
-+ imbn = 1;
-+ } else
-+ this_load_per_task = SCHED_LOAD_SCALE;
-+
-+ if (max_load - this_load >= busiest_load_per_task * imbn) {
-+ *imbalance = busiest_load_per_task;
-+ return busiest;
-+ }
-+
-+ /*
-+ * OK, we don't have enough imbalance to justify moving tasks,
-+ * however we may be able to increase total CPU power used by
-+ * moving them.
-+ */
-+
-+ pwr_now += busiest->__cpu_power *
-+ min(busiest_load_per_task, max_load);
-+ pwr_now += this->__cpu_power *
-+ min(this_load_per_task, this_load);
-+ pwr_now /= SCHED_LOAD_SCALE;
-+
-+ /* Amount of load we'd subtract */
-+ tmp = sg_div_cpu_power(busiest,
-+ busiest_load_per_task * SCHED_LOAD_SCALE);
-+ if (max_load > tmp)
-+ pwr_move += busiest->__cpu_power *
-+ min(busiest_load_per_task, max_load - tmp);
-+
-+ /* Amount of load we'd add */
-+ if (max_load * busiest->__cpu_power <
-+ busiest_load_per_task * SCHED_LOAD_SCALE)
-+ tmp = sg_div_cpu_power(this,
-+ max_load * busiest->__cpu_power);
-+ else
-+ tmp = sg_div_cpu_power(this,
-+ busiest_load_per_task * SCHED_LOAD_SCALE);
-+ pwr_move += this->__cpu_power *
-+ min(this_load_per_task, this_load + tmp);
-+ pwr_move /= SCHED_LOAD_SCALE;
-+
-+ /* Move if we gain throughput */
-+ if (pwr_move <= pwr_now)
-+ goto out_balanced;
-+
-+ *imbalance = busiest_load_per_task;
-+ }
-+
-+ return busiest;
-+
-+out_balanced:
-+#if defined(CONFIG_SCHED_MC) || defined(CONFIG_SCHED_SMT)
-+ if (idle == NOT_IDLE || !(sd->flags & SD_POWERSAVINGS_BALANCE))
-+ goto ret;
-+
-+ if (this == group_leader && group_leader != group_min) {
-+ *imbalance = min_load_per_task;
-+ return group_min;
-+ }
-+#endif
-+ret:
-+ *imbalance = 0;
-+ return NULL;
-+}
-+
-+/*
-+ * find_busiest_queue - find the busiest runqueue among the cpus in group.
-+ */
-+static struct rq *
-+find_busiest_queue(struct sched_group *group, enum idle_type idle,
-+ unsigned long imbalance, cpumask_t *cpus)
-+{
-+ struct rq *busiest = NULL, *rq;
-+ unsigned long max_load = 0;
-+ int i;
-+
-+ for_each_cpu_mask(i, group->cpumask) {
-+
-+ if (!cpu_isset(i, *cpus))
-+ continue;
-+
-+ rq = cpu_rq(i);
-+
-+ if (rq->nr_running == 1 && rq->raw_weighted_load > imbalance)
-+ continue;
-+
-+ if (rq->raw_weighted_load > max_load) {
-+ max_load = rq->raw_weighted_load;
-+ busiest = rq;
-+ }
-+ }
-+
-+ return busiest;
-+}
-+
-+/*
-+ * Max backoff if we encounter pinned tasks. Pretty arbitrary value, but
-+ * so long as it is large enough.
-+ */
-+#define MAX_PINNED_INTERVAL 512
-+
-+static inline unsigned long minus_1_or_zero(unsigned long n)
-+{
-+ return n > 0 ? n - 1 : 0;
-+}
-+
-+/*
-+ * Check this_cpu to ensure it is balanced within domain. Attempt to move
-+ * tasks if there is an imbalance.
-+ */
-+static int load_balance(int this_cpu, struct rq *this_rq,
-+ struct sched_domain *sd, enum idle_type idle,
-+ int *balance)
-+{
-+ int nr_moved, all_pinned = 0, active_balance = 0, sd_idle = 0;
-+ struct sched_group *group;
-+ unsigned long imbalance;
-+ struct rq *busiest;
-+ cpumask_t cpus = CPU_MASK_ALL;
-+ unsigned long flags;
-+
-+ /*
-+ * When power savings policy is enabled for the parent domain, idle
-+ * sibling can pick up load irrespective of busy siblings. In this case,
-+ * let the state of idle sibling percolate up as IDLE, instead of
-+ * portraying it as NOT_IDLE.
-+ */
-+ if (idle != NOT_IDLE && sd->flags & SD_SHARE_CPUPOWER &&
-+ !test_sd_parent(sd, SD_POWERSAVINGS_BALANCE))
-+ sd_idle = 1;
-+
-+ schedstat_inc(sd, lb_cnt[idle]);
-+
-+redo:
-+ group = find_busiest_group(sd, this_cpu, &imbalance, idle, &sd_idle,
-+ &cpus, balance);
-+
-+ if (*balance == 0)
-+ goto out_balanced;
-+
-+ if (!group) {
-+ schedstat_inc(sd, lb_nobusyg[idle]);
-+ goto out_balanced;
-+ }
-+
-+ busiest = find_busiest_queue(group, idle, imbalance, &cpus);
-+ if (!busiest) {
-+ schedstat_inc(sd, lb_nobusyq[idle]);
-+ goto out_balanced;
-+ }
-+
-+ BUG_ON(busiest == this_rq);
-+
-+ schedstat_add(sd, lb_imbalance[idle], imbalance);
-+
-+ nr_moved = 0;
-+ if (busiest->nr_running > 1) {
-+ /*
-+ * Attempt to move tasks. If find_busiest_group has found
-+ * an imbalance but busiest->nr_running <= 1, the group is
-+ * still unbalanced. nr_moved simply stays zero, so it is
-+ * correctly treated as an imbalance.
-+ */
-+ local_irq_save(flags);
-+ double_rq_lock(this_rq, busiest);
-+ nr_moved = move_tasks(this_rq, this_cpu, busiest,
-+ minus_1_or_zero(busiest->nr_running),
-+ imbalance, sd, idle, &all_pinned);
-+ double_rq_unlock(this_rq, busiest);
-+ local_irq_restore(flags);
-+
-+ /*
-+ * some other cpu did the load balance for us.
-+ */
-+ if (nr_moved && this_cpu != smp_processor_id())
-+ resched_cpu(this_cpu);
-+
-+ /* All tasks on this runqueue were pinned by CPU affinity */
-+ if (unlikely(all_pinned)) {
-+ cpu_clear(cpu_of(busiest), cpus);
-+ if (!cpus_empty(cpus))
-+ goto redo;
-+ goto out_balanced;
-+ }
-+ }
-+
-+ if (!nr_moved) {
-+ schedstat_inc(sd, lb_failed[idle]);
-+ sd->nr_balance_failed++;
-+
-+ if (unlikely(sd->nr_balance_failed > sd->cache_nice_tries+2)) {
-+
-+ spin_lock_irqsave(&busiest->lock, flags);
-+
-+ /* don't kick the migration_thread, if the curr
-+ * task on busiest cpu can't be moved to this_cpu
-+ */
-+ if (!cpu_isset(this_cpu, busiest->curr->cpus_allowed)) {
-+ spin_unlock_irqrestore(&busiest->lock, flags);
-+ all_pinned = 1;
-+ goto out_one_pinned;
-+ }
-+
-+ if (!busiest->active_balance) {
-+ busiest->active_balance = 1;
-+ busiest->push_cpu = this_cpu;
-+ active_balance = 1;
-+ }
-+ spin_unlock_irqrestore(&busiest->lock, flags);
-+ if (active_balance)
-+ wake_up_process(busiest->migration_thread);
-+
-+ /*
-+ * We've kicked active balancing, reset the failure
-+ * counter.
-+ */
-+ sd->nr_balance_failed = sd->cache_nice_tries+1;
-+ }
-+ } else
-+ sd->nr_balance_failed = 0;
-+
-+ if (likely(!active_balance)) {
-+ /* We were unbalanced, so reset the balancing interval */
-+ sd->balance_interval = sd->min_interval;
-+ } else {
-+ /*
-+ * If we've begun active balancing, start to back off. This
-+ * case may not be covered by the all_pinned logic if there
-+ * is only 1 task on the busy runqueue (because we don't call
-+ * move_tasks).
-+ */
-+ if (sd->balance_interval < sd->max_interval)
-+ sd->balance_interval *= 2;
-+ }
-+
-+ if (!nr_moved && !sd_idle && sd->flags & SD_SHARE_CPUPOWER &&
-+ !test_sd_parent(sd, SD_POWERSAVINGS_BALANCE))
-+ return -1;
-+ return nr_moved;
-+
-+out_balanced:
-+ schedstat_inc(sd, lb_balanced[idle]);
-+
-+ sd->nr_balance_failed = 0;
-+
-+out_one_pinned:
-+ /* tune up the balancing interval */
-+ if ((all_pinned && sd->balance_interval < MAX_PINNED_INTERVAL) ||
-+ (sd->balance_interval < sd->max_interval))
-+ sd->balance_interval *= 2;
-+
-+ if (!sd_idle && sd->flags & SD_SHARE_CPUPOWER &&
-+ !test_sd_parent(sd, SD_POWERSAVINGS_BALANCE))
-+ return -1;
-+ return 0;
-+}
-+
-+/*
-+ * Check this_cpu to ensure it is balanced within domain. Attempt to move
-+ * tasks if there is an imbalance.
-+ *
-+ * Called from schedule when this_rq is about to become idle (NEWLY_IDLE).
-+ * this_rq is locked.
-+ */
-+static int
-+load_balance_newidle(int this_cpu, struct rq *this_rq, struct sched_domain *sd)
-+{
-+ struct sched_group *group;
-+ struct rq *busiest = NULL;
-+ unsigned long imbalance;
-+ int nr_moved = 0;
-+ int sd_idle = 0;
-+ cpumask_t cpus = CPU_MASK_ALL;
-+
-+ /*
-+ * When power savings policy is enabled for the parent domain, idle
-+ * sibling can pick up load irrespective of busy siblings. In this case,
-+ * let the state of idle sibling percolate up as IDLE, instead of
-+ * portraying it as NOT_IDLE.
-+ */
-+ if (sd->flags & SD_SHARE_CPUPOWER &&
-+ !test_sd_parent(sd, SD_POWERSAVINGS_BALANCE))
-+ sd_idle = 1;
-+
-+ schedstat_inc(sd, lb_cnt[NEWLY_IDLE]);
-+redo:
-+ group = find_busiest_group(sd, this_cpu, &imbalance, NEWLY_IDLE,
-+ &sd_idle, &cpus, NULL);
-+ if (!group) {
-+ schedstat_inc(sd, lb_nobusyg[NEWLY_IDLE]);
-+ goto out_balanced;
-+ }
-+
-+ busiest = find_busiest_queue(group, NEWLY_IDLE, imbalance,
-+ &cpus);
-+ if (!busiest) {
-+ schedstat_inc(sd, lb_nobusyq[NEWLY_IDLE]);
-+ goto out_balanced;
-+ }
-+
-+ BUG_ON(busiest == this_rq);
-+
-+ schedstat_add(sd, lb_imbalance[NEWLY_IDLE], imbalance);
-+
-+ nr_moved = 0;
-+ if (busiest->nr_running > 1) {
-+ /* Attempt to move tasks */
-+ double_lock_balance(this_rq, busiest);
-+ nr_moved = move_tasks(this_rq, this_cpu, busiest,
-+ minus_1_or_zero(busiest->nr_running),
-+ imbalance, sd, NEWLY_IDLE, NULL);
-+ spin_unlock(&busiest->lock);
-+
-+ if (!nr_moved) {
-+ cpu_clear(cpu_of(busiest), cpus);
-+ if (!cpus_empty(cpus))
-+ goto redo;
-+ }
-+ }
-+
-+ if (!nr_moved) {
-+ schedstat_inc(sd, lb_failed[NEWLY_IDLE]);
-+ if (!sd_idle && sd->flags & SD_SHARE_CPUPOWER &&
-+ !test_sd_parent(sd, SD_POWERSAVINGS_BALANCE))
-+ return -1;
-+ } else
-+ sd->nr_balance_failed = 0;
-+
-+ return nr_moved;
-+
-+out_balanced:
-+ schedstat_inc(sd, lb_balanced[NEWLY_IDLE]);
-+ if (!sd_idle && sd->flags & SD_SHARE_CPUPOWER &&
-+ !test_sd_parent(sd, SD_POWERSAVINGS_BALANCE))
-+ return -1;
-+ sd->nr_balance_failed = 0;
-+
-+ return 0;
-+}
-+
-+/*
-+ * idle_balance is called by schedule() if this_cpu is about to become
-+ * idle. Attempts to pull tasks from other CPUs.
-+ */
-+static void idle_balance(int this_cpu, struct rq *this_rq)
-+{
-+ struct sched_domain *sd;
-+ int pulled_task = 0;
-+ unsigned long next_balance = jiffies + 60 * HZ;
-+
-+ for_each_domain(this_cpu, sd) {
-+ unsigned long interval;
-+
-+ if (!(sd->flags & SD_LOAD_BALANCE))
-+ continue;
-+
-+ if (sd->flags & SD_BALANCE_NEWIDLE)
-+ /* If we've pulled tasks over stop searching: */
-+ pulled_task = load_balance_newidle(this_cpu,
-+ this_rq, sd);
-+
-+ interval = msecs_to_jiffies(sd->balance_interval);
-+ if (time_after(next_balance, sd->last_balance + interval))
-+ next_balance = sd->last_balance + interval;
-+ if (pulled_task)
-+ break;
-+ }
-+ if (!pulled_task)
-+ /*
-+ * We are going idle. next_balance may be set based on
-+ * a busy processor. So reset next_balance.
-+ */
-+ this_rq->next_balance = next_balance;
-+}
-+
-+/*
-+ * active_load_balance is run by migration threads. It pushes running tasks
-+ * off the busiest CPU onto idle CPUs. It requires at least 1 task to be
-+ * running on each physical CPU where possible, and avoids physical /
-+ * logical imbalances.
-+ *
-+ * Called with busiest_rq locked.
-+ */
-+static void active_load_balance(struct rq *busiest_rq, int busiest_cpu)
-+{
-+ int target_cpu = busiest_rq->push_cpu;
-+ struct sched_domain *sd;
-+ struct rq *target_rq;
-+
-+ /* Is there any task to move? */
-+ if (busiest_rq->nr_running <= 1)
-+ return;
-+
-+ target_rq = cpu_rq(target_cpu);
-+
-+ /*
-+ * This condition is "impossible", if it occurs
-+ * we need to fix it. Originally reported by
-+ * Bjorn Helgaas on a 128-cpu setup.
-+ */
-+ BUG_ON(busiest_rq == target_rq);
-+
-+ /* move a task from busiest_rq to target_rq */
-+ double_lock_balance(busiest_rq, target_rq);
-+
-+ /* Search for an sd spanning us and the target CPU. */
-+ for_each_domain(target_cpu, sd) {
-+ if ((sd->flags & SD_LOAD_BALANCE) &&
-+ cpu_isset(busiest_cpu, sd->span))
-+ break;
-+ }
-+
-+ if (likely(sd)) {
-+ schedstat_inc(sd, alb_cnt);
-+
-+ if (move_tasks(target_rq, target_cpu, busiest_rq, 1,
-+ RTPRIO_TO_LOAD_WEIGHT(100), sd, SCHED_IDLE,
-+ NULL))
-+ schedstat_inc(sd, alb_pushed);
-+ else
-+ schedstat_inc(sd, alb_failed);
-+ }
-+ spin_unlock(&target_rq->lock);
-+}
-+
-+static void update_load(struct rq *this_rq)
-+{
-+ unsigned long this_load;
-+ unsigned int i, scale;
-+
-+ this_load = this_rq->raw_weighted_load;
-+
-+ /* Update our load: */
-+ for (i = 0, scale = 1; i < 3; i++, scale += scale) {
-+ unsigned long old_load, new_load;
-+
-+ /* scale is effectively 1 << i now, and >> i divides by scale */
-+
-+ old_load = this_rq->cpu_load[i];
-+ new_load = this_load;
-+ /*
-+ * Round up the averaging division if load is increasing. This
-+ * prevents us from getting stuck on 9 if the load is 10, for
-+ * example.
-+ */
-+ if (new_load > old_load)
-+ new_load += scale-1;
-+ this_rq->cpu_load[i] = (old_load*(scale-1) + new_load) >> i;
-+ }
-+}
-+
-+#ifdef CONFIG_NO_HZ
-+static struct {
-+ atomic_t load_balancer;
-+ cpumask_t cpu_mask;
-+} nohz ____cacheline_aligned = {
-+ .load_balancer = ATOMIC_INIT(-1),
-+ .cpu_mask = CPU_MASK_NONE,
-+};
-+
-+/*
-+ * This routine will try to nominate the ilb (idle load balancing)
-+ * owner among the cpus whose ticks are stopped. ilb owner will do the idle
-+ * load balancing on behalf of all those cpus. If all the cpus in the system
-+ * go into this tickless mode, then there will be no ilb owner (as there is
-+ * no need for one) and all the cpus will sleep till the next wakeup event
-+ * arrives...
-+ *
-+ * For the ilb owner, tick is not stopped. And this tick will be used
-+ * for idle load balancing. ilb owner will still be part of
-+ * nohz.cpu_mask..
-+ *
-+ * While stopping the tick, this cpu will become the ilb owner if there
-+ * is no other owner. And will be the owner till that cpu becomes busy
-+ * or if all cpus in the system stop their ticks at which point
-+ * there is no need for ilb owner.
-+ *
-+ * When the ilb owner becomes busy, it nominates another owner, during the
-+ * next busy scheduler_tick()
-+ */
-+int select_nohz_load_balancer(int stop_tick)
-+{
-+ int cpu = smp_processor_id();
-+
-+ if (stop_tick) {
-+ cpu_set(cpu, nohz.cpu_mask);
-+ cpu_rq(cpu)->in_nohz_recently = 1;
-+
-+ /*
-+ * If we are going offline and still the leader, give up!
-+ */
-+ if (cpu_is_offline(cpu) &&
-+ atomic_read(&nohz.load_balancer) == cpu) {
-+ if (atomic_cmpxchg(&nohz.load_balancer, cpu, -1) != cpu)
-+ BUG();
-+ return 0;
-+ }
-+
-+ /* time for ilb owner also to sleep */
-+ if (cpus_weight(nohz.cpu_mask) == num_online_cpus()) {
-+ if (atomic_read(&nohz.load_balancer) == cpu)
-+ atomic_set(&nohz.load_balancer, -1);
-+ return 0;
-+ }
-+
-+ if (atomic_read(&nohz.load_balancer) == -1) {
-+ /* make me the ilb owner */
-+ if (atomic_cmpxchg(&nohz.load_balancer, -1, cpu) == -1)
-+ return 1;
-+ } else if (atomic_read(&nohz.load_balancer) == cpu)
-+ return 1;
-+ } else {
-+ if (!cpu_isset(cpu, nohz.cpu_mask))
-+ return 0;
-+
-+ cpu_clear(cpu, nohz.cpu_mask);
-+
-+ if (atomic_read(&nohz.load_balancer) == cpu)
-+ if (atomic_cmpxchg(&nohz.load_balancer, cpu, -1) != cpu)
-+ BUG();
-+ }
-+ return 0;
-+}
-+#endif
-+
-+static DEFINE_SPINLOCK(balancing);
-+
-+/*
-+ * It checks each scheduling domain to see if it is due to be balanced,
-+ * and initiates a balancing operation if so.
-+ *
-+ * Balancing parameters are set up in arch_init_sched_domains.
-+ */
-+static inline void rebalance_domains(int cpu, enum idle_type idle)
-+{
-+ int balance = 1;
-+ struct rq *rq = cpu_rq(cpu);
-+ unsigned long interval;
-+ struct sched_domain *sd;
-+ /* Earliest time when we have to do rebalance again */
-+ unsigned long next_balance = jiffies + 60*HZ;
-+
-+ for_each_domain(cpu, sd) {
-+ if (!(sd->flags & SD_LOAD_BALANCE))
-+ continue;
-+
-+ interval = sd->balance_interval;
-+ if (idle != SCHED_IDLE)
-+ interval *= sd->busy_factor;
-+
-+ /* scale ms to jiffies */
-+ interval = msecs_to_jiffies(interval);
-+ if (unlikely(!interval))
-+ interval = 1;
-+
-+ if (sd->flags & SD_SERIALIZE) {
-+ if (!spin_trylock(&balancing))
-+ goto out;
-+ }
-+
-+ if (time_after_eq(jiffies, sd->last_balance + interval)) {
-+ if (load_balance(cpu, rq, sd, idle, &balance)) {
-+ /*
-+ * We've pulled tasks over so either we're no
-+ * longer idle, or one of our SMT siblings is
-+ * not idle.
-+ */
-+ idle = NOT_IDLE;
-+ }
-+ sd->last_balance = jiffies;
-+ }
-+ if (sd->flags & SD_SERIALIZE)
-+ spin_unlock(&balancing);
-+out:
-+ if (time_after(next_balance, sd->last_balance + interval))
-+ next_balance = sd->last_balance + interval;
-+
-+ /*
-+ * Stop the load balance at this level. There is another
-+ * CPU in our sched group which is doing load balancing more
-+ * actively.
-+ */
-+ if (!balance)
-+ break;
-+ }
-+ rq->next_balance = next_balance;
-+}
-+
-+/*
-+ * run_rebalance_domains is triggered when needed from the scheduler tick.
-+ * In CONFIG_NO_HZ case, the idle load balance owner will do the
-+ * rebalancing for all the cpus for whom scheduler ticks are stopped.
-+ */
-+static void run_rebalance_domains(struct softirq_action *h)
-+{
-+ int local_cpu = smp_processor_id();
-+ struct rq *local_rq = cpu_rq(local_cpu);
-+ enum idle_type idle = local_rq->idle_at_tick ? SCHED_IDLE : NOT_IDLE;
-+
-+ rebalance_domains(local_cpu, idle);
-+
-+#ifdef CONFIG_NO_HZ
-+ /*
-+ * If this cpu is the owner for idle load balancing, then do the
-+ * balancing on behalf of the other idle cpus whose ticks are
-+ * stopped.
-+ */
-+ if (local_rq->idle_at_tick &&
-+ atomic_read(&nohz.load_balancer) == local_cpu) {
-+ cpumask_t cpus = nohz.cpu_mask;
-+ struct rq *rq;
-+ int balance_cpu;
-+
-+ cpu_clear(local_cpu, cpus);
-+ for_each_cpu_mask(balance_cpu, cpus) {
-+ /*
-+ * If this cpu gets work to do, stop the load balancing
-+ * work being done for other cpus. Next load
-+ * balancing owner will pick it up.
-+ */
-+ if (need_resched())
-+ break;
-+
-+ rebalance_domains(balance_cpu, SCHED_IDLE);
-+
-+ rq = cpu_rq(balance_cpu);
-+ if (time_after(local_rq->next_balance, rq->next_balance))
-+ local_rq->next_balance = rq->next_balance;
-+ }
-+ }
-+#endif
-+}
-+
-+/*
-+ * Trigger the SCHED_SOFTIRQ if it is time to do periodic load balancing.
-+ *
-+ * In case of CONFIG_NO_HZ, this is the place where we nominate a new
-+ * idle load balancing owner or decide to stop the periodic load balancing,
-+ * if the whole system is idle.
-+ */
-+static inline void trigger_load_balance(int cpu)
-+{
-+ struct rq *rq = cpu_rq(cpu);
-+#ifdef CONFIG_NO_HZ
-+ /*
-+ * If we were in the nohz mode recently and busy at the current
-+ * scheduler tick, then check if we need to nominate new idle
-+ * load balancer.
-+ */
-+ if (rq->in_nohz_recently && !rq->idle_at_tick) {
-+ rq->in_nohz_recently = 0;
-+
-+ if (atomic_read(&nohz.load_balancer) == cpu) {
-+ cpu_clear(cpu, nohz.cpu_mask);
-+ atomic_set(&nohz.load_balancer, -1);
-+ }
-+
-+ if (atomic_read(&nohz.load_balancer) == -1) {
-+ /*
-+ * simple selection for now: Nominate the
-+ * first cpu in the nohz list to be the next
-+ * ilb owner.
-+ *
-+ * TBD: Traverse the sched domains and nominate
-+ * the nearest cpu in the nohz.cpu_mask.
-+ */
-+ int ilb = first_cpu(nohz.cpu_mask);
-+
-+ if (ilb != NR_CPUS)
-+ resched_cpu(ilb);
-+ }
-+ }
-+
-+ /*
-+ * If this cpu is idle and doing idle load balancing for all the
-+ * cpus with ticks stopped, is it time for that to stop?
-+ */
-+ if (rq->idle_at_tick && atomic_read(&nohz.load_balancer) == cpu &&
-+ cpus_weight(nohz.cpu_mask) == num_online_cpus()) {
-+ resched_cpu(cpu);
-+ return;
-+ }
-+
-+ /*
-+ * If this cpu is idle and the idle load balancing is done by
-+ * someone else, then no need raise the SCHED_SOFTIRQ
-+ */
-+ if (rq->idle_at_tick && atomic_read(&nohz.load_balancer) != cpu &&
-+ cpu_isset(cpu, nohz.cpu_mask))
-+ return;
-+#endif
-+ if (time_after_eq(jiffies, rq->next_balance))
-+ raise_softirq(SCHED_SOFTIRQ);
-+}
-+#else
-+/*
-+ * on UP we do not need to balance between CPUs:
-+ */
-+static inline void idle_balance(int cpu, struct rq *rq)
-+{
-+}
-+#endif
-+
-+DEFINE_PER_CPU(struct kernel_stat, kstat);
-+
-+EXPORT_PER_CPU_SYMBOL(kstat);
-+
-+/*
-+ * This is called on clock ticks and on context switches.
-+ * Bank in p->sched_time the ns elapsed since the last tick or switch.
-+ */
-+static inline void
-+update_cpu_clock(struct task_struct *p, struct rq *rq, unsigned long long now)
-+{
-+ p->sched_time += now - p->last_ran;
-+ p->last_ran = rq->most_recent_timestamp = now;
-+}
-+
-+/*
-+ * Return current->sched_time plus any more ns on the sched_clock
-+ * that have not yet been banked.
-+ */
-+unsigned long long current_sched_time(const struct task_struct *p)
-+{
-+ unsigned long long ns;
-+ unsigned long flags;
-+
-+ local_irq_save(flags);
-+ ns = p->sched_time + sched_clock() - p->last_ran;
-+ local_irq_restore(flags);
-+
-+ return ns;
-+}
-+
-+/*
-+ * We place interactive tasks back into the active array, if possible.
-+ *
-+ * To guarantee that this does not starve expired tasks we ignore the
-+ * interactivity of a task if the first expired task had to wait more
-+ * than a 'reasonable' amount of time. This deadline timeout is
-+ * load-dependent, as the frequency of array switched decreases with
-+ * increasing number of running tasks. We also ignore the interactivity
-+ * if a better static_prio task has expired:
-+ */
-+static inline int expired_starving(struct rq *rq)
-+{
-+ if (rq->curr->static_prio > rq->best_expired_prio)
-+ return 1;
-+ if (!STARVATION_LIMIT || !rq->expired_timestamp)
-+ return 0;
-+ if (jiffies - rq->expired_timestamp > STARVATION_LIMIT * rq->nr_running)
-+ return 1;
-+ return 0;
-+}
-+
-+/*
-+ * Account user cpu time to a process.
-+ * @p: the process that the cpu time gets accounted to
-+ * @hardirq_offset: the offset to subtract from hardirq_count()
-+ * @cputime: the cpu time spent in user space since the last update
-+ */
-+void account_user_time(struct task_struct *p, cputime_t cputime)
-+{
-+ struct cpu_usage_stat *cpustat = &kstat_this_cpu.cpustat;
-+ struct vx_info *vxi = p->vx_info; /* p is _always_ current */
-+ cputime64_t tmp;
-+ int nice = (TASK_NICE(p) > 0);
-+
-+ p->utime = cputime_add(p->utime, cputime);
-+ vx_account_user(vxi, cputime, nice);
-+
-+ /* Add user time to cpustat. */
-+ tmp = cputime_to_cputime64(cputime);
-+ if (nice)
-+ cpustat->nice = cputime64_add(cpustat->nice, tmp);
-+ else
-+ cpustat->user = cputime64_add(cpustat->user, tmp);
-+}
-+
-+/*
-+ * Account system cpu time to a process.
-+ * @p: the process that the cpu time gets accounted to
-+ * @hardirq_offset: the offset to subtract from hardirq_count()
-+ * @cputime: the cpu time spent in kernel space since the last update
-+ */
-+void account_system_time(struct task_struct *p, int hardirq_offset,
-+ cputime_t cputime)
-+{
-+ struct cpu_usage_stat *cpustat = &kstat_this_cpu.cpustat;
-+ struct vx_info *vxi = p->vx_info; /* p is _always_ current */
-+ struct rq *rq = this_rq();
-+ cputime64_t tmp;
-+
-+ p->stime = cputime_add(p->stime, cputime);
-+ vx_account_system(vxi, cputime, (p == rq->idle));
-+
-+ /* Add system time to cpustat. */
-+ tmp = cputime_to_cputime64(cputime);
-+ if (hardirq_count() - hardirq_offset)
-+ cpustat->irq = cputime64_add(cpustat->irq, tmp);
-+ else if (softirq_count())
-+ cpustat->softirq = cputime64_add(cpustat->softirq, tmp);
-+ else if (p != rq->idle)
-+ cpustat->system = cputime64_add(cpustat->system, tmp);
-+ else if (atomic_read(&rq->nr_iowait) > 0)
-+ cpustat->iowait = cputime64_add(cpustat->iowait, tmp);
-+ else
-+ cpustat->idle = cputime64_add(cpustat->idle, tmp);
-+ /* Account for system time used */
-+ acct_update_integrals(p);
-+}
-+
-+/*
-+ * Account for involuntary wait time.
-+ * @p: the process from which the cpu time has been stolen
-+ * @steal: the cpu time spent in involuntary wait
-+ */
-+void account_steal_time(struct task_struct *p, cputime_t steal)
-+{
-+ struct cpu_usage_stat *cpustat = &kstat_this_cpu.cpustat;
-+ cputime64_t tmp = cputime_to_cputime64(steal);
-+ struct rq *rq = this_rq();
-+
-+ if (p == rq->idle) {
-+ p->stime = cputime_add(p->stime, steal);
-+ if (atomic_read(&rq->nr_iowait) > 0)
-+ cpustat->iowait = cputime64_add(cpustat->iowait, tmp);
-+ else
-+ cpustat->idle = cputime64_add(cpustat->idle, tmp);
-+ } else
-+ cpustat->steal = cputime64_add(cpustat->steal, tmp);
-+}
-+
-+static void task_running_tick(struct rq *rq, struct task_struct *p, int cpu)
-+{
-+ if (p->array != rq->active) {
-+ /* Task has expired but was not scheduled yet */
-+ set_tsk_need_resched(p);
-+ return;
-+ }
-+ spin_lock(&rq->lock);
-+ /*
-+ * The task was running during this tick - update the
-+ * time slice counter. Note: we do not update a thread's
-+ * priority until it either goes to sleep or uses up its
-+ * timeslice. This makes it possible for interactive tasks
-+ * to use up their timeslices at their highest priority levels.
-+ */
-+ if (rt_task(p)) {
-+ /*
-+ * RR tasks need a special form of timeslice management.
-+ * FIFO tasks have no timeslices.
-+ */
-+ if ((p->policy == SCHED_RR) && !--p->time_slice) {
-+ p->time_slice = task_timeslice(p);
-+ p->first_time_slice = 0;
-+ set_tsk_need_resched(p);
-+
-+ /* put it at the end of the queue: */
-+ requeue_task(p, rq->active);
-+ }
-+ goto out_unlock;
-+ }
-+ if (vx_need_resched(p, --p->time_slice, cpu)) {
-+ dequeue_task(p, rq->active);
-+ set_tsk_need_resched(p);
-+ p->prio = effective_prio(p);
-+ p->time_slice = task_timeslice(p);
-+ p->first_time_slice = 0;
-+
-+ if (!rq->expired_timestamp)
-+ rq->expired_timestamp = jiffies;
-+ if (!TASK_INTERACTIVE(p) || expired_starving(rq)) {
-+ enqueue_task(p, rq->expired);
-+ if (p->static_prio < rq->best_expired_prio)
-+ rq->best_expired_prio = p->static_prio;
-+ } else
-+ enqueue_task(p, rq->active);
-+ } else {
-+ /*
-+ * Prevent a too long timeslice allowing a task to monopolize
-+ * the CPU. We do this by splitting up the timeslice into
-+ * smaller pieces.
-+ *
-+ * Note: this does not mean the task's timeslices expire or
-+ * get lost in any way, they just might be preempted by
-+ * another task of equal priority. (one with higher
-+ * priority would have preempted this task already.) We
-+ * requeue this task to the end of the list on this priority
-+ * level, which is in essence a round-robin of tasks with
-+ * equal priority.
-+ *
-+ * This only applies to tasks in the interactive
-+ * delta range with at least TIMESLICE_GRANULARITY to requeue.
-+ */
-+ if (TASK_INTERACTIVE(p) && !((task_timeslice(p) -
-+ p->time_slice) % TIMESLICE_GRANULARITY(p)) &&
-+ (p->time_slice >= TIMESLICE_GRANULARITY(p)) &&
-+ (p->array == rq->active)) {
-+
-+ requeue_task(p, rq->active);
-+ set_tsk_need_resched(p);
-+ }
-+ }
-+out_unlock:
-+ spin_unlock(&rq->lock);
-+}
-+
-+/*
-+ * This function gets called by the timer code, with HZ frequency.
-+ * We call it with interrupts disabled.
-+ *
-+ * It also gets called by the fork code, when changing the parent's
-+ * timeslices.
-+ */
-+void scheduler_tick(void)
-+{
-+ unsigned long long now = sched_clock();
-+ struct task_struct *p = current;
-+ int cpu = smp_processor_id();
-+ int idle_at_tick = idle_cpu(cpu);
-+ struct rq *rq = cpu_rq(cpu);
-+
-+ update_cpu_clock(p, rq, now);
-+ vxm_sync(now, cpu);
-+
-+ if (idle_at_tick)
-+ vx_idle_resched(rq);
-+ else
-+ task_running_tick(rq, p, cpu);
-+#ifdef CONFIG_SMP
-+ update_load(rq);
-+ rq->idle_at_tick = idle_at_tick;
-+ trigger_load_balance(cpu);
-+#endif
-+}
-+
-+#if defined(CONFIG_PREEMPT) && defined(CONFIG_DEBUG_PREEMPT)
-+
-+void fastcall add_preempt_count(int val)
-+{
-+ /*
-+ * Underflow?
-+ */
-+ if (DEBUG_LOCKS_WARN_ON((preempt_count() < 0)))
-+ return;
-+ preempt_count() += val;
-+ /*
-+ * Spinlock count overflowing soon?
-+ */
-+ DEBUG_LOCKS_WARN_ON((preempt_count() & PREEMPT_MASK) >=
-+ PREEMPT_MASK - 10);
-+}
-+EXPORT_SYMBOL(add_preempt_count);
-+
-+void fastcall sub_preempt_count(int val)
-+{
-+ /*
-+ * Underflow?
-+ */
-+ if (DEBUG_LOCKS_WARN_ON(val > preempt_count()))
-+ return;
-+ /*
-+ * Is the spinlock portion underflowing?
-+ */
-+ if (DEBUG_LOCKS_WARN_ON((val < PREEMPT_MASK) &&
-+ !(preempt_count() & PREEMPT_MASK)))
-+ return;
-+
-+ preempt_count() -= val;
-+}
-+EXPORT_SYMBOL(sub_preempt_count);
-+
-+#endif
-+
-+static inline int interactive_sleep(enum sleep_type sleep_type)
-+{
-+ return (sleep_type == SLEEP_INTERACTIVE ||
-+ sleep_type == SLEEP_INTERRUPTED);
-+}
-+
-+/*
-+ * schedule() is the main scheduler function.
-+ */
-+asmlinkage void __sched schedule(void)
-+{
-+ struct task_struct *prev, *next;
-+ struct prio_array *array;
-+ struct list_head *queue;
-+ unsigned long long now;
-+ unsigned long run_time;
-+ int cpu, idx, new_prio;
-+ long *switch_count;
-+ struct rq *rq;
-+
-+ /*
-+ * Test if we are atomic. Since do_exit() needs to call into
-+ * schedule() atomically, we ignore that path for now.
-+ * Otherwise, whine if we are scheduling when we should not be.
-+ */
-+ if (unlikely(in_atomic() && !current->exit_state)) {
-+ printk(KERN_ERR "BUG: scheduling while atomic: "
-+ "%s/0x%08x/%d\n",
-+ current->comm, preempt_count(), current->pid);
-+ debug_show_held_locks(current);
-+ if (irqs_disabled())
-+ print_irqtrace_events(current);
-+ dump_stack();
-+ }
-+ profile_hit(SCHED_PROFILING, __builtin_return_address(0));
-+
-+need_resched:
-+ preempt_disable();
-+ prev = current;
-+ release_kernel_lock(prev);
-+need_resched_nonpreemptible:
-+ rq = this_rq();
-+
-+ /*
-+ * The idle thread is not allowed to schedule!
-+ * Remove this check after it has been exercised a bit.
-+ */
-+ if (unlikely(prev == rq->idle) && prev->state != TASK_RUNNING) {
-+ printk(KERN_ERR "bad: scheduling from the idle thread!\n");
-+ dump_stack();
-+ }
-+
-+ schedstat_inc(rq, sched_cnt);
-+ now = sched_clock();
-+ if (likely((long long)(now - prev->timestamp) < NS_MAX_SLEEP_AVG)) {
-+ run_time = now - prev->timestamp;
-+ if (unlikely((long long)(now - prev->timestamp) < 0))
-+ run_time = 0;
-+ } else
-+ run_time = NS_MAX_SLEEP_AVG;
-+
-+ /*
-+ * Tasks charged proportionately less run_time at high sleep_avg to
-+ * delay them losing their interactive status
-+ */
-+ run_time /= (CURRENT_BONUS(prev) ? : 1);
-+
-+ spin_lock_irq(&rq->lock);
-+
-+ switch_count = &prev->nivcsw;
-+ if (prev->state && !(preempt_count() & PREEMPT_ACTIVE)) {
-+ switch_count = &prev->nvcsw;
-+ if (unlikely((prev->state & TASK_INTERRUPTIBLE) &&
-+ unlikely(signal_pending(prev))))
-+ prev->state = TASK_RUNNING;
-+ else {
-+ if (prev->state == TASK_UNINTERRUPTIBLE) {
-+ rq->nr_uninterruptible++;
-+ vx_uninterruptible_inc(prev);
-+ }
-+ deactivate_task(prev, rq);
-+ }
-+ }
-+
-+ cpu = smp_processor_id();
-+ vx_set_rq_time(rq, jiffies);
-+try_unhold:
-+ vx_try_unhold(rq, cpu);
-+pick_next:
-+
-+ if (unlikely(!rq->nr_running)) {
-+ /* can we skip idle time? */
-+ if (vx_try_skip(rq, cpu))
-+ goto try_unhold;
-+
-+ idle_balance(cpu, rq);
-+ if (!rq->nr_running) {
-+ next = rq->idle;
-+ rq->expired_timestamp = 0;
-+ goto switch_tasks;
-+ }
-+ }
-+
-+ array = rq->active;
-+ if (unlikely(!array->nr_active)) {
-+ /*
-+ * Switch the active and expired arrays.
-+ */
-+ schedstat_inc(rq, sched_switch);
-+ rq->active = rq->expired;
-+ rq->expired = array;
-+ array = rq->active;
-+ rq->expired_timestamp = 0;
-+ rq->best_expired_prio = MAX_PRIO;
-+ }
-+
-+ idx = sched_find_first_bit(array->bitmap);
-+ queue = array->queue + idx;
-+ next = list_entry(queue->next, struct task_struct, run_list);
-+
-+ /* check before we schedule this context */
-+ if (!vx_schedule(next, rq, cpu))
-+ goto pick_next;
-+
-+ if (!rt_task(next) && interactive_sleep(next->sleep_type)) {
-+ unsigned long long delta = now - next->timestamp;
-+ if (unlikely((long long)(now - next->timestamp) < 0))
-+ delta = 0;
-+
-+ if (next->sleep_type == SLEEP_INTERACTIVE)
-+ delta = delta * (ON_RUNQUEUE_WEIGHT * 128 / 100) / 128;
-+
-+ array = next->array;
-+ new_prio = recalc_task_prio(next, next->timestamp + delta);
-+
-+ if (unlikely(next->prio != new_prio)) {
-+ dequeue_task(next, array);
-+ next->prio = new_prio;
-+ enqueue_task(next, array);
-+ }
-+ }
-+ next->sleep_type = SLEEP_NORMAL;
-+switch_tasks:
-+ if (next == rq->idle)
-+ schedstat_inc(rq, sched_goidle);
-+ prefetch(next);
-+ prefetch_stack(next);
-+ clear_tsk_need_resched(prev);
-+ rcu_qsctr_inc(task_cpu(prev));
-+
-+ update_cpu_clock(prev, rq, now);
-+
-+ prev->sleep_avg -= run_time;
-+ if ((long)prev->sleep_avg <= 0)
-+ prev->sleep_avg = 0;
-+ prev->timestamp = prev->last_ran = now;
-+
-+ sched_info_switch(prev, next);
-+ if (likely(prev != next)) {
-+ next->timestamp = next->last_ran = now;
-+ rq->nr_switches++;
-+ rq->curr = next;
-+ ++*switch_count;
-+
-+ prepare_task_switch(rq, next);
-+ prev = context_switch(rq, prev, next);
-+ barrier();
-+ /*
-+ * this_rq must be evaluated again because prev may have moved
-+ * CPUs since it called schedule(), thus the 'rq' on its stack
-+ * frame will be invalid.
-+ */
-+ finish_task_switch(this_rq(), prev);
-+ } else
-+ spin_unlock_irq(&rq->lock);
-+
-+ prev = current;
-+ if (unlikely(reacquire_kernel_lock(prev) < 0))
-+ goto need_resched_nonpreemptible;
-+ preempt_enable_no_resched();
-+ if (unlikely(test_thread_flag(TIF_NEED_RESCHED)))
-+ goto need_resched;
-+}
-+EXPORT_SYMBOL(schedule);
-+
-+#ifdef CONFIG_PREEMPT
-+/*
-+ * this is the entry point to schedule() from in-kernel preemption
-+ * off of preempt_enable. Kernel preemptions off return from interrupt
-+ * occur there and call schedule directly.
-+ */
-+asmlinkage void __sched preempt_schedule(void)
-+{
-+ struct thread_info *ti = current_thread_info();
-+#ifdef CONFIG_PREEMPT_BKL
-+ struct task_struct *task = current;
-+ int saved_lock_depth;
-+#endif
-+ /*
-+ * If there is a non-zero preempt_count or interrupts are disabled,
-+ * we do not want to preempt the current task. Just return..
-+ */
-+ if (likely(ti->preempt_count || irqs_disabled()))
-+ return;
-+
-+need_resched:
-+ add_preempt_count(PREEMPT_ACTIVE);
-+ /*
-+ * We keep the big kernel semaphore locked, but we
-+ * clear ->lock_depth so that schedule() doesnt
-+ * auto-release the semaphore:
-+ */
-+#ifdef CONFIG_PREEMPT_BKL
-+ saved_lock_depth = task->lock_depth;
-+ task->lock_depth = -1;
-+#endif
-+ schedule();
-+#ifdef CONFIG_PREEMPT_BKL
-+ task->lock_depth = saved_lock_depth;
-+#endif
-+ sub_preempt_count(PREEMPT_ACTIVE);
-+
-+ /* we could miss a preemption opportunity between schedule and now */
-+ barrier();
-+ if (unlikely(test_thread_flag(TIF_NEED_RESCHED)))
-+ goto need_resched;
-+}
-+EXPORT_SYMBOL(preempt_schedule);
-+
-+/*
-+ * this is the entry point to schedule() from kernel preemption
-+ * off of irq context.
-+ * Note, that this is called and return with irqs disabled. This will
-+ * protect us against recursive calling from irq.
-+ */
-+asmlinkage void __sched preempt_schedule_irq(void)
-+{
-+ struct thread_info *ti = current_thread_info();
-+#ifdef CONFIG_PREEMPT_BKL
-+ struct task_struct *task = current;
-+ int saved_lock_depth;
-+#endif
-+ /* Catch callers which need to be fixed */
-+ BUG_ON(ti->preempt_count || !irqs_disabled());
-+
-+need_resched:
-+ add_preempt_count(PREEMPT_ACTIVE);
-+ /*
-+ * We keep the big kernel semaphore locked, but we
-+ * clear ->lock_depth so that schedule() doesnt
-+ * auto-release the semaphore:
-+ */
-+#ifdef CONFIG_PREEMPT_BKL
-+ saved_lock_depth = task->lock_depth;
-+ task->lock_depth = -1;
-+#endif
-+ local_irq_enable();
-+ schedule();
-+ local_irq_disable();
-+#ifdef CONFIG_PREEMPT_BKL
-+ task->lock_depth = saved_lock_depth;
-+#endif
-+ sub_preempt_count(PREEMPT_ACTIVE);
-+
-+ /* we could miss a preemption opportunity between schedule and now */
-+ barrier();
-+ if (unlikely(test_thread_flag(TIF_NEED_RESCHED)))
-+ goto need_resched;
-+}
-+
-+#endif /* CONFIG_PREEMPT */
-+
-+int default_wake_function(wait_queue_t *curr, unsigned mode, int sync,
-+ void *key)
-+{
-+ return try_to_wake_up(curr->private, mode, sync);
-+}
-+EXPORT_SYMBOL(default_wake_function);
-+
-+/*
-+ * The core wakeup function. Non-exclusive wakeups (nr_exclusive == 0) just
-+ * wake everything up. If it's an exclusive wakeup (nr_exclusive == small +ve
-+ * number) then we wake all the non-exclusive tasks and one exclusive task.
-+ *
-+ * There are circumstances in which we can try to wake a task which has already
-+ * started to run but is not in state TASK_RUNNING. try_to_wake_up() returns
-+ * zero in this (rare) case, and we handle it by continuing to scan the queue.
-+ */
-+static void __wake_up_common(wait_queue_head_t *q, unsigned int mode,
-+ int nr_exclusive, int sync, void *key)
-+{
-+ struct list_head *tmp, *next;
-+
-+ list_for_each_safe(tmp, next, &q->task_list) {
-+ wait_queue_t *curr = list_entry(tmp, wait_queue_t, task_list);
-+ unsigned flags = curr->flags;
-+
-+ if (curr->func(curr, mode, sync, key) &&
-+ (flags & WQ_FLAG_EXCLUSIVE) && !--nr_exclusive)
-+ break;
-+ }
-+}
-+
-+/**
-+ * __wake_up - wake up threads blocked on a waitqueue.
-+ * @q: the waitqueue
-+ * @mode: which threads
-+ * @nr_exclusive: how many wake-one or wake-many threads to wake up
-+ * @key: is directly passed to the wakeup function
-+ */
-+void fastcall __wake_up(wait_queue_head_t *q, unsigned int mode,
-+ int nr_exclusive, void *key)
-+{
-+ unsigned long flags;
-+
-+ spin_lock_irqsave(&q->lock, flags);
-+ __wake_up_common(q, mode, nr_exclusive, 0, key);
-+ spin_unlock_irqrestore(&q->lock, flags);
-+}
-+EXPORT_SYMBOL(__wake_up);
-+
-+/*
-+ * Same as __wake_up but called with the spinlock in wait_queue_head_t held.
-+ */
-+void fastcall __wake_up_locked(wait_queue_head_t *q, unsigned int mode)
-+{
-+ __wake_up_common(q, mode, 1, 0, NULL);
-+}
-+
-+/**
-+ * __wake_up_sync - wake up threads blocked on a waitqueue.
-+ * @q: the waitqueue
-+ * @mode: which threads
-+ * @nr_exclusive: how many wake-one or wake-many threads to wake up
-+ *
-+ * The sync wakeup differs that the waker knows that it will schedule
-+ * away soon, so while the target thread will be woken up, it will not
-+ * be migrated to another CPU - ie. the two threads are 'synchronized'
-+ * with each other. This can prevent needless bouncing between CPUs.
-+ *
-+ * On UP it can prevent extra preemption.
-+ */
-+void fastcall
-+__wake_up_sync(wait_queue_head_t *q, unsigned int mode, int nr_exclusive)
-+{
-+ unsigned long flags;
-+ int sync = 1;
-+
-+ if (unlikely(!q))
-+ return;
-+
-+ if (unlikely(!nr_exclusive))
-+ sync = 0;
-+
-+ spin_lock_irqsave(&q->lock, flags);
-+ __wake_up_common(q, mode, nr_exclusive, sync, NULL);
-+ spin_unlock_irqrestore(&q->lock, flags);
-+}
-+EXPORT_SYMBOL_GPL(__wake_up_sync); /* For internal use only */
-+
-+void fastcall complete(struct completion *x)
-+{
-+ unsigned long flags;
-+
-+ spin_lock_irqsave(&x->wait.lock, flags);
-+ x->done++;
-+ __wake_up_common(&x->wait, TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE,
-+ 1, 0, NULL);
-+ spin_unlock_irqrestore(&x->wait.lock, flags);
-+}
-+EXPORT_SYMBOL(complete);
-+
-+void fastcall complete_all(struct completion *x)
-+{
-+ unsigned long flags;
-+
-+ spin_lock_irqsave(&x->wait.lock, flags);
-+ x->done += UINT_MAX/2;
-+ __wake_up_common(&x->wait, TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE,
-+ 0, 0, NULL);
-+ spin_unlock_irqrestore(&x->wait.lock, flags);
-+}
-+EXPORT_SYMBOL(complete_all);
-+
-+void fastcall __sched wait_for_completion(struct completion *x)
-+{
-+ might_sleep();
-+
-+ spin_lock_irq(&x->wait.lock);
-+ if (!x->done) {
-+ DECLARE_WAITQUEUE(wait, current);
-+
-+ wait.flags |= WQ_FLAG_EXCLUSIVE;
-+ __add_wait_queue_tail(&x->wait, &wait);
-+ do {
-+ __set_current_state(TASK_UNINTERRUPTIBLE);
-+ spin_unlock_irq(&x->wait.lock);
-+ schedule();
-+ spin_lock_irq(&x->wait.lock);
-+ } while (!x->done);
-+ __remove_wait_queue(&x->wait, &wait);
-+ }
-+ x->done--;
-+ spin_unlock_irq(&x->wait.lock);
-+}
-+EXPORT_SYMBOL(wait_for_completion);
-+
-+unsigned long fastcall __sched
-+wait_for_completion_timeout(struct completion *x, unsigned long timeout)
-+{
-+ might_sleep();
-+
-+ spin_lock_irq(&x->wait.lock);
-+ if (!x->done) {
-+ DECLARE_WAITQUEUE(wait, current);
-+
-+ wait.flags |= WQ_FLAG_EXCLUSIVE;
-+ __add_wait_queue_tail(&x->wait, &wait);
-+ do {
-+ __set_current_state(TASK_UNINTERRUPTIBLE);
-+ spin_unlock_irq(&x->wait.lock);
-+ timeout = schedule_timeout(timeout);
-+ spin_lock_irq(&x->wait.lock);
-+ if (!timeout) {
-+ __remove_wait_queue(&x->wait, &wait);
-+ goto out;
-+ }
-+ } while (!x->done);
-+ __remove_wait_queue(&x->wait, &wait);
-+ }
-+ x->done--;
-+out:
-+ spin_unlock_irq(&x->wait.lock);
-+ return timeout;
-+}
-+EXPORT_SYMBOL(wait_for_completion_timeout);
-+
-+int fastcall __sched wait_for_completion_interruptible(struct completion *x)
-+{
-+ int ret = 0;
-+
-+ might_sleep();
-+
-+ spin_lock_irq(&x->wait.lock);
-+ if (!x->done) {
-+ DECLARE_WAITQUEUE(wait, current);
-+
-+ wait.flags |= WQ_FLAG_EXCLUSIVE;
-+ __add_wait_queue_tail(&x->wait, &wait);
-+ do {
-+ if (signal_pending(current)) {
-+ ret = -ERESTARTSYS;
-+ __remove_wait_queue(&x->wait, &wait);
-+ goto out;
-+ }
-+ __set_current_state(TASK_INTERRUPTIBLE);
-+ spin_unlock_irq(&x->wait.lock);
-+ schedule();
-+ spin_lock_irq(&x->wait.lock);
-+ } while (!x->done);
-+ __remove_wait_queue(&x->wait, &wait);
-+ }
-+ x->done--;
-+out:
-+ spin_unlock_irq(&x->wait.lock);
-+
-+ return ret;
-+}
-+EXPORT_SYMBOL(wait_for_completion_interruptible);
-+
-+unsigned long fastcall __sched
-+wait_for_completion_interruptible_timeout(struct completion *x,
-+ unsigned long timeout)
-+{
-+ might_sleep();
-+
-+ spin_lock_irq(&x->wait.lock);
-+ if (!x->done) {
-+ DECLARE_WAITQUEUE(wait, current);
-+
-+ wait.flags |= WQ_FLAG_EXCLUSIVE;
-+ __add_wait_queue_tail(&x->wait, &wait);
-+ do {
-+ if (signal_pending(current)) {
-+ timeout = -ERESTARTSYS;
-+ __remove_wait_queue(&x->wait, &wait);
-+ goto out;
-+ }
-+ __set_current_state(TASK_INTERRUPTIBLE);
-+ spin_unlock_irq(&x->wait.lock);
-+ timeout = schedule_timeout(timeout);
-+ spin_lock_irq(&x->wait.lock);
-+ if (!timeout) {
-+ __remove_wait_queue(&x->wait, &wait);
-+ goto out;
-+ }
-+ } while (!x->done);
-+ __remove_wait_queue(&x->wait, &wait);
-+ }
-+ x->done--;
-+out:
-+ spin_unlock_irq(&x->wait.lock);
-+ return timeout;
-+}
-+EXPORT_SYMBOL(wait_for_completion_interruptible_timeout);
-+
-+
-+#define SLEEP_ON_VAR \
-+ unsigned long flags; \
-+ wait_queue_t wait; \
-+ init_waitqueue_entry(&wait, current);
-+
-+#define SLEEP_ON_HEAD \
-+ spin_lock_irqsave(&q->lock,flags); \
-+ __add_wait_queue(q, &wait); \
-+ spin_unlock(&q->lock);
-+
-+#define SLEEP_ON_TAIL \
-+ spin_lock_irq(&q->lock); \
-+ __remove_wait_queue(q, &wait); \
-+ spin_unlock_irqrestore(&q->lock, flags);
-+
-+void fastcall __sched interruptible_sleep_on(wait_queue_head_t *q)
-+{
-+ SLEEP_ON_VAR
-+
-+ current->state = TASK_INTERRUPTIBLE;
-+
-+ SLEEP_ON_HEAD
-+ schedule();
-+ SLEEP_ON_TAIL
-+}
-+EXPORT_SYMBOL(interruptible_sleep_on);
-+
-+long fastcall __sched
-+interruptible_sleep_on_timeout(wait_queue_head_t *q, long timeout)
-+{
-+ SLEEP_ON_VAR
-+
-+ current->state = TASK_INTERRUPTIBLE;
-+
-+ SLEEP_ON_HEAD
-+ timeout = schedule_timeout(timeout);
-+ SLEEP_ON_TAIL
-+
-+ return timeout;
-+}
-+EXPORT_SYMBOL(interruptible_sleep_on_timeout);
-+
-+void fastcall __sched sleep_on(wait_queue_head_t *q)
-+{
-+ SLEEP_ON_VAR
-+
-+ current->state = TASK_UNINTERRUPTIBLE;
-+
-+ SLEEP_ON_HEAD
-+ schedule();
-+ SLEEP_ON_TAIL
-+}
-+EXPORT_SYMBOL(sleep_on);
-+
-+long fastcall __sched sleep_on_timeout(wait_queue_head_t *q, long timeout)
-+{
-+ SLEEP_ON_VAR
-+
-+ current->state = TASK_UNINTERRUPTIBLE;
-+
-+ SLEEP_ON_HEAD
-+ timeout = schedule_timeout(timeout);
-+ SLEEP_ON_TAIL
-+
-+ return timeout;
-+}
-+
-+EXPORT_SYMBOL(sleep_on_timeout);
-+
-+#ifdef CONFIG_RT_MUTEXES
-+
-+/*
-+ * rt_mutex_setprio - set the current priority of a task
-+ * @p: task
-+ * @prio: prio value (kernel-internal form)
-+ *
-+ * This function changes the 'effective' priority of a task. It does
-+ * not touch ->normal_prio like __setscheduler().
-+ *
-+ * Used by the rt_mutex code to implement priority inheritance logic.
-+ */
-+void rt_mutex_setprio(struct task_struct *p, int prio)
-+{
-+ struct prio_array *array;
-+ unsigned long flags;
-+ struct rq *rq;
-+ int oldprio;
-+
-+ BUG_ON(prio < 0 || prio > MAX_PRIO);
-+
-+ rq = task_rq_lock(p, &flags);
-+
-+ oldprio = p->prio;
-+ array = p->array;
-+ if (array)
-+ dequeue_task(p, array);
-+ p->prio = prio;
-+
-+ if (array) {
-+ /*
-+ * If changing to an RT priority then queue it
-+ * in the active array!
-+ */
-+ if (rt_task(p))
-+ array = rq->active;
-+ enqueue_task(p, array);
-+ /*
-+ * Reschedule if we are currently running on this runqueue and
-+ * our priority decreased, or if we are not currently running on
-+ * this runqueue and our priority is higher than the current's
-+ */
-+ if (task_running(rq, p)) {
-+ if (p->prio > oldprio)
-+ resched_task(rq->curr);
-+ } else if (TASK_PREEMPTS_CURR(p, rq))
-+ resched_task(rq->curr);
-+ }
-+ task_rq_unlock(rq, &flags);
-+}
-+
-+#endif
-+
-+void set_user_nice(struct task_struct *p, long nice)
-+{
-+ struct prio_array *array;
-+ int old_prio, delta;
-+ unsigned long flags;
-+ struct rq *rq;
-+
-+ if (TASK_NICE(p) == nice || nice < -20 || nice > 19)
-+ return;
-+ /*
-+ * We have to be careful, if called from sys_setpriority(),
-+ * the task might be in the middle of scheduling on another CPU.
-+ */
-+ rq = task_rq_lock(p, &flags);
-+ /*
-+ * The RT priorities are set via sched_setscheduler(), but we still
-+ * allow the 'normal' nice value to be set - but as expected
-+ * it wont have any effect on scheduling until the task is
-+ * not SCHED_NORMAL/SCHED_BATCH:
-+ */
-+ if (has_rt_policy(p)) {
-+ p->static_prio = NICE_TO_PRIO(nice);
-+ goto out_unlock;
-+ }
-+ array = p->array;
-+ if (array) {
-+ dequeue_task(p, array);
-+ dec_raw_weighted_load(rq, p);
-+ }
-+
-+ p->static_prio = NICE_TO_PRIO(nice);
-+ set_load_weight(p);
-+ old_prio = p->prio;
-+ p->prio = effective_prio(p);
-+ delta = p->prio - old_prio;
-+
-+ if (array) {
-+ enqueue_task(p, array);
-+ inc_raw_weighted_load(rq, p);
-+ /*
-+ * If the task increased its priority or is running and
-+ * lowered its priority, then reschedule its CPU:
-+ */
-+ if (delta < 0 || (delta > 0 && task_running(rq, p)))
-+ resched_task(rq->curr);
-+ }
-+out_unlock:
-+ task_rq_unlock(rq, &flags);
-+}
-+EXPORT_SYMBOL(set_user_nice);
-+
-+/*
-+ * can_nice - check if a task can reduce its nice value
-+ * @p: task
-+ * @nice: nice value
-+ */
-+int can_nice(const struct task_struct *p, const int nice)
-+{
-+ /* convert nice value [19,-20] to rlimit style value [1,40] */
-+ int nice_rlim = 20 - nice;
-+
-+ return (nice_rlim <= p->signal->rlim[RLIMIT_NICE].rlim_cur ||
-+ capable(CAP_SYS_NICE));
-+}
-+
-+#ifdef __ARCH_WANT_SYS_NICE
-+
-+/*
-+ * sys_nice - change the priority of the current process.
-+ * @increment: priority increment
-+ *
-+ * sys_setpriority is a more generic, but much slower function that
-+ * does similar things.
-+ */
-+asmlinkage long sys_nice(int increment)
-+{
-+ long nice, retval;
-+
-+ /*
-+ * Setpriority might change our priority at the same moment.
-+ * We don't have to worry. Conceptually one call occurs first
-+ * and we have a single winner.
-+ */
-+ if (increment < -40)
-+ increment = -40;
-+ if (increment > 40)
-+ increment = 40;
-+
-+ nice = PRIO_TO_NICE(current->static_prio) + increment;
-+ if (nice < -20)
-+ nice = -20;
-+ if (nice > 19)
-+ nice = 19;
-+
-+ if (increment < 0 && !can_nice(current, nice))
-+ return vx_flags(VXF_IGNEG_NICE, 0) ? 0 : -EPERM;
-+
-+ retval = security_task_setnice(current, nice);
-+ if (retval)
-+ return retval;
-+
-+ set_user_nice(current, nice);
-+ return 0;
-+}
-+
-+#endif
-+
-+/**
-+ * task_prio - return the priority value of a given task.
-+ * @p: the task in question.
-+ *
-+ * This is the priority value as seen by users in /proc.
-+ * RT tasks are offset by -200. Normal tasks are centered
-+ * around 0, value goes from -16 to +15.
-+ */
-+int task_prio(const struct task_struct *p)
-+{
-+ return p->prio - MAX_RT_PRIO;
-+}
-+
-+/**
-+ * task_nice - return the nice value of a given task.
-+ * @p: the task in question.
-+ */
-+int task_nice(const struct task_struct *p)
-+{
-+ return TASK_NICE(p);
-+}
-+EXPORT_SYMBOL_GPL(task_nice);
-+
-+/**
-+ * idle_cpu - is a given cpu idle currently?
-+ * @cpu: the processor in question.
-+ */
-+int idle_cpu(int cpu)
-+{
-+ return cpu_curr(cpu) == cpu_rq(cpu)->idle;
-+}
-+
-+/**
-+ * idle_task - return the idle task for a given cpu.
-+ * @cpu: the processor in question.
-+ */
-+struct task_struct *idle_task(int cpu)
-+{
-+ return cpu_rq(cpu)->idle;
-+}
-+
-+/**
-+ * find_process_by_pid - find a process with a matching PID value.
-+ * @pid: the pid in question.
-+ */
-+static inline struct task_struct *find_process_by_pid(pid_t pid)
-+{
-+ return pid ? find_task_by_pid(pid) : current;
-+}
-+
-+/* Actually do priority change: must hold rq lock. */
-+static void __setscheduler(struct task_struct *p, int policy, int prio)
-+{
-+ BUG_ON(p->array);
-+
-+ p->policy = policy;
-+ p->rt_priority = prio;
-+ p->normal_prio = normal_prio(p);
-+ /* we are holding p->pi_lock already */
-+ p->prio = rt_mutex_getprio(p);
-+ /*
-+ * SCHED_BATCH tasks are treated as perpetual CPU hogs:
-+ */
-+ if (policy == SCHED_BATCH)
-+ p->sleep_avg = 0;
-+ set_load_weight(p);
-+}
-+
-+/**
-+ * sched_setscheduler - change the scheduling policy and/or RT priority of a thread.
-+ * @p: the task in question.
-+ * @policy: new policy.
-+ * @param: structure containing the new RT priority.
-+ *
-+ * NOTE that the task may be already dead.
-+ */
-+int sched_setscheduler(struct task_struct *p, int policy,
-+ struct sched_param *param)
-+{
-+ int retval, oldprio, oldpolicy = -1;
-+ struct prio_array *array;
-+ unsigned long flags;
-+ struct rq *rq;
-+
-+ /* may grab non-irq protected spin_locks */
-+ BUG_ON(in_interrupt());
-+recheck:
-+ /* double check policy once rq lock held */
-+ if (policy < 0)
-+ policy = oldpolicy = p->policy;
-+ else if (policy != SCHED_FIFO && policy != SCHED_RR &&
-+ policy != SCHED_NORMAL && policy != SCHED_BATCH)
-+ return -EINVAL;
-+ /*
-+ * Valid priorities for SCHED_FIFO and SCHED_RR are
-+ * 1..MAX_USER_RT_PRIO-1, valid priority for SCHED_NORMAL and
-+ * SCHED_BATCH is 0.
-+ */
-+ if (param->sched_priority < 0 ||
-+ (p->mm && param->sched_priority > MAX_USER_RT_PRIO-1) ||
-+ (!p->mm && param->sched_priority > MAX_RT_PRIO-1))
-+ return -EINVAL;
-+ if (is_rt_policy(policy) != (param->sched_priority != 0))
-+ return -EINVAL;
-+
-+ /*
-+ * Allow unprivileged RT tasks to decrease priority:
-+ */
-+ if (!capable(CAP_SYS_NICE)) {
-+ if (is_rt_policy(policy)) {
-+ unsigned long rlim_rtprio;
-+ unsigned long flags;
-+
-+ if (!lock_task_sighand(p, &flags))
-+ return -ESRCH;
-+ rlim_rtprio = p->signal->rlim[RLIMIT_RTPRIO].rlim_cur;
-+ unlock_task_sighand(p, &flags);
-+
-+ /* can't set/change the rt policy */
-+ if (policy != p->policy && !rlim_rtprio)
-+ return -EPERM;
-+
-+ /* can't increase priority */
-+ if (param->sched_priority > p->rt_priority &&
-+ param->sched_priority > rlim_rtprio)
-+ return -EPERM;
-+ }
-+
-+ /* can't change other user's priorities */
-+ if ((current->euid != p->euid) &&
-+ (current->euid != p->uid))
-+ return -EPERM;
-+ }
-+
-+ retval = security_task_setscheduler(p, policy, param);
-+ if (retval)
-+ return retval;
-+ /*
-+ * make sure no PI-waiters arrive (or leave) while we are
-+ * changing the priority of the task:
-+ */
-+ spin_lock_irqsave(&p->pi_lock, flags);
-+ /*
-+ * To be able to change p->policy safely, the apropriate
-+ * runqueue lock must be held.
-+ */
-+ rq = __task_rq_lock(p);
-+ /* recheck policy now with rq lock held */
-+ if (unlikely(oldpolicy != -1 && oldpolicy != p->policy)) {
-+ policy = oldpolicy = -1;
-+ __task_rq_unlock(rq);
-+ spin_unlock_irqrestore(&p->pi_lock, flags);
-+ goto recheck;
-+ }
-+ array = p->array;
-+ if (array)
-+ deactivate_task(p, rq);
-+ oldprio = p->prio;
-+ __setscheduler(p, policy, param->sched_priority);
-+ if (array) {
-+ vx_activate_task(p);
-+ __activate_task(p, rq);
-+ /*
-+ * Reschedule if we are currently running on this runqueue and
-+ * our priority decreased, or if we are not currently running on
-+ * this runqueue and our priority is higher than the current's
-+ */
-+ if (task_running(rq, p)) {
-+ if (p->prio > oldprio)
-+ resched_task(rq->curr);
-+ } else if (TASK_PREEMPTS_CURR(p, rq))
-+ resched_task(rq->curr);
-+ }
-+ __task_rq_unlock(rq);
-+ spin_unlock_irqrestore(&p->pi_lock, flags);
-+
-+ rt_mutex_adjust_pi(p);
-+
-+ return 0;
-+}
-+EXPORT_SYMBOL_GPL(sched_setscheduler);
-+
-+static int
-+do_sched_setscheduler(pid_t pid, int policy, struct sched_param __user *param)
-+{
-+ struct sched_param lparam;
-+ struct task_struct *p;
-+ int retval;
-+
-+ if (!param || pid < 0)
-+ return -EINVAL;
-+ if (copy_from_user(&lparam, param, sizeof(struct sched_param)))
-+ return -EFAULT;
-+
-+ rcu_read_lock();
-+ retval = -ESRCH;
-+ p = find_process_by_pid(pid);
-+ if (p != NULL)
-+ retval = sched_setscheduler(p, policy, &lparam);
-+ rcu_read_unlock();
-+
-+ return retval;
-+}
-+
-+/**
-+ * sys_sched_setscheduler - set/change the scheduler policy and RT priority
-+ * @pid: the pid in question.
-+ * @policy: new policy.
-+ * @param: structure containing the new RT priority.
-+ */
-+asmlinkage long sys_sched_setscheduler(pid_t pid, int policy,
-+ struct sched_param __user *param)
-+{
-+ /* negative values for policy are not valid */
-+ if (policy < 0)
-+ return -EINVAL;
-+
-+ return do_sched_setscheduler(pid, policy, param);
-+}
-+
-+/**
-+ * sys_sched_setparam - set/change the RT priority of a thread
-+ * @pid: the pid in question.
-+ * @param: structure containing the new RT priority.
-+ */
-+asmlinkage long sys_sched_setparam(pid_t pid, struct sched_param __user *param)
-+{
-+ return do_sched_setscheduler(pid, -1, param);
-+}
-+
-+/**
-+ * sys_sched_getscheduler - get the policy (scheduling class) of a thread
-+ * @pid: the pid in question.
-+ */
-+asmlinkage long sys_sched_getscheduler(pid_t pid)
-+{
-+ struct task_struct *p;
-+ int retval = -EINVAL;
-+
-+ if (pid < 0)
-+ goto out_nounlock;
-+
-+ retval = -ESRCH;
-+ read_lock(&tasklist_lock);
-+ p = find_process_by_pid(pid);
-+ if (p) {
-+ retval = security_task_getscheduler(p);
-+ if (!retval)
-+ retval = p->policy;
-+ }
-+ read_unlock(&tasklist_lock);
-+
-+out_nounlock:
-+ return retval;
-+}
-+
-+/**
-+ * sys_sched_getscheduler - get the RT priority of a thread
-+ * @pid: the pid in question.
-+ * @param: structure containing the RT priority.
-+ */
-+asmlinkage long sys_sched_getparam(pid_t pid, struct sched_param __user *param)
-+{
-+ struct sched_param lp;
-+ struct task_struct *p;
-+ int retval = -EINVAL;
-+
-+ if (!param || pid < 0)
-+ goto out_nounlock;
-+
-+ read_lock(&tasklist_lock);
-+ p = find_process_by_pid(pid);
-+ retval = -ESRCH;
-+ if (!p)
-+ goto out_unlock;
-+
-+ retval = security_task_getscheduler(p);
-+ if (retval)
-+ goto out_unlock;
-+
-+ lp.sched_priority = p->rt_priority;
-+ read_unlock(&tasklist_lock);
-+
-+ /*
-+ * This one might sleep, we cannot do it with a spinlock held ...
-+ */
-+ retval = copy_to_user(param, &lp, sizeof(*param)) ? -EFAULT : 0;
-+
-+out_nounlock:
-+ return retval;
-+
-+out_unlock:
-+ read_unlock(&tasklist_lock);
-+ return retval;
-+}
-+
-+long sched_setaffinity(pid_t pid, cpumask_t new_mask)
-+{
-+ cpumask_t cpus_allowed;
-+ struct task_struct *p;
-+ int retval;
-+
-+ mutex_lock(&sched_hotcpu_mutex);
-+ read_lock(&tasklist_lock);
-+
-+ p = find_process_by_pid(pid);
-+ if (!p) {
-+ read_unlock(&tasklist_lock);
-+ mutex_unlock(&sched_hotcpu_mutex);
-+ return -ESRCH;
-+ }
-+
-+ /*
-+ * It is not safe to call set_cpus_allowed with the
-+ * tasklist_lock held. We will bump the task_struct's
-+ * usage count and then drop tasklist_lock.
-+ */
-+ get_task_struct(p);
-+ read_unlock(&tasklist_lock);
-+
-+ retval = -EPERM;
-+ if ((current->euid != p->euid) && (current->euid != p->uid) &&
-+ !capable(CAP_SYS_NICE))
-+ goto out_unlock;
-+
-+ retval = security_task_setscheduler(p, 0, NULL);
-+ if (retval)
-+ goto out_unlock;
-+
-+ cpus_allowed = cpuset_cpus_allowed(p);
-+ cpus_and(new_mask, new_mask, cpus_allowed);
-+ retval = set_cpus_allowed(p, new_mask);
-+
-+out_unlock:
-+ put_task_struct(p);
-+ mutex_unlock(&sched_hotcpu_mutex);
-+ return retval;
-+}
-+
-+static int get_user_cpu_mask(unsigned long __user *user_mask_ptr, unsigned len,
-+ cpumask_t *new_mask)
-+{
-+ if (len < sizeof(cpumask_t)) {
-+ memset(new_mask, 0, sizeof(cpumask_t));
-+ } else if (len > sizeof(cpumask_t)) {
-+ len = sizeof(cpumask_t);
-+ }
-+ return copy_from_user(new_mask, user_mask_ptr, len) ? -EFAULT : 0;
-+}
-+
-+/**
-+ * sys_sched_setaffinity - set the cpu affinity of a process
-+ * @pid: pid of the process
-+ * @len: length in bytes of the bitmask pointed to by user_mask_ptr
-+ * @user_mask_ptr: user-space pointer to the new cpu mask
-+ */
-+asmlinkage long sys_sched_setaffinity(pid_t pid, unsigned int len,
-+ unsigned long __user *user_mask_ptr)
-+{
-+ cpumask_t new_mask;
-+ int retval;
-+
-+ retval = get_user_cpu_mask(user_mask_ptr, len, &new_mask);
-+ if (retval)
-+ return retval;
-+
-+ return sched_setaffinity(pid, new_mask);
-+}
-+
-+/*
-+ * Represents all cpu's present in the system
-+ * In systems capable of hotplug, this map could dynamically grow
-+ * as new cpu's are detected in the system via any platform specific
-+ * method, such as ACPI for e.g.
-+ */
-+
-+cpumask_t cpu_present_map __read_mostly;
-+EXPORT_SYMBOL(cpu_present_map);
-+
-+#ifndef CONFIG_SMP
-+cpumask_t cpu_online_map __read_mostly = CPU_MASK_ALL;
-+EXPORT_SYMBOL(cpu_online_map);
-+
-+cpumask_t cpu_possible_map __read_mostly = CPU_MASK_ALL;
-+EXPORT_SYMBOL(cpu_possible_map);
-+#endif
-+
-+long sched_getaffinity(pid_t pid, cpumask_t *mask)
-+{
-+ struct task_struct *p;
-+ int retval;
-+
-+ mutex_lock(&sched_hotcpu_mutex);
-+ read_lock(&tasklist_lock);
-+
-+ retval = -ESRCH;
-+ p = find_process_by_pid(pid);
-+ if (!p)
-+ goto out_unlock;
-+
-+ retval = security_task_getscheduler(p);
-+ if (retval)
-+ goto out_unlock;
-+
-+ cpus_and(*mask, p->cpus_allowed, cpu_online_map);
-+
-+out_unlock:
-+ read_unlock(&tasklist_lock);
-+ mutex_unlock(&sched_hotcpu_mutex);
-+ if (retval)
-+ return retval;
-+
-+ return 0;
-+}
-+
-+/**
-+ * sys_sched_getaffinity - get the cpu affinity of a process
-+ * @pid: pid of the process
-+ * @len: length in bytes of the bitmask pointed to by user_mask_ptr
-+ * @user_mask_ptr: user-space pointer to hold the current cpu mask
-+ */
-+asmlinkage long sys_sched_getaffinity(pid_t pid, unsigned int len,
-+ unsigned long __user *user_mask_ptr)
-+{
-+ int ret;
-+ cpumask_t mask;
-+
-+ if (len < sizeof(cpumask_t))
-+ return -EINVAL;
-+
-+ ret = sched_getaffinity(pid, &mask);
-+ if (ret < 0)
-+ return ret;
-+
-+ if (copy_to_user(user_mask_ptr, &mask, sizeof(cpumask_t)))
-+ return -EFAULT;
-+
-+ return sizeof(cpumask_t);
-+}
-+
-+/**
-+ * sys_sched_yield - yield the current processor to other threads.
-+ *
-+ * This function yields the current CPU by moving the calling thread
-+ * to the expired array. If there are no other threads running on this
-+ * CPU then this function will return.
-+ */
-+asmlinkage long sys_sched_yield(void)
-+{
-+ struct rq *rq = this_rq_lock();
-+ struct prio_array *array = current->array, *target = rq->expired;
-+
-+ schedstat_inc(rq, yld_cnt);
-+ /*
-+ * We implement yielding by moving the task into the expired
-+ * queue.
-+ *
-+ * (special rule: RT tasks will just roundrobin in the active
-+ * array.)
-+ */
-+ if (rt_task(current))
-+ target = rq->active;
-+
-+ if (array->nr_active == 1) {
-+ schedstat_inc(rq, yld_act_empty);
-+ if (!rq->expired->nr_active)
-+ schedstat_inc(rq, yld_both_empty);
-+ } else if (!rq->expired->nr_active)
-+ schedstat_inc(rq, yld_exp_empty);
-+
-+ if (array != target) {
-+ dequeue_task(current, array);
-+ enqueue_task(current, target);
-+ } else
-+ /*
-+ * requeue_task is cheaper so perform that if possible.
-+ */
-+ requeue_task(current, array);
-+
-+ /*
-+ * Since we are going to call schedule() anyway, there's
-+ * no need to preempt or enable interrupts:
-+ */
-+ __release(rq->lock);
-+ spin_release(&rq->lock.dep_map, 1, _THIS_IP_);
-+ _raw_spin_unlock(&rq->lock);
-+ preempt_enable_no_resched();
-+
-+ schedule();
-+
-+ return 0;
-+}
-+
-+static void __cond_resched(void)
-+{
-+#ifdef CONFIG_DEBUG_SPINLOCK_SLEEP
-+ __might_sleep(__FILE__, __LINE__);
-+#endif
-+ /*
-+ * The BKS might be reacquired before we have dropped
-+ * PREEMPT_ACTIVE, which could trigger a second
-+ * cond_resched() call.
-+ */
-+ do {
-+ add_preempt_count(PREEMPT_ACTIVE);
-+ schedule();
-+ sub_preempt_count(PREEMPT_ACTIVE);
-+ } while (need_resched());
-+}
-+
-+int __sched cond_resched(void)
-+{
-+ if (need_resched() && !(preempt_count() & PREEMPT_ACTIVE) &&
-+ system_state == SYSTEM_RUNNING) {
-+ __cond_resched();
-+ return 1;
-+ }
-+ return 0;
-+}
-+EXPORT_SYMBOL(cond_resched);
-+
-+/*
-+ * cond_resched_lock() - if a reschedule is pending, drop the given lock,
-+ * call schedule, and on return reacquire the lock.
-+ *
-+ * This works OK both with and without CONFIG_PREEMPT. We do strange low-level
-+ * operations here to prevent schedule() from being called twice (once via
-+ * spin_unlock(), once by hand).
-+ */
-+int cond_resched_lock(spinlock_t *lock)
-+{
-+ int ret = 0;
-+
-+ if (need_lockbreak(lock)) {
-+ spin_unlock(lock);
-+ cpu_relax();
-+ ret = 1;
-+ spin_lock(lock);
-+ }
-+ if (need_resched() && system_state == SYSTEM_RUNNING) {
-+ spin_release(&lock->dep_map, 1, _THIS_IP_);
-+ _raw_spin_unlock(lock);
-+ preempt_enable_no_resched();
-+ __cond_resched();
-+ ret = 1;
-+ spin_lock(lock);
-+ }
-+ return ret;
-+}
-+EXPORT_SYMBOL(cond_resched_lock);
-+
-+int __sched cond_resched_softirq(void)
-+{
-+ BUG_ON(!in_softirq());
-+
-+ if (need_resched() && system_state == SYSTEM_RUNNING) {
-+ local_bh_enable();
-+ __cond_resched();
-+ local_bh_disable();
-+ return 1;
-+ }
-+ return 0;
-+}
-+EXPORT_SYMBOL(cond_resched_softirq);
-+
-+/**
-+ * yield - yield the current processor to other threads.
-+ *
-+ * This is a shortcut for kernel-space yielding - it marks the
-+ * thread runnable and calls sys_sched_yield().
-+ */
-+void __sched yield(void)
-+{
-+ set_current_state(TASK_RUNNING);
-+ sys_sched_yield();
-+}
-+EXPORT_SYMBOL(yield);
-+
-+/*
-+ * This task is about to go to sleep on IO. Increment rq->nr_iowait so
-+ * that process accounting knows that this is a task in IO wait state.
-+ *
-+ * But don't do that if it is a deliberate, throttling IO wait (this task
-+ * has set its backing_dev_info: the queue against which it should throttle)
-+ */
-+void __sched io_schedule(void)
-+{
-+ struct rq *rq = &__raw_get_cpu_var(runqueues);
-+
-+ delayacct_blkio_start();
-+ atomic_inc(&rq->nr_iowait);
-+ schedule();
-+ atomic_dec(&rq->nr_iowait);
-+ delayacct_blkio_end();
-+}
-+EXPORT_SYMBOL(io_schedule);
-+
-+long __sched io_schedule_timeout(long timeout)
-+{
-+ struct rq *rq = &__raw_get_cpu_var(runqueues);
-+ long ret;
-+
-+ delayacct_blkio_start();
-+ atomic_inc(&rq->nr_iowait);
-+ ret = schedule_timeout(timeout);
-+ atomic_dec(&rq->nr_iowait);
-+ delayacct_blkio_end();
-+ return ret;
-+}
-+
-+/**
-+ * sys_sched_get_priority_max - return maximum RT priority.
-+ * @policy: scheduling class.
-+ *
-+ * this syscall returns the maximum rt_priority that can be used
-+ * by a given scheduling class.
-+ */
-+asmlinkage long sys_sched_get_priority_max(int policy)
-+{
-+ int ret = -EINVAL;
-+
-+ switch (policy) {
-+ case SCHED_FIFO:
-+ case SCHED_RR:
-+ ret = MAX_USER_RT_PRIO-1;
-+ break;
-+ case SCHED_NORMAL:
-+ case SCHED_BATCH:
-+ ret = 0;
-+ break;
-+ }
-+ return ret;
-+}
-+
-+/**
-+ * sys_sched_get_priority_min - return minimum RT priority.
-+ * @policy: scheduling class.
-+ *
-+ * this syscall returns the minimum rt_priority that can be used
-+ * by a given scheduling class.
-+ */
-+asmlinkage long sys_sched_get_priority_min(int policy)
-+{
-+ int ret = -EINVAL;
-+
-+ switch (policy) {
-+ case SCHED_FIFO:
-+ case SCHED_RR:
-+ ret = 1;
-+ break;
-+ case SCHED_NORMAL:
-+ case SCHED_BATCH:
-+ ret = 0;
-+ }
-+ return ret;
-+}
-+
-+/**
-+ * sys_sched_rr_get_interval - return the default timeslice of a process.
-+ * @pid: pid of the process.
-+ * @interval: userspace pointer to the timeslice value.
-+ *
-+ * this syscall writes the default timeslice value of a given process
-+ * into the user-space timespec buffer. A value of '0' means infinity.
-+ */
-+asmlinkage
-+long sys_sched_rr_get_interval(pid_t pid, struct timespec __user *interval)
-+{
-+ struct task_struct *p;
-+ int retval = -EINVAL;
-+ struct timespec t;
-+
-+ if (pid < 0)
-+ goto out_nounlock;
-+
-+ retval = -ESRCH;
-+ read_lock(&tasklist_lock);
-+ p = find_process_by_pid(pid);
-+ if (!p)
-+ goto out_unlock;
-+
-+ retval = security_task_getscheduler(p);
-+ if (retval)
-+ goto out_unlock;
-+
-+ jiffies_to_timespec(p->policy == SCHED_FIFO ?
-+ 0 : task_timeslice(p), &t);
-+ read_unlock(&tasklist_lock);
-+ retval = copy_to_user(interval, &t, sizeof(t)) ? -EFAULT : 0;
-+out_nounlock:
-+ return retval;
-+out_unlock:
-+ read_unlock(&tasklist_lock);
-+ return retval;
-+}
-+
-+static const char stat_nam[] = "RSDTtZX";
-+
-+static void show_task(struct task_struct *p)
-+{
-+ unsigned long free = 0;
-+ unsigned state;
-+
-+ state = p->state ? __ffs(p->state) + 1 : 0;
-+ printk("%-13.13s %c", p->comm,
-+ state < sizeof(stat_nam) - 1 ? stat_nam[state] : '?');
-+#if (BITS_PER_LONG == 32)
-+ if (state == TASK_RUNNING)
-+ printk(" running ");
-+ else
-+ printk(" %08lX ", thread_saved_pc(p));
-+#else
-+ if (state == TASK_RUNNING)
-+ printk(" running task ");
-+ else
-+ printk(" %016lx ", thread_saved_pc(p));
-+#endif
-+#ifdef CONFIG_DEBUG_STACK_USAGE
-+ {
-+ unsigned long *n = end_of_stack(p);
-+ while (!*n)
-+ n++;
-+ free = (unsigned long)n - (unsigned long)end_of_stack(p);
-+ }
-+#endif
-+ printk("%5lu %5d %6d", free, p->pid, p->parent->pid);
-+ if (!p->mm)
-+ printk(" (L-TLB)\n");
-+ else
-+ printk(" (NOTLB)\n");
-+
-+ if (state != TASK_RUNNING)
-+ show_stack(p, NULL);
-+}
-+
-+void show_state_filter(unsigned long state_filter)
-+{
-+ struct task_struct *g, *p;
-+
-+#if (BITS_PER_LONG == 32)
-+ printk("\n"
-+ " free sibling\n");
-+ printk(" task PC stack pid father child younger older\n");
-+#else
-+ printk("\n"
-+ " free sibling\n");
-+ printk(" task PC stack pid father child younger older\n");
-+#endif
-+ read_lock(&tasklist_lock);
-+ do_each_thread(g, p) {
-+ /*
-+ * reset the NMI-timeout, listing all files on a slow
-+ * console might take alot of time:
-+ */
-+ touch_nmi_watchdog();
-+ if (!state_filter || (p->state & state_filter))
-+ show_task(p);
-+ } while_each_thread(g, p);
-+
-+ touch_all_softlockup_watchdogs();
-+
-+ read_unlock(&tasklist_lock);
-+ /*
-+ * Only show locks if all tasks are dumped:
-+ */
-+ if (state_filter == -1)
-+ debug_show_all_locks();
-+}
-+
-+/**
-+ * init_idle - set up an idle thread for a given CPU
-+ * @idle: task in question
-+ * @cpu: cpu the idle task belongs to
-+ *
-+ * NOTE: this function does not set the idle thread's NEED_RESCHED
-+ * flag, to make booting more robust.
-+ */
-+void __cpuinit init_idle(struct task_struct *idle, int cpu)
-+{
-+ struct rq *rq = cpu_rq(cpu);
-+ unsigned long flags;
-+
-+ idle->timestamp = sched_clock();
-+ idle->sleep_avg = 0;
-+ idle->array = NULL;
-+ idle->prio = idle->normal_prio = MAX_PRIO;
-+ idle->state = TASK_RUNNING;
-+ idle->cpus_allowed = cpumask_of_cpu(cpu);
-+ set_task_cpu(idle, cpu);
-+
-+ spin_lock_irqsave(&rq->lock, flags);
-+ rq->curr = rq->idle = idle;
-+#if defined(CONFIG_SMP) && defined(__ARCH_WANT_UNLOCKED_CTXSW)
-+ idle->oncpu = 1;
-+#endif
-+ spin_unlock_irqrestore(&rq->lock, flags);
-+
-+ /* Set the preempt count _outside_ the spinlocks! */
-+#if defined(CONFIG_PREEMPT) && !defined(CONFIG_PREEMPT_BKL)
-+ task_thread_info(idle)->preempt_count = (idle->lock_depth >= 0);
-+#else
-+ task_thread_info(idle)->preempt_count = 0;
-+#endif
-+}
-+
-+/*
-+ * In a system that switches off the HZ timer nohz_cpu_mask
-+ * indicates which cpus entered this state. This is used
-+ * in the rcu update to wait only for active cpus. For system
-+ * which do not switch off the HZ timer nohz_cpu_mask should
-+ * always be CPU_MASK_NONE.
-+ */
-+cpumask_t nohz_cpu_mask = CPU_MASK_NONE;
-+
-+#ifdef CONFIG_SMP
-+/*
-+ * This is how migration works:
-+ *
-+ * 1) we queue a struct migration_req structure in the source CPU's
-+ * runqueue and wake up that CPU's migration thread.
-+ * 2) we down() the locked semaphore => thread blocks.
-+ * 3) migration thread wakes up (implicitly it forces the migrated
-+ * thread off the CPU)
-+ * 4) it gets the migration request and checks whether the migrated
-+ * task is still in the wrong runqueue.
-+ * 5) if it's in the wrong runqueue then the migration thread removes
-+ * it and puts it into the right queue.
-+ * 6) migration thread up()s the semaphore.
-+ * 7) we wake up and the migration is done.
-+ */
-+
-+/*
-+ * Change a given task's CPU affinity. Migrate the thread to a
-+ * proper CPU and schedule it away if the CPU it's executing on
-+ * is removed from the allowed bitmask.
-+ *
-+ * NOTE: the caller must have a valid reference to the task, the
-+ * task must not exit() & deallocate itself prematurely. The
-+ * call is not atomic; no spinlocks may be held.
-+ */
-+int set_cpus_allowed(struct task_struct *p, cpumask_t new_mask)
-+{
-+ struct migration_req req;
-+ unsigned long flags;
-+ struct rq *rq;
-+ int ret = 0;
-+
-+ rq = task_rq_lock(p, &flags);
-+ if (!cpus_intersects(new_mask, cpu_online_map)) {
-+ ret = -EINVAL;
-+ goto out;
-+ }
-+
-+ p->cpus_allowed = new_mask;
-+ /* Can the task run on the task's current CPU? If so, we're done */
-+ if (cpu_isset(task_cpu(p), new_mask))
-+ goto out;
-+
-+ if (migrate_task(p, any_online_cpu(new_mask), &req)) {
-+ /* Need help from migration thread: drop lock and wait. */
-+ task_rq_unlock(rq, &flags);
-+ wake_up_process(rq->migration_thread);
-+ wait_for_completion(&req.done);
-+ tlb_migrate_finish(p->mm);
-+ return 0;
-+ }
-+out:
-+ task_rq_unlock(rq, &flags);
-+
-+ return ret;
-+}
-+EXPORT_SYMBOL_GPL(set_cpus_allowed);
-+
-+/*
-+ * Move (not current) task off this cpu, onto dest cpu. We're doing
-+ * this because either it can't run here any more (set_cpus_allowed()
-+ * away from this CPU, or CPU going down), or because we're
-+ * attempting to rebalance this task on exec (sched_exec).
-+ *
-+ * So we race with normal scheduler movements, but that's OK, as long
-+ * as the task is no longer on this CPU.
-+ *
-+ * Returns non-zero if task was successfully migrated.
-+ */
-+static int __migrate_task(struct task_struct *p, int src_cpu, int dest_cpu)
-+{
-+ struct rq *rq_dest, *rq_src;
-+ int ret = 0;
-+
-+ if (unlikely(cpu_is_offline(dest_cpu)))
-+ return ret;
-+
-+ rq_src = cpu_rq(src_cpu);
-+ rq_dest = cpu_rq(dest_cpu);
-+
-+ double_rq_lock(rq_src, rq_dest);
-+ /* Already moved. */
-+ if (task_cpu(p) != src_cpu)
-+ goto out;
-+ /* Affinity changed (again). */
-+ if (!cpu_isset(dest_cpu, p->cpus_allowed))
-+ goto out;
-+
-+ set_task_cpu(p, dest_cpu);
-+ if (p->array) {
-+ /*
-+ * Sync timestamp with rq_dest's before activating.
-+ * The same thing could be achieved by doing this step
-+ * afterwards, and pretending it was a local activate.
-+ * This way is cleaner and logically correct.
-+ */
-+ p->timestamp = p->timestamp - rq_src->most_recent_timestamp
-+ + rq_dest->most_recent_timestamp;
-+ deactivate_task(p, rq_src);
-+ vx_activate_task(p);
-+ __activate_task(p, rq_dest);
-+ if (TASK_PREEMPTS_CURR(p, rq_dest))
-+ resched_task(rq_dest->curr);
-+ }
-+ ret = 1;
-+out:
-+ double_rq_unlock(rq_src, rq_dest);
-+ return ret;
-+}
-+
-+/*
-+ * migration_thread - this is a highprio system thread that performs
-+ * thread migration by bumping thread off CPU then 'pushing' onto
-+ * another runqueue.
-+ */
-+static int migration_thread(void *data)
-+{
-+ int cpu = (long)data;
-+ struct rq *rq;
-+
-+ rq = cpu_rq(cpu);
-+ BUG_ON(rq->migration_thread != current);
-+
-+ set_current_state(TASK_INTERRUPTIBLE);
-+ while (!kthread_should_stop()) {
-+ struct migration_req *req;
-+ struct list_head *head;
-+
-+ try_to_freeze();
-+
-+ spin_lock_irq(&rq->lock);
-+
-+ if (cpu_is_offline(cpu)) {
-+ spin_unlock_irq(&rq->lock);
-+ goto wait_to_die;
-+ }
-+
-+ if (rq->active_balance) {
-+ active_load_balance(rq, cpu);
-+ rq->active_balance = 0;
-+ }
-+
-+ head = &rq->migration_queue;
-+
-+ if (list_empty(head)) {
-+ spin_unlock_irq(&rq->lock);
-+ schedule();
-+ set_current_state(TASK_INTERRUPTIBLE);
-+ continue;
-+ }
-+ req = list_entry(head->next, struct migration_req, list);
-+ list_del_init(head->next);
-+
-+ spin_unlock(&rq->lock);
-+ __migrate_task(req->task, cpu, req->dest_cpu);
-+ local_irq_enable();
-+
-+ complete(&req->done);
-+ }
-+ __set_current_state(TASK_RUNNING);
-+ return 0;
-+
-+wait_to_die:
-+ /* Wait for kthread_stop */
-+ set_current_state(TASK_INTERRUPTIBLE);
-+ while (!kthread_should_stop()) {
-+ schedule();
-+ set_current_state(TASK_INTERRUPTIBLE);
-+ }
-+ __set_current_state(TASK_RUNNING);
-+ return 0;
-+}
-+
-+#ifdef CONFIG_HOTPLUG_CPU
-+/*
-+ * Figure out where task on dead CPU should go, use force if neccessary.
-+ * NOTE: interrupts should be disabled by the caller
-+ */
-+static void move_task_off_dead_cpu(int dead_cpu, struct task_struct *p)
-+{
-+ unsigned long flags;
-+ cpumask_t mask;
-+ struct rq *rq;
-+ int dest_cpu;
-+
-+restart:
-+ /* On same node? */
-+ mask = node_to_cpumask(cpu_to_node(dead_cpu));
-+ cpus_and(mask, mask, p->cpus_allowed);
-+ dest_cpu = any_online_cpu(mask);
-+
-+ /* On any allowed CPU? */
-+ if (dest_cpu == NR_CPUS)
-+ dest_cpu = any_online_cpu(p->cpus_allowed);
-+
-+ /* No more Mr. Nice Guy. */
-+ if (dest_cpu == NR_CPUS) {
-+ rq = task_rq_lock(p, &flags);
-+ cpus_setall(p->cpus_allowed);
-+ dest_cpu = any_online_cpu(p->cpus_allowed);
-+ task_rq_unlock(rq, &flags);
-+
-+ /*
-+ * Don't tell them about moving exiting tasks or
-+ * kernel threads (both mm NULL), since they never
-+ * leave kernel.
-+ */
-+ if (p->mm && printk_ratelimit())
-+ printk(KERN_INFO "process %d (%s) no "
-+ "longer affine to cpu%d\n",
-+ p->pid, p->comm, dead_cpu);
-+ }
-+ if (!__migrate_task(p, dead_cpu, dest_cpu))
-+ goto restart;
-+}
-+
-+/*
-+ * While a dead CPU has no uninterruptible tasks queued at this point,
-+ * it might still have a nonzero ->nr_uninterruptible counter, because
-+ * for performance reasons the counter is not stricly tracking tasks to
-+ * their home CPUs. So we just add the counter to another CPU's counter,
-+ * to keep the global sum constant after CPU-down:
-+ */
-+static void migrate_nr_uninterruptible(struct rq *rq_src)
-+{
-+ struct rq *rq_dest = cpu_rq(any_online_cpu(CPU_MASK_ALL));
-+ unsigned long flags;
-+
-+ local_irq_save(flags);
-+ double_rq_lock(rq_src, rq_dest);
-+ rq_dest->nr_uninterruptible += rq_src->nr_uninterruptible;
-+ rq_src->nr_uninterruptible = 0;
-+ double_rq_unlock(rq_src, rq_dest);
-+ local_irq_restore(flags);
-+}
-+
-+/* Run through task list and migrate tasks from the dead cpu. */
-+static void migrate_live_tasks(int src_cpu)
-+{
-+ struct task_struct *p, *t;
-+
-+ write_lock_irq(&tasklist_lock);
-+
-+ do_each_thread(t, p) {
-+ if (p == current)
-+ continue;
-+
-+ if (task_cpu(p) == src_cpu)
-+ move_task_off_dead_cpu(src_cpu, p);
-+ } while_each_thread(t, p);
-+
-+ write_unlock_irq(&tasklist_lock);
-+}
-+
-+/* Schedules idle task to be the next runnable task on current CPU.
-+ * It does so by boosting its priority to highest possible and adding it to
-+ * the _front_ of the runqueue. Used by CPU offline code.
-+ */
-+void sched_idle_next(void)
-+{
-+ int this_cpu = smp_processor_id();
-+ struct rq *rq = cpu_rq(this_cpu);
-+ struct task_struct *p = rq->idle;
-+ unsigned long flags;
-+
-+ /* cpu has to be offline */
-+ BUG_ON(cpu_online(this_cpu));
-+
-+ /*
-+ * Strictly not necessary since rest of the CPUs are stopped by now
-+ * and interrupts disabled on the current cpu.
-+ */
-+ spin_lock_irqsave(&rq->lock, flags);
-+
-+ __setscheduler(p, SCHED_FIFO, MAX_RT_PRIO-1);
-+
-+ /* Add idle task to the _front_ of its priority queue: */
-+ __activate_idle_task(p, rq);
-+
-+ spin_unlock_irqrestore(&rq->lock, flags);
-+}
-+
-+/*
-+ * Ensures that the idle task is using init_mm right before its cpu goes
-+ * offline.
-+ */
-+void idle_task_exit(void)
-+{
-+ struct mm_struct *mm = current->active_mm;
-+
-+ BUG_ON(cpu_online(smp_processor_id()));
-+
-+ if (mm != &init_mm)
-+ switch_mm(mm, &init_mm, current);
-+ mmdrop(mm);
-+}
-+
-+/* called under rq->lock with disabled interrupts */
-+static void migrate_dead(unsigned int dead_cpu, struct task_struct *p)
-+{
-+ struct rq *rq = cpu_rq(dead_cpu);
-+
-+ /* Must be exiting, otherwise would be on tasklist. */
-+ BUG_ON(p->exit_state != EXIT_ZOMBIE && p->exit_state != EXIT_DEAD);
-+
-+ /* Cannot have done final schedule yet: would have vanished. */
-+ BUG_ON(p->state == TASK_DEAD);
-+
-+ get_task_struct(p);
-+
-+ /*
-+ * Drop lock around migration; if someone else moves it,
-+ * that's OK. No task can be added to this CPU, so iteration is
-+ * fine.
-+ * NOTE: interrupts should be left disabled --dev@
-+ */
-+ spin_unlock(&rq->lock);
-+ move_task_off_dead_cpu(dead_cpu, p);
-+ spin_lock(&rq->lock);
-+
-+ put_task_struct(p);
-+}
-+
-+/* release_task() removes task from tasklist, so we won't find dead tasks. */
-+static void migrate_dead_tasks(unsigned int dead_cpu)
-+{
-+ struct rq *rq = cpu_rq(dead_cpu);
-+ unsigned int arr, i;
-+
-+ for (arr = 0; arr < 2; arr++) {
-+ for (i = 0; i < MAX_PRIO; i++) {
-+ struct list_head *list = &rq->arrays[arr].queue[i];
-+
-+ while (!list_empty(list))
-+ migrate_dead(dead_cpu, list_entry(list->next,
-+ struct task_struct, run_list));
-+ }
-+ }
-+}
-+#endif /* CONFIG_HOTPLUG_CPU */
-+
-+/*
-+ * migration_call - callback that gets triggered when a CPU is added.
-+ * Here we can start up the necessary migration thread for the new CPU.
-+ */
-+static int __cpuinit
-+migration_call(struct notifier_block *nfb, unsigned long action, void *hcpu)
-+{
-+ struct task_struct *p;
-+ int cpu = (long)hcpu;
-+ unsigned long flags;
-+ struct rq *rq;
-+
-+ switch (action) {
-+ case CPU_LOCK_ACQUIRE:
-+ mutex_lock(&sched_hotcpu_mutex);
-+ break;
-+
-+ case CPU_UP_PREPARE:
-+ case CPU_UP_PREPARE_FROZEN:
-+ p = kthread_create(migration_thread, hcpu, "migration/%d",cpu);
-+ if (IS_ERR(p))
-+ return NOTIFY_BAD;
-+ p->flags |= PF_NOFREEZE;
-+ kthread_bind(p, cpu);
-+ /* Must be high prio: stop_machine expects to yield to it. */
-+ rq = task_rq_lock(p, &flags);
-+ __setscheduler(p, SCHED_FIFO, MAX_RT_PRIO-1);
-+ task_rq_unlock(rq, &flags);
-+ cpu_rq(cpu)->migration_thread = p;
-+ break;
-+
-+ case CPU_ONLINE:
-+ case CPU_ONLINE_FROZEN:
-+ /* Strictly unneccessary, as first user will wake it. */
-+ wake_up_process(cpu_rq(cpu)->migration_thread);
-+ break;
-+
-+#ifdef CONFIG_HOTPLUG_CPU
-+ case CPU_UP_CANCELED:
-+ case CPU_UP_CANCELED_FROZEN:
-+ if (!cpu_rq(cpu)->migration_thread)
-+ break;
-+ /* Unbind it from offline cpu so it can run. Fall thru. */
-+ kthread_bind(cpu_rq(cpu)->migration_thread,
-+ any_online_cpu(cpu_online_map));
-+ kthread_stop(cpu_rq(cpu)->migration_thread);
-+ cpu_rq(cpu)->migration_thread = NULL;
-+ break;
-+
-+ case CPU_DEAD:
-+ case CPU_DEAD_FROZEN:
-+ migrate_live_tasks(cpu);
-+ rq = cpu_rq(cpu);
-+ kthread_stop(rq->migration_thread);
-+ rq->migration_thread = NULL;
-+ /* Idle task back to normal (off runqueue, low prio) */
-+ rq = task_rq_lock(rq->idle, &flags);
-+ deactivate_task(rq->idle, rq);
-+ rq->idle->static_prio = MAX_PRIO;
-+ __setscheduler(rq->idle, SCHED_NORMAL, 0);
-+ migrate_dead_tasks(cpu);
-+ task_rq_unlock(rq, &flags);
-+ migrate_nr_uninterruptible(rq);
-+ BUG_ON(rq->nr_running != 0);
-+
-+ /* No need to migrate the tasks: it was best-effort if
-+ * they didn't take sched_hotcpu_mutex. Just wake up
-+ * the requestors. */
-+ spin_lock_irq(&rq->lock);
-+ while (!list_empty(&rq->migration_queue)) {
-+ struct migration_req *req;
-+
-+ req = list_entry(rq->migration_queue.next,
-+ struct migration_req, list);
-+ list_del_init(&req->list);
-+ complete(&req->done);
-+ }
-+ spin_unlock_irq(&rq->lock);
-+ break;
-+#endif
-+ case CPU_LOCK_RELEASE:
-+ mutex_unlock(&sched_hotcpu_mutex);
-+ break;
-+ }
-+ return NOTIFY_OK;
-+}
-+
-+/* Register at highest priority so that task migration (migrate_all_tasks)
-+ * happens before everything else.
-+ */
-+static struct notifier_block __cpuinitdata migration_notifier = {
-+ .notifier_call = migration_call,
-+ .priority = 10
-+};
-+
-+int __init migration_init(void)
-+{
-+ void *cpu = (void *)(long)smp_processor_id();
-+ int err;
-+
-+ /* Start one for the boot CPU: */
-+ err = migration_call(&migration_notifier, CPU_UP_PREPARE, cpu);
-+ BUG_ON(err == NOTIFY_BAD);
-+ migration_call(&migration_notifier, CPU_ONLINE, cpu);
-+ register_cpu_notifier(&migration_notifier);
-+
-+ return 0;
-+}
-+#endif
-+
-+#ifdef CONFIG_SMP
-+
-+/* Number of possible processor ids */
-+int nr_cpu_ids __read_mostly = NR_CPUS;
-+EXPORT_SYMBOL(nr_cpu_ids);
-+
-+#undef SCHED_DOMAIN_DEBUG
-+#ifdef SCHED_DOMAIN_DEBUG
-+static void sched_domain_debug(struct sched_domain *sd, int cpu)
-+{
-+ int level = 0;
-+
-+ if (!sd) {
-+ printk(KERN_DEBUG "CPU%d attaching NULL sched-domain.\n", cpu);
-+ return;
-+ }
-+
-+ printk(KERN_DEBUG "CPU%d attaching sched-domain:\n", cpu);
-+
-+ do {
-+ int i;
-+ char str[NR_CPUS];
-+ struct sched_group *group = sd->groups;
-+ cpumask_t groupmask;
-+
-+ cpumask_scnprintf(str, NR_CPUS, sd->span);
-+ cpus_clear(groupmask);
-+
-+ printk(KERN_DEBUG);
-+ for (i = 0; i < level + 1; i++)
-+ printk(" ");
-+ printk("domain %d: ", level);
-+
-+ if (!(sd->flags & SD_LOAD_BALANCE)) {
-+ printk("does not load-balance\n");
-+ if (sd->parent)
-+ printk(KERN_ERR "ERROR: !SD_LOAD_BALANCE domain"
-+ " has parent");
-+ break;
-+ }
-+
-+ printk("span %s\n", str);
-+
-+ if (!cpu_isset(cpu, sd->span))
-+ printk(KERN_ERR "ERROR: domain->span does not contain "
-+ "CPU%d\n", cpu);
-+ if (!cpu_isset(cpu, group->cpumask))
-+ printk(KERN_ERR "ERROR: domain->groups does not contain"
-+ " CPU%d\n", cpu);
-+
-+ printk(KERN_DEBUG);
-+ for (i = 0; i < level + 2; i++)
-+ printk(" ");
-+ printk("groups:");
-+ do {
-+ if (!group) {
-+ printk("\n");
-+ printk(KERN_ERR "ERROR: group is NULL\n");
-+ break;
-+ }
-+
-+ if (!group->__cpu_power) {
-+ printk("\n");
-+ printk(KERN_ERR "ERROR: domain->cpu_power not "
-+ "set\n");
-+ }
-+
-+ if (!cpus_weight(group->cpumask)) {
-+ printk("\n");
-+ printk(KERN_ERR "ERROR: empty group\n");
-+ }
-+
-+ if (cpus_intersects(groupmask, group->cpumask)) {
-+ printk("\n");
-+ printk(KERN_ERR "ERROR: repeated CPUs\n");
-+ }
-+
-+ cpus_or(groupmask, groupmask, group->cpumask);
-+
-+ cpumask_scnprintf(str, NR_CPUS, group->cpumask);
-+ printk(" %s", str);
-+
-+ group = group->next;
-+ } while (group != sd->groups);
-+ printk("\n");
-+
-+ if (!cpus_equal(sd->span, groupmask))
-+ printk(KERN_ERR "ERROR: groups don't span "
-+ "domain->span\n");
-+
-+ level++;
-+ sd = sd->parent;
-+ if (!sd)
-+ continue;
-+
-+ if (!cpus_subset(groupmask, sd->span))
-+ printk(KERN_ERR "ERROR: parent span is not a superset "
-+ "of domain->span\n");
-+
-+ } while (sd);
-+}
-+#else
-+# define sched_domain_debug(sd, cpu) do { } while (0)
-+#endif
-+
-+static int sd_degenerate(struct sched_domain *sd)
-+{
-+ if (cpus_weight(sd->span) == 1)
-+ return 1;
-+
-+ /* Following flags need at least 2 groups */
-+ if (sd->flags & (SD_LOAD_BALANCE |
-+ SD_BALANCE_NEWIDLE |
-+ SD_BALANCE_FORK |
-+ SD_BALANCE_EXEC |
-+ SD_SHARE_CPUPOWER |
-+ SD_SHARE_PKG_RESOURCES)) {
-+ if (sd->groups != sd->groups->next)
-+ return 0;
-+ }
-+
-+ /* Following flags don't use groups */
-+ if (sd->flags & (SD_WAKE_IDLE |
-+ SD_WAKE_AFFINE |
-+ SD_WAKE_BALANCE))
-+ return 0;
-+
-+ return 1;
-+}
-+
-+static int
-+sd_parent_degenerate(struct sched_domain *sd, struct sched_domain *parent)
-+{
-+ unsigned long cflags = sd->flags, pflags = parent->flags;
-+
-+ if (sd_degenerate(parent))
-+ return 1;
-+
-+ if (!cpus_equal(sd->span, parent->span))
-+ return 0;
-+
-+ /* Does parent contain flags not in child? */
-+ /* WAKE_BALANCE is a subset of WAKE_AFFINE */
-+ if (cflags & SD_WAKE_AFFINE)
-+ pflags &= ~SD_WAKE_BALANCE;
-+ /* Flags needing groups don't count if only 1 group in parent */
-+ if (parent->groups == parent->groups->next) {
-+ pflags &= ~(SD_LOAD_BALANCE |
-+ SD_BALANCE_NEWIDLE |
-+ SD_BALANCE_FORK |
-+ SD_BALANCE_EXEC |
-+ SD_SHARE_CPUPOWER |
-+ SD_SHARE_PKG_RESOURCES);
-+ }
-+ if (~cflags & pflags)
-+ return 0;
-+
-+ return 1;
-+}
-+
-+/*
-+ * Attach the domain 'sd' to 'cpu' as its base domain. Callers must
-+ * hold the hotplug lock.
-+ */
-+static void cpu_attach_domain(struct sched_domain *sd, int cpu)
-+{
-+ struct rq *rq = cpu_rq(cpu);
-+ struct sched_domain *tmp;
-+
-+ /* Remove the sched domains which do not contribute to scheduling. */
-+ for (tmp = sd; tmp; tmp = tmp->parent) {
-+ struct sched_domain *parent = tmp->parent;
-+ if (!parent)
-+ break;
-+ if (sd_parent_degenerate(tmp, parent)) {
-+ tmp->parent = parent->parent;
-+ if (parent->parent)
-+ parent->parent->child = tmp;
-+ }
-+ }
-+
-+ if (sd && sd_degenerate(sd)) {
-+ sd = sd->parent;
-+ if (sd)
-+ sd->child = NULL;
-+ }
-+
-+ sched_domain_debug(sd, cpu);
-+
-+ rcu_assign_pointer(rq->sd, sd);
-+}
-+
-+/* cpus with isolated domains */
-+static cpumask_t cpu_isolated_map = CPU_MASK_NONE;
-+
-+/* Setup the mask of cpus configured for isolated domains */
-+static int __init isolated_cpu_setup(char *str)
-+{
-+ int ints[NR_CPUS], i;
-+
-+ str = get_options(str, ARRAY_SIZE(ints), ints);
-+ cpus_clear(cpu_isolated_map);
-+ for (i = 1; i <= ints[0]; i++)
-+ if (ints[i] < NR_CPUS)
-+ cpu_set(ints[i], cpu_isolated_map);
-+ return 1;
-+}
-+
-+__setup ("isolcpus=", isolated_cpu_setup);
-+
-+/*
-+ * init_sched_build_groups takes the cpumask we wish to span, and a pointer
-+ * to a function which identifies what group(along with sched group) a CPU
-+ * belongs to. The return value of group_fn must be a >= 0 and < NR_CPUS
-+ * (due to the fact that we keep track of groups covered with a cpumask_t).
-+ *
-+ * init_sched_build_groups will build a circular linked list of the groups
-+ * covered by the given span, and will set each group's ->cpumask correctly,
-+ * and ->cpu_power to 0.
-+ */
-+static void
-+init_sched_build_groups(cpumask_t span, const cpumask_t *cpu_map,
-+ int (*group_fn)(int cpu, const cpumask_t *cpu_map,
-+ struct sched_group **sg))
-+{
-+ struct sched_group *first = NULL, *last = NULL;
-+ cpumask_t covered = CPU_MASK_NONE;
-+ int i;
-+
-+ for_each_cpu_mask(i, span) {
-+ struct sched_group *sg;
-+ int group = group_fn(i, cpu_map, &sg);
-+ int j;
-+
-+ if (cpu_isset(i, covered))
-+ continue;
-+
-+ sg->cpumask = CPU_MASK_NONE;
-+ sg->__cpu_power = 0;
-+
-+ for_each_cpu_mask(j, span) {
-+ if (group_fn(j, cpu_map, NULL) != group)
-+ continue;
-+
-+ cpu_set(j, covered);
-+ cpu_set(j, sg->cpumask);
-+ }
-+ if (!first)
-+ first = sg;
-+ if (last)
-+ last->next = sg;
-+ last = sg;
-+ }
-+ last->next = first;
-+}
-+
-+#define SD_NODES_PER_DOMAIN 16
-+
-+/*
-+ * Self-tuning task migration cost measurement between source and target CPUs.
-+ *
-+ * This is done by measuring the cost of manipulating buffers of varying
-+ * sizes. For a given buffer-size here are the steps that are taken:
-+ *
-+ * 1) the source CPU reads+dirties a shared buffer
-+ * 2) the target CPU reads+dirties the same shared buffer
-+ *
-+ * We measure how long they take, in the following 4 scenarios:
-+ *
-+ * - source: CPU1, target: CPU2 | cost1
-+ * - source: CPU2, target: CPU1 | cost2
-+ * - source: CPU1, target: CPU1 | cost3
-+ * - source: CPU2, target: CPU2 | cost4
-+ *
-+ * We then calculate the cost3+cost4-cost1-cost2 difference - this is
-+ * the cost of migration.
-+ *
-+ * We then start off from a small buffer-size and iterate up to larger
-+ * buffer sizes, in 5% steps - measuring each buffer-size separately, and
-+ * doing a maximum search for the cost. (The maximum cost for a migration
-+ * normally occurs when the working set size is around the effective cache
-+ * size.)
-+ */
-+#define SEARCH_SCOPE 2
-+#define MIN_CACHE_SIZE (64*1024U)
-+#define DEFAULT_CACHE_SIZE (5*1024*1024U)
-+#define ITERATIONS 1
-+#define SIZE_THRESH 130
-+#define COST_THRESH 130
-+
-+/*
-+ * The migration cost is a function of 'domain distance'. Domain
-+ * distance is the number of steps a CPU has to iterate down its
-+ * domain tree to share a domain with the other CPU. The farther
-+ * two CPUs are from each other, the larger the distance gets.
-+ *
-+ * Note that we use the distance only to cache measurement results,
-+ * the distance value is not used numerically otherwise. When two
-+ * CPUs have the same distance it is assumed that the migration
-+ * cost is the same. (this is a simplification but quite practical)
-+ */
-+#define MAX_DOMAIN_DISTANCE 32
-+
-+static unsigned long long migration_cost[MAX_DOMAIN_DISTANCE] =
-+ { [ 0 ... MAX_DOMAIN_DISTANCE-1 ] =
-+/*
-+ * Architectures may override the migration cost and thus avoid
-+ * boot-time calibration. Unit is nanoseconds. Mostly useful for
-+ * virtualized hardware:
-+ */
-+#ifdef CONFIG_DEFAULT_MIGRATION_COST
-+ CONFIG_DEFAULT_MIGRATION_COST
-+#else
-+ -1LL
-+#endif
-+};
-+
-+/*
-+ * Allow override of migration cost - in units of microseconds.
-+ * E.g. migration_cost=1000,2000,3000 will set up a level-1 cost
-+ * of 1 msec, level-2 cost of 2 msecs and level3 cost of 3 msecs:
-+ */
-+static int __init migration_cost_setup(char *str)
-+{
-+ int ints[MAX_DOMAIN_DISTANCE+1], i;
-+
-+ str = get_options(str, ARRAY_SIZE(ints), ints);
-+
-+ printk("#ints: %d\n", ints[0]);
-+ for (i = 1; i <= ints[0]; i++) {
-+ migration_cost[i-1] = (unsigned long long)ints[i]*1000;
-+ printk("migration_cost[%d]: %Ld\n", i-1, migration_cost[i-1]);
-+ }
-+ return 1;
-+}
-+
-+__setup ("migration_cost=", migration_cost_setup);
-+
-+/*
-+ * Global multiplier (divisor) for migration-cutoff values,
-+ * in percentiles. E.g. use a value of 150 to get 1.5 times
-+ * longer cache-hot cutoff times.
-+ *
-+ * (We scale it from 100 to 128 to long long handling easier.)
-+ */
-+
-+#define MIGRATION_FACTOR_SCALE 128
-+
-+static unsigned int migration_factor = MIGRATION_FACTOR_SCALE;
-+
-+static int __init setup_migration_factor(char *str)
-+{
-+ get_option(&str, &migration_factor);
-+ migration_factor = migration_factor * MIGRATION_FACTOR_SCALE / 100;
-+ return 1;
-+}
-+
-+__setup("migration_factor=", setup_migration_factor);
-+
-+/*
-+ * Estimated distance of two CPUs, measured via the number of domains
-+ * we have to pass for the two CPUs to be in the same span:
-+ */
-+static unsigned long domain_distance(int cpu1, int cpu2)
-+{
-+ unsigned long distance = 0;
-+ struct sched_domain *sd;
-+
-+ for_each_domain(cpu1, sd) {
-+ WARN_ON(!cpu_isset(cpu1, sd->span));
-+ if (cpu_isset(cpu2, sd->span))
-+ return distance;
-+ distance++;
-+ }
-+ if (distance >= MAX_DOMAIN_DISTANCE) {
-+ WARN_ON(1);
-+ distance = MAX_DOMAIN_DISTANCE-1;
-+ }
-+
-+ return distance;
-+}
-+
-+static unsigned int migration_debug;
-+
-+static int __init setup_migration_debug(char *str)
-+{
-+ get_option(&str, &migration_debug);
-+ return 1;
-+}
-+
-+__setup("migration_debug=", setup_migration_debug);
-+
-+/*
-+ * Maximum cache-size that the scheduler should try to measure.
-+ * Architectures with larger caches should tune this up during
-+ * bootup. Gets used in the domain-setup code (i.e. during SMP
-+ * bootup).
-+ */
-+unsigned int max_cache_size;
-+
-+static int __init setup_max_cache_size(char *str)
-+{
-+ get_option(&str, &max_cache_size);
-+ return 1;
-+}
-+
-+__setup("max_cache_size=", setup_max_cache_size);
-+
-+/*
-+ * Dirty a big buffer in a hard-to-predict (for the L2 cache) way. This
-+ * is the operation that is timed, so we try to generate unpredictable
-+ * cachemisses that still end up filling the L2 cache:
-+ */
-+static void touch_cache(void *__cache, unsigned long __size)
-+{
-+ unsigned long size = __size / sizeof(long);
-+ unsigned long chunk1 = size / 3;
-+ unsigned long chunk2 = 2 * size / 3;
-+ unsigned long *cache = __cache;
-+ int i;
-+
-+ for (i = 0; i < size/6; i += 8) {
-+ switch (i % 6) {
-+ case 0: cache[i]++;
-+ case 1: cache[size-1-i]++;
-+ case 2: cache[chunk1-i]++;
-+ case 3: cache[chunk1+i]++;
-+ case 4: cache[chunk2-i]++;
-+ case 5: cache[chunk2+i]++;
-+ }
-+ }
-+}
-+
-+/*
-+ * Measure the cache-cost of one task migration. Returns in units of nsec.
-+ */
-+static unsigned long long
-+measure_one(void *cache, unsigned long size, int source, int target)
-+{
-+ cpumask_t mask, saved_mask;
-+ unsigned long long t0, t1, t2, t3, cost;
-+
-+ saved_mask = current->cpus_allowed;
-+
-+ /*
-+ * Flush source caches to RAM and invalidate them:
-+ */
-+ sched_cacheflush();
-+
-+ /*
-+ * Migrate to the source CPU:
-+ */
-+ mask = cpumask_of_cpu(source);
-+ set_cpus_allowed(current, mask);
-+ WARN_ON(smp_processor_id() != source);
-+
-+ /*
-+ * Dirty the working set:
-+ */
-+ t0 = sched_clock();
-+ touch_cache(cache, size);
-+ t1 = sched_clock();
-+
-+ /*
-+ * Migrate to the target CPU, dirty the L2 cache and access
-+ * the shared buffer. (which represents the working set
-+ * of a migrated task.)
-+ */
-+ mask = cpumask_of_cpu(target);
-+ set_cpus_allowed(current, mask);
-+ WARN_ON(smp_processor_id() != target);
-+
-+ t2 = sched_clock();
-+ touch_cache(cache, size);
-+ t3 = sched_clock();
-+
-+ cost = t1-t0 + t3-t2;
-+
-+ if (migration_debug >= 2)
-+ printk("[%d->%d]: %8Ld %8Ld %8Ld => %10Ld.\n",
-+ source, target, t1-t0, t1-t0, t3-t2, cost);
-+ /*
-+ * Flush target caches to RAM and invalidate them:
-+ */
-+ sched_cacheflush();
-+
-+ set_cpus_allowed(current, saved_mask);
-+
-+ return cost;
-+}
-+
-+/*
-+ * Measure a series of task migrations and return the average
-+ * result. Since this code runs early during bootup the system
-+ * is 'undisturbed' and the average latency makes sense.
-+ *
-+ * The algorithm in essence auto-detects the relevant cache-size,
-+ * so it will properly detect different cachesizes for different
-+ * cache-hierarchies, depending on how the CPUs are connected.
-+ *
-+ * Architectures can prime the upper limit of the search range via
-+ * max_cache_size, otherwise the search range defaults to 20MB...64K.
-+ */
-+static unsigned long long
-+measure_cost(int cpu1, int cpu2, void *cache, unsigned int size)
-+{
-+ unsigned long long cost1, cost2;
-+ int i;
-+
-+ /*
-+ * Measure the migration cost of 'size' bytes, over an
-+ * average of 10 runs:
-+ *
-+ * (We perturb the cache size by a small (0..4k)
-+ * value to compensate size/alignment related artifacts.
-+ * We also subtract the cost of the operation done on
-+ * the same CPU.)
-+ */
-+ cost1 = 0;
-+
-+ /*
-+ * dry run, to make sure we start off cache-cold on cpu1,
-+ * and to get any vmalloc pagefaults in advance:
-+ */
-+ measure_one(cache, size, cpu1, cpu2);
-+ for (i = 0; i < ITERATIONS; i++)
-+ cost1 += measure_one(cache, size - i * 1024, cpu1, cpu2);
-+
-+ measure_one(cache, size, cpu2, cpu1);
-+ for (i = 0; i < ITERATIONS; i++)
-+ cost1 += measure_one(cache, size - i * 1024, cpu2, cpu1);
-+
-+ /*
-+ * (We measure the non-migrating [cached] cost on both
-+ * cpu1 and cpu2, to handle CPUs with different speeds)
-+ */
-+ cost2 = 0;
-+
-+ measure_one(cache, size, cpu1, cpu1);
-+ for (i = 0; i < ITERATIONS; i++)
-+ cost2 += measure_one(cache, size - i * 1024, cpu1, cpu1);
-+
-+ measure_one(cache, size, cpu2, cpu2);
-+ for (i = 0; i < ITERATIONS; i++)
-+ cost2 += measure_one(cache, size - i * 1024, cpu2, cpu2);
-+
-+ /*
-+ * Get the per-iteration migration cost:
-+ */
-+ do_div(cost1, 2 * ITERATIONS);
-+ do_div(cost2, 2 * ITERATIONS);
-+
-+ return cost1 - cost2;
-+}
-+
-+static unsigned long long measure_migration_cost(int cpu1, int cpu2)
-+{
-+ unsigned long long max_cost = 0, fluct = 0, avg_fluct = 0;
-+ unsigned int max_size, size, size_found = 0;
-+ long long cost = 0, prev_cost;
-+ void *cache;
-+
-+ /*
-+ * Search from max_cache_size*5 down to 64K - the real relevant
-+ * cachesize has to lie somewhere inbetween.
-+ */
-+ if (max_cache_size) {
-+ max_size = max(max_cache_size * SEARCH_SCOPE, MIN_CACHE_SIZE);
-+ size = max(max_cache_size / SEARCH_SCOPE, MIN_CACHE_SIZE);
-+ } else {
-+ /*
-+ * Since we have no estimation about the relevant
-+ * search range
-+ */
-+ max_size = DEFAULT_CACHE_SIZE * SEARCH_SCOPE;
-+ size = MIN_CACHE_SIZE;
-+ }
-+
-+ if (!cpu_online(cpu1) || !cpu_online(cpu2)) {
-+ printk("cpu %d and %d not both online!\n", cpu1, cpu2);
-+ return 0;
-+ }
-+
-+ /*
-+ * Allocate the working set:
-+ */
-+ cache = vmalloc(max_size);
-+ if (!cache) {
-+ printk("could not vmalloc %d bytes for cache!\n", 2 * max_size);
-+ return 1000000; /* return 1 msec on very small boxen */
-+ }
-+
-+ while (size <= max_size) {
-+ prev_cost = cost;
-+ cost = measure_cost(cpu1, cpu2, cache, size);
-+
-+ /*
-+ * Update the max:
-+ */
-+ if (cost > 0) {
-+ if (max_cost < cost) {
-+ max_cost = cost;
-+ size_found = size;
-+ }
-+ }
-+ /*
-+ * Calculate average fluctuation, we use this to prevent
-+ * noise from triggering an early break out of the loop:
-+ */
-+ fluct = abs(cost - prev_cost);
-+ avg_fluct = (avg_fluct + fluct)/2;
-+
-+ if (migration_debug)
-+ printk("-> [%d][%d][%7d] %3ld.%ld [%3ld.%ld] (%ld): "
-+ "(%8Ld %8Ld)\n",
-+ cpu1, cpu2, size,
-+ (long)cost / 1000000,
-+ ((long)cost / 100000) % 10,
-+ (long)max_cost / 1000000,
-+ ((long)max_cost / 100000) % 10,
-+ domain_distance(cpu1, cpu2),
-+ cost, avg_fluct);
-+
-+ /*
-+ * If we iterated at least 20% past the previous maximum,
-+ * and the cost has dropped by more than 20% already,
-+ * (taking fluctuations into account) then we assume to
-+ * have found the maximum and break out of the loop early:
-+ */
-+ if (size_found && (size*100 > size_found*SIZE_THRESH))
-+ if (cost+avg_fluct <= 0 ||
-+ max_cost*100 > (cost+avg_fluct)*COST_THRESH) {
-+
-+ if (migration_debug)
-+ printk("-> found max.\n");
-+ break;
-+ }
-+ /*
-+ * Increase the cachesize in 10% steps:
-+ */
-+ size = size * 10 / 9;
-+ }
-+
-+ if (migration_debug)
-+ printk("[%d][%d] working set size found: %d, cost: %Ld\n",
-+ cpu1, cpu2, size_found, max_cost);
-+
-+ vfree(cache);
-+
-+ /*
-+ * A task is considered 'cache cold' if at least 2 times
-+ * the worst-case cost of migration has passed.
-+ *
-+ * (this limit is only listened to if the load-balancing
-+ * situation is 'nice' - if there is a large imbalance we
-+ * ignore it for the sake of CPU utilization and
-+ * processing fairness.)
-+ */
-+ return 2 * max_cost * migration_factor / MIGRATION_FACTOR_SCALE;
-+}
-+
-+static void calibrate_migration_costs(const cpumask_t *cpu_map)
-+{
-+ int cpu1 = -1, cpu2 = -1, cpu, orig_cpu = raw_smp_processor_id();
-+ unsigned long j0, j1, distance, max_distance = 0;
-+ struct sched_domain *sd;
-+
-+ j0 = jiffies;
-+
-+ /*
-+ * First pass - calculate the cacheflush times:
-+ */
-+ for_each_cpu_mask(cpu1, *cpu_map) {
-+ for_each_cpu_mask(cpu2, *cpu_map) {
-+ if (cpu1 == cpu2)
-+ continue;
-+ distance = domain_distance(cpu1, cpu2);
-+ max_distance = max(max_distance, distance);
-+ /*
-+ * No result cached yet?
-+ */
-+ if (migration_cost[distance] == -1LL)
-+ migration_cost[distance] =
-+ measure_migration_cost(cpu1, cpu2);
-+ }
-+ }
-+ /*
-+ * Second pass - update the sched domain hierarchy with
-+ * the new cache-hot-time estimations:
-+ */
-+ for_each_cpu_mask(cpu, *cpu_map) {
-+ distance = 0;
-+ for_each_domain(cpu, sd) {
-+ sd->cache_hot_time = migration_cost[distance];
-+ distance++;
-+ }
-+ }
-+ /*
-+ * Print the matrix:
-+ */
-+ if (migration_debug)
-+ printk("migration: max_cache_size: %d, cpu: %d MHz:\n",
-+ max_cache_size,
-+#ifdef CONFIG_X86
-+ cpu_khz/1000
-+#else
-+ -1
-+#endif
-+ );
-+ if (system_state == SYSTEM_BOOTING && num_online_cpus() > 1) {
-+ printk("migration_cost=");
-+ for (distance = 0; distance <= max_distance; distance++) {
-+ if (distance)
-+ printk(",");
-+ printk("%ld", (long)migration_cost[distance] / 1000);
-+ }
-+ printk("\n");
-+ }
-+ j1 = jiffies;
-+ if (migration_debug)
-+ printk("migration: %ld seconds\n", (j1-j0) / HZ);
-+
-+ /*
-+ * Move back to the original CPU. NUMA-Q gets confused
-+ * if we migrate to another quad during bootup.
-+ */
-+ if (raw_smp_processor_id() != orig_cpu) {
-+ cpumask_t mask = cpumask_of_cpu(orig_cpu),
-+ saved_mask = current->cpus_allowed;
-+
-+ set_cpus_allowed(current, mask);
-+ set_cpus_allowed(current, saved_mask);
-+ }
-+}
-+
-+#ifdef CONFIG_NUMA
-+
-+/**
-+ * find_next_best_node - find the next node to include in a sched_domain
-+ * @node: node whose sched_domain we're building
-+ * @used_nodes: nodes already in the sched_domain
-+ *
-+ * Find the next node to include in a given scheduling domain. Simply
-+ * finds the closest node not already in the @used_nodes map.
-+ *
-+ * Should use nodemask_t.
-+ */
-+static int find_next_best_node(int node, unsigned long *used_nodes)
-+{
-+ int i, n, val, min_val, best_node = 0;
-+
-+ min_val = INT_MAX;
-+
-+ for (i = 0; i < MAX_NUMNODES; i++) {
-+ /* Start at @node */
-+ n = (node + i) % MAX_NUMNODES;
-+
-+ if (!nr_cpus_node(n))
-+ continue;
-+
-+ /* Skip already used nodes */
-+ if (test_bit(n, used_nodes))
-+ continue;
-+
-+ /* Simple min distance search */
-+ val = node_distance(node, n);
-+
-+ if (val < min_val) {
-+ min_val = val;
-+ best_node = n;
-+ }
-+ }
-+
-+ set_bit(best_node, used_nodes);
-+ return best_node;
-+}
-+
-+/**
-+ * sched_domain_node_span - get a cpumask for a node's sched_domain
-+ * @node: node whose cpumask we're constructing
-+ * @size: number of nodes to include in this span
-+ *
-+ * Given a node, construct a good cpumask for its sched_domain to span. It
-+ * should be one that prevents unnecessary balancing, but also spreads tasks
-+ * out optimally.
-+ */
-+static cpumask_t sched_domain_node_span(int node)
-+{
-+ DECLARE_BITMAP(used_nodes, MAX_NUMNODES);
-+ cpumask_t span, nodemask;
-+ int i;
-+
-+ cpus_clear(span);
-+ bitmap_zero(used_nodes, MAX_NUMNODES);
-+
-+ nodemask = node_to_cpumask(node);
-+ cpus_or(span, span, nodemask);
-+ set_bit(node, used_nodes);
-+
-+ for (i = 1; i < SD_NODES_PER_DOMAIN; i++) {
-+ int next_node = find_next_best_node(node, used_nodes);
-+
-+ nodemask = node_to_cpumask(next_node);
-+ cpus_or(span, span, nodemask);
-+ }
-+
-+ return span;
-+}
-+#endif
-+
-+int sched_smt_power_savings = 0, sched_mc_power_savings = 0;
-+
-+/*
-+ * SMT sched-domains:
-+ */
-+#ifdef CONFIG_SCHED_SMT
-+static DEFINE_PER_CPU(struct sched_domain, cpu_domains);
-+static DEFINE_PER_CPU(struct sched_group, sched_group_cpus);
-+
-+static int cpu_to_cpu_group(int cpu, const cpumask_t *cpu_map,
-+ struct sched_group **sg)
-+{
-+ if (sg)
-+ *sg = &per_cpu(sched_group_cpus, cpu);
-+ return cpu;
-+}
-+#endif
-+
-+/*
-+ * multi-core sched-domains:
-+ */
-+#ifdef CONFIG_SCHED_MC
-+static DEFINE_PER_CPU(struct sched_domain, core_domains);
-+static DEFINE_PER_CPU(struct sched_group, sched_group_core);
-+#endif
-+
-+#if defined(CONFIG_SCHED_MC) && defined(CONFIG_SCHED_SMT)
-+static int cpu_to_core_group(int cpu, const cpumask_t *cpu_map,
-+ struct sched_group **sg)
-+{
-+ int group;
-+ cpumask_t mask = cpu_sibling_map[cpu];
-+ cpus_and(mask, mask, *cpu_map);
-+ group = first_cpu(mask);
-+ if (sg)
-+ *sg = &per_cpu(sched_group_core, group);
-+ return group;
-+}
-+#elif defined(CONFIG_SCHED_MC)
-+static int cpu_to_core_group(int cpu, const cpumask_t *cpu_map,
-+ struct sched_group **sg)
-+{
-+ if (sg)
-+ *sg = &per_cpu(sched_group_core, cpu);
-+ return cpu;
-+}
-+#endif
-+
-+static DEFINE_PER_CPU(struct sched_domain, phys_domains);
-+static DEFINE_PER_CPU(struct sched_group, sched_group_phys);
-+
-+static int cpu_to_phys_group(int cpu, const cpumask_t *cpu_map,
-+ struct sched_group **sg)
-+{
-+ int group;
-+#ifdef CONFIG_SCHED_MC
-+ cpumask_t mask = cpu_coregroup_map(cpu);
-+ cpus_and(mask, mask, *cpu_map);
-+ group = first_cpu(mask);
-+#elif defined(CONFIG_SCHED_SMT)
-+ cpumask_t mask = cpu_sibling_map[cpu];
-+ cpus_and(mask, mask, *cpu_map);
-+ group = first_cpu(mask);
-+#else
-+ group = cpu;
-+#endif
-+ if (sg)
-+ *sg = &per_cpu(sched_group_phys, group);
-+ return group;
-+}
-+
-+#ifdef CONFIG_NUMA
-+/*
-+ * The init_sched_build_groups can't handle what we want to do with node
-+ * groups, so roll our own. Now each node has its own list of groups which
-+ * gets dynamically allocated.
-+ */
-+static DEFINE_PER_CPU(struct sched_domain, node_domains);
-+static struct sched_group **sched_group_nodes_bycpu[NR_CPUS];
-+
-+static DEFINE_PER_CPU(struct sched_domain, allnodes_domains);
-+static DEFINE_PER_CPU(struct sched_group, sched_group_allnodes);
-+
-+static int cpu_to_allnodes_group(int cpu, const cpumask_t *cpu_map,
-+ struct sched_group **sg)
-+{
-+ cpumask_t nodemask = node_to_cpumask(cpu_to_node(cpu));
-+ int group;
-+
-+ cpus_and(nodemask, nodemask, *cpu_map);
-+ group = first_cpu(nodemask);
-+
-+ if (sg)
-+ *sg = &per_cpu(sched_group_allnodes, group);
-+ return group;
-+}
-+
-+static void init_numa_sched_groups_power(struct sched_group *group_head)
-+{
-+ struct sched_group *sg = group_head;
-+ int j;
-+
-+ if (!sg)
-+ return;
-+next_sg:
-+ for_each_cpu_mask(j, sg->cpumask) {
-+ struct sched_domain *sd;
-+
-+ sd = &per_cpu(phys_domains, j);
-+ if (j != first_cpu(sd->groups->cpumask)) {
-+ /*
-+ * Only add "power" once for each
-+ * physical package.
-+ */
-+ continue;
-+ }
-+
-+ sg_inc_cpu_power(sg, sd->groups->__cpu_power);
-+ }
-+ sg = sg->next;
-+ if (sg != group_head)
-+ goto next_sg;
-+}
-+#endif
-+
-+#ifdef CONFIG_NUMA
-+/* Free memory allocated for various sched_group structures */
-+static void free_sched_groups(const cpumask_t *cpu_map)
-+{
-+ int cpu, i;
-+
-+ for_each_cpu_mask(cpu, *cpu_map) {
-+ struct sched_group **sched_group_nodes
-+ = sched_group_nodes_bycpu[cpu];
-+
-+ if (!sched_group_nodes)
-+ continue;
-+
-+ for (i = 0; i < MAX_NUMNODES; i++) {
-+ cpumask_t nodemask = node_to_cpumask(i);
-+ struct sched_group *oldsg, *sg = sched_group_nodes[i];
-+
-+ cpus_and(nodemask, nodemask, *cpu_map);
-+ if (cpus_empty(nodemask))
-+ continue;
-+
-+ if (sg == NULL)
-+ continue;
-+ sg = sg->next;
-+next_sg:
-+ oldsg = sg;
-+ sg = sg->next;
-+ kfree(oldsg);
-+ if (oldsg != sched_group_nodes[i])
-+ goto next_sg;
-+ }
-+ kfree(sched_group_nodes);
-+ sched_group_nodes_bycpu[cpu] = NULL;
-+ }
-+}
-+#else
-+static void free_sched_groups(const cpumask_t *cpu_map)
-+{
-+}
-+#endif
-+
-+/*
-+ * Initialize sched groups cpu_power.
-+ *
-+ * cpu_power indicates the capacity of sched group, which is used while
-+ * distributing the load between different sched groups in a sched domain.
-+ * Typically cpu_power for all the groups in a sched domain will be same unless
-+ * there are asymmetries in the topology. If there are asymmetries, group
-+ * having more cpu_power will pickup more load compared to the group having
-+ * less cpu_power.
-+ *
-+ * cpu_power will be a multiple of SCHED_LOAD_SCALE. This multiple represents
-+ * the maximum number of tasks a group can handle in the presence of other idle
-+ * or lightly loaded groups in the same sched domain.
-+ */
-+static void init_sched_groups_power(int cpu, struct sched_domain *sd)
-+{
-+ struct sched_domain *child;
-+ struct sched_group *group;
-+
-+ WARN_ON(!sd || !sd->groups);
-+
-+ if (cpu != first_cpu(sd->groups->cpumask))
-+ return;
-+
-+ child = sd->child;
-+
-+ sd->groups->__cpu_power = 0;
-+
-+ /*
-+ * For perf policy, if the groups in child domain share resources
-+ * (for example cores sharing some portions of the cache hierarchy
-+ * or SMT), then set this domain groups cpu_power such that each group
-+ * can handle only one task, when there are other idle groups in the
-+ * same sched domain.
-+ */
-+ if (!child || (!(sd->flags & SD_POWERSAVINGS_BALANCE) &&
-+ (child->flags &
-+ (SD_SHARE_CPUPOWER | SD_SHARE_PKG_RESOURCES)))) {
-+ sg_inc_cpu_power(sd->groups, SCHED_LOAD_SCALE);
-+ return;
-+ }
-+
-+ /*
-+ * add cpu_power of each child group to this groups cpu_power
-+ */
-+ group = child->groups;
-+ do {
-+ sg_inc_cpu_power(sd->groups, group->__cpu_power);
-+ group = group->next;
-+ } while (group != child->groups);
-+}
-+
-+/*
-+ * Build sched domains for a given set of cpus and attach the sched domains
-+ * to the individual cpus
-+ */
-+static int build_sched_domains(const cpumask_t *cpu_map)
-+{
-+ int i;
-+ struct sched_domain *sd;
-+#ifdef CONFIG_NUMA
-+ struct sched_group **sched_group_nodes = NULL;
-+ int sd_allnodes = 0;
-+
-+ /*
-+ * Allocate the per-node list of sched groups
-+ */
-+ sched_group_nodes = kzalloc(sizeof(struct sched_group*)*MAX_NUMNODES,
-+ GFP_KERNEL);
-+ if (!sched_group_nodes) {
-+ printk(KERN_WARNING "Can not alloc sched group node list\n");
-+ return -ENOMEM;
-+ }
-+ sched_group_nodes_bycpu[first_cpu(*cpu_map)] = sched_group_nodes;
-+#endif
-+
-+ /*
-+ * Set up domains for cpus specified by the cpu_map.
-+ */
-+ for_each_cpu_mask(i, *cpu_map) {
-+ struct sched_domain *sd = NULL, *p;
-+ cpumask_t nodemask = node_to_cpumask(cpu_to_node(i));
-+
-+ cpus_and(nodemask, nodemask, *cpu_map);
-+
-+#ifdef CONFIG_NUMA
-+ if (cpus_weight(*cpu_map)
-+ > SD_NODES_PER_DOMAIN*cpus_weight(nodemask)) {
-+ sd = &per_cpu(allnodes_domains, i);
-+ *sd = SD_ALLNODES_INIT;
-+ sd->span = *cpu_map;
-+ cpu_to_allnodes_group(i, cpu_map, &sd->groups);
-+ p = sd;
-+ sd_allnodes = 1;
-+ } else
-+ p = NULL;
-+
-+ sd = &per_cpu(node_domains, i);
-+ *sd = SD_NODE_INIT;
-+ sd->span = sched_domain_node_span(cpu_to_node(i));
-+ sd->parent = p;
-+ if (p)
-+ p->child = sd;
-+ cpus_and(sd->span, sd->span, *cpu_map);
-+#endif
-+
-+ p = sd;
-+ sd = &per_cpu(phys_domains, i);
-+ *sd = SD_CPU_INIT;
-+ sd->span = nodemask;
-+ sd->parent = p;
-+ if (p)
-+ p->child = sd;
-+ cpu_to_phys_group(i, cpu_map, &sd->groups);
-+
-+#ifdef CONFIG_SCHED_MC
-+ p = sd;
-+ sd = &per_cpu(core_domains, i);
-+ *sd = SD_MC_INIT;
-+ sd->span = cpu_coregroup_map(i);
-+ cpus_and(sd->span, sd->span, *cpu_map);
-+ sd->parent = p;
-+ p->child = sd;
-+ cpu_to_core_group(i, cpu_map, &sd->groups);
-+#endif
-+
-+#ifdef CONFIG_SCHED_SMT
-+ p = sd;
-+ sd = &per_cpu(cpu_domains, i);
-+ *sd = SD_SIBLING_INIT;
-+ sd->span = cpu_sibling_map[i];
-+ cpus_and(sd->span, sd->span, *cpu_map);
-+ sd->parent = p;
-+ p->child = sd;
-+ cpu_to_cpu_group(i, cpu_map, &sd->groups);
-+#endif
-+ }
-+
-+#ifdef CONFIG_SCHED_SMT
-+ /* Set up CPU (sibling) groups */
-+ for_each_cpu_mask(i, *cpu_map) {
-+ cpumask_t this_sibling_map = cpu_sibling_map[i];
-+ cpus_and(this_sibling_map, this_sibling_map, *cpu_map);
-+ if (i != first_cpu(this_sibling_map))
-+ continue;
-+
-+ init_sched_build_groups(this_sibling_map, cpu_map, &cpu_to_cpu_group);
-+ }
-+#endif
-+
-+#ifdef CONFIG_SCHED_MC
-+ /* Set up multi-core groups */
-+ for_each_cpu_mask(i, *cpu_map) {
-+ cpumask_t this_core_map = cpu_coregroup_map(i);
-+ cpus_and(this_core_map, this_core_map, *cpu_map);
-+ if (i != first_cpu(this_core_map))
-+ continue;
-+ init_sched_build_groups(this_core_map, cpu_map, &cpu_to_core_group);
-+ }
-+#endif
-+
-+
-+ /* Set up physical groups */
-+ for (i = 0; i < MAX_NUMNODES; i++) {
-+ cpumask_t nodemask = node_to_cpumask(i);
-+
-+ cpus_and(nodemask, nodemask, *cpu_map);
-+ if (cpus_empty(nodemask))
-+ continue;
-+
-+ init_sched_build_groups(nodemask, cpu_map, &cpu_to_phys_group);
-+ }
-+
-+#ifdef CONFIG_NUMA
-+ /* Set up node groups */
-+ if (sd_allnodes)
-+ init_sched_build_groups(*cpu_map, cpu_map, &cpu_to_allnodes_group);
-+
-+ for (i = 0; i < MAX_NUMNODES; i++) {
-+ /* Set up node groups */
-+ struct sched_group *sg, *prev;
-+ cpumask_t nodemask = node_to_cpumask(i);
-+ cpumask_t domainspan;
-+ cpumask_t covered = CPU_MASK_NONE;
-+ int j;
-+
-+ cpus_and(nodemask, nodemask, *cpu_map);
-+ if (cpus_empty(nodemask)) {
-+ sched_group_nodes[i] = NULL;
-+ continue;
-+ }
-+
-+ domainspan = sched_domain_node_span(i);
-+ cpus_and(domainspan, domainspan, *cpu_map);
-+
-+ sg = kmalloc_node(sizeof(struct sched_group), GFP_KERNEL, i);
-+ if (!sg) {
-+ printk(KERN_WARNING "Can not alloc domain group for "
-+ "node %d\n", i);
-+ goto error;
-+ }
-+ sched_group_nodes[i] = sg;
-+ for_each_cpu_mask(j, nodemask) {
-+ struct sched_domain *sd;
-+ sd = &per_cpu(node_domains, j);
-+ sd->groups = sg;
-+ }
-+ sg->__cpu_power = 0;
-+ sg->cpumask = nodemask;
-+ sg->next = sg;
-+ cpus_or(covered, covered, nodemask);
-+ prev = sg;
-+
-+ for (j = 0; j < MAX_NUMNODES; j++) {
-+ cpumask_t tmp, notcovered;
-+ int n = (i + j) % MAX_NUMNODES;
-+
-+ cpus_complement(notcovered, covered);
-+ cpus_and(tmp, notcovered, *cpu_map);
-+ cpus_and(tmp, tmp, domainspan);
-+ if (cpus_empty(tmp))
-+ break;
-+
-+ nodemask = node_to_cpumask(n);
-+ cpus_and(tmp, tmp, nodemask);
-+ if (cpus_empty(tmp))
-+ continue;
-+
-+ sg = kmalloc_node(sizeof(struct sched_group),
-+ GFP_KERNEL, i);
-+ if (!sg) {
-+ printk(KERN_WARNING
-+ "Can not alloc domain group for node %d\n", j);
-+ goto error;
-+ }
-+ sg->__cpu_power = 0;
-+ sg->cpumask = tmp;
-+ sg->next = prev->next;
-+ cpus_or(covered, covered, tmp);
-+ prev->next = sg;
-+ prev = sg;
-+ }
-+ }
-+#endif
-+
-+ /* Calculate CPU power for physical packages and nodes */
-+#ifdef CONFIG_SCHED_SMT
-+ for_each_cpu_mask(i, *cpu_map) {
-+ sd = &per_cpu(cpu_domains, i);
-+ init_sched_groups_power(i, sd);
-+ }
-+#endif
-+#ifdef CONFIG_SCHED_MC
-+ for_each_cpu_mask(i, *cpu_map) {
-+ sd = &per_cpu(core_domains, i);
-+ init_sched_groups_power(i, sd);
-+ }
-+#endif
-+
-+ for_each_cpu_mask(i, *cpu_map) {
-+ sd = &per_cpu(phys_domains, i);
-+ init_sched_groups_power(i, sd);
-+ }
-+
-+#ifdef CONFIG_NUMA
-+ for (i = 0; i < MAX_NUMNODES; i++)
-+ init_numa_sched_groups_power(sched_group_nodes[i]);
-+
-+ if (sd_allnodes) {
-+ struct sched_group *sg;
-+
-+ cpu_to_allnodes_group(first_cpu(*cpu_map), cpu_map, &sg);
-+ init_numa_sched_groups_power(sg);
-+ }
-+#endif
-+
-+ /* Attach the domains */
-+ for_each_cpu_mask(i, *cpu_map) {
-+ struct sched_domain *sd;
-+#ifdef CONFIG_SCHED_SMT
-+ sd = &per_cpu(cpu_domains, i);
-+#elif defined(CONFIG_SCHED_MC)
-+ sd = &per_cpu(core_domains, i);
-+#else
-+ sd = &per_cpu(phys_domains, i);
-+#endif
-+ cpu_attach_domain(sd, i);
-+ }
-+ /*
-+ * Tune cache-hot values:
-+ */
-+ calibrate_migration_costs(cpu_map);
-+
-+ return 0;
-+
-+#ifdef CONFIG_NUMA
-+error:
-+ free_sched_groups(cpu_map);
-+ return -ENOMEM;
-+#endif
-+}
-+/*
-+ * Set up scheduler domains and groups. Callers must hold the hotplug lock.
-+ */
-+static int arch_init_sched_domains(const cpumask_t *cpu_map)
-+{
-+ cpumask_t cpu_default_map;
-+ int err;
-+
-+ /*
-+ * Setup mask for cpus without special case scheduling requirements.
-+ * For now this just excludes isolated cpus, but could be used to
-+ * exclude other special cases in the future.
-+ */
-+ cpus_andnot(cpu_default_map, *cpu_map, cpu_isolated_map);
-+
-+ err = build_sched_domains(&cpu_default_map);
-+
-+ return err;
-+}
-+
-+static void arch_destroy_sched_domains(const cpumask_t *cpu_map)
-+{
-+ free_sched_groups(cpu_map);
-+}
-+
-+/*
-+ * Detach sched domains from a group of cpus specified in cpu_map
-+ * These cpus will now be attached to the NULL domain
-+ */
-+static void detach_destroy_domains(const cpumask_t *cpu_map)
-+{
-+ int i;
-+
-+ for_each_cpu_mask(i, *cpu_map)
-+ cpu_attach_domain(NULL, i);
-+ synchronize_sched();
-+ arch_destroy_sched_domains(cpu_map);
-+}
-+
-+/*
-+ * Partition sched domains as specified by the cpumasks below.
-+ * This attaches all cpus from the cpumasks to the NULL domain,
-+ * waits for a RCU quiescent period, recalculates sched
-+ * domain information and then attaches them back to the
-+ * correct sched domains
-+ * Call with hotplug lock held
-+ */
-+int partition_sched_domains(cpumask_t *partition1, cpumask_t *partition2)
-+{
-+ cpumask_t change_map;
-+ int err = 0;
-+
-+ cpus_and(*partition1, *partition1, cpu_online_map);
-+ cpus_and(*partition2, *partition2, cpu_online_map);
-+ cpus_or(change_map, *partition1, *partition2);
-+
-+ /* Detach sched domains from all of the affected cpus */
-+ detach_destroy_domains(&change_map);
-+ if (!cpus_empty(*partition1))
-+ err = build_sched_domains(partition1);
-+ if (!err && !cpus_empty(*partition2))
-+ err = build_sched_domains(partition2);
-+
-+ return err;
-+}
-+
-+#if defined(CONFIG_SCHED_MC) || defined(CONFIG_SCHED_SMT)
-+int arch_reinit_sched_domains(void)
-+{
-+ int err;
-+
-+ mutex_lock(&sched_hotcpu_mutex);
-+ detach_destroy_domains(&cpu_online_map);
-+ err = arch_init_sched_domains(&cpu_online_map);
-+ mutex_unlock(&sched_hotcpu_mutex);
-+
-+ return err;
-+}
-+
-+static ssize_t sched_power_savings_store(const char *buf, size_t count, int smt)
-+{
-+ int ret;
-+
-+ if (buf[0] != '0' && buf[0] != '1')
-+ return -EINVAL;
-+
-+ if (smt)
-+ sched_smt_power_savings = (buf[0] == '1');
-+ else
-+ sched_mc_power_savings = (buf[0] == '1');
-+
-+ ret = arch_reinit_sched_domains();
-+
-+ return ret ? ret : count;
-+}
-+
-+int sched_create_sysfs_power_savings_entries(struct sysdev_class *cls)
-+{
-+ int err = 0;
-+
-+#ifdef CONFIG_SCHED_SMT
-+ if (smt_capable())
-+ err = sysfs_create_file(&cls->kset.kobj,
-+ &attr_sched_smt_power_savings.attr);
-+#endif
-+#ifdef CONFIG_SCHED_MC
-+ if (!err && mc_capable())
-+ err = sysfs_create_file(&cls->kset.kobj,
-+ &attr_sched_mc_power_savings.attr);
-+#endif
-+ return err;
-+}
-+#endif
-+
-+#ifdef CONFIG_SCHED_MC
-+static ssize_t sched_mc_power_savings_show(struct sys_device *dev, char *page)
-+{
-+ return sprintf(page, "%u\n", sched_mc_power_savings);
-+}
-+static ssize_t sched_mc_power_savings_store(struct sys_device *dev,
-+ const char *buf, size_t count)
-+{
-+ return sched_power_savings_store(buf, count, 0);
-+}
-+SYSDEV_ATTR(sched_mc_power_savings, 0644, sched_mc_power_savings_show,
-+ sched_mc_power_savings_store);
-+#endif
-+
-+#ifdef CONFIG_SCHED_SMT
-+static ssize_t sched_smt_power_savings_show(struct sys_device *dev, char *page)
-+{
-+ return sprintf(page, "%u\n", sched_smt_power_savings);
-+}
-+static ssize_t sched_smt_power_savings_store(struct sys_device *dev,
-+ const char *buf, size_t count)
-+{
-+ return sched_power_savings_store(buf, count, 1);
-+}
-+SYSDEV_ATTR(sched_smt_power_savings, 0644, sched_smt_power_savings_show,
-+ sched_smt_power_savings_store);
-+#endif
-+
-+/*
-+ * Force a reinitialization of the sched domains hierarchy. The domains
-+ * and groups cannot be updated in place without racing with the balancing
-+ * code, so we temporarily attach all running cpus to the NULL domain
-+ * which will prevent rebalancing while the sched domains are recalculated.
-+ */
-+static int update_sched_domains(struct notifier_block *nfb,
-+ unsigned long action, void *hcpu)
-+{
-+ switch (action) {
-+ case CPU_UP_PREPARE:
-+ case CPU_UP_PREPARE_FROZEN:
-+ case CPU_DOWN_PREPARE:
-+ case CPU_DOWN_PREPARE_FROZEN:
-+ detach_destroy_domains(&cpu_online_map);
-+ return NOTIFY_OK;
-+
-+ case CPU_UP_CANCELED:
-+ case CPU_UP_CANCELED_FROZEN:
-+ case CPU_DOWN_FAILED:
-+ case CPU_DOWN_FAILED_FROZEN:
-+ case CPU_ONLINE:
-+ case CPU_ONLINE_FROZEN:
-+ case CPU_DEAD:
-+ case CPU_DEAD_FROZEN:
-+ /*
-+ * Fall through and re-initialise the domains.
-+ */
-+ break;
-+ default:
-+ return NOTIFY_DONE;
-+ }
-+
-+ /* The hotplug lock is already held by cpu_up/cpu_down */
-+ arch_init_sched_domains(&cpu_online_map);
-+
-+ return NOTIFY_OK;
-+}
-+
-+void __init sched_init_smp(void)
-+{
-+ cpumask_t non_isolated_cpus;
-+
-+ mutex_lock(&sched_hotcpu_mutex);
-+ arch_init_sched_domains(&cpu_online_map);
-+ cpus_andnot(non_isolated_cpus, cpu_possible_map, cpu_isolated_map);
-+ if (cpus_empty(non_isolated_cpus))
-+ cpu_set(smp_processor_id(), non_isolated_cpus);
-+ mutex_unlock(&sched_hotcpu_mutex);
-+ /* XXX: Theoretical race here - CPU may be hotplugged now */
-+ hotcpu_notifier(update_sched_domains, 0);
-+
-+ /* Move init over to a non-isolated CPU */
-+ if (set_cpus_allowed(current, non_isolated_cpus) < 0)
-+ BUG();
-+}
-+#else
-+void __init sched_init_smp(void)
-+{
-+}
-+#endif /* CONFIG_SMP */
-+
-+int in_sched_functions(unsigned long addr)
-+{
-+ /* Linker adds these: start and end of __sched functions */
-+ extern char __sched_text_start[], __sched_text_end[];
-+
-+ return in_lock_functions(addr) ||
-+ (addr >= (unsigned long)__sched_text_start
-+ && addr < (unsigned long)__sched_text_end);
-+}
-+
-+void __init sched_init(void)
-+{
-+ int i, j, k;
-+ int highest_cpu = 0;
-+
-+ for_each_possible_cpu(i) {
-+ struct prio_array *array;
-+ struct rq *rq;
-+
-+ rq = cpu_rq(i);
-+ spin_lock_init(&rq->lock);
-+ lockdep_set_class(&rq->lock, &rq->rq_lock_key);
-+ rq->nr_running = 0;
-+ rq->active = rq->arrays;
-+ rq->expired = rq->arrays + 1;
-+ rq->best_expired_prio = MAX_PRIO;
-+
-+#ifdef CONFIG_SMP
-+ rq->sd = NULL;
-+ for (j = 1; j < 3; j++)
-+ rq->cpu_load[j] = 0;
-+ rq->active_balance = 0;
-+ rq->push_cpu = 0;
-+ rq->cpu = i;
-+ rq->migration_thread = NULL;
-+ INIT_LIST_HEAD(&rq->migration_queue);
-+#endif
-+ atomic_set(&rq->nr_iowait, 0);
-+#ifdef CONFIG_VSERVER_HARDCPU
-+ INIT_LIST_HEAD(&rq->hold_queue);
-+ rq->nr_onhold = 0;
-+#endif
-+ for (j = 0; j < 2; j++) {
-+ array = rq->arrays + j;
-+ for (k = 0; k < MAX_PRIO; k++) {
-+ INIT_LIST_HEAD(array->queue + k);
-+ __clear_bit(k, array->bitmap);
-+ }
-+ // delimiter for bitsearch
-+ __set_bit(MAX_PRIO, array->bitmap);
-+ }
-+ highest_cpu = i;
-+ }
-+
-+ set_load_weight(&init_task);
-+
-+#ifdef CONFIG_SMP
-+ nr_cpu_ids = highest_cpu + 1;
-+ open_softirq(SCHED_SOFTIRQ, run_rebalance_domains, NULL);
-+#endif
-+
-+#ifdef CONFIG_RT_MUTEXES
-+ plist_head_init(&init_task.pi_waiters, &init_task.pi_lock);
-+#endif
-+
-+ /*
-+ * The boot idle thread does lazy MMU switching as well:
-+ */
-+ atomic_inc(&init_mm.mm_count);
-+ enter_lazy_tlb(&init_mm, current);
-+
-+ /*
-+ * Make us the idle thread. Technically, schedule() should not be
-+ * called from this thread, however somewhere below it might be,
-+ * but because we are the idle thread, we just pick up running again
-+ * when this runqueue becomes "idle".
-+ */
-+ init_idle(current, smp_processor_id());
-+}
-+
-+#ifdef CONFIG_DEBUG_SPINLOCK_SLEEP
-+void __might_sleep(char *file, int line)
-+{
-+#ifdef in_atomic
-+ static unsigned long prev_jiffy; /* ratelimiting */
-+
-+ if ((in_atomic() || irqs_disabled()) &&
-+ system_state == SYSTEM_RUNNING && !oops_in_progress) {
-+ if (time_before(jiffies, prev_jiffy + HZ) && prev_jiffy)
-+ return;
-+ prev_jiffy = jiffies;
-+ printk(KERN_ERR "BUG: sleeping function called from invalid"
-+ " context at %s:%d\n", file, line);
-+ printk("in_atomic():%d, irqs_disabled():%d\n",
-+ in_atomic(), irqs_disabled());
-+ debug_show_held_locks(current);
-+ if (irqs_disabled())
-+ print_irqtrace_events(current);
-+ dump_stack();
-+ }
-+#endif
-+}
-+EXPORT_SYMBOL(__might_sleep);
-+#endif
-+
-+#ifdef CONFIG_MAGIC_SYSRQ
-+void normalize_rt_tasks(void)
-+{
-+ struct prio_array *array;
-+ struct task_struct *g, *p;
-+ unsigned long flags;
-+ struct rq *rq;
-+
-+ read_lock_irq(&tasklist_lock);
-+
-+ do_each_thread(g, p) {
-+ if (!rt_task(p))
-+ continue;
-+
-+ spin_lock_irqsave(&p->pi_lock, flags);
-+ rq = __task_rq_lock(p);
-+
-+ array = p->array;
-+ if (array)
-+ deactivate_task(p, task_rq(p));
-+ __setscheduler(p, SCHED_NORMAL, 0);
-+ if (array) {
-+ vx_activate_task(p);
-+ __activate_task(p, task_rq(p));
-+ resched_task(rq->curr);
-+ }
-+
-+ __task_rq_unlock(rq);
-+ spin_unlock_irqrestore(&p->pi_lock, flags);
-+ } while_each_thread(g, p);
-+
-+ read_unlock_irq(&tasklist_lock);
-+}
-+
-+#endif /* CONFIG_MAGIC_SYSRQ */
-+
-+#ifdef CONFIG_IA64
-+/*
-+ * These functions are only useful for the IA64 MCA handling.
-+ *
-+ * They can only be called when the whole system has been
-+ * stopped - every CPU needs to be quiescent, and no scheduling
-+ * activity can take place. Using them for anything else would
-+ * be a serious bug, and as a result, they aren't even visible
-+ * under any other configuration.
-+ */
-+
-+/**
-+ * curr_task - return the current task for a given cpu.
-+ * @cpu: the processor in question.
-+ *
-+ * ONLY VALID WHEN THE WHOLE SYSTEM IS STOPPED!
-+ */
-+struct task_struct *curr_task(int cpu)
-+{
-+ return cpu_curr(cpu);
-+}
-+
-+/**
-+ * set_curr_task - set the current task for a given cpu.
-+ * @cpu: the processor in question.
-+ * @p: the task pointer to set.
-+ *
-+ * Description: This function must only be used when non-maskable interrupts
-+ * are serviced on a separate stack. It allows the architecture to switch the
-+ * notion of the current task on a cpu in a non-blocking manner. This function
-+ * must be called with all CPU's synchronized, and interrupts disabled, the
-+ * and caller must save the original value of the current task (see
-+ * curr_task() above) and restore that value before reenabling interrupts and
-+ * re-starting the system.
-+ *
-+ * ONLY VALID WHEN THE WHOLE SYSTEM IS STOPPED!
-+ */
-+void set_curr_task(int cpu, struct task_struct *p)
-+{
-+ cpu_curr(cpu) = p;
-+}
-+
-+#endif
-diff -Nurb --exclude='*.swp' --exclude=tags --exclude='*.patch' --exclude='*.diff' linux-2.6.22-580/kernel/timer.S linux-2.6.22-590/kernel/timer.S
---- linux-2.6.22-580/kernel/timer.S 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.22-590/kernel/timer.S 2009-02-18 09:57:23.000000000 -0500
-@@ -0,0 +1,32311 @@
-+ .file "timer.c"
-+ .section .debug_abbrev,"",@progbits
-+.Ldebug_abbrev0:
-+ .section .debug_info,"",@progbits
-+.Ldebug_info0:
-+ .section .debug_line,"",@progbits
-+.Ldebug_line0:
-+ .text
-+.Ltext0:
-+.globl __round_jiffies
-+ .type __round_jiffies, @function
-+__round_jiffies:
-+.LFB883:
-+ .file 1 "kernel/timer.c"
-+ .loc 1 138 0
-+.LVL0:
-+ pushl %edi
-+.LCFI0:
-+ pushl %esi
-+.LCFI1:
-+ .loc 1 150 0
-+ leal (%edx,%edx,2), %esi
-+ .loc 1 152 0
-+ movl $250, %edx
-+.LVL1:
-+ .loc 1 150 0
-+ leal (%eax,%esi), %ecx
-+.LVL2:
-+ .loc 1 152 0
-+ movl %edx, %edi
-+ .loc 1 138 0
-+ pushl %ebx
-+.LCFI2:
-+ .loc 1 152 0
-+ xorl %edx, %edx
-+ .loc 1 138 0
-+ movl %eax, %ebx
-+ .loc 1 152 0
-+ movl %ecx, %eax
-+.LVL3:
-+ divl %edi
-+ .loc 1 138 0
-+ subl $4, %esp
-+.LCFI3:
-+ .loc 1 160 0
-+ cmpl $61, %edx
-+ jg .L2
-+ .loc 1 161 0
-+ movl %ecx, %eax
-+.LVL4:
-+ subl %edx, %eax
-+ jmp .L4
-+.LVL5:
-+.L2:
-+ .loc 1 163 0
-+ subl %edx, %ecx
-+ leal 250(%ecx), %eax
-+.LVL6:
-+.L4:
-+ .loc 1 166 0
-+ movl %eax, %edx
-+.LVL7:
-+ .loc 1 168 0
-+ movl jiffies, %eax
-+.LVL8:
-+ .loc 1 166 0
-+ subl %esi, %edx
-+ .loc 1 168 0
-+ cmpl %eax, %edx
-+ cmova %edx, %ebx
-+ .loc 1 171 0
-+ popl %edx
-+.LVL9:
-+ movl %ebx, %eax
-+ popl %ebx
-+.LVL10:
-+ popl %esi
-+ popl %edi
-+ ret
-+.LFE883:
-+ .size __round_jiffies, .-__round_jiffies
-+.globl __round_jiffies_relative
-+ .type __round_jiffies_relative, @function
-+__round_jiffies_relative:
-+.LFB884:
-+ .loc 1 195 0
-+.LVL11:
-+ .loc 1 202 0
-+ movl jiffies, %ecx
-+ addl %ecx, %eax
-+.LVL12:
-+ call __round_jiffies
-+.LVL13:
-+ movl jiffies, %edx
-+ subl %edx, %eax
-+ .loc 1 203 0
-+ ret
-+.LFE884:
-+ .size __round_jiffies_relative, .-__round_jiffies_relative
-+.globl round_jiffies
-+ .type round_jiffies, @function
-+round_jiffies:
-+.LFB885:
-+ .loc 1 222 0
-+.LVL14:
-+.LBB179:
-+ .loc 1 223 0
-+#APP
-+ movl %fs:per_cpu__cpu_number,%edx
-+.LVL15:
-+#NO_APP
-+.LBE179:
-+ jmp __round_jiffies
-+.LVL16:
-+.LFE885:
-+ .size round_jiffies, .-round_jiffies
-+.globl round_jiffies_relative
-+ .type round_jiffies_relative, @function
-+round_jiffies_relative:
-+.LFB886:
-+ .loc 1 243 0
-+.LVL17:
-+.LBB180:
-+ .loc 1 244 0
-+#APP
-+ movl %fs:per_cpu__cpu_number,%edx
-+.LVL18:
-+#NO_APP
-+.LBE180:
-+ jmp __round_jiffies_relative
-+.LVL19:
-+.LFE886:
-+ .size round_jiffies_relative, .-round_jiffies_relative
-+ .type internal_add_timer, @function
-+internal_add_timer:
-+.LFB888:
-+ .loc 1 258 0
-+.LVL20:
-+ pushl %esi
-+.LCFI4:
-+ pushl %ebx
-+.LCFI5:
-+ .loc 1 258 0
-+ movl %eax, %ebx
-+ .loc 1 259 0
-+ movl 8(%edx), %eax
-+.LVL21:
-+ .loc 1 260 0
-+ movl 8(%ebx), %esi
-+ movl %eax, %ecx
-+.LVL22:
-+ subl %esi, %ecx
-+ .loc 1 263 0
-+ cmpl $255, %ecx
-+ jbe .L28
-+ .loc 1 266 0
-+ cmpl $16383, %ecx
-+ ja .L19
-+.LBB181:
-+ .loc 1 268 0
-+ shrl $5, %eax
-+ andl $504, %eax
-+ leal 2060(%eax,%ebx), %ecx
-+.LVL23:
-+ jmp .L18
-+.LVL24:
-+.L19:
-+.LBE181:
-+ .loc 1 269 0
-+ cmpl $1048575, %ecx
-+ ja .L21
-+.LBB182:
-+ .loc 1 271 0
-+ shrl $11, %eax
-+ andl $504, %eax
-+ leal 2572(%eax,%ebx), %ecx
-+.LVL25:
-+ jmp .L18
-+.LVL26:
-+.L21:
-+.LBE182:
-+ .loc 1 272 0
-+ cmpl $67108863, %ecx
-+ ja .L23
-+.LBB183:
-+ .loc 1 274 0
-+ shrl $17, %eax
-+ andl $504, %eax
-+ leal 3084(%eax,%ebx), %ecx
-+.LVL27:
-+ jmp .L18
-+.LVL28:
-+.L23:
-+.LBE183:
-+ .loc 1 275 0
-+ testl %ecx, %ecx
-+ jns .L25
-+ .loc 1 280 0
-+ movl %esi, %eax
-+.LVL29:
-+.L28:
-+.LVL30:
-+ andl $255, %eax
-+ leal 12(%ebx,%eax,8), %ecx
-+.LVL31:
-+ jmp .L18
-+.LVL32:
-+.L25:
-+.LBB184:
-+ .loc 1 291 0
-+ shrl $26, %eax
-+ leal 3596(%ebx,%eax,8), %ecx
-+.LVL33:
-+.L18:
-+.LBE184:
-+.LBB185:
-+.LBB186:
-+ .file 2 "include/linux/list.h"
-+ .loc 2 86 0
-+ movl 4(%ecx), %eax
-+.LVL34:
-+.LBB187:
-+.LBB188:
-+ .loc 2 48 0
-+ movl %ecx, (%edx)
-+ .loc 2 47 0
-+ movl %edx, 4(%ecx)
-+ .loc 2 50 0
-+ movl %edx, (%eax)
-+.LBE188:
-+.LBE187:
-+.LBE186:
-+.LBE185:
-+ .loc 1 297 0
-+ popl %ebx
-+.LVL35:
-+.LBB189:
-+.LBB190:
-+.LBB191:
-+.LBB192:
-+ .loc 2 49 0
-+ movl %eax, 4(%edx)
-+.LBE192:
-+.LBE191:
-+.LBE190:
-+.LBE189:
-+ .loc 1 297 0
-+ popl %esi
-+ ret
-+.LFE888:
-+ .size internal_add_timer, .-internal_add_timer
-+.globl init_timer
-+ .type init_timer, @function
-+init_timer:
-+.LFB889:
-+ .loc 1 319 0
-+.LVL36:
-+ .loc 1 320 0
-+ movl $0, (%eax)
-+.LBB193:
-+ .loc 1 321 0
-+ movl $per_cpu__tvec_bases, %edx
-+.LBB194:
-+#APP
-+ movl %fs:per_cpu__this_cpu_off,%ecx
-+.LVL37:
-+#NO_APP
-+.LBE194:
-+.LBE193:
-+ movl (%edx,%ecx), %edx
-+ movl %edx, 20(%eax)
-+ .loc 1 327 0
-+ ret
-+.LFE889:
-+ .size init_timer, .-init_timer
-+.globl init_timer_deferrable
-+ .type init_timer_deferrable, @function
-+init_timer_deferrable:
-+.LFB890:
-+ .loc 1 331 0
-+.LVL38:
-+ pushl %ebx
-+.LCFI6:
-+ .loc 1 331 0
-+ movl %eax, %ebx
-+ .loc 1 332 0
-+ call init_timer
-+.LVL39:
-+.LBB197:
-+.LBB198:
-+ .loc 1 106 0
-+ orl $1, 20(%ebx)
-+.LBE198:
-+.LBE197:
-+ .loc 1 334 0
-+ popl %ebx
-+.LVL40:
-+ ret
-+.LFE890:
-+ .size init_timer_deferrable, .-init_timer_deferrable
-+ .section .rodata.str1.1,"aMS",@progbits,1
-+.LC0:
-+ .string "kernel/timer.c"
-+ .text
-+ .type cascade, @function
-+cascade:
-+.LFB899:
-+ .loc 1 581 0
-+.LVL41:
-+ pushl %edi
-+.LCFI7:
-+ movl %eax, %edi
-+ pushl %esi
-+.LCFI8:
-+ movl %ecx, %esi
-+ pushl %ebx
-+.LCFI9:
-+ subl $8, %esp
-+.LCFI10:
-+ .loc 1 581 0
-+ leal (%edx,%ecx,8), %eax
-+.LVL42:
-+.LBB199:
-+.LBB200:
-+.LBB201:
-+.LBB202:
-+ .loc 2 218 0
-+ movl (%eax), %edx
-+.LVL43:
-+ .loc 2 219 0
-+ movl %esp, 4(%edx)
-+ .loc 2 218 0
-+ movl %edx, (%esp)
-+ .loc 2 220 0
-+ movl 4(%eax), %edx
-+ .loc 2 221 0
-+ movl %esp, (%edx)
-+.LBE202:
-+.LBE201:
-+.LBB203:
-+.LBB204:
-+ .loc 2 32 0
-+ movl %eax, (%eax)
-+.LBE204:
-+.LBE203:
-+.LBB205:
-+.LBB206:
-+ .loc 2 220 0
-+ movl %edx, 4(%esp)
-+.LBE206:
-+.LBE205:
-+.LBE200:
-+.LBE199:
-+.LBB207:
-+ .loc 1 592 0
-+ movl (%esp), %edx
-+.LVL44:
-+.LBE207:
-+.LBB208:
-+.LBB209:
-+.LBB210:
-+.LBB211:
-+ .loc 2 33 0
-+ movl %eax, 4(%eax)
-+.LBE211:
-+.LBE210:
-+.LBE209:
-+.LBE208:
-+.LBB212:
-+ .loc 1 592 0
-+ movl (%edx), %ebx
-+.LVL45:
-+ jmp .L34
-+.L35:
-+.LBE212:
-+ .loc 1 593 0
-+ movl 20(%edx), %eax
-+.LVL46:
-+ andl $-2, %eax
-+ cmpl %edi, %eax
-+ je .L36
-+#APP
-+ 1: ud2
-+.pushsection __bug_table,"a"
-+2: .long 1b, .LC0
-+ .word 593, 0
-+ .org 2b+12
-+.popsection
-+#NO_APP
-+.L38:
-+ jmp .L38
-+.L36:
-+ .loc 1 594 0
-+ movl %edi, %eax
-+ call internal_add_timer
-+.LVL47:
-+.LBB213:
-+ .loc 1 592 0
-+ movl %ebx, %edx
-+.LVL48:
-+ movl (%ebx), %ebx
-+.LVL49:
-+.L34:
-+.LBE213:
-+ cmpl %esp, %edx
-+ jne .L35
-+.LVL50:
-+ .loc 1 598 0
-+ popl %ecx
-+.LVL51:
-+ movl %esi, %eax
-+.LVL52:
-+ popl %ebx
-+.LVL53:
-+ popl %ebx
-+ popl %esi
-+.LVL54:
-+ popl %edi
-+.LVL55:
-+ ret
-+.LFE899:
-+ .size cascade, .-cascade
-+ .section .rodata.str1.1
-+.LC1:
-+ .string "WARNING: at %s:%d %s()\n"
-+ .section .init.text,"ax",@progbits
-+ .type timer_cpu_notify, @function
-+timer_cpu_notify:
-+.LFB923:
-+ .loc 1 1336 0
-+.LVL56:
-+ pushl %ebp
-+.LCFI11:
-+ pushl %edi
-+.LCFI12:
-+ pushl %esi
-+.LCFI13:
-+ movl %ecx, %esi
-+ pushl %ebx
-+.LCFI14:
-+ subl $16, %esp
-+.LCFI15:
-+ .loc 1 1338 0
-+ cmpl $3, %edx
-+ je .L43
-+.LVL57:
-+ cmpl $19, %edx
-+ movl $1, %eax
-+.LVL58:
-+ jne .L44
-+.LVL59:
-+.L43:
-+.LBB240:
-+.LBB241:
-+ .loc 1 1238 0
-+ cmpb $0, tvec_base_done.19028(%esi)
-+ jne .L45
-+.LBB242:
-+ .loc 1 1241 0
-+ cmpb $0, boot_done.19029
-+ je .L47
-+.L48:
-+.LBB243:
-+.LBB244:
-+.LBB245:
-+ .file 3 "include/linux/slab_def.h"
-+ .loc 3 49 0
-+ movl malloc_sizes+100, %eax
-+.LVL60:
-+ movl $208, %edx
-+.LVL61:
-+ call kmem_cache_alloc
-+ movl %eax, %edi
-+.LBE245:
-+.LBE244:
-+.LBE243:
-+ .loc 1 1247 0
-+ movl $32770, %eax
-+ testl %edi, %edi
-+ je .L44
-+.LVL62:
-+ .loc 1 1251 0
-+ movl %edi, %eax
-+.LVL63:
-+ .loc 1 1245 0
-+ movl %edi, %ebx
-+.LVL64:
-+ .loc 1 1251 0
-+ andl $1, %eax
-+ je .L51
-+.LBB246:
-+ .loc 1 1252 0
-+ movl $__func__.19031, 12(%esp)
-+ movl $1252, 8(%esp)
-+ movl $.LC0, 4(%esp)
-+ movl $.LC1, (%esp)
-+ call printk
-+ call dump_stack
-+.LBE246:
-+ .loc 1 1253 0
-+ movl %edi, %eax
-+ call kfree
-+ movl $32770, %eax
-+ jmp .L44
-+.LVL65:
-+.L51:
-+.LBB247:
-+.LBB248:
-+.LBB249:
-+ .file 4 "include/asm/string.h"
-+ .loc 4 447 0
-+ movl $1056, %ecx
-+.LVL66:
-+#APP
-+ rep ; stosl
-+.LVL67:
-+#NO_APP
-+.LBE249:
-+.LBE248:
-+.LBE247:
-+.LBE242:
-+.LBE241:
-+ .loc 1 1257 0
-+ movl __per_cpu_offset(,%esi,4), %edx
-+.LBB250:
-+.LBB251:
-+.LBB252:
-+ movl $per_cpu__tvec_bases, %eax
-+.LBE252:
-+.LBE251:
-+.LBE250:
-+ movl %ebx, (%eax,%edx)
-+ jmp .L53
-+.LVL68:
-+.L47:
-+.LBB253:
-+.LBB254:
-+ .loc 1 1265 0
-+ movb $1, boot_done.19029
-+ movl $boot_tvec_bases, %ebx
-+.LVL69:
-+.L53:
-+ .loc 1 1268 0
-+ movb $1, tvec_base_done.19028(%esi)
-+ jmp .L54
-+.LVL70:
-+.L45:
-+.LBE254:
-+.LBE253:
-+ .loc 1 1270 0
-+ movl __per_cpu_offset(,%esi,4), %edx
-+.LVL71:
-+.LBB255:
-+.LBB256:
-+ movl $per_cpu__tvec_bases, %eax
-+.LVL72:
-+.LBE256:
-+.LBE255:
-+ movl (%eax,%edx), %ebx
-+.LVL73:
-+.L54:
-+ .loc 1 1273 0
-+ movl $1, (%ebx)
-+ xorl %ebp, %ebp
-+.LVL74:
-+ leal 2048(%ebx), %edx
-+.LVL75:
-+ leal 2560(%ebx), %esi
-+.LVL76:
-+ leal 3072(%ebx), %edi
-+.LVL77:
-+ leal 3584(%ebx), %ecx
-+.LVL78:
-+.L55:
-+ leal 12(%ecx), %eax
-+.LVL79:
-+.LBB257:
-+ .loc 1 1276 0
-+ incl %ebp
-+.LBB258:
-+.LBB259:
-+ .loc 2 32 0
-+ movl %eax, 1548(%edx)
-+.LBE259:
-+.LBE258:
-+ .loc 1 1276 0
-+ addl $8, %ecx
-+.LBB260:
-+.LBB261:
-+ .loc 2 33 0
-+ movl %eax, 1552(%edx)
-+.LBE261:
-+.LBE260:
-+ .loc 1 1278 0
-+ leal 12(%edi), %eax
-+.LVL80:
-+ .loc 1 1276 0
-+ addl $8, %edi
-+.LBB262:
-+.LBB263:
-+ .loc 2 32 0
-+ movl %eax, 1036(%edx)
-+ .loc 2 33 0
-+ movl %eax, 1040(%edx)
-+.LBE263:
-+.LBE262:
-+ .loc 1 1279 0
-+ leal 12(%esi), %eax
-+.LVL81:
-+ .loc 1 1276 0
-+ addl $8, %esi
-+.LBB264:
-+.LBB265:
-+ .loc 2 32 0
-+ movl %eax, 524(%edx)
-+ .loc 2 33 0
-+ movl %eax, 528(%edx)
-+.LBE265:
-+.LBE264:
-+ .loc 1 1280 0
-+ leal 12(%edx), %eax
-+.LVL82:
-+.LBB266:
-+.LBB267:
-+ .loc 2 32 0
-+ movl %eax, 12(%edx)
-+ .loc 2 33 0
-+ movl %eax, 16(%edx)
-+.LBE267:
-+.LBE266:
-+ .loc 1 1276 0
-+ addl $8, %edx
-+ cmpl $64, %ebp
-+ jne .L55
-+ xorl %ecx, %ecx
-+.LVL83:
-+ movl %ebx, %edx
-+.LVL84:
-+.L57:
-+ leal 12(%edx), %eax
-+.LVL85:
-+ .loc 1 1282 0
-+ incl %ecx
-+.LBB268:
-+.LBB269:
-+ .loc 2 32 0
-+ movl %eax, 12(%edx)
-+ .loc 2 33 0
-+ movl %eax, 16(%edx)
-+.LBE269:
-+.LBE268:
-+ .loc 1 1282 0
-+ addl $8, %edx
-+ cmpl $256, %ecx
-+ jne .L57
-+ .loc 1 1285 0
-+ movl jiffies, %eax
-+.LVL86:
-+ movl %eax, 8(%ebx)
-+ movl $1, %eax
-+.LVL87:
-+.L44:
-+.LBE257:
-+.LBE240:
-+ .loc 1 1354 0
-+ addl $16, %esp
-+ popl %ebx
-+.LVL88:
-+ popl %esi
-+.LVL89:
-+ popl %edi
-+.LVL90:
-+ popl %ebp
-+.LVL91:
-+ ret
-+.LFE923:
-+ .size timer_cpu_notify, .-timer_cpu_notify
-+.globl init_timers
-+ .type init_timers, @function
-+init_timers:
-+.LFB924:
-+ .loc 1 1362 0
-+ .loc 1 1364 0
-+ movl $3, %edx
-+ movl $timers_nb, %eax
-+.LBB273:
-+#APP
-+ movl %fs:per_cpu__cpu_number,%ecx
-+.LVL92:
-+#NO_APP
-+.LBE273:
-+ call timer_cpu_notify
-+.LVL93:
-+.LVL94:
-+ .loc 1 1368 0
-+ cmpl $32770, %eax
-+ jne .L65
-+#APP
-+ 1: ud2
-+.pushsection __bug_table,"a"
-+2: .long 1b, .LC0
-+ .word 1368, 0
-+ .org 2b+12
-+.popsection
-+#NO_APP
-+.L67:
-+ jmp .L67
-+.L65:
-+ .loc 1 1369 0
-+ movl $timers_nb, %eax
-+.LVL95:
-+ call register_cpu_notifier
-+ .loc 1 1370 0
-+ xorl %ecx, %ecx
-+ movl $run_timer_softirq, %edx
-+ movl $1, %eax
-+ jmp open_softirq
-+.LFE924:
-+ .size init_timers, .-init_timers
-+ .section .rodata.str1.1
-+.LC2:
-+ .string "<4>huh, entered %p with preempt_count %08x, exited with %08x?\n"
-+ .text
-+ .type run_timer_softirq, @function
-+run_timer_softirq:
-+.LFB904:
-+ .loc 1 872 0
-+.LVL96:
-+ pushl %edi
-+.LCFI16:
-+.LBB322:
-+ .loc 1 873 0
-+ movl $per_cpu__tvec_bases, %eax
-+.LVL97:
-+.LBE322:
-+ .loc 1 872 0
-+ pushl %esi
-+.LCFI17:
-+ pushl %ebx
-+.LCFI18:
-+ subl $24, %esp
-+.LCFI19:
-+.LBB323:
-+ .loc 1 873 0
-+.LBB324:
-+#APP
-+ movl %fs:per_cpu__this_cpu_off,%edx
-+.LVL98:
-+#NO_APP
-+.LBE324:
-+.LBE323:
-+ movl (%eax,%edx), %esi
-+.LVL99:
-+ .loc 1 875 0
-+ call hrtimer_run_queues
-+.LVL100:
-+ .loc 1 877 0
-+ movl jiffies, %eax
-+ cmpl 8(%esi), %eax
-+ js .L85
-+.LBB325:
-+.LBB326:
-+ .loc 1 613 0
-+ movl %esi, %eax
-+ call _spin_lock_irq
-+ jmp .L72
-+.LVL101:
-+.L73:
-+.LBB327:
-+ .loc 1 622 0
-+ movl %ecx, %ebx
-+.LVL102:
-+ andl $255, %ebx
-+ jne .L74
-+.LBE327:
-+.LBE326:
-+ shrl $8, %ecx
-+ movl %esi, %eax
-+ andl $63, %ecx
-+ leal 2060(%esi), %edx
-+.LVL103:
-+ call cascade
-+.LBB328:
-+.LBB329:
-+ testl %eax, %eax
-+ jne .L74
-+.LBE329:
-+.LBE328:
-+ movl 8(%esi), %ecx
-+ leal 2572(%esi), %edx
-+ movl %esi, %eax
-+ shrl $14, %ecx
-+ andl $63, %ecx
-+ call cascade
-+.LBB330:
-+.LBB331:
-+ testl %eax, %eax
-+ jne .L74
-+.LBE331:
-+.LBE330:
-+ movl 8(%esi), %ecx
-+ leal 3084(%esi), %edx
-+ movl %esi, %eax
-+ shrl $20, %ecx
-+ andl $63, %ecx
-+ call cascade
-+.LBB332:
-+.LBB333:
-+ testl %eax, %eax
-+ jne .L74
-+ .loc 1 626 0
-+ movl 8(%esi), %ecx
-+ leal 3596(%esi), %edx
-+ movl %esi, %eax
-+ shrl $26, %ecx
-+ call cascade
-+.LVL104:
-+.L74:
-+ .loc 1 627 0
-+ incl 8(%esi)
-+ leal (%esi,%ebx,8), %ecx
-+.LBB334:
-+.LBB335:
-+.LBB336:
-+.LBB337:
-+ .loc 2 219 0
-+ leal 16(%esp), %ebx
-+.LVL105:
-+ .loc 2 218 0
-+ movl 12(%ecx), %eax
-+.LBE337:
-+.LBE336:
-+.LBE335:
-+.LBE334:
-+ .loc 1 627 0
-+ leal 12(%ecx), %edx
-+.LBB338:
-+.LBB339:
-+.LBB340:
-+.LBB341:
-+ .loc 2 219 0
-+ movl %ebx, 4(%eax)
-+ .loc 2 218 0
-+ movl %eax, 16(%esp)
-+ .loc 2 220 0
-+ movl 4(%edx), %eax
-+ movl %eax, 20(%esp)
-+ .loc 2 221 0
-+ movl %ebx, (%eax)
-+.LBE341:
-+.LBE340:
-+.LBB342:
-+.LBB343:
-+ .loc 2 33 0
-+ movl %edx, 4(%edx)
-+ .loc 2 32 0
-+ movl %edx, 12(%ecx)
-+ jmp .L79
-+.L80:
-+.LBE343:
-+.LBE342:
-+.LBE339:
-+.LBE338:
-+.LBB344:
-+ .loc 1 634 0
-+ movl 12(%ebx), %edi
-+ .loc 1 635 0
-+ movl 16(%ebx), %eax
-+.LVL106:
-+.LBB345:
-+.LBB346:
-+ .loc 1 253 0
-+ movl %ebx, 4(%esi)
-+.LBE346:
-+.LBE345:
-+.LBB347:
-+.LBB348:
-+ .loc 1 342 0
-+ movl (%ebx), %ecx
-+.LVL107:
-+ movl 4(%ebx), %edx
-+.LVL108:
-+.LBB349:
-+.LBB350:
-+ .loc 2 157 0
-+ movl %edx, 4(%ecx)
-+ .loc 2 158 0
-+ movl %ecx, (%edx)
-+.LBE350:
-+.LBE349:
-+ .loc 1 345 0
-+ movl $2097664, 4(%ebx)
-+ .loc 1 344 0
-+ movl $0, (%ebx)
-+.LBE348:
-+.LBE347:
-+.LBB351:
-+.LBB352:
-+ .file 5 "include/asm/spinlock.h"
-+ .loc 5 108 0
-+#APP
-+ movb $1,(%esi)
-+#NO_APP
-+.LBE352:
-+.LBE351:
-+.LBB353:
-+.LBB354:
-+.LBB355:
-+.LBB356:
-+ .file 6 "include/asm/irqflags.h"
-+ .loc 6 36 0
-+#APP
-+ sti
-+#NO_APP
-+.LBE356:
-+.LBE355:
-+.LBE354:
-+.LBE353:
-+.LBB357:
-+ .loc 1 643 0
-+ movl %esp, %edx
-+.LVL109:
-+ andl $-8192, %edx
-+ movl 20(%edx), %ebx
-+.LVL110:
-+ .loc 1 644 0
-+ call *%edi
-+.LVL111:
-+ .loc 1 645 0
-+ movl %esp, %eax
-+ andl $-8192, %eax
-+ movl 20(%eax), %eax
-+ cmpl %eax, %ebx
-+ je .L81
-+ .loc 1 646 0
-+ movl %ebx, 8(%esp)
-+ movl %edi, 4(%esp)
-+ movl %eax, 12(%esp)
-+ movl $.LC2, (%esp)
-+ call printk
-+ .loc 1 651 0
-+#APP
-+ 1: ud2
-+.pushsection __bug_table,"a"
-+2: .long 1b, .LC0
-+ .word 651, 0
-+ .org 2b+12
-+.popsection
-+#NO_APP
-+.L83:
-+ jmp .L83
-+.L81:
-+.LBE357:
-+ .loc 1 654 0
-+ movl %esi, %eax
-+ call _spin_lock_irq
-+.LVL112:
-+.L79:
-+.LBE344:
-+.LBB358:
-+.LBB359:
-+ .loc 2 300 0
-+ movl 16(%esp), %ebx
-+.LVL113:
-+.LBE359:
-+.LBE358:
-+ .loc 1 629 0
-+ leal 16(%esp), %eax
-+ cmpl %eax, %ebx
-+ jne .L80
-+.L72:
-+.LBE333:
-+ .loc 1 614 0
-+ movl jiffies, %eax
-+ movl 8(%esi), %ecx
-+ cmpl %ecx, %eax
-+ jns .L73
-+.LBB360:
-+.LBB361:
-+ .loc 1 253 0
-+ movl $0, 4(%esi)
-+.LBE361:
-+.LBE360:
-+.LBB362:
-+.LBB363:
-+ .loc 5 108 0
-+#APP
-+ movb $1,(%esi)
-+#NO_APP
-+.LBE363:
-+.LBE362:
-+.LBB364:
-+.LBB365:
-+.LBB366:
-+.LBB367:
-+ .loc 6 36 0
-+#APP
-+ sti
-+#NO_APP
-+.L85:
-+.LBE367:
-+.LBE366:
-+.LBE365:
-+.LBE364:
-+.LBE332:
-+.LBE325:
-+ .loc 1 879 0
-+ addl $24, %esp
-+ popl %ebx
-+ popl %esi
-+.LVL114:
-+ popl %edi
-+.LVL115:
-+ ret
-+.LFE904:
-+ .size run_timer_softirq, .-run_timer_softirq
-+.globl do_sysinfo
-+ .type do_sysinfo, @function
-+do_sysinfo:
-+.LFB920:
-+ .loc 1 1132 0
-+.LVL116:
-+ pushl %edi
-+.LCFI20:
-+.LBB368:
-+.LBB369:
-+.LBB370:
-+ .loc 4 447 0
-+ movl $16, %ecx
-+.LBE370:
-+.LBE369:
-+.LBE368:
-+ .loc 1 1132 0
-+ pushl %ebx
-+.LCFI21:
-+ movl %eax, %ebx
-+ subl $8, %esp
-+.LCFI22:
-+.LBB371:
-+.LBB372:
-+.LBB373:
-+ .loc 4 447 0
-+ xorl %eax, %eax
-+.LVL117:
-+ movl %ebx, %edi
-+.LVL118:
-+#APP
-+ rep ; stosl
-+.LVL119:
-+.LVL120:
-+#NO_APP
-+.L87:
-+.LBE373:
-+.LBE372:
-+.LBE371:
-+.LBB374:
-+.LBB375:
-+.LBB376:
-+ .file 7 "include/linux/seqlock.h"
-+ .loc 7 88 0
-+ movl xtime_lock, %edi
-+.LVL121:
-+ .loc 7 89 0
-+#APP
-+ 661:
-+ lock; addl $0,0(%esp)
-+662:
-+.section .altinstructions,"a"
-+ .align 4
-+ .long 661b
-+ .long 663f
-+ .byte 26
-+ .byte 662b-661b
-+ .byte 664f-663f
-+.previous
-+.section .altinstr_replacement,"ax"
-+663:
-+ lfence
-+664:
-+.previous
-+#NO_APP
-+.LBE376:
-+.LBE375:
-+ .loc 1 1150 0
-+ movl %esp, %eax
-+ call getnstimeofday
-+.LVL122:
-+ .loc 1 1152 0
-+ movl wall_to_monotonic+4, %eax
-+ .loc 1 1151 0
-+ movl wall_to_monotonic, %edx
-+ .loc 1 1152 0
-+ addl 4(%esp), %eax
-+ .loc 1 1151 0
-+ addl (%esp), %edx
-+ .loc 1 1153 0
-+ cmpl $999999999, %eax
-+ .loc 1 1151 0
-+ movl %edx, (%esp)
-+ .loc 1 1152 0
-+ movl %eax, 4(%esp)
-+ .loc 1 1153 0
-+ jle .L88
-+ .loc 1 1154 0
-+ subl $1000000000, %eax
-+ movl %eax, 4(%esp)
-+ .loc 1 1155 0
-+ leal 1(%edx), %eax
-+ movl %eax, (%esp)
-+.L88:
-+ .loc 1 1157 0
-+ xorl %eax, %eax
-+ cmpl $0, 4(%esp)
-+ setne %al
-+ addl (%esp), %eax
-+ movl %eax, (%ebx)
-+ .loc 1 1159 0
-+ movl avenrun, %eax
-+ sall $5, %eax
-+ movl %eax, 4(%ebx)
-+ .loc 1 1160 0
-+ movl avenrun+4, %eax
-+ sall $5, %eax
-+ movl %eax, 8(%ebx)
-+ .loc 1 1161 0
-+ movl avenrun+8, %eax
-+ sall $5, %eax
-+ movl %eax, 12(%ebx)
-+ .loc 1 1163 0
-+ movl nr_threads, %eax
-+ movw %ax, 40(%ebx)
-+.LBE374:
-+.LBB377:
-+.LBB378:
-+ .loc 7 103 0
-+#APP
-+ 661:
-+ lock; addl $0,0(%esp)
-+662:
-+.section .altinstructions,"a"
-+ .align 4
-+ .long 661b
-+ .long 663f
-+ .byte 26
-+ .byte 662b-661b
-+ .byte 664f-663f
-+.previous
-+.section .altinstr_replacement,"ax"
-+663:
-+ lfence
-+664:
-+.previous
-+#NO_APP
-+.LBE378:
-+.LBE377:
-+ .loc 1 1164 0
-+ movl %edi, %eax
-+ xorl xtime_lock, %edi
-+ andl $1, %eax
-+ orl %edi, %eax
-+ jne .L87
-+ .loc 1 1166 0
-+ movl %ebx, %eax
-+ call si_meminfo
-+ .loc 1 1167 0
-+ movl %ebx, %eax
-+ call si_swapinfo
-+ .loc 1 1178 0
-+ movl 16(%ebx), %eax
-+ movl 32(%ebx), %ecx
-+ leal (%eax,%ecx), %edx
-+.LVL123:
-+ .loc 1 1179 0
-+ cmpl %eax, %edx
-+ jb .L91
-+ cmpl %ecx, %edx
-+ jb .L91
-+ .loc 1 1182 0
-+ movl 52(%ebx), %eax
-+.LVL124:
-+ xorl %ecx, %ecx
-+.LVL125:
-+ jmp .L94
-+.LVL126:
-+.L95:
-+ .loc 1 1187 0
-+ leal (%edx,%edx), %edi
-+.LVL127:
-+ .loc 1 1188 0
-+ cmpl %edx, %edi
-+ jb .L91
-+ .loc 1 1184 0
-+ incl %ecx
-+ .loc 1 1185 0
-+ movl %edi, %edx
-+ shrl %eax
-+.LVL128:
-+.L94:
-+ .loc 1 1183 0
-+ cmpl $1, %eax
-+ ja .L95
-+ .loc 1 1200 0
-+ sall %cl, 16(%ebx)
-+ .loc 1 1201 0
-+ sall %cl, 20(%ebx)
-+ .loc 1 1202 0
-+ sall %cl, 24(%ebx)
-+ .loc 1 1203 0
-+ sall %cl, 28(%ebx)
-+ .loc 1 1204 0
-+ sall %cl, 32(%ebx)
-+ .loc 1 1205 0
-+ sall %cl, 36(%ebx)
-+ .loc 1 1206 0
-+ sall %cl, 44(%ebx)
-+ .loc 1 1207 0
-+ sall %cl, 48(%ebx)
-+ .loc 1 1199 0
-+ movl $1, 52(%ebx)
-+.L91:
-+ .loc 1 1211 0
-+ popl %edi
-+.LVL129:
-+ xorl %eax, %eax
-+.LVL130:
-+ popl %edx
-+.LVL131:
-+ popl %ebx
-+.LVL132:
-+ popl %edi
-+ ret
-+.LFE920:
-+ .size do_sysinfo, .-do_sysinfo
-+.globl sys_sysinfo
-+ .type sys_sysinfo, @function
-+sys_sysinfo:
-+.LFB921:
-+ .loc 1 1214 0
-+.LVL133:
-+ pushl %ebx
-+.LCFI23:
-+ subl $64, %esp
-+.LCFI24:
-+ .loc 1 1217 0
-+ movl %esp, %eax
-+ call do_sysinfo
-+ .loc 1 1219 0
-+ movl $64, %ecx
-+ movl 72(%esp), %eax
-+ movl %esp, %edx
-+ call copy_to_user
-+ cmpl $1, %eax
-+ sbbl %eax, %eax
-+ .loc 1 1223 0
-+ addl $64, %esp
-+ popl %ebx
-+ .loc 1 1219 0
-+ notl %eax
-+ andl $-14, %eax
-+ .loc 1 1223 0
-+ ret
-+.LFE921:
-+ .size sys_sysinfo, .-sys_sysinfo
-+ .type process_timeout, @function
-+process_timeout:
-+.LFB915:
-+ .loc 1 1025 0
-+.LVL134:
-+ .loc 1 1026 0
-+ jmp wake_up_process
-+.LVL135:
-+.LFE915:
-+ .size process_timeout, .-process_timeout
-+.globl sys_alarm
-+ .type sys_alarm, @function
-+sys_alarm:
-+.LFB908:
-+ .loc 1 919 0
-+.LVL136:
-+ .loc 1 919 0
-+ movl 4(%esp), %eax
-+ .loc 1 920 0
-+ jmp alarm_setitimer
-+.LFE908:
-+ .size sys_alarm, .-sys_alarm
-+.globl do_timer
-+ .type do_timer, @function
-+do_timer:
-+.LFB907:
-+ .loc 1 907 0
-+.LVL137:
-+ pushl %ebp
-+.LCFI25:
-+ .loc 1 908 0
-+ xorl %edx, %edx
-+.LVL138:
-+ .loc 1 907 0
-+ pushl %edi
-+.LCFI26:
-+ pushl %esi
-+.LCFI27:
-+ pushl %ebx
-+.LCFI28:
-+ movl %eax, %ebx
-+ subl $4, %esp
-+.LCFI29:
-+ .loc 1 908 0
-+ addl %eax, jiffies_64
-+ adcl %edx, jiffies_64+4
-+.LBB385:
-+.LBB386:
-+ .loc 1 896 0
-+ call update_wall_time
-+.LVL139:
-+.LBB387:
-+.LBB388:
-+ .loc 1 856 0
-+ movl count.18791, %eax
-+ subl %ebx, %eax
-+ .loc 1 857 0
-+ testl %eax, %eax
-+ .loc 1 856 0
-+ movl %eax, count.18791
-+ .loc 1 857 0
-+ jns .L115
-+.LBB389:
-+ .loc 1 832 0
-+ call nr_active
-+.LBE389:
-+ .loc 1 862 0
-+ movl count.18791, %esi
-+ movl avenrun, %ebx
-+.LVL140:
-+ movl avenrun+4, %ecx
-+.LVL141:
-+.LBB390:
-+.LBB391:
-+ .loc 1 832 0
-+ sall $11, %eax
-+.LBE391:
-+.LBE390:
-+ .loc 1 860 0
-+ imull $164, %eax, %edx
-+ .loc 1 861 0
-+ imull $34, %eax, %ebp
-+ .loc 1 862 0
-+ imull $11, %eax, %edi
-+ .loc 1 860 0
-+ movl %edx, (%esp)
-+ movl avenrun+8, %edx
-+.L113:
-+ .loc 1 861 0
-+ imull $2014, %ecx, %eax
-+.LVL142:
-+ .loc 1 860 0
-+ imull $1884, %ebx, %ebx
-+ .loc 1 861 0
-+ leal (%eax,%ebp), %ecx
-+ .loc 1 862 0
-+ imull $2037, %edx, %eax
-+ .loc 1 860 0
-+ addl (%esp), %ebx
-+ .loc 1 861 0
-+ shrl $11, %ecx
-+ .loc 1 862 0
-+ leal (%eax,%edi), %edx
-+ .loc 1 860 0
-+ shrl $11, %ebx
-+ .loc 1 862 0
-+ shrl $11, %edx
-+ .loc 1 864 0
-+ addl $1250, %esi
-+ js .L113
-+ movl %edx, avenrun+8
-+ movl %ecx, avenrun+4
-+ movl %ebx, avenrun
-+ movl %esi, count.18791
-+.LVL143:
-+.L115:
-+.LBE388:
-+.LBE387:
-+.LBE386:
-+.LBE385:
-+ .loc 1 910 0
-+ popl %ecx
-+ popl %ebx
-+.LVL144:
-+ popl %esi
-+ popl %edi
-+ popl %ebp
-+ ret
-+.LFE907:
-+ .size do_timer, .-do_timer
-+.globl run_local_timers
-+ .type run_local_timers, @function
-+run_local_timers:
-+.LFB905:
-+ .loc 1 885 0
-+ .loc 1 886 0
-+ movl $1, %eax
-+ call raise_softirq
-+ .loc 1 887 0
-+ jmp softlockup_tick
-+.LFE905:
-+ .size run_local_timers, .-run_local_timers
-+ .type lock_timer_base, @function
-+lock_timer_base:
-+.LFB892:
-+ .loc 1 363 0
-+.LVL145:
-+ pushl %ebp
-+.LCFI30:
-+ movl %edx, %ebp
-+ pushl %edi
-+.LCFI31:
-+ movl %eax, %edi
-+ pushl %esi
-+.LCFI32:
-+ pushl %ebx
-+.LCFI33:
-+.LVL146:
-+.L123:
-+.LBB392:
-+ .loc 1 367 0
-+ movl 20(%edi), %ebx
-+ .loc 1 369 0
-+ movl %ebx, %esi
-+ andl $-2, %esi
-+ je .L124
-+ .loc 1 370 0
-+ movl %esi, %eax
-+ call _spin_lock_irqsave
-+ movl %eax, (%ebp)
-+ .loc 1 371 0
-+ cmpl 20(%edi), %ebx
-+ je .L129
-+ .loc 1 374 0
-+ movl %eax, %edx
-+ movl %esi, %eax
-+ call _spin_unlock_irqrestore
-+.LVL147:
-+.L124:
-+.LBB393:
-+.LBB394:
-+ .file 8 "include/asm/processor.h"
-+ .loc 8 497 0
-+#APP
-+ rep;nop
-+#NO_APP
-+ jmp .L123
-+.LVL148:
-+.L129:
-+.LBE394:
-+.LBE393:
-+.LBE392:
-+ .loc 1 378 0
-+ popl %ebx
-+.LVL149:
-+ movl %esi, %eax
-+ popl %esi
-+.LVL150:
-+ popl %edi
-+.LVL151:
-+ popl %ebp
-+.LVL152:
-+ ret
-+.LFE892:
-+ .size lock_timer_base, .-lock_timer_base
-+.globl try_to_del_timer_sync
-+ .type try_to_del_timer_sync, @function
-+try_to_del_timer_sync:
-+.LFB897:
-+ .loc 1 527 0
-+.LVL153:
-+ pushl %esi
-+.LCFI34:
-+ .loc 1 534 0
-+ orl $-1, %esi
-+.LVL154:
-+ .loc 1 527 0
-+ pushl %ebx
-+.LCFI35:
-+ movl %eax, %ebx
-+ subl $4, %esp
-+.LCFI36:
-+ .loc 1 532 0
-+ movl %esp, %edx
-+ call lock_timer_base
-+.LVL155:
-+.LVL156:
-+ .loc 1 534 0
-+ cmpl %ebx, 4(%eax)
-+.LVL157:
-+ .loc 1 532 0
-+ movl %eax, %ecx
-+.LVL158:
-+ .loc 1 534 0
-+ je .L133
-+ .loc 1 538 0
-+ xorl %esi, %esi
-+ cmpl $0, (%ebx)
-+ je .L133
-+.LBB395:
-+.LBB396:
-+ .loc 1 342 0
-+ movl (%ebx), %edx
-+.LVL159:
-+ .loc 1 345 0
-+ movw $1, %si
-+.LVL160:
-+ .loc 1 342 0
-+ movl 4(%ebx), %eax
-+.LVL161:
-+.LBB397:
-+.LBB398:
-+ .loc 2 157 0
-+ movl %eax, 4(%edx)
-+ .loc 2 158 0
-+ movl %edx, (%eax)
-+.LBE398:
-+.LBE397:
-+ .loc 1 345 0
-+ movl $2097664, 4(%ebx)
-+ .loc 1 344 0
-+ movl $0, (%ebx)
-+.LVL162:
-+.L133:
-+.LVL163:
-+.LBE396:
-+.LBE395:
-+ .loc 1 543 0
-+ movl (%esp), %edx
-+.LVL164:
-+ movl %ecx, %eax
-+.LVL165:
-+ call _spin_unlock_irqrestore
-+.LVL166:
-+ .loc 1 546 0
-+ movl %esi, %eax
-+ popl %ebx
-+.LVL167:
-+ popl %ebx
-+ popl %esi
-+.LVL168:
-+ ret
-+.LFE897:
-+ .size try_to_del_timer_sync, .-try_to_del_timer_sync
-+.globl del_timer_sync
-+ .type del_timer_sync, @function
-+del_timer_sync:
-+.LFB898:
-+ .loc 1 568 0
-+.LVL169:
-+ pushl %ebx
-+.LCFI37:
-+ movl %eax, %ebx
-+.LVL170:
-+.L139:
-+.LBB399:
-+ .loc 1 570 0
-+ movl %ebx, %eax
-+.LVL171:
-+ call try_to_del_timer_sync
-+.LVL172:
-+ .loc 1 571 0
-+ testl %eax, %eax
-+ jns .L143
-+.LBB400:
-+.LBB401:
-+ .loc 8 497 0
-+#APP
-+ rep;nop
-+#NO_APP
-+ jmp .L139
-+.L143:
-+.LBE401:
-+.LBE400:
-+.LBE399:
-+ .loc 1 575 0
-+ popl %ebx
-+.LVL173:
-+ ret
-+.LFE898:
-+ .size del_timer_sync, .-del_timer_sync
-+.globl __mod_timer
-+ .type __mod_timer, @function
-+__mod_timer:
-+.LFB893:
-+ .loc 1 381 0
-+.LVL174:
-+ pushl %ebp
-+.LCFI38:
-+ movl %edx, %ebp
-+ pushl %edi
-+.LCFI39:
-+ pushl %esi
-+.LCFI40:
-+ pushl %ebx
-+.LCFI41:
-+ movl %eax, %ebx
-+ subl $8, %esp
-+.LCFI42:
-+ .loc 1 387 0
-+ cmpl $0, 12(%eax)
-+ jne .L145
-+.LVL175:
-+#APP
-+ 1: ud2
-+.pushsection __bug_table,"a"
-+2: .long 1b, .LC0
-+ .word 387, 0
-+ .org 2b+12
-+.popsection
-+#NO_APP
-+.L147:
-+ jmp .L147
-+.L145:
-+ .loc 1 389 0
-+ leal 4(%esp), %edx
-+ call lock_timer_base
-+.LVL176:
-+ .loc 1 391 0
-+ cmpl $0, (%ebx)
-+ .loc 1 389 0
-+ movl %eax, %esi
-+.LVL177:
-+ .loc 1 391 0
-+ movl $0, (%esp)
-+.LVL178:
-+ je .L150
-+.LBB402:
-+.LBB403:
-+ .loc 1 342 0
-+ movl 4(%ebx), %eax
-+.LVL179:
-+ movl (%ebx), %edx
-+.LVL180:
-+.LBB404:
-+.LBB405:
-+ .loc 2 157 0
-+ movl %eax, 4(%edx)
-+ .loc 2 158 0
-+ movl %edx, (%eax)
-+.LBE405:
-+.LBE404:
-+ .loc 1 345 0
-+ movl $2097664, 4(%ebx)
-+ movl $1, (%esp)
-+.L150:
-+.LBE403:
-+.LBE402:
-+.LBB406:
-+.LBB407:
-+ .loc 1 396 0
-+#APP
-+ movl %fs:per_cpu__this_cpu_off,%edx
-+.LVL181:
-+#NO_APP
-+.LBE407:
-+ movl $per_cpu__tvec_bases, %eax
-+.LVL182:
-+.LBE406:
-+ movl (%eax,%edx), %edi
-+.LVL183:
-+ .loc 1 398 0
-+ cmpl %edi, %esi
-+ je .L151
-+ .loc 1 406 0
-+ cmpl %ebx, 4(%esi)
-+ je .L151
-+.LBB408:
-+.LBB409:
-+ .loc 1 113 0
-+ andl $1, 20(%ebx)
-+.LBE409:
-+.LBE408:
-+.LBB410:
-+.LBB411:
-+ .loc 5 108 0
-+#APP
-+ movb $1,(%esi)
-+#NO_APP
-+.LBE411:
-+.LBE410:
-+ .loc 1 411 0
-+ movl %edi, %eax
-+.LBB412:
-+.LBB413:
-+ .loc 1 113 0
-+ movl %edi, %esi
-+.LBE413:
-+.LBE412:
-+ .loc 1 411 0
-+ call _spin_lock
-+.LVL184:
-+.LBB414:
-+.LBB415:
-+ .loc 1 113 0
-+ movl 20(%ebx), %eax
-+ andl $1, %eax
-+ orl %edi, %eax
-+ movl %eax, 20(%ebx)
-+.LVL185:
-+.L151:
-+.LBE415:
-+.LBE414:
-+ .loc 1 416 0
-+ movl %ebp, 8(%ebx)
-+ .loc 1 417 0
-+ movl %ebx, %edx
-+.LVL186:
-+ movl %esi, %eax
-+ call internal_add_timer
-+ .loc 1 418 0
-+ movl %esi, %eax
-+.LVL187:
-+ movl 4(%esp), %edx
-+ call _spin_unlock_irqrestore
-+ .loc 1 421 0
-+ movl (%esp), %eax
-+ popl %esi
-+.LVL188:
-+ popl %edi
-+.LVL189:
-+ popl %ebx
-+.LVL190:
-+ popl %esi
-+ popl %edi
-+ popl %ebp
-+.LVL191:
-+ ret
-+.LFE893:
-+ .size __mod_timer, .-__mod_timer
-+ .section .rodata.str1.1
-+.LC3:
-+ .string "<3>schedule_timeout: wrong timeout value %lx\n"
-+ .section .sched.text,"ax",@progbits
-+.globl schedule_timeout
-+ .type schedule_timeout, @function
-+schedule_timeout:
-+.LFB916:
-+ .loc 1 1056 0
-+.LVL192:
-+ pushl %esi
-+.LCFI43:
-+ pushl %ebx
-+.LCFI44:
-+ movl %eax, %ebx
-+ subl $32, %esp
-+.LCFI45:
-+ .loc 1 1060 0
-+ cmpl $2147483647, %eax
-+ jne .L156
-+ .loc 1 1070 0
-+ call schedule
-+.LVL193:
-+ jmp .L158
-+.LVL194:
-+.L156:
-+ .loc 1 1080 0
-+ testl %eax, %eax
-+ jns .L159
-+ .loc 1 1081 0
-+ movl %eax, 4(%esp)
-+ movl $.LC3, (%esp)
-+ call printk
-+.LVL195:
-+ .loc 1 1083 0
-+ call dump_stack
-+.LBB416:
-+.LBB417:
-+.LBB418:
-+ .file 9 "include/asm/current.h"
-+ .loc 9 12 0
-+#APP
-+ movl %fs:per_cpu__current_task,%eax
-+.LVL196:
-+#NO_APP
-+.LBE418:
-+.LBE417:
-+.LBE416:
-+ .loc 1 1084 0
-+ movl $0, (%eax)
-+ jmp .L158
-+.LVL197:
-+.L159:
-+ .loc 1 1089 0
-+ movl jiffies, %esi
-+.LBB419:
-+.LBB420:
-+ .file 10 "include/linux/timer.h"
-+ .loc 10 48 0
-+ leal 8(%esp), %ebx
-+ .loc 10 46 0
-+ movl $process_timeout, 20(%esp)
-+.LBE420:
-+.LBE419:
-+ .loc 1 1089 0
-+ leal (%eax,%esi), %esi
-+.LVL198:
-+.LBB421:
-+.LBB422:
-+.LBB423:
-+ .loc 9 12 0
-+#APP
-+ movl %fs:per_cpu__current_task,%eax
-+.LVL199:
-+#NO_APP
-+.LBE423:
-+.LBE422:
-+.LBE421:
-+.LBB424:
-+.LBB425:
-+ .loc 10 47 0
-+ movl %eax, 24(%esp)
-+ .loc 10 48 0
-+ movl %ebx, %eax
-+.LVL200:
-+ call init_timer
-+.LBE425:
-+.LBE424:
-+ .loc 1 1092 0
-+ movl %esi, %edx
-+ movl %ebx, %eax
-+ call __mod_timer
-+ .loc 1 1093 0
-+ call schedule
-+ .loc 1 1094 0
-+ movl %ebx, %eax
-+ .loc 1 1096 0
-+ movl %esi, %ebx
-+.LVL201:
-+ .loc 1 1094 0
-+ call del_timer_sync
-+ .loc 1 1096 0
-+ movl jiffies, %eax
-+ subl %eax, %ebx
-+.LVL202:
-+.L158:
-+ .loc 1 1098 0
-+ xorl %eax, %eax
-+.LVL203:
-+ testl %ebx, %ebx
-+ cmovns %ebx, %eax
-+ .loc 1 1100 0
-+ addl $32, %esp
-+ popl %ebx
-+.LVL204:
-+ popl %esi
-+.LVL205:
-+ ret
-+.LFE916:
-+ .size schedule_timeout, .-schedule_timeout
-+.globl schedule_timeout_uninterruptible
-+ .type schedule_timeout_uninterruptible, @function
-+schedule_timeout_uninterruptible:
-+.LFB918:
-+ .loc 1 1115 0
-+.LVL206:
-+.LBB426:
-+.LBB427:
-+.LBB428:
-+ .loc 9 12 0
-+#APP
-+ movl %fs:per_cpu__current_task,%edx
-+.LVL207:
-+#NO_APP
-+.LBE428:
-+.LBE427:
-+.LBE426:
-+ .loc 1 1116 0
-+ movl $2, (%edx)
-+ .loc 1 1117 0
-+ jmp schedule_timeout
-+.LVL208:
-+.LFE918:
-+ .size schedule_timeout_uninterruptible, .-schedule_timeout_uninterruptible
-+ .text
-+.globl msleep
-+ .type msleep, @function
-+msleep:
-+.LFB925:
-+ .loc 1 1566 0
-+.LVL209:
-+ .loc 1 1567 0
-+ call msecs_to_jiffies
-+.LVL210:
-+ incl %eax
-+.LVL211:
-+ jmp .L165
-+.L166:
-+ .loc 1 1570 0
-+ call schedule_timeout_uninterruptible
-+.LVL212:
-+.L165:
-+ .loc 1 1569 0
-+ testl %eax, %eax
-+ jne .L166
-+ .loc 1 1571 0
-+ ret
-+.LFE925:
-+ .size msleep, .-msleep
-+ .section .sched.text
-+.globl schedule_timeout_interruptible
-+ .type schedule_timeout_interruptible, @function
-+schedule_timeout_interruptible:
-+.LFB917:
-+ .loc 1 1108 0
-+.LVL213:
-+.LBB429:
-+.LBB430:
-+.LBB431:
-+ .loc 9 12 0
-+#APP
-+ movl %fs:per_cpu__current_task,%edx
-+.LVL214:
-+#NO_APP
-+.LBE431:
-+.LBE430:
-+.LBE429:
-+ .loc 1 1109 0
-+ movl $1, (%edx)
-+ .loc 1 1110 0
-+ jmp schedule_timeout
-+.LVL215:
-+.LFE917:
-+ .size schedule_timeout_interruptible, .-schedule_timeout_interruptible
-+ .text
-+.globl msleep_interruptible
-+ .type msleep_interruptible, @function
-+msleep_interruptible:
-+.LFB926:
-+ .loc 1 1580 0
-+.LVL216:
-+ .loc 1 1581 0
-+ call msecs_to_jiffies
-+.LVL217:
-+ leal 1(%eax), %edx
-+.LVL218:
-+ jmp .L172
-+.L173:
-+ .loc 1 1584 0
-+ movl %edx, %eax
-+ call schedule_timeout_interruptible
-+.LVL219:
-+ movl %eax, %edx
-+.LVL220:
-+.L172:
-+ .loc 1 1583 0
-+ testl %edx, %edx
-+ je .L174
-+.LBB445:
-+.LBB446:
-+.LBB447:
-+ .loc 9 12 0
-+#APP
-+ movl %fs:per_cpu__current_task,%eax
-+.LVL221:
-+#NO_APP
-+.LBE447:
-+.LBE446:
-+.LBE445:
-+.LBB448:
-+.LBB449:
-+.LBB450:
-+.LBB451:
-+ .file 11 "include/linux/sched.h"
-+ .loc 11 1569 0
-+ movl 4(%eax), %eax
-+.LVL222:
-+.LBB452:
-+.LBB453:
-+.LBB454:
-+.LBB455:
-+ .file 12 "include/asm/bitops.h"
-+ .loc 12 246 0
-+ movl 8(%eax), %eax
-+.LBE455:
-+.LBE454:
-+.LBE453:
-+.LBE452:
-+.LBE451:
-+.LBE450:
-+.LBE449:
-+.LBE448:
-+ .loc 1 1583 0
-+ testb $4, %al
-+ je .L173
-+.L174:
-+ .loc 1 1585 0
-+ movl %edx, %eax
-+ jmp jiffies_to_msecs
-+.LVL223:
-+.LFE926:
-+ .size msleep_interruptible, .-msleep_interruptible
-+.globl update_process_times
-+ .type update_process_times, @function
-+update_process_times:
-+.LFB901:
-+ .loc 1 811 0
-+.LVL224:
-+ pushl %edi
-+.LCFI46:
-+ movl %eax, %edi
-+ pushl %esi
-+.LCFI47:
-+ pushl %ebx
-+.LCFI48:
-+.LBB460:
-+ .loc 1 813 0
-+#APP
-+ movl %fs:per_cpu__cpu_number,%esi
-+.LVL225:
-+#NO_APP
-+.LBE460:
-+.LBB461:
-+.LBB462:
-+.LBB463:
-+ .loc 9 12 0
-+#APP
-+ movl %fs:per_cpu__current_task,%ebx
-+.LVL226:
-+#NO_APP
-+.LBE463:
-+.LBE462:
-+.LBE461:
-+ .loc 1 816 0
-+ testl %eax, %eax
-+ je .L178
-+ .loc 1 817 0
-+ movl $1, %edx
-+ movl %ebx, %eax
-+.LVL227:
-+ call account_user_time
-+ jmp .L180
-+.LVL228:
-+.L178:
-+ .loc 1 819 0
-+ movl $1, %ecx
-+ movl $65536, %edx
-+ movl %ebx, %eax
-+.LVL229:
-+ call account_system_time
-+.L180:
-+ .loc 1 820 0
-+ call run_local_timers
-+ .loc 1 821 0
-+ movl %esi, %eax
-+ call rcu_pending
-+ testl %eax, %eax
-+ je .L181
-+ .loc 1 822 0
-+ movl %edi, %edx
-+ movl %esi, %eax
-+ call rcu_check_callbacks
-+.L181:
-+ .loc 1 823 0
-+ call scheduler_tick
-+ .loc 1 824 0
-+ movl %ebx, %eax
-+ .loc 1 825 0
-+ popl %ebx
-+.LVL230:
-+ popl %esi
-+.LVL231:
-+ popl %edi
-+.LVL232:
-+ .loc 1 824 0
-+ jmp run_posix_cpu_timers
-+.LVL233:
-+.LFE901:
-+ .size update_process_times, .-update_process_times
-+.globl sys_getpid
-+ .type sys_getpid, @function
-+sys_getpid:
-+.LFB909:
-+ .loc 1 957 0
-+ pushl %ebx
-+.LCFI49:
-+ subl $40, %esp
-+.LCFI50:
-+ .loc 1 959 0
-+ movl rec_event, %ebx
-+ testl %ebx, %ebx
-+ je .L185
-+.LBB474:
-+ .loc 1 964 0
-+ movl $666, 36(%esp)
-+ .loc 1 966 0
-+ leal 24(%esp), %eax
-+.LBB475:
-+.LBB476:
-+.LBB477:
-+ .loc 9 12 0
-+#APP
-+ movl %fs:per_cpu__current_task,%edx
-+.LVL234:
-+#NO_APP
-+.LBE477:
-+.LBE476:
-+.LBE475:
-+ .loc 1 965 0
-+ movl 468(%edx), %ecx
-+.LVL235:
-+ .loc 1 966 0
-+ movl %eax, 8(%esp)
-+ .loc 1 972 0
-+ movl %esp, %eax
-+ .loc 1 967 0
-+ movl %edx, 20(%esp)
-+ .loc 1 972 0
-+ movl $1, %edx
-+.LVL236:
-+ .loc 1 969 0
-+ movl $7, 16(%esp)
-+ .loc 1 965 0
-+ andl $4095, %ecx
-+ .loc 1 968 0
-+ movl %ecx, 24(%esp)
-+ .loc 1 972 0
-+ call *%ebx
-+.LVL237:
-+.L185:
-+.LBE474:
-+.LBB478:
-+.LBB479:
-+.LBB480:
-+ .loc 9 12 0
-+#APP
-+ movl %fs:per_cpu__current_task,%eax
-+.LVL238:
-+#NO_APP
-+ movl 176(%eax), %eax
-+.LVL239:
-+.LBE480:
-+.LBE479:
-+.LBE478:
-+ .loc 1 977 0
-+ addl $40, %esp
-+ popl %ebx
-+ ret
-+.LFE909:
-+ .size sys_getpid, .-sys_getpid
-+.globl sys_getppid
-+ .type sys_getppid, @function
-+sys_getppid:
-+.LFB910:
-+ .loc 1 986 0
-+.LBB485:
-+.LBB486:
-+.LBB487:
-+.LBB488:
-+ .loc 9 12 0
-+#APP
-+ movl %fs:per_cpu__current_task,%eax
-+.LVL240:
-+#NO_APP
-+ movl 180(%eax), %eax
-+.LVL241:
-+ movl 176(%eax), %eax
-+.LBE488:
-+.LBE487:
-+.LBE486:
-+.LBE485:
-+ .loc 1 996 0
-+ ret
-+.LFE910:
-+ .size sys_getppid, .-sys_getppid
-+.globl sys_getuid
-+ .type sys_getuid, @function
-+sys_getuid:
-+.LFB911:
-+ .loc 1 999 0
-+.LBB492:
-+.LBB493:
-+.LBB494:
-+ .loc 9 12 0
-+#APP
-+ movl %fs:per_cpu__current_task,%eax
-+.LVL242:
-+#NO_APP
-+ movl 340(%eax), %eax
-+.LVL243:
-+.LBE494:
-+.LBE493:
-+.LBE492:
-+ .loc 1 1002 0
-+ ret
-+.LFE911:
-+ .size sys_getuid, .-sys_getuid
-+.globl sys_geteuid
-+ .type sys_geteuid, @function
-+sys_geteuid:
-+.LFB912:
-+ .loc 1 1005 0
-+.LBB498:
-+.LBB499:
-+.LBB500:
-+ .loc 9 12 0
-+#APP
-+ movl %fs:per_cpu__current_task,%eax
-+.LVL244:
-+#NO_APP
-+ movl 344(%eax), %eax
-+.LVL245:
-+.LBE500:
-+.LBE499:
-+.LBE498:
-+ .loc 1 1008 0
-+ ret
-+.LFE912:
-+ .size sys_geteuid, .-sys_geteuid
-+.globl sys_getgid
-+ .type sys_getgid, @function
-+sys_getgid:
-+.LFB913:
-+ .loc 1 1011 0
-+.LBB504:
-+.LBB505:
-+.LBB506:
-+ .loc 9 12 0
-+#APP
-+ movl %fs:per_cpu__current_task,%eax
-+.LVL246:
-+#NO_APP
-+ movl 356(%eax), %eax
-+.LVL247:
-+.LBE506:
-+.LBE505:
-+.LBE504:
-+ .loc 1 1014 0
-+ ret
-+.LFE913:
-+ .size sys_getgid, .-sys_getgid
-+.globl sys_getegid
-+ .type sys_getegid, @function
-+sys_getegid:
-+.LFB914:
-+ .loc 1 1017 0
-+.LBB510:
-+.LBB511:
-+.LBB512:
-+ .loc 9 12 0
-+#APP
-+ movl %fs:per_cpu__current_task,%eax
-+.LVL248:
-+#NO_APP
-+ movl 360(%eax), %eax
-+.LVL249:
-+.LBE512:
-+.LBE511:
-+.LBE510:
-+ .loc 1 1020 0
-+ ret
-+.LFE914:
-+ .size sys_getegid, .-sys_getegid
-+.globl sys_gettid
-+ .type sys_gettid, @function
-+sys_gettid:
-+.LFB919:
-+ .loc 1 1123 0
-+.LBB516:
-+.LBB517:
-+.LBB518:
-+ .loc 9 12 0
-+#APP
-+ movl %fs:per_cpu__current_task,%eax
-+.LVL250:
-+#NO_APP
-+ movl 172(%eax), %eax
-+.LVL251:
-+.LBE518:
-+.LBE517:
-+.LBE516:
-+ .loc 1 1125 0
-+ ret
-+.LFE919:
-+ .size sys_gettid, .-sys_gettid
-+.globl mod_timer
-+ .type mod_timer, @function
-+mod_timer:
-+.LFB895:
-+ .loc 1 467 0
-+.LVL252:
-+ .loc 1 468 0
-+ cmpl $0, 12(%eax)
-+ jne .L201
-+#APP
-+ 1: ud2
-+.pushsection __bug_table,"a"
-+2: .long 1b, .LC0
-+ .word 468, 0
-+ .org 2b+12
-+.popsection
-+#NO_APP
-+.L203:
-+ jmp .L203
-+.L201:
-+ .loc 1 476 0
-+ cmpl %edx, 8(%eax)
-+ jne .L204
-+ cmpl $0, (%eax)
-+ jne .L209
-+.L204:
-+ .loc 1 479 0
-+ jmp __mod_timer
-+.LVL253:
-+.L209:
-+ .loc 1 480 0
-+ movl $1, %eax
-+.LVL254:
-+ ret
-+.LFE895:
-+ .size mod_timer, .-mod_timer
-+.globl del_timer
-+ .type del_timer, @function
-+del_timer:
-+.LFB896:
-+ .loc 1 496 0
-+.LVL255:
-+ pushl %esi
-+.LCFI51:
-+ .loc 1 502 0
-+ xorl %esi, %esi
-+.LVL256:
-+ .loc 1 496 0
-+ pushl %ebx
-+.LCFI52:
-+ movl %eax, %ebx
-+ subl $4, %esp
-+.LCFI53:
-+ .loc 1 502 0
-+ cmpl $0, (%eax)
-+ je .L213
-+ .loc 1 503 0
-+ movl %esp, %edx
-+ call lock_timer_base
-+.LVL257:
-+ .loc 1 504 0
-+ cmpl $0, (%ebx)
-+ .loc 1 503 0
-+ movl %eax, %ecx
-+.LVL258:
-+ .loc 1 504 0
-+ je .L216
-+.LBB533:
-+.LBB534:
-+ .loc 1 342 0
-+ movl (%ebx), %edx
-+.LVL259:
-+ .loc 1 345 0
-+ movw $1, %si
-+.LVL260:
-+ .loc 1 342 0
-+ movl 4(%ebx), %eax
-+.LVL261:
-+.LBB535:
-+.LBB536:
-+ .loc 2 157 0
-+ movl %eax, 4(%edx)
-+ .loc 2 158 0
-+ movl %edx, (%eax)
-+.LBE536:
-+.LBE535:
-+ .loc 1 345 0
-+ movl $2097664, 4(%ebx)
-+ .loc 1 344 0
-+ movl $0, (%ebx)
-+.LVL262:
-+.L216:
-+.LVL263:
-+.LBE534:
-+.LBE533:
-+ .loc 1 508 0
-+ movl (%esp), %edx
-+.LVL264:
-+ movl %ecx, %eax
-+.LVL265:
-+ call _spin_unlock_irqrestore
-+.LVL266:
-+.L213:
-+ .loc 1 512 0
-+ popl %edx
-+ movl %esi, %eax
-+ popl %ebx
-+.LVL267:
-+ popl %esi
-+.LVL268:
-+ ret
-+.LFE896:
-+ .size del_timer, .-del_timer
-+.globl add_timer_on
-+ .type add_timer_on, @function
-+add_timer_on:
-+.LFB894:
-+ .loc 1 433 0
-+.LVL269:
-+ pushl %edi
-+.LCFI54:
-+ .loc 1 434 0
-+ movl __per_cpu_offset(,%edx,4), %edx
-+.LVL270:
-+ .loc 1 433 0
-+ pushl %esi
-+.LCFI55:
-+ movl %eax, %esi
-+ pushl %ebx
-+.LCFI56:
-+.LBB546:
-+ .loc 1 434 0
-+ movl $per_cpu__tvec_bases, %eax
-+.LVL271:
-+.LBE546:
-+ .loc 1 438 0
-+ cmpl $0, (%esi)
-+ .loc 1 434 0
-+ movl (%eax,%edx), %edi
-+.LVL272:
-+ .loc 1 438 0
-+ jne .L226
-+ cmpl $0, 12(%esi)
-+ jne .L222
-+.L226:
-+#APP
-+ 1: ud2
-+.pushsection __bug_table,"a"
-+2: .long 1b, .LC0
-+ .word 438, 0
-+ .org 2b+12
-+.popsection
-+#NO_APP
-+.L224:
-+ jmp .L224
-+.L222:
-+ .loc 1 439 0
-+ movl %edi, %eax
-+ call _spin_lock_irqsave
-+ .loc 1 441 0
-+ movl %esi, %edx
-+ .loc 1 439 0
-+ movl %eax, %ebx
-+.LVL273:
-+.LBB547:
-+.LBB548:
-+ .loc 1 113 0
-+ movl 20(%esi), %eax
-+ andl $1, %eax
-+ orl %edi, %eax
-+ movl %eax, 20(%esi)
-+.LBE548:
-+.LBE547:
-+ .loc 1 441 0
-+ movl %edi, %eax
-+ call internal_add_timer
-+ .loc 1 442 0
-+ movl %ebx, %edx
-+ movl %edi, %eax
-+ .loc 1 443 0
-+ popl %ebx
-+.LVL274:
-+ popl %esi
-+.LVL275:
-+ popl %edi
-+.LVL276:
-+ .loc 1 442 0
-+ jmp _spin_unlock_irqrestore
-+.LVL277:
-+.LFE894:
-+ .size add_timer_on, .-add_timer_on
-+.globl jiffies_64
-+ .section .data.cacheline_aligned,"aw",@progbits
-+ .align 128
-+ .type jiffies_64, @object
-+ .size jiffies_64, 8
-+jiffies_64:
-+ .long -75000
-+ .long 0
-+ .section __ksymtab,"a",@progbits
-+ .align 4
-+ .type __ksymtab_jiffies_64, @object
-+ .size __ksymtab_jiffies_64, 8
-+__ksymtab_jiffies_64:
-+ .long jiffies_64
-+ .long __kstrtab_jiffies_64
-+ .align 4
-+ .type __ksymtab_boot_tvec_bases, @object
-+ .size __ksymtab_boot_tvec_bases, 8
-+__ksymtab_boot_tvec_bases:
-+ .long boot_tvec_bases
-+ .long __kstrtab_boot_tvec_bases
-+ .section __ksymtab_gpl,"a",@progbits
-+ .align 4
-+ .type __ksymtab___round_jiffies, @object
-+ .size __ksymtab___round_jiffies, 8
-+__ksymtab___round_jiffies:
-+ .long __round_jiffies
-+ .long __kstrtab___round_jiffies
-+ .align 4
-+ .type __ksymtab___round_jiffies_relative, @object
-+ .size __ksymtab___round_jiffies_relative, 8
-+__ksymtab___round_jiffies_relative:
-+ .long __round_jiffies_relative
-+ .long __kstrtab___round_jiffies_relative
-+ .align 4
-+ .type __ksymtab_round_jiffies, @object
-+ .size __ksymtab_round_jiffies, 8
-+__ksymtab_round_jiffies:
-+ .long round_jiffies
-+ .long __kstrtab_round_jiffies
-+ .align 4
-+ .type __ksymtab_round_jiffies_relative, @object
-+ .size __ksymtab_round_jiffies_relative, 8
-+__ksymtab_round_jiffies_relative:
-+ .long round_jiffies_relative
-+ .long __kstrtab_round_jiffies_relative
-+ .section __ksymtab
-+ .align 4
-+ .type __ksymtab_init_timer, @object
-+ .size __ksymtab_init_timer, 8
-+__ksymtab_init_timer:
-+ .long init_timer
-+ .long __kstrtab_init_timer
-+ .align 4
-+ .type __ksymtab_init_timer_deferrable, @object
-+ .size __ksymtab_init_timer_deferrable, 8
-+__ksymtab_init_timer_deferrable:
-+ .long init_timer_deferrable
-+ .long __kstrtab_init_timer_deferrable
-+ .align 4
-+ .type __ksymtab___mod_timer, @object
-+ .size __ksymtab___mod_timer, 8
-+__ksymtab___mod_timer:
-+ .long __mod_timer
-+ .long __kstrtab___mod_timer
-+ .align 4
-+ .type __ksymtab_mod_timer, @object
-+ .size __ksymtab_mod_timer, 8
-+__ksymtab_mod_timer:
-+ .long mod_timer
-+ .long __kstrtab_mod_timer
-+ .align 4
-+ .type __ksymtab_del_timer, @object
-+ .size __ksymtab_del_timer, 8
-+__ksymtab_del_timer:
-+ .long del_timer
-+ .long __kstrtab_del_timer
-+ .align 4
-+ .type __ksymtab_try_to_del_timer_sync, @object
-+ .size __ksymtab_try_to_del_timer_sync, 8
-+__ksymtab_try_to_del_timer_sync:
-+ .long try_to_del_timer_sync
-+ .long __kstrtab_try_to_del_timer_sync
-+ .align 4
-+ .type __ksymtab_del_timer_sync, @object
-+ .size __ksymtab_del_timer_sync, 8
-+__ksymtab_del_timer_sync:
-+ .long del_timer_sync
-+ .long __kstrtab_del_timer_sync
-+ .align 4
-+ .type __ksymtab_avenrun, @object
-+ .size __ksymtab_avenrun, 8
-+__ksymtab_avenrun:
-+ .long avenrun
-+ .long __kstrtab_avenrun
-+ .align 4
-+ .type __ksymtab_schedule_timeout, @object
-+ .size __ksymtab_schedule_timeout, 8
-+__ksymtab_schedule_timeout:
-+ .long schedule_timeout
-+ .long __kstrtab_schedule_timeout
-+ .align 4
-+ .type __ksymtab_schedule_timeout_interruptible, @object
-+ .size __ksymtab_schedule_timeout_interruptible, 8
-+__ksymtab_schedule_timeout_interruptible:
-+ .long schedule_timeout_interruptible
-+ .long __kstrtab_schedule_timeout_interruptible
-+ .align 4
-+ .type __ksymtab_schedule_timeout_uninterruptible, @object
-+ .size __ksymtab_schedule_timeout_uninterruptible, 8
-+__ksymtab_schedule_timeout_uninterruptible:
-+ .long schedule_timeout_uninterruptible
-+ .long __kstrtab_schedule_timeout_uninterruptible
-+ .align 4
-+ .type __ksymtab_msleep, @object
-+ .size __ksymtab_msleep, 8
-+__ksymtab_msleep:
-+ .long msleep
-+ .long __kstrtab_msleep
-+ .align 4
-+ .type __ksymtab_msleep_interruptible, @object
-+ .size __ksymtab_msleep_interruptible, 8
-+__ksymtab_msleep_interruptible:
-+ .long msleep_interruptible
-+ .long __kstrtab_msleep_interruptible
-+ .section .init.data,"aw",@progbits
-+ .align 4
-+ .type timers_nb, @object
-+ .size timers_nb, 12
-+timers_nb:
-+ .long timer_cpu_notify
-+ .zero 8
-+ .section .data.percpu,"aw",@progbits
-+ .align 4
-+ .type per_cpu__tvec_bases, @object
-+ .size per_cpu__tvec_bases, 4
-+per_cpu__tvec_bases:
-+ .long boot_tvec_bases
-+ .local boot_done.19029
-+ .comm boot_done.19029,1,1
-+ .section .rodata
-+ .type __func__.19031, @object
-+ .size __func__.19031, 16
-+__func__.19031:
-+ .string "init_timers_cpu"
-+ .local tvec_base_done.19028
-+ .comm tvec_base_done.19028,32,32
-+ .data
-+ .align 4
-+ .type count.18791, @object
-+ .size count.18791, 4
-+count.18791:
-+ .long 1250
-+.globl boot_tvec_bases
-+ .bss
-+ .align 128
-+ .type boot_tvec_bases, @object
-+ .size boot_tvec_bases, 4224
-+boot_tvec_bases:
-+ .zero 4224
-+.globl avenrun
-+ .align 4
-+ .type avenrun, @object
-+ .size avenrun, 12
-+avenrun:
-+ .zero 12
-+.globl rec_event
-+ .align 4
-+ .type rec_event, @object
-+ .size rec_event, 4
-+rec_event:
-+ .zero 4
-+ .section __ksymtab_strings,"a",@progbits
-+ .type __kstrtab_jiffies_64, @object
-+ .size __kstrtab_jiffies_64, 11
-+__kstrtab_jiffies_64:
-+ .string "jiffies_64"
-+ .type __kstrtab_boot_tvec_bases, @object
-+ .size __kstrtab_boot_tvec_bases, 16
-+__kstrtab_boot_tvec_bases:
-+ .string "boot_tvec_bases"
-+ .type __kstrtab___round_jiffies, @object
-+ .size __kstrtab___round_jiffies, 16
-+__kstrtab___round_jiffies:
-+ .string "__round_jiffies"
-+ .type __kstrtab___round_jiffies_relative, @object
-+ .size __kstrtab___round_jiffies_relative, 25
-+__kstrtab___round_jiffies_relative:
-+ .string "__round_jiffies_relative"
-+ .type __kstrtab_round_jiffies, @object
-+ .size __kstrtab_round_jiffies, 14
-+__kstrtab_round_jiffies:
-+ .string "round_jiffies"
-+ .type __kstrtab_round_jiffies_relative, @object
-+ .size __kstrtab_round_jiffies_relative, 23
-+__kstrtab_round_jiffies_relative:
-+ .string "round_jiffies_relative"
-+ .type __kstrtab_init_timer, @object
-+ .size __kstrtab_init_timer, 11
-+__kstrtab_init_timer:
-+ .string "init_timer"
-+ .type __kstrtab_init_timer_deferrable, @object
-+ .size __kstrtab_init_timer_deferrable, 22
-+__kstrtab_init_timer_deferrable:
-+ .string "init_timer_deferrable"
-+ .type __kstrtab___mod_timer, @object
-+ .size __kstrtab___mod_timer, 12
-+__kstrtab___mod_timer:
-+ .string "__mod_timer"
-+ .type __kstrtab_mod_timer, @object
-+ .size __kstrtab_mod_timer, 10
-+__kstrtab_mod_timer:
-+ .string "mod_timer"
-+ .type __kstrtab_del_timer, @object
-+ .size __kstrtab_del_timer, 10
-+__kstrtab_del_timer:
-+ .string "del_timer"
-+ .type __kstrtab_try_to_del_timer_sync, @object
-+ .size __kstrtab_try_to_del_timer_sync, 22
-+__kstrtab_try_to_del_timer_sync:
-+ .string "try_to_del_timer_sync"
-+ .type __kstrtab_del_timer_sync, @object
-+ .size __kstrtab_del_timer_sync, 15
-+__kstrtab_del_timer_sync:
-+ .string "del_timer_sync"
-+ .type __kstrtab_avenrun, @object
-+ .size __kstrtab_avenrun, 8
-+__kstrtab_avenrun:
-+ .string "avenrun"
-+ .type __kstrtab_schedule_timeout, @object
-+ .size __kstrtab_schedule_timeout, 17
-+__kstrtab_schedule_timeout:
-+ .string "schedule_timeout"
-+ .type __kstrtab_schedule_timeout_interruptible, @object
-+ .size __kstrtab_schedule_timeout_interruptible, 31
-+__kstrtab_schedule_timeout_interruptible:
-+ .string "schedule_timeout_interruptible"
-+ .align 32
-+ .type __kstrtab_schedule_timeout_uninterruptible, @object
-+ .size __kstrtab_schedule_timeout_uninterruptible, 33
-+__kstrtab_schedule_timeout_uninterruptible:
-+ .string "schedule_timeout_uninterruptible"
-+ .type __kstrtab_msleep, @object
-+ .size __kstrtab_msleep, 7
-+__kstrtab_msleep:
-+ .string "msleep"
-+ .type __kstrtab_msleep_interruptible, @object
-+ .size __kstrtab_msleep_interruptible, 21
-+__kstrtab_msleep_interruptible:
-+ .string "msleep_interruptible"
-+ .weak xtime_lock
-+ .section .debug_frame,"",@progbits
-+.Lframe0:
-+ .long .LECIE0-.LSCIE0
-+.LSCIE0:
-+ .long 0xffffffff
-+ .byte 0x1
-+ .string ""
-+ .uleb128 0x1
-+ .sleb128 -4
-+ .byte 0x8
-+ .byte 0xc
-+ .uleb128 0x4
-+ .uleb128 0x4
-+ .byte 0x88
-+ .uleb128 0x1
-+ .align 4
-+.LECIE0:
-+.LSFDE0:
-+ .long .LEFDE0-.LASFDE0
-+.LASFDE0:
-+ .long .Lframe0
-+ .long .LFB883
-+ .long .LFE883-.LFB883
-+ .byte 0x4
-+ .long .LCFI0-.LFB883
-+ .byte 0xe
-+ .uleb128 0x8
-+ .byte 0x4
-+ .long .LCFI1-.LCFI0
-+ .byte 0xe
-+ .uleb128 0xc
-+ .byte 0x86
-+ .uleb128 0x3
-+ .byte 0x87
-+ .uleb128 0x2
-+ .byte 0x4
-+ .long .LCFI2-.LCFI1
-+ .byte 0xe
-+ .uleb128 0x10
-+ .byte 0x83
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long .LCFI3-.LCFI2
-+ .byte 0xe
-+ .uleb128 0x14
-+ .align 4
-+.LEFDE0:
-+.LSFDE2:
-+ .long .LEFDE2-.LASFDE2
-+.LASFDE2:
-+ .long .Lframe0
-+ .long .LFB884
-+ .long .LFE884-.LFB884
-+ .align 4
-+.LEFDE2:
-+.LSFDE4:
-+ .long .LEFDE4-.LASFDE4
-+.LASFDE4:
-+ .long .Lframe0
-+ .long .LFB885
-+ .long .LFE885-.LFB885
-+ .align 4
-+.LEFDE4:
-+.LSFDE6:
-+ .long .LEFDE6-.LASFDE6
-+.LASFDE6:
-+ .long .Lframe0
-+ .long .LFB886
-+ .long .LFE886-.LFB886
-+ .align 4
-+.LEFDE6:
-+.LSFDE8:
-+ .long .LEFDE8-.LASFDE8
-+.LASFDE8:
-+ .long .Lframe0
-+ .long .LFB888
-+ .long .LFE888-.LFB888
-+ .byte 0x4
-+ .long .LCFI4-.LFB888
-+ .byte 0xe
-+ .uleb128 0x8
-+ .byte 0x4
-+ .long .LCFI5-.LCFI4
-+ .byte 0xe
-+ .uleb128 0xc
-+ .byte 0x83
-+ .uleb128 0x3
-+ .byte 0x86
-+ .uleb128 0x2
-+ .align 4
-+.LEFDE8:
-+.LSFDE10:
-+ .long .LEFDE10-.LASFDE10
-+.LASFDE10:
-+ .long .Lframe0
-+ .long .LFB889
-+ .long .LFE889-.LFB889
-+ .align 4
-+.LEFDE10:
-+.LSFDE12:
-+ .long .LEFDE12-.LASFDE12
-+.LASFDE12:
-+ .long .Lframe0
-+ .long .LFB890
-+ .long .LFE890-.LFB890
-+ .byte 0x4
-+ .long .LCFI6-.LFB890
-+ .byte 0xe
-+ .uleb128 0x8
-+ .byte 0x83
-+ .uleb128 0x2
-+ .align 4
-+.LEFDE12:
-+.LSFDE14:
-+ .long .LEFDE14-.LASFDE14
-+.LASFDE14:
-+ .long .Lframe0
-+ .long .LFB899
-+ .long .LFE899-.LFB899
-+ .byte 0x4
-+ .long .LCFI7-.LFB899
-+ .byte 0xe
-+ .uleb128 0x8
-+ .byte 0x87
-+ .uleb128 0x2
-+ .byte 0x4
-+ .long .LCFI8-.LCFI7
-+ .byte 0xe
-+ .uleb128 0xc
-+ .byte 0x86
-+ .uleb128 0x3
-+ .byte 0x4
-+ .long .LCFI9-.LCFI8
-+ .byte 0xe
-+ .uleb128 0x10
-+ .byte 0x4
-+ .long .LCFI10-.LCFI9
-+ .byte 0xe
-+ .uleb128 0x18
-+ .byte 0x83
-+ .uleb128 0x4
-+ .align 4
-+.LEFDE14:
-+.LSFDE16:
-+ .long .LEFDE16-.LASFDE16
-+.LASFDE16:
-+ .long .Lframe0
-+ .long .LFB923
-+ .long .LFE923-.LFB923
-+ .byte 0x4
-+ .long .LCFI11-.LFB923
-+ .byte 0xe
-+ .uleb128 0x8
-+ .byte 0x4
-+ .long .LCFI12-.LCFI11
-+ .byte 0xe
-+ .uleb128 0xc
-+ .byte 0x4
-+ .long .LCFI13-.LCFI12
-+ .byte 0xe
-+ .uleb128 0x10
-+ .byte 0x86
-+ .uleb128 0x4
-+ .byte 0x87
-+ .uleb128 0x3
-+ .byte 0x85
-+ .uleb128 0x2
-+ .byte 0x4
-+ .long .LCFI14-.LCFI13
-+ .byte 0xe
-+ .uleb128 0x14
-+ .byte 0x4
-+ .long .LCFI15-.LCFI14
-+ .byte 0xe
-+ .uleb128 0x24
-+ .byte 0x83
-+ .uleb128 0x5
-+ .align 4
-+.LEFDE16:
-+.LSFDE18:
-+ .long .LEFDE18-.LASFDE18
-+.LASFDE18:
-+ .long .Lframe0
-+ .long .LFB924
-+ .long .LFE924-.LFB924
-+ .align 4
-+.LEFDE18:
-+.LSFDE20:
-+ .long .LEFDE20-.LASFDE20
-+.LASFDE20:
-+ .long .Lframe0
-+ .long .LFB904
-+ .long .LFE904-.LFB904
-+ .byte 0x4
-+ .long .LCFI16-.LFB904
-+ .byte 0xe
-+ .uleb128 0x8
-+ .byte 0x4
-+ .long .LCFI17-.LCFI16
-+ .byte 0xe
-+ .uleb128 0xc
-+ .byte 0x4
-+ .long .LCFI18-.LCFI17
-+ .byte 0xe
-+ .uleb128 0x10
-+ .byte 0x4
-+ .long .LCFI19-.LCFI18
-+ .byte 0xe
-+ .uleb128 0x28
-+ .byte 0x83
-+ .uleb128 0x4
-+ .byte 0x86
-+ .uleb128 0x3
-+ .byte 0x87
-+ .uleb128 0x2
-+ .align 4
-+.LEFDE20:
-+.LSFDE22:
-+ .long .LEFDE22-.LASFDE22
-+.LASFDE22:
-+ .long .Lframe0
-+ .long .LFB920
-+ .long .LFE920-.LFB920
-+ .byte 0x4
-+ .long .LCFI20-.LFB920
-+ .byte 0xe
-+ .uleb128 0x8
-+ .byte 0x4
-+ .long .LCFI21-.LCFI20
-+ .byte 0xe
-+ .uleb128 0xc
-+ .byte 0x83
-+ .uleb128 0x3
-+ .byte 0x87
-+ .uleb128 0x2
-+ .byte 0x4
-+ .long .LCFI22-.LCFI21
-+ .byte 0xe
-+ .uleb128 0x14
-+ .align 4
-+.LEFDE22:
-+.LSFDE24:
-+ .long .LEFDE24-.LASFDE24
-+.LASFDE24:
-+ .long .Lframe0
-+ .long .LFB921
-+ .long .LFE921-.LFB921
-+ .byte 0x4
-+ .long .LCFI23-.LFB921
-+ .byte 0xe
-+ .uleb128 0x8
-+ .byte 0x4
-+ .long .LCFI24-.LCFI23
-+ .byte 0xe
-+ .uleb128 0x48
-+ .byte 0x83
-+ .uleb128 0x2
-+ .align 4
-+.LEFDE24:
-+.LSFDE26:
-+ .long .LEFDE26-.LASFDE26
-+.LASFDE26:
-+ .long .Lframe0
-+ .long .LFB915
-+ .long .LFE915-.LFB915
-+ .align 4
-+.LEFDE26:
-+.LSFDE28:
-+ .long .LEFDE28-.LASFDE28
-+.LASFDE28:
-+ .long .Lframe0
-+ .long .LFB908
-+ .long .LFE908-.LFB908
-+ .align 4
-+.LEFDE28:
-+.LSFDE30:
-+ .long .LEFDE30-.LASFDE30
-+.LASFDE30:
-+ .long .Lframe0
-+ .long .LFB907
-+ .long .LFE907-.LFB907
-+ .byte 0x4
-+ .long .LCFI25-.LFB907
-+ .byte 0xe
-+ .uleb128 0x8
-+ .byte 0x4
-+ .long .LCFI26-.LCFI25
-+ .byte 0xe
-+ .uleb128 0xc
-+ .byte 0x4
-+ .long .LCFI27-.LCFI26
-+ .byte 0xe
-+ .uleb128 0x10
-+ .byte 0x4
-+ .long .LCFI28-.LCFI27
-+ .byte 0xe
-+ .uleb128 0x14
-+ .byte 0x83
-+ .uleb128 0x5
-+ .byte 0x86
-+ .uleb128 0x4
-+ .byte 0x87
-+ .uleb128 0x3
-+ .byte 0x85
-+ .uleb128 0x2
-+ .byte 0x4
-+ .long .LCFI29-.LCFI28
-+ .byte 0xe
-+ .uleb128 0x18
-+ .align 4
-+.LEFDE30:
-+.LSFDE32:
-+ .long .LEFDE32-.LASFDE32
-+.LASFDE32:
-+ .long .Lframe0
-+ .long .LFB905
-+ .long .LFE905-.LFB905
-+ .align 4
-+.LEFDE32:
-+.LSFDE34:
-+ .long .LEFDE34-.LASFDE34
-+.LASFDE34:
-+ .long .Lframe0
-+ .long .LFB892
-+ .long .LFE892-.LFB892
-+ .byte 0x4
-+ .long .LCFI30-.LFB892
-+ .byte 0xe
-+ .uleb128 0x8
-+ .byte 0x85
-+ .uleb128 0x2
-+ .byte 0x4
-+ .long .LCFI31-.LCFI30
-+ .byte 0xe
-+ .uleb128 0xc
-+ .byte 0x87
-+ .uleb128 0x3
-+ .byte 0x4
-+ .long .LCFI32-.LCFI31
-+ .byte 0xe
-+ .uleb128 0x10
-+ .byte 0x4
-+ .long .LCFI33-.LCFI32
-+ .byte 0xe
-+ .uleb128 0x14
-+ .byte 0x83
-+ .uleb128 0x5
-+ .byte 0x86
-+ .uleb128 0x4
-+ .align 4
-+.LEFDE34:
-+.LSFDE36:
-+ .long .LEFDE36-.LASFDE36
-+.LASFDE36:
-+ .long .Lframe0
-+ .long .LFB897
-+ .long .LFE897-.LFB897
-+ .byte 0x4
-+ .long .LCFI34-.LFB897
-+ .byte 0xe
-+ .uleb128 0x8
-+ .byte 0x86
-+ .uleb128 0x2
-+ .byte 0x4
-+ .long .LCFI35-.LCFI34
-+ .byte 0xe
-+ .uleb128 0xc
-+ .byte 0x83
-+ .uleb128 0x3
-+ .byte 0x4
-+ .long .LCFI36-.LCFI35
-+ .byte 0xe
-+ .uleb128 0x10
-+ .align 4
-+.LEFDE36:
-+.LSFDE38:
-+ .long .LEFDE38-.LASFDE38
-+.LASFDE38:
-+ .long .Lframe0
-+ .long .LFB898
-+ .long .LFE898-.LFB898
-+ .byte 0x4
-+ .long .LCFI37-.LFB898
-+ .byte 0xe
-+ .uleb128 0x8
-+ .byte 0x83
-+ .uleb128 0x2
-+ .align 4
-+.LEFDE38:
-+.LSFDE40:
-+ .long .LEFDE40-.LASFDE40
-+.LASFDE40:
-+ .long .Lframe0
-+ .long .LFB893
-+ .long .LFE893-.LFB893
-+ .byte 0x4
-+ .long .LCFI38-.LFB893
-+ .byte 0xe
-+ .uleb128 0x8
-+ .byte 0x85
-+ .uleb128 0x2
-+ .byte 0x4
-+ .long .LCFI39-.LCFI38
-+ .byte 0xe
-+ .uleb128 0xc
-+ .byte 0x4
-+ .long .LCFI40-.LCFI39
-+ .byte 0xe
-+ .uleb128 0x10
-+ .byte 0x4
-+ .long .LCFI41-.LCFI40
-+ .byte 0xe
-+ .uleb128 0x14
-+ .byte 0x83
-+ .uleb128 0x5
-+ .byte 0x86
-+ .uleb128 0x4
-+ .byte 0x87
-+ .uleb128 0x3
-+ .byte 0x4
-+ .long .LCFI42-.LCFI41
-+ .byte 0xe
-+ .uleb128 0x1c
-+ .align 4
-+.LEFDE40:
-+.LSFDE42:
-+ .long .LEFDE42-.LASFDE42
-+.LASFDE42:
-+ .long .Lframe0
-+ .long .LFB916
-+ .long .LFE916-.LFB916
-+ .byte 0x4
-+ .long .LCFI43-.LFB916
-+ .byte 0xe
-+ .uleb128 0x8
-+ .byte 0x4
-+ .long .LCFI44-.LCFI43
-+ .byte 0xe
-+ .uleb128 0xc
-+ .byte 0x83
-+ .uleb128 0x3
-+ .byte 0x86
-+ .uleb128 0x2
-+ .byte 0x4
-+ .long .LCFI45-.LCFI44
-+ .byte 0xe
-+ .uleb128 0x2c
-+ .align 4
-+.LEFDE42:
-+.LSFDE44:
-+ .long .LEFDE44-.LASFDE44
-+.LASFDE44:
-+ .long .Lframe0
-+ .long .LFB918
-+ .long .LFE918-.LFB918
-+ .align 4
-+.LEFDE44:
-+.LSFDE46:
-+ .long .LEFDE46-.LASFDE46
-+.LASFDE46:
-+ .long .Lframe0
-+ .long .LFB925
-+ .long .LFE925-.LFB925
-+ .align 4
-+.LEFDE46:
-+.LSFDE48:
-+ .long .LEFDE48-.LASFDE48
-+.LASFDE48:
-+ .long .Lframe0
-+ .long .LFB917
-+ .long .LFE917-.LFB917
-+ .align 4
-+.LEFDE48:
-+.LSFDE50:
-+ .long .LEFDE50-.LASFDE50
-+.LASFDE50:
-+ .long .Lframe0
-+ .long .LFB926
-+ .long .LFE926-.LFB926
-+ .align 4
-+.LEFDE50:
-+.LSFDE52:
-+ .long .LEFDE52-.LASFDE52
-+.LASFDE52:
-+ .long .Lframe0
-+ .long .LFB901
-+ .long .LFE901-.LFB901
-+ .byte 0x4
-+ .long .LCFI46-.LFB901
-+ .byte 0xe
-+ .uleb128 0x8
-+ .byte 0x87
-+ .uleb128 0x2
-+ .byte 0x4
-+ .long .LCFI47-.LCFI46
-+ .byte 0xe
-+ .uleb128 0xc
-+ .byte 0x4
-+ .long .LCFI48-.LCFI47
-+ .byte 0xe
-+ .uleb128 0x10
-+ .byte 0x83
-+ .uleb128 0x4
-+ .byte 0x86
-+ .uleb128 0x3
-+ .align 4
-+.LEFDE52:
-+.LSFDE54:
-+ .long .LEFDE54-.LASFDE54
-+.LASFDE54:
-+ .long .Lframe0
-+ .long .LFB909
-+ .long .LFE909-.LFB909
-+ .byte 0x4
-+ .long .LCFI49-.LFB909
-+ .byte 0xe
-+ .uleb128 0x8
-+ .byte 0x4
-+ .long .LCFI50-.LCFI49
-+ .byte 0xe
-+ .uleb128 0x30
-+ .byte 0x83
-+ .uleb128 0x2
-+ .align 4
-+.LEFDE54:
-+.LSFDE56:
-+ .long .LEFDE56-.LASFDE56
-+.LASFDE56:
-+ .long .Lframe0
-+ .long .LFB910
-+ .long .LFE910-.LFB910
-+ .align 4
-+.LEFDE56:
-+.LSFDE58:
-+ .long .LEFDE58-.LASFDE58
-+.LASFDE58:
-+ .long .Lframe0
-+ .long .LFB911
-+ .long .LFE911-.LFB911
-+ .align 4
-+.LEFDE58:
-+.LSFDE60:
-+ .long .LEFDE60-.LASFDE60
-+.LASFDE60:
-+ .long .Lframe0
-+ .long .LFB912
-+ .long .LFE912-.LFB912
-+ .align 4
-+.LEFDE60:
-+.LSFDE62:
-+ .long .LEFDE62-.LASFDE62
-+.LASFDE62:
-+ .long .Lframe0
-+ .long .LFB913
-+ .long .LFE913-.LFB913
-+ .align 4
-+.LEFDE62:
-+.LSFDE64:
-+ .long .LEFDE64-.LASFDE64
-+.LASFDE64:
-+ .long .Lframe0
-+ .long .LFB914
-+ .long .LFE914-.LFB914
-+ .align 4
-+.LEFDE64:
-+.LSFDE66:
-+ .long .LEFDE66-.LASFDE66
-+.LASFDE66:
-+ .long .Lframe0
-+ .long .LFB919
-+ .long .LFE919-.LFB919
-+ .align 4
-+.LEFDE66:
-+.LSFDE68:
-+ .long .LEFDE68-.LASFDE68
-+.LASFDE68:
-+ .long .Lframe0
-+ .long .LFB895
-+ .long .LFE895-.LFB895
-+ .align 4
-+.LEFDE68:
-+.LSFDE70:
-+ .long .LEFDE70-.LASFDE70
-+.LASFDE70:
-+ .long .Lframe0
-+ .long .LFB896
-+ .long .LFE896-.LFB896
-+ .byte 0x4
-+ .long .LCFI51-.LFB896
-+ .byte 0xe
-+ .uleb128 0x8
-+ .byte 0x86
-+ .uleb128 0x2
-+ .byte 0x4
-+ .long .LCFI52-.LCFI51
-+ .byte 0xe
-+ .uleb128 0xc
-+ .byte 0x83
-+ .uleb128 0x3
-+ .byte 0x4
-+ .long .LCFI53-.LCFI52
-+ .byte 0xe
-+ .uleb128 0x10
-+ .align 4
-+.LEFDE70:
-+.LSFDE72:
-+ .long .LEFDE72-.LASFDE72
-+.LASFDE72:
-+ .long .Lframe0
-+ .long .LFB894
-+ .long .LFE894-.LFB894
-+ .byte 0x4
-+ .long .LCFI54-.LFB894
-+ .byte 0xe
-+ .uleb128 0x8
-+ .byte 0x4
-+ .long .LCFI55-.LCFI54
-+ .byte 0xe
-+ .uleb128 0xc
-+ .byte 0x86
-+ .uleb128 0x3
-+ .byte 0x87
-+ .uleb128 0x2
-+ .byte 0x4
-+ .long .LCFI56-.LCFI55
-+ .byte 0xe
-+ .uleb128 0x10
-+ .byte 0x83
-+ .uleb128 0x4
-+ .align 4
-+.LEFDE72:
-+ .file 13 "include/linux/spinlock_types.h"
-+ .file 14 "include/asm/spinlock_types.h"
-+ .file 15 "include/linux/thread_info.h"
-+ .file 16 "include/asm/thread_info.h"
-+ .file 17 "include/linux/capability.h"
-+ .file 18 "include/asm/atomic.h"
-+ .file 19 "include/linux/cpumask.h"
-+ .file 20 "include/asm/page.h"
-+ .file 21 "include/linux/mm.h"
-+ .file 22 "include/linux/rbtree.h"
-+ .file 23 "include/linux/prio_tree.h"
-+ .file 24 "include/linux/mmzone.h"
-+ .file 25 "include/linux/mm_types.h"
-+ .file 26 "include/linux/fs.h"
-+ .file 27 "include/linux/futex.h"
-+ .file 28 "include/linux/types.h"
-+ .file 29 "include/asm/posix_types.h"
-+ .file 30 "include/asm/types.h"
-+ .file 31 "include/linux/time.h"
-+ .file 32 "include/linux/mutex.h"
-+ .file 33 "include/linux/rwsem.h"
-+ .file 34 "include/asm/rwsem.h"
-+ .file 35 "include/linux/fs_struct.h"
-+ .file 36 "include/linux/dcache.h"
-+ .file 37 "include/linux/rcupdate.h"
-+ .file 38 "include/linux/sysfs.h"
-+ .file 39 "include/linux/namei.h"
-+ .file 40 "include/asm/alternative.h"
-+ .file 41 "include/linux/module.h"
-+ .file 42 "include/linux/kobject.h"
-+ .file 43 "include/linux/kref.h"
-+ .file 44 "include/linux/wait.h"
-+ .file 45 "include/asm/uaccess.h"
-+ .file 46 "include/asm/module.h"
-+ .file 47 "include/asm-generic/bug.h"
-+ .file 48 "include/asm/local.h"
-+ .file 49 "include/asm-generic/atomic.h"
-+ .file 50 "include/linux/elf.h"
-+ .file 51 "include/linux/aio.h"
-+ .file 52 "include/linux/workqueue.h"
-+ .file 53 "include/linux/aio_abi.h"
-+ .file 54 "include/linux/uio.h"
-+ .file 55 "include/linux/nfs_fs_i.h"
-+ .file 56 "include/linux/kernel.h"
-+ .file 57 "include/linux/pid.h"
-+ .file 58 "include/linux/lockdep.h"
-+ .file 59 "include/linux/quota.h"
-+ .file 60 "include/linux/dqblk_xfs.h"
-+ .file 61 "include/asm/semaphore.h"
-+ .file 62 "include/linux/backing-dev.h"
-+ .file 63 "include/linux/dqblk_v1.h"
-+ .file 64 "include/linux/dqblk_v2.h"
-+ .file 65 "include/linux/stat.h"
-+ .file 66 "include/linux/radix-tree.h"
-+ .file 67 "include/asm/mmu.h"
-+ .file 68 "include/linux/completion.h"
-+ .file 69 "include/asm-generic/cputime.h"
-+ .file 70 "include/linux/signal.h"
-+ .file 71 "include/linux/sem.h"
-+ .file 72 "include/asm/math_emu.h"
-+ .file 73 "include/asm/vm86.h"
-+ .file 74 "include/asm/signal.h"
-+ .file 75 "include/linux/hrtimer.h"
-+ .file 76 "include/linux/ktime.h"
-+ .file 77 "include/linux/resource.h"
-+ .file 78 "include/asm-generic/signal.h"
-+ .file 79 "include/linux/seccomp.h"
-+ .file 80 "include/linux/plist.h"
-+ .file 81 "include/linux/swap.h"
-+ .file 82 "include/asm-generic/siginfo.h"
-+ .file 83 "include/linux/task_io_accounting.h"
-+ .file 84 "include/linux/slab.h"
-+ .file 85 "include/linux/notifier.h"
-+ .file 86 "include/linux/interrupt.h"
-+ .file 87 "include/linux/arrays.h"
-+ .file 88 "include/asm/percpu.h"
-+ .file 89 "include/asm/smp.h"
-+ .file 90 "include/linux/timex.h"
-+ .file 91 "include/linux/jiffies.h"
-+ .file 92 "include/linux/pm.h"
-+ .file 93 "include/linux/device.h"
-+ .file 94 "include/linux/klist.h"
-+ .file 95 "include/asm/device.h"
-+ .file 96 "include/asm/fixmap.h"
-+ .file 97 "include/asm/acpi.h"
-+ .file 98 "include/asm/io_apic.h"
-+ .file 99 "include/asm/genapic.h"
-+ .file 100 "include/asm/mpspec.h"
-+ .file 101 "include/asm/mpspec_def.h"
-+ .file 102 "include/linux/kernel_stat.h"
-+ .file 103 "include/asm/desc.h"
-+ .file 104 "include/asm/irq_regs.h"
-+ .file 105 "include/asm/ptrace.h"
-+ .file 106 "include/linux/irq.h"
-+ .file 107 "include/linux/irqreturn.h"
-+ .file 108 "include/linux/profile.h"
-+ .file 109 "include/linux/ioport.h"
-+ .file 110 "include/linux/vmstat.h"
-+ .text
-+.Letext0:
-+ .section .debug_loc,"",@progbits
-+.Ldebug_loc0:
-+.LLST0:
-+ .long .LFB883
-+ .long .LCFI0
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 4
-+ .long .LCFI0
-+ .long .LCFI1
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 8
-+ .long .LCFI1
-+ .long .LCFI2
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 12
-+ .long .LCFI2
-+ .long .LCFI3
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 16
-+ .long .LCFI3
-+ .long .LFE883
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 20
-+ .long 0x0
-+ .long 0x0
-+.LLST1:
-+ .long .LVL0
-+ .long .LVL2
-+ .value 0x1
-+ .byte 0x50
-+ .long .LVL2
-+ .long .LVL3
-+ .value 0x1
-+ .byte 0x51
-+ .long .LVL3
-+ .long .LVL4
-+ .value 0x1
-+ .byte 0x53
-+ .long .LVL4
-+ .long .LVL5
-+ .value 0x1
-+ .byte 0x50
-+ .long .LVL6
-+ .long .LVL7
-+ .value 0x1
-+ .byte 0x50
-+ .long .LVL7
-+ .long .LVL8
-+ .value 0x1
-+ .byte 0x52
-+ .long 0x0
-+ .long 0x0
-+.LLST2:
-+ .long .LVL0
-+ .long .LVL1
-+ .value 0x1
-+ .byte 0x52
-+ .long 0x0
-+ .long 0x0
-+.LLST4:
-+ .long .LVL11
-+ .long .LVL12
-+ .value 0x1
-+ .byte 0x50
-+ .long 0x0
-+ .long 0x0
-+.LLST5:
-+ .long .LVL11
-+ .long .LVL13
-+ .value 0x1
-+ .byte 0x52
-+ .long 0x0
-+ .long 0x0
-+.LLST7:
-+ .long .LVL14
-+ .long .LVL16
-+ .value 0x1
-+ .byte 0x50
-+ .long 0x0
-+ .long 0x0
-+.LLST8:
-+ .long .LVL15
-+ .long .LVL16
-+ .value 0x1
-+ .byte 0x52
-+ .long 0x0
-+ .long 0x0
-+.LLST10:
-+ .long .LVL17
-+ .long .LVL19
-+ .value 0x1
-+ .byte 0x50
-+ .long 0x0
-+ .long 0x0
-+.LLST11:
-+ .long .LVL18
-+ .long .LVL19
-+ .value 0x1
-+ .byte 0x52
-+ .long 0x0
-+ .long 0x0
-+.LLST12:
-+ .long .LFB888
-+ .long .LCFI4
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 4
-+ .long .LCFI4
-+ .long .LCFI5
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 8
-+ .long .LCFI5
-+ .long .LFE888
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 12
-+ .long 0x0
-+ .long 0x0
-+.LLST13:
-+ .long .LVL20
-+ .long .LVL21
-+ .value 0x1
-+ .byte 0x50
-+ .long .LVL21
-+ .long .LVL35
-+ .value 0x1
-+ .byte 0x53
-+ .long 0x0
-+ .long 0x0
-+.LLST14:
-+ .long .LVL21
-+ .long .LVL29
-+ .value 0x1
-+ .byte 0x50
-+ .long .LVL29
-+ .long .LVL30
-+ .value 0x1
-+ .byte 0x50
-+ .long .LVL32
-+ .long .LVL34
-+ .value 0x1
-+ .byte 0x50
-+ .long 0x0
-+ .long 0x0
-+.LLST15:
-+ .long .LVL22
-+ .long .LVL23
-+ .value 0x1
-+ .byte 0x51
-+ .long .LVL24
-+ .long .LVL25
-+ .value 0x1
-+ .byte 0x51
-+ .long .LVL26
-+ .long .LVL27
-+ .value 0x1
-+ .byte 0x51
-+ .long .LVL28
-+ .long .LVL31
-+ .value 0x1
-+ .byte 0x51
-+ .long .LVL32
-+ .long .LVL33
-+ .value 0x1
-+ .byte 0x51
-+ .long 0x0
-+ .long 0x0
-+.LLST16:
-+ .long .LVL23
-+ .long .LVL24
-+ .value 0x1
-+ .byte 0x51
-+ .long .LVL25
-+ .long .LVL26
-+ .value 0x1
-+ .byte 0x51
-+ .long .LVL27
-+ .long .LVL28
-+ .value 0x1
-+ .byte 0x51
-+ .long .LVL31
-+ .long .LVL32
-+ .value 0x1
-+ .byte 0x51
-+ .long .LVL33
-+ .long .LFE888
-+ .value 0x1
-+ .byte 0x51
-+ .long 0x0
-+ .long 0x0
-+.LLST18:
-+ .long .LFB890
-+ .long .LCFI6
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 4
-+ .long .LCFI6
-+ .long .LFE890
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 8
-+ .long 0x0
-+ .long 0x0
-+.LLST19:
-+ .long .LVL38
-+ .long .LVL39
-+ .value 0x1
-+ .byte 0x50
-+ .long .LVL39
-+ .long .LVL40
-+ .value 0x1
-+ .byte 0x53
-+ .long 0x0
-+ .long 0x0
-+.LLST20:
-+ .long .LFB899
-+ .long .LCFI7
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 4
-+ .long .LCFI7
-+ .long .LCFI8
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 8
-+ .long .LCFI8
-+ .long .LCFI9
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 12
-+ .long .LCFI9
-+ .long .LCFI10
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 16
-+ .long .LCFI10
-+ .long .LFE899
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 24
-+ .long 0x0
-+ .long 0x0
-+.LLST21:
-+ .long .LVL41
-+ .long .LVL42
-+ .value 0x1
-+ .byte 0x50
-+ .long .LVL42
-+ .long .LVL55
-+ .value 0x1
-+ .byte 0x57
-+ .long 0x0
-+ .long 0x0
-+.LLST22:
-+ .long .LVL41
-+ .long .LVL43
-+ .value 0x1
-+ .byte 0x52
-+ .long 0x0
-+ .long 0x0
-+.LLST23:
-+ .long .LVL41
-+ .long .LVL47
-+ .value 0x1
-+ .byte 0x51
-+ .long .LVL47
-+ .long .LVL50
-+ .value 0x1
-+ .byte 0x56
-+ .long .LVL50
-+ .long .LVL51
-+ .value 0x1
-+ .byte 0x51
-+ .long .LVL51
-+ .long .LVL54
-+ .value 0x1
-+ .byte 0x56
-+ .long 0x0
-+ .long 0x0
-+.LLST24:
-+ .long .LVL44
-+ .long .LVL47
-+ .value 0x1
-+ .byte 0x52
-+ .long .LVL48
-+ .long .LFE899
-+ .value 0x1
-+ .byte 0x52
-+ .long 0x0
-+ .long 0x0
-+.LLST25:
-+ .long .LVL45
-+ .long .LVL53
-+ .value 0x1
-+ .byte 0x53
-+ .long 0x0
-+ .long 0x0
-+.LLST26:
-+ .long .LVL42
-+ .long .LVL46
-+ .value 0x1
-+ .byte 0x50
-+ .long .LVL49
-+ .long .LVL52
-+ .value 0x1
-+ .byte 0x50
-+ .long 0x0
-+ .long 0x0
-+.LLST27:
-+ .long .LFB923
-+ .long .LCFI11
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 4
-+ .long .LCFI11
-+ .long .LCFI12
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 8
-+ .long .LCFI12
-+ .long .LCFI13
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 12
-+ .long .LCFI13
-+ .long .LCFI14
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 16
-+ .long .LCFI14
-+ .long .LCFI15
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 20
-+ .long .LCFI15
-+ .long .LFE923
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 36
-+ .long 0x0
-+ .long 0x0
-+.LLST28:
-+ .long .LVL56
-+ .long .LVL58
-+ .value 0x1
-+ .byte 0x50
-+ .long .LVL59
-+ .long .LVL60
-+ .value 0x1
-+ .byte 0x50
-+ .long .LVL68
-+ .long .LVL72
-+ .value 0x1
-+ .byte 0x50
-+ .long .LVL73
-+ .long .LVL79
-+ .value 0x1
-+ .byte 0x50
-+ .long 0x0
-+ .long 0x0
-+.LLST29:
-+ .long .LVL56
-+ .long .LVL61
-+ .value 0x1
-+ .byte 0x52
-+ .long .LVL68
-+ .long .LVL71
-+ .value 0x1
-+ .byte 0x52
-+ .long .LVL73
-+ .long .LVL75
-+ .value 0x1
-+ .byte 0x52
-+ .long .LVL87
-+ .long .LFE923
-+ .value 0x1
-+ .byte 0x52
-+ .long 0x0
-+ .long 0x0
-+.LLST30:
-+ .long .LVL56
-+ .long .LVL57
-+ .value 0x1
-+ .byte 0x51
-+ .long .LVL57
-+ .long .LVL76
-+ .value 0x1
-+ .byte 0x56
-+ .long .LVL76
-+ .long .LVL78
-+ .value 0x1
-+ .byte 0x51
-+ .long .LVL87
-+ .long .LVL89
-+ .value 0x1
-+ .byte 0x56
-+ .long .LVL89
-+ .long .LFE923
-+ .value 0x1
-+ .byte 0x51
-+ .long 0x0
-+ .long 0x0
-+.LLST31:
-+ .long .LVL74
-+ .long .LVL83
-+ .value 0x1
-+ .byte 0x55
-+ .long .LVL83
-+ .long .LVL91
-+ .value 0x1
-+ .byte 0x51
-+ .long 0x0
-+ .long 0x0
-+.LLST32:
-+ .long .LVL62
-+ .long .LVL63
-+ .value 0x1
-+ .byte 0x57
-+ .long .LVL64
-+ .long .LVL68
-+ .value 0x1
-+ .byte 0x53
-+ .long .LVL69
-+ .long .LVL70
-+ .value 0x1
-+ .byte 0x53
-+ .long .LVL73
-+ .long .LVL84
-+ .value 0x1
-+ .byte 0x53
-+ .long .LVL84
-+ .long .LVL87
-+ .value 0x1
-+ .byte 0x52
-+ .long .LVL87
-+ .long .LVL88
-+ .value 0x1
-+ .byte 0x53
-+ .long .LVL88
-+ .long .LVL90
-+ .value 0x1
-+ .byte 0x57
-+ .long .LVL90
-+ .long .LFE923
-+ .value 0x1
-+ .byte 0x52
-+ .long 0x0
-+ .long 0x0
-+.LLST33:
-+ .long .LVL67
-+ .long .LVL68
-+ .value 0x1
-+ .byte 0x51
-+ .long .LVL69
-+ .long .LVL70
-+ .value 0x1
-+ .byte 0x51
-+ .long .LVL73
-+ .long .LVL78
-+ .value 0x1
-+ .byte 0x51
-+ .long 0x0
-+ .long 0x0
-+.LLST34:
-+ .long .LVL66
-+ .long .LVL68
-+ .value 0x1
-+ .byte 0x57
-+ .long .LVL69
-+ .long .LVL70
-+ .value 0x1
-+ .byte 0x57
-+ .long .LVL73
-+ .long .LVL77
-+ .value 0x1
-+ .byte 0x57
-+ .long 0x0
-+ .long 0x0
-+.LLST35:
-+ .long .LVL79
-+ .long .LVL80
-+ .value 0x1
-+ .byte 0x50
-+ .long 0x0
-+ .long 0x0
-+.LLST36:
-+ .long .LVL80
-+ .long .LVL81
-+ .value 0x1
-+ .byte 0x50
-+ .long 0x0
-+ .long 0x0
-+.LLST37:
-+ .long .LVL81
-+ .long .LVL82
-+ .value 0x1
-+ .byte 0x50
-+ .long 0x0
-+ .long 0x0
-+.LLST38:
-+ .long .LVL82
-+ .long .LVL85
-+ .value 0x1
-+ .byte 0x50
-+ .long 0x0
-+ .long 0x0
-+.LLST39:
-+ .long .LVL85
-+ .long .LVL86
-+ .value 0x1
-+ .byte 0x50
-+ .long 0x0
-+ .long 0x0
-+.LLST41:
-+ .long .LVL94
-+ .long .LVL95
-+ .value 0x1
-+ .byte 0x50
-+ .long 0x0
-+ .long 0x0
-+.LLST42:
-+ .long .LVL92
-+ .long .LVL93
-+ .value 0x1
-+ .byte 0x51
-+ .long 0x0
-+ .long 0x0
-+.LLST43:
-+ .long .LFB904
-+ .long .LCFI16
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 4
-+ .long .LCFI16
-+ .long .LCFI17
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 8
-+ .long .LCFI17
-+ .long .LCFI18
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 12
-+ .long .LCFI18
-+ .long .LCFI19
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 16
-+ .long .LCFI19
-+ .long .LFE904
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 40
-+ .long 0x0
-+ .long 0x0
-+.LLST44:
-+ .long .LVL96
-+ .long .LVL97
-+ .value 0x1
-+ .byte 0x50
-+ .long 0x0
-+ .long 0x0
-+.LLST45:
-+ .long .LVL99
-+ .long .LVL114
-+ .value 0x1
-+ .byte 0x56
-+ .long 0x0
-+ .long 0x0
-+.LLST46:
-+ .long .LVL98
-+ .long .LVL100
-+ .value 0x1
-+ .byte 0x52
-+ .long 0x0
-+ .long 0x0
-+.LLST47:
-+ .long .LVL102
-+ .long .LVL105
-+ .value 0x1
-+ .byte 0x53
-+ .long 0x0
-+ .long 0x0
-+.LLST48:
-+ .long .LVL101
-+ .long .LVL103
-+ .value 0x1
-+ .byte 0x52
-+ .long .LVL104
-+ .long .LVL108
-+ .value 0x1
-+ .byte 0x52
-+ .long .LVL112
-+ .long .LFE904
-+ .value 0x1
-+ .byte 0x52
-+ .long 0x0
-+ .long 0x0
-+.LLST49:
-+ .long .LVL101
-+ .long .LVL115
-+ .value 0x1
-+ .byte 0x57
-+ .long 0x0
-+ .long 0x0
-+.LLST50:
-+ .long .LVL106
-+ .long .LVL111
-+ .value 0x1
-+ .byte 0x50
-+ .long 0x0
-+ .long 0x0
-+.LLST51:
-+ .long .LVL107
-+ .long .LVL111
-+ .value 0x1
-+ .byte 0x51
-+ .long 0x0
-+ .long 0x0
-+.LLST52:
-+ .long .LVL108
-+ .long .LVL109
-+ .value 0x1
-+ .byte 0x52
-+ .long 0x0
-+ .long 0x0
-+.LLST53:
-+ .long .LVL110
-+ .long .LVL113
-+ .value 0x1
-+ .byte 0x53
-+ .long 0x0
-+ .long 0x0
-+.LLST54:
-+ .long .LFB920
-+ .long .LCFI20
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 4
-+ .long .LCFI20
-+ .long .LCFI21
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 8
-+ .long .LCFI21
-+ .long .LCFI22
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 12
-+ .long .LCFI22
-+ .long .LFE920
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 20
-+ .long 0x0
-+ .long 0x0
-+.LLST55:
-+ .long .LVL116
-+ .long .LVL117
-+ .value 0x1
-+ .byte 0x50
-+ .long .LVL117
-+ .long .LVL132
-+ .value 0x1
-+ .byte 0x53
-+ .long 0x0
-+ .long 0x0
-+.LLST56:
-+ .long .LVL123
-+ .long .LVL126
-+ .value 0x1
-+ .byte 0x52
-+ .long .LVL126
-+ .long .LVL129
-+ .value 0x1
-+ .byte 0x57
-+ .long 0x0
-+ .long 0x0
-+.LLST57:
-+ .long .LVL124
-+ .long .LVL130
-+ .value 0x1
-+ .byte 0x50
-+ .long 0x0
-+ .long 0x0
-+.LLST58:
-+ .long .LVL119
-+ .long .LVL122
-+ .value 0x1
-+ .byte 0x51
-+ .long 0x0
-+ .long 0x0
-+.LLST59:
-+ .long .LVL118
-+ .long .LVL121
-+ .value 0x1
-+ .byte 0x57
-+ .long 0x0
-+ .long 0x0
-+.LLST60:
-+ .long .LVL120
-+ .long .LVL127
-+ .value 0x1
-+ .byte 0x57
-+ .long .LVL128
-+ .long .LVL129
-+ .value 0x1
-+ .byte 0x57
-+ .long 0x0
-+ .long 0x0
-+.LLST61:
-+ .long .LFB921
-+ .long .LCFI23
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 4
-+ .long .LCFI23
-+ .long .LCFI24
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 8
-+ .long .LCFI24
-+ .long .LFE921
-+ .value 0x3
-+ .byte 0x74
-+ .sleb128 72
-+ .long 0x0
-+ .long 0x0
-+.LLST63:
-+ .long .LVL134
-+ .long .LVL135
-+ .value 0x1
-+ .byte 0x50
-+ .long 0x0
-+ .long 0x0
-+.LLST65:
-+ .long .LFB907
-+ .long .LCFI25
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 4
-+ .long .LCFI25
-+ .long .LCFI26
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 8
-+ .long .LCFI26
-+ .long .LCFI27
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 12
-+ .long .LCFI27
-+ .long .LCFI28
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 16
-+ .long .LCFI28
-+ .long .LCFI29
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 20
-+ .long .LCFI29
-+ .long .LFE907
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 24
-+ .long 0x0
-+ .long 0x0
-+.LLST66:
-+ .long .LVL137
-+ .long .LVL138
-+ .value 0x1
-+ .byte 0x50
-+ .long .LVL138
-+ .long .LVL139
-+ .value 0x6
-+ .byte 0x50
-+ .byte 0x93
-+ .uleb128 0x4
-+ .byte 0x52
-+ .byte 0x93
-+ .uleb128 0x4
-+ .long .LVL139
-+ .long .LVL140
-+ .value 0x1
-+ .byte 0x53
-+ .long .LVL143
-+ .long .LVL144
-+ .value 0x1
-+ .byte 0x53
-+ .long 0x0
-+ .long 0x0
-+.LLST67:
-+ .long .LVL141
-+ .long .LVL142
-+ .value 0x1
-+ .byte 0x50
-+ .long 0x0
-+ .long 0x0
-+.LLST69:
-+ .long .LFB892
-+ .long .LCFI30
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 4
-+ .long .LCFI30
-+ .long .LCFI31
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 8
-+ .long .LCFI31
-+ .long .LCFI32
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 12
-+ .long .LCFI32
-+ .long .LCFI33
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 16
-+ .long .LCFI33
-+ .long .LFE892
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 20
-+ .long 0x0
-+ .long 0x0
-+.LLST70:
-+ .long .LVL145
-+ .long .LVL146
-+ .value 0x1
-+ .byte 0x50
-+ .long .LVL146
-+ .long .LVL151
-+ .value 0x1
-+ .byte 0x57
-+ .long 0x0
-+ .long 0x0
-+.LLST71:
-+ .long .LVL145
-+ .long .LVL146
-+ .value 0x1
-+ .byte 0x52
-+ .long .LVL146
-+ .long .LVL152
-+ .value 0x1
-+ .byte 0x55
-+ .long 0x0
-+ .long 0x0
-+.LLST72:
-+ .long .LVL146
-+ .long .LVL150
-+ .value 0x1
-+ .byte 0x56
-+ .long 0x0
-+ .long 0x0
-+.LLST73:
-+ .long .LVL146
-+ .long .LVL149
-+ .value 0x1
-+ .byte 0x53
-+ .long 0x0
-+ .long 0x0
-+.LLST74:
-+ .long .LFB897
-+ .long .LCFI34
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 4
-+ .long .LCFI34
-+ .long .LCFI35
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 8
-+ .long .LCFI35
-+ .long .LCFI36
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 12
-+ .long .LCFI36
-+ .long .LFE897
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 16
-+ .long 0x0
-+ .long 0x0
-+.LLST75:
-+ .long .LVL153
-+ .long .LVL155
-+ .value 0x1
-+ .byte 0x50
-+ .long .LVL155
-+ .long .LVL167
-+ .value 0x1
-+ .byte 0x53
-+ .long 0x0
-+ .long 0x0
-+.LLST76:
-+ .long .LVL156
-+ .long .LVL157
-+ .value 0x1
-+ .byte 0x50
-+ .long .LVL158
-+ .long .LVL166
-+ .value 0x1
-+ .byte 0x51
-+ .long 0x0
-+ .long 0x0
-+.LLST77:
-+ .long .LVL154
-+ .long .LVL160
-+ .value 0x1
-+ .byte 0x56
-+ .long .LVL162
-+ .long .LVL168
-+ .value 0x1
-+ .byte 0x56
-+ .long 0x0
-+ .long 0x0
-+.LLST78:
-+ .long .LVL159
-+ .long .LVL164
-+ .value 0x1
-+ .byte 0x52
-+ .long 0x0
-+ .long 0x0
-+.LLST79:
-+ .long .LVL161
-+ .long .LVL165
-+ .value 0x1
-+ .byte 0x50
-+ .long 0x0
-+ .long 0x0
-+.LLST80:
-+ .long .LFB898
-+ .long .LCFI37
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 4
-+ .long .LCFI37
-+ .long .LFE898
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 8
-+ .long 0x0
-+ .long 0x0
-+.LLST81:
-+ .long .LVL169
-+ .long .LVL170
-+ .value 0x1
-+ .byte 0x50
-+ .long .LVL170
-+ .long .LVL173
-+ .value 0x1
-+ .byte 0x53
-+ .long 0x0
-+ .long 0x0
-+.LLST82:
-+ .long .LVL170
-+ .long .LVL171
-+ .value 0x1
-+ .byte 0x50
-+ .long .LVL172
-+ .long .LVL173
-+ .value 0x1
-+ .byte 0x50
-+ .long 0x0
-+ .long 0x0
-+.LLST83:
-+ .long .LFB893
-+ .long .LCFI38
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 4
-+ .long .LCFI38
-+ .long .LCFI39
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 8
-+ .long .LCFI39
-+ .long .LCFI40
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 12
-+ .long .LCFI40
-+ .long .LCFI41
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 16
-+ .long .LCFI41
-+ .long .LCFI42
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 20
-+ .long .LCFI42
-+ .long .LFE893
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 28
-+ .long 0x0
-+ .long 0x0
-+.LLST84:
-+ .long .LVL174
-+ .long .LVL176
-+ .value 0x1
-+ .byte 0x50
-+ .long .LVL176
-+ .long .LVL190
-+ .value 0x1
-+ .byte 0x53
-+ .long 0x0
-+ .long 0x0
-+.LLST85:
-+ .long .LVL174
-+ .long .LVL175
-+ .value 0x1
-+ .byte 0x52
-+ .long .LVL175
-+ .long .LVL191
-+ .value 0x1
-+ .byte 0x55
-+ .long 0x0
-+ .long 0x0
-+.LLST86:
-+ .long .LVL177
-+ .long .LVL188
-+ .value 0x1
-+ .byte 0x56
-+ .long 0x0
-+ .long 0x0
-+.LLST87:
-+ .long .LVL183
-+ .long .LVL189
-+ .value 0x1
-+ .byte 0x57
-+ .long 0x0
-+ .long 0x0
-+.LLST88:
-+ .long .LVL180
-+ .long .LVL181
-+ .value 0x1
-+ .byte 0x52
-+ .long 0x0
-+ .long 0x0
-+.LLST89:
-+ .long .LVL179
-+ .long .LVL182
-+ .value 0x1
-+ .byte 0x50
-+ .long 0x0
-+ .long 0x0
-+.LLST90:
-+ .long .LVL181
-+ .long .LVL184
-+ .value 0x1
-+ .byte 0x52
-+ .long .LVL185
-+ .long .LVL186
-+ .value 0x1
-+ .byte 0x52
-+ .long 0x0
-+ .long 0x0
-+.LLST91:
-+ .long .LFB916
-+ .long .LCFI43
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 4
-+ .long .LCFI43
-+ .long .LCFI44
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 8
-+ .long .LCFI44
-+ .long .LCFI45
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 12
-+ .long .LCFI45
-+ .long .LFE916
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 44
-+ .long 0x0
-+ .long 0x0
-+.LLST92:
-+ .long .LVL192
-+ .long .LVL193
-+ .value 0x1
-+ .byte 0x50
-+ .long .LVL193
-+ .long .LVL194
-+ .value 0x1
-+ .byte 0x53
-+ .long .LVL194
-+ .long .LVL195
-+ .value 0x1
-+ .byte 0x50
-+ .long .LVL195
-+ .long .LVL197
-+ .value 0x1
-+ .byte 0x53
-+ .long .LVL197
-+ .long .LVL199
-+ .value 0x1
-+ .byte 0x50
-+ .long .LVL201
-+ .long .LVL204
-+ .value 0x1
-+ .byte 0x53
-+ .long 0x0
-+ .long 0x0
-+.LLST93:
-+ .long .LVL198
-+ .long .LVL205
-+ .value 0x1
-+ .byte 0x56
-+ .long 0x0
-+ .long 0x0
-+.LLST94:
-+ .long .LVL196
-+ .long .LVL197
-+ .value 0x1
-+ .byte 0x50
-+ .long .LVL202
-+ .long .LVL203
-+ .value 0x1
-+ .byte 0x50
-+ .long 0x0
-+ .long 0x0
-+.LLST95:
-+ .long .LVL199
-+ .long .LVL200
-+ .value 0x1
-+ .byte 0x50
-+ .long 0x0
-+ .long 0x0
-+.LLST97:
-+ .long .LVL206
-+ .long .LVL208
-+ .value 0x1
-+ .byte 0x50
-+ .long 0x0
-+ .long 0x0
-+.LLST98:
-+ .long .LVL207
-+ .long .LVL208
-+ .value 0x1
-+ .byte 0x52
-+ .long 0x0
-+ .long 0x0
-+.LLST100:
-+ .long .LVL209
-+ .long .LVL210
-+ .value 0x1
-+ .byte 0x50
-+ .long 0x0
-+ .long 0x0
-+.LLST101:
-+ .long .LVL211
-+ .long .LVL212
-+ .value 0x1
-+ .byte 0x50
-+ .long .LVL212
-+ .long .LFE925
-+ .value 0x1
-+ .byte 0x50
-+ .long 0x0
-+ .long 0x0
-+.LLST103:
-+ .long .LVL213
-+ .long .LVL215
-+ .value 0x1
-+ .byte 0x50
-+ .long 0x0
-+ .long 0x0
-+.LLST104:
-+ .long .LVL214
-+ .long .LVL215
-+ .value 0x1
-+ .byte 0x52
-+ .long 0x0
-+ .long 0x0
-+.LLST106:
-+ .long .LVL216
-+ .long .LVL217
-+ .value 0x1
-+ .byte 0x50
-+ .long 0x0
-+ .long 0x0
-+.LLST107:
-+ .long .LVL218
-+ .long .LVL219
-+ .value 0x1
-+ .byte 0x52
-+ .long .LVL220
-+ .long .LVL223
-+ .value 0x1
-+ .byte 0x52
-+ .long 0x0
-+ .long 0x0
-+.LLST108:
-+ .long .LVL221
-+ .long .LVL222
-+ .value 0x1
-+ .byte 0x50
-+ .long 0x0
-+ .long 0x0
-+.LLST109:
-+ .long .LFB901
-+ .long .LCFI46
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 4
-+ .long .LCFI46
-+ .long .LCFI47
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 8
-+ .long .LCFI47
-+ .long .LCFI48
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 12
-+ .long .LCFI48
-+ .long .LFE901
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 16
-+ .long 0x0
-+ .long 0x0
-+.LLST110:
-+ .long .LVL224
-+ .long .LVL227
-+ .value 0x1
-+ .byte 0x50
-+ .long .LVL227
-+ .long .LVL228
-+ .value 0x1
-+ .byte 0x57
-+ .long .LVL228
-+ .long .LVL229
-+ .value 0x1
-+ .byte 0x50
-+ .long .LVL229
-+ .long .LVL232
-+ .value 0x1
-+ .byte 0x57
-+ .long 0x0
-+ .long 0x0
-+.LLST111:
-+ .long .LVL226
-+ .long .LVL230
-+ .value 0x1
-+ .byte 0x53
-+ .long .LVL230
-+ .long .LVL233
-+ .value 0x1
-+ .byte 0x50
-+ .long 0x0
-+ .long 0x0
-+.LLST112:
-+ .long .LVL225
-+ .long .LVL231
-+ .value 0x1
-+ .byte 0x56
-+ .long 0x0
-+ .long 0x0
-+.LLST113:
-+ .long .LFB909
-+ .long .LCFI49
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 4
-+ .long .LCFI49
-+ .long .LCFI50
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 8
-+ .long .LCFI50
-+ .long .LFE909
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 48
-+ .long 0x0
-+ .long 0x0
-+.LLST114:
-+ .long .LVL235
-+ .long .LVL237
-+ .value 0x1
-+ .byte 0x51
-+ .long 0x0
-+ .long 0x0
-+.LLST115:
-+ .long .LVL234
-+ .long .LVL236
-+ .value 0x1
-+ .byte 0x52
-+ .long 0x0
-+ .long 0x0
-+.LLST116:
-+ .long .LVL238
-+ .long .LVL239
-+ .value 0x1
-+ .byte 0x50
-+ .long 0x0
-+ .long 0x0
-+.LLST118:
-+ .long .LVL240
-+ .long .LVL241
-+ .value 0x1
-+ .byte 0x50
-+ .long 0x0
-+ .long 0x0
-+.LLST120:
-+ .long .LVL242
-+ .long .LVL243
-+ .value 0x1
-+ .byte 0x50
-+ .long 0x0
-+ .long 0x0
-+.LLST122:
-+ .long .LVL244
-+ .long .LVL245
-+ .value 0x1
-+ .byte 0x50
-+ .long 0x0
-+ .long 0x0
-+.LLST124:
-+ .long .LVL246
-+ .long .LVL247
-+ .value 0x1
-+ .byte 0x50
-+ .long 0x0
-+ .long 0x0
-+.LLST126:
-+ .long .LVL248
-+ .long .LVL249
-+ .value 0x1
-+ .byte 0x50
-+ .long 0x0
-+ .long 0x0
-+.LLST128:
-+ .long .LVL250
-+ .long .LVL251
-+ .value 0x1
-+ .byte 0x50
-+ .long 0x0
-+ .long 0x0
-+.LLST130:
-+ .long .LVL252
-+ .long .LVL253
-+ .value 0x1
-+ .byte 0x50
-+ .long .LVL253
-+ .long .LVL254
-+ .value 0x1
-+ .byte 0x50
-+ .long 0x0
-+ .long 0x0
-+.LLST131:
-+ .long .LVL252
-+ .long .LVL253
-+ .value 0x1
-+ .byte 0x52
-+ .long .LVL253
-+ .long .LFE895
-+ .value 0x1
-+ .byte 0x52
-+ .long 0x0
-+ .long 0x0
-+.LLST132:
-+ .long .LFB896
-+ .long .LCFI51
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 4
-+ .long .LCFI51
-+ .long .LCFI52
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 8
-+ .long .LCFI52
-+ .long .LCFI53
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 12
-+ .long .LCFI53
-+ .long .LFE896
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 16
-+ .long 0x0
-+ .long 0x0
-+.LLST133:
-+ .long .LVL255
-+ .long .LVL257
-+ .value 0x1
-+ .byte 0x50
-+ .long .LVL257
-+ .long .LVL267
-+ .value 0x1
-+ .byte 0x53
-+ .long 0x0
-+ .long 0x0
-+.LLST134:
-+ .long .LVL258
-+ .long .LVL266
-+ .value 0x1
-+ .byte 0x51
-+ .long 0x0
-+ .long 0x0
-+.LLST135:
-+ .long .LVL256
-+ .long .LVL260
-+ .value 0x1
-+ .byte 0x56
-+ .long .LVL262
-+ .long .LVL268
-+ .value 0x1
-+ .byte 0x56
-+ .long 0x0
-+ .long 0x0
-+.LLST136:
-+ .long .LVL259
-+ .long .LVL264
-+ .value 0x1
-+ .byte 0x52
-+ .long 0x0
-+ .long 0x0
-+.LLST137:
-+ .long .LVL261
-+ .long .LVL265
-+ .value 0x1
-+ .byte 0x50
-+ .long 0x0
-+ .long 0x0
-+.LLST138:
-+ .long .LFB894
-+ .long .LCFI54
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 4
-+ .long .LCFI54
-+ .long .LCFI55
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 8
-+ .long .LCFI55
-+ .long .LCFI56
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 12
-+ .long .LCFI56
-+ .long .LFE894
-+ .value 0x2
-+ .byte 0x74
-+ .sleb128 16
-+ .long 0x0
-+ .long 0x0
-+.LLST139:
-+ .long .LVL269
-+ .long .LVL271
-+ .value 0x1
-+ .byte 0x50
-+ .long .LVL271
-+ .long .LVL275
-+ .value 0x1
-+ .byte 0x56
-+ .long 0x0
-+ .long 0x0
-+.LLST140:
-+ .long .LVL269
-+ .long .LVL270
-+ .value 0x1
-+ .byte 0x52
-+ .long 0x0
-+ .long 0x0
-+.LLST141:
-+ .long .LVL272
-+ .long .LVL276
-+ .value 0x1
-+ .byte 0x57
-+ .long 0x0
-+ .long 0x0
-+.LLST142:
-+ .long .LVL273
-+ .long .LVL274
-+ .value 0x1
-+ .byte 0x53
-+ .long .LVL274
-+ .long .LVL277
-+ .value 0x1
-+ .byte 0x52
-+ .long 0x0
-+ .long 0x0
-+ .section .debug_info
-+ .long 0xaa89
-+ .value 0x2
-+ .long .Ldebug_abbrev0
-+ .byte 0x4
-+ .uleb128 0x1
-+ .long .Ldebug_line0
-+ .long 0x0
-+ .long .LASF1718
-+ .byte 0x1
-+ .long .LASF1719
-+ .long .LASF1720
-+ .uleb128 0x2
-+ .string "int"
-+ .byte 0x4
-+ .byte 0x5
-+ .uleb128 0x3
-+ .long .LASF0
-+ .byte 0x4
-+ .byte 0x7
-+ .uleb128 0x3
-+ .long .LASF1
-+ .byte 0x4
-+ .byte 0x7
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x3c
-+ .uleb128 0x5
-+ .long 0x48
-+ .byte 0x1
-+ .uleb128 0x6
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x7
-+ .long .LASF4
-+ .byte 0x1d
-+ .byte 0xb
-+ .long 0x53
-+ .uleb128 0x3
-+ .long .LASF2
-+ .byte 0x2
-+ .byte 0x7
-+ .uleb128 0x3
-+ .long .LASF3
-+ .byte 0x4
-+ .byte 0x5
-+ .uleb128 0x7
-+ .long .LASF5
-+ .byte 0x1d
-+ .byte 0xe
-+ .long 0x21
-+ .uleb128 0x7
-+ .long .LASF6
-+ .byte 0x1d
-+ .byte 0x12
-+ .long 0x77
-+ .uleb128 0x3
-+ .long .LASF0
-+ .byte 0x4
-+ .byte 0x7
-+ .uleb128 0x7
-+ .long .LASF7
-+ .byte 0x1d
-+ .byte 0x13
-+ .long 0x21
-+ .uleb128 0x7
-+ .long .LASF8
-+ .byte 0x1d
-+ .byte 0x15
-+ .long 0x5a
-+ .uleb128 0x7
-+ .long .LASF9
-+ .byte 0x1d
-+ .byte 0x17
-+ .long 0x5a
-+ .uleb128 0x7
-+ .long .LASF10
-+ .byte 0x1d
-+ .byte 0x18
-+ .long 0x21
-+ .uleb128 0x7
-+ .long .LASF11
-+ .byte 0x1d
-+ .byte 0x19
-+ .long 0x21
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0xbb
-+ .uleb128 0x3
-+ .long .LASF12
-+ .byte 0x1
-+ .byte 0x6
-+ .uleb128 0x7
-+ .long .LASF13
-+ .byte 0x1d
-+ .byte 0x1e
-+ .long 0x77
-+ .uleb128 0x7
-+ .long .LASF14
-+ .byte 0x1d
-+ .byte 0x1f
-+ .long 0x77
-+ .uleb128 0x7
-+ .long .LASF15
-+ .byte 0x1d
-+ .byte 0x26
-+ .long 0xe3
-+ .uleb128 0x3
-+ .long .LASF16
-+ .byte 0x8
-+ .byte 0x5
-+ .uleb128 0x7
-+ .long .LASF17
-+ .byte 0x1e
-+ .byte 0x6
-+ .long 0x53
-+ .uleb128 0x7
-+ .long .LASF18
-+ .byte 0x1e
-+ .byte 0xd
-+ .long 0x100
-+ .uleb128 0x3
-+ .long .LASF19
-+ .byte 0x1
-+ .byte 0x6
-+ .uleb128 0x7
-+ .long .LASF20
-+ .byte 0x1e
-+ .byte 0xe
-+ .long 0x112
-+ .uleb128 0x3
-+ .long .LASF21
-+ .byte 0x1
-+ .byte 0x8
-+ .uleb128 0x7
-+ .long .LASF22
-+ .byte 0x1e
-+ .byte 0x10
-+ .long 0x124
-+ .uleb128 0x3
-+ .long .LASF23
-+ .byte 0x2
-+ .byte 0x5
-+ .uleb128 0x7
-+ .long .LASF24
-+ .byte 0x1e
-+ .byte 0x11
-+ .long 0x53
-+ .uleb128 0x7
-+ .long .LASF25
-+ .byte 0x1e
-+ .byte 0x13
-+ .long 0x21
-+ .uleb128 0x7
-+ .long .LASF26
-+ .byte 0x1e
-+ .byte 0x14
-+ .long 0x77
-+ .uleb128 0x7
-+ .long .LASF27
-+ .byte 0x1e
-+ .byte 0x17
-+ .long 0xe3
-+ .uleb128 0x7
-+ .long .LASF28
-+ .byte 0x1e
-+ .byte 0x18
-+ .long 0x162
-+ .uleb128 0x3
-+ .long .LASF29
-+ .byte 0x8
-+ .byte 0x7
-+ .uleb128 0x8
-+ .string "s8"
-+ .byte 0x1e
-+ .byte 0x27
-+ .long 0x100
-+ .uleb128 0x8
-+ .string "u32"
-+ .byte 0x1e
-+ .byte 0x2e
-+ .long 0x77
-+ .uleb128 0x8
-+ .string "s64"
-+ .byte 0x1e
-+ .byte 0x30
-+ .long 0xe3
-+ .uleb128 0x8
-+ .string "u64"
-+ .byte 0x1e
-+ .byte 0x31
-+ .long 0x162
-+ .uleb128 0x7
-+ .long .LASF30
-+ .byte 0x1c
-+ .byte 0x13
-+ .long 0x141
-+ .uleb128 0x7
-+ .long .LASF31
-+ .byte 0x1c
-+ .byte 0x16
-+ .long 0x194
-+ .uleb128 0x7
-+ .long .LASF32
-+ .byte 0x1c
-+ .byte 0x18
-+ .long 0x48
-+ .uleb128 0x7
-+ .long .LASF33
-+ .byte 0x1c
-+ .byte 0x1b
-+ .long 0x61
-+ .uleb128 0x7
-+ .long .LASF34
-+ .byte 0x1c
-+ .byte 0x1f
-+ .long 0x9f
-+ .uleb128 0x7
-+ .long .LASF35
-+ .byte 0x1c
-+ .byte 0x20
-+ .long 0xaa
-+ .uleb128 0x3
-+ .long .LASF36
-+ .byte 0x1
-+ .byte 0x2
-+ .uleb128 0x7
-+ .long .LASF37
-+ .byte 0x1c
-+ .byte 0x26
-+ .long 0xc2
-+ .uleb128 0x7
-+ .long .LASF38
-+ .byte 0x1c
-+ .byte 0x27
-+ .long 0xcd
-+ .uleb128 0x7
-+ .long .LASF39
-+ .byte 0x1c
-+ .byte 0x3a
-+ .long 0xd8
-+ .uleb128 0x7
-+ .long .LASF40
-+ .byte 0x1c
-+ .byte 0x43
-+ .long 0x6c
-+ .uleb128 0x7
-+ .long .LASF41
-+ .byte 0x1c
-+ .byte 0x48
-+ .long 0x7e
-+ .uleb128 0x7
-+ .long .LASF42
-+ .byte 0x1c
-+ .byte 0x52
-+ .long 0x89
-+ .uleb128 0x7
-+ .long .LASF43
-+ .byte 0x1c
-+ .byte 0x57
-+ .long 0x94
-+ .uleb128 0x7
-+ .long .LASF44
-+ .byte 0x1c
-+ .byte 0x8d
-+ .long 0x189
-+ .uleb128 0x7
-+ .long .LASF45
-+ .byte 0x1c
-+ .byte 0x98
-+ .long 0x2f
-+ .uleb128 0x7
-+ .long .LASF46
-+ .byte 0x1c
-+ .byte 0xc1
-+ .long 0x77
-+ .uleb128 0x7
-+ .long .LASF47
-+ .byte 0x1c
-+ .byte 0xc4
-+ .long 0x189
-+ .uleb128 0x9
-+ .long 0x297
-+ .byte 0x10
-+ .byte 0xf
-+ .byte 0x12
-+ .uleb128 0xa
-+ .long .LASF48
-+ .byte 0xf
-+ .byte 0x13
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF49
-+ .byte 0xf
-+ .byte 0x13
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF50
-+ .byte 0xf
-+ .byte 0x13
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF51
-+ .byte 0xf
-+ .byte 0x13
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .byte 0x0
-+ .uleb128 0x9
-+ .long 0x2d8
-+ .byte 0x14
-+ .byte 0xf
-+ .byte 0x16
-+ .uleb128 0xa
-+ .long .LASF52
-+ .byte 0xf
-+ .byte 0x17
-+ .long 0x2d8
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xb
-+ .string "val"
-+ .byte 0xf
-+ .byte 0x18
-+ .long 0x173
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF53
-+ .byte 0xf
-+ .byte 0x19
-+ .long 0x173
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF54
-+ .byte 0xf
-+ .byte 0x1a
-+ .long 0x189
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x173
-+ .uleb128 0xc
-+ .long 0x2f7
-+ .byte 0x14
-+ .byte 0xf
-+ .byte 0x11
-+ .uleb128 0xd
-+ .long 0x256
-+ .uleb128 0xe
-+ .long .LASF55
-+ .byte 0xf
-+ .byte 0x1b
-+ .long 0x297
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x319
-+ .long .LASF59
-+ .byte 0x18
-+ .byte 0xf
-+ .byte 0xf
-+ .uleb128 0xb
-+ .string "fn"
-+ .byte 0xf
-+ .byte 0x10
-+ .long 0x32f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x10
-+ .long 0x2de
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .byte 0x0
-+ .uleb128 0x11
-+ .long 0x329
-+ .byte 0x1
-+ .long 0x5a
-+ .uleb128 0x6
-+ .long 0x329
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x2f7
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x319
-+ .uleb128 0x9
-+ .long 0x34c
-+ .byte 0x4
-+ .byte 0x14
-+ .byte 0x5b
-+ .uleb128 0xb
-+ .string "pgd"
-+ .byte 0x14
-+ .byte 0x5b
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .byte 0x0
-+ .uleb128 0x7
-+ .long .LASF56
-+ .byte 0x14
-+ .byte 0x5b
-+ .long 0x335
-+ .uleb128 0x9
-+ .long 0x36e
-+ .byte 0x4
-+ .byte 0x14
-+ .byte 0x5c
-+ .uleb128 0xa
-+ .long .LASF57
-+ .byte 0x14
-+ .byte 0x5c
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .byte 0x0
-+ .uleb128 0x7
-+ .long .LASF58
-+ .byte 0x14
-+ .byte 0x5c
-+ .long 0x357
-+ .uleb128 0xf
-+ .long 0x4fa
-+ .long .LASF60
-+ .byte 0x54
-+ .byte 0x49
-+ .byte 0x48
-+ .uleb128 0xb
-+ .string "ebx"
-+ .byte 0x49
-+ .byte 0x4c
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xb
-+ .string "ecx"
-+ .byte 0x49
-+ .byte 0x4d
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xb
-+ .string "edx"
-+ .byte 0x49
-+ .byte 0x4e
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xb
-+ .string "esi"
-+ .byte 0x49
-+ .byte 0x4f
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xb
-+ .string "edi"
-+ .byte 0x49
-+ .byte 0x50
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xb
-+ .string "ebp"
-+ .byte 0x49
-+ .byte 0x51
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0xb
-+ .string "eax"
-+ .byte 0x49
-+ .byte 0x52
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0xa
-+ .long .LASF61
-+ .byte 0x49
-+ .byte 0x53
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .uleb128 0xa
-+ .long .LASF62
-+ .byte 0x49
-+ .byte 0x54
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .uleb128 0xa
-+ .long .LASF63
-+ .byte 0x49
-+ .byte 0x55
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x24
-+ .uleb128 0xa
-+ .long .LASF64
-+ .byte 0x49
-+ .byte 0x56
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x28
-+ .uleb128 0xa
-+ .long .LASF65
-+ .byte 0x49
-+ .byte 0x57
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x2c
-+ .uleb128 0xb
-+ .string "eip"
-+ .byte 0x49
-+ .byte 0x58
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x30
-+ .uleb128 0xb
-+ .string "cs"
-+ .byte 0x49
-+ .byte 0x59
-+ .long 0x53
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x34
-+ .uleb128 0xa
-+ .long .LASF66
-+ .byte 0x49
-+ .byte 0x59
-+ .long 0x53
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x36
-+ .uleb128 0xa
-+ .long .LASF67
-+ .byte 0x49
-+ .byte 0x5a
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x38
-+ .uleb128 0xb
-+ .string "esp"
-+ .byte 0x49
-+ .byte 0x5b
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x3c
-+ .uleb128 0xb
-+ .string "ss"
-+ .byte 0x49
-+ .byte 0x5c
-+ .long 0x53
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x40
-+ .uleb128 0xa
-+ .long .LASF68
-+ .byte 0x49
-+ .byte 0x5c
-+ .long 0x53
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x42
-+ .uleb128 0xb
-+ .string "es"
-+ .byte 0x49
-+ .byte 0x60
-+ .long 0x53
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x44
-+ .uleb128 0xa
-+ .long .LASF69
-+ .byte 0x49
-+ .byte 0x60
-+ .long 0x53
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x46
-+ .uleb128 0xb
-+ .string "ds"
-+ .byte 0x49
-+ .byte 0x61
-+ .long 0x53
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x48
-+ .uleb128 0xa
-+ .long .LASF70
-+ .byte 0x49
-+ .byte 0x61
-+ .long 0x53
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4a
-+ .uleb128 0xb
-+ .string "fs"
-+ .byte 0x49
-+ .byte 0x62
-+ .long 0x53
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4c
-+ .uleb128 0xa
-+ .long .LASF71
-+ .byte 0x49
-+ .byte 0x62
-+ .long 0x53
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4e
-+ .uleb128 0xb
-+ .string "gs"
-+ .byte 0x49
-+ .byte 0x63
-+ .long 0x53
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x50
-+ .uleb128 0xa
-+ .long .LASF72
-+ .byte 0x49
-+ .byte 0x63
-+ .long 0x53
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x52
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x515
-+ .long .LASF73
-+ .byte 0x20
-+ .byte 0x49
-+ .byte 0x66
-+ .uleb128 0xa
-+ .long .LASF74
-+ .byte 0x49
-+ .byte 0x67
-+ .long 0x515
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .byte 0x0
-+ .uleb128 0x12
-+ .long 0x525
-+ .long 0x2f
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x7
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x587
-+ .long .LASF75
-+ .byte 0xa0
-+ .byte 0x49
-+ .byte 0x6a
-+ .uleb128 0xa
-+ .long .LASF76
-+ .byte 0x49
-+ .byte 0x6b
-+ .long 0x379
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF53
-+ .byte 0x49
-+ .byte 0x6c
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x54
-+ .uleb128 0xa
-+ .long .LASF77
-+ .byte 0x49
-+ .byte 0x6d
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x58
-+ .uleb128 0xa
-+ .long .LASF78
-+ .byte 0x49
-+ .byte 0x6e
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x5c
-+ .uleb128 0xa
-+ .long .LASF79
-+ .byte 0x49
-+ .byte 0x6f
-+ .long 0x4fa
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x60
-+ .uleb128 0xa
-+ .long .LASF80
-+ .byte 0x49
-+ .byte 0x70
-+ .long 0x4fa
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x80
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x674
-+ .long .LASF81
-+ .byte 0x40
-+ .byte 0x69
-+ .byte 0x9
-+ .uleb128 0xb
-+ .string "ebx"
-+ .byte 0x69
-+ .byte 0xa
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xb
-+ .string "ecx"
-+ .byte 0x69
-+ .byte 0xb
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xb
-+ .string "edx"
-+ .byte 0x69
-+ .byte 0xc
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xb
-+ .string "esi"
-+ .byte 0x69
-+ .byte 0xd
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xb
-+ .string "edi"
-+ .byte 0x69
-+ .byte 0xe
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xb
-+ .string "ebp"
-+ .byte 0x69
-+ .byte 0xf
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0xb
-+ .string "eax"
-+ .byte 0x69
-+ .byte 0x10
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0xb
-+ .string "xds"
-+ .byte 0x69
-+ .byte 0x11
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .uleb128 0xb
-+ .string "xes"
-+ .byte 0x69
-+ .byte 0x12
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .uleb128 0xb
-+ .string "xfs"
-+ .byte 0x69
-+ .byte 0x13
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x24
-+ .uleb128 0xa
-+ .long .LASF65
-+ .byte 0x69
-+ .byte 0x15
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x28
-+ .uleb128 0xb
-+ .string "eip"
-+ .byte 0x69
-+ .byte 0x16
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x2c
-+ .uleb128 0xb
-+ .string "xcs"
-+ .byte 0x69
-+ .byte 0x17
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x30
-+ .uleb128 0xa
-+ .long .LASF67
-+ .byte 0x69
-+ .byte 0x18
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x34
-+ .uleb128 0xb
-+ .string "esp"
-+ .byte 0x69
-+ .byte 0x19
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x38
-+ .uleb128 0xb
-+ .string "xss"
-+ .byte 0x69
-+ .byte 0x1a
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x3c
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x587
-+ .uleb128 0xf
-+ .long 0x7ad
-+ .long .LASF82
-+ .byte 0x54
-+ .byte 0x48
-+ .byte 0xd
-+ .uleb128 0xa
-+ .long .LASF83
-+ .byte 0x48
-+ .byte 0xe
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF84
-+ .byte 0x48
-+ .byte 0xf
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF85
-+ .byte 0x48
-+ .byte 0x10
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF86
-+ .byte 0x48
-+ .byte 0x11
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xa
-+ .long .LASF87
-+ .byte 0x48
-+ .byte 0x12
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xa
-+ .long .LASF88
-+ .byte 0x48
-+ .byte 0x13
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0xa
-+ .long .LASF89
-+ .byte 0x48
-+ .byte 0x14
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0xa
-+ .long .LASF90
-+ .byte 0x48
-+ .byte 0x15
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .uleb128 0xa
-+ .long .LASF91
-+ .byte 0x48
-+ .byte 0x16
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .uleb128 0xa
-+ .long .LASF92
-+ .byte 0x48
-+ .byte 0x17
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x24
-+ .uleb128 0xa
-+ .long .LASF93
-+ .byte 0x48
-+ .byte 0x18
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x28
-+ .uleb128 0xa
-+ .long .LASF94
-+ .byte 0x48
-+ .byte 0x19
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x2c
-+ .uleb128 0xa
-+ .long .LASF95
-+ .byte 0x48
-+ .byte 0x1a
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x30
-+ .uleb128 0xa
-+ .long .LASF96
-+ .byte 0x48
-+ .byte 0x1b
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x34
-+ .uleb128 0xa
-+ .long .LASF97
-+ .byte 0x48
-+ .byte 0x1c
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x38
-+ .uleb128 0xa
-+ .long .LASF98
-+ .byte 0x48
-+ .byte 0x1d
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x3c
-+ .uleb128 0xa
-+ .long .LASF99
-+ .byte 0x48
-+ .byte 0x1e
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x40
-+ .uleb128 0xa
-+ .long .LASF100
-+ .byte 0x48
-+ .byte 0x1f
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x44
-+ .uleb128 0xa
-+ .long .LASF101
-+ .byte 0x48
-+ .byte 0x20
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x48
-+ .uleb128 0xa
-+ .long .LASF102
-+ .byte 0x48
-+ .byte 0x21
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4c
-+ .uleb128 0xa
-+ .long .LASF103
-+ .byte 0x48
-+ .byte 0x22
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x50
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x7f2
-+ .long .LASF104
-+ .byte 0xc
-+ .byte 0x2f
-+ .byte 0xa
-+ .uleb128 0xa
-+ .long .LASF105
-+ .byte 0x2f
-+ .byte 0xb
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF106
-+ .byte 0x2f
-+ .byte 0xd
-+ .long 0x7f2
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF107
-+ .byte 0x2f
-+ .byte 0xe
-+ .long 0x53
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF53
-+ .byte 0x2f
-+ .byte 0x10
-+ .long 0x53
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xa
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7f8
-+ .uleb128 0x14
-+ .long 0xbb
-+ .uleb128 0x15
-+ .long 0x8dc
-+ .long .LASF108
-+ .byte 0x40
-+ .byte 0x38
-+ .value 0x154
-+ .uleb128 0x16
-+ .long .LASF109
-+ .byte 0x38
-+ .value 0x15b
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x16
-+ .long .LASF110
-+ .byte 0x38
-+ .value 0x15c
-+ .long 0x8dc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0x16
-+ .long .LASF111
-+ .byte 0x38
-+ .value 0x15d
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0x16
-+ .long .LASF112
-+ .byte 0x38
-+ .value 0x15e
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0x16
-+ .long .LASF113
-+ .byte 0x38
-+ .value 0x15f
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0x16
-+ .long .LASF114
-+ .byte 0x38
-+ .value 0x160
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .uleb128 0x16
-+ .long .LASF115
-+ .byte 0x38
-+ .value 0x161
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .uleb128 0x16
-+ .long .LASF116
-+ .byte 0x38
-+ .value 0x162
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x24
-+ .uleb128 0x16
-+ .long .LASF117
-+ .byte 0x38
-+ .value 0x163
-+ .long 0x53
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x28
-+ .uleb128 0x17
-+ .string "pad"
-+ .byte 0x38
-+ .value 0x164
-+ .long 0x53
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x2a
-+ .uleb128 0x16
-+ .long .LASF118
-+ .byte 0x38
-+ .value 0x165
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x2c
-+ .uleb128 0x16
-+ .long .LASF119
-+ .byte 0x38
-+ .value 0x166
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x30
-+ .uleb128 0x16
-+ .long .LASF120
-+ .byte 0x38
-+ .value 0x167
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x34
-+ .uleb128 0x17
-+ .string "_f"
-+ .byte 0x38
-+ .value 0x168
-+ .long 0x8ec
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x38
-+ .byte 0x0
-+ .uleb128 0x12
-+ .long 0x8ec
-+ .long 0x2f
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x2
-+ .byte 0x0
-+ .uleb128 0x12
-+ .long 0x8fc
-+ .long 0xbb
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x7
-+ .byte 0x0
-+ .uleb128 0x9
-+ .long 0x913
-+ .byte 0x4
-+ .byte 0x13
-+ .byte 0x58
-+ .uleb128 0xa
-+ .long .LASF121
-+ .byte 0x13
-+ .byte 0x58
-+ .long 0x913
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .byte 0x0
-+ .uleb128 0x12
-+ .long 0x923
-+ .long 0x2f
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x7
-+ .long .LASF122
-+ .byte 0x13
-+ .byte 0x58
-+ .long 0x8fc
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x934
-+ .uleb128 0x18
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x940
-+ .uleb128 0x19
-+ .byte 0x1
-+ .uleb128 0xf
-+ .long 0x967
-+ .long .LASF123
-+ .byte 0x8
-+ .byte 0x8
-+ .byte 0x1d
-+ .uleb128 0xb
-+ .string "a"
-+ .byte 0x8
-+ .byte 0x1e
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xb
-+ .string "b"
-+ .byte 0x8
-+ .byte 0x1e
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .byte 0x0
-+ .uleb128 0x12
-+ .long 0x977
-+ .long 0xbb
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0xf
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0xa02
-+ .long .LASF124
-+ .byte 0x70
-+ .byte 0x8
-+ .byte 0xf0
-+ .uleb128 0xb
-+ .string "cwd"
-+ .byte 0x8
-+ .byte 0xf1
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xb
-+ .string "swd"
-+ .byte 0x8
-+ .byte 0xf2
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xb
-+ .string "twd"
-+ .byte 0x8
-+ .byte 0xf3
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xb
-+ .string "fip"
-+ .byte 0x8
-+ .byte 0xf4
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xb
-+ .string "fcs"
-+ .byte 0x8
-+ .byte 0xf5
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xb
-+ .string "foo"
-+ .byte 0x8
-+ .byte 0xf6
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0xb
-+ .string "fos"
-+ .byte 0x8
-+ .byte 0xf7
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0xa
-+ .long .LASF125
-+ .byte 0x8
-+ .byte 0xf8
-+ .long 0xa02
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .uleb128 0xa
-+ .long .LASF126
-+ .byte 0x8
-+ .byte 0xf9
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x6c
-+ .byte 0x0
-+ .uleb128 0x12
-+ .long 0xa12
-+ .long 0x5a
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x13
-+ .byte 0x0
-+ .uleb128 0x1a
-+ .long 0xae2
-+ .long .LASF127
-+ .value 0x200
-+ .byte 0x8
-+ .byte 0xfc
-+ .uleb128 0xb
-+ .string "cwd"
-+ .byte 0x8
-+ .byte 0xfd
-+ .long 0x53
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xb
-+ .string "swd"
-+ .byte 0x8
-+ .byte 0xfe
-+ .long 0x53
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x2
-+ .uleb128 0xb
-+ .string "twd"
-+ .byte 0x8
-+ .byte 0xff
-+ .long 0x53
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0x17
-+ .string "fop"
-+ .byte 0x8
-+ .value 0x100
-+ .long 0x53
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x6
-+ .uleb128 0x17
-+ .string "fip"
-+ .byte 0x8
-+ .value 0x101
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0x17
-+ .string "fcs"
-+ .byte 0x8
-+ .value 0x102
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0x17
-+ .string "foo"
-+ .byte 0x8
-+ .value 0x103
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0x17
-+ .string "fos"
-+ .byte 0x8
-+ .value 0x104
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0x16
-+ .long .LASF128
-+ .byte 0x8
-+ .value 0x105
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0x16
-+ .long .LASF129
-+ .byte 0x8
-+ .value 0x106
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .uleb128 0x16
-+ .long .LASF125
-+ .byte 0x8
-+ .value 0x107
-+ .long 0xae2
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .uleb128 0x16
-+ .long .LASF130
-+ .byte 0x8
-+ .value 0x108
-+ .long 0xae2
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xa0
-+ .uleb128 0x16
-+ .long .LASF131
-+ .byte 0x8
-+ .value 0x109
-+ .long 0xaf2
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x120
-+ .byte 0x0
-+ .uleb128 0x12
-+ .long 0xaf2
-+ .long 0x5a
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x1f
-+ .byte 0x0
-+ .uleb128 0x12
-+ .long 0xb02
-+ .long 0x5a
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x37
-+ .byte 0x0
-+ .uleb128 0x15
-+ .long 0xbff
-+ .long .LASF132
-+ .byte 0x7c
-+ .byte 0x8
-+ .value 0x10c
-+ .uleb128 0x17
-+ .string "cwd"
-+ .byte 0x8
-+ .value 0x10d
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x17
-+ .string "swd"
-+ .byte 0x8
-+ .value 0x10e
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0x17
-+ .string "twd"
-+ .byte 0x8
-+ .value 0x10f
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0x17
-+ .string "fip"
-+ .byte 0x8
-+ .value 0x110
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0x17
-+ .string "fcs"
-+ .byte 0x8
-+ .value 0x111
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0x17
-+ .string "foo"
-+ .byte 0x8
-+ .value 0x112
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0x17
-+ .string "fos"
-+ .byte 0x8
-+ .value 0x113
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0x16
-+ .long .LASF125
-+ .byte 0x8
-+ .value 0x114
-+ .long 0xa02
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .uleb128 0x16
-+ .long .LASF133
-+ .byte 0x8
-+ .value 0x115
-+ .long 0x112
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x6c
-+ .uleb128 0x16
-+ .long .LASF134
-+ .byte 0x8
-+ .value 0x115
-+ .long 0x112
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x6d
-+ .uleb128 0x16
-+ .long .LASF135
-+ .byte 0x8
-+ .value 0x115
-+ .long 0x112
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x6e
-+ .uleb128 0x16
-+ .long .LASF136
-+ .byte 0x8
-+ .value 0x115
-+ .long 0x112
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x6f
-+ .uleb128 0x17
-+ .string "rm"
-+ .byte 0x8
-+ .value 0x115
-+ .long 0x112
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x70
-+ .uleb128 0x16
-+ .long .LASF137
-+ .byte 0x8
-+ .value 0x115
-+ .long 0x112
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x71
-+ .uleb128 0x16
-+ .long .LASF82
-+ .byte 0x8
-+ .value 0x116
-+ .long 0xbff
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x74
-+ .uleb128 0x16
-+ .long .LASF138
-+ .byte 0x8
-+ .value 0x117
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x78
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x67a
-+ .uleb128 0x1b
-+ .long 0xc38
-+ .long .LASF472
-+ .value 0x200
-+ .byte 0x8
-+ .value 0x11a
-+ .uleb128 0x1c
-+ .long .LASF139
-+ .byte 0x8
-+ .value 0x11b
-+ .long 0x977
-+ .uleb128 0x1c
-+ .long .LASF140
-+ .byte 0x8
-+ .value 0x11c
-+ .long 0xa12
-+ .uleb128 0x1c
-+ .long .LASF141
-+ .byte 0x8
-+ .value 0x11d
-+ .long 0xb02
-+ .byte 0x0
-+ .uleb128 0x1d
-+ .long 0xc51
-+ .byte 0x4
-+ .byte 0x8
-+ .value 0x120
-+ .uleb128 0x17
-+ .string "seg"
-+ .byte 0x8
-+ .value 0x121
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .byte 0x0
-+ .uleb128 0x1e
-+ .long .LASF142
-+ .byte 0x8
-+ .value 0x122
-+ .long 0xc38
-+ .uleb128 0x1f
-+ .long 0xdbe
-+ .long .LASF143
-+ .value 0x290
-+ .byte 0x8
-+ .value 0x124
-+ .uleb128 0x16
-+ .long .LASF144
-+ .byte 0x8
-+ .value 0x15e
-+ .long 0xdbe
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x16
-+ .long .LASF145
-+ .byte 0x8
-+ .value 0x15f
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0x16
-+ .long .LASF146
-+ .byte 0x8
-+ .value 0x160
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .uleb128 0x17
-+ .string "eip"
-+ .byte 0x8
-+ .value 0x161
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .uleb128 0x17
-+ .string "esp"
-+ .byte 0x8
-+ .value 0x162
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x24
-+ .uleb128 0x17
-+ .string "fs"
-+ .byte 0x8
-+ .value 0x163
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x28
-+ .uleb128 0x17
-+ .string "gs"
-+ .byte 0x8
-+ .value 0x164
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x2c
-+ .uleb128 0x16
-+ .long .LASF147
-+ .byte 0x8
-+ .value 0x166
-+ .long 0x515
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x30
-+ .uleb128 0x17
-+ .string "cr2"
-+ .byte 0x8
-+ .value 0x168
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x50
-+ .uleb128 0x16
-+ .long .LASF148
-+ .byte 0x8
-+ .value 0x168
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x54
-+ .uleb128 0x16
-+ .long .LASF149
-+ .byte 0x8
-+ .value 0x168
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x58
-+ .uleb128 0x16
-+ .long .LASF150
-+ .byte 0x8
-+ .value 0x16a
-+ .long 0xc05
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x60
-+ .uleb128 0x16
-+ .long .LASF151
-+ .byte 0x8
-+ .value 0x16c
-+ .long 0xdce
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x260
-+ .uleb128 0x16
-+ .long .LASF77
-+ .byte 0x8
-+ .value 0x16d
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x264
-+ .uleb128 0x16
-+ .long .LASF152
-+ .byte 0x8
-+ .value 0x16e
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x268
-+ .uleb128 0x16
-+ .long .LASF153
-+ .byte 0x8
-+ .value 0x16e
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x26c
-+ .uleb128 0x16
-+ .long .LASF154
-+ .byte 0x8
-+ .value 0x16e
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x270
-+ .uleb128 0x16
-+ .long .LASF155
-+ .byte 0x8
-+ .value 0x16f
-+ .long 0x77
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x274
-+ .uleb128 0x16
-+ .long .LASF156
-+ .byte 0x8
-+ .value 0x16f
-+ .long 0x77
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x278
-+ .uleb128 0x16
-+ .long .LASF157
-+ .byte 0x8
-+ .value 0x171
-+ .long 0xdd4
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x27c
-+ .uleb128 0x16
-+ .long .LASF158
-+ .byte 0x8
-+ .value 0x172
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x280
-+ .uleb128 0x16
-+ .long .LASF159
-+ .byte 0x8
-+ .value 0x174
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x284
-+ .byte 0x0
-+ .uleb128 0x12
-+ .long 0xdce
-+ .long 0x942
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x2
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x525
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x2f
-+ .uleb128 0xf
-+ .long 0xe81
-+ .long .LASF160
-+ .byte 0x3c
-+ .byte 0x10
-+ .byte 0x1b
-+ .uleb128 0xa
-+ .long .LASF161
-+ .byte 0x10
-+ .byte 0x1c
-+ .long 0x15f9
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF162
-+ .byte 0x10
-+ .byte 0x1d
-+ .long 0x1605
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF53
-+ .byte 0x10
-+ .byte 0x1e
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF126
-+ .byte 0x10
-+ .byte 0x1f
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xb
-+ .string "cpu"
-+ .byte 0x10
-+ .byte 0x20
-+ .long 0x141
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xa
-+ .long .LASF163
-+ .byte 0x10
-+ .byte 0x21
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0xa
-+ .long .LASF164
-+ .byte 0x10
-+ .byte 0x24
-+ .long 0xc51
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0xa
-+ .long .LASF165
-+ .byte 0x10
-+ .byte 0x28
-+ .long 0x160b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .uleb128 0xa
-+ .long .LASF59
-+ .byte 0x10
-+ .byte 0x29
-+ .long 0x2f7
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .uleb128 0xa
-+ .long .LASF166
-+ .byte 0x10
-+ .byte 0x2b
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x38
-+ .uleb128 0xa
-+ .long .LASF167
-+ .byte 0x10
-+ .byte 0x2e
-+ .long 0x160d
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x3c
-+ .byte 0x0
-+ .uleb128 0x1a
-+ .long 0x15f9
-+ .long .LASF168
-+ .value 0x510
-+ .byte 0x11
-+ .byte 0x13
-+ .uleb128 0x16
-+ .long .LASF169
-+ .byte 0xb
-+ .value 0x336
-+ .long 0x43e6
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x16
-+ .long .LASF170
-+ .byte 0xb
-+ .value 0x337
-+ .long 0x160b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0x16
-+ .long .LASF171
-+ .byte 0xb
-+ .value 0x338
-+ .long 0x16c4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0x16
-+ .long .LASF53
-+ .byte 0xb
-+ .value 0x339
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0x16
-+ .long .LASF172
-+ .byte 0xb
-+ .value 0x33a
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0x16
-+ .long .LASF173
-+ .byte 0xb
-+ .value 0x33c
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0x16
-+ .long .LASF174
-+ .byte 0xb
-+ .value 0x343
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0x16
-+ .long .LASF175
-+ .byte 0xb
-+ .value 0x344
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .uleb128 0x16
-+ .long .LASF176
-+ .byte 0xb
-+ .value 0x344
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .uleb128 0x16
-+ .long .LASF177
-+ .byte 0xb
-+ .value 0x344
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x24
-+ .uleb128 0x16
-+ .long .LASF178
-+ .byte 0xb
-+ .value 0x345
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x28
-+ .uleb128 0x16
-+ .long .LASF179
-+ .byte 0xb
-+ .value 0x346
-+ .long 0x43f1
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x30
-+ .uleb128 0x16
-+ .long .LASF180
-+ .byte 0xb
-+ .value 0x348
-+ .long 0x53
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x34
-+ .uleb128 0x16
-+ .long .LASF181
-+ .byte 0xb
-+ .value 0x34c
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x38
-+ .uleb128 0x16
-+ .long .LASF182
-+ .byte 0xb
-+ .value 0x34d
-+ .long 0x162
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x3c
-+ .uleb128 0x16
-+ .long .LASF183
-+ .byte 0xb
-+ .value 0x34d
-+ .long 0x162
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x44
-+ .uleb128 0x16
-+ .long .LASF184
-+ .byte 0xb
-+ .value 0x34f
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4c
-+ .uleb128 0x16
-+ .long .LASF185
-+ .byte 0xb
-+ .value 0x34f
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x50
-+ .uleb128 0x16
-+ .long .LASF186
-+ .byte 0xb
-+ .value 0x352
-+ .long 0x162
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x54
-+ .uleb128 0x16
-+ .long .LASF187
-+ .byte 0xb
-+ .value 0x353
-+ .long 0x43c0
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x5c
-+ .uleb128 0x16
-+ .long .LASF188
-+ .byte 0xb
-+ .value 0x355
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x60
-+ .uleb128 0x16
-+ .long .LASF189
-+ .byte 0xb
-+ .value 0x356
-+ .long 0x923
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x64
-+ .uleb128 0x16
-+ .long .LASF190
-+ .byte 0xb
-+ .value 0x357
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x68
-+ .uleb128 0x16
-+ .long .LASF191
-+ .byte 0xb
-+ .value 0x357
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x6c
-+ .uleb128 0x16
-+ .long .LASF192
-+ .byte 0xb
-+ .value 0x35d
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x70
-+ .uleb128 0x16
-+ .long .LASF193
-+ .byte 0xb
-+ .value 0x362
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x78
-+ .uleb128 0x16
-+ .long .LASF194
-+ .byte 0xb
-+ .value 0x363
-+ .long 0x17bc
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x80
-+ .uleb128 0x17
-+ .string "mm"
-+ .byte 0xb
-+ .value 0x365
-+ .long 0x36ad
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x88
-+ .uleb128 0x16
-+ .long .LASF195
-+ .byte 0xb
-+ .value 0x365
-+ .long 0x36ad
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x8c
-+ .uleb128 0x16
-+ .long .LASF196
-+ .byte 0xb
-+ .value 0x368
-+ .long 0x43fd
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x90
-+ .uleb128 0x16
-+ .long .LASF197
-+ .byte 0xb
-+ .value 0x369
-+ .long 0x21
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x94
-+ .uleb128 0x16
-+ .long .LASF198
-+ .byte 0xb
-+ .value 0x36a
-+ .long 0x21
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x98
-+ .uleb128 0x16
-+ .long .LASF199
-+ .byte 0xb
-+ .value 0x36a
-+ .long 0x21
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x9c
-+ .uleb128 0x16
-+ .long .LASF200
-+ .byte 0xb
-+ .value 0x36b
-+ .long 0x21
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xa0
-+ .uleb128 0x16
-+ .long .LASF201
-+ .byte 0xb
-+ .value 0x36d
-+ .long 0x77
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xa4
-+ .uleb128 0x20
-+ .long .LASF202
-+ .byte 0xb
-+ .value 0x36e
-+ .long 0x77
-+ .byte 0x4
-+ .byte 0x1
-+ .byte 0x1f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xa8
-+ .uleb128 0x17
-+ .string "pid"
-+ .byte 0xb
-+ .value 0x36f
-+ .long 0x1b5
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xac
-+ .uleb128 0x16
-+ .long .LASF203
-+ .byte 0xb
-+ .value 0x370
-+ .long 0x1b5
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xb0
-+ .uleb128 0x16
-+ .long .LASF204
-+ .byte 0xb
-+ .value 0x37b
-+ .long 0x15f9
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xb4
-+ .uleb128 0x16
-+ .long .LASF205
-+ .byte 0xb
-+ .value 0x37c
-+ .long 0x15f9
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xb8
-+ .uleb128 0x16
-+ .long .LASF206
-+ .byte 0xb
-+ .value 0x381
-+ .long 0x17bc
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xbc
-+ .uleb128 0x16
-+ .long .LASF207
-+ .byte 0xb
-+ .value 0x382
-+ .long 0x17bc
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xc4
-+ .uleb128 0x16
-+ .long .LASF208
-+ .byte 0xb
-+ .value 0x383
-+ .long 0x15f9
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xcc
-+ .uleb128 0x16
-+ .long .LASF209
-+ .byte 0xb
-+ .value 0x386
-+ .long 0x4403
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xd0
-+ .uleb128 0x16
-+ .long .LASF210
-+ .byte 0xb
-+ .value 0x387
-+ .long 0x17bc
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xf4
-+ .uleb128 0x16
-+ .long .LASF211
-+ .byte 0xb
-+ .value 0x389
-+ .long 0x3ff9
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xfc
-+ .uleb128 0x16
-+ .long .LASF212
-+ .byte 0xb
-+ .value 0x38a
-+ .long 0x4413
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x100
-+ .uleb128 0x16
-+ .long .LASF213
-+ .byte 0xb
-+ .value 0x38b
-+ .long 0x4413
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x104
-+ .uleb128 0x16
-+ .long .LASF214
-+ .byte 0xb
-+ .value 0x38d
-+ .long 0x77
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x108
-+ .uleb128 0x16
-+ .long .LASF215
-+ .byte 0xb
-+ .value 0x38e
-+ .long 0x19b4
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x10c
-+ .uleb128 0x16
-+ .long .LASF216
-+ .byte 0xb
-+ .value 0x38e
-+ .long 0x19b4
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x110
-+ .uleb128 0x16
-+ .long .LASF217
-+ .byte 0xb
-+ .value 0x38f
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x114
-+ .uleb128 0x16
-+ .long .LASF218
-+ .byte 0xb
-+ .value 0x38f
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x118
-+ .uleb128 0x16
-+ .long .LASF219
-+ .byte 0xb
-+ .value 0x390
-+ .long 0x173b
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x11c
-+ .uleb128 0x16
-+ .long .LASF220
-+ .byte 0xb
-+ .value 0x392
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x124
-+ .uleb128 0x16
-+ .long .LASF221
-+ .byte 0xb
-+ .value 0x392
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x128
-+ .uleb128 0x16
-+ .long .LASF222
-+ .byte 0xb
-+ .value 0x394
-+ .long 0x19b4
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x12c
-+ .uleb128 0x16
-+ .long .LASF223
-+ .byte 0xb
-+ .value 0x394
-+ .long 0x19b4
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x130
-+ .uleb128 0x16
-+ .long .LASF224
-+ .byte 0xb
-+ .value 0x395
-+ .long 0x162
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x134
-+ .uleb128 0x16
-+ .long .LASF225
-+ .byte 0xb
-+ .value 0x396
-+ .long 0x4330
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x13c
-+ .uleb128 0x17
-+ .string "uid"
-+ .byte 0xb
-+ .value 0x399
-+ .long 0x1dd
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x154
-+ .uleb128 0x16
-+ .long .LASF226
-+ .byte 0xb
-+ .value 0x399
-+ .long 0x1dd
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x158
-+ .uleb128 0x16
-+ .long .LASF227
-+ .byte 0xb
-+ .value 0x399
-+ .long 0x1dd
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x15c
-+ .uleb128 0x16
-+ .long .LASF228
-+ .byte 0xb
-+ .value 0x399
-+ .long 0x1dd
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x160
-+ .uleb128 0x17
-+ .string "gid"
-+ .byte 0xb
-+ .value 0x39a
-+ .long 0x1e8
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x164
-+ .uleb128 0x16
-+ .long .LASF229
-+ .byte 0xb
-+ .value 0x39a
-+ .long 0x1e8
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x168
-+ .uleb128 0x16
-+ .long .LASF230
-+ .byte 0xb
-+ .value 0x39a
-+ .long 0x1e8
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x16c
-+ .uleb128 0x16
-+ .long .LASF231
-+ .byte 0xb
-+ .value 0x39a
-+ .long 0x1e8
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x170
-+ .uleb128 0x16
-+ .long .LASF232
-+ .byte 0xb
-+ .value 0x39b
-+ .long 0x4419
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x174
-+ .uleb128 0x16
-+ .long .LASF233
-+ .byte 0xb
-+ .value 0x39c
-+ .long 0x16da
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x178
-+ .uleb128 0x16
-+ .long .LASF234
-+ .byte 0xb
-+ .value 0x39c
-+ .long 0x16da
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x17c
-+ .uleb128 0x16
-+ .long .LASF235
-+ .byte 0xb
-+ .value 0x39c
-+ .long 0x16da
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x180
-+ .uleb128 0x20
-+ .long .LASF236
-+ .byte 0xb
-+ .value 0x39d
-+ .long 0x77
-+ .byte 0x4
-+ .byte 0x1
-+ .byte 0x1f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x184
-+ .uleb128 0x16
-+ .long .LASF237
-+ .byte 0xb
-+ .value 0x39e
-+ .long 0x2729
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x188
-+ .uleb128 0x16
-+ .long .LASF238
-+ .byte 0xb
-+ .value 0x3ac
-+ .long 0x112
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x18c
-+ .uleb128 0x16
-+ .long .LASF239
-+ .byte 0xb
-+ .value 0x3ad
-+ .long 0x21
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x190
-+ .uleb128 0x16
-+ .long .LASF240
-+ .byte 0xb
-+ .value 0x3ae
-+ .long 0x967
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x194
-+ .uleb128 0x16
-+ .long .LASF241
-+ .byte 0xb
-+ .value 0x3b3
-+ .long 0x21
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x1a4
-+ .uleb128 0x16
-+ .long .LASF242
-+ .byte 0xb
-+ .value 0x3b3
-+ .long 0x21
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x1a8
-+ .uleb128 0x16
-+ .long .LASF243
-+ .byte 0xb
-+ .value 0x3b6
-+ .long 0x2387
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x1ac
-+ .uleb128 0x16
-+ .long .LASF244
-+ .byte 0xb
-+ .value 0x3b9
-+ .long 0xc5d
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x1b0
-+ .uleb128 0x17
-+ .string "fs"
-+ .byte 0xb
-+ .value 0x3bb
-+ .long 0x441f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x440
-+ .uleb128 0x16
-+ .long .LASF245
-+ .byte 0xb
-+ .value 0x3bd
-+ .long 0x442b
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x444
-+ .uleb128 0x16
-+ .long .LASF246
-+ .byte 0xb
-+ .value 0x3bf
-+ .long 0x4437
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x448
-+ .uleb128 0x16
-+ .long .LASF247
-+ .byte 0xb
-+ .value 0x3c1
-+ .long 0x443d
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x44c
-+ .uleb128 0x16
-+ .long .LASF248
-+ .byte 0xb
-+ .value 0x3c2
-+ .long 0x4443
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x450
-+ .uleb128 0x16
-+ .long .LASF249
-+ .byte 0xb
-+ .value 0x3c4
-+ .long 0x23bf
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x454
-+ .uleb128 0x16
-+ .long .LASF250
-+ .byte 0xb
-+ .value 0x3c4
-+ .long 0x23bf
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x45c
-+ .uleb128 0x16
-+ .long .LASF251
-+ .byte 0xb
-+ .value 0x3c5
-+ .long 0x23bf
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x464
-+ .uleb128 0x16
-+ .long .LASF252
-+ .byte 0xb
-+ .value 0x3c6
-+ .long 0x272f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x46c
-+ .uleb128 0x16
-+ .long .LASF253
-+ .byte 0xb
-+ .value 0x3c8
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x47c
-+ .uleb128 0x16
-+ .long .LASF254
-+ .byte 0xb
-+ .value 0x3c9
-+ .long 0x1fe
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x480
-+ .uleb128 0x16
-+ .long .LASF255
-+ .byte 0xb
-+ .value 0x3ca
-+ .long 0x4459
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x484
-+ .uleb128 0x16
-+ .long .LASF256
-+ .byte 0xb
-+ .value 0x3cb
-+ .long 0x160b
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x488
-+ .uleb128 0x16
-+ .long .LASF257
-+ .byte 0xb
-+ .value 0x3cc
-+ .long 0x445f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x48c
-+ .uleb128 0x16
-+ .long .LASF258
-+ .byte 0xb
-+ .value 0x3ce
-+ .long 0x160b
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x490
-+ .uleb128 0x16
-+ .long .LASF259
-+ .byte 0xb
-+ .value 0x3cf
-+ .long 0x446b
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x494
-+ .uleb128 0x16
-+ .long .LASF260
-+ .byte 0xb
-+ .value 0x3d0
-+ .long 0x308d
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x498
-+ .uleb128 0x16
-+ .long .LASF261
-+ .byte 0xb
-+ .value 0x3d3
-+ .long 0x173
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x49c
-+ .uleb128 0x16
-+ .long .LASF262
-+ .byte 0xb
-+ .value 0x3d4
-+ .long 0x173
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x4a0
-+ .uleb128 0x16
-+ .long .LASF263
-+ .byte 0xb
-+ .value 0x3d6
-+ .long 0x1680
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x4a4
-+ .uleb128 0x16
-+ .long .LASF264
-+ .byte 0xb
-+ .value 0x3d9
-+ .long 0x1680
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x4a8
-+ .uleb128 0x16
-+ .long .LASF265
-+ .byte 0xb
-+ .value 0x3dd
-+ .long 0x36b3
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x4ac
-+ .uleb128 0x16
-+ .long .LASF266
-+ .byte 0xb
-+ .value 0x3df
-+ .long 0x4477
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x4bc
-+ .uleb128 0x16
-+ .long .LASF267
-+ .byte 0xb
-+ .value 0x3fe
-+ .long 0x160b
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x4c0
-+ .uleb128 0x16
-+ .long .LASF268
-+ .byte 0xb
-+ .value 0x401
-+ .long 0x4483
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x4c4
-+ .uleb128 0x16
-+ .long .LASF269
-+ .byte 0xb
-+ .value 0x401
-+ .long 0x4489
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x4c8
-+ .uleb128 0x16
-+ .long .LASF270
-+ .byte 0xb
-+ .value 0x404
-+ .long 0x44ab
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x4cc
-+ .uleb128 0x16
-+ .long .LASF271
-+ .byte 0xb
-+ .value 0x406
-+ .long 0x4521
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x4d0
-+ .uleb128 0x16
-+ .long .LASF272
-+ .byte 0xb
-+ .value 0x408
-+ .long 0x452d
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x4d4
-+ .uleb128 0x16
-+ .long .LASF273
-+ .byte 0xb
-+ .value 0x40a
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x4d8
-+ .uleb128 0x16
-+ .long .LASF274
-+ .byte 0xb
-+ .value 0x40b
-+ .long 0x4533
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x4dc
-+ .uleb128 0x16
-+ .long .LASF275
-+ .byte 0xb
-+ .value 0x412
-+ .long 0x18c0
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x4e0
-+ .uleb128 0x16
-+ .long .LASF276
-+ .byte 0xb
-+ .value 0x417
-+ .long 0x3979
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x4e4
-+ .uleb128 0x16
-+ .long .LASF277
-+ .byte 0xb
-+ .value 0x427
-+ .long 0x4539
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x4e4
-+ .uleb128 0x16
-+ .long .LASF278
-+ .byte 0xb
-+ .value 0x42b
-+ .long 0x17bc
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x4e8
-+ .uleb128 0x16
-+ .long .LASF279
-+ .byte 0xb
-+ .value 0x42c
-+ .long 0x4545
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x4f0
-+ .uleb128 0x16
-+ .long .LASF280
-+ .byte 0xb
-+ .value 0x42e
-+ .long 0x16c4
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x4f4
-+ .uleb128 0x17
-+ .string "rcu"
-+ .byte 0xb
-+ .value 0x42f
-+ .long 0x2ea8
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x4f8
-+ .uleb128 0x16
-+ .long .LASF281
-+ .byte 0xb
-+ .value 0x434
-+ .long 0x4551
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x500
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0xe81
-+ .uleb128 0x21
-+ .long .LASF162
-+ .byte 0x1
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x15ff
-+ .uleb128 0x22
-+ .byte 0x4
-+ .uleb128 0x12
-+ .long 0x161c
-+ .long 0x107
-+ .uleb128 0x23
-+ .long 0x28
-+ .byte 0x0
-+ .uleb128 0x24
-+ .long .LASF282
-+ .byte 0x0
-+ .byte 0x3a
-+ .value 0x116
-+ .uleb128 0x9
-+ .long 0x163c
-+ .byte 0x4
-+ .byte 0xe
-+ .byte 0x8
-+ .uleb128 0xa
-+ .long .LASF283
-+ .byte 0xe
-+ .byte 0x9
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .byte 0x0
-+ .uleb128 0x7
-+ .long .LASF284
-+ .byte 0xe
-+ .byte 0xa
-+ .long 0x1625
-+ .uleb128 0x9
-+ .long 0x165e
-+ .byte 0x4
-+ .byte 0xe
-+ .byte 0xe
-+ .uleb128 0xa
-+ .long .LASF285
-+ .byte 0xe
-+ .byte 0xf
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .byte 0x0
-+ .uleb128 0x7
-+ .long .LASF286
-+ .byte 0xe
-+ .byte 0x10
-+ .long 0x1647
-+ .uleb128 0x9
-+ .long 0x1680
-+ .byte 0x4
-+ .byte 0xd
-+ .byte 0x14
-+ .uleb128 0xa
-+ .long .LASF287
-+ .byte 0xd
-+ .byte 0x15
-+ .long 0x163c
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .byte 0x0
-+ .uleb128 0x7
-+ .long .LASF288
-+ .byte 0xd
-+ .byte 0x20
-+ .long 0x1669
-+ .uleb128 0x9
-+ .long 0x16a2
-+ .byte 0x4
-+ .byte 0xd
-+ .byte 0x24
-+ .uleb128 0xa
-+ .long .LASF287
-+ .byte 0xd
-+ .byte 0x25
-+ .long 0x165e
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .byte 0x0
-+ .uleb128 0x7
-+ .long .LASF289
-+ .byte 0xd
-+ .byte 0x30
-+ .long 0x168b
-+ .uleb128 0x9
-+ .long 0x16c4
-+ .byte 0x4
-+ .byte 0x12
-+ .byte 0x12
-+ .uleb128 0xa
-+ .long .LASF290
-+ .byte 0x12
-+ .byte 0x12
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .byte 0x0
-+ .uleb128 0x7
-+ .long .LASF291
-+ .byte 0x12
-+ .byte 0x12
-+ .long 0x16ad
-+ .uleb128 0x7
-+ .long .LASF292
-+ .byte 0x31
-+ .byte 0x8d
-+ .long 0x16c4
-+ .uleb128 0x7
-+ .long .LASF293
-+ .byte 0x11
-+ .byte 0x3c
-+ .long 0x141
-+ .uleb128 0x9
-+ .long 0x170a
-+ .byte 0x8
-+ .byte 0x7
-+ .byte 0x20
-+ .uleb128 0xa
-+ .long .LASF294
-+ .byte 0x7
-+ .byte 0x21
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF285
-+ .byte 0x7
-+ .byte 0x22
-+ .long 0x1680
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .byte 0x0
-+ .uleb128 0x7
-+ .long .LASF295
-+ .byte 0x7
-+ .byte 0x23
-+ .long 0x16e5
-+ .uleb128 0xf
-+ .long 0x1730
-+ .long .LASF296
-+ .byte 0x4
-+ .byte 0x7
-+ .byte 0x73
-+ .uleb128 0xa
-+ .long .LASF294
-+ .byte 0x7
-+ .byte 0x74
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .byte 0x0
-+ .uleb128 0x7
-+ .long .LASF297
-+ .byte 0x7
-+ .byte 0x75
-+ .long 0x1715
-+ .uleb128 0xf
-+ .long 0x1764
-+ .long .LASF298
-+ .byte 0x8
-+ .byte 0x1f
-+ .byte 0xc
-+ .uleb128 0xa
-+ .long .LASF299
-+ .byte 0x1f
-+ .byte 0xd
-+ .long 0x214
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF300
-+ .byte 0x1f
-+ .byte 0xe
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x179b
-+ .long .LASF301
-+ .byte 0xc
-+ .byte 0x16
-+ .byte 0x65
-+ .uleb128 0xa
-+ .long .LASF302
-+ .byte 0x16
-+ .byte 0x66
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF303
-+ .byte 0x16
-+ .byte 0x69
-+ .long 0x179b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF304
-+ .byte 0x16
-+ .byte 0x6a
-+ .long 0x179b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x1764
-+ .uleb128 0xf
-+ .long 0x17bc
-+ .long .LASF305
-+ .byte 0x4
-+ .byte 0x16
-+ .byte 0x6f
-+ .uleb128 0xa
-+ .long .LASF301
-+ .byte 0x16
-+ .byte 0x70
-+ .long 0x179b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x17e5
-+ .long .LASF306
-+ .byte 0x8
-+ .byte 0x2
-+ .byte 0x15
-+ .uleb128 0xa
-+ .long .LASF307
-+ .byte 0x2
-+ .byte 0x16
-+ .long 0x17e5
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF308
-+ .byte 0x2
-+ .byte 0x16
-+ .long 0x17e5
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x17bc
-+ .uleb128 0x15
-+ .long 0x1808
-+ .long .LASF309
-+ .byte 0x4
-+ .byte 0x2
-+ .value 0x2a3
-+ .uleb128 0x16
-+ .long .LASF310
-+ .byte 0x2
-+ .value 0x2a4
-+ .long 0x1834
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .byte 0x0
-+ .uleb128 0x15
-+ .long 0x1834
-+ .long .LASF311
-+ .byte 0x8
-+ .byte 0x2
-+ .value 0x2a4
-+ .uleb128 0x16
-+ .long .LASF307
-+ .byte 0x2
-+ .value 0x2a8
-+ .long 0x1834
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x16
-+ .long .LASF312
-+ .byte 0x2
-+ .value 0x2a8
-+ .long 0x183a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x1808
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x1834
-+ .uleb128 0x7
-+ .long .LASF313
-+ .byte 0x2c
-+ .byte 0x1c
-+ .long 0x184b
-+ .uleb128 0xf
-+ .long 0x1890
-+ .long .LASF314
-+ .byte 0x14
-+ .byte 0x2c
-+ .byte 0x1c
-+ .uleb128 0xa
-+ .long .LASF53
-+ .byte 0x2c
-+ .byte 0x21
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF315
-+ .byte 0x2c
-+ .byte 0x23
-+ .long 0x160b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF316
-+ .byte 0x2c
-+ .byte 0x24
-+ .long 0x1890
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF317
-+ .byte 0x2c
-+ .byte 0x25
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .byte 0x0
-+ .uleb128 0x7
-+ .long .LASF318
-+ .byte 0x2c
-+ .byte 0x1d
-+ .long 0x189b
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x18a1
-+ .uleb128 0x11
-+ .long 0x18c0
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x18c0
-+ .uleb128 0x6
-+ .long 0x77
-+ .uleb128 0x6
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x160b
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x1840
-+ .uleb128 0xf
-+ .long 0x18ef
-+ .long .LASF319
-+ .byte 0xc
-+ .byte 0x2c
-+ .byte 0x32
-+ .uleb128 0xa
-+ .long .LASF285
-+ .byte 0x2c
-+ .byte 0x33
-+ .long 0x1680
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF317
-+ .byte 0x2c
-+ .byte 0x34
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .byte 0x0
-+ .uleb128 0x7
-+ .long .LASF320
-+ .byte 0x2c
-+ .byte 0x36
-+ .long 0x18c6
-+ .uleb128 0xf
-+ .long 0x1931
-+ .long .LASF321
-+ .byte 0x10
-+ .byte 0x21
-+ .byte 0x13
-+ .uleb128 0xa
-+ .long .LASF322
-+ .byte 0x22
-+ .byte 0x38
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF323
-+ .byte 0x22
-+ .byte 0x3f
-+ .long 0x1680
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF324
-+ .byte 0x22
-+ .byte 0x40
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x1968
-+ .long .LASF325
-+ .byte 0x14
-+ .byte 0x3d
-+ .byte 0x2c
-+ .uleb128 0xa
-+ .long .LASF322
-+ .byte 0x3d
-+ .byte 0x2d
-+ .long 0x16c4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF326
-+ .byte 0x3d
-+ .byte 0x2e
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF327
-+ .byte 0x3d
-+ .byte 0x2f
-+ .long 0x18ef
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .byte 0x0
-+ .uleb128 0x9
-+ .long 0x19a9
-+ .byte 0x20
-+ .byte 0x43
-+ .byte 0xb
-+ .uleb128 0xa
-+ .long .LASF328
-+ .byte 0x43
-+ .byte 0xc
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xb
-+ .string "sem"
-+ .byte 0x43
-+ .byte 0xd
-+ .long 0x1931
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xb
-+ .string "ldt"
-+ .byte 0x43
-+ .byte 0xe
-+ .long 0x160b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0xa
-+ .long .LASF329
-+ .byte 0x43
-+ .byte 0xf
-+ .long 0x160b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .byte 0x0
-+ .uleb128 0x7
-+ .long .LASF330
-+ .byte 0x43
-+ .byte 0x10
-+ .long 0x1968
-+ .uleb128 0x7
-+ .long .LASF331
-+ .byte 0x45
-+ .byte 0x7
-+ .long 0x2f
-+ .uleb128 0x7
-+ .long .LASF332
-+ .byte 0x45
-+ .byte 0x17
-+ .long 0x189
-+ .uleb128 0x12
-+ .long 0x19da
-+ .long 0xbb
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x3
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x1a81
-+ .long .LASF333
-+ .byte 0x2c
-+ .byte 0x65
-+ .byte 0x22
-+ .uleb128 0xa
-+ .long .LASF334
-+ .byte 0x65
-+ .byte 0x23
-+ .long 0x19ca
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF335
-+ .byte 0x65
-+ .byte 0x25
-+ .long 0x53
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF336
-+ .byte 0x65
-+ .byte 0x26
-+ .long 0xbb
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x6
-+ .uleb128 0xa
-+ .long .LASF337
-+ .byte 0x65
-+ .byte 0x27
-+ .long 0xbb
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x7
-+ .uleb128 0xa
-+ .long .LASF338
-+ .byte 0x65
-+ .byte 0x28
-+ .long 0x8ec
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF339
-+ .byte 0x65
-+ .byte 0x29
-+ .long 0x1a81
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xa
-+ .long .LASF340
-+ .byte 0x65
-+ .byte 0x2a
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .uleb128 0xa
-+ .long .LASF341
-+ .byte 0x65
-+ .byte 0x2b
-+ .long 0x53
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .uleb128 0xa
-+ .long .LASF342
-+ .byte 0x65
-+ .byte 0x2c
-+ .long 0x53
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x22
-+ .uleb128 0xa
-+ .long .LASF343
-+ .byte 0x65
-+ .byte 0x2d
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x24
-+ .uleb128 0xa
-+ .long .LASF344
-+ .byte 0x65
-+ .byte 0x2e
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x28
-+ .byte 0x0
-+ .uleb128 0x12
-+ .long 0x1a91
-+ .long 0xbb
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0xb
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x1b00
-+ .long .LASF345
-+ .byte 0x14
-+ .byte 0x65
-+ .byte 0x3b
-+ .uleb128 0xa
-+ .long .LASF346
-+ .byte 0x65
-+ .byte 0x3c
-+ .long 0x112
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF347
-+ .byte 0x65
-+ .byte 0x3d
-+ .long 0x112
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1
-+ .uleb128 0xa
-+ .long .LASF348
-+ .byte 0x65
-+ .byte 0x3e
-+ .long 0x112
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x2
-+ .uleb128 0xa
-+ .long .LASF349
-+ .byte 0x65
-+ .byte 0x3f
-+ .long 0x112
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x3
-+ .uleb128 0xa
-+ .long .LASF350
-+ .byte 0x65
-+ .byte 0x42
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF351
-+ .byte 0x65
-+ .byte 0x46
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF352
-+ .byte 0x65
-+ .byte 0x47
-+ .long 0x1b00
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .byte 0x0
-+ .uleb128 0x12
-+ .long 0x1b10
-+ .long 0x2f
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x1
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x1b47
-+ .long .LASF353
-+ .byte 0x8
-+ .byte 0x65
-+ .byte 0x4b
-+ .uleb128 0xa
-+ .long .LASF346
-+ .byte 0x65
-+ .byte 0x4c
-+ .long 0x112
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF354
-+ .byte 0x65
-+ .byte 0x4d
-+ .long 0x112
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1
-+ .uleb128 0xa
-+ .long .LASF355
-+ .byte 0x65
-+ .byte 0x4e
-+ .long 0x1b47
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x2
-+ .byte 0x0
-+ .uleb128 0x12
-+ .long 0x1b57
-+ .long 0x112
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x5
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x1bc6
-+ .long .LASF356
-+ .byte 0x8
-+ .byte 0x65
-+ .byte 0x9d
-+ .uleb128 0xa
-+ .long .LASF346
-+ .byte 0x65
-+ .byte 0x9e
-+ .long 0x112
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF357
-+ .byte 0x65
-+ .byte 0x9f
-+ .long 0x112
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1
-+ .uleb128 0xa
-+ .long .LASF358
-+ .byte 0x65
-+ .byte 0xa0
-+ .long 0x112
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x2
-+ .uleb128 0xa
-+ .long .LASF359
-+ .byte 0x65
-+ .byte 0xa1
-+ .long 0x112
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x3
-+ .uleb128 0xa
-+ .long .LASF360
-+ .byte 0x65
-+ .byte 0xa2
-+ .long 0x112
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF361
-+ .byte 0x65
-+ .byte 0xa3
-+ .long 0x112
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x5
-+ .uleb128 0xa
-+ .long .LASF362
-+ .byte 0x65
-+ .byte 0xa4
-+ .long 0x53
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x6
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x1be1
-+ .long .LASF363
-+ .byte 0x20
-+ .byte 0x64
-+ .byte 0x27
-+ .uleb128 0xa
-+ .long .LASF364
-+ .byte 0x64
-+ .byte 0x28
-+ .long 0x515
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .byte 0x0
-+ .uleb128 0x7
-+ .long .LASF365
-+ .byte 0x64
-+ .byte 0x2b
-+ .long 0x1bc6
-+ .uleb128 0xf
-+ .long 0x1c07
-+ .long .LASF366
-+ .byte 0x4
-+ .byte 0x5c
-+ .byte 0xca
-+ .uleb128 0xa
-+ .long .LASF367
-+ .byte 0x5c
-+ .byte 0xcb
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .byte 0x0
-+ .uleb128 0x7
-+ .long .LASF368
-+ .byte 0x5c
-+ .byte 0xcc
-+ .long 0x1bec
-+ .uleb128 0x15
-+ .long 0x1c8f
-+ .long .LASF369
-+ .byte 0x1c
-+ .byte 0x5c
-+ .value 0x109
-+ .uleb128 0x16
-+ .long .LASF370
-+ .byte 0x5c
-+ .value 0x10a
-+ .long 0x1c07
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x20
-+ .long .LASF371
-+ .byte 0x5c
-+ .value 0x10b
-+ .long 0x77
-+ .byte 0x4
-+ .byte 0x1
-+ .byte 0x1f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0x20
-+ .long .LASF372
-+ .byte 0x5c
-+ .value 0x10d
-+ .long 0x77
-+ .byte 0x4
-+ .byte 0x1
-+ .byte 0x1e
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0x16
-+ .long .LASF373
-+ .byte 0x5c
-+ .value 0x10e
-+ .long 0x1c07
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0x16
-+ .long .LASF374
-+ .byte 0x5c
-+ .value 0x10f
-+ .long 0x160b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0x16
-+ .long .LASF375
-+ .byte 0x5c
-+ .value 0x110
-+ .long 0x1e7d
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0x16
-+ .long .LASF376
-+ .byte 0x5c
-+ .value 0x111
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .byte 0x0
-+ .uleb128 0x1a
-+ .long 0x1e7d
-+ .long .LASF377
-+ .value 0x16c
-+ .byte 0x5c
-+ .byte 0xc8
-+ .uleb128 0x16
-+ .long .LASF378
-+ .byte 0x5d
-+ .value 0x19b
-+ .long 0x53c4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x16
-+ .long .LASF379
-+ .byte 0x5d
-+ .value 0x19c
-+ .long 0x541b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0x16
-+ .long .LASF380
-+ .byte 0x5d
-+ .value 0x19d
-+ .long 0x541b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x34
-+ .uleb128 0x16
-+ .long .LASF381
-+ .byte 0x5d
-+ .value 0x19e
-+ .long 0x541b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x54
-+ .uleb128 0x16
-+ .long .LASF205
-+ .byte 0x5d
-+ .value 0x19f
-+ .long 0x1e7d
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x74
-+ .uleb128 0x16
-+ .long .LASF382
-+ .byte 0x5d
-+ .value 0x1a1
-+ .long 0x4b3a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x78
-+ .uleb128 0x16
-+ .long .LASF383
-+ .byte 0x5d
-+ .value 0x1a2
-+ .long 0x4c33
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xb8
-+ .uleb128 0x16
-+ .long .LASF384
-+ .byte 0x5d
-+ .value 0x1a3
-+ .long 0x5c6b
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xcc
-+ .uleb128 0x20
-+ .long .LASF385
-+ .byte 0x5d
-+ .value 0x1a4
-+ .long 0x77
-+ .byte 0x4
-+ .byte 0x1
-+ .byte 0x1f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xd0
-+ .uleb128 0x20
-+ .long .LASF386
-+ .byte 0x5d
-+ .value 0x1a5
-+ .long 0x77
-+ .byte 0x4
-+ .byte 0x1
-+ .byte 0x1e
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xd0
-+ .uleb128 0x16
-+ .long .LASF387
-+ .byte 0x5d
-+ .value 0x1a6
-+ .long 0x566b
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xd4
-+ .uleb128 0x16
-+ .long .LASF388
-+ .byte 0x5d
-+ .value 0x1a7
-+ .long 0x56a5
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xe8
-+ .uleb128 0x17
-+ .string "sem"
-+ .byte 0x5d
-+ .value 0x1a9
-+ .long 0x1931
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xec
-+ .uleb128 0x17
-+ .string "bus"
-+ .byte 0x5d
-+ .value 0x1ad
-+ .long 0x54d3
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x100
-+ .uleb128 0x16
-+ .long .LASF389
-+ .byte 0x5d
-+ .value 0x1ae
-+ .long 0x56fd
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x104
-+ .uleb128 0x16
-+ .long .LASF390
-+ .byte 0x5d
-+ .value 0x1b0
-+ .long 0x160b
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x108
-+ .uleb128 0x16
-+ .long .LASF391
-+ .byte 0x5d
-+ .value 0x1b1
-+ .long 0x160b
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x10c
-+ .uleb128 0x16
-+ .long .LASF392
-+ .byte 0x5d
-+ .value 0x1b3
-+ .long 0x1c12
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x110
-+ .uleb128 0x16
-+ .long .LASF393
-+ .byte 0x5d
-+ .value 0x1b8
-+ .long 0x5c71
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x12c
-+ .uleb128 0x16
-+ .long .LASF394
-+ .byte 0x5d
-+ .value 0x1b9
-+ .long 0x189
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x130
-+ .uleb128 0x16
-+ .long .LASF395
-+ .byte 0x5d
-+ .value 0x1bf
-+ .long 0x17bc
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x138
-+ .uleb128 0x16
-+ .long .LASF396
-+ .byte 0x5d
-+ .value 0x1c1
-+ .long 0x5c7d
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x140
-+ .uleb128 0x16
-+ .long .LASF397
-+ .byte 0x5d
-+ .value 0x1c4
-+ .long 0x546c
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x144
-+ .uleb128 0x16
-+ .long .LASF398
-+ .byte 0x5d
-+ .value 0x1c6
-+ .long 0x1680
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x148
-+ .uleb128 0x16
-+ .long .LASF399
-+ .byte 0x5d
-+ .value 0x1c7
-+ .long 0x17bc
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x14c
-+ .uleb128 0x16
-+ .long .LASF400
-+ .byte 0x5d
-+ .value 0x1ca
-+ .long 0x17bc
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x154
-+ .uleb128 0x16
-+ .long .LASF401
-+ .byte 0x5d
-+ .value 0x1cb
-+ .long 0x5b30
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x15c
-+ .uleb128 0x16
-+ .long .LASF402
-+ .byte 0x5d
-+ .value 0x1cc
-+ .long 0x19f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x160
-+ .uleb128 0x16
-+ .long .LASF403
-+ .byte 0x5d
-+ .value 0x1cd
-+ .long 0x5bb2
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x164
-+ .uleb128 0x16
-+ .long .LASF404
-+ .byte 0x5d
-+ .value 0x1cf
-+ .long 0x5820
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x168
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x1c8f
-+ .uleb128 0xf
-+ .long 0x1ef2
-+ .long .LASF405
-+ .byte 0x1c
-+ .byte 0x59
-+ .byte 0x34
-+ .uleb128 0xa
-+ .long .LASF406
-+ .byte 0x59
-+ .byte 0x35
-+ .long 0x93a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF407
-+ .byte 0x59
-+ .byte 0x36
-+ .long 0x1efe
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF408
-+ .byte 0x59
-+ .byte 0x37
-+ .long 0x1f14
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF409
-+ .byte 0x59
-+ .byte 0x38
-+ .long 0x1efe
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xa
-+ .long .LASF410
-+ .byte 0x59
-+ .byte 0x3a
-+ .long 0x93a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xa
-+ .long .LASF411
-+ .byte 0x59
-+ .byte 0x3b
-+ .long 0x36
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0xa
-+ .long .LASF412
-+ .byte 0x59
-+ .byte 0x3e
-+ .long 0x1f4b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .byte 0x0
-+ .uleb128 0x5
-+ .long 0x1efe
-+ .byte 0x1
-+ .uleb128 0x6
-+ .long 0x77
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x1ef2
-+ .uleb128 0x11
-+ .long 0x1f14
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x77
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x1f04
-+ .uleb128 0x11
-+ .long 0x1f39
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x923
-+ .uleb128 0x6
-+ .long 0x1f39
-+ .uleb128 0x6
-+ .long 0x160b
-+ .uleb128 0x6
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x1f3f
-+ .uleb128 0x5
-+ .long 0x1f4b
-+ .byte 0x1
-+ .uleb128 0x6
-+ .long 0x160b
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x1f1a
-+ .uleb128 0xf
-+ .long 0x214b
-+ .long .LASF413
-+ .byte 0x8c
-+ .byte 0x63
-+ .byte 0x16
-+ .uleb128 0xa
-+ .long .LASF414
-+ .byte 0x63
-+ .byte 0x17
-+ .long 0xb5
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF415
-+ .byte 0x63
-+ .byte 0x18
-+ .long 0x92e
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF416
-+ .byte 0x63
-+ .byte 0x1a
-+ .long 0x92e
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF417
-+ .byte 0x63
-+ .byte 0x1b
-+ .long 0x2151
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xa
-+ .long .LASF418
-+ .byte 0x63
-+ .byte 0x1c
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xa
-+ .long .LASF419
-+ .byte 0x63
-+ .byte 0x1d
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0xa
-+ .long .LASF420
-+ .byte 0x63
-+ .byte 0x1e
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0xa
-+ .long .LASF421
-+ .byte 0x63
-+ .byte 0x1f
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .uleb128 0xa
-+ .long .LASF422
-+ .byte 0x63
-+ .byte 0x20
-+ .long 0x216c
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .uleb128 0xa
-+ .long .LASF423
-+ .byte 0x63
-+ .byte 0x21
-+ .long 0x2182
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x24
-+ .uleb128 0xa
-+ .long .LASF424
-+ .byte 0x63
-+ .byte 0x22
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x28
-+ .uleb128 0xa
-+ .long .LASF425
-+ .byte 0x63
-+ .byte 0x23
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x2c
-+ .uleb128 0xa
-+ .long .LASF426
-+ .byte 0x63
-+ .byte 0x24
-+ .long 0x93a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x30
-+ .uleb128 0xa
-+ .long .LASF427
-+ .byte 0x63
-+ .byte 0x25
-+ .long 0x2198
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x34
-+ .uleb128 0xa
-+ .long .LASF428
-+ .byte 0x63
-+ .byte 0x27
-+ .long 0x93a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x38
-+ .uleb128 0xa
-+ .long .LASF429
-+ .byte 0x63
-+ .byte 0x28
-+ .long 0x21b3
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x3c
-+ .uleb128 0xa
-+ .long .LASF430
-+ .byte 0x63
-+ .byte 0x29
-+ .long 0x21c9
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x40
-+ .uleb128 0xa
-+ .long .LASF431
-+ .byte 0x63
-+ .byte 0x2a
-+ .long 0x21c9
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x44
-+ .uleb128 0xa
-+ .long .LASF432
-+ .byte 0x63
-+ .byte 0x2b
-+ .long 0x21c9
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x48
-+ .uleb128 0xa
-+ .long .LASF433
-+ .byte 0x63
-+ .byte 0x2c
-+ .long 0x21df
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4c
-+ .uleb128 0xa
-+ .long .LASF434
-+ .byte 0x63
-+ .byte 0x2e
-+ .long 0x2206
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x50
-+ .uleb128 0xa
-+ .long .LASF435
-+ .byte 0x63
-+ .byte 0x2f
-+ .long 0x93a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x54
-+ .uleb128 0xa
-+ .long .LASF436
-+ .byte 0x63
-+ .byte 0x30
-+ .long 0x21c9
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x58
-+ .uleb128 0xa
-+ .long .LASF437
-+ .byte 0x63
-+ .byte 0x31
-+ .long 0x93a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x5c
-+ .uleb128 0xa
-+ .long .LASF438
-+ .byte 0x63
-+ .byte 0x32
-+ .long 0x2221
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x60
-+ .uleb128 0xa
-+ .long .LASF439
-+ .byte 0x63
-+ .byte 0x36
-+ .long 0x2243
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x64
-+ .uleb128 0xa
-+ .long .LASF440
-+ .byte 0x63
-+ .byte 0x38
-+ .long 0x225a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x68
-+ .uleb128 0xa
-+ .long .LASF441
-+ .byte 0x63
-+ .byte 0x3e
-+ .long 0x2280
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x6c
-+ .uleb128 0xa
-+ .long .LASF442
-+ .byte 0x63
-+ .byte 0x3f
-+ .long 0x229b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x70
-+ .uleb128 0xa
-+ .long .LASF443
-+ .byte 0x63
-+ .byte 0x41
-+ .long 0x22b1
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x74
-+ .uleb128 0xa
-+ .long .LASF444
-+ .byte 0x63
-+ .byte 0x42
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x78
-+ .uleb128 0xa
-+ .long .LASF445
-+ .byte 0x63
-+ .byte 0x43
-+ .long 0x22c7
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x7c
-+ .uleb128 0xa
-+ .long .LASF446
-+ .byte 0x63
-+ .byte 0x47
-+ .long 0x22de
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x80
-+ .uleb128 0xa
-+ .long .LASF447
-+ .byte 0x63
-+ .byte 0x48
-+ .long 0x36
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x84
-+ .uleb128 0xa
-+ .long .LASF448
-+ .byte 0x63
-+ .byte 0x49
-+ .long 0x36
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x88
-+ .byte 0x0
-+ .uleb128 0x18
-+ .byte 0x1
-+ .long 0x923
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x214b
-+ .uleb128 0x11
-+ .long 0x216c
-+ .byte 0x1
-+ .long 0x2f
-+ .uleb128 0x6
-+ .long 0x1be1
-+ .uleb128 0x6
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x2157
-+ .uleb128 0x11
-+ .long 0x2182
-+ .byte 0x1
-+ .long 0x2f
-+ .uleb128 0x6
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x2172
-+ .uleb128 0x11
-+ .long 0x2198
-+ .byte 0x1
-+ .long 0x1be1
-+ .uleb128 0x6
-+ .long 0x1be1
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x2188
-+ .uleb128 0x11
-+ .long 0x21b3
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x219e
-+ .uleb128 0x11
-+ .long 0x21c9
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x21b9
-+ .uleb128 0x11
-+ .long 0x21df
-+ .byte 0x1
-+ .long 0x1be1
-+ .uleb128 0x6
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x21cf
-+ .uleb128 0x11
-+ .long 0x21fa
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x21fa
-+ .uleb128 0x6
-+ .long 0x2200
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x1a91
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x1b57
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x21e5
-+ .uleb128 0x11
-+ .long 0x2221
-+ .byte 0x1
-+ .long 0x173
-+ .uleb128 0x6
-+ .long 0x173
-+ .uleb128 0x6
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x220c
-+ .uleb128 0x5
-+ .long 0x223d
-+ .byte 0x1
-+ .uleb128 0x6
-+ .long 0x223d
-+ .uleb128 0x6
-+ .long 0xb5
-+ .uleb128 0x6
-+ .long 0x2200
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x1b10
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x2227
-+ .uleb128 0x5
-+ .long 0x225a
-+ .byte 0x1
-+ .uleb128 0x6
-+ .long 0x223d
-+ .uleb128 0x6
-+ .long 0x2200
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x2249
-+ .uleb128 0x11
-+ .long 0x227a
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x227a
-+ .uleb128 0x6
-+ .long 0xb5
-+ .uleb128 0x6
-+ .long 0xb5
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x19da
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x2260
-+ .uleb128 0x11
-+ .long 0x229b
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0xb5
-+ .uleb128 0x6
-+ .long 0xb5
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x2286
-+ .uleb128 0x11
-+ .long 0x22b1
-+ .byte 0x1
-+ .long 0x77
-+ .uleb128 0x6
-+ .long 0x2f
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x22a1
-+ .uleb128 0x11
-+ .long 0x22c7
-+ .byte 0x1
-+ .long 0x77
-+ .uleb128 0x6
-+ .long 0x923
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x22b7
-+ .uleb128 0x5
-+ .long 0x22de
-+ .byte 0x1
-+ .uleb128 0x6
-+ .long 0x923
-+ .uleb128 0x6
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x22cd
-+ .uleb128 0xf
-+ .long 0x22ff
-+ .long .LASF449
-+ .byte 0x4
-+ .byte 0x2b
-+ .byte 0x17
-+ .uleb128 0xa
-+ .long .LASF450
-+ .byte 0x2b
-+ .byte 0x18
-+ .long 0x16c4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x2344
-+ .long .LASF451
-+ .byte 0x10
-+ .byte 0x47
-+ .byte 0x1e
-+ .uleb128 0xa
-+ .long .LASF452
-+ .byte 0x47
-+ .byte 0x7a
-+ .long 0x2344
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF453
-+ .byte 0x47
-+ .byte 0x7b
-+ .long 0x2344
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF454
-+ .byte 0x47
-+ .byte 0x7c
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF455
-+ .byte 0x47
-+ .byte 0x7d
-+ .long 0x234a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x22ff
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x124
-+ .uleb128 0xf
-+ .long 0x2387
-+ .long .LASF456
-+ .byte 0xc
-+ .byte 0x47
-+ .byte 0x83
-+ .uleb128 0xa
-+ .long .LASF457
-+ .byte 0x47
-+ .byte 0x84
-+ .long 0x16c4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF285
-+ .byte 0x47
-+ .byte 0x85
-+ .long 0x1680
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF458
-+ .byte 0x47
-+ .byte 0x86
-+ .long 0x2344
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x23a2
-+ .long .LASF459
-+ .byte 0x4
-+ .byte 0x47
-+ .byte 0x89
-+ .uleb128 0xa
-+ .long .LASF460
-+ .byte 0x47
-+ .byte 0x8a
-+ .long 0x23a2
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x2350
-+ .uleb128 0x9
-+ .long 0x23bf
-+ .byte 0x8
-+ .byte 0x4a
-+ .byte 0x18
-+ .uleb128 0xb
-+ .string "sig"
-+ .byte 0x4a
-+ .byte 0x19
-+ .long 0x1b00
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .byte 0x0
-+ .uleb128 0x7
-+ .long .LASF461
-+ .byte 0x4a
-+ .byte 0x1a
-+ .long 0x23a8
-+ .uleb128 0x7
-+ .long .LASF462
-+ .byte 0x4e
-+ .byte 0x11
-+ .long 0x3c
-+ .uleb128 0x7
-+ .long .LASF463
-+ .byte 0x4e
-+ .byte 0x12
-+ .long 0x23e0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x23ca
-+ .uleb128 0x7
-+ .long .LASF464
-+ .byte 0x4e
-+ .byte 0x14
-+ .long 0x940
-+ .uleb128 0x7
-+ .long .LASF465
-+ .byte 0x4e
-+ .byte 0x15
-+ .long 0x23fc
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x23e6
-+ .uleb128 0xf
-+ .long 0x2447
-+ .long .LASF466
-+ .byte 0x14
-+ .byte 0x4a
-+ .byte 0x7b
-+ .uleb128 0xa
-+ .long .LASF467
-+ .byte 0x4a
-+ .byte 0x7c
-+ .long 0x23d5
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF468
-+ .byte 0x4a
-+ .byte 0x7d
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF469
-+ .byte 0x4a
-+ .byte 0x7e
-+ .long 0x23f1
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF470
-+ .byte 0x4a
-+ .byte 0x7f
-+ .long 0x23bf
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x2461
-+ .long .LASF471
-+ .byte 0x14
-+ .byte 0x4a
-+ .byte 0x82
-+ .uleb128 0xb
-+ .string "sa"
-+ .byte 0x4a
-+ .byte 0x83
-+ .long 0x2402
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .byte 0x0
-+ .uleb128 0x25
-+ .long 0x2484
-+ .long .LASF473
-+ .byte 0x4
-+ .byte 0x52
-+ .byte 0x7
-+ .uleb128 0xe
-+ .long .LASF474
-+ .byte 0x52
-+ .byte 0x8
-+ .long 0x21
-+ .uleb128 0xe
-+ .long .LASF475
-+ .byte 0x52
-+ .byte 0x9
-+ .long 0x160b
-+ .byte 0x0
-+ .uleb128 0x7
-+ .long .LASF476
-+ .byte 0x52
-+ .byte 0xa
-+ .long 0x2461
-+ .uleb128 0x9
-+ .long 0x24b4
-+ .byte 0x8
-+ .byte 0x52
-+ .byte 0x31
-+ .uleb128 0xa
-+ .long .LASF477
-+ .byte 0x52
-+ .byte 0x32
-+ .long 0x1b5
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF478
-+ .byte 0x52
-+ .byte 0x33
-+ .long 0x1dd
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .byte 0x0
-+ .uleb128 0x9
-+ .long 0x2503
-+ .byte 0x10
-+ .byte 0x52
-+ .byte 0x37
-+ .uleb128 0xa
-+ .long .LASF479
-+ .byte 0x52
-+ .byte 0x38
-+ .long 0x1c0
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF480
-+ .byte 0x52
-+ .byte 0x39
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF481
-+ .byte 0x52
-+ .byte 0x3a
-+ .long 0x2503
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF482
-+ .byte 0x52
-+ .byte 0x3b
-+ .long 0x2484
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF483
-+ .byte 0x52
-+ .byte 0x3c
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .byte 0x0
-+ .uleb128 0x12
-+ .long 0x2512
-+ .long 0xbb
-+ .uleb128 0x23
-+ .long 0x28
-+ .byte 0x0
-+ .uleb128 0x9
-+ .long 0x2545
-+ .byte 0xc
-+ .byte 0x52
-+ .byte 0x40
-+ .uleb128 0xa
-+ .long .LASF477
-+ .byte 0x52
-+ .byte 0x41
-+ .long 0x1b5
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF478
-+ .byte 0x52
-+ .byte 0x42
-+ .long 0x1dd
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF482
-+ .byte 0x52
-+ .byte 0x43
-+ .long 0x2484
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .byte 0x0
-+ .uleb128 0x9
-+ .long 0x2594
-+ .byte 0x14
-+ .byte 0x52
-+ .byte 0x47
-+ .uleb128 0xa
-+ .long .LASF477
-+ .byte 0x52
-+ .byte 0x48
-+ .long 0x1b5
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF478
-+ .byte 0x52
-+ .byte 0x49
-+ .long 0x1dd
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF484
-+ .byte 0x52
-+ .byte 0x4a
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF485
-+ .byte 0x52
-+ .byte 0x4b
-+ .long 0x21f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xa
-+ .long .LASF486
-+ .byte 0x52
-+ .byte 0x4c
-+ .long 0x21f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .byte 0x0
-+ .uleb128 0x9
-+ .long 0x25ab
-+ .byte 0x4
-+ .byte 0x52
-+ .byte 0x50
-+ .uleb128 0xa
-+ .long .LASF487
-+ .byte 0x52
-+ .byte 0x51
-+ .long 0x160b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .byte 0x0
-+ .uleb128 0x9
-+ .long 0x25d0
-+ .byte 0x8
-+ .byte 0x52
-+ .byte 0x58
-+ .uleb128 0xa
-+ .long .LASF488
-+ .byte 0x52
-+ .byte 0x59
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xb
-+ .string "_fd"
-+ .byte 0x52
-+ .byte 0x5a
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .byte 0x0
-+ .uleb128 0xc
-+ .long 0x2626
-+ .byte 0x74
-+ .byte 0x52
-+ .byte 0x2d
-+ .uleb128 0xe
-+ .long .LASF481
-+ .byte 0x52
-+ .byte 0x2e
-+ .long 0x2626
-+ .uleb128 0xe
-+ .long .LASF489
-+ .byte 0x52
-+ .byte 0x34
-+ .long 0x248f
-+ .uleb128 0xe
-+ .long .LASF490
-+ .byte 0x52
-+ .byte 0x3d
-+ .long 0x24b4
-+ .uleb128 0x26
-+ .string "_rt"
-+ .byte 0x52
-+ .byte 0x44
-+ .long 0x2512
-+ .uleb128 0xe
-+ .long .LASF491
-+ .byte 0x52
-+ .byte 0x4d
-+ .long 0x2545
-+ .uleb128 0xe
-+ .long .LASF492
-+ .byte 0x52
-+ .byte 0x55
-+ .long 0x2594
-+ .uleb128 0xe
-+ .long .LASF493
-+ .byte 0x52
-+ .byte 0x5b
-+ .long 0x25ab
-+ .byte 0x0
-+ .uleb128 0x12
-+ .long 0x2636
-+ .long 0x21
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x1c
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x267b
-+ .long .LASF494
-+ .byte 0x80
-+ .byte 0x4a
-+ .byte 0x9
-+ .uleb128 0xa
-+ .long .LASF495
-+ .byte 0x52
-+ .byte 0x29
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF496
-+ .byte 0x52
-+ .byte 0x2a
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF497
-+ .byte 0x52
-+ .byte 0x2b
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF498
-+ .byte 0x52
-+ .byte 0x5c
-+ .long 0x25d0
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .byte 0x0
-+ .uleb128 0x7
-+ .long .LASF499
-+ .byte 0x52
-+ .byte 0x5d
-+ .long 0x2636
-+ .uleb128 0xf
-+ .long 0x2729
-+ .long .LASF500
-+ .byte 0x2c
-+ .byte 0x46
-+ .byte 0x13
-+ .uleb128 0x16
-+ .long .LASF501
-+ .byte 0xb
-+ .value 0x229
-+ .long 0x16c4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x16
-+ .long .LASF502
-+ .byte 0xb
-+ .value 0x22a
-+ .long 0x16c4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0x16
-+ .long .LASF245
-+ .byte 0xb
-+ .value 0x22b
-+ .long 0x16c4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0x16
-+ .long .LASF503
-+ .byte 0xb
-+ .value 0x22c
-+ .long 0x16c4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0x16
-+ .long .LASF504
-+ .byte 0xb
-+ .value 0x22e
-+ .long 0x16c4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0x16
-+ .long .LASF505
-+ .byte 0xb
-+ .value 0x22f
-+ .long 0x16c4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0x16
-+ .long .LASF506
-+ .byte 0xb
-+ .value 0x232
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0x16
-+ .long .LASF507
-+ .byte 0xb
-+ .value 0x233
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .uleb128 0x16
-+ .long .LASF508
-+ .byte 0xb
-+ .value 0x23b
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .uleb128 0x17
-+ .string "uid"
-+ .byte 0xb
-+ .value 0x23c
-+ .long 0x1dd
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x28
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x2686
-+ .uleb128 0xf
-+ .long 0x2758
-+ .long .LASF503
-+ .byte 0x10
-+ .byte 0x46
-+ .byte 0x19
-+ .uleb128 0xa
-+ .long .LASF509
-+ .byte 0x46
-+ .byte 0x1a
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF247
-+ .byte 0x46
-+ .byte 0x1b
-+ .long 0x23bf
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x27e3
-+ .long .LASF510
-+ .byte 0x24
-+ .byte 0x23
-+ .byte 0x7
-+ .uleb128 0xa
-+ .long .LASF322
-+ .byte 0x23
-+ .byte 0x8
-+ .long 0x16c4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF285
-+ .byte 0x23
-+ .byte 0x9
-+ .long 0x16a2
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF511
-+ .byte 0x23
-+ .byte 0xa
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF512
-+ .byte 0x23
-+ .byte 0xb
-+ .long 0x28ec
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xb
-+ .string "pwd"
-+ .byte 0x23
-+ .byte 0xb
-+ .long 0x28ec
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xa
-+ .long .LASF513
-+ .byte 0x23
-+ .byte 0xb
-+ .long 0x28ec
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0xa
-+ .long .LASF514
-+ .byte 0x23
-+ .byte 0xc
-+ .long 0x28f8
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0xa
-+ .long .LASF515
-+ .byte 0x23
-+ .byte 0xc
-+ .long 0x28f8
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .uleb128 0xa
-+ .long .LASF516
-+ .byte 0x23
-+ .byte 0xc
-+ .long 0x28f8
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x28ec
-+ .long .LASF517
-+ .byte 0x84
-+ .byte 0x23
-+ .byte 0x4
-+ .uleb128 0xa
-+ .long .LASF518
-+ .byte 0x24
-+ .byte 0x53
-+ .long 0x16c4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF519
-+ .byte 0x24
-+ .byte 0x54
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF520
-+ .byte 0x24
-+ .byte 0x55
-+ .long 0x1680
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF521
-+ .byte 0x24
-+ .byte 0x56
-+ .long 0x3381
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xa
-+ .long .LASF522
-+ .byte 0x24
-+ .byte 0x5c
-+ .long 0x1808
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xa
-+ .long .LASF523
-+ .byte 0x24
-+ .byte 0x5d
-+ .long 0x28ec
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0xa
-+ .long .LASF524
-+ .byte 0x24
-+ .byte 0x5e
-+ .long 0x5db4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .uleb128 0xa
-+ .long .LASF525
-+ .byte 0x24
-+ .byte 0x60
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x28
-+ .uleb128 0xb
-+ .string "d_u"
-+ .byte 0x24
-+ .byte 0x67
-+ .long 0x5df6
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x30
-+ .uleb128 0xa
-+ .long .LASF526
-+ .byte 0x24
-+ .byte 0x68
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x38
-+ .uleb128 0xa
-+ .long .LASF527
-+ .byte 0x24
-+ .byte 0x69
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x40
-+ .uleb128 0xa
-+ .long .LASF528
-+ .byte 0x24
-+ .byte 0x6a
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x48
-+ .uleb128 0xa
-+ .long .LASF529
-+ .byte 0x24
-+ .byte 0x6b
-+ .long 0x5e84
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4c
-+ .uleb128 0xa
-+ .long .LASF530
-+ .byte 0x24
-+ .byte 0x6c
-+ .long 0x60d1
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x50
-+ .uleb128 0xa
-+ .long .LASF531
-+ .byte 0x24
-+ .byte 0x6d
-+ .long 0x160b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x54
-+ .uleb128 0xa
-+ .long .LASF532
-+ .byte 0x24
-+ .byte 0x6f
-+ .long 0x60dd
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x58
-+ .uleb128 0xa
-+ .long .LASF533
-+ .byte 0x24
-+ .byte 0x71
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x5c
-+ .uleb128 0xa
-+ .long .LASF534
-+ .byte 0x24
-+ .byte 0x72
-+ .long 0x60e3
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x60
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x27e3
-+ .uleb128 0x21
-+ .long .LASF535
-+ .byte 0x1
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x28f2
-+ .uleb128 0xf
-+ .long 0x2927
-+ .long .LASF536
-+ .byte 0x10
-+ .byte 0x38
-+ .byte 0x46
-+ .uleb128 0xa
-+ .long .LASF537
-+ .byte 0x44
-+ .byte 0xe
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF327
-+ .byte 0x44
-+ .byte 0xf
-+ .long 0x18ef
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x2950
-+ .long .LASF538
-+ .byte 0xc
-+ .byte 0x18
-+ .byte 0x1b
-+ .uleb128 0xa
-+ .long .LASF539
-+ .byte 0x18
-+ .byte 0x1c
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF540
-+ .byte 0x18
-+ .byte 0x1d
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x2969
-+ .long .LASF541
-+ .byte 0x0
-+ .byte 0x18
-+ .byte 0x29
-+ .uleb128 0xb
-+ .string "x"
-+ .byte 0x18
-+ .byte 0x2a
-+ .long 0x2969
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .byte 0x0
-+ .uleb128 0x12
-+ .long 0x2978
-+ .long 0xbb
-+ .uleb128 0x23
-+ .long 0x28
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x29bd
-+ .long .LASF542
-+ .byte 0x14
-+ .byte 0x18
-+ .byte 0x4d
-+ .uleb128 0xa
-+ .long .LASF322
-+ .byte 0x18
-+ .byte 0x4e
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF543
-+ .byte 0x18
-+ .byte 0x4f
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF544
-+ .byte 0x18
-+ .byte 0x50
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF509
-+ .byte 0x18
-+ .byte 0x51
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x29f4
-+ .long .LASF545
-+ .byte 0x80
-+ .byte 0x18
-+ .byte 0x54
-+ .uleb128 0xb
-+ .string "pcp"
-+ .byte 0x18
-+ .byte 0x55
-+ .long 0x29f4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF546
-+ .byte 0x18
-+ .byte 0x5a
-+ .long 0x169
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x28
-+ .uleb128 0xa
-+ .long .LASF547
-+ .byte 0x18
-+ .byte 0x5b
-+ .long 0x2a04
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x29
-+ .byte 0x0
-+ .uleb128 0x12
-+ .long 0x2a04
-+ .long 0x2978
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x1
-+ .byte 0x0
-+ .uleb128 0x12
-+ .long 0x2a14
-+ .long 0x169
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0xd
-+ .byte 0x0
-+ .uleb128 0x1a
-+ .long 0x2bbb
-+ .long .LASF548
-+ .value 0x1280
-+ .byte 0x18
-+ .byte 0xb6
-+ .uleb128 0xa
-+ .long .LASF549
-+ .byte 0x18
-+ .byte 0xb8
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF550
-+ .byte 0x18
-+ .byte 0xb8
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF551
-+ .byte 0x18
-+ .byte 0xb8
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF552
-+ .byte 0x18
-+ .byte 0xc1
-+ .long 0x8dc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xa
-+ .long .LASF553
-+ .byte 0x18
-+ .byte 0xcc
-+ .long 0x2bbb
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x80
-+ .uleb128 0xa
-+ .long .LASF285
-+ .byte 0x18
-+ .byte 0xd1
-+ .long 0x1680
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x1080
-+ .uleb128 0xa
-+ .long .LASF538
-+ .byte 0x18
-+ .byte 0xd6
-+ .long 0x2bcb
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x1084
-+ .uleb128 0xa
-+ .long .LASF554
-+ .byte 0x18
-+ .byte 0xd9
-+ .long 0x2950
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x1180
-+ .uleb128 0xa
-+ .long .LASF555
-+ .byte 0x18
-+ .byte 0xdc
-+ .long 0x1680
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x1180
-+ .uleb128 0xa
-+ .long .LASF556
-+ .byte 0x18
-+ .byte 0xdd
-+ .long 0x17bc
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x1184
-+ .uleb128 0xa
-+ .long .LASF557
-+ .byte 0x18
-+ .byte 0xde
-+ .long 0x17bc
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x118c
-+ .uleb128 0xa
-+ .long .LASF558
-+ .byte 0x18
-+ .byte 0xdf
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x1194
-+ .uleb128 0xa
-+ .long .LASF559
-+ .byte 0x18
-+ .byte 0xe0
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x1198
-+ .uleb128 0xa
-+ .long .LASF560
-+ .byte 0x18
-+ .byte 0xe1
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x119c
-+ .uleb128 0xa
-+ .long .LASF561
-+ .byte 0x18
-+ .byte 0xe2
-+ .long 0x21
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x11a0
-+ .uleb128 0xa
-+ .long .LASF562
-+ .byte 0x18
-+ .byte 0xe5
-+ .long 0x16c4
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x11a4
-+ .uleb128 0xa
-+ .long .LASF563
-+ .byte 0x18
-+ .byte 0xe8
-+ .long 0x2bdb
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x11a8
-+ .uleb128 0xa
-+ .long .LASF564
-+ .byte 0x18
-+ .byte 0xf7
-+ .long 0x21
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x11e0
-+ .uleb128 0xa
-+ .long .LASF565
-+ .byte 0x18
-+ .byte 0xfa
-+ .long 0x2950
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x1200
-+ .uleb128 0x16
-+ .long .LASF566
-+ .byte 0x18
-+ .value 0x115
-+ .long 0x2beb
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x1200
-+ .uleb128 0x16
-+ .long .LASF567
-+ .byte 0x18
-+ .value 0x116
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x1204
-+ .uleb128 0x16
-+ .long .LASF568
-+ .byte 0x18
-+ .value 0x117
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x1208
-+ .uleb128 0x16
-+ .long .LASF569
-+ .byte 0x18
-+ .value 0x11c
-+ .long 0x2cbe
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x120c
-+ .uleb128 0x16
-+ .long .LASF570
-+ .byte 0x18
-+ .value 0x11e
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x1210
-+ .uleb128 0x16
-+ .long .LASF571
-+ .byte 0x18
-+ .value 0x12a
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x1214
-+ .uleb128 0x16
-+ .long .LASF572
-+ .byte 0x18
-+ .value 0x12b
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x1218
-+ .uleb128 0x16
-+ .long .LASF414
-+ .byte 0x18
-+ .value 0x130
-+ .long 0x7f2
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x121c
-+ .byte 0x0
-+ .uleb128 0x12
-+ .long 0x2bcb
-+ .long 0x29bd
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x1f
-+ .byte 0x0
-+ .uleb128 0x12
-+ .long 0x2bdb
-+ .long 0x2927
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0xa
-+ .byte 0x0
-+ .uleb128 0x12
-+ .long 0x2beb
-+ .long 0x16cf
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0xd
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x18ef
-+ .uleb128 0x1a
-+ .long 0x2cbe
-+ .long .LASF573
-+ .value 0x3800
-+ .byte 0x18
-+ .byte 0x20
-+ .uleb128 0x16
-+ .long .LASF574
-+ .byte 0x18
-+ .value 0x1ae
-+ .long 0x2d12
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x16
-+ .long .LASF575
-+ .byte 0x18
-+ .value 0x1af
-+ .long 0x2d22
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x3780
-+ .uleb128 0x16
-+ .long .LASF576
-+ .byte 0x18
-+ .value 0x1b0
-+ .long 0x21
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x37bc
-+ .uleb128 0x16
-+ .long .LASF577
-+ .byte 0x18
-+ .value 0x1b2
-+ .long 0x2d82
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x37c0
-+ .uleb128 0x16
-+ .long .LASF578
-+ .byte 0x18
-+ .value 0x1b4
-+ .long 0x2d8e
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x37c4
-+ .uleb128 0x16
-+ .long .LASF579
-+ .byte 0x18
-+ .value 0x1bf
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x37c8
-+ .uleb128 0x16
-+ .long .LASF580
-+ .byte 0x18
-+ .value 0x1c0
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x37cc
-+ .uleb128 0x16
-+ .long .LASF581
-+ .byte 0x18
-+ .value 0x1c1
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x37d0
-+ .uleb128 0x16
-+ .long .LASF582
-+ .byte 0x18
-+ .value 0x1c3
-+ .long 0x21
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x37d4
-+ .uleb128 0x16
-+ .long .LASF583
-+ .byte 0x18
-+ .value 0x1c4
-+ .long 0x18ef
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x37d8
-+ .uleb128 0x16
-+ .long .LASF584
-+ .byte 0x18
-+ .value 0x1c5
-+ .long 0x15f9
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x37e4
-+ .uleb128 0x16
-+ .long .LASF585
-+ .byte 0x18
-+ .value 0x1c6
-+ .long 0x21
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x37e8
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x2bf1
-+ .uleb128 0x15
-+ .long 0x2cf0
-+ .long .LASF586
-+ .byte 0x14
-+ .byte 0x18
-+ .value 0x18c
-+ .uleb128 0x16
-+ .long .LASF587
-+ .byte 0x18
-+ .value 0x18d
-+ .long 0x2cf6
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x16
-+ .long .LASF588
-+ .byte 0x18
-+ .value 0x18e
-+ .long 0x2cfc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .byte 0x0
-+ .uleb128 0x21
-+ .long .LASF589
-+ .byte 0x1
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x2cf0
-+ .uleb128 0x12
-+ .long 0x2d0c
-+ .long 0x2d0c
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x3
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x2a14
-+ .uleb128 0x12
-+ .long 0x2d22
-+ .long 0x2a14
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x2
-+ .byte 0x0
-+ .uleb128 0x12
-+ .long 0x2d32
-+ .long 0x2cc4
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x2
-+ .byte 0x0
-+ .uleb128 0x15
-+ .long 0x2d82
-+ .long .LASF590
-+ .byte 0x20
-+ .byte 0x18
-+ .value 0x19e
-+ .uleb128 0xa
-+ .long .LASF53
-+ .byte 0x19
-+ .byte 0x13
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF591
-+ .byte 0x19
-+ .byte 0x15
-+ .long 0x16c4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0x10
-+ .long 0x8487
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0x10
-+ .long 0x8507
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0x10
-+ .long 0x852a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0xb
-+ .string "lru"
-+ .byte 0x19
-+ .byte 0x40
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x2d32
-+ .uleb128 0x21
-+ .long .LASF592
-+ .byte 0x1
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x2d88
-+ .uleb128 0xf
-+ .long 0x2dd9
-+ .long .LASF593
-+ .byte 0x14
-+ .byte 0x20
-+ .byte 0x2f
-+ .uleb128 0xa
-+ .long .LASF322
-+ .byte 0x20
-+ .byte 0x31
-+ .long 0x16c4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF323
-+ .byte 0x20
-+ .byte 0x32
-+ .long 0x1680
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF324
-+ .byte 0x20
-+ .byte 0x33
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF594
-+ .byte 0x20
-+ .byte 0x3a
-+ .long 0x2dd9
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0xdda
-+ .uleb128 0xf
-+ .long 0x2e16
-+ .long .LASF595
-+ .byte 0xc
-+ .byte 0x55
-+ .byte 0x32
-+ .uleb128 0xa
-+ .long .LASF596
-+ .byte 0x55
-+ .byte 0x33
-+ .long 0x2e36
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF307
-+ .byte 0x55
-+ .byte 0x34
-+ .long 0x2e30
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF597
-+ .byte 0x55
-+ .byte 0x35
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .byte 0x0
-+ .uleb128 0x11
-+ .long 0x2e30
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x2e30
-+ .uleb128 0x6
-+ .long 0x2f
-+ .uleb128 0x6
-+ .long 0x160b
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x2ddf
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x2e16
-+ .uleb128 0xf
-+ .long 0x2e65
-+ .long .LASF598
-+ .byte 0x14
-+ .byte 0x55
-+ .byte 0x3d
-+ .uleb128 0xa
-+ .long .LASF599
-+ .byte 0x55
-+ .byte 0x3e
-+ .long 0x18fa
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF600
-+ .byte 0x55
-+ .byte 0x3f
-+ .long 0x2e30
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .byte 0x0
-+ .uleb128 0x21
-+ .long .LASF601
-+ .byte 0x1
-+ .uleb128 0xf
-+ .long 0x2ea2
-+ .long .LASF602
-+ .byte 0xc
-+ .byte 0x3
-+ .byte 0x13
-+ .uleb128 0xa
-+ .long .LASF603
-+ .byte 0x3
-+ .byte 0x14
-+ .long 0x1fe
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF604
-+ .byte 0x3
-+ .byte 0x15
-+ .long 0x2ea2
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF605
-+ .byte 0x3
-+ .byte 0x17
-+ .long 0x2ea2
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x2e65
-+ .uleb128 0xf
-+ .long 0x2ed1
-+ .long .LASF606
-+ .byte 0x8
-+ .byte 0x25
-+ .byte 0x32
-+ .uleb128 0xa
-+ .long .LASF307
-+ .byte 0x25
-+ .byte 0x33
-+ .long 0x2ed1
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF316
-+ .byte 0x25
-+ .byte 0x34
-+ .long 0x2ee3
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x2ea8
-+ .uleb128 0x5
-+ .long 0x2ee3
-+ .byte 0x1
-+ .uleb128 0x6
-+ .long 0x2ed1
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x2ed7
-+ .uleb128 0xf
-+ .long 0x2fba
-+ .long .LASF607
-+ .byte 0x3c
-+ .byte 0x25
-+ .byte 0x5d
-+ .uleb128 0xa
-+ .long .LASF608
-+ .byte 0x25
-+ .byte 0x5f
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF609
-+ .byte 0x25
-+ .byte 0x60
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF610
-+ .byte 0x25
-+ .byte 0x61
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF544
-+ .byte 0x25
-+ .byte 0x64
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xa
-+ .long .LASF611
-+ .byte 0x25
-+ .byte 0x65
-+ .long 0x2ed1
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xa
-+ .long .LASF612
-+ .byte 0x25
-+ .byte 0x66
-+ .long 0x2fba
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0xa
-+ .long .LASF613
-+ .byte 0x25
-+ .byte 0x67
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0xa
-+ .long .LASF614
-+ .byte 0x25
-+ .byte 0x68
-+ .long 0x2ed1
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .uleb128 0xa
-+ .long .LASF615
-+ .byte 0x25
-+ .byte 0x69
-+ .long 0x2fba
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .uleb128 0xa
-+ .long .LASF616
-+ .byte 0x25
-+ .byte 0x6a
-+ .long 0x2ed1
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x24
-+ .uleb128 0xa
-+ .long .LASF617
-+ .byte 0x25
-+ .byte 0x6b
-+ .long 0x2fba
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x28
-+ .uleb128 0xa
-+ .long .LASF618
-+ .byte 0x25
-+ .byte 0x6c
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x2c
-+ .uleb128 0xb
-+ .string "cpu"
-+ .byte 0x25
-+ .byte 0x6d
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x30
-+ .uleb128 0xa
-+ .long .LASF619
-+ .byte 0x25
-+ .byte 0x6e
-+ .long 0x2ea8
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x34
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x2ed1
-+ .uleb128 0x27
-+ .long 0x2fe5
-+ .long .LASF739
-+ .byte 0x4
-+ .byte 0x39
-+ .byte 0x7
-+ .uleb128 0x28
-+ .long .LASF620
-+ .sleb128 0
-+ .uleb128 0x28
-+ .long .LASF621
-+ .sleb128 1
-+ .uleb128 0x28
-+ .long .LASF622
-+ .sleb128 2
-+ .uleb128 0x28
-+ .long .LASF623
-+ .sleb128 3
-+ .byte 0x0
-+ .uleb128 0x29
-+ .long 0x3037
-+ .string "pid"
-+ .byte 0x24
-+ .byte 0x38
-+ .byte 0x95
-+ .uleb128 0xa
-+ .long .LASF322
-+ .byte 0x39
-+ .byte 0x2d
-+ .long 0x16c4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xb
-+ .string "nr"
-+ .byte 0x39
-+ .byte 0x2f
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF624
-+ .byte 0x39
-+ .byte 0x30
-+ .long 0x1808
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF192
-+ .byte 0x39
-+ .byte 0x32
-+ .long 0x3037
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xb
-+ .string "rcu"
-+ .byte 0x39
-+ .byte 0x33
-+ .long 0x2ea8
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .byte 0x0
-+ .uleb128 0x12
-+ .long 0x3047
-+ .long 0x17eb
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x2
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x3070
-+ .long .LASF625
-+ .byte 0xc
-+ .byte 0x39
-+ .byte 0x39
-+ .uleb128 0xa
-+ .long .LASF400
-+ .byte 0x39
-+ .byte 0x3a
-+ .long 0x1808
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xb
-+ .string "pid"
-+ .byte 0x39
-+ .byte 0x3b
-+ .long 0x3070
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x2fe5
-+ .uleb128 0x9
-+ .long 0x308d
-+ .byte 0x4
-+ .byte 0x4f
-+ .byte 0xc
-+ .uleb128 0xa
-+ .long .LASF626
-+ .byte 0x4f
-+ .byte 0xc
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .byte 0x0
-+ .uleb128 0x7
-+ .long .LASF627
-+ .byte 0x4f
-+ .byte 0xc
-+ .long 0x3076
-+ .uleb128 0xf
-+ .long 0x30b3
-+ .long .LASF277
-+ .byte 0x4
-+ .byte 0x1b
-+ .byte 0x2f
-+ .uleb128 0xa
-+ .long .LASF307
-+ .byte 0x1b
-+ .byte 0x30
-+ .long 0x30b3
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x3098
-+ .uleb128 0xf
-+ .long 0x30f0
-+ .long .LASF628
-+ .byte 0xc
-+ .byte 0x1b
-+ .byte 0x3b
-+ .uleb128 0xa
-+ .long .LASF509
-+ .byte 0x1b
-+ .byte 0x3f
-+ .long 0x3098
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF629
-+ .byte 0x1b
-+ .byte 0x47
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF630
-+ .byte 0x1b
-+ .byte 0x53
-+ .long 0x30b3
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .byte 0x0
-+ .uleb128 0x1a
-+ .long 0x3381
-+ .long .LASF631
-+ .value 0x148
-+ .byte 0x1b
-+ .byte 0x8a
-+ .uleb128 0x16
-+ .long .LASF632
-+ .byte 0x1a
-+ .value 0x213
-+ .long 0x1808
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x16
-+ .long .LASF633
-+ .byte 0x1a
-+ .value 0x214
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0x16
-+ .long .LASF634
-+ .byte 0x1a
-+ .value 0x215
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0x16
-+ .long .LASF635
-+ .byte 0x1a
-+ .value 0x216
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0x16
-+ .long .LASF636
-+ .byte 0x1a
-+ .value 0x217
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .uleb128 0x16
-+ .long .LASF637
-+ .byte 0x1a
-+ .value 0x218
-+ .long 0x16c4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x24
-+ .uleb128 0x16
-+ .long .LASF638
-+ .byte 0x1a
-+ .value 0x219
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x28
-+ .uleb128 0x16
-+ .long .LASF639
-+ .byte 0x1a
-+ .value 0x21a
-+ .long 0x1dd
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x2c
-+ .uleb128 0x16
-+ .long .LASF640
-+ .byte 0x1a
-+ .value 0x21b
-+ .long 0x1e8
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x30
-+ .uleb128 0x16
-+ .long .LASF641
-+ .byte 0x1a
-+ .value 0x21c
-+ .long 0x19f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x34
-+ .uleb128 0x16
-+ .long .LASF642
-+ .byte 0x1a
-+ .value 0x21d
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x38
-+ .uleb128 0x16
-+ .long .LASF643
-+ .byte 0x1a
-+ .value 0x21e
-+ .long 0x1f3
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x3c
-+ .uleb128 0x16
-+ .long .LASF644
-+ .byte 0x1a
-+ .value 0x220
-+ .long 0x1730
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x44
-+ .uleb128 0x16
-+ .long .LASF645
-+ .byte 0x1a
-+ .value 0x222
-+ .long 0x173b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x48
-+ .uleb128 0x16
-+ .long .LASF646
-+ .byte 0x1a
-+ .value 0x223
-+ .long 0x173b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x50
-+ .uleb128 0x16
-+ .long .LASF647
-+ .byte 0x1a
-+ .value 0x224
-+ .long 0x173b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x58
-+ .uleb128 0x16
-+ .long .LASF648
-+ .byte 0x1a
-+ .value 0x225
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x60
-+ .uleb128 0x16
-+ .long .LASF649
-+ .byte 0x1a
-+ .value 0x226
-+ .long 0x235
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x64
-+ .uleb128 0x16
-+ .long .LASF650
-+ .byte 0x1a
-+ .value 0x227
-+ .long 0x53
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x68
-+ .uleb128 0x16
-+ .long .LASF651
-+ .byte 0x1a
-+ .value 0x228
-+ .long 0xea
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x6a
-+ .uleb128 0x16
-+ .long .LASF652
-+ .byte 0x1a
-+ .value 0x229
-+ .long 0x1680
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x6c
-+ .uleb128 0x16
-+ .long .LASF653
-+ .byte 0x1a
-+ .value 0x22a
-+ .long 0x2d94
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x70
-+ .uleb128 0x16
-+ .long .LASF654
-+ .byte 0x1a
-+ .value 0x22b
-+ .long 0x18fa
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x84
-+ .uleb128 0x16
-+ .long .LASF655
-+ .byte 0x1a
-+ .value 0x22c
-+ .long 0x738a
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x94
-+ .uleb128 0x16
-+ .long .LASF656
-+ .byte 0x1a
-+ .value 0x22d
-+ .long 0x7538
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x98
-+ .uleb128 0x16
-+ .long .LASF657
-+ .byte 0x1a
-+ .value 0x22e
-+ .long 0x60d1
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x9c
-+ .uleb128 0x16
-+ .long .LASF658
-+ .byte 0x1a
-+ .value 0x22f
-+ .long 0x7641
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xa0
-+ .uleb128 0x16
-+ .long .LASF659
-+ .byte 0x1a
-+ .value 0x230
-+ .long 0x6e96
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xa4
-+ .uleb128 0x16
-+ .long .LASF660
-+ .byte 0x1a
-+ .value 0x231
-+ .long 0x6e9c
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xa8
-+ .uleb128 0x16
-+ .long .LASF661
-+ .byte 0x1a
-+ .value 0x235
-+ .long 0x17bc
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xfc
-+ .uleb128 0x10
-+ .long 0x7207
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x104
-+ .uleb128 0x16
-+ .long .LASF662
-+ .byte 0x1a
-+ .value 0x23b
-+ .long 0x21
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x108
-+ .uleb128 0x16
-+ .long .LASF663
-+ .byte 0x1a
-+ .value 0x23d
-+ .long 0x141
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x10c
-+ .uleb128 0x16
-+ .long .LASF664
-+ .byte 0x1a
-+ .value 0x240
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x110
-+ .uleb128 0x16
-+ .long .LASF665
-+ .byte 0x1a
-+ .value 0x241
-+ .long 0x764d
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x114
-+ .uleb128 0x16
-+ .long .LASF504
-+ .byte 0x1a
-+ .value 0x245
-+ .long 0x17bc
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x118
-+ .uleb128 0x16
-+ .long .LASF666
-+ .byte 0x1a
-+ .value 0x246
-+ .long 0x2d94
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x120
-+ .uleb128 0x16
-+ .long .LASF667
-+ .byte 0x1a
-+ .value 0x249
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x134
-+ .uleb128 0x16
-+ .long .LASF668
-+ .byte 0x1a
-+ .value 0x24a
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x138
-+ .uleb128 0x16
-+ .long .LASF669
-+ .byte 0x1a
-+ .value 0x24c
-+ .long 0x77
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x13c
-+ .uleb128 0x16
-+ .long .LASF670
-+ .byte 0x1a
-+ .value 0x24e
-+ .long 0x16c4
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x140
-+ .uleb128 0x16
-+ .long .LASF671
-+ .byte 0x1a
-+ .value 0x252
-+ .long 0x160b
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x144
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x30f0
-+ .uleb128 0x1f
-+ .long 0x36ad
-+ .long .LASF672
-+ .value 0x1b0
-+ .byte 0x8
-+ .value 0x19d
-+ .uleb128 0x16
-+ .long .LASF673
-+ .byte 0xb
-+ .value 0x144
-+ .long 0x3f9c
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x16
-+ .long .LASF674
-+ .byte 0xb
-+ .value 0x145
-+ .long 0x17a1
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0x16
-+ .long .LASF675
-+ .byte 0xb
-+ .value 0x146
-+ .long 0x3f9c
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0x16
-+ .long .LASF676
-+ .byte 0xb
-+ .value 0x149
-+ .long 0x3fc6
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0x16
-+ .long .LASF677
-+ .byte 0xb
-+ .value 0x14a
-+ .long 0x3fdd
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0x16
-+ .long .LASF678
-+ .byte 0xb
-+ .value 0x14b
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0x16
-+ .long .LASF679
-+ .byte 0xb
-+ .value 0x14c
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0x16
-+ .long .LASF680
-+ .byte 0xb
-+ .value 0x14d
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .uleb128 0x16
-+ .long .LASF681
-+ .byte 0xb
-+ .value 0x14e
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .uleb128 0x17
-+ .string "pgd"
-+ .byte 0xb
-+ .value 0x14f
-+ .long 0x3fe3
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x24
-+ .uleb128 0x16
-+ .long .LASF682
-+ .byte 0xb
-+ .value 0x150
-+ .long 0x16c4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x28
-+ .uleb128 0x16
-+ .long .LASF683
-+ .byte 0xb
-+ .value 0x151
-+ .long 0x16c4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x2c
-+ .uleb128 0x16
-+ .long .LASF684
-+ .byte 0xb
-+ .value 0x152
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x30
-+ .uleb128 0x16
-+ .long .LASF685
-+ .byte 0xb
-+ .value 0x153
-+ .long 0x18fa
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x34
-+ .uleb128 0x16
-+ .long .LASF686
-+ .byte 0xb
-+ .value 0x154
-+ .long 0x1680
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x44
-+ .uleb128 0x16
-+ .long .LASF687
-+ .byte 0xb
-+ .value 0x156
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x48
-+ .uleb128 0x16
-+ .long .LASF688
-+ .byte 0xb
-+ .value 0x15e
-+ .long 0x3eb1
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x50
-+ .uleb128 0x16
-+ .long .LASF689
-+ .byte 0xb
-+ .value 0x15f
-+ .long 0x3eb1
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x54
-+ .uleb128 0x16
-+ .long .LASF690
-+ .byte 0xb
-+ .value 0x161
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x58
-+ .uleb128 0x16
-+ .long .LASF691
-+ .byte 0xb
-+ .value 0x162
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x5c
-+ .uleb128 0x16
-+ .long .LASF692
-+ .byte 0xb
-+ .value 0x164
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x60
-+ .uleb128 0x16
-+ .long .LASF693
-+ .byte 0xb
-+ .value 0x164
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x64
-+ .uleb128 0x16
-+ .long .LASF694
-+ .byte 0xb
-+ .value 0x164
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x68
-+ .uleb128 0x16
-+ .long .LASF695
-+ .byte 0xb
-+ .value 0x164
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x6c
-+ .uleb128 0x16
-+ .long .LASF696
-+ .byte 0xb
-+ .value 0x165
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x70
-+ .uleb128 0x16
-+ .long .LASF697
-+ .byte 0xb
-+ .value 0x165
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x74
-+ .uleb128 0x16
-+ .long .LASF698
-+ .byte 0xb
-+ .value 0x165
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x78
-+ .uleb128 0x16
-+ .long .LASF699
-+ .byte 0xb
-+ .value 0x165
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x7c
-+ .uleb128 0x16
-+ .long .LASF700
-+ .byte 0xb
-+ .value 0x166
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x80
-+ .uleb128 0x16
-+ .long .LASF701
-+ .byte 0xb
-+ .value 0x166
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x84
-+ .uleb128 0x16
-+ .long .LASF702
-+ .byte 0xb
-+ .value 0x166
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x88
-+ .uleb128 0x16
-+ .long .LASF703
-+ .byte 0xb
-+ .value 0x166
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x8c
-+ .uleb128 0x16
-+ .long .LASF704
-+ .byte 0xb
-+ .value 0x167
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x90
-+ .uleb128 0x17
-+ .string "brk"
-+ .byte 0xb
-+ .value 0x167
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x94
-+ .uleb128 0x16
-+ .long .LASF705
-+ .byte 0xb
-+ .value 0x167
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x98
-+ .uleb128 0x16
-+ .long .LASF706
-+ .byte 0xb
-+ .value 0x168
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x9c
-+ .uleb128 0x16
-+ .long .LASF707
-+ .byte 0xb
-+ .value 0x168
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xa0
-+ .uleb128 0x16
-+ .long .LASF708
-+ .byte 0xb
-+ .value 0x168
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xa4
-+ .uleb128 0x16
-+ .long .LASF709
-+ .byte 0xb
-+ .value 0x168
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xa8
-+ .uleb128 0x16
-+ .long .LASF710
-+ .byte 0xb
-+ .value 0x16a
-+ .long 0x3fe9
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xac
-+ .uleb128 0x16
-+ .long .LASF711
-+ .byte 0xb
-+ .value 0x16c
-+ .long 0x923
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x15c
-+ .uleb128 0x16
-+ .long .LASF712
-+ .byte 0xb
-+ .value 0x16f
-+ .long 0x19a9
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x160
-+ .uleb128 0x16
-+ .long .LASF713
-+ .byte 0xb
-+ .value 0x178
-+ .long 0x77
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x180
-+ .uleb128 0x16
-+ .long .LASF714
-+ .byte 0xb
-+ .value 0x179
-+ .long 0x77
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x184
-+ .uleb128 0x16
-+ .long .LASF715
-+ .byte 0xb
-+ .value 0x17a
-+ .long 0x77
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x188
-+ .uleb128 0x20
-+ .long .LASF716
-+ .byte 0xb
-+ .value 0x17c
-+ .long 0x112
-+ .byte 0x1
-+ .byte 0x2
-+ .byte 0x6
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x18c
-+ .uleb128 0x16
-+ .long .LASF717
-+ .byte 0xb
-+ .value 0x17f
-+ .long 0x21
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x190
-+ .uleb128 0x16
-+ .long .LASF718
-+ .byte 0xb
-+ .value 0x180
-+ .long 0x3ff9
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x194
-+ .uleb128 0x16
-+ .long .LASF719
-+ .byte 0xb
-+ .value 0x180
-+ .long 0x28fe
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x198
-+ .uleb128 0x16
-+ .long .LASF720
-+ .byte 0xb
-+ .value 0x183
-+ .long 0x16a2
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x1a8
-+ .uleb128 0x16
-+ .long .LASF721
-+ .byte 0xb
-+ .value 0x184
-+ .long 0x3dc4
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x1ac
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x3387
-+ .uleb128 0xf
-+ .long 0x36dc
-+ .long .LASF722
-+ .byte 0x10
-+ .byte 0x50
-+ .byte 0x50
-+ .uleb128 0xa
-+ .long .LASF723
-+ .byte 0x50
-+ .byte 0x51
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF724
-+ .byte 0x50
-+ .byte 0x52
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x3705
-+ .long .LASF725
-+ .byte 0x8
-+ .byte 0x4d
-+ .byte 0x2a
-+ .uleb128 0xa
-+ .long .LASF726
-+ .byte 0x4d
-+ .byte 0x2b
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF727
-+ .byte 0x4d
-+ .byte 0x2c
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .byte 0x0
-+ .uleb128 0x25
-+ .long 0x371d
-+ .long .LASF728
-+ .byte 0x8
-+ .byte 0x1b
-+ .byte 0x6
-+ .uleb128 0xe
-+ .long .LASF729
-+ .byte 0x4c
-+ .byte 0x2f
-+ .long 0x17e
-+ .byte 0x0
-+ .uleb128 0x7
-+ .long .LASF730
-+ .byte 0x4c
-+ .byte 0x3b
-+ .long 0x3705
-+ .uleb128 0xf
-+ .long 0x377b
-+ .long .LASF731
-+ .byte 0x18
-+ .byte 0xa
-+ .byte 0xb
-+ .uleb128 0xa
-+ .long .LASF376
-+ .byte 0xa
-+ .byte 0xc
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF732
-+ .byte 0xa
-+ .byte 0xd
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF733
-+ .byte 0xa
-+ .byte 0xf
-+ .long 0x3787
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xa
-+ .long .LASF734
-+ .byte 0xa
-+ .byte 0x10
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xa
-+ .long .LASF735
-+ .byte 0xa
-+ .byte 0x12
-+ .long 0x380f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .byte 0x0
-+ .uleb128 0x5
-+ .long 0x3787
-+ .byte 0x1
-+ .uleb128 0x6
-+ .long 0x2f
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x377b
-+ .uleb128 0x1a
-+ .long 0x380f
-+ .long .LASF736
-+ .value 0x1080
-+ .byte 0xa
-+ .byte 0x9
-+ .uleb128 0xa
-+ .long .LASF285
-+ .byte 0x1
-+ .byte 0x46
-+ .long 0x1680
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF737
-+ .byte 0x1
-+ .byte 0x47
-+ .long 0x8791
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF738
-+ .byte 0x1
-+ .byte 0x48
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xb
-+ .string "tv1"
-+ .byte 0x1
-+ .byte 0x49
-+ .long 0x8786
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xb
-+ .string "tv2"
-+ .byte 0x1
-+ .byte 0x4a
-+ .long 0x874f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x80c
-+ .uleb128 0xb
-+ .string "tv3"
-+ .byte 0x1
-+ .byte 0x4b
-+ .long 0x874f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xa0c
-+ .uleb128 0xb
-+ .string "tv4"
-+ .byte 0x1
-+ .byte 0x4c
-+ .long 0x874f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xc0c
-+ .uleb128 0xb
-+ .string "tv5"
-+ .byte 0x1
-+ .byte 0x4d
-+ .long 0x874f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xe0c
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x378d
-+ .uleb128 0x27
-+ .long 0x382e
-+ .long .LASF740
-+ .byte 0x4
-+ .byte 0xa
-+ .byte 0xaa
-+ .uleb128 0x28
-+ .long .LASF741
-+ .sleb128 0
-+ .uleb128 0x28
-+ .long .LASF742
-+ .sleb128 1
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x3881
-+ .long .LASF743
-+ .byte 0x20
-+ .byte 0xa
-+ .byte 0xa9
-+ .uleb128 0xa
-+ .long .LASF400
-+ .byte 0x4b
-+ .byte 0x71
-+ .long 0x1764
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF732
-+ .byte 0x4b
-+ .byte 0x72
-+ .long 0x371d
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xa
-+ .long .LASF733
-+ .byte 0x4b
-+ .byte 0x73
-+ .long 0x3897
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0xa
-+ .long .LASF735
-+ .byte 0x4b
-+ .byte 0x74
-+ .long 0x391a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0xa
-+ .long .LASF169
-+ .byte 0x4b
-+ .byte 0x75
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .byte 0x0
-+ .uleb128 0x11
-+ .long 0x3891
-+ .byte 0x1
-+ .long 0x3815
-+ .uleb128 0x6
-+ .long 0x3891
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x382e
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x3881
-+ .uleb128 0xf
-+ .long 0x391a
-+ .long .LASF744
-+ .byte 0x28
-+ .byte 0x4b
-+ .byte 0x18
-+ .uleb128 0xa
-+ .long .LASF745
-+ .byte 0x4b
-+ .byte 0x9d
-+ .long 0x3957
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF746
-+ .byte 0x4b
-+ .byte 0x9e
-+ .long 0x1cb
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF747
-+ .byte 0x4b
-+ .byte 0x9f
-+ .long 0x17a1
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF310
-+ .byte 0x4b
-+ .byte 0xa0
-+ .long 0x179b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xa
-+ .long .LASF748
-+ .byte 0x4b
-+ .byte 0xa1
-+ .long 0x371d
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xa
-+ .long .LASF749
-+ .byte 0x4b
-+ .byte 0xa2
-+ .long 0x3963
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0xa
-+ .long .LASF750
-+ .byte 0x4b
-+ .byte 0xa3
-+ .long 0x3963
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .uleb128 0xa
-+ .long .LASF751
-+ .byte 0x4b
-+ .byte 0xa4
-+ .long 0x371d
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x389d
-+ .uleb128 0xf
-+ .long 0x3957
-+ .long .LASF752
-+ .byte 0x54
-+ .byte 0x4b
-+ .byte 0x19
-+ .uleb128 0xa
-+ .long .LASF285
-+ .byte 0x4b
-+ .byte 0xc2
-+ .long 0x1680
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF753
-+ .byte 0x4b
-+ .byte 0xc3
-+ .long 0x161c
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF754
-+ .byte 0x4b
-+ .byte 0xc4
-+ .long 0x3969
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x3920
-+ .uleb128 0x18
-+ .byte 0x1
-+ .long 0x371d
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x395d
-+ .uleb128 0x12
-+ .long 0x3979
-+ .long 0x389d
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x1
-+ .byte 0x0
-+ .uleb128 0x2a
-+ .long .LASF755
-+ .byte 0x0
-+ .byte 0x53
-+ .byte 0x23
-+ .uleb128 0x7
-+ .long .LASF756
-+ .byte 0x34
-+ .byte 0x10
-+ .long 0x398c
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x3992
-+ .uleb128 0x5
-+ .long 0x399e
-+ .byte 0x1
-+ .uleb128 0x6
-+ .long 0x399e
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x39a4
-+ .uleb128 0xf
-+ .long 0x39db
-+ .long .LASF757
-+ .byte 0x10
-+ .byte 0x34
-+ .byte 0xf
-+ .uleb128 0xa
-+ .long .LASF734
-+ .byte 0x34
-+ .byte 0x19
-+ .long 0x16cf
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF376
-+ .byte 0x34
-+ .byte 0x1d
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF316
-+ .byte 0x34
-+ .byte 0x1e
-+ .long 0x3981
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x3a04
-+ .long .LASF758
-+ .byte 0x28
-+ .byte 0x34
-+ .byte 0x23
-+ .uleb128 0xa
-+ .long .LASF759
-+ .byte 0x34
-+ .byte 0x24
-+ .long 0x39a4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF760
-+ .byte 0x34
-+ .byte 0x25
-+ .long 0x3728
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x3a49
-+ .long .LASF761
-+ .byte 0x20
-+ .byte 0x35
-+ .byte 0x39
-+ .uleb128 0xa
-+ .long .LASF734
-+ .byte 0x35
-+ .byte 0x3a
-+ .long 0x157
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xb
-+ .string "obj"
-+ .byte 0x35
-+ .byte 0x3b
-+ .long 0x157
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xb
-+ .string "res"
-+ .byte 0x35
-+ .byte 0x3c
-+ .long 0x14c
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xa
-+ .long .LASF762
-+ .byte 0x35
-+ .byte 0x3d
-+ .long 0x14c
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x3a72
-+ .long .LASF763
-+ .byte 0x8
-+ .byte 0x36
-+ .byte 0x15
-+ .uleb128 0xa
-+ .long .LASF764
-+ .byte 0x36
-+ .byte 0x16
-+ .long 0x160b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF765
-+ .byte 0x36
-+ .byte 0x17
-+ .long 0x6c
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .byte 0x0
-+ .uleb128 0xc
-+ .long 0x3a91
-+ .byte 0x4
-+ .byte 0x33
-+ .byte 0x63
-+ .uleb128 0xe
-+ .long .LASF237
-+ .byte 0x33
-+ .byte 0x64
-+ .long 0x160b
-+ .uleb128 0x26
-+ .string "tsk"
-+ .byte 0x33
-+ .byte 0x65
-+ .long 0x15f9
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x3bfd
-+ .long .LASF766
-+ .byte 0x88
-+ .byte 0x33
-+ .byte 0x57
-+ .uleb128 0xa
-+ .long .LASF767
-+ .byte 0x33
-+ .byte 0x58
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF768
-+ .byte 0x33
-+ .byte 0x59
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF769
-+ .byte 0x33
-+ .byte 0x5a
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xa
-+ .long .LASF770
-+ .byte 0x33
-+ .byte 0x5b
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xa
-+ .long .LASF771
-+ .byte 0x33
-+ .byte 0x5d
-+ .long 0x3cfd
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0xa
-+ .long .LASF772
-+ .byte 0x33
-+ .byte 0x5e
-+ .long 0x3dc4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0xa
-+ .long .LASF773
-+ .byte 0x33
-+ .byte 0x5f
-+ .long 0x3deb
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .uleb128 0xa
-+ .long .LASF774
-+ .byte 0x33
-+ .byte 0x60
-+ .long 0x3e01
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .uleb128 0xa
-+ .long .LASF775
-+ .byte 0x33
-+ .byte 0x61
-+ .long 0x3e13
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x24
-+ .uleb128 0xa
-+ .long .LASF776
-+ .byte 0x33
-+ .byte 0x66
-+ .long 0x3a72
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x28
-+ .uleb128 0xa
-+ .long .LASF777
-+ .byte 0x33
-+ .byte 0x68
-+ .long 0x157
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x2c
-+ .uleb128 0xa
-+ .long .LASF778
-+ .byte 0x33
-+ .byte 0x69
-+ .long 0x1840
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x34
-+ .uleb128 0xa
-+ .long .LASF779
-+ .byte 0x33
-+ .byte 0x6a
-+ .long 0x1f3
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x48
-+ .uleb128 0xa
-+ .long .LASF780
-+ .byte 0x33
-+ .byte 0x6c
-+ .long 0x16c4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x50
-+ .uleb128 0xa
-+ .long .LASF315
-+ .byte 0x33
-+ .byte 0x6d
-+ .long 0x160b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x54
-+ .uleb128 0xa
-+ .long .LASF781
-+ .byte 0x33
-+ .byte 0x6f
-+ .long 0x53
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x58
-+ .uleb128 0xa
-+ .long .LASF782
-+ .byte 0x33
-+ .byte 0x70
-+ .long 0x1fe
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x5c
-+ .uleb128 0xa
-+ .long .LASF783
-+ .byte 0x33
-+ .byte 0x71
-+ .long 0xb5
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x60
-+ .uleb128 0xa
-+ .long .LASF784
-+ .byte 0x33
-+ .byte 0x72
-+ .long 0x1fe
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x64
-+ .uleb128 0xa
-+ .long .LASF785
-+ .byte 0x33
-+ .byte 0x73
-+ .long 0x3a49
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x68
-+ .uleb128 0xa
-+ .long .LASF786
-+ .byte 0x33
-+ .byte 0x74
-+ .long 0x3e19
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x70
-+ .uleb128 0xa
-+ .long .LASF787
-+ .byte 0x33
-+ .byte 0x75
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x74
-+ .uleb128 0xa
-+ .long .LASF788
-+ .byte 0x33
-+ .byte 0x76
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x78
-+ .uleb128 0xa
-+ .long .LASF789
-+ .byte 0x33
-+ .byte 0x78
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x7c
-+ .uleb128 0xa
-+ .long .LASF790
-+ .byte 0x33
-+ .byte 0x7f
-+ .long 0x3cfd
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x84
-+ .byte 0x0
-+ .uleb128 0x15
-+ .long 0x3cfd
-+ .long .LASF106
-+ .byte 0x8c
-+ .byte 0x18
-+ .value 0x22c
-+ .uleb128 0x17
-+ .string "f_u"
-+ .byte 0x1a
-+ .value 0x2d0
-+ .long 0x776e
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x16
-+ .long .LASF791
-+ .byte 0x1a
-+ .value 0x2d1
-+ .long 0x628c
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0x16
-+ .long .LASF792
-+ .byte 0x1a
-+ .value 0x2d4
-+ .long 0x7538
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0x16
-+ .long .LASF793
-+ .byte 0x1a
-+ .value 0x2d5
-+ .long 0x16c4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0x16
-+ .long .LASF794
-+ .byte 0x1a
-+ .value 0x2d6
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0x16
-+ .long .LASF795
-+ .byte 0x1a
-+ .value 0x2d7
-+ .long 0x1aa
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .uleb128 0x16
-+ .long .LASF796
-+ .byte 0x1a
-+ .value 0x2d8
-+ .long 0x1f3
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .uleb128 0x16
-+ .long .LASF797
-+ .byte 0x1a
-+ .value 0x2d9
-+ .long 0x7653
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x28
-+ .uleb128 0x16
-+ .long .LASF798
-+ .byte 0x1a
-+ .value 0x2da
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x40
-+ .uleb128 0x16
-+ .long .LASF799
-+ .byte 0x1a
-+ .value 0x2da
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x44
-+ .uleb128 0x16
-+ .long .LASF800
-+ .byte 0x1a
-+ .value 0x2db
-+ .long 0x76bb
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x48
-+ .uleb128 0x16
-+ .long .LASF801
-+ .byte 0x1a
-+ .value 0x2dd
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x74
-+ .uleb128 0x16
-+ .long .LASF802
-+ .byte 0x1a
-+ .value 0x2e2
-+ .long 0x160b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x78
-+ .uleb128 0x16
-+ .long .LASF803
-+ .byte 0x1a
-+ .value 0x2e6
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x7c
-+ .uleb128 0x16
-+ .long .LASF804
-+ .byte 0x1a
-+ .value 0x2e7
-+ .long 0x1680
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x84
-+ .uleb128 0x16
-+ .long .LASF805
-+ .byte 0x1a
-+ .value 0x2e9
-+ .long 0x6e96
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x88
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x3bfd
-+ .uleb128 0xf
-+ .long 0x3dc4
-+ .long .LASF806
-+ .byte 0xa0
-+ .byte 0x33
-+ .byte 0xf
-+ .uleb128 0xa
-+ .long .LASF807
-+ .byte 0x33
-+ .byte 0xb6
-+ .long 0x16c4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF808
-+ .byte 0x33
-+ .byte 0xb7
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xb
-+ .string "mm"
-+ .byte 0x33
-+ .byte 0xb8
-+ .long 0x36ad
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF809
-+ .byte 0x33
-+ .byte 0xbb
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xa
-+ .long .LASF307
-+ .byte 0x33
-+ .byte 0xbc
-+ .long 0x3dc4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xa
-+ .long .LASF327
-+ .byte 0x33
-+ .byte 0xbe
-+ .long 0x18ef
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0xa
-+ .long .LASF810
-+ .byte 0x33
-+ .byte 0xc0
-+ .long 0x1680
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .uleb128 0xa
-+ .long .LASF811
-+ .byte 0x33
-+ .byte 0xc2
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x24
-+ .uleb128 0xa
-+ .long .LASF812
-+ .byte 0x33
-+ .byte 0xc3
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x28
-+ .uleb128 0xa
-+ .long .LASF178
-+ .byte 0x33
-+ .byte 0xc4
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x30
-+ .uleb128 0xa
-+ .long .LASF813
-+ .byte 0x33
-+ .byte 0xc7
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x38
-+ .uleb128 0xa
-+ .long .LASF814
-+ .byte 0x33
-+ .byte 0xc9
-+ .long 0x3e1f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x3c
-+ .uleb128 0xb
-+ .string "wq"
-+ .byte 0x33
-+ .byte 0xcb
-+ .long 0x39db
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x78
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x3d03
-+ .uleb128 0x11
-+ .long 0x3ddf
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x3ddf
-+ .uleb128 0x6
-+ .long 0x3de5
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x3a91
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x3a04
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x3dca
-+ .uleb128 0x11
-+ .long 0x3e01
-+ .byte 0x1
-+ .long 0x209
-+ .uleb128 0x6
-+ .long 0x3ddf
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x3df1
-+ .uleb128 0x5
-+ .long 0x3e13
-+ .byte 0x1
-+ .uleb128 0x6
-+ .long 0x3ddf
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x3e07
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x3a49
-+ .uleb128 0xf
-+ .long 0x3e9b
-+ .long .LASF815
-+ .byte 0x3c
-+ .byte 0x33
-+ .byte 0xa8
-+ .uleb128 0xa
-+ .long .LASF678
-+ .byte 0x33
-+ .byte 0xa9
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF816
-+ .byte 0x33
-+ .byte 0xaa
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF817
-+ .byte 0x33
-+ .byte 0xac
-+ .long 0x3e9b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF818
-+ .byte 0x33
-+ .byte 0xad
-+ .long 0x1680
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xa
-+ .long .LASF819
-+ .byte 0x33
-+ .byte 0xae
-+ .long 0x5a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xb
-+ .string "nr"
-+ .byte 0x33
-+ .byte 0xb0
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0xa
-+ .long .LASF820
-+ .byte 0x33
-+ .byte 0xb0
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0xa
-+ .long .LASF821
-+ .byte 0x33
-+ .byte 0xb2
-+ .long 0x3ea1
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x2d82
-+ .uleb128 0x12
-+ .long 0x3eb1
-+ .long 0x2d82
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x7
-+ .byte 0x0
-+ .uleb128 0x1e
-+ .long .LASF822
-+ .byte 0xb
-+ .value 0x127
-+ .long 0x16cf
-+ .uleb128 0xf
-+ .long 0x3f9c
-+ .long .LASF823
-+ .byte 0x54
-+ .byte 0x14
-+ .byte 0x9e
-+ .uleb128 0xa
-+ .long .LASF824
-+ .byte 0x15
-+ .byte 0x3d
-+ .long 0x36ad
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF825
-+ .byte 0x15
-+ .byte 0x3e
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF826
-+ .byte 0x15
-+ .byte 0x3f
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF827
-+ .byte 0x15
-+ .byte 0x43
-+ .long 0x3f9c
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xa
-+ .long .LASF828
-+ .byte 0x15
-+ .byte 0x45
-+ .long 0x36e
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xa
-+ .long .LASF829
-+ .byte 0x15
-+ .byte 0x46
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0xa
-+ .long .LASF830
-+ .byte 0x15
-+ .byte 0x48
-+ .long 0x1764
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0xa
-+ .long .LASF831
-+ .byte 0x15
-+ .byte 0x58
-+ .long 0x857c
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x24
-+ .uleb128 0xa
-+ .long .LASF832
-+ .byte 0x15
-+ .byte 0x60
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x34
-+ .uleb128 0xa
-+ .long .LASF833
-+ .byte 0x15
-+ .byte 0x61
-+ .long 0x85a1
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x3c
-+ .uleb128 0xa
-+ .long .LASF834
-+ .byte 0x15
-+ .byte 0x64
-+ .long 0x8608
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x40
-+ .uleb128 0xa
-+ .long .LASF835
-+ .byte 0x15
-+ .byte 0x67
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x44
-+ .uleb128 0xa
-+ .long .LASF836
-+ .byte 0x15
-+ .byte 0x69
-+ .long 0x3cfd
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x48
-+ .uleb128 0xa
-+ .long .LASF837
-+ .byte 0x15
-+ .byte 0x6a
-+ .long 0x160b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4c
-+ .uleb128 0xa
-+ .long .LASF838
-+ .byte 0x15
-+ .byte 0x6b
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x50
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x3ebd
-+ .uleb128 0x11
-+ .long 0x3fc6
-+ .byte 0x1
-+ .long 0x2f
-+ .uleb128 0x6
-+ .long 0x3cfd
-+ .uleb128 0x6
-+ .long 0x2f
-+ .uleb128 0x6
-+ .long 0x2f
-+ .uleb128 0x6
-+ .long 0x2f
-+ .uleb128 0x6
-+ .long 0x2f
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x3fa2
-+ .uleb128 0x5
-+ .long 0x3fdd
-+ .byte 0x1
-+ .uleb128 0x6
-+ .long 0x36ad
-+ .uleb128 0x6
-+ .long 0x2f
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x3fcc
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x34c
-+ .uleb128 0x12
-+ .long 0x3ff9
-+ .long 0x2f
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x2b
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x28fe
-+ .uleb128 0x1f
-+ .long 0x404c
-+ .long .LASF839
-+ .value 0x510
-+ .byte 0xb
-+ .value 0x187
-+ .uleb128 0x16
-+ .long .LASF322
-+ .byte 0xb
-+ .value 0x188
-+ .long 0x16c4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x16
-+ .long .LASF840
-+ .byte 0xb
-+ .value 0x189
-+ .long 0x404c
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0x16
-+ .long .LASF841
-+ .byte 0xb
-+ .value 0x18a
-+ .long 0x1680
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x504
-+ .uleb128 0x16
-+ .long .LASF842
-+ .byte 0xb
-+ .value 0x18b
-+ .long 0x17bc
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x508
-+ .byte 0x0
-+ .uleb128 0x12
-+ .long 0x405c
-+ .long 0x2447
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x3f
-+ .byte 0x0
-+ .uleb128 0x2b
-+ .long 0x407e
-+ .byte 0x4
-+ .byte 0xb
-+ .value 0x1c7
-+ .uleb128 0x1c
-+ .long .LASF843
-+ .byte 0xb
-+ .value 0x1c8
-+ .long 0x1b5
-+ .uleb128 0x1c
-+ .long .LASF844
-+ .byte 0xb
-+ .value 0x1c9
-+ .long 0x1b5
-+ .byte 0x0
-+ .uleb128 0x1f
-+ .long 0x4314
-+ .long .LASF845
-+ .value 0x16c
-+ .byte 0xb
-+ .value 0x19d
-+ .uleb128 0x16
-+ .long .LASF322
-+ .byte 0xb
-+ .value 0x19e
-+ .long 0x16c4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x16
-+ .long .LASF846
-+ .byte 0xb
-+ .value 0x19f
-+ .long 0x16c4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0x16
-+ .long .LASF847
-+ .byte 0xb
-+ .value 0x1a1
-+ .long 0x18ef
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0x16
-+ .long .LASF848
-+ .byte 0xb
-+ .value 0x1a4
-+ .long 0x15f9
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0x16
-+ .long .LASF849
-+ .byte 0xb
-+ .value 0x1a7
-+ .long 0x272f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0x16
-+ .long .LASF850
-+ .byte 0xb
-+ .value 0x1aa
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x28
-+ .uleb128 0x16
-+ .long .LASF851
-+ .byte 0xb
-+ .value 0x1b0
-+ .long 0x15f9
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x2c
-+ .uleb128 0x16
-+ .long .LASF852
-+ .byte 0xb
-+ .value 0x1b1
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x30
-+ .uleb128 0x16
-+ .long .LASF853
-+ .byte 0xb
-+ .value 0x1b4
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x34
-+ .uleb128 0x16
-+ .long .LASF53
-+ .byte 0xb
-+ .value 0x1b5
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x38
-+ .uleb128 0x16
-+ .long .LASF854
-+ .byte 0xb
-+ .value 0x1b8
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x3c
-+ .uleb128 0x16
-+ .long .LASF855
-+ .byte 0xb
-+ .value 0x1bb
-+ .long 0x382e
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x44
-+ .uleb128 0x17
-+ .string "tsk"
-+ .byte 0xb
-+ .value 0x1bc
-+ .long 0x15f9
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x64
-+ .uleb128 0x16
-+ .long .LASF856
-+ .byte 0xb
-+ .value 0x1bd
-+ .long 0x371d
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x68
-+ .uleb128 0x16
-+ .long .LASF222
-+ .byte 0xb
-+ .value 0x1c0
-+ .long 0x19b4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x70
-+ .uleb128 0x16
-+ .long .LASF223
-+ .byte 0xb
-+ .value 0x1c0
-+ .long 0x19b4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x74
-+ .uleb128 0x16
-+ .long .LASF857
-+ .byte 0xb
-+ .value 0x1c1
-+ .long 0x19b4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x78
-+ .uleb128 0x16
-+ .long .LASF858
-+ .byte 0xb
-+ .value 0x1c1
-+ .long 0x19b4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x7c
-+ .uleb128 0x16
-+ .long .LASF859
-+ .byte 0xb
-+ .value 0x1c4
-+ .long 0x1b5
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x80
-+ .uleb128 0x16
-+ .long .LASF860
-+ .byte 0xb
-+ .value 0x1c5
-+ .long 0x3070
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x84
-+ .uleb128 0x10
-+ .long 0x405c
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x88
-+ .uleb128 0x16
-+ .long .LASF861
-+ .byte 0xb
-+ .value 0x1cd
-+ .long 0x21
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x8c
-+ .uleb128 0x17
-+ .string "tty"
-+ .byte 0xb
-+ .value 0x1cf
-+ .long 0x431a
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x90
-+ .uleb128 0x16
-+ .long .LASF215
-+ .byte 0xb
-+ .value 0x1d7
-+ .long 0x19b4
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x94
-+ .uleb128 0x16
-+ .long .LASF216
-+ .byte 0xb
-+ .value 0x1d7
-+ .long 0x19b4
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x98
-+ .uleb128 0x16
-+ .long .LASF862
-+ .byte 0xb
-+ .value 0x1d7
-+ .long 0x19b4
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x9c
-+ .uleb128 0x16
-+ .long .LASF863
-+ .byte 0xb
-+ .value 0x1d7
-+ .long 0x19b4
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xa0
-+ .uleb128 0x16
-+ .long .LASF217
-+ .byte 0xb
-+ .value 0x1d8
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xa4
-+ .uleb128 0x16
-+ .long .LASF218
-+ .byte 0xb
-+ .value 0x1d8
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xa8
-+ .uleb128 0x16
-+ .long .LASF864
-+ .byte 0xb
-+ .value 0x1d8
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xac
-+ .uleb128 0x16
-+ .long .LASF865
-+ .byte 0xb
-+ .value 0x1d8
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xb0
-+ .uleb128 0x16
-+ .long .LASF220
-+ .byte 0xb
-+ .value 0x1d9
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xb4
-+ .uleb128 0x16
-+ .long .LASF221
-+ .byte 0xb
-+ .value 0x1d9
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xb8
-+ .uleb128 0x16
-+ .long .LASF866
-+ .byte 0xb
-+ .value 0x1d9
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xbc
-+ .uleb128 0x16
-+ .long .LASF867
-+ .byte 0xb
-+ .value 0x1d9
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xc0
-+ .uleb128 0x16
-+ .long .LASF868
-+ .byte 0xb
-+ .value 0x1da
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xc4
-+ .uleb128 0x16
-+ .long .LASF869
-+ .byte 0xb
-+ .value 0x1da
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xc8
-+ .uleb128 0x16
-+ .long .LASF870
-+ .byte 0xb
-+ .value 0x1da
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xcc
-+ .uleb128 0x16
-+ .long .LASF871
-+ .byte 0xb
-+ .value 0x1da
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xd0
-+ .uleb128 0x16
-+ .long .LASF186
-+ .byte 0xb
-+ .value 0x1e2
-+ .long 0x162
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xd4
-+ .uleb128 0x16
-+ .long .LASF872
-+ .byte 0xb
-+ .value 0x1ed
-+ .long 0x4320
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xdc
-+ .uleb128 0x16
-+ .long .LASF225
-+ .byte 0xb
-+ .value 0x1ef
-+ .long 0x4330
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x154
-+ .byte 0x0
-+ .uleb128 0x21
-+ .long .LASF873
-+ .byte 0x1
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x4314
-+ .uleb128 0x12
-+ .long 0x4330
-+ .long 0x36dc
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0xe
-+ .byte 0x0
-+ .uleb128 0x12
-+ .long 0x4340
-+ .long 0x17bc
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x2
-+ .byte 0x0
-+ .uleb128 0x15
-+ .long 0x439b
-+ .long .LASF232
-+ .byte 0x8c
-+ .byte 0xb
-+ .value 0x302
-+ .uleb128 0x16
-+ .long .LASF874
-+ .byte 0xb
-+ .value 0x303
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x16
-+ .long .LASF171
-+ .byte 0xb
-+ .value 0x304
-+ .long 0x16c4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0x16
-+ .long .LASF875
-+ .byte 0xb
-+ .value 0x305
-+ .long 0x439b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0x16
-+ .long .LASF876
-+ .byte 0xb
-+ .value 0x306
-+ .long 0x21
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x88
-+ .uleb128 0x16
-+ .long .LASF877
-+ .byte 0xb
-+ .value 0x307
-+ .long 0x43ab
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x8c
-+ .byte 0x0
-+ .uleb128 0x12
-+ .long 0x43ab
-+ .long 0x1e8
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x1f
-+ .byte 0x0
-+ .uleb128 0x12
-+ .long 0x43ba
-+ .long 0x43ba
-+ .uleb128 0x23
-+ .long 0x28
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x1e8
-+ .uleb128 0x2c
-+ .long 0x43e6
-+ .long .LASF187
-+ .byte 0x4
-+ .byte 0xb
-+ .value 0x32c
-+ .uleb128 0x28
-+ .long .LASF878
-+ .sleb128 0
-+ .uleb128 0x28
-+ .long .LASF879
-+ .sleb128 1
-+ .uleb128 0x28
-+ .long .LASF880
-+ .sleb128 2
-+ .uleb128 0x28
-+ .long .LASF881
-+ .sleb128 3
-+ .byte 0x0
-+ .uleb128 0x2d
-+ .long 0x5a
-+ .uleb128 0x21
-+ .long .LASF882
-+ .byte 0x1
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x43eb
-+ .uleb128 0x21
-+ .long .LASF883
-+ .byte 0x1
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x43f7
-+ .uleb128 0x12
-+ .long 0x4413
-+ .long 0x3047
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x2
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x21
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x4340
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x2758
-+ .uleb128 0x21
-+ .long .LASF884
-+ .byte 0x1
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x4425
-+ .uleb128 0x21
-+ .long .LASF246
-+ .byte 0x1
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x4431
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x407e
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x3fff
-+ .uleb128 0x11
-+ .long 0x4459
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x160b
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x4449
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x23bf
-+ .uleb128 0x21
-+ .long .LASF259
-+ .byte 0x1
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x4465
-+ .uleb128 0x21
-+ .long .LASF885
-+ .byte 0x1
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x4471
-+ .uleb128 0x2e
-+ .string "bio"
-+ .byte 0x1
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x447d
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x4483
-+ .uleb128 0x15
-+ .long 0x44ab
-+ .long .LASF270
-+ .byte 0x4
-+ .byte 0xb
-+ .value 0x245
-+ .uleb128 0xa
-+ .long .LASF886
-+ .byte 0x51
-+ .byte 0x56
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x448f
-+ .uleb128 0x15
-+ .long 0x4521
-+ .long .LASF271
-+ .byte 0x1c
-+ .byte 0xb
-+ .value 0x244
-+ .uleb128 0xa
-+ .long .LASF887
-+ .byte 0x3e
-+ .byte 0x1c
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF169
-+ .byte 0x3e
-+ .byte 0x1d
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF888
-+ .byte 0x3e
-+ .byte 0x1e
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF889
-+ .byte 0x3e
-+ .byte 0x1f
-+ .long 0x8445
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xa
-+ .long .LASF890
-+ .byte 0x3e
-+ .byte 0x20
-+ .long 0x160b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xa
-+ .long .LASF891
-+ .byte 0x3e
-+ .byte 0x21
-+ .long 0x845c
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0xa
-+ .long .LASF892
-+ .byte 0x3e
-+ .byte 0x22
-+ .long 0x160b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x44b1
-+ .uleb128 0x21
-+ .long .LASF272
-+ .byte 0x1
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x4527
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x267b
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x30b9
-+ .uleb128 0x21
-+ .long .LASF893
-+ .byte 0x1
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x453f
-+ .uleb128 0x21
-+ .long .LASF894
-+ .byte 0x1
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x454b
-+ .uleb128 0xf
-+ .long 0x45d4
-+ .long .LASF895
-+ .byte 0x40
-+ .byte 0x66
-+ .byte 0x11
-+ .uleb128 0xa
-+ .long .LASF237
-+ .byte 0x66
-+ .byte 0x12
-+ .long 0x19bf
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF896
-+ .byte 0x66
-+ .byte 0x13
-+ .long 0x19bf
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF897
-+ .byte 0x66
-+ .byte 0x14
-+ .long 0x19bf
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xa
-+ .long .LASF898
-+ .byte 0x66
-+ .byte 0x15
-+ .long 0x19bf
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0xb
-+ .string "irq"
-+ .byte 0x66
-+ .byte 0x16
-+ .long 0x19bf
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .uleb128 0xa
-+ .long .LASF899
-+ .byte 0x66
-+ .byte 0x17
-+ .long 0x19bf
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x28
-+ .uleb128 0xa
-+ .long .LASF900
-+ .byte 0x66
-+ .byte 0x18
-+ .long 0x19bf
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x30
-+ .uleb128 0xa
-+ .long .LASF901
-+ .byte 0x66
-+ .byte 0x19
-+ .long 0x19bf
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x38
-+ .byte 0x0
-+ .uleb128 0x1a
-+ .long 0x45fe
-+ .long .LASF902
-+ .value 0x3c0
-+ .byte 0x66
-+ .byte 0x1c
-+ .uleb128 0xa
-+ .long .LASF903
-+ .byte 0x66
-+ .byte 0x1d
-+ .long 0x4557
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF904
-+ .byte 0x66
-+ .byte 0x1e
-+ .long 0x45fe
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x40
-+ .byte 0x0
-+ .uleb128 0x12
-+ .long 0x460e
-+ .long 0x77
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0xdf
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x46d1
-+ .long .LASF905
-+ .byte 0x4c
-+ .byte 0x41
-+ .byte 0x3e
-+ .uleb128 0xb
-+ .string "ino"
-+ .byte 0x41
-+ .byte 0x3f
-+ .long 0x189
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xb
-+ .string "dev"
-+ .byte 0x41
-+ .byte 0x40
-+ .long 0x19f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF626
-+ .byte 0x41
-+ .byte 0x41
-+ .long 0xea
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xa
-+ .long .LASF906
-+ .byte 0x41
-+ .byte 0x42
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xb
-+ .string "uid"
-+ .byte 0x41
-+ .byte 0x43
-+ .long 0x1dd
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0xb
-+ .string "gid"
-+ .byte 0x41
-+ .byte 0x44
-+ .long 0x1e8
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0xa
-+ .long .LASF907
-+ .byte 0x41
-+ .byte 0x45
-+ .long 0x19f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .uleb128 0xa
-+ .long .LASF328
-+ .byte 0x41
-+ .byte 0x46
-+ .long 0x1f3
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .uleb128 0xa
-+ .long .LASF908
-+ .byte 0x41
-+ .byte 0x47
-+ .long 0x173b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x28
-+ .uleb128 0xa
-+ .long .LASF909
-+ .byte 0x41
-+ .byte 0x48
-+ .long 0x173b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x30
-+ .uleb128 0xa
-+ .long .LASF910
-+ .byte 0x41
-+ .byte 0x49
-+ .long 0x173b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x38
-+ .uleb128 0xa
-+ .long .LASF911
-+ .byte 0x41
-+ .byte 0x4a
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x40
-+ .uleb128 0xa
-+ .long .LASF877
-+ .byte 0x41
-+ .byte 0x4b
-+ .long 0x162
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x44
-+ .byte 0x0
-+ .uleb128 0x12
-+ .long 0x46e1
-+ .long 0xbb
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x1f
-+ .byte 0x0
-+ .uleb128 0x1a
-+ .long 0x46fd
-+ .long .LASF912
-+ .value 0x1000
-+ .byte 0x67
-+ .byte 0x16
-+ .uleb128 0xb
-+ .string "gdt"
-+ .byte 0x67
-+ .byte 0x17
-+ .long 0x46fd
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .byte 0x0
-+ .uleb128 0x12
-+ .long 0x470d
-+ .long 0x942
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x1f
-+ .byte 0x0
-+ .uleb128 0x7
-+ .long .LASF913
-+ .byte 0x32
-+ .byte 0x13
-+ .long 0x141
-+ .uleb128 0x7
-+ .long .LASF914
-+ .byte 0x32
-+ .byte 0x14
-+ .long 0x12b
-+ .uleb128 0x7
-+ .long .LASF915
-+ .byte 0x32
-+ .byte 0x17
-+ .long 0x141
-+ .uleb128 0xf
-+ .long 0x478f
-+ .long .LASF916
-+ .byte 0x10
-+ .byte 0x32
-+ .byte 0xab
-+ .uleb128 0xa
-+ .long .LASF917
-+ .byte 0x32
-+ .byte 0xac
-+ .long 0x4723
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF918
-+ .byte 0x32
-+ .byte 0xad
-+ .long 0x470d
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF919
-+ .byte 0x32
-+ .byte 0xae
-+ .long 0x4723
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF920
-+ .byte 0x32
-+ .byte 0xaf
-+ .long 0x112
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xa
-+ .long .LASF921
-+ .byte 0x32
-+ .byte 0xb0
-+ .long 0x112
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xd
-+ .uleb128 0xa
-+ .long .LASF922
-+ .byte 0x32
-+ .byte 0xb1
-+ .long 0x4718
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xe
-+ .byte 0x0
-+ .uleb128 0x7
-+ .long .LASF923
-+ .byte 0x32
-+ .byte 0xb2
-+ .long 0x472e
-+ .uleb128 0xf
-+ .long 0x47d1
-+ .long .LASF924
-+ .byte 0xc
-+ .byte 0x26
-+ .byte 0x17
-+ .uleb128 0xa
-+ .long .LASF414
-+ .byte 0x26
-+ .byte 0x18
-+ .long 0x7f2
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF594
-+ .byte 0x26
-+ .byte 0x19
-+ .long 0x4af9
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF626
-+ .byte 0x26
-+ .byte 0x1a
-+ .long 0x1aa
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .byte 0x0
-+ .uleb128 0x1a
-+ .long 0x4af9
-+ .long .LASF925
-+ .value 0x1200
-+ .byte 0x28
-+ .byte 0x14
-+ .uleb128 0xa
-+ .long .LASF169
-+ .byte 0x29
-+ .byte 0xfb
-+ .long 0x4f37
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF509
-+ .byte 0x29
-+ .byte 0xfe
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0x16
-+ .long .LASF414
-+ .byte 0x29
-+ .value 0x101
-+ .long 0x4dea
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0x16
-+ .long .LASF926
-+ .byte 0x29
-+ .value 0x104
-+ .long 0x4ee5
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x48
-+ .uleb128 0x16
-+ .long .LASF927
-+ .byte 0x29
-+ .value 0x105
-+ .long 0x4fd9
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x90
-+ .uleb128 0x16
-+ .long .LASF928
-+ .byte 0x29
-+ .value 0x106
-+ .long 0x4e75
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x94
-+ .uleb128 0x16
-+ .long .LASF929
-+ .byte 0x29
-+ .value 0x107
-+ .long 0x7f2
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x98
-+ .uleb128 0x16
-+ .long .LASF930
-+ .byte 0x29
-+ .value 0x108
-+ .long 0x7f2
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x9c
-+ .uleb128 0x16
-+ .long .LASF931
-+ .byte 0x29
-+ .value 0x109
-+ .long 0x4b34
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xa0
-+ .uleb128 0x16
-+ .long .LASF932
-+ .byte 0x29
-+ .value 0x10c
-+ .long 0x4fdf
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xa4
-+ .uleb128 0x16
-+ .long .LASF933
-+ .byte 0x29
-+ .value 0x10d
-+ .long 0x77
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xa8
-+ .uleb128 0x16
-+ .long .LASF934
-+ .byte 0x29
-+ .value 0x10e
-+ .long 0x4fea
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xac
-+ .uleb128 0x16
-+ .long .LASF935
-+ .byte 0x29
-+ .value 0x111
-+ .long 0x4fdf
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xb0
-+ .uleb128 0x16
-+ .long .LASF936
-+ .byte 0x29
-+ .value 0x112
-+ .long 0x77
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xb4
-+ .uleb128 0x16
-+ .long .LASF937
-+ .byte 0x29
-+ .value 0x113
-+ .long 0x4fea
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xb8
-+ .uleb128 0x16
-+ .long .LASF938
-+ .byte 0x29
-+ .value 0x116
-+ .long 0x4fdf
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xbc
-+ .uleb128 0x16
-+ .long .LASF939
-+ .byte 0x29
-+ .value 0x117
-+ .long 0x77
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xc0
-+ .uleb128 0x16
-+ .long .LASF940
-+ .byte 0x29
-+ .value 0x118
-+ .long 0x4fea
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xc4
-+ .uleb128 0x16
-+ .long .LASF941
-+ .byte 0x29
-+ .value 0x11a
-+ .long 0x4fdf
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xc8
-+ .uleb128 0x16
-+ .long .LASF942
-+ .byte 0x29
-+ .value 0x11b
-+ .long 0x77
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xcc
-+ .uleb128 0x16
-+ .long .LASF943
-+ .byte 0x29
-+ .value 0x11c
-+ .long 0x4fea
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xd0
-+ .uleb128 0x16
-+ .long .LASF944
-+ .byte 0x29
-+ .value 0x11f
-+ .long 0x4fdf
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xd4
-+ .uleb128 0x16
-+ .long .LASF945
-+ .byte 0x29
-+ .value 0x120
-+ .long 0x77
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xd8
-+ .uleb128 0x16
-+ .long .LASF946
-+ .byte 0x29
-+ .value 0x121
-+ .long 0x4fea
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xdc
-+ .uleb128 0x16
-+ .long .LASF947
-+ .byte 0x29
-+ .value 0x124
-+ .long 0x77
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xe0
-+ .uleb128 0x16
-+ .long .LASF948
-+ .byte 0x29
-+ .value 0x125
-+ .long 0x501e
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xe4
-+ .uleb128 0x16
-+ .long .LASF949
-+ .byte 0x29
-+ .value 0x128
-+ .long 0x92e
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xe8
-+ .uleb128 0x16
-+ .long .LASF950
-+ .byte 0x29
-+ .value 0x12b
-+ .long 0x160b
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xec
-+ .uleb128 0x16
-+ .long .LASF951
-+ .byte 0x29
-+ .value 0x12e
-+ .long 0x160b
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xf0
-+ .uleb128 0x16
-+ .long .LASF952
-+ .byte 0x29
-+ .value 0x131
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xf4
-+ .uleb128 0x16
-+ .long .LASF953
-+ .byte 0x29
-+ .value 0x131
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xf8
-+ .uleb128 0x16
-+ .long .LASF954
-+ .byte 0x29
-+ .value 0x134
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xfc
-+ .uleb128 0x16
-+ .long .LASF955
-+ .byte 0x29
-+ .value 0x134
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x100
-+ .uleb128 0x16
-+ .long .LASF956
-+ .byte 0x29
-+ .value 0x137
-+ .long 0x160b
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x104
-+ .uleb128 0x16
-+ .long .LASF957
-+ .byte 0x29
-+ .value 0x13a
-+ .long 0x4db9
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x108
-+ .uleb128 0x16
-+ .long .LASF958
-+ .byte 0x29
-+ .value 0x13d
-+ .long 0x21
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x108
-+ .uleb128 0x16
-+ .long .LASF959
-+ .byte 0x29
-+ .value 0x13f
-+ .long 0x77
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x10c
-+ .uleb128 0x16
-+ .long .LASF960
-+ .byte 0x29
-+ .value 0x143
-+ .long 0x17bc
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x110
-+ .uleb128 0x16
-+ .long .LASF961
-+ .byte 0x29
-+ .value 0x144
-+ .long 0x5029
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x118
-+ .uleb128 0x16
-+ .long .LASF962
-+ .byte 0x29
-+ .value 0x145
-+ .long 0x77
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x11c
-+ .uleb128 0x17
-+ .string "ref"
-+ .byte 0x29
-+ .value 0x14a
-+ .long 0x502f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x180
-+ .uleb128 0x16
-+ .long .LASF963
-+ .byte 0x29
-+ .value 0x14d
-+ .long 0x17bc
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x1180
-+ .uleb128 0x16
-+ .long .LASF964
-+ .byte 0x29
-+ .value 0x150
-+ .long 0x15f9
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x1188
-+ .uleb128 0x16
-+ .long .LASF965
-+ .byte 0x29
-+ .value 0x153
-+ .long 0x93a
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x118c
-+ .uleb128 0x16
-+ .long .LASF966
-+ .byte 0x29
-+ .value 0x158
-+ .long 0x503f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x1190
-+ .uleb128 0x16
-+ .long .LASF967
-+ .byte 0x29
-+ .value 0x159
-+ .long 0x2f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x1194
-+ .uleb128 0x16
-+ .long .LASF968
-+ .byte 0x29
-+ .value 0x15a
-+ .long 0xb5
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x1198
-+ .uleb128 0x16
-+ .long .LASF969
-+ .byte 0x29
-+ .value 0x15d
-+ .long 0x5045
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x119c
-+ .uleb128 0x16
-+ .long .LASF970
-+ .byte 0x29
-+ .value 0x161
-+ .long 0x160b
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x11a0
-+ .uleb128 0x16
-+ .long .LASF971
-+ .byte 0x29
-+ .value 0x165
-+ .long 0xb5
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x11a4
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x47d1
-+ .uleb128 0xf
-+ .long 0x4b28
-+ .long .LASF972
-+ .byte 0x8
-+ .byte 0x26
-+ .byte 0x1d
-+ .uleb128 0xa
-+ .long .LASF414
-+ .byte 0x26
-+ .byte 0x1e
-+ .long 0x7f2
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF973
-+ .byte 0x26
-+ .byte 0x1f
-+ .long 0x4b28
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x4b2e
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x479a
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x4b3a
-+ .uleb128 0xf
-+ .long 0x4bc5
-+ .long .LASF974
-+ .byte 0x40
-+ .byte 0x26
-+ .byte 0x12
-+ .uleb128 0xa
-+ .long .LASF975
-+ .byte 0x2a
-+ .byte 0x33
-+ .long 0x7f2
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF414
-+ .byte 0x2a
-+ .byte 0x34
-+ .long 0x4c33
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF449
-+ .byte 0x2a
-+ .byte 0x35
-+ .long 0x22e4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0xa
-+ .long .LASF376
-+ .byte 0x2a
-+ .byte 0x36
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .uleb128 0xa
-+ .long .LASF205
-+ .byte 0x2a
-+ .byte 0x37
-+ .long 0x4b34
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x24
-+ .uleb128 0xa
-+ .long .LASF976
-+ .byte 0x2a
-+ .byte 0x38
-+ .long 0x4c96
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x28
-+ .uleb128 0xa
-+ .long .LASF977
-+ .byte 0x2a
-+ .byte 0x39
-+ .long 0x4cd3
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x2c
-+ .uleb128 0xa
-+ .long .LASF517
-+ .byte 0x2a
-+ .byte 0x3a
-+ .long 0x28ec
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x30
-+ .uleb128 0xa
-+ .long .LASF978
-+ .byte 0x2a
-+ .byte 0x3b
-+ .long 0x18ef
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x34
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x4bee
-+ .long .LASF979
-+ .byte 0x8
-+ .byte 0x26
-+ .byte 0x44
-+ .uleb128 0xa
-+ .long .LASF980
-+ .byte 0x26
-+ .byte 0x45
-+ .long 0x4c08
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF981
-+ .byte 0x26
-+ .byte 0x46
-+ .long 0x4c2d
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .byte 0x0
-+ .uleb128 0x11
-+ .long 0x4c08
-+ .byte 0x1
-+ .long 0x209
-+ .uleb128 0x6
-+ .long 0x4b34
-+ .uleb128 0x6
-+ .long 0x4b2e
-+ .uleb128 0x6
-+ .long 0xb5
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x4bee
-+ .uleb128 0x11
-+ .long 0x4c2d
-+ .byte 0x1
-+ .long 0x209
-+ .uleb128 0x6
-+ .long 0x4b34
-+ .uleb128 0x6
-+ .long 0x4b2e
-+ .uleb128 0x6
-+ .long 0x7f2
-+ .uleb128 0x6
-+ .long 0x1fe
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x4c0e
-+ .uleb128 0x12
-+ .long 0x4c43
-+ .long 0xbb
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x13
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x4c96
-+ .long .LASF976
-+ .byte 0x54
-+ .byte 0x2a
-+ .byte 0x38
-+ .uleb128 0xa
-+ .long .LASF977
-+ .byte 0x2a
-+ .byte 0x7f
-+ .long 0x4cd3
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF509
-+ .byte 0x2a
-+ .byte 0x80
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF982
-+ .byte 0x2a
-+ .byte 0x81
-+ .long 0x1680
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xa
-+ .long .LASF382
-+ .byte 0x2a
-+ .byte 0x82
-+ .long 0x4b3a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xa
-+ .long .LASF983
-+ .byte 0x2a
-+ .byte 0x83
-+ .long 0x4d93
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x50
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x4c43
-+ .uleb128 0xf
-+ .long 0x4cd3
-+ .long .LASF984
-+ .byte 0xc
-+ .byte 0x2a
-+ .byte 0x39
-+ .uleb128 0xa
-+ .long .LASF404
-+ .byte 0x2a
-+ .byte 0x60
-+ .long 0x4ce5
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF979
-+ .byte 0x2a
-+ .byte 0x61
-+ .long 0x4ceb
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF985
-+ .byte 0x2a
-+ .byte 0x62
-+ .long 0x4b28
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x4c9c
-+ .uleb128 0x5
-+ .long 0x4ce5
-+ .byte 0x1
-+ .uleb128 0x6
-+ .long 0x4b34
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x4cd9
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x4bc5
-+ .uleb128 0xf
-+ .long 0x4d28
-+ .long .LASF986
-+ .byte 0xc
-+ .byte 0x2a
-+ .byte 0x77
-+ .uleb128 0xa
-+ .long .LASF987
-+ .byte 0x2a
-+ .byte 0x78
-+ .long 0x4d3d
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF414
-+ .byte 0x2a
-+ .byte 0x79
-+ .long 0x4d58
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF988
-+ .byte 0x2a
-+ .byte 0x7b
-+ .long 0x4d8d
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .byte 0x0
-+ .uleb128 0x11
-+ .long 0x4d3d
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x4c96
-+ .uleb128 0x6
-+ .long 0x4b34
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x4d28
-+ .uleb128 0x11
-+ .long 0x4d58
-+ .byte 0x1
-+ .long 0x7f2
-+ .uleb128 0x6
-+ .long 0x4c96
-+ .uleb128 0x6
-+ .long 0x4b34
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x4d43
-+ .uleb128 0x11
-+ .long 0x4d87
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x4c96
-+ .uleb128 0x6
-+ .long 0x4b34
-+ .uleb128 0x6
-+ .long 0x4d87
-+ .uleb128 0x6
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0xb5
-+ .uleb128 0x6
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0xb5
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x4d5e
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x4cf1
-+ .uleb128 0x9
-+ .long 0x4dae
-+ .byte 0x4
-+ .byte 0x30
-+ .byte 0x9
-+ .uleb128 0xb
-+ .string "a"
-+ .byte 0x30
-+ .byte 0xa
-+ .long 0x16cf
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .byte 0x0
-+ .uleb128 0x7
-+ .long .LASF989
-+ .byte 0x30
-+ .byte 0xb
-+ .long 0x4d99
-+ .uleb128 0x2a
-+ .long .LASF990
-+ .byte 0x0
-+ .byte 0x2e
-+ .byte 0x6
-+ .uleb128 0xf
-+ .long 0x4dea
-+ .long .LASF991
-+ .byte 0x8
-+ .byte 0x29
-+ .byte 0x22
-+ .uleb128 0xa
-+ .long .LASF992
-+ .byte 0x29
-+ .byte 0x23
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF414
-+ .byte 0x29
-+ .byte 0x24
-+ .long 0x7f2
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .byte 0x0
-+ .uleb128 0x12
-+ .long 0x4dfa
-+ .long 0xbb
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x3b
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x4e5b
-+ .long .LASF993
-+ .byte 0x20
-+ .byte 0x29
-+ .byte 0x2f
-+ .uleb128 0xa
-+ .long .LASF994
-+ .byte 0x29
-+ .byte 0x30
-+ .long 0x479a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF980
-+ .byte 0x29
-+ .byte 0x31
-+ .long 0x4e7b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xa
-+ .long .LASF981
-+ .byte 0x29
-+ .byte 0x33
-+ .long 0x4ea0
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xa
-+ .long .LASF995
-+ .byte 0x29
-+ .byte 0x34
-+ .long 0x4eb7
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0xa
-+ .long .LASF996
-+ .byte 0x29
-+ .byte 0x35
-+ .long 0x4ecd
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0xa
-+ .long .LASF997
-+ .byte 0x29
-+ .byte 0x36
-+ .long 0x4edf
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .byte 0x0
-+ .uleb128 0x11
-+ .long 0x4e75
-+ .byte 0x1
-+ .long 0x209
-+ .uleb128 0x6
-+ .long 0x4e75
-+ .uleb128 0x6
-+ .long 0x4af9
-+ .uleb128 0x6
-+ .long 0xb5
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x4dfa
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x4e5b
-+ .uleb128 0x11
-+ .long 0x4ea0
-+ .byte 0x1
-+ .long 0x209
-+ .uleb128 0x6
-+ .long 0x4e75
-+ .uleb128 0x6
-+ .long 0x4af9
-+ .uleb128 0x6
-+ .long 0x7f2
-+ .uleb128 0x6
-+ .long 0x1fe
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x4e81
-+ .uleb128 0x5
-+ .long 0x4eb7
-+ .byte 0x1
-+ .uleb128 0x6
-+ .long 0x4af9
-+ .uleb128 0x6
-+ .long 0x7f2
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x4ea6
-+ .uleb128 0x11
-+ .long 0x4ecd
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x4af9
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x4ebd
-+ .uleb128 0x5
-+ .long 0x4edf
-+ .byte 0x1
-+ .uleb128 0x6
-+ .long 0x4af9
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x4ed3
-+ .uleb128 0xf
-+ .long 0x4f1c
-+ .long .LASF998
-+ .byte 0x48
-+ .byte 0x29
-+ .byte 0x3a
-+ .uleb128 0xa
-+ .long .LASF382
-+ .byte 0x29
-+ .byte 0x3b
-+ .long 0x4b3a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xb
-+ .string "mod"
-+ .byte 0x29
-+ .byte 0x3c
-+ .long 0x4af9
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x40
-+ .uleb128 0xa
-+ .long .LASF999
-+ .byte 0x29
-+ .byte 0x3d
-+ .long 0x4b34
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x44
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x4f37
-+ .long .LASF1000
-+ .byte 0x80
-+ .byte 0x29
-+ .byte 0xdd
-+ .uleb128 0xa
-+ .long .LASF322
-+ .byte 0x29
-+ .byte 0xde
-+ .long 0x4dae
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .byte 0x0
-+ .uleb128 0x27
-+ .long 0x4f56
-+ .long .LASF1001
-+ .byte 0x4
-+ .byte 0x29
-+ .byte 0xe2
-+ .uleb128 0x28
-+ .long .LASF1002
-+ .sleb128 0
-+ .uleb128 0x28
-+ .long .LASF1003
-+ .sleb128 1
-+ .uleb128 0x28
-+ .long .LASF1004
-+ .sleb128 2
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x4f8d
-+ .long .LASF1005
-+ .byte 0x28
-+ .byte 0x29
-+ .byte 0xea
-+ .uleb128 0xa
-+ .long .LASF1006
-+ .byte 0x29
-+ .byte 0xeb
-+ .long 0x4dfa
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF414
-+ .byte 0x29
-+ .byte 0xec
-+ .long 0xb5
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .uleb128 0xa
-+ .long .LASF1007
-+ .byte 0x29
-+ .byte 0xed
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x24
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x4fc4
-+ .long .LASF1008
-+ .byte 0xc
-+ .byte 0x29
-+ .byte 0xf1
-+ .uleb128 0xb
-+ .string "grp"
-+ .byte 0x29
-+ .byte 0xf2
-+ .long 0x4aff
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF1009
-+ .byte 0x29
-+ .byte 0xf3
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF973
-+ .byte 0x29
-+ .byte 0xf4
-+ .long 0x4fc4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .byte 0x0
-+ .uleb128 0x12
-+ .long 0x4fd3
-+ .long 0x4f56
-+ .uleb128 0x23
-+ .long 0x28
-+ .byte 0x0
-+ .uleb128 0x21
-+ .long .LASF1010
-+ .byte 0x1
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x4fd3
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x4fe5
-+ .uleb128 0x14
-+ .long 0x4dc1
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x4ff0
-+ .uleb128 0x14
-+ .long 0x2f
-+ .uleb128 0xf
-+ .long 0x501e
-+ .long .LASF1011
-+ .byte 0x8
-+ .byte 0x29
-+ .byte 0x45
-+ .uleb128 0xa
-+ .long .LASF1012
-+ .byte 0x2d
-+ .byte 0x64
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF1013
-+ .byte 0x2d
-+ .byte 0x64
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x5024
-+ .uleb128 0x14
-+ .long 0x4ff5
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7ad
-+ .uleb128 0x12
-+ .long 0x503f
-+ .long 0x4f1c
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x1f
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x478f
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x4f8d
-+ .uleb128 0x7
-+ .long .LASF1014
-+ .byte 0x6b
-+ .byte 0x13
-+ .long 0x21
-+ .uleb128 0x7
-+ .long .LASF1015
-+ .byte 0x6a
-+ .byte 0x1d
-+ .long 0x5061
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x5067
-+ .uleb128 0x5
-+ .long 0x5078
-+ .byte 0x1
-+ .uleb128 0x6
-+ .long 0x77
-+ .uleb128 0x6
-+ .long 0x5078
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x507e
-+ .uleb128 0xf
-+ .long 0x5179
-+ .long .LASF1016
-+ .byte 0x80
-+ .byte 0x6a
-+ .byte 0x1b
-+ .uleb128 0xa
-+ .long .LASF1017
-+ .byte 0x6a
-+ .byte 0x98
-+ .long 0x5056
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF1018
-+ .byte 0x6a
-+ .byte 0x99
-+ .long 0x52ae
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF1019
-+ .byte 0x6a
-+ .byte 0x9a
-+ .long 0x52ba
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF1020
-+ .byte 0x6a
-+ .byte 0x9b
-+ .long 0x160b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xa
-+ .long .LASF1021
-+ .byte 0x6a
-+ .byte 0x9c
-+ .long 0x160b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xa
-+ .long .LASF840
-+ .byte 0x6a
-+ .byte 0x9d
-+ .long 0x533d
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0xa
-+ .long .LASF126
-+ .byte 0x6a
-+ .byte 0x9e
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0xa
-+ .long .LASF1022
-+ .byte 0x6a
-+ .byte 0xa0
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .uleb128 0xa
-+ .long .LASF1023
-+ .byte 0x6a
-+ .byte 0xa1
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .uleb128 0xa
-+ .long .LASF1024
-+ .byte 0x6a
-+ .byte 0xa2
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x24
-+ .uleb128 0xa
-+ .long .LASF1025
-+ .byte 0x6a
-+ .byte 0xa3
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x28
-+ .uleb128 0xa
-+ .long .LASF285
-+ .byte 0x6a
-+ .byte 0xa4
-+ .long 0x1680
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x2c
-+ .uleb128 0xa
-+ .long .LASF1026
-+ .byte 0x6a
-+ .byte 0xa6
-+ .long 0x923
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x30
-+ .uleb128 0xb
-+ .string "cpu"
-+ .byte 0x6a
-+ .byte 0xa7
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x34
-+ .uleb128 0xa
-+ .long .LASF1027
-+ .byte 0x6a
-+ .byte 0xaa
-+ .long 0x923
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x38
-+ .uleb128 0xb
-+ .string "dir"
-+ .byte 0x6a
-+ .byte 0xad
-+ .long 0x5349
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x3c
-+ .uleb128 0xa
-+ .long .LASF414
-+ .byte 0x6a
-+ .byte 0xaf
-+ .long 0x7f2
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x40
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x5266
-+ .long .LASF1028
-+ .byte 0x40
-+ .byte 0x6a
-+ .byte 0x62
-+ .uleb128 0xa
-+ .long .LASF414
-+ .byte 0x6a
-+ .byte 0x63
-+ .long 0x7f2
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF1029
-+ .byte 0x6a
-+ .byte 0x64
-+ .long 0x5276
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF1030
-+ .byte 0x6a
-+ .byte 0x65
-+ .long 0x1efe
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF1031
-+ .byte 0x6a
-+ .byte 0x66
-+ .long 0x1efe
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xa
-+ .long .LASF1032
-+ .byte 0x6a
-+ .byte 0x67
-+ .long 0x1efe
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xb
-+ .string "ack"
-+ .byte 0x6a
-+ .byte 0x69
-+ .long 0x1efe
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0xa
-+ .long .LASF364
-+ .byte 0x6a
-+ .byte 0x6a
-+ .long 0x1efe
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0xa
-+ .long .LASF1033
-+ .byte 0x6a
-+ .byte 0x6b
-+ .long 0x1efe
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .uleb128 0xa
-+ .long .LASF1034
-+ .byte 0x6a
-+ .byte 0x6c
-+ .long 0x1efe
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .uleb128 0xb
-+ .string "eoi"
-+ .byte 0x6a
-+ .byte 0x6d
-+ .long 0x1efe
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x24
-+ .uleb128 0xb
-+ .string "end"
-+ .byte 0x6a
-+ .byte 0x6f
-+ .long 0x1efe
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x28
-+ .uleb128 0xa
-+ .long .LASF1035
-+ .byte 0x6a
-+ .byte 0x70
-+ .long 0x528d
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x2c
-+ .uleb128 0xa
-+ .long .LASF1036
-+ .byte 0x6a
-+ .byte 0x71
-+ .long 0x1f14
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x30
-+ .uleb128 0xa
-+ .long .LASF1037
-+ .byte 0x6a
-+ .byte 0x72
-+ .long 0x52a8
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x34
-+ .uleb128 0xa
-+ .long .LASF1038
-+ .byte 0x6a
-+ .byte 0x73
-+ .long 0x52a8
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x38
-+ .uleb128 0xa
-+ .long .LASF1039
-+ .byte 0x6a
-+ .byte 0x7d
-+ .long 0x7f2
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x3c
-+ .byte 0x0
-+ .uleb128 0x11
-+ .long 0x5276
-+ .byte 0x1
-+ .long 0x77
-+ .uleb128 0x6
-+ .long 0x77
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x5266
-+ .uleb128 0x5
-+ .long 0x528d
-+ .byte 0x1
-+ .uleb128 0x6
-+ .long 0x77
-+ .uleb128 0x6
-+ .long 0x923
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x527c
-+ .uleb128 0x11
-+ .long 0x52a8
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x77
-+ .uleb128 0x6
-+ .long 0x77
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x5293
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x5179
-+ .uleb128 0x21
-+ .long .LASF1019
-+ .byte 0x1
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x52b4
-+ .uleb128 0xf
-+ .long 0x533d
-+ .long .LASF1040
-+ .byte 0x20
-+ .byte 0x6a
-+ .byte 0x9d
-+ .uleb128 0xa
-+ .long .LASF1041
-+ .byte 0x56
-+ .byte 0x55
-+ .long 0x5c83
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF53
-+ .byte 0x56
-+ .byte 0x56
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF364
-+ .byte 0x56
-+ .byte 0x57
-+ .long 0x923
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF414
-+ .byte 0x56
-+ .byte 0x58
-+ .long 0x7f2
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xa
-+ .long .LASF1042
-+ .byte 0x56
-+ .byte 0x59
-+ .long 0x160b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xa
-+ .long .LASF307
-+ .byte 0x56
-+ .byte 0x5a
-+ .long 0x533d
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0xb
-+ .string "irq"
-+ .byte 0x56
-+ .byte 0x5b
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0xb
-+ .string "dir"
-+ .byte 0x56
-+ .byte 0x5c
-+ .long 0x5349
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x52c0
-+ .uleb128 0x21
-+ .long .LASF1043
-+ .byte 0x1
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x5343
-+ .uleb128 0xf
-+ .long 0x53be
-+ .long .LASF1044
-+ .byte 0x24
-+ .byte 0x6d
-+ .byte 0x11
-+ .uleb128 0xa
-+ .long .LASF1045
-+ .byte 0x6d
-+ .byte 0x12
-+ .long 0x24b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xb
-+ .string "end"
-+ .byte 0x6d
-+ .byte 0x13
-+ .long 0x24b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF414
-+ .byte 0x6d
-+ .byte 0x14
-+ .long 0x7f2
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xa
-+ .long .LASF53
-+ .byte 0x6d
-+ .byte 0x15
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0xa
-+ .long .LASF205
-+ .byte 0x6d
-+ .byte 0x16
-+ .long 0x53be
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0xa
-+ .long .LASF207
-+ .byte 0x6d
-+ .byte 0x16
-+ .long 0x53be
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .uleb128 0xa
-+ .long .LASF1046
-+ .byte 0x6d
-+ .byte 0x16
-+ .long 0x53be
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x534f
-+ .uleb128 0xf
-+ .long 0x5409
-+ .long .LASF1047
-+ .byte 0x14
-+ .byte 0x5e
-+ .byte 0x15
-+ .uleb128 0xa
-+ .long .LASF1048
-+ .byte 0x5e
-+ .byte 0x16
-+ .long 0x1680
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF1049
-+ .byte 0x5e
-+ .byte 0x17
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xb
-+ .string "get"
-+ .byte 0x5e
-+ .byte 0x18
-+ .long 0x5460
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xb
-+ .string "put"
-+ .byte 0x5e
-+ .byte 0x19
-+ .long 0x5460
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .byte 0x0
-+ .uleb128 0x5
-+ .long 0x5415
-+ .byte 0x1
-+ .uleb128 0x6
-+ .long 0x5415
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x541b
-+ .uleb128 0xf
-+ .long 0x5460
-+ .long .LASF1050
-+ .byte 0x20
-+ .byte 0x5e
-+ .byte 0x14
-+ .uleb128 0xa
-+ .long .LASF1051
-+ .byte 0x5e
-+ .byte 0x21
-+ .long 0x5466
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF1052
-+ .byte 0x5e
-+ .byte 0x22
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF1053
-+ .byte 0x5e
-+ .byte 0x23
-+ .long 0x22e4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xa
-+ .long .LASF1054
-+ .byte 0x5e
-+ .byte 0x24
-+ .long 0x28fe
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x5409
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x53c4
-+ .uleb128 0xf
-+ .long 0x5487
-+ .long .LASF1055
-+ .byte 0x4
-+ .byte 0x5f
-+ .byte 0x9
-+ .uleb128 0xa
-+ .long .LASF1056
-+ .byte 0x5f
-+ .byte 0xb
-+ .long 0x160b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x54be
-+ .long .LASF1057
-+ .byte 0x14
-+ .byte 0x5d
-+ .byte 0x27
-+ .uleb128 0xa
-+ .long .LASF994
-+ .byte 0x5d
-+ .byte 0x28
-+ .long 0x479a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF980
-+ .byte 0x5d
-+ .byte 0x29
-+ .long 0x563f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xa
-+ .long .LASF981
-+ .byte 0x5d
-+ .byte 0x2a
-+ .long 0x565f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .byte 0x0
-+ .uleb128 0x11
-+ .long 0x54d3
-+ .byte 0x1
-+ .long 0x209
-+ .uleb128 0x6
-+ .long 0x54d3
-+ .uleb128 0x6
-+ .long 0xb5
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x54d9
-+ .uleb128 0x1a
-+ .long 0x563f
-+ .long .LASF1058
-+ .value 0x19c
-+ .byte 0x5d
-+ .byte 0x25
-+ .uleb128 0xa
-+ .long .LASF414
-+ .byte 0x5d
-+ .byte 0x35
-+ .long 0x7f2
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF594
-+ .byte 0x5d
-+ .byte 0x36
-+ .long 0x4af9
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF1059
-+ .byte 0x5d
-+ .byte 0x38
-+ .long 0x4c43
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF1060
-+ .byte 0x5d
-+ .byte 0x39
-+ .long 0x4c43
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x5c
-+ .uleb128 0xa
-+ .long .LASF1061
-+ .byte 0x5d
-+ .byte 0x3a
-+ .long 0x4c43
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xb0
-+ .uleb128 0xa
-+ .long .LASF1062
-+ .byte 0x5d
-+ .byte 0x3b
-+ .long 0x53c4
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x104
-+ .uleb128 0xa
-+ .long .LASF1063
-+ .byte 0x5d
-+ .byte 0x3c
-+ .long 0x53c4
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x118
-+ .uleb128 0xa
-+ .long .LASF1064
-+ .byte 0x5d
-+ .byte 0x3e
-+ .long 0x2e3c
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x12c
-+ .uleb128 0xa
-+ .long .LASF1065
-+ .byte 0x5d
-+ .byte 0x40
-+ .long 0x5665
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x140
-+ .uleb128 0xa
-+ .long .LASF1066
-+ .byte 0x5d
-+ .byte 0x41
-+ .long 0x56a5
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x144
-+ .uleb128 0xa
-+ .long .LASF1067
-+ .byte 0x5d
-+ .byte 0x42
-+ .long 0x56e2
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x148
-+ .uleb128 0xa
-+ .long .LASF1068
-+ .byte 0x5d
-+ .byte 0x43
-+ .long 0x5487
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x14c
-+ .uleb128 0xa
-+ .long .LASF1069
-+ .byte 0x5d
-+ .byte 0x44
-+ .long 0x5487
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x160
-+ .uleb128 0xa
-+ .long .LASF1070
-+ .byte 0x5d
-+ .byte 0x46
-+ .long 0x57ce
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x174
-+ .uleb128 0xa
-+ .long .LASF988
-+ .byte 0x5d
-+ .byte 0x48
-+ .long 0x57f8
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x178
-+ .uleb128 0xa
-+ .long .LASF415
-+ .byte 0x5d
-+ .byte 0x49
-+ .long 0x580e
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x17c
-+ .uleb128 0xa
-+ .long .LASF1071
-+ .byte 0x5d
-+ .byte 0x4a
-+ .long 0x580e
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x180
-+ .uleb128 0xa
-+ .long .LASF1030
-+ .byte 0x5d
-+ .byte 0x4b
-+ .long 0x5820
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x184
-+ .uleb128 0xa
-+ .long .LASF1072
-+ .byte 0x5d
-+ .byte 0x4d
-+ .long 0x583b
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x188
-+ .uleb128 0xa
-+ .long .LASF1073
-+ .byte 0x5d
-+ .byte 0x4e
-+ .long 0x583b
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x18c
-+ .uleb128 0xa
-+ .long .LASF1074
-+ .byte 0x5d
-+ .byte 0x4f
-+ .long 0x580e
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x190
-+ .uleb128 0xa
-+ .long .LASF1075
-+ .byte 0x5d
-+ .byte 0x50
-+ .long 0x580e
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x194
-+ .uleb128 0x2f
-+ .long .LASF1076
-+ .byte 0x5d
-+ .byte 0x52
-+ .long 0x77
-+ .byte 0x4
-+ .byte 0x1
-+ .byte 0x1f
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x198
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x54be
-+ .uleb128 0x11
-+ .long 0x565f
-+ .byte 0x1
-+ .long 0x209
-+ .uleb128 0x6
-+ .long 0x54d3
-+ .uleb128 0x6
-+ .long 0x7f2
-+ .uleb128 0x6
-+ .long 0x1fe
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x5645
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x5487
-+ .uleb128 0xf
-+ .long 0x56a5
-+ .long .LASF1077
-+ .byte 0x14
-+ .byte 0x5d
-+ .byte 0x41
-+ .uleb128 0x16
-+ .long .LASF994
-+ .byte 0x5d
-+ .value 0x160
-+ .long 0x479a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x16
-+ .long .LASF980
-+ .byte 0x5d
-+ .value 0x162
-+ .long 0x5c40
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0x16
-+ .long .LASF981
-+ .byte 0x5d
-+ .value 0x164
-+ .long 0x5c65
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x566b
-+ .uleb128 0xf
-+ .long 0x56e2
-+ .long .LASF1078
-+ .byte 0x14
-+ .byte 0x5d
-+ .byte 0x42
-+ .uleb128 0xa
-+ .long .LASF994
-+ .byte 0x5d
-+ .byte 0x9b
-+ .long 0x479a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF980
-+ .byte 0x5d
-+ .byte 0x9c
-+ .long 0x585c
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xa
-+ .long .LASF981
-+ .byte 0x5d
-+ .byte 0x9d
-+ .long 0x587c
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x56ab
-+ .uleb128 0x11
-+ .long 0x56fd
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x1e7d
-+ .uleb128 0x6
-+ .long 0x56fd
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x5703
-+ .uleb128 0x15
-+ .long 0x57ce
-+ .long .LASF1079
-+ .byte 0x9c
-+ .byte 0x29
-+ .value 0x23e
-+ .uleb128 0xa
-+ .long .LASF414
-+ .byte 0x5d
-+ .byte 0x7d
-+ .long 0x7f2
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xb
-+ .string "bus"
-+ .byte 0x5d
-+ .byte 0x7e
-+ .long 0x54d3
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF382
-+ .byte 0x5d
-+ .byte 0x80
-+ .long 0x4b3a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF1062
-+ .byte 0x5d
-+ .byte 0x81
-+ .long 0x53c4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x48
-+ .uleb128 0xa
-+ .long .LASF381
-+ .byte 0x5d
-+ .byte 0x82
-+ .long 0x541b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x5c
-+ .uleb128 0xa
-+ .long .LASF594
-+ .byte 0x5d
-+ .byte 0x84
-+ .long 0x4af9
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x7c
-+ .uleb128 0xa
-+ .long .LASF1080
-+ .byte 0x5d
-+ .byte 0x85
-+ .long 0x7f2
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x80
-+ .uleb128 0xa
-+ .long .LASF926
-+ .byte 0x5d
-+ .byte 0x86
-+ .long 0x5841
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x84
-+ .uleb128 0xa
-+ .long .LASF415
-+ .byte 0x5d
-+ .byte 0x88
-+ .long 0x580e
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x88
-+ .uleb128 0xa
-+ .long .LASF1071
-+ .byte 0x5d
-+ .byte 0x89
-+ .long 0x580e
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x8c
-+ .uleb128 0xa
-+ .long .LASF1030
-+ .byte 0x5d
-+ .byte 0x8a
-+ .long 0x5820
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x90
-+ .uleb128 0xa
-+ .long .LASF1072
-+ .byte 0x5d
-+ .byte 0x8b
-+ .long 0x583b
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x94
-+ .uleb128 0xa
-+ .long .LASF1075
-+ .byte 0x5d
-+ .byte 0x8c
-+ .long 0x580e
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x98
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x56e8
-+ .uleb128 0x11
-+ .long 0x57f8
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x1e7d
-+ .uleb128 0x6
-+ .long 0x4d87
-+ .uleb128 0x6
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0xb5
-+ .uleb128 0x6
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x57d4
-+ .uleb128 0x11
-+ .long 0x580e
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x1e7d
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x57fe
-+ .uleb128 0x5
-+ .long 0x5820
-+ .byte 0x1
-+ .uleb128 0x6
-+ .long 0x1e7d
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x5814
-+ .uleb128 0x11
-+ .long 0x583b
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x1e7d
-+ .uleb128 0x6
-+ .long 0x1c07
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x5826
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x4ee5
-+ .uleb128 0x11
-+ .long 0x585c
-+ .byte 0x1
-+ .long 0x209
-+ .uleb128 0x6
-+ .long 0x56fd
-+ .uleb128 0x6
-+ .long 0xb5
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x5847
-+ .uleb128 0x11
-+ .long 0x587c
-+ .byte 0x1
-+ .long 0x209
-+ .uleb128 0x6
-+ .long 0x56fd
-+ .uleb128 0x6
-+ .long 0x7f2
-+ .uleb128 0x6
-+ .long 0x1fe
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x5862
-+ .uleb128 0x1a
-+ .long 0x5997
-+ .long .LASF401
-+ .value 0x104
-+ .byte 0x5d
-+ .byte 0x23
-+ .uleb128 0xa
-+ .long .LASF414
-+ .byte 0x5d
-+ .byte 0xb2
-+ .long 0x7f2
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF594
-+ .byte 0x5d
-+ .byte 0xb3
-+ .long 0x4af9
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF1059
-+ .byte 0x5d
-+ .byte 0xb5
-+ .long 0x4c43
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF206
-+ .byte 0x5d
-+ .byte 0xb6
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x5c
-+ .uleb128 0xa
-+ .long .LASF1061
-+ .byte 0x5d
-+ .byte 0xb7
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x64
-+ .uleb128 0xa
-+ .long .LASF1081
-+ .byte 0x5d
-+ .byte 0xb8
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x6c
-+ .uleb128 0xa
-+ .long .LASF1082
-+ .byte 0x5d
-+ .byte 0xb9
-+ .long 0x4c43
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x74
-+ .uleb128 0xb
-+ .string "sem"
-+ .byte 0x5d
-+ .byte 0xba
-+ .long 0x1931
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xc8
-+ .uleb128 0xa
-+ .long .LASF1083
-+ .byte 0x5d
-+ .byte 0xbc
-+ .long 0x59ce
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xdc
-+ .uleb128 0xa
-+ .long .LASF1084
-+ .byte 0x5d
-+ .byte 0xbd
-+ .long 0x5a0b
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xe0
-+ .uleb128 0xa
-+ .long .LASF1066
-+ .byte 0x5d
-+ .byte 0xbe
-+ .long 0x56a5
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xe4
-+ .uleb128 0xa
-+ .long .LASF988
-+ .byte 0x5d
-+ .byte 0xc1
-+ .long 0x5b0c
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xe8
-+ .uleb128 0xa
-+ .long .LASF1085
-+ .byte 0x5d
-+ .byte 0xc3
-+ .long 0x57f8
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xec
-+ .uleb128 0xa
-+ .long .LASF404
-+ .byte 0x5d
-+ .byte 0xc5
-+ .long 0x5b1e
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xf0
-+ .uleb128 0xa
-+ .long .LASF1086
-+ .byte 0x5d
-+ .byte 0xc6
-+ .long 0x5b36
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xf4
-+ .uleb128 0xa
-+ .long .LASF1087
-+ .byte 0x5d
-+ .byte 0xc7
-+ .long 0x5820
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xf8
-+ .uleb128 0xa
-+ .long .LASF1072
-+ .byte 0x5d
-+ .byte 0xc9
-+ .long 0x583b
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xfc
-+ .uleb128 0xa
-+ .long .LASF1075
-+ .byte 0x5d
-+ .byte 0xca
-+ .long 0x580e
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x100
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x59ce
-+ .long .LASF1088
-+ .byte 0x14
-+ .byte 0x5d
-+ .byte 0xbc
-+ .uleb128 0xa
-+ .long .LASF994
-+ .byte 0x5d
-+ .byte 0xd2
-+ .long 0x479a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF980
-+ .byte 0x5d
-+ .byte 0xd3
-+ .long 0x5b51
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xa
-+ .long .LASF981
-+ .byte 0x5d
-+ .byte 0xd4
-+ .long 0x5b71
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x5997
-+ .uleb128 0xf
-+ .long 0x5a0b
-+ .long .LASF1089
-+ .byte 0x14
-+ .byte 0x5d
-+ .byte 0xbd
-+ .uleb128 0xa
-+ .long .LASF994
-+ .byte 0x5d
-+ .byte 0xdf
-+ .long 0x479a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF980
-+ .byte 0x5d
-+ .byte 0xe0
-+ .long 0x5b8c
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xa
-+ .long .LASF981
-+ .byte 0x5d
-+ .byte 0xe1
-+ .long 0x5bac
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x59d4
-+ .uleb128 0x11
-+ .long 0x5a35
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x5a35
-+ .uleb128 0x6
-+ .long 0x4d87
-+ .uleb128 0x6
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0xb5
-+ .uleb128 0x6
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x5a3b
-+ .uleb128 0xf
-+ .long 0x5b0c
-+ .long .LASF1090
-+ .byte 0x94
-+ .byte 0x5d
-+ .byte 0x24
-+ .uleb128 0x16
-+ .long .LASF400
-+ .byte 0x5d
-+ .value 0x105
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x16
-+ .long .LASF382
-+ .byte 0x5d
-+ .value 0x107
-+ .long 0x4b3a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0x16
-+ .long .LASF401
-+ .byte 0x5d
-+ .value 0x108
-+ .long 0x5b30
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x48
-+ .uleb128 0x16
-+ .long .LASF402
-+ .byte 0x5d
-+ .value 0x109
-+ .long 0x19f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4c
-+ .uleb128 0x16
-+ .long .LASF388
-+ .byte 0x5d
-+ .value 0x10a
-+ .long 0x5a0b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x50
-+ .uleb128 0x16
-+ .long .LASF387
-+ .byte 0x5d
-+ .value 0x10b
-+ .long 0x59d4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x54
-+ .uleb128 0x17
-+ .string "dev"
-+ .byte 0x5d
-+ .value 0x10c
-+ .long 0x1e7d
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x68
-+ .uleb128 0x16
-+ .long .LASF1091
-+ .byte 0x5d
-+ .value 0x10d
-+ .long 0x160b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x6c
-+ .uleb128 0x16
-+ .long .LASF205
-+ .byte 0x5d
-+ .value 0x10e
-+ .long 0x5a35
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x70
-+ .uleb128 0x16
-+ .long .LASF403
-+ .byte 0x5d
-+ .value 0x10f
-+ .long 0x5bb2
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x74
-+ .uleb128 0x16
-+ .long .LASF404
-+ .byte 0x5d
-+ .value 0x111
-+ .long 0x5b1e
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x78
-+ .uleb128 0x16
-+ .long .LASF988
-+ .byte 0x5d
-+ .value 0x113
-+ .long 0x5b0c
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x7c
-+ .uleb128 0x16
-+ .long .LASF1092
-+ .byte 0x5d
-+ .value 0x114
-+ .long 0x4c33
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x80
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x5a11
-+ .uleb128 0x5
-+ .long 0x5b1e
-+ .byte 0x1
-+ .uleb128 0x6
-+ .long 0x5a35
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x5b12
-+ .uleb128 0x5
-+ .long 0x5b30
-+ .byte 0x1
-+ .uleb128 0x6
-+ .long 0x5b30
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x5882
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x5b24
-+ .uleb128 0x11
-+ .long 0x5b51
-+ .byte 0x1
-+ .long 0x209
-+ .uleb128 0x6
-+ .long 0x5b30
-+ .uleb128 0x6
-+ .long 0xb5
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x5b3c
-+ .uleb128 0x11
-+ .long 0x5b71
-+ .byte 0x1
-+ .long 0x209
-+ .uleb128 0x6
-+ .long 0x5b30
-+ .uleb128 0x6
-+ .long 0x7f2
-+ .uleb128 0x6
-+ .long 0x1fe
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x5b57
-+ .uleb128 0x11
-+ .long 0x5b8c
-+ .byte 0x1
-+ .long 0x209
-+ .uleb128 0x6
-+ .long 0x5a35
-+ .uleb128 0x6
-+ .long 0xb5
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x5b77
-+ .uleb128 0x11
-+ .long 0x5bac
-+ .byte 0x1
-+ .long 0x209
-+ .uleb128 0x6
-+ .long 0x5a35
-+ .uleb128 0x6
-+ .long 0x7f2
-+ .uleb128 0x6
-+ .long 0x1fe
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x5b92
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x5bb8
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x4aff
-+ .uleb128 0x15
-+ .long 0x5c26
-+ .long .LASF1093
-+ .byte 0x18
-+ .byte 0x5d
-+ .value 0x154
-+ .uleb128 0x16
-+ .long .LASF414
-+ .byte 0x5d
-+ .value 0x155
-+ .long 0x7f2
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x16
-+ .long .LASF403
-+ .byte 0x5d
-+ .value 0x156
-+ .long 0x5bb2
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0x16
-+ .long .LASF988
-+ .byte 0x5d
-+ .value 0x158
-+ .long 0x57f8
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0x16
-+ .long .LASF404
-+ .byte 0x5d
-+ .value 0x159
-+ .long 0x5820
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0x16
-+ .long .LASF1072
-+ .byte 0x5d
-+ .value 0x15a
-+ .long 0x583b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0x16
-+ .long .LASF1075
-+ .byte 0x5d
-+ .value 0x15b
-+ .long 0x580e
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .byte 0x0
-+ .uleb128 0x11
-+ .long 0x5c40
-+ .byte 0x1
-+ .long 0x209
-+ .uleb128 0x6
-+ .long 0x1e7d
-+ .uleb128 0x6
-+ .long 0x56a5
-+ .uleb128 0x6
-+ .long 0xb5
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x5c26
-+ .uleb128 0x11
-+ .long 0x5c65
-+ .byte 0x1
-+ .long 0x209
-+ .uleb128 0x6
-+ .long 0x1e7d
-+ .uleb128 0x6
-+ .long 0x56a5
-+ .uleb128 0x6
-+ .long 0x7f2
-+ .uleb128 0x6
-+ .long 0x1fe
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x5c46
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x5bbe
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x189
-+ .uleb128 0x21
-+ .long .LASF1094
-+ .byte 0x1
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x5c77
-+ .uleb128 0x7
-+ .long .LASF1095
-+ .byte 0x56
-+ .byte 0x52
-+ .long 0x5c8e
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x5c94
-+ .uleb128 0x11
-+ .long 0x5ca9
-+ .byte 0x1
-+ .long 0x504b
-+ .uleb128 0x6
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x160b
-+ .byte 0x0
-+ .uleb128 0x15
-+ .long 0x5cd5
-+ .long .LASF1096
-+ .byte 0x8
-+ .byte 0x56
-+ .value 0x117
-+ .uleb128 0x16
-+ .long .LASF840
-+ .byte 0x56
-+ .value 0x118
-+ .long 0x5ce7
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x16
-+ .long .LASF734
-+ .byte 0x56
-+ .value 0x119
-+ .long 0x160b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .byte 0x0
-+ .uleb128 0x5
-+ .long 0x5ce1
-+ .byte 0x1
-+ .uleb128 0x6
-+ .long 0x5ce1
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x5ca9
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x5cd5
-+ .uleb128 0xf
-+ .long 0x5d24
-+ .long .LASF1097
-+ .byte 0xc
-+ .byte 0x17
-+ .byte 0xe
-+ .uleb128 0xa
-+ .long .LASF1098
-+ .byte 0x17
-+ .byte 0xf
-+ .long 0x5d77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF1099
-+ .byte 0x17
-+ .byte 0x10
-+ .long 0x5d77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF205
-+ .byte 0x17
-+ .byte 0x11
-+ .long 0x5d77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x5d77
-+ .long .LASF1100
-+ .byte 0x14
-+ .byte 0x17
-+ .byte 0xf
-+ .uleb128 0xa
-+ .long .LASF1098
-+ .byte 0x17
-+ .byte 0x15
-+ .long 0x5d77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF1099
-+ .byte 0x17
-+ .byte 0x16
-+ .long 0x5d77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF205
-+ .byte 0x17
-+ .byte 0x17
-+ .long 0x5d77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF1045
-+ .byte 0x17
-+ .byte 0x18
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xa
-+ .long .LASF1101
-+ .byte 0x17
-+ .byte 0x19
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x5d24
-+ .uleb128 0xf
-+ .long 0x5db4
-+ .long .LASF1102
-+ .byte 0x8
-+ .byte 0x17
-+ .byte 0x1c
-+ .uleb128 0xa
-+ .long .LASF1100
-+ .byte 0x17
-+ .byte 0x1d
-+ .long 0x5d77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF1103
-+ .byte 0x17
-+ .byte 0x1e
-+ .long 0x53
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xb
-+ .string "raw"
-+ .byte 0x17
-+ .byte 0x1f
-+ .long 0x53
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x6
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x5deb
-+ .long .LASF1104
-+ .byte 0xc
-+ .byte 0x24
-+ .byte 0x21
-+ .uleb128 0xa
-+ .long .LASF1105
-+ .byte 0x24
-+ .byte 0x22
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xb
-+ .string "len"
-+ .byte 0x24
-+ .byte 0x23
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF414
-+ .byte 0x24
-+ .byte 0x24
-+ .long 0x5deb
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x5df1
-+ .uleb128 0x14
-+ .long 0x112
-+ .uleb128 0xc
-+ .long 0x5e15
-+ .byte 0x8
-+ .byte 0x24
-+ .byte 0x64
-+ .uleb128 0xe
-+ .long .LASF1106
-+ .byte 0x24
-+ .byte 0x65
-+ .long 0x17bc
-+ .uleb128 0xe
-+ .long .LASF1107
-+ .byte 0x24
-+ .byte 0x66
-+ .long 0x2ea8
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x5e84
-+ .long .LASF1108
-+ .byte 0x1c
-+ .byte 0x24
-+ .byte 0x6b
-+ .uleb128 0xa
-+ .long .LASF1109
-+ .byte 0x24
-+ .byte 0x82
-+ .long 0x618b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF522
-+ .byte 0x24
-+ .byte 0x83
-+ .long 0x61ac
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF1110
-+ .byte 0x24
-+ .byte 0x84
-+ .long 0x61cc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF1111
-+ .byte 0x24
-+ .byte 0x85
-+ .long 0x61e2
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xa
-+ .long .LASF1112
-+ .byte 0x24
-+ .byte 0x86
-+ .long 0x61f4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xa
-+ .long .LASF1113
-+ .byte 0x24
-+ .byte 0x87
-+ .long 0x620b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0xa
-+ .long .LASF1114
-+ .byte 0x24
-+ .byte 0x88
-+ .long 0x622b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x5e15
-+ .uleb128 0x1a
-+ .long 0x60d1
-+ .long .LASF1115
-+ .value 0x18c
-+ .byte 0x24
-+ .byte 0x6c
-+ .uleb128 0x16
-+ .long .LASF1116
-+ .byte 0x1a
-+ .value 0x38d
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x16
-+ .long .LASF1117
-+ .byte 0x1a
-+ .value 0x38e
-+ .long 0x19f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0x16
-+ .long .LASF1118
-+ .byte 0x1a
-+ .value 0x38f
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0x16
-+ .long .LASF1119
-+ .byte 0x1a
-+ .value 0x390
-+ .long 0x112
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0x16
-+ .long .LASF1120
-+ .byte 0x1a
-+ .value 0x391
-+ .long 0x112
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x11
-+ .uleb128 0x16
-+ .long .LASF1121
-+ .byte 0x1a
-+ .value 0x392
-+ .long 0x162
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0x16
-+ .long .LASF1122
-+ .byte 0x1a
-+ .value 0x393
-+ .long 0x7a6e
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .uleb128 0x16
-+ .long .LASF1123
-+ .byte 0x1a
-+ .value 0x394
-+ .long 0x7b9f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .uleb128 0x16
-+ .long .LASF1124
-+ .byte 0x1a
-+ .value 0x395
-+ .long 0x7baa
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x24
-+ .uleb128 0x16
-+ .long .LASF1125
-+ .byte 0x1a
-+ .value 0x396
-+ .long 0x7bb0
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x28
-+ .uleb128 0x16
-+ .long .LASF1126
-+ .byte 0x1a
-+ .value 0x397
-+ .long 0x7c1e
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x2c
-+ .uleb128 0x16
-+ .long .LASF1127
-+ .byte 0x1a
-+ .value 0x398
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x30
-+ .uleb128 0x16
-+ .long .LASF1128
-+ .byte 0x1a
-+ .value 0x399
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x34
-+ .uleb128 0x16
-+ .long .LASF1129
-+ .byte 0x1a
-+ .value 0x39a
-+ .long 0x28ec
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x38
-+ .uleb128 0x16
-+ .long .LASF1130
-+ .byte 0x1a
-+ .value 0x39b
-+ .long 0x18fa
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x3c
-+ .uleb128 0x16
-+ .long .LASF1131
-+ .byte 0x1a
-+ .value 0x39c
-+ .long 0x2d94
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4c
-+ .uleb128 0x16
-+ .long .LASF1132
-+ .byte 0x1a
-+ .value 0x39d
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x60
-+ .uleb128 0x16
-+ .long .LASF1133
-+ .byte 0x1a
-+ .value 0x39e
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x64
-+ .uleb128 0x16
-+ .long .LASF1134
-+ .byte 0x1a
-+ .value 0x39f
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x68
-+ .uleb128 0x16
-+ .long .LASF1135
-+ .byte 0x1a
-+ .value 0x3a0
-+ .long 0x16c4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x6c
-+ .uleb128 0x16
-+ .long .LASF1136
-+ .byte 0x1a
-+ .value 0x3a4
-+ .long 0x7c2a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x70
-+ .uleb128 0x16
-+ .long .LASF1137
-+ .byte 0x1a
-+ .value 0x3a6
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x74
-+ .uleb128 0x16
-+ .long .LASF1138
-+ .byte 0x1a
-+ .value 0x3a7
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x7c
-+ .uleb128 0x16
-+ .long .LASF1139
-+ .byte 0x1a
-+ .value 0x3a8
-+ .long 0x17bc
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x84
-+ .uleb128 0x16
-+ .long .LASF1140
-+ .byte 0x1a
-+ .value 0x3a9
-+ .long 0x17eb
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x8c
-+ .uleb128 0x16
-+ .long .LASF1141
-+ .byte 0x1a
-+ .value 0x3aa
-+ .long 0x17bc
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x90
-+ .uleb128 0x16
-+ .long .LASF1142
-+ .byte 0x1a
-+ .value 0x3ac
-+ .long 0x71e9
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x98
-+ .uleb128 0x16
-+ .long .LASF1143
-+ .byte 0x1a
-+ .value 0x3ad
-+ .long 0x7c3c
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x9c
-+ .uleb128 0x16
-+ .long .LASF1144
-+ .byte 0x1a
-+ .value 0x3ae
-+ .long 0x17bc
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xa0
-+ .uleb128 0x16
-+ .long .LASF1145
-+ .byte 0x1a
-+ .value 0x3af
-+ .long 0x6c96
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0xa8
-+ .uleb128 0x16
-+ .long .LASF1146
-+ .byte 0x1a
-+ .value 0x3b1
-+ .long 0x21
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x13c
-+ .uleb128 0x16
-+ .long .LASF1147
-+ .byte 0x1a
-+ .value 0x3b2
-+ .long 0x18ef
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x140
-+ .uleb128 0x16
-+ .long .LASF1148
-+ .byte 0x1a
-+ .value 0x3b4
-+ .long 0x46d1
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x14c
-+ .uleb128 0x16
-+ .long .LASF1149
-+ .byte 0x1a
-+ .value 0x3b6
-+ .long 0x160b
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x16c
-+ .uleb128 0x16
-+ .long .LASF1150
-+ .byte 0x1a
-+ .value 0x3bc
-+ .long 0x2d94
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x170
-+ .uleb128 0x16
-+ .long .LASF1151
-+ .byte 0x1a
-+ .value 0x3c0
-+ .long 0x173
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x184
-+ .uleb128 0x16
-+ .long .LASF1152
-+ .byte 0x1a
-+ .value 0x3c6
-+ .long 0xb5
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x188
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x5e8a
-+ .uleb128 0x21
-+ .long .LASF1153
-+ .byte 0x1
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x60d7
-+ .uleb128 0x12
-+ .long 0x60f3
-+ .long 0x112
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x23
-+ .byte 0x0
-+ .uleb128 0x11
-+ .long 0x6108
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x28ec
-+ .uleb128 0x6
-+ .long 0x6108
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x610e
-+ .uleb128 0xf
-+ .long 0x618b
-+ .long .LASF1154
-+ .byte 0x50
-+ .byte 0x26
-+ .byte 0x14
-+ .uleb128 0xa
-+ .long .LASF517
-+ .byte 0x27
-+ .byte 0x12
-+ .long 0x28ec
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xb
-+ .string "mnt"
-+ .byte 0x27
-+ .byte 0x13
-+ .long 0x28f8
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF1101
-+ .byte 0x27
-+ .byte 0x14
-+ .long 0x5db4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF53
-+ .byte 0x27
-+ .byte 0x15
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0xa
-+ .long .LASF1155
-+ .byte 0x27
-+ .byte 0x16
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0xa
-+ .long .LASF1022
-+ .byte 0x27
-+ .byte 0x17
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .uleb128 0xa
-+ .long .LASF1156
-+ .byte 0x27
-+ .byte 0x18
-+ .long 0x627c
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .uleb128 0xa
-+ .long .LASF1157
-+ .byte 0x27
-+ .byte 0x1d
-+ .long 0x6268
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x44
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x60f3
-+ .uleb128 0x11
-+ .long 0x61a6
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x28ec
-+ .uleb128 0x6
-+ .long 0x61a6
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x5db4
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x6191
-+ .uleb128 0x11
-+ .long 0x61cc
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x28ec
-+ .uleb128 0x6
-+ .long 0x61a6
-+ .uleb128 0x6
-+ .long 0x61a6
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x61b2
-+ .uleb128 0x11
-+ .long 0x61e2
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x28ec
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x61d2
-+ .uleb128 0x5
-+ .long 0x61f4
-+ .byte 0x1
-+ .uleb128 0x6
-+ .long 0x28ec
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x61e8
-+ .uleb128 0x5
-+ .long 0x620b
-+ .byte 0x1
-+ .uleb128 0x6
-+ .long 0x28ec
-+ .uleb128 0x6
-+ .long 0x3381
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x61fa
-+ .uleb128 0x11
-+ .long 0x622b
-+ .byte 0x1
-+ .long 0xb5
-+ .uleb128 0x6
-+ .long 0x28ec
-+ .uleb128 0x6
-+ .long 0xb5
-+ .uleb128 0x6
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x6211
-+ .uleb128 0xf
-+ .long 0x6268
-+ .long .LASF1158
-+ .byte 0xc
-+ .byte 0x27
-+ .byte 0x9
-+ .uleb128 0xa
-+ .long .LASF53
-+ .byte 0x27
-+ .byte 0xa
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF1159
-+ .byte 0x27
-+ .byte 0xb
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF106
-+ .byte 0x27
-+ .byte 0xc
-+ .long 0x3cfd
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .byte 0x0
-+ .uleb128 0xc
-+ .long 0x627c
-+ .byte 0xc
-+ .byte 0x27
-+ .byte 0x1b
-+ .uleb128 0xe
-+ .long .LASF1160
-+ .byte 0x27
-+ .byte 0x1c
-+ .long 0x6231
-+ .byte 0x0
-+ .uleb128 0x12
-+ .long 0x628c
-+ .long 0xb5
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x8
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x62b5
-+ .long .LASF1161
-+ .byte 0x8
-+ .byte 0x27
-+ .byte 0x20
-+ .uleb128 0xb
-+ .string "mnt"
-+ .byte 0x27
-+ .byte 0x21
-+ .long 0x28f8
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF517
-+ .byte 0x27
-+ .byte 0x22
-+ .long 0x28ec
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x62ec
-+ .long .LASF1162
-+ .byte 0xc
-+ .byte 0x42
-+ .byte 0x3a
-+ .uleb128 0xa
-+ .long .LASF1163
-+ .byte 0x42
-+ .byte 0x3b
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF1164
-+ .byte 0x42
-+ .byte 0x3c
-+ .long 0x240
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF1165
-+ .byte 0x42
-+ .byte 0x3d
-+ .long 0x62f2
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .byte 0x0
-+ .uleb128 0x21
-+ .long .LASF1166
-+ .byte 0x1
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x62ec
-+ .uleb128 0x15
-+ .long 0x638d
-+ .long .LASF1167
-+ .byte 0x34
-+ .byte 0x1a
-+ .value 0x154
-+ .uleb128 0x16
-+ .long .LASF1168
-+ .byte 0x1a
-+ .value 0x155
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x16
-+ .long .LASF1169
-+ .byte 0x1a
-+ .value 0x156
-+ .long 0xea
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0x16
-+ .long .LASF1170
-+ .byte 0x1a
-+ .value 0x157
-+ .long 0x1dd
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0x16
-+ .long .LASF1171
-+ .byte 0x1a
-+ .value 0x158
-+ .long 0x1e8
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0x16
-+ .long .LASF1172
-+ .byte 0x1a
-+ .value 0x159
-+ .long 0x1f3
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0x16
-+ .long .LASF1173
-+ .byte 0x1a
-+ .value 0x15a
-+ .long 0x173b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0x16
-+ .long .LASF1174
-+ .byte 0x1a
-+ .value 0x15b
-+ .long 0x173b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .uleb128 0x16
-+ .long .LASF1175
-+ .byte 0x1a
-+ .value 0x15c
-+ .long 0x173b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x28
-+ .uleb128 0x16
-+ .long .LASF1176
-+ .byte 0x1a
-+ .value 0x163
-+ .long 0x3cfd
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x30
-+ .byte 0x0
-+ .uleb128 0x7
-+ .long .LASF1177
-+ .byte 0x3b
-+ .byte 0x2c
-+ .long 0xc2
-+ .uleb128 0x7
-+ .long .LASF1178
-+ .byte 0x3b
-+ .byte 0x2d
-+ .long 0x157
-+ .uleb128 0xf
-+ .long 0x642e
-+ .long .LASF1179
-+ .byte 0x44
-+ .byte 0x3b
-+ .byte 0x67
-+ .uleb128 0xa
-+ .long .LASF1180
-+ .byte 0x3b
-+ .byte 0x68
-+ .long 0x157
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF1181
-+ .byte 0x3b
-+ .byte 0x69
-+ .long 0x157
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF1182
-+ .byte 0x3b
-+ .byte 0x6a
-+ .long 0x157
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xa
-+ .long .LASF1183
-+ .byte 0x3b
-+ .byte 0x6b
-+ .long 0x157
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0xa
-+ .long .LASF1184
-+ .byte 0x3b
-+ .byte 0x6c
-+ .long 0x157
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .uleb128 0xa
-+ .long .LASF1185
-+ .byte 0x3b
-+ .byte 0x6d
-+ .long 0x157
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x28
-+ .uleb128 0xa
-+ .long .LASF1186
-+ .byte 0x3b
-+ .byte 0x6e
-+ .long 0x157
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x30
-+ .uleb128 0xa
-+ .long .LASF1187
-+ .byte 0x3b
-+ .byte 0x6f
-+ .long 0x157
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x38
-+ .uleb128 0xa
-+ .long .LASF1188
-+ .byte 0x3b
-+ .byte 0x70
-+ .long 0x141
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x40
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x6473
-+ .long .LASF1189
-+ .byte 0x18
-+ .byte 0x3b
-+ .byte 0x7c
-+ .uleb128 0xa
-+ .long .LASF1190
-+ .byte 0x3b
-+ .byte 0x7d
-+ .long 0x157
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF1191
-+ .byte 0x3b
-+ .byte 0x7e
-+ .long 0x157
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF1192
-+ .byte 0x3b
-+ .byte 0x7f
-+ .long 0x141
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xa
-+ .long .LASF1193
-+ .byte 0x3b
-+ .byte 0x80
-+ .long 0x141
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x65b4
-+ .long .LASF1194
-+ .byte 0x70
-+ .byte 0x3c
-+ .byte 0x32
-+ .uleb128 0xa
-+ .long .LASF1195
-+ .byte 0x3c
-+ .byte 0x33
-+ .long 0xf5
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF519
-+ .byte 0x3c
-+ .byte 0x34
-+ .long 0xf5
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1
-+ .uleb128 0xa
-+ .long .LASF1196
-+ .byte 0x3c
-+ .byte 0x35
-+ .long 0x12b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x2
-+ .uleb128 0xa
-+ .long .LASF1197
-+ .byte 0x3c
-+ .byte 0x36
-+ .long 0x141
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF1198
-+ .byte 0x3c
-+ .byte 0x37
-+ .long 0x157
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF1199
-+ .byte 0x3c
-+ .byte 0x38
-+ .long 0x157
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xa
-+ .long .LASF1200
-+ .byte 0x3c
-+ .byte 0x39
-+ .long 0x157
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0xa
-+ .long .LASF1201
-+ .byte 0x3c
-+ .byte 0x3a
-+ .long 0x157
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .uleb128 0xa
-+ .long .LASF1202
-+ .byte 0x3c
-+ .byte 0x3b
-+ .long 0x157
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x28
-+ .uleb128 0xa
-+ .long .LASF1203
-+ .byte 0x3c
-+ .byte 0x3c
-+ .long 0x157
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x30
-+ .uleb128 0xa
-+ .long .LASF1204
-+ .byte 0x3c
-+ .byte 0x3d
-+ .long 0x136
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x38
-+ .uleb128 0xa
-+ .long .LASF1205
-+ .byte 0x3c
-+ .byte 0x3f
-+ .long 0x136
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x3c
-+ .uleb128 0xa
-+ .long .LASF1206
-+ .byte 0x3c
-+ .byte 0x40
-+ .long 0x12b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x40
-+ .uleb128 0xa
-+ .long .LASF1207
-+ .byte 0x3c
-+ .byte 0x41
-+ .long 0x12b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x42
-+ .uleb128 0xa
-+ .long .LASF1208
-+ .byte 0x3c
-+ .byte 0x42
-+ .long 0x136
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x44
-+ .uleb128 0xa
-+ .long .LASF1209
-+ .byte 0x3c
-+ .byte 0x43
-+ .long 0x157
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x48
-+ .uleb128 0xa
-+ .long .LASF1210
-+ .byte 0x3c
-+ .byte 0x44
-+ .long 0x157
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x50
-+ .uleb128 0xa
-+ .long .LASF1211
-+ .byte 0x3c
-+ .byte 0x45
-+ .long 0x157
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x58
-+ .uleb128 0xa
-+ .long .LASF1212
-+ .byte 0x3c
-+ .byte 0x46
-+ .long 0x136
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x60
-+ .uleb128 0xa
-+ .long .LASF1213
-+ .byte 0x3c
-+ .byte 0x47
-+ .long 0x12b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x64
-+ .uleb128 0xa
-+ .long .LASF1214
-+ .byte 0x3c
-+ .byte 0x48
-+ .long 0x119
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x66
-+ .uleb128 0xa
-+ .long .LASF1215
-+ .byte 0x3c
-+ .byte 0x49
-+ .long 0x8ec
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x68
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x65eb
-+ .long .LASF1216
-+ .byte 0x14
-+ .byte 0x3c
-+ .byte 0x89
-+ .uleb128 0xa
-+ .long .LASF1217
-+ .byte 0x3c
-+ .byte 0x8a
-+ .long 0x157
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF1218
-+ .byte 0x3c
-+ .byte 0x8b
-+ .long 0x157
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF1219
-+ .byte 0x3c
-+ .byte 0x8c
-+ .long 0x141
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .byte 0x0
-+ .uleb128 0x7
-+ .long .LASF1220
-+ .byte 0x3c
-+ .byte 0x8d
-+ .long 0x65b4
-+ .uleb128 0xf
-+ .long 0x669d
-+ .long .LASF1221
-+ .byte 0x44
-+ .byte 0x3c
-+ .byte 0x8f
-+ .uleb128 0xa
-+ .long .LASF1222
-+ .byte 0x3c
-+ .byte 0x90
-+ .long 0xf5
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF1223
-+ .byte 0x3c
-+ .byte 0x91
-+ .long 0x12b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x2
-+ .uleb128 0xa
-+ .long .LASF1224
-+ .byte 0x3c
-+ .byte 0x92
-+ .long 0xf5
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF1225
-+ .byte 0x3c
-+ .byte 0x93
-+ .long 0x65eb
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF1226
-+ .byte 0x3c
-+ .byte 0x94
-+ .long 0x65eb
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .uleb128 0xa
-+ .long .LASF1227
-+ .byte 0x3c
-+ .byte 0x95
-+ .long 0x141
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x30
-+ .uleb128 0xa
-+ .long .LASF1228
-+ .byte 0x3c
-+ .byte 0x96
-+ .long 0x136
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x34
-+ .uleb128 0xa
-+ .long .LASF1229
-+ .byte 0x3c
-+ .byte 0x97
-+ .long 0x136
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x38
-+ .uleb128 0xa
-+ .long .LASF1230
-+ .byte 0x3c
-+ .byte 0x98
-+ .long 0x136
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x3c
-+ .uleb128 0xa
-+ .long .LASF1231
-+ .byte 0x3c
-+ .byte 0x99
-+ .long 0x12b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x40
-+ .uleb128 0xa
-+ .long .LASF1232
-+ .byte 0x3c
-+ .byte 0x9a
-+ .long 0x12b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x42
-+ .byte 0x0
-+ .uleb128 0x2a
-+ .long .LASF1233
-+ .byte 0x0
-+ .byte 0x3f
-+ .byte 0x15
-+ .uleb128 0xf
-+ .long 0x66dc
-+ .long .LASF1234
-+ .byte 0xc
-+ .byte 0x40
-+ .byte 0x14
-+ .uleb128 0xa
-+ .long .LASF1235
-+ .byte 0x40
-+ .byte 0x15
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF1236
-+ .byte 0x40
-+ .byte 0x16
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF1237
-+ .byte 0x40
-+ .byte 0x17
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x6759
-+ .long .LASF1238
-+ .byte 0x24
-+ .byte 0x3b
-+ .byte 0x98
-+ .uleb128 0xa
-+ .long .LASF1180
-+ .byte 0x3b
-+ .byte 0x99
-+ .long 0x141
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF1181
-+ .byte 0x3b
-+ .byte 0x9a
-+ .long 0x141
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF1182
-+ .byte 0x3b
-+ .byte 0x9b
-+ .long 0x6398
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF1183
-+ .byte 0x3b
-+ .byte 0x9c
-+ .long 0x141
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xa
-+ .long .LASF1184
-+ .byte 0x3b
-+ .byte 0x9d
-+ .long 0x141
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0xa
-+ .long .LASF1185
-+ .byte 0x3b
-+ .byte 0x9e
-+ .long 0x141
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0xa
-+ .long .LASF1186
-+ .byte 0x3b
-+ .byte 0x9f
-+ .long 0x214
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .uleb128 0xa
-+ .long .LASF1187
-+ .byte 0x3b
-+ .byte 0xa0
-+ .long 0x214
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .byte 0x0
-+ .uleb128 0xc
-+ .long 0x6778
-+ .byte 0xc
-+ .byte 0x3b
-+ .byte 0xae
-+ .uleb128 0xe
-+ .long .LASF1239
-+ .byte 0x3b
-+ .byte 0xaf
-+ .long 0x669d
-+ .uleb128 0xe
-+ .long .LASF1240
-+ .byte 0x3b
-+ .byte 0xb0
-+ .long 0x66a5
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x67d7
-+ .long .LASF1241
-+ .byte 0x24
-+ .byte 0x3b
-+ .byte 0xa8
-+ .uleb128 0xa
-+ .long .LASF1242
-+ .byte 0x3b
-+ .byte 0xa9
-+ .long 0x6820
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF1243
-+ .byte 0x3b
-+ .byte 0xaa
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF1192
-+ .byte 0x3b
-+ .byte 0xab
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xa
-+ .long .LASF1190
-+ .byte 0x3b
-+ .byte 0xac
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xa
-+ .long .LASF1191
-+ .byte 0x3b
-+ .byte 0xad
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0xb
-+ .string "u"
-+ .byte 0x3b
-+ .byte 0xb1
-+ .long 0x6759
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x6820
-+ .long .LASF1244
-+ .byte 0x10
-+ .byte 0x3b
-+ .byte 0xa6
-+ .uleb128 0x16
-+ .long .LASF1245
-+ .byte 0x3b
-+ .value 0x116
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x16
-+ .long .LASF1246
-+ .byte 0x3b
-+ .value 0x117
-+ .long 0x6c90
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0x16
-+ .long .LASF1247
-+ .byte 0x3b
-+ .value 0x118
-+ .long 0x4af9
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0x16
-+ .long .LASF1248
-+ .byte 0x3b
-+ .value 0x119
-+ .long 0x6820
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x67d7
-+ .uleb128 0xf
-+ .long 0x68e9
-+ .long .LASF1249
-+ .byte 0x80
-+ .byte 0x3b
-+ .byte 0xd6
-+ .uleb128 0xa
-+ .long .LASF1250
-+ .byte 0x3b
-+ .byte 0xd7
-+ .long 0x1808
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF1251
-+ .byte 0x3b
-+ .byte 0xd8
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF1252
-+ .byte 0x3b
-+ .byte 0xd9
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xa
-+ .long .LASF1253
-+ .byte 0x3b
-+ .byte 0xda
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0xa
-+ .long .LASF1254
-+ .byte 0x3b
-+ .byte 0xdb
-+ .long 0x2d94
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .uleb128 0xa
-+ .long .LASF1255
-+ .byte 0x3b
-+ .byte 0xdc
-+ .long 0x16c4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x34
-+ .uleb128 0xa
-+ .long .LASF1256
-+ .byte 0x3b
-+ .byte 0xdd
-+ .long 0x18ef
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x38
-+ .uleb128 0xa
-+ .long .LASF1257
-+ .byte 0x3b
-+ .byte 0xde
-+ .long 0x60d1
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x44
-+ .uleb128 0xa
-+ .long .LASF1258
-+ .byte 0x3b
-+ .byte 0xdf
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x48
-+ .uleb128 0xa
-+ .long .LASF1259
-+ .byte 0x3b
-+ .byte 0xe0
-+ .long 0x1f3
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4c
-+ .uleb128 0xa
-+ .long .LASF1260
-+ .byte 0x3b
-+ .byte 0xe1
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x54
-+ .uleb128 0xa
-+ .long .LASF1261
-+ .byte 0x3b
-+ .byte 0xe2
-+ .long 0x124
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x58
-+ .uleb128 0xa
-+ .long .LASF1262
-+ .byte 0x3b
-+ .byte 0xe3
-+ .long 0x66dc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x5c
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x6958
-+ .long .LASF1263
-+ .byte 0x1c
-+ .byte 0x3b
-+ .byte 0xec
-+ .uleb128 0xa
-+ .long .LASF1264
-+ .byte 0x3b
-+ .byte 0xed
-+ .long 0x696d
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF1265
-+ .byte 0x3b
-+ .byte 0xee
-+ .long 0x696d
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF1266
-+ .byte 0x3b
-+ .byte 0xef
-+ .long 0x696d
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF1267
-+ .byte 0x3b
-+ .byte 0xf0
-+ .long 0x696d
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xa
-+ .long .LASF1268
-+ .byte 0x3b
-+ .byte 0xf1
-+ .long 0x6989
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xa
-+ .long .LASF1269
-+ .byte 0x3b
-+ .byte 0xf2
-+ .long 0x6989
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0xa
-+ .long .LASF1270
-+ .byte 0x3b
-+ .byte 0xf3
-+ .long 0x6989
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .byte 0x0
-+ .uleb128 0x11
-+ .long 0x696d
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x60d1
-+ .uleb128 0x6
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x6958
-+ .uleb128 0x11
-+ .long 0x6983
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x6983
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x6826
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x6973
-+ .uleb128 0xf
-+ .long 0x6a48
-+ .long .LASF1271
-+ .byte 0x30
-+ .byte 0x3b
-+ .byte 0xf7
-+ .uleb128 0xa
-+ .long .LASF1272
-+ .byte 0x3b
-+ .byte 0xf8
-+ .long 0x6a5d
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF1273
-+ .byte 0x3b
-+ .byte 0xf9
-+ .long 0x6a73
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF1274
-+ .byte 0x3b
-+ .byte 0xfa
-+ .long 0x6a93
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF1275
-+ .byte 0x3b
-+ .byte 0xfb
-+ .long 0x6ab9
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xa
-+ .long .LASF1276
-+ .byte 0x3b
-+ .byte 0xfc
-+ .long 0x6ad4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xa
-+ .long .LASF1277
-+ .byte 0x3b
-+ .byte 0xfd
-+ .long 0x6ab9
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0xa
-+ .long .LASF1278
-+ .byte 0x3b
-+ .byte 0xfe
-+ .long 0x6af5
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0xa
-+ .long .LASF1279
-+ .byte 0x3b
-+ .byte 0xff
-+ .long 0x6989
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .uleb128 0x16
-+ .long .LASF1280
-+ .byte 0x3b
-+ .value 0x100
-+ .long 0x6989
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .uleb128 0x16
-+ .long .LASF1281
-+ .byte 0x3b
-+ .value 0x101
-+ .long 0x6989
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x24
-+ .uleb128 0x16
-+ .long .LASF1282
-+ .byte 0x3b
-+ .value 0x102
-+ .long 0x6989
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x28
-+ .uleb128 0x16
-+ .long .LASF1283
-+ .byte 0x3b
-+ .value 0x103
-+ .long 0x696d
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x2c
-+ .byte 0x0
-+ .uleb128 0x11
-+ .long 0x6a5d
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x3381
-+ .uleb128 0x6
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x6a48
-+ .uleb128 0x11
-+ .long 0x6a73
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x3381
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x6a63
-+ .uleb128 0x11
-+ .long 0x6a93
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x3381
-+ .uleb128 0x6
-+ .long 0x6398
-+ .uleb128 0x6
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x6a79
-+ .uleb128 0x11
-+ .long 0x6aae
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x6aae
-+ .uleb128 0x6
-+ .long 0x2f
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x6ab4
-+ .uleb128 0x14
-+ .long 0x30f0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x6a99
-+ .uleb128 0x11
-+ .long 0x6ad4
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x3381
-+ .uleb128 0x6
-+ .long 0x6398
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x6abf
-+ .uleb128 0x11
-+ .long 0x6aef
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x3381
-+ .uleb128 0x6
-+ .long 0x6aef
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x62f8
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x6ada
-+ .uleb128 0x15
-+ .long 0x6bae
-+ .long .LASF1284
-+ .byte 0x2c
-+ .byte 0x3b
-+ .value 0x107
-+ .uleb128 0x16
-+ .long .LASF1285
-+ .byte 0x3b
-+ .value 0x108
-+ .long 0x6bcd
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x16
-+ .long .LASF1286
-+ .byte 0x3b
-+ .value 0x109
-+ .long 0x696d
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0x16
-+ .long .LASF1287
-+ .byte 0x3b
-+ .value 0x10a
-+ .long 0x696d
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0x16
-+ .long .LASF1288
-+ .byte 0x3b
-+ .value 0x10b
-+ .long 0x6bf3
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0x16
-+ .long .LASF1289
-+ .byte 0x3b
-+ .value 0x10c
-+ .long 0x6bf3
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0x16
-+ .long .LASF1290
-+ .byte 0x3b
-+ .value 0x10d
-+ .long 0x6c1e
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0x16
-+ .long .LASF1291
-+ .byte 0x3b
-+ .value 0x10e
-+ .long 0x6c1e
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0x16
-+ .long .LASF1292
-+ .byte 0x3b
-+ .value 0x10f
-+ .long 0x6c3f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .uleb128 0x16
-+ .long .LASF1293
-+ .byte 0x3b
-+ .value 0x110
-+ .long 0x6c5f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .uleb128 0x16
-+ .long .LASF1294
-+ .byte 0x3b
-+ .value 0x111
-+ .long 0x6c8a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x24
-+ .uleb128 0x16
-+ .long .LASF1295
-+ .byte 0x3b
-+ .value 0x112
-+ .long 0x6c8a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x28
-+ .byte 0x0
-+ .uleb128 0x11
-+ .long 0x6bcd
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x60d1
-+ .uleb128 0x6
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0xb5
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x6bae
-+ .uleb128 0x11
-+ .long 0x6bed
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x60d1
-+ .uleb128 0x6
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x6bed
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x642e
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x6bd3
-+ .uleb128 0x11
-+ .long 0x6c18
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x60d1
-+ .uleb128 0x6
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x638d
-+ .uleb128 0x6
-+ .long 0x6c18
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x63a3
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x6bf9
-+ .uleb128 0x11
-+ .long 0x6c39
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x60d1
-+ .uleb128 0x6
-+ .long 0x6c39
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x65f6
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x6c24
-+ .uleb128 0x11
-+ .long 0x6c5f
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x60d1
-+ .uleb128 0x6
-+ .long 0x77
-+ .uleb128 0x6
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x6c45
-+ .uleb128 0x11
-+ .long 0x6c84
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x60d1
-+ .uleb128 0x6
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x638d
-+ .uleb128 0x6
-+ .long 0x6c84
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x6473
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x6c65
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x68e9
-+ .uleb128 0x15
-+ .long 0x6d0e
-+ .long .LASF1296
-+ .byte 0x94
-+ .byte 0x3b
-+ .value 0x11f
-+ .uleb128 0x16
-+ .long .LASF53
-+ .byte 0x3b
-+ .value 0x120
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x16
-+ .long .LASF1297
-+ .byte 0x3b
-+ .value 0x121
-+ .long 0x2d94
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0x16
-+ .long .LASF1298
-+ .byte 0x3b
-+ .value 0x122
-+ .long 0x2d94
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0x16
-+ .long .LASF1299
-+ .byte 0x3b
-+ .value 0x123
-+ .long 0x18fa
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x2c
-+ .uleb128 0x16
-+ .long .LASF245
-+ .byte 0x3b
-+ .value 0x124
-+ .long 0x6d0e
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x3c
-+ .uleb128 0x16
-+ .long .LASF82
-+ .byte 0x3b
-+ .value 0x125
-+ .long 0x6d1e
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x44
-+ .uleb128 0x17
-+ .string "ops"
-+ .byte 0x3b
-+ .value 0x126
-+ .long 0x6d2e
-+ .byte 0x3
-+ .byte 0x23
-+ .uleb128 0x8c
-+ .byte 0x0
-+ .uleb128 0x12
-+ .long 0x6d1e
-+ .long 0x3381
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x1
-+ .byte 0x0
-+ .uleb128 0x12
-+ .long 0x6d2e
-+ .long 0x6778
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x1
-+ .byte 0x0
-+ .uleb128 0x12
-+ .long 0x6d3e
-+ .long 0x6c90
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x1
-+ .byte 0x0
-+ .uleb128 0x15
-+ .long 0x6e2d
-+ .long .LASF1300
-+ .byte 0x3c
-+ .byte 0x1a
-+ .value 0x191
-+ .uleb128 0x16
-+ .long .LASF1301
-+ .byte 0x1a
-+ .value 0x192
-+ .long 0x6e4e
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x16
-+ .long .LASF1302
-+ .byte 0x1a
-+ .value 0x193
-+ .long 0x6e69
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0x16
-+ .long .LASF1303
-+ .byte 0x1a
-+ .value 0x194
-+ .long 0x6e7b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0x16
-+ .long .LASF1304
-+ .byte 0x1a
-+ .value 0x197
-+ .long 0x6f9a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0x16
-+ .long .LASF1305
-+ .byte 0x1a
-+ .value 0x19a
-+ .long 0x6fb0
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0x16
-+ .long .LASF1306
-+ .byte 0x1a
-+ .value 0x19d
-+ .long 0x6fd5
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0x16
-+ .long .LASF1307
-+ .byte 0x1a
-+ .value 0x1a3
-+ .long 0x6ffa
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0x16
-+ .long .LASF1308
-+ .byte 0x1a
-+ .value 0x1a4
-+ .long 0x6ffa
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .uleb128 0x16
-+ .long .LASF1309
-+ .byte 0x1a
-+ .value 0x1a6
-+ .long 0x7015
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .uleb128 0x16
-+ .long .LASF1310
-+ .byte 0x1a
-+ .value 0x1a7
-+ .long 0x702c
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x24
-+ .uleb128 0x16
-+ .long .LASF1311
-+ .byte 0x1a
-+ .value 0x1a8
-+ .long 0x7047
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x28
-+ .uleb128 0x16
-+ .long .LASF1312
-+ .byte 0x1a
-+ .value 0x1aa
-+ .long 0x707c
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x2c
-+ .uleb128 0x16
-+ .long .LASF1313
-+ .byte 0x1a
-+ .value 0x1ac
-+ .long 0x709c
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x30
-+ .uleb128 0x16
-+ .long .LASF1314
-+ .byte 0x1a
-+ .value 0x1af
-+ .long 0x70bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x34
-+ .uleb128 0x16
-+ .long .LASF1315
-+ .byte 0x1a
-+ .value 0x1b0
-+ .long 0x6fb0
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x38
-+ .byte 0x0
-+ .uleb128 0x11
-+ .long 0x6e42
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x2d82
-+ .uleb128 0x6
-+ .long 0x6e42
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x6e48
-+ .uleb128 0x21
-+ .long .LASF1316
-+ .byte 0x1
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x6e2d
-+ .uleb128 0x11
-+ .long 0x6e69
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x3cfd
-+ .uleb128 0x6
-+ .long 0x2d82
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x6e54
-+ .uleb128 0x5
-+ .long 0x6e7b
-+ .byte 0x1
-+ .uleb128 0x6
-+ .long 0x2d82
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x6e6f
-+ .uleb128 0x11
-+ .long 0x6e96
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x6e96
-+ .uleb128 0x6
-+ .long 0x6e42
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x6e9c
-+ .uleb128 0x15
-+ .long 0x6f9a
-+ .long .LASF1317
-+ .byte 0x54
-+ .byte 0x1a
-+ .value 0x18e
-+ .uleb128 0x16
-+ .long .LASF1318
-+ .byte 0x1a
-+ .value 0x1b5
-+ .long 0x3381
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x16
-+ .long .LASF1319
-+ .byte 0x1a
-+ .value 0x1b6
-+ .long 0x62b5
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0x16
-+ .long .LASF1320
-+ .byte 0x1a
-+ .value 0x1b7
-+ .long 0x16a2
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0x16
-+ .long .LASF1321
-+ .byte 0x1a
-+ .value 0x1b8
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0x16
-+ .long .LASF1322
-+ .byte 0x1a
-+ .value 0x1b9
-+ .long 0x5d7d
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0x16
-+ .long .LASF1323
-+ .byte 0x1a
-+ .value 0x1ba
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .uleb128 0x16
-+ .long .LASF1324
-+ .byte 0x1a
-+ .value 0x1bb
-+ .long 0x1680
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x28
-+ .uleb128 0x16
-+ .long .LASF1325
-+ .byte 0x1a
-+ .value 0x1bc
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x2c
-+ .uleb128 0x16
-+ .long .LASF1326
-+ .byte 0x1a
-+ .value 0x1bd
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x30
-+ .uleb128 0x16
-+ .long .LASF1327
-+ .byte 0x1a
-+ .value 0x1be
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x34
-+ .uleb128 0x16
-+ .long .LASF1328
-+ .byte 0x1a
-+ .value 0x1bf
-+ .long 0x70c2
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x38
-+ .uleb128 0x16
-+ .long .LASF53
-+ .byte 0x1a
-+ .value 0x1c0
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x3c
-+ .uleb128 0x16
-+ .long .LASF271
-+ .byte 0x1a
-+ .value 0x1c1
-+ .long 0x4521
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x40
-+ .uleb128 0x16
-+ .long .LASF1329
-+ .byte 0x1a
-+ .value 0x1c2
-+ .long 0x1680
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x44
-+ .uleb128 0x16
-+ .long .LASF1330
-+ .byte 0x1a
-+ .value 0x1c3
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x48
-+ .uleb128 0x16
-+ .long .LASF1331
-+ .byte 0x1a
-+ .value 0x1c4
-+ .long 0x6e96
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x50
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x6e81
-+ .uleb128 0x11
-+ .long 0x6fb0
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x2d82
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x6fa0
-+ .uleb128 0x11
-+ .long 0x6fd5
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x3cfd
-+ .uleb128 0x6
-+ .long 0x6e96
-+ .uleb128 0x6
-+ .long 0x17e5
-+ .uleb128 0x6
-+ .long 0x77
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x6fb6
-+ .uleb128 0x11
-+ .long 0x6ffa
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x3cfd
-+ .uleb128 0x6
-+ .long 0x2d82
-+ .uleb128 0x6
-+ .long 0x77
-+ .uleb128 0x6
-+ .long 0x77
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x6fdb
-+ .uleb128 0x11
-+ .long 0x7015
-+ .byte 0x1
-+ .long 0x22a
-+ .uleb128 0x6
-+ .long 0x6e96
-+ .uleb128 0x6
-+ .long 0x22a
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7000
-+ .uleb128 0x5
-+ .long 0x702c
-+ .byte 0x1
-+ .uleb128 0x6
-+ .long 0x2d82
-+ .uleb128 0x6
-+ .long 0x2f
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x701b
-+ .uleb128 0x11
-+ .long 0x7047
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x2d82
-+ .uleb128 0x6
-+ .long 0x240
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7032
-+ .uleb128 0x11
-+ .long 0x7071
-+ .byte 0x1
-+ .long 0x209
-+ .uleb128 0x6
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x3ddf
-+ .uleb128 0x6
-+ .long 0x7071
-+ .uleb128 0x6
-+ .long 0x1f3
-+ .uleb128 0x6
-+ .long 0x2f
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7077
-+ .uleb128 0x14
-+ .long 0x3a49
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x704d
-+ .uleb128 0x11
-+ .long 0x709c
-+ .byte 0x1
-+ .long 0x2d82
-+ .uleb128 0x6
-+ .long 0x6e96
-+ .uleb128 0x6
-+ .long 0x22a
-+ .uleb128 0x6
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7082
-+ .uleb128 0x11
-+ .long 0x70bc
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x6e96
-+ .uleb128 0x6
-+ .long 0x2d82
-+ .uleb128 0x6
-+ .long 0x2d82
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x70a2
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x70c8
-+ .uleb128 0x14
-+ .long 0x6d3e
-+ .uleb128 0x15
-+ .long 0x71e9
-+ .long .LASF1332
-+ .byte 0x74
-+ .byte 0x1a
-+ .value 0x1cc
-+ .uleb128 0x16
-+ .long .LASF1333
-+ .byte 0x1a
-+ .value 0x1cd
-+ .long 0x19f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x16
-+ .long .LASF1334
-+ .byte 0x1a
-+ .value 0x1ce
-+ .long 0x3381
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0x16
-+ .long .LASF1335
-+ .byte 0x1a
-+ .value 0x1cf
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0x16
-+ .long .LASF1336
-+ .byte 0x1a
-+ .value 0x1d0
-+ .long 0x2d94
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0x16
-+ .long .LASF1337
-+ .byte 0x1a
-+ .value 0x1d1
-+ .long 0x1931
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .uleb128 0x16
-+ .long .LASF1338
-+ .byte 0x1a
-+ .value 0x1d2
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x34
-+ .uleb128 0x16
-+ .long .LASF1339
-+ .byte 0x1a
-+ .value 0x1d3
-+ .long 0x160b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x3c
-+ .uleb128 0x16
-+ .long .LASF1340
-+ .byte 0x1a
-+ .value 0x1d4
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x40
-+ .uleb128 0x16
-+ .long .LASF1341
-+ .byte 0x1a
-+ .value 0x1d6
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x44
-+ .uleb128 0x16
-+ .long .LASF1342
-+ .byte 0x1a
-+ .value 0x1d8
-+ .long 0x71e9
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4c
-+ .uleb128 0x16
-+ .long .LASF1343
-+ .byte 0x1a
-+ .value 0x1d9
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x50
-+ .uleb128 0x16
-+ .long .LASF1344
-+ .byte 0x1a
-+ .value 0x1da
-+ .long 0x71f5
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x54
-+ .uleb128 0x16
-+ .long .LASF1345
-+ .byte 0x1a
-+ .value 0x1dc
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x58
-+ .uleb128 0x16
-+ .long .LASF1346
-+ .byte 0x1a
-+ .value 0x1dd
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x5c
-+ .uleb128 0x16
-+ .long .LASF1347
-+ .byte 0x1a
-+ .value 0x1de
-+ .long 0x7201
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x60
-+ .uleb128 0x16
-+ .long .LASF1348
-+ .byte 0x1a
-+ .value 0x1df
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x64
-+ .uleb128 0x16
-+ .long .LASF1349
-+ .byte 0x1a
-+ .value 0x1e0
-+ .long 0x4521
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x6c
-+ .uleb128 0x16
-+ .long .LASF1350
-+ .byte 0x1a
-+ .value 0x1e7
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x70
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x70cd
-+ .uleb128 0x21
-+ .long .LASF1351
-+ .byte 0x1
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x71ef
-+ .uleb128 0x21
-+ .long .LASF1352
-+ .byte 0x1
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x71fb
-+ .uleb128 0x2b
-+ .long 0x7235
-+ .byte 0x4
-+ .byte 0x1a
-+ .value 0x236
-+ .uleb128 0x1c
-+ .long .LASF1353
-+ .byte 0x1a
-+ .value 0x237
-+ .long 0x4551
-+ .uleb128 0x1c
-+ .long .LASF1354
-+ .byte 0x1a
-+ .value 0x238
-+ .long 0x71e9
-+ .uleb128 0x1c
-+ .long .LASF1355
-+ .byte 0x1a
-+ .value 0x239
-+ .long 0x723b
-+ .byte 0x0
-+ .uleb128 0x21
-+ .long .LASF1356
-+ .byte 0x1
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7235
-+ .uleb128 0x15
-+ .long 0x738a
-+ .long .LASF1357
-+ .byte 0x54
-+ .byte 0x1a
-+ .value 0x22c
-+ .uleb128 0x16
-+ .long .LASF1358
-+ .byte 0x1a
-+ .value 0x45f
-+ .long 0x7ffc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x16
-+ .long .LASF1359
-+ .byte 0x1a
-+ .value 0x460
-+ .long 0x801c
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0x16
-+ .long .LASF1360
-+ .byte 0x1a
-+ .value 0x461
-+ .long 0x803c
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0x16
-+ .long .LASF1361
-+ .byte 0x1a
-+ .value 0x462
-+ .long 0x8057
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0x16
-+ .long .LASF1362
-+ .byte 0x1a
-+ .value 0x463
-+ .long 0x8077
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0x16
-+ .long .LASF1363
-+ .byte 0x1a
-+ .value 0x464
-+ .long 0x8097
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0x16
-+ .long .LASF1364
-+ .byte 0x1a
-+ .value 0x465
-+ .long 0x8057
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0x16
-+ .long .LASF1365
-+ .byte 0x1a
-+ .value 0x466
-+ .long 0x80bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .uleb128 0x16
-+ .long .LASF1366
-+ .byte 0x1a
-+ .value 0x468
-+ .long 0x80e1
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .uleb128 0x16
-+ .long .LASF1367
-+ .byte 0x1a
-+ .value 0x469
-+ .long 0x8101
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x24
-+ .uleb128 0x16
-+ .long .LASF1368
-+ .byte 0x1a
-+ .value 0x46a
-+ .long 0x811c
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x28
-+ .uleb128 0x16
-+ .long .LASF1369
-+ .byte 0x1a
-+ .value 0x46b
-+ .long 0x8138
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x2c
-+ .uleb128 0x16
-+ .long .LASF1370
-+ .byte 0x1a
-+ .value 0x46c
-+ .long 0x814a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x30
-+ .uleb128 0x16
-+ .long .LASF1371
-+ .byte 0x1a
-+ .value 0x46d
-+ .long 0x816a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x34
-+ .uleb128 0x16
-+ .long .LASF1372
-+ .byte 0x1a
-+ .value 0x46e
-+ .long 0x8185
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x38
-+ .uleb128 0x16
-+ .long .LASF1373
-+ .byte 0x1a
-+ .value 0x46f
-+ .long 0x81ab
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x3c
-+ .uleb128 0x16
-+ .long .LASF1374
-+ .byte 0x1a
-+ .value 0x470
-+ .long 0x81dc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x40
-+ .uleb128 0x16
-+ .long .LASF1375
-+ .byte 0x1a
-+ .value 0x471
-+ .long 0x8201
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x44
-+ .uleb128 0x16
-+ .long .LASF1376
-+ .byte 0x1a
-+ .value 0x472
-+ .long 0x8221
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x48
-+ .uleb128 0x16
-+ .long .LASF1377
-+ .byte 0x1a
-+ .value 0x473
-+ .long 0x823c
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4c
-+ .uleb128 0x16
-+ .long .LASF1378
-+ .byte 0x1a
-+ .value 0x474
-+ .long 0x8258
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x50
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7390
-+ .uleb128 0x14
-+ .long 0x7241
-+ .uleb128 0x15
-+ .long 0x7538
-+ .long .LASF1379
-+ .byte 0x6c
-+ .byte 0x1a
-+ .value 0x22d
-+ .uleb128 0x16
-+ .long .LASF594
-+ .byte 0x1a
-+ .value 0x441
-+ .long 0x4af9
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x16
-+ .long .LASF1380
-+ .byte 0x1a
-+ .value 0x442
-+ .long 0x7da2
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0x16
-+ .long .LASF1381
-+ .byte 0x1a
-+ .value 0x443
-+ .long 0x7dcd
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0x16
-+ .long .LASF1382
-+ .byte 0x1a
-+ .value 0x444
-+ .long 0x7df2
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0x16
-+ .long .LASF1383
-+ .byte 0x1a
-+ .value 0x445
-+ .long 0x7e17
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0x16
-+ .long .LASF1384
-+ .byte 0x1a
-+ .value 0x446
-+ .long 0x7e17
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0x16
-+ .long .LASF1385
-+ .byte 0x1a
-+ .value 0x447
-+ .long 0x7e37
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0x16
-+ .long .LASF978
-+ .byte 0x1a
-+ .value 0x448
-+ .long 0x7e5e
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .uleb128 0x16
-+ .long .LASF1386
-+ .byte 0x1a
-+ .value 0x449
-+ .long 0x7cb7
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .uleb128 0x16
-+ .long .LASF1387
-+ .byte 0x1a
-+ .value 0x44a
-+ .long 0x7cd7
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x24
-+ .uleb128 0x16
-+ .long .LASF1388
-+ .byte 0x1a
-+ .value 0x44b
-+ .long 0x7cd7
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x28
-+ .uleb128 0x16
-+ .long .LASF673
-+ .byte 0x1a
-+ .value 0x44c
-+ .long 0x7e79
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x2c
-+ .uleb128 0x16
-+ .long .LASF1160
-+ .byte 0x1a
-+ .value 0x44d
-+ .long 0x7c92
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x30
-+ .uleb128 0x16
-+ .long .LASF1389
-+ .byte 0x1a
-+ .value 0x44e
-+ .long 0x7e94
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x34
-+ .uleb128 0x16
-+ .long .LASF404
-+ .byte 0x1a
-+ .value 0x44f
-+ .long 0x7c92
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x38
-+ .uleb128 0x16
-+ .long .LASF1390
-+ .byte 0x1a
-+ .value 0x450
-+ .long 0x7eb4
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x3c
-+ .uleb128 0x16
-+ .long .LASF1391
-+ .byte 0x1a
-+ .value 0x451
-+ .long 0x7ecf
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x40
-+ .uleb128 0x16
-+ .long .LASF1392
-+ .byte 0x1a
-+ .value 0x452
-+ .long 0x7eef
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x44
-+ .uleb128 0x16
-+ .long .LASF285
-+ .byte 0x1a
-+ .value 0x453
-+ .long 0x7f0f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x48
-+ .uleb128 0x16
-+ .long .LASF1393
-+ .byte 0x1a
-+ .value 0x454
-+ .long 0x7f39
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4c
-+ .uleb128 0x16
-+ .long .LASF1394
-+ .byte 0x1a
-+ .value 0x455
-+ .long 0x7f68
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x50
-+ .uleb128 0x16
-+ .long .LASF676
-+ .byte 0x1a
-+ .value 0x456
-+ .long 0x3fc6
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x54
-+ .uleb128 0x16
-+ .long .LASF1395
-+ .byte 0x1a
-+ .value 0x457
-+ .long 0x21c9
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x58
-+ .uleb128 0x16
-+ .long .LASF1396
-+ .byte 0x1a
-+ .value 0x458
-+ .long 0x7f83
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x5c
-+ .uleb128 0x16
-+ .long .LASF1397
-+ .byte 0x1a
-+ .value 0x459
-+ .long 0x7f0f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x60
-+ .uleb128 0x16
-+ .long .LASF1398
-+ .byte 0x1a
-+ .value 0x45a
-+ .long 0x7fad
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x64
-+ .uleb128 0x16
-+ .long .LASF1399
-+ .byte 0x1a
-+ .value 0x45b
-+ .long 0x7fd7
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x68
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x753e
-+ .uleb128 0x14
-+ .long 0x7395
-+ .uleb128 0x15
-+ .long 0x7641
-+ .long .LASF1400
-+ .byte 0x60
-+ .byte 0x1a
-+ .value 0x22f
-+ .uleb128 0x16
-+ .long .LASF1401
-+ .byte 0x1a
-+ .value 0x323
-+ .long 0x7641
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x16
-+ .long .LASF1402
-+ .byte 0x1a
-+ .value 0x324
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0x16
-+ .long .LASF1403
-+ .byte 0x1a
-+ .value 0x325
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0x16
-+ .long .LASF1404
-+ .byte 0x1a
-+ .value 0x326
-+ .long 0x7790
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0x16
-+ .long .LASF1405
-+ .byte 0x1a
-+ .value 0x327
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0x16
-+ .long .LASF1406
-+ .byte 0x1a
-+ .value 0x328
-+ .long 0x18ef
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .uleb128 0x16
-+ .long .LASF1407
-+ .byte 0x1a
-+ .value 0x329
-+ .long 0x3cfd
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x28
-+ .uleb128 0x16
-+ .long .LASF1408
-+ .byte 0x1a
-+ .value 0x32a
-+ .long 0x112
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x2c
-+ .uleb128 0x16
-+ .long .LASF1409
-+ .byte 0x1a
-+ .value 0x32b
-+ .long 0x112
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x2d
-+ .uleb128 0x16
-+ .long .LASF1410
-+ .byte 0x1a
-+ .value 0x32c
-+ .long 0x1f3
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x30
-+ .uleb128 0x16
-+ .long .LASF1411
-+ .byte 0x1a
-+ .value 0x32d
-+ .long 0x1f3
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x38
-+ .uleb128 0x16
-+ .long .LASF1412
-+ .byte 0x1a
-+ .value 0x32f
-+ .long 0x79c7
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x40
-+ .uleb128 0x16
-+ .long .LASF1413
-+ .byte 0x1a
-+ .value 0x330
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x44
-+ .uleb128 0x16
-+ .long .LASF1414
-+ .byte 0x1a
-+ .value 0x332
-+ .long 0x79cd
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x48
-+ .uleb128 0x16
-+ .long .LASF1415
-+ .byte 0x1a
-+ .value 0x333
-+ .long 0x79d3
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4c
-+ .uleb128 0x16
-+ .long .LASF1416
-+ .byte 0x1a
-+ .value 0x337
-+ .long 0x795b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x50
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7543
-+ .uleb128 0x21
-+ .long .LASF1417
-+ .byte 0x1
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7647
-+ .uleb128 0x15
-+ .long 0x76bb
-+ .long .LASF1418
-+ .byte 0x18
-+ .byte 0x1a
-+ .value 0x2ad
-+ .uleb128 0x16
-+ .long .LASF285
-+ .byte 0x1a
-+ .value 0x2ae
-+ .long 0x16a2
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x17
-+ .string "pid"
-+ .byte 0x1a
-+ .value 0x2af
-+ .long 0x3070
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0x16
-+ .long .LASF739
-+ .byte 0x1a
-+ .value 0x2b0
-+ .long 0x2fc0
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0x17
-+ .string "uid"
-+ .byte 0x1a
-+ .value 0x2b1
-+ .long 0x1dd
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0x16
-+ .long .LASF226
-+ .byte 0x1a
-+ .value 0x2b1
-+ .long 0x1dd
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0x16
-+ .long .LASF1419
-+ .byte 0x1a
-+ .value 0x2b2
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .byte 0x0
-+ .uleb128 0x15
-+ .long 0x776e
-+ .long .LASF1420
-+ .byte 0x2c
-+ .byte 0x1a
-+ .value 0x2b8
-+ .uleb128 0x16
-+ .long .LASF1045
-+ .byte 0x1a
-+ .value 0x2b9
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x16
-+ .long .LASF328
-+ .byte 0x1a
-+ .value 0x2ba
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0x16
-+ .long .LASF53
-+ .byte 0x1a
-+ .value 0x2bb
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0x16
-+ .long .LASF1421
-+ .byte 0x1a
-+ .value 0x2bc
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0x16
-+ .long .LASF1422
-+ .byte 0x1a
-+ .value 0x2bd
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0x16
-+ .long .LASF1423
-+ .byte 0x1a
-+ .value 0x2be
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0x16
-+ .long .LASF1424
-+ .byte 0x1a
-+ .value 0x2bf
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0x16
-+ .long .LASF887
-+ .byte 0x1a
-+ .value 0x2c0
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .uleb128 0x16
-+ .long .LASF1425
-+ .byte 0x1a
-+ .value 0x2c1
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .uleb128 0x16
-+ .long .LASF1426
-+ .byte 0x1a
-+ .value 0x2c2
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x24
-+ .uleb128 0x16
-+ .long .LASF1427
-+ .byte 0x1a
-+ .value 0x2c3
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x28
-+ .byte 0x0
-+ .uleb128 0x2b
-+ .long 0x7790
-+ .byte 0x8
-+ .byte 0x1a
-+ .value 0x2cd
-+ .uleb128 0x1c
-+ .long .LASF1428
-+ .byte 0x1a
-+ .value 0x2ce
-+ .long 0x17bc
-+ .uleb128 0x1c
-+ .long .LASF1429
-+ .byte 0x1a
-+ .value 0x2cf
-+ .long 0x2ea8
-+ .byte 0x0
-+ .uleb128 0x1e
-+ .long .LASF1430
-+ .byte 0x1a
-+ .value 0x30b
-+ .long 0x442b
-+ .uleb128 0x15
-+ .long 0x77e6
-+ .long .LASF1431
-+ .byte 0x10
-+ .byte 0x1a
-+ .value 0x30d
-+ .uleb128 0x16
-+ .long .LASF1432
-+ .byte 0x1a
-+ .value 0x30e
-+ .long 0x77f2
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x16
-+ .long .LASF1433
-+ .byte 0x1a
-+ .value 0x30f
-+ .long 0x77f2
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0x16
-+ .long .LASF1434
-+ .byte 0x1a
-+ .value 0x310
-+ .long 0x7809
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0x16
-+ .long .LASF1435
-+ .byte 0x1a
-+ .value 0x311
-+ .long 0x77f2
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .byte 0x0
-+ .uleb128 0x5
-+ .long 0x77f2
-+ .byte 0x1
-+ .uleb128 0x6
-+ .long 0x7641
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x77e6
-+ .uleb128 0x5
-+ .long 0x7809
-+ .byte 0x1
-+ .uleb128 0x6
-+ .long 0x7641
-+ .uleb128 0x6
-+ .long 0x7641
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x77f8
-+ .uleb128 0x15
-+ .long 0x7895
-+ .long .LASF1436
-+ .byte 0x20
-+ .byte 0x1a
-+ .value 0x314
-+ .uleb128 0x16
-+ .long .LASF1437
-+ .byte 0x1a
-+ .value 0x315
-+ .long 0x78aa
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x16
-+ .long .LASF1438
-+ .byte 0x1a
-+ .value 0x316
-+ .long 0x77f2
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0x16
-+ .long .LASF1439
-+ .byte 0x1a
-+ .value 0x317
-+ .long 0x78ca
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0x16
-+ .long .LASF1434
-+ .byte 0x1a
-+ .value 0x318
-+ .long 0x7809
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0x16
-+ .long .LASF1435
-+ .byte 0x1a
-+ .value 0x319
-+ .long 0x77f2
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0x16
-+ .long .LASF1440
-+ .byte 0x1a
-+ .value 0x31a
-+ .long 0x77f2
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0x16
-+ .long .LASF1441
-+ .byte 0x1a
-+ .value 0x31b
-+ .long 0x78aa
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0x16
-+ .long .LASF1442
-+ .byte 0x1a
-+ .value 0x31c
-+ .long 0x78eb
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .byte 0x0
-+ .uleb128 0x11
-+ .long 0x78aa
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x7641
-+ .uleb128 0x6
-+ .long 0x7641
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7895
-+ .uleb128 0x11
-+ .long 0x78ca
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x7641
-+ .uleb128 0x6
-+ .long 0x7641
-+ .uleb128 0x6
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x78b0
-+ .uleb128 0x11
-+ .long 0x78e5
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x78e5
-+ .uleb128 0x6
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7641
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x78d0
-+ .uleb128 0xf
-+ .long 0x7928
-+ .long .LASF1443
-+ .byte 0x10
-+ .byte 0x37
-+ .byte 0xd
-+ .uleb128 0xa
-+ .long .LASF169
-+ .byte 0x37
-+ .byte 0xe
-+ .long 0x173
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF594
-+ .byte 0x37
-+ .byte 0xf
-+ .long 0x792e
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF509
-+ .byte 0x37
-+ .byte 0x10
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .byte 0x0
-+ .uleb128 0x21
-+ .long .LASF1444
-+ .byte 0x1
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7928
-+ .uleb128 0xf
-+ .long 0x794f
-+ .long .LASF1445
-+ .byte 0x4
-+ .byte 0x37
-+ .byte 0x14
-+ .uleb128 0xa
-+ .long .LASF594
-+ .byte 0x37
-+ .byte 0x15
-+ .long 0x7955
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .byte 0x0
-+ .uleb128 0x21
-+ .long .LASF1446
-+ .byte 0x1
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x794f
-+ .uleb128 0x2b
-+ .long 0x797d
-+ .byte 0x10
-+ .byte 0x1a
-+ .value 0x334
-+ .uleb128 0x1c
-+ .long .LASF1447
-+ .byte 0x1a
-+ .value 0x335
-+ .long 0x78f1
-+ .uleb128 0x1c
-+ .long .LASF1448
-+ .byte 0x1a
-+ .value 0x336
-+ .long 0x7934
-+ .byte 0x0
-+ .uleb128 0x15
-+ .long 0x79c7
-+ .long .LASF1449
-+ .byte 0x10
-+ .byte 0x1a
-+ .value 0x32f
-+ .uleb128 0x16
-+ .long .LASF1450
-+ .byte 0x1a
-+ .value 0x36a
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x16
-+ .long .LASF1451
-+ .byte 0x1a
-+ .value 0x36b
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0x16
-+ .long .LASF1452
-+ .byte 0x1a
-+ .value 0x36c
-+ .long 0x79c7
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0x16
-+ .long .LASF1453
-+ .byte 0x1a
-+ .value 0x36d
-+ .long 0x3cfd
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x797d
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x779c
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x780f
-+ .uleb128 0x15
-+ .long 0x7a6e
-+ .long .LASF1454
-+ .byte 0x20
-+ .byte 0x1a
-+ .value 0x393
-+ .uleb128 0x16
-+ .long .LASF414
-+ .byte 0x1a
-+ .value 0x56f
-+ .long 0x7f2
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x16
-+ .long .LASF1455
-+ .byte 0x1a
-+ .value 0x570
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0x16
-+ .long .LASF1456
-+ .byte 0x1a
-+ .value 0x572
-+ .long 0x841f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0x16
-+ .long .LASF1457
-+ .byte 0x1a
-+ .value 0x573
-+ .long 0x8280
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0x16
-+ .long .LASF594
-+ .byte 0x1a
-+ .value 0x574
-+ .long 0x4af9
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0x16
-+ .long .LASF307
-+ .byte 0x1a
-+ .value 0x575
-+ .long 0x7a6e
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0x16
-+ .long .LASF1458
-+ .byte 0x1a
-+ .value 0x576
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0x16
-+ .long .LASF1459
-+ .byte 0x1a
-+ .value 0x577
-+ .long 0x161c
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .uleb128 0x16
-+ .long .LASF1460
-+ .byte 0x1a
-+ .value 0x578
-+ .long 0x161c
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x79d9
-+ .uleb128 0x15
-+ .long 0x7b9f
-+ .long .LASF1461
-+ .byte 0x4c
-+ .byte 0x1a
-+ .value 0x394
-+ .uleb128 0x16
-+ .long .LASF1275
-+ .byte 0x1a
-+ .value 0x48a
-+ .long 0x826e
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x16
-+ .long .LASF1462
-+ .byte 0x1a
-+ .value 0x48b
-+ .long 0x814a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0x16
-+ .long .LASF1463
-+ .byte 0x1a
-+ .value 0x48d
-+ .long 0x814a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0x16
-+ .long .LASF1464
-+ .byte 0x1a
-+ .value 0x48f
-+ .long 0x814a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0x16
-+ .long .LASF1465
-+ .byte 0x1a
-+ .value 0x490
-+ .long 0x6a5d
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0x16
-+ .long .LASF1466
-+ .byte 0x1a
-+ .value 0x491
-+ .long 0x814a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .uleb128 0x16
-+ .long .LASF1467
-+ .byte 0x1a
-+ .value 0x492
-+ .long 0x814a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x18
-+ .uleb128 0x16
-+ .long .LASF1468
-+ .byte 0x1a
-+ .value 0x493
-+ .long 0x814a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x1c
-+ .uleb128 0x16
-+ .long .LASF1469
-+ .byte 0x1a
-+ .value 0x494
-+ .long 0x8280
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x20
-+ .uleb128 0x16
-+ .long .LASF1470
-+ .byte 0x1a
-+ .value 0x495
-+ .long 0x8280
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x24
-+ .uleb128 0x16
-+ .long .LASF1471
-+ .byte 0x1a
-+ .value 0x496
-+ .long 0x696d
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x28
-+ .uleb128 0x16
-+ .long .LASF1472
-+ .byte 0x1a
-+ .value 0x497
-+ .long 0x8280
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x2c
-+ .uleb128 0x16
-+ .long .LASF1473
-+ .byte 0x1a
-+ .value 0x498
-+ .long 0x8280
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x30
-+ .uleb128 0x16
-+ .long .LASF1474
-+ .byte 0x1a
-+ .value 0x499
-+ .long 0x82a7
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x34
-+ .uleb128 0x16
-+ .long .LASF1475
-+ .byte 0x1a
-+ .value 0x49a
-+ .long 0x82c7
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x38
-+ .uleb128 0x16
-+ .long .LASF1476
-+ .byte 0x1a
-+ .value 0x49b
-+ .long 0x814a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x3c
-+ .uleb128 0x16
-+ .long .LASF1477
-+ .byte 0x1a
-+ .value 0x49c
-+ .long 0x82de
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x40
-+ .uleb128 0x16
-+ .long .LASF1478
-+ .byte 0x1a
-+ .value 0x49e
-+ .long 0x8305
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x44
-+ .uleb128 0x16
-+ .long .LASF1479
-+ .byte 0x1a
-+ .value 0x49f
-+ .long 0x8305
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x48
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7ba5
-+ .uleb128 0x14
-+ .long 0x7a74
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x698f
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x6afb
-+ .uleb128 0x15
-+ .long 0x7c1e
-+ .long .LASF1480
-+ .byte 0x18
-+ .byte 0x1a
-+ .value 0x397
-+ .uleb128 0x16
-+ .long .LASF1481
-+ .byte 0x1a
-+ .value 0x556
-+ .long 0x8355
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x16
-+ .long .LASF1482
-+ .byte 0x1a
-+ .value 0x558
-+ .long 0x837a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0x16
-+ .long .LASF1483
-+ .byte 0x1a
-+ .value 0x55c
-+ .long 0x839a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0x16
-+ .long .LASF1484
-+ .byte 0x1a
-+ .value 0x55d
-+ .long 0x83b0
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0x16
-+ .long .LASF1485
-+ .byte 0x1a
-+ .value 0x55e
-+ .long 0x83cb
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0x16
-+ .long .LASF1486
-+ .byte 0x1a
-+ .value 0x564
-+ .long 0x83f5
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7bb6
-+ .uleb128 0x21
-+ .long .LASF1487
-+ .byte 0x1
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7c30
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7c24
-+ .uleb128 0x21
-+ .long .LASF1488
-+ .byte 0x1
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7c36
-+ .uleb128 0x1e
-+ .long .LASF1489
-+ .byte 0x1a
-+ .value 0x411
-+ .long 0x7c4e
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7c54
-+ .uleb128 0x11
-+ .long 0x7c7d
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x160b
-+ .uleb128 0x6
-+ .long 0x7f2
-+ .uleb128 0x6
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x1f3
-+ .uleb128 0x6
-+ .long 0x189
-+ .uleb128 0x6
-+ .long 0x77
-+ .byte 0x0
-+ .uleb128 0x11
-+ .long 0x7c92
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x3381
-+ .uleb128 0x6
-+ .long 0x3cfd
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7c7d
-+ .uleb128 0x11
-+ .long 0x7cb7
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x3381
-+ .uleb128 0x6
-+ .long 0x3cfd
-+ .uleb128 0x6
-+ .long 0x77
-+ .uleb128 0x6
-+ .long 0x2f
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7c98
-+ .uleb128 0x11
-+ .long 0x7cd7
-+ .byte 0x1
-+ .long 0x5a
-+ .uleb128 0x6
-+ .long 0x3cfd
-+ .uleb128 0x6
-+ .long 0x77
-+ .uleb128 0x6
-+ .long 0x2f
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7cbd
-+ .uleb128 0x2b
-+ .long 0x7cff
-+ .byte 0x4
-+ .byte 0x1a
-+ .value 0x42c
-+ .uleb128 0x30
-+ .string "buf"
-+ .byte 0x1a
-+ .value 0x42d
-+ .long 0xb5
-+ .uleb128 0x1c
-+ .long .LASF734
-+ .byte 0x1a
-+ .value 0x42e
-+ .long 0x160b
-+ .byte 0x0
-+ .uleb128 0x1d
-+ .long 0x7d45
-+ .byte 0x10
-+ .byte 0x1a
-+ .value 0x429
-+ .uleb128 0x16
-+ .long .LASF1490
-+ .byte 0x1a
-+ .value 0x42a
-+ .long 0x1fe
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x16
-+ .long .LASF322
-+ .byte 0x1a
-+ .value 0x42b
-+ .long 0x1fe
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0x17
-+ .string "arg"
-+ .byte 0x1a
-+ .value 0x42f
-+ .long 0x7cdd
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0x16
-+ .long .LASF1491
-+ .byte 0x1a
-+ .value 0x430
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .byte 0x0
-+ .uleb128 0x1e
-+ .long .LASF1492
-+ .byte 0x1a
-+ .value 0x431
-+ .long 0x7cff
-+ .uleb128 0x1e
-+ .long .LASF1493
-+ .byte 0x1a
-+ .value 0x433
-+ .long 0x7d5d
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7d63
-+ .uleb128 0x11
-+ .long 0x7d82
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x7d82
-+ .uleb128 0x6
-+ .long 0x2d82
-+ .uleb128 0x6
-+ .long 0x2f
-+ .uleb128 0x6
-+ .long 0x2f
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7d45
-+ .uleb128 0x11
-+ .long 0x7da2
-+ .byte 0x1
-+ .long 0x1f3
-+ .uleb128 0x6
-+ .long 0x3cfd
-+ .uleb128 0x6
-+ .long 0x1f3
-+ .uleb128 0x6
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7d88
-+ .uleb128 0x11
-+ .long 0x7dc7
-+ .byte 0x1
-+ .long 0x209
-+ .uleb128 0x6
-+ .long 0x3cfd
-+ .uleb128 0x6
-+ .long 0xb5
-+ .uleb128 0x6
-+ .long 0x1fe
-+ .uleb128 0x6
-+ .long 0x7dc7
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x1f3
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7da8
-+ .uleb128 0x11
-+ .long 0x7df2
-+ .byte 0x1
-+ .long 0x209
-+ .uleb128 0x6
-+ .long 0x3cfd
-+ .uleb128 0x6
-+ .long 0x7f2
-+ .uleb128 0x6
-+ .long 0x1fe
-+ .uleb128 0x6
-+ .long 0x7dc7
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7dd3
-+ .uleb128 0x11
-+ .long 0x7e17
-+ .byte 0x1
-+ .long 0x209
-+ .uleb128 0x6
-+ .long 0x3ddf
-+ .uleb128 0x6
-+ .long 0x7071
-+ .uleb128 0x6
-+ .long 0x2f
-+ .uleb128 0x6
-+ .long 0x1f3
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7df8
-+ .uleb128 0x11
-+ .long 0x7e37
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x3cfd
-+ .uleb128 0x6
-+ .long 0x160b
-+ .uleb128 0x6
-+ .long 0x7c42
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7e1d
-+ .uleb128 0x11
-+ .long 0x7e52
-+ .byte 0x1
-+ .long 0x77
-+ .uleb128 0x6
-+ .long 0x3cfd
-+ .uleb128 0x6
-+ .long 0x7e52
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7e58
-+ .uleb128 0x21
-+ .long .LASF1494
-+ .byte 0x1
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7e3d
-+ .uleb128 0x11
-+ .long 0x7e79
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x3cfd
-+ .uleb128 0x6
-+ .long 0x3f9c
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7e64
-+ .uleb128 0x11
-+ .long 0x7e94
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x3cfd
-+ .uleb128 0x6
-+ .long 0x7790
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7e7f
-+ .uleb128 0x11
-+ .long 0x7eb4
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x3cfd
-+ .uleb128 0x6
-+ .long 0x28ec
-+ .uleb128 0x6
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7e9a
-+ .uleb128 0x11
-+ .long 0x7ecf
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x3ddf
-+ .uleb128 0x6
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7eba
-+ .uleb128 0x11
-+ .long 0x7eef
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x3cfd
-+ .uleb128 0x6
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7ed5
-+ .uleb128 0x11
-+ .long 0x7f0f
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x3cfd
-+ .uleb128 0x6
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x7641
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7ef5
-+ .uleb128 0x11
-+ .long 0x7f39
-+ .byte 0x1
-+ .long 0x209
-+ .uleb128 0x6
-+ .long 0x3cfd
-+ .uleb128 0x6
-+ .long 0x7dc7
-+ .uleb128 0x6
-+ .long 0x1fe
-+ .uleb128 0x6
-+ .long 0x7d51
-+ .uleb128 0x6
-+ .long 0x160b
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7f15
-+ .uleb128 0x11
-+ .long 0x7f68
-+ .byte 0x1
-+ .long 0x209
-+ .uleb128 0x6
-+ .long 0x3cfd
-+ .uleb128 0x6
-+ .long 0x2d82
-+ .uleb128 0x6
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x1fe
-+ .uleb128 0x6
-+ .long 0x7dc7
-+ .uleb128 0x6
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7f3f
-+ .uleb128 0x11
-+ .long 0x7f83
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x3cfd
-+ .uleb128 0x6
-+ .long 0x2f
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7f6e
-+ .uleb128 0x11
-+ .long 0x7fad
-+ .byte 0x1
-+ .long 0x209
-+ .uleb128 0x6
-+ .long 0x4551
-+ .uleb128 0x6
-+ .long 0x3cfd
-+ .uleb128 0x6
-+ .long 0x7dc7
-+ .uleb128 0x6
-+ .long 0x1fe
-+ .uleb128 0x6
-+ .long 0x77
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7f89
-+ .uleb128 0x11
-+ .long 0x7fd7
-+ .byte 0x1
-+ .long 0x209
-+ .uleb128 0x6
-+ .long 0x3cfd
-+ .uleb128 0x6
-+ .long 0x7dc7
-+ .uleb128 0x6
-+ .long 0x4551
-+ .uleb128 0x6
-+ .long 0x1fe
-+ .uleb128 0x6
-+ .long 0x77
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7fb3
-+ .uleb128 0x11
-+ .long 0x7ffc
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x3381
-+ .uleb128 0x6
-+ .long 0x28ec
-+ .uleb128 0x6
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x6108
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7fdd
-+ .uleb128 0x11
-+ .long 0x801c
-+ .byte 0x1
-+ .long 0x28ec
-+ .uleb128 0x6
-+ .long 0x3381
-+ .uleb128 0x6
-+ .long 0x28ec
-+ .uleb128 0x6
-+ .long 0x6108
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x8002
-+ .uleb128 0x11
-+ .long 0x803c
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x28ec
-+ .uleb128 0x6
-+ .long 0x3381
-+ .uleb128 0x6
-+ .long 0x28ec
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x8022
-+ .uleb128 0x11
-+ .long 0x8057
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x3381
-+ .uleb128 0x6
-+ .long 0x28ec
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x8042
-+ .uleb128 0x11
-+ .long 0x8077
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x3381
-+ .uleb128 0x6
-+ .long 0x28ec
-+ .uleb128 0x6
-+ .long 0x7f2
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x805d
-+ .uleb128 0x11
-+ .long 0x8097
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x3381
-+ .uleb128 0x6
-+ .long 0x28ec
-+ .uleb128 0x6
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x807d
-+ .uleb128 0x11
-+ .long 0x80bc
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x3381
-+ .uleb128 0x6
-+ .long 0x28ec
-+ .uleb128 0x6
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x19f
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x809d
-+ .uleb128 0x11
-+ .long 0x80e1
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x3381
-+ .uleb128 0x6
-+ .long 0x28ec
-+ .uleb128 0x6
-+ .long 0x3381
-+ .uleb128 0x6
-+ .long 0x28ec
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x80c2
-+ .uleb128 0x11
-+ .long 0x8101
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x28ec
-+ .uleb128 0x6
-+ .long 0xb5
-+ .uleb128 0x6
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x80e7
-+ .uleb128 0x11
-+ .long 0x811c
-+ .byte 0x1
-+ .long 0x160b
-+ .uleb128 0x6
-+ .long 0x28ec
-+ .uleb128 0x6
-+ .long 0x6108
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x8107
-+ .uleb128 0x5
-+ .long 0x8138
-+ .byte 0x1
-+ .uleb128 0x6
-+ .long 0x28ec
-+ .uleb128 0x6
-+ .long 0x6108
-+ .uleb128 0x6
-+ .long 0x160b
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x8122
-+ .uleb128 0x5
-+ .long 0x814a
-+ .byte 0x1
-+ .uleb128 0x6
-+ .long 0x3381
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x813e
-+ .uleb128 0x11
-+ .long 0x816a
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x3381
-+ .uleb128 0x6
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x6108
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x8150
-+ .uleb128 0x11
-+ .long 0x8185
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x28ec
-+ .uleb128 0x6
-+ .long 0x6aef
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x8170
-+ .uleb128 0x11
-+ .long 0x81a5
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x28f8
-+ .uleb128 0x6
-+ .long 0x28ec
-+ .uleb128 0x6
-+ .long 0x81a5
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x460e
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x818b
-+ .uleb128 0x11
-+ .long 0x81d5
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x28ec
-+ .uleb128 0x6
-+ .long 0x7f2
-+ .uleb128 0x6
-+ .long 0x81d5
-+ .uleb128 0x6
-+ .long 0x1fe
-+ .uleb128 0x6
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x81db
-+ .uleb128 0x31
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x81b1
-+ .uleb128 0x11
-+ .long 0x8201
-+ .byte 0x1
-+ .long 0x209
-+ .uleb128 0x6
-+ .long 0x28ec
-+ .uleb128 0x6
-+ .long 0x7f2
-+ .uleb128 0x6
-+ .long 0x160b
-+ .uleb128 0x6
-+ .long 0x1fe
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x81e2
-+ .uleb128 0x11
-+ .long 0x8221
-+ .byte 0x1
-+ .long 0x209
-+ .uleb128 0x6
-+ .long 0x28ec
-+ .uleb128 0x6
-+ .long 0xb5
-+ .uleb128 0x6
-+ .long 0x1fe
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x8207
-+ .uleb128 0x11
-+ .long 0x823c
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x28ec
-+ .uleb128 0x6
-+ .long 0x7f2
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x8227
-+ .uleb128 0x5
-+ .long 0x8258
-+ .byte 0x1
-+ .uleb128 0x6
-+ .long 0x3381
-+ .uleb128 0x6
-+ .long 0x1f3
-+ .uleb128 0x6
-+ .long 0x1f3
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x8242
-+ .uleb128 0x11
-+ .long 0x826e
-+ .byte 0x1
-+ .long 0x3381
-+ .uleb128 0x6
-+ .long 0x60d1
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x825e
-+ .uleb128 0x5
-+ .long 0x8280
-+ .byte 0x1
-+ .uleb128 0x6
-+ .long 0x60d1
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x8274
-+ .uleb128 0x11
-+ .long 0x829b
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x28ec
-+ .uleb128 0x6
-+ .long 0x829b
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x82a1
-+ .uleb128 0x21
-+ .long .LASF1495
-+ .byte 0x1
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x8286
-+ .uleb128 0x11
-+ .long 0x82c7
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x60d1
-+ .uleb128 0x6
-+ .long 0x4413
-+ .uleb128 0x6
-+ .long 0xb5
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x82ad
-+ .uleb128 0x5
-+ .long 0x82de
-+ .byte 0x1
-+ .uleb128 0x6
-+ .long 0x28f8
-+ .uleb128 0x6
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x82cd
-+ .uleb128 0x11
-+ .long 0x82f9
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x82f9
-+ .uleb128 0x6
-+ .long 0x28f8
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x82ff
-+ .uleb128 0x21
-+ .long .LASF1496
-+ .byte 0x1
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x82e4
-+ .uleb128 0x11
-+ .long 0x8334
-+ .byte 0x1
-+ .long 0x28ec
-+ .uleb128 0x6
-+ .long 0x60d1
-+ .uleb128 0x6
-+ .long 0x8334
-+ .uleb128 0x6
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x833a
-+ .uleb128 0x6
-+ .long 0x160b
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x141
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x8340
-+ .uleb128 0x11
-+ .long 0x8355
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x160b
-+ .uleb128 0x6
-+ .long 0x28ec
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x830b
-+ .uleb128 0x11
-+ .long 0x837a
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x28ec
-+ .uleb128 0x6
-+ .long 0x8334
-+ .uleb128 0x6
-+ .long 0x4413
-+ .uleb128 0x6
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x835b
-+ .uleb128 0x11
-+ .long 0x839a
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x28ec
-+ .uleb128 0x6
-+ .long 0xb5
-+ .uleb128 0x6
-+ .long 0x28ec
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x8380
-+ .uleb128 0x11
-+ .long 0x83b0
-+ .byte 0x1
-+ .long 0x28ec
-+ .uleb128 0x6
-+ .long 0x28ec
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x83a0
-+ .uleb128 0x11
-+ .long 0x83cb
-+ .byte 0x1
-+ .long 0x28ec
-+ .uleb128 0x6
-+ .long 0x60d1
-+ .uleb128 0x6
-+ .long 0x160b
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x83b6
-+ .uleb128 0x11
-+ .long 0x83f5
-+ .byte 0x1
-+ .long 0x28ec
-+ .uleb128 0x6
-+ .long 0x60d1
-+ .uleb128 0x6
-+ .long 0x160b
-+ .uleb128 0x6
-+ .long 0x160b
-+ .uleb128 0x6
-+ .long 0x833a
-+ .uleb128 0x6
-+ .long 0x160b
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x83d1
-+ .uleb128 0x11
-+ .long 0x841f
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x7a6e
-+ .uleb128 0x6
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x7f2
-+ .uleb128 0x6
-+ .long 0x160b
-+ .uleb128 0x6
-+ .long 0x28f8
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x83fb
-+ .uleb128 0x7
-+ .long .LASF889
-+ .byte 0x3e
-+ .byte 0x19
-+ .long 0x8430
-+ .uleb128 0x11
-+ .long 0x8445
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x160b
-+ .uleb128 0x6
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x8425
-+ .uleb128 0x5
-+ .long 0x845c
-+ .byte 0x1
-+ .uleb128 0x6
-+ .long 0x4521
-+ .uleb128 0x6
-+ .long 0x2d82
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x844b
-+ .uleb128 0x9
-+ .long 0x8487
-+ .byte 0x4
-+ .byte 0x19
-+ .byte 0x1b
-+ .uleb128 0xa
-+ .long .LASF1497
-+ .byte 0x19
-+ .byte 0x1c
-+ .long 0x53
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF1498
-+ .byte 0x19
-+ .byte 0x1d
-+ .long 0x53
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x2
-+ .byte 0x0
-+ .uleb128 0xc
-+ .long 0x84a0
-+ .byte 0x4
-+ .byte 0x19
-+ .byte 0x16
-+ .uleb128 0xe
-+ .long .LASF1499
-+ .byte 0x19
-+ .byte 0x17
-+ .long 0x16c4
-+ .uleb128 0xd
-+ .long 0x8462
-+ .byte 0x0
-+ .uleb128 0x9
-+ .long 0x84c5
-+ .byte 0x8
-+ .byte 0x19
-+ .byte 0x21
-+ .uleb128 0xa
-+ .long .LASF315
-+ .byte 0x19
-+ .byte 0x22
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF1500
-+ .byte 0x19
-+ .byte 0x29
-+ .long 0x6e96
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .byte 0x0
-+ .uleb128 0x9
-+ .long 0x84ea
-+ .byte 0x8
-+ .byte 0x19
-+ .byte 0x34
-+ .uleb128 0xa
-+ .long .LASF1501
-+ .byte 0x19
-+ .byte 0x35
-+ .long 0x84ea
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF1502
-+ .byte 0x19
-+ .byte 0x36
-+ .long 0x2ea2
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x160b
-+ .uleb128 0x9
-+ .long 0x8507
-+ .byte 0x4
-+ .byte 0x19
-+ .byte 0x38
-+ .uleb128 0xa
-+ .long .LASF1503
-+ .byte 0x19
-+ .byte 0x39
-+ .long 0x2d82
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .byte 0x0
-+ .uleb128 0xc
-+ .long 0x852a
-+ .byte 0x8
-+ .byte 0x19
-+ .byte 0x20
-+ .uleb128 0xd
-+ .long 0x84a0
-+ .uleb128 0x26
-+ .string "ptl"
-+ .byte 0x19
-+ .byte 0x32
-+ .long 0x1680
-+ .uleb128 0xd
-+ .long 0x84c5
-+ .uleb128 0xd
-+ .long 0x84f0
-+ .byte 0x0
-+ .uleb128 0xc
-+ .long 0x8549
-+ .byte 0x4
-+ .byte 0x19
-+ .byte 0x3c
-+ .uleb128 0xe
-+ .long .LASF746
-+ .byte 0x19
-+ .byte 0x3d
-+ .long 0x2f
-+ .uleb128 0xe
-+ .long .LASF1504
-+ .byte 0x19
-+ .byte 0x3e
-+ .long 0x160b
-+ .byte 0x0
-+ .uleb128 0x9
-+ .long 0x857c
-+ .byte 0x10
-+ .byte 0x15
-+ .byte 0x51
-+ .uleb128 0xa
-+ .long .LASF509
-+ .byte 0x15
-+ .byte 0x52
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF205
-+ .byte 0x15
-+ .byte 0x53
-+ .long 0x160b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF600
-+ .byte 0x15
-+ .byte 0x54
-+ .long 0x3f9c
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .byte 0x0
-+ .uleb128 0xc
-+ .long 0x859b
-+ .byte 0x10
-+ .byte 0x15
-+ .byte 0x50
-+ .uleb128 0xe
-+ .long .LASF1505
-+ .byte 0x15
-+ .byte 0x55
-+ .long 0x8549
-+ .uleb128 0xe
-+ .long .LASF1100
-+ .byte 0x15
-+ .byte 0x57
-+ .long 0x5ced
-+ .byte 0x0
-+ .uleb128 0x21
-+ .long .LASF833
-+ .byte 0x1
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x859b
-+ .uleb128 0xf
-+ .long 0x8608
-+ .long .LASF1506
-+ .byte 0x18
-+ .byte 0x15
-+ .byte 0x64
-+ .uleb128 0xa
-+ .long .LASF1160
-+ .byte 0x15
-+ .byte 0xca
-+ .long 0x861a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF1507
-+ .byte 0x15
-+ .byte 0xcb
-+ .long 0x861a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0xa
-+ .long .LASF1508
-+ .byte 0x15
-+ .byte 0xcc
-+ .long 0x863a
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF1509
-+ .byte 0x15
-+ .byte 0xcd
-+ .long 0x8655
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xa
-+ .long .LASF1510
-+ .byte 0x15
-+ .byte 0xce
-+ .long 0x8684
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xa
-+ .long .LASF1511
-+ .byte 0x15
-+ .byte 0xd2
-+ .long 0x869f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x85a7
-+ .uleb128 0x5
-+ .long 0x861a
-+ .byte 0x1
-+ .uleb128 0x6
-+ .long 0x3f9c
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x860e
-+ .uleb128 0x11
-+ .long 0x863a
-+ .byte 0x1
-+ .long 0x2d82
-+ .uleb128 0x6
-+ .long 0x3f9c
-+ .uleb128 0x6
-+ .long 0x2f
-+ .uleb128 0x6
-+ .long 0x4413
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x8620
-+ .uleb128 0x11
-+ .long 0x8655
-+ .byte 0x1
-+ .long 0x2f
-+ .uleb128 0x6
-+ .long 0x3f9c
-+ .uleb128 0x6
-+ .long 0x2f
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x8640
-+ .uleb128 0x11
-+ .long 0x8684
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x3f9c
-+ .uleb128 0x6
-+ .long 0x2f
-+ .uleb128 0x6
-+ .long 0x2f
-+ .uleb128 0x6
-+ .long 0x36e
-+ .uleb128 0x6
-+ .long 0x2f
-+ .uleb128 0x6
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x865b
-+ .uleb128 0x11
-+ .long 0x869f
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x3f9c
-+ .uleb128 0x6
-+ .long 0x2d82
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x868a
-+ .uleb128 0xf
-+ .long 0x86c0
-+ .long .LASF1512
-+ .byte 0x7c
-+ .byte 0x6e
-+ .byte 0x36
-+ .uleb128 0xa
-+ .long .LASF367
-+ .byte 0x6e
-+ .byte 0x37
-+ .long 0x86c0
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .byte 0x0
-+ .uleb128 0x12
-+ .long 0x86d0
-+ .long 0x2f
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x1e
-+ .byte 0x0
-+ .uleb128 0xf
-+ .long 0x8723
-+ .long .LASF367
-+ .byte 0x18
-+ .byte 0x57
-+ .byte 0x1d
-+ .uleb128 0xa
-+ .long .LASF1360
-+ .byte 0x57
-+ .byte 0x1e
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0xa
-+ .long .LASF1513
-+ .byte 0x57
-+ .byte 0x1f
-+ .long 0x160b
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0xa
-+ .long .LASF322
-+ .byte 0x57
-+ .byte 0x20
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .uleb128 0xa
-+ .long .LASF1514
-+ .byte 0x57
-+ .byte 0x21
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x10
-+ .uleb128 0xa
-+ .long .LASF161
-+ .byte 0x57
-+ .byte 0x22
-+ .long 0x15f9
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x14
-+ .byte 0x0
-+ .uleb128 0x1a
-+ .long 0x873f
-+ .long .LASF1515
-+ .value 0x200
-+ .byte 0x1
-+ .byte 0x3d
-+ .uleb128 0xb
-+ .string "vec"
-+ .byte 0x1
-+ .byte 0x3e
-+ .long 0x873f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .byte 0x0
-+ .uleb128 0x12
-+ .long 0x874f
-+ .long 0x17bc
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x3f
-+ .byte 0x0
-+ .uleb128 0x7
-+ .long .LASF1516
-+ .byte 0x1
-+ .byte 0x3f
-+ .long 0x8723
-+ .uleb128 0x1a
-+ .long 0x8776
-+ .long .LASF1517
-+ .value 0x800
-+ .byte 0x1
-+ .byte 0x41
-+ .uleb128 0xb
-+ .string "vec"
-+ .byte 0x1
-+ .byte 0x42
-+ .long 0x8776
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .byte 0x0
-+ .uleb128 0x12
-+ .long 0x8786
-+ .long 0x17bc
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0xff
-+ .byte 0x0
-+ .uleb128 0x7
-+ .long .LASF1518
-+ .byte 0x1
-+ .byte 0x43
-+ .long 0x875a
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x3728
-+ .uleb128 0x7
-+ .long .LASF1519
-+ .byte 0x1
-+ .byte 0x50
-+ .long 0x378d
-+ .uleb128 0x15
-+ .long 0x87eb
-+ .long .LASF1520
-+ .byte 0x10
-+ .byte 0x1
-+ .value 0x3a6
-+ .uleb128 0x17
-+ .string "pc"
-+ .byte 0x1
-+ .value 0x3a7
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x0
-+ .uleb128 0x16
-+ .long .LASF1521
-+ .byte 0x1
-+ .value 0x3a8
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x4
-+ .uleb128 0x16
-+ .long .LASF322
-+ .byte 0x1
-+ .value 0x3a9
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0x8
-+ .uleb128 0x16
-+ .long .LASF1522
-+ .byte 0x1
-+ .value 0x3aa
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x23
-+ .uleb128 0xc
-+ .byte 0x0
-+ .uleb128 0x32
-+ .long .LASF1548
-+ .byte 0x6
-+ .byte 0x23
-+ .byte 0x1
-+ .byte 0x3
-+ .uleb128 0x33
-+ .long 0x8823
-+ .long .LASF1523
-+ .byte 0x2
-+ .byte 0x2e
-+ .byte 0x1
-+ .byte 0x3
-+ .uleb128 0x34
-+ .string "new"
-+ .byte 0x2
-+ .byte 0x2b
-+ .long 0x17e5
-+ .uleb128 0x35
-+ .long .LASF308
-+ .byte 0x2
-+ .byte 0x2c
-+ .long 0x17e5
-+ .uleb128 0x35
-+ .long .LASF307
-+ .byte 0x2
-+ .byte 0x2d
-+ .long 0x17e5
-+ .byte 0x0
-+ .uleb128 0x33
-+ .long 0x8847
-+ .long .LASF1524
-+ .byte 0x2
-+ .byte 0xd9
-+ .byte 0x1
-+ .byte 0x3
-+ .uleb128 0x34
-+ .string "old"
-+ .byte 0x2
-+ .byte 0xd7
-+ .long 0x17e5
-+ .uleb128 0x34
-+ .string "new"
-+ .byte 0x2
-+ .byte 0xd8
-+ .long 0x17e5
-+ .byte 0x0
-+ .uleb128 0x33
-+ .long 0x8860
-+ .long .LASF1525
-+ .byte 0x2
-+ .byte 0x1f
-+ .byte 0x1
-+ .byte 0x3
-+ .uleb128 0x35
-+ .long .LASF509
-+ .byte 0x2
-+ .byte 0x1e
-+ .long 0x17e5
-+ .byte 0x0
-+ .uleb128 0x36
-+ .long 0x887d
-+ .long .LASF1526
-+ .byte 0x1
-+ .byte 0x5f
-+ .byte 0x1
-+ .long 0x77
-+ .byte 0x3
-+ .uleb128 0x35
-+ .long .LASF735
-+ .byte 0x1
-+ .byte 0x5e
-+ .long 0x887d
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x8797
-+ .uleb128 0x33
-+ .long 0x88a8
-+ .long .LASF1527
-+ .byte 0x2
-+ .byte 0x55
-+ .byte 0x1
-+ .byte 0x3
-+ .uleb128 0x34
-+ .string "new"
-+ .byte 0x2
-+ .byte 0x54
-+ .long 0x17e5
-+ .uleb128 0x35
-+ .long .LASF600
-+ .byte 0x2
-+ .byte 0x54
-+ .long 0x17e5
-+ .uleb128 0x37
-+ .byte 0x0
-+ .uleb128 0x33
-+ .long 0x88cc
-+ .long .LASF1528
-+ .byte 0x2
-+ .byte 0x9c
-+ .byte 0x1
-+ .byte 0x3
-+ .uleb128 0x35
-+ .long .LASF308
-+ .byte 0x2
-+ .byte 0x9b
-+ .long 0x17e5
-+ .uleb128 0x35
-+ .long .LASF307
-+ .byte 0x2
-+ .byte 0x9b
-+ .long 0x17e5
-+ .byte 0x0
-+ .uleb128 0x33
-+ .long 0x88f2
-+ .long .LASF1529
-+ .byte 0x2
-+ .byte 0xe2
-+ .byte 0x1
-+ .byte 0x3
-+ .uleb128 0x34
-+ .string "old"
-+ .byte 0x2
-+ .byte 0xe0
-+ .long 0x17e5
-+ .uleb128 0x34
-+ .string "new"
-+ .byte 0x2
-+ .byte 0xe1
-+ .long 0x17e5
-+ .uleb128 0x37
-+ .uleb128 0x37
-+ .byte 0x0
-+ .uleb128 0x36
-+ .long 0x890f
-+ .long .LASF1530
-+ .byte 0x1
-+ .byte 0x64
-+ .byte 0x1
-+ .long 0x887d
-+ .byte 0x3
-+ .uleb128 0x35
-+ .long .LASF735
-+ .byte 0x1
-+ .byte 0x63
-+ .long 0x887d
-+ .byte 0x0
-+ .uleb128 0x36
-+ .long 0x8936
-+ .long .LASF1531
-+ .byte 0xc
-+ .byte 0xf5
-+ .byte 0x1
-+ .long 0x21
-+ .byte 0x3
-+ .uleb128 0x34
-+ .string "nr"
-+ .byte 0xc
-+ .byte 0xf4
-+ .long 0x21
-+ .uleb128 0x35
-+ .long .LASF1532
-+ .byte 0xc
-+ .byte 0xf4
-+ .long 0x8936
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x893c
-+ .uleb128 0x14
-+ .long 0x8941
-+ .uleb128 0x2d
-+ .long 0x2f
-+ .uleb128 0x36
-+ .long 0x8978
-+ .long .LASF1533
-+ .byte 0xc
-+ .byte 0xfa
-+ .byte 0x1
-+ .long 0x21
-+ .byte 0x3
-+ .uleb128 0x34
-+ .string "nr"
-+ .byte 0xc
-+ .byte 0xf9
-+ .long 0x21
-+ .uleb128 0x35
-+ .long .LASF1532
-+ .byte 0xc
-+ .byte 0xf9
-+ .long 0x8936
-+ .uleb128 0x38
-+ .long .LASF1538
-+ .byte 0xc
-+ .byte 0xfb
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x36
-+ .long 0x89a9
-+ .long .LASF1534
-+ .byte 0xf
-+ .byte 0x40
-+ .byte 0x1
-+ .long 0x21
-+ .byte 0x3
-+ .uleb128 0x34
-+ .string "ti"
-+ .byte 0xf
-+ .byte 0x3f
-+ .long 0x2dd9
-+ .uleb128 0x35
-+ .long .LASF1535
-+ .byte 0xf
-+ .byte 0x3f
-+ .long 0x21
-+ .uleb128 0x37
-+ .uleb128 0x39
-+ .uleb128 0x39
-+ .uleb128 0x3a
-+ .long 0x896c
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x3b
-+ .long 0x89e0
-+ .long .LASF1536
-+ .byte 0xb
-+ .value 0x620
-+ .byte 0x1
-+ .long 0x21
-+ .byte 0x3
-+ .uleb128 0x3c
-+ .string "tsk"
-+ .byte 0xb
-+ .value 0x61f
-+ .long 0x15f9
-+ .uleb128 0x3d
-+ .long .LASF1535
-+ .byte 0xb
-+ .value 0x61f
-+ .long 0x21
-+ .uleb128 0x39
-+ .uleb128 0x37
-+ .uleb128 0x39
-+ .uleb128 0x39
-+ .uleb128 0x3a
-+ .long 0x896c
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x36
-+ .long 0x8a1a
-+ .long .LASF1537
-+ .byte 0x3
-+ .byte 0x1d
-+ .byte 0x1
-+ .long 0x160b
-+ .byte 0x3
-+ .uleb128 0x35
-+ .long .LASF328
-+ .byte 0x3
-+ .byte 0x1c
-+ .long 0x1fe
-+ .uleb128 0x35
-+ .long .LASF53
-+ .byte 0x3
-+ .byte 0x1c
-+ .long 0x240
-+ .uleb128 0x3e
-+ .long .LASF1596
-+ .byte 0x3
-+ .byte 0x2b
-+ .uleb128 0x39
-+ .uleb128 0x3f
-+ .string "i"
-+ .byte 0x3
-+ .byte 0x1f
-+ .long 0x21
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x36
-+ .long 0x8a5d
-+ .long .LASF1539
-+ .byte 0x54
-+ .byte 0xc3
-+ .byte 0x1
-+ .long 0x160b
-+ .byte 0x3
-+ .uleb128 0x35
-+ .long .LASF328
-+ .byte 0x54
-+ .byte 0xc2
-+ .long 0x1fe
-+ .uleb128 0x35
-+ .long .LASF53
-+ .byte 0x54
-+ .byte 0xc2
-+ .long 0x240
-+ .uleb128 0x35
-+ .long .LASF400
-+ .byte 0x54
-+ .byte 0xc2
-+ .long 0x21
-+ .uleb128 0x39
-+ .uleb128 0x39
-+ .uleb128 0x40
-+ .long 0x8a07
-+ .uleb128 0x39
-+ .uleb128 0x3a
-+ .long 0x8a0f
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x3b
-+ .long 0x8aaa
-+ .long .LASF1540
-+ .byte 0x4
-+ .value 0x1a3
-+ .byte 0x1
-+ .long 0x160b
-+ .byte 0x3
-+ .uleb128 0x3c
-+ .string "s"
-+ .byte 0x4
-+ .value 0x1a2
-+ .long 0x160b
-+ .uleb128 0x3d
-+ .long .LASF1541
-+ .byte 0x4
-+ .value 0x1a2
-+ .long 0x2f
-+ .uleb128 0x3d
-+ .long .LASF322
-+ .byte 0x4
-+ .value 0x1a2
-+ .long 0x1fe
-+ .uleb128 0x39
-+ .uleb128 0x41
-+ .string "d0"
-+ .byte 0x4
-+ .value 0x1bd
-+ .long 0x21
-+ .uleb128 0x41
-+ .string "d1"
-+ .byte 0x4
-+ .value 0x1bd
-+ .long 0x21
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x33
-+ .long 0x8ac3
-+ .long .LASF1542
-+ .byte 0xa
-+ .byte 0x7b
-+ .byte 0x1
-+ .byte 0x3
-+ .uleb128 0x35
-+ .long .LASF760
-+ .byte 0xa
-+ .byte 0x7a
-+ .long 0x8791
-+ .byte 0x0
-+ .uleb128 0x33
-+ .long 0x8ae7
-+ .long .LASF1543
-+ .byte 0x1
-+ .byte 0xfb
-+ .byte 0x1
-+ .byte 0x3
-+ .uleb128 0x35
-+ .long .LASF735
-+ .byte 0x1
-+ .byte 0xf9
-+ .long 0x887d
-+ .uleb128 0x35
-+ .long .LASF760
-+ .byte 0x1
-+ .byte 0xfa
-+ .long 0x8791
-+ .byte 0x0
-+ .uleb128 0x42
-+ .long 0x8b1b
-+ .long .LASF1544
-+ .byte 0x1
-+ .value 0x153
-+ .byte 0x1
-+ .byte 0x3
-+ .uleb128 0x3d
-+ .long .LASF760
-+ .byte 0x1
-+ .value 0x151
-+ .long 0x8791
-+ .uleb128 0x3d
-+ .long .LASF1545
-+ .byte 0x1
-+ .value 0x152
-+ .long 0x21
-+ .uleb128 0x43
-+ .long .LASF376
-+ .byte 0x1
-+ .value 0x154
-+ .long 0x17e5
-+ .uleb128 0x37
-+ .byte 0x0
-+ .uleb128 0x33
-+ .long 0x8b34
-+ .long .LASF1546
-+ .byte 0x5
-+ .byte 0x6b
-+ .byte 0x1
-+ .byte 0x3
-+ .uleb128 0x35
-+ .long .LASF285
-+ .byte 0x5
-+ .byte 0x6a
-+ .long 0x8b34
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x163c
-+ .uleb128 0x33
-+ .long 0x8b49
-+ .long .LASF1547
-+ .byte 0x6
-+ .byte 0x47
-+ .byte 0x1
-+ .byte 0x3
-+ .uleb128 0x37
-+ .byte 0x0
-+ .uleb128 0x44
-+ .long .LASF1549
-+ .byte 0x10
-+ .byte 0x5c
-+ .byte 0x1
-+ .long 0x2dd9
-+ .byte 0x3
-+ .uleb128 0x3b
-+ .long 0x8b75
-+ .long .LASF1550
-+ .byte 0x2
-+ .value 0x12b
-+ .byte 0x1
-+ .long 0x21
-+ .byte 0x3
-+ .uleb128 0x3d
-+ .long .LASF600
-+ .byte 0x2
-+ .value 0x12a
-+ .long 0x8b75
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x8b7b
-+ .uleb128 0x14
-+ .long 0x17bc
-+ .uleb128 0x36
-+ .long 0x8ba7
-+ .long .LASF1551
-+ .byte 0x7
-+ .byte 0x57
-+ .byte 0x1
-+ .long 0x77
-+ .byte 0x3
-+ .uleb128 0x34
-+ .string "sl"
-+ .byte 0x7
-+ .byte 0x56
-+ .long 0x8ba7
-+ .uleb128 0x3f
-+ .string "ret"
-+ .byte 0x7
-+ .byte 0x58
-+ .long 0x77
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x8bad
-+ .uleb128 0x14
-+ .long 0x170a
-+ .uleb128 0x36
-+ .long 0x8bd8
-+ .long .LASF1552
-+ .byte 0x7
-+ .byte 0x66
-+ .byte 0x1
-+ .long 0x21
-+ .byte 0x3
-+ .uleb128 0x34
-+ .string "sl"
-+ .byte 0x7
-+ .byte 0x65
-+ .long 0x8ba7
-+ .uleb128 0x34
-+ .string "iv"
-+ .byte 0x7
-+ .byte 0x65
-+ .long 0x77
-+ .byte 0x0
-+ .uleb128 0x42
-+ .long 0x8c11
-+ .long .LASF1553
-+ .byte 0x1
-+ .value 0x354
-+ .byte 0x1
-+ .byte 0x3
-+ .uleb128 0x3d
-+ .long .LASF1554
-+ .byte 0x1
-+ .value 0x353
-+ .long 0x2f
-+ .uleb128 0x43
-+ .long .LASF1555
-+ .byte 0x1
-+ .value 0x355
-+ .long 0x2f
-+ .uleb128 0x45
-+ .long .LASF322
-+ .byte 0x1
-+ .value 0x356
-+ .long 0x21
-+ .byte 0x5
-+ .byte 0x3
-+ .long count.18791
-+ .byte 0x0
-+ .uleb128 0x46
-+ .long .LASF1556
-+ .byte 0x8
-+ .value 0x1f0
-+ .byte 0x1
-+ .byte 0x3
-+ .uleb128 0x36
-+ .long 0x8c38
-+ .long .LASF1557
-+ .byte 0xa
-+ .byte 0x3e
-+ .byte 0x1
-+ .long 0x21
-+ .byte 0x3
-+ .uleb128 0x35
-+ .long .LASF760
-+ .byte 0xa
-+ .byte 0x3d
-+ .long 0x8c38
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x8c3e
-+ .uleb128 0x14
-+ .long 0x3728
-+ .uleb128 0x33
-+ .long 0x8c5c
-+ .long .LASF1558
-+ .byte 0xa
-+ .byte 0x7f
-+ .byte 0x1
-+ .byte 0x3
-+ .uleb128 0x35
-+ .long .LASF760
-+ .byte 0xa
-+ .byte 0x7e
-+ .long 0x8791
-+ .byte 0x0
-+ .uleb128 0x33
-+ .long 0x8c81
-+ .long .LASF1559
-+ .byte 0x1
-+ .byte 0x70
-+ .byte 0x1
-+ .byte 0x3
-+ .uleb128 0x35
-+ .long .LASF760
-+ .byte 0x1
-+ .byte 0x6f
-+ .long 0x8791
-+ .uleb128 0x35
-+ .long .LASF1560
-+ .byte 0x1
-+ .byte 0x6f
-+ .long 0x887d
-+ .uleb128 0x37
-+ .byte 0x0
-+ .uleb128 0x36
-+ .long 0x8ca0
-+ .long .LASF1561
-+ .byte 0x9
-+ .byte 0xb
-+ .byte 0x1
-+ .long 0x15f9
-+ .byte 0x3
-+ .uleb128 0x39
-+ .uleb128 0x38
-+ .long .LASF1562
-+ .byte 0x9
-+ .byte 0xc
-+ .long 0x15f9
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x33
-+ .long 0x8ccf
-+ .long .LASF1563
-+ .byte 0xa
-+ .byte 0x2d
-+ .byte 0x1
-+ .byte 0x3
-+ .uleb128 0x35
-+ .long .LASF760
-+ .byte 0xa
-+ .byte 0x2a
-+ .long 0x8791
-+ .uleb128 0x35
-+ .long .LASF733
-+ .byte 0xa
-+ .byte 0x2b
-+ .long 0x3787
-+ .uleb128 0x35
-+ .long .LASF734
-+ .byte 0xa
-+ .byte 0x2c
-+ .long 0x2f
-+ .byte 0x0
-+ .uleb128 0x47
-+ .long 0x8d1f
-+ .byte 0x1
-+ .long .LASF1565
-+ .byte 0x1
-+ .byte 0x8a
-+ .byte 0x1
-+ .long 0x2f
-+ .long .LFB883
-+ .long .LFE883
-+ .long .LLST0
-+ .uleb128 0x48
-+ .string "j"
-+ .byte 0x1
-+ .byte 0x89
-+ .long 0x2f
-+ .long .LLST1
-+ .uleb128 0x48
-+ .string "cpu"
-+ .byte 0x1
-+ .byte 0x89
-+ .long 0x21
-+ .long .LLST2
-+ .uleb128 0x3f
-+ .string "rem"
-+ .byte 0x1
-+ .byte 0x8b
-+ .long 0x21
-+ .uleb128 0x38
-+ .long .LASF1564
-+ .byte 0x1
-+ .byte 0x8c
-+ .long 0x2f
-+ .byte 0x0
-+ .uleb128 0x49
-+ .long 0x8d58
-+ .byte 0x1
-+ .long .LASF1566
-+ .byte 0x1
-+ .byte 0xc3
-+ .byte 0x1
-+ .long 0x2f
-+ .long .LFB884
-+ .long .LFE884
-+ .byte 0x2
-+ .byte 0x74
-+ .sleb128 4
-+ .uleb128 0x48
-+ .string "j"
-+ .byte 0x1
-+ .byte 0xc2
-+ .long 0x2f
-+ .long .LLST4
-+ .uleb128 0x48
-+ .string "cpu"
-+ .byte 0x1
-+ .byte 0xc2
-+ .long 0x21
-+ .long .LLST5
-+ .byte 0x0
-+ .uleb128 0x49
-+ .long 0x8d9b
-+ .byte 0x1
-+ .long .LASF1567
-+ .byte 0x1
-+ .byte 0xde
-+ .byte 0x1
-+ .long 0x2f
-+ .long .LFB885
-+ .long .LFE885
-+ .byte 0x2
-+ .byte 0x74
-+ .sleb128 4
-+ .uleb128 0x48
-+ .string "j"
-+ .byte 0x1
-+ .byte 0xdd
-+ .long 0x2f
-+ .long .LLST7
-+ .uleb128 0x4a
-+ .long .LBB179
-+ .long .LBE179
-+ .uleb128 0x4b
-+ .long .LASF1562
-+ .byte 0x1
-+ .byte 0xdf
-+ .long 0x21
-+ .long .LLST8
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x49
-+ .long 0x8dde
-+ .byte 0x1
-+ .long .LASF1568
-+ .byte 0x1
-+ .byte 0xf3
-+ .byte 0x1
-+ .long 0x2f
-+ .long .LFB886
-+ .long .LFE886
-+ .byte 0x2
-+ .byte 0x74
-+ .sleb128 4
-+ .uleb128 0x48
-+ .string "j"
-+ .byte 0x1
-+ .byte 0xf2
-+ .long 0x2f
-+ .long .LLST10
-+ .uleb128 0x4a
-+ .long .LBB180
-+ .long .LBE180
-+ .uleb128 0x4b
-+ .long .LASF1562
-+ .byte 0x1
-+ .byte 0xf4
-+ .long 0x21
-+ .long .LLST11
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x4c
-+ .long 0x8eda
-+ .long .LASF1569
-+ .byte 0x1
-+ .value 0x102
-+ .byte 0x1
-+ .long .LFB888
-+ .long .LFE888
-+ .long .LLST12
-+ .uleb128 0x4d
-+ .long .LASF735
-+ .byte 0x1
-+ .value 0x101
-+ .long 0x887d
-+ .long .LLST13
-+ .uleb128 0x4e
-+ .long .LASF760
-+ .byte 0x1
-+ .value 0x101
-+ .long 0x8791
-+ .byte 0x1
-+ .byte 0x52
-+ .uleb128 0x4f
-+ .long .LASF732
-+ .byte 0x1
-+ .value 0x103
-+ .long 0x2f
-+ .long .LLST14
-+ .uleb128 0x50
-+ .string "idx"
-+ .byte 0x1
-+ .value 0x104
-+ .long 0x2f
-+ .long .LLST15
-+ .uleb128 0x50
-+ .string "vec"
-+ .byte 0x1
-+ .value 0x105
-+ .long 0x17e5
-+ .long .LLST16
-+ .uleb128 0x51
-+ .long 0x8e5d
-+ .long .LBB181
-+ .long .LBE181
-+ .uleb128 0x41
-+ .string "i"
-+ .byte 0x1
-+ .value 0x10b
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x51
-+ .long 0x8e75
-+ .long .LBB182
-+ .long .LBE182
-+ .uleb128 0x41
-+ .string "i"
-+ .byte 0x1
-+ .value 0x10e
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x51
-+ .long 0x8e8d
-+ .long .LBB183
-+ .long .LBE183
-+ .uleb128 0x41
-+ .string "i"
-+ .byte 0x1
-+ .value 0x111
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x51
-+ .long 0x8ea5
-+ .long .LBB184
-+ .long .LBE184
-+ .uleb128 0x41
-+ .string "i"
-+ .byte 0x1
-+ .value 0x11a
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x52
-+ .long 0x8883
-+ .long .Ldebug_ranges0+0x0
-+ .byte 0x1
-+ .value 0x128
-+ .uleb128 0x53
-+ .long 0x889b
-+ .uleb128 0x53
-+ .long 0x8890
-+ .uleb128 0x54
-+ .long 0x87f4
-+ .long .Ldebug_ranges0+0x18
-+ .byte 0x2
-+ .byte 0x56
-+ .uleb128 0x53
-+ .long 0x8817
-+ .uleb128 0x55
-+ .long 0x880c
-+ .byte 0x1
-+ .byte 0x50
-+ .uleb128 0x53
-+ .long 0x8801
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x56
-+ .long 0x8f30
-+ .byte 0x1
-+ .long .LASF1570
-+ .byte 0x1
-+ .value 0x13f
-+ .byte 0x1
-+ .long .LFB889
-+ .long .LFE889
-+ .byte 0x2
-+ .byte 0x74
-+ .sleb128 4
-+ .uleb128 0x4e
-+ .long .LASF760
-+ .byte 0x1
-+ .value 0x13e
-+ .long 0x8791
-+ .byte 0x1
-+ .byte 0x50
-+ .uleb128 0x4a
-+ .long .LBB193
-+ .long .LBE193
-+ .uleb128 0x43
-+ .long .LASF1571
-+ .byte 0x1
-+ .value 0x141
-+ .long 0x2f
-+ .uleb128 0x4a
-+ .long .LBB194
-+ .long .LBE194
-+ .uleb128 0x45
-+ .long .LASF1562
-+ .byte 0x1
-+ .value 0x141
-+ .long 0x2f
-+ .byte 0x1
-+ .byte 0x51
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x33
-+ .long 0x8f49
-+ .long .LASF1572
-+ .byte 0x1
-+ .byte 0x69
-+ .byte 0x1
-+ .byte 0x3
-+ .uleb128 0x35
-+ .long .LASF760
-+ .byte 0x1
-+ .byte 0x68
-+ .long 0x8791
-+ .byte 0x0
-+ .uleb128 0x57
-+ .long 0x8f8a
-+ .byte 0x1
-+ .long .LASF1573
-+ .byte 0x1
-+ .value 0x14b
-+ .byte 0x1
-+ .long .LFB890
-+ .long .LFE890
-+ .long .LLST18
-+ .uleb128 0x4d
-+ .long .LASF760
-+ .byte 0x1
-+ .value 0x14a
-+ .long 0x8791
-+ .long .LLST19
-+ .uleb128 0x58
-+ .long 0x8f30
-+ .long .LBB197
-+ .long .LBE197
-+ .byte 0x1
-+ .value 0x14d
-+ .uleb128 0x53
-+ .long 0x8f3d
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x59
-+ .long 0x909a
-+ .long .LASF1574
-+ .byte 0x1
-+ .value 0x245
-+ .byte 0x1
-+ .long 0x21
-+ .long .LFB899
-+ .long .LFE899
-+ .long .LLST20
-+ .uleb128 0x4d
-+ .long .LASF735
-+ .byte 0x1
-+ .value 0x244
-+ .long 0x887d
-+ .long .LLST21
-+ .uleb128 0x5a
-+ .string "tv"
-+ .byte 0x1
-+ .value 0x244
-+ .long 0x909a
-+ .long .LLST22
-+ .uleb128 0x4d
-+ .long .LASF746
-+ .byte 0x1
-+ .value 0x244
-+ .long 0x21
-+ .long .LLST23
-+ .uleb128 0x4f
-+ .long .LASF760
-+ .byte 0x1
-+ .value 0x247
-+ .long 0x8791
-+ .long .LLST24
-+ .uleb128 0x50
-+ .string "tmp"
-+ .byte 0x1
-+ .value 0x247
-+ .long 0x8791
-+ .long .LLST25
-+ .uleb128 0x45
-+ .long .LASF1575
-+ .byte 0x1
-+ .value 0x248
-+ .long 0x17bc
-+ .byte 0x2
-+ .byte 0x91
-+ .sleb128 -24
-+ .uleb128 0x5b
-+ .long 0x904f
-+ .long 0x88cc
-+ .long .Ldebug_ranges0+0x30
-+ .byte 0x1
-+ .value 0x24a
-+ .uleb128 0x53
-+ .long 0x88e4
-+ .uleb128 0x53
-+ .long 0x88d9
-+ .uleb128 0x5c
-+ .long 0x9039
-+ .long 0x8823
-+ .long .Ldebug_ranges0+0x48
-+ .byte 0x2
-+ .byte 0xe3
-+ .uleb128 0x53
-+ .long 0x883b
-+ .uleb128 0x53
-+ .long 0x8830
-+ .byte 0x0
-+ .uleb128 0x54
-+ .long 0x8847
-+ .long .Ldebug_ranges0+0x60
-+ .byte 0x2
-+ .byte 0xe4
-+ .uleb128 0x5d
-+ .long 0x8854
-+ .long .LLST26
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x51
-+ .long 0x9069
-+ .long .LBB207
-+ .long .LBE207
-+ .uleb128 0x43
-+ .long .LASF1576
-+ .byte 0x1
-+ .value 0x250
-+ .long 0x8b75
-+ .byte 0x0
-+ .uleb128 0x51
-+ .long 0x9083
-+ .long .LBB212
-+ .long .LBE212
-+ .uleb128 0x43
-+ .long .LASF1576
-+ .byte 0x1
-+ .value 0x250
-+ .long 0x8b75
-+ .byte 0x0
-+ .uleb128 0x4a
-+ .long .LBB213
-+ .long .LBE213
-+ .uleb128 0x43
-+ .long .LASF1576
-+ .byte 0x1
-+ .value 0x250
-+ .long 0x8b75
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x874f
-+ .uleb128 0x3b
-+ .long 0x916f
-+ .long .LASF1577
-+ .byte 0x1
-+ .value 0x4d1
-+ .byte 0x1
-+ .long 0x21
-+ .byte 0x1
-+ .uleb128 0x3c
-+ .string "cpu"
-+ .byte 0x1
-+ .value 0x4d0
-+ .long 0x21
-+ .uleb128 0x41
-+ .string "j"
-+ .byte 0x1
-+ .value 0x4d2
-+ .long 0x21
-+ .uleb128 0x43
-+ .long .LASF735
-+ .byte 0x1
-+ .value 0x4d3
-+ .long 0x887d
-+ .uleb128 0x5e
-+ .long 0x9123
-+ .uleb128 0x5e
-+ .long 0x90eb
-+ .uleb128 0x43
-+ .long .LASF1578
-+ .byte 0x1
-+ .value 0x4e4
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x5e
-+ .long 0x90fd
-+ .uleb128 0x43
-+ .long .LASF1571
-+ .byte 0x1
-+ .value 0x4e9
-+ .long 0x2f
-+ .byte 0x0
-+ .uleb128 0x5e
-+ .long 0x9113
-+ .uleb128 0x39
-+ .uleb128 0x39
-+ .uleb128 0x40
-+ .long 0x8a07
-+ .uleb128 0x39
-+ .uleb128 0x3a
-+ .long 0x8a0f
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x37
-+ .uleb128 0x39
-+ .uleb128 0x39
-+ .uleb128 0x3a
-+ .long 0x8a92
-+ .uleb128 0x3a
-+ .long 0x8a9d
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x5e
-+ .long 0x9135
-+ .uleb128 0x43
-+ .long .LASF1571
-+ .byte 0x1
-+ .value 0x4f6
-+ .long 0x2f
-+ .byte 0x0
-+ .uleb128 0x37
-+ .uleb128 0x37
-+ .uleb128 0x37
-+ .uleb128 0x37
-+ .uleb128 0x37
-+ .uleb128 0x45
-+ .long .LASF1579
-+ .byte 0x1
-+ .value 0x4d7
-+ .long 0xbb
-+ .byte 0x5
-+ .byte 0x3
-+ .long boot_done.19029
-+ .uleb128 0x5f
-+ .long .LASF1580
-+ .long 0xa316
-+ .byte 0x1
-+ .byte 0x5
-+ .byte 0x3
-+ .long __func__.19031
-+ .uleb128 0x45
-+ .long .LASF1581
-+ .byte 0x1
-+ .value 0x4d4
-+ .long 0x46d1
-+ .byte 0x5
-+ .byte 0x3
-+ .long tvec_base_done.19028
-+ .byte 0x0
-+ .uleb128 0x59
-+ .long 0x933c
-+ .long .LASF1582
-+ .byte 0x1
-+ .value 0x538
-+ .byte 0x1
-+ .long 0x21
-+ .long .LFB923
-+ .long .LFE923
-+ .long .LLST27
-+ .uleb128 0x4d
-+ .long .LASF1583
-+ .byte 0x1
-+ .value 0x536
-+ .long 0x2e30
-+ .long .LLST28
-+ .uleb128 0x4d
-+ .long .LASF840
-+ .byte 0x1
-+ .value 0x537
-+ .long 0x2f
-+ .long .LLST29
-+ .uleb128 0x4d
-+ .long .LASF1584
-+ .byte 0x1
-+ .value 0x537
-+ .long 0x160b
-+ .long .LLST30
-+ .uleb128 0x41
-+ .string "cpu"
-+ .byte 0x1
-+ .value 0x539
-+ .long 0x5a
-+ .uleb128 0x58
-+ .long 0x90a0
-+ .long .LBB240
-+ .long .LBE240
-+ .byte 0x1
-+ .value 0x53d
-+ .uleb128 0x53
-+ .long 0x90b2
-+ .uleb128 0x60
-+ .long 0x9286
-+ .long .Ldebug_ranges0+0x78
-+ .uleb128 0x61
-+ .long 0x90be
-+ .long .LLST31
-+ .uleb128 0x61
-+ .long 0x90c8
-+ .long .LLST32
-+ .uleb128 0x62
-+ .long 0x9236
-+ .long 0x8a1a
-+ .long .LBB243
-+ .long .LBE243
-+ .byte 0x1
-+ .value 0x4dd
-+ .uleb128 0x53
-+ .long 0x8a41
-+ .uleb128 0x53
-+ .long 0x8a36
-+ .uleb128 0x53
-+ .long 0x8a2b
-+ .uleb128 0x63
-+ .long 0x89e0
-+ .long .LBB245
-+ .long .LBE245
-+ .byte 0x54
-+ .byte 0xc4
-+ .uleb128 0x53
-+ .long 0x89fc
-+ .uleb128 0x53
-+ .long 0x89f1
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x51
-+ .long 0x9249
-+ .long .LBB246
-+ .long .LBE246
-+ .uleb128 0x3a
-+ .long 0x90de
-+ .byte 0x0
-+ .uleb128 0x58
-+ .long 0x8a5d
-+ .long .LBB247
-+ .long .LBE247
-+ .byte 0x1
-+ .value 0x4e8
-+ .uleb128 0x53
-+ .long 0x8a85
-+ .uleb128 0x53
-+ .long 0x8a79
-+ .uleb128 0x53
-+ .long 0x8a6f
-+ .uleb128 0x4a
-+ .long .LBB249
-+ .long .LBE249
-+ .uleb128 0x61
-+ .long 0x8a92
-+ .long .LLST33
-+ .uleb128 0x61
-+ .long 0x8a9d
-+ .long .LLST34
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x51
-+ .long 0x9299
-+ .long .LBB252
-+ .long .LBE252
-+ .uleb128 0x3a
-+ .long 0x90f0
-+ .byte 0x0
-+ .uleb128 0x51
-+ .long 0x92ac
-+ .long .LBB256
-+ .long .LBE256
-+ .uleb128 0x3a
-+ .long 0x9128
-+ .byte 0x0
-+ .uleb128 0x5b
-+ .long 0x92c6
-+ .long 0x8847
-+ .long .Ldebug_ranges0+0xa8
-+ .byte 0x1
-+ .value 0x4fd
-+ .uleb128 0x5d
-+ .long 0x8854
-+ .long .LLST35
-+ .byte 0x0
-+ .uleb128 0x62
-+ .long 0x92e4
-+ .long 0x8847
-+ .long .LBB262
-+ .long .LBE262
-+ .byte 0x1
-+ .value 0x4fe
-+ .uleb128 0x5d
-+ .long 0x8854
-+ .long .LLST36
-+ .byte 0x0
-+ .uleb128 0x62
-+ .long 0x9302
-+ .long 0x8847
-+ .long .LBB264
-+ .long .LBE264
-+ .byte 0x1
-+ .value 0x4ff
-+ .uleb128 0x5d
-+ .long 0x8854
-+ .long .LLST37
-+ .byte 0x0
-+ .uleb128 0x62
-+ .long 0x9320
-+ .long 0x8847
-+ .long .LBB266
-+ .long .LBE266
-+ .byte 0x1
-+ .value 0x500
-+ .uleb128 0x5d
-+ .long 0x8854
-+ .long .LLST38
-+ .byte 0x0
-+ .uleb128 0x58
-+ .long 0x8847
-+ .long .LBB268
-+ .long .LBE268
-+ .byte 0x1
-+ .value 0x503
-+ .uleb128 0x5d
-+ .long 0x8854
-+ .long .LLST39
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x32
-+ .long .LASF1585
-+ .byte 0xa
-+ .byte 0x77
-+ .byte 0x1
-+ .byte 0x3
-+ .uleb128 0x56
-+ .long 0x9389
-+ .byte 0x1
-+ .long .LASF1586
-+ .byte 0x1
-+ .value 0x552
-+ .byte 0x1
-+ .long .LFB924
-+ .long .LFE924
-+ .byte 0x2
-+ .byte 0x74
-+ .sleb128 4
-+ .uleb128 0x50
-+ .string "err"
-+ .byte 0x1
-+ .value 0x553
-+ .long 0x21
-+ .long .LLST41
-+ .uleb128 0x4a
-+ .long .LBB273
-+ .long .LBE273
-+ .uleb128 0x4f
-+ .long .LASF1562
-+ .byte 0x1
-+ .value 0x554
-+ .long 0x21
-+ .long .LLST42
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x42
-+ .long 0x947c
-+ .long .LASF1587
-+ .byte 0x1
-+ .value 0x262
-+ .byte 0x1
-+ .byte 0x3
-+ .uleb128 0x3d
-+ .long .LASF735
-+ .byte 0x1
-+ .value 0x261
-+ .long 0x887d
-+ .uleb128 0x43
-+ .long .LASF760
-+ .byte 0x1
-+ .value 0x263
-+ .long 0x8791
-+ .uleb128 0x5e
-+ .long 0x943a
-+ .uleb128 0x43
-+ .long .LASF1588
-+ .byte 0x1
-+ .value 0x267
-+ .long 0x17bc
-+ .uleb128 0x43
-+ .long .LASF600
-+ .byte 0x1
-+ .value 0x268
-+ .long 0x17e5
-+ .uleb128 0x43
-+ .long .LASF746
-+ .byte 0x1
-+ .value 0x269
-+ .long 0x21
-+ .uleb128 0x5e
-+ .long 0x9430
-+ .uleb128 0x41
-+ .string "fn"
-+ .byte 0x1
-+ .value 0x276
-+ .long 0x3787
-+ .uleb128 0x43
-+ .long .LASF734
-+ .byte 0x1
-+ .value 0x277
-+ .long 0x2f
-+ .uleb128 0x5e
-+ .long 0x9406
-+ .uleb128 0x43
-+ .long .LASF1576
-+ .byte 0x1
-+ .value 0x279
-+ .long 0x8b75
-+ .byte 0x0
-+ .uleb128 0x5e
-+ .long 0x941b
-+ .uleb128 0x43
-+ .long .LASF163
-+ .byte 0x1
-+ .value 0x283
-+ .long 0x21
-+ .uleb128 0x37
-+ .uleb128 0x37
-+ .uleb128 0x37
-+ .byte 0x0
-+ .uleb128 0x37
-+ .uleb128 0x37
-+ .uleb128 0x5e
-+ .long 0x942b
-+ .uleb128 0x39
-+ .uleb128 0x3a
-+ .long 0x8b0d
-+ .uleb128 0x37
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x37
-+ .uleb128 0x39
-+ .uleb128 0x37
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x5e
-+ .long 0x9438
-+ .uleb128 0x37
-+ .uleb128 0x37
-+ .byte 0x0
-+ .uleb128 0x37
-+ .byte 0x0
-+ .uleb128 0x5e
-+ .long 0x9458
-+ .uleb128 0x43
-+ .long .LASF1589
-+ .byte 0x1
-+ .value 0x266
-+ .long 0x2f
-+ .uleb128 0x43
-+ .long .LASF1590
-+ .byte 0x1
-+ .value 0x266
-+ .long 0x8941
-+ .byte 0x0
-+ .uleb128 0x5e
-+ .long 0x9476
-+ .uleb128 0x43
-+ .long .LASF1589
-+ .byte 0x1
-+ .value 0x266
-+ .long 0x2f
-+ .uleb128 0x43
-+ .long .LASF1590
-+ .byte 0x1
-+ .value 0x266
-+ .long 0x2f
-+ .byte 0x0
-+ .uleb128 0x37
-+ .uleb128 0x37
-+ .uleb128 0x39
-+ .uleb128 0x37
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x4c
-+ .long 0x96cb
-+ .long .LASF1591
-+ .byte 0x1
-+ .value 0x368
-+ .byte 0x1
-+ .long .LFB904
-+ .long .LFE904
-+ .long .LLST43
-+ .uleb128 0x5a
-+ .string "h"
-+ .byte 0x1
-+ .value 0x367
-+ .long 0x5ce1
-+ .long .LLST44
-+ .uleb128 0x4f
-+ .long .LASF735
-+ .byte 0x1
-+ .value 0x369
-+ .long 0x887d
-+ .long .LLST45
-+ .uleb128 0x60
-+ .long 0x94c9
-+ .long .Ldebug_ranges0+0xc0
-+ .uleb128 0x43
-+ .long .LASF1571
-+ .byte 0x1
-+ .value 0x369
-+ .long 0x2f
-+ .byte 0x0
-+ .uleb128 0x51
-+ .long 0x94e7
-+ .long .LBB324
-+ .long .LBE324
-+ .uleb128 0x4f
-+ .long .LASF1562
-+ .byte 0x1
-+ .value 0x369
-+ .long 0x2f
-+ .long .LLST46
-+ .byte 0x0
-+ .uleb128 0x58
-+ .long 0x9389
-+ .long .LBB325
-+ .long .LBE325
-+ .byte 0x1
-+ .value 0x36e
-+ .uleb128 0x53
-+ .long 0x9397
-+ .uleb128 0x60
-+ .long 0x9527
-+ .long .Ldebug_ranges0+0xd8
-+ .uleb128 0x3a
-+ .long 0x93a3
-+ .uleb128 0x64
-+ .long .Ldebug_ranges0+0x100
-+ .uleb128 0x65
-+ .long 0x93b4
-+ .byte 0x2
-+ .byte 0x91
-+ .sleb128 -24
-+ .uleb128 0x3a
-+ .long 0x93c0
-+ .uleb128 0x61
-+ .long 0x93cc
-+ .long .LLST47
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x5b
-+ .long 0x9558
-+ .long 0x88cc
-+ .long .Ldebug_ranges0+0x128
-+ .byte 0x1
-+ .value 0x274
-+ .uleb128 0x53
-+ .long 0x88e4
-+ .uleb128 0x53
-+ .long 0x88d9
-+ .uleb128 0x54
-+ .long 0x8823
-+ .long .Ldebug_ranges0+0x140
-+ .byte 0x2
-+ .byte 0xe3
-+ .uleb128 0x53
-+ .long 0x883b
-+ .uleb128 0x53
-+ .long 0x8830
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x66
-+ .long 0x9575
-+ .long 0x8847
-+ .long .LBB342
-+ .long .LBE342
-+ .byte 0x2
-+ .byte 0xe4
-+ .uleb128 0x5d
-+ .long 0x8854
-+ .long .LLST48
-+ .byte 0x0
-+ .uleb128 0x51
-+ .long 0x9656
-+ .long .LBB344
-+ .long .LBE344
-+ .uleb128 0x61
-+ .long 0x93dd
-+ .long .LLST49
-+ .uleb128 0x61
-+ .long 0x93e8
-+ .long .LLST50
-+ .uleb128 0x62
-+ .long 0x95b3
-+ .long 0x8ac3
-+ .long .LBB345
-+ .long .LBE345
-+ .byte 0x1
-+ .value 0x27f
-+ .uleb128 0x53
-+ .long 0x8adb
-+ .uleb128 0x53
-+ .long 0x8ad0
-+ .byte 0x0
-+ .uleb128 0x62
-+ .long 0x9604
-+ .long 0x8ae7
-+ .long .LBB347
-+ .long .LBE347
-+ .byte 0x1
-+ .value 0x280
-+ .uleb128 0x53
-+ .long 0x8b01
-+ .uleb128 0x53
-+ .long 0x8af5
-+ .uleb128 0x4a
-+ .long .LBB348
-+ .long .LBE348
-+ .uleb128 0x3a
-+ .long 0x8b0d
-+ .uleb128 0x58
-+ .long 0x88a8
-+ .long .LBB349
-+ .long .LBE349
-+ .byte 0x1
-+ .value 0x156
-+ .uleb128 0x5d
-+ .long 0x88c0
-+ .long .LLST51
-+ .uleb128 0x5d
-+ .long 0x88b5
-+ .long .LLST52
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x62
-+ .long 0x961e
-+ .long 0x8b1b
-+ .long .LBB351
-+ .long .LBE351
-+ .byte 0x1
-+ .value 0x281
-+ .uleb128 0x53
-+ .long 0x8b28
-+ .byte 0x0
-+ .uleb128 0x62
-+ .long 0x9642
-+ .long 0x8b3a
-+ .long .LBB353
-+ .long .LBE353
-+ .byte 0x1
-+ .value 0x281
-+ .uleb128 0x67
-+ .long 0x87eb
-+ .long .LBB355
-+ .long .LBE355
-+ .byte 0x6
-+ .byte 0x48
-+ .byte 0x0
-+ .uleb128 0x4a
-+ .long .LBB357
-+ .long .LBE357
-+ .uleb128 0x61
-+ .long 0x940b
-+ .long .LLST53
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x62
-+ .long 0x9670
-+ .long 0x8b56
-+ .long .LBB358
-+ .long .LBE358
-+ .byte 0x1
-+ .value 0x275
-+ .uleb128 0x53
-+ .long 0x8b68
-+ .byte 0x0
-+ .uleb128 0x62
-+ .long 0x968f
-+ .long 0x8ac3
-+ .long .LBB360
-+ .long .LBE360
-+ .byte 0x1
-+ .value 0x291
-+ .uleb128 0x53
-+ .long 0x8adb
-+ .uleb128 0x53
-+ .long 0x8ad0
-+ .byte 0x0
-+ .uleb128 0x62
-+ .long 0x96a9
-+ .long 0x8b1b
-+ .long .LBB362
-+ .long .LBE362
-+ .byte 0x1
-+ .value 0x292
-+ .uleb128 0x53
-+ .long 0x8b28
-+ .byte 0x0
-+ .uleb128 0x58
-+ .long 0x8b3a
-+ .long .LBB364
-+ .long .LBE364
-+ .byte 0x1
-+ .value 0x292
-+ .uleb128 0x67
-+ .long 0x87eb
-+ .long .LBB366
-+ .long .LBE366
-+ .byte 0x6
-+ .byte 0x48
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x68
-+ .long 0x97e4
-+ .byte 0x1
-+ .long .LASF1592
-+ .byte 0x1
-+ .value 0x46c
-+ .byte 0x1
-+ .long 0x21
-+ .long .LFB920
-+ .long .LFE920
-+ .long .LLST54
-+ .uleb128 0x4d
-+ .long .LASF82
-+ .byte 0x1
-+ .value 0x46b
-+ .long 0x97e4
-+ .long .LLST55
-+ .uleb128 0x4f
-+ .long .LASF1593
-+ .byte 0x1
-+ .value 0x46d
-+ .long 0x2f
-+ .long .LLST56
-+ .uleb128 0x43
-+ .long .LASF1594
-+ .byte 0x1
-+ .value 0x46d
-+ .long 0x2f
-+ .uleb128 0x4f
-+ .long .LASF120
-+ .byte 0x1
-+ .value 0x46e
-+ .long 0x77
-+ .long .LLST57
-+ .uleb128 0x45
-+ .long .LASF1595
-+ .byte 0x1
-+ .value 0x46e
-+ .long 0x77
-+ .byte 0x1
-+ .byte 0x51
-+ .uleb128 0x41
-+ .string "seq"
-+ .byte 0x1
-+ .value 0x46f
-+ .long 0x2f
-+ .uleb128 0x69
-+ .string "out"
-+ .byte 0x1
-+ .value 0x4b9
-+ .long .L91
-+ .uleb128 0x5b
-+ .long 0x9783
-+ .long 0x8a5d
-+ .long .Ldebug_ranges0+0x158
-+ .byte 0x1
-+ .value 0x471
-+ .uleb128 0x53
-+ .long 0x8a85
-+ .uleb128 0x53
-+ .long 0x8a79
-+ .uleb128 0x53
-+ .long 0x8a6f
-+ .uleb128 0x64
-+ .long .Ldebug_ranges0+0x170
-+ .uleb128 0x61
-+ .long 0x8a92
-+ .long .LLST58
-+ .uleb128 0x61
-+ .long 0x8a9d
-+ .long .LLST59
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x51
-+ .long 0x97c8
-+ .long .LBB374
-+ .long .LBE374
-+ .uleb128 0x6a
-+ .string "tp"
-+ .byte 0x1
-+ .value 0x474
-+ .long 0x173b
-+ .byte 0x2
-+ .byte 0x91
-+ .sleb128 -20
-+ .uleb128 0x58
-+ .long 0x8b80
-+ .long .LBB375
-+ .long .LBE375
-+ .byte 0x1
-+ .value 0x475
-+ .uleb128 0x53
-+ .long 0x8b91
-+ .uleb128 0x4a
-+ .long .LBB376
-+ .long .LBE376
-+ .uleb128 0x61
-+ .long 0x8b9b
-+ .long .LLST60
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x58
-+ .long 0x8bb2
-+ .long .LBB377
-+ .long .LBE377
-+ .byte 0x1
-+ .value 0x48c
-+ .uleb128 0x53
-+ .long 0x8bcd
-+ .uleb128 0x53
-+ .long 0x8bc3
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x7fd
-+ .uleb128 0x68
-+ .long 0x9828
-+ .byte 0x1
-+ .long .LASF1597
-+ .byte 0x1
-+ .value 0x4be
-+ .byte 0x1
-+ .long 0x5a
-+ .long .LFB921
-+ .long .LFE921
-+ .long .LLST61
-+ .uleb128 0x4e
-+ .long .LASF82
-+ .byte 0x1
-+ .value 0x4bd
-+ .long 0x97e4
-+ .byte 0x2
-+ .byte 0x91
-+ .sleb128 0
-+ .uleb128 0x6a
-+ .string "val"
-+ .byte 0x1
-+ .value 0x4bf
-+ .long 0x7fd
-+ .byte 0x3
-+ .byte 0x91
-+ .sleb128 -72
-+ .byte 0x0
-+ .uleb128 0x6b
-+ .long 0x9851
-+ .long .LASF1598
-+ .byte 0x1
-+ .value 0x401
-+ .byte 0x1
-+ .long .LFB915
-+ .long .LFE915
-+ .byte 0x2
-+ .byte 0x74
-+ .sleb128 4
-+ .uleb128 0x4d
-+ .long .LASF1599
-+ .byte 0x1
-+ .value 0x400
-+ .long 0x2f
-+ .long .LLST63
-+ .byte 0x0
-+ .uleb128 0x6c
-+ .long 0x987e
-+ .byte 0x1
-+ .long .LASF1600
-+ .byte 0x1
-+ .value 0x397
-+ .byte 0x1
-+ .long 0x2f
-+ .long .LFB908
-+ .long .LFE908
-+ .byte 0x2
-+ .byte 0x74
-+ .sleb128 4
-+ .uleb128 0x4e
-+ .long .LASF1601
-+ .byte 0x1
-+ .value 0x396
-+ .long 0x77
-+ .byte 0x2
-+ .byte 0x91
-+ .sleb128 0
-+ .byte 0x0
-+ .uleb128 0x42
-+ .long 0x98a2
-+ .long .LASF1602
-+ .byte 0x1
-+ .value 0x37f
-+ .byte 0x1
-+ .byte 0x3
-+ .uleb128 0x3d
-+ .long .LASF1554
-+ .byte 0x1
-+ .value 0x37e
-+ .long 0x2f
-+ .uleb128 0x39
-+ .uleb128 0x39
-+ .uleb128 0x3a
-+ .long 0x8bf2
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x6d
-+ .long .LASF1603
-+ .byte 0x1
-+ .value 0x33f
-+ .byte 0x1
-+ .long 0x2f
-+ .byte 0x1
-+ .uleb128 0x57
-+ .long 0x9926
-+ .byte 0x1
-+ .long .LASF1604
-+ .byte 0x1
-+ .value 0x38b
-+ .byte 0x1
-+ .long .LFB907
-+ .long .LFE907
-+ .long .LLST65
-+ .uleb128 0x4d
-+ .long .LASF1554
-+ .byte 0x1
-+ .value 0x38a
-+ .long 0x2f
-+ .long .LLST66
-+ .uleb128 0x58
-+ .long 0x987e
-+ .long .LBB385
-+ .long .LBE385
-+ .byte 0x1
-+ .value 0x38d
-+ .uleb128 0x53
-+ .long 0x988c
-+ .uleb128 0x58
-+ .long 0x8bd8
-+ .long .LBB387
-+ .long .LBE387
-+ .byte 0x1
-+ .value 0x381
-+ .uleb128 0x53
-+ .long 0x8be6
-+ .uleb128 0x4a
-+ .long .LBB388
-+ .long .LBE388
-+ .uleb128 0x61
-+ .long 0x8bf2
-+ .long .LLST67
-+ .uleb128 0x6e
-+ .long 0x98a2
-+ .long .Ldebug_ranges0+0x188
-+ .byte 0x1
-+ .value 0x35a
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x6f
-+ .byte 0x1
-+ .long .LASF1721
-+ .byte 0x1
-+ .value 0x375
-+ .byte 0x1
-+ .long .LFB905
-+ .long .LFE905
-+ .byte 0x2
-+ .byte 0x74
-+ .sleb128 4
-+ .uleb128 0x59
-+ .long 0x99b3
-+ .long .LASF1605
-+ .byte 0x1
-+ .value 0x16b
-+ .byte 0x1
-+ .long 0x887d
-+ .long .LFB892
-+ .long .LFE892
-+ .long .LLST69
-+ .uleb128 0x4d
-+ .long .LASF760
-+ .byte 0x1
-+ .value 0x168
-+ .long 0x8791
-+ .long .LLST70
-+ .uleb128 0x4d
-+ .long .LASF53
-+ .byte 0x1
-+ .value 0x169
-+ .long 0xdd4
-+ .long .LLST71
-+ .uleb128 0x4f
-+ .long .LASF735
-+ .byte 0x1
-+ .value 0x16c
-+ .long 0x887d
-+ .long .LLST72
-+ .uleb128 0x4a
-+ .long .LBB392
-+ .long .LBE392
-+ .uleb128 0x4f
-+ .long .LASF1606
-+ .byte 0x1
-+ .value 0x16f
-+ .long 0x887d
-+ .long .LLST73
-+ .uleb128 0x70
-+ .long 0x8c11
-+ .long .LBB393
-+ .long .LBE393
-+ .byte 0x1
-+ .value 0x178
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x68
-+ .long 0x9a6a
-+ .byte 0x1
-+ .long .LASF1607
-+ .byte 0x1
-+ .value 0x20f
-+ .byte 0x1
-+ .long 0x21
-+ .long .LFB897
-+ .long .LFE897
-+ .long .LLST74
-+ .uleb128 0x4d
-+ .long .LASF760
-+ .byte 0x1
-+ .value 0x20e
-+ .long 0x8791
-+ .long .LLST75
-+ .uleb128 0x4f
-+ .long .LASF735
-+ .byte 0x1
-+ .value 0x210
-+ .long 0x887d
-+ .long .LLST76
-+ .uleb128 0x45
-+ .long .LASF53
-+ .byte 0x1
-+ .value 0x211
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x91
-+ .sleb128 -16
-+ .uleb128 0x50
-+ .string "ret"
-+ .byte 0x1
-+ .value 0x212
-+ .long 0x21
-+ .long .LLST77
-+ .uleb128 0x69
-+ .string "out"
-+ .byte 0x1
-+ .value 0x21e
-+ .long .L133
-+ .uleb128 0x58
-+ .long 0x8ae7
-+ .long .LBB395
-+ .long .LBE395
-+ .byte 0x1
-+ .value 0x21b
-+ .uleb128 0x53
-+ .long 0x8b01
-+ .uleb128 0x53
-+ .long 0x8af5
-+ .uleb128 0x4a
-+ .long .LBB396
-+ .long .LBE396
-+ .uleb128 0x3a
-+ .long 0x8b0d
-+ .uleb128 0x58
-+ .long 0x88a8
-+ .long .LBB397
-+ .long .LBE397
-+ .byte 0x1
-+ .value 0x156
-+ .uleb128 0x5d
-+ .long 0x88c0
-+ .long .LLST78
-+ .uleb128 0x5d
-+ .long 0x88b5
-+ .long .LLST79
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x68
-+ .long 0x9ac3
-+ .byte 0x1
-+ .long .LASF1608
-+ .byte 0x1
-+ .value 0x238
-+ .byte 0x1
-+ .long 0x21
-+ .long .LFB898
-+ .long .LFE898
-+ .long .LLST80
-+ .uleb128 0x4d
-+ .long .LASF760
-+ .byte 0x1
-+ .value 0x237
-+ .long 0x8791
-+ .long .LLST81
-+ .uleb128 0x4a
-+ .long .LBB399
-+ .long .LBE399
-+ .uleb128 0x50
-+ .string "ret"
-+ .byte 0x1
-+ .value 0x23a
-+ .long 0x21
-+ .long .LLST82
-+ .uleb128 0x70
-+ .long 0x8c11
-+ .long .LBB400
-+ .long .LBE400
-+ .byte 0x1
-+ .value 0x23d
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x68
-+ .long 0x9c15
-+ .byte 0x1
-+ .long .LASF1609
-+ .byte 0x1
-+ .value 0x17d
-+ .byte 0x1
-+ .long 0x21
-+ .long .LFB893
-+ .long .LFE893
-+ .long .LLST83
-+ .uleb128 0x4d
-+ .long .LASF760
-+ .byte 0x1
-+ .value 0x17c
-+ .long 0x8791
-+ .long .LLST84
-+ .uleb128 0x4d
-+ .long .LASF732
-+ .byte 0x1
-+ .value 0x17c
-+ .long 0x2f
-+ .long .LLST85
-+ .uleb128 0x4f
-+ .long .LASF735
-+ .byte 0x1
-+ .value 0x17e
-+ .long 0x887d
-+ .long .LLST86
-+ .uleb128 0x4f
-+ .long .LASF1560
-+ .byte 0x1
-+ .value 0x17e
-+ .long 0x887d
-+ .long .LLST87
-+ .uleb128 0x45
-+ .long .LASF53
-+ .byte 0x1
-+ .value 0x17f
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x91
-+ .sleb128 -24
-+ .uleb128 0x6a
-+ .string "ret"
-+ .byte 0x1
-+ .value 0x180
-+ .long 0x21
-+ .byte 0x2
-+ .byte 0x91
-+ .sleb128 -28
-+ .uleb128 0x62
-+ .long 0x9b90
-+ .long 0x8ae7
-+ .long .LBB402
-+ .long .LBE402
-+ .byte 0x1
-+ .value 0x188
-+ .uleb128 0x53
-+ .long 0x8b01
-+ .uleb128 0x53
-+ .long 0x8af5
-+ .uleb128 0x4a
-+ .long .LBB403
-+ .long .LBE403
-+ .uleb128 0x3a
-+ .long 0x8b0d
-+ .uleb128 0x58
-+ .long 0x88a8
-+ .long .LBB404
-+ .long .LBE404
-+ .byte 0x1
-+ .value 0x156
-+ .uleb128 0x5d
-+ .long 0x88c0
-+ .long .LLST88
-+ .uleb128 0x5d
-+ .long 0x88b5
-+ .long .LLST89
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x51
-+ .long 0x9bc4
-+ .long .LBB406
-+ .long .LBE406
-+ .uleb128 0x43
-+ .long .LASF1571
-+ .byte 0x1
-+ .value 0x18c
-+ .long 0x2f
-+ .uleb128 0x4a
-+ .long .LBB407
-+ .long .LBE407
-+ .uleb128 0x4f
-+ .long .LASF1562
-+ .byte 0x1
-+ .value 0x18c
-+ .long 0x2f
-+ .long .LLST90
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x62
-+ .long 0x9be3
-+ .long 0x8c5c
-+ .long .LBB408
-+ .long .LBE408
-+ .byte 0x1
-+ .value 0x198
-+ .uleb128 0x53
-+ .long 0x8c74
-+ .uleb128 0x53
-+ .long 0x8c69
-+ .byte 0x0
-+ .uleb128 0x62
-+ .long 0x9bfd
-+ .long 0x8b1b
-+ .long .LBB410
-+ .long .LBE410
-+ .byte 0x1
-+ .value 0x199
-+ .uleb128 0x53
-+ .long 0x8b28
-+ .byte 0x0
-+ .uleb128 0x52
-+ .long 0x8c5c
-+ .long .Ldebug_ranges0+0x1a0
-+ .byte 0x1
-+ .value 0x19c
-+ .uleb128 0x53
-+ .long 0x8c74
-+ .uleb128 0x53
-+ .long 0x8c69
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x68
-+ .long 0x9cdb
-+ .byte 0x1
-+ .long .LASF1610
-+ .byte 0x1
-+ .value 0x420
-+ .byte 0x1
-+ .long 0x5a
-+ .long .LFB916
-+ .long .LFE916
-+ .long .LLST91
-+ .uleb128 0x4d
-+ .long .LASF1611
-+ .byte 0x1
-+ .value 0x41f
-+ .long 0x5a
-+ .long .LLST92
-+ .uleb128 0x45
-+ .long .LASF760
-+ .byte 0x1
-+ .value 0x421
-+ .long 0x3728
-+ .byte 0x2
-+ .byte 0x91
-+ .sleb128 -36
-+ .uleb128 0x4f
-+ .long .LASF1612
-+ .byte 0x1
-+ .value 0x422
-+ .long 0x2f
-+ .long .LLST93
-+ .uleb128 0x69
-+ .string "out"
-+ .byte 0x1
-+ .value 0x44a
-+ .long .L158
-+ .uleb128 0x62
-+ .long 0x9c96
-+ .long 0x8c81
-+ .long .LBB416
-+ .long .LBE416
-+ .byte 0x1
-+ .value 0x43c
-+ .uleb128 0x4a
-+ .long .LBB418
-+ .long .LBE418
-+ .uleb128 0x61
-+ .long 0x8c93
-+ .long .LLST94
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x5b
-+ .long 0x9cb6
-+ .long 0x8ca0
-+ .long .Ldebug_ranges0+0x1b8
-+ .byte 0x1
-+ .value 0x443
-+ .uleb128 0x53
-+ .long 0x8cc3
-+ .uleb128 0x53
-+ .long 0x8cb8
-+ .uleb128 0x53
-+ .long 0x8cad
-+ .byte 0x0
-+ .uleb128 0x58
-+ .long 0x8c81
-+ .long .LBB421
-+ .long .LBE421
-+ .byte 0x1
-+ .value 0x443
-+ .uleb128 0x4a
-+ .long .LBB423
-+ .long .LBE423
-+ .uleb128 0x61
-+ .long 0x8c93
-+ .long .LLST95
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x6c
-+ .long 0x9d2d
-+ .byte 0x1
-+ .long .LASF1613
-+ .byte 0x1
-+ .value 0x45b
-+ .byte 0x1
-+ .long 0x5a
-+ .long .LFB918
-+ .long .LFE918
-+ .byte 0x2
-+ .byte 0x74
-+ .sleb128 4
-+ .uleb128 0x4d
-+ .long .LASF1611
-+ .byte 0x1
-+ .value 0x45a
-+ .long 0x5a
-+ .long .LLST97
-+ .uleb128 0x58
-+ .long 0x8c81
-+ .long .LBB426
-+ .long .LBE426
-+ .byte 0x1
-+ .value 0x45c
-+ .uleb128 0x4a
-+ .long .LBB428
-+ .long .LBE428
-+ .uleb128 0x61
-+ .long 0x8c93
-+ .long .LLST98
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x56
-+ .long 0x9d67
-+ .byte 0x1
-+ .long .LASF1614
-+ .byte 0x1
-+ .value 0x61e
-+ .byte 0x1
-+ .long .LFB925
-+ .long .LFE925
-+ .byte 0x2
-+ .byte 0x74
-+ .sleb128 4
-+ .uleb128 0x4d
-+ .long .LASF1615
-+ .byte 0x1
-+ .value 0x61d
-+ .long 0x77
-+ .long .LLST100
-+ .uleb128 0x4f
-+ .long .LASF1611
-+ .byte 0x1
-+ .value 0x61f
-+ .long 0x2f
-+ .long .LLST101
-+ .byte 0x0
-+ .uleb128 0x6c
-+ .long 0x9db9
-+ .byte 0x1
-+ .long .LASF1616
-+ .byte 0x1
-+ .value 0x454
-+ .byte 0x1
-+ .long 0x5a
-+ .long .LFB917
-+ .long .LFE917
-+ .byte 0x2
-+ .byte 0x74
-+ .sleb128 4
-+ .uleb128 0x4d
-+ .long .LASF1611
-+ .byte 0x1
-+ .value 0x453
-+ .long 0x5a
-+ .long .LLST103
-+ .uleb128 0x58
-+ .long 0x8c81
-+ .long .LBB429
-+ .long .LBE429
-+ .byte 0x1
-+ .value 0x455
-+ .uleb128 0x4a
-+ .long .LBB431
-+ .long .LBE431
-+ .uleb128 0x61
-+ .long 0x8c93
-+ .long .LLST104
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x3b
-+ .long 0x9de4
-+ .long .LASF1617
-+ .byte 0xb
-+ .value 0x62f
-+ .byte 0x1
-+ .long 0x21
-+ .byte 0x3
-+ .uleb128 0x3c
-+ .string "p"
-+ .byte 0xb
-+ .value 0x62e
-+ .long 0x15f9
-+ .uleb128 0x39
-+ .uleb128 0x39
-+ .uleb128 0x37
-+ .uleb128 0x39
-+ .uleb128 0x39
-+ .uleb128 0x3a
-+ .long 0x896c
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x6c
-+ .long 0x9eb0
-+ .byte 0x1
-+ .long .LASF1618
-+ .byte 0x1
-+ .value 0x62c
-+ .byte 0x1
-+ .long 0x2f
-+ .long .LFB926
-+ .long .LFE926
-+ .byte 0x2
-+ .byte 0x74
-+ .sleb128 4
-+ .uleb128 0x4d
-+ .long .LASF1615
-+ .byte 0x1
-+ .value 0x62b
-+ .long 0x77
-+ .long .LLST106
-+ .uleb128 0x4f
-+ .long .LASF1611
-+ .byte 0x1
-+ .value 0x62d
-+ .long 0x2f
-+ .long .LLST107
-+ .uleb128 0x62
-+ .long 0x9e45
-+ .long 0x8c81
-+ .long .LBB445
-+ .long .LBE445
-+ .byte 0x1
-+ .value 0x62f
-+ .uleb128 0x4a
-+ .long .LBB447
-+ .long .LBE447
-+ .uleb128 0x3a
-+ .long 0x8c93
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x58
-+ .long 0x9db9
-+ .long .LBB448
-+ .long .LBE448
-+ .byte 0x1
-+ .value 0x62f
-+ .uleb128 0x53
-+ .long 0x9dcb
-+ .uleb128 0x58
-+ .long 0x89a9
-+ .long .LBB450
-+ .long .LBE450
-+ .byte 0xb
-+ .value 0x630
-+ .uleb128 0x53
-+ .long 0x89c7
-+ .uleb128 0x5d
-+ .long 0x89bb
-+ .long .LLST108
-+ .uleb128 0x58
-+ .long 0x8978
-+ .long .LBB452
-+ .long .LBE452
-+ .byte 0xb
-+ .value 0x621
-+ .uleb128 0x53
-+ .long 0x8993
-+ .uleb128 0x53
-+ .long 0x8989
-+ .uleb128 0x63
-+ .long 0x890f
-+ .long .LBB454
-+ .long .LBE454
-+ .byte 0xf
-+ .byte 0x41
-+ .uleb128 0x53
-+ .long 0x892a
-+ .uleb128 0x53
-+ .long 0x8920
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x57
-+ .long 0x9f33
-+ .byte 0x1
-+ .long .LASF1619
-+ .byte 0x1
-+ .value 0x32b
-+ .byte 0x1
-+ .long .LFB901
-+ .long .LFE901
-+ .long .LLST109
-+ .uleb128 0x4d
-+ .long .LASF1620
-+ .byte 0x1
-+ .value 0x32a
-+ .long 0x21
-+ .long .LLST110
-+ .uleb128 0x50
-+ .string "p"
-+ .byte 0x1
-+ .value 0x32c
-+ .long 0x15f9
-+ .long .LLST111
-+ .uleb128 0x41
-+ .string "cpu"
-+ .byte 0x1
-+ .value 0x32d
-+ .long 0x21
-+ .uleb128 0x51
-+ .long 0x9f12
-+ .long .LBB460
-+ .long .LBE460
-+ .uleb128 0x4f
-+ .long .LASF1562
-+ .byte 0x1
-+ .value 0x32d
-+ .long 0x21
-+ .long .LLST112
-+ .byte 0x0
-+ .uleb128 0x58
-+ .long 0x8c81
-+ .long .LBB461
-+ .long .LBE461
-+ .byte 0x1
-+ .value 0x32c
-+ .uleb128 0x4a
-+ .long .LBB463
-+ .long .LBE463
-+ .uleb128 0x3a
-+ .long 0x8c93
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x68
-+ .long 0x9fd6
-+ .byte 0x1
-+ .long .LASF1621
-+ .byte 0x1
-+ .value 0x3bd
-+ .byte 0x1
-+ .long 0x5a
-+ .long .LFB909
-+ .long .LFE909
-+ .long .LLST113
-+ .uleb128 0x51
-+ .long 0x9fb1
-+ .long .LBB474
-+ .long .LBE474
-+ .uleb128 0x45
-+ .long .LASF367
-+ .byte 0x1
-+ .value 0x3c0
-+ .long 0x86d0
-+ .byte 0x2
-+ .byte 0x91
-+ .sleb128 -48
-+ .uleb128 0x45
-+ .long .LASF1622
-+ .byte 0x1
-+ .value 0x3c1
-+ .long 0x87a2
-+ .byte 0x2
-+ .byte 0x91
-+ .sleb128 -24
-+ .uleb128 0x50
-+ .string "eip"
-+ .byte 0x1
-+ .value 0x3c2
-+ .long 0x2f
-+ .long .LLST114
-+ .uleb128 0x58
-+ .long 0x8c81
-+ .long .LBB475
-+ .long .LBE475
-+ .byte 0x1
-+ .value 0x3c5
-+ .uleb128 0x4a
-+ .long .LBB477
-+ .long .LBE477
-+ .uleb128 0x61
-+ .long 0x8c93
-+ .long .LLST115
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x58
-+ .long 0x8c81
-+ .long .LBB478
-+ .long .LBE478
-+ .byte 0x1
-+ .value 0x3d0
-+ .uleb128 0x4a
-+ .long .LBB480
-+ .long .LBE480
-+ .uleb128 0x61
-+ .long 0x8c93
-+ .long .LLST116
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x6c
-+ .long 0xa03a
-+ .byte 0x1
-+ .long .LASF1623
-+ .byte 0x1
-+ .value 0x3da
-+ .byte 0x1
-+ .long 0x5a
-+ .long .LFB910
-+ .long .LFE910
-+ .byte 0x2
-+ .byte 0x74
-+ .sleb128 4
-+ .uleb128 0x41
-+ .string "pid"
-+ .byte 0x1
-+ .value 0x3db
-+ .long 0x21
-+ .uleb128 0x4a
-+ .long .LBB485
-+ .long .LBE485
-+ .uleb128 0x43
-+ .long .LASF1624
-+ .byte 0x1
-+ .value 0x3de
-+ .long 0x15f9
-+ .uleb128 0x58
-+ .long 0x8c81
-+ .long .LBB486
-+ .long .LBE486
-+ .byte 0x1
-+ .value 0x3de
-+ .uleb128 0x4a
-+ .long .LBB488
-+ .long .LBE488
-+ .uleb128 0x61
-+ .long 0x8c93
-+ .long .LLST118
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x6c
-+ .long 0xa07c
-+ .byte 0x1
-+ .long .LASF1625
-+ .byte 0x1
-+ .value 0x3e7
-+ .byte 0x1
-+ .long 0x5a
-+ .long .LFB911
-+ .long .LFE911
-+ .byte 0x2
-+ .byte 0x74
-+ .sleb128 4
-+ .uleb128 0x58
-+ .long 0x8c81
-+ .long .LBB492
-+ .long .LBE492
-+ .byte 0x1
-+ .value 0x3e9
-+ .uleb128 0x4a
-+ .long .LBB494
-+ .long .LBE494
-+ .uleb128 0x61
-+ .long 0x8c93
-+ .long .LLST120
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x6c
-+ .long 0xa0be
-+ .byte 0x1
-+ .long .LASF1626
-+ .byte 0x1
-+ .value 0x3ed
-+ .byte 0x1
-+ .long 0x5a
-+ .long .LFB912
-+ .long .LFE912
-+ .byte 0x2
-+ .byte 0x74
-+ .sleb128 4
-+ .uleb128 0x58
-+ .long 0x8c81
-+ .long .LBB498
-+ .long .LBE498
-+ .byte 0x1
-+ .value 0x3ef
-+ .uleb128 0x4a
-+ .long .LBB500
-+ .long .LBE500
-+ .uleb128 0x61
-+ .long 0x8c93
-+ .long .LLST122
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x6c
-+ .long 0xa100
-+ .byte 0x1
-+ .long .LASF1627
-+ .byte 0x1
-+ .value 0x3f3
-+ .byte 0x1
-+ .long 0x5a
-+ .long .LFB913
-+ .long .LFE913
-+ .byte 0x2
-+ .byte 0x74
-+ .sleb128 4
-+ .uleb128 0x58
-+ .long 0x8c81
-+ .long .LBB504
-+ .long .LBE504
-+ .byte 0x1
-+ .value 0x3f5
-+ .uleb128 0x4a
-+ .long .LBB506
-+ .long .LBE506
-+ .uleb128 0x61
-+ .long 0x8c93
-+ .long .LLST124
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x6c
-+ .long 0xa142
-+ .byte 0x1
-+ .long .LASF1628
-+ .byte 0x1
-+ .value 0x3f9
-+ .byte 0x1
-+ .long 0x5a
-+ .long .LFB914
-+ .long .LFE914
-+ .byte 0x2
-+ .byte 0x74
-+ .sleb128 4
-+ .uleb128 0x58
-+ .long 0x8c81
-+ .long .LBB510
-+ .long .LBE510
-+ .byte 0x1
-+ .value 0x3fb
-+ .uleb128 0x4a
-+ .long .LBB512
-+ .long .LBE512
-+ .uleb128 0x61
-+ .long 0x8c93
-+ .long .LLST126
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x6c
-+ .long 0xa184
-+ .byte 0x1
-+ .long .LASF1629
-+ .byte 0x1
-+ .value 0x463
-+ .byte 0x1
-+ .long 0x5a
-+ .long .LFB919
-+ .long .LFE919
-+ .byte 0x2
-+ .byte 0x74
-+ .sleb128 4
-+ .uleb128 0x58
-+ .long 0x8c81
-+ .long .LBB516
-+ .long .LBE516
-+ .byte 0x1
-+ .value 0x464
-+ .uleb128 0x4a
-+ .long .LBB518
-+ .long .LBE518
-+ .uleb128 0x61
-+ .long 0x8c93
-+ .long .LLST128
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x6c
-+ .long 0xa1c2
-+ .byte 0x1
-+ .long .LASF1630
-+ .byte 0x1
-+ .value 0x1d3
-+ .byte 0x1
-+ .long 0x21
-+ .long .LFB895
-+ .long .LFE895
-+ .byte 0x2
-+ .byte 0x74
-+ .sleb128 4
-+ .uleb128 0x4d
-+ .long .LASF760
-+ .byte 0x1
-+ .value 0x1d2
-+ .long 0x8791
-+ .long .LLST130
-+ .uleb128 0x4d
-+ .long .LASF732
-+ .byte 0x1
-+ .value 0x1d2
-+ .long 0x2f
-+ .long .LLST131
-+ .byte 0x0
-+ .uleb128 0x33
-+ .long 0xa1db
-+ .long .LASF1631
-+ .byte 0xa
-+ .byte 0x83
-+ .byte 0x1
-+ .byte 0x3
-+ .uleb128 0x35
-+ .long .LASF760
-+ .byte 0xa
-+ .byte 0x82
-+ .long 0x8791
-+ .byte 0x0
-+ .uleb128 0x68
-+ .long 0xa286
-+ .byte 0x1
-+ .long .LASF1632
-+ .byte 0x1
-+ .value 0x1f0
-+ .byte 0x1
-+ .long 0x21
-+ .long .LFB896
-+ .long .LFE896
-+ .long .LLST132
-+ .uleb128 0x4d
-+ .long .LASF760
-+ .byte 0x1
-+ .value 0x1ef
-+ .long 0x8791
-+ .long .LLST133
-+ .uleb128 0x4f
-+ .long .LASF735
-+ .byte 0x1
-+ .value 0x1f1
-+ .long 0x887d
-+ .long .LLST134
-+ .uleb128 0x45
-+ .long .LASF53
-+ .byte 0x1
-+ .value 0x1f2
-+ .long 0x2f
-+ .byte 0x2
-+ .byte 0x91
-+ .sleb128 -16
-+ .uleb128 0x50
-+ .string "ret"
-+ .byte 0x1
-+ .value 0x1f3
-+ .long 0x21
-+ .long .LLST135
-+ .uleb128 0x58
-+ .long 0x8ae7
-+ .long .LBB533
-+ .long .LBE533
-+ .byte 0x1
-+ .value 0x1f9
-+ .uleb128 0x53
-+ .long 0x8b01
-+ .uleb128 0x53
-+ .long 0x8af5
-+ .uleb128 0x4a
-+ .long .LBB534
-+ .long .LBE534
-+ .uleb128 0x3a
-+ .long 0x8b0d
-+ .uleb128 0x58
-+ .long 0x88a8
-+ .long .LBB535
-+ .long .LBE535
-+ .byte 0x1
-+ .value 0x156
-+ .uleb128 0x5d
-+ .long 0x88c0
-+ .long .LLST136
-+ .uleb128 0x5d
-+ .long 0x88b5
-+ .long .LLST137
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x57
-+ .long 0xa316
-+ .byte 0x1
-+ .long .LASF1633
-+ .byte 0x1
-+ .value 0x1b1
-+ .byte 0x1
-+ .long .LFB894
-+ .long .LFE894
-+ .long .LLST138
-+ .uleb128 0x4d
-+ .long .LASF760
-+ .byte 0x1
-+ .value 0x1b0
-+ .long 0x8791
-+ .long .LLST139
-+ .uleb128 0x5a
-+ .string "cpu"
-+ .byte 0x1
-+ .value 0x1b0
-+ .long 0x21
-+ .long .LLST140
-+ .uleb128 0x4f
-+ .long .LASF735
-+ .byte 0x1
-+ .value 0x1b2
-+ .long 0x887d
-+ .long .LLST141
-+ .uleb128 0x4f
-+ .long .LASF53
-+ .byte 0x1
-+ .value 0x1b3
-+ .long 0x2f
-+ .long .LLST142
-+ .uleb128 0x51
-+ .long 0xa2fa
-+ .long .LBB546
-+ .long .LBE546
-+ .uleb128 0x43
-+ .long .LASF1571
-+ .byte 0x1
-+ .value 0x1b2
-+ .long 0x2f
-+ .byte 0x0
-+ .uleb128 0x58
-+ .long 0x8c5c
-+ .long .LBB547
-+ .long .LBE547
-+ .byte 0x1
-+ .value 0x1b8
-+ .uleb128 0x53
-+ .long 0x8c74
-+ .uleb128 0x53
-+ .long 0x8c69
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x14
-+ .long 0x967
-+ .uleb128 0x12
-+ .long 0xa32b
-+ .long 0xbb
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0xa
-+ .byte 0x0
-+ .uleb128 0x71
-+ .long .LASF1634
-+ .byte 0x1
-+ .byte 0x31
-+ .long 0xa33c
-+ .byte 0x5
-+ .byte 0x3
-+ .long __kstrtab_jiffies_64
-+ .uleb128 0x14
-+ .long 0xa31b
-+ .uleb128 0x71
-+ .long .LASF1635
-+ .byte 0x1
-+ .byte 0x31
-+ .long 0x4fe5
-+ .byte 0x5
-+ .byte 0x3
-+ .long __ksymtab_jiffies_64
-+ .uleb128 0x12
-+ .long 0xa362
-+ .long 0xbb
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0xf
-+ .byte 0x0
-+ .uleb128 0x71
-+ .long .LASF1636
-+ .byte 0x1
-+ .byte 0x53
-+ .long 0xa373
-+ .byte 0x5
-+ .byte 0x3
-+ .long __kstrtab_boot_tvec_bases
-+ .uleb128 0x14
-+ .long 0xa352
-+ .uleb128 0x71
-+ .long .LASF1637
-+ .byte 0x1
-+ .byte 0x53
-+ .long 0x4fe5
-+ .byte 0x5
-+ .byte 0x3
-+ .long __ksymtab_boot_tvec_bases
-+ .uleb128 0x71
-+ .long .LASF1638
-+ .byte 0x1
-+ .byte 0x54
-+ .long 0x887d
-+ .byte 0x5
-+ .byte 0x3
-+ .long per_cpu__tvec_bases
-+ .uleb128 0x12
-+ .long 0xa3aa
-+ .long 0xbb
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0xf
-+ .byte 0x0
-+ .uleb128 0x71
-+ .long .LASF1639
-+ .byte 0x1
-+ .byte 0xac
-+ .long 0xa3bb
-+ .byte 0x5
-+ .byte 0x3
-+ .long __kstrtab___round_jiffies
-+ .uleb128 0x14
-+ .long 0xa39a
-+ .uleb128 0x71
-+ .long .LASF1640
-+ .byte 0x1
-+ .byte 0xac
-+ .long 0x4fe5
-+ .byte 0x5
-+ .byte 0x3
-+ .long __ksymtab___round_jiffies
-+ .uleb128 0x12
-+ .long 0xa3e1
-+ .long 0xbb
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x18
-+ .byte 0x0
-+ .uleb128 0x71
-+ .long .LASF1641
-+ .byte 0x1
-+ .byte 0xcc
-+ .long 0xa3f2
-+ .byte 0x5
-+ .byte 0x3
-+ .long __kstrtab___round_jiffies_relative
-+ .uleb128 0x14
-+ .long 0xa3d1
-+ .uleb128 0x71
-+ .long .LASF1642
-+ .byte 0x1
-+ .byte 0xcc
-+ .long 0x4fe5
-+ .byte 0x5
-+ .byte 0x3
-+ .long __ksymtab___round_jiffies_relative
-+ .uleb128 0x12
-+ .long 0xa418
-+ .long 0xbb
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0xd
-+ .byte 0x0
-+ .uleb128 0x71
-+ .long .LASF1643
-+ .byte 0x1
-+ .byte 0xe1
-+ .long 0xa429
-+ .byte 0x5
-+ .byte 0x3
-+ .long __kstrtab_round_jiffies
-+ .uleb128 0x14
-+ .long 0xa408
-+ .uleb128 0x71
-+ .long .LASF1644
-+ .byte 0x1
-+ .byte 0xe1
-+ .long 0x4fe5
-+ .byte 0x5
-+ .byte 0x3
-+ .long __ksymtab_round_jiffies
-+ .uleb128 0x12
-+ .long 0xa44f
-+ .long 0xbb
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x16
-+ .byte 0x0
-+ .uleb128 0x71
-+ .long .LASF1645
-+ .byte 0x1
-+ .byte 0xf6
-+ .long 0xa460
-+ .byte 0x5
-+ .byte 0x3
-+ .long __kstrtab_round_jiffies_relative
-+ .uleb128 0x14
-+ .long 0xa43f
-+ .uleb128 0x71
-+ .long .LASF1646
-+ .byte 0x1
-+ .byte 0xf6
-+ .long 0x4fe5
-+ .byte 0x5
-+ .byte 0x3
-+ .long __ksymtab_round_jiffies_relative
-+ .uleb128 0x12
-+ .long 0xa486
-+ .long 0xbb
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0xa
-+ .byte 0x0
-+ .uleb128 0x45
-+ .long .LASF1647
-+ .byte 0x1
-+ .value 0x148
-+ .long 0xa498
-+ .byte 0x5
-+ .byte 0x3
-+ .long __kstrtab_init_timer
-+ .uleb128 0x14
-+ .long 0xa476
-+ .uleb128 0x45
-+ .long .LASF1648
-+ .byte 0x1
-+ .value 0x148
-+ .long 0x4fe5
-+ .byte 0x5
-+ .byte 0x3
-+ .long __ksymtab_init_timer
-+ .uleb128 0x12
-+ .long 0xa4bf
-+ .long 0xbb
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x15
-+ .byte 0x0
-+ .uleb128 0x45
-+ .long .LASF1649
-+ .byte 0x1
-+ .value 0x14f
-+ .long 0xa4d1
-+ .byte 0x5
-+ .byte 0x3
-+ .long __kstrtab_init_timer_deferrable
-+ .uleb128 0x14
-+ .long 0xa4af
-+ .uleb128 0x45
-+ .long .LASF1650
-+ .byte 0x1
-+ .value 0x14f
-+ .long 0x4fe5
-+ .byte 0x5
-+ .byte 0x3
-+ .long __ksymtab_init_timer_deferrable
-+ .uleb128 0x12
-+ .long 0xa4f8
-+ .long 0xbb
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0xb
-+ .byte 0x0
-+ .uleb128 0x45
-+ .long .LASF1651
-+ .byte 0x1
-+ .value 0x1a7
-+ .long 0xa50a
-+ .byte 0x5
-+ .byte 0x3
-+ .long __kstrtab___mod_timer
-+ .uleb128 0x14
-+ .long 0xa4e8
-+ .uleb128 0x45
-+ .long .LASF1652
-+ .byte 0x1
-+ .value 0x1a7
-+ .long 0x4fe5
-+ .byte 0x5
-+ .byte 0x3
-+ .long __ksymtab___mod_timer
-+ .uleb128 0x12
-+ .long 0xa531
-+ .long 0xbb
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x9
-+ .byte 0x0
-+ .uleb128 0x45
-+ .long .LASF1653
-+ .byte 0x1
-+ .value 0x1e2
-+ .long 0xa543
-+ .byte 0x5
-+ .byte 0x3
-+ .long __kstrtab_mod_timer
-+ .uleb128 0x14
-+ .long 0xa521
-+ .uleb128 0x45
-+ .long .LASF1654
-+ .byte 0x1
-+ .value 0x1e2
-+ .long 0x4fe5
-+ .byte 0x5
-+ .byte 0x3
-+ .long __ksymtab_mod_timer
-+ .uleb128 0x12
-+ .long 0xa56a
-+ .long 0xbb
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x9
-+ .byte 0x0
-+ .uleb128 0x45
-+ .long .LASF1655
-+ .byte 0x1
-+ .value 0x202
-+ .long 0xa57c
-+ .byte 0x5
-+ .byte 0x3
-+ .long __kstrtab_del_timer
-+ .uleb128 0x14
-+ .long 0xa55a
-+ .uleb128 0x45
-+ .long .LASF1656
-+ .byte 0x1
-+ .value 0x202
-+ .long 0x4fe5
-+ .byte 0x5
-+ .byte 0x3
-+ .long __ksymtab_del_timer
-+ .uleb128 0x12
-+ .long 0xa5a3
-+ .long 0xbb
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x15
-+ .byte 0x0
-+ .uleb128 0x45
-+ .long .LASF1657
-+ .byte 0x1
-+ .value 0x224
-+ .long 0xa5b5
-+ .byte 0x5
-+ .byte 0x3
-+ .long __kstrtab_try_to_del_timer_sync
-+ .uleb128 0x14
-+ .long 0xa593
-+ .uleb128 0x45
-+ .long .LASF1658
-+ .byte 0x1
-+ .value 0x224
-+ .long 0x4fe5
-+ .byte 0x5
-+ .byte 0x3
-+ .long __ksymtab_try_to_del_timer_sync
-+ .uleb128 0x12
-+ .long 0xa5dc
-+ .long 0xbb
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0xe
-+ .byte 0x0
-+ .uleb128 0x45
-+ .long .LASF1659
-+ .byte 0x1
-+ .value 0x241
-+ .long 0xa5ee
-+ .byte 0x5
-+ .byte 0x3
-+ .long __kstrtab_del_timer_sync
-+ .uleb128 0x14
-+ .long 0xa5cc
-+ .uleb128 0x45
-+ .long .LASF1660
-+ .byte 0x1
-+ .value 0x241
-+ .long 0x4fe5
-+ .byte 0x5
-+ .byte 0x3
-+ .long __ksymtab_del_timer_sync
-+ .uleb128 0x12
-+ .long 0xa615
-+ .long 0xbb
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x7
-+ .byte 0x0
-+ .uleb128 0x45
-+ .long .LASF1661
-+ .byte 0x1
-+ .value 0x34d
-+ .long 0xa627
-+ .byte 0x5
-+ .byte 0x3
-+ .long __kstrtab_avenrun
-+ .uleb128 0x14
-+ .long 0xa605
-+ .uleb128 0x45
-+ .long .LASF1662
-+ .byte 0x1
-+ .value 0x34d
-+ .long 0x4fe5
-+ .byte 0x5
-+ .byte 0x3
-+ .long __ksymtab_avenrun
-+ .uleb128 0x12
-+ .long 0xa64e
-+ .long 0xbb
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x10
-+ .byte 0x0
-+ .uleb128 0x45
-+ .long .LASF1663
-+ .byte 0x1
-+ .value 0x44d
-+ .long 0xa660
-+ .byte 0x5
-+ .byte 0x3
-+ .long __kstrtab_schedule_timeout
-+ .uleb128 0x14
-+ .long 0xa63e
-+ .uleb128 0x45
-+ .long .LASF1664
-+ .byte 0x1
-+ .value 0x44d
-+ .long 0x4fe5
-+ .byte 0x5
-+ .byte 0x3
-+ .long __ksymtab_schedule_timeout
-+ .uleb128 0x12
-+ .long 0xa687
-+ .long 0xbb
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x1e
-+ .byte 0x0
-+ .uleb128 0x45
-+ .long .LASF1665
-+ .byte 0x1
-+ .value 0x458
-+ .long 0xa699
-+ .byte 0x5
-+ .byte 0x3
-+ .long __kstrtab_schedule_timeout_interruptible
-+ .uleb128 0x14
-+ .long 0xa677
-+ .uleb128 0x45
-+ .long .LASF1666
-+ .byte 0x1
-+ .value 0x458
-+ .long 0x4fe5
-+ .byte 0x5
-+ .byte 0x3
-+ .long __ksymtab_schedule_timeout_interruptible
-+ .uleb128 0x12
-+ .long 0xa6c0
-+ .long 0xbb
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x20
-+ .byte 0x0
-+ .uleb128 0x45
-+ .long .LASF1667
-+ .byte 0x1
-+ .value 0x45f
-+ .long 0xa6d2
-+ .byte 0x5
-+ .byte 0x3
-+ .long __kstrtab_schedule_timeout_uninterruptible
-+ .uleb128 0x14
-+ .long 0xa6b0
-+ .uleb128 0x45
-+ .long .LASF1668
-+ .byte 0x1
-+ .value 0x45f
-+ .long 0x4fe5
-+ .byte 0x5
-+ .byte 0x3
-+ .long __ksymtab_schedule_timeout_uninterruptible
-+ .uleb128 0x12
-+ .long 0xa6f9
-+ .long 0x161c
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x1f
-+ .byte 0x0
-+ .uleb128 0x43
-+ .long .LASF1669
-+ .byte 0x1
-+ .value 0x4ce
-+ .long 0xa6e9
-+ .uleb128 0x45
-+ .long .LASF1670
-+ .byte 0x1
-+ .value 0x54c
-+ .long 0x2ddf
-+ .byte 0x5
-+ .byte 0x3
-+ .long timers_nb
-+ .uleb128 0x12
-+ .long 0xa727
-+ .long 0xbb
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x6
-+ .byte 0x0
-+ .uleb128 0x45
-+ .long .LASF1671
-+ .byte 0x1
-+ .value 0x625
-+ .long 0xa739
-+ .byte 0x5
-+ .byte 0x3
-+ .long __kstrtab_msleep
-+ .uleb128 0x14
-+ .long 0xa717
-+ .uleb128 0x45
-+ .long .LASF1672
-+ .byte 0x1
-+ .value 0x625
-+ .long 0x4fe5
-+ .byte 0x5
-+ .byte 0x3
-+ .long __ksymtab_msleep
-+ .uleb128 0x12
-+ .long 0xa760
-+ .long 0xbb
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0x14
-+ .byte 0x0
-+ .uleb128 0x45
-+ .long .LASF1673
-+ .byte 0x1
-+ .value 0x634
-+ .long 0xa772
-+ .byte 0x5
-+ .byte 0x3
-+ .long __kstrtab_msleep_interruptible
-+ .uleb128 0x14
-+ .long 0xa750
-+ .uleb128 0x45
-+ .long .LASF1674
-+ .byte 0x1
-+ .value 0x634
-+ .long 0x4fe5
-+ .byte 0x5
-+ .byte 0x3
-+ .long __ksymtab_msleep_interruptible
-+ .uleb128 0x12
-+ .long 0xa794
-+ .long 0x21
-+ .uleb128 0x72
-+ .byte 0x0
-+ .uleb128 0x73
-+ .long .LASF1675
-+ .byte 0x38
-+ .byte 0x3f
-+ .long 0xa789
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x12
-+ .long 0xa7ac
-+ .long 0x2f
-+ .uleb128 0x72
-+ .byte 0x0
-+ .uleb128 0x73
-+ .long .LASF1676
-+ .byte 0x58
-+ .byte 0x30
-+ .long 0xa7a1
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x73
-+ .long .LASF1677
-+ .byte 0x58
-+ .byte 0x3a
-+ .long 0x2f
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x73
-+ .long .LASF1678
-+ .byte 0x59
-+ .byte 0x77
-+ .long 0x923
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x73
-+ .long .LASF1679
-+ .byte 0x8
-+ .byte 0x97
-+ .long 0x2f
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x74
-+ .long .LASF1680
-+ .byte 0x10
-+ .byte 0x58
-+ .long 0x2f
-+ .byte 0x1
-+ .byte 0x1
-+ .byte 0x54
-+ .uleb128 0x73
-+ .long .LASF1681
-+ .byte 0x9
-+ .byte 0x9
-+ .long 0x15f9
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x73
-+ .long .LASF1682
-+ .byte 0x1f
-+ .byte 0x5b
-+ .long 0x173b
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x73
-+ .long .LASF1683
-+ .byte 0x1f
-+ .byte 0x5c
-+ .long 0x173b
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x73
-+ .long .LASF1684
-+ .byte 0x1f
-+ .byte 0x5d
-+ .long 0x170a
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x73
-+ .long .LASF1685
-+ .byte 0x5a
-+ .byte 0xc9
-+ .long 0x21
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x74
-+ .long .LASF1686
-+ .byte 0x1
-+ .byte 0x2f
-+ .long 0x189
-+ .byte 0x1
-+ .byte 0x5
-+ .byte 0x3
-+ .long jiffies_64
-+ .uleb128 0x73
-+ .long .LASF1687
-+ .byte 0x5b
-+ .byte 0x52
-+ .long 0x8941
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x11
-+ .long 0xa863
-+ .byte 0x1
-+ .long 0x21
-+ .uleb128 0x6
-+ .long 0x1e7d
-+ .uleb128 0x6
-+ .long 0x21
-+ .byte 0x0
-+ .uleb128 0x75
-+ .long .LASF1688
-+ .byte 0x5c
-+ .value 0x132
-+ .long 0xa871
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0xa84e
-+ .uleb128 0x73
-+ .long .LASF1689
-+ .byte 0x60
-+ .byte 0x16
-+ .long 0x2f
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x73
-+ .long .LASF1690
-+ .byte 0x61
-+ .byte 0x5d
-+ .long 0x21
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x73
-+ .long .LASF1691
-+ .byte 0x61
-+ .byte 0x5f
-+ .long 0x21
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x73
-+ .long .LASF1692
-+ .byte 0x61
-+ .byte 0x60
-+ .long 0x21
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x73
-+ .long .LASF1693
-+ .byte 0x61
-+ .byte 0x61
-+ .long 0x21
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x73
-+ .long .LASF1694
-+ .byte 0x62
-+ .byte 0x7b
-+ .long 0x21
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x73
-+ .long .LASF405
-+ .byte 0x59
-+ .byte 0x41
-+ .long 0x1e83
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x73
-+ .long .LASF1695
-+ .byte 0x59
-+ .byte 0x72
-+ .long 0x21
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x73
-+ .long .LASF1696
-+ .byte 0x59
-+ .byte 0x75
-+ .long 0x923
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x73
-+ .long .LASF413
-+ .byte 0x63
-+ .byte 0x7d
-+ .long 0xa8f9
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0x1f51
-+ .uleb128 0x75
-+ .long .LASF1697
-+ .byte 0x18
-+ .value 0x19e
-+ .long 0x2d82
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x75
-+ .long .LASF1698
-+ .byte 0x18
-+ .value 0x241
-+ .long 0x2bf1
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x12
-+ .long 0xa926
-+ .long 0x2e6b
-+ .uleb128 0x72
-+ .byte 0x0
-+ .uleb128 0x73
-+ .long .LASF1699
-+ .byte 0x3
-+ .byte 0x1a
-+ .long 0xa91b
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x73
-+ .long .LASF1700
-+ .byte 0x25
-+ .byte 0x71
-+ .long 0x2ee9
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x73
-+ .long .LASF1701
-+ .byte 0x25
-+ .byte 0x72
-+ .long 0x2ee9
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x74
-+ .long .LASF1702
-+ .byte 0x1
-+ .byte 0x53
-+ .long 0x378d
-+ .byte 0x1
-+ .byte 0x5
-+ .byte 0x3
-+ .long boot_tvec_bases
-+ .uleb128 0x76
-+ .long .LASF1703
-+ .byte 0x1
-+ .value 0x34d
-+ .long 0x8dc
-+ .byte 0x1
-+ .byte 0x5
-+ .byte 0x3
-+ .long avenrun
-+ .uleb128 0x73
-+ .long .LASF1704
-+ .byte 0xb
-+ .byte 0x7c
-+ .long 0x21
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x75
-+ .long .LASF1705
-+ .byte 0xb
-+ .value 0x47d
-+ .long 0x3070
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x73
-+ .long .LASF1706
-+ .byte 0x66
-+ .byte 0x21
-+ .long 0x45d4
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x73
-+ .long .LASF1707
-+ .byte 0x67
-+ .byte 0x19
-+ .long 0x46e1
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x12
-+ .long 0xa9b2
-+ .long 0x942
-+ .uleb128 0x72
-+ .byte 0x0
-+ .uleb128 0x73
-+ .long .LASF1708
-+ .byte 0x67
-+ .byte 0x21
-+ .long 0xa9a7
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x73
-+ .long .LASF1709
-+ .byte 0x68
-+ .byte 0xc
-+ .long 0x674
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x12
-+ .long 0xa9dc
-+ .long 0x507e
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0xdf
-+ .byte 0x0
-+ .uleb128 0x73
-+ .long .LASF1016
-+ .byte 0x6a
-+ .byte 0xb2
-+ .long 0xa9cc
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x73
-+ .long .LASF1710
-+ .byte 0x6c
-+ .byte 0xd
-+ .long 0x21
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x73
-+ .long .LASF1711
-+ .byte 0x6d
-+ .byte 0x62
-+ .long 0x534f
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x73
-+ .long .LASF1712
-+ .byte 0x24
-+ .byte 0xb4
-+ .long 0x1680
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x12
-+ .long 0xaa20
-+ .long 0x36e
-+ .uleb128 0x13
-+ .long 0x28
-+ .byte 0xf
-+ .byte 0x0
-+ .uleb128 0x73
-+ .long .LASF1713
-+ .byte 0x15
-+ .byte 0xc1
-+ .long 0xaa10
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x73
-+ .long .LASF1714
-+ .byte 0x6e
-+ .byte 0x3a
-+ .long 0x86a5
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x73
-+ .long .LASF563
-+ .byte 0x6e
-+ .byte 0x7a
-+ .long 0x2bdb
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x73
-+ .long .LASF1715
-+ .byte 0x51
-+ .byte 0xe2
-+ .long 0x6e9c
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x75
-+ .long .LASF1716
-+ .byte 0x51
-+ .value 0x106
-+ .long 0x36ad
-+ .byte 0x1
-+ .byte 0x1
-+ .uleb128 0x5
-+ .long 0xaa73
-+ .byte 0x1
-+ .uleb128 0x6
-+ .long 0x160b
-+ .uleb128 0x6
-+ .long 0x77
-+ .byte 0x0
-+ .uleb128 0x76
-+ .long .LASF1717
-+ .byte 0x1
-+ .value 0x3b9
-+ .long 0xaa86
-+ .byte 0x1
-+ .byte 0x5
-+ .byte 0x3
-+ .long rec_event
-+ .uleb128 0x4
-+ .byte 0x4
-+ .long 0xaa62
-+ .byte 0x0
-+ .section .debug_abbrev
-+ .uleb128 0x1
-+ .uleb128 0x11
-+ .byte 0x1
-+ .uleb128 0x10
-+ .uleb128 0x6
-+ .uleb128 0x52
-+ .uleb128 0x1
-+ .uleb128 0x25
-+ .uleb128 0xe
-+ .uleb128 0x13
-+ .uleb128 0xb
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x1b
-+ .uleb128 0xe
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x2
-+ .uleb128 0x24
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0x8
-+ .uleb128 0xb
-+ .uleb128 0xb
-+ .uleb128 0x3e
-+ .uleb128 0xb
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0x24
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0xb
-+ .uleb128 0xb
-+ .uleb128 0x3e
-+ .uleb128 0xb
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x4
-+ .uleb128 0xf
-+ .byte 0x0
-+ .uleb128 0xb
-+ .uleb128 0xb
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x5
-+ .uleb128 0x15
-+ .byte 0x1
-+ .uleb128 0x1
-+ .uleb128 0x13
-+ .uleb128 0x27
-+ .uleb128 0xc
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x6
-+ .uleb128 0x5
-+ .byte 0x0
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x7
-+ .uleb128 0x16
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0xb
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x8
-+ .uleb128 0x16
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0x8
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0xb
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x9
-+ .uleb128 0x13
-+ .byte 0x1
-+ .uleb128 0x1
-+ .uleb128 0x13
-+ .uleb128 0xb
-+ .uleb128 0xb
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0xb
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0xa
-+ .uleb128 0xd
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0xb
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .uleb128 0x38
-+ .uleb128 0xa
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0xb
-+ .uleb128 0xd
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0x8
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0xb
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .uleb128 0x38
-+ .uleb128 0xa
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0xc
-+ .uleb128 0x17
-+ .byte 0x1
-+ .uleb128 0x1
-+ .uleb128 0x13
-+ .uleb128 0xb
-+ .uleb128 0xb
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0xb
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0xd
-+ .uleb128 0xd
-+ .byte 0x0
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0xe
-+ .uleb128 0xd
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0xb
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0xf
-+ .uleb128 0x13
-+ .byte 0x1
-+ .uleb128 0x1
-+ .uleb128 0x13
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0xb
-+ .uleb128 0xb
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0xb
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x10
-+ .uleb128 0xd
-+ .byte 0x0
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .uleb128 0x38
-+ .uleb128 0xa
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x11
-+ .uleb128 0x15
-+ .byte 0x1
-+ .uleb128 0x1
-+ .uleb128 0x13
-+ .uleb128 0x27
-+ .uleb128 0xc
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x12
-+ .uleb128 0x1
-+ .byte 0x1
-+ .uleb128 0x1
-+ .uleb128 0x13
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x13
-+ .uleb128 0x21
-+ .byte 0x0
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .uleb128 0x2f
-+ .uleb128 0xb
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x14
-+ .uleb128 0x26
-+ .byte 0x0
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x15
-+ .uleb128 0x13
-+ .byte 0x1
-+ .uleb128 0x1
-+ .uleb128 0x13
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0xb
-+ .uleb128 0xb
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x16
-+ .uleb128 0xd
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .uleb128 0x38
-+ .uleb128 0xa
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x17
-+ .uleb128 0xd
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0x8
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .uleb128 0x38
-+ .uleb128 0xa
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x18
-+ .uleb128 0x15
-+ .byte 0x0
-+ .uleb128 0x27
-+ .uleb128 0xc
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x19
-+ .uleb128 0x15
-+ .byte 0x0
-+ .uleb128 0x27
-+ .uleb128 0xc
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x1a
-+ .uleb128 0x13
-+ .byte 0x1
-+ .uleb128 0x1
-+ .uleb128 0x13
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0xb
-+ .uleb128 0x5
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0xb
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x1b
-+ .uleb128 0x17
-+ .byte 0x1
-+ .uleb128 0x1
-+ .uleb128 0x13
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0xb
-+ .uleb128 0x5
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x1c
-+ .uleb128 0xd
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x1d
-+ .uleb128 0x13
-+ .byte 0x1
-+ .uleb128 0x1
-+ .uleb128 0x13
-+ .uleb128 0xb
-+ .uleb128 0xb
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x1e
-+ .uleb128 0x16
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x1f
-+ .uleb128 0x13
-+ .byte 0x1
-+ .uleb128 0x1
-+ .uleb128 0x13
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0xb
-+ .uleb128 0x5
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x20
-+ .uleb128 0xd
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .uleb128 0xb
-+ .uleb128 0xb
-+ .uleb128 0xd
-+ .uleb128 0xb
-+ .uleb128 0xc
-+ .uleb128 0xb
-+ .uleb128 0x38
-+ .uleb128 0xa
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x21
-+ .uleb128 0x13
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3c
-+ .uleb128 0xc
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x22
-+ .uleb128 0xf
-+ .byte 0x0
-+ .uleb128 0xb
-+ .uleb128 0xb
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x23
-+ .uleb128 0x21
-+ .byte 0x0
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x24
-+ .uleb128 0x13
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0xb
-+ .uleb128 0xb
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x25
-+ .uleb128 0x17
-+ .byte 0x1
-+ .uleb128 0x1
-+ .uleb128 0x13
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0xb
-+ .uleb128 0xb
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0xb
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x26
-+ .uleb128 0xd
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0x8
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0xb
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x27
-+ .uleb128 0x4
-+ .byte 0x1
-+ .uleb128 0x1
-+ .uleb128 0x13
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0xb
-+ .uleb128 0xb
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0xb
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x28
-+ .uleb128 0x28
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x1c
-+ .uleb128 0xd
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x29
-+ .uleb128 0x13
-+ .byte 0x1
-+ .uleb128 0x1
-+ .uleb128 0x13
-+ .uleb128 0x3
-+ .uleb128 0x8
-+ .uleb128 0xb
-+ .uleb128 0xb
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0xb
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x2a
-+ .uleb128 0x13
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0xb
-+ .uleb128 0xb
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0xb
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x2b
-+ .uleb128 0x17
-+ .byte 0x1
-+ .uleb128 0x1
-+ .uleb128 0x13
-+ .uleb128 0xb
-+ .uleb128 0xb
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x2c
-+ .uleb128 0x4
-+ .byte 0x1
-+ .uleb128 0x1
-+ .uleb128 0x13
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0xb
-+ .uleb128 0xb
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x2d
-+ .uleb128 0x35
-+ .byte 0x0
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x2e
-+ .uleb128 0x13
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0x8
-+ .uleb128 0x3c
-+ .uleb128 0xc
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x2f
-+ .uleb128 0xd
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0xb
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .uleb128 0xb
-+ .uleb128 0xb
-+ .uleb128 0xd
-+ .uleb128 0xb
-+ .uleb128 0xc
-+ .uleb128 0xb
-+ .uleb128 0x38
-+ .uleb128 0xa
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x30
-+ .uleb128 0xd
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0x8
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x31
-+ .uleb128 0x26
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x32
-+ .uleb128 0x2e
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0xb
-+ .uleb128 0x27
-+ .uleb128 0xc
-+ .uleb128 0x20
-+ .uleb128 0xb
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x33
-+ .uleb128 0x2e
-+ .byte 0x1
-+ .uleb128 0x1
-+ .uleb128 0x13
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0xb
-+ .uleb128 0x27
-+ .uleb128 0xc
-+ .uleb128 0x20
-+ .uleb128 0xb
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x34
-+ .uleb128 0x5
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0x8
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0xb
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x35
-+ .uleb128 0x5
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0xb
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x36
-+ .uleb128 0x2e
-+ .byte 0x1
-+ .uleb128 0x1
-+ .uleb128 0x13
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0xb
-+ .uleb128 0x27
-+ .uleb128 0xc
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .uleb128 0x20
-+ .uleb128 0xb
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x37
-+ .uleb128 0xb
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x38
-+ .uleb128 0x34
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0xb
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x39
-+ .uleb128 0xb
-+ .byte 0x1
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x3a
-+ .uleb128 0x34
-+ .byte 0x0
-+ .uleb128 0x31
-+ .uleb128 0x13
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x3b
-+ .uleb128 0x2e
-+ .byte 0x1
-+ .uleb128 0x1
-+ .uleb128 0x13
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .uleb128 0x27
-+ .uleb128 0xc
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .uleb128 0x20
-+ .uleb128 0xb
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x3c
-+ .uleb128 0x5
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0x8
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x3d
-+ .uleb128 0x5
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x3e
-+ .uleb128 0xa
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0xb
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x3f
-+ .uleb128 0x34
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0x8
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0xb
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x40
-+ .uleb128 0xa
-+ .byte 0x0
-+ .uleb128 0x31
-+ .uleb128 0x13
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x41
-+ .uleb128 0x34
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0x8
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x42
-+ .uleb128 0x2e
-+ .byte 0x1
-+ .uleb128 0x1
-+ .uleb128 0x13
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .uleb128 0x27
-+ .uleb128 0xc
-+ .uleb128 0x20
-+ .uleb128 0xb
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x43
-+ .uleb128 0x34
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x44
-+ .uleb128 0x2e
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0xb
-+ .uleb128 0x27
-+ .uleb128 0xc
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .uleb128 0x20
-+ .uleb128 0xb
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x45
-+ .uleb128 0x34
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .uleb128 0x2
-+ .uleb128 0xa
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x46
-+ .uleb128 0x2e
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .uleb128 0x27
-+ .uleb128 0xc
-+ .uleb128 0x20
-+ .uleb128 0xb
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x47
-+ .uleb128 0x2e
-+ .byte 0x1
-+ .uleb128 0x1
-+ .uleb128 0x13
-+ .uleb128 0x3f
-+ .uleb128 0xc
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0xb
-+ .uleb128 0x27
-+ .uleb128 0xc
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .uleb128 0x11
-+ .uleb128 0x1
-+ .uleb128 0x12
-+ .uleb128 0x1
-+ .uleb128 0x40
-+ .uleb128 0x6
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x48
-+ .uleb128 0x5
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0x8
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0xb
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .uleb128 0x2
-+ .uleb128 0x6
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x49
-+ .uleb128 0x2e
-+ .byte 0x1
-+ .uleb128 0x1
-+ .uleb128 0x13
-+ .uleb128 0x3f
-+ .uleb128 0xc
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0xb
-+ .uleb128 0x27
-+ .uleb128 0xc
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .uleb128 0x11
-+ .uleb128 0x1
-+ .uleb128 0x12
-+ .uleb128 0x1
-+ .uleb128 0x40
-+ .uleb128 0xa
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x4a
-+ .uleb128 0xb
-+ .byte 0x1
-+ .uleb128 0x11
-+ .uleb128 0x1
-+ .uleb128 0x12
-+ .uleb128 0x1
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x4b
-+ .uleb128 0x34
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0xb
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .uleb128 0x2
-+ .uleb128 0x6
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x4c
-+ .uleb128 0x2e
-+ .byte 0x1
-+ .uleb128 0x1
-+ .uleb128 0x13
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .uleb128 0x27
-+ .uleb128 0xc
-+ .uleb128 0x11
-+ .uleb128 0x1
-+ .uleb128 0x12
-+ .uleb128 0x1
-+ .uleb128 0x40
-+ .uleb128 0x6
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x4d
-+ .uleb128 0x5
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .uleb128 0x2
-+ .uleb128 0x6
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x4e
-+ .uleb128 0x5
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .uleb128 0x2
-+ .uleb128 0xa
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x4f
-+ .uleb128 0x34
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .uleb128 0x2
-+ .uleb128 0x6
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x50
-+ .uleb128 0x34
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0x8
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .uleb128 0x2
-+ .uleb128 0x6
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x51
-+ .uleb128 0xb
-+ .byte 0x1
-+ .uleb128 0x1
-+ .uleb128 0x13
-+ .uleb128 0x11
-+ .uleb128 0x1
-+ .uleb128 0x12
-+ .uleb128 0x1
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x52
-+ .uleb128 0x1d
-+ .byte 0x1
-+ .uleb128 0x31
-+ .uleb128 0x13
-+ .uleb128 0x55
-+ .uleb128 0x6
-+ .uleb128 0x58
-+ .uleb128 0xb
-+ .uleb128 0x59
-+ .uleb128 0x5
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x53
-+ .uleb128 0x5
-+ .byte 0x0
-+ .uleb128 0x31
-+ .uleb128 0x13
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x54
-+ .uleb128 0x1d
-+ .byte 0x1
-+ .uleb128 0x31
-+ .uleb128 0x13
-+ .uleb128 0x55
-+ .uleb128 0x6
-+ .uleb128 0x58
-+ .uleb128 0xb
-+ .uleb128 0x59
-+ .uleb128 0xb
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x55
-+ .uleb128 0x5
-+ .byte 0x0
-+ .uleb128 0x31
-+ .uleb128 0x13
-+ .uleb128 0x2
-+ .uleb128 0xa
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x56
-+ .uleb128 0x2e
-+ .byte 0x1
-+ .uleb128 0x1
-+ .uleb128 0x13
-+ .uleb128 0x3f
-+ .uleb128 0xc
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .uleb128 0x27
-+ .uleb128 0xc
-+ .uleb128 0x11
-+ .uleb128 0x1
-+ .uleb128 0x12
-+ .uleb128 0x1
-+ .uleb128 0x40
-+ .uleb128 0xa
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x57
-+ .uleb128 0x2e
-+ .byte 0x1
-+ .uleb128 0x1
-+ .uleb128 0x13
-+ .uleb128 0x3f
-+ .uleb128 0xc
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .uleb128 0x27
-+ .uleb128 0xc
-+ .uleb128 0x11
-+ .uleb128 0x1
-+ .uleb128 0x12
-+ .uleb128 0x1
-+ .uleb128 0x40
-+ .uleb128 0x6
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x58
-+ .uleb128 0x1d
-+ .byte 0x1
-+ .uleb128 0x31
-+ .uleb128 0x13
-+ .uleb128 0x11
-+ .uleb128 0x1
-+ .uleb128 0x12
-+ .uleb128 0x1
-+ .uleb128 0x58
-+ .uleb128 0xb
-+ .uleb128 0x59
-+ .uleb128 0x5
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x59
-+ .uleb128 0x2e
-+ .byte 0x1
-+ .uleb128 0x1
-+ .uleb128 0x13
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .uleb128 0x27
-+ .uleb128 0xc
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .uleb128 0x11
-+ .uleb128 0x1
-+ .uleb128 0x12
-+ .uleb128 0x1
-+ .uleb128 0x40
-+ .uleb128 0x6
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x5a
-+ .uleb128 0x5
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0x8
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .uleb128 0x2
-+ .uleb128 0x6
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x5b
-+ .uleb128 0x1d
-+ .byte 0x1
-+ .uleb128 0x1
-+ .uleb128 0x13
-+ .uleb128 0x31
-+ .uleb128 0x13
-+ .uleb128 0x55
-+ .uleb128 0x6
-+ .uleb128 0x58
-+ .uleb128 0xb
-+ .uleb128 0x59
-+ .uleb128 0x5
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x5c
-+ .uleb128 0x1d
-+ .byte 0x1
-+ .uleb128 0x1
-+ .uleb128 0x13
-+ .uleb128 0x31
-+ .uleb128 0x13
-+ .uleb128 0x55
-+ .uleb128 0x6
-+ .uleb128 0x58
-+ .uleb128 0xb
-+ .uleb128 0x59
-+ .uleb128 0xb
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x5d
-+ .uleb128 0x5
-+ .byte 0x0
-+ .uleb128 0x31
-+ .uleb128 0x13
-+ .uleb128 0x2
-+ .uleb128 0x6
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x5e
-+ .uleb128 0xb
-+ .byte 0x1
-+ .uleb128 0x1
-+ .uleb128 0x13
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x5f
-+ .uleb128 0x34
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .uleb128 0x34
-+ .uleb128 0xc
-+ .uleb128 0x2
-+ .uleb128 0xa
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x60
-+ .uleb128 0xb
-+ .byte 0x1
-+ .uleb128 0x1
-+ .uleb128 0x13
-+ .uleb128 0x55
-+ .uleb128 0x6
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x61
-+ .uleb128 0x34
-+ .byte 0x0
-+ .uleb128 0x31
-+ .uleb128 0x13
-+ .uleb128 0x2
-+ .uleb128 0x6
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x62
-+ .uleb128 0x1d
-+ .byte 0x1
-+ .uleb128 0x1
-+ .uleb128 0x13
-+ .uleb128 0x31
-+ .uleb128 0x13
-+ .uleb128 0x11
-+ .uleb128 0x1
-+ .uleb128 0x12
-+ .uleb128 0x1
-+ .uleb128 0x58
-+ .uleb128 0xb
-+ .uleb128 0x59
-+ .uleb128 0x5
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x63
-+ .uleb128 0x1d
-+ .byte 0x1
-+ .uleb128 0x31
-+ .uleb128 0x13
-+ .uleb128 0x11
-+ .uleb128 0x1
-+ .uleb128 0x12
-+ .uleb128 0x1
-+ .uleb128 0x58
-+ .uleb128 0xb
-+ .uleb128 0x59
-+ .uleb128 0xb
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x64
-+ .uleb128 0xb
-+ .byte 0x1
-+ .uleb128 0x55
-+ .uleb128 0x6
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x65
-+ .uleb128 0x34
-+ .byte 0x0
-+ .uleb128 0x31
-+ .uleb128 0x13
-+ .uleb128 0x2
-+ .uleb128 0xa
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x66
-+ .uleb128 0x1d
-+ .byte 0x1
-+ .uleb128 0x1
-+ .uleb128 0x13
-+ .uleb128 0x31
-+ .uleb128 0x13
-+ .uleb128 0x11
-+ .uleb128 0x1
-+ .uleb128 0x12
-+ .uleb128 0x1
-+ .uleb128 0x58
-+ .uleb128 0xb
-+ .uleb128 0x59
-+ .uleb128 0xb
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x67
-+ .uleb128 0x1d
-+ .byte 0x0
-+ .uleb128 0x31
-+ .uleb128 0x13
-+ .uleb128 0x11
-+ .uleb128 0x1
-+ .uleb128 0x12
-+ .uleb128 0x1
-+ .uleb128 0x58
-+ .uleb128 0xb
-+ .uleb128 0x59
-+ .uleb128 0xb
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x68
-+ .uleb128 0x2e
-+ .byte 0x1
-+ .uleb128 0x1
-+ .uleb128 0x13
-+ .uleb128 0x3f
-+ .uleb128 0xc
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .uleb128 0x27
-+ .uleb128 0xc
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .uleb128 0x11
-+ .uleb128 0x1
-+ .uleb128 0x12
-+ .uleb128 0x1
-+ .uleb128 0x40
-+ .uleb128 0x6
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x69
-+ .uleb128 0xa
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0x8
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .uleb128 0x11
-+ .uleb128 0x1
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x6a
-+ .uleb128 0x34
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0x8
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .uleb128 0x2
-+ .uleb128 0xa
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x6b
-+ .uleb128 0x2e
-+ .byte 0x1
-+ .uleb128 0x1
-+ .uleb128 0x13
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .uleb128 0x27
-+ .uleb128 0xc
-+ .uleb128 0x11
-+ .uleb128 0x1
-+ .uleb128 0x12
-+ .uleb128 0x1
-+ .uleb128 0x40
-+ .uleb128 0xa
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x6c
-+ .uleb128 0x2e
-+ .byte 0x1
-+ .uleb128 0x1
-+ .uleb128 0x13
-+ .uleb128 0x3f
-+ .uleb128 0xc
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .uleb128 0x27
-+ .uleb128 0xc
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .uleb128 0x11
-+ .uleb128 0x1
-+ .uleb128 0x12
-+ .uleb128 0x1
-+ .uleb128 0x40
-+ .uleb128 0xa
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x6d
-+ .uleb128 0x2e
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .uleb128 0x27
-+ .uleb128 0xc
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .uleb128 0x20
-+ .uleb128 0xb
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x6e
-+ .uleb128 0x1d
-+ .byte 0x0
-+ .uleb128 0x31
-+ .uleb128 0x13
-+ .uleb128 0x55
-+ .uleb128 0x6
-+ .uleb128 0x58
-+ .uleb128 0xb
-+ .uleb128 0x59
-+ .uleb128 0x5
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x6f
-+ .uleb128 0x2e
-+ .byte 0x0
-+ .uleb128 0x3f
-+ .uleb128 0xc
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .uleb128 0x27
-+ .uleb128 0xc
-+ .uleb128 0x11
-+ .uleb128 0x1
-+ .uleb128 0x12
-+ .uleb128 0x1
-+ .uleb128 0x40
-+ .uleb128 0xa
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x70
-+ .uleb128 0x1d
-+ .byte 0x0
-+ .uleb128 0x31
-+ .uleb128 0x13
-+ .uleb128 0x11
-+ .uleb128 0x1
-+ .uleb128 0x12
-+ .uleb128 0x1
-+ .uleb128 0x58
-+ .uleb128 0xb
-+ .uleb128 0x59
-+ .uleb128 0x5
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x71
-+ .uleb128 0x34
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0xb
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .uleb128 0x2
-+ .uleb128 0xa
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x72
-+ .uleb128 0x21
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x73
-+ .uleb128 0x34
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0xb
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .uleb128 0x3f
-+ .uleb128 0xc
-+ .uleb128 0x3c
-+ .uleb128 0xc
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x74
-+ .uleb128 0x34
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0xb
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .uleb128 0x3f
-+ .uleb128 0xc
-+ .uleb128 0x2
-+ .uleb128 0xa
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x75
-+ .uleb128 0x34
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .uleb128 0x3f
-+ .uleb128 0xc
-+ .uleb128 0x3c
-+ .uleb128 0xc
-+ .byte 0x0
-+ .byte 0x0
-+ .uleb128 0x76
-+ .uleb128 0x34
-+ .byte 0x0
-+ .uleb128 0x3
-+ .uleb128 0xe
-+ .uleb128 0x3a
-+ .uleb128 0xb
-+ .uleb128 0x3b
-+ .uleb128 0x5
-+ .uleb128 0x49
-+ .uleb128 0x13
-+ .uleb128 0x3f
-+ .uleb128 0xc
-+ .uleb128 0x2
-+ .uleb128 0xa
-+ .byte 0x0
-+ .byte 0x0
-+ .byte 0x0
-+ .section .debug_pubnames,"",@progbits
-+ .long 0x2bb
-+ .value 0x2
-+ .long .Ldebug_info0
-+ .long 0xaa8d
-+ .long 0x8ccf
-+ .string "__round_jiffies"
-+ .long 0x8d1f
-+ .string "__round_jiffies_relative"
-+ .long 0x8d58
-+ .string "round_jiffies"
-+ .long 0x8d9b
-+ .string "round_jiffies_relative"
-+ .long 0x8eda
-+ .string "init_timer"
-+ .long 0x8f49
-+ .string "init_timer_deferrable"
-+ .long 0x9345
-+ .string "init_timers"
-+ .long 0x96cb
-+ .string "do_sysinfo"
-+ .long 0x97ea
-+ .string "sys_sysinfo"
-+ .long 0x9851
-+ .string "sys_alarm"
-+ .long 0x98b0
-+ .string "do_timer"
-+ .long 0x9926
-+ .string "run_local_timers"
-+ .long 0x99b3
-+ .string "try_to_del_timer_sync"
-+ .long 0x9a6a
-+ .string "del_timer_sync"
-+ .long 0x9ac3
-+ .string "__mod_timer"
-+ .long 0x9c15
-+ .string "schedule_timeout"
-+ .long 0x9cdb
-+ .string "schedule_timeout_uninterruptible"
-+ .long 0x9d2d
-+ .string "msleep"
-+ .long 0x9d67
-+ .string "schedule_timeout_interruptible"
-+ .long 0x9de4
-+ .string "msleep_interruptible"
-+ .long 0x9eb0
-+ .string "update_process_times"
-+ .long 0x9f33
-+ .string "sys_getpid"
-+ .long 0x9fd6
-+ .string "sys_getppid"
-+ .long 0xa03a
-+ .string "sys_getuid"
-+ .long 0xa07c
-+ .string "sys_geteuid"
-+ .long 0xa0be
-+ .string "sys_getgid"
-+ .long 0xa100
-+ .string "sys_getegid"
-+ .long 0xa142
-+ .string "sys_gettid"
-+ .long 0xa184
-+ .string "mod_timer"
-+ .long 0xa1db
-+ .string "del_timer"
-+ .long 0xa286
-+ .string "add_timer_on"
-+ .long 0xa7e0
-+ .string "current_stack_pointer"
-+ .long 0xa82f
-+ .string "jiffies_64"
-+ .long 0xa94d
-+ .string "boot_tvec_bases"
-+ .long 0xa95f
-+ .string "avenrun"
-+ .long 0xaa73
-+ .string "rec_event"
-+ .long 0x0
-+ .section .debug_aranges,"",@progbits
-+ .long 0x44
-+ .value 0x2
-+ .long .Ldebug_info0
-+ .byte 0x4
-+ .byte 0x0
-+ .value 0x0
-+ .value 0x0
-+ .long .Ltext0
-+ .long .Letext0-.Ltext0
-+ .long .LFB923
-+ .long .LFE923-.LFB923
-+ .long .LFB924
-+ .long .LFE924-.LFB924
-+ .long .LFB916
-+ .long .LFE916-.LFB916
-+ .long .LFB918
-+ .long .LFE918-.LFB918
-+ .long .LFB917
-+ .long .LFE917-.LFB917
-+ .long 0x0
-+ .long 0x0
-+ .section .debug_ranges,"",@progbits
-+.Ldebug_ranges0:
-+ .long .LBB185
-+ .long .LBE185
-+ .long .LBB189
-+ .long .LBE189
-+ .long 0x0
-+ .long 0x0
-+ .long .LBB187
-+ .long .LBE187
-+ .long .LBB191
-+ .long .LBE191
-+ .long 0x0
-+ .long 0x0
-+ .long .LBB199
-+ .long .LBE199
-+ .long .LBB208
-+ .long .LBE208
-+ .long 0x0
-+ .long 0x0
-+ .long .LBB201
-+ .long .LBE201
-+ .long .LBB205
-+ .long .LBE205
-+ .long 0x0
-+ .long 0x0
-+ .long .LBB203
-+ .long .LBE203
-+ .long .LBB210
-+ .long .LBE210
-+ .long 0x0
-+ .long 0x0
-+ .long .LBB241
-+ .long .LBE241
-+ .long .LBB257
-+ .long .LBE257
-+ .long .LBB255
-+ .long .LBE255
-+ .long .LBB253
-+ .long .LBE253
-+ .long .LBB250
-+ .long .LBE250
-+ .long 0x0
-+ .long 0x0
-+ .long .LBB258
-+ .long .LBE258
-+ .long .LBB260
-+ .long .LBE260
-+ .long 0x0
-+ .long 0x0
-+ .long .LBB322
-+ .long .LBE322
-+ .long .LBB323
-+ .long .LBE323
-+ .long 0x0
-+ .long 0x0
-+ .long .LBB326
-+ .long .LBE326
-+ .long .LBB332
-+ .long .LBE332
-+ .long .LBB330
-+ .long .LBE330
-+ .long .LBB328
-+ .long .LBE328
-+ .long 0x0
-+ .long 0x0
-+ .long .LBB327
-+ .long .LBE327
-+ .long .LBB333
-+ .long .LBE333
-+ .long .LBB331
-+ .long .LBE331
-+ .long .LBB329
-+ .long .LBE329
-+ .long 0x0
-+ .long 0x0
-+ .long .LBB334
-+ .long .LBE334
-+ .long .LBB338
-+ .long .LBE338
-+ .long 0x0
-+ .long 0x0
-+ .long .LBB336
-+ .long .LBE336
-+ .long .LBB340
-+ .long .LBE340
-+ .long 0x0
-+ .long 0x0
-+ .long .LBB368
-+ .long .LBE368
-+ .long .LBB371
-+ .long .LBE371
-+ .long 0x0
-+ .long 0x0
-+ .long .LBB370
-+ .long .LBE370
-+ .long .LBB373
-+ .long .LBE373
-+ .long 0x0
-+ .long 0x0
-+ .long .LBB389
-+ .long .LBE389
-+ .long .LBB390
-+ .long .LBE390
-+ .long 0x0
-+ .long 0x0
-+ .long .LBB412
-+ .long .LBE412
-+ .long .LBB414
-+ .long .LBE414
-+ .long 0x0
-+ .long 0x0
-+ .long .LBB419
-+ .long .LBE419
-+ .long .LBB424
-+ .long .LBE424
-+ .long 0x0
-+ .long 0x0
-+ .section .debug_str,"MS",@progbits,1
-+.LASF16:
-+ .string "long long int"
-+.LASF610:
-+ .string "qs_pending"
-+.LASF28:
-+ .string "__u64"
-+.LASF1708:
-+ .string "idt_table"
-+.LASF596:
-+ .string "notifier_call"
-+.LASF768:
-+ .string "ki_flags"
-+.LASF107:
-+ .string "line"
-+.LASF1360:
-+ .string "link"
-+.LASF1675:
-+ .string "console_printk"
-+.LASF828:
-+ .string "vm_page_prot"
-+.LASF694:
-+ .string "shared_vm"
-+.LASF547:
-+ .string "vm_stat_diff"
-+.LASF496:
-+ .string "si_errno"
-+.LASF1381:
-+ .string "read"
-+.LASF687:
-+ .string "mmlist"
-+.LASF1505:
-+ .string "vm_set"
-+.LASF1609:
-+ .string "__mod_timer"
-+.LASF1636:
-+ .string "__kstrtab_boot_tvec_bases"
-+.LASF1:
-+ .string "long unsigned int"
-+.LASF264:
-+ .string "pi_lock"
-+.LASF315:
-+ .string "private"
-+.LASF552:
-+ .string "lowmem_reserve"
-+.LASF1498:
-+ .string "offset"
-+.LASF1168:
-+ .string "ia_valid"
-+.LASF1101:
-+ .string "last"
-+.LASF711:
-+ .string "cpu_vm_mask"
-+.LASF468:
-+ .string "sa_flags"
-+.LASF1687:
-+ .string "jiffies"
-+.LASF684:
-+ .string "map_count"
-+.LASF406:
-+ .string "smp_prepare_boot_cpu"
-+.LASF681:
-+ .string "free_area_cache"
-+.LASF1331:
-+ .string "assoc_mapping"
-+.LASF139:
-+ .string "fsave"
-+.LASF404:
-+ .string "release"
-+.LASF678:
-+ .string "mmap_base"
-+.LASF207:
-+ .string "sibling"
-+.LASF1562:
-+ .string "ret__"
-+.LASF1431:
-+ .string "file_lock_operations"
-+.LASF1463:
-+ .string "read_inode"
-+.LASF1623:
-+ .string "sys_getppid"
-+.LASF394:
-+ .string "coherent_dma_mask"
-+.LASF356:
-+ .string "mpc_config_translation"
-+.LASF718:
-+ .string "core_startup_done"
-+.LASF455:
-+ .string "semadj"
-+.LASF1558:
-+ .string "timer_stats_timer_set_start_info"
-+.LASF95:
-+ .string "___eip"
-+.LASF1125:
-+ .string "s_qcop"
-+.LASF14:
-+ .string "__kernel_gid32_t"
-+.LASF905:
-+ .string "kstat"
-+.LASF222:
-+ .string "it_prof_expires"
-+.LASF1645:
-+ .string "__kstrtab_round_jiffies_relative"
-+.LASF1138:
-+ .string "s_dirty"
-+.LASF1464:
-+ .string "dirty_inode"
-+.LASF830:
-+ .string "vm_rb"
-+.LASF214:
-+ .string "rt_priority"
-+.LASF1295:
-+ .string "set_xquota"
-+.LASF881:
-+ .string "SLEEP_INTERRUPTED"
-+.LASF874:
-+ .string "ngroups"
-+.LASF1163:
-+ .string "height"
-+.LASF1016:
-+ .string "irq_desc"
-+.LASF1565:
-+ .string "__round_jiffies"
-+.LASF1699:
-+ .string "malloc_sizes"
-+.LASF17:
-+ .string "umode_t"
-+.LASF197:
-+ .string "exit_state"
-+.LASF1596:
-+ .string "found"
-+.LASF703:
-+ .string "end_data"
-+.LASF164:
-+ .string "addr_limit"
-+.LASF895:
-+ .string "cpu_usage_stat"
-+.LASF1126:
-+ .string "s_export_op"
-+.LASF748:
-+ .string "resolution"
-+.LASF662:
-+ .string "i_cindex"
-+.LASF1015:
-+ .string "irq_flow_handler_t"
-+.LASF1298:
-+ .string "dqonoff_mutex"
-+.LASF216:
-+ .string "stime"
-+.LASF509:
-+ .string "list"
-+.LASF1172:
-+ .string "ia_size"
-+.LASF359:
-+ .string "trans_quad"
-+.LASF1586:
-+ .string "init_timers"
-+.LASF284:
-+ .string "raw_spinlock_t"
-+.LASF407:
-+ .string "smp_prepare_cpus"
-+.LASF414:
-+ .string "name"
-+.LASF276:
-+ .string "ioac"
-+.LASF1203:
-+ .string "d_icount"
-+.LASF471:
-+ .string "k_sigaction"
-+.LASF692:
-+ .string "total_vm"
-+.LASF1455:
-+ .string "fs_flags"
-+.LASF1473:
-+ .string "unlockfs"
-+.LASF317:
-+ .string "task_list"
-+.LASF1131:
-+ .string "s_lock"
-+.LASF39:
-+ .string "loff_t"
-+.LASF1404:
-+ .string "fl_owner"
-+.LASF549:
-+ .string "pages_min"
-+.LASF1567:
-+ .string "round_jiffies"
-+.LASF1631:
-+ .string "timer_stats_timer_clear_start_info"
-+.LASF535:
-+ .string "vfsmount"
-+.LASF515:
-+ .string "pwdmnt"
-+.LASF1332:
-+ .string "block_device"
-+.LASF650:
-+ .string "i_bytes"
-+.LASF1337:
-+ .string "bd_mount_sem"
-+.LASF1077:
-+ .string "device_attribute"
-+.LASF765:
-+ .string "iov_len"
-+.LASF966:
-+ .string "symtab"
-+.LASF76:
-+ .string "regs"
-+.LASF162:
-+ .string "exec_domain"
-+.LASF1167:
-+ .string "iattr"
-+.LASF1075:
-+ .string "resume"
-+.LASF174:
-+ .string "load_weight"
-+.LASF1523:
-+ .string "__list_add"
-+.LASF545:
-+ .string "per_cpu_pageset"
-+.LASF986:
-+ .string "kset_uevent_ops"
-+.LASF1237:
-+ .string "dqi_free_entry"
-+.LASF143:
-+ .string "thread_struct"
-+.LASF1072:
-+ .string "suspend"
-+.LASF1398:
-+ .string "splice_write"
-+.LASF670:
-+ .string "i_writecount"
-+.LASF1500:
-+ .string "mapping"
-+.LASF305:
-+ .string "rb_root"
-+.LASF1178:
-+ .string "qsize_t"
-+.LASF1394:
-+ .string "sendpage"
-+.LASF232:
-+ .string "group_info"
-+.LASF677:
-+ .string "unmap_area"
-+.LASF518:
-+ .string "d_count"
-+.LASF982:
-+ .string "list_lock"
-+.LASF153:
-+ .string "v86mask"
-+.LASF1348:
-+ .string "bd_list"
-+.LASF543:
-+ .string "high"
-+.LASF469:
-+ .string "sa_restorer"
-+.LASF1423:
-+ .string "ahead_start"
-+.LASF689:
-+ .string "_anon_rss"
-+.LASF1228:
-+ .string "qs_btimelimit"
-+.LASF1258:
-+ .string "dq_id"
-+.LASF1438:
-+ .string "fl_notify"
-+.LASF582:
-+ .string "node_id"
-+.LASF821:
-+ .string "internal_pages"
-+.LASF1027:
-+ .string "pending_mask"
-+.LASF120:
-+ .string "mem_unit"
-+.LASF1223:
-+ .string "qs_flags"
-+.LASF1530:
-+ .string "tbase_get_base"
-+.LASF361:
-+ .string "trans_local"
-+.LASF1227:
-+ .string "qs_incoredqs"
-+.LASF1595:
-+ .string "bitcount"
-+.LASF466:
-+ .string "sigaction"
-+.LASF853:
-+ .string "group_stop_count"
-+.LASF1458:
-+ .string "fs_supers"
-+.LASF1679:
-+ .string "mmu_cr4_features"
-+.LASF1666:
-+ .string "__ksymtab_schedule_timeout_interruptible"
-+.LASF474:
-+ .string "sival_int"
-+.LASF201:
-+ .string "personality"
-+.LASF1703:
-+ .string "avenrun"
-+.LASF1418:
-+ .string "fown_struct"
-+.LASF1640:
-+ .string "__ksymtab___round_jiffies"
-+.LASF565:
-+ .string "_pad2_"
-+.LASF351:
-+ .string "mpc_featureflag"
-+.LASF1364:
-+ .string "rmdir"
-+.LASF278:
-+ .string "pi_state_list"
-+.LASF899:
-+ .string "idle"
-+.LASF438:
-+ .string "phys_pkg_id"
-+.LASF1406:
-+ .string "fl_wait"
-+.LASF1311:
-+ .string "releasepage"
-+.LASF1155:
-+ .string "last_type"
-+.LASF814:
-+ .string "ring_info"
-+.LASF31:
-+ .string "dev_t"
-+.LASF1577:
-+ .string "init_timers_cpu"
-+.LASF564:
-+ .string "prev_priority"
-+.LASF323:
-+ .string "wait_lock"
-+.LASF717:
-+ .string "core_waiters"
-+.LASF1424:
-+ .string "ahead_size"
-+.LASF604:
-+ .string "cs_cachep"
-+.LASF326:
-+ .string "sleepers"
-+.LASF516:
-+ .string "altrootmnt"
-+.LASF1477:
-+ .string "umount_begin"
-+.LASF1020:
-+ .string "handler_data"
-+.LASF301:
-+ .string "rb_node"
-+.LASF998:
-+ .string "module_kobject"
-+.LASF1444:
-+ .string "nlm_lockowner"
-+.LASF387:
-+ .string "uevent_attr"
-+.LASF271:
-+ .string "backing_dev_info"
-+.LASF386:
-+ .string "uevent_suppress"
-+.LASF864:
-+ .string "cnvcsw"
-+.LASF379:
-+ .string "knode_parent"
-+.LASF1055:
-+ .string "dev_archdata"
-+.LASF536:
-+ .string "completion"
-+.LASF739:
-+ .string "pid_type"
-+.LASF1646:
-+ .string "__ksymtab_round_jiffies_relative"
-+.LASF1004:
-+ .string "MODULE_STATE_GOING"
-+.LASF838:
-+ .string "vm_truncate_count"
-+.LASF87:
-+ .string "___esi"
-+.LASF487:
-+ .string "_addr"
-+.LASF98:
-+ .string "___esp"
-+.LASF941:
-+ .string "unused_gpl_syms"
-+.LASF67:
-+ .string "eflags"
-+.LASF731:
-+ .string "timer_list"
-+.LASF1250:
-+ .string "dq_hash"
-+.LASF1285:
-+ .string "quota_on"
-+.LASF940:
-+ .string "unused_crcs"
-+.LASF1341:
-+ .string "bd_holder_list"
-+.LASF1384:
-+ .string "aio_write"
-+.LASF766:
-+ .string "kiocb"
-+.LASF888:
-+ .string "capabilities"
-+.LASF1047:
-+ .string "klist"
-+.LASF1062:
-+ .string "klist_devices"
-+.LASF1185:
-+ .string "dqb_curinodes"
-+.LASF1248:
-+ .string "qf_next"
-+.LASF659:
-+ .string "i_mapping"
-+.LASF157:
-+ .string "io_bitmap_ptr"
-+.LASF1280:
-+ .string "acquire_dquot"
-+.LASF328:
-+ .string "size"
-+.LASF644:
-+ .string "i_size_seqcount"
-+.LASF252:
-+ .string "pending"
-+.LASF862:
-+ .string "cutime"
-+.LASF104:
-+ .string "bug_entry"
-+.LASF954:
-+ .string "init_text_size"
-+.LASF1395:
-+ .string "check_flags"
-+.LASF919:
-+ .string "st_size"
-+.LASF368:
-+ .string "pm_message_t"
-+.LASF15:
-+ .string "__kernel_loff_t"
-+.LASF402:
-+ .string "devt"
-+.LASF310:
-+ .string "first"
-+.LASF909:
-+ .string "mtime"
-+.LASF619:
-+ .string "barrier"
-+.LASF132:
-+ .string "i387_soft_struct"
-+.LASF1448:
-+ .string "nfs4_fl"
-+.LASF1056:
-+ .string "acpi_handle"
-+.LASF363:
-+ .string "physid_mask"
-+.LASF1091:
-+ .string "class_data"
-+.LASF190:
-+ .string "time_slice"
-+.LASF432:
-+ .string "cpu_present_to_apicid"
-+.LASF1175:
-+ .string "ia_ctime"
-+.LASF580:
-+ .string "node_present_pages"
-+.LASF419:
-+ .string "int_dest_mode"
-+.LASF738:
-+ .string "timer_jiffies"
-+.LASF1003:
-+ .string "MODULE_STATE_COMING"
-+.LASF1615:
-+ .string "msecs"
-+.LASF679:
-+ .string "task_size"
-+.LASF1120:
-+ .string "s_dirt"
-+.LASF151:
-+ .string "vm86_info"
-+.LASF617:
-+ .string "donetail"
-+.LASF1225:
-+ .string "qs_uquota"
-+.LASF40:
-+ .string "size_t"
-+.LASF598:
-+ .string "blocking_notifier_head"
-+.LASF449:
-+ .string "kref"
-+.LASF1319:
-+ .string "page_tree"
-+.LASF1409:
-+ .string "fl_type"
-+.LASF1480:
-+ .string "export_operations"
-+.LASF1474:
-+ .string "statfs"
-+.LASF1590:
-+ .string "__dummy2"
-+.LASF1608:
-+ .string "del_timer_sync"
-+.LASF1541:
-+ .string "pattern"
-+.LASF886:
-+ .string "reclaimed_slab"
-+.LASF791:
-+ .string "f_path"
-+.LASF1413:
-+ .string "fl_break_time"
-+.LASF1117:
-+ .string "s_dev"
-+.LASF962:
-+ .string "num_bugs"
-+.LASF1033:
-+ .string "mask_ack"
-+.LASF882:
-+ .string "prio_array"
-+.LASF1684:
-+ .string "xtime_lock"
-+.LASF444:
-+ .string "apic_id_mask"
-+.LASF691:
-+ .string "hiwater_vm"
-+.LASF762:
-+ .string "res2"
-+.LASF978:
-+ .string "poll"
-+.LASF1605:
-+ .string "lock_timer_base"
-+.LASF844:
-+ .string "__session"
-+.LASF158:
-+ .string "iopl"
-+.LASF367:
-+ .string "event"
-+.LASF42:
-+ .string "time_t"
-+.LASF296:
-+ .string "seqcount"
-+.LASF857:
-+ .string "it_prof_incr"
-+.LASF108:
-+ .string "sysinfo"
-+.LASF846:
-+ .string "live"
-+.LASF325:
-+ .string "semaphore"
-+.LASF1257:
-+ .string "dq_sb"
-+.LASF685:
-+ .string "mmap_sem"
-+.LASF1218:
-+ .string "qfs_nblks"
-+.LASF299:
-+ .string "tv_sec"
-+.LASF1333:
-+ .string "bd_dev"
-+.LASF295:
-+ .string "seqlock_t"
-+.LASF930:
-+ .string "srcversion"
-+.LASF1692:
-+ .string "acpi_ht"
-+.LASF431:
-+ .string "cpu_to_logical_apicid"
-+.LASF56:
-+ .string "pgd_t"
-+.LASF1034:
-+ .string "unmask"
-+.LASF345:
-+ .string "mpc_config_processor"
-+.LASF1097:
-+ .string "raw_prio_tree_node"
-+.LASF427:
-+ .string "ioapic_phys_id_map"
-+.LASF1425:
-+ .string "mmap_hit"
-+.LASF927:
-+ .string "param_attrs"
-+.LASF1032:
-+ .string "disable"
-+.LASF556:
-+ .string "active_list"
-+.LASF1548:
-+ .string "native_irq_enable"
-+.LASF1422:
-+ .string "prev_index"
-+.LASF1036:
-+ .string "retrigger"
-+.LASF1271:
-+ .string "dquot_operations"
-+.LASF855:
-+ .string "real_timer"
-+.LASF274:
-+ .string "last_siginfo"
-+.LASF802:
-+ .string "private_data"
-+.LASF554:
-+ .string "_pad1_"
-+.LASF546:
-+ .string "stat_threshold"
-+.LASF654:
-+ .string "i_alloc_sem"
-+.LASF1718:
-+ .string "GNU C 4.1.1 (Gentoo 4.1.1-r3)"
-+.LASF1385:
-+ .string "readdir"
-+.LASF889:
-+ .string "congested_fn"
-+.LASF576:
-+ .string "nr_zones"
-+.LASF1088:
-+ .string "class_attribute"
-+.LASF788:
-+ .string "ki_cur_seg"
-+.LASF720:
-+ .string "ioctx_list_lock"
-+.LASF1507:
-+ .string "close"
-+.LASF1439:
-+ .string "fl_grant"
-+.LASF396:
-+ .string "dma_mem"
-+.LASF1151:
-+ .string "s_time_gran"
-+.LASF1343:
-+ .string "bd_block_size"
-+.LASF258:
-+ .string "security"
-+.LASF1657:
-+ .string "__kstrtab_try_to_del_timer_sync"
-+.LASF1509:
-+ .string "nopfn"
-+.LASF1249:
-+ .string "dquot"
-+.LASF453:
-+ .string "id_next"
-+.LASF130:
-+ .string "xmm_space"
-+.LASF472:
-+ .string "i387_union"
-+.LASF1149:
-+ .string "s_fs_info"
-+.LASF1531:
-+ .string "constant_test_bit"
-+.LASF1508:
-+ .string "nopage"
-+.LASF945:
-+ .string "num_gpl_future_syms"
-+.LASF745:
-+ .string "cpu_base"
-+.LASF1198:
-+ .string "d_blk_hardlimit"
-+.LASF622:
-+ .string "PIDTYPE_SID"
-+.LASF558:
-+ .string "nr_scan_active"
-+.LASF749:
-+ .string "get_time"
-+.LASF794:
-+ .string "f_flags"
-+.LASF134:
-+ .string "changed"
-+.LASF70:
-+ .string "__dsh"
-+.LASF1083:
-+ .string "class_attrs"
-+.LASF1351:
-+ .string "hd_struct"
-+.LASF1628:
-+ .string "sys_getegid"
-+.LASF1306:
-+ .string "readpages"
-+.LASF831:
-+ .string "shared"
-+.LASF1485:
-+ .string "get_dentry"
-+.LASF525:
-+ .string "d_lru"
-+.LASF646:
-+ .string "i_mtime"
-+.LASF298:
-+ .string "timespec"
-+.LASF377:
-+ .string "device"
-+.LASF478:
-+ .string "_uid"
-+.LASF597:
-+ .string "priority"
-+.LASF1182:
-+ .string "dqb_curspace"
-+.LASF1264:
-+ .string "check_quota_file"
-+.LASF408:
-+ .string "cpu_up"
-+.LASF929:
-+ .string "version"
-+.LASF171:
-+ .string "usage"
-+.LASF1143:
-+ .string "s_mtd"
-+.LASF911:
-+ .string "blksize"
-+.LASF1499:
-+ .string "_mapcount"
-+.LASF815:
-+ .string "aio_ring_info"
-+.LASF285:
-+ .string "lock"
-+.LASF1516:
-+ .string "tvec_t"
-+.LASF355:
-+ .string "mpc_bustype"
-+.LASF1334:
-+ .string "bd_inode"
-+.LASF683:
-+ .string "mm_count"
-+.LASF790:
-+ .string "ki_eventfd"
-+.LASF231:
-+ .string "fsgid"
-+.LASF1320:
-+ .string "tree_lock"
-+.LASF1103:
-+ .string "index_bits"
-+.LASF1078:
-+ .string "driver_attribute"
-+.LASF263:
-+ .string "alloc_lock"
-+.LASF588:
-+ .string "zones"
-+.LASF268:
-+ .string "bio_list"
-+.LASF1434:
-+ .string "fl_copy_lock"
-+.LASF1190:
-+ .string "dqi_bgrace"
-+.LASF1146:
-+ .string "s_frozen"
-+.LASF1221:
-+ .string "fs_quota_stat"
-+.LASF1588:
-+ .string "work_list"
-+.LASF1430:
-+ .string "fl_owner_t"
-+.LASF1661:
-+ .string "__kstrtab_avenrun"
-+.LASF1702:
-+ .string "boot_tvec_bases"
-+.LASF817:
-+ .string "ring_pages"
-+.LASF1603:
-+ .string "count_active_tasks"
-+.LASF1213:
-+ .string "d_rtbwarns"
-+.LASF634:
-+ .string "i_sb_list"
-+.LASF330:
-+ .string "mm_context_t"
-+.LASF1576:
-+ .string "__mptr"
-+.LASF235:
-+ .string "cap_permitted"
-+.LASF1416:
-+ .string "fl_u"
-+.LASF18:
-+ .string "__s8"
-+.LASF75:
-+ .string "vm86_struct"
-+.LASF753:
-+ .string "lock_key"
-+.LASF1308:
-+ .string "commit_write"
-+.LASF1579:
-+ .string "boot_done"
-+.LASF964:
-+ .string "waiter"
-+.LASF996:
-+ .string "test"
-+.LASF1244:
-+ .string "quota_format_type"
-+.LASF524:
-+ .string "d_name"
-+.LASF555:
-+ .string "lru_lock"
-+.LASF1370:
-+ .string "truncate"
-+.LASF211:
-+ .string "vfork_done"
-+.LASF297:
-+ .string "seqcount_t"
-+.LASF792:
-+ .string "f_op"
-+.LASF1060:
-+ .string "drivers"
-+.LASF1265:
-+ .string "read_file_info"
-+.LASF512:
-+ .string "root"
-+.LASF1433:
-+ .string "fl_remove"
-+.LASF747:
-+ .string "active"
-+.LASF642:
-+ .string "i_version"
-+.LASF700:
-+ .string "start_code"
-+.LASF612:
-+ .string "nxttail"
-+.LASF664:
-+ .string "i_dnotify_mask"
-+.LASF989:
-+ .string "local_t"
-+.LASF452:
-+ .string "proc_next"
-+.LASF219:
-+ .string "start_time"
-+.LASF595:
-+ .string "notifier_block"
-+.LASF836:
-+ .string "vm_file"
-+.LASF1461:
-+ .string "super_operations"
-+.LASF243:
-+ .string "sysvsem"
-+.LASF212:
-+ .string "set_child_tid"
-+.LASF1170:
-+ .string "ia_uid"
-+.LASF20:
-+ .string "__u8"
-+.LASF641:
-+ .string "i_rdev"
-+.LASF1466:
-+ .string "put_inode"
-+.LASF1518:
-+ .string "tvec_root_t"
-+.LASF1229:
-+ .string "qs_itimelimit"
-+.LASF721:
-+ .string "ioctx_list"
-+.LASF858:
-+ .string "it_virt_incr"
-+.LASF557:
-+ .string "inactive_list"
-+.LASF137:
-+ .string "alimit"
-+.LASF1514:
-+ .string "event_type"
-+.LASF1038:
-+ .string "set_wake"
-+.LASF1207:
-+ .string "d_bwarns"
-+.LASF1612:
-+ .string "expire"
-+.LASF1268:
-+ .string "read_dqblk"
-+.LASF1247:
-+ .string "qf_owner"
-+.LASF1110:
-+ .string "d_compare"
-+.LASF73:
-+ .string "revectored_struct"
-+.LASF1193:
-+ .string "dqi_valid"
-+.LASF348:
-+ .string "mpc_apicver"
-+.LASF1625:
-+ .string "sys_getuid"
-+.LASF1578:
-+ .string "__ret_warn_on"
-+.LASF918:
-+ .string "st_value"
-+.LASF1104:
-+ .string "qstr"
-+.LASF350:
-+ .string "mpc_cpufeature"
-+.LASF203:
-+ .string "tgid"
-+.LASF1714:
-+ .string "per_cpu__vm_event_states"
-+.LASF800:
-+ .string "f_ra"
-+.LASF1338:
-+ .string "bd_inodes"
-+.LASF570:
-+ .string "zone_start_pfn"
-+.LASF467:
-+ .string "sa_handler"
-+.LASF257:
-+ .string "notifier_mask"
-+.LASF1115:
-+ .string "super_block"
-+.LASF411:
-+ .string "smp_send_reschedule"
-+.LASF1396:
-+ .string "dir_notify"
-+.LASF1347:
-+ .string "bd_disk"
-+.LASF113:
-+ .string "sharedram"
-+.LASF1013:
-+ .string "fixup"
-+.LASF1676:
-+ .string "__per_cpu_offset"
-+.LASF1269:
-+ .string "commit_dqblk"
-+.LASF78:
-+ .string "cpu_type"
-+.LASF1150:
-+ .string "s_vfs_rename_mutex"
-+.LASF1242:
-+ .string "dqi_format"
-+.LASF115:
-+ .string "totalswap"
-+.LASF562:
-+ .string "reclaim_in_progress"
-+.LASF437:
-+ .string "enable_apic_mode"
-+.LASF508:
-+ .string "uidhash_list"
-+.LASF1342:
-+ .string "bd_contains"
-+.LASF1336:
-+ .string "bd_mutex"
-+.LASF538:
-+ .string "free_area"
-+.LASF1637:
-+ .string "__ksymtab_boot_tvec_bases"
-+.LASF1643:
-+ .string "__kstrtab_round_jiffies"
-+.LASF1241:
-+ .string "mem_dqinfo"
-+.LASF430:
-+ .string "apicid_to_node"
-+.LASF502:
-+ .string "processes"
-+.LASF1411:
-+ .string "fl_end"
-+.LASF938:
-+ .string "unused_syms"
-+.LASF809:
-+ .string "user_id"
-+.LASF867:
-+ .string "cmaj_flt"
-+.LASF965:
-+ .string "exit"
-+.LASF1133:
-+ .string "s_syncing"
-+.LASF1435:
-+ .string "fl_release_private"
-+.LASF178:
-+ .string "run_list"
-+.LASF316:
-+ .string "func"
-+.LASF1713:
-+ .string "protection_map"
-+.LASF1325:
-+ .string "truncate_count"
-+.LASF126:
-+ .string "status"
-+.LASF446:
-+ .string "send_IPI_mask"
-+.LASF1671:
-+ .string "__kstrtab_msleep"
-+.LASF340:
-+ .string "mpc_oemptr"
-+.LASF1515:
-+ .string "tvec_s"
-+.LASF875:
-+ .string "small_block"
-+.LASF594:
-+ .string "owner"
-+.LASF354:
-+ .string "mpc_busid"
-+.LASF812:
-+ .string "active_reqs"
-+.LASF1503:
-+ .string "first_page"
-+.LASF1405:
-+ .string "fl_pid"
-+.LASF1068:
-+ .string "drivers_autoprobe_attr"
-+.LASF1690:
-+ .string "acpi_noirq"
-+.LASF1246:
-+ .string "qf_ops"
-+.LASF994:
-+ .string "attr"
-+.LASF1037:
-+ .string "set_type"
-+.LASF1490:
-+ .string "written"
-+.LASF506:
-+ .string "mq_bytes"
-+.LASF1220:
-+ .string "fs_qfilestat_t"
-+.LASF77:
-+ .string "screen_bitmap"
-+.LASF1532:
-+ .string "addr"
-+.LASF1559:
-+ .string "timer_set_base"
-+.LASF953:
-+ .string "core_size"
-+.LASF1482:
-+ .string "encode_fh"
-+.LASF1598:
-+ .string "process_timeout"
-+.LASF1382:
-+ .string "write"
-+.LASF1407:
-+ .string "fl_file"
-+.LASF908:
-+ .string "atime"
-+.LASF182:
-+ .string "timestamp"
-+.LASF1712:
-+ .string "dcache_lock"
-+.LASF370:
-+ .string "power_state"
-+.LASF1002:
-+ .string "MODULE_STATE_LIVE"
-+.LASF740:
-+ .string "hrtimer_restart"
-+.LASF1067:
-+ .string "drv_attrs"
-+.LASF991:
-+ .string "kernel_symbol"
-+.LASF1080:
-+ .string "mod_name"
-+.LASF1180:
-+ .string "dqb_bhardlimit"
-+.LASF1279:
-+ .string "write_dquot"
-+.LASF313:
-+ .string "wait_queue_t"
-+.LASF923:
-+ .string "Elf32_Sym"
-+.LASF1300:
-+ .string "address_space_operations"
-+.LASF987:
-+ .string "filter"
-+.LASF1371:
-+ .string "permission"
-+.LASF239:
-+ .string "oomkilladj"
-+.LASF111:
-+ .string "totalram"
-+.LASF194:
-+ .string "ptrace_list"
-+.LASF188:
-+ .string "policy"
-+.LASF1591:
-+ .string "run_timer_softirq"
-+.LASF1076:
-+ .string "drivers_autoprobe"
-+.LASF898:
-+ .string "softirq"
-+.LASF722:
-+ .string "plist_head"
-+.LASF1651:
-+ .string "__kstrtab___mod_timer"
-+.LASF461:
-+ .string "sigset_t"
-+.LASF1305:
-+ .string "set_page_dirty"
-+.LASF250:
-+ .string "real_blocked"
-+.LASF7:
-+ .string "__kernel_ssize_t"
-+.LASF497:
-+ .string "si_code"
-+.LASF200:
-+ .string "pdeath_signal"
-+.LASF1330:
-+ .string "private_list"
-+.LASF1367:
-+ .string "readlink"
-+.LASF1710:
-+ .string "prof_on"
-+.LASF79:
-+ .string "int_revectored"
-+.LASF534:
-+ .string "d_iname"
-+.LASF869:
-+ .string "oublock"
-+.LASF1688:
-+ .string "platform_enable_wakeup"
-+.LASF733:
-+ .string "function"
-+.LASF1587:
-+ .string "__run_timers"
-+.LASF1357:
-+ .string "inode_operations"
-+.LASF1236:
-+ .string "dqi_free_blk"
-+.LASF621:
-+ .string "PIDTYPE_PGID"
-+.LASF1393:
-+ .string "sendfile"
-+.LASF166:
-+ .string "previous_esp"
-+.LASF464:
-+ .string "__restorefn_t"
-+.LASF772:
-+ .string "ki_ctx"
-+.LASF352:
-+ .string "mpc_reserved"
-+.LASF494:
-+ .string "siginfo"
-+.LASF1462:
-+ .string "destroy_inode"
-+.LASF587:
-+ .string "zlcache_ptr"
-+.LASF1426:
-+ .string "mmap_miss"
-+.LASF523:
-+ .string "d_parent"
-+.LASF262:
-+ .string "self_exec_id"
-+.LASF302:
-+ .string "rb_parent_color"
-+.LASF10:
-+ .string "__kernel_timer_t"
-+.LASF1670:
-+ .string "timers_nb"
-+.LASF1084:
-+ .string "class_dev_attrs"
-+.LASF96:
-+ .string "___cs"
-+.LASF968:
-+ .string "strtab"
-+.LASF820:
-+ .string "tail"
-+.LASF709:
-+ .string "env_end"
-+.LASF388:
-+ .string "devt_attr"
-+.LASF593:
-+ .string "mutex"
-+.LASF459:
-+ .string "sysv_sem"
-+.LASF320:
-+ .string "wait_queue_head_t"
-+.LASF1234:
-+ .string "v2_mem_dqinfo"
-+.LASF1282:
-+ .string "mark_dirty"
-+.LASF500:
-+ .string "user_struct"
-+.LASF1650:
-+ .string "__ksymtab_init_timer_deferrable"
-+.LASF159:
-+ .string "io_bitmap_max"
-+.LASF91:
-+ .string "___ds"
-+.LASF925:
-+ .string "module"
-+.LASF993:
-+ .string "module_attribute"
-+.LASF777:
-+ .string "ki_user_data"
-+.LASF727:
-+ .string "rlim_max"
-+.LASF307:
-+ .string "next"
-+.LASF942:
-+ .string "num_unused_gpl_syms"
-+.LASF893:
-+ .string "futex_pi_state"
-+.LASF1488:
-+ .string "mtd_info"
-+.LASF1704:
-+ .string "nr_threads"
-+.LASF1624:
-+ .string "_________p1"
-+.LASF1021:
-+ .string "chip_data"
-+.LASF1326:
-+ .string "nrpages"
-+.LASF1274:
-+ .string "alloc_space"
-+.LASF1273:
-+ .string "drop"
-+.LASF155:
-+ .string "saved_fs"
-+.LASF1593:
-+ .string "mem_total"
-+.LASF410:
-+ .string "smp_send_stop"
-+.LASF900:
-+ .string "iowait"
-+.LASF540:
-+ .string "nr_free"
-+.LASF818:
-+ .string "ring_lock"
-+.LASF1501:
-+ .string "lockless_freelist"
-+.LASF186:
-+ .string "sched_time"
-+.LASF1318:
-+ .string "host"
-+.LASF131:
-+ .string "padding"
-+.LASF990:
-+ .string "mod_arch_specific"
-+.LASF1456:
-+ .string "get_sb"
-+.LASF36:
-+ .string "_Bool"
-+.LASF1619:
-+ .string "update_process_times"
-+.LASF1450:
-+ .string "magic"
-+.LASF93:
-+ .string "___fs"
-+.LASF1504:
-+ .string "freelist"
-+.LASF645:
-+ .string "i_atime"
-+.LASF548:
-+ .string "zone"
-+.LASF539:
-+ .string "free_list"
-+.LASF156:
-+ .string "saved_gs"
-+.LASF668:
-+ .string "dirtied_when"
-+.LASF1090:
-+ .string "class_device"
-+.LASF896:
-+ .string "nice"
-+.LASF415:
-+ .string "probe"
-+.LASF915:
-+ .string "Elf32_Word"
-+.LASF1469:
-+ .string "put_super"
-+.LASF973:
-+ .string "attrs"
-+.LASF215:
-+ .string "utime"
-+.LASF1188:
-+ .string "dqb_valid"
-+.LASF571:
-+ .string "spanned_pages"
-+.LASF751:
-+ .string "softirq_time"
-+.LASF1633:
-+ .string "add_timer_on"
-+.LASF1634:
-+ .string "__kstrtab_jiffies_64"
-+.LASF140:
-+ .string "fxsave"
-+.LASF482:
-+ .string "_sigval"
-+.LASF519:
-+ .string "d_flags"
-+.LASF736:
-+ .string "tvec_t_base_s"
-+.LASF208:
-+ .string "group_leader"
-+.LASF265:
-+ .string "pi_waiters"
-+.LASF995:
-+ .string "setup"
-+.LASF428:
-+ .string "setup_apic_routing"
-+.LASF1659:
-+ .string "__kstrtab_del_timer_sync"
-+.LASF117:
-+ .string "procs"
-+.LASF1486:
-+ .string "find_exported_dentry"
-+.LASF892:
-+ .string "unplug_io_data"
-+.LASF574:
-+ .string "node_zones"
-+.LASF1276:
-+ .string "free_space"
-+.LASF958:
-+ .string "unsafe"
-+.LASF1717:
-+ .string "rec_event"
-+.LASF1547:
-+ .string "raw_local_irq_enable"
-+.LASF1315:
-+ .string "launder_page"
-+.LASF66:
-+ .string "__csh"
-+.LASF1553:
-+ .string "calc_load"
-+.LASF1563:
-+ .string "setup_timer"
-+.LASF1647:
-+ .string "__kstrtab_init_timer"
-+.LASF1053:
-+ .string "n_ref"
-+.LASF1239:
-+ .string "v1_i"
-+.LASF1026:
-+ .string "affinity"
-+.LASF568:
-+ .string "wait_table_bits"
-+.LASF1696:
-+ .string "cpu_callout_map"
-+.LASF520:
-+ .string "d_lock"
-+.LASF559:
-+ .string "nr_scan_inactive"
-+.LASF981:
-+ .string "store"
-+.LASF375:
-+ .string "pm_parent"
-+.LASF1096:
-+ .string "softirq_action"
-+.LASF655:
-+ .string "i_op"
-+.LASF616:
-+ .string "donelist"
-+.LASF946:
-+ .string "gpl_future_crcs"
-+.LASF752:
-+ .string "hrtimer_cpu_base"
-+.LASF267:
-+ .string "journal_info"
-+.LASF220:
-+ .string "min_flt"
-+.LASF937:
-+ .string "gpl_crcs"
-+.LASF934:
-+ .string "crcs"
-+.LASF1291:
-+ .string "set_dqblk"
-+.LASF364:
-+ .string "mask"
-+.LASF353:
-+ .string "mpc_config_bus"
-+.LASF1686:
-+ .string "jiffies_64"
-+.LASF737:
-+ .string "running_timer"
-+.LASF365:
-+ .string "physid_mask_t"
-+.LASF32:
-+ .string "mode_t"
-+.LASF346:
-+ .string "mpc_type"
-+.LASF125:
-+ .string "st_space"
-+.LASF710:
-+ .string "saved_auxv"
-+.LASF1267:
-+ .string "free_file_info"
-+.LASF1415:
-+ .string "fl_lmops"
-+.LASF1281:
-+ .string "release_dquot"
-+.LASF185:
-+ .string "last_ran_j"
-+.LASF213:
-+ .string "clear_child_tid"
-+.LASF1145:
-+ .string "s_dquot"
-+.LASF1122:
-+ .string "s_type"
-+.LASF1709:
-+ .string "per_cpu__irq_regs"
-+.LASF481:
-+ .string "_pad"
-+.LASF1255:
-+ .string "dq_count"
-+.LASF877:
-+ .string "blocks"
-+.LASF59:
-+ .string "restart_block"
-+.LASF409:
-+ .string "smp_cpus_done"
-+.LASF779:
-+ .string "ki_pos"
-+.LASF1191:
-+ .string "dqi_igrace"
-+.LASF1049:
-+ .string "k_list"
-+.LASF988:
-+ .string "uevent"
-+.LASF551:
-+ .string "pages_high"
-+.LASF1118:
-+ .string "s_blocksize"
-+.LASF1557:
-+ .string "timer_pending"
-+.LASF975:
-+ .string "k_name"
-+.LASF746:
-+ .string "index"
-+.LASF1506:
-+ .string "vm_operations_struct"
-+.LASF754:
-+ .string "clock_base"
-+.LASF1481:
-+ .string "decode_fh"
-+.LASF1092:
-+ .string "class_id"
-+.LASF913:
-+ .string "Elf32_Addr"
-+.LASF702:
-+ .string "start_data"
-+.LASF939:
-+ .string "num_unused_syms"
-+.LASF1134:
-+ .string "s_need_sync_fs"
-+.LASF202:
-+ .string "did_exec"
-+.LASF852:
-+ .string "notify_count"
-+.LASF161:
-+ .string "task"
-+.LASF289:
-+ .string "rwlock_t"
-+.LASF249:
-+ .string "blocked"
-+.LASF1719:
-+ .string "kernel/timer.c"
-+.LASF729:
-+ .string "tv64"
-+.LASF1544:
-+ .string "detach_timer"
-+.LASF1642:
-+ .string "__ksymtab___round_jiffies_relative"
-+.LASF424:
-+ .string "no_balance_irq"
-+.LASF1604:
-+ .string "do_timer"
-+.LASF657:
-+ .string "i_sb"
-+.LASF1620:
-+ .string "user_tick"
-+.LASF1600:
-+ .string "sys_alarm"
-+.LASF826:
-+ .string "vm_end"
-+.LASF1491:
-+ .string "error"
-+.LASF246:
-+ .string "nsproxy"
-+.LASF68:
-+ .string "__ssh"
-+.LASF1349:
-+ .string "bd_inode_backing_dev_info"
-+.LASF34:
-+ .string "timer_t"
-+.LASF661:
-+ .string "i_devices"
-+.LASF261:
-+ .string "parent_exec_id"
-+.LASF880:
-+ .string "SLEEP_INTERACTIVE"
-+.LASF631:
-+ .string "inode"
-+.LASF894:
-+ .string "pipe_inode_info"
-+.LASF1297:
-+ .string "dqio_mutex"
-+.LASF1057:
-+ .string "bus_attribute"
-+.LASF1358:
-+ .string "create"
-+.LASF1556:
-+ .string "rep_nop"
-+.LASF1346:
-+ .string "bd_invalidated"
-+.LASF1070:
-+ .string "match"
-+.LASF362:
-+ .string "trans_reserved"
-+.LASF760:
-+ .string "timer"
-+.LASF773:
-+ .string "ki_cancel"
-+.LASF1535:
-+ .string "flag"
-+.LASF1206:
-+ .string "d_iwarns"
-+.LASF454:
-+ .string "semid"
-+.LASF1094:
-+ .string "dma_coherent_mem"
-+.LASF1573:
-+ .string "init_timer_deferrable"
-+.LASF420:
-+ .string "ESR_DISABLE"
-+.LASF1073:
-+ .string "suspend_late"
-+.LASF486:
-+ .string "_stime"
-+.LASF321:
-+ .string "rw_semaphore"
-+.LASF843:
-+ .string "session"
-+.LASF1379:
-+ .string "file_operations"
-+.LASF1459:
-+ .string "s_lock_key"
-+.LASF1492:
-+ .string "read_descriptor_t"
-+.LASF624:
-+ .string "pid_chain"
-+.LASF1701:
-+ .string "per_cpu__rcu_bh_data"
-+.LASF884:
-+ .string "files_struct"
-+.LASF247:
-+ .string "signal"
-+.LASF1400:
-+ .string "file_lock"
-+.LASF1648:
-+ .string "__ksymtab_init_timer"
-+.LASF282:
-+ .string "lock_class_key"
-+.LASF470:
-+ .string "sa_mask"
-+.LASF1194:
-+ .string "fs_disk_quota"
-+.LASF590:
-+ .string "page"
-+.LASF713:
-+ .string "faultstamp"
-+.LASF1365:
-+ .string "mknod"
-+.LASF785:
-+ .string "ki_inline_vec"
-+.LASF383:
-+ .string "bus_id"
-+.LASF1359:
-+ .string "lookup"
-+.LASF1310:
-+ .string "invalidatepage"
-+.LASF1478:
-+ .string "show_options"
-+.LASF344:
-+ .string "reserved"
-+.LASF176:
-+ .string "static_prio"
-+.LASF1106:
-+ .string "d_child"
-+.LASF119:
-+ .string "freehigh"
-+.LASF38:
-+ .string "gid_t"
-+.LASF2:
-+ .string "short unsigned int"
-+.LASF450:
-+ .string "refcount"
-+.LASF698:
-+ .string "def_flags"
-+.LASF542:
-+ .string "per_cpu_pages"
-+.LASF950:
-+ .string "module_init"
-+.LASF1355:
-+ .string "i_cdev"
-+.LASF1537:
-+ .string "kmalloc"
-+.LASF1130:
-+ .string "s_umount"
-+.LASF851:
-+ .string "group_exit_task"
-+.LASF1350:
-+ .string "bd_private"
-+.LASF477:
-+ .string "_pid"
-+.LASF1329:
-+ .string "private_lock"
-+.LASF1352:
-+ .string "gendisk"
-+.LASF648:
-+ .string "i_blkbits"
-+.LASF903:
-+ .string "cpustat"
-+.LASF1256:
-+ .string "dq_wait_unused"
-+.LASF1561:
-+ .string "get_current"
-+.LASF1428:
-+ .string "fu_list"
-+.LASF357:
-+ .string "trans_len"
-+.LASF251:
-+ .string "saved_sigmask"
-+.LASF1375:
-+ .string "getxattr"
-+.LASF504:
-+ .string "inotify_watches"
-+.LASF856:
-+ .string "it_real_incr"
-+.LASF803:
-+ .string "f_ep_links"
-+.LASF871:
-+ .string "coublock"
-+.LASF1017:
-+ .string "handle_irq"
-+.LASF599:
-+ .string "rwsem"
-+.LASF1129:
-+ .string "s_root"
-+.LASF339:
-+ .string "mpc_productid"
-+.LASF1475:
-+ .string "remount_fs"
-+.LASF332:
-+ .string "cputime64_t"
-+.LASF627:
-+ .string "seccomp_t"
-+.LASF1219:
-+ .string "qfs_nextents"
-+.LASF1656:
-+ .string "__ksymtab_del_timer"
-+.LASF742:
-+ .string "HRTIMER_RESTART"
-+.LASF735:
-+ .string "base"
-+.LASF1137:
-+ .string "s_inodes"
-+.LASF560:
-+ .string "pages_scanned"
-+.LASF1007:
-+ .string "address"
-+.LASF1496:
-+ .string "seq_file"
-+.LASF382:
-+ .string "kobj"
-+.LASF165:
-+ .string "sysenter_return"
-+.LASF327:
-+ .string "wait"
-+.LASF456:
-+ .string "sem_undo_list"
-+.LASF1208:
-+ .string "d_padding2"
-+.LASF1214:
-+ .string "d_padding3"
-+.LASF1215:
-+ .string "d_padding4"
-+.LASF1536:
-+ .string "test_tsk_thread_flag"
-+.LASF433:
-+ .string "apicid_to_cpu_present"
-+.LASF695:
-+ .string "exec_vm"
-+.LASF1585:
-+ .string "init_timer_stats"
-+.LASF533:
-+ .string "d_mounted"
-+.LASF715:
-+ .string "last_interval"
-+.LASF1312:
-+ .string "direct_IO"
-+.LASF955:
-+ .string "core_text_size"
-+.LASF217:
-+ .string "nvcsw"
-+.LASF1095:
-+ .string "irq_handler_t"
-+.LASF1183:
-+ .string "dqb_ihardlimit"
-+.LASF807:
-+ .string "users"
-+.LASF823:
-+ .string "vm_area_struct"
-+.LASF1522:
-+ .string "number"
-+.LASF573:
-+ .string "pglist_data"
-+.LASF286:
-+ .string "raw_rwlock_t"
-+.LASF839:
-+ .string "sighand_struct"
-+.LASF1164:
-+ .string "gfp_mask"
-+.LASF1008:
-+ .string "module_sect_attrs"
-+.LASF58:
-+ .string "pgprot_t"
-+.LASF269:
-+ .string "bio_tail"
-+.LASF980:
-+ .string "show"
-+.LASF29:
-+ .string "long long unsigned int"
-+.LASF1136:
-+ .string "s_xattr"
-+.LASF780:
-+ .string "ki_bio_count"
-+.LASF1290:
-+ .string "get_dqblk"
-+.LASF1674:
-+ .string "__ksymtab_msleep_interruptible"
-+.LASF1440:
-+ .string "fl_break"
-+.LASF1289:
-+ .string "set_info"
-+.LASF1520:
-+ .string "event_spec"
-+.LASF567:
-+ .string "wait_table_hash_nr_entries"
-+.LASF510:
-+ .string "fs_struct"
-+.LASF21:
-+ .string "unsigned char"
-+.LASF907:
-+ .string "rdev"
-+.LASF890:
-+ .string "congested_data"
-+.LASF373:
-+ .string "prev_state"
-+.LASF921:
-+ .string "st_other"
-+.LASF347:
-+ .string "mpc_apicid"
-+.LASF489:
-+ .string "_kill"
-+.LASF1685:
-+ .string "time_status"
-+.LASF1292:
-+ .string "get_xstate"
-+.LASF476:
-+ .string "sigval_t"
-+.LASF1124:
-+ .string "dq_op"
-+.LASF1526:
-+ .string "tbase_get_deferrable"
-+.LASF1429:
-+ .string "fu_rcuhead"
-+.LASF819:
-+ .string "nr_pages"
-+.LASF1621:
-+ .string "sys_getpid"
-+.LASF1493:
-+ .string "read_actor_t"
-+.LASF293:
-+ .string "kernel_cap_t"
-+.LASF1452:
-+ .string "fa_next"
-+.LASF761:
-+ .string "io_event"
-+.LASF798:
-+ .string "f_uid"
-+.LASF959:
-+ .string "taints"
-+.LASF283:
-+ .string "slock"
-+.LASF532:
-+ .string "d_cookie"
-+.LASF1107:
-+ .string "d_rcu"
-+.LASF1328:
-+ .string "a_ops"
-+.LASF1082:
-+ .string "class_dirs"
-+.LASF371:
-+ .string "can_wakeup"
-+.LASF878:
-+ .string "SLEEP_NORMAL"
-+.LASF1511:
-+ .string "page_mkwrite"
-+.LASF1148:
-+ .string "s_id"
-+.LASF11:
-+ .string "__kernel_clockid_t"
-+.LASF401:
-+ .string "class"
-+.LASF1139:
-+ .string "s_io"
-+.LASF1209:
-+ .string "d_rtb_hardlimit"
-+.LASF1366:
-+ .string "rename"
-+.LASF226:
-+ .string "euid"
-+.LASF743:
-+ .string "hrtimer"
-+.LASF1397:
-+ .string "flock"
-+.LASF529:
-+ .string "d_op"
-+.LASF1421:
-+ .string "cache_hit"
-+.LASF1533:
-+ .string "variable_test_bit"
-+.LASF563:
-+ .string "vm_stat"
-+.LASF632:
-+ .string "i_hash"
-+.LASF223:
-+ .string "it_virt_expires"
-+.LASF1487:
-+ .string "xattr_handler"
-+.LASF234:
-+ .string "cap_inheritable"
-+.LASF726:
-+ .string "rlim_cur"
-+.LASF358:
-+ .string "trans_type"
-+.LASF920:
-+ .string "st_info"
-+.LASF391:
-+ .string "platform_data"
-+.LASF1465:
-+ .string "write_inode"
-+.LASF141:
-+ .string "soft"
-+.LASF463:
-+ .string "__sighandler_t"
-+.LASF5:
-+ .string "__kernel_pid_t"
-+.LASF1158:
-+ .string "open_intent"
-+.LASF1599:
-+ .string "__data"
-+.LASF82:
-+ .string "info"
-+.LASF146:
-+ .string "sysenter_cs"
-+.LASF1014:
-+ .string "irqreturn_t"
-+.LASF1323:
-+ .string "i_mmap_nonlinear"
-+.LASF1663:
-+ .string "__kstrtab_schedule_timeout"
-+.LASF1552:
-+ .string "read_seqretry"
-+.LASF775:
-+ .string "ki_dtor"
-+.LASF253:
-+ .string "sas_ss_sp"
-+.LASF384:
-+ .string "type"
-+.LASF1460:
-+ .string "s_umount_key"
-+.LASF195:
-+ .string "active_mm"
-+.LASF335:
-+ .string "mpc_length"
-+.LASF1217:
-+ .string "qfs_ino"
-+.LASF1199:
-+ .string "d_blk_softlimit"
-+.LASF308:
-+ .string "prev"
-+.LASF47:
-+ .string "resource_size_t"
-+.LASF248:
-+ .string "sighand"
-+.LASF866:
-+ .string "cmin_flt"
-+.LASF1071:
-+ .string "remove"
-+.LASF1046:
-+ .string "child"
-+.LASF1114:
-+ .string "d_dname"
-+.LASF1000:
-+ .string "module_ref"
-+.LASF1254:
-+ .string "dq_lock"
-+.LASF413:
-+ .string "genapic"
-+.LASF630:
-+ .string "list_op_pending"
-+.LASF1322:
-+ .string "i_mmap"
-+.LASF1263:
-+ .string "quota_format_ops"
-+.LASF725:
-+ .string "rlimit"
-+.LASF97:
-+ .string "___eflags"
-+.LASF1238:
-+ .string "mem_dqblk"
-+.LASF629:
-+ .string "futex_offset"
-+.LASF1441:
-+ .string "fl_mylease"
-+.LASF279:
-+ .string "pi_state_cache"
-+.LASF329:
-+ .string "vdso"
-+.LASF537:
-+ .string "done"
-+.LASF1031:
-+ .string "enable"
-+.LASF906:
-+ .string "nlink"
-+.LASF618:
-+ .string "blimit"
-+.LASF1446:
-+ .string "nfs4_lock_state"
-+.LASF291:
-+ .string "atomic_t"
-+.LASF1161:
-+ .string "path"
-+.LASF825:
-+ .string "vm_start"
-+.LASF833:
-+ .string "anon_vma"
-+.LASF666:
-+ .string "inotify_mutex"
-+.LASF1602:
-+ .string "update_times"
-+.LASF1324:
-+ .string "i_mmap_lock"
-+.LASF1546:
-+ .string "__raw_spin_unlock"
-+.LASF949:
-+ .string "init"
-+.LASF572:
-+ .string "present_pages"
-+.LASF1680:
-+ .string "current_stack_pointer"
-+.LASF997:
-+ .string "free"
-+.LASF850:
-+ .string "group_exit_code"
-+.LASF1048:
-+ .string "k_lock"
-+.LASF628:
-+ .string "robust_list_head"
-+.LASF1065:
-+ .string "bus_attrs"
-+.LASF541:
-+ .string "zone_padding"
-+.LASF1369:
-+ .string "put_link"
-+.LASF688:
-+ .string "_file_rss"
-+.LASF1314:
-+ .string "migratepage"
-+.LASF1123:
-+ .string "s_op"
-+.LASF956:
-+ .string "unwind_info"
-+.LASF1019:
-+ .string "msi_desc"
-+.LASF1410:
-+ .string "fl_start"
-+.LASF1171:
-+ .string "ia_gid"
-+.LASF1303:
-+ .string "sync_page"
-+.LASF349:
-+ .string "mpc_cpuflag"
-+.LASF183:
-+ .string "last_ran"
-+.LASF1721:
-+ .string "run_local_timers"
-+.LASF460:
-+ .string "undo_list"
-+.LASF1006:
-+ .string "mattr"
-+.LASF399:
-+ .string "devres_head"
-+.LASF227:
-+ .string "suid"
-+.LASF1502:
-+ .string "slab"
-+.LASF1001:
-+ .string "module_state"
-+.LASF1128:
-+ .string "s_magic"
-+.LASF1534:
-+ .string "test_ti_thread_flag"
-+.LASF810:
-+ .string "ctx_lock"
-+.LASF244:
-+ .string "thread"
-+.LASF1627:
-+ .string "sys_getgid"
-+.LASF931:
-+ .string "holders_dir"
-+.LASF1086:
-+ .string "class_release"
-+.LASF883:
-+ .string "linux_binfmt"
-+.LASF1589:
-+ .string "__dummy"
-+.LASF441:
-+ .string "mps_oem_check"
-+.LASF1665:
-+ .string "__kstrtab_schedule_timeout_interruptible"
-+.LASF1574:
-+ .string "cascade"
-+.LASF658:
-+ .string "i_flock"
-+.LASF924:
-+ .string "attribute"
-+.LASF835:
-+ .string "vm_pgoff"
-+.LASF770:
-+ .string "ki_key"
-+.LASF676:
-+ .string "get_unmapped_area"
-+.LASF443:
-+ .string "get_apic_id"
-+.LASF1009:
-+ .string "nsections"
-+.LASF1494:
-+ .string "poll_table_struct"
-+.LASF1575:
-+ .string "tv_list"
-+.LASF625:
-+ .string "pid_link"
-+.LASF686:
-+ .string "page_table_lock"
-+.LASF170:
-+ .string "stack"
-+.LASF928:
-+ .string "modinfo_attrs"
-+.LASF1296:
-+ .string "quota_info"
-+.LASF290:
-+ .string "counter"
-+.LASF1294:
-+ .string "get_xquota"
-+.LASF837:
-+ .string "vm_private_data"
-+.LASF1119:
-+ .string "s_blocksize_bits"
-+.LASF255:
-+ .string "notifier"
-+.LASF306:
-+ .string "list_head"
-+.LASF1025:
-+ .string "irqs_unhandled"
-+.LASF312:
-+ .string "pprev"
-+.LASF663:
-+ .string "i_generation"
-+.LASF442:
-+ .string "acpi_madt_oem_check"
-+.LASF417:
-+ .string "target_cpus"
-+.LASF797:
-+ .string "f_owner"
-+.LASF1176:
-+ .string "ia_file"
-+.LASF238:
-+ .string "fpu_counter"
-+.LASF1412:
-+ .string "fl_fasync"
-+.LASF1054:
-+ .string "n_removed"
-+.LASF910:
-+ .string "ctime"
-+.LASF1200:
-+ .string "d_ino_hardlimit"
-+.LASF1093:
-+ .string "device_type"
-+.LASF1652:
-+ .string "__ksymtab___mod_timer"
-+.LASF135:
-+ .string "lookahead"
-+.LASF1581:
-+ .string "tvec_base_done"
-+.LASF37:
-+ .string "uid_t"
-+.LASF801:
-+ .string "f_version"
-+.LASF129:
-+ .string "mxcsr_mask"
-+.LASF1278:
-+ .string "transfer"
-+.LASF1419:
-+ .string "signum"
-+.LASF517:
-+ .string "dentry"
-+.LASF985:
-+ .string "default_attrs"
-+.LASF947:
-+ .string "num_exentries"
-+.LASF1157:
-+ .string "intent"
-+.LASF789:
-+ .string "ki_list"
-+.LASF160:
-+ .string "thread_info"
-+.LASF1432:
-+ .string "fl_insert"
-+.LASF1654:
-+ .string "__ksymtab_mod_timer"
-+.LASF811:
-+ .string "reqs_active"
-+.LASF583:
-+ .string "kswapd_wait"
-+.LASF707:
-+ .string "arg_end"
-+.LASF1387:
-+ .string "unlocked_ioctl"
-+.LASF1074:
-+ .string "resume_early"
-+.LASF860:
-+ .string "tty_old_pgrp"
-+.LASF1669:
-+ .string "base_lock_keys"
-+.LASF1420:
-+ .string "file_ra_state"
-+.LASF505:
-+ .string "inotify_devs"
-+.LASF638:
-+ .string "i_nlink"
-+.LASF273:
-+ .string "ptrace_message"
-+.LASF933:
-+ .string "num_syms"
-+.LASF578:
-+ .string "bdata"
-+.LASF1542:
-+ .string "timer_stats_account_timer"
-+.LASF177:
-+ .string "normal_prio"
-+.LASF1402:
-+ .string "fl_link"
-+.LASF787:
-+ .string "ki_nr_segs"
-+.LASF1617:
-+ .string "signal_pending"
-+.LASF429:
-+ .string "multi_timer_check"
-+.LASF840:
-+ .string "action"
-+.LASF977:
-+ .string "ktype"
-+.LASF1513:
-+ .string "event_data"
-+.LASF723:
-+ .string "prio_list"
-+.LASF1061:
-+ .string "devices"
-+.LASF1231:
-+ .string "qs_bwarnlimit"
-+.LASF609:
-+ .string "passed_quiesc"
-+.LASF1286:
-+ .string "quota_off"
-+.LASF1040:
-+ .string "irqaction"
-+.LASF1353:
-+ .string "i_pipe"
-+.LASF865:
-+ .string "cnivcsw"
-+.LASF730:
-+ .string "ktime_t"
-+.LASF49:
-+ .string "arg1"
-+.LASF225:
-+ .string "cpu_timers"
-+.LASF699:
-+ .string "nr_ptes"
-+.LASF1059:
-+ .string "subsys"
-+.LASF45:
-+ .string "blkcnt_t"
-+.LASF1079:
-+ .string "device_driver"
-+.LASF1697:
-+ .string "mem_map"
-+.LASF1012:
-+ .string "insn"
-+.LASF94:
-+ .string "___orig_eax"
-+.LASF8:
-+ .string "__kernel_time_t"
-+.LASF44:
-+ .string "sector_t"
-+.LASF435:
-+ .string "setup_portio_remap"
-+.LASF395:
-+ .string "dma_pools"
-+.LASF1417:
-+ .string "dnotify_struct"
-+.LASF366:
-+ .string "pm_message"
-+.LASF1251:
-+ .string "dq_inuse"
-+.LASF1695:
-+ .string "per_cpu__cpu_number"
-+.LASF704:
-+ .string "start_brk"
-+.LASF868:
-+ .string "inblock"
-+.LASF378:
-+ .string "klist_children"
-+.LASF418:
-+ .string "int_delivery_mode"
-+.LASF1253:
-+ .string "dq_dirty"
-+.LASF592:
-+ .string "bootmem_data"
-+.LASF1192:
-+ .string "dqi_flags"
-+.LASF1468:
-+ .string "delete_inode"
-+.LASF1232:
-+ .string "qs_iwarnlimit"
-+.LASF614:
-+ .string "curlist"
-+.LASF1235:
-+ .string "dqi_blocks"
-+.LASF1388:
-+ .string "compat_ioctl"
-+.LASF1716:
-+ .string "swap_token_mm"
-+.LASF734:
-+ .string "data"
-+.LASF336:
-+ .string "mpc_spec"
-+.LASF342:
-+ .string "mpc_oemcount"
-+.LASF1632:
-+ .string "del_timer"
-+.LASF805:
-+ .string "f_mapping"
-+.LASF673:
-+ .string "mmap"
-+.LASF1030:
-+ .string "shutdown"
-+.LASF660:
-+ .string "i_data"
-+.LASF876:
-+ .string "nblocks"
-+.LASF1521:
-+ .string "dcookie"
-+.LASF637:
-+ .string "i_count"
-+.LASF173:
-+ .string "lock_depth"
-+.LASF400:
-+ .string "node"
-+.LASF479:
-+ .string "_tid"
-+.LASF1592:
-+ .string "do_sysinfo"
-+.LASF1470:
-+ .string "write_super"
-+.LASF1705:
-+ .string "cad_pid"
-+.LASF1362:
-+ .string "symlink"
-+.LASF879:
-+ .string "SLEEP_NONINTERACTIVE"
-+.LASF527:
-+ .string "d_alias"
-+.LASF448:
-+ .string "send_IPI_all"
-+.LASF620:
-+ .string "PIDTYPE_PID"
-+.LASF1583:
-+ .string "self"
-+.LASF647:
-+ .string "i_ctime"
-+.LASF1408:
-+ .string "fl_flags"
-+.LASF1087:
-+ .string "dev_release"
-+.LASF690:
-+ .string "hiwater_rss"
-+.LASF1313:
-+ .string "get_xip_page"
-+.LASF1436:
-+ .string "lock_manager_operations"
-+.LASF651:
-+ .string "i_mode"
-+.LASF501:
-+ .string "__count"
-+.LASF376:
-+ .string "entry"
-+.LASF71:
-+ .string "__fsh"
-+.LASF1154:
-+ .string "nameidata"
-+.LASF674:
-+ .string "mm_rb"
-+.LASF6:
-+ .string "__kernel_size_t"
-+.LASF281:
-+ .string "splice_pipe"
-+.LASF193:
-+ .string "ptrace_children"
-+.LASF488:
-+ .string "_band"
-+.LASF1169:
-+ .string "ia_mode"
-+.LASF23:
-+ .string "short int"
-+.LASF30:
-+ .string "__kernel_dev_t"
-+.LASF1483:
-+ .string "get_name"
-+.LASF1549:
-+ .string "current_thread_info"
-+.LASF423:
-+ .string "check_apicid_present"
-+.LASF434:
-+ .string "mpc_apic_id"
-+.LASF601:
-+ .string "kmem_cache"
-+.LASF495:
-+ .string "si_signo"
-+.LASF1606:
-+ .string "prelock_base"
-+.LASF1152:
-+ .string "s_subtype"
-+.LASF149:
-+ .string "error_code"
-+.LASF106:
-+ .string "file"
-+.LASF1174:
-+ .string "ia_mtime"
-+.LASF1081:
-+ .string "interfaces"
-+.LASF640:
-+ .string "i_gid"
-+.LASF1403:
-+ .string "fl_block"
-+.LASF192:
-+ .string "tasks"
-+.LASF1085:
-+ .string "dev_uevent"
-+.LASF292:
-+ .string "atomic_long_t"
-+.LASF397:
-+ .string "archdata"
-+.LASF979:
-+ .string "sysfs_ops"
-+.LASF863:
-+ .string "cstime"
-+.LASF451:
-+ .string "sem_undo"
-+.LASF848:
-+ .string "curr_target"
-+.LASF179:
-+ .string "array"
-+.LASF1517:
-+ .string "tvec_root_s"
-+.LASF480:
-+ .string "_overrun"
-+.LASF272:
-+ .string "io_context"
-+.LASF816:
-+ .string "mmap_size"
-+.LASF60:
-+ .string "vm86_regs"
-+.LASF163:
-+ .string "preempt_count"
-+.LASF960:
-+ .string "bug_list"
-+.LASF254:
-+ .string "sas_ss_size"
-+.LASF1212:
-+ .string "d_rtbtimer"
-+.LASF210:
-+ .string "thread_group"
-+.LASF65:
-+ .string "orig_eax"
-+.LASF416:
-+ .string "apic_id_registered"
-+.LASF1662:
-+ .string "__ksymtab_avenrun"
-+.LASF1283:
-+ .string "write_info"
-+.LASF1141:
-+ .string "s_files"
-+.LASF719:
-+ .string "core_done"
-+.LASF1121:
-+ .string "s_maxbytes"
-+.LASF1386:
-+ .string "ioctl"
-+.LASF46:
-+ .string "gfp_t"
-+.LASF1224:
-+ .string "qs_pad"
-+.LASF577:
-+ .string "node_mem_map"
-+.LASF1245:
-+ .string "qf_fmt_id"
-+.LASF1390:
-+ .string "fsync"
-+.LASF1629:
-+ .string "sys_gettid"
-+.LASF672:
-+ .string "mm_struct"
-+.LASF242:
-+ .string "total_link_count"
-+.LASF976:
-+ .string "kset"
-+.LASF152:
-+ .string "v86flags"
-+.LASF187:
-+ .string "sleep_type"
-+.LASF83:
-+ .string "___orig_eip"
-+.LASF1668:
-+ .string "__ksymtab_schedule_timeout_uninterruptible"
-+.LASF1011:
-+ .string "exception_table_entry"
-+.LASF1140:
-+ .string "s_anon"
-+.LASF914:
-+ .string "Elf32_Half"
-+.LASF967:
-+ .string "num_symtab"
-+.LASF3:
-+ .string "long int"
-+.LASF943:
-+ .string "unused_gpl_crcs"
-+.LASF714:
-+ .string "token_priority"
-+.LASF503:
-+ .string "sigpending"
-+.LASF1525:
-+ .string "INIT_LIST_HEAD"
-+.LASF422:
-+ .string "check_apicid_used"
-+.LASF936:
-+ .string "num_gpl_syms"
-+.LASF1045:
-+ .string "start"
-+.LASF706:
-+ .string "arg_start"
-+.LASF1029:
-+ .string "startup"
-+.LASF1345:
-+ .string "bd_part_count"
-+.LASF873:
-+ .string "tty_struct"
-+.LASF1442:
-+ .string "fl_change"
-+.LASF392:
-+ .string "power"
-+.LASF983:
-+ .string "uevent_ops"
-+.LASF1066:
-+ .string "dev_attrs"
-+.LASF602:
-+ .string "cache_sizes"
-+.LASF1205:
-+ .string "d_btimer"
-+.LASF1317:
-+ .string "address_space"
-+.LASF969:
-+ .string "sect_attrs"
-+.LASF1304:
-+ .string "writepages"
-+.LASF1233:
-+ .string "v1_mem_dqinfo"
-+.LASF101:
-+ .string "___vm86_ds"
-+.LASF337:
-+ .string "mpc_checksum"
-+.LASF786:
-+ .string "ki_iovec"
-+.LASF1372:
-+ .string "setattr"
-+.LASF804:
-+ .string "f_ep_lock"
-+.LASF1528:
-+ .string "__list_del"
-+.LASF169:
-+ .string "state"
-+.LASF795:
-+ .string "f_mode"
-+.LASF1667:
-+ .string "__kstrtab_schedule_timeout_uninterruptible"
-+.LASF100:
-+ .string "___vm86_es"
-+.LASF118:
-+ .string "totalhigh"
-+.LASF233:
-+ .string "cap_effective"
-+.LASF1356:
-+ .string "cdev"
-+.LASF778:
-+ .string "ki_wait"
-+.LASF360:
-+ .string "trans_global"
-+.LASF1380:
-+ .string "llseek"
-+.LASF81:
-+ .string "pt_regs"
-+.LASF245:
-+ .string "files"
-+.LASF270:
-+ .string "reclaim_state"
-+.LASF1266:
-+ .string "write_file_info"
-+.LASF1063:
-+ .string "klist_drivers"
-+.LASF544:
-+ .string "batch"
-+.LASF1069:
-+ .string "drivers_probe_attr"
-+.LASF1144:
-+ .string "s_instances"
-+.LASF579:
-+ .string "node_start_pfn"
-+.LASF499:
-+ .string "siginfo_t"
-+.LASF1655:
-+ .string "__kstrtab_del_timer"
-+.LASF133:
-+ .string "ftop"
-+.LASF1335:
-+ .string "bd_openers"
-+.LASF102:
-+ .string "___vm86_fs"
-+.LASF693:
-+ .string "locked_vm"
-+.LASF1316:
-+ .string "writeback_control"
-+.LASF649:
-+ .string "i_blocks"
-+.LASF1550:
-+ .string "list_empty"
-+.LASF1354:
-+ .string "i_bdev"
-+.LASF1197:
-+ .string "d_id"
-+.LASF1309:
-+ .string "bmap"
-+.LASF1476:
-+ .string "clear_inode"
-+.LASF1539:
-+ .string "kmalloc_node"
-+.LASF1302:
-+ .string "readpage"
-+.LASF485:
-+ .string "_utime"
-+.LASF54:
-+ .string "time"
-+.LASF103:
-+ .string "___vm86_gs"
-+.LASF69:
-+ .string "__esh"
-+.LASF144:
-+ .string "tls_array"
-+.LASF1272:
-+ .string "initialize"
-+.LASF1162:
-+ .string "radix_tree_root"
-+.LASF260:
-+ .string "seccomp"
-+.LASF776:
-+ .string "ki_obj"
-+.LASF9:
-+ .string "__kernel_clock_t"
-+.LASF1630:
-+ .string "mod_timer"
-+.LASF1601:
-+ .string "seconds"
-+.LASF665:
-+ .string "i_dnotify"
-+.LASF492:
-+ .string "_sigfault"
-+.LASF1373:
-+ .string "getattr"
-+.LASF1519:
-+ .string "tvec_base_t"
-+.LASF184:
-+ .string "last_interrupted"
-+.LASF338:
-+ .string "mpc_oem"
-+.LASF1472:
-+ .string "write_super_lockfs"
-+.LASF412:
-+ .string "smp_call_function_mask"
-+.LASF1098:
-+ .string "left"
-+.LASF701:
-+ .string "end_code"
-+.LASF1109:
-+ .string "d_revalidate"
-+.LASF1681:
-+ .string "per_cpu__current_task"
-+.LASF1377:
-+ .string "removexattr"
-+.LASF1135:
-+ .string "s_active"
-+.LASF764:
-+ .string "iov_base"
-+.LASF712:
-+ .string "context"
-+.LASF1658:
-+ .string "__ksymtab_try_to_del_timer_sync"
-+.LASF575:
-+ .string "node_zonelists"
-+.LASF507:
-+ .string "locked_shm"
-+.LASF901:
-+ .string "steal"
-+.LASF1277:
-+ .string "free_inode"
-+.LASF1041:
-+ .string "handler"
-+.LASF1043:
-+ .string "proc_dir_entry"
-+.LASF89:
-+ .string "___ebp"
-+.LASF1443:
-+ .string "nfs_lock_info"
-+.LASF92:
-+ .string "___es"
-+.LASF300:
-+ .string "tv_nsec"
-+.LASF483:
-+ .string "_sys_private"
-+.LASF531:
-+ .string "d_fsdata"
-+.LASF380:
-+ .string "knode_driver"
-+.LASF1195:
-+ .string "d_version"
-+.LASF951:
-+ .string "module_core"
-+.LASF436:
-+ .string "check_phys_apicid_present"
-+.LASF680:
-+ .string "cached_hole_size"
-+.LASF917:
-+ .string "st_name"
-+.LASF732:
-+ .string "expires"
-+.LASF1374:
-+ .string "setxattr"
-+.LASF1649:
-+ .string "__kstrtab_init_timer_deferrable"
-+.LASF277:
-+ .string "robust_list"
-+.LASF1042:
-+ .string "dev_id"
-+.LASF206:
-+ .string "children"
-+.LASF1275:
-+ .string "alloc_inode"
-+.LASF266:
-+ .string "pi_blocked_on"
-+.LASF1327:
-+ .string "writeback_index"
-+.LASF128:
-+ .string "mxcsr"
-+.LASF832:
-+ .string "anon_vma_node"
-+.LASF1527:
-+ .string "list_add_tail"
-+.LASF498:
-+ .string "_sifields"
-+.LASF569:
-+ .string "zone_pgdat"
-+.LASF922:
-+ .string "st_shndx"
-+.LASF783:
-+ .string "ki_buf"
-+.LASF218:
-+ .string "nivcsw"
-+.LASF175:
-+ .string "prio"
-+.LASF1166:
-+ .string "radix_tree_node"
-+.LASF275:
-+ .string "io_wait"
-+.LASF372:
-+ .string "should_wakeup"
-+.LASF633:
-+ .string "i_list"
-+.LASF439:
-+ .string "mpc_oem_bus_info"
-+.LASF1226:
-+ .string "qs_gquota"
-+.LASF606:
-+ .string "rcu_head"
-+.LASF1571:
-+ .string "__ptr"
-+.LASF334:
-+ .string "mpc_signature"
-+.LASF744:
-+ .string "hrtimer_clock_base"
-+.LASF759:
-+ .string "work"
-+.LASF756:
-+ .string "work_func_t"
-+.LASF1376:
-+ .string "listxattr"
-+.LASF1050:
-+ .string "klist_node"
-+.LASF136:
-+ .string "no_update"
-+.LASF462:
-+ .string "__signalfn_t"
-+.LASF1112:
-+ .string "d_release"
-+.LASF1399:
-+ .string "splice_read"
-+.LASF1427:
-+ .string "prev_offset"
-+.LASF767:
-+ .string "ki_run_list"
-+.LASF608:
-+ .string "quiescbatch"
-+.LASF256:
-+ .string "notifier_data"
-+.LASF1638:
-+ .string "per_cpu__tvec_bases"
-+.LASF1361:
-+ .string "unlink"
-+.LASF403:
-+ .string "groups"
-+.LASF1105:
-+ .string "hash"
-+.LASF1560:
-+ .string "new_base"
-+.LASF114:
-+ .string "bufferram"
-+.LASF35:
-+ .string "clockid_t"
-+.LASF331:
-+ .string "cputime_t"
-+.LASF1715:
-+ .string "swapper_space"
-+.LASF1132:
-+ .string "s_count"
-+.LASF932:
-+ .string "syms"
-+.LASF667:
-+ .string "i_state"
-+.LASF341:
-+ .string "mpc_oemsize"
-+.LASF566:
-+ .string "wait_table"
-+.LASF1010:
-+ .string "module_param_attrs"
-+.LASF343:
-+ .string "mpc_lapic"
-+.LASF303:
-+ .string "rb_right"
-+.LASF774:
-+ .string "ki_retry"
-+.LASF1165:
-+ .string "rnode"
-+.LASF19:
-+ .string "signed char"
-+.LASF112:
-+ .string "freeram"
-+.LASF656:
-+ .string "i_fop"
-+.LASF887:
-+ .string "ra_pages"
-+.LASF944:
-+ .string "gpl_future_syms"
-+.LASF1693:
-+ .string "acpi_pci_disabled"
-+.LASF1672:
-+ .string "__ksymtab_msleep"
-+.LASF1614:
-+ .string "msleep"
-+.LASF935:
-+ .string "gpl_syms"
-+.LASF1540:
-+ .string "__constant_c_and_count_memset"
-+.LASF1039:
-+ .string "typename"
-+.LASF209:
-+ .string "pids"
-+.LASF1580:
-+ .string "__func__"
-+.LASF322:
-+ .string "count"
-+.LASF1529:
-+ .string "list_replace_init"
-+.LASF1186:
-+ .string "dqb_btime"
-+.LASF1543:
-+ .string "set_running_timer"
-+.LASF589:
-+ .string "zonelist_cache"
-+.LASF957:
-+ .string "arch"
-+.LASF1660:
-+ .string "__ksymtab_del_timer_sync"
-+.LASF1664:
-+ .string "__ksymtab_schedule_timeout"
-+.LASF1457:
-+ .string "kill_sb"
-+.LASF1414:
-+ .string "fl_ops"
-+.LASF1564:
-+ .string "original"
-+.LASF490:
-+ .string "_timer"
-+.LASF484:
-+ .string "_status"
-+.LASF150:
-+ .string "i387"
-+.LASF904:
-+ .string "irqs"
-+.LASF1284:
-+ .string "quotactl_ops"
-+.LASF294:
-+ .string "sequence"
-+.LASF1181:
-+ .string "dqb_bsoftlimit"
-+.LASF1613:
-+ .string "schedule_timeout_uninterruptible"
-+.LASF526:
-+ .string "d_subdirs"
-+.LASF671:
-+ .string "i_private"
-+.LASF806:
-+ .string "kioctx"
-+.LASF854:
-+ .string "posix_timers"
-+.LASF796:
-+ .string "f_pos"
-+.LASF311:
-+ .string "hlist_node"
-+.LASF1147:
-+ .string "s_wait_unfrozen"
-+.LASF491:
-+ .string "_sigchld"
-+.LASF530:
-+ .string "d_sb"
-+.LASF22:
-+ .string "__s16"
-+.LASF240:
-+ .string "comm"
-+.LASF859:
-+ .string "pgrp"
-+.LASF1035:
-+ .string "set_affinity"
-+.LASF1568:
-+ .string "round_jiffies_relative"
-+.LASF682:
-+ .string "mm_users"
-+.LASF473:
-+ .string "sigval"
-+.LASF1005:
-+ .string "module_sect_attr"
-+.LASF1340:
-+ .string "bd_holders"
-+.LASF1582:
-+ .string "timer_cpu_notify"
-+.LASF1545:
-+ .string "clear_pending"
-+.LASF728:
-+ .string "ktime"
-+.LASF1673:
-+ .string "__kstrtab_msleep_interruptible"
-+.LASF1023:
-+ .string "wake_depth"
-+.LASF1653:
-+ .string "__kstrtab_mod_timer"
-+.LASF1570:
-+ .string "init_timer"
-+.LASF842:
-+ .string "signalfd_list"
-+.LASF1259:
-+ .string "dq_off"
-+.LASF80:
-+ .string "int21_revectored"
-+.LASF1497:
-+ .string "inuse"
-+.LASF1495:
-+ .string "kstatfs"
-+.LASF1173:
-+ .string "ia_atime"
-+.LASF1694:
-+ .string "skip_ioapic_setup"
-+.LASF799:
-+ .string "f_gid"
-+.LASF600:
-+ .string "head"
-+.LASF813:
-+ .string "max_reqs"
-+.LASF1184:
-+ .string "dqb_isoftlimit"
-+.LASF1720:
-+ .string "/usr/src/linux-2.6.22.19-chopstix"
-+.LASF1018:
-+ .string "chip"
-+.LASF1260:
-+ .string "dq_flags"
-+.LASF697:
-+ .string "reserved_vm"
-+.LASF33:
-+ .string "pid_t"
-+.LASF109:
-+ .string "uptime"
-+.LASF72:
-+ .string "__gsh"
-+.LASF43:
-+ .string "clock_t"
-+.LASF369:
-+ .string "dev_pm_info"
-+.LASF1569:
-+ .string "internal_add_timer"
-+.LASF229:
-+ .string "egid"
-+.LASF822:
-+ .string "mm_counter_t"
-+.LASF13:
-+ .string "__kernel_uid32_t"
-+.LASF1230:
-+ .string "qs_rtbtimelimit"
-+.LASF259:
-+ .string "audit_context"
-+.LASF1489:
-+ .string "filldir_t"
-+.LASF204:
-+ .string "real_parent"
-+.LASF1639:
-+ .string "__kstrtab___round_jiffies"
-+.LASF897:
-+ .string "system"
-+.LASF1453:
-+ .string "fa_file"
-+.LASF1378:
-+ .string "truncate_range"
-+.LASF1159:
-+ .string "create_mode"
-+.LASF1243:
-+ .string "dqi_dirty_list"
-+.LASF25:
-+ .string "__s32"
-+.LASF385:
-+ .string "is_registered"
-+.LASF319:
-+ .string "__wait_queue_head"
-+.LASF1099:
-+ .string "right"
-+.LASF1700:
-+ .string "per_cpu__rcu_data"
-+.LASF1321:
-+ .string "i_mmap_writable"
-+.LASF1607:
-+ .string "try_to_del_timer_sync"
-+.LASF561:
-+ .string "all_unreclaimable"
-+.LASF1447:
-+ .string "nfs_fl"
-+.LASF1471:
-+ .string "sync_fs"
-+.LASF51:
-+ .string "arg3"
-+.LASF1210:
-+ .string "d_rtb_softlimit"
-+.LASF425:
-+ .string "no_ioapic_check"
-+.LASF781:
-+ .string "ki_opcode"
-+.LASF1142:
-+ .string "s_bdev"
-+.LASF1437:
-+ .string "fl_compare_owner"
-+.LASF1022:
-+ .string "depth"
-+.LASF1451:
-+ .string "fa_fd"
-+.LASF963:
-+ .string "modules_which_use_me"
-+.LASF1512:
-+ .string "vm_event_state"
-+.LASF1584:
-+ .string "hcpu"
-+.LASF1689:
-+ .string "__FIXADDR_TOP"
-+.LASF1711:
-+ .string "ioport_resource"
-+.LASF926:
-+ .string "mkobj"
-+.LASF916:
-+ .string "elf32_sym"
-+.LASF1287:
-+ .string "quota_sync"
-+.LASF643:
-+ .string "i_size"
-+.LASF613:
-+ .string "qlen"
-+.LASF1524:
-+ .string "list_replace"
-+.LASF1682:
-+ .string "xtime"
-+.LASF288:
-+ .string "spinlock_t"
-+.LASF724:
-+ .string "node_list"
-+.LASF607:
-+ .string "rcu_data"
-+.LASF199:
-+ .string "exit_signal"
-+.LASF1510:
-+ .string "populate"
-+.LASF1626:
-+ .string "sys_geteuid"
-+.LASF1202:
-+ .string "d_bcount"
-+.LASF457:
-+ .string "refcnt"
-+.LASF757:
-+ .string "work_struct"
-+.LASF974:
-+ .string "kobject"
-+.LASF1551:
-+ .string "read_seqbegin"
-+.LASF1189:
-+ .string "if_dqinfo"
-+.LASF121:
-+ .string "bits"
-+.LASF984:
-+ .string "kobj_type"
-+.LASF405:
-+ .string "smp_ops"
-+.LASF1024:
-+ .string "irq_count"
-+.LASF53:
-+ .string "flags"
-+.LASF224:
-+ .string "it_sched_expires"
-+.LASF196:
-+ .string "binfmt"
-+.LASF1261:
-+ .string "dq_type"
-+.LASF237:
-+ .string "user"
-+.LASF861:
-+ .string "leader"
-+.LASF1678:
-+ .string "cpu_possible_map"
-+.LASF381:
-+ .string "knode_bus"
-+.LASF228:
-+ .string "fsuid"
-+.LASF653:
-+ .string "i_mutex"
-+.LASF1187:
-+ .string "dqb_itime"
-+.LASF1211:
-+ .string "d_rtbcount"
-+.LASF513:
-+ .string "altroot"
-+.LASF1179:
-+ .string "if_dqblk"
-+.LASF314:
-+ .string "__wait_queue"
-+.LASF605:
-+ .string "cs_dmacachep"
-+.LASF145:
-+ .string "esp0"
-+.LASF12:
-+ .string "char"
-+.LASF1252:
-+ .string "dq_free"
-+.LASF970:
-+ .string "percpu"
-+.LASF304:
-+ .string "rb_left"
-+.LASF52:
-+ .string "uaddr"
-+.LASF1262:
-+ .string "dq_dqb"
-+.LASF827:
-+ .string "vm_next"
-+.LASF1028:
-+ .string "irq_chip"
-+.LASF1216:
-+ .string "fs_qfilestat"
-+.LASF741:
-+ .string "HRTIMER_NORESTART"
-+.LASF1618:
-+ .string "msleep_interruptible"
-+.LASF390:
-+ .string "driver_data"
-+.LASF1222:
-+ .string "qs_version"
-+.LASF1363:
-+ .string "mkdir"
-+.LASF230:
-+ .string "sgid"
-+.LASF675:
-+ .string "mmap_cache"
-+.LASF952:
-+ .string "init_size"
-+.LASF1116:
-+ .string "s_list"
-+.LASF280:
-+ .string "fs_excl"
-+.LASF1204:
-+ .string "d_itimer"
-+.LASF4:
-+ .string "__kernel_mode_t"
-+.LASF168:
-+ .string "task_struct"
-+.LASF116:
-+ .string "freeswap"
-+.LASF793:
-+ .string "f_count"
-+.LASF61:
-+ .string "__null_ds"
-+.LASF1153:
-+ .string "dcookie_struct"
-+.LASF769:
-+ .string "ki_users"
-+.LASF1392:
-+ .string "fasync"
-+.LASF521:
-+ .string "d_inode"
-+.LASF27:
-+ .string "__s64"
-+.LASF1368:
-+ .string "follow_link"
-+.LASF586:
-+ .string "zonelist"
-+.LASF603:
-+ .string "cs_size"
-+.LASF181:
-+ .string "sleep_avg"
-+.LASF1677:
-+ .string "per_cpu__this_cpu_off"
-+.LASF834:
-+ .string "vm_ops"
-+.LASF127:
-+ .string "i387_fxsave_struct"
-+.LASF1383:
-+ .string "aio_read"
-+.LASF62:
-+ .string "__null_es"
-+.LASF189:
-+ .string "cpus_allowed"
-+.LASF167:
-+ .string "supervisor_stack"
-+.LASF872:
-+ .string "rlim"
-+.LASF1113:
-+ .string "d_iput"
-+.LASF948:
-+ .string "extable"
-+.LASF771:
-+ .string "ki_filp"
-+.LASF849:
-+ .string "shared_pending"
-+.LASF1594:
-+ .string "sav_total"
-+.LASF528:
-+ .string "d_time"
-+.LASF1111:
-+ .string "d_delete"
-+.LASF105:
-+ .string "bug_addr"
-+.LASF63:
-+ .string "__null_fs"
-+.LASF1240:
-+ .string "v2_i"
-+.LASF1572:
-+ .string "timer_set_deferrable"
-+.LASF1445:
-+ .string "nfs4_lock_info"
-+.LASF999:
-+ .string "drivers_dir"
-+.LASF615:
-+ .string "curtail"
-+.LASF1044:
-+ .string "resource"
-+.LASF1160:
-+ .string "open"
-+.LASF1102:
-+ .string "prio_tree_root"
-+.LASF1301:
-+ .string "writepage"
-+.LASF716:
-+ .string "dumpable"
-+.LASF514:
-+ .string "rootmnt"
-+.LASF110:
-+ .string "loads"
-+.LASF550:
-+ .string "pages_low"
-+.LASF64:
-+ .string "__null_gs"
-+.LASF961:
-+ .string "bug_table"
-+.LASF902:
-+ .string "kernel_stat"
-+.LASF1127:
-+ .string "s_flags"
-+.LASF1339:
-+ .string "bd_holder"
-+.LASF1389:
-+ .string "flush"
-+.LASF1610:
-+ .string "schedule_timeout"
-+.LASF626:
-+ .string "mode"
-+.LASF1058:
-+ .string "bus_type"
-+.LASF652:
-+ .string "i_lock"
-+.LASF553:
-+ .string "pageset"
-+.LASF972:
-+ .string "attribute_group"
-+.LASF1706:
-+ .string "per_cpu__kstat"
-+.LASF669:
-+ .string "i_flags"
-+.LASF1064:
-+ .string "bus_notifier"
-+.LASF398:
-+ .string "devres_lock"
-+.LASF1691:
-+ .string "acpi_disabled"
-+.LASF123:
-+ .string "desc_struct"
-+.LASF1201:
-+ .string "d_ino_softlimit"
-+.LASF635:
-+ .string "i_dentry"
-+.LASF1401:
-+ .string "fl_next"
-+.LASF324:
-+ .string "wait_list"
-+.LASF458:
-+ .string "proc_list"
-+.LASF1052:
-+ .string "n_node"
-+.LASF1391:
-+ .string "aio_fsync"
-+.LASF1484:
-+ .string "get_parent"
-+.LASF611:
-+ .string "nxtlist"
-+.LASF154:
-+ .string "saved_esp0"
-+.LASF705:
-+ .string "start_stack"
-+.LASF1597:
-+ .string "sys_sysinfo"
-+.LASF1108:
-+ .string "dentry_operations"
-+.LASF623:
-+ .string "PIDTYPE_MAX"
-+.LASF221:
-+ .string "maj_flt"
-+.LASF891:
-+ .string "unplug_io_fn"
-+.LASF287:
-+ .string "raw_lock"
-+.LASF465:
-+ .string "__sigrestore_t"
-+.LASF1307:
-+ .string "prepare_write"
-+.LASF1611:
-+ .string "timeout"
-+.LASF708:
-+ .string "env_start"
-+.LASF1299:
-+ .string "dqptr_sem"
-+.LASF1270:
-+ .string "release_dqblk"
-+.LASF124:
-+ .string "i387_fsave_struct"
-+.LASF1622:
-+ .string "espec"
-+.LASF1479:
-+ .string "show_stats"
-+.LASF1698:
-+ .string "contig_page_data"
-+.LASF318:
-+ .string "wait_queue_func_t"
-+.LASF845:
-+ .string "signal_struct"
-+.LASF1707:
-+ .string "per_cpu__gdt_page"
-+.LASF636:
-+ .string "i_ino"
-+.LASF241:
-+ .string "link_count"
-+.LASF782:
-+ .string "ki_nbytes"
-+.LASF1449:
-+ .string "fasync_struct"
-+.LASF374:
-+ .string "saved_state"
-+.LASF808:
-+ .string "dead"
-+.LASF522:
-+ .string "d_hash"
-+.LASF1293:
-+ .string "set_xstate"
-+.LASF1100:
-+ .string "prio_tree_node"
-+.LASF696:
-+ .string "stack_vm"
-+.LASF591:
-+ .string "_count"
-+.LASF1089:
-+ .string "class_device_attribute"
-+.LASF24:
-+ .string "__u16"
-+.LASF55:
-+ .string "futex"
-+.LASF180:
-+ .string "ioprio"
-+.LASF755:
-+ .string "task_io_accounting"
-+.LASF236:
-+ .string "keep_capabilities"
-+.LASF426:
-+ .string "init_apic_ldr"
-+.LASF639:
-+ .string "i_uid"
-+.LASF147:
-+ .string "debugreg"
-+.LASF829:
-+ .string "vm_flags"
-+.LASF333:
-+ .string "mp_config_table"
-+.LASF912:
-+ .string "gdt_page"
-+.LASF585:
-+ .string "kswapd_max_order"
-+.LASF48:
-+ .string "arg0"
-+.LASF50:
-+ .string "arg2"
-+.LASF57:
-+ .string "pgprot"
-+.LASF1288:
-+ .string "get_info"
-+.LASF475:
-+ .string "sival_ptr"
-+.LASF191:
-+ .string "first_time_slice"
-+.LASF90:
-+ .string "___eax"
-+.LASF584:
-+ .string "kswapd"
-+.LASF847:
-+ .string "wait_chldexit"
-+.LASF142:
-+ .string "mm_segment_t"
-+.LASF1196:
-+ .string "d_fieldmask"
-+.LASF41:
-+ .string "ssize_t"
-+.LASF971:
-+ .string "args"
-+.LASF74:
-+ .string "__map"
-+.LASF26:
-+ .string "__u32"
-+.LASF84:
-+ .string "___ebx"
-+.LASF122:
-+ .string "cpumask_t"
-+.LASF1644:
-+ .string "__ksymtab_round_jiffies"
-+.LASF763:
-+ .string "iovec"
-+.LASF870:
-+ .string "cinblock"
-+.LASF1538:
-+ .string "oldbit"
-+.LASF581:
-+ .string "node_spanned_pages"
-+.LASF1566:
-+ .string "__round_jiffies_relative"
-+.LASF1344:
-+ .string "bd_part"
-+.LASF1635:
-+ .string "__ksymtab_jiffies_64"
-+.LASF992:
-+ .string "value"
-+.LASF445:
-+ .string "cpu_mask_to_apicid"
-+.LASF1555:
-+ .string "active_tasks"
-+.LASF440:
-+ .string "mpc_oem_pci_bus"
-+.LASF885:
-+ .string "rt_mutex_waiter"
-+.LASF447:
-+ .string "send_IPI_allbutself"
-+.LASF1156:
-+ .string "saved_names"
-+.LASF784:
-+ .string "ki_left"
-+.LASF85:
-+ .string "___ecx"
-+.LASF1683:
-+ .string "wall_to_monotonic"
-+.LASF1454:
-+ .string "file_system_type"
-+.LASF1177:
-+ .string "qid_t"
-+.LASF198:
-+ .string "exit_code"
-+.LASF99:
-+ .string "___ss"
-+.LASF1467:
-+ .string "drop_inode"
-+.LASF511:
-+ .string "umask"
-+.LASF421:
-+ .string "apic_destination_logical"
-+.LASF148:
-+ .string "trap_no"
-+.LASF172:
-+ .string "ptrace"
-+.LASF393:
-+ .string "dma_mask"
-+.LASF758:
-+ .string "delayed_work"
-+.LASF1554:
-+ .string "ticks"
-+.LASF1641:
-+ .string "__kstrtab___round_jiffies_relative"
-+.LASF205:
-+ .string "parent"
-+.LASF88:
-+ .string "___edi"
-+.LASF841:
-+ .string "siglock"
-+.LASF1616:
-+ .string "schedule_timeout_interruptible"
-+.LASF1051:
-+ .string "n_klist"
-+.LASF86:
-+ .string "___edx"
-+.LASF750:
-+ .string "get_softirq_time"
-+.LASF493:
-+ .string "_sigpoll"
-+.LASF389:
-+ .string "driver"
-+.LASF0:
-+ .string "unsigned int"
-+.LASF309:
-+ .string "hlist_head"
-+.LASF824:
-+ .string "vm_mm"
-+.LASF138:
-+ .string "entry_eip"
-+ .ident "GCC: (GNU) 4.1.1 (Gentoo 4.1.1-r3)"
-+ .section .note.GNU-stack,"",@progbits
-diff -Nurb --exclude='*.swp' --exclude=tags --exclude='*.patch' --exclude='*.diff' linux-2.6.22-580/mm/memory.c linux-2.6.22-590/mm/memory.c
---- linux-2.6.22-580/mm/memory.c 2009-02-18 09:56:03.000000000 -0500
-+++ linux-2.6.22-590/mm/memory.c 2009-02-18 09:57:23.000000000 -0500
-@@ -59,6 +59,7 @@
-
- #include <linux/swapops.h>
- #include <linux/elf.h>
-+#include <linux/arrays.h>
-
- #ifndef CONFIG_NEED_MULTIPLE_NODES
- /* use the per-pgdat data instead for discontigmem - mbligh */
-@@ -2601,6 +2602,15 @@
- return ret;
- }
-
-+extern void (*rec_event)(void *,unsigned int);
-+struct event_spec {
-+ unsigned long pc;
-+ unsigned long dcookie;
-+ unsigned count;
-+ unsigned char reason;
-+};
-+
-+
- /*
- * By the time we get here, we already hold the mm semaphore
- */
-@@ -2630,6 +2640,24 @@
- if (!pte)
- return VM_FAULT_OOM;
-
-+#ifdef CONFIG_CHOPSTIX
-+ if (rec_event) {
-+ struct event event;
-+ struct event_spec espec;
-+ struct pt_regs *regs;
-+ unsigned int pc;
-+ regs = task_pt_regs(current);
-+ pc = regs->eip & (unsigned int) ~4095;
-+
-+ espec.reason = 0; /* alloc */
-+ event.event_data=&espec;
-+ event.task = current;
-+ espec.pc=pc;
-+ event.event_type=5;
-+ (*rec_event)(&event, 1);
-+ }
-+#endif
-+
- return handle_pte_fault(mm, vma, address, pte, pmd, write_access);
- }
-
-diff -Nurb --exclude='*.swp' --exclude=tags --exclude='*.patch' --exclude='*.diff' linux-2.6.22-580/mm/memory.c.orig linux-2.6.22-590/mm/memory.c.orig
---- linux-2.6.22-580/mm/memory.c.orig 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.22-590/mm/memory.c.orig 2009-02-18 09:56:03.000000000 -0500
-@@ -0,0 +1,2841 @@
-+/*
-+ * linux/mm/memory.c
-+ *
-+ * Copyright (C) 1991, 1992, 1993, 1994 Linus Torvalds
-+ */
-+
-+/*
-+ * demand-loading started 01.12.91 - seems it is high on the list of
-+ * things wanted, and it should be easy to implement. - Linus
-+ */
-+
-+/*
-+ * Ok, demand-loading was easy, shared pages a little bit tricker. Shared
-+ * pages started 02.12.91, seems to work. - Linus.
-+ *
-+ * Tested sharing by executing about 30 /bin/sh: under the old kernel it
-+ * would have taken more than the 6M I have free, but it worked well as
-+ * far as I could see.
-+ *
-+ * Also corrected some "invalidate()"s - I wasn't doing enough of them.
-+ */
-+
-+/*
-+ * Real VM (paging to/from disk) started 18.12.91. Much more work and
-+ * thought has to go into this. Oh, well..
-+ * 19.12.91 - works, somewhat. Sometimes I get faults, don't know why.
-+ * Found it. Everything seems to work now.
-+ * 20.12.91 - Ok, making the swap-device changeable like the root.
-+ */
-+
-+/*
-+ * 05.04.94 - Multi-page memory management added for v1.1.
-+ * Idea by Alex Bligh (alex@cconcepts.co.uk)
-+ *
-+ * 16.07.99 - Support of BIGMEM added by Gerhard Wichert, Siemens AG
-+ * (Gerhard.Wichert@pdb.siemens.de)
-+ *
-+ * Aug/Sep 2004 Changed to four level page tables (Andi Kleen)
-+ */
-+
-+#include <linux/kernel_stat.h>
-+#include <linux/mm.h>
-+#include <linux/hugetlb.h>
-+#include <linux/mman.h>
-+#include <linux/swap.h>
-+#include <linux/highmem.h>
-+#include <linux/pagemap.h>
-+#include <linux/rmap.h>
-+#include <linux/module.h>
-+#include <linux/delayacct.h>
-+#include <linux/init.h>
-+#include <linux/writeback.h>
-+
-+#include <asm/pgalloc.h>
-+#include <asm/uaccess.h>
-+#include <asm/tlb.h>
-+#include <asm/tlbflush.h>
-+#include <asm/pgtable.h>
-+
-+#include <linux/swapops.h>
-+#include <linux/elf.h>
-+
-+#ifndef CONFIG_NEED_MULTIPLE_NODES
-+/* use the per-pgdat data instead for discontigmem - mbligh */
-+unsigned long max_mapnr;
-+struct page *mem_map;
-+
-+EXPORT_SYMBOL(max_mapnr);
-+EXPORT_SYMBOL(mem_map);
-+#endif
-+
-+unsigned long num_physpages;
-+/*
-+ * A number of key systems in x86 including ioremap() rely on the assumption
-+ * that high_memory defines the upper bound on direct map memory, then end
-+ * of ZONE_NORMAL. Under CONFIG_DISCONTIG this means that max_low_pfn and
-+ * highstart_pfn must be the same; there must be no gap between ZONE_NORMAL
-+ * and ZONE_HIGHMEM.
-+ */
-+void * high_memory;
-+unsigned long vmalloc_earlyreserve;
-+
-+EXPORT_SYMBOL(num_physpages);
-+EXPORT_SYMBOL(high_memory);
-+EXPORT_SYMBOL(vmalloc_earlyreserve);
-+
-+int randomize_va_space __read_mostly = 1;
-+
-+static int __init disable_randmaps(char *s)
-+{
-+ randomize_va_space = 0;
-+ return 1;
-+}
-+__setup("norandmaps", disable_randmaps);
-+
-+
-+/*
-+ * If a p?d_bad entry is found while walking page tables, report
-+ * the error, before resetting entry to p?d_none. Usually (but
-+ * very seldom) called out from the p?d_none_or_clear_bad macros.
-+ */
-+
-+void pgd_clear_bad(pgd_t *pgd)
-+{
-+ pgd_ERROR(*pgd);
-+ pgd_clear(pgd);
-+}
-+
-+void pud_clear_bad(pud_t *pud)
-+{
-+ pud_ERROR(*pud);
-+ pud_clear(pud);
-+}
-+
-+void pmd_clear_bad(pmd_t *pmd)
-+{
-+ pmd_ERROR(*pmd);
-+ pmd_clear(pmd);
-+}
-+
-+/*
-+ * Note: this doesn't free the actual pages themselves. That
-+ * has been handled earlier when unmapping all the memory regions.
-+ */
-+static void free_pte_range(struct mmu_gather *tlb, pmd_t *pmd)
-+{
-+ struct page *page = pmd_page(*pmd);
-+ pmd_clear(pmd);
-+ pte_lock_deinit(page);
-+ pte_free_tlb(tlb, page);
-+ dec_zone_page_state(page, NR_PAGETABLE);
-+ tlb->mm->nr_ptes--;
-+}
-+
-+static inline void free_pmd_range(struct mmu_gather *tlb, pud_t *pud,
-+ unsigned long addr, unsigned long end,
-+ unsigned long floor, unsigned long ceiling)
-+{
-+ pmd_t *pmd;
-+ unsigned long next;
-+ unsigned long start;
-+
-+ start = addr;
-+ pmd = pmd_offset(pud, addr);
-+ do {
-+ next = pmd_addr_end(addr, end);
-+ if (pmd_none_or_clear_bad(pmd))
-+ continue;
-+ free_pte_range(tlb, pmd);
-+ } while (pmd++, addr = next, addr != end);
-+
-+ start &= PUD_MASK;
-+ if (start < floor)
-+ return;
-+ if (ceiling) {
-+ ceiling &= PUD_MASK;
-+ if (!ceiling)
-+ return;
-+ }
-+ if (end - 1 > ceiling - 1)
-+ return;
-+
-+ pmd = pmd_offset(pud, start);
-+ pud_clear(pud);
-+ pmd_free_tlb(tlb, pmd);
-+}
-+
-+static inline void free_pud_range(struct mmu_gather *tlb, pgd_t *pgd,
-+ unsigned long addr, unsigned long end,
-+ unsigned long floor, unsigned long ceiling)
-+{
-+ pud_t *pud;
-+ unsigned long next;
-+ unsigned long start;
-+
-+ start = addr;
-+ pud = pud_offset(pgd, addr);
-+ do {
-+ next = pud_addr_end(addr, end);
-+ if (pud_none_or_clear_bad(pud))
-+ continue;
-+ free_pmd_range(tlb, pud, addr, next, floor, ceiling);
-+ } while (pud++, addr = next, addr != end);
-+
-+ start &= PGDIR_MASK;
-+ if (start < floor)
-+ return;
-+ if (ceiling) {
-+ ceiling &= PGDIR_MASK;
-+ if (!ceiling)
-+ return;
-+ }
-+ if (end - 1 > ceiling - 1)
-+ return;
-+
-+ pud = pud_offset(pgd, start);
-+ pgd_clear(pgd);
-+ pud_free_tlb(tlb, pud);
-+}
-+
-+/*
-+ * This function frees user-level page tables of a process.
-+ *
-+ * Must be called with pagetable lock held.
-+ */
-+void free_pgd_range(struct mmu_gather **tlb,
-+ unsigned long addr, unsigned long end,
-+ unsigned long floor, unsigned long ceiling)
-+{
-+ pgd_t *pgd;
-+ unsigned long next;
-+ unsigned long start;
-+
-+ /*
-+ * The next few lines have given us lots of grief...
-+ *
-+ * Why are we testing PMD* at this top level? Because often
-+ * there will be no work to do at all, and we'd prefer not to
-+ * go all the way down to the bottom just to discover that.
-+ *
-+ * Why all these "- 1"s? Because 0 represents both the bottom
-+ * of the address space and the top of it (using -1 for the
-+ * top wouldn't help much: the masks would do the wrong thing).
-+ * The rule is that addr 0 and floor 0 refer to the bottom of
-+ * the address space, but end 0 and ceiling 0 refer to the top
-+ * Comparisons need to use "end - 1" and "ceiling - 1" (though
-+ * that end 0 case should be mythical).
-+ *
-+ * Wherever addr is brought up or ceiling brought down, we must
-+ * be careful to reject "the opposite 0" before it confuses the
-+ * subsequent tests. But what about where end is brought down
-+ * by PMD_SIZE below? no, end can't go down to 0 there.
-+ *
-+ * Whereas we round start (addr) and ceiling down, by different
-+ * masks at different levels, in order to test whether a table
-+ * now has no other vmas using it, so can be freed, we don't
-+ * bother to round floor or end up - the tests don't need that.
-+ */
-+
-+ addr &= PMD_MASK;
-+ if (addr < floor) {
-+ addr += PMD_SIZE;
-+ if (!addr)
-+ return;
-+ }
-+ if (ceiling) {
-+ ceiling &= PMD_MASK;
-+ if (!ceiling)
-+ return;
-+ }
-+ if (end - 1 > ceiling - 1)
-+ end -= PMD_SIZE;
-+ if (addr > end - 1)
-+ return;
-+
-+ start = addr;
-+ pgd = pgd_offset((*tlb)->mm, addr);
-+ do {
-+ next = pgd_addr_end(addr, end);
-+ if (pgd_none_or_clear_bad(pgd))
-+ continue;
-+ free_pud_range(*tlb, pgd, addr, next, floor, ceiling);
-+ } while (pgd++, addr = next, addr != end);
-+
-+ if (!(*tlb)->fullmm)
-+ flush_tlb_pgtables((*tlb)->mm, start, end);
-+}
-+
-+void free_pgtables(struct mmu_gather **tlb, struct vm_area_struct *vma,
-+ unsigned long floor, unsigned long ceiling)
-+{
-+ while (vma) {
-+ struct vm_area_struct *next = vma->vm_next;
-+ unsigned long addr = vma->vm_start;
-+
-+ /*
-+ * Hide vma from rmap and vmtruncate before freeing pgtables
-+ */
-+ anon_vma_unlink(vma);
-+ unlink_file_vma(vma);
-+
-+ if (is_vm_hugetlb_page(vma)) {
-+ hugetlb_free_pgd_range(tlb, addr, vma->vm_end,
-+ floor, next? next->vm_start: ceiling);
-+ } else {
-+ /*
-+ * Optimization: gather nearby vmas into one call down
-+ */
-+ while (next && next->vm_start <= vma->vm_end + PMD_SIZE
-+ && !is_vm_hugetlb_page(next)) {
-+ vma = next;
-+ next = vma->vm_next;
-+ anon_vma_unlink(vma);
-+ unlink_file_vma(vma);
-+ }
-+ free_pgd_range(tlb, addr, vma->vm_end,
-+ floor, next? next->vm_start: ceiling);
-+ }
-+ vma = next;
-+ }
-+}
-+
-+int __pte_alloc(struct mm_struct *mm, pmd_t *pmd, unsigned long address)
-+{
-+ struct page *new = pte_alloc_one(mm, address);
-+ if (!new)
-+ return -ENOMEM;
-+
-+ pte_lock_init(new);
-+ spin_lock(&mm->page_table_lock);
-+ if (pmd_present(*pmd)) { /* Another has populated it */
-+ pte_lock_deinit(new);
-+ pte_free(new);
-+ } else {
-+ mm->nr_ptes++;
-+ inc_zone_page_state(new, NR_PAGETABLE);
-+ pmd_populate(mm, pmd, new);
-+ }
-+ spin_unlock(&mm->page_table_lock);
-+ return 0;
-+}
-+
-+int __pte_alloc_kernel(pmd_t *pmd, unsigned long address)
-+{
-+ pte_t *new = pte_alloc_one_kernel(&init_mm, address);
-+ if (!new)
-+ return -ENOMEM;
-+
-+ spin_lock(&init_mm.page_table_lock);
-+ if (pmd_present(*pmd)) /* Another has populated it */
-+ pte_free_kernel(new);
-+ else
-+ pmd_populate_kernel(&init_mm, pmd, new);
-+ spin_unlock(&init_mm.page_table_lock);
-+ return 0;
-+}
-+
-+static inline void add_mm_rss(struct mm_struct *mm, int file_rss, int anon_rss)
-+{
-+ if (file_rss)
-+ add_mm_counter(mm, file_rss, file_rss);
-+ if (anon_rss)
-+ add_mm_counter(mm, anon_rss, anon_rss);
-+}
-+
-+/*
-+ * This function is called to print an error when a bad pte
-+ * is found. For example, we might have a PFN-mapped pte in
-+ * a region that doesn't allow it.
-+ *
-+ * The calling function must still handle the error.
-+ */
-+void print_bad_pte(struct vm_area_struct *vma, pte_t pte, unsigned long vaddr)
-+{
-+ printk(KERN_ERR "Bad pte = %08llx, process = %s, "
-+ "vm_flags = %lx, vaddr = %lx\n",
-+ (long long)pte_val(pte),
-+ (vma->vm_mm == current->mm ? current->comm : "???"),
-+ vma->vm_flags, vaddr);
-+ dump_stack();
-+}
-+
-+static inline int is_cow_mapping(unsigned int flags)
-+{
-+ return (flags & (VM_SHARED | VM_MAYWRITE)) == VM_MAYWRITE;
-+}
-+
-+/*
-+ * This function gets the "struct page" associated with a pte.
-+ *
-+ * NOTE! Some mappings do not have "struct pages". A raw PFN mapping
-+ * will have each page table entry just pointing to a raw page frame
-+ * number, and as far as the VM layer is concerned, those do not have
-+ * pages associated with them - even if the PFN might point to memory
-+ * that otherwise is perfectly fine and has a "struct page".
-+ *
-+ * The way we recognize those mappings is through the rules set up
-+ * by "remap_pfn_range()": the vma will have the VM_PFNMAP bit set,
-+ * and the vm_pgoff will point to the first PFN mapped: thus every
-+ * page that is a raw mapping will always honor the rule
-+ *
-+ * pfn_of_page == vma->vm_pgoff + ((addr - vma->vm_start) >> PAGE_SHIFT)
-+ *
-+ * and if that isn't true, the page has been COW'ed (in which case it
-+ * _does_ have a "struct page" associated with it even if it is in a
-+ * VM_PFNMAP range).
-+ */
-+struct page *vm_normal_page(struct vm_area_struct *vma, unsigned long addr, pte_t pte)
-+{
-+ unsigned long pfn = pte_pfn(pte);
-+
-+ if (unlikely(vma->vm_flags & VM_PFNMAP)) {
-+ unsigned long off = (addr - vma->vm_start) >> PAGE_SHIFT;
-+ if (pfn == vma->vm_pgoff + off)
-+ return NULL;
-+ if (!is_cow_mapping(vma->vm_flags))
-+ return NULL;
-+ }
-+
-+ /*
-+ * Add some anal sanity checks for now. Eventually,
-+ * we should just do "return pfn_to_page(pfn)", but
-+ * in the meantime we check that we get a valid pfn,
-+ * and that the resulting page looks ok.
-+ */
-+ if (unlikely(!pfn_valid(pfn))) {
-+ print_bad_pte(vma, pte, addr);
-+ return NULL;
-+ }
-+
-+ /*
-+ * NOTE! We still have PageReserved() pages in the page
-+ * tables.
-+ *
-+ * The PAGE_ZERO() pages and various VDSO mappings can
-+ * cause them to exist.
-+ */
-+ return pfn_to_page(pfn);
-+}
-+
-+/*
-+ * copy one vm_area from one task to the other. Assumes the page tables
-+ * already present in the new task to be cleared in the whole range
-+ * covered by this vma.
-+ */
-+
-+static inline void
-+copy_one_pte(struct mm_struct *dst_mm, struct mm_struct *src_mm,
-+ pte_t *dst_pte, pte_t *src_pte, struct vm_area_struct *vma,
-+ unsigned long addr, int *rss)
-+{
-+ unsigned long vm_flags = vma->vm_flags;
-+ pte_t pte = *src_pte;
-+ struct page *page;
-+
-+ /* pte contains position in swap or file, so copy. */
-+ if (unlikely(!pte_present(pte))) {
-+ if (!pte_file(pte)) {
-+ swp_entry_t entry = pte_to_swp_entry(pte);
-+
-+ swap_duplicate(entry);
-+ /* make sure dst_mm is on swapoff's mmlist. */
-+ if (unlikely(list_empty(&dst_mm->mmlist))) {
-+ spin_lock(&mmlist_lock);
-+ if (list_empty(&dst_mm->mmlist))
-+ list_add(&dst_mm->mmlist,
-+ &src_mm->mmlist);
-+ spin_unlock(&mmlist_lock);
-+ }
-+ if (is_write_migration_entry(entry) &&
-+ is_cow_mapping(vm_flags)) {
-+ /*
-+ * COW mappings require pages in both parent
-+ * and child to be set to read.
-+ */
-+ make_migration_entry_read(&entry);
-+ pte = swp_entry_to_pte(entry);
-+ set_pte_at(src_mm, addr, src_pte, pte);
-+ }
-+ }
-+ goto out_set_pte;
-+ }
-+
-+ /*
-+ * If it's a COW mapping, write protect it both
-+ * in the parent and the child
-+ */
-+ if (is_cow_mapping(vm_flags)) {
-+ ptep_set_wrprotect(src_mm, addr, src_pte);
-+ pte = pte_wrprotect(pte);
-+ }
-+
-+ /*
-+ * If it's a shared mapping, mark it clean in
-+ * the child
-+ */
-+ if (vm_flags & VM_SHARED)
-+ pte = pte_mkclean(pte);
-+ pte = pte_mkold(pte);
-+
-+ page = vm_normal_page(vma, addr, pte);
-+ if (page) {
-+ get_page(page);
-+ page_dup_rmap(page, vma, addr);
-+ rss[!!PageAnon(page)]++;
-+ }
-+
-+out_set_pte:
-+ set_pte_at(dst_mm, addr, dst_pte, pte);
-+}
-+
-+static int copy_pte_range(struct mm_struct *dst_mm, struct mm_struct *src_mm,
-+ pmd_t *dst_pmd, pmd_t *src_pmd, struct vm_area_struct *vma,
-+ unsigned long addr, unsigned long end)
-+{
-+ pte_t *src_pte, *dst_pte;
-+ spinlock_t *src_ptl, *dst_ptl;
-+ int progress = 0;
-+ int rss[2];
-+
-+ if (!vx_rss_avail(dst_mm, ((end - addr)/PAGE_SIZE + 1)))
-+ return -ENOMEM;
-+
-+again:
-+ rss[1] = rss[0] = 0;
-+ dst_pte = pte_alloc_map_lock(dst_mm, dst_pmd, addr, &dst_ptl);
-+ if (!dst_pte)
-+ return -ENOMEM;
-+ src_pte = pte_offset_map_nested(src_pmd, addr);
-+ src_ptl = pte_lockptr(src_mm, src_pmd);
-+ spin_lock_nested(src_ptl, SINGLE_DEPTH_NESTING);
-+ arch_enter_lazy_mmu_mode();
-+
-+ do {
-+ /*
-+ * We are holding two locks at this point - either of them
-+ * could generate latencies in another task on another CPU.
-+ */
-+ if (progress >= 32) {
-+ progress = 0;
-+ if (need_resched() ||
-+ need_lockbreak(src_ptl) ||
-+ need_lockbreak(dst_ptl))
-+ break;
-+ }
-+ if (pte_none(*src_pte)) {
-+ progress++;
-+ continue;
-+ }
-+ copy_one_pte(dst_mm, src_mm, dst_pte, src_pte, vma, addr, rss);
-+ progress += 8;
-+ } while (dst_pte++, src_pte++, addr += PAGE_SIZE, addr != end);
-+
-+ arch_leave_lazy_mmu_mode();
-+ spin_unlock(src_ptl);
-+ pte_unmap_nested(src_pte - 1);
-+ add_mm_rss(dst_mm, rss[0], rss[1]);
-+ pte_unmap_unlock(dst_pte - 1, dst_ptl);
-+ cond_resched();
-+ if (addr != end)
-+ goto again;
-+ return 0;
-+}
-+
-+static inline int copy_pmd_range(struct mm_struct *dst_mm, struct mm_struct *src_mm,
-+ pud_t *dst_pud, pud_t *src_pud, struct vm_area_struct *vma,
-+ unsigned long addr, unsigned long end)
-+{
-+ pmd_t *src_pmd, *dst_pmd;
-+ unsigned long next;
-+
-+ dst_pmd = pmd_alloc(dst_mm, dst_pud, addr);
-+ if (!dst_pmd)
-+ return -ENOMEM;
-+ src_pmd = pmd_offset(src_pud, addr);
-+ do {
-+ next = pmd_addr_end(addr, end);
-+ if (pmd_none_or_clear_bad(src_pmd))
-+ continue;
-+ if (copy_pte_range(dst_mm, src_mm, dst_pmd, src_pmd,
-+ vma, addr, next))
-+ return -ENOMEM;
-+ } while (dst_pmd++, src_pmd++, addr = next, addr != end);
-+ return 0;
-+}
-+
-+static inline int copy_pud_range(struct mm_struct *dst_mm, struct mm_struct *src_mm,
-+ pgd_t *dst_pgd, pgd_t *src_pgd, struct vm_area_struct *vma,
-+ unsigned long addr, unsigned long end)
-+{
-+ pud_t *src_pud, *dst_pud;
-+ unsigned long next;
-+
-+ dst_pud = pud_alloc(dst_mm, dst_pgd, addr);
-+ if (!dst_pud)
-+ return -ENOMEM;
-+ src_pud = pud_offset(src_pgd, addr);
-+ do {
-+ next = pud_addr_end(addr, end);
-+ if (pud_none_or_clear_bad(src_pud))
-+ continue;
-+ if (copy_pmd_range(dst_mm, src_mm, dst_pud, src_pud,
-+ vma, addr, next))
-+ return -ENOMEM;
-+ } while (dst_pud++, src_pud++, addr = next, addr != end);
-+ return 0;
-+}
-+
-+int copy_page_range(struct mm_struct *dst_mm, struct mm_struct *src_mm,
-+ struct vm_area_struct *vma)
-+{
-+ pgd_t *src_pgd, *dst_pgd;
-+ unsigned long next;
-+ unsigned long addr = vma->vm_start;
-+ unsigned long end = vma->vm_end;
-+
-+ /*
-+ * Don't copy ptes where a page fault will fill them correctly.
-+ * Fork becomes much lighter when there are big shared or private
-+ * readonly mappings. The tradeoff is that copy_page_range is more
-+ * efficient than faulting.
-+ */
-+ if (!(vma->vm_flags & (VM_HUGETLB|VM_NONLINEAR|VM_PFNMAP|VM_INSERTPAGE))) {
-+ if (!vma->anon_vma)
-+ return 0;
-+ }
-+
-+ if (is_vm_hugetlb_page(vma))
-+ return copy_hugetlb_page_range(dst_mm, src_mm, vma);
-+
-+ dst_pgd = pgd_offset(dst_mm, addr);
-+ src_pgd = pgd_offset(src_mm, addr);
-+ do {
-+ next = pgd_addr_end(addr, end);
-+ if (pgd_none_or_clear_bad(src_pgd))
-+ continue;
-+ if (copy_pud_range(dst_mm, src_mm, dst_pgd, src_pgd,
-+ vma, addr, next))
-+ return -ENOMEM;
-+ } while (dst_pgd++, src_pgd++, addr = next, addr != end);
-+ return 0;
-+}
-+
-+static unsigned long zap_pte_range(struct mmu_gather *tlb,
-+ struct vm_area_struct *vma, pmd_t *pmd,
-+ unsigned long addr, unsigned long end,
-+ long *zap_work, struct zap_details *details)
-+{
-+ struct mm_struct *mm = tlb->mm;
-+ pte_t *pte;
-+ spinlock_t *ptl;
-+ int file_rss = 0;
-+ int anon_rss = 0;
-+
-+ pte = pte_offset_map_lock(mm, pmd, addr, &ptl);
-+ arch_enter_lazy_mmu_mode();
-+ do {
-+ pte_t ptent = *pte;
-+ if (pte_none(ptent)) {
-+ (*zap_work)--;
-+ continue;
-+ }
-+
-+ (*zap_work) -= PAGE_SIZE;
-+
-+ if (pte_present(ptent)) {
-+ struct page *page;
-+
-+ page = vm_normal_page(vma, addr, ptent);
-+ if (unlikely(details) && page) {
-+ /*
-+ * unmap_shared_mapping_pages() wants to
-+ * invalidate cache without truncating:
-+ * unmap shared but keep private pages.
-+ */
-+ if (details->check_mapping &&
-+ details->check_mapping != page->mapping)
-+ continue;
-+ /*
-+ * Each page->index must be checked when
-+ * invalidating or truncating nonlinear.
-+ */
-+ if (details->nonlinear_vma &&
-+ (page->index < details->first_index ||
-+ page->index > details->last_index))
-+ continue;
-+ }
-+ ptent = ptep_get_and_clear_full(mm, addr, pte,
-+ tlb->fullmm);
-+ tlb_remove_tlb_entry(tlb, pte, addr);
-+ if (unlikely(!page))
-+ continue;
-+ if (unlikely(details) && details->nonlinear_vma
-+ && linear_page_index(details->nonlinear_vma,
-+ addr) != page->index)
-+ set_pte_at(mm, addr, pte,
-+ pgoff_to_pte(page->index));
-+ if (PageAnon(page))
-+ anon_rss--;
-+ else {
-+ if (pte_dirty(ptent))
-+ set_page_dirty(page);
-+ if (pte_young(ptent))
-+ SetPageReferenced(page);
-+ file_rss--;
-+ }
-+ page_remove_rmap(page, vma);
-+ tlb_remove_page(tlb, page);
-+ continue;
-+ }
-+ /*
-+ * If details->check_mapping, we leave swap entries;
-+ * if details->nonlinear_vma, we leave file entries.
-+ */
-+ if (unlikely(details))
-+ continue;
-+ if (!pte_file(ptent))
-+ free_swap_and_cache(pte_to_swp_entry(ptent));
-+ pte_clear_not_present_full(mm, addr, pte, tlb->fullmm);
-+ } while (pte++, addr += PAGE_SIZE, (addr != end && *zap_work > 0));
-+
-+ add_mm_rss(mm, file_rss, anon_rss);
-+ arch_leave_lazy_mmu_mode();
-+ pte_unmap_unlock(pte - 1, ptl);
-+
-+ return addr;
-+}
-+
-+static inline unsigned long zap_pmd_range(struct mmu_gather *tlb,
-+ struct vm_area_struct *vma, pud_t *pud,
-+ unsigned long addr, unsigned long end,
-+ long *zap_work, struct zap_details *details)
-+{
-+ pmd_t *pmd;
-+ unsigned long next;
-+
-+ pmd = pmd_offset(pud, addr);
-+ do {
-+ next = pmd_addr_end(addr, end);
-+ if (pmd_none_or_clear_bad(pmd)) {
-+ (*zap_work)--;
-+ continue;
-+ }
-+ next = zap_pte_range(tlb, vma, pmd, addr, next,
-+ zap_work, details);
-+ } while (pmd++, addr = next, (addr != end && *zap_work > 0));
-+
-+ return addr;
-+}
-+
-+static inline unsigned long zap_pud_range(struct mmu_gather *tlb,
-+ struct vm_area_struct *vma, pgd_t *pgd,
-+ unsigned long addr, unsigned long end,
-+ long *zap_work, struct zap_details *details)
-+{
-+ pud_t *pud;
-+ unsigned long next;
-+
-+ pud = pud_offset(pgd, addr);
-+ do {
-+ next = pud_addr_end(addr, end);
-+ if (pud_none_or_clear_bad(pud)) {
-+ (*zap_work)--;
-+ continue;
-+ }
-+ next = zap_pmd_range(tlb, vma, pud, addr, next,
-+ zap_work, details);
-+ } while (pud++, addr = next, (addr != end && *zap_work > 0));
-+
-+ return addr;
-+}
-+
-+static unsigned long unmap_page_range(struct mmu_gather *tlb,
-+ struct vm_area_struct *vma,
-+ unsigned long addr, unsigned long end,
-+ long *zap_work, struct zap_details *details)
-+{
-+ pgd_t *pgd;
-+ unsigned long next;
-+
-+ if (details && !details->check_mapping && !details->nonlinear_vma)
-+ details = NULL;
-+
-+ BUG_ON(addr >= end);
-+ tlb_start_vma(tlb, vma);
-+ pgd = pgd_offset(vma->vm_mm, addr);
-+ do {
-+ next = pgd_addr_end(addr, end);
-+ if (pgd_none_or_clear_bad(pgd)) {
-+ (*zap_work)--;
-+ continue;
-+ }
-+ next = zap_pud_range(tlb, vma, pgd, addr, next,
-+ zap_work, details);
-+ } while (pgd++, addr = next, (addr != end && *zap_work > 0));
-+ tlb_end_vma(tlb, vma);
-+
-+ return addr;
-+}
-+
-+#ifdef CONFIG_PREEMPT
-+# define ZAP_BLOCK_SIZE (8 * PAGE_SIZE)
-+#else
-+/* No preempt: go for improved straight-line efficiency */
-+# define ZAP_BLOCK_SIZE (1024 * PAGE_SIZE)
-+#endif
-+
-+/**
-+ * unmap_vmas - unmap a range of memory covered by a list of vma's
-+ * @tlbp: address of the caller's struct mmu_gather
-+ * @vma: the starting vma
-+ * @start_addr: virtual address at which to start unmapping
-+ * @end_addr: virtual address at which to end unmapping
-+ * @nr_accounted: Place number of unmapped pages in vm-accountable vma's here
-+ * @details: details of nonlinear truncation or shared cache invalidation
-+ *
-+ * Returns the end address of the unmapping (restart addr if interrupted).
-+ *
-+ * Unmap all pages in the vma list.
-+ *
-+ * We aim to not hold locks for too long (for scheduling latency reasons).
-+ * So zap pages in ZAP_BLOCK_SIZE bytecounts. This means we need to
-+ * return the ending mmu_gather to the caller.
-+ *
-+ * Only addresses between `start' and `end' will be unmapped.
-+ *
-+ * The VMA list must be sorted in ascending virtual address order.
-+ *
-+ * unmap_vmas() assumes that the caller will flush the whole unmapped address
-+ * range after unmap_vmas() returns. So the only responsibility here is to
-+ * ensure that any thus-far unmapped pages are flushed before unmap_vmas()
-+ * drops the lock and schedules.
-+ */
-+unsigned long unmap_vmas(struct mmu_gather **tlbp,
-+ struct vm_area_struct *vma, unsigned long start_addr,
-+ unsigned long end_addr, unsigned long *nr_accounted,
-+ struct zap_details *details)
-+{
-+ long zap_work = ZAP_BLOCK_SIZE;
-+ unsigned long tlb_start = 0; /* For tlb_finish_mmu */
-+ int tlb_start_valid = 0;
-+ unsigned long start = start_addr;
-+ spinlock_t *i_mmap_lock = details? details->i_mmap_lock: NULL;
-+ int fullmm = (*tlbp)->fullmm;
-+
-+ for ( ; vma && vma->vm_start < end_addr; vma = vma->vm_next) {
-+ unsigned long end;
-+
-+ start = max(vma->vm_start, start_addr);
-+ if (start >= vma->vm_end)
-+ continue;
-+ end = min(vma->vm_end, end_addr);
-+ if (end <= vma->vm_start)
-+ continue;
-+
-+ if (vma->vm_flags & VM_ACCOUNT)
-+ *nr_accounted += (end - start) >> PAGE_SHIFT;
-+
-+ while (start != end) {
-+ if (!tlb_start_valid) {
-+ tlb_start = start;
-+ tlb_start_valid = 1;
-+ }
-+
-+ if (unlikely(is_vm_hugetlb_page(vma))) {
-+ unmap_hugepage_range(vma, start, end);
-+ zap_work -= (end - start) /
-+ (HPAGE_SIZE / PAGE_SIZE);
-+ start = end;
-+ } else
-+ start = unmap_page_range(*tlbp, vma,
-+ start, end, &zap_work, details);
-+
-+ if (zap_work > 0) {
-+ BUG_ON(start != end);
-+ break;
-+ }
-+
-+ tlb_finish_mmu(*tlbp, tlb_start, start);
-+
-+ if (need_resched() ||
-+ (i_mmap_lock && need_lockbreak(i_mmap_lock))) {
-+ if (i_mmap_lock) {
-+ *tlbp = NULL;
-+ goto out;
-+ }
-+ cond_resched();
-+ }
-+
-+ *tlbp = tlb_gather_mmu(vma->vm_mm, fullmm);
-+ tlb_start_valid = 0;
-+ zap_work = ZAP_BLOCK_SIZE;
-+ }
-+ }
-+out:
-+ return start; /* which is now the end (or restart) address */
-+}
-+
-+/**
-+ * zap_page_range - remove user pages in a given range
-+ * @vma: vm_area_struct holding the applicable pages
-+ * @address: starting address of pages to zap
-+ * @size: number of bytes to zap
-+ * @details: details of nonlinear truncation or shared cache invalidation
-+ */
-+unsigned long zap_page_range(struct vm_area_struct *vma, unsigned long address,
-+ unsigned long size, struct zap_details *details)
-+{
-+ struct mm_struct *mm = vma->vm_mm;
-+ struct mmu_gather *tlb;
-+ unsigned long end = address + size;
-+ unsigned long nr_accounted = 0;
-+
-+ lru_add_drain();
-+ tlb = tlb_gather_mmu(mm, 0);
-+ update_hiwater_rss(mm);
-+ end = unmap_vmas(&tlb, vma, address, end, &nr_accounted, details);
-+ if (tlb)
-+ tlb_finish_mmu(tlb, address, end);
-+ return end;
-+}
-+
-+/*
-+ * Do a quick page-table lookup for a single page.
-+ */
-+struct page *follow_page(struct vm_area_struct *vma, unsigned long address,
-+ unsigned int flags)
-+{
-+ pgd_t *pgd;
-+ pud_t *pud;
-+ pmd_t *pmd;
-+ pte_t *ptep, pte;
-+ spinlock_t *ptl;
-+ struct page *page;
-+ struct mm_struct *mm = vma->vm_mm;
-+
-+ page = follow_huge_addr(mm, address, flags & FOLL_WRITE);
-+ if (!IS_ERR(page)) {
-+ BUG_ON(flags & FOLL_GET);
-+ goto out;
-+ }
-+
-+ page = NULL;
-+ pgd = pgd_offset(mm, address);
-+ if (pgd_none(*pgd) || unlikely(pgd_bad(*pgd)))
-+ goto no_page_table;
-+
-+ pud = pud_offset(pgd, address);
-+ if (pud_none(*pud) || unlikely(pud_bad(*pud)))
-+ goto no_page_table;
-+
-+ pmd = pmd_offset(pud, address);
-+ if (pmd_none(*pmd) || unlikely(pmd_bad(*pmd)))
-+ goto no_page_table;
-+
-+ if (pmd_huge(*pmd)) {
-+ BUG_ON(flags & FOLL_GET);
-+ page = follow_huge_pmd(mm, address, pmd, flags & FOLL_WRITE);
-+ goto out;
-+ }
-+
-+ ptep = pte_offset_map_lock(mm, pmd, address, &ptl);
-+ if (!ptep)
-+ goto out;
-+
-+ pte = *ptep;
-+ if (!pte_present(pte))
-+ goto unlock;
-+ if ((flags & FOLL_WRITE) && !pte_write(pte))
-+ goto unlock;
-+ page = vm_normal_page(vma, address, pte);
-+ if (unlikely(!page))
-+ goto unlock;
-+
-+ if (flags & FOLL_GET)
-+ get_page(page);
-+ if (flags & FOLL_TOUCH) {
-+ if ((flags & FOLL_WRITE) &&
-+ !pte_dirty(pte) && !PageDirty(page))
-+ set_page_dirty(page);
-+ mark_page_accessed(page);
-+ }
-+unlock:
-+ pte_unmap_unlock(ptep, ptl);
-+out:
-+ return page;
-+
-+no_page_table:
-+ /*
-+ * When core dumping an enormous anonymous area that nobody
-+ * has touched so far, we don't want to allocate page tables.
-+ */
-+ if (flags & FOLL_ANON) {
-+ page = ZERO_PAGE(address);
-+ if (flags & FOLL_GET)
-+ get_page(page);
-+ BUG_ON(flags & FOLL_WRITE);
-+ }
-+ return page;
-+}
-+
-+int get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
-+ unsigned long start, int len, int write, int force,
-+ struct page **pages, struct vm_area_struct **vmas)
-+{
-+ int i;
-+ unsigned int vm_flags;
-+
-+ if (len <= 0)
-+ return 0;
-+ /*
-+ * Require read or write permissions.
-+ * If 'force' is set, we only require the "MAY" flags.
-+ */
-+ vm_flags = write ? (VM_WRITE | VM_MAYWRITE) : (VM_READ | VM_MAYREAD);
-+ vm_flags &= force ? (VM_MAYREAD | VM_MAYWRITE) : (VM_READ | VM_WRITE);
-+ i = 0;
-+
-+ do {
-+ struct vm_area_struct *vma;
-+ unsigned int foll_flags;
-+
-+ vma = find_extend_vma(mm, start);
-+ if (!vma && in_gate_area(tsk, start)) {
-+ unsigned long pg = start & PAGE_MASK;
-+ struct vm_area_struct *gate_vma = get_gate_vma(tsk);
-+ pgd_t *pgd;
-+ pud_t *pud;
-+ pmd_t *pmd;
-+ pte_t *pte;
-+ if (write) /* user gate pages are read-only */
-+ return i ? : -EFAULT;
-+ if (pg > TASK_SIZE)
-+ pgd = pgd_offset_k(pg);
-+ else
-+ pgd = pgd_offset_gate(mm, pg);
-+ BUG_ON(pgd_none(*pgd));
-+ pud = pud_offset(pgd, pg);
-+ BUG_ON(pud_none(*pud));
-+ pmd = pmd_offset(pud, pg);
-+ if (pmd_none(*pmd))
-+ return i ? : -EFAULT;
-+ pte = pte_offset_map(pmd, pg);
-+ if (pte_none(*pte)) {
-+ pte_unmap(pte);
-+ return i ? : -EFAULT;
-+ }
-+ if (pages) {
-+ struct page *page = vm_normal_page(gate_vma, start, *pte);
-+ pages[i] = page;
-+ if (page)
-+ get_page(page);
-+ }
-+ pte_unmap(pte);
-+ if (vmas)
-+ vmas[i] = gate_vma;
-+ i++;
-+ start += PAGE_SIZE;
-+ len--;
-+ continue;
-+ }
-+
-+ if (!vma || (vma->vm_flags & (VM_IO | VM_PFNMAP))
-+ || !(vm_flags & vma->vm_flags))
-+ return i ? : -EFAULT;
-+
-+ if (is_vm_hugetlb_page(vma)) {
-+ i = follow_hugetlb_page(mm, vma, pages, vmas,
-+ &start, &len, i);
-+ continue;
-+ }
-+
-+ foll_flags = FOLL_TOUCH;
-+ if (pages)
-+ foll_flags |= FOLL_GET;
-+ if (!write && !(vma->vm_flags & VM_LOCKED) &&
-+ (!vma->vm_ops || !vma->vm_ops->nopage))
-+ foll_flags |= FOLL_ANON;
-+
-+ do {
-+ struct page *page;
-+
-+ if (write)
-+ foll_flags |= FOLL_WRITE;
-+
-+ cond_resched();
-+ while (!(page = follow_page(vma, start, foll_flags))) {
-+ int ret;
-+ ret = __handle_mm_fault(mm, vma, start,
-+ foll_flags & FOLL_WRITE);
-+ /*
-+ * The VM_FAULT_WRITE bit tells us that do_wp_page has
-+ * broken COW when necessary, even if maybe_mkwrite
-+ * decided not to set pte_write. We can thus safely do
-+ * subsequent page lookups as if they were reads.
-+ */
-+ if (ret & VM_FAULT_WRITE)
-+ foll_flags &= ~FOLL_WRITE;
-+
-+ switch (ret & ~VM_FAULT_WRITE) {
-+ case VM_FAULT_MINOR:
-+ tsk->min_flt++;
-+ break;
-+ case VM_FAULT_MAJOR:
-+ tsk->maj_flt++;
-+ break;
-+ case VM_FAULT_SIGBUS:
-+ return i ? i : -EFAULT;
-+ case VM_FAULT_OOM:
-+ return i ? i : -ENOMEM;
-+ default:
-+ BUG();
-+ }
-+ cond_resched();
-+ }
-+ if (pages) {
-+ pages[i] = page;
-+
-+ flush_anon_page(vma, page, start);
-+ flush_dcache_page(page);
-+ }
-+ if (vmas)
-+ vmas[i] = vma;
-+ i++;
-+ start += PAGE_SIZE;
-+ len--;
-+ } while (len && start < vma->vm_end);
-+ } while (len);
-+ return i;
-+}
-+EXPORT_SYMBOL(get_user_pages);
-+
-+static int zeromap_pte_range(struct mm_struct *mm, pmd_t *pmd,
-+ unsigned long addr, unsigned long end, pgprot_t prot)
-+{
-+ pte_t *pte;
-+ spinlock_t *ptl;
-+ int err = 0;
-+
-+ pte = pte_alloc_map_lock(mm, pmd, addr, &ptl);
-+ if (!pte)
-+ return -EAGAIN;
-+ arch_enter_lazy_mmu_mode();
-+ do {
-+ struct page *page = ZERO_PAGE(addr);
-+ pte_t zero_pte = pte_wrprotect(mk_pte(page, prot));
-+
-+ if (unlikely(!pte_none(*pte))) {
-+ err = -EEXIST;
-+ pte++;
-+ break;
-+ }
-+ page_cache_get(page);
-+ page_add_file_rmap(page);
-+ inc_mm_counter(mm, file_rss);
-+ set_pte_at(mm, addr, pte, zero_pte);
-+ } while (pte++, addr += PAGE_SIZE, addr != end);
-+ arch_leave_lazy_mmu_mode();
-+ pte_unmap_unlock(pte - 1, ptl);
-+ return err;
-+}
-+
-+static inline int zeromap_pmd_range(struct mm_struct *mm, pud_t *pud,
-+ unsigned long addr, unsigned long end, pgprot_t prot)
-+{
-+ pmd_t *pmd;
-+ unsigned long next;
-+ int err;
-+
-+ pmd = pmd_alloc(mm, pud, addr);
-+ if (!pmd)
-+ return -EAGAIN;
-+ do {
-+ next = pmd_addr_end(addr, end);
-+ err = zeromap_pte_range(mm, pmd, addr, next, prot);
-+ if (err)
-+ break;
-+ } while (pmd++, addr = next, addr != end);
-+ return err;
-+}
-+
-+static inline int zeromap_pud_range(struct mm_struct *mm, pgd_t *pgd,
-+ unsigned long addr, unsigned long end, pgprot_t prot)
-+{
-+ pud_t *pud;
-+ unsigned long next;
-+ int err;
-+
-+ pud = pud_alloc(mm, pgd, addr);
-+ if (!pud)
-+ return -EAGAIN;
-+ do {
-+ next = pud_addr_end(addr, end);
-+ err = zeromap_pmd_range(mm, pud, addr, next, prot);
-+ if (err)
-+ break;
-+ } while (pud++, addr = next, addr != end);
-+ return err;
-+}
-+
-+int zeromap_page_range(struct vm_area_struct *vma,
-+ unsigned long addr, unsigned long size, pgprot_t prot)
-+{
-+ pgd_t *pgd;
-+ unsigned long next;
-+ unsigned long end = addr + size;
-+ struct mm_struct *mm = vma->vm_mm;
-+ int err;
-+
-+ BUG_ON(addr >= end);
-+ pgd = pgd_offset(mm, addr);
-+ flush_cache_range(vma, addr, end);
-+ do {
-+ next = pgd_addr_end(addr, end);
-+ err = zeromap_pud_range(mm, pgd, addr, next, prot);
-+ if (err)
-+ break;
-+ } while (pgd++, addr = next, addr != end);
-+ return err;
-+}
-+
-+pte_t * fastcall get_locked_pte(struct mm_struct *mm, unsigned long addr, spinlock_t **ptl)
-+{
-+ pgd_t * pgd = pgd_offset(mm, addr);
-+ pud_t * pud = pud_alloc(mm, pgd, addr);
-+ if (pud) {
-+ pmd_t * pmd = pmd_alloc(mm, pud, addr);
-+ if (pmd)
-+ return pte_alloc_map_lock(mm, pmd, addr, ptl);
-+ }
-+ return NULL;
-+}
-+
-+/*
-+ * This is the old fallback for page remapping.
-+ *
-+ * For historical reasons, it only allows reserved pages. Only
-+ * old drivers should use this, and they needed to mark their
-+ * pages reserved for the old functions anyway.
-+ */
-+static int insert_page(struct mm_struct *mm, unsigned long addr, struct page *page, pgprot_t prot)
-+{
-+ int retval;
-+ pte_t *pte;
-+ spinlock_t *ptl;
-+
-+ retval = -EINVAL;
-+ if (PageAnon(page))
-+ goto out;
-+ retval = -ENOMEM;
-+ flush_dcache_page(page);
-+ pte = get_locked_pte(mm, addr, &ptl);
-+ if (!pte)
-+ goto out;
-+ retval = -EBUSY;
-+ if (!pte_none(*pte))
-+ goto out_unlock;
-+
-+ /* Ok, finally just insert the thing.. */
-+ get_page(page);
-+ inc_mm_counter(mm, file_rss);
-+ page_add_file_rmap(page);
-+ set_pte_at(mm, addr, pte, mk_pte(page, prot));
-+
-+ retval = 0;
-+out_unlock:
-+ pte_unmap_unlock(pte, ptl);
-+out:
-+ return retval;
-+}
-+
-+/**
-+ * vm_insert_page - insert single page into user vma
-+ * @vma: user vma to map to
-+ * @addr: target user address of this page
-+ * @page: source kernel page
-+ *
-+ * This allows drivers to insert individual pages they've allocated
-+ * into a user vma.
-+ *
-+ * The page has to be a nice clean _individual_ kernel allocation.
-+ * If you allocate a compound page, you need to have marked it as
-+ * such (__GFP_COMP), or manually just split the page up yourself
-+ * (see split_page()).
-+ *
-+ * NOTE! Traditionally this was done with "remap_pfn_range()" which
-+ * took an arbitrary page protection parameter. This doesn't allow
-+ * that. Your vma protection will have to be set up correctly, which
-+ * means that if you want a shared writable mapping, you'd better
-+ * ask for a shared writable mapping!
-+ *
-+ * The page does not need to be reserved.
-+ */
-+int vm_insert_page(struct vm_area_struct *vma, unsigned long addr, struct page *page)
-+{
-+ if (addr < vma->vm_start || addr >= vma->vm_end)
-+ return -EFAULT;
-+ if (!page_count(page))
-+ return -EINVAL;
-+ vma->vm_flags |= VM_INSERTPAGE;
-+ return insert_page(vma->vm_mm, addr, page, vma->vm_page_prot);
-+}
-+EXPORT_SYMBOL(vm_insert_page);
-+
-+/**
-+ * vm_insert_pfn - insert single pfn into user vma
-+ * @vma: user vma to map to
-+ * @addr: target user address of this page
-+ * @pfn: source kernel pfn
-+ *
-+ * Similar to vm_inert_page, this allows drivers to insert individual pages
-+ * they've allocated into a user vma. Same comments apply.
-+ *
-+ * This function should only be called from a vm_ops->fault handler, and
-+ * in that case the handler should return NULL.
-+ */
-+int vm_insert_pfn(struct vm_area_struct *vma, unsigned long addr,
-+ unsigned long pfn)
-+{
-+ struct mm_struct *mm = vma->vm_mm;
-+ int retval;
-+ pte_t *pte, entry;
-+ spinlock_t *ptl;
-+
-+ BUG_ON(!(vma->vm_flags & VM_PFNMAP));
-+ BUG_ON(is_cow_mapping(vma->vm_flags));
-+
-+ retval = -ENOMEM;
-+ pte = get_locked_pte(mm, addr, &ptl);
-+ if (!pte)
-+ goto out;
-+ retval = -EBUSY;
-+ if (!pte_none(*pte))
-+ goto out_unlock;
-+
-+ /* Ok, finally just insert the thing.. */
-+ entry = pfn_pte(pfn, vma->vm_page_prot);
-+ set_pte_at(mm, addr, pte, entry);
-+ update_mmu_cache(vma, addr, entry);
-+
-+ retval = 0;
-+out_unlock:
-+ pte_unmap_unlock(pte, ptl);
-+
-+out:
-+ return retval;
-+}
-+EXPORT_SYMBOL(vm_insert_pfn);
-+
-+/*
-+ * maps a range of physical memory into the requested pages. the old
-+ * mappings are removed. any references to nonexistent pages results
-+ * in null mappings (currently treated as "copy-on-access")
-+ */
-+static int remap_pte_range(struct mm_struct *mm, pmd_t *pmd,
-+ unsigned long addr, unsigned long end,
-+ unsigned long pfn, pgprot_t prot)
-+{
-+ pte_t *pte;
-+ spinlock_t *ptl;
-+
-+ pte = pte_alloc_map_lock(mm, pmd, addr, &ptl);
-+ if (!pte)
-+ return -ENOMEM;
-+ arch_enter_lazy_mmu_mode();
-+ do {
-+ BUG_ON(!pte_none(*pte));
-+ set_pte_at(mm, addr, pte, pfn_pte(pfn, prot));
-+ pfn++;
-+ } while (pte++, addr += PAGE_SIZE, addr != end);
-+ arch_leave_lazy_mmu_mode();
-+ pte_unmap_unlock(pte - 1, ptl);
-+ return 0;
-+}
-+
-+static inline int remap_pmd_range(struct mm_struct *mm, pud_t *pud,
-+ unsigned long addr, unsigned long end,
-+ unsigned long pfn, pgprot_t prot)
-+{
-+ pmd_t *pmd;
-+ unsigned long next;
-+
-+ pfn -= addr >> PAGE_SHIFT;
-+ pmd = pmd_alloc(mm, pud, addr);
-+ if (!pmd)
-+ return -ENOMEM;
-+ do {
-+ next = pmd_addr_end(addr, end);
-+ if (remap_pte_range(mm, pmd, addr, next,
-+ pfn + (addr >> PAGE_SHIFT), prot))
-+ return -ENOMEM;
-+ } while (pmd++, addr = next, addr != end);
-+ return 0;
-+}
-+
-+static inline int remap_pud_range(struct mm_struct *mm, pgd_t *pgd,
-+ unsigned long addr, unsigned long end,
-+ unsigned long pfn, pgprot_t prot)
-+{
-+ pud_t *pud;
-+ unsigned long next;
-+
-+ pfn -= addr >> PAGE_SHIFT;
-+ pud = pud_alloc(mm, pgd, addr);
-+ if (!pud)
-+ return -ENOMEM;
-+ do {
-+ next = pud_addr_end(addr, end);
-+ if (remap_pmd_range(mm, pud, addr, next,
-+ pfn + (addr >> PAGE_SHIFT), prot))
-+ return -ENOMEM;
-+ } while (pud++, addr = next, addr != end);
-+ return 0;
-+}
-+
-+/**
-+ * remap_pfn_range - remap kernel memory to userspace
-+ * @vma: user vma to map to
-+ * @addr: target user address to start at
-+ * @pfn: physical address of kernel memory
-+ * @size: size of map area
-+ * @prot: page protection flags for this mapping
-+ *
-+ * Note: this is only safe if the mm semaphore is held when called.
-+ */
-+int remap_pfn_range(struct vm_area_struct *vma, unsigned long addr,
-+ unsigned long pfn, unsigned long size, pgprot_t prot)
-+{
-+ pgd_t *pgd;
-+ unsigned long next;
-+ unsigned long end = addr + PAGE_ALIGN(size);
-+ struct mm_struct *mm = vma->vm_mm;
-+ int err;
-+
-+ /*
-+ * Physically remapped pages are special. Tell the
-+ * rest of the world about it:
-+ * VM_IO tells people not to look at these pages
-+ * (accesses can have side effects).
-+ * VM_RESERVED is specified all over the place, because
-+ * in 2.4 it kept swapout's vma scan off this vma; but
-+ * in 2.6 the LRU scan won't even find its pages, so this
-+ * flag means no more than count its pages in reserved_vm,
-+ * and omit it from core dump, even when VM_IO turned off.
-+ * VM_PFNMAP tells the core MM that the base pages are just
-+ * raw PFN mappings, and do not have a "struct page" associated
-+ * with them.
-+ *
-+ * There's a horrible special case to handle copy-on-write
-+ * behaviour that some programs depend on. We mark the "original"
-+ * un-COW'ed pages by matching them up with "vma->vm_pgoff".
-+ */
-+ if (is_cow_mapping(vma->vm_flags)) {
-+ if (addr != vma->vm_start || end != vma->vm_end)
-+ return -EINVAL;
-+ vma->vm_pgoff = pfn;
-+ }
-+
-+ vma->vm_flags |= VM_IO | VM_RESERVED | VM_PFNMAP;
-+
-+ BUG_ON(addr >= end);
-+ pfn -= addr >> PAGE_SHIFT;
-+ pgd = pgd_offset(mm, addr);
-+ flush_cache_range(vma, addr, end);
-+ do {
-+ next = pgd_addr_end(addr, end);
-+ err = remap_pud_range(mm, pgd, addr, next,
-+ pfn + (addr >> PAGE_SHIFT), prot);
-+ if (err)
-+ break;
-+ } while (pgd++, addr = next, addr != end);
-+ return err;
-+}
-+EXPORT_SYMBOL(remap_pfn_range);
-+
-+static int apply_to_pte_range(struct mm_struct *mm, pmd_t *pmd,
-+ unsigned long addr, unsigned long end,
-+ pte_fn_t fn, void *data)
-+{
-+ pte_t *pte;
-+ int err;
-+ struct page *pmd_page;
-+ spinlock_t *uninitialized_var(ptl);
-+
-+ pte = (mm == &init_mm) ?
-+ pte_alloc_kernel(pmd, addr) :
-+ pte_alloc_map_lock(mm, pmd, addr, &ptl);
-+ if (!pte)
-+ return -ENOMEM;
-+
-+ BUG_ON(pmd_huge(*pmd));
-+
-+ pmd_page = pmd_page(*pmd);
-+
-+ do {
-+ err = fn(pte, pmd_page, addr, data);
-+ if (err)
-+ break;
-+ } while (pte++, addr += PAGE_SIZE, addr != end);
-+
-+ if (mm != &init_mm)
-+ pte_unmap_unlock(pte-1, ptl);
-+ return err;
-+}
-+
-+static int apply_to_pmd_range(struct mm_struct *mm, pud_t *pud,
-+ unsigned long addr, unsigned long end,
-+ pte_fn_t fn, void *data)
-+{
-+ pmd_t *pmd;
-+ unsigned long next;
-+ int err;
-+
-+ pmd = pmd_alloc(mm, pud, addr);
-+ if (!pmd)
-+ return -ENOMEM;
-+ do {
-+ next = pmd_addr_end(addr, end);
-+ err = apply_to_pte_range(mm, pmd, addr, next, fn, data);
-+ if (err)
-+ break;
-+ } while (pmd++, addr = next, addr != end);
-+ return err;
-+}
-+
-+static int apply_to_pud_range(struct mm_struct *mm, pgd_t *pgd,
-+ unsigned long addr, unsigned long end,
-+ pte_fn_t fn, void *data)
-+{
-+ pud_t *pud;
-+ unsigned long next;
-+ int err;
-+
-+ pud = pud_alloc(mm, pgd, addr);
-+ if (!pud)
-+ return -ENOMEM;
-+ do {
-+ next = pud_addr_end(addr, end);
-+ err = apply_to_pmd_range(mm, pud, addr, next, fn, data);
-+ if (err)
-+ break;
-+ } while (pud++, addr = next, addr != end);
-+ return err;
-+}
-+
-+/*
-+ * Scan a region of virtual memory, filling in page tables as necessary
-+ * and calling a provided function on each leaf page table.
-+ */
-+int apply_to_page_range(struct mm_struct *mm, unsigned long addr,
-+ unsigned long size, pte_fn_t fn, void *data)
-+{
-+ pgd_t *pgd;
-+ unsigned long next;
-+ unsigned long end = addr + size;
-+ int err;
-+
-+ BUG_ON(addr >= end);
-+ pgd = pgd_offset(mm, addr);
-+ do {
-+ next = pgd_addr_end(addr, end);
-+ err = apply_to_pud_range(mm, pgd, addr, next, fn, data);
-+ if (err)
-+ break;
-+ } while (pgd++, addr = next, addr != end);
-+ return err;
-+}
-+EXPORT_SYMBOL_GPL(apply_to_page_range);
-+
-+/*
-+ * handle_pte_fault chooses page fault handler according to an entry
-+ * which was read non-atomically. Before making any commitment, on
-+ * those architectures or configurations (e.g. i386 with PAE) which
-+ * might give a mix of unmatched parts, do_swap_page and do_file_page
-+ * must check under lock before unmapping the pte and proceeding
-+ * (but do_wp_page is only called after already making such a check;
-+ * and do_anonymous_page and do_no_page can safely check later on).
-+ */
-+static inline int pte_unmap_same(struct mm_struct *mm, pmd_t *pmd,
-+ pte_t *page_table, pte_t orig_pte)
-+{
-+ int same = 1;
-+#if defined(CONFIG_SMP) || defined(CONFIG_PREEMPT)
-+ if (sizeof(pte_t) > sizeof(unsigned long)) {
-+ spinlock_t *ptl = pte_lockptr(mm, pmd);
-+ spin_lock(ptl);
-+ same = pte_same(*page_table, orig_pte);
-+ spin_unlock(ptl);
-+ }
-+#endif
-+ pte_unmap(page_table);
-+ return same;
-+}
-+
-+/*
-+ * Do pte_mkwrite, but only if the vma says VM_WRITE. We do this when
-+ * servicing faults for write access. In the normal case, do always want
-+ * pte_mkwrite. But get_user_pages can cause write faults for mappings
-+ * that do not have writing enabled, when used by access_process_vm.
-+ */
-+static inline pte_t maybe_mkwrite(pte_t pte, struct vm_area_struct *vma)
-+{
-+ if (likely(vma->vm_flags & VM_WRITE))
-+ pte = pte_mkwrite(pte);
-+ return pte;
-+}
-+
-+static inline void cow_user_page(struct page *dst, struct page *src, unsigned long va, struct vm_area_struct *vma)
-+{
-+ /*
-+ * If the source page was a PFN mapping, we don't have
-+ * a "struct page" for it. We do a best-effort copy by
-+ * just copying from the original user address. If that
-+ * fails, we just zero-fill it. Live with it.
-+ */
-+ if (unlikely(!src)) {
-+ void *kaddr = kmap_atomic(dst, KM_USER0);
-+ void __user *uaddr = (void __user *)(va & PAGE_MASK);
-+
-+ /*
-+ * This really shouldn't fail, because the page is there
-+ * in the page tables. But it might just be unreadable,
-+ * in which case we just give up and fill the result with
-+ * zeroes.
-+ */
-+ if (__copy_from_user_inatomic(kaddr, uaddr, PAGE_SIZE))
-+ memset(kaddr, 0, PAGE_SIZE);
-+ kunmap_atomic(kaddr, KM_USER0);
-+ flush_dcache_page(dst);
-+ return;
-+
-+ }
-+ copy_user_highpage(dst, src, va, vma);
-+}
-+
-+/*
-+ * This routine handles present pages, when users try to write
-+ * to a shared page. It is done by copying the page to a new address
-+ * and decrementing the shared-page counter for the old page.
-+ *
-+ * Note that this routine assumes that the protection checks have been
-+ * done by the caller (the low-level page fault routine in most cases).
-+ * Thus we can safely just mark it writable once we've done any necessary
-+ * COW.
-+ *
-+ * We also mark the page dirty at this point even though the page will
-+ * change only once the write actually happens. This avoids a few races,
-+ * and potentially makes it more efficient.
-+ *
-+ * We enter with non-exclusive mmap_sem (to exclude vma changes,
-+ * but allow concurrent faults), with pte both mapped and locked.
-+ * We return with mmap_sem still held, but pte unmapped and unlocked.
-+ */
-+static int do_wp_page(struct mm_struct *mm, struct vm_area_struct *vma,
-+ unsigned long address, pte_t *page_table, pmd_t *pmd,
-+ spinlock_t *ptl, pte_t orig_pte)
-+{
-+ struct page *old_page, *new_page;
-+ pte_t entry;
-+ int reuse = 0, ret = VM_FAULT_MINOR;
-+ struct page *dirty_page = NULL;
-+
-+ old_page = vm_normal_page(vma, address, orig_pte);
-+ if (!old_page)
-+ goto gotten;
-+
-+ /*
-+ * Take out anonymous pages first, anonymous shared vmas are
-+ * not dirty accountable.
-+ */
-+ if (PageAnon(old_page)) {
-+ if (!TestSetPageLocked(old_page)) {
-+ reuse = can_share_swap_page(old_page);
-+ unlock_page(old_page);
-+ }
-+ } else if (unlikely((vma->vm_flags & (VM_WRITE|VM_SHARED)) ==
-+ (VM_WRITE|VM_SHARED))) {
-+ /*
-+ * Only catch write-faults on shared writable pages,
-+ * read-only shared pages can get COWed by
-+ * get_user_pages(.write=1, .force=1).
-+ */
-+ if (vma->vm_ops && vma->vm_ops->page_mkwrite) {
-+ /*
-+ * Notify the address space that the page is about to
-+ * become writable so that it can prohibit this or wait
-+ * for the page to get into an appropriate state.
-+ *
-+ * We do this without the lock held, so that it can
-+ * sleep if it needs to.
-+ */
-+ page_cache_get(old_page);
-+ pte_unmap_unlock(page_table, ptl);
-+
-+ if (vma->vm_ops->page_mkwrite(vma, old_page) < 0)
-+ goto unwritable_page;
-+
-+ /*
-+ * Since we dropped the lock we need to revalidate
-+ * the PTE as someone else may have changed it. If
-+ * they did, we just return, as we can count on the
-+ * MMU to tell us if they didn't also make it writable.
-+ */
-+ page_table = pte_offset_map_lock(mm, pmd, address,
-+ &ptl);
-+ page_cache_release(old_page);
-+ if (!pte_same(*page_table, orig_pte))
-+ goto unlock;
-+ }
-+ dirty_page = old_page;
-+ get_page(dirty_page);
-+ reuse = 1;
-+ }
-+
-+ if (reuse) {
-+ flush_cache_page(vma, address, pte_pfn(orig_pte));
-+ entry = pte_mkyoung(orig_pte);
-+ entry = maybe_mkwrite(pte_mkdirty(entry), vma);
-+ if (ptep_set_access_flags(vma, address, page_table, entry,1)) {
-+ update_mmu_cache(vma, address, entry);
-+ lazy_mmu_prot_update(entry);
-+ }
-+ ret |= VM_FAULT_WRITE;
-+ goto unlock;
-+ }
-+
-+ /*
-+ * Ok, we need to copy. Oh, well..
-+ */
-+ page_cache_get(old_page);
-+gotten:
-+ pte_unmap_unlock(page_table, ptl);
-+
-+ if (unlikely(anon_vma_prepare(vma)))
-+ goto oom;
-+ if (old_page == ZERO_PAGE(address)) {
-+ new_page = alloc_zeroed_user_highpage(vma, address);
-+ if (!new_page)
-+ goto oom;
-+ } else {
-+ new_page = alloc_page_vma(GFP_HIGHUSER, vma, address);
-+ if (!new_page)
-+ goto oom;
-+ cow_user_page(new_page, old_page, address, vma);
-+ }
-+
-+ /*
-+ * Re-check the pte - we dropped the lock
-+ */
-+ page_table = pte_offset_map_lock(mm, pmd, address, &ptl);
-+ if (likely(pte_same(*page_table, orig_pte))) {
-+ if (old_page) {
-+ page_remove_rmap(old_page, vma);
-+ if (!PageAnon(old_page)) {
-+ dec_mm_counter(mm, file_rss);
-+ inc_mm_counter(mm, anon_rss);
-+ }
-+ } else
-+ inc_mm_counter(mm, anon_rss);
-+ flush_cache_page(vma, address, pte_pfn(orig_pte));
-+ entry = mk_pte(new_page, vma->vm_page_prot);
-+ entry = maybe_mkwrite(pte_mkdirty(entry), vma);
-+ lazy_mmu_prot_update(entry);
-+ /*
-+ * Clear the pte entry and flush it first, before updating the
-+ * pte with the new entry. This will avoid a race condition
-+ * seen in the presence of one thread doing SMC and another
-+ * thread doing COW.
-+ */
-+ ptep_clear_flush(vma, address, page_table);
-+ set_pte_at(mm, address, page_table, entry);
-+ update_mmu_cache(vma, address, entry);
-+ lru_cache_add_active(new_page);
-+ page_add_new_anon_rmap(new_page, vma, address);
-+
-+ /* Free the old page.. */
-+ new_page = old_page;
-+ ret |= VM_FAULT_WRITE;
-+ }
-+ if (new_page)
-+ page_cache_release(new_page);
-+ if (old_page)
-+ page_cache_release(old_page);
-+unlock:
-+ pte_unmap_unlock(page_table, ptl);
-+ if (dirty_page) {
-+ set_page_dirty_balance(dirty_page);
-+ put_page(dirty_page);
-+ }
-+ return ret;
-+oom:
-+ if (old_page)
-+ page_cache_release(old_page);
-+ return VM_FAULT_OOM;
-+
-+unwritable_page:
-+ page_cache_release(old_page);
-+ return VM_FAULT_SIGBUS;
-+}
-+
-+/*
-+ * Helper functions for unmap_mapping_range().
-+ *
-+ * __ Notes on dropping i_mmap_lock to reduce latency while unmapping __
-+ *
-+ * We have to restart searching the prio_tree whenever we drop the lock,
-+ * since the iterator is only valid while the lock is held, and anyway
-+ * a later vma might be split and reinserted earlier while lock dropped.
-+ *
-+ * The list of nonlinear vmas could be handled more efficiently, using
-+ * a placeholder, but handle it in the same way until a need is shown.
-+ * It is important to search the prio_tree before nonlinear list: a vma
-+ * may become nonlinear and be shifted from prio_tree to nonlinear list
-+ * while the lock is dropped; but never shifted from list to prio_tree.
-+ *
-+ * In order to make forward progress despite restarting the search,
-+ * vm_truncate_count is used to mark a vma as now dealt with, so we can
-+ * quickly skip it next time around. Since the prio_tree search only
-+ * shows us those vmas affected by unmapping the range in question, we
-+ * can't efficiently keep all vmas in step with mapping->truncate_count:
-+ * so instead reset them all whenever it wraps back to 0 (then go to 1).
-+ * mapping->truncate_count and vma->vm_truncate_count are protected by
-+ * i_mmap_lock.
-+ *
-+ * In order to make forward progress despite repeatedly restarting some
-+ * large vma, note the restart_addr from unmap_vmas when it breaks out:
-+ * and restart from that address when we reach that vma again. It might
-+ * have been split or merged, shrunk or extended, but never shifted: so
-+ * restart_addr remains valid so long as it remains in the vma's range.
-+ * unmap_mapping_range forces truncate_count to leap over page-aligned
-+ * values so we can save vma's restart_addr in its truncate_count field.
-+ */
-+#define is_restart_addr(truncate_count) (!((truncate_count) & ~PAGE_MASK))
-+
-+static void reset_vma_truncate_counts(struct address_space *mapping)
-+{
-+ struct vm_area_struct *vma;
-+ struct prio_tree_iter iter;
-+
-+ vma_prio_tree_foreach(vma, &iter, &mapping->i_mmap, 0, ULONG_MAX)
-+ vma->vm_truncate_count = 0;
-+ list_for_each_entry(vma, &mapping->i_mmap_nonlinear, shared.vm_set.list)
-+ vma->vm_truncate_count = 0;
-+}
-+
-+static int unmap_mapping_range_vma(struct vm_area_struct *vma,
-+ unsigned long start_addr, unsigned long end_addr,
-+ struct zap_details *details)
-+{
-+ unsigned long restart_addr;
-+ int need_break;
-+
-+again:
-+ restart_addr = vma->vm_truncate_count;
-+ if (is_restart_addr(restart_addr) && start_addr < restart_addr) {
-+ start_addr = restart_addr;
-+ if (start_addr >= end_addr) {
-+ /* Top of vma has been split off since last time */
-+ vma->vm_truncate_count = details->truncate_count;
-+ return 0;
-+ }
-+ }
-+
-+ restart_addr = zap_page_range(vma, start_addr,
-+ end_addr - start_addr, details);
-+ need_break = need_resched() ||
-+ need_lockbreak(details->i_mmap_lock);
-+
-+ if (restart_addr >= end_addr) {
-+ /* We have now completed this vma: mark it so */
-+ vma->vm_truncate_count = details->truncate_count;
-+ if (!need_break)
-+ return 0;
-+ } else {
-+ /* Note restart_addr in vma's truncate_count field */
-+ vma->vm_truncate_count = restart_addr;
-+ if (!need_break)
-+ goto again;
-+ }
-+
-+ spin_unlock(details->i_mmap_lock);
-+ cond_resched();
-+ spin_lock(details->i_mmap_lock);
-+ return -EINTR;
-+}
-+
-+static inline void unmap_mapping_range_tree(struct prio_tree_root *root,
-+ struct zap_details *details)
-+{
-+ struct vm_area_struct *vma;
-+ struct prio_tree_iter iter;
-+ pgoff_t vba, vea, zba, zea;
-+
-+restart:
-+ vma_prio_tree_foreach(vma, &iter, root,
-+ details->first_index, details->last_index) {
-+ /* Skip quickly over those we have already dealt with */
-+ if (vma->vm_truncate_count == details->truncate_count)
-+ continue;
-+
-+ vba = vma->vm_pgoff;
-+ vea = vba + ((vma->vm_end - vma->vm_start) >> PAGE_SHIFT) - 1;
-+ /* Assume for now that PAGE_CACHE_SHIFT == PAGE_SHIFT */
-+ zba = details->first_index;
-+ if (zba < vba)
-+ zba = vba;
-+ zea = details->last_index;
-+ if (zea > vea)
-+ zea = vea;
-+
-+ if (unmap_mapping_range_vma(vma,
-+ ((zba - vba) << PAGE_SHIFT) + vma->vm_start,
-+ ((zea - vba + 1) << PAGE_SHIFT) + vma->vm_start,
-+ details) < 0)
-+ goto restart;
-+ }
-+}
-+
-+static inline void unmap_mapping_range_list(struct list_head *head,
-+ struct zap_details *details)
-+{
-+ struct vm_area_struct *vma;
-+
-+ /*
-+ * In nonlinear VMAs there is no correspondence between virtual address
-+ * offset and file offset. So we must perform an exhaustive search
-+ * across *all* the pages in each nonlinear VMA, not just the pages
-+ * whose virtual address lies outside the file truncation point.
-+ */
-+restart:
-+ list_for_each_entry(vma, head, shared.vm_set.list) {
-+ /* Skip quickly over those we have already dealt with */
-+ if (vma->vm_truncate_count == details->truncate_count)
-+ continue;
-+ details->nonlinear_vma = vma;
-+ if (unmap_mapping_range_vma(vma, vma->vm_start,
-+ vma->vm_end, details) < 0)
-+ goto restart;
-+ }
-+}
-+
-+/**
-+ * unmap_mapping_range - unmap the portion of all mmaps in the specified address_space corresponding to the specified page range in the underlying file.
-+ * @mapping: the address space containing mmaps to be unmapped.
-+ * @holebegin: byte in first page to unmap, relative to the start of
-+ * the underlying file. This will be rounded down to a PAGE_SIZE
-+ * boundary. Note that this is different from vmtruncate(), which
-+ * must keep the partial page. In contrast, we must get rid of
-+ * partial pages.
-+ * @holelen: size of prospective hole in bytes. This will be rounded
-+ * up to a PAGE_SIZE boundary. A holelen of zero truncates to the
-+ * end of the file.
-+ * @even_cows: 1 when truncating a file, unmap even private COWed pages;
-+ * but 0 when invalidating pagecache, don't throw away private data.
-+ */
-+void unmap_mapping_range(struct address_space *mapping,
-+ loff_t const holebegin, loff_t const holelen, int even_cows)
-+{
-+ struct zap_details details;
-+ pgoff_t hba = holebegin >> PAGE_SHIFT;
-+ pgoff_t hlen = (holelen + PAGE_SIZE - 1) >> PAGE_SHIFT;
-+
-+ /* Check for overflow. */
-+ if (sizeof(holelen) > sizeof(hlen)) {
-+ long long holeend =
-+ (holebegin + holelen + PAGE_SIZE - 1) >> PAGE_SHIFT;
-+ if (holeend & ~(long long)ULONG_MAX)
-+ hlen = ULONG_MAX - hba + 1;
-+ }
-+
-+ details.check_mapping = even_cows? NULL: mapping;
-+ details.nonlinear_vma = NULL;
-+ details.first_index = hba;
-+ details.last_index = hba + hlen - 1;
-+ if (details.last_index < details.first_index)
-+ details.last_index = ULONG_MAX;
-+ details.i_mmap_lock = &mapping->i_mmap_lock;
-+
-+ spin_lock(&mapping->i_mmap_lock);
-+
-+ /* serialize i_size write against truncate_count write */
-+ smp_wmb();
-+ /* Protect against page faults, and endless unmapping loops */
-+ mapping->truncate_count++;
-+ /*
-+ * For archs where spin_lock has inclusive semantics like ia64
-+ * this smp_mb() will prevent to read pagetable contents
-+ * before the truncate_count increment is visible to
-+ * other cpus.
-+ */
-+ smp_mb();
-+ if (unlikely(is_restart_addr(mapping->truncate_count))) {
-+ if (mapping->truncate_count == 0)
-+ reset_vma_truncate_counts(mapping);
-+ mapping->truncate_count++;
-+ }
-+ details.truncate_count = mapping->truncate_count;
-+
-+ if (unlikely(!prio_tree_empty(&mapping->i_mmap)))
-+ unmap_mapping_range_tree(&mapping->i_mmap, &details);
-+ if (unlikely(!list_empty(&mapping->i_mmap_nonlinear)))
-+ unmap_mapping_range_list(&mapping->i_mmap_nonlinear, &details);
-+ spin_unlock(&mapping->i_mmap_lock);
-+}
-+EXPORT_SYMBOL(unmap_mapping_range);
-+
-+/**
-+ * vmtruncate - unmap mappings "freed" by truncate() syscall
-+ * @inode: inode of the file used
-+ * @offset: file offset to start truncating
-+ *
-+ * NOTE! We have to be ready to update the memory sharing
-+ * between the file and the memory map for a potential last
-+ * incomplete page. Ugly, but necessary.
-+ */
-+int vmtruncate(struct inode * inode, loff_t offset)
-+{
-+ struct address_space *mapping = inode->i_mapping;
-+ unsigned long limit;
-+
-+ if (inode->i_size < offset)
-+ goto do_expand;
-+ /*
-+ * truncation of in-use swapfiles is disallowed - it would cause
-+ * subsequent swapout to scribble on the now-freed blocks.
-+ */
-+ if (IS_SWAPFILE(inode))
-+ goto out_busy;
-+ i_size_write(inode, offset);
-+ unmap_mapping_range(mapping, offset + PAGE_SIZE - 1, 0, 1);
-+ truncate_inode_pages(mapping, offset);
-+ goto out_truncate;
-+
-+do_expand:
-+ limit = current->signal->rlim[RLIMIT_FSIZE].rlim_cur;
-+ if (limit != RLIM_INFINITY && offset > limit)
-+ goto out_sig;
-+ if (offset > inode->i_sb->s_maxbytes)
-+ goto out_big;
-+ i_size_write(inode, offset);
-+
-+out_truncate:
-+ if (inode->i_op && inode->i_op->truncate)
-+ inode->i_op->truncate(inode);
-+ return 0;
-+out_sig:
-+ send_sig(SIGXFSZ, current, 0);
-+out_big:
-+ return -EFBIG;
-+out_busy:
-+ return -ETXTBSY;
-+}
-+EXPORT_SYMBOL(vmtruncate);
-+
-+int vmtruncate_range(struct inode *inode, loff_t offset, loff_t end)
-+{
-+ struct address_space *mapping = inode->i_mapping;
-+
-+ /*
-+ * If the underlying filesystem is not going to provide
-+ * a way to truncate a range of blocks (punch a hole) -
-+ * we should return failure right now.
-+ */
-+ if (!inode->i_op || !inode->i_op->truncate_range)
-+ return -ENOSYS;
-+
-+ mutex_lock(&inode->i_mutex);
-+ down_write(&inode->i_alloc_sem);
-+ unmap_mapping_range(mapping, offset, (end - offset), 1);
-+ truncate_inode_pages_range(mapping, offset, end);
-+ inode->i_op->truncate_range(inode, offset, end);
-+ up_write(&inode->i_alloc_sem);
-+ mutex_unlock(&inode->i_mutex);
-+
-+ return 0;
-+}
-+
-+/**
-+ * swapin_readahead - swap in pages in hope we need them soon
-+ * @entry: swap entry of this memory
-+ * @addr: address to start
-+ * @vma: user vma this addresses belong to
-+ *
-+ * Primitive swap readahead code. We simply read an aligned block of
-+ * (1 << page_cluster) entries in the swap area. This method is chosen
-+ * because it doesn't cost us any seek time. We also make sure to queue
-+ * the 'original' request together with the readahead ones...
-+ *
-+ * This has been extended to use the NUMA policies from the mm triggering
-+ * the readahead.
-+ *
-+ * Caller must hold down_read on the vma->vm_mm if vma is not NULL.
-+ */
-+void swapin_readahead(swp_entry_t entry, unsigned long addr,struct vm_area_struct *vma)
-+{
-+#ifdef CONFIG_NUMA
-+ struct vm_area_struct *next_vma = vma ? vma->vm_next : NULL;
-+#endif
-+ int i, num;
-+ struct page *new_page;
-+ unsigned long offset;
-+
-+ /*
-+ * Get the number of handles we should do readahead io to.
-+ */
-+ num = valid_swaphandles(entry, &offset);
-+ for (i = 0; i < num; offset++, i++) {
-+ /* Ok, do the async read-ahead now */
-+ new_page = read_swap_cache_async(swp_entry(swp_type(entry),
-+ offset), vma, addr);
-+ if (!new_page)
-+ break;
-+ page_cache_release(new_page);
-+#ifdef CONFIG_NUMA
-+ /*
-+ * Find the next applicable VMA for the NUMA policy.
-+ */
-+ addr += PAGE_SIZE;
-+ if (addr == 0)
-+ vma = NULL;
-+ if (vma) {
-+ if (addr >= vma->vm_end) {
-+ vma = next_vma;
-+ next_vma = vma ? vma->vm_next : NULL;
-+ }
-+ if (vma && addr < vma->vm_start)
-+ vma = NULL;
-+ } else {
-+ if (next_vma && addr >= next_vma->vm_start) {
-+ vma = next_vma;
-+ next_vma = vma->vm_next;
-+ }
-+ }
-+#endif
-+ }
-+ lru_add_drain(); /* Push any new pages onto the LRU now */
-+}
-+
-+/*
-+ * We enter with non-exclusive mmap_sem (to exclude vma changes,
-+ * but allow concurrent faults), and pte mapped but not yet locked.
-+ * We return with mmap_sem still held, but pte unmapped and unlocked.
-+ */
-+static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma,
-+ unsigned long address, pte_t *page_table, pmd_t *pmd,
-+ int write_access, pte_t orig_pte)
-+{
-+ spinlock_t *ptl;
-+ struct page *page;
-+ swp_entry_t entry;
-+ pte_t pte;
-+ int ret = VM_FAULT_MINOR;
-+
-+ if (!pte_unmap_same(mm, pmd, page_table, orig_pte))
-+ goto out;
-+
-+ entry = pte_to_swp_entry(orig_pte);
-+ if (is_migration_entry(entry)) {
-+ migration_entry_wait(mm, pmd, address);
-+ goto out;
-+ }
-+ delayacct_set_flag(DELAYACCT_PF_SWAPIN);
-+ page = lookup_swap_cache(entry);
-+ if (!page) {
-+ grab_swap_token(); /* Contend for token _before_ read-in */
-+ swapin_readahead(entry, address, vma);
-+ page = read_swap_cache_async(entry, vma, address);
-+ if (!page) {
-+ /*
-+ * Back out if somebody else faulted in this pte
-+ * while we released the pte lock.
-+ */
-+ page_table = pte_offset_map_lock(mm, pmd, address, &ptl);
-+ if (likely(pte_same(*page_table, orig_pte)))
-+ ret = VM_FAULT_OOM;
-+ delayacct_clear_flag(DELAYACCT_PF_SWAPIN);
-+ goto unlock;
-+ }
-+
-+ /* Had to read the page from swap area: Major fault */
-+ ret = VM_FAULT_MAJOR;
-+ count_vm_event(PGMAJFAULT);
-+ }
-+
-+ if (!vx_rss_avail(mm, 1)) {
-+ ret = VM_FAULT_OOM;
-+ goto out;
-+ }
-+
-+ delayacct_clear_flag(DELAYACCT_PF_SWAPIN);
-+ mark_page_accessed(page);
-+ lock_page(page);
-+
-+ /*
-+ * Back out if somebody else already faulted in this pte.
-+ */
-+ page_table = pte_offset_map_lock(mm, pmd, address, &ptl);
-+ if (unlikely(!pte_same(*page_table, orig_pte)))
-+ goto out_nomap;
-+
-+ if (unlikely(!PageUptodate(page))) {
-+ ret = VM_FAULT_SIGBUS;
-+ goto out_nomap;
-+ }
-+
-+ /* The page isn't present yet, go ahead with the fault. */
-+
-+ inc_mm_counter(mm, anon_rss);
-+ pte = mk_pte(page, vma->vm_page_prot);
-+ if (write_access && can_share_swap_page(page)) {
-+ pte = maybe_mkwrite(pte_mkdirty(pte), vma);
-+ write_access = 0;
-+ }
-+
-+ flush_icache_page(vma, page);
-+ set_pte_at(mm, address, page_table, pte);
-+ page_add_anon_rmap(page, vma, address);
-+
-+ swap_free(entry);
-+ if (vm_swap_full())
-+ remove_exclusive_swap_page(page);
-+ unlock_page(page);
-+
-+ if (write_access) {
-+ if (do_wp_page(mm, vma, address,
-+ page_table, pmd, ptl, pte) == VM_FAULT_OOM)
-+ ret = VM_FAULT_OOM;
-+ goto out;
-+ }
-+
-+ /* No need to invalidate - it was non-present before */
-+ update_mmu_cache(vma, address, pte);
-+ lazy_mmu_prot_update(pte);
-+unlock:
-+ pte_unmap_unlock(page_table, ptl);
-+out:
-+ return ret;
-+out_nomap:
-+ pte_unmap_unlock(page_table, ptl);
-+ unlock_page(page);
-+ page_cache_release(page);
-+ return ret;
-+}
-+
-+/*
-+ * We enter with non-exclusive mmap_sem (to exclude vma changes,
-+ * but allow concurrent faults), and pte mapped but not yet locked.
-+ * We return with mmap_sem still held, but pte unmapped and unlocked.
-+ */
-+static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
-+ unsigned long address, pte_t *page_table, pmd_t *pmd,
-+ int write_access)
-+{
-+ struct page *page;
-+ spinlock_t *ptl;
-+ pte_t entry;
-+
-+ if (write_access) {
-+ /* Allocate our own private page. */
-+ pte_unmap(page_table);
-+
-+ if (!vx_rss_avail(mm, 1))
-+ goto oom;
-+ if (unlikely(anon_vma_prepare(vma)))
-+ goto oom;
-+ page = alloc_zeroed_user_highpage(vma, address);
-+ if (!page)
-+ goto oom;
-+
-+ entry = mk_pte(page, vma->vm_page_prot);
-+ entry = maybe_mkwrite(pte_mkdirty(entry), vma);
-+
-+ page_table = pte_offset_map_lock(mm, pmd, address, &ptl);
-+ if (!pte_none(*page_table))
-+ goto release;
-+ inc_mm_counter(mm, anon_rss);
-+ lru_cache_add_active(page);
-+ page_add_new_anon_rmap(page, vma, address);
-+ } else {
-+ /* Map the ZERO_PAGE - vm_page_prot is readonly */
-+ page = ZERO_PAGE(address);
-+ page_cache_get(page);
-+ entry = mk_pte(page, vma->vm_page_prot);
-+
-+ ptl = pte_lockptr(mm, pmd);
-+ spin_lock(ptl);
-+ if (!pte_none(*page_table))
-+ goto release;
-+ inc_mm_counter(mm, file_rss);
-+ page_add_file_rmap(page);
-+ }
-+
-+ set_pte_at(mm, address, page_table, entry);
-+
-+ /* No need to invalidate - it was non-present before */
-+ update_mmu_cache(vma, address, entry);
-+ lazy_mmu_prot_update(entry);
-+unlock:
-+ pte_unmap_unlock(page_table, ptl);
-+ return VM_FAULT_MINOR;
-+release:
-+ page_cache_release(page);
-+ goto unlock;
-+oom:
-+ return VM_FAULT_OOM;
-+}
-+
-+/*
-+ * do_no_page() tries to create a new page mapping. It aggressively
-+ * tries to share with existing pages, but makes a separate copy if
-+ * the "write_access" parameter is true in order to avoid the next
-+ * page fault.
-+ *
-+ * As this is called only for pages that do not currently exist, we
-+ * do not need to flush old virtual caches or the TLB.
-+ *
-+ * We enter with non-exclusive mmap_sem (to exclude vma changes,
-+ * but allow concurrent faults), and pte mapped but not yet locked.
-+ * We return with mmap_sem still held, but pte unmapped and unlocked.
-+ */
-+static int do_no_page(struct mm_struct *mm, struct vm_area_struct *vma,
-+ unsigned long address, pte_t *page_table, pmd_t *pmd,
-+ int write_access)
-+{
-+ spinlock_t *ptl;
-+ struct page *new_page;
-+ struct address_space *mapping = NULL;
-+ pte_t entry;
-+ unsigned int sequence = 0;
-+ int ret = VM_FAULT_MINOR;
-+ int anon = 0;
-+ struct page *dirty_page = NULL;
-+
-+ pte_unmap(page_table);
-+ BUG_ON(vma->vm_flags & VM_PFNMAP);
-+
-+ if (!vx_rss_avail(mm, 1))
-+ return VM_FAULT_OOM;
-+
-+ if (vma->vm_file) {
-+ mapping = vma->vm_file->f_mapping;
-+ sequence = mapping->truncate_count;
-+ smp_rmb(); /* serializes i_size against truncate_count */
-+ }
-+retry:
-+ new_page = vma->vm_ops->nopage(vma, address & PAGE_MASK, &ret);
-+ /*
-+ * No smp_rmb is needed here as long as there's a full
-+ * spin_lock/unlock sequence inside the ->nopage callback
-+ * (for the pagecache lookup) that acts as an implicit
-+ * smp_mb() and prevents the i_size read to happen
-+ * after the next truncate_count read.
-+ */
-+
-+ /* no page was available -- either SIGBUS, OOM or REFAULT */
-+ if (unlikely(new_page == NOPAGE_SIGBUS))
-+ return VM_FAULT_SIGBUS;
-+ else if (unlikely(new_page == NOPAGE_OOM))
-+ return VM_FAULT_OOM;
-+ else if (unlikely(new_page == NOPAGE_REFAULT))
-+ return VM_FAULT_MINOR;
-+
-+ /*
-+ * Should we do an early C-O-W break?
-+ */
-+ if (write_access) {
-+ if (!(vma->vm_flags & VM_SHARED)) {
-+ struct page *page;
-+
-+ if (unlikely(anon_vma_prepare(vma)))
-+ goto oom;
-+ page = alloc_page_vma(GFP_HIGHUSER, vma, address);
-+ if (!page)
-+ goto oom;
-+ copy_user_highpage(page, new_page, address, vma);
-+ page_cache_release(new_page);
-+ new_page = page;
-+ anon = 1;
-+
-+ } else {
-+ /* if the page will be shareable, see if the backing
-+ * address space wants to know that the page is about
-+ * to become writable */
-+ if (vma->vm_ops->page_mkwrite &&
-+ vma->vm_ops->page_mkwrite(vma, new_page) < 0
-+ ) {
-+ page_cache_release(new_page);
-+ return VM_FAULT_SIGBUS;
-+ }
-+ }
-+ }
-+
-+ page_table = pte_offset_map_lock(mm, pmd, address, &ptl);
-+ /*
-+ * For a file-backed vma, someone could have truncated or otherwise
-+ * invalidated this page. If unmap_mapping_range got called,
-+ * retry getting the page.
-+ */
-+ if (mapping && unlikely(sequence != mapping->truncate_count)) {
-+ pte_unmap_unlock(page_table, ptl);
-+ page_cache_release(new_page);
-+ cond_resched();
-+ sequence = mapping->truncate_count;
-+ smp_rmb();
-+ goto retry;
-+ }
-+
-+ /*
-+ * This silly early PAGE_DIRTY setting removes a race
-+ * due to the bad i386 page protection. But it's valid
-+ * for other architectures too.
-+ *
-+ * Note that if write_access is true, we either now have
-+ * an exclusive copy of the page, or this is a shared mapping,
-+ * so we can make it writable and dirty to avoid having to
-+ * handle that later.
-+ */
-+ /* Only go through if we didn't race with anybody else... */
-+ if (pte_none(*page_table)) {
-+ flush_icache_page(vma, new_page);
-+ entry = mk_pte(new_page, vma->vm_page_prot);
-+ if (write_access)
-+ entry = maybe_mkwrite(pte_mkdirty(entry), vma);
-+ set_pte_at(mm, address, page_table, entry);
-+ if (anon) {
-+ inc_mm_counter(mm, anon_rss);
-+ lru_cache_add_active(new_page);
-+ page_add_new_anon_rmap(new_page, vma, address);
-+ } else {
-+ inc_mm_counter(mm, file_rss);
-+ page_add_file_rmap(new_page);
-+ if (write_access) {
-+ dirty_page = new_page;
-+ get_page(dirty_page);
-+ }
-+ }
-+ } else {
-+ /* One of our sibling threads was faster, back out. */
-+ page_cache_release(new_page);
-+ goto unlock;
-+ }
-+
-+ /* no need to invalidate: a not-present page shouldn't be cached */
-+ update_mmu_cache(vma, address, entry);
-+ lazy_mmu_prot_update(entry);
-+unlock:
-+ pte_unmap_unlock(page_table, ptl);
-+ if (dirty_page) {
-+ set_page_dirty_balance(dirty_page);
-+ put_page(dirty_page);
-+ }
-+ return ret;
-+oom:
-+ page_cache_release(new_page);
-+ return VM_FAULT_OOM;
-+}
-+
-+/*
-+ * do_no_pfn() tries to create a new page mapping for a page without
-+ * a struct_page backing it
-+ *
-+ * As this is called only for pages that do not currently exist, we
-+ * do not need to flush old virtual caches or the TLB.
-+ *
-+ * We enter with non-exclusive mmap_sem (to exclude vma changes,
-+ * but allow concurrent faults), and pte mapped but not yet locked.
-+ * We return with mmap_sem still held, but pte unmapped and unlocked.
-+ *
-+ * It is expected that the ->nopfn handler always returns the same pfn
-+ * for a given virtual mapping.
-+ *
-+ * Mark this `noinline' to prevent it from bloating the main pagefault code.
-+ */
-+static noinline int do_no_pfn(struct mm_struct *mm, struct vm_area_struct *vma,
-+ unsigned long address, pte_t *page_table, pmd_t *pmd,
-+ int write_access)
-+{
-+ spinlock_t *ptl;
-+ pte_t entry;
-+ unsigned long pfn;
-+ int ret = VM_FAULT_MINOR;
-+
-+ pte_unmap(page_table);
-+ BUG_ON(!(vma->vm_flags & VM_PFNMAP));
-+ BUG_ON(is_cow_mapping(vma->vm_flags));
-+
-+ pfn = vma->vm_ops->nopfn(vma, address & PAGE_MASK);
-+ if (unlikely(pfn == NOPFN_OOM))
-+ return VM_FAULT_OOM;
-+ else if (unlikely(pfn == NOPFN_SIGBUS))
-+ return VM_FAULT_SIGBUS;
-+ else if (unlikely(pfn == NOPFN_REFAULT))
-+ return VM_FAULT_MINOR;
-+
-+ page_table = pte_offset_map_lock(mm, pmd, address, &ptl);
-+
-+ /* Only go through if we didn't race with anybody else... */
-+ if (pte_none(*page_table)) {
-+ entry = pfn_pte(pfn, vma->vm_page_prot);
-+ if (write_access)
-+ entry = maybe_mkwrite(pte_mkdirty(entry), vma);
-+ set_pte_at(mm, address, page_table, entry);
-+ }
-+ pte_unmap_unlock(page_table, ptl);
-+ return ret;
-+}
-+
-+/*
-+ * Fault of a previously existing named mapping. Repopulate the pte
-+ * from the encoded file_pte if possible. This enables swappable
-+ * nonlinear vmas.
-+ *
-+ * We enter with non-exclusive mmap_sem (to exclude vma changes,
-+ * but allow concurrent faults), and pte mapped but not yet locked.
-+ * We return with mmap_sem still held, but pte unmapped and unlocked.
-+ */
-+static int do_file_page(struct mm_struct *mm, struct vm_area_struct *vma,
-+ unsigned long address, pte_t *page_table, pmd_t *pmd,
-+ int write_access, pte_t orig_pte)
-+{
-+ pgoff_t pgoff;
-+ int err;
-+
-+ if (!pte_unmap_same(mm, pmd, page_table, orig_pte))
-+ return VM_FAULT_MINOR;
-+
-+ if (unlikely(!(vma->vm_flags & VM_NONLINEAR))) {
-+ /*
-+ * Page table corrupted: show pte and kill process.
-+ */
-+ print_bad_pte(vma, orig_pte, address);
-+ return VM_FAULT_OOM;
-+ }
-+ /* We can then assume vm->vm_ops && vma->vm_ops->populate */
-+
-+ pgoff = pte_to_pgoff(orig_pte);
-+ err = vma->vm_ops->populate(vma, address & PAGE_MASK, PAGE_SIZE,
-+ vma->vm_page_prot, pgoff, 0);
-+ if (err == -ENOMEM)
-+ return VM_FAULT_OOM;
-+ if (err)
-+ return VM_FAULT_SIGBUS;
-+ return VM_FAULT_MAJOR;
-+}
-+
-+/*
-+ * These routines also need to handle stuff like marking pages dirty
-+ * and/or accessed for architectures that don't do it in hardware (most
-+ * RISC architectures). The early dirtying is also good on the i386.
-+ *
-+ * There is also a hook called "update_mmu_cache()" that architectures
-+ * with external mmu caches can use to update those (ie the Sparc or
-+ * PowerPC hashed page tables that act as extended TLBs).
-+ *
-+ * We enter with non-exclusive mmap_sem (to exclude vma changes,
-+ * but allow concurrent faults), and pte mapped but not yet locked.
-+ * We return with mmap_sem still held, but pte unmapped and unlocked.
-+ */
-+static inline int handle_pte_fault(struct mm_struct *mm,
-+ struct vm_area_struct *vma, unsigned long address,
-+ pte_t *pte, pmd_t *pmd, int write_access)
-+{
-+ pte_t entry;
-+ spinlock_t *ptl;
-+ int ret, type = VXPT_UNKNOWN;
-+
-+ entry = *pte;
-+ if (!pte_present(entry)) {
-+ if (pte_none(entry)) {
-+ if (vma->vm_ops) {
-+ if (vma->vm_ops->nopage)
-+ return do_no_page(mm, vma, address,
-+ pte, pmd,
-+ write_access);
-+ if (unlikely(vma->vm_ops->nopfn))
-+ return do_no_pfn(mm, vma, address, pte,
-+ pmd, write_access);
-+ }
-+ return do_anonymous_page(mm, vma, address,
-+ pte, pmd, write_access);
-+ }
-+ if (pte_file(entry))
-+ return do_file_page(mm, vma, address,
-+ pte, pmd, write_access, entry);
-+ return do_swap_page(mm, vma, address,
-+ pte, pmd, write_access, entry);
-+ }
-+
-+ ptl = pte_lockptr(mm, pmd);
-+ spin_lock(ptl);
-+ if (unlikely(!pte_same(*pte, entry)))
-+ goto unlock;
-+ if (write_access) {
-+ if (!pte_write(entry)) {
-+ ret = do_wp_page(mm, vma, address,
-+ pte, pmd, ptl, entry);
-+ type = VXPT_WRITE;
-+ goto out;
-+ }
-+ entry = pte_mkdirty(entry);
-+ }
-+ entry = pte_mkyoung(entry);
-+ if (ptep_set_access_flags(vma, address, pte, entry, write_access)) {
-+ update_mmu_cache(vma, address, entry);
-+ lazy_mmu_prot_update(entry);
-+ } else {
-+ /*
-+ * This is needed only for protection faults but the arch code
-+ * is not yet telling us if this is a protection fault or not.
-+ * This still avoids useless tlb flushes for .text page faults
-+ * with threads.
-+ */
-+ if (write_access)
-+ flush_tlb_page(vma, address);
-+ }
-+unlock:
-+ pte_unmap_unlock(pte, ptl);
-+ ret = VM_FAULT_MINOR;
-+out:
-+ vx_page_fault(mm, vma, type, ret);
-+ return ret;
-+}
-+
-+/*
-+ * By the time we get here, we already hold the mm semaphore
-+ */
-+int __handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma,
-+ unsigned long address, int write_access)
-+{
-+ pgd_t *pgd;
-+ pud_t *pud;
-+ pmd_t *pmd;
-+ pte_t *pte;
-+
-+ __set_current_state(TASK_RUNNING);
-+
-+ count_vm_event(PGFAULT);
-+
-+ if (unlikely(is_vm_hugetlb_page(vma)))
-+ return hugetlb_fault(mm, vma, address, write_access);
-+
-+ pgd = pgd_offset(mm, address);
-+ pud = pud_alloc(mm, pgd, address);
-+ if (!pud)
-+ return VM_FAULT_OOM;
-+ pmd = pmd_alloc(mm, pud, address);
-+ if (!pmd)
-+ return VM_FAULT_OOM;
-+ pte = pte_alloc_map(mm, pmd, address);
-+ if (!pte)
-+ return VM_FAULT_OOM;
-+
-+ return handle_pte_fault(mm, vma, address, pte, pmd, write_access);
-+}
-+
-+EXPORT_SYMBOL_GPL(__handle_mm_fault);
-+
-+#ifndef __PAGETABLE_PUD_FOLDED
-+/*
-+ * Allocate page upper directory.
-+ * We've already handled the fast-path in-line.
-+ */
-+int __pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address)
-+{
-+ pud_t *new = pud_alloc_one(mm, address);
-+ if (!new)
-+ return -ENOMEM;
-+
-+ spin_lock(&mm->page_table_lock);
-+ if (pgd_present(*pgd)) /* Another has populated it */
-+ pud_free(new);
-+ else
-+ pgd_populate(mm, pgd, new);
-+ spin_unlock(&mm->page_table_lock);
-+ return 0;
-+}
-+#endif /* __PAGETABLE_PUD_FOLDED */
-+
-+#ifndef __PAGETABLE_PMD_FOLDED
-+/*
-+ * Allocate page middle directory.
-+ * We've already handled the fast-path in-line.
-+ */
-+int __pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address)
-+{
-+ pmd_t *new = pmd_alloc_one(mm, address);
-+ if (!new)
-+ return -ENOMEM;
-+
-+ spin_lock(&mm->page_table_lock);
-+#ifndef __ARCH_HAS_4LEVEL_HACK
-+ if (pud_present(*pud)) /* Another has populated it */
-+ pmd_free(new);
-+ else
-+ pud_populate(mm, pud, new);
-+#else
-+ if (pgd_present(*pud)) /* Another has populated it */
-+ pmd_free(new);
-+ else
-+ pgd_populate(mm, pud, new);
-+#endif /* __ARCH_HAS_4LEVEL_HACK */
-+ spin_unlock(&mm->page_table_lock);
-+ return 0;
-+}
-+#endif /* __PAGETABLE_PMD_FOLDED */
-+
-+int make_pages_present(unsigned long addr, unsigned long end)
-+{
-+ int ret, len, write;
-+ struct vm_area_struct * vma;
-+
-+ vma = find_vma(current->mm, addr);
-+ if (!vma)
-+ return -1;
-+ write = (vma->vm_flags & VM_WRITE) != 0;
-+ BUG_ON(addr >= end);
-+ BUG_ON(end > vma->vm_end);
-+ len = (end+PAGE_SIZE-1)/PAGE_SIZE-addr/PAGE_SIZE;
-+ ret = get_user_pages(current, current->mm, addr,
-+ len, write, 0, NULL, NULL);
-+ if (ret < 0)
-+ return ret;
-+ return ret == len ? 0 : -1;
-+}
-+
-+/*
-+ * Map a vmalloc()-space virtual address to the physical page.
-+ */
-+struct page * vmalloc_to_page(void * vmalloc_addr)
-+{
-+ unsigned long addr = (unsigned long) vmalloc_addr;
-+ struct page *page = NULL;
-+ pgd_t *pgd = pgd_offset_k(addr);
-+ pud_t *pud;
-+ pmd_t *pmd;
-+ pte_t *ptep, pte;
-+
-+ if (!pgd_none(*pgd)) {
-+ pud = pud_offset(pgd, addr);
-+ if (!pud_none(*pud)) {
-+ pmd = pmd_offset(pud, addr);
-+ if (!pmd_none(*pmd)) {
-+ ptep = pte_offset_map(pmd, addr);
-+ pte = *ptep;
-+ if (pte_present(pte))
-+ page = pte_page(pte);
-+ pte_unmap(ptep);
-+ }
-+ }
-+ }
-+ return page;
-+}
-+
-+EXPORT_SYMBOL(vmalloc_to_page);
-+
-+/*
-+ * Map a vmalloc()-space virtual address to the physical page frame number.
-+ */
-+unsigned long vmalloc_to_pfn(void * vmalloc_addr)
-+{
-+ return page_to_pfn(vmalloc_to_page(vmalloc_addr));
-+}
-+
-+EXPORT_SYMBOL(vmalloc_to_pfn);
-+
-+#if !defined(__HAVE_ARCH_GATE_AREA)
-+
-+#if defined(AT_SYSINFO_EHDR)
-+static struct vm_area_struct gate_vma;
-+
-+static int __init gate_vma_init(void)
-+{
-+ gate_vma.vm_mm = NULL;
-+ gate_vma.vm_start = FIXADDR_USER_START;
-+ gate_vma.vm_end = FIXADDR_USER_END;
-+ gate_vma.vm_flags = VM_READ | VM_MAYREAD | VM_EXEC | VM_MAYEXEC;
-+ gate_vma.vm_page_prot = __P101;
-+ /*
-+ * Make sure the vDSO gets into every core dump.
-+ * Dumping its contents makes post-mortem fully interpretable later
-+ * without matching up the same kernel and hardware config to see
-+ * what PC values meant.
-+ */
-+ gate_vma.vm_flags |= VM_ALWAYSDUMP;
-+ return 0;
-+}
-+__initcall(gate_vma_init);
-+#endif
-+
-+struct vm_area_struct *get_gate_vma(struct task_struct *tsk)
-+{
-+#ifdef AT_SYSINFO_EHDR
-+ return &gate_vma;
-+#else
-+ return NULL;
-+#endif
-+}
-+
-+int in_gate_area_no_task(unsigned long addr)
-+{
-+#ifdef AT_SYSINFO_EHDR
-+ if ((addr >= FIXADDR_USER_START) && (addr < FIXADDR_USER_END))
-+ return 1;
-+#endif
-+ return 0;
-+}
-+
-+#endif /* __HAVE_ARCH_GATE_AREA */
-+
-+/*
-+ * Access another process' address space.
-+ * Source/target buffer must be kernel space,
-+ * Do not walk the page table directly, use get_user_pages
-+ */
-+int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, int len, int write)
-+{
-+ struct mm_struct *mm;
-+ struct vm_area_struct *vma;
-+ struct page *page;
-+ void *old_buf = buf;
-+
-+ mm = get_task_mm(tsk);
-+ if (!mm)
-+ return 0;
-+
-+ down_read(&mm->mmap_sem);
-+ /* ignore errors, just check how much was sucessfully transfered */
-+ while (len) {
-+ int bytes, ret, offset;
-+ void *maddr;
-+
-+ ret = get_user_pages(tsk, mm, addr, 1,
-+ write, 1, &page, &vma);
-+ if (ret <= 0)
-+ break;
-+
-+ bytes = len;
-+ offset = addr & (PAGE_SIZE-1);
-+ if (bytes > PAGE_SIZE-offset)
-+ bytes = PAGE_SIZE-offset;
-+
-+ maddr = kmap(page);
-+ if (write) {
-+ copy_to_user_page(vma, page, addr,
-+ maddr + offset, buf, bytes);
-+ set_page_dirty_lock(page);
-+ } else {
-+ copy_from_user_page(vma, page, addr,
-+ buf, maddr + offset, bytes);
-+ }
-+ kunmap(page);
-+ page_cache_release(page);
-+ len -= bytes;
-+ buf += bytes;
-+ addr += bytes;
-+ }
-+ up_read(&mm->mmap_sem);
-+ mmput(mm);
-+
-+ return buf - old_buf;
-+}
-diff -Nurb --exclude='*.swp' --exclude=tags --exclude='*.patch' --exclude='*.diff' linux-2.6.22-580/mm/slab.c linux-2.6.22-590/mm/slab.c
---- linux-2.6.22-580/mm/slab.c 2009-02-18 09:56:03.000000000 -0500
-+++ linux-2.6.22-590/mm/slab.c 2009-02-18 10:00:42.000000000 -0500
-@@ -110,11 +110,13 @@
- #include <linux/fault-inject.h>
- #include <linux/rtmutex.h>
- #include <linux/reciprocal_div.h>
-+#include <linux/arrays.h>
-
- #include <asm/cacheflush.h>
- #include <asm/tlbflush.h>
- #include <asm/page.h>
-
-+
- /*
- * DEBUG - 1 for kmem_cache_create() to honour; SLAB_RED_ZONE & SLAB_POISON.
- * 0 for faster, smaller code (especially in the critical paths).
-@@ -249,6 +251,14 @@
- void *addr;
- };
-
-+extern void (*rec_event)(void *,unsigned int);
-+struct event_spec {
-+ unsigned long pc;
-+ unsigned long dcookie;
-+ unsigned count;
-+ unsigned char reason;
-+};
-+
- /*
- * struct array_cache
- *
-@@ -3443,6 +3453,19 @@
- local_irq_restore(save_flags);
- objp = cache_alloc_debugcheck_after(cachep, flags, objp, caller);
- prefetchw(objp);
-+#ifdef CONFIG_CHOPSTIX
-+ if (rec_event && objp) {
-+ struct event event;
-+ struct event_spec espec;
-+
-+ espec.reason = 0; /* alloc */
-+ event.event_data=&espec;
-+ event.task = current;
-+ espec.pc=caller;
-+ event.event_type=5;
-+ (*rec_event)(&event, cachep->buffer_size);
-+ }
-+#endif
-
- return objp;
- }
-@@ -3549,12 +3572,26 @@
- * Release an obj back to its cache. If the obj has a constructed state, it must
- * be in this state _before_ it is released. Called with disabled ints.
- */
--static inline void __cache_free(struct kmem_cache *cachep, void *objp)
-+static inline void __cache_free(struct kmem_cache *cachep, void *objp, void *caller)
- {
- struct array_cache *ac = cpu_cache_get(cachep);
-
- check_irq_off();
-- objp = cache_free_debugcheck(cachep, objp, __builtin_return_address(0));
-+ objp = cache_free_debugcheck(cachep, objp, caller);
-+ #ifdef CONFIG_CHOPSTIX
-+ if (rec_event && objp) {
-+ struct event event;
-+ struct event_spec espec;
-+
-+ espec.reason = 1; /* free */
-+ event.event_data=&espec;
-+ event.task = current;
-+ espec.pc=caller;
-+ event.event_type=4;
-+ (*rec_event)(&event, cachep->buffer_size);
-+ }
-+ #endif
-+
- vx_slab_free(cachep);
-
- if (cache_free_alien(cachep, objp))
-@@ -3651,16 +3688,19 @@
- __builtin_return_address(0));
- }
- EXPORT_SYMBOL(kmem_cache_alloc_node);
--
- static __always_inline void *
- __do_kmalloc_node(size_t size, gfp_t flags, int node, void *caller)
- {
- struct kmem_cache *cachep;
-+ void *ret;
-+
-
- cachep = kmem_find_general_cachep(size, flags);
- if (unlikely(cachep == NULL))
- return NULL;
-- return kmem_cache_alloc_node(cachep, flags, node);
-+ ret = kmem_cache_alloc_node(cachep, flags, node);
-+
-+ return ret;
- }
-
- #ifdef CONFIG_DEBUG_SLAB
-@@ -3696,6 +3736,7 @@
- void *caller)
- {
- struct kmem_cache *cachep;
-+ void *ret;
-
- /* If you want to save a few bytes .text space: replace
- * __ with kmem_.
-@@ -3705,9 +3746,10 @@
- cachep = __find_general_cachep(size, flags);
- if (unlikely(cachep == NULL))
- return NULL;
-- return __cache_alloc(cachep, flags, caller);
--}
-+ ret = __cache_alloc(cachep, flags, caller);
-
-+ return ret;
-+}
-
- #ifdef CONFIG_DEBUG_SLAB
- void *__kmalloc(size_t size, gfp_t flags)
-@@ -3723,10 +3765,17 @@
- EXPORT_SYMBOL(__kmalloc_track_caller);
-
- #else
-+#ifdef CONFIG_CHOPSTIX
-+void *__kmalloc(size_t size, gfp_t flags)
-+{
-+ return __do_kmalloc(size, flags, __builtin_return_address(0));
-+}
-+#else
- void *__kmalloc(size_t size, gfp_t flags)
- {
- return __do_kmalloc(size, flags, NULL);
- }
-+#endif
- EXPORT_SYMBOL(__kmalloc);
- #endif
-
-@@ -3792,7 +3841,7 @@
-
- local_irq_save(flags);
- debug_check_no_locks_freed(objp, obj_size(cachep));
-- __cache_free(cachep, objp);
-+ __cache_free(cachep, objp,__builtin_return_address(0));
- local_irq_restore(flags);
- }
- EXPORT_SYMBOL(kmem_cache_free);
-@@ -3817,7 +3866,7 @@
- kfree_debugcheck(objp);
- c = virt_to_cache(objp);
- debug_check_no_locks_freed(objp, obj_size(c));
-- __cache_free(c, (void *)objp);
-+ __cache_free(c, (void *)objp,__builtin_return_address(0));
- local_irq_restore(flags);
- }
- EXPORT_SYMBOL(kfree);
-diff -Nurb --exclude='*.swp' --exclude=tags --exclude='*.patch' --exclude='*.diff' linux-2.6.22-580/mm/slab.c.orig linux-2.6.22-590/mm/slab.c.orig
---- linux-2.6.22-580/mm/slab.c.orig 1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.22-590/mm/slab.c.orig 2009-02-18 09:56:03.000000000 -0500
-@@ -0,0 +1,4523 @@
-+/*
-+ * linux/mm/slab.c
-+ * Written by Mark Hemment, 1996/97.
-+ * (markhe@nextd.demon.co.uk)
-+ *
-+ * kmem_cache_destroy() + some cleanup - 1999 Andrea Arcangeli
-+ *
-+ * Major cleanup, different bufctl logic, per-cpu arrays
-+ * (c) 2000 Manfred Spraul
-+ *
-+ * Cleanup, make the head arrays unconditional, preparation for NUMA
-+ * (c) 2002 Manfred Spraul
-+ *
-+ * An implementation of the Slab Allocator as described in outline in;
-+ * UNIX Internals: The New Frontiers by Uresh Vahalia
-+ * Pub: Prentice Hall ISBN 0-13-101908-2
-+ * or with a little more detail in;
-+ * The Slab Allocator: An Object-Caching Kernel Memory Allocator
-+ * Jeff Bonwick (Sun Microsystems).
-+ * Presented at: USENIX Summer 1994 Technical Conference
-+ *
-+ * The memory is organized in caches, one cache for each object type.
-+ * (e.g. inode_cache, dentry_cache, buffer_head, vm_area_struct)
-+ * Each cache consists out of many slabs (they are small (usually one
-+ * page long) and always contiguous), and each slab contains multiple
-+ * initialized objects.
-+ *
-+ * This means, that your constructor is used only for newly allocated
-+ * slabs and you must pass objects with the same intializations to
-+ * kmem_cache_free.
-+ *
-+ * Each cache can only support one memory type (GFP_DMA, GFP_HIGHMEM,
-+ * normal). If you need a special memory type, then must create a new
-+ * cache for that memory type.
-+ *
-+ * In order to reduce fragmentation, the slabs are sorted in 3 groups:
-+ * full slabs with 0 free objects
-+ * partial slabs
-+ * empty slabs with no allocated objects
-+ *
-+ * If partial slabs exist, then new allocations come from these slabs,
-+ * otherwise from empty slabs or new slabs are allocated.
-+ *
-+ * kmem_cache_destroy() CAN CRASH if you try to allocate from the cache
-+ * during kmem_cache_destroy(). The caller must prevent concurrent allocs.
-+ *
-+ * Each cache has a short per-cpu head array, most allocs
-+ * and frees go into that array, and if that array overflows, then 1/2
-+ * of the entries in the array are given back into the global cache.
-+ * The head array is strictly LIFO and should improve the cache hit rates.
-+ * On SMP, it additionally reduces the spinlock operations.
-+ *
-+ * The c_cpuarray may not be read with enabled local interrupts -
-+ * it's changed with a smp_call_function().
-+ *
-+ * SMP synchronization:
-+ * constructors and destructors are called without any locking.
-+ * Several members in struct kmem_cache and struct slab never change, they
-+ * are accessed without any locking.
-+ * The per-cpu arrays are never accessed from the wrong cpu, no locking,
-+ * and local interrupts are disabled so slab code is preempt-safe.
-+ * The non-constant members are protected with a per-cache irq spinlock.
-+ *
-+ * Many thanks to Mark Hemment, who wrote another per-cpu slab patch
-+ * in 2000 - many ideas in the current implementation are derived from
-+ * his patch.
-+ *
-+ * Further notes from the original documentation:
-+ *
-+ * 11 April '97. Started multi-threading - markhe
-+ * The global cache-chain is protected by the mutex 'cache_chain_mutex'.
-+ * The sem is only needed when accessing/extending the cache-chain, which
-+ * can never happen inside an interrupt (kmem_cache_create(),
-+ * kmem_cache_shrink() and kmem_cache_reap()).
-+ *
-+ * At present, each engine can be growing a cache. This should be blocked.
-+ *
-+ * 15 March 2005. NUMA slab allocator.
-+ * Shai Fultheim <shai@scalex86.org>.
-+ * Shobhit Dayal <shobhit@calsoftinc.com>
-+ * Alok N Kataria <alokk@calsoftinc.com>
-+ * Christoph Lameter <christoph@lameter.com>
-+ *
-+ * Modified the slab allocator to be node aware on NUMA systems.
-+ * Each node has its own list of partial, free and full slabs.
-+ * All object allocations for a node occur from node specific slab lists.
-+ */
-+
-+#include <linux/slab.h>
-+#include <linux/mm.h>
-+#include <linux/poison.h>
-+#include <linux/swap.h>
-+#include <linux/cache.h>
-+#include <linux/interrupt.h>
-+#include <linux/init.h>
-+#include <linux/compiler.h>
-+#include <linux/cpuset.h>
-+#include <linux/seq_file.h>
-+#include <linux/notifier.h>
-+#include <linux/kallsyms.h>
-+#include <linux/cpu.h>
-+#include <linux/sysctl.h>
-+#include <linux/module.h>
-+#include <linux/rcupdate.h>
-+#include <linux/string.h>
-+#include <linux/uaccess.h>
-+#include <linux/nodemask.h>
-+#include <linux/mempolicy.h>
-+#include <linux/mutex.h>
-+#include <linux/fault-inject.h>
-+#include <linux/rtmutex.h>
-+#include <linux/reciprocal_div.h>
-+
-+#include <asm/cacheflush.h>
-+#include <asm/tlbflush.h>
-+#include <asm/page.h>
-+
-+/*
-+ * DEBUG - 1 for kmem_cache_create() to honour; SLAB_RED_ZONE & SLAB_POISON.
-+ * 0 for faster, smaller code (especially in the critical paths).
-+ *
-+ * STATS - 1 to collect stats for /proc/slabinfo.
-+ * 0 for faster, smaller code (especially in the critical paths).
-+ *
-+ * FORCED_DEBUG - 1 enables SLAB_RED_ZONE and SLAB_POISON (if possible)
-+ */
-+
-+#ifdef CONFIG_DEBUG_SLAB
-+#define DEBUG 1
-+#define STATS 1
-+#define FORCED_DEBUG 1
-+#else
-+#define DEBUG 0
-+#define STATS 0
-+#define FORCED_DEBUG 0
-+#endif
-+
-+/* Shouldn't this be in a header file somewhere? */
-+#define BYTES_PER_WORD sizeof(void *)
-+#define REDZONE_ALIGN max(BYTES_PER_WORD, __alignof__(unsigned long long))
-+
-+#ifndef cache_line_size
-+#define cache_line_size() L1_CACHE_BYTES
-+#endif
-+
-+#ifndef ARCH_KMALLOC_MINALIGN
-+/*
-+ * Enforce a minimum alignment for the kmalloc caches.
-+ * Usually, the kmalloc caches are cache_line_size() aligned, except when
-+ * DEBUG and FORCED_DEBUG are enabled, then they are BYTES_PER_WORD aligned.
-+ * Some archs want to perform DMA into kmalloc caches and need a guaranteed
-+ * alignment larger than the alignment of a 64-bit integer.
-+ * ARCH_KMALLOC_MINALIGN allows that.
-+ * Note that increasing this value may disable some debug features.
-+ */
-+#define ARCH_KMALLOC_MINALIGN __alignof__(unsigned long long)
-+#endif
-+
-+#ifndef ARCH_SLAB_MINALIGN
-+/*
-+ * Enforce a minimum alignment for all caches.
-+ * Intended for archs that get misalignment faults even for BYTES_PER_WORD
-+ * aligned buffers. Includes ARCH_KMALLOC_MINALIGN.
-+ * If possible: Do not enable this flag for CONFIG_DEBUG_SLAB, it disables
-+ * some debug features.
-+ */
-+#define ARCH_SLAB_MINALIGN 0
-+#endif
-+
-+#ifndef ARCH_KMALLOC_FLAGS
-+#define ARCH_KMALLOC_FLAGS SLAB_HWCACHE_ALIGN
-+#endif
-+
-+/* Legal flag mask for kmem_cache_create(). */
-+#if DEBUG
-+# define CREATE_MASK (SLAB_RED_ZONE | \
-+ SLAB_POISON | SLAB_HWCACHE_ALIGN | \
-+ SLAB_CACHE_DMA | \
-+ SLAB_STORE_USER | \
-+ SLAB_RECLAIM_ACCOUNT | SLAB_PANIC | \
-+ SLAB_DESTROY_BY_RCU | SLAB_MEM_SPREAD)
-+#else
-+# define CREATE_MASK (SLAB_HWCACHE_ALIGN | \
-+ SLAB_CACHE_DMA | \
-+ SLAB_RECLAIM_ACCOUNT | SLAB_PANIC | \
-+ SLAB_DESTROY_BY_RCU | SLAB_MEM_SPREAD)
-+#endif
-+
-+/*
-+ * kmem_bufctl_t:
-+ *
-+ * Bufctl's are used for linking objs within a slab
-+ * linked offsets.
-+ *
-+ * This implementation relies on "struct page" for locating the cache &
-+ * slab an object belongs to.
-+ * This allows the bufctl structure to be small (one int), but limits
-+ * the number of objects a slab (not a cache) can contain when off-slab
-+ * bufctls are used. The limit is the size of the largest general cache
-+ * that does not use off-slab slabs.
-+ * For 32bit archs with 4 kB pages, is this 56.
-+ * This is not serious, as it is only for large objects, when it is unwise
-+ * to have too many per slab.
-+ * Note: This limit can be raised by introducing a general cache whose size
-+ * is less than 512 (PAGE_SIZE<<3), but greater than 256.
-+ */
-+
-+typedef unsigned int kmem_bufctl_t;
-+#define BUFCTL_END (((kmem_bufctl_t)(~0U))-0)
-+#define BUFCTL_FREE (((kmem_bufctl_t)(~0U))-1)
-+#define BUFCTL_ACTIVE (((kmem_bufctl_t)(~0U))-2)
-+#define SLAB_LIMIT (((kmem_bufctl_t)(~0U))-3)
-+
-+/*
-+ * struct slab
-+ *
-+ * Manages the objs in a slab. Placed either at the beginning of mem allocated
-+ * for a slab, or allocated from an general cache.
-+ * Slabs are chained into three list: fully used, partial, fully free slabs.
-+ */
-+struct slab {
-+ struct list_head list;
-+ unsigned long colouroff;
-+ void *s_mem; /* including colour offset */
-+ unsigned int inuse; /* num of objs active in slab */
-+ kmem_bufctl_t free;
-+ unsigned short nodeid;
-+};
-+
-+/*
-+ * struct slab_rcu
-+ *
-+ * slab_destroy on a SLAB_DESTROY_BY_RCU cache uses this structure to
-+ * arrange for kmem_freepages to be called via RCU. This is useful if
-+ * we need to approach a kernel structure obliquely, from its address
-+ * obtained without the usual locking. We can lock the structure to
-+ * stabilize it and check it's still at the given address, only if we
-+ * can be sure that the memory has not been meanwhile reused for some
-+ * other kind of object (which our subsystem's lock might corrupt).
-+ *
-+ * rcu_read_lock before reading the address, then rcu_read_unlock after
-+ * taking the spinlock within the structure expected at that address.
-+ *
-+ * We assume struct slab_rcu can overlay struct slab when destroying.
-+ */
-+struct slab_rcu {
-+ struct rcu_head head;
-+ struct kmem_cache *cachep;
-+ void *addr;
-+};
-+
-+/*
-+ * struct array_cache
-+ *
-+ * Purpose:
-+ * - LIFO ordering, to hand out cache-warm objects from _alloc
-+ * - reduce the number of linked list operations
-+ * - reduce spinlock operations
-+ *
-+ * The limit is stored in the per-cpu structure to reduce the data cache
-+ * footprint.
-+ *
-+ */
-+struct array_cache {
-+ unsigned int avail;
-+ unsigned int limit;
-+ unsigned int batchcount;
-+ unsigned int touched;
-+ spinlock_t lock;
-+ void *entry[0]; /*
-+ * Must have this definition in here for the proper
-+ * alignment of array_cache. Also simplifies accessing
-+ * the entries.
-+ * [0] is for gcc 2.95. It should really be [].
-+ */
-+};
-+
-+/*
-+ * bootstrap: The caches do not work without cpuarrays anymore, but the
-+ * cpuarrays are allocated from the generic caches...
-+ */
-+#define BOOT_CPUCACHE_ENTRIES 1
-+struct arraycache_init {
-+ struct array_cache cache;
-+ void *entries[BOOT_CPUCACHE_ENTRIES];
-+};
-+
-+/*
-+ * The slab lists for all objects.
-+ */
-+struct kmem_list3 {
-+ struct list_head slabs_partial; /* partial list first, better asm code */
-+ struct list_head slabs_full;
-+ struct list_head slabs_free;
-+ unsigned long free_objects;
-+ unsigned int free_limit;
-+ unsigned int colour_next; /* Per-node cache coloring */
-+ spinlock_t list_lock;
-+ struct array_cache *shared; /* shared per node */
-+ struct array_cache **alien; /* on other nodes */
-+ unsigned long next_reap; /* updated without locking */
-+ int free_touched; /* updated without locking */
-+};
-+
-+/*
-+ * Need this for bootstrapping a per node allocator.
-+ */
-+#define NUM_INIT_LISTS (2 * MAX_NUMNODES + 1)
-+struct kmem_list3 __initdata initkmem_list3[NUM_INIT_LISTS];
-+#define CACHE_CACHE 0
-+#define SIZE_AC 1
-+#define SIZE_L3 (1 + MAX_NUMNODES)
-+
-+static int drain_freelist(struct kmem_cache *cache,
-+ struct kmem_list3 *l3, int tofree);
-+static void free_block(struct kmem_cache *cachep, void **objpp, int len,
-+ int node);
-+static int enable_cpucache(struct kmem_cache *cachep);
-+static void cache_reap(struct work_struct *unused);
-+
-+/*
-+ * This function must be completely optimized away if a constant is passed to
-+ * it. Mostly the same as what is in linux/slab.h except it returns an index.
-+ */
-+static __always_inline int index_of(const size_t size)
-+{
-+ extern void __bad_size(void);
-+
-+ if (__builtin_constant_p(size)) {
-+ int i = 0;
-+
-+#define CACHE(x) \
-+ if (size <=x) \
-+ return i; \
-+ else \
-+ i++;
-+#include "linux/kmalloc_sizes.h"
-+#undef CACHE
-+ __bad_size();
-+ } else
-+ __bad_size();
-+ return 0;
-+}
-+
-+static int slab_early_init = 1;
-+
-+#define INDEX_AC index_of(sizeof(struct arraycache_init))
-+#define INDEX_L3 index_of(sizeof(struct kmem_list3))
-+
-+static void kmem_list3_init(struct kmem_list3 *parent)
-+{
-+ INIT_LIST_HEAD(&parent->slabs_full);
-+ INIT_LIST_HEAD(&parent->slabs_partial);
-+ INIT_LIST_HEAD(&parent->slabs_free);
-+ parent->shared = NULL;
-+ parent->alien = NULL;
-+ parent->colour_next = 0;
-+ spin_lock_init(&parent->list_lock);
-+ parent->free_objects = 0;
-+ parent->free_touched = 0;
-+}
-+
-+#define MAKE_LIST(cachep, listp, slab, nodeid) \
-+ do { \
-+ INIT_LIST_HEAD(listp); \
-+ list_splice(&(cachep->nodelists[nodeid]->slab), listp); \
-+ } while (0)
-+
-+#define MAKE_ALL_LISTS(cachep, ptr, nodeid) \
-+ do { \
-+ MAKE_LIST((cachep), (&(ptr)->slabs_full), slabs_full, nodeid); \
-+ MAKE_LIST((cachep), (&(ptr)->slabs_partial), slabs_partial, nodeid); \
-+ MAKE_LIST((cachep), (&(ptr)->slabs_free), slabs_free, nodeid); \
-+ } while (0)
-+
-+/*
-+ * struct kmem_cache
-+ *
-+ * manages a cache.
-+ */
-+
-+struct kmem_cache {
-+/* 1) per-cpu data, touched during every alloc/free */
-+ struct array_cache *array[NR_CPUS];
-+/* 2) Cache tunables. Protected by cache_chain_mutex */
-+ unsigned int batchcount;
-+ unsigned int limit;
-+ unsigned int shared;
-+
-+ unsigned int buffer_size;
-+ u32 reciprocal_buffer_size;
-+/* 3) touched by every alloc & free from the backend */
-+
-+ unsigned int flags; /* constant flags */
-+ unsigned int num; /* # of objs per slab */
-+
-+/* 4) cache_grow/shrink */
-+ /* order of pgs per slab (2^n) */
-+ unsigned int gfporder;
-+
-+ /* force GFP flags, e.g. GFP_DMA */
-+ gfp_t gfpflags;
-+
-+ size_t colour; /* cache colouring range */
-+ unsigned int colour_off; /* colour offset */
-+ struct kmem_cache *slabp_cache;
-+ unsigned int slab_size;
-+ unsigned int dflags; /* dynamic flags */
-+
-+ /* constructor func */
-+ void (*ctor) (void *, struct kmem_cache *, unsigned long);
-+
-+/* 5) cache creation/removal */
-+ const char *name;
-+ struct list_head next;
-+
-+/* 6) statistics */
-+#if STATS
-+ unsigned long num_active;
-+ unsigned long num_allocations;
-+ unsigned long high_mark;
-+ unsigned long grown;
-+ unsigned long reaped;
-+ unsigned long errors;
-+ unsigned long max_freeable;
-+ unsigned long node_allocs;
-+ unsigned long node_frees;
-+ unsigned long node_overflow;
-+ atomic_t allochit;
-+ atomic_t allocmiss;
-+ atomic_t freehit;
-+ atomic_t freemiss;
-+#endif
-+#if DEBUG
-+ /*
-+ * If debugging is enabled, then the allocator can add additional
-+ * fields and/or padding to every object. buffer_size contains the total
-+ * object size including these internal fields, the following two
-+ * variables contain the offset to the user object and its size.
-+ */
-+ int obj_offset;
-+ int obj_size;
-+#endif
-+ /*
-+ * We put nodelists[] at the end of kmem_cache, because we want to size
-+ * this array to nr_node_ids slots instead of MAX_NUMNODES
-+ * (see kmem_cache_init())
-+ * We still use [MAX_NUMNODES] and not [1] or [0] because cache_cache
-+ * is statically defined, so we reserve the max number of nodes.
-+ */
-+ struct kmem_list3 *nodelists[MAX_NUMNODES];
-+ /*
-+ * Do not add fields after nodelists[]
-+ */
-+};
-+
-+#define CFLGS_OFF_SLAB (0x80000000UL)
-+#define OFF_SLAB(x) ((x)->flags & CFLGS_OFF_SLAB)
-+
-+#define BATCHREFILL_LIMIT 16
-+/*
-+ * Optimization question: fewer reaps means less probability for unnessary
-+ * cpucache drain/refill cycles.
-+ *
-+ * OTOH the cpuarrays can contain lots of objects,
-+ * which could lock up otherwise freeable slabs.
-+ */
-+#define REAPTIMEOUT_CPUC (2*HZ)
-+#define REAPTIMEOUT_LIST3 (4*HZ)
-+
-+#if STATS
-+#define STATS_INC_ACTIVE(x) ((x)->num_active++)
-+#define STATS_DEC_ACTIVE(x) ((x)->num_active--)
-+#define STATS_INC_ALLOCED(x) ((x)->num_allocations++)
-+#define STATS_INC_GROWN(x) ((x)->grown++)
-+#define STATS_ADD_REAPED(x,y) ((x)->reaped += (y))
-+#define STATS_SET_HIGH(x) \
-+ do { \
-+ if ((x)->num_active > (x)->high_mark) \
-+ (x)->high_mark = (x)->num_active; \
-+ } while (0)
-+#define STATS_INC_ERR(x) ((x)->errors++)
-+#define STATS_INC_NODEALLOCS(x) ((x)->node_allocs++)
-+#define STATS_INC_NODEFREES(x) ((x)->node_frees++)
-+#define STATS_INC_ACOVERFLOW(x) ((x)->node_overflow++)
-+#define STATS_SET_FREEABLE(x, i) \
-+ do { \
-+ if ((x)->max_freeable < i) \
-+ (x)->max_freeable = i; \
-+ } while (0)
-+#define STATS_INC_ALLOCHIT(x) atomic_inc(&(x)->allochit)
-+#define STATS_INC_ALLOCMISS(x) atomic_inc(&(x)->allocmiss)
-+#define STATS_INC_FREEHIT(x) atomic_inc(&(x)->freehit)
-+#define STATS_INC_FREEMISS(x) atomic_inc(&(x)->freemiss)
-+#else
-+#define STATS_INC_ACTIVE(x) do { } while (0)
-+#define STATS_DEC_ACTIVE(x) do { } while (0)
-+#define STATS_INC_ALLOCED(x) do { } while (0)
-+#define STATS_INC_GROWN(x) do { } while (0)
-+#define STATS_ADD_REAPED(x,y) do { } while (0)
-+#define STATS_SET_HIGH(x) do { } while (0)
-+#define STATS_INC_ERR(x) do { } while (0)
-+#define STATS_INC_NODEALLOCS(x) do { } while (0)
-+#define STATS_INC_NODEFREES(x) do { } while (0)
-+#define STATS_INC_ACOVERFLOW(x) do { } while (0)
-+#define STATS_SET_FREEABLE(x, i) do { } while (0)
-+#define STATS_INC_ALLOCHIT(x) do { } while (0)
-+#define STATS_INC_ALLOCMISS(x) do { } while (0)
-+#define STATS_INC_FREEHIT(x) do { } while (0)
-+#define STATS_INC_FREEMISS(x) do { } while (0)
-+#endif
-+
-+#include "slab_vs.h"
-+
-+#if DEBUG
-+
-+/*
-+ * memory layout of objects:
-+ * 0 : objp
-+ * 0 .. cachep->obj_offset - BYTES_PER_WORD - 1: padding. This ensures that
-+ * the end of an object is aligned with the end of the real
-+ * allocation. Catches writes behind the end of the allocation.
-+ * cachep->obj_offset - BYTES_PER_WORD .. cachep->obj_offset - 1:
-+ * redzone word.
-+ * cachep->obj_offset: The real object.
-+ * cachep->buffer_size - 2* BYTES_PER_WORD: redzone word [BYTES_PER_WORD long]
-+ * cachep->buffer_size - 1* BYTES_PER_WORD: last caller address
-+ * [BYTES_PER_WORD long]
-+ */
-+static int obj_offset(struct kmem_cache *cachep)
-+{
-+ return cachep->obj_offset;
-+}
-+
-+static int obj_size(struct kmem_cache *cachep)
-+{
-+ return cachep->obj_size;
-+}
-+
-+static unsigned long long *dbg_redzone1(struct kmem_cache *cachep, void *objp)
-+{
-+ BUG_ON(!(cachep->flags & SLAB_RED_ZONE));
-+ return (unsigned long long*) (objp + obj_offset(cachep) -
-+ sizeof(unsigned long long));
-+}
-+
-+static unsigned long long *dbg_redzone2(struct kmem_cache *cachep, void *objp)
-+{
-+ BUG_ON(!(cachep->flags & SLAB_RED_ZONE));
-+ if (cachep->flags & SLAB_STORE_USER)
-+ return (unsigned long long *)(objp + cachep->buffer_size -
-+ sizeof(unsigned long long) -
-+ REDZONE_ALIGN);
-+ return (unsigned long long *) (objp + cachep->buffer_size -
-+ sizeof(unsigned long long));
-+}
-+
-+static void **dbg_userword(struct kmem_cache *cachep, void *objp)
-+{
-+ BUG_ON(!(cachep->flags & SLAB_STORE_USER));
-+ return (void **)(objp + cachep->buffer_size - BYTES_PER_WORD);
-+}
-+
-+#else
-+
-+#define obj_offset(x) 0
-+#define obj_size(cachep) (cachep->buffer_size)
-+#define dbg_redzone1(cachep, objp) ({BUG(); (unsigned long long *)NULL;})
-+#define dbg_redzone2(cachep, objp) ({BUG(); (unsigned long long *)NULL;})
-+#define dbg_userword(cachep, objp) ({BUG(); (void **)NULL;})
-+
-+#endif
-+
-+/*
-+ * Do not go above this order unless 0 objects fit into the slab.
-+ */
-+#define BREAK_GFP_ORDER_HI 1
-+#define BREAK_GFP_ORDER_LO 0
-+static int slab_break_gfp_order = BREAK_GFP_ORDER_LO;
-+
-+/*
-+ * Functions for storing/retrieving the cachep and or slab from the page
-+ * allocator. These are used to find the slab an obj belongs to. With kfree(),
-+ * these are used to find the cache which an obj belongs to.
-+ */
-+static inline void page_set_cache(struct page *page, struct kmem_cache *cache)
-+{
-+ page->lru.next = (struct list_head *)cache;
-+}
-+
-+static inline struct kmem_cache *page_get_cache(struct page *page)
-+{
-+ page = compound_head(page);
-+ BUG_ON(!PageSlab(page));
-+ return (struct kmem_cache *)page->lru.next;
-+}
-+
-+static inline void page_set_slab(struct page *page, struct slab *slab)
-+{
-+ page->lru.prev = (struct list_head *)slab;
-+}
-+
-+static inline struct slab *page_get_slab(struct page *page)
-+{
-+ BUG_ON(!PageSlab(page));
-+ return (struct slab *)page->lru.prev;
-+}
-+
-+static inline struct kmem_cache *virt_to_cache(const void *obj)
-+{
-+ struct page *page = virt_to_head_page(obj);
-+ return page_get_cache(page);
-+}
-+
-+static inline struct slab *virt_to_slab(const void *obj)
-+{
-+ struct page *page = virt_to_head_page(obj);
-+ return page_get_slab(page);
-+}
-+
-+static inline void *index_to_obj(struct kmem_cache *cache, struct slab *slab,
-+ unsigned int idx)
-+{
-+ return slab->s_mem + cache->buffer_size * idx;
-+}
-+
-+/*
-+ * We want to avoid an expensive divide : (offset / cache->buffer_size)
-+ * Using the fact that buffer_size is a constant for a particular cache,
-+ * we can replace (offset / cache->buffer_size) by
-+ * reciprocal_divide(offset, cache->reciprocal_buffer_size)
-+ */
-+static inline unsigned int obj_to_index(const struct kmem_cache *cache,
-+ const struct slab *slab, void *obj)
-+{
-+ u32 offset = (obj - slab->s_mem);
-+ return reciprocal_divide(offset, cache->reciprocal_buffer_size);
-+}
-+
-+/*
-+ * These are the default caches for kmalloc. Custom caches can have other sizes.
-+ */
-+struct cache_sizes malloc_sizes[] = {
-+#define CACHE(x) { .cs_size = (x) },
-+#include <linux/kmalloc_sizes.h>
-+ CACHE(ULONG_MAX)
-+#undef CACHE
-+};
-+EXPORT_SYMBOL(malloc_sizes);
-+
-+/* Must match cache_sizes above. Out of line to keep cache footprint low. */
-+struct cache_names {
-+ char *name;
-+ char *name_dma;
-+};
-+
-+static struct cache_names __initdata cache_names[] = {
-+#define CACHE(x) { .name = "size-" #x, .name_dma = "size-" #x "(DMA)" },
-+#include <linux/kmalloc_sizes.h>
-+ {NULL,}
-+#undef CACHE
-+};
-+
-+static struct arraycache_init initarray_cache __initdata =
-+ { {0, BOOT_CPUCACHE_ENTRIES, 1, 0} };
-+static struct arraycache_init initarray_generic =
-+ { {0, BOOT_CPUCACHE_ENTRIES, 1, 0} };
-+
-+/* internal cache of cache description objs */
-+static struct kmem_cache cache_cache = {
-+ .batchcount = 1,
-+ .limit = BOOT_CPUCACHE_ENTRIES,
-+ .shared = 1,
-+ .buffer_size = sizeof(struct kmem_cache),
-+ .name = "kmem_cache",
-+};
-+
-+#define BAD_ALIEN_MAGIC 0x01020304ul
-+
-+#ifdef CONFIG_LOCKDEP
-+
-+/*
-+ * Slab sometimes uses the kmalloc slabs to store the slab headers
-+ * for other slabs "off slab".
-+ * The locking for this is tricky in that it nests within the locks
-+ * of all other slabs in a few places; to deal with this special
-+ * locking we put on-slab caches into a separate lock-class.
-+ *
-+ * We set lock class for alien array caches which are up during init.
-+ * The lock annotation will be lost if all cpus of a node goes down and
-+ * then comes back up during hotplug
-+ */
-+static struct lock_class_key on_slab_l3_key;
-+static struct lock_class_key on_slab_alc_key;
-+
-+static inline void init_lock_keys(void)
-+
-+{
-+ int q;
-+ struct cache_sizes *s = malloc_sizes;
-+
-+ while (s->cs_size != ULONG_MAX) {
-+ for_each_node(q) {
-+ struct array_cache **alc;
-+ int r;
-+ struct kmem_list3 *l3 = s->cs_cachep->nodelists[q];
-+ if (!l3 || OFF_SLAB(s->cs_cachep))
-+ continue;
-+ lockdep_set_class(&l3->list_lock, &on_slab_l3_key);
-+ alc = l3->alien;
-+ /*
-+ * FIXME: This check for BAD_ALIEN_MAGIC
-+ * should go away when common slab code is taught to
-+ * work even without alien caches.
-+ * Currently, non NUMA code returns BAD_ALIEN_MAGIC
-+ * for alloc_alien_cache,
-+ */
-+ if (!alc || (unsigned long)alc == BAD_ALIEN_MAGIC)
-+ continue;
-+ for_each_node(r) {
-+ if (alc[r])
-+ lockdep_set_class(&alc[r]->lock,
-+ &on_slab_alc_key);
-+ }
-+ }
-+ s++;
-+ }
-+}
-+#else
-+static inline void init_lock_keys(void)
-+{
-+}
-+#endif
-+
-+/*
-+ * 1. Guard access to the cache-chain.
-+ * 2. Protect sanity of cpu_online_map against cpu hotplug events
-+ */
-+static DEFINE_MUTEX(cache_chain_mutex);
-+static struct list_head cache_chain;
-+
-+/*
-+ * chicken and egg problem: delay the per-cpu array allocation
-+ * until the general caches are up.
-+ */
-+static enum {
-+ NONE,
-+ PARTIAL_AC,
-+ PARTIAL_L3,
-+ FULL
-+} g_cpucache_up;
-+
-+/*
-+ * used by boot code to determine if it can use slab based allocator
-+ */
-+int slab_is_available(void)
-+{
-+ return g_cpucache_up == FULL;
-+}
-+
-+static DEFINE_PER_CPU(struct delayed_work, reap_work);
-+
-+static inline struct array_cache *cpu_cache_get(struct kmem_cache *cachep)
-+{
-+ return cachep->array[smp_processor_id()];
-+}
-+
-+static inline struct kmem_cache *__find_general_cachep(size_t size,
-+ gfp_t gfpflags)
-+{
-+ struct cache_sizes *csizep = malloc_sizes;
-+
-+#if DEBUG
-+ /* This happens if someone tries to call
-+ * kmem_cache_create(), or __kmalloc(), before
-+ * the generic caches are initialized.
-+ */
-+ BUG_ON(malloc_sizes[INDEX_AC].cs_cachep == NULL);
-+#endif
-+ while (size > csizep->cs_size)
-+ csizep++;
-+
-+ /*
-+ * Really subtle: The last entry with cs->cs_size==ULONG_MAX
-+ * has cs_{dma,}cachep==NULL. Thus no special case
-+ * for large kmalloc calls required.
-+ */
-+#ifdef CONFIG_ZONE_DMA
-+ if (unlikely(gfpflags & GFP_DMA))
-+ return csizep->cs_dmacachep;
-+#endif
-+ return csizep->cs_cachep;
-+}
-+
-+static struct kmem_cache *kmem_find_general_cachep(size_t size, gfp_t gfpflags)
-+{
-+ return __find_general_cachep(size, gfpflags);
-+}
-+
-+static size_t slab_mgmt_size(size_t nr_objs, size_t align)
-+{
-+ return ALIGN(sizeof(struct slab)+nr_objs*sizeof(kmem_bufctl_t), align);
-+}
-+
-+/*
-+ * Calculate the number of objects and left-over bytes for a given buffer size.
-+ */
-+static void cache_estimate(unsigned long gfporder, size_t buffer_size,
-+ size_t align, int flags, size_t *left_over,
-+ unsigned int *num)
-+{
-+ int nr_objs;
-+ size_t mgmt_size;
-+ size_t slab_size = PAGE_SIZE << gfporder;
-+
-+ /*
-+ * The slab management structure can be either off the slab or
-+ * on it. For the latter case, the memory allocated for a
-+ * slab is used for:
-+ *
-+ * - The struct slab
-+ * - One kmem_bufctl_t for each object
-+ * - Padding to respect alignment of @align
-+ * - @buffer_size bytes for each object
-+ *
-+ * If the slab management structure is off the slab, then the
-+ * alignment will already be calculated into the size. Because
-+ * the slabs are all pages aligned, the objects will be at the
-+ * correct alignment when allocated.
-+ */
-+ if (flags & CFLGS_OFF_SLAB) {
-+ mgmt_size = 0;
-+ nr_objs = slab_size / buffer_size;
-+
-+ if (nr_objs > SLAB_LIMIT)
-+ nr_objs = SLAB_LIMIT;
-+ } else {
-+ /*
-+ * Ignore padding for the initial guess. The padding
-+ * is at most @align-1 bytes, and @buffer_size is at
-+ * least @align. In the worst case, this result will
-+ * be one greater than the number of objects that fit
-+ * into the memory allocation when taking the padding
-+ * into account.
-+ */
-+ nr_objs = (slab_size - sizeof(struct slab)) /
-+ (buffer_size + sizeof(kmem_bufctl_t));
-+
-+ /*
-+ * This calculated number will be either the right
-+ * amount, or one greater than what we want.
-+ */
-+ if (slab_mgmt_size(nr_objs, align) + nr_objs*buffer_size
-+ > slab_size)
-+ nr_objs--;
-+
-+ if (nr_objs > SLAB_LIMIT)
-+ nr_objs = SLAB_LIMIT;
-+
-+ mgmt_size = slab_mgmt_size(nr_objs, align);
-+ }
-+ *num = nr_objs;
-+ *left_over = slab_size - nr_objs*buffer_size - mgmt_size;
-+}
-+
-+#define slab_error(cachep, msg) __slab_error(__FUNCTION__, cachep, msg)
-+
-+static void __slab_error(const char *function, struct kmem_cache *cachep,
-+ char *msg)
-+{
-+ printk(KERN_ERR "slab error in %s(): cache `%s': %s\n",
-+ function, cachep->name, msg);
-+ dump_stack();
-+}
-+
-+/*
-+ * By default on NUMA we use alien caches to stage the freeing of
-+ * objects allocated from other nodes. This causes massive memory
-+ * inefficiencies when using fake NUMA setup to split memory into a
-+ * large number of small nodes, so it can be disabled on the command
-+ * line
-+ */
-+
-+static int use_alien_caches __read_mostly = 1;
-+static int __init noaliencache_setup(char *s)
-+{
-+ use_alien_caches = 0;
-+ return 1;
-+}
-+__setup("noaliencache", noaliencache_setup);
-+
-+#ifdef CONFIG_NUMA
-+/*
-+ * Special reaping functions for NUMA systems called from cache_reap().
-+ * These take care of doing round robin flushing of alien caches (containing
-+ * objects freed on different nodes from which they were allocated) and the
-+ * flushing of remote pcps by calling drain_node_pages.
-+ */
-+static DEFINE_PER_CPU(unsigned long, reap_node);
-+
-+static void init_reap_node(int cpu)
-+{
-+ int node;
-+
-+ node = next_node(cpu_to_node(cpu), node_online_map);
-+ if (node == MAX_NUMNODES)
-+ node = first_node(node_online_map);
-+
-+ per_cpu(reap_node, cpu) = node;
-+}
-+
-+static void next_reap_node(void)
-+{
-+ int node = __get_cpu_var(reap_node);
-+
-+ node = next_node(node, node_online_map);
-+ if (unlikely(node >= MAX_NUMNODES))
-+ node = first_node(node_online_map);
-+ __get_cpu_var(reap_node) = node;
-+}
-+
-+#else
-+#define init_reap_node(cpu) do { } while (0)
-+#define next_reap_node(void) do { } while (0)
-+#endif
-+
-+/*
-+ * Initiate the reap timer running on the target CPU. We run at around 1 to 2Hz
-+ * via the workqueue/eventd.
-+ * Add the CPU number into the expiration time to minimize the possibility of
-+ * the CPUs getting into lockstep and contending for the global cache chain
-+ * lock.
-+ */
-+static void __devinit start_cpu_timer(int cpu)
-+{
-+ struct delayed_work *reap_work = &per_cpu(reap_work, cpu);
-+
-+ /*
-+ * When this gets called from do_initcalls via cpucache_init(),
-+ * init_workqueues() has already run, so keventd will be setup
-+ * at that time.
-+ */
-+ if (keventd_up() && reap_work->work.func == NULL) {
-+ init_reap_node(cpu);
-+ INIT_DELAYED_WORK(reap_work, cache_reap);
-+ schedule_delayed_work_on(cpu, reap_work,
-+ __round_jiffies_relative(HZ, cpu));
-+ }
-+}
-+
-+static struct array_cache *alloc_arraycache(int node, int entries,
-+ int batchcount)
-+{
-+ int memsize = sizeof(void *) * entries + sizeof(struct array_cache);
-+ struct array_cache *nc = NULL;
-+
-+ nc = kmalloc_node(memsize, GFP_KERNEL, node);
-+ if (nc) {
-+ nc->avail = 0;
-+ nc->limit = entries;
-+ nc->batchcount = batchcount;
-+ nc->touched = 0;
-+ spin_lock_init(&nc->lock);
-+ }
-+ return nc;
-+}
-+
-+/*
-+ * Transfer objects in one arraycache to another.
-+ * Locking must be handled by the caller.
-+ *
-+ * Return the number of entries transferred.
-+ */
-+static int transfer_objects(struct array_cache *to,
-+ struct array_cache *from, unsigned int max)
-+{
-+ /* Figure out how many entries to transfer */
-+ int nr = min(min(from->avail, max), to->limit - to->avail);
-+
-+ if (!nr)
-+ return 0;
-+
-+ memcpy(to->entry + to->avail, from->entry + from->avail -nr,
-+ sizeof(void *) *nr);
-+
-+ from->avail -= nr;
-+ to->avail += nr;
-+ to->touched = 1;
-+ return nr;
-+}
-+
-+#ifndef CONFIG_NUMA
-+
-+#define drain_alien_cache(cachep, alien) do { } while (0)
-+#define reap_alien(cachep, l3) do { } while (0)
-+
-+static inline struct array_cache **alloc_alien_cache(int node, int limit)
-+{
-+ return (struct array_cache **)BAD_ALIEN_MAGIC;
-+}
-+
-+static inline void free_alien_cache(struct array_cache **ac_ptr)
-+{
-+}
-+
-+static inline int cache_free_alien(struct kmem_cache *cachep, void *objp)
-+{
-+ return 0;
-+}
-+
-+static inline void *alternate_node_alloc(struct kmem_cache *cachep,
-+ gfp_t flags)
-+{
-+ return NULL;
-+}
-+
-+static inline void *____cache_alloc_node(struct kmem_cache *cachep,
-+ gfp_t flags, int nodeid)
-+{
-+ return NULL;
-+}
-+
-+#else /* CONFIG_NUMA */
-+
-+static void *____cache_alloc_node(struct kmem_cache *, gfp_t, int);
-+static void *alternate_node_alloc(struct kmem_cache *, gfp_t);
-+
-+static struct array_cache **alloc_alien_cache(int node, int limit)
-+{
-+ struct array_cache **ac_ptr;
-+ int memsize = sizeof(void *) * nr_node_ids;
-+ int i;
-+
-+ if (limit > 1)
-+ limit = 12;
-+ ac_ptr = kmalloc_node(memsize, GFP_KERNEL, node);
-+ if (ac_ptr) {
-+ for_each_node(i) {
-+ if (i == node || !node_online(i)) {
-+ ac_ptr[i] = NULL;
-+ continue;
-+ }
-+ ac_ptr[i] = alloc_arraycache(node, limit, 0xbaadf00d);
-+ if (!ac_ptr[i]) {
-+ for (i--; i <= 0; i--)
-+ kfree(ac_ptr[i]);
-+ kfree(ac_ptr);
-+ return NULL;
-+ }
-+ }
-+ }
-+ return ac_ptr;
-+}
-+
-+static void free_alien_cache(struct array_cache **ac_ptr)
-+{
-+ int i;
-+
-+ if (!ac_ptr)
-+ return;
-+ for_each_node(i)
-+ kfree(ac_ptr[i]);
-+ kfree(ac_ptr);
-+}
-+
-+static void __drain_alien_cache(struct kmem_cache *cachep,
-+ struct array_cache *ac, int node)
-+{
-+ struct kmem_list3 *rl3 = cachep->nodelists[node];
-+
-+ if (ac->avail) {
-+ spin_lock(&rl3->list_lock);
-+ /*
-+ * Stuff objects into the remote nodes shared array first.
-+ * That way we could avoid the overhead of putting the objects
-+ * into the free lists and getting them back later.
-+ */
-+ if (rl3->shared)
-+ transfer_objects(rl3->shared, ac, ac->limit);
-+
-+ free_block(cachep, ac->entry, ac->avail, node);
-+ ac->avail = 0;
-+ spin_unlock(&rl3->list_lock);
-+ }
-+}
-+
-+/*
-+ * Called from cache_reap() to regularly drain alien caches round robin.
-+ */
-+static void reap_alien(struct kmem_cache *cachep, struct kmem_list3 *l3)
-+{
-+ int node = __get_cpu_var(reap_node);
-+
-+ if (l3->alien) {
-+ struct array_cache *ac = l3->alien[node];
-+
-+ if (ac && ac->avail && spin_trylock_irq(&ac->lock)) {
-+ __drain_alien_cache(cachep, ac, node);
-+ spin_unlock_irq(&ac->lock);
-+ }
-+ }
-+}
-+
-+static void drain_alien_cache(struct kmem_cache *cachep,
-+ struct array_cache **alien)
-+{
-+ int i = 0;
-+ struct array_cache *ac;
-+ unsigned long flags;
-+
-+ for_each_online_node(i) {
-+ ac = alien[i];
-+ if (ac) {
-+ spin_lock_irqsave(&ac->lock, flags);
-+ __drain_alien_cache(cachep, ac, i);
-+ spin_unlock_irqrestore(&ac->lock, flags);
-+ }
-+ }
-+}
-+
-+static inline int cache_free_alien(struct kmem_cache *cachep, void *objp)
-+{
-+ struct slab *slabp = virt_to_slab(objp);
-+ int nodeid = slabp->nodeid;
-+ struct kmem_list3 *l3;
-+ struct array_cache *alien = NULL;
-+ int node;
-+
-+ node = numa_node_id();
-+
-+ /*
-+ * Make sure we are not freeing a object from another node to the array
-+ * cache on this cpu.
-+ */
-+ if (likely(slabp->nodeid == node))
-+ return 0;
-+
-+ l3 = cachep->nodelists[node];
-+ STATS_INC_NODEFREES(cachep);
-+ if (l3->alien && l3->alien[nodeid]) {
-+ alien = l3->alien[nodeid];
-+ spin_lock(&alien->lock);
-+ if (unlikely(alien->avail == alien->limit)) {
-+ STATS_INC_ACOVERFLOW(cachep);
-+ __drain_alien_cache(cachep, alien, nodeid);
-+ }
-+ alien->entry[alien->avail++] = objp;
-+ spin_unlock(&alien->lock);
-+ } else {
-+ spin_lock(&(cachep->nodelists[nodeid])->list_lock);
-+ free_block(cachep, &objp, 1, nodeid);
-+ spin_unlock(&(cachep->nodelists[nodeid])->list_lock);
-+ }
-+ return 1;
-+}
-+#endif
-+
-+static int __cpuinit cpuup_callback(struct notifier_block *nfb,
-+ unsigned long action, void *hcpu)
-+{
-+ long cpu = (long)hcpu;
-+ struct kmem_cache *cachep;
-+ struct kmem_list3 *l3 = NULL;
-+ int node = cpu_to_node(cpu);
-+ int memsize = sizeof(struct kmem_list3);
-+
-+ switch (action) {
-+ case CPU_LOCK_ACQUIRE:
-+ mutex_lock(&cache_chain_mutex);
-+ break;
-+ case CPU_UP_PREPARE:
-+ case CPU_UP_PREPARE_FROZEN:
-+ /*
-+ * We need to do this right in the beginning since
-+ * alloc_arraycache's are going to use this list.
-+ * kmalloc_node allows us to add the slab to the right
-+ * kmem_list3 and not this cpu's kmem_list3
-+ */
-+
-+ list_for_each_entry(cachep, &cache_chain, next) {
-+ /*
-+ * Set up the size64 kmemlist for cpu before we can
-+ * begin anything. Make sure some other cpu on this
-+ * node has not already allocated this
-+ */
-+ if (!cachep->nodelists[node]) {
-+ l3 = kmalloc_node(memsize, GFP_KERNEL, node);
-+ if (!l3)
-+ goto bad;
-+ kmem_list3_init(l3);
-+ l3->next_reap = jiffies + REAPTIMEOUT_LIST3 +
-+ ((unsigned long)cachep) % REAPTIMEOUT_LIST3;
-+
-+ /*
-+ * The l3s don't come and go as CPUs come and
-+ * go. cache_chain_mutex is sufficient
-+ * protection here.
-+ */
-+ cachep->nodelists[node] = l3;
-+ }
-+
-+ spin_lock_irq(&cachep->nodelists[node]->list_lock);
-+ cachep->nodelists[node]->free_limit =
-+ (1 + nr_cpus_node(node)) *
-+ cachep->batchcount + cachep->num;
-+ spin_unlock_irq(&cachep->nodelists[node]->list_lock);
-+ }
-+
-+ /*
-+ * Now we can go ahead with allocating the shared arrays and
-+ * array caches
-+ */
-+ list_for_each_entry(cachep, &cache_chain, next) {
-+ struct array_cache *nc;
-+ struct array_cache *shared = NULL;
-+ struct array_cache **alien = NULL;
-+
-+ nc = alloc_arraycache(node, cachep->limit,
-+ cachep->batchcount);
-+ if (!nc)
-+ goto bad;
-+ if (cachep->shared) {
-+ shared = alloc_arraycache(node,
-+ cachep->shared * cachep->batchcount,
-+ 0xbaadf00d);
-+ if (!shared)
-+ goto bad;
-+ }
-+ if (use_alien_caches) {
-+ alien = alloc_alien_cache(node, cachep->limit);
-+ if (!alien)
-+ goto bad;
-+ }
-+ cachep->array[cpu] = nc;
-+ l3 = cachep->nodelists[node];
-+ BUG_ON(!l3);
-+
-+ spin_lock_irq(&l3->list_lock);
-+ if (!l3->shared) {
-+ /*
-+ * We are serialised from CPU_DEAD or
-+ * CPU_UP_CANCELLED by the cpucontrol lock
-+ */
-+ l3->shared = shared;
-+ shared = NULL;
-+ }
-+#ifdef CONFIG_NUMA
-+ if (!l3->alien) {
-+ l3->alien = alien;
-+ alien = NULL;
-+ }
-+#endif
-+ spin_unlock_irq(&l3->list_lock);
-+ kfree(shared);
-+ free_alien_cache(alien);
-+ }
-+ break;
-+ case CPU_ONLINE:
-+ case CPU_ONLINE_FROZEN:
-+ start_cpu_timer(cpu);
-+ break;
-+#ifdef CONFIG_HOTPLUG_CPU
-+ case CPU_DOWN_PREPARE:
-+ case CPU_DOWN_PREPARE_FROZEN:
-+ /*
-+ * Shutdown cache reaper. Note that the cache_chain_mutex is
-+ * held so that if cache_reap() is invoked it cannot do
-+ * anything expensive but will only modify reap_work
-+ * and reschedule the timer.
-+ */
-+ cancel_rearming_delayed_work(&per_cpu(reap_work, cpu));
-+ /* Now the cache_reaper is guaranteed to be not running. */
-+ per_cpu(reap_work, cpu).work.func = NULL;
-+ break;
-+ case CPU_DOWN_FAILED:
-+ case CPU_DOWN_FAILED_FROZEN:
-+ start_cpu_timer(cpu);
-+ break;
-+ case CPU_DEAD:
-+ case CPU_DEAD_FROZEN:
-+ /*
-+ * Even if all the cpus of a node are down, we don't free the
-+ * kmem_list3 of any cache. This to avoid a race between
-+ * cpu_down, and a kmalloc allocation from another cpu for
-+ * memory from the node of the cpu going down. The list3
-+ * structure is usually allocated from kmem_cache_create() and
-+ * gets destroyed at kmem_cache_destroy().
-+ */
-+ /* fall thru */
-+#endif
-+ case CPU_UP_CANCELED:
-+ case CPU_UP_CANCELED_FROZEN:
-+ list_for_each_entry(cachep, &cache_chain, next) {
-+ struct array_cache *nc;
-+ struct array_cache *shared;
-+ struct array_cache **alien;
-+ cpumask_t mask;
-+
-+ mask = node_to_cpumask(node);
-+ /* cpu is dead; no one can alloc from it. */
-+ nc = cachep->array[cpu];
-+ cachep->array[cpu] = NULL;
-+ l3 = cachep->nodelists[node];
-+
-+ if (!l3)
-+ goto free_array_cache;
-+
-+ spin_lock_irq(&l3->list_lock);
-+
-+ /* Free limit for this kmem_list3 */
-+ l3->free_limit -= cachep->batchcount;
-+ if (nc)
-+ free_block(cachep, nc->entry, nc->avail, node);
-+
-+ if (!cpus_empty(mask)) {
-+ spin_unlock_irq(&l3->list_lock);
-+ goto free_array_cache;
-+ }
-+
-+ shared = l3->shared;
-+ if (shared) {
-+ free_block(cachep, shared->entry,
-+ shared->avail, node);
-+ l3->shared = NULL;
-+ }
-+
-+ alien = l3->alien;
-+ l3->alien = NULL;
-+
-+ spin_unlock_irq(&l3->list_lock);
-+
-+ kfree(shared);
-+ if (alien) {
-+ drain_alien_cache(cachep, alien);
-+ free_alien_cache(alien);
-+ }
-+free_array_cache:
-+ kfree(nc);
-+ }
-+ /*
-+ * In the previous loop, all the objects were freed to
-+ * the respective cache's slabs, now we can go ahead and
-+ * shrink each nodelist to its limit.
-+ */
-+ list_for_each_entry(cachep, &cache_chain, next) {
-+ l3 = cachep->nodelists[node];
-+ if (!l3)
-+ continue;
-+ drain_freelist(cachep, l3, l3->free_objects);
-+ }
-+ break;
-+ case CPU_LOCK_RELEASE:
-+ mutex_unlock(&cache_chain_mutex);
-+ break;
-+ }
-+ return NOTIFY_OK;
-+bad:
-+ return NOTIFY_BAD;
-+}
-+
-+static struct notifier_block __cpuinitdata cpucache_notifier = {
-+ &cpuup_callback, NULL, 0
-+};
-+
-+/*
-+ * swap the static kmem_list3 with kmalloced memory
-+ */
-+static void init_list(struct kmem_cache *cachep, struct kmem_list3 *list,
-+ int nodeid)
-+{
-+ struct kmem_list3 *ptr;
-+
-+ ptr = kmalloc_node(sizeof(struct kmem_list3), GFP_KERNEL, nodeid);
-+ BUG_ON(!ptr);
-+
-+ local_irq_disable();
-+ memcpy(ptr, list, sizeof(struct kmem_list3));
-+ /*
-+ * Do not assume that spinlocks can be initialized via memcpy:
-+ */
-+ spin_lock_init(&ptr->list_lock);
-+
-+ MAKE_ALL_LISTS(cachep, ptr, nodeid);
-+ cachep->nodelists[nodeid] = ptr;
-+ local_irq_enable();
-+}
-+
-+/*
-+ * Initialisation. Called after the page allocator have been initialised and
-+ * before smp_init().
-+ */
-+void __init kmem_cache_init(void)
-+{
-+ size_t left_over;
-+ struct cache_sizes *sizes;
-+ struct cache_names *names;
-+ int i;
-+ int order;
-+ int node;
-+
-+ if (num_possible_nodes() == 1)
-+ use_alien_caches = 0;
-+
-+ for (i = 0; i < NUM_INIT_LISTS; i++) {
-+ kmem_list3_init(&initkmem_list3[i]);
-+ if (i < MAX_NUMNODES)
-+ cache_cache.nodelists[i] = NULL;
-+ }
-+
-+ /*
-+ * Fragmentation resistance on low memory - only use bigger
-+ * page orders on machines with more than 32MB of memory.
-+ */
-+ if (num_physpages > (32 << 20) >> PAGE_SHIFT)
-+ slab_break_gfp_order = BREAK_GFP_ORDER_HI;
-+
-+ /* Bootstrap is tricky, because several objects are allocated
-+ * from caches that do not exist yet:
-+ * 1) initialize the cache_cache cache: it contains the struct
-+ * kmem_cache structures of all caches, except cache_cache itself:
-+ * cache_cache is statically allocated.
-+ * Initially an __init data area is used for the head array and the
-+ * kmem_list3 structures, it's replaced with a kmalloc allocated
-+ * array at the end of the bootstrap.
-+ * 2) Create the first kmalloc cache.
-+ * The struct kmem_cache for the new cache is allocated normally.
-+ * An __init data area is used for the head array.
-+ * 3) Create the remaining kmalloc caches, with minimally sized
-+ * head arrays.
-+ * 4) Replace the __init data head arrays for cache_cache and the first
-+ * kmalloc cache with kmalloc allocated arrays.
-+ * 5) Replace the __init data for kmem_list3 for cache_cache and
-+ * the other cache's with kmalloc allocated memory.
-+ * 6) Resize the head arrays of the kmalloc caches to their final sizes.
-+ */
-+
-+ node = numa_node_id();
-+
-+ /* 1) create the cache_cache */
-+ INIT_LIST_HEAD(&cache_chain);
-+ list_add(&cache_cache.next, &cache_chain);
-+ cache_cache.colour_off = cache_line_size();
-+ cache_cache.array[smp_processor_id()] = &initarray_cache.cache;
-+ cache_cache.nodelists[node] = &initkmem_list3[CACHE_CACHE];
-+
-+ /*
-+ * struct kmem_cache size depends on nr_node_ids, which
-+ * can be less than MAX_NUMNODES.
-+ */
-+ cache_cache.buffer_size = offsetof(struct kmem_cache, nodelists) +
-+ nr_node_ids * sizeof(struct kmem_list3 *);
-+#if DEBUG
-+ cache_cache.obj_size = cache_cache.buffer_size;
-+#endif
-+ cache_cache.buffer_size = ALIGN(cache_cache.buffer_size,
-+ cache_line_size());
-+ cache_cache.reciprocal_buffer_size =
-+ reciprocal_value(cache_cache.buffer_size);
-+
-+ for (order = 0; order < MAX_ORDER; order++) {
-+ cache_estimate(order, cache_cache.buffer_size,
-+ cache_line_size(), 0, &left_over, &cache_cache.num);
-+ if (cache_cache.num)
-+ break;
-+ }
-+ BUG_ON(!cache_cache.num);
-+ cache_cache.gfporder = order;
-+ cache_cache.colour = left_over / cache_cache.colour_off;
-+ cache_cache.slab_size = ALIGN(cache_cache.num * sizeof(kmem_bufctl_t) +
-+ sizeof(struct slab), cache_line_size());
-+
-+ /* 2+3) create the kmalloc caches */
-+ sizes = malloc_sizes;
-+ names = cache_names;
-+
-+ /*
-+ * Initialize the caches that provide memory for the array cache and the
-+ * kmem_list3 structures first. Without this, further allocations will
-+ * bug.
-+ */
-+
-+ sizes[INDEX_AC].cs_cachep = kmem_cache_create(names[INDEX_AC].name,
-+ sizes[INDEX_AC].cs_size,
-+ ARCH_KMALLOC_MINALIGN,
-+ ARCH_KMALLOC_FLAGS|SLAB_PANIC,
-+ NULL, NULL);
-+
-+ if (INDEX_AC != INDEX_L3) {
-+ sizes[INDEX_L3].cs_cachep =
-+ kmem_cache_create(names[INDEX_L3].name,
-+ sizes[INDEX_L3].cs_size,
-+ ARCH_KMALLOC_MINALIGN,
-+ ARCH_KMALLOC_FLAGS|SLAB_PANIC,
-+ NULL, NULL);
-+ }
-+
-+ slab_early_init = 0;
-+
-+ while (sizes->cs_size != ULONG_MAX) {
-+ /*
-+ * For performance, all the general caches are L1 aligned.
-+ * This should be particularly beneficial on SMP boxes, as it
-+ * eliminates "false sharing".
-+ * Note for systems short on memory removing the alignment will
-+ * allow tighter packing of the smaller caches.
-+ */
-+ if (!sizes->cs_cachep) {
-+ sizes->cs_cachep = kmem_cache_create(names->name,
-+ sizes->cs_size,
-+ ARCH_KMALLOC_MINALIGN,
-+ ARCH_KMALLOC_FLAGS|SLAB_PANIC,
-+ NULL, NULL);
-+ }
-+#ifdef CONFIG_ZONE_DMA
-+ sizes->cs_dmacachep = kmem_cache_create(
-+ names->name_dma,
-+ sizes->cs_size,
-+ ARCH_KMALLOC_MINALIGN,
-+ ARCH_KMALLOC_FLAGS|SLAB_CACHE_DMA|
-+ SLAB_PANIC,
-+ NULL, NULL);
-+#endif
-+ sizes++;
-+ names++;
-+ }
-+ /* 4) Replace the bootstrap head arrays */
-+ {
-+ struct array_cache *ptr;
-+
-+ ptr = kmalloc(sizeof(struct arraycache_init), GFP_KERNEL);
-+
-+ local_irq_disable();
-+ BUG_ON(cpu_cache_get(&cache_cache) != &initarray_cache.cache);
-+ memcpy(ptr, cpu_cache_get(&cache_cache),
-+ sizeof(struct arraycache_init));
-+ /*
-+ * Do not assume that spinlocks can be initialized via memcpy:
-+ */
-+ spin_lock_init(&ptr->lock);
-+
-+ cache_cache.array[smp_processor_id()] = ptr;
-+ local_irq_enable();
-+
-+ ptr = kmalloc(sizeof(struct arraycache_init), GFP_KERNEL);
-+
-+ local_irq_disable();
-+ BUG_ON(cpu_cache_get(malloc_sizes[INDEX_AC].cs_cachep)
-+ != &initarray_generic.cache);
-+ memcpy(ptr, cpu_cache_get(malloc_sizes[INDEX_AC].cs_cachep),
-+ sizeof(struct arraycache_init));
-+ /*
-+ * Do not assume that spinlocks can be initialized via memcpy:
-+ */
-+ spin_lock_init(&ptr->lock);
-+
-+ malloc_sizes[INDEX_AC].cs_cachep->array[smp_processor_id()] =
-+ ptr;
-+ local_irq_enable();
-+ }
-+ /* 5) Replace the bootstrap kmem_list3's */
-+ {
-+ int nid;
-+
-+ /* Replace the static kmem_list3 structures for the boot cpu */
-+ init_list(&cache_cache, &initkmem_list3[CACHE_CACHE], node);
-+
-+ for_each_online_node(nid) {
-+ init_list(malloc_sizes[INDEX_AC].cs_cachep,
-+ &initkmem_list3[SIZE_AC + nid], nid);
-+
-+ if (INDEX_AC != INDEX_L3) {
-+ init_list(malloc_sizes[INDEX_L3].cs_cachep,
-+ &initkmem_list3[SIZE_L3 + nid], nid);
-+ }
-+ }
-+ }
-+
-+ /* 6) resize the head arrays to their final sizes */
-+ {
-+ struct kmem_cache *cachep;
-+ mutex_lock(&cache_chain_mutex);
-+ list_for_each_entry(cachep, &cache_chain, next)
-+ if (enable_cpucache(cachep))
-+ BUG();
-+ mutex_unlock(&cache_chain_mutex);
-+ }
-+
-+ /* Annotate slab for lockdep -- annotate the malloc caches */
-+ init_lock_keys();
-+
-+
-+ /* Done! */
-+ g_cpucache_up = FULL;
-+
-+ /*
-+ * Register a cpu startup notifier callback that initializes
-+ * cpu_cache_get for all new cpus
-+ */
-+ register_cpu_notifier(&cpucache_notifier);
-+
-+ /*
-+ * The reap timers are started later, with a module init call: That part
-+ * of the kernel is not yet operational.
-+ */
-+}
-+
-+static int __init cpucache_init(void)
-+{
-+ int cpu;
-+
-+ /*
-+ * Register the timers that return unneeded pages to the page allocator
-+ */
-+ for_each_online_cpu(cpu)
-+ start_cpu_timer(cpu);
-+ return 0;
-+}
-+__initcall(cpucache_init);
-+
-+/*
-+ * Interface to system's page allocator. No need to hold the cache-lock.
-+ *
-+ * If we requested dmaable memory, we will get it. Even if we
-+ * did not request dmaable memory, we might get it, but that
-+ * would be relatively rare and ignorable.
-+ */
-+static void *kmem_getpages(struct kmem_cache *cachep, gfp_t flags, int nodeid)
-+{
-+ struct page *page;
-+ int nr_pages;
-+ int i;
-+
-+#ifndef CONFIG_MMU
-+ /*
-+ * Nommu uses slab's for process anonymous memory allocations, and thus
-+ * requires __GFP_COMP to properly refcount higher order allocations
-+ */
-+ flags |= __GFP_COMP;
-+#endif
-+
-+ flags |= cachep->gfpflags;
-+
-+ page = alloc_pages_node(nodeid, flags, cachep->gfporder);
-+ if (!page)
-+ return NULL;
-+
-+ nr_pages = (1 << cachep->gfporder);
-+ if (cachep->flags & SLAB_RECLAIM_ACCOUNT)
-+ add_zone_page_state(page_zone(page),
-+ NR_SLAB_RECLAIMABLE, nr_pages);
-+ else
-+ add_zone_page_state(page_zone(page),
-+ NR_SLAB_UNRECLAIMABLE, nr_pages);
-+ for (i = 0; i < nr_pages; i++)
-+ __SetPageSlab(page + i);
-+ return page_address(page);
-+}
-+
-+/*
-+ * Interface to system's page release.
-+ */
-+static void kmem_freepages(struct kmem_cache *cachep, void *addr)
-+{
-+ unsigned long i = (1 << cachep->gfporder);
-+ struct page *page = virt_to_page(addr);
-+ const unsigned long nr_freed = i;
-+
-+ if (cachep->flags & SLAB_RECLAIM_ACCOUNT)
-+ sub_zone_page_state(page_zone(page),
-+ NR_SLAB_RECLAIMABLE, nr_freed);
-+ else
-+ sub_zone_page_state(page_zone(page),
-+ NR_SLAB_UNRECLAIMABLE, nr_freed);
-+ while (i--) {
-+ BUG_ON(!PageSlab(page));
-+ __ClearPageSlab(page);
-+ page++;
-+ }
-+ if (current->reclaim_state)
-+ current->reclaim_state->reclaimed_slab += nr_freed;
-+ free_pages((unsigned long)addr, cachep->gfporder);
-+}
-+
-+static void kmem_rcu_free(struct rcu_head *head)
-+{
-+ struct slab_rcu *slab_rcu = (struct slab_rcu *)head;
-+ struct kmem_cache *cachep = slab_rcu->cachep;
-+
-+ kmem_freepages(cachep, slab_rcu->addr);
-+ if (OFF_SLAB(cachep))
-+ kmem_cache_free(cachep->slabp_cache, slab_rcu);
-+}
-+
-+#if DEBUG
-+
-+#ifdef CONFIG_DEBUG_PAGEALLOC
-+static void store_stackinfo(struct kmem_cache *cachep, unsigned long *addr,
-+ unsigned long caller)
-+{
-+ int size = obj_size(cachep);
-+
-+ addr = (unsigned long *)&((char *)addr)[obj_offset(cachep)];
-+
-+ if (size < 5 * sizeof(unsigned long))
-+ return;
-+
-+ *addr++ = 0x12345678;
-+ *addr++ = caller;
-+ *addr++ = smp_processor_id();
-+ size -= 3 * sizeof(unsigned long);
-+ {
-+ unsigned long *sptr = &caller;
-+ unsigned long svalue;
-+
-+ while (!kstack_end(sptr)) {
-+ svalue = *sptr++;
-+ if (kernel_text_address(svalue)) {
-+ *addr++ = svalue;
-+ size -= sizeof(unsigned long);
-+ if (size <= sizeof(unsigned long))
-+ break;
-+ }
-+ }
-+
-+ }
-+ *addr++ = 0x87654321;
-+}
-+#endif
-+
-+static void poison_obj(struct kmem_cache *cachep, void *addr, unsigned char val)
-+{
-+ int size = obj_size(cachep);
-+ addr = &((char *)addr)[obj_offset(cachep)];
-+
-+ memset(addr, val, size);
-+ *(unsigned char *)(addr + size - 1) = POISON_END;
-+}
-+
-+static void dump_line(char *data, int offset, int limit)
-+{
-+ int i;
-+ unsigned char error = 0;
-+ int bad_count = 0;
-+
-+ printk(KERN_ERR "%03x:", offset);
-+ for (i = 0; i < limit; i++) {
-+ if (data[offset + i] != POISON_FREE) {
-+ error = data[offset + i];
-+ bad_count++;
-+ }
-+ printk(" %02x", (unsigned char)data[offset + i]);
-+ }
-+ printk("\n");
-+
-+ if (bad_count == 1) {
-+ error ^= POISON_FREE;
-+ if (!(error & (error - 1))) {
-+ printk(KERN_ERR "Single bit error detected. Probably "
-+ "bad RAM.\n");
-+#ifdef CONFIG_X86
-+ printk(KERN_ERR "Run memtest86+ or a similar memory "
-+ "test tool.\n");
-+#else
-+ printk(KERN_ERR "Run a memory test tool.\n");
-+#endif
-+ }
-+ }
-+}
-+#endif
-+
-+#if DEBUG
-+
-+static void print_objinfo(struct kmem_cache *cachep, void *objp, int lines)
-+{
-+ int i, size;
-+ char *realobj;
-+
-+ if (cachep->flags & SLAB_RED_ZONE) {
-+ printk(KERN_ERR "Redzone: 0x%llx/0x%llx.\n",
-+ *dbg_redzone1(cachep, objp),
-+ *dbg_redzone2(cachep, objp));
-+ }
-+
-+ if (cachep->flags & SLAB_STORE_USER) {
-+ printk(KERN_ERR "Last user: [<%p>]",
-+ *dbg_userword(cachep, objp));
-+ print_symbol("(%s)",
-+ (unsigned long)*dbg_userword(cachep, objp));
-+ printk("\n");
-+ }
-+ realobj = (char *)objp + obj_offset(cachep);
-+ size = obj_size(cachep);
-+ for (i = 0; i < size && lines; i += 16, lines--) {
-+ int limit;
-+ limit = 16;
-+ if (i + limit > size)
-+ limit = size - i;
-+ dump_line(realobj, i, limit);
-+ }
-+}
-+
-+static void check_poison_obj(struct kmem_cache *cachep, void *objp)
-+{
-+ char *realobj;
-+ int size, i;
-+ int lines = 0;
-+
-+ realobj = (char *)objp + obj_offset(cachep);
-+ size = obj_size(cachep);
-+
-+ for (i = 0; i < size; i++) {
-+ char exp = POISON_FREE;
-+ if (i == size - 1)
-+ exp = POISON_END;
-+ if (realobj[i] != exp) {
-+ int limit;
-+ /* Mismatch ! */
-+ /* Print header */
-+ if (lines == 0) {
-+ printk(KERN_ERR
-+ "Slab corruption: %s start=%p, len=%d\n",
-+ cachep->name, realobj, size);
-+ print_objinfo(cachep, objp, 0);
-+ }
-+ /* Hexdump the affected line */
-+ i = (i / 16) * 16;
-+ limit = 16;
-+ if (i + limit > size)
-+ limit = size - i;
-+ dump_line(realobj, i, limit);
-+ i += 16;
-+ lines++;
-+ /* Limit to 5 lines */
-+ if (lines > 5)
-+ break;
-+ }
-+ }
-+ if (lines != 0) {
-+ /* Print some data about the neighboring objects, if they
-+ * exist:
-+ */
-+ struct slab *slabp = virt_to_slab(objp);
-+ unsigned int objnr;
-+
-+ objnr = obj_to_index(cachep, slabp, objp);
-+ if (objnr) {
-+ objp = index_to_obj(cachep, slabp, objnr - 1);
-+ realobj = (char *)objp + obj_offset(cachep);
-+ printk(KERN_ERR "Prev obj: start=%p, len=%d\n",
-+ realobj, size);
-+ print_objinfo(cachep, objp, 2);
-+ }
-+ if (objnr + 1 < cachep->num) {
-+ objp = index_to_obj(cachep, slabp, objnr + 1);
-+ realobj = (char *)objp + obj_offset(cachep);
-+ printk(KERN_ERR "Next obj: start=%p, len=%d\n",
-+ realobj, size);
-+ print_objinfo(cachep, objp, 2);
-+ }
-+ }
-+}
-+#endif
-+
-+#if DEBUG
-+/**
-+ * slab_destroy_objs - destroy a slab and its objects
-+ * @cachep: cache pointer being destroyed
-+ * @slabp: slab pointer being destroyed
-+ *
-+ * Call the registered destructor for each object in a slab that is being
-+ * destroyed.
-+ */
-+static void slab_destroy_objs(struct kmem_cache *cachep, struct slab *slabp)
-+{
-+ int i;
-+ for (i = 0; i < cachep->num; i++) {
-+ void *objp = index_to_obj(cachep, slabp, i);
-+
-+ if (cachep->flags & SLAB_POISON) {
-+#ifdef CONFIG_DEBUG_PAGEALLOC
-+ if (cachep->buffer_size % PAGE_SIZE == 0 &&
-+ OFF_SLAB(cachep))
-+ kernel_map_pages(virt_to_page(objp),
-+ cachep->buffer_size / PAGE_SIZE, 1);
-+ else
-+ check_poison_obj(cachep, objp);
-+#else
-+ check_poison_obj(cachep, objp);
-+#endif
-+ }
-+ if (cachep->flags & SLAB_RED_ZONE) {
-+ if (*dbg_redzone1(cachep, objp) != RED_INACTIVE)
-+ slab_error(cachep, "start of a freed object "
-+ "was overwritten");
-+ if (*dbg_redzone2(cachep, objp) != RED_INACTIVE)
-+ slab_error(cachep, "end of a freed object "
-+ "was overwritten");
-+ }
-+ }
-+}
-+#else
-+static void slab_destroy_objs(struct kmem_cache *cachep, struct slab *slabp)
-+{
-+}
-+#endif
-+
-+/**
-+ * slab_destroy - destroy and release all objects in a slab
-+ * @cachep: cache pointer being destroyed
-+ * @slabp: slab pointer being destroyed
-+ *
-+ * Destroy all the objs in a slab, and release the mem back to the system.
-+ * Before calling the slab must have been unlinked from the cache. The
-+ * cache-lock is not held/needed.
-+ */
-+static void slab_destroy(struct kmem_cache *cachep, struct slab *slabp)
-+{
-+ void *addr = slabp->s_mem - slabp->colouroff;
-+
-+ slab_destroy_objs(cachep, slabp);
-+ if (unlikely(cachep->flags & SLAB_DESTROY_BY_RCU)) {
-+ struct slab_rcu *slab_rcu;
-+
-+ slab_rcu = (struct slab_rcu *)slabp;
-+ slab_rcu->cachep = cachep;
-+ slab_rcu->addr = addr;
-+ call_rcu(&slab_rcu->head, kmem_rcu_free);
-+ } else {
-+ kmem_freepages(cachep, addr);
-+ if (OFF_SLAB(cachep))
-+ kmem_cache_free(cachep->slabp_cache, slabp);
-+ }
-+}
-+
-+/*
-+ * For setting up all the kmem_list3s for cache whose buffer_size is same as
-+ * size of kmem_list3.
-+ */
-+static void __init set_up_list3s(struct kmem_cache *cachep, int index)
-+{
-+ int node;
-+
-+ for_each_online_node(node) {
-+ cachep->nodelists[node] = &initkmem_list3[index + node];
-+ cachep->nodelists[node]->next_reap = jiffies +
-+ REAPTIMEOUT_LIST3 +
-+ ((unsigned long)cachep) % REAPTIMEOUT_LIST3;
-+ }
-+}
-+
-+static void __kmem_cache_destroy(struct kmem_cache *cachep)
-+{
-+ int i;
-+ struct kmem_list3 *l3;
-+
-+ for_each_online_cpu(i)
-+ kfree(cachep->array[i]);
-+
-+ /* NUMA: free the list3 structures */
-+ for_each_online_node(i) {
-+ l3 = cachep->nodelists[i];
-+ if (l3) {
-+ kfree(l3->shared);
-+ free_alien_cache(l3->alien);
-+ kfree(l3);
-+ }
-+ }
-+ kmem_cache_free(&cache_cache, cachep);
-+}
-+
-+
-+/**
-+ * calculate_slab_order - calculate size (page order) of slabs
-+ * @cachep: pointer to the cache that is being created
-+ * @size: size of objects to be created in this cache.
-+ * @align: required alignment for the objects.
-+ * @flags: slab allocation flags
-+ *
-+ * Also calculates the number of objects per slab.
-+ *
-+ * This could be made much more intelligent. For now, try to avoid using
-+ * high order pages for slabs. When the gfp() functions are more friendly
-+ * towards high-order requests, this should be changed.
-+ */
-+static size_t calculate_slab_order(struct kmem_cache *cachep,
-+ size_t size, size_t align, unsigned long flags)
-+{
-+ unsigned long offslab_limit;
-+ size_t left_over = 0;
-+ int gfporder;
-+
-+ for (gfporder = 0; gfporder <= KMALLOC_MAX_ORDER; gfporder++) {
-+ unsigned int num;
-+ size_t remainder;
-+
-+ cache_estimate(gfporder, size, align, flags, &remainder, &num);
-+ if (!num)
-+ continue;
-+
-+ if (flags & CFLGS_OFF_SLAB) {
-+ /*
-+ * Max number of objs-per-slab for caches which
-+ * use off-slab slabs. Needed to avoid a possible
-+ * looping condition in cache_grow().
-+ */
-+ offslab_limit = size - sizeof(struct slab);
-+ offslab_limit /= sizeof(kmem_bufctl_t);
-+
-+ if (num > offslab_limit)
-+ break;
-+ }
-+
-+ /* Found something acceptable - save it away */
-+ cachep->num = num;
-+ cachep->gfporder = gfporder;
-+ left_over = remainder;
-+
-+ /*
-+ * A VFS-reclaimable slab tends to have most allocations
-+ * as GFP_NOFS and we really don't want to have to be allocating
-+ * higher-order pages when we are unable to shrink dcache.
-+ */
-+ if (flags & SLAB_RECLAIM_ACCOUNT)
-+ break;
-+
-+ /*
-+ * Large number of objects is good, but very large slabs are
-+ * currently bad for the gfp()s.
-+ */
-+ if (gfporder >= slab_break_gfp_order)
-+ break;
-+
-+ /*
-+ * Acceptable internal fragmentation?
-+ */
-+ if (left_over * 8 <= (PAGE_SIZE << gfporder))
-+ break;
-+ }
-+ return left_over;
-+}
-+
-+static int __init_refok setup_cpu_cache(struct kmem_cache *cachep)
-+{
-+ if (g_cpucache_up == FULL)
-+ return enable_cpucache(cachep);
-+
-+ if (g_cpucache_up == NONE) {
-+ /*
-+ * Note: the first kmem_cache_create must create the cache
-+ * that's used by kmalloc(24), otherwise the creation of
-+ * further caches will BUG().
-+ */
-+ cachep->array[smp_processor_id()] = &initarray_generic.cache;
-+
-+ /*
-+ * If the cache that's used by kmalloc(sizeof(kmem_list3)) is
-+ * the first cache, then we need to set up all its list3s,
-+ * otherwise the creation of further caches will BUG().
-+ */
-+ set_up_list3s(cachep, SIZE_AC);
-+ if (INDEX_AC == INDEX_L3)
-+ g_cpucache_up = PARTIAL_L3;
-+ else
-+ g_cpucache_up = PARTIAL_AC;
-+ } else {
-+ cachep->array[smp_processor_id()] =
-+ kmalloc(sizeof(struct arraycache_init), GFP_KERNEL);
-+
-+ if (g_cpucache_up == PARTIAL_AC) {
-+ set_up_list3s(cachep, SIZE_L3);
-+ g_cpucache_up = PARTIAL_L3;
-+ } else {
-+ int node;
-+ for_each_online_node(node) {
-+ cachep->nodelists[node] =
-+ kmalloc_node(sizeof(struct kmem_list3),
-+ GFP_KERNEL, node);
-+ BUG_ON(!cachep->nodelists[node]);
-+ kmem_list3_init(cachep->nodelists[node]);
-+ }
-+ }
-+ }
-+ cachep->nodelists[numa_node_id()]->next_reap =
-+ jiffies + REAPTIMEOUT_LIST3 +
-+ ((unsigned long)cachep) % REAPTIMEOUT_LIST3;
-+
-+ cpu_cache_get(cachep)->avail = 0;
-+ cpu_cache_get(cachep)->limit = BOOT_CPUCACHE_ENTRIES;
-+ cpu_cache_get(cachep)->batchcount = 1;
-+ cpu_cache_get(cachep)->touched = 0;
-+ cachep->batchcount = 1;
-+ cachep->limit = BOOT_CPUCACHE_ENTRIES;
-+ return 0;
-+}
-+
-+/**
-+ * kmem_cache_create - Create a cache.
-+ * @name: A string which is used in /proc/slabinfo to identify this cache.
-+ * @size: The size of objects to be created in this cache.
-+ * @align: The required alignment for the objects.
-+ * @flags: SLAB flags
-+ * @ctor: A constructor for the objects.
-+ * @dtor: A destructor for the objects (not implemented anymore).
-+ *
-+ * Returns a ptr to the cache on success, NULL on failure.
-+ * Cannot be called within a int, but can be interrupted.
-+ * The @ctor is run when new pages are allocated by the cache
-+ * and the @dtor is run before the pages are handed back.
-+ *
-+ * @name must be valid until the cache is destroyed. This implies that
-+ * the module calling this has to destroy the cache before getting unloaded.
-+ *
-+ * The flags are
-+ *
-+ * %SLAB_POISON - Poison the slab with a known test pattern (a5a5a5a5)
-+ * to catch references to uninitialised memory.
-+ *
-+ * %SLAB_RED_ZONE - Insert `Red' zones around the allocated memory to check
-+ * for buffer overruns.
-+ *
-+ * %SLAB_HWCACHE_ALIGN - Align the objects in this cache to a hardware
-+ * cacheline. This can be beneficial if you're counting cycles as closely
-+ * as davem.
-+ */
-+struct kmem_cache *
-+kmem_cache_create (const char *name, size_t size, size_t align,
-+ unsigned long flags,
-+ void (*ctor)(void*, struct kmem_cache *, unsigned long),
-+ void (*dtor)(void*, struct kmem_cache *, unsigned long))
-+{
-+ size_t left_over, slab_size, ralign;
-+ struct kmem_cache *cachep = NULL, *pc;
-+
-+ /*
-+ * Sanity checks... these are all serious usage bugs.
-+ */
-+ if (!name || in_interrupt() || (size < BYTES_PER_WORD) ||
-+ size > KMALLOC_MAX_SIZE || dtor) {
-+ printk(KERN_ERR "%s: Early error in slab %s\n", __FUNCTION__,
-+ name);
-+ BUG();
-+ }
-+
-+ /*
-+ * We use cache_chain_mutex to ensure a consistent view of
-+ * cpu_online_map as well. Please see cpuup_callback
-+ */
-+ mutex_lock(&cache_chain_mutex);
-+
-+ list_for_each_entry(pc, &cache_chain, next) {
-+ char tmp;
-+ int res;
-+
-+ /*
-+ * This happens when the module gets unloaded and doesn't
-+ * destroy its slab cache and no-one else reuses the vmalloc
-+ * area of the module. Print a warning.
-+ */
-+ res = probe_kernel_address(pc->name, tmp);
-+ if (res) {
-+ printk(KERN_ERR
-+ "SLAB: cache with size %d has lost its name\n",
-+ pc->buffer_size);
-+ continue;
-+ }
-+
-+ if (!strcmp(pc->name, name)) {
-+ printk(KERN_ERR
-+ "kmem_cache_create: duplicate cache %s\n", name);
-+ dump_stack();
-+ goto oops;
-+ }
-+ }
-+
-+#if DEBUG
-+ WARN_ON(strchr(name, ' ')); /* It confuses parsers */
-+#if FORCED_DEBUG
-+ /*
-+ * Enable redzoning and last user accounting, except for caches with
-+ * large objects, if the increased size would increase the object size
-+ * above the next power of two: caches with object sizes just above a
-+ * power of two have a significant amount of internal fragmentation.
-+ */
-+ if (size < 4096 || fls(size - 1) == fls(size-1 + REDZONE_ALIGN +
-+ 2 * sizeof(unsigned long long)))
-+ flags |= SLAB_RED_ZONE | SLAB_STORE_USER;
-+ if (!(flags & SLAB_DESTROY_BY_RCU))
-+ flags |= SLAB_POISON;
-+#endif
-+ if (flags & SLAB_DESTROY_BY_RCU)
-+ BUG_ON(flags & SLAB_POISON);
-+#endif
-+ /*
-+ * Always checks flags, a caller might be expecting debug support which
-+ * isn't available.
-+ */
-+ BUG_ON(flags & ~CREATE_MASK);
-+
-+ /*
-+ * Check that size is in terms of words. This is needed to avoid
-+ * unaligned accesses for some archs when redzoning is used, and makes
-+ * sure any on-slab bufctl's are also correctly aligned.
-+ */
-+ if (size & (BYTES_PER_WORD - 1)) {
-+ size += (BYTES_PER_WORD - 1);
-+ size &= ~(BYTES_PER_WORD - 1);
-+ }
-+
-+ /* calculate the final buffer alignment: */
-+
-+ /* 1) arch recommendation: can be overridden for debug */
-+ if (flags & SLAB_HWCACHE_ALIGN) {
-+ /*
-+ * Default alignment: as specified by the arch code. Except if
-+ * an object is really small, then squeeze multiple objects into
-+ * one cacheline.
-+ */
-+ ralign = cache_line_size();
-+ while (size <= ralign / 2)
-+ ralign /= 2;
-+ } else {
-+ ralign = BYTES_PER_WORD;
-+ }
-+
-+ /*
-+ * Redzoning and user store require word alignment or possibly larger.
-+ * Note this will be overridden by architecture or caller mandated
-+ * alignment if either is greater than BYTES_PER_WORD.
-+ */
-+ if (flags & SLAB_STORE_USER)
-+ ralign = BYTES_PER_WORD;
-+
-+ if (flags & SLAB_RED_ZONE) {
-+ ralign = REDZONE_ALIGN;
-+ /* If redzoning, ensure that the second redzone is suitably
-+ * aligned, by adjusting the object size accordingly. */
-+ size += REDZONE_ALIGN - 1;
-+ size &= ~(REDZONE_ALIGN - 1);
-+ }
-+
-+ /* 2) arch mandated alignment */
-+ if (ralign < ARCH_SLAB_MINALIGN) {
-+ ralign = ARCH_SLAB_MINALIGN;
-+ }
-+ /* 3) caller mandated alignment */
-+ if (ralign < align) {
-+ ralign = align;
-+ }
-+ /* disable debug if necessary */
-+ if (ralign > __alignof__(unsigned long long))
-+ flags &= ~(SLAB_RED_ZONE | SLAB_STORE_USER);
-+ /*
-+ * 4) Store it.
-+ */
-+ align = ralign;
-+
-+ /* Get cache's description obj. */
-+ cachep = kmem_cache_zalloc(&cache_cache, GFP_KERNEL);
-+ if (!cachep)
-+ goto oops;
-+
-+#if DEBUG
-+ cachep->obj_size = size;
-+
-+ /*
-+ * Both debugging options require word-alignment which is calculated
-+ * into align above.
-+ */
-+ if (flags & SLAB_RED_ZONE) {
-+ /* add space for red zone words */
-+ cachep->obj_offset += sizeof(unsigned long long);
-+ size += 2 * sizeof(unsigned long long);
-+ }
-+ if (flags & SLAB_STORE_USER) {
-+ /* user store requires one word storage behind the end of
-+ * the real object. But if the second red zone needs to be
-+ * aligned to 64 bits, we must allow that much space.
-+ */
-+ if (flags & SLAB_RED_ZONE)
-+ size += REDZONE_ALIGN;
-+ else
-+ size += BYTES_PER_WORD;
-+ }
-+#if FORCED_DEBUG && defined(CONFIG_DEBUG_PAGEALLOC)
-+ if (size >= malloc_sizes[INDEX_L3 + 1].cs_size
-+ && cachep->obj_size > cache_line_size() && size < PAGE_SIZE) {
-+ cachep->obj_offset += PAGE_SIZE - size;
-+ size = PAGE_SIZE;
-+ }
-+#endif
-+#endif
-+
-+ /*
-+ * Determine if the slab management is 'on' or 'off' slab.
-+ * (bootstrapping cannot cope with offslab caches so don't do
-+ * it too early on.)
-+ */
-+ if ((size >= (PAGE_SIZE >> 3)) && !slab_early_init)
-+ /*
-+ * Size is large, assume best to place the slab management obj
-+ * off-slab (should allow better packing of objs).
-+ */
-+ flags |= CFLGS_OFF_SLAB;
-+
-+ size = ALIGN(size, align);
-+
-+ left_over = calculate_slab_order(cachep, size, align, flags);
-+
-+ if (!cachep->num) {
-+ printk(KERN_ERR
-+ "kmem_cache_create: couldn't create cache %s.\n", name);
-+ kmem_cache_free(&cache_cache, cachep);
-+ cachep = NULL;
-+ goto oops;
-+ }
-+ slab_size = ALIGN(cachep->num * sizeof(kmem_bufctl_t)
-+ + sizeof(struct slab), align);
-+
-+ /*
-+ * If the slab has been placed off-slab, and we have enough space then
-+ * move it on-slab. This is at the expense of any extra colouring.
-+ */
-+ if (flags & CFLGS_OFF_SLAB && left_over >= slab_size) {
-+ flags &= ~CFLGS_OFF_SLAB;
-+ left_over -= slab_size;
-+ }
-+
-+ if (flags & CFLGS_OFF_SLAB) {
-+ /* really off slab. No need for manual alignment */
-+ slab_size =
-+ cachep->num * sizeof(kmem_bufctl_t) + sizeof(struct slab);
-+ }
-+
-+ cachep->colour_off = cache_line_size();
-+ /* Offset must be a multiple of the alignment. */
-+ if (cachep->colour_off < align)
-+ cachep->colour_off = align;
-+ cachep->colour = left_over / cachep->colour_off;
-+ cachep->slab_size = slab_size;
-+ cachep->flags = flags;
-+ cachep->gfpflags = 0;
-+ if (CONFIG_ZONE_DMA_FLAG && (flags & SLAB_CACHE_DMA))
-+ cachep->gfpflags |= GFP_DMA;
-+ cachep->buffer_size = size;
-+ cachep->reciprocal_buffer_size = reciprocal_value(size);
-+
-+ if (flags & CFLGS_OFF_SLAB) {
-+ cachep->slabp_cache = kmem_find_general_cachep(slab_size, 0u);
-+ /*
-+ * This is a possibility for one of the malloc_sizes caches.
-+ * But since we go off slab only for object size greater than
-+ * PAGE_SIZE/8, and malloc_sizes gets created in ascending order,
-+ * this should not happen at all.
-+ * But leave a BUG_ON for some lucky dude.
-+ */
-+ BUG_ON(!cachep->slabp_cache);
-+ }
-+ cachep->ctor = ctor;
-+ cachep->name = name;
-+
-+ if (setup_cpu_cache(cachep)) {
-+ __kmem_cache_destroy(cachep);
-+ cachep = NULL;
-+ goto oops;
-+ }
-+
-+ /* cache setup completed, link it into the list */
-+ list_add(&cachep->next, &cache_chain);
-+oops:
-+ if (!cachep && (flags & SLAB_PANIC))
-+ panic("kmem_cache_create(): failed to create slab `%s'\n",
-+ name);
-+ mutex_unlock(&cache_chain_mutex);
-+ return cachep;
-+}
-+EXPORT_SYMBOL(kmem_cache_create);
-+
-+#if DEBUG
-+static void check_irq_off(void)
-+{
-+ BUG_ON(!irqs_disabled());
-+}
-+
-+static void check_irq_on(void)
-+{
-+ BUG_ON(irqs_disabled());
-+}
-+
-+static void check_spinlock_acquired(struct kmem_cache *cachep)
-+{
-+#ifdef CONFIG_SMP
-+ check_irq_off();
-+ assert_spin_locked(&cachep->nodelists[numa_node_id()]->list_lock);
-+#endif
-+}
-+
-+static void check_spinlock_acquired_node(struct kmem_cache *cachep, int node)
-+{
-+#ifdef CONFIG_SMP
-+ check_irq_off();
-+ assert_spin_locked(&cachep->nodelists[node]->list_lock);
-+#endif
-+}
-+
-+#else
-+#define check_irq_off() do { } while(0)
-+#define check_irq_on() do { } while(0)
-+#define check_spinlock_acquired(x) do { } while(0)
-+#define check_spinlock_acquired_node(x, y) do { } while(0)
-+#endif
-+
-+static void drain_array(struct kmem_cache *cachep, struct kmem_list3 *l3,
-+ struct array_cache *ac,
-+ int force, int node);
-+
-+static void do_drain(void *arg)
-+{
-+ struct kmem_cache *cachep = arg;
-+ struct array_cache *ac;
-+ int node = numa_node_id();
-+
-+ check_irq_off();
-+ ac = cpu_cache_get(cachep);
-+ spin_lock(&cachep->nodelists[node]->list_lock);
-+ free_block(cachep, ac->entry, ac->avail, node);
-+ spin_unlock(&cachep->nodelists[node]->list_lock);
-+ ac->avail = 0;
-+}
-+
-+static void drain_cpu_caches(struct kmem_cache *cachep)
-+{
-+ struct kmem_list3 *l3;
-+ int node;
-+
-+ on_each_cpu(do_drain, cachep, 1, 1);
-+ check_irq_on();
-+ for_each_online_node(node) {
-+ l3 = cachep->nodelists[node];
-+ if (l3 && l3->alien)
-+ drain_alien_cache(cachep, l3->alien);
-+ }
-+
-+ for_each_online_node(node) {
-+ l3 = cachep->nodelists[node];
-+ if (l3)
-+ drain_array(cachep, l3, l3->shared, 1, node);
-+ }
-+}
-+
-+/*
-+ * Remove slabs from the list of free slabs.
-+ * Specify the number of slabs to drain in tofree.
-+ *
-+ * Returns the actual number of slabs released.
-+ */
-+static int drain_freelist(struct kmem_cache *cache,
-+ struct kmem_list3 *l3, int tofree)
-+{
-+ struct list_head *p;
-+ int nr_freed;
-+ struct slab *slabp;
-+
-+ nr_freed = 0;
-+ while (nr_freed < tofree && !list_empty(&l3->slabs_free)) {
-+
-+ spin_lock_irq(&l3->list_lock);
-+ p = l3->slabs_free.prev;
-+ if (p == &l3->slabs_free) {
-+ spin_unlock_irq(&l3->list_lock);
-+ goto out;
-+ }
-+
-+ slabp = list_entry(p, struct slab, list);
-+#if DEBUG
-+ BUG_ON(slabp->inuse);
-+#endif
-+ list_del(&slabp->list);
-+ /*
-+ * Safe to drop the lock. The slab is no longer linked
-+ * to the cache.
-+ */
-+ l3->free_objects -= cache->num;
-+ spin_unlock_irq(&l3->list_lock);
-+ slab_destroy(cache, slabp);
-+ nr_freed++;
-+ }
-+out:
-+ return nr_freed;
-+}
-+
-+/* Called with cache_chain_mutex held to protect against cpu hotplug */
-+static int __cache_shrink(struct kmem_cache *cachep)
-+{
-+ int ret = 0, i = 0;
-+ struct kmem_list3 *l3;
-+
-+ drain_cpu_caches(cachep);
-+
-+ check_irq_on();
-+ for_each_online_node(i) {
-+ l3 = cachep->nodelists[i];
-+ if (!l3)
-+ continue;
-+
-+ drain_freelist(cachep, l3, l3->free_objects);
-+
-+ ret += !list_empty(&l3->slabs_full) ||
-+ !list_empty(&l3->slabs_partial);
-+ }
-+ return (ret ? 1 : 0);
-+}
-+
-+/**
-+ * kmem_cache_shrink - Shrink a cache.
-+ * @cachep: The cache to shrink.
-+ *
-+ * Releases as many slabs as possible for a cache.
-+ * To help debugging, a zero exit status indicates all slabs were released.
-+ */
-+int kmem_cache_shrink(struct kmem_cache *cachep)
-+{
-+ int ret;
-+ BUG_ON(!cachep || in_interrupt());
-+
-+ mutex_lock(&cache_chain_mutex);
-+ ret = __cache_shrink(cachep);
-+ mutex_unlock(&cache_chain_mutex);
-+ return ret;
-+}
-+EXPORT_SYMBOL(kmem_cache_shrink);
-+
-+/**
-+ * kmem_cache_destroy - delete a cache
-+ * @cachep: the cache to destroy
-+ *
-+ * Remove a &struct kmem_cache object from the slab cache.
-+ *
-+ * It is expected this function will be called by a module when it is
-+ * unloaded. This will remove the cache completely, and avoid a duplicate
-+ * cache being allocated each time a module is loaded and unloaded, if the
-+ * module doesn't have persistent in-kernel storage across loads and unloads.
-+ *
-+ * The cache must be empty before calling this function.
-+ *
-+ * The caller must guarantee that noone will allocate memory from the cache
-+ * during the kmem_cache_destroy().
-+ */
-+void kmem_cache_destroy(struct kmem_cache *cachep)
-+{
-+ BUG_ON(!cachep || in_interrupt());
-+
-+ /* Find the cache in the chain of caches. */
-+ mutex_lock(&cache_chain_mutex);
-+ /*
-+ * the chain is never empty, cache_cache is never destroyed
-+ */
-+ list_del(&cachep->next);
-+ if (__cache_shrink(cachep)) {
-+ slab_error(cachep, "Can't free all objects");
-+ list_add(&cachep->next, &cache_chain);
-+ mutex_unlock(&cache_chain_mutex);
-+ return;
-+ }
-+
-+ if (unlikely(cachep->flags & SLAB_DESTROY_BY_RCU))
-+ synchronize_rcu();
-+
-+ __kmem_cache_destroy(cachep);
-+ mutex_unlock(&cache_chain_mutex);
-+}
-+EXPORT_SYMBOL(kmem_cache_destroy);
-+
-+/*
-+ * Get the memory for a slab management obj.
-+ * For a slab cache when the slab descriptor is off-slab, slab descriptors
-+ * always come from malloc_sizes caches. The slab descriptor cannot
-+ * come from the same cache which is getting created because,
-+ * when we are searching for an appropriate cache for these
-+ * descriptors in kmem_cache_create, we search through the malloc_sizes array.
-+ * If we are creating a malloc_sizes cache here it would not be visible to
-+ * kmem_find_general_cachep till the initialization is complete.
-+ * Hence we cannot have slabp_cache same as the original cache.
-+ */
-+static struct slab *alloc_slabmgmt(struct kmem_cache *cachep, void *objp,
-+ int colour_off, gfp_t local_flags,
-+ int nodeid)
-+{
-+ struct slab *slabp;
-+
-+ if (OFF_SLAB(cachep)) {
-+ /* Slab management obj is off-slab. */
-+ slabp = kmem_cache_alloc_node(cachep->slabp_cache,
-+ local_flags & ~GFP_THISNODE, nodeid);
-+ if (!slabp)
-+ return NULL;
-+ } else {
-+ slabp = objp + colour_off;
-+ colour_off += cachep->slab_size;
-+ }
-+ slabp->inuse = 0;
-+ slabp->colouroff = colour_off;
-+ slabp->s_mem = objp + colour_off;
-+ slabp->nodeid = nodeid;
-+ return slabp;
-+}
-+
-+static inline kmem_bufctl_t *slab_bufctl(struct slab *slabp)
-+{
-+ return (kmem_bufctl_t *) (slabp + 1);
-+}
-+
-+static void cache_init_objs(struct kmem_cache *cachep,
-+ struct slab *slabp)
-+{
-+ int i;
-+
-+ for (i = 0; i < cachep->num; i++) {
-+ void *objp = index_to_obj(cachep, slabp, i);
-+#if DEBUG
-+ /* need to poison the objs? */
-+ if (cachep->flags & SLAB_POISON)
-+ poison_obj(cachep, objp, POISON_FREE);
-+ if (cachep->flags & SLAB_STORE_USER)
-+ *dbg_userword(cachep, objp) = NULL;
-+
-+ if (cachep->flags & SLAB_RED_ZONE) {
-+ *dbg_redzone1(cachep, objp) = RED_INACTIVE;
-+ *dbg_redzone2(cachep, objp) = RED_INACTIVE;
-+ }
-+ /*
-+ * Constructors are not allowed to allocate memory from the same
-+ * cache which they are a constructor for. Otherwise, deadlock.
-+ * They must also be threaded.
-+ */
-+ if (cachep->ctor && !(cachep->flags & SLAB_POISON))
-+ cachep->ctor(objp + obj_offset(cachep), cachep,
-+ 0);
-+
-+ if (cachep->flags & SLAB_RED_ZONE) {
-+ if (*dbg_redzone2(cachep, objp) != RED_INACTIVE)
-+ slab_error(cachep, "constructor overwrote the"
-+ " end of an object");
-+ if (*dbg_redzone1(cachep, objp) != RED_INACTIVE)
-+ slab_error(cachep, "constructor overwrote the"
-+ " start of an object");
-+ }
-+ if ((cachep->buffer_size % PAGE_SIZE) == 0 &&
-+ OFF_SLAB(cachep) && cachep->flags & SLAB_POISON)
-+ kernel_map_pages(virt_to_page(objp),
-+ cachep->buffer_size / PAGE_SIZE, 0);
-+#else
-+ if (cachep->ctor)
-+ cachep->ctor(objp, cachep, 0);
-+#endif
-+ slab_bufctl(slabp)[i] = i + 1;
-+ }
-+ slab_bufctl(slabp)[i - 1] = BUFCTL_END;
-+ slabp->free = 0;
-+}
-+
-+static void kmem_flagcheck(struct kmem_cache *cachep, gfp_t flags)
-+{
-+ if (CONFIG_ZONE_DMA_FLAG) {
-+ if (flags & GFP_DMA)
-+ BUG_ON(!(cachep->gfpflags & GFP_DMA));
-+ else
-+ BUG_ON(cachep->gfpflags & GFP_DMA);
-+ }
-+}
-+
-+static void *slab_get_obj(struct kmem_cache *cachep, struct slab *slabp,
-+ int nodeid)
-+{
-+ void *objp = index_to_obj(cachep, slabp, slabp->free);
-+ kmem_bufctl_t next;
-+
-+ slabp->inuse++;
-+ next = slab_bufctl(slabp)[slabp->free];
-+#if DEBUG
-+ slab_bufctl(slabp)[slabp->free] = BUFCTL_FREE;
-+ WARN_ON(slabp->nodeid != nodeid);
-+#endif
-+ slabp->free = next;
-+
-+ return objp;
-+}
-+
-+static void slab_put_obj(struct kmem_cache *cachep, struct slab *slabp,
-+ void *objp, int nodeid)
-+{
-+ unsigned int objnr = obj_to_index(cachep, slabp, objp);
-+
-+#if DEBUG
-+ /* Verify that the slab belongs to the intended node */
-+ WARN_ON(slabp->nodeid != nodeid);
-+
-+ if (slab_bufctl(slabp)[objnr] + 1 <= SLAB_LIMIT + 1) {
-+ printk(KERN_ERR "slab: double free detected in cache "
-+ "'%s', objp %p\n", cachep->name, objp);
-+ BUG();
-+ }
-+#endif
-+ slab_bufctl(slabp)[objnr] = slabp->free;
-+ slabp->free = objnr;
-+ slabp->inuse--;
-+}
-+
-+/*
-+ * Map pages beginning at addr to the given cache and slab. This is required
-+ * for the slab allocator to be able to lookup the cache and slab of a
-+ * virtual address for kfree, ksize, kmem_ptr_validate, and slab debugging.
-+ */
-+static void slab_map_pages(struct kmem_cache *cache, struct slab *slab,
-+ void *addr)
-+{
-+ int nr_pages;
-+ struct page *page;
-+
-+ page = virt_to_page(addr);
-+
-+ nr_pages = 1;
-+ if (likely(!PageCompound(page)))
-+ nr_pages <<= cache->gfporder;
-+
-+ do {
-+ page_set_cache(page, cache);
-+ page_set_slab(page, slab);
-+ page++;
-+ } while (--nr_pages);
-+}
-+
-+/*
-+ * Grow (by 1) the number of slabs within a cache. This is called by
-+ * kmem_cache_alloc() when there are no active objs left in a cache.
-+ */
-+static int cache_grow(struct kmem_cache *cachep,
-+ gfp_t flags, int nodeid, void *objp)
-+{
-+ struct slab *slabp;
-+ size_t offset;
-+ gfp_t local_flags;
-+ struct kmem_list3 *l3;
-+
-+ /*
-+ * Be lazy and only check for valid flags here, keeping it out of the
-+ * critical path in kmem_cache_alloc().
-+ */
-+ BUG_ON(flags & ~(GFP_DMA | GFP_LEVEL_MASK));
-+
-+ local_flags = (flags & GFP_LEVEL_MASK);
-+ /* Take the l3 list lock to change the colour_next on this node */
-+ check_irq_off();
-+ l3 = cachep->nodelists[nodeid];
-+ spin_lock(&l3->list_lock);
-+
-+ /* Get colour for the slab, and cal the next value. */
-+ offset = l3->colour_next;
-+ l3->colour_next++;
-+ if (l3->colour_next >= cachep->colour)
-+ l3->colour_next = 0;
-+ spin_unlock(&l3->list_lock);
-+
-+ offset *= cachep->colour_off;
-+
-+ if (local_flags & __GFP_WAIT)
-+ local_irq_enable();
-+
-+ /*
-+ * The test for missing atomic flag is performed here, rather than
-+ * the more obvious place, simply to reduce the critical path length
-+ * in kmem_cache_alloc(). If a caller is seriously mis-behaving they
-+ * will eventually be caught here (where it matters).
-+ */
-+ kmem_flagcheck(cachep, flags);
-+
-+ /*
-+ * Get mem for the objs. Attempt to allocate a physical page from
-+ * 'nodeid'.
-+ */
-+ if (!objp)
-+ objp = kmem_getpages(cachep, flags, nodeid);
-+ if (!objp)
-+ goto failed;
-+
-+ /* Get slab management. */
-+ slabp = alloc_slabmgmt(cachep, objp, offset,
-+ local_flags & ~GFP_THISNODE, nodeid);
-+ if (!slabp)
-+ goto opps1;
-+
-+ slabp->nodeid = nodeid;
-+ slab_map_pages(cachep, slabp, objp);
-+
-+ cache_init_objs(cachep, slabp);
-+
-+ if (local_flags & __GFP_WAIT)
-+ local_irq_disable();
-+ check_irq_off();
-+ spin_lock(&l3->list_lock);
-+
-+ /* Make slab active. */
-+ list_add_tail(&slabp->list, &(l3->slabs_free));
-+ STATS_INC_GROWN(cachep);
-+ l3->free_objects += cachep->num;
-+ spin_unlock(&l3->list_lock);
-+ return 1;
-+opps1:
-+ kmem_freepages(cachep, objp);
-+failed:
-+ if (local_flags & __GFP_WAIT)
-+ local_irq_disable();
-+ return 0;
-+}
-+
-+#if DEBUG
-+
-+/*
-+ * Perform extra freeing checks:
-+ * - detect bad pointers.
-+ * - POISON/RED_ZONE checking
-+ */
-+static void kfree_debugcheck(const void *objp)
-+{
-+ if (!virt_addr_valid(objp)) {
-+ printk(KERN_ERR "kfree_debugcheck: out of range ptr %lxh.\n",
-+ (unsigned long)objp);
-+ BUG();
-+ }
-+}
-+
-+static inline void verify_redzone_free(struct kmem_cache *cache, void *obj)
-+{
-+ unsigned long long redzone1, redzone2;
-+
-+ redzone1 = *dbg_redzone1(cache, obj);
-+ redzone2 = *dbg_redzone2(cache, obj);
-+
-+ /*
-+ * Redzone is ok.
-+ */
-+ if (redzone1 == RED_ACTIVE && redzone2 == RED_ACTIVE)
-+ return;
-+
-+ if (redzone1 == RED_INACTIVE && redzone2 == RED_INACTIVE)
-+ slab_error(cache, "double free detected");
-+ else
-+ slab_error(cache, "memory outside object was overwritten");
-+
-+ printk(KERN_ERR "%p: redzone 1:0x%llx, redzone 2:0x%llx.\n",
-+ obj, redzone1, redzone2);
-+}
-+
-+static void *cache_free_debugcheck(struct kmem_cache *cachep, void *objp,
-+ void *caller)
-+{
-+ struct page *page;
-+ unsigned int objnr;
-+ struct slab *slabp;
-+
-+ objp -= obj_offset(cachep);
-+ kfree_debugcheck(objp);
-+ page = virt_to_head_page(objp);
-+
-+ slabp = page_get_slab(page);
-+
-+ if (cachep->flags & SLAB_RED_ZONE) {
-+ verify_redzone_free(cachep, objp);
-+ *dbg_redzone1(cachep, objp) = RED_INACTIVE;
-+ *dbg_redzone2(cachep, objp) = RED_INACTIVE;
-+ }
-+ if (cachep->flags & SLAB_STORE_USER)
-+ *dbg_userword(cachep, objp) = caller;
-+
-+ objnr = obj_to_index(cachep, slabp, objp);
-+
-+ BUG_ON(objnr >= cachep->num);
-+ BUG_ON(objp != index_to_obj(cachep, slabp, objnr));
-+
-+#ifdef CONFIG_DEBUG_SLAB_LEAK
-+ slab_bufctl(slabp)[objnr] = BUFCTL_FREE;
-+#endif
-+ if (cachep->flags & SLAB_POISON) {
-+#ifdef CONFIG_DEBUG_PAGEALLOC
-+ if ((cachep->buffer_size % PAGE_SIZE)==0 && OFF_SLAB(cachep)) {
-+ store_stackinfo(cachep, objp, (unsigned long)caller);
-+ kernel_map_pages(virt_to_page(objp),
-+ cachep->buffer_size / PAGE_SIZE, 0);
-+ } else {
-+ poison_obj(cachep, objp, POISON_FREE);
-+ }
-+#else
-+ poison_obj(cachep, objp, POISON_FREE);
-+#endif
-+ }
-+ return objp;
-+}
-+
-+static void check_slabp(struct kmem_cache *cachep, struct slab *slabp)
-+{
-+ kmem_bufctl_t i;
-+ int entries = 0;
-+
-+ /* Check slab's freelist to see if this obj is there. */
-+ for (i = slabp->free; i != BUFCTL_END; i = slab_bufctl(slabp)[i]) {
-+ entries++;
-+ if (entries > cachep->num || i >= cachep->num)
-+ goto bad;
-+ }
-+ if (entries != cachep->num - slabp->inuse) {
-+bad:
-+ printk(KERN_ERR "slab: Internal list corruption detected in "
-+ "cache '%s'(%d), slabp %p(%d). Hexdump:\n",
-+ cachep->name, cachep->num, slabp, slabp->inuse);
-+ for (i = 0;
-+ i < sizeof(*slabp) + cachep->num * sizeof(kmem_bufctl_t);
-+ i++) {
-+ if (i % 16 == 0)
-+ printk("\n%03x:", i);
-+ printk(" %02x", ((unsigned char *)slabp)[i]);
-+ }
-+ printk("\n");
-+ BUG();
-+ }
-+}
-+#else
-+#define kfree_debugcheck(x) do { } while(0)
-+#define cache_free_debugcheck(x,objp,z) (objp)
-+#define check_slabp(x,y) do { } while(0)
-+#endif
-+
-+static void *cache_alloc_refill(struct kmem_cache *cachep, gfp_t flags)
-+{
-+ int batchcount;
-+ struct kmem_list3 *l3;
-+ struct array_cache *ac;
-+ int node;
-+
-+ node = numa_node_id();
-+
-+ check_irq_off();
-+ ac = cpu_cache_get(cachep);
-+retry:
-+ batchcount = ac->batchcount;
-+ if (!ac->touched && batchcount > BATCHREFILL_LIMIT) {
-+ /*
-+ * If there was little recent activity on this cache, then
-+ * perform only a partial refill. Otherwise we could generate
-+ * refill bouncing.
-+ */
-+ batchcount = BATCHREFILL_LIMIT;
-+ }
-+ l3 = cachep->nodelists[node];
-+
-+ BUG_ON(ac->avail > 0 || !l3);
-+ spin_lock(&l3->list_lock);
-+
-+ /* See if we can refill from the shared array */
-+ if (l3->shared && transfer_objects(ac, l3->shared, batchcount))
-+ goto alloc_done;
-+
-+ while (batchcount > 0) {
-+ struct list_head *entry;
-+ struct slab *slabp;
-+ /* Get slab alloc is to come from. */
-+ entry = l3->slabs_partial.next;
-+ if (entry == &l3->slabs_partial) {
-+ l3->free_touched = 1;
-+ entry = l3->slabs_free.next;
-+ if (entry == &l3->slabs_free)
-+ goto must_grow;
-+ }
-+
-+ slabp = list_entry(entry, struct slab, list);
-+ check_slabp(cachep, slabp);
-+ check_spinlock_acquired(cachep);
-+
-+ /*
-+ * The slab was either on partial or free list so
-+ * there must be at least one object available for
-+ * allocation.
-+ */
-+ BUG_ON(slabp->inuse < 0 || slabp->inuse >= cachep->num);
-+
-+ while (slabp->inuse < cachep->num && batchcount--) {
-+ STATS_INC_ALLOCED(cachep);
-+ STATS_INC_ACTIVE(cachep);
-+ STATS_SET_HIGH(cachep);
-+
-+ ac->entry[ac->avail++] = slab_get_obj(cachep, slabp,
-+ node);
-+ }
-+ check_slabp(cachep, slabp);
-+
-+ /* move slabp to correct slabp list: */
-+ list_del(&slabp->list);
-+ if (slabp->free == BUFCTL_END)
-+ list_add(&slabp->list, &l3->slabs_full);
-+ else
-+ list_add(&slabp->list, &l3->slabs_partial);
-+ }
-+
-+must_grow:
-+ l3->free_objects -= ac->avail;
-+alloc_done:
-+ spin_unlock(&l3->list_lock);
-+
-+ if (unlikely(!ac->avail)) {
-+ int x;
-+ x = cache_grow(cachep, flags | GFP_THISNODE, node, NULL);
-+
-+ /* cache_grow can reenable interrupts, then ac could change. */
-+ ac = cpu_cache_get(cachep);
-+ if (!x && ac->avail == 0) /* no objects in sight? abort */
-+ return NULL;
-+
-+ if (!ac->avail) /* objects refilled by interrupt? */
-+ goto retry;
-+ }
-+ ac->touched = 1;
-+ return ac->entry[--ac->avail];
-+}
-+
-+static inline void cache_alloc_debugcheck_before(struct kmem_cache *cachep,
-+ gfp_t flags)
-+{
-+ might_sleep_if(flags & __GFP_WAIT);
-+#if DEBUG
-+ kmem_flagcheck(cachep, flags);
-+#endif
-+}
-+
-+#if DEBUG
-+static void *cache_alloc_debugcheck_after(struct kmem_cache *cachep,
-+ gfp_t flags, void *objp, void *caller)
-+{
-+ if (!objp)
-+ return objp;
-+ if (cachep->flags & SLAB_POISON) {
-+#ifdef CONFIG_DEBUG_PAGEALLOC
-+ if ((cachep->buffer_size % PAGE_SIZE) == 0 && OFF_SLAB(cachep))
-+ kernel_map_pages(virt_to_page(objp),
-+ cachep->buffer_size / PAGE_SIZE, 1);
-+ else
-+ check_poison_obj(cachep, objp);
-+#else
-+ check_poison_obj(cachep, objp);
-+#endif
-+ poison_obj(cachep, objp, POISON_INUSE);
-+ }
-+ if (cachep->flags & SLAB_STORE_USER)
-+ *dbg_userword(cachep, objp) = caller;
-+
-+ if (cachep->flags & SLAB_RED_ZONE) {
-+ if (*dbg_redzone1(cachep, objp) != RED_INACTIVE ||
-+ *dbg_redzone2(cachep, objp) != RED_INACTIVE) {
-+ slab_error(cachep, "double free, or memory outside"
-+ " object was overwritten");
-+ printk(KERN_ERR
-+ "%p: redzone 1:0x%llx, redzone 2:0x%llx\n",
-+ objp, *dbg_redzone1(cachep, objp),
-+ *dbg_redzone2(cachep, objp));
-+ }
-+ *dbg_redzone1(cachep, objp) = RED_ACTIVE;
-+ *dbg_redzone2(cachep, objp) = RED_ACTIVE;
-+ }
-+#ifdef CONFIG_DEBUG_SLAB_LEAK
-+ {
-+ struct slab *slabp;
-+ unsigned objnr;
-+
-+ slabp = page_get_slab(virt_to_head_page(objp));
-+ objnr = (unsigned)(objp - slabp->s_mem) / cachep->buffer_size;
-+ slab_bufctl(slabp)[objnr] = BUFCTL_ACTIVE;
-+ }
-+#endif
-+ objp += obj_offset(cachep);
-+ if (cachep->ctor && cachep->flags & SLAB_POISON)
-+ cachep->ctor(objp, cachep, 0);
-+#if ARCH_SLAB_MINALIGN
-+ if ((u32)objp & (ARCH_SLAB_MINALIGN-1)) {
-+ printk(KERN_ERR "0x%p: not aligned to ARCH_SLAB_MINALIGN=%d\n",
-+ objp, ARCH_SLAB_MINALIGN);
-+ }
-+#endif
-+ return objp;
-+}
-+#else
-+#define cache_alloc_debugcheck_after(a,b,objp,d) (objp)
-+#endif
-+
-+#ifdef CONFIG_FAILSLAB
-+
-+static struct failslab_attr {
-+
-+ struct fault_attr attr;
-+
-+ u32 ignore_gfp_wait;
-+#ifdef CONFIG_FAULT_INJECTION_DEBUG_FS
-+ struct dentry *ignore_gfp_wait_file;
-+#endif
-+
-+} failslab = {
-+ .attr = FAULT_ATTR_INITIALIZER,
-+ .ignore_gfp_wait = 1,
-+};
-+
-+static int __init setup_failslab(char *str)
-+{
-+ return setup_fault_attr(&failslab.attr, str);
-+}
-+__setup("failslab=", setup_failslab);
-+
-+static int should_failslab(struct kmem_cache *cachep, gfp_t flags)
-+{
-+ if (cachep == &cache_cache)
-+ return 0;
-+ if (flags & __GFP_NOFAIL)
-+ return 0;
-+ if (failslab.ignore_gfp_wait && (flags & __GFP_WAIT))
-+ return 0;
-+
-+ return should_fail(&failslab.attr, obj_size(cachep));
-+}
-+
-+#ifdef CONFIG_FAULT_INJECTION_DEBUG_FS
-+
-+static int __init failslab_debugfs(void)
-+{
-+ mode_t mode = S_IFREG | S_IRUSR | S_IWUSR;
-+ struct dentry *dir;
-+ int err;
-+
-+ err = init_fault_attr_dentries(&failslab.attr, "failslab");
-+ if (err)
-+ return err;
-+ dir = failslab.attr.dentries.dir;
-+
-+ failslab.ignore_gfp_wait_file =
-+ debugfs_create_bool("ignore-gfp-wait", mode, dir,
-+ &failslab.ignore_gfp_wait);
-+
-+ if (!failslab.ignore_gfp_wait_file) {
-+ err = -ENOMEM;
-+ debugfs_remove(failslab.ignore_gfp_wait_file);
-+ cleanup_fault_attr_dentries(&failslab.attr);
-+ }
-+
-+ return err;
-+}
-+
-+late_initcall(failslab_debugfs);
-+
-+#endif /* CONFIG_FAULT_INJECTION_DEBUG_FS */
-+
-+#else /* CONFIG_FAILSLAB */
-+
-+static inline int should_failslab(struct kmem_cache *cachep, gfp_t flags)
-+{
-+ return 0;
-+}
-+
-+#endif /* CONFIG_FAILSLAB */
-+
-+static inline void *____cache_alloc(struct kmem_cache *cachep, gfp_t flags)
-+{
-+ void *objp;
-+ struct array_cache *ac;
-+
-+ check_irq_off();
-+
-+ ac = cpu_cache_get(cachep);
-+ if (likely(ac->avail)) {
-+ STATS_INC_ALLOCHIT(cachep);
-+ ac->touched = 1;
-+ objp = ac->entry[--ac->avail];
-+ } else {
-+ STATS_INC_ALLOCMISS(cachep);
-+ objp = cache_alloc_refill(cachep, flags);
-+ }
-+ return objp;
-+}
-+
-+#ifdef CONFIG_NUMA
-+/*
-+ * Try allocating on another node if PF_SPREAD_SLAB|PF_MEMPOLICY.
-+ *
-+ * If we are in_interrupt, then process context, including cpusets and
-+ * mempolicy, may not apply and should not be used for allocation policy.
-+ */
-+static void *alternate_node_alloc(struct kmem_cache *cachep, gfp_t flags)
-+{
-+ int nid_alloc, nid_here;
-+
-+ if (in_interrupt() || (flags & __GFP_THISNODE))
-+ return NULL;
-+ nid_alloc = nid_here = numa_node_id();
-+ if (cpuset_do_slab_mem_spread() && (cachep->flags & SLAB_MEM_SPREAD))
-+ nid_alloc = cpuset_mem_spread_node();
-+ else if (current->mempolicy)
-+ nid_alloc = slab_node(current->mempolicy);
-+ if (nid_alloc != nid_here)
-+ return ____cache_alloc_node(cachep, flags, nid_alloc);
-+ return NULL;
-+}
-+
-+/*
-+ * Fallback function if there was no memory available and no objects on a
-+ * certain node and fall back is permitted. First we scan all the
-+ * available nodelists for available objects. If that fails then we
-+ * perform an allocation without specifying a node. This allows the page
-+ * allocator to do its reclaim / fallback magic. We then insert the
-+ * slab into the proper nodelist and then allocate from it.
-+ */
-+static void *fallback_alloc(struct kmem_cache *cache, gfp_t flags)
-+{
-+ struct zonelist *zonelist;
-+ gfp_t local_flags;
-+ struct zone **z;
-+ void *obj = NULL;
-+ int nid;
-+
-+ if (flags & __GFP_THISNODE)
-+ return NULL;
-+
-+ zonelist = &NODE_DATA(slab_node(current->mempolicy))
-+ ->node_zonelists[gfp_zone(flags)];
-+ local_flags = (flags & GFP_LEVEL_MASK);
-+
-+retry:
-+ /*
-+ * Look through allowed nodes for objects available
-+ * from existing per node queues.
-+ */
-+ for (z = zonelist->zones; *z && !obj; z++) {
-+ nid = zone_to_nid(*z);
-+
-+ if (cpuset_zone_allowed_hardwall(*z, flags) &&
-+ cache->nodelists[nid] &&
-+ cache->nodelists[nid]->free_objects)
-+ obj = ____cache_alloc_node(cache,
-+ flags | GFP_THISNODE, nid);
-+ }
-+
-+ if (!obj) {
-+ /*
-+ * This allocation will be performed within the constraints
-+ * of the current cpuset / memory policy requirements.
-+ * We may trigger various forms of reclaim on the allowed
-+ * set and go into memory reserves if necessary.
-+ */
-+ if (local_flags & __GFP_WAIT)
-+ local_irq_enable();
-+ kmem_flagcheck(cache, flags);
-+ obj = kmem_getpages(cache, flags, -1);
-+ if (local_flags & __GFP_WAIT)
-+ local_irq_disable();
-+ if (obj) {
-+ /*
-+ * Insert into the appropriate per node queues
-+ */
-+ nid = page_to_nid(virt_to_page(obj));
-+ if (cache_grow(cache, flags, nid, obj)) {
-+ obj = ____cache_alloc_node(cache,
-+ flags | GFP_THISNODE, nid);
-+ if (!obj)
-+ /*
-+ * Another processor may allocate the
-+ * objects in the slab since we are
-+ * not holding any locks.
-+ */
-+ goto retry;
-+ } else {
-+ /* cache_grow already freed obj */
-+ obj = NULL;
-+ }
-+ }
-+ }
-+ return obj;
-+}
-+
-+/*
-+ * A interface to enable slab creation on nodeid
-+ */
-+static void *____cache_alloc_node(struct kmem_cache *cachep, gfp_t flags,
-+ int nodeid)
-+{
-+ struct list_head *entry;
-+ struct slab *slabp;
-+ struct kmem_list3 *l3;
-+ void *obj;
-+ int x;
-+
-+ l3 = cachep->nodelists[nodeid];
-+ BUG_ON(!l3);
-+
-+retry:
-+ check_irq_off();
-+ spin_lock(&l3->list_lock);
-+ entry = l3->slabs_partial.next;
-+ if (entry == &l3->slabs_partial) {
-+ l3->free_touched = 1;
-+ entry = l3->slabs_free.next;
-+ if (entry == &l3->slabs_free)
-+ goto must_grow;
-+ }
-+
-+ slabp = list_entry(entry, struct slab, list);
-+ check_spinlock_acquired_node(cachep, nodeid);
-+ check_slabp(cachep, slabp);
-+
-+ STATS_INC_NODEALLOCS(cachep);
-+ STATS_INC_ACTIVE(cachep);
-+ STATS_SET_HIGH(cachep);
-+
-+ BUG_ON(slabp->inuse == cachep->num);
-+
-+ obj = slab_get_obj(cachep, slabp, nodeid);
-+ check_slabp(cachep, slabp);
-+ vx_slab_alloc(cachep, flags);
-+ l3->free_objects--;
-+ /* move slabp to correct slabp list: */
-+ list_del(&slabp->list);
-+
-+ if (slabp->free == BUFCTL_END)
-+ list_add(&slabp->list, &l3->slabs_full);
-+ else
-+ list_add(&slabp->list, &l3->slabs_partial);
-+
-+ spin_unlock(&l3->list_lock);
-+ goto done;
-+
-+must_grow:
-+ spin_unlock(&l3->list_lock);
-+ x = cache_grow(cachep, flags | GFP_THISNODE, nodeid, NULL);
-+ if (x)
-+ goto retry;
-+
-+ return fallback_alloc(cachep, flags);
-+
-+done:
-+ return obj;
-+}
-+
-+/**
-+ * kmem_cache_alloc_node - Allocate an object on the specified node
-+ * @cachep: The cache to allocate from.
-+ * @flags: See kmalloc().
-+ * @nodeid: node number of the target node.
-+ * @caller: return address of caller, used for debug information
-+ *
-+ * Identical to kmem_cache_alloc but it will allocate memory on the given
-+ * node, which can improve the performance for cpu bound structures.
-+ *
-+ * Fallback to other node is possible if __GFP_THISNODE is not set.
-+ */
-+static __always_inline void *
-+__cache_alloc_node(struct kmem_cache *cachep, gfp_t flags, int nodeid,
-+ void *caller)
-+{
-+ unsigned long save_flags;
-+ void *ptr;
-+
-+ if (should_failslab(cachep, flags))
-+ return NULL;
-+
-+ cache_alloc_debugcheck_before(cachep, flags);
-+ local_irq_save(save_flags);
-+
-+ if (unlikely(nodeid == -1))
-+ nodeid = numa_node_id();
-+
-+ if (unlikely(!cachep->nodelists[nodeid])) {
-+ /* Node not bootstrapped yet */
-+ ptr = fallback_alloc(cachep, flags);
-+ goto out;
-+ }
-+
-+ if (nodeid == numa_node_id()) {
-+ /*
-+ * Use the locally cached objects if possible.
-+ * However ____cache_alloc does not allow fallback
-+ * to other nodes. It may fail while we still have
-+ * objects on other nodes available.
-+ */
-+ ptr = ____cache_alloc(cachep, flags);
-+ if (ptr)
-+ goto out;
-+ }
-+ /* ___cache_alloc_node can fall back to other nodes */
-+ ptr = ____cache_alloc_node(cachep, flags, nodeid);
-+ out:
-+ vx_slab_alloc(cachep, flags);
-+ local_irq_restore(save_flags);
-+ ptr = cache_alloc_debugcheck_after(cachep, flags, ptr, caller);
-+
-+ return ptr;
-+}
-+
-+static __always_inline void *
-+__do_cache_alloc(struct kmem_cache *cache, gfp_t flags)
-+{
-+ void *objp;
-+
-+ if (unlikely(current->flags & (PF_SPREAD_SLAB | PF_MEMPOLICY))) {
-+ objp = alternate_node_alloc(cache, flags);
-+ if (objp)
-+ goto out;
-+ }
-+ objp = ____cache_alloc(cache, flags);
-+
-+ /*
-+ * We may just have run out of memory on the local node.
-+ * ____cache_alloc_node() knows how to locate memory on other nodes
-+ */
-+ if (!objp)
-+ objp = ____cache_alloc_node(cache, flags, numa_node_id());
-+
-+ out:
-+ return objp;
-+}
-+#else
-+
-+static __always_inline void *
-+__do_cache_alloc(struct kmem_cache *cachep, gfp_t flags)
-+{
-+ return ____cache_alloc(cachep, flags);
-+}
-+
-+#endif /* CONFIG_NUMA */
-+
-+static __always_inline void *
-+__cache_alloc(struct kmem_cache *cachep, gfp_t flags, void *caller)
-+{
-+ unsigned long save_flags;
-+ void *objp;
-+
-+ if (should_failslab(cachep, flags))
-+ return NULL;
-+
-+ cache_alloc_debugcheck_before(cachep, flags);
-+ local_irq_save(save_flags);
-+ objp = __do_cache_alloc(cachep, flags);
-+ local_irq_restore(save_flags);
-+ objp = cache_alloc_debugcheck_after(cachep, flags, objp, caller);
-+ prefetchw(objp);
-+
-+ return objp;
-+}
-+
-+/*
-+ * Caller needs to acquire correct kmem_list's list_lock
-+ */
-+static void free_block(struct kmem_cache *cachep, void **objpp, int nr_objects,
-+ int node)
-+{
-+ int i;
-+ struct kmem_list3 *l3;
-+
-+ for (i = 0; i < nr_objects; i++) {
-+ void *objp = objpp[i];
-+ struct slab *slabp;
-+
-+ slabp = virt_to_slab(objp);
-+ l3 = cachep->nodelists[node];
-+ list_del(&slabp->list);
-+ check_spinlock_acquired_node(cachep, node);
-+ check_slabp(cachep, slabp);
-+ slab_put_obj(cachep, slabp, objp, node);
-+ STATS_DEC_ACTIVE(cachep);
-+ l3->free_objects++;
-+ check_slabp(cachep, slabp);
-+
-+ /* fixup slab chains */
-+ if (slabp->inuse == 0) {
-+ if (l3->free_objects > l3->free_limit) {
-+ l3->free_objects -= cachep->num;
-+ /* No need to drop any previously held
-+ * lock here, even if we have a off-slab slab
-+ * descriptor it is guaranteed to come from
-+ * a different cache, refer to comments before
-+ * alloc_slabmgmt.
-+ */
-+ slab_destroy(cachep, slabp);
-+ } else {
-+ list_add(&slabp->list, &l3->slabs_free);
-+ }
-+ } else {
-+ /* Unconditionally move a slab to the end of the
-+ * partial list on free - maximum time for the
-+ * other objects to be freed, too.
-+ */
-+ list_add_tail(&slabp->list, &l3->slabs_partial);
-+ }
-+ }
-+}
-+
-+static void cache_flusharray(struct kmem_cache *cachep, struct array_cache *ac)
-+{
-+ int batchcount;
-+ struct kmem_list3 *l3;
-+ int node = numa_node_id();
-+
-+ batchcount = ac->batchcount;
-+#if DEBUG
-+ BUG_ON(!batchcount || batchcount > ac->avail);
-+#endif
-+ check_irq_off();
-+ l3 = cachep->nodelists[node];
-+ spin_lock(&l3->list_lock);
-+ if (l3->shared) {
-+ struct array_cache *shared_array = l3->shared;
-+ int max = shared_array->limit - shared_array->avail;
-+ if (max) {
-+ if (batchcount > max)
-+ batchcount = max;
-+ memcpy(&(shared_array->entry[shared_array->avail]),
-+ ac->entry, sizeof(void *) * batchcount);
-+ shared_array->avail += batchcount;
-+ goto free_done;
-+ }
-+ }
-+
-+ free_block(cachep, ac->entry, batchcount, node);
-+free_done:
-+#if STATS
-+ {
-+ int i = 0;
-+ struct list_head *p;
-+
-+ p = l3->slabs_free.next;
-+ while (p != &(l3->slabs_free)) {
-+ struct slab *slabp;
-+
-+ slabp = list_entry(p, struct slab, list);
-+ BUG_ON(slabp->inuse);
-+
-+ i++;
-+ p = p->next;
-+ }
-+ STATS_SET_FREEABLE(cachep, i);
-+ }
-+#endif
-+ spin_unlock(&l3->list_lock);
-+ ac->avail -= batchcount;
-+ memmove(ac->entry, &(ac->entry[batchcount]), sizeof(void *)*ac->avail);
-+}
-+
-+/*
-+ * Release an obj back to its cache. If the obj has a constructed state, it must
-+ * be in this state _before_ it is released. Called with disabled ints.
-+ */
-+static inline void __cache_free(struct kmem_cache *cachep, void *objp)
-+{
-+ struct array_cache *ac = cpu_cache_get(cachep);
-+
-+ check_irq_off();
-+ objp = cache_free_debugcheck(cachep, objp, __builtin_return_address(0));
-+ vx_slab_free(cachep);
-+
-+ if (cache_free_alien(cachep, objp))
-+ return;
-+
-+ if (likely(ac->avail < ac->limit)) {
-+ STATS_INC_FREEHIT(cachep);
-+ ac->entry[ac->avail++] = objp;
-+ return;
-+ } else {
-+ STATS_INC_FREEMISS(cachep);
-+ cache_flusharray(cachep, ac);
-+ ac->entry[ac->avail++] = objp;
-+ }
-+}
-+
-+/**
-+ * kmem_cache_alloc - Allocate an object
-+ * @cachep: The cache to allocate from.
-+ * @flags: See kmalloc().
-+ *
-+ * Allocate an object from this cache. The flags are only relevant
-+ * if the cache has no available objects.
-+ */
-+void *kmem_cache_alloc(struct kmem_cache *cachep, gfp_t flags)
-+{
-+ return __cache_alloc(cachep, flags, __builtin_return_address(0));
-+}
-+EXPORT_SYMBOL(kmem_cache_alloc);
-+
-+/**
-+ * kmem_cache_zalloc - Allocate an object. The memory is set to zero.
-+ * @cache: The cache to allocate from.
-+ * @flags: See kmalloc().
-+ *
-+ * Allocate an object from this cache and set the allocated memory to zero.
-+ * The flags are only relevant if the cache has no available objects.
-+ */
-+void *kmem_cache_zalloc(struct kmem_cache *cache, gfp_t flags)
-+{
-+ void *ret = __cache_alloc(cache, flags, __builtin_return_address(0));
-+ if (ret)
-+ memset(ret, 0, obj_size(cache));
-+ return ret;
-+}
-+EXPORT_SYMBOL(kmem_cache_zalloc);
-+
-+/**
-+ * kmem_ptr_validate - check if an untrusted pointer might
-+ * be a slab entry.
-+ * @cachep: the cache we're checking against
-+ * @ptr: pointer to validate
-+ *
-+ * This verifies that the untrusted pointer looks sane:
-+ * it is _not_ a guarantee that the pointer is actually
-+ * part of the slab cache in question, but it at least
-+ * validates that the pointer can be dereferenced and
-+ * looks half-way sane.
-+ *
-+ * Currently only used for dentry validation.
-+ */
-+int kmem_ptr_validate(struct kmem_cache *cachep, const void *ptr)
-+{
-+ unsigned long addr = (unsigned long)ptr;
-+ unsigned long min_addr = PAGE_OFFSET;
-+ unsigned long align_mask = BYTES_PER_WORD - 1;
-+ unsigned long size = cachep->buffer_size;
-+ struct page *page;
-+
-+ if (unlikely(addr < min_addr))
-+ goto out;
-+ if (unlikely(addr > (unsigned long)high_memory - size))
-+ goto out;
-+ if (unlikely(addr & align_mask))
-+ goto out;
-+ if (unlikely(!kern_addr_valid(addr)))
-+ goto out;
-+ if (unlikely(!kern_addr_valid(addr + size - 1)))
-+ goto out;
-+ page = virt_to_page(ptr);
-+ if (unlikely(!PageSlab(page)))
-+ goto out;
-+ if (unlikely(page_get_cache(page) != cachep))
-+ goto out;
-+ return 1;
-+out:
-+ return 0;
-+}
-+
-+#ifdef CONFIG_NUMA
-+void *kmem_cache_alloc_node(struct kmem_cache *cachep, gfp_t flags, int nodeid)
-+{
-+ return __cache_alloc_node(cachep, flags, nodeid,
-+ __builtin_return_address(0));
-+}
-+EXPORT_SYMBOL(kmem_cache_alloc_node);
-+
-+static __always_inline void *
-+__do_kmalloc_node(size_t size, gfp_t flags, int node, void *caller)
-+{
-+ struct kmem_cache *cachep;
-+
-+ cachep = kmem_find_general_cachep(size, flags);
-+ if (unlikely(cachep == NULL))
-+ return NULL;
-+ return kmem_cache_alloc_node(cachep, flags, node);
-+}
-+
-+#ifdef CONFIG_DEBUG_SLAB
-+void *__kmalloc_node(size_t size, gfp_t flags, int node)
-+{
-+ return __do_kmalloc_node(size, flags, node,
-+ __builtin_return_address(0));
-+}
-+EXPORT_SYMBOL(__kmalloc_node);
-+
-+void *__kmalloc_node_track_caller(size_t size, gfp_t flags,
-+ int node, void *caller)
-+{
-+ return __do_kmalloc_node(size, flags, node, caller);
-+}
-+EXPORT_SYMBOL(__kmalloc_node_track_caller);
-+#else
-+void *__kmalloc_node(size_t size, gfp_t flags, int node)
-+{
-+ return __do_kmalloc_node(size, flags, node, NULL);
-+}
-+EXPORT_SYMBOL(__kmalloc_node);
-+#endif /* CONFIG_DEBUG_SLAB */
-+#endif /* CONFIG_NUMA */
-+
-+/**
-+ * __do_kmalloc - allocate memory
-+ * @size: how many bytes of memory are required.
-+ * @flags: the type of memory to allocate (see kmalloc).
-+ * @caller: function caller for debug tracking of the caller
-+ */
-+static __always_inline void *__do_kmalloc(size_t size, gfp_t flags,
-+ void *caller)
-+{
-+ struct kmem_cache *cachep;
-+
-+ /* If you want to save a few bytes .text space: replace
-+ * __ with kmem_.
-+ * Then kmalloc uses the uninlined functions instead of the inline
-+ * functions.
-+ */
-+ cachep = __find_general_cachep(size, flags);
-+ if (unlikely(cachep == NULL))
-+ return NULL;
-+ return __cache_alloc(cachep, flags, caller);
-+}
-+
-+
-+#ifdef CONFIG_DEBUG_SLAB
-+void *__kmalloc(size_t size, gfp_t flags)
-+{
-+ return __do_kmalloc(size, flags, __builtin_return_address(0));
-+}
-+EXPORT_SYMBOL(__kmalloc);
-+
-+void *__kmalloc_track_caller(size_t size, gfp_t flags, void *caller)
-+{
-+ return __do_kmalloc(size, flags, caller);
-+}
-+EXPORT_SYMBOL(__kmalloc_track_caller);
-+
-+#else
-+void *__kmalloc(size_t size, gfp_t flags)
-+{
-+ return __do_kmalloc(size, flags, NULL);
-+}
-+EXPORT_SYMBOL(__kmalloc);
-+#endif
-+
-+/**
-+ * krealloc - reallocate memory. The contents will remain unchanged.
-+ * @p: object to reallocate memory for.
-+ * @new_size: how many bytes of memory are required.
-+ * @flags: the type of memory to allocate.
-+ *
-+ * The contents of the object pointed to are preserved up to the
-+ * lesser of the new and old sizes. If @p is %NULL, krealloc()
-+ * behaves exactly like kmalloc(). If @size is 0 and @p is not a
-+ * %NULL pointer, the object pointed to is freed.
-+ */
-+void *krealloc(const void *p, size_t new_size, gfp_t flags)
-+{
-+ struct kmem_cache *cache, *new_cache;
-+ void *ret;
-+
-+ if (unlikely(!p))
-+ return kmalloc_track_caller(new_size, flags);
-+
-+ if (unlikely(!new_size)) {
-+ kfree(p);
-+ return NULL;
-+ }
-+
-+ cache = virt_to_cache(p);
-+ new_cache = __find_general_cachep(new_size, flags);
-+
-+ /*
-+ * If new size fits in the current cache, bail out.
-+ */
-+ if (likely(cache == new_cache))
-+ return (void *)p;
-+
-+ /*
-+ * We are on the slow-path here so do not use __cache_alloc
-+ * because it bloats kernel text.
-+ */
-+ ret = kmalloc_track_caller(new_size, flags);
-+ if (ret) {
-+ memcpy(ret, p, min(new_size, ksize(p)));
-+ kfree(p);
-+ }
-+ return ret;
-+}
-+EXPORT_SYMBOL(krealloc);
-+
-+/**
-+ * kmem_cache_free - Deallocate an object
-+ * @cachep: The cache the allocation was from.
-+ * @objp: The previously allocated object.
-+ *
-+ * Free an object which was previously allocated from this
-+ * cache.
-+ */
-+void kmem_cache_free(struct kmem_cache *cachep, void *objp)
-+{
-+ unsigned long flags;
-+
-+ BUG_ON(virt_to_cache(objp) != cachep);
-+
-+ local_irq_save(flags);
-+ debug_check_no_locks_freed(objp, obj_size(cachep));
-+ __cache_free(cachep, objp);
-+ local_irq_restore(flags);
-+}
-+EXPORT_SYMBOL(kmem_cache_free);
-+
-+/**
-+ * kfree - free previously allocated memory
-+ * @objp: pointer returned by kmalloc.
-+ *
-+ * If @objp is NULL, no operation is performed.
-+ *
-+ * Don't free memory not originally allocated by kmalloc()
-+ * or you will run into trouble.
-+ */
-+void kfree(const void *objp)
-+{
-+ struct kmem_cache *c;
-+ unsigned long flags;
-+
-+ if (unlikely(!objp))
-+ return;
-+ local_irq_save(flags);
-+ kfree_debugcheck(objp);
-+ c = virt_to_cache(objp);
-+ debug_check_no_locks_freed(objp, obj_size(c));
-+ __cache_free(c, (void *)objp);
-+ local_irq_restore(flags);
-+}
-+EXPORT_SYMBOL(kfree);
-+
-+unsigned int kmem_cache_size(struct kmem_cache *cachep)
-+{
-+ return obj_size(cachep);
-+}
-+EXPORT_SYMBOL(kmem_cache_size);
-+
-+const char *kmem_cache_name(struct kmem_cache *cachep)
-+{
-+ return cachep->name;
-+}
-+EXPORT_SYMBOL_GPL(kmem_cache_name);
-+
-+/*
-+ * This initializes kmem_list3 or resizes varioius caches for all nodes.
-+ */
-+static int alloc_kmemlist(struct kmem_cache *cachep)
-+{
-+ int node;
-+ struct kmem_list3 *l3;
-+ struct array_cache *new_shared;
-+ struct array_cache **new_alien = NULL;
-+
-+ for_each_online_node(node) {
-+
-+ if (use_alien_caches) {
-+ new_alien = alloc_alien_cache(node, cachep->limit);
-+ if (!new_alien)
-+ goto fail;
-+ }
-+
-+ new_shared = NULL;
-+ if (cachep->shared) {
-+ new_shared = alloc_arraycache(node,
-+ cachep->shared*cachep->batchcount,
-+ 0xbaadf00d);
-+ if (!new_shared) {
-+ free_alien_cache(new_alien);
-+ goto fail;
-+ }
-+ }
-+
-+ l3 = cachep->nodelists[node];
-+ if (l3) {
-+ struct array_cache *shared = l3->shared;
-+
-+ spin_lock_irq(&l3->list_lock);
-+
-+ if (shared)
-+ free_block(cachep, shared->entry,
-+ shared->avail, node);
-+
-+ l3->shared = new_shared;
-+ if (!l3->alien) {
-+ l3->alien = new_alien;
-+ new_alien = NULL;
-+ }
-+ l3->free_limit = (1 + nr_cpus_node(node)) *
-+ cachep->batchcount + cachep->num;
-+ spin_unlock_irq(&l3->list_lock);
-+ kfree(shared);
-+ free_alien_cache(new_alien);
-+ continue;
-+ }
-+ l3 = kmalloc_node(sizeof(struct kmem_list3), GFP_KERNEL, node);
-+ if (!l3) {
-+ free_alien_cache(new_alien);
-+ kfree(new_shared);
-+ goto fail;
-+ }
-+
-+ kmem_list3_init(l3);
-+ l3->next_reap = jiffies + REAPTIMEOUT_LIST3 +
-+ ((unsigned long)cachep) % REAPTIMEOUT_LIST3;
-+ l3->shared = new_shared;
-+ l3->alien = new_alien;
-+ l3->free_limit = (1 + nr_cpus_node(node)) *
-+ cachep->batchcount + cachep->num;
-+ cachep->nodelists[node] = l3;
-+ }
-+ return 0;
-+
-+fail:
-+ if (!cachep->next.next) {
-+ /* Cache is not active yet. Roll back what we did */
-+ node--;
-+ while (node >= 0) {
-+ if (cachep->nodelists[node]) {
-+ l3 = cachep->nodelists[node];
-+
-+ kfree(l3->shared);
-+ free_alien_cache(l3->alien);
-+ kfree(l3);
-+ cachep->nodelists[node] = NULL;
-+ }
-+ node--;
-+ }
-+ }
-+ return -ENOMEM;
-+}
-+
-+struct ccupdate_struct {
-+ struct kmem_cache *cachep;
-+ struct array_cache *new[NR_CPUS];
-+};
-+
-+static void do_ccupdate_local(void *info)
-+{
-+ struct ccupdate_struct *new = info;
-+ struct array_cache *old;
-+
-+ check_irq_off();
-+ old = cpu_cache_get(new->cachep);
-+
-+ new->cachep->array[smp_processor_id()] = new->new[smp_processor_id()];
-+ new->new[smp_processor_id()] = old;
-+}
-+
-+/* Always called with the cache_chain_mutex held */
-+static int do_tune_cpucache(struct kmem_cache *cachep, int limit,
-+ int batchcount, int shared)
-+{
-+ struct ccupdate_struct *new;
-+ int i;
-+
-+ new = kzalloc(sizeof(*new), GFP_KERNEL);
-+ if (!new)
-+ return -ENOMEM;
-+
-+ for_each_online_cpu(i) {
-+ new->new[i] = alloc_arraycache(cpu_to_node(i), limit,
-+ batchcount);
-+ if (!new->new[i]) {
-+ for (i--; i >= 0; i--)
-+ kfree(new->new[i]);
-+ kfree(new);
-+ return -ENOMEM;
-+ }
-+ }
-+ new->cachep = cachep;
-+
-+ on_each_cpu(do_ccupdate_local, (void *)new, 1, 1);
-+
-+ check_irq_on();
-+ cachep->batchcount = batchcount;
-+ cachep->limit = limit;
-+ cachep->shared = shared;
-+
-+ for_each_online_cpu(i) {
-+ struct array_cache *ccold = new->new[i];
-+ if (!ccold)
-+ continue;
-+ spin_lock_irq(&cachep->nodelists[cpu_to_node(i)]->list_lock);
-+ free_block(cachep, ccold->entry, ccold->avail, cpu_to_node(i));
-+ spin_unlock_irq(&cachep->nodelists[cpu_to_node(i)]->list_lock);
-+ kfree(ccold);
-+ }
-+ kfree(new);
-+ return alloc_kmemlist(cachep);
-+}
-+
-+/* Called with cache_chain_mutex held always */
-+static int enable_cpucache(struct kmem_cache *cachep)
-+{
-+ int err;
-+ int limit, shared;
-+
-+ /*
-+ * The head array serves three purposes:
-+ * - create a LIFO ordering, i.e. return objects that are cache-warm
-+ * - reduce the number of spinlock operations.
-+ * - reduce the number of linked list operations on the slab and
-+ * bufctl chains: array operations are cheaper.
-+ * The numbers are guessed, we should auto-tune as described by
-+ * Bonwick.
-+ */
-+ if (cachep->buffer_size > 131072)
-+ limit = 1;
-+ else if (cachep->buffer_size > PAGE_SIZE)
-+ limit = 8;
-+ else if (cachep->buffer_size > 1024)
-+ limit = 24;
-+ else if (cachep->buffer_size > 256)
-+ limit = 54;
-+ else
-+ limit = 120;
-+
-+ /*
-+ * CPU bound tasks (e.g. network routing) can exhibit cpu bound
-+ * allocation behaviour: Most allocs on one cpu, most free operations
-+ * on another cpu. For these cases, an efficient object passing between
-+ * cpus is necessary. This is provided by a shared array. The array
-+ * replaces Bonwick's magazine layer.
-+ * On uniprocessor, it's functionally equivalent (but less efficient)
-+ * to a larger limit. Thus disabled by default.
-+ */
-+ shared = 0;
-+ if (cachep->buffer_size <= PAGE_SIZE && num_possible_cpus() > 1)
-+ shared = 8;
-+
-+#if DEBUG
-+ /*
-+ * With debugging enabled, large batchcount lead to excessively long
-+ * periods with disabled local interrupts. Limit the batchcount
-+ */
-+ if (limit > 32)
-+ limit = 32;
++#undef CONFIG_CHOPSTIX
++#ifdef CONFIG_CHOPSTIX
++struct event_spec {
++ unsigned long pc;
++ unsigned long dcookie;
++ unsigned count;
++ unsigned char reason;
++};
+#endif
-+ err = do_tune_cpucache(cachep, limit, (limit + 1) / 2, shared);
-+ if (err)
-+ printk(KERN_ERR "enable_cpucache failed for %s, error %d.\n",
-+ cachep->name, -err);
-+ return err;
-+}
+
+ /*
+ * In the DEBUG case we are using the "NULL fastpath" for mutexes,
+@@ -43,6 +54,9 @@
+ __mutex_init(struct mutex *lock, const char *name, struct lock_class_key *key)
+ {
+ atomic_set(&lock->count, 1);
++#ifdef CONFIG_CHOPSTIX
++ lock->owner=NULL;
++#endif
+ spin_lock_init(&lock->wait_lock);
+ INIT_LIST_HEAD(&lock->wait_list);
+
+@@ -88,6 +102,7 @@
+ * The locking fastpath is the 1->0 transition from
+ * 'unlocked' into 'locked' state.
+ */
+
-+/*
-+ * Drain an array if it contains any elements taking the l3 lock only if
-+ * necessary. Note that the l3 listlock also protects the array_cache
-+ * if drain_array() is used on the shared array.
-+ */
-+void drain_array(struct kmem_cache *cachep, struct kmem_list3 *l3,
-+ struct array_cache *ac, int force, int node)
-+{
-+ int tofree;
+ __mutex_fastpath_lock(&lock->count, __mutex_lock_slowpath);
+ }
+
+@@ -168,6 +183,27 @@
+ }
+ __set_task_state(task, state);
+
++#ifdef CONFIG_CHOPSTIX
++ if (rec_event) {
++ if (lock->owner) {
++ struct event event;
++ struct event_spec espec;
++ struct task_struct *p = lock->owner->task;
++ /*spin_lock(&p->alloc_lock);*/
++ espec.reason = 0; /* lock */
++ event.event_data=&espec;
++ event.task = p;
++ espec.pc=lock;
++ event.event_type=5;
++ (*rec_event)(&event, 1);
++ /*spin_unlock(&p->alloc_lock);*/
+
-+ if (!ac || !ac->avail)
-+ return;
-+ if (ac->touched && !force) {
-+ ac->touched = 0;
-+ } else {
-+ spin_lock_irq(&l3->list_lock);
-+ if (ac->avail) {
-+ tofree = force ? ac->avail : (ac->limit + 4) / 5;
-+ if (tofree > ac->avail)
-+ tofree = (ac->avail + 1) / 2;
-+ free_block(cachep, ac->entry, tofree, node);
-+ ac->avail -= tofree;
-+ memmove(ac->entry, &(ac->entry[tofree]),
-+ sizeof(void *) * ac->avail);
++ }
++ else
++ BUG();
+ }
-+ spin_unlock_irq(&l3->list_lock);
-+ }
-+}
-+
-+/**
-+ * cache_reap - Reclaim memory from caches.
-+ * @w: work descriptor
-+ *
-+ * Called from workqueue/eventd every few seconds.
-+ * Purpose:
-+ * - clear the per-cpu caches for this CPU.
-+ * - return freeable pages to the main free memory pool.
-+ *
-+ * If we cannot acquire the cache chain mutex then just give up - we'll try
-+ * again on the next iteration.
-+ */
-+static void cache_reap(struct work_struct *w)
-+{
-+ struct kmem_cache *searchp;
-+ struct kmem_list3 *l3;
-+ int node = numa_node_id();
-+ struct delayed_work *work =
-+ container_of(w, struct delayed_work, work);
-+
-+ if (!mutex_trylock(&cache_chain_mutex))
-+ /* Give up. Setup the next iteration. */
-+ goto out;
-+
-+ list_for_each_entry(searchp, &cache_chain, next) {
-+ check_irq_on();
-+
-+ /*
-+ * We only take the l3 lock if absolutely necessary and we
-+ * have established with reasonable certainty that
-+ * we can do some work if the lock was obtained.
-+ */
-+ l3 = searchp->nodelists[node];
-+
-+ reap_alien(searchp, l3);
-+
-+ drain_array(searchp, l3, cpu_cache_get(searchp), 0, node);
-+
-+ /*
-+ * These are racy checks but it does not matter
-+ * if we skip one check or scan twice.
-+ */
-+ if (time_after(l3->next_reap, jiffies))
-+ goto next;
++#endif
+
-+ l3->next_reap = jiffies + REAPTIMEOUT_LIST3;
+ /* didnt get the lock, go to sleep: */
+ spin_unlock_mutex(&lock->wait_lock, flags);
+ schedule();
+@@ -177,6 +213,9 @@
+ /* got the lock - rejoice! */
+ mutex_remove_waiter(lock, &waiter, task_thread_info(task));
+ debug_mutex_set_owner(lock, task_thread_info(task));
++#ifdef CONFIG_CHOPSTIX
++ lock->owner = task_thread_info(task);
++#endif
+
+ /* set it to 0 if there are no waiters left: */
+ if (likely(list_empty(&lock->wait_list)))
+@@ -202,6 +241,7 @@
+ mutex_lock_nested(struct mutex *lock, unsigned int subclass)
+ {
+ might_sleep();
+
-+ drain_array(searchp, l3, l3->shared, 0, node);
+ __mutex_lock_common(lock, TASK_UNINTERRUPTIBLE, subclass);
+ }
+
+@@ -211,6 +251,7 @@
+ mutex_lock_interruptible_nested(struct mutex *lock, unsigned int subclass)
+ {
+ might_sleep();
+
-+ if (l3->free_touched)
-+ l3->free_touched = 0;
-+ else {
-+ int freed;
+ return __mutex_lock_common(lock, TASK_INTERRUPTIBLE, subclass);
+ }
+
+@@ -246,6 +287,23 @@
+
+ debug_mutex_wake_waiter(lock, waiter);
+
++#ifdef CONFIG_CHOPSTIX
++ if (rec_event) {
++ if (lock->owner) {
++ struct event event;
++ struct event_spec espec;
+
-+ freed = drain_freelist(searchp, l3, (l3->free_limit +
-+ 5 * searchp->num - 1) / (5 * searchp->num));
-+ STATS_ADD_REAPED(searchp, freed);
++ espec.reason = 1; /* unlock */
++ event.event_data=&espec;
++ event.task = lock->owner->task;
++ espec.pc=lock;
++ event.event_type=5;
++ (*rec_event)(&event, 1);
++ }
++ else
++ BUG();
+ }
-+next:
-+ cond_resched();
-+ }
-+ check_irq_on();
-+ mutex_unlock(&cache_chain_mutex);
-+ next_reap_node();
-+out:
-+ /* Set up the next iteration */
-+ schedule_delayed_work(work, round_jiffies_relative(REAPTIMEOUT_CPUC));
-+}
-+
-+#ifdef CONFIG_PROC_FS
-+
-+static void print_slabinfo_header(struct seq_file *m)
-+{
-+ /*
-+ * Output format version, so at least we can change it
-+ * without _too_ many complaints.
-+ */
-+#if STATS
-+ seq_puts(m, "slabinfo - version: 2.1 (statistics)\n");
-+#else
-+ seq_puts(m, "slabinfo - version: 2.1\n");
-+#endif
-+ seq_puts(m, "# name <active_objs> <num_objs> <objsize> "
-+ "<objperslab> <pagesperslab>");
-+ seq_puts(m, " : tunables <limit> <batchcount> <sharedfactor>");
-+ seq_puts(m, " : slabdata <active_slabs> <num_slabs> <sharedavail>");
-+#if STATS
-+ seq_puts(m, " : globalstat <listallocs> <maxobjs> <grown> <reaped> "
-+ "<error> <maxfreeable> <nodeallocs> <remotefrees> <alienoverflow>");
-+ seq_puts(m, " : cpustat <allochit> <allocmiss> <freehit> <freemiss>");
+#endif
-+ seq_putc(m, '\n');
-+}
-+
-+static void *s_start(struct seq_file *m, loff_t *pos)
-+{
-+ loff_t n = *pos;
-+ struct list_head *p;
-+
-+ mutex_lock(&cache_chain_mutex);
-+ if (!n)
-+ print_slabinfo_header(m);
-+ p = cache_chain.next;
-+ while (n--) {
-+ p = p->next;
-+ if (p == &cache_chain)
-+ return NULL;
-+ }
-+ return list_entry(p, struct kmem_cache, next);
-+}
-+
-+static void *s_next(struct seq_file *m, void *p, loff_t *pos)
-+{
-+ struct kmem_cache *cachep = p;
-+ ++*pos;
-+ return cachep->next.next == &cache_chain ?
-+ NULL : list_entry(cachep->next.next, struct kmem_cache, next);
-+}
-+
-+static void s_stop(struct seq_file *m, void *p)
-+{
-+ mutex_unlock(&cache_chain_mutex);
-+}
-+
-+static int s_show(struct seq_file *m, void *p)
-+{
-+ struct kmem_cache *cachep = p;
-+ struct slab *slabp;
-+ unsigned long active_objs;
-+ unsigned long num_objs;
-+ unsigned long active_slabs = 0;
-+ unsigned long num_slabs, free_objects = 0, shared_avail = 0;
-+ const char *name;
-+ char *error = NULL;
-+ int node;
-+ struct kmem_list3 *l3;
-+
-+ active_objs = 0;
-+ num_slabs = 0;
-+ for_each_online_node(node) {
-+ l3 = cachep->nodelists[node];
-+ if (!l3)
-+ continue;
-+
-+ check_irq_on();
-+ spin_lock_irq(&l3->list_lock);
+ wake_up_process(waiter->task);
+ }
+
+--- linux-2.6.22-590/kernel/sched.c 2009-03-16 20:49:42.000000000 -0400
++++ linux-2.6.22-591/kernel/sched.c 2009-03-16 20:58:59.000000000 -0400
+@@ -10,7 +10,7 @@
+ * 1998-11-19 Implemented schedule_timeout() and related stuff
+ * by Andrea Arcangeli
+ * 2002-01-04 New ultra-scalable O(1) scheduler by Ingo Molnar:
+- * hybrid priority-list and round-robin design with
++ * hybrid priority-list and round-robin deventn with
+ * an array-switch method of distributing timeslices
+ * and per-CPU runqueues. Cleanups and useful suggestions
+ * by Davide Libenzi, preemptible kernel bits by Robert Love.
+@@ -23,6 +23,7 @@
+ #include <linux/nmi.h>
+ #include <linux/init.h>
+ #include <asm/uaccess.h>
++#include <linux/arrays.h>
+ #include <linux/highmem.h>
+ #include <linux/smp_lock.h>
+ #include <asm/mmu_context.h>
+@@ -59,6 +60,9 @@
+ #include <linux/vs_sched.h>
+ #include <linux/vs_cvirt.h>
+
++#define INTERRUPTIBLE -1
++#define RUNNING 0
+
-+ list_for_each_entry(slabp, &l3->slabs_full, list) {
-+ if (slabp->inuse != cachep->num && !error)
-+ error = "slabs_full accounting error";
-+ active_objs += cachep->num;
-+ active_slabs++;
-+ }
-+ list_for_each_entry(slabp, &l3->slabs_partial, list) {
-+ if (slabp->inuse == cachep->num && !error)
-+ error = "slabs_partial inuse accounting error";
-+ if (!slabp->inuse && !error)
-+ error = "slabs_partial/inuse accounting error";
-+ active_objs += slabp->inuse;
-+ active_slabs++;
-+ }
-+ list_for_each_entry(slabp, &l3->slabs_free, list) {
-+ if (slabp->inuse && !error)
-+ error = "slabs_free/inuse accounting error";
-+ num_slabs++;
-+ }
-+ free_objects += l3->free_objects;
-+ if (l3->shared)
-+ shared_avail += l3->shared->avail;
+ /*
+ * Scheduler clock - returns current time in nanosec units.
+ * This is default implementation.
+@@ -431,6 +435,7 @@
+
+ repeat_lock_task:
+ rq = task_rq(p);
+
-+ spin_unlock_irq(&l3->list_lock);
+ spin_lock(&rq->lock);
+ if (unlikely(rq != task_rq(p))) {
+ spin_unlock(&rq->lock);
+@@ -1741,6 +1746,21 @@
+ * event cannot wake it up and insert it on the runqueue either.
+ */
+ p->state = TASK_RUNNING;
++#ifdef CONFIG_CHOPSTIX
++ /* The jiffy of last interruption */
++ if (p->state & TASK_UNINTERRUPTIBLE) {
++ p->last_interrupted=jiffies;
+ }
-+ num_slabs += active_slabs;
-+ num_objs = num_slabs * cachep->num;
-+ if (num_objs - active_objs != free_objects && !error)
-+ error = "free_objects accounting error";
-+
-+ name = cachep->name;
-+ if (error)
-+ printk(KERN_ERR "slab: cache %s error: %s\n", name, error);
-+
-+ seq_printf(m, "%-17s %6lu %6lu %6u %4u %4d",
-+ name, active_objs, num_objs, cachep->buffer_size,
-+ cachep->num, (1 << cachep->gfporder));
-+ seq_printf(m, " : tunables %4u %4u %4u",
-+ cachep->limit, cachep->batchcount, cachep->shared);
-+ seq_printf(m, " : slabdata %6lu %6lu %6lu",
-+ active_slabs, num_slabs, shared_avail);
-+#if STATS
-+ { /* list3 stats */
-+ unsigned long high = cachep->high_mark;
-+ unsigned long allocs = cachep->num_allocations;
-+ unsigned long grown = cachep->grown;
-+ unsigned long reaped = cachep->reaped;
-+ unsigned long errors = cachep->errors;
-+ unsigned long max_freeable = cachep->max_freeable;
-+ unsigned long node_allocs = cachep->node_allocs;
-+ unsigned long node_frees = cachep->node_frees;
-+ unsigned long overflows = cachep->node_overflow;
-+
-+ seq_printf(m, " : globalstat %7lu %6lu %5lu %4lu \
-+ %4lu %4lu %4lu %4lu %4lu", allocs, high, grown,
-+ reaped, errors, max_freeable, node_allocs,
-+ node_frees, overflows);
++ else
++ if (p->state & TASK_INTERRUPTIBLE) {
++ p->last_interrupted=INTERRUPTIBLE;
+ }
-+ /* cpu stats */
-+ {
-+ unsigned long allochit = atomic_read(&cachep->allochit);
-+ unsigned long allocmiss = atomic_read(&cachep->allocmiss);
-+ unsigned long freehit = atomic_read(&cachep->freehit);
-+ unsigned long freemiss = atomic_read(&cachep->freemiss);
++ else
++ p->last_interrupted=RUNNING;
+
-+ seq_printf(m, " : cpustat %6lu %6lu %6lu %6lu",
-+ allochit, allocmiss, freehit, freemiss);
-+ }
++ /* The jiffy of last execution */
++ p->last_ran_j=jiffies;
+#endif
-+ seq_putc(m, '\n');
-+ return 0;
-+}
+
+ /*
+ * Make sure we do not leak PI boosting priority to the child:
+@@ -3608,6 +3628,7 @@
+
+ #endif
+
+
-+/*
-+ * slabinfo_op - iterator that generates /proc/slabinfo
-+ *
-+ * Output layout:
-+ * cache-name
-+ * num-active-objs
-+ * total-objs
-+ * object size
-+ * num-active-slabs
-+ * total-slabs
-+ * num-pages-per-slab
-+ * + further values on SMP and with statistics enabled
-+ */
+ static inline int interactive_sleep(enum sleep_type sleep_type)
+ {
+ return (sleep_type == SLEEP_INTERACTIVE ||
+@@ -3617,16 +3638,28 @@
+ /*
+ * schedule() is the main scheduler function.
+ */
+
-+const struct seq_operations slabinfo_op = {
-+ .start = s_start,
-+ .next = s_next,
-+ .stop = s_stop,
-+ .show = s_show,
++#ifdef CONFIG_CHOPSTIX
++extern void (*rec_event)(void *,unsigned int);
++struct event_spec {
++ unsigned long pc;
++ unsigned long dcookie;
++ unsigned int count;
++ unsigned int reason;
+};
++#endif
+
-+#define MAX_SLABINFO_WRITE 128
-+/**
-+ * slabinfo_write - Tuning for the slab allocator
-+ * @file: unused
-+ * @buffer: user buffer
-+ * @count: data length
-+ * @ppos: unused
-+ */
-+ssize_t slabinfo_write(struct file *file, const char __user * buffer,
-+ size_t count, loff_t *ppos)
-+{
-+ char kbuf[MAX_SLABINFO_WRITE + 1], *tmp;
-+ int limit, batchcount, shared, res;
-+ struct kmem_cache *cachep;
+ asmlinkage void __sched schedule(void)
+ {
+ struct task_struct *prev, *next;
+ struct prio_array *array;
+ struct list_head *queue;
+ unsigned long long now;
+- unsigned long run_time;
++ unsigned long run_time, diff;
+ int cpu, idx, new_prio;
+ long *switch_count;
+ struct rq *rq;
++ int sampling_reason;
+
+ /*
+ * Test if we are atomic. Since do_exit() needs to call into
+@@ -3680,6 +3713,7 @@
+ switch_count = &prev->nivcsw;
+ if (prev->state && !(preempt_count() & PREEMPT_ACTIVE)) {
+ switch_count = &prev->nvcsw;
+
-+ if (count > MAX_SLABINFO_WRITE)
-+ return -EINVAL;
-+ if (copy_from_user(&kbuf, buffer, count))
-+ return -EFAULT;
-+ kbuf[MAX_SLABINFO_WRITE] = '\0';
+ if (unlikely((prev->state & TASK_INTERRUPTIBLE) &&
+ unlikely(signal_pending(prev))))
+ prev->state = TASK_RUNNING;
+@@ -3689,6 +3723,17 @@
+ vx_uninterruptible_inc(prev);
+ }
+ deactivate_task(prev, rq);
++#ifdef CONFIG_CHOPSTIX
++ /* An uninterruptible process just yielded. Record the current jiffie */
++ if (prev->state & TASK_UNINTERRUPTIBLE) {
++ prev->last_interrupted=jiffies;
++ }
++ /* An interruptible process just yielded, or it got preempted.
++ * Mark it as interruptible */
++ else if (prev->state & TASK_INTERRUPTIBLE) {
++ prev->last_interrupted=INTERRUPTIBLE;
++ }
++#endif
+ }
+ }
+
+@@ -3765,6 +3810,40 @@
+ prev->sleep_avg = 0;
+ prev->timestamp = prev->last_ran = now;
+
++#ifdef CONFIG_CHOPSTIX
++ /* Run only if the Chopstix module so decrees it */
++ if (rec_event) {
++ prev->last_ran_j = jiffies;
++ if (next->last_interrupted!=INTERRUPTIBLE) {
++ if (next->last_interrupted!=RUNNING) {
++ diff = (jiffies-next->last_interrupted);
++ sampling_reason = 0;/* BLOCKING */
++ }
++ else {
++ diff = jiffies-next->last_ran_j;
++ sampling_reason = 1;/* PREEMPTION */
++ }
+
-+ tmp = strchr(kbuf, ' ');
-+ if (!tmp)
-+ return -EINVAL;
-+ *tmp = '\0';
-+ tmp++;
-+ if (sscanf(tmp, " %d %d %d", &limit, &batchcount, &shared) != 3)
-+ return -EINVAL;
++ if (diff >= HZ/10) {
++ struct event event;
++ struct event_spec espec;
++ struct pt_regs *regs;
++ regs = task_pt_regs(current);
+
-+ /* Find the cache in the chain of caches. */
-+ mutex_lock(&cache_chain_mutex);
-+ res = -EINVAL;
-+ list_for_each_entry(cachep, &cache_chain, next) {
-+ if (!strcmp(cachep->name, kbuf)) {
-+ if (limit < 1 || batchcount < 1 ||
-+ batchcount > limit || shared < 0) {
-+ res = 0;
-+ } else {
-+ res = do_tune_cpucache(cachep, limit,
-+ batchcount, shared);
++ espec.reason = sampling_reason;
++ event.event_data=&espec;
++ event.task=next;
++ espec.pc=regs->eip;
++ event.event_type=2;
++ /* index in the event array currently set up */
++ /* make sure the counters are loaded in the order we want them to show up*/
++ (*rec_event)(&event, diff);
+ }
-+ break;
+ }
++ /* next has been elected to run */
++ next->last_interrupted=0;
+ }
-+ mutex_unlock(&cache_chain_mutex);
-+ if (res >= 0)
-+ res = count;
-+ return res;
-+}
++#endif
+ sched_info_switch(prev, next);
+ if (likely(prev != next)) {
+ next->timestamp = next->last_ran = now;
+@@ -4664,6 +4743,7 @@
+ get_task_struct(p);
+ read_unlock(&tasklist_lock);
+
+
-+#ifdef CONFIG_DEBUG_SLAB_LEAK
+ retval = -EPERM;
+ if ((current->euid != p->euid) && (current->euid != p->uid) &&
+ !capable(CAP_SYS_NICE))
+@@ -5032,6 +5112,7 @@
+ jiffies_to_timespec(p->policy == SCHED_FIFO ?
+ 0 : task_timeslice(p), &t);
+ read_unlock(&tasklist_lock);
+
-+static void *leaks_start(struct seq_file *m, loff_t *pos)
-+{
-+ loff_t n = *pos;
-+ struct list_head *p;
+ retval = copy_to_user(interval, &t, sizeof(t)) ? -EFAULT : 0;
+ out_nounlock:
+ return retval;
+@@ -7275,3 +7356,20 @@
+ }
+
+ #endif
+
-+ mutex_lock(&cache_chain_mutex);
-+ p = cache_chain.next;
-+ while (n--) {
-+ p = p->next;
-+ if (p == &cache_chain)
-+ return NULL;
-+ }
-+ return list_entry(p, struct kmem_cache, next);
-+}
++#ifdef CONFIG_CHOPSTIX
++void (*rec_event)(void *,unsigned int) = NULL;
+
-+static inline int add_caller(unsigned long *n, unsigned long v)
-+{
-+ unsigned long *p;
-+ int l;
-+ if (!v)
-+ return 1;
-+ l = n[1];
-+ p = n + 2;
-+ while (l) {
-+ int i = l/2;
-+ unsigned long *q = p + 2 * i;
-+ if (*q == v) {
-+ q[1]++;
-+ return 1;
-+ }
-+ if (*q > v) {
-+ l = i;
-+ } else {
-+ p = q + 2;
-+ l -= i + 1;
-+ }
-+ }
-+ if (++n[1] == n[0])
-+ return 0;
-+ memmove(p + 2, p, n[1] * 2 * sizeof(unsigned long) - ((void *)p - (void *)n));
-+ p[0] = v;
-+ p[1] = 1;
-+ return 1;
++/* To support safe calling from asm */
++asmlinkage void rec_event_asm (struct event *event_signature_in, unsigned int count) {
++ struct pt_regs *regs;
++ struct event_spec *es = event_signature_in->event_data;
++ regs = task_pt_regs(current);
++ event_signature_in->task=current;
++ es->pc=regs->eip;
++ event_signature_in->count=1;
++ (*rec_event)(event_signature_in, count);
+}
++EXPORT_SYMBOL(rec_event);
++EXPORT_SYMBOL(in_sched_functions);
++#endif
+--- linux-2.6.22-590/mm/memory.c 2009-03-16 20:49:42.000000000 -0400
++++ linux-2.6.22-591/mm/memory.c 2009-03-16 20:58:59.000000000 -0400
+@@ -59,6 +59,7 @@
+
+ #include <linux/swapops.h>
+ #include <linux/elf.h>
++#include <linux/arrays.h>
+
+ #ifndef CONFIG_NEED_MULTIPLE_NODES
+ /* use the per-pgdat data instead for discontigmem - mbligh */
+@@ -2601,6 +2602,15 @@
+ return ret;
+ }
+
++extern void (*rec_event)(void *,unsigned int);
++struct event_spec {
++ unsigned long pc;
++ unsigned long dcookie;
++ unsigned count;
++ unsigned char reason;
++};
+
-+static void handle_slab(unsigned long *n, struct kmem_cache *c, struct slab *s)
-+{
-+ void *p;
-+ int i;
-+ if (n[0] == n[1])
-+ return;
-+ for (i = 0, p = s->s_mem; i < c->num; i++, p += c->buffer_size) {
-+ if (slab_bufctl(s)[i] != BUFCTL_ACTIVE)
-+ continue;
-+ if (!add_caller(n, (unsigned long)*dbg_userword(c, p)))
-+ return;
-+ }
-+}
+
-+static void show_symbol(struct seq_file *m, unsigned long address)
-+{
-+#ifdef CONFIG_KALLSYMS
-+ unsigned long offset, size;
-+ char modname[MODULE_NAME_LEN + 1], name[KSYM_NAME_LEN + 1];
+ /*
+ * By the time we get here, we already hold the mm semaphore
+ */
+@@ -2630,6 +2640,24 @@
+ if (!pte)
+ return VM_FAULT_OOM;
+
++#ifdef CONFIG_CHOPSTIX
++ if (rec_event) {
++ struct event event;
++ struct event_spec espec;
++ struct pt_regs *regs;
++ unsigned int pc;
++ regs = task_pt_regs(current);
++ pc = regs->eip & (unsigned int) ~4095;
+
-+ if (lookup_symbol_attrs(address, &size, &offset, modname, name) == 0) {
-+ seq_printf(m, "%s+%#lx/%#lx", name, offset, size);
-+ if (modname[0])
-+ seq_printf(m, " [%s]", modname);
-+ return;
++ espec.reason = 0; /* alloc */
++ event.event_data=&espec;
++ event.task = current;
++ espec.pc=pc;
++ event.event_type=5;
++ (*rec_event)(&event, 1);
+ }
+#endif
-+ seq_printf(m, "%p", (void *)address);
-+}
+
-+static int leaks_show(struct seq_file *m, void *p)
-+{
-+ struct kmem_cache *cachep = p;
-+ struct slab *slabp;
-+ struct kmem_list3 *l3;
-+ const char *name;
-+ unsigned long *n = m->private;
-+ int node;
-+ int i;
-+
-+ if (!(cachep->flags & SLAB_STORE_USER))
-+ return 0;
-+ if (!(cachep->flags & SLAB_RED_ZONE))
-+ return 0;
-+
-+ /* OK, we can do it */
-+
-+ n[1] = 0;
+ return handle_pte_fault(mm, vma, address, pte, pmd, write_access);
+ }
+
+--- linux-2.6.22-590/mm/slab.c 2009-03-16 20:49:42.000000000 -0400
++++ linux-2.6.22-591/mm/slab.c 2009-03-16 21:00:27.000000000 -0400
+@@ -110,11 +110,13 @@
+ #include <linux/fault-inject.h>
+ #include <linux/rtmutex.h>
+ #include <linux/reciprocal_div.h>
++#include <linux/arrays.h>
+
+ #include <asm/cacheflush.h>
+ #include <asm/tlbflush.h>
+ #include <asm/page.h>
+
+
-+ for_each_online_node(node) {
-+ l3 = cachep->nodelists[node];
-+ if (!l3)
-+ continue;
+ /*
+ * DEBUG - 1 for kmem_cache_create() to honour; SLAB_RED_ZONE & SLAB_POISON.
+ * 0 for faster, smaller code (especially in the critical paths).
+@@ -249,6 +251,14 @@
+ void *addr;
+ };
+
++extern void (*rec_event)(void *,unsigned int);
++struct event_spec {
++ unsigned long pc;
++ unsigned long dcookie;
++ unsigned count;
++ unsigned char reason;
++};
+
-+ check_irq_on();
-+ spin_lock_irq(&l3->list_lock);
+ /*
+ * struct array_cache
+ *
+@@ -3443,6 +3453,19 @@
+ local_irq_restore(save_flags);
+ objp = cache_alloc_debugcheck_after(cachep, flags, objp, caller);
+ prefetchw(objp);
++#ifdef CONFIG_CHOPSTIX
++ if (rec_event && objp) {
++ struct event event;
++ struct event_spec espec;
+
-+ list_for_each_entry(slabp, &l3->slabs_full, list)
-+ handle_slab(n, cachep, slabp);
-+ list_for_each_entry(slabp, &l3->slabs_partial, list)
-+ handle_slab(n, cachep, slabp);
-+ spin_unlock_irq(&l3->list_lock);
-+ }
-+ name = cachep->name;
-+ if (n[0] == n[1]) {
-+ /* Increase the buffer size */
-+ mutex_unlock(&cache_chain_mutex);
-+ m->private = kzalloc(n[0] * 4 * sizeof(unsigned long), GFP_KERNEL);
-+ if (!m->private) {
-+ /* Too bad, we are really out */
-+ m->private = n;
-+ mutex_lock(&cache_chain_mutex);
-+ return -ENOMEM;
-+ }
-+ *(unsigned long *)m->private = n[0] * 2;
-+ kfree(n);
-+ mutex_lock(&cache_chain_mutex);
-+ /* Now make sure this entry will be retried */
-+ m->count = m->size;
-+ return 0;
-+ }
-+ for (i = 0; i < n[1]; i++) {
-+ seq_printf(m, "%s: %lu ", name, n[2*i+3]);
-+ show_symbol(m, n[2*i+2]);
-+ seq_putc(m, '\n');
++ espec.reason = 0; /* alloc */
++ event.event_data=&espec;
++ event.task = current;
++ espec.pc=caller;
++ event.event_type=5;
++ (*rec_event)(&event, cachep->buffer_size);
+ }
-+
-+ return 0;
-+}
-+
-+const struct seq_operations slabstats_op = {
-+ .start = leaks_start,
-+ .next = s_next,
-+ .stop = s_stop,
-+ .show = leaks_show,
-+};
-+#endif
+#endif
+
+ return objp;
+ }
+@@ -3549,12 +3572,26 @@
+ * Release an obj back to its cache. If the obj has a constructed state, it must
+ * be in this state _before_ it is released. Called with disabled ints.
+ */
+-static inline void __cache_free(struct kmem_cache *cachep, void *objp)
++static inline void __cache_free(struct kmem_cache *cachep, void *objp, void *caller)
+ {
+ struct array_cache *ac = cpu_cache_get(cachep);
+
+ check_irq_off();
+- objp = cache_free_debugcheck(cachep, objp, __builtin_return_address(0));
++ objp = cache_free_debugcheck(cachep, objp, caller);
++ #ifdef CONFIG_CHOPSTIX
++ if (rec_event && objp) {
++ struct event event;
++ struct event_spec espec;
++
++ espec.reason = 1; /* free */
++ event.event_data=&espec;
++ event.task = current;
++ espec.pc=caller;
++ event.event_type=4;
++ (*rec_event)(&event, cachep->buffer_size);
++ }
++ #endif
+
-+/**
-+ * ksize - get the actual amount of memory allocated for a given object
-+ * @objp: Pointer to the object
-+ *
-+ * kmalloc may internally round up allocations and return more memory
-+ * than requested. ksize() can be used to determine the actual amount of
-+ * memory allocated. The caller may use this additional memory, even though
-+ * a smaller amount of memory was initially specified with the kmalloc call.
-+ * The caller must guarantee that objp points to a valid object previously
-+ * allocated with either kmalloc() or kmem_cache_alloc(). The object
-+ * must not be freed during the duration of the call.
-+ */
-+size_t ksize(const void *objp)
-+{
-+ if (unlikely(objp == NULL))
-+ return 0;
+ vx_slab_free(cachep);
+
+ if (cache_free_alien(cachep, objp))
+@@ -3651,16 +3688,19 @@
+ __builtin_return_address(0));
+ }
+ EXPORT_SYMBOL(kmem_cache_alloc_node);
+-
+ static __always_inline void *
+ __do_kmalloc_node(size_t size, gfp_t flags, int node, void *caller)
+ {
+ struct kmem_cache *cachep;
++ void *ret;
+
-+ return obj_size(virt_to_cache(objp));
+
+ cachep = kmem_find_general_cachep(size, flags);
+ if (unlikely(cachep == NULL))
+ return NULL;
+- return kmem_cache_alloc_node(cachep, flags, node);
++ ret = kmem_cache_alloc_node(cachep, flags, node);
++
++ return ret;
+ }
+
+ #ifdef CONFIG_DEBUG_SLAB
+@@ -3696,6 +3736,7 @@
+ void *caller)
+ {
+ struct kmem_cache *cachep;
++ void *ret;
+
+ /* If you want to save a few bytes .text space: replace
+ * __ with kmem_.
+@@ -3705,9 +3746,10 @@
+ cachep = __find_general_cachep(size, flags);
+ if (unlikely(cachep == NULL))
+ return NULL;
+- return __cache_alloc(cachep, flags, caller);
+-}
++ ret = __cache_alloc(cachep, flags, caller);
+
++ return ret;
++}
+
+ #ifdef CONFIG_DEBUG_SLAB
+ void *__kmalloc(size_t size, gfp_t flags)
+@@ -3723,10 +3765,17 @@
+ EXPORT_SYMBOL(__kmalloc_track_caller);
+
+ #else
++#ifdef CONFIG_CHOPSTIX
++void *__kmalloc(size_t size, gfp_t flags)
++{
++ return __do_kmalloc(size, flags, __builtin_return_address(0));
+}
++#else
+ void *__kmalloc(size_t size, gfp_t flags)
+ {
+ return __do_kmalloc(size, flags, NULL);
+ }
++#endif
+ EXPORT_SYMBOL(__kmalloc);
+ #endif
+
+@@ -3792,7 +3841,7 @@
+
+ local_irq_save(flags);
+ debug_check_no_locks_freed(objp, obj_size(cachep));
+- __cache_free(cachep, objp);
++ __cache_free(cachep, objp,__builtin_return_address(0));
+ local_irq_restore(flags);
+ }
+ EXPORT_SYMBOL(kmem_cache_free);
+@@ -3817,7 +3866,7 @@
+ kfree_debugcheck(objp);
+ c = virt_to_cache(objp);
+ debug_check_no_locks_freed(objp, obj_size(c));
+- __cache_free(c, (void *)objp);
++ __cache_free(c, (void *)objp,__builtin_return_address(0));
+ local_irq_restore(flags);
+ }
+ EXPORT_SYMBOL(kfree);
+