~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/s390/lib/probes.c

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /arch/s390/lib/probes.c (Version linux-6.12-rc7) and /arch/m68k/lib/probes.c (Version linux-6.8.12)


  1 // SPDX-License-Identifier: GPL-2.0                 1 
  2 /*                                                
  3  *    Common helper functions for kprobes and     
  4  *                                                
  5  *    Copyright IBM Corp. 2014                    
  6  */                                               
  7                                                   
  8 #include <linux/errno.h>                          
  9 #include <asm/kprobes.h>                          
 10 #include <asm/dis.h>                              
 11                                                   
 12 int probe_is_prohibited_opcode(u16 *insn)         
 13 {                                                 
 14         if (!is_known_insn((unsigned char *)in    
 15                 return -EINVAL;                   
 16         switch (insn[0] >> 8) {                   
 17         case 0x0c:      /* bassm */               
 18         case 0x0b:      /* bsm   */               
 19         case 0x83:      /* diag  */               
 20         case 0x44:      /* ex    */               
 21         case 0xac:      /* stnsm */               
 22         case 0xad:      /* stosm */               
 23                 return -EINVAL;                   
 24         case 0xc6:                                
 25                 switch (insn[0] & 0x0f) {         
 26                 case 0x00: /* exrl   */           
 27                         return -EINVAL;           
 28                 }                                 
 29         }                                         
 30         switch (insn[0]) {                        
 31         case 0x0101:    /* pr    */               
 32         case 0xb25a:    /* bsa   */               
 33         case 0xb240:    /* bakr  */               
 34         case 0xb258:    /* bsg   */               
 35         case 0xb218:    /* pc    */               
 36         case 0xb228:    /* pt    */               
 37         case 0xb98d:    /* epsw  */               
 38         case 0xe560:    /* tbegin */              
 39         case 0xe561:    /* tbeginc */             
 40         case 0xb2f8:    /* tend  */               
 41                 return -EINVAL;                   
 42         }                                         
 43         return 0;                                 
 44 }                                                 
 45                                                   
 46 int probe_get_fixup_type(u16 *insn)               
 47 {                                                 
 48         /* default fixup method */                
 49         int fixup = FIXUP_PSW_NORMAL;             
 50                                                   
 51         switch (insn[0] >> 8) {                   
 52         case 0x05:      /* balr */                
 53         case 0x0d:      /* basr */                
 54                 fixup = FIXUP_RETURN_REGISTER;    
 55                 /* if r2 = 0, no branch will b    
 56                 if ((insn[0] & 0x0f) == 0)        
 57                         fixup |= FIXUP_BRANCH_    
 58                 break;                            
 59         case 0x06:      /* bctr */                
 60         case 0x07:      /* bcr  */                
 61                 fixup = FIXUP_BRANCH_NOT_TAKEN    
 62                 break;                            
 63         case 0x45:      /* bal  */                
 64         case 0x4d:      /* bas  */                
 65                 fixup = FIXUP_RETURN_REGISTER;    
 66                 break;                            
 67         case 0x47:      /* bc   */                
 68         case 0x46:      /* bct  */                
 69         case 0x86:      /* bxh  */                
 70         case 0x87:      /* bxle */                
 71                 fixup = FIXUP_BRANCH_NOT_TAKEN    
 72                 break;                            
 73         case 0x82:      /* lpsw */                
 74                 fixup = FIXUP_NOT_REQUIRED;       
 75                 break;                            
 76         case 0xb2:      /* lpswe */               
 77                 if ((insn[0] & 0xff) == 0xb2)     
 78                         fixup = FIXUP_NOT_REQU    
 79                 break;                            
 80         case 0xa7:      /* bras */                
 81                 if ((insn[0] & 0x0f) == 0x05)     
 82                         fixup |= FIXUP_RETURN_    
 83                 break;                            
 84         case 0xc0:                                
 85                 if ((insn[0] & 0x0f) == 0x05)     
 86                         fixup |= FIXUP_RETURN_    
 87                 break;                            
 88         case 0xeb:                                
 89                 switch (insn[2] & 0xff) {         
 90                 case 0x44: /* bxhg  */            
 91                 case 0x45: /* bxleg */            
 92                         fixup = FIXUP_BRANCH_N    
 93                         break;                    
 94                 }                                 
 95                 break;                            
 96         case 0xe3:      /* bctg */                
 97                 if ((insn[2] & 0xff) == 0x46)     
 98                         fixup = FIXUP_BRANCH_N    
 99                 break;                            
100         case 0xec:                                
101                 switch (insn[2] & 0xff) {         
102                 case 0xe5: /* clgrb */            
103                 case 0xe6: /* cgrb  */            
104                 case 0xf6: /* crb   */            
105                 case 0xf7: /* clrb  */            
106                 case 0xfc: /* cgib  */            
107                 case 0xfd: /* cglib */            
108                 case 0xfe: /* cib   */            
109                 case 0xff: /* clib  */            
110                         fixup = FIXUP_BRANCH_N    
111                         break;                    
112                 }                                 
113                 break;                            
114         }                                         
115         return fixup;                             
116 }                                                 
117                                                   
118 int probe_is_insn_relative_long(u16 *insn)        
119 {                                                 
120         /* Check if we have a RIL-b or RIL-c f    
121          * we need to modify in order to avoid    
122         switch (insn[0] >> 8) {                   
123         case 0xc0:                                
124                 if ((insn[0] & 0x0f) == 0x00)     
125                         return true;              
126                 break;                            
127         case 0xc4:                                
128                 switch (insn[0] & 0x0f) {         
129                 case 0x02: /* llhrl  */           
130                 case 0x04: /* lghrl  */           
131                 case 0x05: /* lhrl   */           
132                 case 0x06: /* llghrl */           
133                 case 0x07: /* sthrl  */           
134                 case 0x08: /* lgrl   */           
135                 case 0x0b: /* stgrl  */           
136                 case 0x0c: /* lgfrl  */           
137                 case 0x0d: /* lrl    */           
138                 case 0x0e: /* llgfrl */           
139                 case 0x0f: /* strl   */           
140                         return true;              
141                 }                                 
142                 break;                            
143         case 0xc6:                                
144                 switch (insn[0] & 0x0f) {         
145                 case 0x02: /* pfdrl  */           
146                 case 0x04: /* cghrl  */           
147                 case 0x05: /* chrl   */           
148                 case 0x06: /* clghrl */           
149                 case 0x07: /* clhrl  */           
150                 case 0x08: /* cgrl   */           
151                 case 0x0a: /* clgrl  */           
152                 case 0x0c: /* cgfrl  */           
153                 case 0x0d: /* crl    */           
154                 case 0x0e: /* clgfrl */           
155                 case 0x0f: /* clrl   */           
156                         return true;              
157                 }                                 
158                 break;                            
159         }                                         
160         return false;                             
161 }                                                 
162                                                   

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php