1c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ RUN: llvm-mc %s -triple=armv7-unknown-linux-gnueabi -filetype=obj -o - \ 2c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ RUN: | llvm-readobj -s -sd | FileCheck %s 3c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 4c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ Check the .save directive 5c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 6c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ The .save directive records the GPR registers which are pushed to the 7c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ stack. There are 4 different unwind opcodes: 8c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ 9c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ 0xB100: pop r[3:0] 10c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ 0xA0: pop r[(4+x):4] @ r[4+x]-r[4] must be consecutive. 11c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ 0xA8: pop r14, r[(4+x):4] @ r[4+x]-r[4] must be consecutive. 12c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ 0x8000: pop r[15:4] 13c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ 14c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ If register list specifed by .save directive is possible to be encoded 15c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ by 0xA0 or 0xA8, then the assembler should prefer them over 0x8000. 16c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 17c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 18c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .syntax unified 19c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 20c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 21c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ TEST1 22c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 23c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .section .TEST1 24c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .globl func1a 25c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .align 2 26c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .type func1a,%function 27c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnstart 28c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc1a: 29c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .save {r0} 30c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien push {r0} 31c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien pop {r0} 32c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien bx lr 33c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .personality __gxx_personality_v0 34c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .handlerdata 35c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnend 36c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 37c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .globl func1b 38c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .align 2 39c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .type func1b,%function 40c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnstart 41c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc1b: 42c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .save {r0, r1} 43c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien push {r0, r1} 44c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien pop {r0, r1} 45c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien bx lr 46c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .personality __gxx_personality_v0 47c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .handlerdata 48c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnend 49c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 50c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .globl func1c 51c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .align 2 52c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .type func1c,%function 53c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnstart 54c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc1c: 55c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .save {r0, r2} 56c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien push {r0, r2} 57c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien pop {r0, r2} 58c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien bx lr 59c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .personality __gxx_personality_v0 60c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .handlerdata 61c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnend 62c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 63c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .globl func1d 64c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .align 2 65c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .type func1d,%function 66c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnstart 67c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc1d: 68c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .save {r1, r2} 69c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien push {r1, r2} 70c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien pop {r1, r2} 71c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien bx lr 72c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .personality __gxx_personality_v0 73c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .handlerdata 74c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnend 75c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 76c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .globl func1e 77c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .align 2 78c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .type func1e,%function 79c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnstart 80c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc1e: 81c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .save {r0, r1, r2, r3} 82c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien push {r0, r1, r2, r3} 83c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien pop {r0, r1, r2, r3} 84c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien bx lr 85c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .personality __gxx_personality_v0 86c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .handlerdata 87c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnend 88c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 89c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 90c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ The assembler should emit 0xB000 unwind opcode. 91c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 92c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: Section { 93c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: Name: .ARM.extab.TEST1 94c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: SectionData ( 95c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: 0000: 00000000 B001B100 00000000 B003B100 |................| 96c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: 0010: 00000000 B005B100 00000000 B006B100 |................| 97c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: 0020: 00000000 B00FB100 |........| 98c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: ) 99c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: } 100c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 101c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 102c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 103c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 104c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ TEST2 105c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 106c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .section .TEST2 107c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .globl func2a 108c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .align 2 109c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .type func2a,%function 110c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnstart 111c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc2a: 112c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .save {r4} 113c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien push {r4} 114c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien pop {r4} 115c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien bx lr 116c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .personality __gxx_personality_v0 117c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .handlerdata 118c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnend 119c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 120c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .globl func2b 121c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .align 2 122c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .type func2b,%function 123c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnstart 124c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc2b: 125c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .save {r4, r5} 126c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien push {r4, r5} 127c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien pop {r4, r5} 128c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien bx lr 129c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .personality __gxx_personality_v0 130c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .handlerdata 131c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnend 132c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 133c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .globl func2c 134c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .align 2 135c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .type func2c,%function 136c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnstart 137c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc2c: 138c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .save {r4, r5, r6, r7, r8, r9, r10, r11} 139c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien push {r4, r5, r6, r7, r8, r9, r10, r11} 140c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien pop {r4, r5, r6, r7, r8, r9, r10, r11} 141c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien bx lr 142c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .personality __gxx_personality_v0 143c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .handlerdata 144c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnend 145c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 146c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 147c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ The assembler should emit 0xA0 unwind opcode. 148c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 149c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: Section { 150c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: Name: .ARM.extab.TEST2 151c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: SectionData ( 152c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: 0000: 00000000 B0B0A000 00000000 B0B0A100 |................| 153c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: 0010: 00000000 B0B0A700 |........| 154c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: ) 155c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: } 156c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 157c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 158c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 159c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 160c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ TEST3 161c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 162c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .section .TEST3 163c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .globl func3a 164c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .align 2 165c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .type func3a,%function 166c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnstart 167c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc3a: 168c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .save {r4, r14} 169c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien push {r4, r14} 170c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien pop {r4, r14} 171c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien bx lr 172c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .personality __gxx_personality_v0 173c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .handlerdata 174c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnend 175c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 176c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .globl func3b 177c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .align 2 178c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .type func3b,%function 179c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnstart 180c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc3b: 181c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .save {r4, r5, r14} 182c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien push {r4, r5, r14} 183c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien pop {r4, r5, r14} 184c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien bx lr 185c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .personality __gxx_personality_v0 186c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .handlerdata 187c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnend 188c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 189c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .globl func3c 190c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .align 2 191c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .type func3c,%function 192c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnstart 193c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc3c: 194c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .save {r4, r5, r6, r7, r8, r9, r10, r11, r14} 195c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien push {r4, r5, r6, r7, r8, r9, r10, r11, r14} 196c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien pop {r4, r5, r6, r7, r8, r9, r10, r11, r14} 197c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien bx lr 198c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .personality __gxx_personality_v0 199c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .handlerdata 200c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnend 201c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 202c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 203c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ The assembler should emit 0xA8 unwind opcode. 204c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 205c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: Section { 206c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: Name: .ARM.extab.TEST3 207c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: SectionData ( 208c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: 0000: 00000000 B0B0A800 00000000 B0B0A900 |................| 209c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: 0010: 00000000 B0B0AF00 |........| 210c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: ) 211c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: } 212c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 213c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 214c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 215c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 216c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ TEST4 217c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 218c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .section .TEST4 219c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .globl func4a 220c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .align 2 221c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .type func4a,%function 222c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnstart 223c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc4a: 224c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .save {r4, r5, r6, r7, r8, r9, r10, r11, r12, r14} 225c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien push {r4, r5, r6, r7, r8, r9, r10, r11, r12, r14} 226c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien pop {r4, r5, r6, r7, r8, r9, r10, r11, r12, r14} 227c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien bx lr 228c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .personality __gxx_personality_v0 229c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .handlerdata 230c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnend 231c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 232c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .globl func4b 233c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .align 2 234c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .type func4b,%function 235c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnstart 236c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc4b: 237c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien @ Note: r7 is missing intentionally. 238c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .save {r4, r5, r6, r8, r9, r10, r11} 239c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien push {r4, r5, r6, r8, r9, r10, r11} 240c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien pop {r4, r5, r6, r8, r9, r10, r11} 241c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien bx lr 242c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .personality __gxx_personality_v0 243c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .handlerdata 244c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnend 245c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 246c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .globl func4c 247c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .align 2 248c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .type func4c,%function 249c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnstart 250c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc4c: 251c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien @ Note: r7 is missing intentionally. 252c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .save {r4, r5, r6, r8, r9, r10, r11, r14} 253c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien push {r4, r5, r6, r8, r9, r10, r11, r14} 254c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien pop {r4, r5, r6, r8, r9, r10, r11, r14} 255c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien bx lr 256c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .personality __gxx_personality_v0 257c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .handlerdata 258c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnend 259c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 260c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .globl func4d 261c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .align 2 262c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .type func4d,%function 263c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnstart 264c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc4d: 265c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien @ Note: The register list is not start with r4. 266c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .save {r5, r6, r7} 267c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien push {r5, r6, r7} 268c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien pop {r5, r6, r7} 269c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien bx lr 270c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .personality __gxx_personality_v0 271c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .handlerdata 272c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnend 273c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 274c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .globl func4e 275c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .align 2 276c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .type func4e,%function 277c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnstart 278c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc4e: 279c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien @ Note: The register list is not start with r4. 280c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .save {r5, r6, r7, r14} 281c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien push {r5, r6, r7, r14} 282c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien pop {r5, r6, r7, r14} 283c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien bx lr 284c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .personality __gxx_personality_v0 285c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .handlerdata 286c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnend 287c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 288c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 289c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ The assembler should emit 0x8000 unwind opcode. 290c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 291c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: Section { 292c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: Name: .ARM.extab.TEST4 293c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: SectionData ( 294c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: 0000: 00000000 B0FF8500 00000000 B0F78000 |................| 295c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: 0010: 00000000 B0F78400 00000000 B00E8000 |................| 296c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: 0020: 00000000 B00E8400 |........| 297c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: ) 298c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: } 29918cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien 30018cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien 30118cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien 30218cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@------------------------------------------------------------------------------- 30318cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ TEST5 30418cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@------------------------------------------------------------------------------- 30518cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien .section .TEST5 30618cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien .globl func5a 30718cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien .align 2 30818cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien .type func5a,%function 30918cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien .fnstart 31018cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chienfunc5a: 31118cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien .save {r0, r1, r2, r3, r4, r5, r6} 31218cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien push {r0, r1, r2, r3, r4, r5, r6} 31318cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien pop {r0, r1, r2, r3, r4, r5, r6} 31418cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien bx lr 31518cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien .personality __gxx_personality_v0 31618cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien .handlerdata 31718cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien .fnend 31818cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien 31918cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien .globl func5b 32018cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien .align 2 32118cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien .type func5b,%function 32218cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien .fnstart 32318cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chienfunc5b: 32418cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien .save {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r14} 32518cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien push {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r14} 32618cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien pop {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r14} 32718cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien bx lr 32818cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien .personality __gxx_personality_v0 32918cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien .handlerdata 33018cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien .fnend 33118cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien 33218cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@------------------------------------------------------------------------------- 33318cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ Check the order of unwind opcode to pop registers. 33418cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ 0xB10F "pop {r0-r3}" should be emitted before 0xA2 "pop {r4-r6}". 33518cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ 0xB10F "pop {r0-r3}" should be emitted before 0x85FF "pop {r4-r12, r14}". 33618cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@------------------------------------------------------------------------------- 33718cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK: Section { 33818cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK: Name: .ARM.extab.TEST5 33918cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK: SectionData ( 34018cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK: 0000: 00000000 A20FB100 00000000 850FB101 |................| 34118cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK: 0010: B0B0B0FF |....| 34218cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK: ) 34318cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK: } 344