1 /* Check that GDB can correctly update a value, living in a register, 2 in the target. This pretty much relies on the compiler taking heed 3 of requests for values to be stored in registers. */ 4 5 /* NOTE: carlton/2002-12-05: These functions were all static, but for 6 whatever reason that caused GCC 3.1 to optimize away some of the 7 function calls within main even when no optimization flags were 8 passed. */ 9 10 typedef signed char charest; 11 12 charest 13 add_charest (register charest u, register charest v) 14 { 15 return u + v; 16 } 17 18 short 19 add_short (register short u, register short v) 20 { 21 return u + v; 22 } 23 24 int 25 add_int (register int u, register int v) 26 { 27 return u + v; 28 } 29 30 long 31 add_long (register long u, register long v) 32 { 33 return u + v; 34 } 35 36 typedef long long longest; 37 38 longest 39 add_longest (register longest u, register longest v) 40 { 41 return u + v; 42 } 43 44 float 45 add_float (register float u, register float v) 46 { 47 return u + v; 48 } 49 50 double 51 add_double (register double u, register double v) 52 { 53 return u + v; 54 } 55 56 typedef long double doublest; 57 58 doublest 59 add_doublest (register doublest u, register doublest v) 60 { 61 return u + v; 62 } 63 64 /* */ 65 66 charest 67 wack_charest (register charest u, register charest v) 68 { 69 register charest l = u, r = v; 70 l = add_charest (l, r); 71 return l + r; 72 } 73 74 short 75 wack_short (register short u, register short v) 76 { 77 register short l = u, r = v; 78 l = add_short (l, r); 79 return l + r; 80 } 81 82 int 83 wack_int (register int u, register int v) 84 { 85 register int l = u, r = v; 86 l = add_int (l, r); 87 return l + r; 88 } 89 90 long 91 wack_long (register long u, register long v) 92 { 93 register long l = u, r = v; 94 l = add_long (l, r); 95 return l + r; 96 } 97 98 long 99 wack_longest (register longest u, register longest v) 100 { 101 register longest l = u, r = v; 102 l = add_longest (l, r); 103 return l + r; 104 } 105 106 float 107 wack_float (register float u, register float v) 108 { 109 register float l = u, r = v; 110 l = add_float (l, r); 111 return l + r; 112 } 113 114 double 115 wack_double (register double u, register double v) 116 { 117 register double l = u, r = v; 118 l = add_double (l, r); 119 return l + r; 120 } 121 122 doublest 123 wack_doublest (register doublest u, register doublest v) 124 { 125 register doublest l = u, r = v; 126 l = add_doublest (l, r); 127 return l + r; 128 } 129 130 /* */ 131 132 struct s_1 { short s[1]; } z_1, s_1; 133 struct s_2 { short s[2]; } z_2, s_2; 134 struct s_3 { short s[3]; } z_3, s_3; 135 struct s_4 { short s[4]; } z_4, s_4; 136 137 struct s_1 138 add_struct_1 (struct s_1 s) 139 { 140 int i; 141 for (i = 0; i < sizeof (s) / sizeof (s.s[0]); i++) 142 { 143 s.s[i] = s.s[i] + s.s[i]; 144 } 145 return s; 146 } 147 148 struct s_2 149 add_struct_2 (struct s_2 s) 150 { 151 int i; 152 for (i = 0; i < sizeof (s) / sizeof (s.s[0]); i++) 153 { 154 s.s[i] = s.s[i] + s.s[i]; 155 } 156 return s; 157 } 158 159 struct s_3 160 add_struct_3 (struct s_3 s) 161 { 162 int i; 163 for (i = 0; i < sizeof (s) / sizeof (s.s[0]); i++) 164 { 165 s.s[i] = s.s[i] + s.s[i]; 166 } 167 return s; 168 } 169 170 struct s_4 171 add_struct_4 (struct s_4 s) 172 { 173 int i; 174 for (i = 0; i < sizeof (s) / sizeof (s.s[0]); i++) 175 { 176 s.s[i] = s.s[i] + s.s[i]; 177 } 178 return s; 179 } 180 181 struct s_1 182 wack_struct_1 (void) 183 { 184 int i; register struct s_1 u = z_1; 185 for (i = 0; i < sizeof (s_1) / sizeof (s_1.s[0]); i++) { s_1.s[i] = i + 1; } 186 u = add_struct_1 (u); 187 return u; 188 } 189 190 struct s_2 191 wack_struct_2 (void) 192 { 193 int i; register struct s_2 u = z_2; 194 for (i = 0; i < sizeof (s_2) / sizeof (s_2.s[0]); i++) { s_2.s[i] = i + 1; } 195 u = add_struct_2 (u); 196 return u; 197 } 198 199 struct s_3 200 wack_struct_3 (void) 201 { 202 int i; register struct s_3 u = z_3; 203 for (i = 0; i < sizeof (s_3) / sizeof (s_3.s[0]); i++) { s_3.s[i] = i + 1; } 204 u = add_struct_3 (u); 205 return u; 206 } 207 208 struct s_4 209 wack_struct_4 (void) 210 { 211 int i; register struct s_4 u = z_4; 212 for (i = 0; i < sizeof (s_4) / sizeof (s_4.s[0]); i++) { s_4.s[i] = i + 1; } 213 u = add_struct_4 (u); 214 return u; 215 } 216 217 /* */ 218 219 struct f_1 {unsigned i:1;unsigned j:1;unsigned k:1; } f_1 = {1,1,1}, F_1; 220 struct f_2 {unsigned i:2;unsigned j:2;unsigned k:2; } f_2 = {1,1,1}, F_2; 221 struct f_3 {unsigned i:3;unsigned j:3;unsigned k:3; } f_3 = {1,1,1}, F_3; 222 struct f_4 {unsigned i:4;unsigned j:4;unsigned k:4; } f_4 = {1,1,1}, F_4; 223 224 struct f_1 225 wack_field_1 (void) 226 { 227 register struct f_1 u = f_1; 228 return u; 229 } 230 231 struct f_2 232 wack_field_2 (void) 233 { 234 register struct f_2 u = f_2; 235 return u; 236 } 237 238 struct f_3 239 wack_field_3 (void) 240 { 241 register struct f_3 u = f_3; 242 return u; 243 } 244 245 struct f_4 246 wack_field_4 (void) 247 { 248 register struct f_4 u = f_4; 249 return u; 250 } 251 252 /* */ 253 254 int 255 main () 256 { 257 /* These calls are for current frame test. */ 258 wack_charest (-1, -2); 259 wack_short (-1, -2); 260 wack_int (-1, -2); 261 wack_long (-1, -2); 262 wack_longest (-1, -2); 263 wack_float (-1, -2); 264 wack_double (-1, -2); 265 wack_doublest (-1, -2); 266 267 /* These calls are for up frame. */ 268 wack_charest (-1, -2); 269 wack_short (-1, -2); 270 wack_int (-1, -2); 271 wack_long (-1, -2); 272 wack_longest (-1, -2); 273 wack_float (-1, -2); 274 wack_double (-1, -2); 275 wack_doublest (-1, -2); 276 277 /* These calls are for current frame test. */ 278 wack_struct_1 (); 279 wack_struct_2 (); 280 wack_struct_3 (); 281 wack_struct_4 (); 282 283 /* These calls are for up frame. */ 284 wack_struct_1 (); 285 wack_struct_2 (); 286 wack_struct_3 (); 287 wack_struct_4 (); 288 289 wack_field_1 (); 290 wack_field_2 (); 291 wack_field_3 (); 292 wack_field_4 (); 293 294 return 0; 295 } 296