定义
在
在arch/um/Makefile中
KBUILD_CFLAGS += $(CFLAGS) $(CFLAGS-y) -D__arch_um__ \
$(ARCH_INCLUDE) $(MODE_INCLUDE) -Dvmap=kernel_vmap \
-Dlongjmp=kernel_longjmp -Dsetjmp=kernel_setjmp \
-Din6addr_loopback=kernel_in6addr_loopback \
-Din6addr_any=kernel_in6addr_any -Dstrrchr=kernel_strrchr
在arch/x86/um/setjmp_64.S中
20 .text
21 .align 4
22 .globl kernel_setjmp
23 .type kernel_setjmp, @function
24 kernel_setjmp:
25 pop %rsi # Return address, and adjust the stack
26 xorl %eax,%eax # Return value
27 movq %rbx,(%rdi)
28 movq %rsp,8(%rdi) # Post-return %rsp!
29 push %rsi # Make the call/return stack happy
30 movq %rbp,16(%rdi)
31 movq %r12,24(%rdi)
32 movq %r13,32(%rdi)
33 movq %r14,40(%rdi)
34 movq %r15,48(%rdi)
35 movq %rsi,56(%rdi) # Return address
36 ret
37
38 .size kernel_setjmp,.-kernel_setjmp
39
40 .text
41 .align 4
42 .globl kernel_longjmp
43 .type kernel_longjmp, @function
44 kernel_longjmp:
45 movl %esi,%eax # Return value (int)
46 movq (%rdi),%rbx
47 movq 8(%rdi),%rsp
48 movq 16(%rdi),%rbp
49 movq 24(%rdi),%r12
50 movq 32(%rdi),%r13
51 movq 40(%rdi),%r14
52 movq 48(%rdi),%r15
53 jmp *56(%rdi)
54
55 .size kernel_longjmp,.-kernel_longjmp