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 for .setfp directive. 5c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 6c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ The .setfp directive will track the offset between the frame pointer and 7c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ the stack pointer. This is required for the function that will change 8c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ the stack pointer out of the function prologue. If the exception is thrown, 9c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ then libunwind will reconstruct the stack pointer from the frame pointer. 10c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ The reconstruction code is implemented by two different unwind opcode: 11c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ (i) the unwind opcode to copy stack offset from the other register, and 1236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines@ (ii) the unwind opcode to add or subtract the stack offset. 13c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ 14c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ This file includes several cases separated by different range of -offset 15c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ 16c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ (-offset) < 0x00 17c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ (-offset) == 0x00 18c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ 0x04 <= (-offset) <= 0x100 19c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ 0x104 <= (-offset) <= 0x200 20c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ 0x204 <= (-offset) 21c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 22c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 23c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .syntax unified 24c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 25c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 26c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ TEST1 27c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 28c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .section .TEST1 29c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .globl func1 30c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .align 2 31c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .type func1,%function 32c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnstart 33c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc1: 34c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .setfp fp, sp, #0 35c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien add fp, sp, #0 36c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien sub sp, fp, #0 37c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien bx lr 38c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .personality __gxx_personality_v0 39c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .handlerdata 40c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnend 41c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 42c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 43c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ The assembler should emit 0x9B to copy stack pointer from r11. 44c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 45c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: Section { 46c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: Name: .ARM.extab.TEST1 47c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: SectionData ( 48c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: 0000: 00000000 B0B09B00 |........| 49c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: ) 50c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: } 51c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 52c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 53c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 54c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 55c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ TEST2 56c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 57c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .section .TEST2 58c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .globl func2a 59c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .align 2 60c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .type func2a,%function 61c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnstart 62c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc2a: 63c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .setfp fp, sp, #-4 64c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien add fp, sp, #4 65c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien sub sp, fp, #4 66c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien bx lr 67c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .personality __gxx_personality_v0 68c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .handlerdata 69c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnend 70c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 71c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .globl func2b 72c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .align 2 73c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .type func2b,%function 74c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnstart 75c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc2b: 76c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .setfp fp, sp, #-0x100 77c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien add fp, sp, #0x100 78c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien sub sp, fp, #0x100 79c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien bx lr 80c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .personality __gxx_personality_v0 81c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .handlerdata 82c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnend 83c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 84c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 85c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ The assembler should emit 0x9B to copy stack pointer from r11. 86c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ The assembler should emit ((-offset - 4) >> 2) for offset. 87c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 88c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: Section { 89c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: Name: .ARM.extab.TEST2 90c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: SectionData ( 91c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: 0000: 00000000 B0009B00 00000000 B03F9B00 |.............?..| 92c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: ) 93c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: } 94c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 95c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 96c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 97c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 98c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ TEST3 99c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 100c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .section .TEST3 101c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .globl func3a 102c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .align 2 103c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .type func3a,%function 104c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnstart 105c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc3a: 106c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .setfp fp, sp, #-0x104 107c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien sub fp, sp, #0x104 108c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien add sp, fp, #0x104 109c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien bx lr 110c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .personality __gxx_personality_v0 111c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .handlerdata 112c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnend 113c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 114c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .globl func3b 115c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .align 2 116c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .type func3b,%function 117c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnstart 118c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc3b: 119c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .setfp fp, sp, #-0x200 120c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien sub fp, sp, #0x200 121c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien add sp, fp, #0x200 122c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien bx lr 123c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .personality __gxx_personality_v0 124c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .handlerdata 125c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnend 126c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 127c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 128c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ The assembler should emit 0x9B to copy stack pointer from r11. 129c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ The assembler should emit 0x3F and ((-offset - 0x104) >> 2) for offset. 130c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 131c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: Section { 132c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: Name: .ARM.extab.TEST3 133c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: SectionData ( 13418cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK: 0000: 00000000 3F009B00 00000000 3F3F9B00 |....?.......??..| 135c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: ) 136c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: } 137c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 138c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 139c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 140c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 141c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ TEST4 142c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 143c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .section .TEST4 144c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .globl func4a 145c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .align 2 146c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .type func4a,%function 147c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnstart 148c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc4a: 149c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .setfp fp, sp, #-0x204 150c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien sub fp, sp, #0x204 151c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien add sp, fp, #0x204 152c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien bx lr 153c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .personality __gxx_personality_v0 154c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .handlerdata 155c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnend 156c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 157c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .globl func4b 158c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .align 2 159c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .type func4b,%function 160c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnstart 161c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc4b: 162c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .setfp fp, sp, #-0x580 163c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien sub fp, sp, #0x580 164c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien add sp, fp, #0x580 165c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien bx lr 166c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .personality __gxx_personality_v0 167c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .handlerdata 168c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnend 169c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 170c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 171c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ The assembler should emit 0x9B to copy stack pointer from r11. 172c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ The assembler should emit 0xB2 and the ULEB128 encoding of 173c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ ((-offset - 0x204) >> 2) for offset. 174c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 175c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: Section { 176c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: Name: .ARM.extab.TEST4 177c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: SectionData ( 178c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: 0000: 00000000 00B29B00 00000000 DFB29B01 |................| 179c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: 0010: B0B0B001 |....| 180c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: ) 181c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: } 182c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 183c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 184c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 185c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 186c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ TEST5 187c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 188c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .section .TEST5 189c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .globl func5a 190c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .align 2 191c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .type func5a,%function 192c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnstart 193c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc5a: 194c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .setfp fp, sp, #0x4 195c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien add fp, sp, #0x4 196c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien sub sp, fp, #0x4 197c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien bx lr 198c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .personality __gxx_personality_v0 199c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .handlerdata 200c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnend 201c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 202c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .globl func5b 203c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .align 2 204c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .type func5b,%function 205c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnstart 206c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc5b: 207c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .setfp fp, sp, #0x104 208c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien add fp, sp, #0x104 209c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien sub sp, fp, #0x104 210c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien bx lr 211c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .personality __gxx_personality_v0 212c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .handlerdata 213c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnend 214c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 215c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .globl func5c 216c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .align 2 217c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .type func5c,%function 218c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnstart 219c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chienfunc5c: 220c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .setfp fp, sp, #0x204 221c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien add fp, sp, #0x204 222c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien sub sp, fp, #0x204 223c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien bx lr 224c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .personality __gxx_personality_v0 225c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .handlerdata 226c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien .fnend 227c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien 228c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 229c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ The assembler should emit 0x9B to copy stack pointer from r11. 230c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ The assembler should emit (0x40 | (offset - 4)) >> 2 for offset. 231c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ If (offset - 4) is greater than 0x3f, then multiple 0x7f should be emitted. 232c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@------------------------------------------------------------------------------- 233c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: Section { 234c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: Name: .ARM.extab.TEST5 235c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: SectionData ( 23618cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK: 0000: 00000000 B0409B00 00000000 7F409B00 |.....@.......@..| 23718cba562c8016f8095643b5dd8c4b34b294b62ddLogan Chien@ CHECK: 0010: 00000000 7F409B01 B0B0B07F |.....@......| 238c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: ) 239c24a374331fc97dd215937c8f0a9bf5271f39657Logan Chien@ CHECK: } 240