1 2# 3# This is a generic function to test that restoring registers during unwinding work correctly. 4# 5 6 .literal4 7 .align 2 8LC14: .long 1096810496 9LC15: .long 1097859072 10LC16: .long 1098907648 11LC17: .long 1099431936 12LC18: .long 1099956224 13LC19: .long 1100480512 14LC20: .long 1101004800 15LC21: .long 1101529088 16LC22: .long 1102053376 17LC23: .long 1102577664 18LC24: .long 1103101952 19LC25: .long 1103626240 20LC26: .long 1104150528 21LC27: .long 1104674816 22LC28: .long 1105199104 23LC29: .long 1105723392 24LC30: .long 1106247680 25LC31: .long 1106771968 26 27 .literal16 28LV23: .long 0x23232323, 0x23232322, 0x23232321, 0x23232320 29LV24: .long 0x24242424, 0x24242422, 0x24242421, 0x24242420 30LV25: .long 0x25252525, 0x25252522, 0x25252521, 0x25252520 31LV26: .long 0x26262626, 0x26262622, 0x26262621, 0x26262620 32LV27: .long 0x27272727, 0x27272722, 0x27272721, 0x27272720 33LV28: .long 0x28282828, 0x28282822, 0x28282821, 0x28282820 34LV29: .long 0x29292929, 0x29292922, 0x29292921, 0x29292920 35LV30: .long 0x30303030, 0x30303022, 0x30303021, 0x30303020 36LV31: .long 0x31313131, 0x31313122, 0x31313121, 0x31313120 37 38 .text 39.globl _unwind_tester 40_unwind_tester: 41LFB2: 42 mflr r0 43LCFI43: 44 bl saveFP ; save f14-f31 45LCFI44: 46 stmw r13,-220(r1) 47LCFI45: 48 stwu r1,-336(r1) 49LCFI46: 50 51 # load magic values into non-volatile registers 52 lis r31,0x3333 53 ori r31,r31,0x3131 54 lis r30,0x3333 55 ori r30,r30,0x3030 56 lis r29,0x2222 57 ori r29,r29,0x2929 58 lis r28,0x2222 59 ori r28,r28,0x2828 60 lis r27,0x2222 61 ori r27,r27,0x2727 62 lis r26,0x2222 63 ori r26,r26,0x2626 64 lis r25,0x2222 65 ori r25,r25,0x2525 66 lis r24,0x2222 67 ori r24,r24,0x2424 68 lis r23,0x2222 69 ori r23,r23,0x2323 70 lis r22,0x2222 71 ori r22,r22,0x2222 72 lis r21,0x2222 73 ori r21,r21,0x2121 74 lis r20,0x2222 75 ori r20,r20,0x2020 76 lis r19,0x1111 77 ori r19,r19,0x1919 78 lis r18,0x1111 79 ori r18,r18,0x1818 80 lis r17,0x1111 81 ori r17,r17,0x1717 82 lis r16,0x1111 83 ori r16,r16,0x1616 84 lis r15,0x1111 85 ori r15,r15,0x1515 86 lis r14,0x1111 87 ori r14,r14,0x1414 88 lis r13,0x1111 89 ori r13,r13,0x1313 90 91 lis r2,ha16(LC14) 92 lfs f14,lo16(LC14)(r2) 93 lis r2,ha16(LC15) 94 lfs f15,lo16(LC15)(r2) 95 lis r2,ha16(LC16) 96 lfs f16,lo16(LC16)(r2) 97 lis r2,ha16(LC17) 98 lfs f17,lo16(LC17)(r2) 99 lis r2,ha16(LC18) 100 lfs f18,lo16(LC18)(r2) 101 lis r2,ha16(LC19) 102 lfs f19,lo16(LC19)(r2) 103 lis r2,ha16(LC20) 104 lfs f20,lo16(LC20)(r2) 105 lis r2,ha16(LC21) 106 lfs f21,lo16(LC21)(r2) 107 lis r2,ha16(LC22) 108 lfs f22,lo16(LC22)(r2) 109 lis r2,ha16(LC23) 110 lfs f23,lo16(LC23)(r2) 111 lis r2,ha16(LC24) 112 lfs f24,lo16(LC24)(r2) 113 lis r2,ha16(LC25) 114 lfs f25,lo16(LC25)(r2) 115 lis r2,ha16(LC26) 116 lfs f26,lo16(LC26)(r2) 117 lis r2,ha16(LC27) 118 lfs f27,lo16(LC27)(r2) 119 lis r2,ha16(LC28) 120 lfs f28,lo16(LC28)(r2) 121 lis r2,ha16(LC29) 122 lfs f29,lo16(LC29)(r2) 123 lis r2,ha16(LC30) 124 lfs f30,lo16(LC30)(r2) 125 lis r2,ha16(LC31) 126 lfs f31,lo16(LC31)(r2) 127 128 lis r2,ha16(LV23) 129 la r2,lo16(LV23)(r2) 130 lvx v23,0,r2 131 lis r2,ha16(LV24) 132 la r2,lo16(LV24)(r2) 133 lvx v24,0,r2 134 lis r2,ha16(LV25) 135 la r2,lo16(LV25)(r2) 136 lvx v25,0,r2 137 lis r2,ha16(LV26) 138 la r2,lo16(LV26)(r2) 139 lvx v26,0,r2 140 lis r2,ha16(LV27) 141 la r2,lo16(LV27)(r2) 142 lvx v27,0,r2 143 lis r2,ha16(LV28) 144 la r2,lo16(LV28)(r2) 145 lvx v28,0,r2 146 lis r2,ha16(LV29) 147 la r2,lo16(LV29)(r2) 148 lvx v29,0,r2 149 lis r2,ha16(LV30) 150 la r2,lo16(LV30)(r2) 151 lvx v30,0,r2 152 lis r2,ha16(LV31) 153 la r2,lo16(LV31)(r2) 154 lvx v31,0,r2 155 156 lis r2,0x1234 157 ori r2,r2,0x5678 158 mtocrf 255,r2 159 160 # call test function which will invoke unwinder which "returns" here 161 mtctr r3 162 bctrl 163 164 # verify that non-volatile registers still contain magic values 165 lis r3,0x3333 166 ori r3,r3,0x3131 167 cmpw r3,r31 168 bne L2 169 lis r3,0x3333 170 ori r3,r3,0x3030 171 cmpw r3,r30 172 bne L2 173 lis r3,0x2222 174 ori r3,r3,0x2929 175 cmpw r3,r29 176 bne L2 177 lis r3,0x2222 178 ori r3,r3,0x2828 179 cmpw r3,r28 180 bne L2 181 lis r3,0x2222 182 ori r3,r3,0x2727 183 cmpw r3,r27 184 bne L2 185 lis r3,0x2222 186 ori r3,r3,0x2626 187 cmpw r3,r26 188 bne L2 189 lis r3,0x2222 190 ori r3,r3,0x2525 191 cmpw r3,r25 192 bne L2 193 lis r3,0x2222 194 ori r3,r3,0x2424 195 cmpw r3,r24 196 bne L2 197 lis r3,0x2222 198 ori r3,r3,0x2323 199 cmpw r3,r23 200 bne L2 201 lis r3,0x2222 202 ori r3,r3,0x2222 203 cmpw r3,r22 204 bne L2 205 lis r3,0x2222 206 ori r3,r3,0x2121 207 cmpw r3,r21 208 bne L2 209 lis r3,0x2222 210 ori r3,r3,0x2020 211 cmpw r3,r20 212 bne L2 213 lis r3,0x1111 214 ori r3,r3,0x1919 215 cmpw r3,r19 216 bne L2 217 lis r3,0x1111 218 ori r3,r3,0x1818 219 cmpw r3,r18 220 bne L2 221 lis r3,0x1111 222 ori r3,r3,0x1717 223 cmpw r3,r17 224 bne L2 225 lis r3,0x1111 226 ori r3,r3,0x1616 227 cmpw r3,r16 228 bne L2 229 lis r3,0x1111 230 ori r3,r3,0x1515 231 cmpw r3,r15 232 bne L2 233 lis r3,0x1111 234 ori r3,r3,0x1414 235 cmpw r3,r14 236 bne L2 237 lis r3,0x1111 238 ori r3,r3,0x1313 239 cmpw r3,r13 240 bne L2 241 242 lis r2,ha16(LC14) 243 lfs f1,lo16(LC14)(r2) 244 fcmpu cr7,f1,f14 245 bne cr7,L2 246 lis r2,ha16(LC15) 247 lfs f1,lo16(LC15)(r2) 248 fcmpu cr7,f1,f15 249 bne cr7,L2 250 lis r2,ha16(LC16) 251 lfs f1,lo16(LC16)(r2) 252 fcmpu cr7,f1,f16 253 bne cr7,L2 254 lis r2,ha16(LC17) 255 lfs f1,lo16(LC17)(r2) 256 fcmpu cr7,f1,f17 257 bne cr7,L2 258 lis r2,ha16(LC18) 259 lfs f1,lo16(LC18)(r2) 260 fcmpu cr7,f1,f18 261 bne cr7,L2 262 lis r2,ha16(LC19) 263 lfs f1,lo16(LC19)(r2) 264 fcmpu cr7,f1,f19 265 bne cr7,L2 266 lis r2,ha16(LC20) 267 lfs f1,lo16(LC20)(r2) 268 fcmpu cr7,f1,f20 269 bne cr7,L2 270 lis r2,ha16(LC21) 271 lfs f1,lo16(LC21)(r2) 272 fcmpu cr7,f1,f21 273 bne cr7,L2 274 lis r2,ha16(LC22) 275 lfs f1,lo16(LC22)(r2) 276 fcmpu cr7,f1,f22 277 bne cr7,L2 278 lis r2,ha16(LC23) 279 lfs f1,lo16(LC23)(r2) 280 fcmpu cr7,f1,f23 281 bne cr7,L2 282 lis r2,ha16(LC24) 283 lfs f1,lo16(LC24)(r2) 284 fcmpu cr7,f1,f24 285 bne cr7,L2 286 lis r2,ha16(LC25) 287 lfs f1,lo16(LC25)(r2) 288 fcmpu cr7,f1,f25 289 bne cr7,L2 290 lis r2,ha16(LC26) 291 lfs f1,lo16(LC26)(r2) 292 fcmpu cr7,f1,f26 293 bne cr7,L2 294 lis r2,ha16(LC27) 295 lfs f1,lo16(LC27)(r2) 296 fcmpu cr7,f1,f27 297 bne cr7,L2 298 lis r2,ha16(LC28) 299 lfs f1,lo16(LC28)(r2) 300 fcmpu cr7,f1,f28 301 bne cr7,L2 302 lis r2,ha16(LC29) 303 lfs f1,lo16(LC29)(r2) 304 fcmpu cr7,f1,f29 305 bne cr7,L2 306 lis r2,ha16(LC30) 307 lfs f1,lo16(LC30)(r2) 308 fcmpu cr7,f1,f30 309 bne cr7,L2 310 lis r2,ha16(LC31) 311 lfs f1,lo16(LC31)(r2) 312 fcmpu cr7,f1,f31 313 bne cr7,L2 314 315 lis r2,ha16(LV23) 316 la r2,lo16(LV23)(r2) 317 lvx v1,0,r2 318 vcmpequw. v0,v1,v23 319 beq cr6,L2 320 lis r2,ha16(LV24) 321 la r2,lo16(LV24)(r2) 322 lvx v1,0,r2 323 vcmpequw. v0,v1,v24 324 beq cr6,L2 325 lis r2,ha16(LV25) 326 la r2,lo16(LV25)(r2) 327 lvx v1,0,r2 328 vcmpequw. v0,v1,v25 329 beq cr6,L2 330 lis r2,ha16(LV26) 331 la r2,lo16(LV26)(r2) 332 lvx v1,0,r2 333 vcmpequw. v0,v1,v26 334 beq cr6,L2 335 lis r2,ha16(LV27) 336 la r2,lo16(LV27)(r2) 337 lvx v1,0,r2 338 vcmpequw. v0,v1,v27 339 beq cr6,L2 340 lis r2,ha16(LV28) 341 la r2,lo16(LV28)(r2) 342 lvx v1,0,r2 343 vcmpequw. v0,v1,v28 344 beq cr6,L2 345 lis r2,ha16(LV29) 346 la r2,lo16(LV29)(r2) 347 lvx v1,0,r2 348 vcmpequw. v0,v1,v29 349 beq cr6,L2 350 lis r2,ha16(LV30) 351 la r2,lo16(LV30)(r2) 352 lvx v1,0,r2 353 vcmpequw. v0,v1,v30 354 beq cr6,L2 355 lis r2,ha16(LV31) 356 la r2,lo16(LV31)(r2) 357 lvx v1,0,r2 358 vcmpequw. v0,v1,v31 359 beq cr6,L2 360 361 mfcr r3 362 lis r2,0x00FF 363 ori r2,r2,0xF000 364 and r3,r3,r2 365 lis r2,0x0034 366 ori r2,r2,0x5000 367 cmpw r3,r2 368 bne L2 369 370 li r3,0 371 b L3 372L2: li r3,1 373L3: 374 375 addi r1,r1,336 376 lwz r0,8(r1) 377 lmw r13,-220(r1) 378 mtlr r0 379 b restFP ; restore f14-f31 380LFE2: 381 382 383 .section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support 384EH_frame1: 385 .set L$set$0,LECIE1-LSCIE1 386 .long L$set$0 ; Length of Common Information Entry 387LSCIE1: 388 .long 0x0 ; CIE Identifier Tag 389 .byte 0x1 ; CIE Version 390 .ascii "zR\0" ; CIE Augmentation 391 .byte 0x1 ; uleb128 0x1; CIE Code Alignment Factor 392 .byte 0x7c ; sleb128 -4; CIE Data Alignment Factor 393 .byte 0x41 ; CIE RA Column 394 .byte 0x1 ; uleb128 0x1; Augmentation size 395 .byte 0x10 ; FDE Encoding (pcrel) 396 .byte 0xc ; DW_CFA_def_cfa 397 .byte 0x1 ; uleb128 0x1 398 .byte 0x0 ; uleb128 0x0 399 .align 2 400LECIE1: 401 402 .globl _unwind_tester.eh 403_unwind_tester.eh: 404LSFDE27: 405 .set L$set$34,LEFDE27-LASFDE27 406 .long L$set$34 ; FDE Length 407LASFDE27: 408 .long LASFDE27-EH_frame1 ; FDE CIE offset 409 .long LFB2-. ; FDE initial location 410 .set L$set$35,LFE2-LFB2 411 .long L$set$35 ; FDE address range 412 .byte 0x0 ; uleb128 0x0; Augmentation size 413 .byte 0x4 ; DW_CFA_advance_loc4 414 .set L$set$36,LCFI43-LFB2 415 .long L$set$36 416 .byte 0x9 ; DW_CFA_register 417 .byte 0x41 ; uleb128 0x41 418 .byte 0x0 ; uleb128 0x0 419 .byte 0x4 ; DW_CFA_advance_loc4 420 .set L$set$37,LCFI46-LCFI43 421 .long L$set$37 422 .byte 0xe ; DW_CFA_def_cfa_offset 423 .byte 0xd0,0x2 ; uleb128 0x150 424 .byte 0x9f ; DW_CFA_offset, column 0x1f 425 .byte 0x25 ; uleb128 0x25 426 .byte 0x9e ; DW_CFA_offset, column 0x1e 427 .byte 0x26 ; uleb128 0x26 428 .byte 0x9d ; DW_CFA_offset, column 0x1d 429 .byte 0x27 ; uleb128 0x27 430 .byte 0x9c ; DW_CFA_offset, column 0x1c 431 .byte 0x28 ; uleb128 0x28 432 .byte 0x9b ; DW_CFA_offset, column 0x1b 433 .byte 0x29 ; uleb128 0x29 434 .byte 0x9a ; DW_CFA_offset, column 0x1a 435 .byte 0x2a ; uleb128 0x2a 436 .byte 0x99 ; DW_CFA_offset, column 0x19 437 .byte 0x2b ; uleb128 0x2b 438 .byte 0x98 ; DW_CFA_offset, column 0x18 439 .byte 0x2c ; uleb128 0x2c 440 .byte 0x97 ; DW_CFA_offset, column 0x17 441 .byte 0x2d ; uleb128 0x2d 442 .byte 0x96 ; DW_CFA_offset, column 0x16 443 .byte 0x2e ; uleb128 0x2e 444 .byte 0x95 ; DW_CFA_offset, column 0x15 445 .byte 0x2f ; uleb128 0x2f 446 .byte 0x94 ; DW_CFA_offset, column 0x14 447 .byte 0x30 ; uleb128 0x30 448 .byte 0x93 ; DW_CFA_offset, column 0x13 449 .byte 0x31 ; uleb128 0x31 450 .byte 0x92 ; DW_CFA_offset, column 0x12 451 .byte 0x32 ; uleb128 0x32 452 .byte 0x91 ; DW_CFA_offset, column 0x11 453 .byte 0x33 ; uleb128 0x33 454 .byte 0x90 ; DW_CFA_offset, column 0x10 455 .byte 0x34 ; uleb128 0x34 456 .byte 0x8f ; DW_CFA_offset, column 0xf 457 .byte 0x35 ; uleb128 0x35 458 .byte 0x8e ; DW_CFA_offset, column 0xe 459 .byte 0x36 ; uleb128 0x36 460 .byte 0x8d ; DW_CFA_offset, column 0xd 461 .byte 0x37 ; uleb128 0x37 462 .byte 0x11 ; DW_CFA_offset_extended_sf 463 .byte 0x41 ; uleb128 0x41 464 .byte 0x7e ; sleb128 -2 465 .byte 0xbf ; DW_CFA_offset, column 0x3f 466 .byte 0x2 ; uleb128 0x2 467 .byte 0xbe ; DW_CFA_offset, column 0x3e 468 .byte 0x4 ; uleb128 0x4 469 .byte 0xbd ; DW_CFA_offset, column 0x3d 470 .byte 0x6 ; uleb128 0x6 471 .byte 0xbc ; DW_CFA_offset, column 0x3c 472 .byte 0x8 ; uleb128 0x8 473 .byte 0xbb ; DW_CFA_offset, column 0x3b 474 .byte 0xa ; uleb128 0xa 475 .byte 0xba ; DW_CFA_offset, column 0x3a 476 .byte 0xc ; uleb128 0xc 477 .byte 0xb9 ; DW_CFA_offset, column 0x39 478 .byte 0xe ; uleb128 0xe 479 .byte 0xb8 ; DW_CFA_offset, column 0x38 480 .byte 0x10 ; uleb128 0x10 481 .byte 0xb7 ; DW_CFA_offset, column 0x37 482 .byte 0x12 ; uleb128 0x12 483 .byte 0xb6 ; DW_CFA_offset, column 0x36 484 .byte 0x14 ; uleb128 0x14 485 .byte 0xb5 ; DW_CFA_offset, column 0x35 486 .byte 0x16 ; uleb128 0x16 487 .byte 0xb4 ; DW_CFA_offset, column 0x34 488 .byte 0x18 ; uleb128 0x18 489 .byte 0xb3 ; DW_CFA_offset, column 0x33 490 .byte 0x1a ; uleb128 0x1a 491 .byte 0xb2 ; DW_CFA_offset, column 0x32 492 .byte 0x1c ; uleb128 0x1c 493 .byte 0xb1 ; DW_CFA_offset, column 0x31 494 .byte 0x1e ; uleb128 0x1e 495 .byte 0xb0 ; DW_CFA_offset, column 0x30 496 .byte 0x20 ; uleb128 0x20 497 .byte 0xaf ; DW_CFA_offset, column 0x2f 498 .byte 0x22 ; uleb128 0x22 499 .byte 0xae ; DW_CFA_offset, column 0x2e 500 .byte 0x24 ; uleb128 0x24 501 .align 2 502LEFDE27: 503