setjmp与longjmp

定义


在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  
发布了112 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/chengbeng1745/article/details/103023125
今日推荐